summaryrefslogtreecommitdiff
path: root/Paper.jl
diff options
context:
space:
mode:
Diffstat (limited to 'Paper.jl')
-rw-r--r--Paper.jl3041
1 files changed, 3041 insertions, 0 deletions
diff --git a/Paper.jl b/Paper.jl
new file mode 100644
index 0000000..b1d462f
--- /dev/null
+++ b/Paper.jl
@@ -0,0 +1,3041 @@
+### A Pluto.jl notebook ###
+# v1.0.4
+
+using Markdown
+using InteractiveUtils
+
+# ╔═╡ 82290cf0-cc7e-11f1-afb5-679eb5954384
+begin
+ using Downloads
+ using CodecZlib
+ using CSV
+ using DataFrames
+ using Dates
+ using GLM
+ using LinearAlgebra
+ using Statistics
+ using JSON
+ using CairoMakie
+ using GeoMakie
+ using FileIO
+ using ImageIO
+end
+
+# ╔═╡ f6602dd0-292c-4a63-8247-94d626d87f39
+# ╠═╡ disabled = true
+#=╠═╡
+
+ ╠═╡ =#
+
+# ╔═╡ 57fe870c-3366-4aaf-b2a3-014edf609e7a
+md"""
+# Ilmatar Energy
+
+# Alajärvi wind farm complex
+"""
+
+# ╔═╡ 88ef8628-e883-4113-abd3-080e2b2376d8
+md"""
+## Weather Stations
+- Alajarvi Moksy / Huosianmaa (02787)
+"""
+
+# ╔═╡ 5c21db41-78f6-4db7-ad1e-ff1900afdca3
+md"""
+Rather than relying on distant municipal weather stations with historical recording gaps, this analysis leverages high-precision telemetry from the Finnish Meteorological Institute (FMI) automated synoptic station at Alajärvi Möksy (02787), positioned directly at the wind park site. The sample spans January 2021 through October 2026 ($N = 2,078$ days), providing unbroken daily wind records that match the operational aerodynamic roughness of the modern 221 MW complex while offering abundant degrees of freedom for robust regression estimation.
+"""
+
+# ╔═╡ d61dc3ca-fccc-4770-af6d-aa5082c55369
+"""
+Fetch daily weather time-series for a given Meteostat station ID.
+Meteostat bulk daily files do not contain headers; columns follow the v2 standard schema.
+"""
+function fetch_meteostat_daily(station_id::String)
+ url = "https://bulk.meteostat.net/v2/daily/$(station_id).csv.gz"
+
+ # In-memory buffer for the compressed stream
+ io_buffer = IOBuffer()
+ Downloads.download(url, io_buffer)
+ seekstart(io_buffer)
+
+ # Meteostat Daily v2 standard schema
+ col_names = [
+ "date", "tavg", "tmin", "tmax", "prcp",
+ "snow", "wdir", "wspd", "wpgt", "pres", "tsun"
+ ]
+
+ # Decompress in-memory and read into DataFrame
+ decompressed = GzipDecompressorStream(io_buffer)
+ df = CSV.read(
+ decompressed,
+ DataFrame;
+ header = col_names,
+ missingstring = ["", "NA", "null"],
+ types = Dict(
+ "date" => Date,
+ "tavg" => Union{Float64, Missing},
+ "wspd" => Union{Float64, Missing},
+ "pres" => Union{Float64, Missing}
+ )
+ )
+ close(decompressed)
+
+ # Meteostat records wspd in km/h; convert to m/s for wind turbine modeling
+ df.wspd_ms = df.wspd ./ 3.6
+
+ return df
+end
+
+# ╔═╡ fc5e12f2-3978-4979-935c-0d9c83d8d2e0
+"""
+Fetch recent daily data from Meteostat's annual partition endpoint.
+Unlike the legacy v2 bulk file, these annual files include a header row.
+"""
+function fetch_meteostat_year(station_id::String, year::Int)
+ url = "https://data.meteostat.net/daily/$(year)/$(station_id).csv.gz"
+
+ io = IOBuffer()
+ try
+ Downloads.download(url, io)
+ catch e
+ @warn "Could not fetch annual data for $year: $e"
+ return DataFrame()
+ end
+ seekstart(io)
+
+ decompressed = GzipDecompressorStream(io)
+ df = CSV.read(decompressed, DataFrame)
+ close(decompressed)
+
+ # 1. Reconstruct date from split year/month/day columns
+ if :year in propertynames(df) && :month in propertynames(df) && :day in propertynames(df)
+ df.date = Date.(df.year, df.month, df.day)
+ elseif :date in propertynames(df)
+ df.date = Date.(string.(df.date))
+ else
+ error("Unrecognized date schema. Available columns: $(names(df))")
+ end
+
+ if :wspd in propertynames(df)
+ df.wspd_ms = df.wspd ./ 3.6
+ end
+
+ return df
+end
+
+# ╔═╡ faaa0eb8-be12-42a4-abf8-c9ffbb07df9a
+function fetch_station_series(station_id::String)
+ # 1. Fetch legacy archive (up to early 2026)
+ df_hist = fetch_meteostat_daily(station_id)
+
+ # 2. Fetch 2026 stream
+ df_2026 = fetch_meteostat_year(station_id, 2026)
+
+ # Standardize columns to :date and :wspd_ms
+ s_hist = select(df_hist, :date, :wspd_ms)
+ s_2026 = select(df_2026, :date, :wspd_ms)
+
+ # Combine, deduplicate, and sort
+ df_all = unique(vcat(s_hist, s_2026), :date)
+ sort!(df_all, :date)
+ return df_all
+end
+
+# ╔═╡ 02acee4c-f198-43f5-ab21-939f30969361
+df = fetch_station_series("02787") # 02787 02913
+
+# ╔═╡ 4e23c813-6e54-4f47-9345-40d6a698913e
+last(df, 5)
+
+# ╔═╡ 2f2ad881-4177-462c-b2e3-6c2ebc9d8fa1
+let
+ df_valid = dropmissing(df, :wspd_ms)
+ println("First non-missing wind record: ", minimum(df_valid.date))
+ println("Last non-missing wind record: ", maximum(df_valid.date))
+ println("Total days with wind data: ", nrow(df_valid))
+end
+
+# ╔═╡ 7a3ad16b-4d08-434e-82dd-23f186aa1d9b
+let
+ # 1. Synchronize the start boundary to the first recorded date
+ start_date = Date(2021, 1, 2)
+ df_valid = filter(r -> r.date >= start_date && !ismissing(r.wspd_ms), df)
+ end_date = maximum(df_valid.date) # 2026-10-14
+
+ # 2. Build continuous calendar grid
+ all_dates = DataFrame(date = collect(start_date:Day(1):end_date))
+
+ # 3. Identify missing dates
+ missing_dates_df = antijoin(all_dates, df_valid, on = :date)
+ sort!(missing_dates_df, :date)
+
+ total_expected = nrow(all_dates)
+ total_valid = nrow(df_valid)
+ total_missing = nrow(missing_dates_df)
+ completeness = round(total_valid / total_expected * 100, digits = 2)
+
+ println("--- Overview ($start_date to $end_date) ---")
+ println("Expected Calendar Days: ", total_expected)
+ println("Recorded Days (Valid): ", total_valid)
+ println("Total Days Missing: ", total_missing, " ($completeness% complete)\n")
+
+ # 4. Group missing dates into contiguous streaks
+ if total_missing > 0
+ missing_dates = missing_dates_df.date
+ streaks = DataFrame(start_date = Date[], end_date = Date[], days_lost = Int[])
+
+ cur_start = missing_dates[1]
+ cur_prev = missing_dates[1]
+
+ for d in missing_dates[2:end]
+ if d == cur_prev + Day(1)
+ cur_prev = d
+ else
+ push!(streaks, (cur_start, cur_prev, Dates.value(cur_prev - cur_start) + 1))
+ cur_start = d
+ cur_prev = d
+ end
+ end
+ push!(streaks, (cur_start, cur_prev, Dates.value(cur_prev - cur_start) + 1))
+
+ # 5. Annual breakdown
+ missing_dates_df.year = Dates.year.(missing_dates_df.date)
+ annual_summary = combine(groupby(missing_dates_df, :year), nrow => :missing_days)
+
+ (
+ Annual_Missing = annual_summary,
+ Contiguous_Gaps = sort(streaks, :days_lost, rev = true),
+ All_Missing_Dates = missing_dates_df.date
+ )
+ else
+ "No missing days found!"
+ end
+end
+
+# ╔═╡ 76184222-dd79-4e3b-877a-8eced64fe6ae
+df_target_clean = let
+ # Continuous calendar sequence from the first non-missing day
+ full_calendar = DataFrame(date = collect(Date(2021, 1, 2):Day(1):Date(2026, 10, 14)))
+
+ # Merge valid records
+ raw_valid = filter(r -> r.date >= Date(2021, 1, 2) && !ismissing(r.wspd_ms), df)
+ merged = leftjoin(full_calendar, select(raw_valid, :date, :wspd_ms => :wind_target), on = :date)
+
+ # Linear interpolation across isolated missing days
+ w = merged.wind_target
+ for i in 1:length(w)
+ if ismissing(w[i])
+ prev_idx = findlast(!ismissing, w[1:i-1])
+ next_offset = findfirst(!ismissing, w[i+1:end])
+ next_idx = isnothing(next_offset) ? nothing : i + next_offset
+
+ if !isnothing(prev_idx) && !isnothing(next_idx)
+ p_val, n_val = w[prev_idx], w[next_idx]
+ w[i] = p_val + (n_val - p_val) * (i - prev_idx) / (next_idx - prev_idx)
+ elseif !isnothing(prev_idx)
+ w[i] = w[prev_idx]
+ end
+ end
+ end
+ merged.wind_target = Float64.(w)
+ merged
+end
+
+# ╔═╡ c9c823ad-9875-4efa-82b4-d6189a141b12
+network_master_df = let
+ predictors = Dict(
+ # Inner Ring (~30-80 km)
+ :inner_N => "02725", # Halsua Purola
+ :inner_E => "02915", # Viitasaari
+ :inner_S => "02924", # Ähtäri
+ :inner_W => "02913", # Kauhava
+
+ # Outer Ring (~200-400 km)
+ :outer_N => "02875", # Oulu
+ :outer_E => "02917", # Kuopio
+ :outer_S => "02974", # Helsinki-Vantaa
+ :outer_W => "02286", # Umeå
+ )
+
+ df_net = copy(df_target_clean)
+
+ for (role, st_id) in predictors
+ st_data = filter(r -> r.date >= Date(2021, 1, 2), fetch_station_series(st_id))
+ rename!(st_data, :wspd_ms => Symbol("wind_", role))
+ df_net = leftjoin(df_net, select(st_data, :date, Symbol("wind_", role)), on = :date)
+ end
+
+ # Drop rows where any predictor has missing records to guarantee a balanced regression panel
+ dropmissing!(df_net)
+ sort!(df_net, :date)
+ df_net
+end
+
+# ╔═╡ 3b777682-5faa-47c6-bd70-98a06f368d1a
+begin
+ n_days = nrow(network_master_df)
+
+ model_df = DataFrame(
+ date = network_master_df.date[3:end],
+ target = network_master_df.wind_target[3:end],
+
+ # Target Autoregressive memory
+ lag1_target = network_master_df.wind_target[2:end-1],
+ lag2_target = network_master_df.wind_target[1:end-2],
+
+ # Inner Ring (t-1 and t-2)
+ lag1_inner_N = network_master_df.wind_inner_N[2:end-1],
+ lag2_inner_N = network_master_df.wind_inner_N[1:end-2],
+ lag1_inner_E = network_master_df.wind_inner_E[2:end-1],
+ lag2_inner_E = network_master_df.wind_inner_E[1:end-2],
+ lag1_inner_S = network_master_df.wind_inner_S[2:end-1],
+ lag2_inner_S = network_master_df.wind_inner_S[1:end-2],
+ lag1_inner_W = network_master_df.wind_inner_W[2:end-1],
+ lag2_inner_W = network_master_df.wind_inner_W[1:end-2],
+
+ # Outer Ring (t-1 and t-2)
+ lag1_outer_N = network_master_df.wind_outer_N[2:end-1],
+ lag2_outer_N = network_master_df.wind_outer_N[1:end-2],
+ lag1_outer_E = network_master_df.wind_outer_E[2:end-1],
+ lag2_outer_E = network_master_df.wind_outer_E[1:end-2],
+ lag1_outer_S = network_master_df.wind_outer_S[2:end-1],
+ lag2_outer_S = network_master_df.wind_outer_S[1:end-2],
+ lag1_outer_W = network_master_df.wind_outer_W[2:end-1],
+ lag2_outer_W = network_master_df.wind_outer_W[1:end-2]
+ )
+
+ const latest_date = maximum(model_df.date)
+ const split_date = latest_date - Day(365)
+
+ train_df = filter(r -> r.date <= split_date, model_df)
+ holdout_df = filter(r -> r.date > split_date, model_df)
+
+ println("Training: ", nrow(train_df), " days | Holdout: ", nrow(holdout_df), " days")
+end
+
+# ╔═╡ c126fdcc-e149-4834-af5c-503465ffdede
+# fit_model0_and_model1
+begin
+ # --- Model 0: Baseline Persistence (Y_t = Y_{t-1}) ---
+ m0_preds = holdout_df.lag1_target
+ m0_errors = holdout_df.target .- m0_preds
+ m0_mae = mean(abs.(m0_errors))
+ m0_rmse = sqrt(mean(m0_errors.^2))
+
+ # --- Model 1: Static 4-Direction OLS ---
+ formula_m1 = @formula(target ~ lag1_target + lag2_target +
+ lag1_inner_W + lag2_inner_W +
+ lag1_inner_N + lag2_inner_N +
+ lag1_inner_E + lag2_inner_E +
+ lag1_inner_S + lag2_inner_S)
+
+ ols_m1 = lm(formula_m1, train_df)
+
+ m1_preds = predict(ols_m1, holdout_df)
+ m1_errors = holdout_df.target .- m1_preds
+ m1_mae = mean(abs.(m1_errors))
+ m1_rmse = sqrt(mean(m1_errors.^2))
+
+ (
+ Baseline_M0 = (Holdout_MAE = round(m0_mae, digits=3), Holdout_RMSE = round(m0_rmse, digits=3)),
+ Static_M1 = (Train_R2 = round(r2(ols_m1), digits=4), Adj_R2 = round(adjr2(ols_m1), digits=4),
+ Holdout_MAE = round(m1_mae, digits=3), Holdout_RMSE = round(m1_rmse, digits=3))
+ )
+end
+
+# ╔═╡ 7aa0f225-948d-4d1f-8b5a-2262f879783b
+# fit_model2_dynamic
+begin
+ # All 18 lagged features (2 target lags + 16 station lags)
+ feature_symbols = [
+ :lag1_target, :lag2_target,
+ :lag1_inner_N, :lag2_inner_N, :lag1_inner_E, :lag2_inner_E,
+ :lag1_inner_S, :lag2_inner_S, :lag1_inner_W, :lag2_inner_W,
+ :lag1_outer_N, :lag2_outer_N, :lag1_outer_E, :lag2_outer_E,
+ :lag1_outer_S, :lag2_outer_S, :lag1_outer_W, :lag2_outer_W
+ ]
+
+ X_mat = hcat(ones(nrow(model_df)), Matrix(model_df[:, feature_symbols]))
+ y_vec = Vector(model_df.target)
+
+ window_len = 365
+ n_total = nrow(model_df)
+ m2_all_preds = fill(NaN, n_total)
+ beta_history = fill(NaN, n_total, size(X_mat, 2))
+
+ for t in (window_len + 1):n_total
+ # Trailing 365-day calibration window
+ X_w = X_mat[(t - window_len):(t - 1), :]
+ y_w = y_vec[(t - window_len):(t - 1)]
+
+ # Closed-form OLS solution via QR decomposition
+ b_t = X_w \ y_w
+ beta_history[t, :] = b_t
+
+ # 1-day ahead out-of-sample prediction
+ m2_all_preds[t] = dot(X_mat[t, :], b_t)
+ end
+
+ model_df.pred_m2 = m2_all_preds
+
+ # Evaluate Model 2 strictly over the exact same holdout period
+ m2_holdout = filter(r -> r.date in holdout_df.date, model_df)
+ m2_errors = m2_holdout.target .- m2_holdout.pred_m2
+ m2_mae = mean(abs.(m2_errors))
+ m2_rmse = sqrt(mean(m2_errors.^2))
+
+ (Holdout_MAE = round(m2_mae, digits=3), Holdout_RMSE = round(m2_rmse, digits=3))
+end
+
+# ╔═╡ 4aa84d18-d2ec-4219-b85d-6ba5e08bc7e8
+# inspect_m1_coefficients
+coeftable(ols_m1)
+
+# ╔═╡ 73ed2f4e-38d7-4f64-9ac7-b53acc046200
+# model2_coefficient_summary
+let
+ # All 19 parameter names (Intercept + 18 lagged features)
+ param_names = vcat(
+ :Intercept,
+ [
+ :lag1_target, :lag2_target,
+ :lag1_inner_N, :lag2_inner_N, :lag1_inner_E, :lag2_inner_E,
+ :lag1_inner_S, :lag2_inner_S, :lag1_inner_W, :lag2_inner_W,
+ :lag1_outer_N, :lag2_outer_N, :lag1_outer_E, :lag2_outer_E,
+ :lag1_outer_S, :lag2_outer_S, :lag1_outer_W, :lag2_outer_W
+ ]
+ )
+
+ # Filter only rows where the rolling window had enough history (non-NaN)
+ valid_mask = .!isnan.(beta_history[:, 1])
+ valid_betas = beta_history[valid_mask, :]
+
+ # Calculate distribution metrics across all estimation windows
+ summary_df = DataFrame(
+ Parameter = param_names,
+ Mean_Beta = [round(mean(valid_betas[:, j]), digits = 4) for j in 1:length(param_names)],
+ Std_Beta = [round(std(valid_betas[:, j]), digits = 4) for j in 1:length(param_names)],
+ Min_Beta = [round(minimum(valid_betas[:, j]), digits = 4) for j in 1:length(param_names)],
+ Max_Beta = [round(maximum(valid_betas[:, j]), digits = 4) for j in 1:length(param_names)]
+ )
+
+ summary_df
+end
+
+# ╔═╡ 92ea415f-c0d8-4f98-8981-a6680e0999d7
+# model2_latest_snapshot
+let
+ param_names = vcat(
+ :Intercept,
+ [
+ :lag1_target, :lag2_target,
+ :lag1_inner_W, :lag2_inner_W, :lag1_inner_N, :lag2_inner_N,
+ :lag1_inner_E, :lag2_inner_E, :lag1_inner_S, :lag2_inner_S,
+ :lag1_outer_W, :lag2_outer_W, :lag1_outer_SW, :lag2_outer_SW,
+ :lag1_outer_N, :lag2_outer_N, :lag1_outer_S, :lag2_outer_S
+ ]
+ )
+
+ latest_betas = beta_history[end, :]
+
+ DataFrame(
+ Parameter = param_names,
+ Active_Weight = round.(latest_betas, digits = 4)
+ )
+end
+
+# ╔═╡ 399edbd0-61e2-4c72-a3a0-a1147cf868fc
+# model2_seasonal_shift
+let
+ valid_mask = .!isnan.(beta_history[:, 1])
+ valid_dates = model_df.date[valid_mask]
+ valid_betas = beta_history[valid_mask, :]
+
+ months = Dates.month.(valid_dates)
+ winter_mask = (months .== 12) .| (months .== 1) .| (months .== 2)
+ summer_mask = (months .== 6) .| (months .== 7) .| (months .== 8)
+
+ param_names = vcat(
+ :Intercept,
+ [
+ :lag1_target, :lag2_target,
+ :lag1_inner_W, :lag2_inner_W, :lag1_inner_N, :lag2_inner_N,
+ :lag1_inner_E, :lag2_inner_E, :lag1_inner_S, :lag2_inner_S,
+ :lag1_outer_W, :lag2_outer_W, :lag1_outer_SW, :lag2_outer_SW,
+ :lag1_outer_N, :lag2_outer_N, :lag1_outer_S, :lag2_outer_S
+ ]
+ )
+
+ DataFrame(
+ Parameter = param_names,
+ Winter_Mean = [round(mean(valid_betas[winter_mask, j]), digits = 4) for j in 1:length(param_names)],
+ Summer_Mean = [round(mean(valid_betas[summer_mask, j]), digits = 4) for j in 1:length(param_names)],
+ Seasonal_Δ = [round(mean(valid_betas[winter_mask, j]) - mean(valid_betas[summer_mask, j]), digits = 4) for j in 1:length(param_names)]
+ )
+end
+
+# ╔═╡ f0f55d3a-7a07-4e84-bf6a-178150a2b71c
+# model_comparison_summary
+let
+ y_true = holdout_df.target
+
+ # 1. Predictions aligned to the exact holdout sample
+ y_m0 = holdout_df.lag1_target
+ y_m1 = predict(ols_m1, holdout_df)
+
+ m2_holdout = filter(r -> r.date in holdout_df.date, model_df)
+ y_m2 = m2_holdout.pred_m2
+
+ # 2. Metric calculation helper
+ calc_metrics(y_hat, label) = begin
+ err = y_true .- y_hat
+ mae = mean(abs.(err))
+ rmse = sqrt(mean(err.^2))
+ (Model = label, Holdout_MAE = round(mae, digits=3), Holdout_RMSE = round(rmse, digits=3))
+ end
+
+ m0 = calc_metrics(y_m0, "Baseline M0 (Persistence)")
+ m1 = calc_metrics(y_m1, "Static OLS M1 (Inner Ring)")
+ m2 = calc_metrics(y_m2, "Dynamic OLS M2 (Rolling 365d)")
+
+ df_comp = DataFrame([m0, m1, m2])
+
+ # 3. Add percentage gains over persistence baseline
+ base_mae = df_comp.Holdout_MAE[1]
+ base_rmse = df_comp.Holdout_RMSE[1]
+
+ df_comp.MAE_Reduction = [
+ "-",
+ "$(round((1 - df_comp.Holdout_MAE[2] / base_mae) * 100, digits=1))%",
+ "$(round((1 - df_comp.Holdout_MAE[3] / base_mae) * 100, digits=1))%"
+ ]
+ df_comp.RMSE_Reduction = [
+ "-",
+ "$(round((1 - df_comp.Holdout_RMSE[2] / base_rmse) * 100, digits=1))%",
+ "$(round((1 - df_comp.Holdout_RMSE[3] / base_rmse) * 100, digits=1))%"
+ ]
+
+ df_comp
+end
+
+# ╔═╡ da1115e1-76c3-4c35-a6f3-9714b4263dea
+# fetch_station_locations
+function fetch_station_metadata(station_ids::Vector{String})
+ url = "https://bulk.meteostat.net/v2/stations/lite.json.gz"
+
+ io = IOBuffer()
+ Downloads.download(url, io)
+ seekstart(io)
+
+ decompressed = GzipDecompressorStream(io)
+ raw_stations = JSON.parse(decompressed)
+ close(decompressed)
+
+ id_set = Set(station_ids)
+ matched = filter(s -> get(s, "id", "") in id_set, raw_stations)
+
+ rows = map(matched) do s
+ loc = get(s, "location", Dict())
+
+ # Robust multilingual name parser (handles "en", "fi", or any available key)
+ raw_name = get(s, "name", "")
+ clean_name = if raw_name isa AbstractDict
+ haskey(raw_name, "en") ? raw_name["en"] :
+ haskey(raw_name, "fi") ? raw_name["fi"] :
+ (isempty(raw_name) ? "Unknown" : first(values(raw_name)))
+ else
+ string(raw_name)
+ end
+
+ (
+ id = string(s["id"]),
+ name = clean_name,
+ country = string(get(s, "country", "")),
+ lat = Float64(loc["latitude"]),
+ lon = Float64(loc["longitude"]),
+ elevation = haskey(loc, "elevation") && !isnothing(loc["elevation"]) ?
+ Float64(loc["elevation"]) : missing
+ )
+ end
+
+ return DataFrame(rows)
+end
+
+# ╔═╡ b0f27193-5c75-48b5-9bac-044089da7443
+df_coords = begin
+ target_ids = [
+ "02787", # Target: Alajärvi Möksy
+ "02725", # Inner N: Halsua Purola
+ "02915", # Inner E: Viitasaari Haapaniemi
+ "02924", # Inner S: Ähtäri
+ "02913", # Inner W: Kauhava
+ "02875", # Outer N: Oulu
+ "02917", # Outer E: Kuopio
+ "02974", # Outer S: Helsinki-Vantaa
+ "02286" # Outer W: Umeå (Sweden)
+ ]
+
+ coords = fetch_station_metadata(target_ids)
+ coords.role = map(coords.id) do id
+ id == "02787" ? :target :
+ id in ["02725", "02915", "02924", "02913"] ? :inner : :outer
+ end
+ sort!(coords, :id)
+end
+
+# ╔═╡ fea4b109-3036-4819-94b4-a0a90626b3fb
+# plot_figure1_executive_basemap
+begin
+ # =========================================================================
+ # 1. BASEMAP THEME SELECTOR
+ # Options: :light_gray (Recommended for papers), :topo, :streets, :terrain, :satellite, :osm
+ # =========================================================================
+ basemap_choice = :light_gray
+
+ basemap_endpoints = Dict(
+ :light_gray => "https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer/export",
+ :topo => "https://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/export",
+ :streets => "https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/export",
+ :terrain => "https://services.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer/export",
+ :satellite => "https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/export",
+ :osm => "https://services.arcgisonline.com/arcgis/rest/services/OpenStreetMap/MapServer/export"
+ )
+
+ # =========================================================================
+ # 2. BOUNDING BOX & SQUARE GEOMETRY CALIBRATION
+ # lon_max extended to 29.6 to provide full margin for Kuopio (27.63°E)
+ # Coordinates calibrated so that ΔX (Mercator) ≈ ΔY (Mercator) -> 1:1 Square
+ # =========================================================================
+ lon_min, lon_max = 17.6, 29.6
+ lat_min, lat_max = 59.7, 65.7
+
+ lon2x(lon) = lon * 20037508.34 / 180.0
+ lat2y(lat) = log(tan((90.0 + lat) * pi / 360.0)) * 20037508.34 / pi
+
+ xmin, xmax = lon2x(lon_min), lon2x(lon_max)
+ ymin, ymax = lat2y(lat_min), lat2y(lat_max)
+
+ # Square dimension layout
+ fig_w = 520
+ fig_h = 520
+ export_scale = 3 # 3x supersampling for publication-grade vector sharpness
+ srv_w = fig_w * export_scale
+ srv_h = fig_h * export_scale
+
+ base_url = basemap_endpoints[basemap_choice]
+ map_url = "$(base_url)?bbox=$(xmin),$(ymin),$(xmax),$(ymax)&bboxSR=3857&imageSR=3857&size=$(srv_w),$(srv_h)&f=image"
+
+ io_map = IOBuffer()
+ Downloads.download(map_url, io_map)
+ seekstart(io_map)
+ basemap_img = rotr90(FileIO.load(io_map))
+ close(io_map)
+
+ st_x = lon2x.(df_coords.lon)
+ st_y = lat2y.(df_coords.lat)
+
+ # =========================================================================
+ # 3. FIGURE & AXIS SETUP
+ # =========================================================================
+ fig1 = Figure(
+ size = (fig_w, fig_h),
+ fonts = (;
+ regular = "Inter",
+ bold = "Inter Bold",
+ semibold = "Inter SemiBold"
+ ),
+ fontsize = 9.5
+ )
+
+ ax = Axis(
+ fig1[1, 1],
+ # title = "Ilmatar Alajärvi Wind Farm: Regional Telemetry & Synoptic Arrays",
+ # titlesize = 11.0,
+ titlefont = :bold,
+ aspect = DataAspect()
+ )
+
+ hidedecorations!(ax)
+ hidespines!(ax)
+
+ # Render Basemap Layer
+ image!(ax, xmin..xmax, ymin..ymax, basemap_img)
+
+ # Coordinates of Target Station (Alajärvi Möksy)
+ target_idx = findfirst(==( "02787"), df_coords.id)
+ tx, ty = st_x[target_idx], st_y[target_idx]
+
+ # =========================================================================
+ # 4. SYNOPTIC TELEMETRY VECTORS (SPATIAL ARCS)
+ # =========================================================================
+ for i in 1:nrow(df_coords)
+ if i != target_idx
+ is_inner = df_coords.role[i] == :inner
+ # Inner: Cobalt Blue dashed vector | Outer: Deep Rust dashed vector
+ lines!(
+ ax, [st_x[i], tx], [st_y[i], ty];
+ color = is_inner ? (:royalblue, 0.85) : (colorant"#b45309", 0.75),
+ linestyle = is_inner ? :dash : :dot,
+ linewidth = is_inner ? 1.4 : 1.2
+ )
+ end
+ end
+
+ inner_mask = df_coords.role .== :inner
+ outer_mask = df_coords.role .== :outer
+
+ # =========================================================================
+ # 5. STATION MARKERS WITH CONTRAST HALOS
+ # =========================================================================
+ # Outer Synoptic Array: Deep Tangerine/Burnt Amber with white outline
+ scatter!(
+ ax, st_x[outer_mask], st_y[outer_mask];
+ color = "#ea580c",
+ markersize = 9.5,
+ strokewidth = 1.4,
+ strokecolor = :white,
+ label = "Outer Synoptic Array (~200–400 km)"
+ )
+
+ # Inner Ring Array: Deep Royal Blue with white outline
+ scatter!(
+ ax, st_x[inner_mask], st_y[inner_mask];
+ color = "#1d4ed8",
+ markersize = 9.5,
+ strokewidth = 1.4,
+ strokecolor = :white,
+ label = "Inner Ring Array (~30–80 km)"
+ )
+
+ # Target Asset Marker: Layered Executive Concentric Reticle (Bullseye)
+ # 1. Outer accent ring
+ scatter!(
+ ax, [tx], [ty];
+ color = (:crimson, 0.20),
+ markersize = 22,
+ strokewidth = 0
+ )
+ # 2. Main target ring with sharp white border
+ scatter!(
+ ax, [tx], [ty];
+ color = :crimson,
+ marker = :circle,
+ markersize = 13,
+ strokewidth = 1.8,
+ strokecolor = :white,
+ label = "Target Asset: Alajärvi Möksy"
+ )
+ # 3. Inner core center dot
+ scatter!(
+ ax, [tx], [ty];
+ color = :white,
+ marker = :circle,
+ markersize = 4.5,
+ strokewidth = 0
+ )
+
+ # =========================================================================
+ # 6. CARTOGRAPHIC LABELS (Optimized for square extent)
+ # =========================================================================
+ for i in 1:nrow(df_coords)
+ id = df_coords.id[i]
+ name = df_coords.name[i]
+
+ offset = offset = if id == "02787"
+ (7, 7)
+ elseif id == "02286" # Umeå (Swedish coast)
+ (-74, -2)
+ elseif id == "02913" # Kauhava
+ (-54, 4)
+ elseif id == "02725" # Halsua Purola
+ (8, 6)
+ elseif id == "02924" # Ähtäri
+ (8, -4)
+ elseif id == "02915" # Viitasaari
+ (10, -6)
+ elseif id == "02917" # Kuopio (Safely inside map margin)
+ (8, 2)
+ elseif id == "02875" # Oulu
+ (8, 5)
+ elseif id == "02974" # Helsinki-Vantaa
+ (8, 2)
+ else
+ (6, 4)
+ end
+
+ lbl = id == "02787" ? "Alajärvi Möksy" : name
+
+ text!(
+ ax, st_x[i], st_y[i];
+ text = lbl,
+ fontsize = id == "02787" ? 9.5 : 8.0,
+ font = id == "02787" ? :bold : :semibold,
+ color = "#0f172a",
+ offset = offset
+ )
+ end
+
+ # Clean executive legend
+ axislegend(
+ ax,
+ position = :lt,
+ framevisible = true,
+ backgroundcolor = (:white, 0.92),
+ framecolor = "#94a3b8",
+ framewidth = 0.8,
+ padding = (6, 6, 5, 5),
+ labelsize = 8.0,
+ patchsize = (12.0, 8.0)
+ )
+
+ # Save vector PDF directly
+ save("Figure1_Station_Network.pdf", fig1; pt_per_unit = 1.0)
+ fig1
+end
+
+# ╔═╡ 3c3ed324-b766-4061-98dc-548a4b71694d
+let
+ slice_mask = Date(2025, 11, 1) .<= model_df.date .<= Date(2025, 12, 5)
+ df_slice = filter(r -> r.date in model_df.date[slice_mask], model_df)
+
+ holdout_payload = Dict(
+ "dates" => string.(df_slice.date),
+ "actual" => round.(df_slice.target, digits = 2),
+ "m0_pred" => round.(df_slice.lag1_target, digits = 2),
+ "m1_pred" => round.(predict(ols_m1, df_slice), digits = 2), # Evaluated dynamically from fitted OLS M1
+ "m2_pred" => round.(df_slice.pred_m2, digits = 2) # Dynamic 365-day rolling walk-forward
+ )
+
+ open("holdout_series.json", "w") do f
+ JSON.print(f, holdout_payload)
+ end
+end
+
+# ╔═╡ 9cbf0393-130e-4e6e-a1fc-f0566feec3e3
+# 2. Dynamic Seasonal Parameter Drift (Computed directly from beta_history)
+let
+ valid_mask = .!isnan.(beta_history[:, 1])
+ valid_dates = model_df.date[valid_mask]
+ valid_betas = beta_history[valid_mask, :]
+
+ months = Dates.month.(valid_dates)
+ winter_mask = (months .== 12) .| (months .== 1) .| (months .== 2)
+ summer_mask = (months .== 6) .| (months .== 7) .| (months .== 8)
+
+ # Ties directly to feature_symbols to guarantee 1:1 column index alignment with X_mat
+ param_names = vcat(:Intercept, feature_symbols)
+
+ seasonal_payload = [
+ Dict(
+ "param" => string(param_names[j]),
+ "winter" => round(mean(valid_betas[winter_mask, j]), digits = 4),
+ "summer" => round(mean(valid_betas[summer_mask, j]), digits = 4),
+ "seasonal_del" => round(mean(valid_betas[winter_mask, j]) - mean(valid_betas[summer_mask, j]), digits = 4)
+ )
+ for j in 1:length(param_names)
+ if param_names[j] != :Intercept # Drops Intercept to focus exclusively on lagged features
+ ]
+
+ open("seasonal_betas.json", "w") do f
+ JSON.print(f, seasonal_payload)
+ end
+end
+
+# ╔═╡ 00000000-0000-0000-0000-000000000001
+PLUTO_PROJECT_TOML_CONTENTS = """
+[deps]
+CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
+CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
+CodecZlib = "944b1d66-785c-5afd-91f1-9de20f533193"
+DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
+Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
+Downloads = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
+FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
+GLM = "38e38edf-8417-5370-95a0-9cbb8c7f171a"
+GeoMakie = "db073c08-6b98-4ee5-b6a4-5efafb3259c6"
+ImageIO = "82e4d734-157c-48bb-816b-45c225c6df19"
+JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
+LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
+
+[compat]
+CSV = "~0.10.17"
+CairoMakie = "=0.15.15"
+CodecZlib = "~0.7.9"
+DataFrames = "~1.8.2"
+FileIO = "~1.20.0"
+GLM = "~1.9.5"
+GeoMakie = "=0.7.17"
+ImageIO = "~0.6.10"
+JSON = "~1.11.0"
+"""
+
+# ╔═╡ 00000000-0000-0000-0000-000000000002
+PLUTO_MANIFEST_TOML_CONTENTS = """
+# This file is machine-generated - editing it directly is not advised
+
+julia_version = "1.13.2"
+manifest_format = "2.1"
+project_hash = "255e0876b0719415c810abd5c5c060b89f136fdc"
+
+[[deps.AbstractFFTs]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef"
+registries = "General"
+uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
+version = "1.5.0"
+
+ [deps.AbstractFFTs.extensions]
+ AbstractFFTsChainRulesCoreExt = "ChainRulesCore"
+ AbstractFFTsTestExt = "Test"
+
+ [deps.AbstractFFTs.weakdeps]
+ ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[deps.AbstractTrees]]
+git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177"
+registries = "General"
+uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
+version = "0.4.5"
+
+[[deps.Accessors]]
+deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"]
+git-tree-sha1 = "7063ad1083578215c7c4bf410368150abe8d5524"
+registries = "General"
+uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697"
+version = "0.1.45"
+
+ [deps.Accessors.extensions]
+ AxisKeysExt = "AxisKeys"
+ IntervalSetsExt = "IntervalSets"
+ LinearAlgebraExt = "LinearAlgebra"
+ StaticArraysExt = "StaticArrays"
+ StructArraysExt = "StructArrays"
+ TestExt = "Test"
+ UnitfulExt = "Unitful"
+
+ [deps.Accessors.weakdeps]
+ AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5"
+ IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
+ LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
+ StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
+ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+ Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
+
+[[deps.Adapt]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "dee8388a9bec89c8713ad176f96960ae2f98598a"
+registries = "General"
+uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
+version = "4.7.4"
+weakdeps = ["SparseArrays", "StaticArrays"]
+
+ [deps.Adapt.extensions]
+ AdaptSparseArraysExt = "SparseArrays"
+ AdaptStaticArraysExt = "StaticArrays"
+
+[[deps.AdaptivePredicates]]
+git-tree-sha1 = "7e651ea8d262d2d74ce75fdf47c4d63c07dba7a6"
+registries = "General"
+uuid = "35492f91-a3bd-45ad-95db-fcad7dcfedb7"
+version = "1.2.0"
+
+[[deps.AliasTables]]
+deps = ["PtrArrays", "Random"]
+git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff"
+registries = "General"
+uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8"
+version = "1.1.3"
+
+[[deps.Animations]]
+deps = ["Colors"]
+git-tree-sha1 = "e092fa223bf66a3c41f9c022bd074d916dc303e7"
+registries = "General"
+uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340"
+version = "0.4.2"
+
+[[deps.ArgTools]]
+uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
+version = "1.1.2"
+
+[[deps.Artifacts]]
+uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
+version = "1.11.0"
+
+[[deps.Automa]]
+deps = ["PrecompileTools", "TranscodingStreams"]
+git-tree-sha1 = "94eab0b3ccdcac361188cc661daf69d4433c1818"
+registries = "General"
+uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b"
+version = "1.2.0"
+
+[[deps.AxisAlgorithms]]
+deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"]
+git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712"
+registries = "General"
+uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950"
+version = "1.1.0"
+
+[[deps.AxisArrays]]
+deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"]
+git-tree-sha1 = "4126b08903b777c88edf1754288144a0492c05ad"
+registries = "General"
+uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9"
+version = "0.4.8"
+
+[[deps.Base64]]
+uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
+version = "1.11.0"
+
+[[deps.BaseDirs]]
+git-tree-sha1 = "8c290a1b223deaeea9aea44b235d24546da8eb98"
+registries = "General"
+uuid = "18cc8868-cbac-4acf-b575-c8ff214dc66f"
+version = "1.4.0"
+
+[[deps.Bzip2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e"
+registries = "General"
+uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
+version = "1.0.9+0"
+
+[[deps.CEnum]]
+git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc"
+registries = "General"
+uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
+version = "0.5.0"
+
+[[deps.CRC32c]]
+uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc"
+version = "1.11.0"
+
+[[deps.CRlibm]]
+deps = ["CRlibm_jll"]
+git-tree-sha1 = "66188d9d103b92b6cd705214242e27f5737a1e5e"
+registries = "General"
+uuid = "96374032-68de-5a5b-8d9e-752f78720389"
+version = "1.0.2"
+
+[[deps.CRlibm_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc"
+registries = "General"
+uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0"
+version = "1.0.1+0"
+
+[[deps.CSV]]
+deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"]
+git-tree-sha1 = "abed1e735dd4152f48c90cf0767e1790e25f332f"
+registries = "General"
+uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
+version = "0.10.17"
+
+[[deps.Cairo]]
+deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"]
+git-tree-sha1 = "71aa551c5c33f1a4415867fe06b7844faadb0ae9"
+registries = "General"
+uuid = "159f3aea-2a34-519c-b102-8c37f9878175"
+version = "1.1.1"
+
+[[deps.CairoMakie]]
+deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"]
+git-tree-sha1 = "1cda0b7d5abfc95357dae18aca934d401f7869ad"
+registries = "General"
+uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
+version = "0.15.15"
+
+[[deps.Cairo_jll]]
+deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
+git-tree-sha1 = "0cfb779e24fdced77a05df1dbe99200821a9f563"
+registries = "General"
+uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
+version = "1.18.8+1"
+
+[[deps.ChainRulesCore]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "4378c3544d8fcc3c8a521782db0e93e2c32d1838"
+registries = "General"
+uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+version = "1.26.4"
+weakdeps = ["SparseArrays"]
+
+ [deps.ChainRulesCore.extensions]
+ ChainRulesCoreSparseArraysExt = "SparseArrays"
+
+[[deps.CodecZlib]]
+deps = ["TranscodingStreams", "Zlib_jll"]
+git-tree-sha1 = "970758a3d591a2a5c2a907c53f2e2f8c1b1d3537"
+registries = "General"
+uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
+version = "0.7.9"
+
+[[deps.CodecZstd]]
+deps = ["TranscodingStreams", "Zstd_jll"]
+git-tree-sha1 = "da54a6cd93c54950c15adf1d336cfd7d71f51a56"
+registries = "General"
+uuid = "6b39b394-51ab-5f42-8807-6242bab2b4c2"
+version = "0.8.7"
+
+[[deps.ColorBrewer]]
+deps = ["Colors", "JSON"]
+git-tree-sha1 = "07da79661b919001e6863b81fc572497daa58349"
+registries = "General"
+uuid = "a2cac450-b92f-5266-8821-25eda20663c8"
+version = "0.4.2"
+
+[[deps.ColorSchemes]]
+deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"]
+git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34"
+registries = "General"
+uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
+version = "3.31.0"
+
+[[deps.ColorTypes]]
+deps = ["FixedPointNumbers", "Random"]
+git-tree-sha1 = "a7cf827a79b378a381e31e5c7feca853ec19cb94"
+registries = "General"
+uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
+version = "0.12.4"
+weakdeps = ["StyledStrings"]
+
+ [deps.ColorTypes.extensions]
+ StyledStringsExt = "StyledStrings"
+
+[[deps.ColorVectorSpace]]
+deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"]
+git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1"
+registries = "General"
+uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4"
+version = "0.11.0"
+weakdeps = ["SpecialFunctions"]
+
+ [deps.ColorVectorSpace.extensions]
+ SpecialFunctionsExt = "SpecialFunctions"
+
+[[deps.Colors]]
+deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Reexport"]
+git-tree-sha1 = "a633156e74096f90b3b5e833529292b651b5671a"
+registries = "General"
+uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
+version = "0.13.3"
+
+[[deps.CommonSolve]]
+deps = ["PrecompileTools"]
+git-tree-sha1 = "6c389fa857f6ca5a95474b52a52023fd77f24cb7"
+registries = "General"
+uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2"
+version = "0.2.14"
+
+[[deps.Compat]]
+deps = ["TOML", "UUIDs"]
+git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad"
+registries = "General"
+uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
+version = "4.18.1"
+weakdeps = ["Dates", "LinearAlgebra"]
+
+ [deps.Compat.extensions]
+ CompatLinearAlgebraExt = "LinearAlgebra"
+
+[[deps.CompilerSupportLibraries_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
+version = "1.5.5+2"
+
+[[deps.CompositionsBase]]
+git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad"
+registries = "General"
+uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b"
+version = "0.1.2"
+weakdeps = ["InverseFunctions"]
+
+ [deps.CompositionsBase.extensions]
+ CompositionsBaseInverseFunctionsExt = "InverseFunctions"
+
+[[deps.ComputePipeline]]
+deps = ["Observables", "Preferences"]
+git-tree-sha1 = "7bc84b769c1d384315e7b5c4ac03a6c303e6cf35"
+registries = "General"
+uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c"
+version = "0.1.8"
+
+[[deps.ConstructionBase]]
+git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb"
+registries = "General"
+uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
+version = "1.6.0"
+weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"]
+
+ [deps.ConstructionBase.extensions]
+ ConstructionBaseIntervalSetsExt = "IntervalSets"
+ ConstructionBaseLinearAlgebraExt = "LinearAlgebra"
+ ConstructionBaseStaticArraysExt = "StaticArrays"
+
+[[deps.Contour]]
+git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8"
+registries = "General"
+uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
+version = "0.6.3"
+
+[[deps.CoordinateTransformations]]
+deps = ["LinearAlgebra", "StaticArrays"]
+git-tree-sha1 = "a692f5e257d332de1e554e4566a4e5a8a72de2b2"
+registries = "General"
+uuid = "150eb455-5306-5404-9cee-2592286d6298"
+version = "0.6.4"
+
+[[deps.CoreMath]]
+deps = ["CoreMath_jll"]
+git-tree-sha1 = "8c0480f92b1b1796239156a1b9b1bfb1b39499b4"
+registries = "General"
+uuid = "b7a15901-be09-4a0e-87d2-2e66b0e09b5a"
+version = "0.1.0"
+
+[[deps.CoreMath_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "a692a4c1dc59a4b8bc0b6403876eb3250fde2bc3"
+registries = "General"
+uuid = "a38c48d9-6df1-5ac9-9223-b6ada3b5572b"
+version = "0.1.0+0"
+
+[[deps.Crayons]]
+git-tree-sha1 = "54b76cbb40d9a0f5368c880725b2f141da77c94f"
+registries = "General"
+uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
+version = "4.2.0"
+
+[[deps.DataAPI]]
+git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe"
+registries = "General"
+uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
+version = "1.16.0"
+
+[[deps.DataFrames]]
+deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
+git-tree-sha1 = "5fab31e2e01e70ad66e3e24c968c264d1cf166d6"
+registries = "General"
+uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
+version = "1.8.2"
+
+[[deps.DataStructures]]
+deps = ["OrderedCollections"]
+git-tree-sha1 = "b0bc6d2cad1fed8b7fd59a1551a991cb3d2809e6"
+registries = "General"
+uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
+version = "0.19.6"
+
+[[deps.DataValueInterfaces]]
+git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
+registries = "General"
+uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
+version = "1.0.0"
+
+[[deps.Dates]]
+deps = ["Printf"]
+uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
+version = "1.11.0"
+
+[[deps.DelaunayTriangulation]]
+deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"]
+git-tree-sha1 = "e1e28f37cbdca4b594ad86ecfe2ee8f25796ebff"
+registries = "General"
+uuid = "927a84f5-c5f4-47a5-9785-b46e178433df"
+version = "1.7.0"
+
+[[deps.Distributed]]
+deps = ["Random", "Serialization", "Sockets"]
+uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
+version = "1.11.0"
+
+[[deps.Distributions]]
+deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "Roots", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"]
+git-tree-sha1 = "2ddbc341251ed713d39e503b504593a5d6789551"
+registries = "General"
+uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
+version = "0.25.132"
+
+ [deps.Distributions.extensions]
+ DistributionsChainRulesCoreExt = "ChainRulesCore"
+ DistributionsDensityInterfaceExt = "DensityInterface"
+ DistributionsSparseConnectivityTracerExt = "SparseConnectivityTracer"
+ DistributionsTestExt = "Test"
+
+ [deps.Distributions.weakdeps]
+ ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+ DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
+ SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5"
+ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[deps.DocStringExtensions]]
+git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c"
+registries = "General"
+uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
+version = "0.9.5"
+
+[[deps.Downloads]]
+deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
+uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
+version = "1.7.0"
+
+[[deps.EarCut_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053"
+registries = "General"
+uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5"
+version = "2.2.4+0"
+
+[[deps.EnumX]]
+git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c"
+registries = "General"
+uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56"
+version = "1.0.7"
+
+[[deps.ExactPredicates]]
+deps = ["IntervalArithmetic", "Random", "StaticArrays"]
+git-tree-sha1 = "83231673ea4d3d6008ac74dc5079e77ab2209d8f"
+registries = "General"
+uuid = "429591f6-91af-11e9-00e2-59fbe8cec110"
+version = "2.2.9"
+
+[[deps.Expat_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "2bfb1e047e2ad0a5ca94365340bde8005d637568"
+registries = "General"
+uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
+version = "2.8.4+0"
+
+[[deps.Extents]]
+git-tree-sha1 = "b309b36a9e02fe7be71270dd8c0fd873625332b4"
+registries = "General"
+uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910"
+version = "0.1.6"
+
+[[deps.FFMPEG_jll]]
+deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libva_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
+git-tree-sha1 = "d9d3cd382f2c999f684e6bfa4039fcc16c153b6f"
+registries = "General"
+uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
+version = "9.0.2+0"
+
+[[deps.FFTA]]
+deps = ["AbstractFFTs", "DocStringExtensions", "LinearAlgebra", "MuladdMacro", "Primes", "Random", "Reexport"]
+git-tree-sha1 = "65e55303b72f4a567a51b174dd2c47496efeb95a"
+registries = "General"
+uuid = "b86e33f2-c0db-4aa1-a6e0-ab43e668529e"
+version = "0.3.1"
+
+[[deps.FileIO]]
+deps = ["Pkg", "Requires", "UUIDs"]
+git-tree-sha1 = "6621fef488e496356c9c9625d0562c12a6070819"
+registries = "General"
+uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
+version = "1.20.0"
+
+ [deps.FileIO.extensions]
+ HTTPExt = "HTTP"
+
+ [deps.FileIO.weakdeps]
+ HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
+
+[[deps.FilePaths]]
+deps = ["FilePathsBase", "MacroTools", "Reexport"]
+git-tree-sha1 = "a1b2fbfe98503f15b665ed45b3d149e5d8895e4c"
+registries = "General"
+uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824"
+version = "0.9.0"
+
+ [deps.FilePaths.extensions]
+ FilePathsGlobExt = "Glob"
+ FilePathsURIParserExt = "URIParser"
+ FilePathsURIsExt = "URIs"
+
+ [deps.FilePaths.weakdeps]
+ Glob = "c27321d9-0574-5035-807b-f59d2c89b15c"
+ URIParser = "30578b45-9adc-5946-b283-645ec420af67"
+ URIs = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
+
+[[deps.FilePathsBase]]
+deps = ["Compat", "Dates"]
+git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2"
+registries = "General"
+uuid = "48062228-2e41-5def-b9a4-89aafe57970f"
+version = "0.9.24"
+
+ [deps.FilePathsBase.extensions]
+ FilePathsBaseMmapExt = "Mmap"
+ FilePathsBaseTestExt = "Test"
+
+ [deps.FilePathsBase.weakdeps]
+ Mmap = "a63ad114-7e13-5084-954f-fe012c677804"
+ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[deps.FileWatching]]
+uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
+version = "1.11.0"
+
+[[deps.FillArrays]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "417289ac840d201005d9ed16789a46defccbe36d"
+registries = "General"
+uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
+version = "1.18.1"
+weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"]
+
+ [deps.FillArrays.extensions]
+ FillArraysPDMatsExt = "PDMats"
+ FillArraysSparseArraysExt = "SparseArrays"
+ FillArraysStaticArraysExt = "StaticArrays"
+ FillArraysStatisticsExt = "Statistics"
+
+[[deps.FixedPointNumbers]]
+deps = ["Random", "Statistics"]
+git-tree-sha1 = "59af96b98217c6ef4ae0dfe065ac7c20831d1a84"
+registries = "General"
+uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
+version = "0.8.6"
+
+[[deps.Fontconfig_jll]]
+deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"]
+git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d"
+registries = "General"
+uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
+version = "2.17.1+0"
+
+[[deps.Format]]
+git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc"
+registries = "General"
+uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8"
+version = "1.3.7"
+
+[[deps.FreeType]]
+deps = ["CEnum", "FreeType2_jll"]
+git-tree-sha1 = "907369da0f8e80728ab49c1c7e09327bf0d6d999"
+registries = "General"
+uuid = "b38be410-82b0-50bf-ab77-7b57e271db43"
+version = "4.1.1"
+
+[[deps.FreeType2_jll]]
+deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e"
+registries = "General"
+uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
+version = "2.14.3+1"
+
+[[deps.FreeTypeAbstraction]]
+deps = ["BaseDirs", "ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "Mmap"]
+git-tree-sha1 = "4ebb930ef4a43817991ba35db6317a05e59abd11"
+registries = "General"
+uuid = "663a7486-cb36-511b-a19d-713bb74d65c9"
+version = "0.10.8"
+
+[[deps.FriBidi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "7a214fdac5ed5f59a22c2d9a885a16da1c74bbc7"
+registries = "General"
+uuid = "559328eb-81f9-559d-9380-de523a88c83c"
+version = "1.0.17+0"
+
+[[deps.Future]]
+deps = ["Random"]
+uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
+version = "1.11.0"
+
+[[deps.GLM]]
+deps = ["Distributions", "LinearAlgebra", "LogExpFunctions", "Printf", "Reexport", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsModels"]
+git-tree-sha1 = "c963639ae5b9aab54f543bdc7504f42f59880bec"
+registries = "General"
+uuid = "38e38edf-8417-5370-95a0-9cbb8c7f171a"
+version = "1.9.5"
+
+[[deps.Gamma]]
+deps = ["LogExpFunctions"]
+git-tree-sha1 = "becc397f7cfb06e343496ae6ffb04818a851da51"
+registries = "General"
+uuid = "a0844989-3bd2-4988-8bea-c9407ab0941b"
+version = "1.2.0"
+
+[[deps.GeoFormatTypes]]
+git-tree-sha1 = "7528a7956248c723d01a0a9b0447bf254bf4da52"
+registries = "General"
+uuid = "68eda718-8dee-11e9-39e7-89f7f65f511f"
+version = "0.4.5"
+
+[[deps.GeoInterface]]
+deps = ["DataAPI", "Extents", "GeoFormatTypes"]
+git-tree-sha1 = "20f6b13b28c6304104968374f38c24ef71a8ea16"
+registries = "General"
+uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f"
+version = "1.6.2"
+
+ [deps.GeoInterface.extensions]
+ GeoInterfaceMakieExt = ["Makie", "GeometryBasics"]
+ GeoInterfaceRecipesBaseExt = "RecipesBase"
+
+ [deps.GeoInterface.weakdeps]
+ GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
+ Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
+ RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
+
+[[deps.GeoJSON]]
+deps = ["Extents", "GeoFormatTypes", "GeoInterface", "JSON3", "StructTypes", "Tables"]
+git-tree-sha1 = "ce64817b826c36b30493b31be2ce53c55a277835"
+registries = "General"
+uuid = "61d90e0f-e114-555e-ac52-39dfb47a3ef9"
+version = "0.8.4"
+
+ [deps.GeoJSON.extensions]
+ GeoJSONMakieExt = "Makie"
+ GeoJSONRecipesBaseExt = "RecipesBase"
+
+ [deps.GeoJSON.weakdeps]
+ Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
+ RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
+
+[[deps.GeoMakie]]
+deps = ["Colors", "CoordinateTransformations", "Downloads", "GeoFormatTypes", "GeoInterface", "GeoJSON", "Geodesy", "GeometryBasics", "GeometryOps", "ImageIO", "LinearAlgebra", "Makie", "NaturalEarth", "Proj", "Reexport", "Statistics", "StructArrays"]
+git-tree-sha1 = "773cdb042ba888de7b4c49451672bac1a38bc28b"
+registries = "General"
+uuid = "db073c08-6b98-4ee5-b6a4-5efafb3259c6"
+version = "0.7.17"
+
+[[deps.Geodesy]]
+deps = ["CoordinateTransformations", "Dates", "LinearAlgebra", "StaticArrays"]
+git-tree-sha1 = "d48fa6a8d49350670b5ba409dbe2ddec791b4808"
+registries = "General"
+uuid = "0ef565a4-170c-5f04-8de2-149903a85f3d"
+version = "1.2.0"
+
+[[deps.GeometryBasics]]
+deps = ["EarCut_jll", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"]
+git-tree-sha1 = "ec46c5825710fa1a15d468acb2d93cc939a7a5fe"
+registries = "General"
+uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
+version = "0.5.13"
+weakdeps = ["Extents", "GeoInterface", "IntervalSets"]
+
+ [deps.GeometryBasics.extensions]
+ ExtentsExt = "Extents"
+ GeometryBasicsGeoInterfaceExt = "GeoInterface"
+ IntervalSetsExt = "IntervalSets"
+
+[[deps.GeometryOps]]
+deps = ["AbstractTrees", "AdaptivePredicates", "CoordinateTransformations", "DataAPI", "DelaunayTriangulation", "ExactPredicates", "Extents", "GeoFormatTypes", "GeoInterface", "GeometryOpsCore", "LinearAlgebra", "PrecompileTools", "Random", "SortTileRecursiveTree", "StaticArrays", "Statistics", "Tables"]
+git-tree-sha1 = "b0d208d68332d90d632d9bb4303e0b55ca8fb13c"
+registries = "General"
+uuid = "3251bfac-6a57-4b6d-aa61-ac1fef2975ab"
+version = "0.1.47"
+
+ [deps.GeometryOps.extensions]
+ GeometryOpsDataFramesExt = "DataFrames"
+ GeometryOpsDimensionalDataExt = "DimensionalData"
+ GeometryOpsFlexiJoinsExt = "FlexiJoins"
+ GeometryOpsLibGEOSExt = "LibGEOS"
+ GeometryOpsMakieExt = "Makie"
+ GeometryOpsProjExt = "Proj"
+ GeometryOpsTGGeometryExt = "TGGeometry"
+
+ [deps.GeometryOps.weakdeps]
+ DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
+ DimensionalData = "0703355e-b756-11e9-17c0-8b28908087d0"
+ FlexiJoins = "e37f2e79-19fa-4eb7-8510-b63b51fe0a37"
+ LibGEOS = "a90b1aa1-3769-5649-ba7e-abc5a9d163eb"
+ Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
+ Proj = "c94c279d-25a6-4763-9509-64d165bea63e"
+ TGGeometry = "d7e755d2-3c95-4bcf-9b3c-79ab1a78647b"
+
+[[deps.GeometryOpsCore]]
+deps = ["DataAPI", "GeoInterface", "StableTasks", "Tables"]
+git-tree-sha1 = "8f32a94cf3d80a716cae6025af6cbc4e68421da5"
+registries = "General"
+uuid = "05efe853-fabf-41c8-927e-7063c8b9f013"
+version = "0.1.12"
+
+[[deps.GettextRuntime_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"]
+git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340"
+registries = "General"
+uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a"
+version = "0.22.4+0"
+
+[[deps.Giflib_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "a3efbbc027441271444dcd0c0a46f2d119dc4329"
+registries = "General"
+uuid = "59f7168a-df46-5410-90c8-f2779963d0ec"
+version = "6.1.3+0"
+
+[[deps.Glib_jll]]
+deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"]
+git-tree-sha1 = "ea9f1fb37ff10597353b56f3ba0ebd525acef6e0"
+registries = "General"
+uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
+version = "2.90.1+0"
+
+[[deps.Graphics]]
+deps = ["Colors", "LinearAlgebra", "NaNMath"]
+git-tree-sha1 = "a641238db938fff9b2f60d08ed9030387daf428c"
+registries = "General"
+uuid = "a2bd30eb-e257-5431-a919-1863eab51364"
+version = "1.1.3"
+
+[[deps.Graphite2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "69ffb934a5c5b7e086a0b4fee3427db2556fba6e"
+registries = "General"
+uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
+version = "1.3.16+0"
+
+[[deps.GridLayoutBase]]
+deps = ["GeometryBasics", "InteractiveUtils", "Observables"]
+git-tree-sha1 = "ef70da5e123a06a29e2d6ddff0f09985bc226491"
+registries = "General"
+uuid = "3955a311-db13-416c-9275-1d80ed98e5e9"
+version = "0.11.3"
+
+[[deps.HarfBuzz_jll]]
+deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"]
+git-tree-sha1 = "9d9531a9cb63a9edc33836414e82a07e81710de2"
+registries = "General"
+uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
+version = "100.14004.0+0"
+
+[[deps.HypergeometricFunctions]]
+deps = ["Gamma", "LinearAlgebra"]
+git-tree-sha1 = "31bb6c92405c084617facc1d7ed9eb6c402d061e"
+registries = "General"
+uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
+version = "0.3.30"
+
+[[deps.ImageAxes]]
+deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"]
+git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba"
+registries = "General"
+uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac"
+version = "0.6.12"
+
+[[deps.ImageBase]]
+deps = ["ImageCore", "Reexport"]
+git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909"
+registries = "General"
+uuid = "c817782e-172a-44cc-b673-b171935fbb9e"
+version = "0.1.7"
+
+[[deps.ImageCore]]
+deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"]
+git-tree-sha1 = "8c193230235bbcee22c8066b0374f63b5683c2d3"
+registries = "General"
+uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534"
+version = "0.10.5"
+
+[[deps.ImageIO]]
+deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"]
+git-tree-sha1 = "f0f005f997dfb8c5fe23920d99458a9619873893"
+registries = "General"
+uuid = "82e4d734-157c-48bb-816b-45c225c6df19"
+version = "0.6.10"
+
+[[deps.ImageMetadata]]
+deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"]
+git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec"
+registries = "General"
+uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49"
+version = "0.9.10"
+
+[[deps.Imath_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "dcc8d0cd653e55213df9b75ebc6fe4a8d3254c65"
+registries = "General"
+uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1"
+version = "3.2.2+0"
+
+[[deps.IndirectArrays]]
+git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f"
+registries = "General"
+uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959"
+version = "1.0.0"
+
+[[deps.Inflate]]
+git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d"
+registries = "General"
+uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9"
+version = "0.1.5"
+
+[[deps.InlineStrings]]
+git-tree-sha1 = "06b65886c7577a3784d616e29f1302c2e36e389d"
+registries = "General"
+uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48"
+version = "1.4.6"
+
+ [deps.InlineStrings.extensions]
+ ArrowTypesExt = "ArrowTypes"
+ ParsersExt = "Parsers"
+
+ [deps.InlineStrings.weakdeps]
+ ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
+ Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
+
+[[deps.IntegerMathUtils]]
+git-tree-sha1 = "c72458f1962faeb003bf23cbdb75164fe6280906"
+registries = "General"
+uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235"
+version = "0.1.4"
+
+[[deps.InteractiveUtils]]
+deps = ["Markdown"]
+uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
+version = "1.11.0"
+
+[[deps.Interpolations]]
+deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"]
+git-tree-sha1 = "48922d06068130f87e43edef52382e6a94305ae6"
+registries = "General"
+uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59"
+version = "0.16.3"
+
+ [deps.Interpolations.extensions]
+ InterpolationsForwardDiffExt = "ForwardDiff"
+ InterpolationsUnitfulExt = "Unitful"
+
+ [deps.Interpolations.weakdeps]
+ ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
+ Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
+
+[[deps.IntervalArithmetic]]
+deps = ["CRlibm", "CoreMath", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"]
+git-tree-sha1 = "1c531bf0f8a5c60a340926e058fd3f209b5eef5d"
+registries = "General"
+uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253"
+version = "1.0.12"
+
+ [deps.IntervalArithmetic.extensions]
+ IntervalArithmeticArblibExt = "Arblib"
+ IntervalArithmeticDiffRulesExt = "DiffRules"
+ IntervalArithmeticForwardDiffExt = "ForwardDiff"
+ IntervalArithmeticIntervalSetsExt = "IntervalSets"
+ IntervalArithmeticIrrationalConstantsExt = "IrrationalConstants"
+ IntervalArithmeticLinearAlgebraExt = "LinearAlgebra"
+ IntervalArithmeticMakieExt = "Makie"
+ IntervalArithmeticRecipesBaseExt = "RecipesBase"
+ IntervalArithmeticSparseArraysExt = "SparseArrays"
+
+ [deps.IntervalArithmetic.weakdeps]
+ Arblib = "fb37089c-8514-4489-9461-98f9c8763369"
+ DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b"
+ ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
+ IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953"
+ IrrationalConstants = "92d709cd-6900-40b7-9082-c6be49f344b6"
+ LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+ Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
+ RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
+ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+
+[[deps.IntervalSets]]
+git-tree-sha1 = "0db6aea5b64caa1c47e9fdd27394f0296f05e8bf"
+registries = "General"
+uuid = "8197267c-284f-5f27-9208-e0e47529a953"
+version = "0.7.15"
+
+ [deps.IntervalSets.extensions]
+ IntervalSetsMakieExt = "Makie"
+ IntervalSetsRandomExt = "Random"
+ IntervalSetsRecipesBaseExt = "RecipesBase"
+ IntervalSetsStatisticsExt = "Statistics"
+
+ [deps.IntervalSets.weakdeps]
+ Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
+ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
+ RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
+ Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
+
+[[deps.InverseFunctions]]
+git-tree-sha1 = "5cc6ad3e2bfc75a11eed92632ee341d37f4a4536"
+registries = "General"
+uuid = "3587e190-3f89-42d0-90ee-14403ec27112"
+version = "0.1.18"
+
+ [deps.InverseFunctions.extensions]
+ InverseFunctionsDatesExt = "Dates"
+ InverseFunctionsTestExt = "Test"
+
+ [deps.InverseFunctions.weakdeps]
+ Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
+ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[deps.InvertedIndices]]
+git-tree-sha1 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe"
+registries = "General"
+uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f"
+version = "1.3.1"
+
+[[deps.IrrationalConstants]]
+git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758"
+registries = "General"
+uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
+version = "0.2.6"
+
+[[deps.Isoband]]
+deps = ["isoband_jll"]
+git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137"
+registries = "General"
+uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4"
+version = "0.1.1"
+
+[[deps.IterTools]]
+git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023"
+registries = "General"
+uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
+version = "1.10.0"
+
+[[deps.IteratorInterfaceExtensions]]
+git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
+registries = "General"
+uuid = "82899510-4779-5014-852e-03e436cf321d"
+version = "1.0.0"
+
+[[deps.JLLWrappers]]
+deps = ["Artifacts", "Preferences"]
+git-tree-sha1 = "7204148362dafe5fe6a273f855b8ccbe4df8173e"
+registries = "General"
+uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
+version = "1.8.0"
+
+[[deps.JSON]]
+deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"]
+git-tree-sha1 = "9939eb6f799a963b3392ac4a1d49d3fc0646eb80"
+registries = "General"
+uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
+version = "1.11.0"
+
+ [deps.JSON.extensions]
+ JSONArrowExt = ["ArrowTypes"]
+
+ [deps.JSON.weakdeps]
+ ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
+
+[[deps.JSON3]]
+deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"]
+git-tree-sha1 = "411eccfe8aba0814ffa0fdf4860913ed09c34975"
+registries = "General"
+uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
+version = "1.14.3"
+
+ [deps.JSON3.extensions]
+ JSON3ArrowExt = ["ArrowTypes"]
+
+ [deps.JSON3.weakdeps]
+ ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
+
+[[deps.JpegTurbo]]
+deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"]
+git-tree-sha1 = "9496de8fb52c224a2e3f9ff403947674517317d9"
+registries = "General"
+uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0"
+version = "0.1.6"
+
+[[deps.JpegTurbo_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "037babc10853eeb8e585418922246cb97b8e5b74"
+registries = "General"
+uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
+version = "3.2.0+1"
+
+[[deps.JuliaSyntaxHighlighting]]
+deps = ["StyledStrings"]
+uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011"
+version = "1.12.0"
+
+[[deps.KernelDensity]]
+deps = ["Distributions", "DocStringExtensions", "FFTA", "Interpolations", "StatsBase"]
+git-tree-sha1 = "9eda8292dd3268b3b7ec9df21bbfac24e177ec52"
+registries = "General"
+uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b"
+version = "0.6.12"
+
+[[deps.LAME_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc"
+registries = "General"
+uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
+version = "3.100.3+0"
+
+[[deps.LERC_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "39bca05343661c347aae0bca57a5994a0bf4f08d"
+registries = "General"
+uuid = "88015f11-f218-50d7-93a8-a6af411a945d"
+version = "4.2.0+0"
+
+[[deps.LLVMOpenMP_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "e5b100780d4d30d63b4618d7930d48af409c1772"
+registries = "General"
+uuid = "1d63c593-3942-5779-bab2-d838dc0a180e"
+version = "23.1.1+0"
+
+[[deps.LaTeXStrings]]
+git-tree-sha1 = "f88f3ccef05a6a72a0cf0ed417c8fd68530f4ab2"
+registries = "General"
+uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
+version = "1.4.1"
+
+[[deps.LazyModules]]
+git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e"
+registries = "General"
+uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e"
+version = "0.3.1"
+
+[[deps.LibCURL]]
+deps = ["LibCURL_jll", "MozillaCACerts_jll"]
+uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
+version = "1.0.0"
+
+[[deps.LibCURL_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "Zstd_jll", "nghttp2_jll"]
+uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
+version = "8.22.0+0"
+
+[[deps.LibGit2]]
+deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"]
+uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
+version = "1.11.0"
+
+[[deps.LibGit2_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "PCRE2_jll", "Zlib_jll"]
+uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5"
+version = "1.9.7+0"
+
+[[deps.LibSSH2_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl", "OpenSSL_jll", "Zlib_jll"]
+uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
+version = "1.11.104+0"
+
+[[deps.Libdl]]
+uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
+version = "1.11.0"
+
+[[deps.Libffi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "c8da7e6a91781c41a863611c7e966098d783c57a"
+registries = "General"
+uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
+version = "3.4.7+0"
+
+[[deps.Libglvnd_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"]
+git-tree-sha1 = "d36c21b9e7c172a44a10484125024495e2625ac0"
+registries = "General"
+uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29"
+version = "1.7.1+1"
+
+[[deps.Libiconv_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809"
+registries = "General"
+uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
+version = "1.18.0+0"
+
+[[deps.Libmount_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "b8a91037379e1fd661e9b5ff3d7a770424b1f9f2"
+registries = "General"
+uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
+version = "2.42.4+0"
+
+[[deps.Libtiff_jll]]
+deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"]
+git-tree-sha1 = "aebd334d06cee9f24cea70bd19a39749daf73881"
+registries = "General"
+uuid = "89763e89-9b03-5906-acba-b20f662cd828"
+version = "4.7.3+0"
+
+[[deps.Libuuid_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "9e887184f306b28dbfcff88cefbb0ec80f1aa9e0"
+registries = "General"
+uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
+version = "2.42.4+0"
+
+[[deps.LinearAlgebra]]
+deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
+uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+version = "1.13.0"
+
+[[deps.LogExpFunctions]]
+deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
+git-tree-sha1 = "28d620bcdb37a3fb02de9f521928ee453690f414"
+registries = "General"
+uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
+version = "1.0.3"
+
+ [deps.LogExpFunctions.extensions]
+ LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
+ LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables"
+ LogExpFunctionsInverseFunctionsExt = "InverseFunctions"
+
+ [deps.LogExpFunctions.weakdeps]
+ ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+ ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
+ InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
+
+[[deps.Logging]]
+uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
+version = "1.11.0"
+
+[[deps.MacroTools]]
+git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522"
+registries = "General"
+uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
+version = "0.5.16"
+
+[[deps.Makie]]
+deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"]
+git-tree-sha1 = "5f6f5d1b1fb7ff98c9a083bbfd4c661a9808e758"
+registries = "General"
+uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
+version = "0.24.15"
+
+ [deps.Makie.extensions]
+ MakieDynamicQuantitiesExt = "DynamicQuantities"
+
+ [deps.Makie.weakdeps]
+ DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821"
+
+[[deps.MappedArrays]]
+git-tree-sha1 = "0ee4497a4e80dbd29c058fcee6493f5219556f40"
+registries = "General"
+uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900"
+version = "0.4.3"
+
+[[deps.Markdown]]
+deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"]
+uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
+version = "1.11.0"
+
+[[deps.MathTeXEngine]]
+deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"]
+git-tree-sha1 = "aa1078778be5a8e5259ff04fbc3d258b3e78d464"
+registries = "General"
+uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53"
+version = "0.6.9"
+
+[[deps.Missings]]
+deps = ["DataAPI"]
+git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d"
+registries = "General"
+uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
+version = "1.2.0"
+
+[[deps.Mmap]]
+uuid = "a63ad114-7e13-5084-954f-fe012c677804"
+version = "1.11.0"
+
+[[deps.MosaicViews]]
+deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"]
+git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe"
+registries = "General"
+uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389"
+version = "0.3.4"
+
+[[deps.MozillaCACerts_jll]]
+uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
+version = "2026.8.13"
+
+[[deps.MuladdMacro]]
+deps = ["PrecompileTools"]
+git-tree-sha1 = "283bf85d4a767481dd924dff0eee1735e95f449e"
+registries = "General"
+uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221"
+version = "0.2.7"
+
+[[deps.NaNMath]]
+deps = ["OpenLibm_jll"]
+git-tree-sha1 = "dbd2e8cd2c1c27f0b584f6661b4309609c5a685e"
+registries = "General"
+uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
+version = "1.1.4"
+
+[[deps.NaturalEarth]]
+deps = ["Downloads", "GeoJSON", "Pkg", "Preferences", "Scratch"]
+git-tree-sha1 = "334574c147f5e48b62ce4d3f8b80c8b0edf247b5"
+registries = "General"
+uuid = "436b0209-26ab-4e65-94a9-6526d86fea76"
+version = "0.1.1"
+
+[[deps.Netpbm]]
+deps = ["FileIO", "ImageCore", "ImageMetadata"]
+git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd"
+registries = "General"
+uuid = "f09324ee-3d7c-5217-9330-fc30815ba969"
+version = "1.1.1"
+
+[[deps.NetworkOptions]]
+uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
+version = "1.3.0"
+
+[[deps.Observables]]
+git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225"
+registries = "General"
+uuid = "510215fc-4207-5dde-b226-833fc4488ee2"
+version = "0.5.5"
+
+[[deps.OffsetArrays]]
+git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151"
+registries = "General"
+uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
+version = "1.17.0"
+weakdeps = ["Adapt"]
+
+ [deps.OffsetArrays.extensions]
+ OffsetArraysAdaptExt = "Adapt"
+
+[[deps.Ogg_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59"
+registries = "General"
+uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
+version = "1.3.6+0"
+
+[[deps.OpenBLASConsistentFPCSR_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "38a93f17e431141c6470bb67a88952a7c4f0e928"
+registries = "General"
+uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af"
+version = "0.3.34+0"
+
+[[deps.OpenBLAS_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
+uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
+version = "0.3.30+0"
+
+[[deps.OpenEXR]]
+deps = ["Colors", "FileIO", "OpenEXR_jll"]
+git-tree-sha1 = "97db9e07fe2091882c765380ef58ec553074e9c7"
+registries = "General"
+uuid = "52e1d378-f018-4a11-a4be-720524705ac7"
+version = "0.3.3"
+
+[[deps.OpenEXR_jll]]
+deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "OpenJPH_jll", "Zlib_jll", "Zstd_jll", "libdeflate_jll"]
+git-tree-sha1 = "eb47260eaf61dca5c0e17bd126f4426edac35975"
+registries = "General"
+uuid = "18a262bb-aa17-5467-a713-aee519bc75cb"
+version = "3.5.2+0"
+
+[[deps.OpenJPH_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libtiff_jll"]
+git-tree-sha1 = "1b1f3cabb1130670812b848f4623d69d578ea805"
+registries = "General"
+uuid = "95196869-6d61-5868-8eee-c38c33804e0c"
+version = "0.32.0+0"
+
+[[deps.OpenLibm_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
+uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
+version = "0.8.7+0"
+
+[[deps.OpenSSL_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
+version = "3.5.8+0"
+
+[[deps.OpenSpecFun_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335"
+registries = "General"
+uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
+version = "0.5.6+0"
+
+[[deps.Opus_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff"
+registries = "General"
+uuid = "91d4177d-7536-5919-b921-800302f37372"
+version = "1.6.1+0"
+
+[[deps.OrderedCollections]]
+git-tree-sha1 = "b079a6affebde167dad8ffe0d670b53917fbcb68"
+registries = "General"
+uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
+version = "2.0.3"
+
+[[deps.PCRE2_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15"
+version = "10.46.0+0"
+
+[[deps.PDMats]]
+deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
+git-tree-sha1 = "123266c25174ef6c8d4718920abc206452cf8de6"
+registries = "General"
+uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
+version = "0.11.41"
+weakdeps = ["StatsBase"]
+
+ [deps.PDMats.extensions]
+ StatsBaseExt = "StatsBase"
+
+[[deps.PNGFiles]]
+deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"]
+git-tree-sha1 = "32b657a0d57c310a1a172bfc8c8cf68c5e674323"
+registries = "General"
+uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883"
+version = "0.4.5"
+
+[[deps.PROJ_jll]]
+deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "Libtiff_jll", "SQLite_jll"]
+git-tree-sha1 = "6ea32aa551fc86426adc371aab209087876be95b"
+registries = "General"
+uuid = "58948b4f-47e0-5654-a9ad-f609743f8632"
+version = "902.900.0+0"
+
+[[deps.Packing]]
+deps = ["GeometryBasics"]
+git-tree-sha1 = "bc5bf2ea3d5351edf285a06b0016788a121ce92c"
+registries = "General"
+uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566"
+version = "0.5.1"
+
+[[deps.PaddedViews]]
+deps = ["OffsetArrays"]
+git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f"
+registries = "General"
+uuid = "5432bcbf-9aad-5242-b902-cca2824c8663"
+version = "0.5.12"
+
+[[deps.Pango_jll]]
+deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1912a9f1b9ca55005b03ba075f8e19993583e237"
+registries = "General"
+uuid = "36c8627f-9965-5494-a995-c6b170f724f3"
+version = "1.58.2+0"
+
+[[deps.Parsers]]
+deps = ["Dates", "PrecompileTools", "UUIDs"]
+git-tree-sha1 = "ba0dc8a8a67cacac4842631f960c046e4e563675"
+registries = "General"
+uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
+version = "2.8.8"
+
+[[deps.Pixman_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"]
+git-tree-sha1 = "e4a6721aa89e62e5d4217c0b21bd714263779dda"
+registries = "General"
+uuid = "30392449-352a-5448-841d-b1acce4e97dc"
+version = "0.46.4+0"
+
+[[deps.Pkg]]
+deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "Zstd_jll", "p7zip_jll"]
+uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
+version = "1.13.0"
+weakdeps = ["REPL"]
+
+ [deps.Pkg.extensions]
+ REPLExt = "REPL"
+
+[[deps.PkgVersion]]
+deps = ["Pkg"]
+git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da"
+registries = "General"
+uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688"
+version = "0.3.3"
+
+[[deps.PlotUtils]]
+deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Reexport", "Statistics"]
+git-tree-sha1 = "ddcc36fd83fb4cd459a53c891981697bde0d3de6"
+registries = "General"
+uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
+version = "1.5.1"
+
+[[deps.PolygonOps]]
+git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6"
+registries = "General"
+uuid = "647866c9-e3ac-4575-94e7-e3d426903924"
+version = "0.1.2"
+
+[[deps.PooledArrays]]
+deps = ["DataAPI", "Future"]
+git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3"
+registries = "General"
+uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720"
+version = "1.4.3"
+
+[[deps.PrecompileTools]]
+deps = ["Preferences"]
+git-tree-sha1 = "edbeefc7a4889f528644251bdb5fc9ab5348bc2c"
+registries = "General"
+uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
+version = "1.3.4"
+
+[[deps.Preferences]]
+deps = ["TOML"]
+git-tree-sha1 = "aef1987d90dcc2e2cbd919ad10b2d25bcce4f418"
+registries = "General"
+uuid = "21216c6a-2e73-6563-6e65-726566657250"
+version = "1.6.1"
+
+[[deps.PrettyTables]]
+deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "StyledStrings", "Tables"]
+git-tree-sha1 = "99fd8f32ab6728ff205cddd24e2d9ea6cbb498d3"
+registries = "General"
+uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
+version = "3.5.0"
+
+ [deps.PrettyTables.extensions]
+ PrettyTablesExcelExt = "XLSX"
+ PrettyTablesTypstryExt = "Typstry"
+ PrettyTablesWriteDocxExt = "WriteDocx"
+
+ [deps.PrettyTables.weakdeps]
+ Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e"
+ WriteDocx = "d049ceea-54ee-41d7-a26f-ba29db3b6599"
+ XLSX = "fdbf4ff8-1666-58a4-91e7-1b58723a45e0"
+
+[[deps.Primes]]
+deps = ["IntegerMathUtils"]
+git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b"
+registries = "General"
+uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae"
+version = "0.5.7"
+
+[[deps.Printf]]
+deps = ["Unicode"]
+uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
+version = "1.11.0"
+
+[[deps.ProgressMeter]]
+deps = ["Printf"]
+git-tree-sha1 = "d72534986f4a4641b4d2492a154ec0b0e6985284"
+registries = "General"
+uuid = "92933f4c-e287-5a05-a399-4b506db050ca"
+version = "1.12.0"
+weakdeps = ["Distributed"]
+
+ [deps.ProgressMeter.extensions]
+ ProgressMeterDistributedExt = "Distributed"
+
+[[deps.Proj]]
+deps = ["CEnum", "CoordinateTransformations", "GeoFormatTypes", "GeoInterface", "NetworkOptions", "PROJ_jll"]
+git-tree-sha1 = "61188669db4f5b400173e4ec60da8bcb72d6e749"
+registries = "General"
+uuid = "c94c279d-25a6-4763-9509-64d165bea63e"
+version = "1.9.0"
+
+[[deps.PtrArrays]]
+git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe"
+registries = "General"
+uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d"
+version = "1.4.0"
+
+[[deps.QOI]]
+deps = ["ColorTypes", "FileIO", "FixedPointNumbers"]
+git-tree-sha1 = "472daaa816895cb7aee81658d4e7aec901fa1106"
+registries = "General"
+uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65"
+version = "1.0.2"
+
+[[deps.QuadGK]]
+deps = ["DataStructures", "LinearAlgebra"]
+git-tree-sha1 = "5e8e8b0ab68215d7a2b14b9921a946fee794749e"
+registries = "General"
+uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
+version = "2.11.3"
+
+ [deps.QuadGK.extensions]
+ QuadGKEnzymeExt = "Enzyme"
+
+ [deps.QuadGK.weakdeps]
+ Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
+
+[[deps.REPL]]
+deps = ["Base64", "Dates", "FileWatching", "InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"]
+uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
+version = "1.11.0"
+
+[[deps.Random]]
+deps = ["SHA"]
+uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
+version = "1.11.0"
+
+[[deps.RangeArrays]]
+git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5"
+registries = "General"
+uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d"
+version = "0.3.2"
+
+[[deps.Ratios]]
+deps = ["Requires"]
+git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b"
+registries = "General"
+uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439"
+version = "0.4.5"
+weakdeps = ["FixedPointNumbers"]
+
+ [deps.Ratios.extensions]
+ RatiosFixedPointNumbersExt = "FixedPointNumbers"
+
+[[deps.Reexport]]
+git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
+registries = "General"
+uuid = "189a3867-3050-52da-a836-e630ba90ab69"
+version = "1.2.2"
+
+[[deps.RelocatableFolders]]
+deps = ["SHA", "Scratch"]
+git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864"
+registries = "General"
+uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
+version = "1.0.1"
+
+[[deps.Requires]]
+deps = ["UUIDs"]
+git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64"
+registries = "General"
+uuid = "ae029012-a4dd-5104-9daa-d747884805df"
+version = "1.3.1"
+
+[[deps.Rmath]]
+deps = ["Random", "Rmath_jll"]
+git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b"
+registries = "General"
+uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
+version = "0.9.0"
+
+[[deps.Rmath_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "6d40b2fe70437b01397d2a4d5b020008da4e7019"
+registries = "General"
+uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
+version = "0.5.2+0"
+
+[[deps.Roots]]
+deps = ["Accessors", "CommonSolve", "Printf"]
+git-tree-sha1 = "e6ffa7bd4f8d0b8744d18f219304738d952f9a37"
+registries = "General"
+uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665"
+version = "3.0.11"
+
+ [deps.Roots.extensions]
+ RootsChainRulesCoreExt = "ChainRulesCore"
+ RootsForwardDiffExt = "ForwardDiff"
+ RootsIntervalRootFindingExt = "IntervalRootFinding"
+ RootsSymPyExt = "SymPy"
+ RootsSymPyPythonCallExt = "SymPyPythonCall"
+ RootsUnitfulExt = "Unitful"
+
+ [deps.Roots.weakdeps]
+ ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+ ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
+ IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807"
+ SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6"
+ SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c"
+ Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d"
+
+[[deps.RoundingEmulator]]
+git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b"
+registries = "General"
+uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705"
+version = "0.2.1"
+
+[[deps.SHA]]
+uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
+version = "1.0.0"
+
+[[deps.SIMD]]
+deps = ["PrecompileTools"]
+git-tree-sha1 = "37ac518b3c924f110d82d50173eaf4ebeaf27ad7"
+registries = "General"
+uuid = "fdea26ae-647d-5447-a871-4b548cad5224"
+version = "3.8.1"
+
+[[deps.SQLite_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll", "dlfcn_win32_jll"]
+git-tree-sha1 = "581bc13ec7f43745b20f8ff0e70b931ac5c4fdbe"
+registries = "General"
+uuid = "76ed43ae-9a5d-5a62-8c75-30186b810ce8"
+version = "3.54.0+0"
+
+[[deps.Scratch]]
+deps = ["Dates"]
+git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109"
+registries = "General"
+uuid = "6c6a2e73-6563-6170-7368-637461726353"
+version = "1.3.0"
+
+[[deps.SentinelArrays]]
+deps = ["Dates", "Random"]
+git-tree-sha1 = "084c47c7c5ce5cfecefa0a98dff69eb3646b5a80"
+registries = "General"
+uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c"
+version = "1.4.10"
+
+[[deps.Serialization]]
+uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
+version = "1.11.0"
+
+[[deps.ShaderAbstractions]]
+deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays"]
+git-tree-sha1 = "57aa595158717ef165e6f5ab639fe2e3178c0a2b"
+registries = "General"
+uuid = "65257c39-d410-5151-9873-9b3e5be5013e"
+version = "0.5.1"
+
+[[deps.SharedArrays]]
+deps = ["Distributed", "Mmap", "Random", "Serialization"]
+uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
+version = "1.11.0"
+
+[[deps.ShiftedArrays]]
+git-tree-sha1 = "503688b59397b3307443af35cd953a13e8005c16"
+registries = "General"
+uuid = "1277b4bf-5013-50f5-be3d-901d8477a67a"
+version = "2.0.0"
+
+[[deps.SignedDistanceFields]]
+deps = ["Statistics"]
+git-tree-sha1 = "3949ad92e1c9d2ff0cd4a1317d5ecbba682f4b92"
+registries = "General"
+uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96"
+version = "0.4.1"
+
+[[deps.SimpleTraits]]
+deps = ["InteractiveUtils", "MacroTools"]
+git-tree-sha1 = "7ddb0b49c109481b046972c0e4ab02b2127d6a75"
+registries = "General"
+uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
+version = "0.9.6"
+
+[[deps.Sixel]]
+deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"]
+git-tree-sha1 = "2c79185e5261b159474903598c571ddd9f12ff7b"
+registries = "General"
+uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47"
+version = "0.1.6"
+
+[[deps.Sockets]]
+uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
+version = "1.11.0"
+
+[[deps.SortTileRecursiveTree]]
+deps = ["AbstractTrees", "Extents", "GeoInterface"]
+git-tree-sha1 = "f9aa6616a9b3bd01f93f27c010f1d25fc5a094a9"
+registries = "General"
+uuid = "746ee33f-1797-42c2-866d-db2fce69d14d"
+version = "0.1.4"
+
+[[deps.SortingAlgorithms]]
+deps = ["DataStructures"]
+git-tree-sha1 = "13cd91cc9be159e3f4d95b857fa2aa383b53772a"
+registries = "General"
+uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
+version = "1.2.3"
+
+[[deps.SparseArrays]]
+deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
+uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+version = "1.13.0"
+
+[[deps.SpecialFunctions]]
+deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
+git-tree-sha1 = "429071b23f4c9a13fb6582f807cc2ef454082408"
+registries = "General"
+uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
+version = "2.9.0"
+weakdeps = ["ChainRulesCore"]
+
+ [deps.SpecialFunctions.extensions]
+ SpecialFunctionsChainRulesCoreExt = "ChainRulesCore"
+
+[[deps.StableTasks]]
+git-tree-sha1 = "c4f6610f85cb965bee5bfafa64cbeeda55a4e0b2"
+registries = "General"
+uuid = "91464d47-22a1-43fe-8b7f-2d57ee82463f"
+version = "0.1.7"
+
+[[deps.StackViews]]
+deps = ["OffsetArrays"]
+git-tree-sha1 = "be1cf4eb0ac528d96f5115b4ed80c26a8d8ae621"
+registries = "General"
+uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15"
+version = "0.1.2"
+
+[[deps.StaticArrays]]
+deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"]
+git-tree-sha1 = "de349d5585559b692f518b6d3fc7c179d64b2364"
+registries = "General"
+uuid = "90137ffa-7385-5640-81b9-e52037218182"
+version = "1.9.23"
+weakdeps = ["ChainRulesCore", "Statistics"]
+
+ [deps.StaticArrays.extensions]
+ StaticArraysChainRulesCoreExt = "ChainRulesCore"
+ StaticArraysStatisticsExt = "Statistics"
+
+[[deps.StaticArraysCore]]
+git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a"
+registries = "General"
+uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
+version = "1.4.4"
+
+[[deps.Statistics]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "e2b53ce13a53367e96601081e33d34746b571bad"
+registries = "General"
+uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
+version = "1.11.5"
+weakdeps = ["SparseArrays"]
+
+ [deps.Statistics.extensions]
+ SparseArraysExt = ["SparseArrays"]
+
+[[deps.StatsAPI]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "178ed29fd5b2a2cfc3bd31c13375ae925623ff36"
+registries = "General"
+uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
+version = "1.8.0"
+
+[[deps.StatsBase]]
+deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
+git-tree-sha1 = "adb9da019510162e67a4493fc235c23203d8b09e"
+registries = "General"
+uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
+version = "0.34.13"
+
+[[deps.StatsFuns]]
+deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
+git-tree-sha1 = "91a5737baed20ee31f3faea0e51f57461f6a689e"
+registries = "General"
+uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
+version = "2.2.1"
+weakdeps = ["ChainRulesCore", "InverseFunctions"]
+
+ [deps.StatsFuns.extensions]
+ StatsFunsChainRulesCoreExt = "ChainRulesCore"
+ StatsFunsInverseFunctionsExt = "InverseFunctions"
+
+[[deps.StatsModels]]
+deps = ["DataAPI", "DataStructures", "LinearAlgebra", "Printf", "REPL", "ShiftedArrays", "SparseArrays", "StatsAPI", "StatsBase", "StatsFuns", "Tables"]
+git-tree-sha1 = "0db41c4e0d9f3fa195395a6401a8290752c9cd3d"
+registries = "General"
+uuid = "3eaba693-59b7-5ba5-a881-562e759f1c8d"
+version = "0.7.10"
+
+[[deps.StringManipulation]]
+deps = ["PrecompileTools", "StyledStrings"]
+git-tree-sha1 = "9e3a02d73a8f0a9be04e677dbef758aab40f8bea"
+registries = "General"
+uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e"
+version = "0.6.1"
+
+[[deps.StructArrays]]
+deps = ["ConstructionBase", "DataAPI", "Tables"]
+git-tree-sha1 = "4daaddbe37aa80b4551bf7c56adf53e7cfcdf35a"
+registries = "General"
+uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
+version = "0.7.4"
+
+ [deps.StructArrays.extensions]
+ AdaptExt = "Adapt"
+ GPUArraysCoreExt = "GPUArraysCore"
+ KernelAbstractionsExt = "KernelAbstractions"
+ LinearAlgebraExt = "LinearAlgebra"
+ SparseArraysExt = "SparseArrays"
+ StaticArraysExt = "StaticArrays"
+
+ [deps.StructArrays.weakdeps]
+ Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
+ GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
+ KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
+ LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
+
+[[deps.StructTypes]]
+deps = ["Dates", "UUIDs"]
+git-tree-sha1 = "fd6a55e88450cb4256e49103a5a243f065c7b781"
+registries = "General"
+uuid = "856f2bd8-1eba-4b0a-8007-ebc267875bd4"
+version = "1.11.1"
+
+[[deps.StructUtils]]
+deps = ["Dates", "UUIDs"]
+git-tree-sha1 = "ad435e30854ed0f50f4b7f67edd71664afecc5d8"
+registries = "General"
+uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42"
+version = "2.10.0"
+
+ [deps.StructUtils.extensions]
+ StructUtilsDataFramesExt = ["DataFrames"]
+ StructUtilsLazilyInitializedFieldsExt = ["LazilyInitializedFields"]
+ StructUtilsMeasurementsExt = ["Measurements"]
+ StructUtilsStaticArraysCoreExt = ["StaticArraysCore"]
+ StructUtilsTablesExt = ["Tables"]
+
+ [deps.StructUtils.weakdeps]
+ DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
+ LazilyInitializedFields = "0e77f7df-68c5-4e49-93ce-4cd80f5598bf"
+ Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7"
+ StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
+ Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
+
+[[deps.StyledStrings]]
+uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b"
+version = "1.11.0"
+
+[[deps.SuiteSparse]]
+deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
+uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
+
+[[deps.SuiteSparse_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl", "libblastrampoline_jll"]
+uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
+version = "7.10.1+0"
+
+[[deps.TOML]]
+deps = ["Dates"]
+uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
+version = "1.0.3"
+
+[[deps.TableTraits]]
+deps = ["IteratorInterfaceExtensions"]
+git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
+registries = "General"
+uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
+version = "1.0.1"
+
+[[deps.Tables]]
+deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"]
+git-tree-sha1 = "a94d9bdda1b7bed0046cea645639ab3f62196fac"
+registries = "General"
+uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
+version = "1.14.0"
+
+[[deps.Tar]]
+deps = ["ArgTools", "SHA"]
+uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
+version = "1.10.0"
+
+[[deps.TensorCore]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6"
+registries = "General"
+uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
+version = "0.1.1"
+
+[[deps.TiffImages]]
+deps = ["CodecZstd", "ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"]
+git-tree-sha1 = "9ca5f1f2d42f80df4b8c9f6ab5a64f438bbd9976"
+registries = "General"
+uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69"
+version = "0.11.9"
+
+[[deps.TranscodingStreams]]
+git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742"
+registries = "General"
+uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
+version = "0.11.3"
+
+[[deps.TriplotBase]]
+git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b"
+registries = "General"
+uuid = "981d1d27-644d-49a2-9326-4793e63143c3"
+version = "0.1.0"
+
+[[deps.UUIDs]]
+deps = ["Random", "SHA"]
+uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
+version = "1.11.0"
+
+[[deps.Unicode]]
+uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
+version = "1.11.0"
+
+[[deps.UnicodeFun]]
+deps = ["REPL"]
+git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf"
+registries = "General"
+uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1"
+version = "0.4.1"
+
+[[deps.Unitful]]
+deps = ["Dates", "LinearAlgebra", "Random"]
+git-tree-sha1 = "1f0f9f401753701a7e4113b5056ca38d33875b55"
+registries = "General"
+uuid = "1986cc42-f94f-5a68-af5c-568840ba703d"
+version = "1.29.0"
+
+ [deps.Unitful.extensions]
+ ConstructionBaseUnitfulExt = "ConstructionBase"
+ ForwardDiffExt = "ForwardDiff"
+ InverseFunctionsUnitfulExt = "InverseFunctions"
+ LatexifyExt = ["Latexify", "LaTeXStrings"]
+ NaNMathExt = "NaNMath"
+ PrintfExt = "Printf"
+
+ [deps.Unitful.weakdeps]
+ ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
+ ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
+ InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
+ LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
+ Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
+ NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
+ Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
+
+[[deps.WeakRefStrings]]
+deps = ["DataAPI", "InlineStrings", "Parsers"]
+git-tree-sha1 = "0716e01c3b40413de5dedbc9c5c69f27cddfddfc"
+registries = "General"
+uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5"
+version = "1.4.3"
+
+[[deps.WebP]]
+deps = ["CEnum", "ColorTypes", "FileIO", "FixedPointNumbers", "ImageCore", "libwebp_jll"]
+git-tree-sha1 = "aa1ca3c47f119fbdae8770c29820e5e6119b83f2"
+registries = "General"
+uuid = "e3aaa7dc-3e4b-44e0-be63-ffb868ccd7c1"
+version = "0.1.3"
+
+[[deps.WoodburyMatrices]]
+deps = ["LinearAlgebra", "SparseArrays"]
+git-tree-sha1 = "248a7031b3da79a127f14e5dc5f417e26f9f6db7"
+registries = "General"
+uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6"
+version = "1.1.0"
+
+[[deps.WorkerUtilities]]
+git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7"
+registries = "General"
+uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60"
+version = "1.6.1"
+
+[[deps.XZ_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "e52eca002a11c30a858185efdfb15311e1c7a6bf"
+registries = "General"
+uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800"
+version = "5.8.4+0"
+
+[[deps.Xorg_libX11_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
+git-tree-sha1 = "ce91b54a5f90c4f27df6950706234b34e49cf79e"
+registries = "General"
+uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
+version = "1.8.14+0"
+
+[[deps.Xorg_libXau_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "aa1261ebbac3ccc8d16558ae6799524c450ed16b"
+registries = "General"
+uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
+version = "1.0.13+0"
+
+[[deps.Xorg_libXdmcp_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "52858d64353db33a56e13c341d7bf44cd0d7b309"
+registries = "General"
+uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
+version = "1.1.6+0"
+
+[[deps.Xorg_libXext_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
+git-tree-sha1 = "1a4a26870bf1e5d26cd585e38038d399d7e65706"
+registries = "General"
+uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
+version = "1.3.8+0"
+
+[[deps.Xorg_libXfixes_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
+git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef"
+registries = "General"
+uuid = "d091e8ba-531a-589c-9de9-94069b037ed8"
+version = "6.0.2+0"
+
+[[deps.Xorg_libXrender_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
+git-tree-sha1 = "a54cf54677c9f6eac0d97e9d757c233b56bc21b9"
+registries = "General"
+uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
+version = "0.9.13+0"
+
+[[deps.Xorg_libpciaccess_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "58972370b81423fc546c56a60ed1a009450177c3"
+registries = "General"
+uuid = "a65dc6b1-eb27-53a1-bb3e-dea574b5389e"
+version = "0.19.0+0"
+
+[[deps.Xorg_libxcb_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"]
+git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422"
+registries = "General"
+uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
+version = "1.17.1+0"
+
+[[deps.Xorg_xtrans_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "a63799ff68005991f9d9491b6e95bd3478d783cb"
+registries = "General"
+uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
+version = "1.6.0+0"
+
+[[deps.Zlib_jll]]
+deps = ["Libdl"]
+uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
+version = "1.3.2+0"
+
+[[deps.Zstd_jll]]
+deps = ["CompilerSupportLibraries_jll", "Libdl"]
+uuid = "3161d3a3-bdf6-5164-811a-617609db77b4"
+version = "1.5.7+1"
+
+[[deps.dlfcn_win32_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "e141d67ffe550eadfb5af1bdbdaf138031e4805f"
+registries = "General"
+uuid = "c4b69c83-5512-53e3-94e6-de98773c479f"
+version = "1.4.2+0"
+
+[[deps.isoband_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c"
+registries = "General"
+uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4"
+version = "0.2.3+0"
+
+[[deps.libaom_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1210ba774d3427387d307bf1f416d699b7c39417"
+registries = "General"
+uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b"
+version = "3.15.1+0"
+
+[[deps.libass_jll]]
+deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "cb007192783c56d8249db4cf0e3495001edfe414"
+registries = "General"
+uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
+version = "0.17.5+0"
+
+[[deps.libblastrampoline_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
+version = "5.15.0+0"
+
+[[deps.libdeflate_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "7ee221abc4f125ce18e73d48367cde0e16bc93b9"
+registries = "General"
+uuid = "46979653-d7f6-5232-b59e-dd310c4598de"
+version = "1.26.0+0"
+
+[[deps.libdrm_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libpciaccess_jll"]
+git-tree-sha1 = "28e57478e8a160d346a19c28b3fffb9273bcc9c2"
+registries = "General"
+uuid = "8e53e030-5e6c-5a89-a30b-be5b7263a166"
+version = "2.4.134+0"
+
+[[deps.libfdk_aac_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df"
+registries = "General"
+uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
+version = "2.0.4+0"
+
+[[deps.libpng_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "1fcd6cf05d23adab0b5ffc496d020537215751dc"
+registries = "General"
+uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
+version = "1.6.59+1"
+
+[[deps.libsixel_jll]]
+deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"]
+git-tree-sha1 = "e067c8bae65bb40866552296a2d5b4dc65b8928f"
+registries = "General"
+uuid = "075b6546-f08a-558a-be8f-8157d0f608a5"
+version = "1.80.702+0"
+
+[[deps.libva_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "libdrm_jll"]
+git-tree-sha1 = "7dbf96baae3310fe2fa0df0ccbb3c6288d5816c9"
+registries = "General"
+uuid = "9a156e7d-b971-5f62-b2c9-67348b8fb97c"
+version = "2.23.0+0"
+
+[[deps.libvorbis_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"]
+git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5"
+registries = "General"
+uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
+version = "1.3.8+0"
+
+[[deps.libwebp_jll]]
+deps = ["Artifacts", "Giflib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Libtiff_jll", "libpng_jll"]
+git-tree-sha1 = "52d3b9475133c3bc8c0a7f90f18bfc8cdb5a443a"
+registries = "General"
+uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2"
+version = "1.6.1+0"
+
+[[deps.nghttp2_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
+uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
+version = "1.70.0+0"
+
+[[deps.p7zip_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
+uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
+version = "17.8.3+0"
+
+[[deps.x264_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7"
+registries = "General"
+uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
+version = "10164.0.1+0"
+
+[[deps.x265_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3"
+registries = "General"
+uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
+version = "4.1.0+0"
+
+[registries.General]
+url = "https://github.com/JuliaRegistries/General.git"
+uuid = "23338594-aafe-5451-b93e-139f81909106"
+"""
+
+# ╔═╡ Cell order:
+# ╠═f6602dd0-292c-4a63-8247-94d626d87f39
+# ╠═82290cf0-cc7e-11f1-afb5-679eb5954384
+# ╠═57fe870c-3366-4aaf-b2a3-014edf609e7a
+# ╠═88ef8628-e883-4113-abd3-080e2b2376d8
+# ╠═5c21db41-78f6-4db7-ad1e-ff1900afdca3
+# ╠═d61dc3ca-fccc-4770-af6d-aa5082c55369
+# ╠═fc5e12f2-3978-4979-935c-0d9c83d8d2e0
+# ╠═faaa0eb8-be12-42a4-abf8-c9ffbb07df9a
+# ╠═02acee4c-f198-43f5-ab21-939f30969361
+# ╠═4e23c813-6e54-4f47-9345-40d6a698913e
+# ╠═2f2ad881-4177-462c-b2e3-6c2ebc9d8fa1
+# ╠═7a3ad16b-4d08-434e-82dd-23f186aa1d9b
+# ╠═76184222-dd79-4e3b-877a-8eced64fe6ae
+# ╠═c9c823ad-9875-4efa-82b4-d6189a141b12
+# ╠═3b777682-5faa-47c6-bd70-98a06f368d1a
+# ╠═c126fdcc-e149-4834-af5c-503465ffdede
+# ╠═7aa0f225-948d-4d1f-8b5a-2262f879783b
+# ╠═4aa84d18-d2ec-4219-b85d-6ba5e08bc7e8
+# ╠═73ed2f4e-38d7-4f64-9ac7-b53acc046200
+# ╠═92ea415f-c0d8-4f98-8981-a6680e0999d7
+# ╠═399edbd0-61e2-4c72-a3a0-a1147cf868fc
+# ╠═f0f55d3a-7a07-4e84-bf6a-178150a2b71c
+# ╠═da1115e1-76c3-4c35-a6f3-9714b4263dea
+# ╠═b0f27193-5c75-48b5-9bac-044089da7443
+# ╠═fea4b109-3036-4819-94b4-a0a90626b3fb
+# ╠═3c3ed324-b766-4061-98dc-548a4b71694d
+# ╠═9cbf0393-130e-4e6e-a1fc-f0566feec3e3
+# ╟─00000000-0000-0000-0000-000000000001
+# ╟─00000000-0000-0000-0000-000000000002