Merge master into staging-next

Changed files
+1629 -1382
doc
nixos
pkgs
applications
audio
zynaddsubfx
emulators
libretro
misc
gpxsee
by-name
bt
btcpayserver
co
conkeyscan
ct
do
docker-language-server
doomrunner
er
erigon
fi
filen-cli
gi
gifticlib
git-run
gl
globalarrays
im
imsprog
ka
ku
kubernetes-controller-tools
li
linux-firmware
mi
mirrorbits
mo
nb
nbxplorer
nm
np
npins
ol
ollama
pa
panoply
pd
pr
pr-tracker
sb
sbomnix
su
surrealdb-migrations
sw
swiftformat
ta
tailwindcss_4
te
texi2html
tu
wa
wakatime-cli
wl
wlinhibit
development
interpreters
erlang
python-modules
aioautomower
aiocomelit
aioesphomeapi
aiohasupervisor
aiokem
aioshelly
aiovodafone
apsystems-ez1
bellows
bleak-esphome
bluemaestro-ble
bluetooth-auto-recovery
bluetooth-data-tools
bluetooth-sensor-state-data
deebot-client
devolo-home-control-api
firebase-messaging
ghome-foyer-api
google-geo-type
google-maps-routing
habluetooth
hass-nabucasa
hdate
home-assistant-bluetooth
homematicip
imeon-inverter-api
inkbird-ble
leaone-ble
midea-local
moddb
pyephember
pyephember2
pylamarzocco
pymelcloud
pymiele
pypglab
pyrate-limiter
pysmartthings
pyswitchbot
python-melcloud
python-roborock
python-tado
renault-api
requests-ratelimiter
sensorpro-ble
sensorpush-ble
tencentcloud-sdk-python
teslemetry-stream
thermobeacon-ble
thermopro-ble
uiprotect
vacuum-map-parser-base
vacuum-map-parser-roborock
velbus-aio
voip-utils
weheat
yoto-api
zeroconf
zha
zha-quirks
zigpy
zigpy-deconz
web
servers
home-assistant
custom-components
frigate
frigidaire
localtuya
midea_ac_lan
miele
nest_protect
solax_modbus
volvo_cars
xiaomi_miot
yoto_ha
custom-lovelace-modules
mini-graph-card
sankey-chart
python-modules
hass-web-proxy-lib
top-level
+18
doc/hooks/cmake.section.md
···
#### `dontUseCmakeConfigure` {#dont-use-cmake-configure}
When set to true, don't use the predefined `cmakeConfigurePhase`.
+
+
## Controlling CTest invocation {#cmake-ctest}
+
+
By default tests are run by make in [`checkPhase`](#ssec-check-phase) or by [ninja](#ninja) if `ninja` is
+
available in `nativeBuildInputs`. Makefile and Ninja generators produce the `test` target, which invokes `ctest` under the hood.
+
This makes passing additional arguments to `ctest` difficult, so it's possible to invoke it directly in `checkPhase`
+
by adding `ctestCheckHook` to `nativeCheckInputs`.
+
+
### CTest Variables {#cmake-ctest-variables}
+
+
#### `disabledTests` {#cmake-ctest-disabled-tests}
+
+
Allows to disable running a list of tests. Note that regular expressions are not supported by `disabledTests`, but
+
it can be combined with `--exclude-regex` option.
+
+
#### `ctestFlags` {#cmake-ctest-flags}
+
+
Additional options passed to `ctest` together with `checkFlags`.
+12
doc/redirects.json
···
"chap-release-notes": [
"release-notes.html#chap-release-notes"
],
+
"cmake-ctest": [
+
"index.html#cmake-ctest"
+
],
+
"cmake-ctest-disabled-tests": [
+
"index.html#cmake-ctest-disabled-tests"
+
],
+
"cmake-ctest-flags": [
+
"index.html#cmake-ctest-flags"
+
],
+
"cmake-ctest-variables": [
+
"index.html#cmake-ctest-variables"
+
],
"ex-build-helpers-extendMkDerivation": [
"index.html#ex-build-helpers-extendMkDerivation"
],
+1
nixos/tests/all-tests.nix
···
tuptime = handleTest ./tuptime.nix { };
turbovnc-headless-server = handleTest ./turbovnc-headless-server.nix { };
turn-rs = handleTest ./turn-rs.nix { };
+
tusd = runTest ./tusd/default.nix;
tuxguitar = runTest ./tuxguitar.nix;
twingate = runTest ./twingate.nix;
typesense = handleTest ./typesense.nix { };
+50
nixos/tests/tusd/default.nix
···
+
{ pkgs, lib, ... }:
+
+
let
+
port = 1080;
+
+
client =
+
{ pkgs, ... }:
+
{
+
environment.systemPackages = [ pkgs.curl ];
+
};
+
+
server =
+
{ pkgs, ... }:
+
{
+
# tusd does not have a NixOS service yet.
+
systemd.services.tusd = {
+
wantedBy = [ "multi-user.target" ];
+
+
serviceConfig = {
+
ExecStart = ''${pkgs.tusd}/bin/tusd -port "${toString port}" -upload-dir=/data'';
+
};
+
};
+
networking.firewall.allowedTCPPorts = [ port ];
+
};
+
in
+
{
+
name = "tusd";
+
meta.maintainers = with lib.maintainers; [
+
nh2
+
kalbasit
+
];
+
+
nodes = {
+
inherit server;
+
inherit client;
+
};
+
+
testScript = ''
+
server.wait_for_unit("tusd.service")
+
server.wait_for_open_port(${toString port})
+
+
# Create large file.
+
client.succeed("${pkgs.coreutils}/bin/truncate --size=100M file-100M.bin")
+
+
# Upload it.
+
client.succeed("${./tus-curl-upload.sh} file-100M.bin http://server:${toString port}/files/")
+
+
print("Upload succeeded")
+
'';
+
}
+50
nixos/tests/tusd/tus-curl-upload.sh
···
+
#!/usr/bin/env bash
+
+
# Adapted from:
+
# - https://github.com/tus/tus.io/issues/96
+
+
if [ ! -f "${1}" ]; then
+
echo -e "\n\033[1;31m✘\033[0m First argument needs to be an existing file.\n"
+
exit 1
+
fi
+
+
if [ -z "${2}" ]; then
+
echo -e "\n\033[1;31m✘\033[0m Second argument needs to be the TUS server's URL.\n"
+
exit 1
+
fi
+
+
file=${1}
+
TUS_URL=${2}
+
filename=$(basename "${file}" | base64)
+
filesize="$(wc -c <"${file}")"
+
+
# Apparently 'Location: ..' is terminated by CRLF. grep and awk faithfully
+
# preserve the line ending, and the shell's $() substitution strips off the
+
# final LF leaving you with a string that just ends with a CR.
+
#
+
# When the CR is printed, the cursor moves to the beginning of the line and
+
# whatever gets printed next overwrites what was there.
+
# ... | tr -d '\015'
+
location=$(curl \
+
--silent --show-error \
+
-I \
+
-X POST \
+
-H "Tus-Resumable: 1.0.0" \
+
-H "Content-Length: 0" \
+
-H "Upload-Length: ${filesize}" \
+
-H "Upload-Metadata: name ${filename}" \
+
"${TUS_URL}" | grep 'Location:' | awk '{print $2}' | tr -d '\015')
+
+
if [ -n "${location}" ]; then
+
curl \
+
-X PATCH \
+
-H "Tus-Resumable: 1.0.0" \
+
-H "Upload-Offset: 0" \
+
-H "Content-Length: ${filesize}" \
+
-H "Content-Type: application/offset+octet-stream" \
+
--data-binary "@${file}" \
+
"${location}" -v
+
else
+
echo -e "\n\033[1;31m✘\033[0m File creation failed..\n"
+
exit 1
+
fi
+1
nixos/tests/vector/default.nix
···
file-sink = import ./file-sink.nix { inherit system pkgs; };
api = import ./api.nix { inherit system pkgs; };
dnstap = import ./dnstap.nix { inherit system pkgs; };
+
journald-clickhouse = import ./journald-clickhouse.nix { inherit system pkgs; };
nginx-clickhouse = import ./nginx-clickhouse.nix { inherit system pkgs; };
syslog-quickwit = import ./syslog-quickwit.nix { inherit system pkgs; };
}
+157
nixos/tests/vector/journald-clickhouse.nix
···
+
import ../make-test-python.nix (
+
{ lib, pkgs, ... }:
+
let
+
# Take the original journald message and create a new payload which only
+
# contains the relevant fields - these must match the database columns.
+
journalVrlRemapTransform = {
+
journald_remap = {
+
inputs = [ "journald" ];
+
type = "remap";
+
source = ''
+
m = {}
+
m.app = .SYSLOG_IDENTIFIER
+
m.host = .host
+
m.severity = to_int(.PRIORITY) ?? 0
+
m.level = to_syslog_level(m.severity) ?? ""
+
m.message = strip_ansi_escape_codes!(.message)
+
m.timestamp = .timestamp
+
m.uid = to_int(._UID) ?? 0
+
m.pid = to_int(._PID) ?? 0
+
. = [m]
+
'';
+
};
+
};
+
in
+
{
+
name = "vector-journald-clickhouse";
+
meta.maintainers = [ pkgs.lib.maintainers.happysalada ];
+
+
nodes = {
+
clickhouse =
+
{ config, pkgs, ... }:
+
{
+
virtualisation.diskSize = 5 * 1024;
+
virtualisation.memorySize = 4096;
+
+
networking.firewall.allowedTCPPorts = [ 6000 ];
+
+
services.vector = {
+
enable = true;
+
journaldAccess = true;
+
+
settings = {
+
sources = {
+
journald = {
+
type = "journald";
+
};
+
+
vector_source = {
+
type = "vector";
+
address = "[::]:6000";
+
};
+
};
+
+
transforms = journalVrlRemapTransform;
+
+
sinks = {
+
clickhouse = {
+
type = "clickhouse";
+
inputs = [
+
"journald_remap"
+
"vector_source"
+
];
+
endpoint = "http://localhost:8123";
+
database = "journald";
+
table = "logs";
+
date_time_best_effort = true;
+
};
+
};
+
};
+
+
};
+
+
services.clickhouse = {
+
enable = true;
+
};
+
};
+
+
vector =
+
{ config, pkgs, ... }:
+
{
+
services.vector = {
+
enable = true;
+
journaldAccess = true;
+
+
settings = {
+
sources = {
+
journald = {
+
type = "journald";
+
};
+
};
+
+
transforms = journalVrlRemapTransform;
+
+
sinks = {
+
vector_sink = {
+
type = "vector";
+
inputs = [ "journald_remap" ];
+
address = "clickhouse:6000";
+
};
+
};
+
};
+
};
+
};
+
};
+
+
testScript =
+
let
+
# work around quote/substitution complexity by Nix, Perl, bash and SQL.
+
databaseDDL = pkgs.writeText "database.sql" "CREATE DATABASE IF NOT EXISTS journald";
+
+
# https://clickhouse.com/blog/storing-log-data-in-clickhouse-fluent-bit-vector-open-telemetry
+
tableDDL = pkgs.writeText "table.sql" ''
+
CREATE TABLE IF NOT EXISTS journald.logs (
+
timestamp DateTime64(6),
+
app LowCardinality(String),
+
host LowCardinality(String),
+
level LowCardinality(String),
+
severity UInt8,
+
message String,
+
uid UInt16,
+
pid UInt32,
+
)
+
ENGINE = MergeTree()
+
ORDER BY (host, app, timestamp)
+
PARTITION BY toYYYYMM(timestamp)
+
'';
+
+
selectQuery = pkgs.writeText "select.sql" ''
+
SELECT COUNT(host) FROM journald.logs
+
WHERE message LIKE '%Vector has started%'
+
'';
+
in
+
''
+
clickhouse.wait_for_unit("clickhouse")
+
clickhouse.wait_for_open_port(6000)
+
clickhouse.wait_for_open_port(8123)
+
+
clickhouse.succeed(
+
"cat ${databaseDDL} | clickhouse-client"
+
)
+
+
clickhouse.succeed(
+
"cat ${tableDDL} | clickhouse-client"
+
)
+
+
for machine in clickhouse, vector:
+
machine.wait_for_unit("vector")
+
machine.wait_until_succeeds(
+
"journalctl -o cat -u vector.service | grep 'Vector has started'"
+
)
+
+
clickhouse.wait_until_succeeds(
+
"cat ${selectQuery} | clickhouse-client | grep 2"
+
)
+
'';
+
}
+
)
+12 -20
pkgs/applications/audio/zynaddsubfx/default.nix
···
# Test dependencies
cxxtest,
ruby,
+
ctestCheckHook,
}:
assert builtins.any (g: guiModule == g) [
···
nativeCheckInputs = [
cxxtest
ruby
+
ctestCheckHook
];
-
# TODO: Update cmake hook to make it simpler to selectively disable cmake tests: #113829
-
checkPhase =
-
let
-
disabledTests =
-
# PortChecker is non-deterministic. It's fixed in the master
-
# branch, but backporting would require an update to rtosc, so
-
# we'll just disable it until the next release.
-
[ "PortChecker" ]
-
-
# Tests fail on aarch64
-
++ lib.optionals stdenv.hostPlatform.isAarch64 [
-
"MessageTest"
-
"UnisonTest"
-
];
-
in
-
''
-
runHook preCheck
-
ctest --output-on-failure -E '^${lib.concatStringsSep "|" disabledTests}$'
-
runHook postCheck
-
'';
+
disabledTests =
+
# PortChecker is non-deterministic. It's fixed in the master
+
# branch, but backporting would require an update to rtosc, so
+
# we'll just disable it until the next release.
+
[ "PortChecker" ]
+
# Tests fail on aarch64
+
++ lib.optionals stdenv.hostPlatform.isAarch64 [
+
"MessageTest"
+
"UnisonTest"
+
];
# Use Zyn-Fusion logo for zest build
# An SVG version of the logo isn't hosted anywhere we can fetch, I
+3 -3
pkgs/applications/emulators/libretro/cores/mame2003-plus.nix
···
}:
mkLibretroCore {
core = "mame2003-plus";
-
version = "0-unstable-2025-04-16";
+
version = "0-unstable-2025-05-08";
src = fetchFromGitHub {
owner = "libretro";
repo = "mame2003-plus-libretro";
-
rev = "c2128c3e82d884f39d824b5ef2716ac35dfa406b";
-
hash = "sha256-acicfUJlDT2Tm3aGTs9tAGaAGCC22ebRXnVLAxgcRI8=";
+
rev = "d3e54870080f9389b4b3e6c6f717bfa29a2fd7fe";
+
hash = "sha256-k3YLCP9FNBu5rD+T5bM+hJr1XNbUlXm8a96VRcj7PFw=";
};
makefile = "Makefile";
+2 -2
pkgs/applications/misc/gpxsee/default.nix
···
in
stdenv.mkDerivation (finalAttrs: {
pname = "gpxsee";
-
version = "13.40";
+
version = "13.42";
src = fetchFromGitHub {
owner = "tumic0";
repo = "GPXSee";
tag = finalAttrs.version;
-
hash = "sha256-xxMnqUsYfmTD1ZNAm+lFMLvXvo6qRrq88m234ZtYiuA=";
+
hash = "sha256-94zCDtja1b85Wgz4slG17ETT/TMPPCyXld3WdtGjBzA=";
};
buildInputs =
+6 -31
pkgs/by-name/bt/btcpayserver/deps.json
···
},
{
"pname": "BTCPayServer.Hwi",
-
"version": "2.0.2",
-
"hash": "sha256-CUq68FosFJyUtjjpnONhqQEXjtC9mF7zmkRjZnGwA1I="
+
"version": "2.0.6",
+
"hash": "sha256-LEj2R9hFQVCBol91l1ICn13z8rxT9iVkKT4krFskzLM="
},
{
"pname": "BTCPayServer.Lightning.All",
···
},
{
"pname": "NBitcoin",
-
"version": "5.0.40",
-
"hash": "sha256-cEu9luoct9YiL80z16THezZcaHgSPf6UU4Rz5QmyH+c="
-
},
-
{
-
"pname": "NBitcoin",
-
"version": "6.0.8",
-
"hash": "sha256-pfJRCSVAdh87SmEKeAYg7TNoGpQDtf026N+V0bL/ILk="
-
},
-
{
-
"pname": "NBitcoin",
-
"version": "7.0.31",
-
"hash": "sha256-sybd3AOGVlN7U6rLuWSi1kVxtBeaXb8iy786gc0CIh4="
-
},
-
{
-
"pname": "NBitcoin",
"version": "7.0.45",
"hash": "sha256-hWgtvAJvONk6jg1WiytE6M+ExkQJUCwO6cyVA6JE+8w="
},
{
"pname": "NBitcoin",
-
"version": "7.0.46",
-
"hash": "sha256-c5KHQ/TYGBTMoKKKo7XYR8r7VTJlaU0ZW6KqWRMjh2Y="
+
"version": "7.0.50",
+
"hash": "sha256-l3H70u5OAbd2hevX/yeVBdQyee/dUn5mp4iGvTnTcjk="
},
{
"pname": "NBitcoin",
-
"version": "7.0.48",
-
"hash": "sha256-IbiCGHu1cug4kDzwS+vpTqX4jYifxWegFpIctjb/bOA="
-
},
-
{
-
"pname": "NBitcoin",
-
"version": "7.0.49",
-
"hash": "sha256-0MQSBeQahSX9s1PPFWengy5J8pWiKR48Vx7dsh3I2p4="
-
},
-
{
-
"pname": "NBitcoin",
-
"version": "7.0.50",
-
"hash": "sha256-l3H70u5OAbd2hevX/yeVBdQyee/dUn5mp4iGvTnTcjk="
+
"version": "8.0.8",
+
"hash": "sha256-gpbxlfE7TN7mUOcWF9+r8htQTc19KqAuzsVaG5RYa3A="
},
{
"pname": "NBitcoin.Altcoins",
+2 -2
pkgs/by-name/bt/btcpayserver/package.nix
···
buildDotnetModule rec {
pname = "btcpayserver";
-
version = "2.1.0";
+
version = "2.1.1";
src = fetchFromGitHub {
owner = "btcpayserver";
repo = "btcpayserver";
tag = "v${version}";
-
sha256 = "sha256-vojRe64STkCKNn/es5+TyBAXvSBXkjjGLbykuKTEa5k=";
+
hash = "sha256-5zvxLEQbKTcslcpq1JRgY/L0XWnQ4UyFWww6SGcTtcs=";
};
projectFile = "BTCPayServer/BTCPayServer.csproj";
+21 -3
pkgs/by-name/co/conkeyscan/package.nix
···
fetchFromGitHub,
}:
-
python3.pkgs.buildPythonApplication rec {
+
let
+
python = python3.override {
+
self = python3;
+
packageOverrides = self: super: {
+
pyrate-limiter = super.pyrate-limiter.overridePythonAttrs (oldAttrs: rec {
+
version = "2.10.0";
+
src = fetchFromGitHub {
+
inherit (oldAttrs.src) owner repo;
+
tag = "v${version}";
+
hash = "sha256-CPusPeyTS+QyWiMHsU0ii9ZxPuizsqv0wQy3uicrDw0=";
+
};
+
doCheck = false;
+
});
+
};
+
};
+
+
in
+
+
python.pkgs.buildPythonApplication rec {
pname = "conkeyscan";
version = "1.1.0";
pyproject = true;
···
--replace-fail "{{VERSION_PLACEHOLDER}}" "${version}"
'';
-
build-system = with python3.pkgs; [ setuptools ];
+
build-system = with python.pkgs; [ setuptools ];
-
dependencies = with python3.pkgs; [
+
dependencies = with python.pkgs; [
atlassian-python-api
beautifulsoup4
clize
+44
pkgs/by-name/ct/ctestCheckHook/ctest-check-hook.sh
···
+
# shellcheck shell=bash disable=SC2154
+
+
ctestCheckHook() {
+
echo "Executing ctestCheckHook"
+
+
runHook preCheck
+
+
local buildCores=1
+
+
if [ "${enableParallelChecking-1}" ]; then
+
buildCores="$NIX_BUILD_CORES"
+
fi
+
+
local flagsArray=(
+
"-j$buildCores"
+
# This is enabled by the cmakeConfigurePhase by exporting
+
# CTEST_OUTPUT_ON_FAILURE, but it makes sense it enable it globally here
+
# as well.
+
"--output-on-failure"
+
)
+
+
local disabledTestsArray=()
+
concatTo disabledTestsArray disabledTests
+
+
if [ ${#disabledTestsArray[@]} -ne 0 ]; then
+
local ctestExcludedTestsFile=$NIX_BUILD_TOP/.ctest-excluded-tests
+
disabledTestsString="$(concatStringsSep "\n" disabledTestsArray)"
+
echo -e "$disabledTestsString" >"$ctestExcludedTestsFile"
+
flagsArray+=("--exclude-from-file" "$ctestExcludedTestsFile")
+
fi
+
+
concatTo flagsArray ctestFlags checkFlags checkFlagsArray
+
+
echoCmd 'ctest flags' "${flagsArray[@]}"
+
ctest "${flagsArray[@]}"
+
+
echo "Finished ctestCheckHook"
+
+
runHook postCheck
+
}
+
+
if [ -z "${dontUseCTestCheck-}" ] && [ -z "${checkPhase-}" ]; then
+
checkPhase=ctestCheckHook
+
fi
+9
pkgs/by-name/ct/ctestCheckHook/package.nix
···
+
{
+
makeSetupHook,
+
cmake,
+
}:
+
+
makeSetupHook {
+
name = "ctestCheckHook";
+
propagatedBuildInputs = [ cmake ];
+
} ./ctest-check-hook.sh
+3 -3
pkgs/by-name/do/docker-language-server/package.nix
···
buildGoModule rec {
pname = "docker-language-server";
-
version = "0.3.8";
+
version = "0.6.0";
src = fetchFromGitHub {
owner = "docker";
repo = "docker-language-server";
tag = "v${version}";
-
hash = "sha256-irjIa+GC/4tEMoC8ZY/8n9J/Z5G/VesSj4xWqnOj6uY=";
+
hash = "sha256-PVcJSU5JZNGESGP2Gg7X4slVIDwNK5fpvDZg3OBOuRA=";
};
-
vendorHash = "sha256-O1SQVKfnOkxWqJWamRkb8RMRsWriBZqH3oYSzIHX7Ug=";
+
vendorHash = "sha256-YDBNJzTyPEM/Zvv1Ieo3GG+NlvDOrghxdOqkKsF04AE=";
nativeCheckInputs = [
docker
+2 -2
pkgs/by-name/do/doomrunner/package.nix
···
stdenv.mkDerivation (finalAttrs: {
pname = "doomrunner";
-
version = "1.9.0";
+
version = "1.9.1";
src = fetchFromGitHub {
owner = "Youda008";
repo = "DoomRunner";
tag = "v${finalAttrs.version}";
-
hash = "sha256-rCoMTPGjIFAcNncBGg1IMdUahzjH0WlFZBZS0UmNI/g=";
+
hash = "sha256-N5kj2Z3QW29kOw2khET6Z4E9nFBBjNTgKw2xbCQrWKY=";
};
buildInputs = [ kdePackages.qtbase ];
+3 -3
pkgs/by-name/er/erigon/package.nix
···
let
pname = "erigon";
-
version = "3.0.2";
+
version = "3.0.3";
in
buildGoModule {
inherit pname version;
···
owner = "ledgerwatch";
repo = pname;
rev = "v${version}";
-
hash = "sha256-1rMlRlEUheW6g3kigh+DjQxtNJOrqrADPkjQn7TQr1g=";
+
hash = "sha256-gSgkdg7677OBOkAbsEjxX1QttuIbfve2A3luUZoZ5Ik=";
fetchSubmodules = true;
};
-
vendorHash = "sha256-tCohubwCk5HERoAaGWgEsl5kpI8w8dn0oZCZ2AxkKXk=";
+
vendorHash = "sha256-8eyC3JkRcRlFw8CyTK5w1XySur2jAeFGXkEaY/3Oq0k=";
proxyVendor = true;
# Build errors in mdbx when format hardening is enabled:
+3 -3
pkgs/by-name/fi/filen-cli/package.nix
···
buildNpmPackage (finalAttrs: {
pname = "filen-cli";
-
version = "0.0.33";
+
version = "0.0.34";
src = fetchFromGitHub {
owner = "FilenCloudDienste";
repo = "filen-cli";
tag = "v${finalAttrs.version}";
-
hash = "sha256-piGXcPUwJDOg8EAYML0BiSPRM+1LogU8s2BXtBud5ww=";
+
hash = "sha256-iISW9EAk8haWUCh9I8qHhrBKLqHeBUC8sWA0MnXqQSA=";
};
-
npmDepsHash = "sha256-4GdipHnaqv3LrejMXF73duNyZKgD/0ApzUjiI/QQ30g=";
+
npmDepsHash = "sha256-0DpiUjUFc0ThzP6/qrSEebKDq2fnr/CpcmtPFaIVHhU=";
inherit nodejs;
+6 -5
pkgs/by-name/gi/gifticlib/package.nix
···
expat,
nifticlib,
zlib,
+
ctestCheckHook,
}:
stdenv.mkDerivation {
···
# without the test data, this is only a few basic tests
doCheck = !stdenv.hostPlatform.isDarwin;
-
checkPhase = ''
-
runHook preCheck
-
ctest -LE 'NEEDS_DATA'
-
runHook postCheck
-
'';
+
nativeCheckInputs = [ ctestCheckHook ];
+
checkFlags = [
+
"-LE"
+
"NEEDS_DATA"
+
];
meta = with lib; {
homepage = "https://www.nitrc.org/projects/gifti";
+9
pkgs/by-name/gi/git-run/package.nix
···
makeCacheWritable = true;
dontBuild = true;
+
postInstall = ''
+
echo "Removing broken symlinks in node_modules/.bin"
+
rm -f $out/lib/node_modules/${pname}/node_modules/.bin/_mocha
+
rm -f $out/lib/node_modules/${pname}/node_modules/.bin/he
+
rm -f $out/lib/node_modules/${pname}/node_modules/.bin/mkdirp
+
rm -f $out/lib/node_modules/${pname}/node_modules/.bin/mocha
+
rm -f $out/lib/node_modules/${pname}/node_modules/.bin/rimraf
+
'';
+
meta = {
description = "Multiple git repository management tool";
homepage = "https://mixu.net/gr/";
+2 -2
pkgs/by-name/gl/globalarrays/package.nix
···
stdenv.mkDerivation rec {
pname = "globalarrays";
-
version = "5.9.1";
+
version = "5.9.2";
src = fetchFromGitHub {
owner = "GlobalArrays";
repo = "ga";
rev = "v${version}";
-
sha256 = "sha256-bMX538yen9cINPCtgf7SUGGsNRJugMrveqXtChHzPkk=";
+
sha256 = "sha256-leCvbWteOp7z7ORwtljA+KslHUptY2vdupZTmAjsArg=";
};
nativeBuildInputs = [
+2 -2
pkgs/by-name/im/imsprog/package.nix
···
stdenv.mkDerivation (finalAttrs: {
pname = "imsprog";
-
version = "1.5.2";
+
version = "1.5.3";
src = fetchFromGitHub {
owner = "bigbigmdm";
repo = "IMSProg";
tag = "v${finalAttrs.version}";
-
hash = "sha256-G2hD9h9hcuUO35z/k46+24KTgqGiufa3dwa4LQVA1yY=";
+
hash = "sha256-vT2SAhHfgs4HR0V0Tu0MLCL9nizf9u4z/H70PJKhA9k=";
};
strictDeps = true;
+6
pkgs/by-name/ka/kanidm/1_6.nix
···
+
import ./generic.nix {
+
version = "1.6.2";
+
hash = "sha256-rfQNx6yAj1mDW7UL8mz01TqMAET9D5fL02JhHeN5zV4=";
+
cargoHash = "sha256-3XUAwuRKtdnMNhH92lgwgeN2rMmzgqir1+OZNaTGmks=";
+
patchDir = ./patches/1_6;
+
}
+1 -1
pkgs/by-name/ka/kanidm/package.nix
···
-
import ./1_5.nix
+
import ./1_6.nix
+159
pkgs/by-name/ka/kanidm/patches/1_6/oauth2-basic-secret-modify.patch
···
+
From fc26fe5ac9e9cd65af82609c5a4966c8f756ea0f Mon Sep 17 00:00:00 2001
+
From: oddlama <oddlama@oddlama.org>
+
Date: Fri, 21 Mar 2025 16:07:54 +0100
+
Subject: [PATCH 1/2] oauth2 basic secret modify
+
+
---
+
server/core/src/actors/v1_write.rs | 42 +++++++++++++++++++++++++++++
+
server/core/src/https/v1.rs | 6 ++++-
+
server/core/src/https/v1_oauth2.rs | 29 ++++++++++++++++++++
+
server/lib/src/server/migrations.rs | 16 +++++++++++
+
4 files changed, 92 insertions(+), 1 deletion(-)
+
+
diff --git a/server/core/src/actors/v1_write.rs b/server/core/src/actors/v1_write.rs
+
index 732e826c8..a2b8e503f 100644
+
--- a/server/core/src/actors/v1_write.rs
+
+++ b/server/core/src/actors/v1_write.rs
+
@@ -324,6 +324,48 @@ impl QueryServerWriteV1 {
+
.and_then(|_| idms_prox_write.commit().map(|_| ()))
+
}
+
+
+ #[instrument(
+
+ level = "info",
+
+ skip_all,
+
+ fields(uuid = ?eventid)
+
+ )]
+
+ pub async fn handle_oauth2_basic_secret_write(
+
+ &self,
+
+ client_auth_info: ClientAuthInfo,
+
+ filter: Filter<FilterInvalid>,
+
+ new_secret: String,
+
+ eventid: Uuid,
+
+ ) -> Result<(), OperationError> {
+
+ // Given a protoEntry, turn this into a modification set.
+
+ let ct = duration_from_epoch_now();
+
+ let mut idms_prox_write = self.idms.proxy_write(ct).await?;
+
+ let ident = idms_prox_write
+
+ .validate_client_auth_info_to_ident(client_auth_info, ct)
+
+ .map_err(|e| {
+
+ admin_error!(err = ?e, "Invalid identity");
+
+ e
+
+ })?;
+
+
+
+ let modlist = ModifyList::new_purge_and_set(
+
+ Attribute::OAuth2RsBasicSecret,
+
+ Value::SecretValue(new_secret),
+
+ );
+
+
+
+ let mdf =
+
+ ModifyEvent::from_internal_parts(ident, &modlist, &filter, &idms_prox_write.qs_write)
+
+ .map_err(|e| {
+
+ admin_error!(err = ?e, "Failed to begin modify during handle_oauth2_basic_secret_write");
+
+ e
+
+ })?;
+
+
+
+ trace!(?mdf, "Begin modify event");
+
+
+
+ idms_prox_write
+
+ .qs_write
+
+ .modify(&mdf)
+
+ .and_then(|_| idms_prox_write.commit())
+
+ }
+
+
+
#[instrument(
+
level = "info",
+
skip_all,
+
diff --git a/server/core/src/https/v1.rs b/server/core/src/https/v1.rs
+
index 30de387b8..a11aa8ecd 100644
+
--- a/server/core/src/https/v1.rs
+
+++ b/server/core/src/https/v1.rs
+
@@ -4,7 +4,7 @@ use axum::extract::{Path, State};
+
use axum::http::{HeaderMap, HeaderValue};
+
use axum::middleware::from_fn;
+
use axum::response::{IntoResponse, Response};
+
-use axum::routing::{delete, get, post, put};
+
+use axum::routing::{delete, get, post, put, patch};
+
use axum::{Extension, Json, Router};
+
use axum_extra::extract::cookie::{Cookie, CookieJar, SameSite};
+
use compact_jwt::{Jwk, Jws, JwsSigner};
+
@@ -3129,6 +3129,10 @@ pub(crate) fn route_setup(state: ServerState) -> Router<ServerState> {
+
"/v1/oauth2/:rs_name/_basic_secret",
+
get(super::v1_oauth2::oauth2_id_get_basic_secret),
+
)
+
+ .route(
+
+ "/v1/oauth2/:rs_name/_basic_secret",
+
+ patch(super::v1_oauth2::oauth2_id_patch_basic_secret),
+
+ )
+
.route(
+
"/v1/oauth2/:rs_name/_scopemap/:group",
+
post(super::v1_oauth2::oauth2_id_scopemap_post)
+
diff --git a/server/core/src/https/v1_oauth2.rs b/server/core/src/https/v1_oauth2.rs
+
index f399539bc..ffad9921e 100644
+
--- a/server/core/src/https/v1_oauth2.rs
+
+++ b/server/core/src/https/v1_oauth2.rs
+
@@ -151,6 +151,35 @@ pub(crate) async fn oauth2_id_get_basic_secret(
+
.map_err(WebError::from)
+
}
+
+
+#[utoipa::path(
+
+ patch,
+
+ path = "/v1/oauth2/{rs_name}/_basic_secret",
+
+ request_body=ProtoEntry,
+
+ responses(
+
+ DefaultApiResponse,
+
+ ),
+
+ security(("token_jwt" = [])),
+
+ tag = "v1/oauth2",
+
+ operation_id = "oauth2_id_patch_basic_secret"
+
+)]
+
+/// Overwrite the basic secret for a given OAuth2 Resource Server.
+
+#[instrument(level = "info", skip(state, new_secret))]
+
+pub(crate) async fn oauth2_id_patch_basic_secret(
+
+ State(state): State<ServerState>,
+
+ Extension(kopid): Extension<KOpId>,
+
+ VerifiedClientInformation(client_auth_info): VerifiedClientInformation,
+
+ Path(rs_name): Path<String>,
+
+ Json(new_secret): Json<String>,
+
+) -> Result<Json<()>, WebError> {
+
+ let filter = oauth2_id(&rs_name);
+
+ state
+
+ .qe_w_ref
+
+ .handle_oauth2_basic_secret_write(client_auth_info, filter, new_secret, kopid.eventid)
+
+ .await
+
+ .map(Json::from)
+
+ .map_err(WebError::from)
+
+}
+
+
+
#[utoipa::path(
+
patch,
+
path = "/v1/oauth2/{rs_name}",
+
diff --git a/server/lib/src/server/migrations.rs b/server/lib/src/server/migrations.rs
+
index fd0bca8db..8621714f2 100644
+
--- a/server/lib/src/server/migrations.rs
+
+++ b/server/lib/src/server/migrations.rs
+
@@ -171,6 +171,22 @@ impl QueryServer {
+
reload_required = true;
+
};
+
+
+ // secret provisioning: allow idm_admin to modify OAuth2RsBasicSecret.
+
+ write_txn.internal_modify_uuid(
+
+ UUID_IDM_ACP_OAUTH2_MANAGE_V1,
+
+ &ModifyList::new_append(
+
+ Attribute::AcpCreateAttr,
+
+ Attribute::OAuth2RsBasicSecret.into(),
+
+ ),
+
+ )?;
+
+ write_txn.internal_modify_uuid(
+
+ UUID_IDM_ACP_OAUTH2_MANAGE_V1,
+
+ &ModifyList::new_append(
+
+ Attribute::AcpModifyPresentAttr,
+
+ Attribute::OAuth2RsBasicSecret.into(),
+
+ ),
+
+ )?;
+
+
+
// Execute whatever operations we have batched up and ready to go. This is needed
+
// to preserve ordering of the operations - if we reloaded after a remigrate then
+
// we would have skipped the patch level fix which needs to have occurred *first*.
+
--
+
2.49.0
+
+122
pkgs/by-name/ka/kanidm/patches/1_6/recover-account.patch
···
+
From 229165abe5be596fc2be8e285884813a1b5a38c8 Mon Sep 17 00:00:00 2001
+
From: oddlama <oddlama@oddlama.org>
+
Date: Fri, 21 Mar 2025 16:08:15 +0100
+
Subject: [PATCH 2/2] recover account
+
+
---
+
server/core/src/actors/internal.rs | 5 +++--
+
server/core/src/admin.rs | 6 +++---
+
server/daemon/src/main.rs | 23 ++++++++++++++++++++++-
+
server/daemon/src/opt.rs | 7 +++++++
+
4 files changed, 35 insertions(+), 6 deletions(-)
+
+
diff --git a/server/core/src/actors/internal.rs b/server/core/src/actors/internal.rs
+
index 420e72c6c..e252bca51 100644
+
--- a/server/core/src/actors/internal.rs
+
+++ b/server/core/src/actors/internal.rs
+
@@ -172,17 +172,18 @@ impl QueryServerWriteV1 {
+
+
#[instrument(
+
level = "info",
+
- skip(self, eventid),
+
+ skip(self, password, eventid),
+
fields(uuid = ?eventid)
+
)]
+
pub(crate) async fn handle_admin_recover_account(
+
&self,
+
name: String,
+
+ password: Option<String>,
+
eventid: Uuid,
+
) -> Result<String, OperationError> {
+
let ct = duration_from_epoch_now();
+
let mut idms_prox_write = self.idms.proxy_write(ct).await?;
+
- let pw = idms_prox_write.recover_account(name.as_str(), None)?;
+
+ let pw = idms_prox_write.recover_account(name.as_str(), password.as_deref())?;
+
+
idms_prox_write.commit().map(|()| pw)
+
}
+
diff --git a/server/core/src/admin.rs b/server/core/src/admin.rs
+
index 90ccb1927..85e31ddef 100644
+
--- a/server/core/src/admin.rs
+
+++ b/server/core/src/admin.rs
+
@@ -24,7 +24,7 @@ pub use kanidm_proto::internal::{
+
+
#[derive(Serialize, Deserialize, Debug)]
+
pub enum AdminTaskRequest {
+
- RecoverAccount { name: String },
+
+ RecoverAccount { name: String, password: Option<String> },
+
ShowReplicationCertificate,
+
RenewReplicationCertificate,
+
RefreshReplicationConsumer,
+
@@ -309,8 +309,8 @@ async fn handle_client(
+
+
let resp = async {
+
match req {
+
- AdminTaskRequest::RecoverAccount { name } => {
+
- match server_rw.handle_admin_recover_account(name, eventid).await {
+
+ AdminTaskRequest::RecoverAccount { name, password } => {
+
+ match server_rw.handle_admin_recover_account(name, password, eventid).await {
+
Ok(password) => AdminTaskResponse::RecoverAccount { password },
+
Err(e) => {
+
error!(err = ?e, "error during recover-account");
+
diff --git a/server/daemon/src/main.rs b/server/daemon/src/main.rs
+
index c3b40faa0..2a57a307c 100644
+
--- a/server/daemon/src/main.rs
+
+++ b/server/daemon/src/main.rs
+
@@ -923,13 +923,34 @@ async fn kanidm_main(config: Configuration, opt: KanidmdParser) -> ExitCode {
+
.await;
+
}
+
}
+
- KanidmdOpt::RecoverAccount { name, commonopts } => {
+
+ KanidmdOpt::RecoverAccount { name, from_environment, commonopts } => {
+
info!("Running account recovery ...");
+
let output_mode: ConsoleOutputMode = commonopts.output_mode.to_owned().into();
+
+ let password = if *from_environment {
+
+ match std::env::var("KANIDM_RECOVER_ACCOUNT_PASSWORD_FILE") {
+
+ Ok(path) => match tokio::fs::read_to_string(&path).await {
+
+ Ok(contents) => Some(contents),
+
+ Err(e) => {
+
+ error!("Failed to read password file '{}': {}", path, e);
+
+ return ExitCode::FAILURE;
+
+ }
+
+ },
+
+ Err(_) => match std::env::var("KANIDM_RECOVER_ACCOUNT_PASSWORD") {
+
+ Ok(val) => Some(val),
+
+ Err(_) => {
+
+ error!("Neither KANIDM_RECOVER_ACCOUNT_PASSWORD_FILE nor KANIDM_RECOVER_ACCOUNT_PASSWORD was set");
+
+ return ExitCode::FAILURE;
+
+ }
+
+ }
+
+ }
+
+ } else {
+
+ None
+
+ };
+
submit_admin_req(
+
config.adminbindpath.as_str(),
+
AdminTaskRequest::RecoverAccount {
+
name: name.to_owned(),
+
+ password,
+
},
+
output_mode,
+
)
+
diff --git a/server/daemon/src/opt.rs b/server/daemon/src/opt.rs
+
index f1b45a5b3..ca19fb6a5 100644
+
--- a/server/daemon/src/opt.rs
+
+++ b/server/daemon/src/opt.rs
+
@@ -236,6 +236,13 @@ enum KanidmdOpt {
+
#[clap(value_parser)]
+
/// The account name to recover credentials for.
+
name: String,
+
+ /// Use a password given via an environment variable.
+
+ /// - `KANIDM_RECOVER_ACCOUNT_PASSWORD_FILE` takes precedence and reads the desired
+
+ /// password from the given file
+
+ /// - `KANIDM_RECOVER_ACCOUNT_PASSWORD` directly takes a
+
+ /// password - beware that this will leave the password in the environment
+
+ #[clap(long = "from-environment")]
+
+ from_environment: bool,
+
#[clap(flatten)]
+
commonopts: CommonOpt,
+
},
+
--
+
2.49.0
+
+3 -3
pkgs/by-name/ku/kubernetes-controller-tools/package.nix
···
buildGoModule rec {
pname = "controller-tools";
-
version = "0.17.3";
+
version = "0.18.0";
src = fetchFromGitHub {
owner = "kubernetes-sigs";
repo = "controller-tools";
tag = "v${version}";
-
sha256 = "sha256-YBg6sf7G9xsSkLarA9wRlCg1Knu/c8Y9kpscRKNpVmk=";
+
sha256 = "sha256-zrh6GWFivs1fqkvaN6MSiYoCuPbiTQ6mJz4d69Wb7lo=";
};
-
vendorHash = "sha256-YRY/gILgJyLoMUG0v5HiAWN7lEzjCc7TJSZgRiN2tZs=";
+
vendorHash = "sha256-criu2UyNkGaVQnIxrjzIU4D389DbCcjG/kn3kfoD5yE=";
ldflags = [
"-s"
+2 -2
pkgs/by-name/li/linux-firmware/package.nix
···
in
stdenvNoCC.mkDerivation rec {
pname = "linux-firmware";
-
version = "20250410";
+
version = "20250509";
src = fetchzip {
url = "https://cdn.kernel.org/pub/linux/kernel/firmware/linux-firmware-${version}.tar.xz ";
-
hash = "sha256-aQdEl9+7zbNqWSII9hjRuPePvSfWVql5u5TIrGsa+Ao=";
+
hash = "sha256-0FrhgJQyCeRCa3s0vu8UOoN0ZgVCahTQsSH0o6G6hhY=";
};
postUnpack = ''
+20 -18
pkgs/by-name/mi/mirrorbits/package.nix
···
{
lib,
+
versionCheckHook,
buildGoModule,
fetchFromGitHub,
-
fetchpatch,
pkg-config,
zlib,
geoip,
}:
-
buildGoModule rec {
+
buildGoModule (finalAttrs: {
pname = "mirrorbits";
-
version = "0.5.1";
+
version = "0.6";
src = fetchFromGitHub {
owner = "etix";
repo = "mirrorbits";
-
rev = "v${version}";
-
hash = "sha256-Ta3+Y3P74cvx09Z4rB5ObgBZtfF4grVgyeZ57yFPlGM=";
+
tag = "v${finalAttrs.version}";
+
hash = "sha256-99eOfVSlGIEzNm+0gI/y0+UPd+dnZiGzaHlkqUNtO1U=";
};
-
vendorHash = null;
+
postPatch = ''
+
rm -rf vendor
+
'';
-
patches = [
-
# Add Go Modules support
-
(fetchpatch {
-
url = "https://github.com/etix/mirrorbits/commit/955a8b2e1aacea1cae06396a64afbb531ceb36d4.patch";
-
hash = "sha256-KJgj3ynnjjiXG5qsUmzBiMjGEwfvM/9Ap+ZgUdhclik=";
-
})
-
];
+
vendorHash = "sha256-cdD9RvOtgN/SHtgrtrucnUI+nnO/FabUyPRdvgoL44o=";
nativeBuildInputs = [ pkg-config ];
+
buildInputs = [
zlib
geoip
···
ldflags = [
"-s"
"-w"
+
"-X github.com/etix/mirrorbits/core.VERSION=${finalAttrs.version}"
];
-
meta = with lib; {
-
description = "geographical download redirector for distributing files efficiently across a set of mirrors";
+
doInstallCheck = true;
+
nativeInstallCheckInputs = [ versionCheckHook ];
+
versionCheckProgramArg = "version";
+
+
meta = {
+
description = "Geographical download redirector for distributing files efficiently across a set of mirrors";
homepage = "https://github.com/etix/mirrorbits";
longDescription = ''
Mirrorbits is a geographical download redirector written in Go for
···
the distribution of large-scale Open-Source projects with a lot
of traffic.
'';
-
license = licenses.mit;
-
maintainers = with maintainers; [ fpletz ];
+
license = lib.licenses.mit;
+
maintainers = with lib.maintainers; [ fpletz ];
mainProgram = "mirrorbits";
};
-
}
+
})
+3 -3
pkgs/by-name/mo/moon/package.nix
···
rustPlatform.buildRustPackage (finalAttrs: {
pname = "moon";
-
version = "1.35.1";
+
version = "1.35.5";
src = fetchFromGitHub {
owner = "moonrepo";
repo = "moon";
tag = "v${finalAttrs.version}";
-
hash = "sha256-/MKv+k6GZHpqnwheLYAbIAtIT8cZoiNg1EFUNQLbiQk=";
+
hash = "sha256-cqa8s38c6wREqFzWD61t1vc0eLbrYRb8FuElKr+MdD0=";
};
-
cargoHash = "sha256-CyvcC46FUeEPcDvHiIBunnM4H4Esp2Q6GRhJZgXhlJk=";
+
cargoHash = "sha256-9UOGDsq93mayuoxyhO7hjss3OYRf97EUwNY23VYnP1E=";
env = {
RUSTFLAGS = "-C strip=symbols";
+2 -2
pkgs/by-name/nb/nbxplorer/package.nix
···
src = fetchFromGitHub {
owner = "dgarage";
repo = "NBXplorer";
-
rev = "v${version}";
-
sha256 = "sha256-RTkKyckdAv6+wJSlDlR+Q8fw0aZEbi4AwB+OPHI7TR4=";
+
tag = "v${version}";
+
hash = "sha256-RTkKyckdAv6+wJSlDlR+Q8fw0aZEbi4AwB+OPHI7TR4=";
};
projectFile = "NBXplorer/NBXplorer.csproj";
+9 -2
pkgs/by-name/nm/nmap/package.nix
···
lib,
stdenv,
fetchurl,
+
versionCheckHook,
libpcap,
pkg-config,
openssl,
···
stdenv.mkDerivation rec {
pname = "nmap";
-
version = "7.95";
+
version = "7.96";
src = fetchurl {
url = "https://nmap.org/dist/nmap-${version}.tar.bz2";
-
hash = "sha256-4Uq1MOR7Wv2I8ciiusf4nNj+a0eOItJVxbm923ocV3g=";
+
hash = "sha256-mK56Ty+2bBo9SCr48AE3KDuRciNEa0bnogsG6r7fjIo=";
};
prePatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
···
enableParallelBuilding = true;
doCheck = false; # fails 3 tests, probably needs the net
+
+
nativeInstallCheckInputs = [
+
versionCheckHook
+
];
+
versionCheckProgramArg = "-V";
+
doInstallCheck = true;
meta = {
description = "Free and open source utility for network discovery and security auditing";
+9 -3
pkgs/by-name/np/npins/package.nix
···
in
rustPlatform.buildRustPackage rec {
pname = "npins";
-
version = "0.3.0";
+
version = "0.3.1";
src = fetchFromGitHub {
owner = "andir";
repo = "npins";
tag = version;
-
sha256 = "sha256-nTm6IqCHNFQLU7WR7dJRP7ktBctpE/O2LHbUV25roJA=";
+
sha256 = "sha256-PPk9Ve1pM3X7NfGeGb8Jiq4YDEwAjErP4xzGwLaakTU=";
};
useFetchCargoVendor = true;
-
cargoHash = "sha256-HnX7dkWLxa3DARXG8y9OVBRwvwgxwRIs4mWK3VNblG0=";
+
cargoHash = "sha256-YRW2TqbctuGC2M6euR4bb0m9a19m8WQVvWucRMpzkQE=";
+
buildNoDefaultFeatures = true;
+
buildFeatures = [
+
"clap"
+
"crossterm"
+
"env_logger"
+
];
nativeBuildInputs = [ makeWrapper ];
+1 -7
pkgs/by-name/ol/ollama/package.nix
···
clblast,
libdrm,
rocmPackages,
-
rocmGpuTargets ? rocmPackages.clr.gpuTargets or [ ],
+
rocmGpuTargets ? rocmPackages.clr.localGpuTargets or (rocmPackages.clr.gpuTargets or [ ]),
cudaPackages,
cudaArches ? cudaPackages.cudaFlags.realArches or [ ],
autoAddDriverRunpath,
···
HIP_PATH = rocmPath;
CFLAGS = "-Wno-c++17-extensions -I${rocmPath}/include";
CXXFLAGS = "-Wno-c++17-extensions -I${rocmPath}/include";
-
}
-
// lib.optionalAttrs (enableRocm && (rocmPackages.clr.localGpuTargets or false)) {
-
-
# If rocm CLR is set to build for an exact set of targets reuse that target list,
-
# otherwise let ollama use its builtin defaults
-
HIP_ARCHS = lib.concatStringsSep ";" rocmPackages.clr.localGpuTargets;
}
// lib.optionalAttrs enableCuda { CUDA_PATH = cudaPath; };
+2 -2
pkgs/by-name/pa/panoply/package.nix
···
stdenvNoCC.mkDerivation rec {
pname = "panoply";
-
version = "5.6.0";
+
version = "5.6.1";
src = fetchurl {
url = "https://www.giss.nasa.gov/tools/panoply/download/PanoplyJ-${version}.tgz";
-
hash = "sha256-DEcD8ol1DaGMej5/TGHz7Otj/V2bXkP8uqK992FeqqY=";
+
hash = "sha256-r3hKlBRpZe9HJws24cqoiiQmFlH6Abn++w5yEudgKfI=";
};
nativeBuildInputs = [ makeWrapper ];
+5 -8
pkgs/by-name/pd/pdal/package.nix
···
lib,
stdenv,
callPackage,
+
ctestCheckHook,
fetchFromGitHub,
testers,
···
];
doCheck = true;
+
# tests are flaky and they seem to fail less often when they don't run in
+
# parallel
+
enableParallelChecking = false;
disabledTests = [
# Tests failing due to TileDB library implementation, disabled also
···
nativeCheckInputs = [
gdal # gdalinfo
+
ctestCheckHook
];
-
-
checkPhase = ''
-
runHook preCheck
-
# tests are flaky and they seem to fail less often when they don't run in
-
# parallel
-
ctest -j 1 --output-on-failure -E '^${lib.concatStringsSep "|" finalAttrs.disabledTests}$'
-
runHook postCheck
-
'';
postInstall = ''
patchShebangs --update --build $out/bin/pdal-config
+3 -3
pkgs/by-name/pr/pr-tracker/package.nix
···
rustPlatform.buildRustPackage rec {
pname = "pr-tracker";
-
version = "1.6.0";
+
version = "1.7.0";
src = fetchzip {
url = "https://git.qyliss.net/pr-tracker/snapshot/pr-tracker-${version}.tar.xz";
-
hash = "sha256-O+dtGxVhn3hW+vFQzEt7kQRTnZgc1R938BJ6pAkIW4E=";
+
hash = "sha256-l+bji9uJp8n4//wbbbu8vd3rDICr/XEpDs1ukHxQMcA=";
};
useFetchCargoVendor = true;
-
cargoHash = "sha256-4RCgu6t8qbOfTpl3rX35f/fqyMWGBbsnw1TYhhLnxZ4=";
+
cargoHash = "sha256-D8O1lFoTJOQmFsjql4qIZqA5+iCnESydDDBJiDpBnzs=";
nativeBuildInputs = [ pkg-config ];
buildInputs = [
+3 -3
pkgs/by-name/su/surrealdb-migrations/package.nix
···
let
pname = "surrealdb-migrations";
-
version = "2.2.1";
+
version = "2.2.2";
in
rustPlatform.buildRustPackage rec {
inherit pname version;
···
owner = "Odonno";
repo = pname;
rev = "v${version}";
-
hash = "sha256-MeHNBtzl2bNJFGKtM1o9mGnX0vbmnpUPc18ecqG6J+8=";
+
hash = "sha256-PLCnfkjmmp7Xx6sF9u15X52JB3x8135xjBr8yYkqYhQ=";
};
useFetchCargoVendor = true;
-
cargoHash = "sha256-l59RbKohfPsAp/70UaT/bhy5Z4orVf7fuJgU+0fuyk4=";
+
cargoHash = "sha256-x0S9hHvHlQNelX2QR/4ApwZxgdzjGWnyDxNUrQvyTH0=";
# Error: No such file or directory (os error 2)
# failures:
+2 -2
pkgs/by-name/sw/swiftformat/package.nix
···
swift.stdenv.mkDerivation rec {
pname = "swiftformat";
-
version = "0.55.5";
+
version = "0.55.6";
src = fetchFromGitHub {
owner = "nicklockwood";
repo = "SwiftFormat";
rev = version;
-
sha256 = "sha256-AZAQSwmGNHN6ykh9ufeQLC1dEXvTt32X24MPTDh6bI8=";
+
sha256 = "sha256-zp7wx2PL0WSgjfWu5GSLfYb8BaTmCoF+Or6prZ4TSC4=";
};
nativeBuildInputs = [
+5 -5
pkgs/by-name/ta/tailwindcss_4/package.nix
···
makeWrapper,
}:
let
-
version = "4.1.5";
+
version = "4.1.6";
inherit (stdenv.hostPlatform) system;
throwSystem = throw "tailwindcss has not been packaged for ${system} yet.";
···
hash =
{
-
aarch64-darwin = "sha256-j9ogIXTCFNcg6v5J7bra+u18udASidJEYtktLCYDeH4=";
-
aarch64-linux = "sha256-lVXGQUYXwVzIIGeexlQEr5JQfnt3GP0DXSbfBVVh3sk=";
-
x86_64-darwin = "sha256-W7BvnlCSuLx9r0mcdrDOx1GgP+xS4BEdI1wTHNnFyQU=";
-
x86_64-linux = "sha256-nSWKd4bCL4VyrqIO01hI+MvvHQYnfk5rl62FYf/CHgc=";
+
aarch64-darwin = "sha256-vy5DrFSVROGpP4uvS32PtfSBWJbF/vpzE9L0/drOxLc=";
+
aarch64-linux = "sha256-BPkJ72DfdGdV9ajPO61hoNkhzCfmzZRt1A/sSKcbAok=";
+
x86_64-darwin = "sha256-PteOE9PWEtn7BNoVT/nw6tz4H5jBFyzOZmZGDxfaGVE=";
+
x86_64-linux = "sha256-BuaYnp+lBuNbzl3MMVo9xm2n+WJzQ3tb8UsPhgAhRlM=";
}
.${system} or throwSystem;
in
+21 -14
pkgs/by-name/te/texi2html/package.nix
···
fetchurl,
perl,
gettext,
+
versionCheckHook,
buildPackages,
}:
-
stdenv.mkDerivation rec {
+
stdenv.mkDerivation (finalAttrs: {
pname = "texi2html";
version = "5.0";
src = fetchurl {
-
url = "mirror://savannah/texi2html/${pname}-${version}.tar.bz2";
-
sha256 = "1yprv64vrlcbksqv25asplnjg07mbq38lfclp1m5lj8cw878pag8";
+
url = "mirror://savannah/texi2html/texi2html-${finalAttrs.version}.tar.bz2";
+
hash = "sha256-6KmLDuIMSVpquJQ5igZe9YAnLb1aFbGxnovRvInZ+fo=";
};
strictDeps = true;
nativeBuildInputs = [
+
perl
+
];
+
+
buildInputs = [
gettext
perl
];
-
buildInputs = [ perl ];
postPatch = ''
-
patchShebangs separated_to_hash.pl
+
patchShebangs --build separated_to_hash.pl
'';
-
postInstall = lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
-
for f in $out/bin/*; do
-
substituteInPlace $f --replace "${buildPackages.perl}" "${perl}"
-
done
+
postInstall = ''
+
patchShebangs --host --update $out/bin/*
'';
-
meta = with lib; {
+
doInstallCheck = true;
+
nativeInstallCheckInputs = [
+
versionCheckHook
+
];
+
+
meta = {
description = "Perl script which converts Texinfo source files to HTML output";
mainProgram = "texi2html";
homepage = "https://www.nongnu.org/texi2html/";
-
license = licenses.gpl2;
-
maintainers = [ maintainers.marcweber ];
-
platforms = platforms.unix;
+
license = lib.licenses.gpl3Plus;
+
maintainers = [ lib.maintainers.marcweber ];
+
platforms = lib.platforms.unix;
};
-
}
+
})
+38
pkgs/by-name/tu/tusd/package.nix
···
+
{
+
lib,
+
buildGoModule,
+
fetchFromGitHub,
+
nixosTests,
+
}:
+
+
buildGoModule rec {
+
pname = "tusd";
+
version = "2.8.0";
+
+
src = fetchFromGitHub {
+
owner = "tus";
+
repo = "tusd";
+
tag = "v${version}";
+
hash = "sha256-OzXBeLDjaJk4NVgsauR/NUATh7qHbuEfWNdhytZmd0A=";
+
};
+
+
vendorHash = "sha256-YununGyB72zE0tmqO3BREJeMTjCuy/1fhPHC5r8OLjg=";
+
+
# Tests need the path to the binary:
+
# https://github.com/tus/tusd/blob/0e52ad650abed02ec961353bb0c3c8bc36650d2c/internal/e2e/e2e_test.go#L37
+
preCheck = ''
+
export TUSD_BINARY=$PWD/../go/bin/tusd
+
'';
+
+
passthru.tests.tusd = nixosTests.tusd;
+
+
meta = {
+
description = "Reference server implementation in Go of tus: the open protocol for resumable file uploads";
+
license = lib.licenses.mit;
+
homepage = "https://tus.io/";
+
maintainers = with lib.maintainers; [
+
nh2
+
kalbasit
+
];
+
};
+
}
+2 -2
pkgs/by-name/wa/wakatime-cli/package.nix
···
buildGoModule rec {
pname = "wakatime-cli";
-
version = "1.115.1";
+
version = "1.115.2";
src = fetchFromGitHub {
owner = "wakatime";
repo = "wakatime-cli";
tag = "v${version}";
-
hash = "sha256-vvJzYUL9lGPxe2XzeooDJ09jT3/Zv5x8rf6T7Byb7TY=";
+
hash = "sha256-8Vgbm7yOb33hVwPNyl1x8egAJKiWvBo4ldp8bkUbd9A=";
};
vendorHash = "sha256-1yqpz3DqWHXw3ihh7YAKtl5Co91VAbBMRu68S/igrMc=";
+3 -3
pkgs/by-name/wl/wlinhibit/package.nix
···
}:
stdenv.mkDerivation {
pname = "wlinhibit";
-
version = "0.1.1";
+
version = "0.1.2";
src = fetchFromGitHub {
owner = "0x5a4";
repo = "wlinhibit";
-
rev = "v0.1.1";
-
hash = "sha256-YQHJ9sLHSV8GJP7IpRzmtDbeB86y/a48mLcYy4iDciw=";
+
rev = "v0.1.2";
+
hash = "sha256-mAEBnlIfW1R5+3CMH4ZumQ39Ss2K7PfW28I4/O9saWE=";
};
buildInputs = [
+2 -2
pkgs/development/interpreters/erlang/26.nix
···
{ mkDerivation }:
mkDerivation {
-
version = "26.2.5.11";
-
sha256 = "sha256-tAoI2LyipYLDvXKbn9pZd5RBaePHuF/ymppV4//ejLQ=";
+
version = "26.2.5.12";
+
sha256 = "sha256-q7rG83ioR0/bnAEzJZx5S17pQ91nE8R5+odHPVXngAI=";
}
+2 -2
pkgs/development/interpreters/erlang/27.nix
···
{ mkDerivation }:
mkDerivation {
-
version = "27.3.3";
-
sha256 = "sha256-OTCCfVeJADxKlmgk8rRE3uzY8Y9qYwY/ubiopWG/0ao=";
+
version = "27.3.4";
+
sha256 = "sha256-RZiN17k5fSIQUYxOoAts5iy/obgoPM0RFB5YXAfkTSk=";
}
+2 -2
pkgs/development/python-modules/aioautomower/default.nix
···
buildPythonPackage rec {
pname = "aioautomower";
-
version = "2025.3.2";
+
version = "2025.5.1";
pyproject = true;
disabled = pythonOlder "3.11";
···
owner = "Thomas55555";
repo = "aioautomower";
tag = version;
-
hash = "sha256-Gza71hJelomKVnBFxhN6WCppwmzcgUAnROYKn/znoEs=";
+
hash = "sha256-Fia08yBmixR47WZMuNbBg+u8CyHG8lumfWJeB/EKd78=";
};
postPatch = ''
+2 -2
pkgs/development/python-modules/aiocomelit/default.nix
···
buildPythonPackage rec {
pname = "aiocomelit";
-
version = "0.11.3";
+
version = "0.12.0";
pyproject = true;
disabled = pythonOlder "3.12";
···
owner = "chemelli74";
repo = "aiocomelit";
tag = "v${version}";
-
hash = "sha256-Hl5yUEtBFfx+p2WQssI7M+TgEiO5VvgIdWoFZMCjCUY=";
+
hash = "sha256-zowXj2Aq2BK/UPJ8xT6eS0/V2vSKp+v6xRLSRMyDPvE=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/aioesphomeapi/default.nix
···
buildPythonPackage rec {
pname = "aioesphomeapi";
-
version = "30.0.1";
+
version = "30.2.0";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "esphome";
repo = "aioesphomeapi";
tag = "v${version}";
-
hash = "sha256-15PIjqglLu4vARbUUL/OVdRcSJWfOFIKqIa2ugpNbUw=";
+
hash = "sha256-2mH1+/58DSWYWl/mTBsCp6r77OUNWV5rR+4mnbKV9PE=";
};
build-system = [
+4 -9
pkgs/development/python-modules/aiohasupervisor/default.nix
···
buildPythonPackage rec {
pname = "aiohasupervisor";
-
version = "0.3.0";
+
version = "0.3.1";
pyproject = true;
disabled = pythonOlder "3.12";
···
owner = "home-assistant-libs";
repo = "python-supervisor-client";
tag = version;
-
hash = "sha256-72YRaTlgRJ8liQ1q+Hx1iCG8Av7wWk61t306fYT9gss=";
+
hash = "sha256-CrcLyG8fpThYHFHH2w+UAlGxuqwpUCWsYUx2gaW9RLw=";
};
postPatch = ''
substituteInPlace pyproject.toml \
-
--replace-fail 'version = "0.0.0"' 'version = "${version}"' \
-
--replace-fail "setuptools~=68.0.0" "setuptools>=68.0.0" \
-
--replace-fail "wheel~=0.40.0" "wheel>=0.40.0"
+
--replace-fail 'version = "0.0.0"' 'version = "${version}"'
'';
build-system = [ setuptools ];
···
pytestCheckHook
];
-
# Import issue, check with next release
-
doCheck = false;
-
pythonImportsCheck = [ "aiohasupervisor" ];
meta = {
-
changelog = "https://github.com/home-assistant-libs/python-supervisor-client/releases/tag/${src.tag}";
description = "Client for Home Assistant Supervisor";
homepage = "https://github.com/home-assistant-libs/python-supervisor-client";
+
changelog = "https://github.com/home-assistant-libs/python-supervisor-client/releases/tag/${src.tag}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ fab ];
};
+52
pkgs/development/python-modules/aiokem/default.nix
···
+
{
+
aiohttp,
+
buildPythonPackage,
+
fetchFromGitHub,
+
lib,
+
pyjwt,
+
pytest-asyncio,
+
pytest-cov-stub,
+
pytestCheckHook,
+
pythonOlder,
+
setuptools,
+
syrupy,
+
}:
+
+
buildPythonPackage rec {
+
pname = "aiokem";
+
version = "0.5.10";
+
pyproject = true;
+
+
disabled = pythonOlder "3.12";
+
+
src = fetchFromGitHub {
+
owner = "kohlerlibs";
+
repo = "aiokem";
+
tag = "v${version}";
+
hash = "sha256-C9px2Gooh6Ob3rGGhKtRdScuA+PCU93xDvOjk7+q3e8=";
+
};
+
+
build-system = [ setuptools ];
+
+
dependencies = [
+
aiohttp
+
pyjwt
+
];
+
+
pythonImportsCheck = [ "aiokem" ];
+
+
nativeCheckInputs = [
+
pytest-asyncio
+
pytest-cov-stub
+
pytestCheckHook
+
syrupy
+
];
+
+
meta = {
+
changelog = "https://github.com/kohlerlibs/aiokem/blob/${src.tag}/CHANGELOG.md";
+
description = "Async API for Kohler Energy Management";
+
homepage = "https://github.com/kohlerlibs/aiokem";
+
license = lib.licenses.mit;
+
maintainers = with lib.maintainers; [ dotlambda ];
+
};
+
}
+2 -2
pkgs/development/python-modules/aioshelly/default.nix
···
buildPythonPackage rec {
pname = "aioshelly";
-
version = "13.5.0";
+
version = "13.6.0";
pyproject = true;
disabled = pythonOlder "3.11";
···
owner = "home-assistant-libs";
repo = "aioshelly";
tag = version;
-
hash = "sha256-oqmX7x6GNZRMTnmUXG1ptDoXT+A4tB+wDM2pds/kRcY=";
+
hash = "sha256-cJKo/UITcvpGbrtOqXLReWghEXL0AKFve1s6Ncde0gc=";
};
build-system = [ setuptools ];
+4 -4
pkgs/development/python-modules/aiovodafone/default.nix
···
buildPythonPackage rec {
pname = "aiovodafone";
-
version = "0.9.0";
+
version = "0.11.0";
pyproject = true;
-
disabled = pythonOlder "3.11";
+
disabled = pythonOlder "3.12";
src = fetchFromGitHub {
owner = "chemelli74";
repo = "aiovodafone";
tag = "v${version}";
-
hash = "sha256-3WafrcJH9pD1u0FEJzYaVWLWb2Ur1sCHYHFON4DXLpo=";
+
hash = "sha256-/H3v5ZRAaWWouow82nr/+TOuL+IX6Ez+Mjk/C120MWM=";
};
build-system = [ poetry-core ];
···
meta = with lib; {
description = "Library to control Vodafon Station";
homepage = "https://github.com/chemelli74/aiovodafone";
-
changelog = "https://github.com/chemelli74/aiovodafone/blob/v${version}/CHANGELOG.md";
+
changelog = "https://github.com/chemelli74/aiovodafone/blob/${src.tag}/CHANGELOG.md";
license = licenses.asl20;
maintainers = with maintainers; [ fab ];
};
+3 -3
pkgs/development/python-modules/apsystems-ez1/default.nix
···
buildPythonPackage rec {
pname = "apsystems-ez1";
-
version = "2.4.0";
+
version = "2.6.0";
pyproject = true;
src = fetchFromGitHub {
owner = "SonnenladenGmbH";
repo = "APsystems-EZ1-API";
tag = version;
-
hash = "sha256-H4vhF4CgZmKmBF+v6SpnpIOlPBkFLL50W+Ua+gDr/7I=";
+
hash = "sha256-/dseMzi92qlual+L6v6Cl5Xd4U9c7SPdclmTSQTVor0=";
};
build-system = [ poetry-core ];
···
];
meta = {
-
changelog = "https://github.com/SonnenladenGmbH/APsystems-EZ1-API/releases/tag/${version}";
+
changelog = "https://github.com/SonnenladenGmbH/APsystems-EZ1-API/releases/tag/${src.tag}";
description = "Streamlined interface for interacting with the local API of APsystems EZ1 Microinverters.";
homepage = "https://github.com/SonnenladenGmbH/APsystems-EZ1-API";
license = lib.licenses.mit;
+2 -2
pkgs/development/python-modules/bellows/default.nix
···
buildPythonPackage rec {
pname = "bellows";
-
version = "0.44.1";
+
version = "0.45.0";
pyproject = true;
src = fetchFromGitHub {
owner = "zigpy";
repo = "bellows";
tag = version;
-
hash = "sha256-LxwKS4jh/ehYGxhU4lpmzXBWGacLtjq6c/lhBybLaRE=";
+
hash = "sha256-wIi6LXfo1ykNT9DMmlRORspiWnBzJUAn6kA/t4rdTpY=";
};
postPatch = ''
+2 -2
pkgs/development/python-modules/bleak-esphome/default.nix
···
buildPythonPackage rec {
pname = "bleak-esphome";
-
version = "2.13.1";
+
version = "2.15.1";
pyproject = true;
src = fetchFromGitHub {
owner = "bluetooth-devices";
repo = "bleak-esphome";
tag = "v${version}";
-
hash = "sha256-ziUSqIox5tWp64EJ+Hacy1Wbh8NMpH/GUY9TUaN7Y3M=";
+
hash = "sha256-Q+W7i0+Qsm1wfVNC+ub9J9DOcP7D4gZkjw3j37aHhYc=";
};
postPatch = ''
+3 -3
pkgs/development/python-modules/bluemaestro-ble/default.nix
···
buildPythonPackage rec {
pname = "bluemaestro-ble";
-
version = "0.2.3";
+
version = "0.4.1";
pyproject = true;
-
disabled = pythonOlder "3.9";
+
disabled = pythonOlder "3.11";
src = fetchFromGitHub {
owner = "Bluetooth-Devices";
repo = "bluemaestro-ble";
tag = "v${version}";
-
hash = "sha256-mJ5JNGN4F9U3WMJQDwiZwuxE0zOirwo1sWF3/bVwXhY=";
+
hash = "sha256-44HUcp8CKQMcaIMKsi3AXdCJlIUGvRrVd2JxGeh1498=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/bluetooth-auto-recovery/default.nix
···
buildPythonPackage rec {
pname = "bluetooth-auto-recovery";
-
version = "1.4.5";
+
version = "1.5.1";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "Bluetooth-Devices";
repo = "bluetooth-auto-recovery";
tag = "v${version}";
-
hash = "sha256-yh0Gf8veT5VCk05Y7QyxoCz0NHnVRj8HJLTbnvi+9C8=";
+
hash = "sha256-p8xuYmU0gXQYnPdTzzJTyQTYuShzPa/twD8r5HNEsN4=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/bluetooth-data-tools/default.nix
···
buildPythonPackage rec {
pname = "bluetooth-data-tools";
-
version = "1.26.5";
+
version = "1.28.1";
pyproject = true;
disabled = pythonOlder "3.10";
···
owner = "Bluetooth-Devices";
repo = "bluetooth-data-tools";
tag = "v${version}";
-
hash = "sha256-uuPr/Dfpd4PAU8ub16uocSH9hqWWAz7RUDRp4jWTctE=";
+
hash = "sha256-citrK/PkWrFB62+xTZFPwr/se5Kiz30qzAMVYROYnS8=";
};
# The project can build both an optimized cython version and an unoptimized
+3 -3
pkgs/development/python-modules/bluetooth-sensor-state-data/default.nix
···
buildPythonPackage rec {
pname = "bluetooth-sensor-state-data";
-
version = "1.7.5";
+
version = "1.8.0";
pyproject = true;
-
disabled = pythonOlder "3.9";
+
disabled = pythonOlder "3.11";
src = fetchFromGitHub {
owner = "Bluetooth-Devices";
repo = "bluetooth-sensor-state-data";
tag = "v${version}";
-
hash = "sha256-W+gU9YlxoCh5zRht44Ovq3Doms8UtCvUNLlSUpzsQwA=";
+
hash = "sha256-XWSdPFhoCuIkQR/tXDhEFUsxpoDoiebI73MqRjtAvFo=";
};
build-system = [ poetry-core ];
+3 -3
pkgs/development/python-modules/deebot-client/default.nix
···
buildPythonPackage rec {
pname = "deebot-client";
-
version = "12.5.0";
+
version = "13.1.0";
pyproject = true;
disabled = pythonOlder "3.13";
···
owner = "DeebotUniverse";
repo = "client.py";
tag = version;
-
hash = "sha256-+Tc4YZucd1P7g2jD2iQzYurQ7hjcUQyst8SUgXTtUsg=";
+
hash = "sha256-EIhefThzHC9hpI4bGkTu+TskdzajI7cc90DhrfDlbcs=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit pname version src;
-
hash = "sha256-dxq/3TYqMm4ckE0En3iskt0OL71XN0bc9VsFUuaefp8=";
+
hash = "sha256-WYWrfNigmu18yEa2QstJ5RfjLWS/Tckem48j8JK2NHk=";
};
pythonRelaxDeps = [
+28 -10
pkgs/development/python-modules/devolo-home-control-api/default.nix
···
lib,
buildPythonPackage,
fetchFromGitHub,
+
pytest-freezer,
pytest-mock,
pytestCheckHook,
+
python-dateutil,
pythonOlder,
requests,
+
requests-mock,
setuptools-scm,
+
setuptools,
+
syrupy,
websocket-client,
zeroconf,
}:
buildPythonPackage rec {
pname = "devolo-home-control-api";
-
version = "0.18.3";
-
format = "setuptools";
-
disabled = pythonOlder "3.6";
+
version = "0.19.0";
+
pyproject = true;
+
+
disabled = pythonOlder "3.12";
src = fetchFromGitHub {
owner = "2Fake";
repo = "devolo_home_control_api";
-
rev = "v${version}";
-
hash = "sha256-4AyC1DDYtKl8SwJf75BbzoOAhbZXmBZ05ma9YmLzksM=";
+
tag = "v${version}";
+
hash = "sha256-eBJ6hdxUplc1poh7WFACWkyfReSdRSyCEoq2A6Sudgg=";
};
-
nativeBuildInputs = [ setuptools-scm ];
+
build-system = [
+
setuptools
+
setuptools-scm
+
];
-
propagatedBuildInputs = [
+
dependencies = [
+
python-dateutil
requests
zeroconf
websocket-client
];
nativeCheckInputs = [
+
pytest-freezer
+
pytest-mock
pytestCheckHook
-
pytest-mock
+
requests-mock
+
syrupy
+
];
+
+
pytestFlags = [
+
"--snapshot-update"
];
-
# Disable test that requires network access
disabledTests = [
+
# Disable test that requires network access
"test__on_pong"
"TestMprm"
];
···
meta = with lib; {
description = "Python library to work with devolo Home Control";
homepage = "https://github.com/2Fake/devolo_home_control_api";
-
license = with licenses; [ gpl3Only ];
+
changelog = "https://github.com/2Fake/devolo_home_control_api/blob/${src.tag}/docs/CHANGELOG.md";
+
license = licenses.gpl3Only;
maintainers = with maintainers; [ fab ];
};
}
+1
pkgs/development/python-modules/firebase-messaging/default.nix
···
pythonRelaxDeps = [
"http-ece"
+
"protobuf"
];
dependencies = [
+5 -1
pkgs/development/python-modules/ghome-foyer-api/default.nix
···
hatch-vcs
];
-
propagatedBuildInputs = [
+
dependencies = [
grpcio
protobuf
];
+
+
doCheck = false; # no tests
+
+
pythonRelaxDeps = [ "protobuf" ];
meta = {
description = "Generated Python protobuf stubs for Google Home internal API";
+49
pkgs/development/python-modules/google-geo-type/default.nix
···
+
{
+
buildPythonPackage,
+
fetchFromGitHub,
+
google-api-core,
+
google-auth,
+
lib,
+
proto-plus,
+
protobuf,
+
pytestCheckHook,
+
setuptools,
+
}:
+
+
buildPythonPackage rec {
+
pname = "google-geo-type";
+
version = "0.3.12";
+
pyproject = true;
+
+
src = fetchFromGitHub {
+
owner = "googleapis";
+
repo = "google-cloud-python";
+
tag = "google-geo-type-v${version}";
+
hash = "sha256-5PzidE1CWN+pt7+gcAtbuXyL/pq6cnn0MCRkBfmeUSw=";
+
};
+
+
sourceRoot = "${src.name}/packages/google-geo-type";
+
+
build-system = [ setuptools ];
+
+
dependencies = [
+
google-api-core
+
google-auth
+
proto-plus
+
protobuf
+
] ++ google-api-core.optional-dependencies.grpc;
+
+
pythonImportsCheck = [ "google.geo.type" ];
+
+
nativeCheckInputs = [
+
pytestCheckHook
+
];
+
+
meta = {
+
changelog = "https://github.com/googleapis/google-cloud-python/blob/${src.tag}/packages/google-geo-type/CHANGELOG.md";
+
description = "Google Geo Type API client library";
+
homepage = "https://github.com/googleapis/google-cloud-python/tree/main/packages/google-geo-type";
+
license = lib.licenses.asl20;
+
maintainers = with lib.maintainers; [ dotlambda ];
+
};
+
}
+53
pkgs/development/python-modules/google-maps-routing/default.nix
···
+
{
+
buildPythonPackage,
+
fetchFromGitHub,
+
google-api-core,
+
google-auth,
+
google-geo-type,
+
lib,
+
proto-plus,
+
protobuf,
+
pytest-asyncio,
+
pytestCheckHook,
+
setuptools,
+
}:
+
+
buildPythonPackage rec {
+
pname = "google-maps-routing";
+
version = "0.6.15";
+
pyproject = true;
+
+
src = fetchFromGitHub {
+
owner = "googleapis";
+
repo = "google-cloud-python";
+
tag = "google-maps-routing-v${version}";
+
hash = "sha256-5PzidE1CWN+pt7+gcAtbuXyL/pq6cnn0MCRkBfmeUSw=";
+
};
+
+
sourceRoot = "${src.name}/packages/google-maps-routing";
+
+
build-system = [ setuptools ];
+
+
dependencies = [
+
google-api-core
+
google-auth
+
proto-plus
+
protobuf
+
google-geo-type
+
] ++ google-api-core.optional-dependencies.grpc;
+
+
pythonImportsCheck = [ "google.maps.routing_v2" ];
+
+
nativeCheckInputs = [
+
pytest-asyncio
+
pytestCheckHook
+
];
+
+
meta = {
+
changelog = "https://github.com/googleapis/google-cloud-python/blob/${src.tag}/packages/google-maps-routing/CHANGELOG.md";
+
description = "Google Maps Routing API client library";
+
homepage = "https://github.com/googleapis/google-cloud-python/tree/main/packages/google-maps-routing";
+
license = lib.licenses.asl20;
+
maintainers = with lib.maintainers; [ dotlambda ];
+
};
+
}
+2 -2
pkgs/development/python-modules/habluetooth/default.nix
···
buildPythonPackage rec {
pname = "habluetooth";
-
version = "3.38.0";
+
version = "3.48.2";
pyproject = true;
disabled = pythonOlder "3.11";
···
owner = "Bluetooth-Devices";
repo = "habluetooth";
tag = "v${version}";
-
hash = "sha256-eqsWm5g/D94NgoBbfh3uudcUOs4aekg4nHw2fODtTOA=";
+
hash = "sha256-zhvsw8b4IkD0hB0Mhn/AKEYhFyPbOMbouEbpHbwNTo8=";
};
build-system = [
+2 -2
pkgs/development/python-modules/hass-nabucasa/default.nix
···
buildPythonPackage rec {
pname = "hass-nabucasa";
-
version = "0.95.0";
+
version = "0.96.0";
pyproject = true;
disabled = pythonOlder "3.13";
···
owner = "nabucasa";
repo = "hass-nabucasa";
tag = version;
-
hash = "sha256-KSGEgMgZ0fHot7hfT0sDl/4aZOsWT8CE+R5ebCqhLAA=";
+
hash = "sha256-U6rxX1VgSpOkmd/kyf2thYF/0TtsguWbVxXaeuq/wvs=";
};
pythonRelaxDeps = [ "acme" ];
+2 -2
pkgs/development/python-modules/hdate/default.nix
···
buildPythonPackage rec {
pname = "hdate";
-
version = "1.0.3";
+
version = "1.1.0";
pyproject = true;
src = fetchFromGitHub {
owner = "py-libhdate";
repo = "py-libhdate";
tag = "v${version}";
-
hash = "sha256-J2ZbfzQdQSlnwcygwapDKkvZIx2VrlaaRe244V8Zt5c=";
+
hash = "sha256-NNaspGNfrtZqo9sUOJVyYlJT7dhr/nzueuaqewUMlpM=";
};
pythonRelaxDeps = [
+10
pkgs/development/python-modules/home-assistant-bluetooth/default.nix
···
lib,
buildPythonPackage,
fetchFromGitHub,
+
fetchpatch,
pythonOlder,
# build-system
···
tag = "v${version}";
hash = "sha256-piX812Uzd2F8A8+IF/17N+xy6ENpfRVJ1BxsAxL5aj0=";
};
+
+
patches = [
+
(fetchpatch {
+
name = "fix-tests-with-habluetooth-3.42.0.patch";
+
url = "https://github.com/home-assistant-libs/home-assistant-bluetooth/commit/515516bf9b2577c5d4af25cd2f052023ccb8b108.patch";
+
includes = [ "tests/test_models.py" ];
+
hash = "sha256-9t8VRKQSDxSYiy7bFII62B4O5w5Hx9AbRgvzcT6z1BQ=";
+
})
+
];
build-system = [
poetry-core
+38 -54
pkgs/development/python-modules/homematicip/default.nix
···
{
lib,
-
aenum,
aiohttp,
-
aiohttp-wsgi,
-
async-timeout,
buildPythonPackage,
fetchFromGitHub,
-
pytest7CheckHook,
-
pythonAtLeast,
-
pythonOlder,
+
httpx,
pytest-aiohttp,
-
pytest-asyncio_0_21,
+
pytest-mock,
+
pytestCheckHook,
+
pythonOlder,
requests,
+
setuptools-scm,
setuptools,
-
setuptools-scm,
-
websocket-client,
websockets,
}:
buildPythonPackage rec {
pname = "homematicip";
-
version = "1.1.7";
+
version = "2.0.1.1";
pyproject = true;
-
disabled = pythonOlder "3.10";
+
disabled = pythonOlder "3.12";
src = fetchFromGitHub {
owner = "hahn-th";
repo = "homematicip-rest-api";
tag = version;
-
hash = "sha256-zhpGsmzJrtWgHlVdzIrFGQAt4EBWSWCTLIKyuuhDlPA=";
+
hash = "sha256-klDyrbIJeAm3C7sCo4Z4OKDvm5+V8mfwYbyS22CKVQU=";
};
build-system = [
···
];
dependencies = [
-
aenum
aiohttp
-
async-timeout
+
httpx
requests
-
websocket-client
websockets
];
nativeCheckInputs = [
-
aiohttp-wsgi
-
(pytest-aiohttp.override {
-
pytest-asyncio = pytest-asyncio_0_21;
-
})
-
pytest-asyncio_0_21
-
pytest7CheckHook
+
pytest-aiohttp
+
pytest-mock
+
pytestCheckHook
];
pytestFlagsArray = [ "--asyncio-mode=auto" ];
-
disabledTests =
-
[
-
# Assert issues with datetime
-
"test_contact_interface_device"
-
"test_dimmer"
-
"test_external_device"
-
"test_heating_failure_alert_group"
-
"test_heating"
-
"test_humidity_warning_rule_group"
-
"test_meta_group"
-
"test_pluggable_switch_measuring"
-
"test_rotary_handle_sensor"
-
"test_security_group"
-
"test_security_zone"
-
"test_shutter_device"
-
"test_smoke_detector"
-
"test_switching_group"
-
"test_temperature_humidity_sensor_outdoor"
-
"test_wall_mounted_thermostat_pro"
-
"test_weather_sensor"
-
# Random failures
-
"test_home_getSecurityJournal"
-
"test_home_unknown_types"
-
# Requires network access
-
"test_websocket"
-
]
-
++ lib.optionals (pythonAtLeast "3.10") [
-
"test_connection_lost"
-
"test_user_disconnect_and_reconnect"
-
"test_ws_message"
-
"test_ws_no_pong"
-
];
+
disabledTests = [
+
# Assert issues with datetime
+
"test_contact_interface_device"
+
"test_dimmer"
+
"test_external_device"
+
"test_heating_failure_alert_group"
+
"test_heating"
+
"test_humidity_warning_rule_group"
+
"test_meta_group"
+
"test_pluggable_switch_measuring"
+
"test_rotary_handle_sensor"
+
"test_security_group"
+
"test_security_zone"
+
"test_shutter_device"
+
"test_smoke_detector"
+
"test_switching_group"
+
"test_temperature_humidity_sensor_outdoor"
+
"test_wall_mounted_thermostat_pro"
+
"test_weather_sensor"
+
# Random failures
+
"test_home_getSecurityJournal"
+
"test_home_unknown_types"
+
# Requires network access
+
"test_websocket"
+
];
pythonImportsCheck = [ "homematicip" ];
meta = with lib; {
description = "Module for the homematicIP REST API";
homepage = "https://github.com/hahn-th/homematicip-rest-api";
-
changelog = "https://github.com/hahn-th/homematicip-rest-api/releases/tag/${version}";
+
changelog = "https://github.com/hahn-th/homematicip-rest-api/releases/tag/${src.tag}";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ fab ];
};
+41
pkgs/development/python-modules/imeon-inverter-api/default.nix
···
+
{
+
lib,
+
buildPythonPackage,
+
fetchFromGitHub,
+
pdm-pep517,
+
aiohttp,
+
async-timeout,
+
}:
+
+
buildPythonPackage rec {
+
pname = "imeon-inverter-api";
+
version = "0.3.12";
+
pyproject = true;
+
+
src = fetchFromGitHub {
+
owner = "Imeon-Inverters-for-Home-Assistant";
+
repo = "inverter-api";
+
tag = version;
+
hash = "sha256-creGva8ZC20yfgjO4XhvXerGuhVnXbshUvoexxjSHFU=";
+
};
+
+
build-system = [ pdm-pep517 ];
+
+
dependencies = [
+
aiohttp
+
async-timeout
+
];
+
+
pythonImportsCheck = [ "imeon_inverter_api" ];
+
+
# upstream has no tests
+
doCheck = false;
+
+
meta = {
+
changelog = "https://github.com/Imeon-Inverters-for-Home-Assistant/inverter-api/releases/tag/${src.tag}";
+
description = "Standalone API to collect data from the Imeon Energy Inverters that uses HTTP POST/GET";
+
homepage = "https://github.com/Imeon-Inverters-for-Home-Assistant/inverter-api";
+
license = lib.licenses.asl20;
+
maintainers = with lib.maintainers; [ dotlambda ];
+
};
+
}
+3 -3
pkgs/development/python-modules/inkbird-ble/default.nix
···
buildPythonPackage rec {
pname = "inkbird-ble";
-
version = "0.10.1";
+
version = "0.16.1";
pyproject = true;
-
disabled = pythonOlder "3.9";
+
disabled = pythonOlder "3.11";
src = fetchFromGitHub {
owner = "Bluetooth-Devices";
repo = "inkbird-ble";
tag = "v${version}";
-
hash = "sha256-i6Vr8dl0svMew7uJrWp11EkVFU01uAHkGvUUr1ecfRw=";
+
hash = "sha256-mSXDSMzBFF2WS+G4VxTzZtKXradxEQyoYR9G/ys+z/M=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/leaone-ble/default.nix
···
buildPythonPackage rec {
pname = "leaone-ble";
-
version = "0.1.0";
+
version = "0.3.0";
pyproject = true;
disabled = pythonOlder "3.11";
···
owner = "bluetooth-devices";
repo = "leaone-ble";
tag = "v${version}";
-
hash = "sha256-usFjI0zU89dEAbmx9mVemoxlYS8mmLTKIMhH26Rvkeg=";
+
hash = "sha256-96TOjjz4EkHAnzL53BIR+PifkyrEig/0r+mIfnwc0hE=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/midea-local/default.nix
···
buildPythonPackage rec {
pname = "midea-local";
-
version = "6.1.0";
+
version = "6.2.0";
pyproject = true;
src = fetchFromGitHub {
owner = "midea-lan";
repo = pname;
tag = "v${version}";
-
hash = "sha256-N6e6aVjsAOMbUPFAGbVWuQIqXOX/XC9tlvx1P6ZqB8w=";
+
hash = "sha256-zXOxgPFX6TRdFnQ0OqqEu1sy9MmlfxEg7KedQWxYv48=";
};
build-system = [ setuptools ];
+2 -2
pkgs/development/python-modules/moddb/default.nix
···
buildPythonPackage rec {
pname = "moddb";
-
version = "0.9.0";
+
version = "0.12.0";
format = "setuptools";
src = fetchFromGitHub {
owner = "ClementJ18";
repo = "moddb";
rev = "v${version}";
-
hash = "sha256-2t5QQAmSLOrdNCl0XdsFPdP2UF10/qq69DovqeQ1Vt8=";
+
hash = "sha256-idBja/W9r8iX69Af+x2TZcLpSLy45fC9pmrMKJZ0RsA=";
};
propagatedBuildInputs = [
-38
pkgs/development/python-modules/pyephember/default.nix
···
-
{
-
lib,
-
buildPythonPackage,
-
fetchPypi,
-
paho-mqtt,
-
pythonOlder,
-
requests,
-
}:
-
-
buildPythonPackage rec {
-
pname = "pyephember";
-
version = "0.4.1";
-
format = "setuptools";
-
-
disabled = pythonOlder "3.8";
-
-
src = fetchPypi {
-
inherit pname version;
-
hash = "sha256-/uMpaqgy6YbqBBFuMxAM8PukCD3/TUNN6wcBiihRi3Y=";
-
};
-
-
propagatedBuildInputs = [
-
paho-mqtt
-
requests
-
];
-
-
# Project has no tests
-
doCheck = false;
-
-
pythonImportsCheck = [ "pyephember" ];
-
-
meta = with lib; {
-
description = "Python client to the EPH Control Systems Ember API";
-
homepage = "https://github.com/ttroy50/pyephember";
-
license = licenses.mit;
-
maintainers = with maintainers; [ fab ];
-
};
-
}
+41
pkgs/development/python-modules/pyephember2/default.nix
···
+
{
+
buildPythonPackage,
+
fetchFromGitHub,
+
lib,
+
paho-mqtt,
+
requests,
+
setuptools,
+
}:
+
+
buildPythonPackage rec {
+
pname = "pyephember2";
+
version = "0.4.12";
+
pyproject = true;
+
+
src = fetchFromGitHub {
+
owner = "roberty99";
+
repo = "pyephember2";
+
tag = version;
+
hash = "sha256-R63Ts+1620QQOFF8o2/6CFNZi5jAeWTQkElgqZhNA7c=";
+
};
+
+
build-system = [ setuptools ];
+
+
dependencies = [
+
paho-mqtt
+
requests
+
];
+
+
pythonImportsCheck = [ "pyephember2" ];
+
+
# upstream has no tests
+
doCheck = false;
+
+
meta = {
+
changelog = "https://github.com/roberty99/pyephember2/releases/tag/${src.tag}";
+
description = "Python library to work with ember from EPH Controls";
+
homepage = "https://github.com/ttroy50/pyephember";
+
license = lib.licenses.mit;
+
maintainers = with lib.maintainers; [ dotlambda ];
+
};
+
}
+5 -3
pkgs/development/python-modules/pylamarzocco/default.nix
···
bleak,
buildPythonPackage,
fetchFromGitHub,
+
mashumaro,
pytest-asyncio,
pytestCheckHook,
pythonOlder,
···
buildPythonPackage rec {
pname = "pylamarzocco";
-
version = "1.4.9";
+
version = "2.0.0";
pyproject = true;
-
disabled = pythonOlder "3.11";
+
disabled = pythonOlder "3.12";
src = fetchFromGitHub {
owner = "zweckj";
repo = "pylamarzocco";
tag = "v${version}";
-
hash = "sha256-rEN1z+gkQjWjDkISdnn0KsxVzzPSKGPI/+VeYclIvkI=";
+
hash = "sha256-iOqYCX7cwAePGepJ0nAG3iApz1A/9Cn6hy3mo4uPl7w=";
};
build-system = [ setuptools ];
···
dependencies = [
aiohttp
bleak
+
mashumaro
];
nativeCheckInputs = [
-44
pkgs/development/python-modules/pymelcloud/default.nix
···
-
{
-
lib,
-
aiohttp,
-
asynctest,
-
buildPythonPackage,
-
fetchFromGitHub,
-
pytest-asyncio,
-
pytestCheckHook,
-
pythonOlder,
-
}:
-
-
buildPythonPackage rec {
-
pname = "pymelcloud";
-
version = "2.11.0";
-
format = "setuptools";
-
-
disabled = pythonOlder "3.8";
-
-
src = fetchFromGitHub {
-
owner = "vilppuvuorinen";
-
repo = pname;
-
rev = "v${version}";
-
sha256 = "1q6ny58cn9qy86blxbk6l2iklab7y11b734l7yb1bp35dmy27w26";
-
};
-
-
propagatedBuildInputs = [ aiohttp ];
-
-
doCheck = pythonOlder "3.11"; # asynctest is unsupported on python3.11
-
-
nativeCheckInputs = [
-
asynctest
-
pytest-asyncio
-
pytestCheckHook
-
];
-
-
pythonImportsCheck = [ "pymelcloud" ];
-
-
meta = with lib; {
-
description = "Python module for interacting with MELCloud";
-
homepage = "https://github.com/vilppuvuorinen/pymelcloud";
-
license = with licenses; [ mit ];
-
maintainers = with maintainers; [ fab ];
-
};
-
}
+3 -3
pkgs/development/python-modules/pymiele/default.nix
···
buildPythonPackage rec {
pname = "pymiele";
-
version = "0.2.0";
+
version = "0.4.3";
pyproject = true;
-
disabled = pythonOlder "3.11";
+
disabled = pythonOlder "3.13";
src = fetchPypi {
inherit pname version;
-
hash = "sha256-/iUpbvD77MURTltnStm47PEqXnfVuHf4m3+h9V2cn68=";
+
hash = "sha256-o3G8+TdjPzctlq/CHYsac7aEx0hVLo1M1JLos3S9ek0=";
};
build-system = [ setuptools ];
+2 -2
pkgs/development/python-modules/pypglab/default.nix
···
buildPythonPackage rec {
pname = "pypglab";
-
version = "0.0.3";
+
version = "0.0.5";
pyproject = true;
src = fetchFromGitHub {
owner = "pglab-electronics";
repo = "pypglab";
tag = version;
-
hash = "sha256-b+o98DrTK1HBKvRfTjdJ1MkdUHEg/TaQZhoLR7URZ0c=";
+
hash = "sha256-nnLGFVV+aWkaE7RnAzLHji/tKxIiA9qJS/BUTv3KNeo=";
};
build-system = [ hatchling ];
+36 -10
pkgs/development/python-modules/pyrate-limiter/default.nix
···
lib,
buildPythonPackage,
fetchFromGitHub,
+
filelock,
poetry-core,
+
postgresql,
+
postgresqlTestHook,
+
psycopg,
+
psycopg-pool,
+
pytestCheckHook,
+
pytest-asyncio,
+
pytest-xdist,
+
redis,
+
redisTestHook,
}:
buildPythonPackage rec {
pname = "pyrate-limiter";
-
version = "2.10.0";
-
format = "pyproject";
+
version = "3.7.0";
+
pyproject = true;
src = fetchFromGitHub {
owner = "vutran1710";
repo = "PyrateLimiter";
-
rev = "v${version}";
-
hash = "sha256-CPusPeyTS+QyWiMHsU0ii9ZxPuizsqv0wQy3uicrDw0=";
+
tag = "v${version}";
+
hash = "sha256-oNwFxH75TJm0iJSbLIO8SlIih72ImlHIhUW7GjOEorw=";
};
-
nativeBuildInputs = [ poetry-core ];
+
postPatch = ''
+
# tests cause too many connections to the postgres server and crash/timeout
+
sed -i "/create_postgres_bucket,/d" tests/conftest.py
+
'';
+
+
build-system = [ poetry-core ];
+
+
optional-dependencies = {
+
all = [
+
filelock
+
redis
+
psycopg
+
psycopg-pool
+
];
+
};
+
+
nativeCheckInputs = [
+
pytestCheckHook
+
pytest-asyncio
+
pytest-xdist
+
redisTestHook
+
] ++ lib.flatten (lib.attrValues optional-dependencies);
pythonImportsCheck = [ "pyrate_limiter" ];
-
-
# The only consumer of this is Lutris (via python-moddb), and it requires 2.x,
-
# so don't auto-update it and break Lutris every python-updates.
-
# FIXME: remove when python-moddb updates.
-
passthru.skipBulkUpdate = true;
meta = with lib; {
description = "Python Rate-Limiter using Leaky-Bucket Algorimth Family";
+2 -2
pkgs/development/python-modules/pysmartthings/default.nix
···
buildPythonPackage rec {
pname = "pysmartthings";
-
version = "3.2.0";
+
version = "3.2.1";
pyproject = true;
disabled = pythonOlder "3.12";
···
owner = "andrewsayre";
repo = "pysmartthings";
tag = "v${version}";
-
hash = "sha256-b8DUptzmXGGjuQrNRHp9KC4aQnoVj+Wu7ixyiNjuvqk=";
+
hash = "sha256-KgwNXIzQWae91R0qmInlm6m+NwrSJgP9SY80WSneTY4=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/pyswitchbot/default.nix
···
buildPythonPackage rec {
pname = "pyswitchbot";
-
version = "0.60.1";
+
version = "0.61.0";
pyproject = true;
disabled = pythonOlder "3.8";
···
owner = "Danielhiversen";
repo = "pySwitchbot";
tag = version;
-
hash = "sha256-ZOs/vWN0cfcx99kmAZixxFn9GpPZYvHkVJSkluBRwgk=";
+
hash = "sha256-yHP5BoLuP2dvR2SSFgc68g1wENkDXZN1M9Nr8WticCw=";
};
build-system = [ setuptools ];
+56
pkgs/development/python-modules/python-melcloud/default.nix
···
+
{
+
aiohttp,
+
aioresponses,
+
buildPythonPackage,
+
fetchFromGitHub,
+
lib,
+
mashumaro,
+
orjson,
+
poetry-core,
+
pytest-asyncio,
+
pytest-cov-stub,
+
pytestCheckHook,
+
yarl,
+
}:
+
+
buildPythonPackage rec {
+
pname = "python-melcloud";
+
version = "0.1.0";
+
pyproject = true;
+
+
src = fetchFromGitHub {
+
owner = "erwindouna";
+
repo = "python-melcloud";
+
tag = version;
+
hash = "sha256-1WFE8k16aDIp1S/WDHXVdUtQmISEoE8yQAn9nndmQWs=";
+
};
+
+
build-system = [ poetry-core ];
+
+
pythonRemoveDeps = [
+
"aioresponses"
+
"mashumaro"
+
"orjson"
+
"yarl"
+
];
+
+
dependencies = [
+
aiohttp
+
];
+
+
pythonImportsCheck = [ "pymelcloud" ];
+
+
nativeCheckInputs = [
+
pytest-asyncio
+
pytest-cov-stub
+
pytestCheckHook
+
];
+
+
meta = {
+
changelog = "https://github.com/erwindouna/python-melcloud/blob/${src.tag}/CHANGELOG.md";
+
description = "Asynchronous Python client for controlling Melcloud devices";
+
homepage = "https://github.com/erwindouna/python-melcloud";
+
license = lib.licenses.mit;
+
maintainers = with lib.maintainers; [ dotlambda ];
+
};
+
}
+6 -2
pkgs/development/python-modules/python-roborock/default.nix
···
lib,
stdenv,
aiohttp,
+
aiomqtt,
aioresponses,
async-timeout,
buildPythonPackage,
···
poetry-core,
pycryptodome,
pycryptodomex,
+
pyrate-limiter,
pytest-asyncio,
pytestCheckHook,
pythonOlder,
···
buildPythonPackage rec {
pname = "python-roborock";
-
version = "2.16.1";
+
version = "2.18.2";
pyproject = true;
disabled = pythonOlder "3.11";
···
owner = "humbertogontijo";
repo = "python-roborock";
tag = "v${version}";
-
hash = "sha256-zQlNBQm+dBmw+kydNlqJU1D0KKuywyuNCqm0/BslWi0=";
+
hash = "sha256-7xcw1jNCDapHjH1YVB5NW7jxMyb8Raf8HuTnWf2vdFo=";
};
postPatch = ''
···
dependencies = [
aiohttp
+
aiomqtt
async-timeout
click
construct
dacite
paho-mqtt
pycryptodome
+
pyrate-limiter
vacuum-map-parser-roborock
] ++ lib.optionals stdenv.hostPlatform.isDarwin [ pycryptodomex ];
+2 -2
pkgs/development/python-modules/python-tado/default.nix
···
buildPythonPackage rec {
pname = "python-tado";
-
version = "0.18.11";
+
version = "0.18.14";
pyproject = true;
src = fetchFromGitHub {
owner = "wmalgadey";
repo = "PyTado";
tag = version;
-
hash = "sha256-99qUwTcDWkiP4vqiCHI5ukY/KoEtuefietOyvJdowaE=";
+
hash = "sha256-ubaYa/TC0hctqjuv7QBi/dlIJjWrvo4i9AjAtOIqviU=";
};
build-system = [ setuptools ];
+4 -2
pkgs/development/python-modules/renault-api/default.nix
···
pythonOlder,
pytest-asyncio,
pytestCheckHook,
+
syrupy,
tabulate,
typeguard,
}:
buildPythonPackage rec {
pname = "renault-api";
-
version = "0.2.10";
+
version = "0.3.1";
pyproject = true;
disabled = pythonOlder "3.8";
···
owner = "hacf-fr";
repo = "renault-api";
tag = "v${version}";
-
hash = "sha256-d+1H4hu8Mqj2oKrS5C1QnoIJePlQdBKLCHTfcNcZBWI=";
+
hash = "sha256-xnlFt6K7SOpeT4yXxLnep5NvNaP6REteUhBpcT7ipN0=";
};
build-system = [ poetry-core ];
···
aioresponses
pytest-asyncio
pytestCheckHook
+
syrupy
typeguard
] ++ lib.flatten (lib.attrValues optional-dependencies);
+2
pkgs/development/python-modules/requests-ratelimiter/default.nix
···
pythonImportsCheck = [ "requests_ratelimiter" ];
meta = with lib; {
+
# https://github.com/JWCook/requests-ratelimiter/issues/78
+
broken = lib.versionAtLeast pyrate-limiter.version "3";
description = "Module for rate-limiting for requests";
homepage = "https://github.com/JWCook/requests-ratelimiter";
changelog = "https://github.com/JWCook/requests-ratelimiter/blob/${src.rev}/HISTORY.md";
+2 -2
pkgs/development/python-modules/sensorpro-ble/default.nix
···
buildPythonPackage rec {
pname = "sensorpro-ble";
-
version = "0.5.3";
+
version = "0.7.0";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "Bluetooth-Devices";
repo = "sensorpro-ble";
tag = "v${version}";
-
hash = "sha256-Zqa6qa0Jw79Iu4VEw6KN0GsZcC1X7OpiYUiyT4zwKyY=";
+
hash = "sha256-YMcpe4daM4X23nOMubYNcmqlW8PttwDGC4WL9g4P+4I=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/sensorpush-ble/default.nix
···
buildPythonPackage rec {
pname = "sensorpush-ble";
-
version = "1.7.1";
+
version = "1.9.0";
pyproject = true;
disabled = pythonOlder "3.10";
···
owner = "Bluetooth-Devices";
repo = "sensorpush-ble";
tag = "v${version}";
-
hash = "sha256-T2sjzQoWWRGAKiMDN29jZ7jZ5/i75qpNCiuVB7VEhJw=";
+
hash = "sha256-Jsf/NTVwEHoH989yQqWEdG43H74JHlKpUvMWuH4paOw=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/tencentcloud-sdk-python/default.nix
···
buildPythonPackage rec {
pname = "tencentcloud-sdk-python";
-
version = "3.0.1372";
+
version = "3.0.1373";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "TencentCloud";
repo = "tencentcloud-sdk-python";
tag = version;
-
hash = "sha256-XV1qBhTY6NVLM+wKVUzQ3DnNbOLnB+Z5fDEprfSdkIQ=";
+
hash = "sha256-VaQLJWhfzo39LyC0XB7iL7YReOXqsaIeKFFdqqhfD+4=";
};
build-system = [ setuptools ];
+2 -2
pkgs/development/python-modules/teslemetry-stream/default.nix
···
buildPythonPackage rec {
pname = "teslemetry-stream";
-
version = "0.6.12";
+
version = "0.7.7";
pyproject = true;
src = fetchFromGitHub {
owner = "Teslemetry";
repo = "python-teslemetry-stream";
tag = "v${version}";
-
hash = "sha256-0Ca8p5xuzpSfZhtTYZUgbdNHXmnn9RLOGMTSYKfnUZg=";
+
hash = "sha256-0gFX6tNBqqA7vh4d5zi38F2C1NqKjblc/8lz3DEBEJ8=";
};
build-system = [ setuptools ];
+2 -2
pkgs/development/python-modules/thermobeacon-ble/default.nix
···
buildPythonPackage rec {
pname = "thermobeacon-ble";
-
version = "0.8.1";
+
version = "0.10.0";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "bluetooth-devices";
repo = "thermobeacon-ble";
tag = "v${version}";
-
hash = "sha256-UnTJ1uvEnZ5//2arwMsJUSosCK8w26lpAcC1XGO9srw=";
+
hash = "sha256-+WQWb1D1Rw5KE4fvu55WYF2YsQY48MWtPA26G5MB6aY=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/thermopro-ble/default.nix
···
buildPythonPackage rec {
pname = "thermopro-ble";
-
version = "0.11.0";
+
version = "0.13.0";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "bluetooth-devices";
repo = "thermopro-ble";
tag = "v${version}";
-
hash = "sha256-3GgFRY36KMcMWxwjLgzuJB++DZ2TMdQQruen1gLHAbk=";
+
hash = "sha256-gikNjQYE/GROUR0atBUcwrRdjH+HVL37EOKZYdvRUzo=";
};
build-system = [ poetry-core ];
+2 -2
pkgs/development/python-modules/uiprotect/default.nix
···
buildPythonPackage rec {
pname = "uiprotect";
-
version = "7.5.5";
+
version = "7.6.0";
pyproject = true;
disabled = pythonOlder "3.10";
···
owner = "uilibs";
repo = "uiprotect";
tag = "v${version}";
-
hash = "sha256-+acG6vNBOLSIoM8wFQjWOh3PhwUI+/wcjMf7InDt8IA=";
+
hash = "sha256-jFRBupuP0T/6e07qdJmzcz7P/IAYbY1+QxF6ErsFox0=";
};
build-system = [ poetry-core ];
+3 -3
pkgs/development/python-modules/vacuum-map-parser-base/default.nix
···
buildPythonPackage rec {
pname = "vacuum-map-parser-base";
-
version = "0.1.3";
+
version = "0.1.5";
pyproject = true;
disabled = pythonOlder "3.11";
···
owner = "PiotrMachowski";
repo = "Python-package-${pname}";
tag = "v${version}";
-
hash = "sha256-wX7RsJKSNZmi6uIDqsKxWe8VaYJPg4I3pwHHckMUOw4=";
+
hash = "sha256-jB3/m2qlaDnc9fVTlM0wR2ROZmJQ1h6a+awauOa312g=";
};
postPatch = ''
···
meta = with lib; {
homepage = "https://github.com/PiotrMachowski/Python-package-vacuum-map-parser-base";
description = "Common code for vacuum map parsers";
-
changelog = "https://github.com/PiotrMachowski/Python-package-vacuum-map-parser-base/releases/tag/v${version}";
+
changelog = "https://github.com/PiotrMachowski/Python-package-vacuum-map-parser-base/releases/tag/${src.tag}";
maintainers = with maintainers; [ jamiemagee ];
license = licenses.asl20;
};
+3 -3
pkgs/development/python-modules/vacuum-map-parser-roborock/default.nix
···
buildPythonPackage rec {
pname = "vacuum-map-parser-roborock";
-
version = "0.1.2";
+
version = "0.1.4";
pyproject = true;
disabled = pythonOlder "3.11";
···
owner = "PiotrMachowski";
repo = "Python-package-${pname}";
tag = "v${version}";
-
hash = "sha256-y7Q8C7ZvOn/KSUMJ7A/oH+HZMVBpuPitsXqsqHvvYHE=";
+
hash = "sha256-MqsLvAs4PU/K2yBxEhVJucstZg9QFPYgOTCbgT2Uq/A=";
};
postPatch = ''
···
meta = with lib; {
description = "Functionalities for Roborock vacuum map parsing";
homepage = "https://github.com/PiotrMachowski/Python-package-vacuum-map-parser-roborock";
-
changelog = "https://github.com/PiotrMachowski/Python-package-vacuum-map-parser-roborock/releases/tag/v${version}";
+
changelog = "https://github.com/PiotrMachowski/Python-package-vacuum-map-parser-roborock/releases/tag/${src.tag}";
maintainers = with maintainers; [ jamiemagee ];
license = licenses.asl20;
};
+2 -2
pkgs/development/python-modules/velbus-aio/default.nix
···
buildPythonPackage rec {
pname = "velbus-aio";
-
version = "2025.3.1";
+
version = "2025.4.2";
pyproject = true;
disabled = pythonOlder "3.7";
···
owner = "Cereal2nd";
repo = "velbus-aio";
tag = version;
-
hash = "sha256-4lfxY8+EUtTAyRB40p+nShzmC3Qbxu6MJn9Zo7bImyk=";
+
hash = "sha256-3H5lFIMLHyucX0h7JagGPsqGyO1RMVPJ1L91iDbdEww=";
fetchSubmodules = true;
};
+2 -2
pkgs/development/python-modules/voip-utils/default.nix
···
buildPythonPackage rec {
pname = "voip-utils";
-
version = "0.3.1";
+
version = "0.3.2";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "voip-utils";
tag = "v${version}";
-
hash = "sha256-43g7ArhIZVyZ+VnzenldrQfr6kjpAxPNrK/vazYED+w=";
+
hash = "sha256-CI6YCT88ay4tDWHwaTL0Wr4b07mCn7440HdWE9+nxAw=";
};
postPatch = ''
+2 -2
pkgs/development/python-modules/weheat/default.nix
···
buildPythonPackage rec {
pname = "weheat";
-
version = "2025.3.7";
+
version = "2025.4.29";
pyproject = true;
src = fetchFromGitHub {
owner = "wefabricate";
repo = "wh-python";
tag = version;
-
hash = "sha256-PGGlgzcx/pUyTcsFj73x5LqfcPRCh2VMXNsIJjcpEZE=";
+
hash = "sha256-z+tRxx+wtEj5cBXBVG1B5SNyvkQk2UwjH7lPgNQQ+ng=";
};
pythonRelaxDeps = [
+2 -2
pkgs/development/python-modules/yoto-api/default.nix
···
buildPythonPackage rec {
pname = "yoto-api";
-
version = "1.24.5";
+
version = "1.26.1";
pyproject = true;
src = fetchFromGitHub {
owner = "cdnninja";
repo = "yoto_api";
tag = "v${version}";
-
hash = "sha256-zgyZpya67cmJb2tz7Ht8G4y78UejVF00kssasZ8F+58=";
+
hash = "sha256-Erq6whZX8pfQSoszyCMrnRj24nZN3QD52SRs+G24O7k=";
};
build-system = [ setuptools ];
+2 -2
pkgs/development/python-modules/zeroconf/default.nix
···
buildPythonPackage rec {
pname = "zeroconf";
-
version = "0.146.1";
+
version = "0.147.0";
pyproject = true;
disabled = pythonOlder "3.9";
···
owner = "jstasiak";
repo = "python-zeroconf";
tag = version;
-
hash = "sha256-p+8TunZvxVtK+kwGu396td7io5/4d3taJk5NTgSPb3Q=";
+
hash = "sha256-WAixAOjGbO3J4Tsp81p5+uUGld2y5wU7M4mmQ4t8sBw=";
};
build-system = [
+2 -2
pkgs/development/python-modules/zha-quirks/default.nix
···
buildPythonPackage rec {
pname = "zha-quirks";
-
version = "0.0.136";
+
version = "0.0.137";
pyproject = true;
disabled = pythonOlder "3.12";
···
owner = "zigpy";
repo = "zha-device-handlers";
tag = version;
-
hash = "sha256-WoLs8/IqKt0rxALmObim+NnaTRq/VAecrkrbirktm+A=";
+
hash = "sha256-LieMWqUp4bOWMmFyQ04O2SyxxsBzKxWqatQUnh6Wx9M=";
};
postPatch = ''
+2 -2
pkgs/development/python-modules/zha/default.nix
···
buildPythonPackage rec {
pname = "zha";
-
version = "0.0.56";
+
version = "0.0.57";
pyproject = true;
disabled = pythonOlder "3.12";
···
owner = "zigpy";
repo = "zha";
tag = version;
-
hash = "sha256-k6Zegn7YUw5Wueb/8Z1RJ7teRMQ6Owdm8obM6XHI/aY=";
+
hash = "sha256-eaOVQQ5GbWjJuK+30r3bcBMAFdVY9K9bwn+rd/qQ+Ow=";
};
postPatch = ''
+3 -3
pkgs/development/python-modules/zigpy-deconz/default.nix
···
buildPythonPackage rec {
pname = "zigpy-deconz";
-
version = "0.24.1";
+
version = "0.24.2";
pyproject = true;
disabled = pythonOlder "3.7";
···
owner = "zigpy";
repo = pname;
tag = version;
-
hash = "sha256-CSXJcERqrPnCdlwyNSqSkxoiVhjNuL2GL4J6h2DMZY4=";
+
hash = "sha256-el29EqCK9p3AII9LsMw+ikplHfDKNUIhaU3HJI0gfu8=";
};
postPatch = ''
···
meta = with lib; {
description = "Library which communicates with Deconz radios for zigpy";
homepage = "https://github.com/zigpy/zigpy-deconz";
-
changelog = "https://github.com/zigpy/zigpy-deconz/releases/tag/${version}";
+
changelog = "https://github.com/zigpy/zigpy-deconz/releases/tag/${src.tag}";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ mvnetbiz ];
platforms = platforms.linux;
+2 -2
pkgs/development/python-modules/zigpy/default.nix
···
buildPythonPackage rec {
pname = "zigpy";
-
version = "0.78.1";
+
version = "0.79.0";
pyproject = true;
src = fetchFromGitHub {
owner = "zigpy";
repo = "zigpy";
tag = version;
-
hash = "sha256-b+4KqcswAKUNJb4e450VwmAR0mca9ApW4n+kif7BR7o=";
+
hash = "sha256-4bvVn9Pv37zngsiwy54g+z05uej5Bfwpt3mC9cxF2hk=";
};
postPatch = ''
-776
pkgs/development/web/nodejs/nodejs-release-keys.asc
···
-
-----BEGIN PGP PUBLIC KEY BLOCK-----
-
-
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
-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
-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
-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
-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
-
r7B5GNbatekJqu/Qn1qrCjyuXcExEsGnCJl/ABEBAAG0ElJvZCBWYWdnIDxyQHZh
-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
-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
-
9+GSlsuEUvh6/oxYxn4EPIgdqsV25SB/fAUz4uN50qvc0ft+wTgh20pnMP0qLf7/
-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
-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
-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
-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
-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
-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
-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
-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
-
6Afet+De5XSVdDJu2TwhESEyXHFgXv9UQAbj5e8/fG8S/kPalQKnzQxp4eYtgC7a
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
l8m/I8BIywM+fW+kk6ixitkFPszvT+9sgLj5viUl7+pJzLIs3GwODkLVCWCetLfO
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
i1D8bcZVj4EHoB4Lj5U0L/GpqgU/UitUR32fmmfvzQFMWVRMfJHP389Y2lRbcqC/
-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
-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
-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
-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
-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
-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
-
5FRSv0A3iiQVw77i30Ds1YuROX7sWsN74sgJfytLiy9vdT3Jiz+JAiIEEwEIAAwF
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
ossDZpvJuroJFZw5zvIEy7AiDAcCZjMj8FLoLzom0A1FNxCvgzOraMITOobsmQIN
-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
-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
-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
-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
-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
-
VSMRoMkdiswFqEIMQuhTVbqS69vyhtByQs1fhriYrPy3OMeSMjJ/zNDCnHTBuKxo
-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
-
+NmxJRVY+ixpO5TVhQhzzzL9Ivz4z0odlvt5VJJIHHFIAWkgXRNAo0wgDzfe+jHO
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
vvRwIkD5Oi+Y7EJBuT9ZCu3rPyTNoRfxKKAcNV3lSkQx32tucu3IYwYS3twi9y7/
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
W9iPefELT8Refw5PIXHXedb8cpr0jmblQ77DM0mXXljQuTjxE9VaakHA+RwBYy0Z
-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
-
CAcDBRUKCQgLBRYCAwEAAh4BAheABQJXBCF2AhkBAAoJEAn+RHNOt5kOABMP/2Df
-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
-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
-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
-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
-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
-
tlBKOc3KzCG3rV+0FYu/4rzNL5j9EQuMZIsu+drCz76/hA4j/sWOz1wqwRMf0197
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
BBMBCAAMBQJXDUv7BYMHhh+AAAoJEOc7xkHMEfTI5dYQALdHmZ+NlBsDOrGCY/kn
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
BRUKCQgLBRYCAwEAAh4BAheAAAoJEAn+RHNOt5kOMjkP+gL22iXwbP4B4WVRScj5
-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
-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
-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
-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
-
3prZgpKbj5F40q9kDqE5GHJB3gEMh9PF+SPdPeudkafLPU7tQ5x6yo/82NyH1Vvz
-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
-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
-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
-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
-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
-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
-
BRYCAwEAAh4BAheABQJXBCGnAhkBAAoJEAn+RHNOt5kON3AP/2RfLbVPFTNaNktN
-
RRBzO3AdX9F5WvvyTuISP1yPXTyirrdTyzr/mYzc9/hj3Cl0aXGmhtTMqyw2RkG4
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
j2oQ11dUYQtCBV+8eB8UQQoo5EocZfuSEvFU9kvdmFCt4Q8tebveGm+MHu4FQEox
-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
-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
-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
-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
-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
-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
-
EWBfdBeOsxZPVc9zt2/XHghbblvsJarQ4blasMiAkJu5R+nnu2DsL5gUvPmOekrk
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
AQIABgUCVu4HGAAKCRDCc3kvfYNUXfVmB/9pxeCKnQlj56TKRyKwp1vg1UyWnse+
-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
-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
-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
-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
-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
-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
-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
-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
-
xDXafsjS7R9hBhwz6M3LujgBvvsyGgN2Crh/h/hERYZ5ckXNlixbjez2cB2DZQFB
-
vE4eKqBGRAj/Ij2JQljHKt/FczBBhXDCVTW7SSeGi9wPlpgj6w6NsTSiKRCi85s3
-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
-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
-
P1U2lyf4s9/xUiAMw1d6JH1Evu2K5EcS9biC7JcnRNWOGlnxTzShBm9dP+itpeLx
-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
-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
-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
-
AuifQ3fwIBJvV0fgzwuAgQf0nX14zhlRXnKS04nKfJVcDaZ8FsMliYndvNBImQFY
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
g7ZTFsG8eF9Cdlem+6iwLVeccHHOjCPRiVfJEIe3VrhZVpMV/MUWjnc3ikzrw+T9
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
xNnv6a/rUN+4VuUo9y4GFJUypBS+IkpXIm+hCi+wTZpkbZgw6XZ+kJOQmV490yKo
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
cfIV0ZHGnIrKC4E7r/l0cYX4UPgl92A6J6DqtGi8AWXodtPnQTdZm6kq7zMCX7iN
-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
-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
-
n0b7OMxk2cJgI6Bl5gVu83Oz7Pljpp1+W22BXS5a0pU1VNjjsXqW08ICRDnqBzIH
-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
-
fWl+PTuyZlHW5+IH1Hv0omIaauEnr81ONu3KGf+ckQW3Qt6D/Nu/DeplA/NANhT6
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-
EO8yOJJ7Xu10qvVOdhk+H1AhWFTKngsPxp+M92NPFp+ZtkXkZJX+pLzW1YYHL2OJ
-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
-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
-
gweGH4AACgkQ5zvGQcwR9MiKAxAAlcAV4pEvw0Sj2fBJLEVblqwE+ACLR/reTP+e
-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
-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
-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
-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
-
ChwdIQHOjfEiq7c8LyUGY5Z1ZMMbi2F0WuWQlhpBmKCK29HXCOffkH/NIyMf8VAb
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
GO7JTs+MUwp5E3wGLJescTzBdWnSfhnqWF8JUCjVxUaJ5Tlr6FKcL1dZDXZSV+QT
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
LsOS0clOkmlT8zV2tAUNghKSJBQ4cqExid2vh/A0CBITW5DvKbd9QXgRfcWi7CHV
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
L+/fjlmoeGwY/J94lhXYKJLaJMirG/K+uWJ2tXCGqKt3UIou6/T778VjnQ7xOrjF
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
rnl+8xiytCOmosNeuoSUcD5CC/vUObwJM7QJlvx6y00onjsdLuHAyM57dmZgFWuj
-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
-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
-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
-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
-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
-
4Zo4Idh8U1lf/rLrEIDR0RzH8d4uW8T/K0GF7XA6JUO5bFk6+E6MwV3pUtMn/pcm
-
jJoNuWOJsE8LoGjkaTjIID+DA4tbmVVhegPQjiRayVkIflAFjO1bczoyxU/6J3QN
-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
-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
-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
-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
-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
-
L7Vq5z2dh+ulXnymqiGSwQkFzMlZYbrS05/O5+Ljpxv1ZYKQ3N1ulJJi+Z68GTpr
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
35NmjiFrtvEEudHMxkLdoJBFuDBNR1yf4Y0nJU25El/WehqYzQe/rMNPyJ/uPOmT
-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
-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
-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
-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
-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
-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
-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
-
PWKUetQlMjEzPD7B1nPZrmbZNK0RXe21ZfVjHvXXvXiHXp+HT3RxAMNCH4mVX3LR
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
oZZICVmv2K7eXzVdvTv7mkTjynaUehv0W7OTWWsdUHI1qiAtbK/IXfzd6fcNqtyA
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
oLGm4pfOs0MP/3IZxRCUfuwRHrO0tViAz3OH4G0BNOU3qdzKZ2/sDEaZKUbMRgyO
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
MXRH0LSM7xuCh1U+xKupAKMC19Yy9sc0HRzYwjdcqY3QbaaxOjexHRHii6hXCUjs
-
woefVtg6/Xw+NiGaK3VEwK7VGMq4ZBObSJHGmZOzv/NOTOtW07xtsJ5Cta1njbHq
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
ZLcpsrv0M/MLXH/tjHfdMudnj6HZenkDG07mRvRuNKxFBgoPC5KWrJ63+JqhR35S
-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
-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
-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
-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
-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
-
BQJX39hIBYMHhh+AAAoJEIGGdEifvBJ+SBsQAKgXFN+vYHwj+tRSLYOLU9mzM5Jl
-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
-
vWBgw1pLqxix+FIXZTIHNe3OaNkEfcTdMoJyvuWVpOXUz8xbWFZIJke41aA3QJXK
-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
-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
-
c+BtCaG0D+Oa7U5K6ZHfu6TTCo7c+L25ekZp8YGn5Whb2HNzfRjn1NkKmDKxa5ar
-
hTIHGgB3Zizcf22PwNnrUx3godC20ELTWA4MV/JB596MKp+p6j5hxhoJrZnJl33Y
-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
-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
-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
-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
-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
-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
-
Rpbts7O6LRYaErlabEqYW3RUXIiuqr34Z/2sw9JGaPCmXWBP2d6mwSaCyJW4d8+m
-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
-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
-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
-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
-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
-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
-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
-
ZUHWMqB+/TEON3gAkd7ZvYDP1KEINUnVA3xDwztA+bP2tlBnJdLkBis/nOYFZtsi
-
8AkityhOzVC+7dnKw1QoqwuGBxwJgX9hmqgtETJw0HabXEPosyAngh57iDVFPSaK
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
LkY1bUroaJLIcJE5M9eihvZIVfzCW5rMAmJ5hT+i83x+3IforsdbCRKatd/T//uQ
-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
-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
-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
-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
-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
-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
-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
-
GZudX/Vhwk19koM27hF5XNeH2IkG3eILwdjWdQWjaJzZtnfWh3CkYut95se0vreP
-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
-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
-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
-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
-
Sd0Csu2cdAX6kVG01xoiqafZk5Az4YP3U/EiUyZH+HB0rNV/pvmdzC99LZ2LTJKX
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
nYv27TW8MQASoh1prLQsci9gtwoR+MUlA8eCKcf+TyOgVz/f/N271vWSEWesqLj3
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-
tbft90fuq3xmJk/BzY6NZ2f6FIO8aaJzTIGbuQENBFaVjpQBCAC3wjTlC5/jdi2j
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
v4q84+6msPeNpZOAjL86uHi6+Afd/R/eZU36mAuLepEO27M+5Y1dZbtbSsSy85Xb
-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
-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
-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
-
l3Gu785wMDCEQb/ea29LIKzfYiqK6KOG9K+VaYi6STifNbkBDQRWlY6UAQgAveYL
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
zQYkkUb3pJrCPhK/l7Awgf7qpRvrrQcOX+tpnlhJ2keWUSjd1Kk1QcbFPKWQG4kU
-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
-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
-
5EUsbtWV1/Sui/tjnojbnCxq7uncPvBZNiMS8voKsFIXXjewhctO+VNLRBbvM18M
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
VYIkOa4r2CEKBD9icLV7s8YSHFRVh8kRT6b40gA9w4TSW/ecdJMC6d+kjMfAj1NO
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
ORpNDO70dFMi3Q4NIhzSBXWvqsWkqgGW6gkXg9Fdu3BiIz72EdP+UWaHhFesvgq9
-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
-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
-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
-
PGtkdVpJh0teGmQTE4TRNbam97QSEEMuMNzqe0T+S9Kcymii7rEYDVCn8Gu2og0E
-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
-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
-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
-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
-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
-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
-
OBJS0LLmYP7+RTpEBhJcicUNrl/1Np/8NVR8U0A4LwHCDT/yctSMMZm+zQ+T6T1x
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
66KWiJyOFn5PS5texF9sCYw59kedG/kaBbxz4O/5xSYwvW7zGFAOX/cLehpoDwhh
-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
-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
-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
-
4RAaaXzvzIRhDtELzsVp7UYGOzZ6TD1M35fmnqu8/jy4I/jOQ0H/6CKBr0tfyzjy
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
DIjFLO1bX2TIy1YFXDA9c0x8J5Pbt3wmhtkFojgmaGqvWpCJkb7lnudx9Qi/a2gx
-
ys7HS9heaUDoYM8kgeXVHJe1UcVi4veOthg8wp/hQJDUuKba1Xw9ujVi1PqbBNCw
-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
-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
-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
-
ojt0RD0EEznmc5UV+RWKRcoWk7B2BqsZxFp94XRBqFjVOmWeK/hMZxoMl7I0V4gk
-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
-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
-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
-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
-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
-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
-
56RK0ABpU3ZSS9rzJdT+h3vTnIgRKCUBaw2xcv7oN+GCNT3VJ7MmyF4NyDTOjBiP
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
Wwp4ys1LuA7RoKkNET/WXsGiU47eS0dD6DOQmSKrrAIPfqseW9phJD+hbbrPWQAR
-
AQABiQI1BBgBCAApBQJYhpLWCRAj7+/pPEz//gIbDAUJHhM4AAQLBwkDBRUICgID
-
BBYAAQIAAAsJD/0aaHE3/txaeMU1bfDs0nWIBmSrqhVvHEvyzIzWK30D6Nfmv7bP
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
=jVEm
-
-----END PGP PUBLIC KEY BLOCK-----
+4 -5
pkgs/development/web/nodejs/nodejs.nix
···
jq,
curl,
common-updater-scripts,
-
nix,
runtimeShell,
gnupg,
installShellFiles,
···
passthru.updateScript = import ./update.nix {
inherit
writeScript
+
common-updater-scripts
coreutils
-
gnugrep
-
jq
curl
-
common-updater-scripts
+
fetchurl
+
gnugrep
gnupg
-
nix
+
jq
runtimeShell
;
inherit lib;
-18
pkgs/development/web/nodejs/update-keyring
···
-
#!/usr/bin/env nix-shell
-
#! nix-shell --pure -i bash -p coreutils findutils gnupg curl
-
-
# https://github.com/nodejs/node#release-team
-
HOME=`mktemp -d`
-
keyserver="pool.sks-keyservers.net"
-
cat << EOF | xargs -P 4 -n 1 gpg --keyserver $keyserver --recv-keys
-
94AE36675C464D64BAFA68DD7434390BDBE9B9C5
-
FD3A5288F042B6850C66B31F09FE44734EB7990E
-
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1
-
DD8F2338BAE7501E3DD5AC78C273792F7D83545D
-
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8
-
B9AE9905FFD7803F25714661B63B535A4C206CA9
-
56730D5401028683275BD23C23EFEFE93C4CFFFE
-
77984A986EBC2AA786BC0F66B01FBB92821C587A
-
EOF
-
-
gpg -a --export > nodejs-release-keys.asc
+26 -14
pkgs/development/web/nodejs/update.nix
···
{
lib,
writeScript,
+
common-updater-scripts,
coreutils,
curl,
+
fetchurl,
gnugrep,
+
gnupg,
jq,
-
gnupg,
-
common-updater-scripts,
majorVersion,
-
nix,
runtimeShell,
}:
+
let
+
rev = "08bb3693621796b22511e56b8418737bd116d70b"; # should be the HEAD of nodejs/release-keys
+
pubring = fetchurl {
+
url = "https://github.com/nodejs/release-keys/raw/${rev}/gpg/pubring.kbx";
+
hash = "sha256-j7auIjCzRV7GoX8jdtqHFniwmWWTBoRNmRYWWPFSJ/k=";
+
};
+
in
writeScript "update-nodejs" ''
#!${runtimeShell}
+
+
set -e
+
set -o pipefail
+
PATH=${
lib.makeBinPath [
common-updater-scripts
coreutils
curl
gnugrep
-
jq
gnupg
-
nix
+
jq
]
}
-
HOME=`mktemp -d`
-
cat ${./nodejs-release-keys.asc} | gpg --import
-
-
tags=`curl --silent https://api.github.com/repos/nodejs/node/git/refs/tags`
-
version=`echo $tags | jq -r '.[] | select(.ref | startswith("refs/tags/v${majorVersion}")) | .ref' | sort --version-sort | tail -1 | grep -oP "^refs/tags/v\K.*"`
+
version=`\
+
curl --silent https://api.github.com/repos/nodejs/node/git/refs/tags | \
+
jq -r '.[] | select(.ref | startswith("refs/tags/v${majorVersion}")) | .ref' | \
+
sort --version-sort | \
+
tail -1 | \
+
grep -oP "^refs/tags/v\K.*"`
-
curl --silent -o $HOME/SHASUMS256.txt.asc https://nodejs.org/dist/v''${version}/SHASUMS256.txt.asc
-
hash_hex=`gpgv --keyring=$HOME/.gnupg/pubring.kbx --output - $HOME/SHASUMS256.txt.asc | grep -oP "^([0-9a-f]{64})(?=\s+node-v''${version}.tar.xz$)"`
-
hash=`nix-hash --type sha256 --to-base32 ''${hash_hex}`
+
hash_hex=`
+
curl --silent "https://nodejs.org/dist/v''${version}/SHASUMS256.txt.asc" | \
+
gpgv --keyring="${pubring}" --output - | \
+
grep -oP "^([0-9a-f]{64})(?=\s+node-v''${version}.tar.xz$)"`
-
update-source-version nodejs_${majorVersion} "''${version}" "''${hash}"
+
update-source-version nodejs_${majorVersion} "''${version}" "''${hash_hex}"
''
+135 -19
pkgs/servers/home-assistant/component-packages.nix
···
# Do not edit!
{
-
version = "2025.4.4";
+
version = "2025.5.0";
components = {
"3_day_blinds" =
ps: with ps; [
···
ps: with ps; [
aioacaia
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"airthings_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"aranet" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
aiobotocore
botocore
];
+
"aws_s3" =
+
ps: with ps; [
+
aiobotocore
+
];
"axis" =
ps: with ps; [
aiohasupervisor
···
"baidu" =
ps: with ps; [
]; # missing inputs: baidu-aip
+
"balay" =
+
ps: with ps; [
+
];
"balboa" =
ps: with ps; [
pybalboa
···
"bluemaestro" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"bluetooth_adapters" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"bluetooth_le_tracker" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"bthome" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
ps: with ps; [
];
"configurator" =
+
ps: with ps; [
+
];
+
"constructa" =
ps: with ps; [
];
"control4" =
···
"dormakaba_dkey" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
dynalite-devices
dynalite-panel
home-assistant-frontend
-
pillow
];
"eafm" =
ps: with ps; [
···
];
"ephember" =
ps: with ps; [
-
pyephember
+
pyephember2
];
"epic_games_store" =
ps: with ps; [
···
"eq3btsmart" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"esphome" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aiousbwatcher
bleak
bleak-esphome
···
"eufylife_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"fjaraskupan" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"frontend" =
ps: with ps; [
home-assistant-frontend
-
pillow
];
"frontier_silicon" =
ps: with ps; [
···
ps: with ps; [
fyta-cli
];
+
"gaggenau" =
+
ps: with ps; [
+
];
"garadget" =
ps: with ps; [
];
···
"gardena_bluetooth" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
python-google-drive-api
securetar
];
+
"google_gemini" =
+
ps: with ps; [
+
];
"google_generative_ai_conversation" =
ps: with ps; [
google-genai
···
];
"google_travel_time" =
ps: with ps; [
-
googlemaps
+
google-maps-routing
];
"google_wifi" =
ps: with ps; [
···
"govee_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"homekit_controller" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aiohomekit
aioruuvigateway
aioshelly
···
"husqvarna_automower_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"ibeacon" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"idasen_desk" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
ps: with ps; [
aioimaplib
];
+
"imeon_inverter" =
+
ps: with ps; [
+
imeon-inverter-api
+
];
"imgw_pib" =
ps: with ps; [
imgw-pib
···
"improv_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"inkbird" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
aiousbwatcher
home-assistant-frontend
insteon-frontend-home-assistant
-
pillow
pyinsteon
pyserial
];
···
"iron_os" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"kegtron" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"keymitt_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
ps: with ps; [
home-assistant-frontend
knx-frontend
-
pillow
xknx
xknxproject
];
···
];
"kulersky" =
ps: with ps; [
+
aioesphomeapi
+
aiohasupervisor
+
aioruuvigateway
+
aioshelly
+
aiousbwatcher
+
bleak
+
bleak-esphome
+
bleak-retry-connector
+
bluetooth-adapters
+
bluetooth-auto-recovery
+
bluetooth-data-tools
+
dbus-fast
+
esphome-dashboard-api
+
ha-ffmpeg
+
habluetooth
+
hassil
+
home-assistant-intents
+
ifaddr
+
mutagen
pykulersky
+
pymicro-vad
+
pyserial
+
pyspeex-noise
+
zeroconf
];
"kwb" =
ps: with ps; [
···
"lamarzocco" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
ps: with ps; [
home-assistant-frontend
lcn-frontend
-
pillow
pypck
];
"ld2410_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"leaone" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"led_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
ps: with ps; [
fnv-hash-fast
home-assistant-frontend
-
pillow
psutil-home-assistant
sqlalchemy
];
···
];
"lovelace" =
ps: with ps; [
-
pillow
];
"luci" =
ps: with ps; [
···
ps: with ps; [
maxcube-api
];
+
"maytag" =
+
ps: with ps; [
+
];
"mazda" =
ps: with ps; [
];
···
"medcom_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
];
"melcloud" =
ps: with ps; [
-
pymelcloud
+
python-melcloud
];
"melissa" =
ps: with ps; [
···
"melnor" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
ps: with ps; [
pyturbojpeg
];
+
"miele" =
+
ps: with ps; [
+
pymiele
+
];
"mijndomein_energie" =
ps: with ps; [
];
···
];
"mill" =
ps: with ps; [
+
fnv-hash-fast
mill-local
millheater
+
psutil-home-assistant
+
sqlalchemy
];
"min_max" =
ps: with ps; [
···
"moat" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"mopeka" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"motionblinds_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"my" =
ps: with ps; [
home-assistant-frontend
-
pillow
];
"myq" =
ps: with ps; [
···
"nasweb" =
ps: with ps; [
]; # missing inputs: webio-api
+
"national_grid_us" =
+
ps: with ps; [
+
];
"neato" =
ps: with ps; [
pybotvac
···
"nederlandse_spoorwegen" =
ps: with ps; [
nsapi
+
];
+
"neff" =
+
ps: with ps; [
];
"ness_alarm" =
ps: with ps; [
···
ps: with ps; [
aio-geojson-nsw-rfs-incidents
];
+
"ntfy" =
+
ps: with ps; [
+
aiontfy
+
];
"nuheat" =
ps: with ps; [
nuheat
···
];
"onboarding" =
ps: with ps; [
-
pillow
];
"oncue" =
ps: with ps; [
-
aiooncue
];
"ondilo_ico" =
ps: with ps; [
···
"oralb" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
aiousbwatcher
ha-silabs-firmware-client
ifaddr
-
pillow
psutil-home-assistant
pyroute2
pyserial
···
"panel_custom" =
ps: with ps; [
home-assistant-frontend
-
pillow
];
"pcs_lighting" =
ps: with ps; [
···
"piper" =
ps: with ps; [
];
+
"pitsos" =
+
ps: with ps; [
+
];
"pjlink" =
ps: with ps; [
]; # missing inputs: pypjlink2
···
"private_ble_device" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
objgraph
pyprof2calltree
];
+
"profilo" =
+
ps: with ps; [
+
];
"progettihwsw" =
ps: with ps; [
]; # missing inputs: ProgettiHWSW
···
"qingping" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"rapt_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
home-assistant-frontend
home-assistant-intents
mutagen
-
pillow
pymicro-vad
pyspeex-noise
python-matter-server
···
ps: with ps; [
refoss-ha
];
+
"rehlko" =
+
ps: with ps; [
+
aiokem
+
];
"rejseplanen" =
ps: with ps; [
rjpl
···
"ruuvitag_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"sensirion_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"sensorpro" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"sensorpush" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
ps: with ps; [
pysiaalarm
];
+
"siemens" =
+
ps: with ps; [
+
];
"sigfox" =
ps: with ps; [
];
···
"snooz" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
];
"stiebel_eltron" =
ps: with ps; [
-
pymodbus
]; # missing inputs: pystiebeleltron
"stookwijzer" =
ps: with ps; [
···
"switchbot" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"text" =
ps: with ps; [
];
+
"thermador" =
+
ps: with ps; [
+
];
"thermobeacon" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"thermopro" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"tilt_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"xiaomi_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
"yalexs_ble" =
ps: with ps; [
aioesphomeapi
+
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
···
aiohasupervisor
aiousbwatcher
ha-silabs-firmware-client
-
pillow
pyserial
universal-silabs-flasher
zha
···
"automation"
"awair"
"aws"
+
"aws_s3"
"axis"
"azure_data_explorer"
"azure_devops"
···
"image_processing"
"image_upload"
"imap"
+
"imeon_inverter"
"imgw_pib"
"improv_ble"
"incomfort"
···
"microsoft_face"
"microsoft_face_detect"
"microsoft_face_identify"
+
"miele"
"mikrotik"
"mill"
"min_max"
···
"notify_events"
"notion"
"nsw_rural_fire_service_feed"
+
"ntfy"
"nuheat"
"nuki"
"number"
···
"recovery_mode"
"reddit"
"refoss"
+
"rehlko"
"remote"
"remote_calendar"
"renault"
+5 -8
pkgs/servers/home-assistant/custom-components/frigate/package.nix
···
buildHomeAssistantComponent rec {
owner = "blakeblackshear";
domain = "frigate";
-
version = "5.8.0";
+
version = "5.9.2";
src = fetchFromGitHub {
owner = "blakeblackshear";
repo = "frigate-hass-integration";
tag = "v${version}";
-
hash = "sha256-sQgi3F44eT/iL3cE9YuKyjJmE4nZM+OcwirUyl3maGo=";
+
hash = "sha256-XVHw9AjngzbMnzRPJ/VL1Hy0gG3q+rV4Gfh8K7pIW6M=";
};
dependencies = [ hass-web-proxy-lib ];
···
++ (homeassistant.getPackages "mqtt" homeassistant.python.pkgs)
++ (homeassistant.getPackages "stream" homeassistant.python.pkgs);
-
disabledTests = [
-
# uses deprecated and removed constants
-
# https://github.com/blakeblackshear/frigate-hass-integration/issues/860
-
"test_duplicate"
-
"test_options_advanced"
-
"test_options"
+
disabledTestPaths = [
+
# https://github.com/blakeblackshear/frigate-hass-integration/issues/907
+
"tests/test_media_source.py"
];
meta = with lib; {
+2 -2
pkgs/servers/home-assistant/custom-components/frigidaire/package.nix
···
buildHomeAssistantComponent rec {
owner = "bm1549";
domain = "frigidaire";
-
version = "0.1.1";
+
version = "0.1.2";
src = fetchFromGitHub {
inherit owner;
repo = "home-assistant-frigidaire";
tag = version;
-
hash = "sha256-Jynm0e5y/mSgyd5Pyus+nIVV3XSjsm5z+oNuGIhCu9s=";
+
hash = "sha256-7SyOsB16P0O0RHEUXy79cqil+QFO2PilyWWlpv428g0=";
};
dependencies = [ frigidaire ];
+2 -2
pkgs/servers/home-assistant/custom-components/localtuya/package.nix
···
buildHomeAssistantComponent rec {
owner = "xZetsubou";
domain = "localtuya";
-
version = "2025.3.2";
+
version = "2025.5.1";
src = fetchFromGitHub {
owner = "xZetsubou";
repo = "hass-localtuya";
rev = version;
-
hash = "sha256-6JE2hVD650YE7pSrLt+Ie1QpvHcG0bJ2yrTpwTukBG0=";
+
hash = "sha256-cYaMHh16dmjO8UrpBZScGoHDNqvmQ5ceAq/lP6qazxA=";
};
meta = with lib; {
+2 -2
pkgs/servers/home-assistant/custom-components/midea_ac_lan/package.nix
···
buildHomeAssistantComponent rec {
owner = "wuwentao";
domain = "midea_ac_lan";
-
version = "0.6.6";
+
version = "0.6.7";
src = fetchFromGitHub {
inherit owner;
repo = domain;
tag = "v${version}";
-
hash = "sha256-GksX+RmQ7lcyuUL3vu9b1q3c56W9yB2Hg20DUNTeOxY=";
+
hash = "sha256-L1dlj7gOH/VpwayoyQGbwu/4IIDW1tTxmnTQNTwfxUw=";
};
dependencies = [ midea-local ];
-33
pkgs/servers/home-assistant/custom-components/miele/package.nix
···
-
{
-
lib,
-
fetchFromGitHub,
-
buildHomeAssistantComponent,
-
flatdict,
-
pymiele,
-
}:
-
-
buildHomeAssistantComponent rec {
-
owner = "astrandb";
-
domain = "miele";
-
version = "2025.1.1";
-
-
src = fetchFromGitHub {
-
inherit owner;
-
repo = domain;
-
tag = "v${version}";
-
hash = "sha256-TShy2q3gKqTgRU3u4Wp7zQjzhEogqUVip8EkH8XIYw8=";
-
};
-
-
dependencies = [
-
flatdict
-
pymiele
-
];
-
-
meta = with lib; {
-
changelog = "https://github.com/astrandb/miele/releases/tag/v${version}";
-
description = "Modern integration for Miele devices in Home Assistant";
-
homepage = "https://github.com/astrandb/miele";
-
maintainers = with maintainers; [ jamiemagee ];
-
license = licenses.mit;
-
};
-
}
+2 -2
pkgs/servers/home-assistant/custom-components/nest_protect/package.nix
···
buildHomeAssistantComponent rec {
owner = "iMicknl";
domain = "nest_protect";
-
version = "0.4.0";
+
version = "0.4.2b0";
src = fetchFromGitHub {
inherit owner;
repo = "ha-nest-protect";
tag = "v${version}";
-
hash = "sha256-UAVyfI+cHYx0va2P14moyy6BbhNegsdLWtiex5QeFrs=";
+
hash = "sha256-CQVAvx7iRCRHw8YXDmsWaF6fhddx3OfSLjq218+ob6I=";
};
# AttributeError: 'async_generator' object has no attribute 'data'
+2 -2
pkgs/servers/home-assistant/custom-components/solax_modbus/package.nix
···
buildHomeAssistantComponent rec {
owner = "wills106";
domain = "solax_modbus";
-
version = "2025.04.1";
+
version = "2025.04.4";
src = fetchFromGitHub {
owner = "wills106";
repo = "homeassistant-solax-modbus";
tag = version;
-
hash = "sha256-kX8poctK1Q7QZnpvkOisQ47jNzXJJ2nlB1fa+Pv4AFs=";
+
hash = "sha256-fgvhF+1fz3pNOZJQjf/iF2Lh9j6mMkUXjgLyCja84K0=";
};
dependencies = [ pymodbus ];
+2 -2
pkgs/servers/home-assistant/custom-components/volvo_cars/package.nix
···
buildHomeAssistantComponent rec {
owner = "thomasddn";
domain = "volvo_cars";
-
version = "1.5.1";
+
version = "1.5.3";
src = fetchFromGitHub {
owner = "thomasddn";
repo = "ha-volvo-cars";
tag = "v${version}";
-
hash = "sha256-UG/anp9ThEOQsRWraTayuyx6kS9r2vTH/8Bak4ZzYzo";
+
hash = "sha256-f7+RBAOkNUVJ4P/B/cMK7eGFrTnn8TGsC26vfSHc8Z4=";
};
meta = with lib; {
+2 -2
pkgs/servers/home-assistant/custom-components/xiaomi_miot/package.nix
···
buildHomeAssistantComponent rec {
owner = "al-one";
domain = "xiaomi_miot";
-
version = "1.0.17";
+
version = "1.0.18";
src = fetchFromGitHub {
owner = "al-one";
repo = "hass-xiaomi-miot";
rev = "v${version}";
-
hash = "sha256-jiskzH2MsddF1rdCnrdJyALQQxFrFUBpOjdR/zbTxh0=";
+
hash = "sha256-eKh3oa/dPmOIywdTkRhItzP4LQNLguNDfkQWMJjQkpo=";
};
dependencies = [
+2 -2
pkgs/servers/home-assistant/custom-components/yoto_ha/package.nix
···
buildHomeAssistantComponent rec {
owner = "cdnninja";
domain = "yoto";
-
version = "1.24.0";
+
version = "1.24.4";
src = fetchFromGitHub {
owner = "cdnninja";
repo = "yoto_ha";
tag = "v${version}";
-
hash = "sha256-vlUPVKG6PAkQbROd/Pn5gf48/QWl2GAs3xGCnwX0ENU=";
+
hash = "sha256-iiS5bns7la17Wf/mRkraE9xL9i+OzI4ru4BaHiLtA6U=";
};
dependencies = [
+3 -3
pkgs/servers/home-assistant/custom-lovelace-modules/mini-graph-card/package.nix
···
buildNpmPackage rec {
pname = "mini-graph-card";
-
version = "0.13.0-dev.2";
+
version = "0.13.0-dev.3";
src = fetchFromGitHub {
owner = "kalkih";
repo = "mini-graph-card";
tag = "v${version}";
-
hash = "sha256-JpteGI9oR2twCTvEQ8xtb55EGQw//9EVuELh4BG0BE0=";
+
hash = "sha256-er+oaUffKh4hXenDD6VHJ01K8kupzhY4Js8M1zSLMvQ=";
};
-
npmDepsHash = "sha256-Mg58i0L1e1YwBd81WwVgB56P7EYaq3FnMysIrgu0+qQ=";
+
npmDepsHash = "sha256-0INteDirb9jkmA0fNAuii0woqnZjTm0gl1brOeIJrn0=";
installPhase = ''
runHook preInstall
+3 -3
pkgs/servers/home-assistant/custom-lovelace-modules/sankey-chart/package.nix
···
buildNpmPackage rec {
pname = "sankey-chart";
-
version = "3.7.0";
+
version = "3.8.1";
src = fetchFromGitHub {
owner = "MindFreeze";
repo = "ha-sankey-chart";
rev = "v${version}";
-
hash = "sha256-krWK2P7tjK5loFYXZ5+b8UN4TEKPObW2QK+3l7+zvj0=";
+
hash = "sha256-qDFCrnx0G+RsDq1V8wvo04AelR82SlXOYqWJntnSBJY=";
};
-
npmDepsHash = "sha256-OBgmmPcwpMxXrytP2tHzCFe1imz1S6LHBWJkruw3jgI=";
+
npmDepsHash = "sha256-A4aw4OKBQRsc6O60ewp88QxABANjnNlejSUfcFGyyRA=";
installPhase = ''
runHook preInstall
+11 -14
pkgs/servers/home-assistant/default.nix
···
lib,
callPackage,
fetchFromGitHub,
+
fetchpatch,
fetchPypi,
python313,
replaceVars,
···
inherit (oldAttrs.src) owner repo;
rev = "refs/tags/${version}";
hash = "sha256-GGp7nKFH01m1KW6yMkKlAdd26bDi8JDWva6OQ0CWMIw=";
-
};
-
});
-
-
pymelcloud = super.pymelcloud.overridePythonAttrs (oldAttrs: {
-
version = "2.5.9";
-
src = fetchFromGitHub {
-
owner = "vilppuvuorinen";
-
repo = "pymelcloud";
-
rev = "33a827b6cd0b34f276790faa49bfd0994bb7c2e4"; # 2.5.x branch
-
sha256 = "sha256-Q3FIo9YJwtWPHfukEBjBANUQ1N1vr/DMnl1dgiN7vYg=";
};
});
···
extraBuildInputs = extraPackages python.pkgs;
# Don't forget to run update-component-packages.py after updating
-
hassVersion = "2025.4.4";
+
hassVersion = "2025.5.0";
in
python.pkgs.buildPythonApplication rec {
···
pyproject = true;
# check REQUIRED_PYTHON_VER in homeassistant/const.py
-
disabled = python.pythonOlder "3.11";
+
disabled = python.pythonOlder "3.13";
# don't try and fail to strip 6600+ python files, it takes minutes!
dontStrip = true;
···
owner = "home-assistant";
repo = "core";
tag = version;
-
hash = "sha256-MiBsVsgV/M8ge7XQ4e4VpdAKTVZBCDu3Jqql2YHx9rY=";
+
hash = "sha256-aypBPEI9AOAW9BUkcjJtXa9ssLo4jwEeX47m8320/Gg=";
};
# Secondary source is pypi sdist for translations
sdist = fetchPypi {
inherit pname version;
-
hash = "sha256-qOhOs6I2Jx/7GWVeCBJ6d77w3RCFjsvFxDUbR60Ucf0=";
+
hash = "sha256-7bRBKCchBjAKmW4fjSzShr1RdNRQ677Dd1FXW6sqOQQ=";
};
build-system = with python.pkgs; [
···
# leave this in, so users don't have to constantly update their downstream patch handling
patches = [
+
(fetchpatch {
+
name = "fix-point-import-error.patch";
+
url = "https://github.com/home-assistant/core/commit/3c4c3dc08e306b75dce486f5f5236a731fd04cf4.patch";
+
hash = "sha256-ke04kJWuBHMANVZo75QL5QwU51DZtO4FBBNu4Szu9q8=";
+
})
+
# Follow symlinks in /var/lib/hass/www
./patches/static-follow-symlinks.patch
+2 -2
pkgs/servers/home-assistant/frontend.nix
···
# the frontend version corresponding to a specific home-assistant version can be found here
# https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/frontend/manifest.json
pname = "home-assistant-frontend";
-
version = "20250411.0";
+
version = "20250507.0";
format = "wheel";
src = fetchPypi {
···
pname = "home_assistant_frontend";
dist = "py3";
python = "py3";
-
hash = "sha256-oVvYSEvkJ2bvmoC4DHEUi4EE9iOBn3dJyUnyObWSx1k=";
+
hash = "sha256-9haMRgP7LxngEciafhTaOX/iSbiNZuqzBakJ3YNAWMo=";
};
# there is nothing to strip in this package
+2 -2
pkgs/servers/home-assistant/intents.nix
···
buildPythonPackage rec {
pname = "home-assistant-intents";
-
version = "2025.3.28";
+
version = "2025.5.7";
pyproject = true;
disabled = pythonOlder "3.9";
···
repo = "intents-package";
rev = "refs/tags/${version}";
fetchSubmodules = true;
-
hash = "sha256-p1AQYwlMas6GLzg4ZsypDaUsQs74drKqfXA8uJ2K+xw=";
+
hash = "sha256-803TTK8wT00uZjXl6EfNMNveRBeKPQIgRXIawg68tEU=";
};
build-system = [
+2 -2
pkgs/servers/home-assistant/pytest-homeassistant-custom-component.nix
···
buildPythonPackage rec {
pname = "pytest-homeassistant-custom-component";
-
version = "0.13.235";
+
version = "0.13.243";
pyproject = true;
disabled = pythonOlder "3.13";
···
owner = "MatthewFlamm";
repo = "pytest-homeassistant-custom-component";
rev = "refs/tags/${version}";
-
hash = "sha256-hr9GZsyXj7ewEevyXs2PCMKFQahcco+gVFQi8kSxf9A=";
+
hash = "sha256-Y3+W+tS585N7+xikwhEdyn8mX19h/Udz1Uf6Ixw8OVo=";
};
build-system = [ setuptools ];
+5
pkgs/servers/home-assistant/python-modules/hass-web-proxy-lib/default.nix
···
pytestCheckHook
];
+
disabledTests = [
+
# https://github.com/dermotduffy/hass-web-proxy-lib/issues/65
+
"test_proxy_view_aiohttp_read_error"
+
];
+
pythonImportsCheck = [
"hass_web_proxy_lib"
];
+2 -2
pkgs/servers/home-assistant/stubs.nix
···
buildPythonPackage rec {
pname = "homeassistant-stubs";
-
version = "2025.4.4";
+
version = "2025.5.0";
pyproject = true;
disabled = python.version != home-assistant.python.version;
···
owner = "KapJI";
repo = "homeassistant-stubs";
tag = version;
-
hash = "sha256-dQS0bMzBe9zwoyODz3DDrpqZO0+zX3UHtgoJaj+5mhA=";
+
hash = "sha256-90rtXrTCYlply34iDRKkS8Wtx88NRK0eQBLtb4odRHo=";
};
build-system = [
+23 -21
pkgs/tools/security/sbomnix/default.nix pkgs/by-name/sb/sbomnix/package.nix
···
grype,
nix,
nix-visualize,
-
python,
+
python3,
vulnix,
-
# python libs
-
beautifulsoup4,
-
colorlog,
-
dfdiskcache,
-
filelock,
-
graphviz,
-
numpy,
-
packageurl-python,
-
packaging,
-
pandas,
-
pyrate-limiter,
-
requests,
-
requests-cache,
-
requests-ratelimiter,
-
reuse,
-
setuptools,
-
tabulate,
}:
+
let
+
python = python3.override {
+
self = python3;
+
packageOverrides = self: super: {
+
pyrate-limiter = super.pyrate-limiter.overridePythonAttrs (oldAttrs: rec {
+
version = "2.10.0";
+
src = fetchFromGitHub {
+
inherit (oldAttrs.src) owner repo;
+
tag = "v${version}";
+
hash = "sha256-CPusPeyTS+QyWiMHsU0ii9ZxPuizsqv0wQy3uicrDw0=";
+
};
+
doCheck = false;
+
});
+
};
+
};
+
+
in
+
python.pkgs.buildPythonApplication rec {
pname = "sbomnix";
version = "1.7.2";
···
lib.makeBinPath [
git
nix
-
graphviz
+
python.pkgs.graphviz
nix-visualize
vulnix
grype
···
}"
];
-
nativeBuildInputs = [ setuptools ];
+
build-system = [ python.pkgs.setuptools ];
-
propagatedBuildInputs = [
+
dependencies = with python.pkgs; [
beautifulsoup4
colorlog
dfdiskcache
···
];
pythonImportsCheck = [ "sbomnix" ];
+
# Tests require network access
doCheck = false;
+6 -3
pkgs/top-level/all-packages.nix
···
buildDocs = false;
};
-
sbomnix = python3.pkgs.callPackage ../tools/security/sbomnix { };
-
seer = libsForQt5.callPackage ../development/tools/misc/seer { };
semantik = libsForQt5.callPackage ../applications/office/semantik { };
···
kanidm_1_4 = callPackage ../by-name/ka/kanidm/1_4.nix { kanidm = kanidm_1_4; };
kanidm_1_5 = callPackage ../by-name/ka/kanidm/1_5.nix { kanidm = kanidm_1_5; };
+
kanidm_1_6 = callPackage ../by-name/ka/kanidm/1_6.nix { kanidm = kanidm_1_6; };
-
kanidmWithSecretProvisioning = kanidmWithSecretProvisioning_1_5;
+
kanidmWithSecretProvisioning = kanidmWithSecretProvisioning_1_6;
kanidmWithSecretProvisioning_1_4 = callPackage ../by-name/ka/kanidm/1_4.nix {
enableSecretProvisioning = true;
kanidmWithSecretProvisioning_1_5 = callPackage ../by-name/ka/kanidm/1_5.nix {
+
enableSecretProvisioning = true;
+
};
+
+
kanidmWithSecretProvisioning_1_6 = callPackage ../by-name/ka/kanidm/1_6.nix {
enableSecretProvisioning = true;
+2
pkgs/top-level/python-aliases.nix
···
pycontracts = throw "pycontracts has been removed, since upstream is no longer active and it is broken on modern Python versions."; # added 2024-08-09
pydns = py3dns; # added 2024-10-25
pydrive = throw "pydrive is broken and deprecated and has been replaced with pydrive2."; # added 2022-06-01
+
pyephember = throw "pyephember was removed because Home Assistant switched to pyephember2"; # added 2025-05-07
pyjet = throw "pyjet is deprecated, use fastjet instead"; # added 2023-05-10
pygame_sdl2 = pygame-sdl2; # added 2024-01-07
pygogo = throw "pygogo has been removed, since it is abandoned and had no maintainer"; # added 2024-07-27
···
pymatgen-lammps = throw "pymatgen-lammps has been removed because it is unmaintained and broken"; # added 2023-06-20
pymazda = throw "pymazda has been removed, because the upstream repo has been affected by a DCMA claim."; # added 2023-10-16
pymc3 = pymc; # added 2022-06-05, module was rename starting with 4.0.0
+
pymelcloud = python-melcloud; # added 2025-05-08
pymssql = throw "pymssql has been abandoned upstream."; # added 2020-05-04
PyMVGLive = pymvglive; # added 2023-02-19
pymyq = python-myq; # added 2023-10-20
+11 -3
pkgs/top-level/python-packages.nix
···
aiokef = callPackage ../development/python-modules/aiokef { };
+
aiokem = callPackage ../development/python-modules/aiokem { };
+
aiolifx = callPackage ../development/python-modules/aiolifx { };
aiolifx-connection = callPackage ../development/python-modules/aiolifx-connection { };
···
google-generativeai = callPackage ../development/python-modules/google-generativeai { };
+
google-geo-type = callPackage ../development/python-modules/google-geo-type { };
+
google-i18n-address = callPackage ../development/python-modules/google-i18n-address { };
+
+
google-maps-routing = callPackage ../development/python-modules/google-maps-routing { };
google-nest-sdm = callPackage ../development/python-modules/google-nest-sdm { };
···
imbalanced-learn = callPackage ../development/python-modules/imbalanced-learn { };
+
imeon-inverter-api = callPackage ../development/python-modules/imeon-inverter-api { };
+
img2pdf = callPackage ../development/python-modules/img2pdf { };
imgcat = callPackage ../development/python-modules/imgcat { };
···
pyenvisalink = callPackage ../development/python-modules/pyenvisalink { };
-
pyephember = callPackage ../development/python-modules/pyephember { };
+
pyephember2 = callPackage ../development/python-modules/pyephember2 { };
pyepsg = callPackage ../development/python-modules/pyepsg { };
···
pymee = callPackage ../development/python-modules/pymee { };
pymeeus = callPackage ../development/python-modules/pymeeus { };
-
-
pymelcloud = callPackage ../development/python-modules/pymelcloud { };
pymemcache = callPackage ../development/python-modules/pymemcache { };
···
python-matter-server = callPackage ../development/python-modules/python-matter-server { };
python-mbedtls = callPackage ../development/python-modules/python-mbedtls { };
+
+
python-melcloud = callPackage ../development/python-modules/python-melcloud { };
python-memcached = callPackage ../development/python-modules/python-memcached {
inherit (pkgs) memcached;