@camstack/addon-provider-ecowitt 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/addon.js CHANGED
@@ -4,6 +4,7 @@ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).expor
4
4
  //#endregion
5
5
  let http = require("http");
6
6
  let events = require("events");
7
+ let dgram = require("dgram");
7
8
  //#region ../../node_modules/zod/v4/core/core.js
8
9
  var _a$1;
9
10
  function $constructor(name, initializer, params) {
@@ -4647,7 +4648,7 @@ function preprocess(fn, schema) {
4647
4648
  });
4648
4649
  }
4649
4650
  //#endregion
4650
- //#region ../types/dist/sleep-B3AOslwX.mjs
4651
+ //#region ../types/dist/sleep-C2M2zF7x.mjs
4651
4652
  var EventCategory = /* @__PURE__ */ function(EventCategory) {
4652
4653
  EventCategory["SystemBoot"] = "system.boot";
4653
4654
  EventCategory["SystemAddonsReady"] = "system.addons-ready";
@@ -6215,6 +6216,12 @@ var DeviceType = /* @__PURE__ */ function(DeviceType) {
6215
6216
  DeviceType["Switch"] = "switch";
6216
6217
  DeviceType["Sensor"] = "sensor";
6217
6218
  DeviceType["Thermostat"] = "thermostat";
6219
+ /** Air-conditioner / heat-pump climate device (HVAC) — shares the
6220
+ * `climate-control` cap surface with `Thermostat` but renders a
6221
+ * dedicated AC-appropriate control UI (mode chips, fan speed,
6222
+ * independent vertical/horizontal swing). Sources: native Gree, and
6223
+ * reusable by other AC integrations. */
6224
+ DeviceType["Climate"] = "climate";
6218
6225
  DeviceType["Button"] = "button";
6219
6226
  /** Generic stateless event emitter — carries a device's EXACT declared
6220
6227
  * event vocabulary verbatim (no normalization). Installed with the
@@ -9010,7 +9017,7 @@ var climateControlCapability = {
9010
9017
  scope: "device",
9011
9018
  deviceNative: true,
9012
9019
  mode: "singleton",
9013
- deviceTypes: [DeviceType.Thermostat],
9020
+ deviceTypes: [DeviceType.Thermostat, DeviceType.Climate],
9014
9021
  methods: {
9015
9022
  setMode: method(object({
9016
9023
  deviceId: number().int().nonnegative(),
@@ -13609,10 +13616,30 @@ var deviceProviderCapability = {
13609
13616
  type: string()
13610
13617
  }))),
13611
13618
  supportsDiscovery: method(object({}), boolean()),
13612
- discoverDevices: method(object({}), array(DiscoveryCandidateSchema), {
13619
+ /**
13620
+ * Run a network scan. `params` carries optional provider-specific scan
13621
+ * inputs (e.g. a broadcast address / subnet for cross-subnet discovery),
13622
+ * shaped by `getDiscoveryParamsSchema`. Omitted for the generic scan
13623
+ * (provider uses its local-network default).
13624
+ */
13625
+ discoverDevices: method(object({ params: record(string(), unknown()).optional() }), array(DiscoveryCandidateSchema), {
13613
13626
  kind: "mutation",
13614
13627
  auth: "admin"
13615
13628
  }),
13629
+ /**
13630
+ * Optional form schema (`ConfigUISchema`) for the EXTRA per-scan inputs a
13631
+ * provider accepts (e.g. Gree's broadcast address for a different subnet).
13632
+ * `null` when the provider takes no extra scan params — the generic
13633
+ * aggregated scan never renders this; the per-integration scan does.
13634
+ */
13635
+ getDiscoveryParamsSchema: method(object({}), CreationSchemaOutputSchema),
13636
+ /**
13637
+ * The DeviceType this provider creates via manual add (Camera for
13638
+ * Reolink/ONVIF, Container for Gree, Hub for Ecowitt). `null` when the
13639
+ * provider does not support manual creation. Lets the Add-Device dialog
13640
+ * pick the right type instead of assuming Camera.
13641
+ */
13642
+ getManualCreationType: method(object({}), object({ deviceType: _enum(DeviceType).nullable() })),
13616
13643
  adoptDiscoveredDevice: method(object({ candidate: DiscoveryCandidateSchema }), DeviceSummarySchema, {
13617
13644
  kind: "mutation",
13618
13645
  auth: "admin"
@@ -13736,9 +13763,23 @@ var BaseDeviceProvider = class extends BaseAddon {
13736
13763
  async supportsDiscovery() {
13737
13764
  return false;
13738
13765
  }
13739
- async discoverDevices() {
13766
+ async discoverDevices(_input) {
13740
13767
  return [];
13741
13768
  }
13769
+ /** Extra per-scan input form (e.g. a broadcast address for another subnet).
13770
+ * Null = no extra params. Override in providers that support scoped scans. */
13771
+ async getDiscoveryParamsSchema() {
13772
+ return null;
13773
+ }
13774
+ /**
13775
+ * The DeviceType this provider creates via manual add — derived from the
13776
+ * `deviceClasses` map (first registered type). `null` when manual creation is
13777
+ * unsupported. Lets the Add-Device dialog pick the right type per provider.
13778
+ */
13779
+ async getManualCreationType() {
13780
+ if (!await this.supportsManualCreation()) return { deviceType: null };
13781
+ return { deviceType: Object.values(DeviceType).find((t) => this.deviceClasses[t] !== void 0) ?? null };
13782
+ }
13742
13783
  async adoptDiscoveredDevice(_input) {
13743
13784
  throw new Error(`${this.providerName} provider does not support discovery-based adoption`);
13744
13785
  }
@@ -14785,83 +14826,34 @@ var GetStateInputSchema = object({
14785
14826
  * HA: entity_id (returns the cached entity state). */
14786
14827
  key: string()
14787
14828
  });
14788
- var brokerCapability = {
14789
- name: "broker",
14790
- scope: "system",
14791
- mode: "collection",
14792
- providerKind: "broker",
14793
- status: {
14794
- schema: RegistryStatusSchema,
14795
- kind: "poll"
14796
- },
14797
- methods: {
14798
- list: method(ListInputSchema, array(BrokerInfoSchema$1)),
14799
- get: method(GetInputSchema, BrokerInfoSchema$1.nullable()),
14800
- /** Enumerate which addon provides which broker kind(s) for the
14801
- * unified create picker. The auto-mount fans this array across
14802
- * every registered `broker` provider (array-output method), so the
14803
- * picker sees every kind from every provider in one call. */
14804
- listProviders: method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }),
14805
- add: method(AddInputSchema, AddResultSchema, {
14806
- kind: "mutation",
14807
- auth: "admin"
14808
- }),
14809
- remove: method(RemoveInputSchema, _void(), {
14810
- kind: "mutation",
14811
- auth: "admin"
14812
- }),
14813
- testConnection: method(GetInputSchema, TestConnectionResultSchema, {
14814
- kind: "mutation",
14815
- auth: "admin"
14816
- }),
14817
- /** Read the persisted settings record for a broker (kind-specific
14818
- * shape). Admin-only — settings may contain secrets. Returns `null`
14819
- * when the broker id is unknown to the provider (the collection
14820
- * fallback may route a foreign id to the first provider). */
14821
- getSettings: method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }),
14822
- /** Overwrite the persisted settings record. The kind-specific
14823
- * provider validates the shape and applies the change (reconnects
14824
- * if credentials changed). */
14825
- setSettings: method(object({
14826
- id: string(),
14827
- settings: SettingsRecordSchema$1
14828
- }), _void(), {
14829
- kind: "mutation",
14830
- auth: "admin"
14831
- }),
14832
- /** Returns the kind-specific connection config the consumer needs
14833
- * to open its own client (MQTT pattern: `{url, username, password,
14834
- * clientIdPrefix}`). HA providers MAY return the auth envelope
14835
- * but typical HA consumers use `publish` / `subscribe` instead.
14836
- * Returns `null` when the broker id is unknown to the provider. */
14837
- getBrokerConfig: method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }),
14838
- getSettingsSchema: method(SettingsSchemaInputSchema, SettingsSchemaResultSchema, { auth: "admin" }),
14839
- testSettings: method(TestSettingsInputSchema, TestSettingsResultSchema, {
14840
- kind: "mutation",
14841
- auth: "admin"
14842
- }),
14843
- publish: method(PublishInputSchema, unknown(), {
14844
- kind: "mutation",
14845
- auth: "admin"
14846
- }),
14847
- subscribe: method(SubscribeInputSchema, SubscribeResultSchema, {
14848
- kind: "mutation",
14849
- auth: "admin"
14850
- }),
14851
- unsubscribe: method(UnsubscribeInputSchema, _void(), {
14852
- kind: "mutation",
14853
- auth: "admin"
14854
- }),
14855
- /** Read the broker's cached state for a key. Returns `null` when
14856
- * unknown to the broker (never published / unknown entity). */
14857
- getState: method(GetStateInputSchema, unknown().nullable()),
14858
- /** Status method — explicit registration with a `z.void()` input so
14859
- * the codegen-generated tRPC router types its input as
14860
- * `{addonId?: string, nodeId?: string}` (system-scoped collection
14861
- * shape) instead of the device-scoped `{deviceId}` fallback. */
14862
- getStatus: method(_void(), RegistryStatusSchema)
14863
- }
14864
- };
14829
+ method(ListInputSchema, array(BrokerInfoSchema$1)), method(GetInputSchema, BrokerInfoSchema$1.nullable()), method(_void(), array(BrokerProviderInfoSchema), { auth: "admin" }), method(AddInputSchema, AddResultSchema, {
14830
+ kind: "mutation",
14831
+ auth: "admin"
14832
+ }), method(RemoveInputSchema, _void(), {
14833
+ kind: "mutation",
14834
+ auth: "admin"
14835
+ }), method(GetInputSchema, TestConnectionResultSchema, {
14836
+ kind: "mutation",
14837
+ auth: "admin"
14838
+ }), method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }), method(object({
14839
+ id: string(),
14840
+ settings: SettingsRecordSchema$1
14841
+ }), _void(), {
14842
+ kind: "mutation",
14843
+ auth: "admin"
14844
+ }), method(GetInputSchema, SettingsRecordSchema$1.nullable(), { auth: "admin" }), method(SettingsSchemaInputSchema, SettingsSchemaResultSchema, { auth: "admin" }), method(TestSettingsInputSchema, TestSettingsResultSchema, {
14845
+ kind: "mutation",
14846
+ auth: "admin"
14847
+ }), method(PublishInputSchema, unknown(), {
14848
+ kind: "mutation",
14849
+ auth: "admin"
14850
+ }), method(SubscribeInputSchema, SubscribeResultSchema, {
14851
+ kind: "mutation",
14852
+ auth: "admin"
14853
+ }), method(UnsubscribeInputSchema, _void(), {
14854
+ kind: "mutation",
14855
+ auth: "admin"
14856
+ }), method(GetStateInputSchema, unknown().nullable()), method(_void(), RegistryStatusSchema);
14865
14857
  DeviceType.Camera;
14866
14858
  /**
14867
14859
  * `custom-model-registry` — collection cap exposing operator-registered
@@ -15097,36 +15089,19 @@ var ResyncResultSchema = object({
15097
15089
  * provider re-derived the device. 0/absent for a normal incremental re-sync. */
15098
15090
  removedChildren: number().int().nonnegative().optional()
15099
15091
  });
15100
- var deviceAdoptionCapability = {
15101
- name: "device-adoption",
15102
- scope: "system",
15103
- mode: "singleton",
15104
- status: {
15105
- schema: AdoptionStatusSchema,
15106
- kind: "poll"
15107
- },
15108
- methods: {
15109
- listCandidateFilters: method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }),
15110
- listCandidates: method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }),
15111
- getCandidate: method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }),
15112
- refresh: method(object({ integrationId: string() }), AdoptionStatusSchema, {
15113
- kind: "mutation",
15114
- auth: "admin"
15115
- }),
15116
- adopt: method(AdoptInputSchema, AdoptResultSchema, {
15117
- kind: "mutation",
15118
- auth: "admin"
15119
- }),
15120
- release: method(ReleaseInputSchema, _void(), {
15121
- kind: "mutation",
15122
- auth: "admin"
15123
- }),
15124
- resync: method(ResyncInputSchema, ResyncResultSchema, {
15125
- kind: "mutation",
15126
- auth: "admin"
15127
- })
15128
- }
15129
- };
15092
+ method(object({ integrationId: string() }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema, ListCandidatesOutputSchema, { auth: "admin" }), method(GetCandidateInputSchema, DiscoveredChildDeviceSchema.nullable(), { auth: "admin" }), method(object({ integrationId: string() }), AdoptionStatusSchema, {
15093
+ kind: "mutation",
15094
+ auth: "admin"
15095
+ }), method(AdoptInputSchema, AdoptResultSchema, {
15096
+ kind: "mutation",
15097
+ auth: "admin"
15098
+ }), method(ReleaseInputSchema, _void(), {
15099
+ kind: "mutation",
15100
+ auth: "admin"
15101
+ }), method(ResyncInputSchema, ResyncResultSchema, {
15102
+ kind: "mutation",
15103
+ auth: "admin"
15104
+ });
15130
15105
  /**
15131
15106
  * `device-export` — collection cap for addons that export camstack
15132
15107
  * devices to external ecosystems (HomeAssistant via MQTT discovery,
@@ -15649,7 +15624,10 @@ method(object({
15649
15624
  }), FieldProbeResultSchema, {
15650
15625
  kind: "mutation",
15651
15626
  auth: "admin"
15652
- }), method(ListCandidatesInputSchema.extend({ addonId: string() }), ListCandidatesOutputSchema, { auth: "admin" }), method(object({
15627
+ }), method(object({
15628
+ addonId: string(),
15629
+ integrationId: string()
15630
+ }), object({ filters: array(AdoptionFilterSchema) }), { auth: "admin" }), method(ListCandidatesInputSchema.extend({ addonId: string() }), ListCandidatesOutputSchema, { auth: "admin" }), method(object({
15653
15631
  addonId: string(),
15654
15632
  integrationId: string()
15655
15633
  }), AdoptionStatusSchema, {
@@ -15664,7 +15642,24 @@ method(object({
15664
15642
  }), method(ResyncInputSchema, ResyncResultSchema, {
15665
15643
  kind: "mutation",
15666
15644
  auth: "admin"
15645
+ }), method(object({}), object({ providers: array(object({
15646
+ addonId: string(),
15647
+ label: string()
15648
+ })).readonly() }), { auth: "admin" }), method(object({}), object({ groups: array(object({
15649
+ addonId: string(),
15650
+ label: string(),
15651
+ candidates: array(DiscoveryCandidateSchema).readonly(),
15652
+ error: string().nullable()
15653
+ })).readonly() }), {
15654
+ kind: "mutation",
15655
+ auth: "admin"
15667
15656
  }), method(object({
15657
+ addonId: string(),
15658
+ params: record(string(), unknown()).optional()
15659
+ }), object({ candidates: array(DiscoveryCandidateSchema).readonly() }), {
15660
+ kind: "mutation",
15661
+ auth: "admin"
15662
+ }), method(object({ addonId: string() }), object({ deviceType: _enum(DeviceType).nullable() }), { auth: "admin" }), method(object({ addonId: string() }), unknown(), { auth: "admin" }), method(object({
15668
15663
  deviceId: number(),
15669
15664
  key: string(),
15670
15665
  value: unknown()
@@ -18316,6 +18311,17 @@ var AvailableIntegrationTypeSchema = object({
18316
18311
  iconUrl: string().nullable(),
18317
18312
  color: string(),
18318
18313
  instanceMode: string(),
18314
+ /**
18315
+ * Integration wizard `mode` (LOCKED MODEL): `standalone` (create
18316
+ * immediately then add devices, no config step/button), `account` (config
18317
+ * step), or `broker` (broker step). Derived server-side by
18318
+ * `getAvailableTypes` when the addon manifest omits an explicit `mode`.
18319
+ */
18320
+ mode: _enum([
18321
+ "standalone",
18322
+ "account",
18323
+ "broker"
18324
+ ]),
18319
18325
  discoveryMode: string(),
18320
18326
  /**
18321
18327
  * Which integration-marker cap the addon declared, so the wizard can
@@ -20776,6 +20782,12 @@ Object.freeze({
20776
20782
  addonId: null,
20777
20783
  access: "create"
20778
20784
  },
20785
+ "deviceManager.adoptionListCandidateFilters": {
20786
+ capName: "device-manager",
20787
+ capScope: "system",
20788
+ addonId: null,
20789
+ access: "view"
20790
+ },
20779
20791
  "deviceManager.adoptionListCandidates": {
20780
20792
  capName: "device-manager",
20781
20793
  capScope: "system",
@@ -20824,12 +20836,30 @@ Object.freeze({
20824
20836
  addonId: null,
20825
20837
  access: "create"
20826
20838
  },
20839
+ "deviceManager.discoverAllProviders": {
20840
+ capName: "device-manager",
20841
+ capScope: "system",
20842
+ addonId: null,
20843
+ access: "create"
20844
+ },
20827
20845
  "deviceManager.discoverDevices": {
20828
20846
  capName: "device-manager",
20829
20847
  capScope: "system",
20830
20848
  addonId: null,
20831
20849
  access: "create"
20832
20850
  },
20851
+ "deviceManager.discoverProvider": {
20852
+ capName: "device-manager",
20853
+ capScope: "system",
20854
+ addonId: null,
20855
+ access: "create"
20856
+ },
20857
+ "deviceManager.discoveryProviders": {
20858
+ capName: "device-manager",
20859
+ capScope: "system",
20860
+ addonId: null,
20861
+ access: "view"
20862
+ },
20833
20863
  "deviceManager.enable": {
20834
20864
  capName: "device-manager",
20835
20865
  capScope: "system",
@@ -20980,6 +21010,18 @@ Object.freeze({
20980
21010
  addonId: null,
20981
21011
  access: "create"
20982
21012
  },
21013
+ "deviceManager.providerCreationType": {
21014
+ capName: "device-manager",
21015
+ capScope: "system",
21016
+ addonId: null,
21017
+ access: "view"
21018
+ },
21019
+ "deviceManager.providerDiscoveryParamsSchema": {
21020
+ capName: "device-manager",
21021
+ capScope: "system",
21022
+ addonId: null,
21023
+ access: "view"
21024
+ },
20983
21025
  "deviceManager.registerDevice": {
20984
21026
  capName: "device-manager",
20985
21027
  capScope: "system",
@@ -21196,6 +21238,18 @@ Object.freeze({
21196
21238
  addonId: null,
21197
21239
  access: "view"
21198
21240
  },
21241
+ "deviceProvider.getDiscoveryParamsSchema": {
21242
+ capName: "device-provider",
21243
+ capScope: "system",
21244
+ addonId: null,
21245
+ access: "view"
21246
+ },
21247
+ "deviceProvider.getManualCreationType": {
21248
+ capName: "device-provider",
21249
+ capScope: "system",
21250
+ addonId: null,
21251
+ access: "view"
21252
+ },
21199
21253
  "deviceProvider.getStatus": {
21200
21254
  capName: "device-provider",
21201
21255
  capScope: "system",
@@ -24034,7 +24088,7 @@ object({
24034
24088
  schemaVersion: literal(1)
24035
24089
  });
24036
24090
  //#endregion
24037
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/symbols.js
24091
+ //#region node_modules/undici/lib/core/symbols.js
24038
24092
  var require_symbols$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24039
24093
  module.exports = {
24040
24094
  kClose: Symbol("close"),
@@ -24105,7 +24159,7 @@ var require_symbols$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24105
24159
  };
24106
24160
  }));
24107
24161
  //#endregion
24108
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/errors.js
24162
+ //#region node_modules/undici/lib/core/errors.js
24109
24163
  var require_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24110
24164
  var kUndiciError = Symbol.for("undici.error.UND_ERR");
24111
24165
  var UndiciError = class extends Error {
@@ -24463,7 +24517,7 @@ var require_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24463
24517
  };
24464
24518
  }));
24465
24519
  //#endregion
24466
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/constants.js
24520
+ //#region node_modules/undici/lib/core/constants.js
24467
24521
  var require_constants$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24468
24522
  /** @type {Record<string, string | undefined>} */
24469
24523
  var headerNameLowerCasedRecord = {};
@@ -24576,7 +24630,7 @@ var require_constants$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24576
24630
  };
24577
24631
  }));
24578
24632
  //#endregion
24579
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/tree.js
24633
+ //#region node_modules/undici/lib/core/tree.js
24580
24634
  var require_tree = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24581
24635
  var { wellknownHeaderNames, headerNameLowerCasedRecord } = require_constants$4();
24582
24636
  var TstNode = class TstNode {
@@ -24686,7 +24740,7 @@ var require_tree = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24686
24740
  };
24687
24741
  }));
24688
24742
  //#endregion
24689
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/util.js
24743
+ //#region node_modules/undici/lib/core/util.js
24690
24744
  var require_util$7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
24691
24745
  var assert$26 = require("node:assert");
24692
24746
  var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols$4();
@@ -25140,7 +25194,7 @@ var require_util$7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25140
25194
  };
25141
25195
  }));
25142
25196
  //#endregion
25143
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/diagnostics.js
25197
+ //#region node_modules/undici/lib/core/diagnostics.js
25144
25198
  var require_diagnostics = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25145
25199
  var diagnosticsChannel = require("node:diagnostics_channel");
25146
25200
  var util$2 = require("node:util");
@@ -25237,7 +25291,7 @@ var require_diagnostics = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25237
25291
  module.exports = { channels };
25238
25292
  }));
25239
25293
  //#endregion
25240
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/request.js
25294
+ //#region node_modules/undici/lib/core/request.js
25241
25295
  var require_request$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25242
25296
  var { InvalidArgumentError, NotSupportedError } = require_errors();
25243
25297
  var assert$25 = require("node:assert");
@@ -25456,7 +25510,7 @@ var require_request$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25456
25510
  module.exports = Request;
25457
25511
  }));
25458
25512
  //#endregion
25459
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/dispatcher.js
25513
+ //#region node_modules/undici/lib/dispatcher/dispatcher.js
25460
25514
  var require_dispatcher = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25461
25515
  var EventEmitter$1 = require("node:events");
25462
25516
  var Dispatcher = class extends EventEmitter$1 {
@@ -25502,7 +25556,7 @@ var require_dispatcher = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25502
25556
  module.exports = Dispatcher;
25503
25557
  }));
25504
25558
  //#endregion
25505
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/dispatcher-base.js
25559
+ //#region node_modules/undici/lib/dispatcher/dispatcher-base.js
25506
25560
  var require_dispatcher_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25507
25561
  var Dispatcher = require_dispatcher();
25508
25562
  var { ClientDestroyedError, ClientClosedError, InvalidArgumentError } = require_errors();
@@ -25624,7 +25678,7 @@ var require_dispatcher_base = /* @__PURE__ */ __commonJSMin(((exports, module) =
25624
25678
  module.exports = DispatcherBase;
25625
25679
  }));
25626
25680
  //#endregion
25627
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/util/timers.js
25681
+ //#region node_modules/undici/lib/util/timers.js
25628
25682
  var require_timers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25629
25683
  /**
25630
25684
  * This module offers an optimized timer implementation designed for scenarios
@@ -25962,7 +26016,7 @@ var require_timers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25962
26016
  };
25963
26017
  }));
25964
26018
  //#endregion
25965
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/core/connect.js
26019
+ //#region node_modules/undici/lib/core/connect.js
25966
26020
  var require_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
25967
26021
  var net$1 = require("node:net");
25968
26022
  var assert$24 = require("node:assert");
@@ -26132,7 +26186,7 @@ var require_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26132
26186
  module.exports = buildConnector;
26133
26187
  }));
26134
26188
  //#endregion
26135
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/llhttp/utils.js
26189
+ //#region node_modules/undici/lib/llhttp/utils.js
26136
26190
  var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
26137
26191
  Object.defineProperty(exports, "__esModule", { value: true });
26138
26192
  exports.enumToMap = void 0;
@@ -26147,7 +26201,7 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
26147
26201
  exports.enumToMap = enumToMap;
26148
26202
  }));
26149
26203
  //#endregion
26150
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/llhttp/constants.js
26204
+ //#region node_modules/undici/lib/llhttp/constants.js
26151
26205
  var require_constants$3 = /* @__PURE__ */ __commonJSMin(((exports) => {
26152
26206
  Object.defineProperty(exports, "__esModule", { value: true });
26153
26207
  exports.SPECIAL_HEADERS = exports.HEADER_STATE = exports.MINOR = exports.MAJOR = exports.CONNECTION_TOKEN_CHARS = exports.HEADER_CHARS = exports.TOKEN = exports.STRICT_TOKEN = exports.HEX = exports.URL_CHAR = exports.STRICT_URL_CHAR = exports.USERINFO_CHARS = exports.MARK = exports.ALPHANUM = exports.NUM = exports.HEX_MAP = exports.NUM_MAP = exports.ALPHA = exports.FINISH = exports.H_METHOD_MAP = exports.METHOD_MAP = exports.METHODS_RTSP = exports.METHODS_ICE = exports.METHODS_HTTP = exports.METHODS = exports.LENIENT_FLAGS = exports.FLAGS = exports.TYPE = exports.ERROR = void 0;
@@ -26480,19 +26534,19 @@ var require_constants$3 = /* @__PURE__ */ __commonJSMin(((exports) => {
26480
26534
  };
26481
26535
  }));
26482
26536
  //#endregion
26483
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/llhttp/llhttp-wasm.js
26537
+ //#region node_modules/undici/lib/llhttp/llhttp-wasm.js
26484
26538
  var require_llhttp_wasm = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26485
26539
  var { Buffer: Buffer$2 } = require("node:buffer");
26486
26540
  module.exports = Buffer$2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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iQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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CABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64");
26487
26541
  }));
26488
26542
  //#endregion
26489
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
26543
+ //#region node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
26490
26544
  var require_llhttp_simd_wasm = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26491
26545
  var { Buffer: Buffer$1 } = require("node:buffer");
26492
26546
  module.exports = Buffer$1.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVu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PgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEV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JSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxB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AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB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AAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64");
26493
26547
  }));
26494
26548
  //#endregion
26495
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/constants.js
26549
+ //#region node_modules/undici/lib/web/fetch/constants.js
26496
26550
  var require_constants$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26497
26551
  var corsSafeListedMethods = [
26498
26552
  "GET",
@@ -26710,7 +26764,7 @@ var require_constants$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26710
26764
  };
26711
26765
  }));
26712
26766
  //#endregion
26713
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/global.js
26767
+ //#region node_modules/undici/lib/web/fetch/global.js
26714
26768
  var require_global$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26715
26769
  var globalOrigin = Symbol.for("undici.globalOrigin.1");
26716
26770
  function getGlobalOrigin() {
@@ -26741,7 +26795,7 @@ var require_global$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26741
26795
  };
26742
26796
  }));
26743
26797
  //#endregion
26744
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/data-url.js
26798
+ //#region node_modules/undici/lib/web/fetch/data-url.js
26745
26799
  var require_data_url = /* @__PURE__ */ __commonJSMin(((exports, module) => {
26746
26800
  var assert$23 = require("node:assert");
26747
26801
  var encoder = new TextEncoder();
@@ -27076,7 +27130,7 @@ var require_data_url = /* @__PURE__ */ __commonJSMin(((exports, module) => {
27076
27130
  };
27077
27131
  }));
27078
27132
  //#endregion
27079
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/webidl.js
27133
+ //#region node_modules/undici/lib/web/fetch/webidl.js
27080
27134
  var require_webidl = /* @__PURE__ */ __commonJSMin(((exports, module) => {
27081
27135
  var { types: types$3, inspect } = require("node:util");
27082
27136
  var { markAsUncloneable } = require("node:worker_threads");
@@ -27392,7 +27446,7 @@ var require_webidl = /* @__PURE__ */ __commonJSMin(((exports, module) => {
27392
27446
  module.exports = { webidl };
27393
27447
  }));
27394
27448
  //#endregion
27395
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/util.js
27449
+ //#region node_modules/undici/lib/web/fetch/util.js
27396
27450
  var require_util$6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
27397
27451
  var { Transform: Transform$2 } = require("node:stream");
27398
27452
  var zlib$1 = require("node:zlib");
@@ -28205,7 +28259,7 @@ var require_util$6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28205
28259
  };
28206
28260
  }));
28207
28261
  //#endregion
28208
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/symbols.js
28262
+ //#region node_modules/undici/lib/web/fetch/symbols.js
28209
28263
  var require_symbols$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28210
28264
  module.exports = {
28211
28265
  kUrl: Symbol("url"),
@@ -28216,7 +28270,7 @@ var require_symbols$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28216
28270
  };
28217
28271
  }));
28218
28272
  //#endregion
28219
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/file.js
28273
+ //#region node_modules/undici/lib/web/fetch/file.js
28220
28274
  var require_file = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28221
28275
  var { Blob: Blob$2, File: File$1 } = require("node:buffer");
28222
28276
  var { kState } = require_symbols$3();
@@ -28279,7 +28333,7 @@ var require_file = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28279
28333
  };
28280
28334
  }));
28281
28335
  //#endregion
28282
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/formdata.js
28336
+ //#region node_modules/undici/lib/web/fetch/formdata.js
28283
28337
  var require_formdata = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28284
28338
  var { isBlobLike, iteratorMixin } = require_util$6();
28285
28339
  var { kState } = require_symbols$3();
@@ -28414,7 +28468,7 @@ var require_formdata = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28414
28468
  };
28415
28469
  }));
28416
28470
  //#endregion
28417
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/formdata-parser.js
28471
+ //#region node_modules/undici/lib/web/fetch/formdata-parser.js
28418
28472
  var require_formdata_parser = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28419
28473
  var { isUSVString, bufferToLowerCasedHeaderName } = require_util$7();
28420
28474
  var { utf8DecodeBytes } = require_util$6();
@@ -28613,7 +28667,7 @@ var require_formdata_parser = /* @__PURE__ */ __commonJSMin(((exports, module) =
28613
28667
  };
28614
28668
  }));
28615
28669
  //#endregion
28616
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/body.js
28670
+ //#region node_modules/undici/lib/web/fetch/body.js
28617
28671
  var require_body = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28618
28672
  var util = require_util$7();
28619
28673
  var { ReadableStreamFrom, isBlobLike, isReadableStreamLike, readableStreamClose, createDeferredPromise, fullyReadBody, extractMimeType, utf8DecodeBytes } = require_util$6();
@@ -28870,7 +28924,7 @@ Content-Type: ${value.type || "application/octet-stream"}\r\n\r\n`);
28870
28924
  };
28871
28925
  }));
28872
28926
  //#endregion
28873
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/client-h1.js
28927
+ //#region node_modules/undici/lib/dispatcher/client-h1.js
28874
28928
  var require_client_h1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
28875
28929
  var assert$19 = require("node:assert");
28876
28930
  var util = require_util$7();
@@ -29726,7 +29780,7 @@ var require_client_h1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
29726
29780
  module.exports = connectH1;
29727
29781
  }));
29728
29782
  //#endregion
29729
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/client-h2.js
29783
+ //#region node_modules/undici/lib/dispatcher/client-h2.js
29730
29784
  var require_client_h2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
29731
29785
  var assert$18 = require("node:assert");
29732
29786
  var { pipeline: pipeline$2 } = require("node:stream");
@@ -30112,7 +30166,7 @@ var require_client_h2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30112
30166
  module.exports = connectH2;
30113
30167
  }));
30114
30168
  //#endregion
30115
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/handler/redirect-handler.js
30169
+ //#region node_modules/undici/lib/handler/redirect-handler.js
30116
30170
  var require_redirect_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30117
30171
  var util = require_util$7();
30118
30172
  var { kBodyUsed } = require_symbols$4();
@@ -30238,7 +30292,7 @@ var require_redirect_handler = /* @__PURE__ */ __commonJSMin(((exports, module)
30238
30292
  module.exports = RedirectHandler;
30239
30293
  }));
30240
30294
  //#endregion
30241
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/redirect-interceptor.js
30295
+ //#region node_modules/undici/lib/interceptor/redirect-interceptor.js
30242
30296
  var require_redirect_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30243
30297
  var RedirectHandler = require_redirect_handler();
30244
30298
  function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) {
@@ -30258,7 +30312,7 @@ var require_redirect_interceptor = /* @__PURE__ */ __commonJSMin(((exports, modu
30258
30312
  module.exports = createRedirectInterceptor;
30259
30313
  }));
30260
30314
  //#endregion
30261
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/client.js
30315
+ //#region node_modules/undici/lib/dispatcher/client.js
30262
30316
  var require_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30263
30317
  var assert$16 = require("node:assert");
30264
30318
  var net = require("node:net");
@@ -30593,7 +30647,7 @@ var require_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30593
30647
  module.exports = Client;
30594
30648
  }));
30595
30649
  //#endregion
30596
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/fixed-queue.js
30650
+ //#region node_modules/undici/lib/dispatcher/fixed-queue.js
30597
30651
  var require_fixed_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30598
30652
  var kSize = 2048;
30599
30653
  var kMask = kSize - 1;
@@ -30642,7 +30696,7 @@ var require_fixed_queue = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30642
30696
  };
30643
30697
  }));
30644
30698
  //#endregion
30645
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/pool-stats.js
30699
+ //#region node_modules/undici/lib/dispatcher/pool-stats.js
30646
30700
  var require_pool_stats = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30647
30701
  var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols$4();
30648
30702
  var kPool = Symbol("pool");
@@ -30672,7 +30726,7 @@ var require_pool_stats = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30672
30726
  module.exports = PoolStats;
30673
30727
  }));
30674
30728
  //#endregion
30675
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/pool-base.js
30729
+ //#region node_modules/undici/lib/dispatcher/pool-base.js
30676
30730
  var require_pool_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30677
30731
  var DispatcherBase = require_dispatcher_base();
30678
30732
  var FixedQueue = require_fixed_queue();
@@ -30806,7 +30860,7 @@ var require_pool_base = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30806
30860
  };
30807
30861
  }));
30808
30862
  //#endregion
30809
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/pool.js
30863
+ //#region node_modules/undici/lib/dispatcher/pool.js
30810
30864
  var require_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30811
30865
  var { PoolBase, kClients, kNeedDrain, kAddClient, kGetDispatcher } = require_pool_base();
30812
30866
  var Client = require_client();
@@ -30867,7 +30921,7 @@ var require_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30867
30921
  module.exports = Pool;
30868
30922
  }));
30869
30923
  //#endregion
30870
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/balanced-pool.js
30924
+ //#region node_modules/undici/lib/dispatcher/balanced-pool.js
30871
30925
  var require_balanced_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30872
30926
  var { BalancedPoolMissingUpstreamError, InvalidArgumentError } = require_errors();
30873
30927
  var { PoolBase, kClients, kNeedDrain, kAddClient, kRemoveClient, kGetDispatcher } = require_pool_base();
@@ -30978,7 +31032,7 @@ var require_balanced_pool = /* @__PURE__ */ __commonJSMin(((exports, module) =>
30978
31032
  module.exports = BalancedPool;
30979
31033
  }));
30980
31034
  //#endregion
30981
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/agent.js
31035
+ //#region node_modules/undici/lib/dispatcher/agent.js
30982
31036
  var require_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
30983
31037
  var { InvalidArgumentError } = require_errors();
30984
31038
  var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols$4();
@@ -31058,7 +31112,7 @@ var require_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31058
31112
  module.exports = Agent;
31059
31113
  }));
31060
31114
  //#endregion
31061
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/proxy-agent.js
31115
+ //#region node_modules/undici/lib/dispatcher/proxy-agent.js
31062
31116
  var require_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31063
31117
  var { kProxy, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols$4();
31064
31118
  var { URL: URL$1 } = require("node:url");
@@ -31256,7 +31310,7 @@ var require_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31256
31310
  module.exports = ProxyAgent;
31257
31311
  }));
31258
31312
  //#endregion
31259
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js
31313
+ //#region node_modules/undici/lib/dispatcher/env-http-proxy-agent.js
31260
31314
  var require_env_http_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31261
31315
  var DispatcherBase = require_dispatcher_base();
31262
31316
  var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols$4();
@@ -31356,7 +31410,7 @@ var require_env_http_proxy_agent = /* @__PURE__ */ __commonJSMin(((exports, modu
31356
31410
  module.exports = EnvHttpProxyAgent;
31357
31411
  }));
31358
31412
  //#endregion
31359
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/handler/retry-handler.js
31413
+ //#region node_modules/undici/lib/handler/retry-handler.js
31360
31414
  var require_retry_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31361
31415
  var assert$15 = require("node:assert");
31362
31416
  var { kRetryHandlerDefaultRetry } = require_symbols$4();
@@ -31578,7 +31632,7 @@ var require_retry_handler = /* @__PURE__ */ __commonJSMin(((exports, module) =>
31578
31632
  };
31579
31633
  }));
31580
31634
  //#endregion
31581
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/dispatcher/retry-agent.js
31635
+ //#region node_modules/undici/lib/dispatcher/retry-agent.js
31582
31636
  var require_retry_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31583
31637
  var Dispatcher = require_dispatcher();
31584
31638
  var RetryHandler = require_retry_handler();
@@ -31610,7 +31664,7 @@ var require_retry_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31610
31664
  module.exports = RetryAgent;
31611
31665
  }));
31612
31666
  //#endregion
31613
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/readable.js
31667
+ //#region node_modules/undici/lib/api/readable.js
31614
31668
  var require_readable = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31615
31669
  var assert$14 = require("node:assert");
31616
31670
  var { Readable: Readable$2 } = require("node:stream");
@@ -31838,7 +31892,7 @@ var require_readable = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31838
31892
  };
31839
31893
  }));
31840
31894
  //#endregion
31841
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/util.js
31895
+ //#region node_modules/undici/lib/api/util.js
31842
31896
  var require_util$5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31843
31897
  var assert$13 = require("node:assert");
31844
31898
  var { ResponseStatusCodeError } = require_errors();
@@ -31891,7 +31945,7 @@ var require_util$5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31891
31945
  };
31892
31946
  }));
31893
31947
  //#endregion
31894
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-request.js
31948
+ //#region node_modules/undici/lib/api/api-request.js
31895
31949
  var require_api_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
31896
31950
  var assert$12 = require("node:assert");
31897
31951
  var { Readable } = require_readable();
@@ -32043,7 +32097,7 @@ var require_api_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32043
32097
  module.exports.RequestHandler = RequestHandler;
32044
32098
  }));
32045
32099
  //#endregion
32046
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/abort-signal.js
32100
+ //#region node_modules/undici/lib/api/abort-signal.js
32047
32101
  var require_abort_signal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32048
32102
  var { addAbortListener } = require_util$7();
32049
32103
  var { RequestAbortedError } = require_errors();
@@ -32082,7 +32136,7 @@ var require_abort_signal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32082
32136
  };
32083
32137
  }));
32084
32138
  //#endregion
32085
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-stream.js
32139
+ //#region node_modules/undici/lib/api/api-stream.js
32086
32140
  var require_api_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32087
32141
  var assert$11 = require("node:assert");
32088
32142
  var { finished: finished$1, PassThrough: PassThrough$1 } = require("node:stream");
@@ -32227,7 +32281,7 @@ var require_api_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32227
32281
  module.exports = stream;
32228
32282
  }));
32229
32283
  //#endregion
32230
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-pipeline.js
32284
+ //#region node_modules/undici/lib/api/api-pipeline.js
32231
32285
  var require_api_pipeline = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32232
32286
  var { Readable: Readable$1, Duplex, PassThrough } = require("node:stream");
32233
32287
  var { InvalidArgumentError, InvalidReturnValueError, RequestAbortedError } = require_errors();
@@ -32395,7 +32449,7 @@ var require_api_pipeline = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32395
32449
  module.exports = pipeline;
32396
32450
  }));
32397
32451
  //#endregion
32398
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-upgrade.js
32452
+ //#region node_modules/undici/lib/api/api-upgrade.js
32399
32453
  var require_api_upgrade = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32400
32454
  var { InvalidArgumentError, SocketError } = require_errors();
32401
32455
  var { AsyncResource: AsyncResource$1 } = require("node:async_hooks");
@@ -32474,7 +32528,7 @@ var require_api_upgrade = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32474
32528
  module.exports = upgrade;
32475
32529
  }));
32476
32530
  //#endregion
32477
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/api-connect.js
32531
+ //#region node_modules/undici/lib/api/api-connect.js
32478
32532
  var require_api_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32479
32533
  var assert$8 = require("node:assert");
32480
32534
  var { AsyncResource } = require("node:async_hooks");
@@ -32552,7 +32606,7 @@ var require_api_connect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32552
32606
  module.exports = connect;
32553
32607
  }));
32554
32608
  //#endregion
32555
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/api/index.js
32609
+ //#region node_modules/undici/lib/api/index.js
32556
32610
  var require_api = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32557
32611
  module.exports.request = require_api_request();
32558
32612
  module.exports.stream = require_api_stream();
@@ -32561,7 +32615,7 @@ var require_api = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32561
32615
  module.exports.connect = require_api_connect();
32562
32616
  }));
32563
32617
  //#endregion
32564
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-errors.js
32618
+ //#region node_modules/undici/lib/mock/mock-errors.js
32565
32619
  var require_mock_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32566
32620
  var { UndiciError } = require_errors();
32567
32621
  var kMockNotMatchedError = Symbol.for("undici.error.UND_MOCK_ERR_MOCK_NOT_MATCHED");
@@ -32580,7 +32634,7 @@ var require_mock_errors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32580
32634
  } };
32581
32635
  }));
32582
32636
  //#endregion
32583
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-symbols.js
32637
+ //#region node_modules/undici/lib/mock/mock-symbols.js
32584
32638
  var require_mock_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32585
32639
  module.exports = {
32586
32640
  kAgent: Symbol("agent"),
@@ -32605,7 +32659,7 @@ var require_mock_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32605
32659
  };
32606
32660
  }));
32607
32661
  //#endregion
32608
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-utils.js
32662
+ //#region node_modules/undici/lib/mock/mock-utils.js
32609
32663
  var require_mock_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32610
32664
  var { MockNotMatchedError } = require_mock_errors();
32611
32665
  var { kDispatches, kMockAgent, kOriginalDispatch, kOrigin, kGetNetConnect } = require_mock_symbols();
@@ -32842,7 +32896,7 @@ var require_mock_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32842
32896
  };
32843
32897
  }));
32844
32898
  //#endregion
32845
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-interceptor.js
32899
+ //#region node_modules/undici/lib/mock/mock-interceptor.js
32846
32900
  var require_mock_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32847
32901
  var { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
32848
32902
  var { kDispatches, kDispatchKey, kDefaultHeaders, kDefaultTrailers, kContentLength, kMockDispatch } = require_mock_symbols();
@@ -32982,7 +33036,7 @@ var require_mock_interceptor = /* @__PURE__ */ __commonJSMin(((exports, module)
32982
33036
  module.exports.MockScope = MockScope;
32983
33037
  }));
32984
33038
  //#endregion
32985
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-client.js
33039
+ //#region node_modules/undici/lib/mock/mock-client.js
32986
33040
  var require_mock_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
32987
33041
  var { promisify: promisify$1 } = require("node:util");
32988
33042
  var Client = require_client();
@@ -33025,7 +33079,7 @@ var require_mock_client = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33025
33079
  module.exports = MockClient;
33026
33080
  }));
33027
33081
  //#endregion
33028
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-pool.js
33082
+ //#region node_modules/undici/lib/mock/mock-pool.js
33029
33083
  var require_mock_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33030
33084
  var { promisify } = require("node:util");
33031
33085
  var Pool = require_pool();
@@ -33068,7 +33122,7 @@ var require_mock_pool = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33068
33122
  module.exports = MockPool;
33069
33123
  }));
33070
33124
  //#endregion
33071
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/pluralizer.js
33125
+ //#region node_modules/undici/lib/mock/pluralizer.js
33072
33126
  var require_pluralizer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33073
33127
  var singulars = {
33074
33128
  pronoun: "it",
@@ -33100,7 +33154,7 @@ var require_pluralizer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33100
33154
  };
33101
33155
  }));
33102
33156
  //#endregion
33103
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/pending-interceptors-formatter.js
33157
+ //#region node_modules/undici/lib/mock/pending-interceptors-formatter.js
33104
33158
  var require_pending_interceptors_formatter = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33105
33159
  var { Transform: Transform$1 } = require("node:stream");
33106
33160
  var { Console } = require("node:console");
@@ -33135,7 +33189,7 @@ var require_pending_interceptors_formatter = /* @__PURE__ */ __commonJSMin(((exp
33135
33189
  };
33136
33190
  }));
33137
33191
  //#endregion
33138
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/mock/mock-agent.js
33192
+ //#region node_modules/undici/lib/mock/mock-agent.js
33139
33193
  var require_mock_agent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33140
33194
  var { kClients } = require_symbols$4();
33141
33195
  var Agent = require_agent();
@@ -33238,7 +33292,7 @@ ${pendingInterceptorsFormatter.format(pending)}
33238
33292
  module.exports = MockAgent;
33239
33293
  }));
33240
33294
  //#endregion
33241
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/global.js
33295
+ //#region node_modules/undici/lib/global.js
33242
33296
  var require_global = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33243
33297
  var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
33244
33298
  var { InvalidArgumentError } = require_errors();
@@ -33262,7 +33316,7 @@ var require_global = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33262
33316
  };
33263
33317
  }));
33264
33318
  //#endregion
33265
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/handler/decorator-handler.js
33319
+ //#region node_modules/undici/lib/handler/decorator-handler.js
33266
33320
  var require_decorator_handler = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33267
33321
  module.exports = class DecoratorHandler {
33268
33322
  #handler;
@@ -33297,7 +33351,7 @@ var require_decorator_handler = /* @__PURE__ */ __commonJSMin(((exports, module)
33297
33351
  };
33298
33352
  }));
33299
33353
  //#endregion
33300
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/redirect.js
33354
+ //#region node_modules/undici/lib/interceptor/redirect.js
33301
33355
  var require_redirect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33302
33356
  var RedirectHandler = require_redirect_handler();
33303
33357
  module.exports = (opts) => {
@@ -33312,7 +33366,7 @@ var require_redirect = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33312
33366
  };
33313
33367
  }));
33314
33368
  //#endregion
33315
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/retry.js
33369
+ //#region node_modules/undici/lib/interceptor/retry.js
33316
33370
  var require_retry = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33317
33371
  var RetryHandler = require_retry_handler();
33318
33372
  module.exports = (globalOpts) => {
@@ -33333,7 +33387,7 @@ var require_retry = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33333
33387
  };
33334
33388
  }));
33335
33389
  //#endregion
33336
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/dump.js
33390
+ //#region node_modules/undici/lib/interceptor/dump.js
33337
33391
  var require_dump = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33338
33392
  var util = require_util$7();
33339
33393
  var { InvalidArgumentError, RequestAbortedError } = require_errors();
@@ -33400,7 +33454,7 @@ var require_dump = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33400
33454
  module.exports = createDumpInterceptor;
33401
33455
  }));
33402
33456
  //#endregion
33403
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/interceptor/dns.js
33457
+ //#region node_modules/undici/lib/interceptor/dns.js
33404
33458
  var require_dns = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33405
33459
  var { isIP } = require("node:net");
33406
33460
  var { lookup } = require("node:dns");
@@ -33613,7 +33667,7 @@ var require_dns = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33613
33667
  };
33614
33668
  }));
33615
33669
  //#endregion
33616
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/headers.js
33670
+ //#region node_modules/undici/lib/web/fetch/headers.js
33617
33671
  var require_headers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33618
33672
  var { kConstruct } = require_symbols$4();
33619
33673
  var { kEnumerableProperty } = require_util$7();
@@ -33978,7 +34032,7 @@ var require_headers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33978
34032
  };
33979
34033
  }));
33980
34034
  //#endregion
33981
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/response.js
34035
+ //#region node_modules/undici/lib/web/fetch/response.js
33982
34036
  var require_response = /* @__PURE__ */ __commonJSMin(((exports, module) => {
33983
34037
  var { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers();
33984
34038
  var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body();
@@ -34291,7 +34345,7 @@ var require_response = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34291
34345
  };
34292
34346
  }));
34293
34347
  //#endregion
34294
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/dispatcher-weakref.js
34348
+ //#region node_modules/undici/lib/web/fetch/dispatcher-weakref.js
34295
34349
  var require_dispatcher_weakref = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34296
34350
  var { kConnected, kSize } = require_symbols$4();
34297
34351
  var CompatWeakRef = class {
@@ -34328,7 +34382,7 @@ var require_dispatcher_weakref = /* @__PURE__ */ __commonJSMin(((exports, module
34328
34382
  };
34329
34383
  }));
34330
34384
  //#endregion
34331
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/request.js
34385
+ //#region node_modules/undici/lib/web/fetch/request.js
34332
34386
  var require_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34333
34387
  var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body();
34334
34388
  var { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers();
@@ -34837,7 +34891,7 @@ var require_request = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34837
34891
  };
34838
34892
  }));
34839
34893
  //#endregion
34840
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fetch/index.js
34894
+ //#region node_modules/undici/lib/web/fetch/index.js
34841
34895
  var require_fetch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
34842
34896
  var { makeNetworkError, makeAppropriateNetworkError, filterResponse, makeResponse, fromInnerResponse } = require_response();
34843
34897
  var { HeadersList } = require_headers();
@@ -35535,7 +35589,7 @@ var require_fetch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35535
35589
  };
35536
35590
  }));
35537
35591
  //#endregion
35538
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/symbols.js
35592
+ //#region node_modules/undici/lib/web/fileapi/symbols.js
35539
35593
  var require_symbols$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35540
35594
  module.exports = {
35541
35595
  kState: Symbol("FileReader state"),
@@ -35547,7 +35601,7 @@ var require_symbols$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35547
35601
  };
35548
35602
  }));
35549
35603
  //#endregion
35550
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/progressevent.js
35604
+ //#region node_modules/undici/lib/web/fileapi/progressevent.js
35551
35605
  var require_progressevent = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35552
35606
  var { webidl } = require_webidl();
35553
35607
  var kState = Symbol("ProgressEvent state");
@@ -35613,7 +35667,7 @@ var require_progressevent = /* @__PURE__ */ __commonJSMin(((exports, module) =>
35613
35667
  module.exports = { ProgressEvent };
35614
35668
  }));
35615
35669
  //#endregion
35616
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/encoding.js
35670
+ //#region node_modules/undici/lib/web/fileapi/encoding.js
35617
35671
  var require_encoding = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35618
35672
  /**
35619
35673
  * @see https://encoding.spec.whatwg.org/#concept-encoding-get
@@ -35855,7 +35909,7 @@ var require_encoding = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35855
35909
  module.exports = { getEncoding };
35856
35910
  }));
35857
35911
  //#endregion
35858
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/util.js
35912
+ //#region node_modules/undici/lib/web/fileapi/util.js
35859
35913
  var require_util$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
35860
35914
  var { kState, kError, kResult, kAborted, kLastProgressEventFired } = require_symbols$2();
35861
35915
  var { ProgressEvent } = require_progressevent();
@@ -36031,7 +36085,7 @@ var require_util$4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36031
36085
  };
36032
36086
  }));
36033
36087
  //#endregion
36034
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/fileapi/filereader.js
36088
+ //#region node_modules/undici/lib/web/fileapi/filereader.js
36035
36089
  var require_filereader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36036
36090
  var { staticPropertyDescriptors, readOperation, fireAProgressEvent } = require_util$4();
36037
36091
  var { kState, kError, kResult, kEvents, kAborted } = require_symbols$2();
@@ -36244,12 +36298,12 @@ var require_filereader = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36244
36298
  module.exports = { FileReader };
36245
36299
  }));
36246
36300
  //#endregion
36247
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cache/symbols.js
36301
+ //#region node_modules/undici/lib/web/cache/symbols.js
36248
36302
  var require_symbols$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36249
36303
  module.exports = { kConstruct: require_symbols$4().kConstruct };
36250
36304
  }));
36251
36305
  //#endregion
36252
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cache/util.js
36306
+ //#region node_modules/undici/lib/web/cache/util.js
36253
36307
  var require_util$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36254
36308
  var assert$3 = require("node:assert");
36255
36309
  var { URLSerializer } = require_data_url();
@@ -36283,7 +36337,7 @@ var require_util$3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36283
36337
  };
36284
36338
  }));
36285
36339
  //#endregion
36286
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cache/cache.js
36340
+ //#region node_modules/undici/lib/web/cache/cache.js
36287
36341
  var require_cache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36288
36342
  var { kConstruct } = require_symbols$1();
36289
36343
  var { urlEquals, getFieldValues } = require_util$3();
@@ -36732,7 +36786,7 @@ var require_cache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36732
36786
  module.exports = { Cache };
36733
36787
  }));
36734
36788
  //#endregion
36735
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cache/cachestorage.js
36789
+ //#region node_modules/undici/lib/web/cache/cachestorage.js
36736
36790
  var require_cachestorage = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36737
36791
  var { kConstruct } = require_symbols$1();
36738
36792
  var { Cache } = require_cache();
@@ -36822,7 +36876,7 @@ var require_cachestorage = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36822
36876
  module.exports = { CacheStorage };
36823
36877
  }));
36824
36878
  //#endregion
36825
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cookies/constants.js
36879
+ //#region node_modules/undici/lib/web/cookies/constants.js
36826
36880
  var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36827
36881
  module.exports = {
36828
36882
  maxAttributeValueSize: 1024,
@@ -36830,7 +36884,7 @@ var require_constants$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36830
36884
  };
36831
36885
  }));
36832
36886
  //#endregion
36833
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cookies/util.js
36887
+ //#region node_modules/undici/lib/web/cookies/util.js
36834
36888
  var require_util$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
36835
36889
  /**
36836
36890
  * @param {string} value
@@ -37024,7 +37078,7 @@ var require_util$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37024
37078
  };
37025
37079
  }));
37026
37080
  //#endregion
37027
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cookies/parse.js
37081
+ //#region node_modules/undici/lib/web/cookies/parse.js
37028
37082
  var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37029
37083
  var { maxNameValuePairSize, maxAttributeValueSize } = require_constants$1();
37030
37084
  var { isCTLExcludingHtab } = require_util$2();
@@ -37126,7 +37180,7 @@ var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37126
37180
  };
37127
37181
  }));
37128
37182
  //#endregion
37129
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/cookies/index.js
37183
+ //#region node_modules/undici/lib/web/cookies/index.js
37130
37184
  var require_cookies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37131
37185
  var { parseSetCookie } = require_parse();
37132
37186
  var { stringify } = require_util$2();
@@ -37277,7 +37331,7 @@ var require_cookies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37277
37331
  };
37278
37332
  }));
37279
37333
  //#endregion
37280
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/events.js
37334
+ //#region node_modules/undici/lib/web/websocket/events.js
37281
37335
  var require_events = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37282
37336
  var { webidl } = require_webidl();
37283
37337
  var { kEnumerableProperty } = require_util$7();
@@ -37540,7 +37594,7 @@ var require_events = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37540
37594
  };
37541
37595
  }));
37542
37596
  //#endregion
37543
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/constants.js
37597
+ //#region node_modules/undici/lib/web/websocket/constants.js
37544
37598
  var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37545
37599
  module.exports = {
37546
37600
  uid: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",
@@ -37585,7 +37639,7 @@ var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37585
37639
  };
37586
37640
  }));
37587
37641
  //#endregion
37588
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/symbols.js
37642
+ //#region node_modules/undici/lib/web/websocket/symbols.js
37589
37643
  var require_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37590
37644
  module.exports = {
37591
37645
  kWebSocketURL: Symbol("url"),
@@ -37599,7 +37653,7 @@ var require_symbols = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37599
37653
  };
37600
37654
  }));
37601
37655
  //#endregion
37602
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/util.js
37656
+ //#region node_modules/undici/lib/web/websocket/util.js
37603
37657
  var require_util$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37604
37658
  var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols();
37605
37659
  var { states, opcodes } = require_constants();
@@ -37781,7 +37835,7 @@ var require_util$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37781
37835
  };
37782
37836
  }));
37783
37837
  //#endregion
37784
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/frame.js
37838
+ //#region node_modules/undici/lib/web/websocket/frame.js
37785
37839
  var require_frame = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37786
37840
  var { maxUnsigned16Bit } = require_constants();
37787
37841
  var BUFFER_SIZE = 16386;
@@ -37853,7 +37907,7 @@ var require_frame = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37853
37907
  module.exports = { WebsocketFrameSend };
37854
37908
  }));
37855
37909
  //#endregion
37856
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/connection.js
37910
+ //#region node_modules/undici/lib/web/websocket/connection.js
37857
37911
  var require_connection = /* @__PURE__ */ __commonJSMin(((exports, module) => {
37858
37912
  var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants();
37859
37913
  var { kReadyState, kSentClose, kByteParser, kReceivedClose, kResponse } = require_symbols();
@@ -38018,7 +38072,7 @@ var require_connection = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38018
38072
  };
38019
38073
  }));
38020
38074
  //#endregion
38021
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/permessage-deflate.js
38075
+ //#region node_modules/undici/lib/web/websocket/permessage-deflate.js
38022
38076
  var require_permessage_deflate = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38023
38077
  var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require("node:zlib");
38024
38078
  var { isValidClientWindowBits } = require_util$1();
@@ -38097,7 +38151,7 @@ var require_permessage_deflate = /* @__PURE__ */ __commonJSMin(((exports, module
38097
38151
  module.exports = { PerMessageDeflate };
38098
38152
  }));
38099
38153
  //#endregion
38100
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/receiver.js
38154
+ //#region node_modules/undici/lib/web/websocket/receiver.js
38101
38155
  var require_receiver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38102
38156
  var { Writable } = require("node:stream");
38103
38157
  var assert = require("node:assert");
@@ -38414,7 +38468,7 @@ var require_receiver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38414
38468
  module.exports = { ByteParser };
38415
38469
  }));
38416
38470
  //#endregion
38417
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/sender.js
38471
+ //#region node_modules/undici/lib/web/websocket/sender.js
38418
38472
  var require_sender = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38419
38473
  var { WebsocketFrameSend } = require_frame();
38420
38474
  var { opcodes, sendHints } = require_constants();
@@ -38494,7 +38548,7 @@ var require_sender = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38494
38548
  module.exports = { SendQueue };
38495
38549
  }));
38496
38550
  //#endregion
38497
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/websocket/websocket.js
38551
+ //#region node_modules/undici/lib/web/websocket/websocket.js
38498
38552
  var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38499
38553
  var { webidl } = require_webidl();
38500
38554
  var { URLSerializer } = require_data_url();
@@ -38795,7 +38849,7 @@ var require_websocket = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38795
38849
  module.exports = { WebSocket };
38796
38850
  }));
38797
38851
  //#endregion
38798
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/eventsource/util.js
38852
+ //#region node_modules/undici/lib/web/eventsource/util.js
38799
38853
  var require_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38800
38854
  /**
38801
38855
  * Checks if the given value is a valid LastEventId.
@@ -38827,7 +38881,7 @@ var require_util = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38827
38881
  };
38828
38882
  }));
38829
38883
  //#endregion
38830
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/eventsource/eventsource-stream.js
38884
+ //#region node_modules/undici/lib/web/eventsource/eventsource-stream.js
38831
38885
  var require_eventsource_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
38832
38886
  var { Transform } = require("node:stream");
38833
38887
  var { isASCIINumber, isValidLastEventId } = require_util();
@@ -39049,7 +39103,7 @@ var require_eventsource_stream = /* @__PURE__ */ __commonJSMin(((exports, module
39049
39103
  module.exports = { EventSourceStream };
39050
39104
  }));
39051
39105
  //#endregion
39052
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/lib/web/eventsource/eventsource.js
39106
+ //#region node_modules/undici/lib/web/eventsource/eventsource.js
39053
39107
  var require_eventsource = /* @__PURE__ */ __commonJSMin(((exports, module) => {
39054
39108
  var { pipeline } = require("node:stream");
39055
39109
  var { fetching } = require_fetch();
@@ -39362,7 +39416,7 @@ var require_eventsource = /* @__PURE__ */ __commonJSMin(((exports, module) => {
39362
39416
  };
39363
39417
  }));
39364
39418
  //#endregion
39365
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/undici/index.js
39419
+ //#region node_modules/undici/index.js
39366
39420
  var require_undici = /* @__PURE__ */ __commonJSMin(((exports, module) => {
39367
39421
  var Client = require_client();
39368
39422
  var Dispatcher = require_dispatcher();
@@ -39487,7 +39541,7 @@ var require_undici = /* @__PURE__ */ __commonJSMin(((exports, module) => {
39487
39541
  module.exports.EventSource = EventSource;
39488
39542
  }));
39489
39543
  //#endregion
39490
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/util.js
39544
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/util.js
39491
39545
  var util;
39492
39546
  (function(util) {
39493
39547
  util.assertEqual = (_) => {};
@@ -39583,7 +39637,7 @@ var getParsedType = (data) => {
39583
39637
  }
39584
39638
  };
39585
39639
  //#endregion
39586
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/ZodError.js
39640
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/ZodError.js
39587
39641
  var ZodIssueCode = util.arrayToEnum([
39588
39642
  "invalid_type",
39589
39643
  "invalid_literal",
@@ -39682,7 +39736,7 @@ ZodError.create = (issues) => {
39682
39736
  return new ZodError(issues);
39683
39737
  };
39684
39738
  //#endregion
39685
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/locales/en.js
39739
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/locales/en.js
39686
39740
  var errorMap = (issue, _ctx) => {
39687
39741
  let message;
39688
39742
  switch (issue.code) {
@@ -39759,13 +39813,13 @@ var errorMap = (issue, _ctx) => {
39759
39813
  return { message };
39760
39814
  };
39761
39815
  //#endregion
39762
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/errors.js
39816
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/errors.js
39763
39817
  var overrideErrorMap = errorMap;
39764
39818
  function getErrorMap() {
39765
39819
  return overrideErrorMap;
39766
39820
  }
39767
39821
  //#endregion
39768
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/parseUtil.js
39822
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/parseUtil.js
39769
39823
  var makeIssue = (params) => {
39770
39824
  const { data, path, errorMaps, issueData } = params;
39771
39825
  const fullPath = [...path, ...issueData.path || []];
@@ -39869,14 +39923,14 @@ var isDirty = (x) => x.status === "dirty";
39869
39923
  var isValid = (x) => x.status === "valid";
39870
39924
  var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
39871
39925
  //#endregion
39872
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/errorUtil.js
39926
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/helpers/errorUtil.js
39873
39927
  var errorUtil;
39874
39928
  (function(errorUtil) {
39875
39929
  errorUtil.errToObj = (message) => typeof message === "string" ? { message } : message || {};
39876
39930
  errorUtil.toString = (message) => typeof message === "string" ? message : message?.message;
39877
39931
  })(errorUtil || (errorUtil = {}));
39878
39932
  //#endregion
39879
- //#region ../../node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/types.js
39933
+ //#region node_modules/@apocaliss92/nodewitt/node_modules/zod/v3/types.js
39880
39934
  var ParseInputLazyPath = class {
39881
39935
  constructor(parent, value, path, key) {
39882
39936
  this._cachedPath = [];
@@ -43028,7 +43082,7 @@ ZodNullable.create;
43028
43082
  ZodEffects.createWithPreprocess;
43029
43083
  ZodPipeline.create;
43030
43084
  //#endregion
43031
- //#region ../../node_modules/@apocaliss92/nodewitt/dist/index.js
43085
+ //#region node_modules/@apocaliss92/nodewitt/dist/index.js
43032
43086
  var import_undici = require_undici();
43033
43087
  var DEFAULT_PORT = 80;
43034
43088
  var DEFAULT_TIMEOUT_MS = 3e4;
@@ -43982,6 +44036,71 @@ var fixed = {
43982
44036
  combo: [...COMBO_KEYS],
43983
44037
  co2_pm: [...COMBO_KEYS]
43984
44038
  };
44039
+ var WEATHER_STATION_MODELS = /* @__PURE__ */ new Set([
44040
+ "wh69",
44041
+ "wh65",
44042
+ "ws90",
44043
+ "wh80",
44044
+ "ws80",
44045
+ "wh90",
44046
+ "wh77",
44047
+ "wh85",
44048
+ "ws85",
44049
+ "wh68",
44050
+ "weather_station",
44051
+ "weather_station_wh69",
44052
+ "weather_station_ws90",
44053
+ "weather_station_wh90",
44054
+ "weather_station_wh77"
44055
+ ]);
44056
+ var CHANNEL_SENSOR_MODELS = /* @__PURE__ */ new Set([
44057
+ "wh31",
44058
+ "wh41",
44059
+ "wh52",
44060
+ "wh51",
44061
+ "wh55",
44062
+ "wh34",
44063
+ "wn34",
44064
+ "wh35",
44065
+ "wn35",
44066
+ "wh54",
44067
+ "temp_hum",
44068
+ "pm25",
44069
+ "soil",
44070
+ "soil_ec",
44071
+ "leak",
44072
+ "temp_only",
44073
+ "leaf_wetness",
44074
+ "lds"
44075
+ ]);
44076
+ var EXTERNAL_MODELS = /* @__PURE__ */ new Set([
44077
+ "wh57",
44078
+ "wh40",
44079
+ "wh45",
44080
+ "wh46",
44081
+ "lightning",
44082
+ "rain",
44083
+ "combo",
44084
+ "co2_pm"
44085
+ ]);
44086
+ var GATEWAY_MODELS = /* @__PURE__ */ new Set([
44087
+ "wh25",
44088
+ "indoor_station",
44089
+ "wh26",
44090
+ "wn32",
44091
+ "outdoor_temp_hum",
44092
+ "wn38",
44093
+ "bgt"
44094
+ ]);
44095
+ function categoryForModel(model) {
44096
+ const key = norm(model ?? "");
44097
+ if (key === "") return "gateway";
44098
+ if (WEATHER_STATION_MODELS.has(key)) return "weather-station";
44099
+ if (CHANNEL_SENSOR_MODELS.has(key)) return "channel-sensor";
44100
+ if (EXTERNAL_MODELS.has(key)) return "external";
44101
+ if (GATEWAY_MODELS.has(key)) return "gateway";
44102
+ return "gateway";
44103
+ }
43985
44104
  function liveDataKeysForModel(model, channel) {
43986
44105
  const key = norm(model);
43987
44106
  const channelBuilder = Object.prototype.hasOwnProperty.call(channelized, key) ? channelized[key] : void 0;
@@ -44074,6 +44193,7 @@ var LocalPoller = class {
44074
44193
  scanTimer;
44075
44194
  mappingTimer;
44076
44195
  started = false;
44196
+ mappingPrimed = false;
44077
44197
  gatewayTempUnit = "C";
44078
44198
  stationInfo = {};
44079
44199
  /** Gateway identity (model/firmware) captured from the last `/get_version`. Best-effort. */
@@ -44110,6 +44230,7 @@ var LocalPoller = class {
44110
44230
  this.scanTimer = void 0;
44111
44231
  this.mappingTimer = void 0;
44112
44232
  this.started = false;
44233
+ this.mappingPrimed = false;
44113
44234
  }
44114
44235
  /** Re-read the gateway unit + sensor list and rebuild the live-key -> hardware-id mapping. Offline-tolerant. */
44115
44236
  async refreshMapping() {
@@ -44124,6 +44245,7 @@ var LocalPoller = class {
44124
44245
  };
44125
44246
  const sensors = await this.opts.endpoints.getAllSensors();
44126
44247
  this.mapper.updateMapping(sensors);
44248
+ this.mappingPrimed = true;
44127
44249
  } catch (error) {
44128
44250
  this.opts.onError(error);
44129
44251
  }
@@ -44131,12 +44253,14 @@ var LocalPoller = class {
44131
44253
  /** Fetch + decode + resolve a single live-data snapshot, then emit it. Offline-tolerant. */
44132
44254
  async poll() {
44133
44255
  try {
44256
+ if (!this.mappingPrimed) await this.refreshMapping();
44134
44257
  const raw = await this.opts.endpoints.getLiveData();
44135
44258
  this.opts.onRawFrame?.(raw);
44136
44259
  const resolved = decodeLiveData(raw, this.mapper, {}, this.gatewayTempUnit).map((reading) => ({
44137
44260
  ...reading,
44138
44261
  hardwareId: GATEWAY_KEYS.has(reading.key) ? void 0 : reading.forceHardwareId ?? this.mapper.getHardwareId(reading.key)
44139
44262
  }));
44263
+ if (!this.mappingPrimed) return;
44140
44264
  this.opts.onReadings(resolved);
44141
44265
  } catch (error) {
44142
44266
  this.opts.onError(error);
@@ -44740,11 +44864,13 @@ var Station = class {
44740
44864
  const info = lookup.getSensorInfoForKey(r.key) ?? (owner !== void 0 ? lookup.getSensorInfo(owner) : void 0);
44741
44865
  const id = `${owner ?? GATEWAY_OWNER}:${r.key}`;
44742
44866
  const signal = signalToNumber(info?.signal);
44867
+ const category = categoryForModel(info?.model);
44743
44868
  this.upsert(id, {
44744
44869
  id,
44745
44870
  ...owner !== void 0 ? { hardwareId: owner } : {},
44746
44871
  ...info?.model ? { model: info.model } : {},
44747
44872
  ...info?.channel !== void 0 ? { channel: info.channel } : {},
44873
+ category,
44748
44874
  ...cls.name !== void 0 ? { name: cls.name } : {},
44749
44875
  quantity: cls.quantity,
44750
44876
  value: r.value,
@@ -44776,9 +44902,11 @@ var Station = class {
44776
44902
  if (cls.kind === "battery") continue;
44777
44903
  if (cls.kind !== "measurement") continue;
44778
44904
  const id = `${this.pushOwner(passkey, r.channel)}:${r.key}`;
44905
+ const category = r.channel !== void 0 ? "channel-sensor" : "gateway";
44779
44906
  this.upsert(id, {
44780
44907
  id,
44781
44908
  ...r.channel !== void 0 ? { channel: r.channel } : {},
44909
+ category,
44782
44910
  ...cls.name !== void 0 ? { name: cls.name } : {},
44783
44911
  quantity: cls.quantity,
44784
44912
  value: r.value,
@@ -44877,6 +45005,101 @@ var TypedEmitter = class {
44877
45005
  return this;
44878
45006
  }
44879
45007
  };
45008
+ var CMD_BROADCAST = 18;
45009
+ var DISCOVERY_PORT = 46e3;
45010
+ function buildScanPacket() {
45011
+ const size = 3;
45012
+ const checksum = CMD_BROADCAST + size & 255;
45013
+ return Buffer.from([
45014
+ 255,
45015
+ 255,
45016
+ CMD_BROADCAST,
45017
+ size,
45018
+ checksum
45019
+ ]);
45020
+ }
45021
+ function verifyChecksum(buf) {
45022
+ if (buf.length < 4) return false;
45023
+ let sum = 0;
45024
+ for (let i = 2; i < buf.length - 1; i += 1) sum = sum + (buf[i] ?? 0) & 255;
45025
+ return sum === buf[buf.length - 1];
45026
+ }
45027
+ function parseBroadcastResponse(buf) {
45028
+ if (buf.length < 18) return null;
45029
+ if (buf[0] !== 255 || buf[1] !== 255 || buf[2] !== CMD_BROADCAST) return null;
45030
+ if (!verifyChecksum(buf)) return null;
45031
+ const mac = macFromBytes(buf.subarray(5, 11));
45032
+ const tcpPort = buf.readUInt16BE(15);
45033
+ const ssidLen = buf[17] ?? 0;
45034
+ const ssidEnd = Math.min(18 + ssidLen, buf.length - 1);
45035
+ const { module, model, firmware } = splitSsid(buf.subarray(18, ssidEnd).toString("ascii").trim());
45036
+ return {
45037
+ mac,
45038
+ module,
45039
+ model,
45040
+ firmware,
45041
+ tcpPort
45042
+ };
45043
+ }
45044
+ function macFromBytes(bytes) {
45045
+ return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join(":");
45046
+ }
45047
+ function splitSsid(ssid) {
45048
+ const spaceIdx = ssid.indexOf(" ");
45049
+ const module = spaceIdx >= 0 ? ssid.slice(0, spaceIdx) : ssid;
45050
+ const firmwareRaw = spaceIdx >= 0 ? ssid.slice(spaceIdx + 1).trim() : "";
45051
+ const wifiIdx = module.indexOf("-WIFI");
45052
+ return {
45053
+ module,
45054
+ model: wifiIdx > 0 ? module.slice(0, wifiIdx) : void 0,
45055
+ firmware: firmwareRaw.length > 0 ? firmwareRaw : void 0
45056
+ };
45057
+ }
45058
+ function discoverGateways(socket, opts) {
45059
+ const port = opts?.port ?? DISCOVERY_PORT;
45060
+ const broadcastAddr = opts?.broadcastAddr ?? "255.255.255.255";
45061
+ const timeoutMs = opts?.timeoutMs ?? 3e3;
45062
+ const byMac = /* @__PURE__ */ new Map();
45063
+ socket.onMessage((m) => {
45064
+ const frame = parseBroadcastResponse(m.data);
45065
+ if (frame === null) return;
45066
+ byMac.set(frame.mac, {
45067
+ ip: m.address,
45068
+ mac: frame.mac,
45069
+ name: frame.module.length > 0 ? frame.module : frame.mac,
45070
+ ...frame.model !== void 0 ? { model: frame.model } : {},
45071
+ ...frame.firmware !== void 0 ? { firmware: frame.firmware } : {}
45072
+ });
45073
+ });
45074
+ socket.setBroadcast(true);
45075
+ const scan = buildScanPacket();
45076
+ return new Promise((resolve) => {
45077
+ socket.send(scan, port, broadcastAddr);
45078
+ setTimeout(() => resolve([...byMac.values()]), timeoutMs);
45079
+ });
45080
+ }
45081
+ function createDgramSocket() {
45082
+ return new Promise((resolve, reject) => {
45083
+ const socket = (0, dgram.createSocket)({
45084
+ type: "udp4",
45085
+ reuseAddr: true
45086
+ });
45087
+ socket.once("error", reject);
45088
+ socket.bind(() => {
45089
+ socket.removeListener("error", reject);
45090
+ resolve({
45091
+ send: (data, port, address) => new Promise((res, rej) => socket.send(data, port, address, (err) => err ? rej(err) : res())),
45092
+ onMessage: (handler) => socket.on("message", (data, rinfo) => handler({
45093
+ data,
45094
+ address: rinfo.address,
45095
+ port: rinfo.port
45096
+ })),
45097
+ setBroadcast: (enabled) => socket.setBroadcast(enabled),
45098
+ close: () => new Promise((res) => socket.close(() => res()))
45099
+ });
45100
+ });
45101
+ });
45102
+ }
44880
45103
  function toError(error) {
44881
45104
  return error instanceof Error ? error : new Error(String(error));
44882
45105
  }
@@ -44901,6 +45124,21 @@ var Ecowitt = class _Ecowitt {
44901
45124
  return _Ecowitt.#buildListener(defaultListenerBuilder(options));
44902
45125
  }
44903
45126
  /**
45127
+ * Discover Ecowitt gateways on the network via the `CMD_BROADCAST` UDP probe (port 46000). Opens a
45128
+ * throwaway UDP socket, sweeps the broadcast address (local subnet by default, or a directed
45129
+ * broadcast passed via {@link DiscoverOptions.broadcastAddr} for another subnet), collects
45130
+ * responders deduped by MAC, and closes the socket. No `Ecowitt` instance or connection is
45131
+ * created — the caller maps the results to whatever onboarding flow it uses.
45132
+ */
45133
+ static async discover(options) {
45134
+ const socket = await createDgramSocket();
45135
+ try {
45136
+ return await discoverGateways(socket, options);
45137
+ } finally {
45138
+ await socket.close().catch(() => void 0);
45139
+ }
45140
+ }
45141
+ /**
44904
45142
  * Build a local-transport facade from a transport builder. The wiring closure that hands the
44905
45143
  * builder its `onReadings`/`onError` callbacks lives HERE, inside the class, so it can call the
44906
45144
  * `#`-private ingest seams directly — no public method, no cast. `#`-private so it is unreachable
@@ -45106,6 +45344,219 @@ objectType({
45106
45344
  })
45107
45345
  });
45108
45346
  //#endregion
45347
+ //#region src/config.ts
45348
+ /**
45349
+ * Operator-supplied Ecowitt gateway settings for ONE broker (= one station).
45350
+ * Two transports behind a `transport` discriminator:
45351
+ *
45352
+ * - `local` (local-poll): the addon polls the gateway over HTTP (`host`/`port`/
45353
+ * optional `password`, with poll + mapping intervals).
45354
+ * - `listener` (push): the addon runs an HTTP server the gateway uploads to
45355
+ * (the gateway's "Customized" upload must point at the hub's LAN IP:port).
45356
+ *
45357
+ * Local-poll is the recommended default — it has no inbound-IP constraint.
45358
+ */
45359
+ var baseFields = {
45360
+ /** Human-overridable station identity used to scope the adopted gateway. */
45361
+ stationId: string().default("").describe("Optional stable station id (auto-derived when blank)") };
45362
+ var ecowittConfigSchema = discriminatedUnion("transport", [object({
45363
+ transport: literal("local"),
45364
+ host: string().min(1).describe("Ecowitt gateway host name or IP address"),
45365
+ port: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(80)).describe("Gateway HTTP port"),
45366
+ password: string().default("").describe("Gateway password (optional — newer firmware)"),
45367
+ pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e3).max(36e5).default(6e4)).describe("Live-data poll interval (ms)"),
45368
+ mappingIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e4).max(864e5).default(6e5)).describe("Sensor-map refresh interval (ms)"),
45369
+ ...baseFields
45370
+ }), object({
45371
+ transport: literal("listener"),
45372
+ listenPort: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(4199)).describe("Local TCP port the gateway uploads to"),
45373
+ listenHost: string().default("").describe("Optional bind host (blank = all interfaces)"),
45374
+ ...baseFields
45375
+ })]);
45376
+ /**
45377
+ * Narrow an `unknown` value to a shallow-cloned plain object record, or an empty
45378
+ * record when it is not a plain object. Mirrors the Homematic `toRecord` helper —
45379
+ * a cast-free boundary narrowing.
45380
+ */
45381
+ function toRecord(value) {
45382
+ if (typeof value === "object" && value !== null && !Array.isArray(value)) return Object.fromEntries(Object.entries(value));
45383
+ return {};
45384
+ }
45385
+ /** Coerce a loose settings blob through the connection schema, applying defaults.
45386
+ * A blob with no `transport` defaults to `local` for back-compat with simple forms. */
45387
+ function settingsToEcowittConfig(settings) {
45388
+ const raw = toRecord(settings);
45389
+ if (raw["transport"] !== "local" && raw["transport"] !== "listener") raw["transport"] = "local";
45390
+ return ecowittConfigSchema.parse(raw);
45391
+ }
45392
+ /**
45393
+ * Persisted config for an Ecowitt gateway {@link import('@camstack/types').DeviceType.Hub}
45394
+ * device. The operator-supplied CONNECTION lives directly on the device (Reolink
45395
+ * pattern) — there is no broker registry. The gateway owns its own live nodewitt
45396
+ * client keyed on its own `stableId`; group Container children reference it via
45397
+ * their `gatewayId` config field.
45398
+ */
45399
+ var ecowittGatewaySchema = object({
45400
+ /** The transport + endpoint the gateway's live client dials / binds. */
45401
+ connection: ecowittConfigSchema,
45402
+ /** Provenance marker used to scope offline / cascade helpers. */
45403
+ system: literal("ecowitt-gateway").optional()
45404
+ });
45405
+ /**
45406
+ * Hand-written connection form for the gateway device-creation UI (standalone
45407
+ * mode — Reolink pattern). The connection lives on the gateway DEVICE config,
45408
+ * not in a broker registry. A `name` field is included so the operator names
45409
+ * the gateway Hub at creation time (mirrors the Reolink creation form).
45410
+ */
45411
+ function buildConnectionFormSchema() {
45412
+ return { sections: [
45413
+ {
45414
+ id: "identity",
45415
+ title: "Gateway",
45416
+ columns: 1,
45417
+ fields: [{
45418
+ type: "text",
45419
+ key: "name",
45420
+ label: "Name",
45421
+ required: true,
45422
+ placeholder: "Weather station"
45423
+ }]
45424
+ },
45425
+ {
45426
+ id: "transport",
45427
+ title: "Transport",
45428
+ description: "Choose how CamStack reads the gateway. Local poll connects out to the gateway (recommended). Push listener runs a server the gateway uploads to — configure the gateway \"Customized\" upload to point at this hub.",
45429
+ columns: 1,
45430
+ fields: [{
45431
+ type: "select",
45432
+ key: "transport",
45433
+ label: "Transport",
45434
+ default: "local",
45435
+ options: [{
45436
+ value: "local",
45437
+ label: "Local poll (recommended)"
45438
+ }, {
45439
+ value: "listener",
45440
+ label: "Push listener"
45441
+ }]
45442
+ }]
45443
+ },
45444
+ {
45445
+ id: "local",
45446
+ title: "Local poll settings",
45447
+ columns: 2,
45448
+ fields: [
45449
+ {
45450
+ type: "text",
45451
+ key: "host",
45452
+ label: "Gateway host / IP",
45453
+ placeholder: "192.168.1.50",
45454
+ showWhen: {
45455
+ field: "transport",
45456
+ equals: "local"
45457
+ }
45458
+ },
45459
+ {
45460
+ type: "number",
45461
+ key: "port",
45462
+ label: "HTTP port",
45463
+ min: 1,
45464
+ max: 65535,
45465
+ default: 80,
45466
+ showWhen: {
45467
+ field: "transport",
45468
+ equals: "local"
45469
+ }
45470
+ },
45471
+ {
45472
+ type: "password",
45473
+ key: "password",
45474
+ label: "Password (optional)",
45475
+ showToggle: true,
45476
+ showWhen: {
45477
+ field: "transport",
45478
+ equals: "local"
45479
+ }
45480
+ },
45481
+ {
45482
+ type: "number",
45483
+ key: "pollIntervalMs",
45484
+ label: "Poll interval (ms)",
45485
+ min: 1e3,
45486
+ max: 36e5,
45487
+ default: 6e4,
45488
+ showWhen: {
45489
+ field: "transport",
45490
+ equals: "local"
45491
+ }
45492
+ }
45493
+ ]
45494
+ },
45495
+ {
45496
+ id: "listener",
45497
+ title: "Push listener settings",
45498
+ columns: 2,
45499
+ fields: [{
45500
+ type: "number",
45501
+ key: "listenPort",
45502
+ label: "Listen port",
45503
+ min: 1,
45504
+ max: 65535,
45505
+ default: 4199,
45506
+ showWhen: {
45507
+ field: "transport",
45508
+ equals: "listener"
45509
+ }
45510
+ }, {
45511
+ type: "text",
45512
+ key: "listenHost",
45513
+ label: "Bind host (optional)",
45514
+ placeholder: "all interfaces",
45515
+ showWhen: {
45516
+ field: "transport",
45517
+ equals: "listener"
45518
+ }
45519
+ }]
45520
+ }
45521
+ ] };
45522
+ }
45523
+ /**
45524
+ * Slugify a host / station id into a readable, stable row-key fragment. Exported so the discovery
45525
+ * candidate's `stableId` matches exactly what `generateStableId` derives on adopt (else a re-scan of
45526
+ * an already-added gateway would not be detected as onboarded).
45527
+ */
45528
+ function slugifyHost(value) {
45529
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
45530
+ }
45531
+ /**
45532
+ * Extra per-scan inputs for Ecowitt network discovery. Mirrors Gree's scan form. On a flat network,
45533
+ * leave blank to sweep the addon node's local subnet. Gateways on ANOTHER subnet usually can't be
45534
+ * reached by a directed broadcast (most routers don't forward it) — enter the gateway's IP instead:
45535
+ * the `CMD_BROADCAST` probe answers a unicast just as well and returns the gateway's identity.
45536
+ */
45537
+ function buildDiscoveryParamsFormSchema() {
45538
+ return { sections: [{
45539
+ id: "scan",
45540
+ title: "Scan options",
45541
+ description: "Leave empty to scan the local subnet. To find a gateway on a different subnet, enter that subnet’s broadcast address (e.g. 192.168.20.255) or the gateway’s IP directly (e.g. 192.168.20.181).",
45542
+ columns: 1,
45543
+ fields: [{
45544
+ type: "text",
45545
+ key: "broadcastAddress",
45546
+ label: "Broadcast address or gateway IP",
45547
+ required: false,
45548
+ placeholder: "192.168.20.255"
45549
+ }, {
45550
+ type: "number",
45551
+ key: "timeoutMs",
45552
+ label: "UDP timeout (ms)",
45553
+ min: 500,
45554
+ max: 3e4,
45555
+ default: 3e3
45556
+ }]
45557
+ }] };
45558
+ }
45559
+ //#endregion
45109
45560
  //#region src/ecowitt-integration-manager.ts
45110
45561
  /** Build the real nodewitt facade for a transport. Pure. */
45111
45562
  function defaultEcowittFacadeFactory(config) {
@@ -45246,500 +45697,82 @@ var EcowittIntegrationManager = class {
45246
45697
  await this.start();
45247
45698
  }
45248
45699
  };
45249
- /** True when two configs are the "same connection" (no facade rebuild needed). */
45250
- function sameConnection(a, b) {
45251
- if (a === null || b === null) return false;
45252
- if (a.transport !== b.transport) return false;
45253
- if (a.transport === "local" && b.transport === "local") return a.host === b.host && a.port === b.port && a.password === b.password && a.pollIntervalMs === b.pollIntervalMs && a.mappingIntervalMs === b.mappingIntervalMs;
45254
- if (a.transport === "listener" && b.transport === "listener") return a.listenPort === b.listenPort && a.listenHost === b.listenHost;
45255
- return false;
45256
- }
45257
45700
  //#endregion
45258
45701
  //#region src/ecowitt-gateway.ts
45259
45702
  /**
45260
- * Per-broker registry that device classes use to reach the live {@link Ecowitt}
45261
- * facade (and its current sensor snapshot) for a given gateway.
45703
+ * Per-gateway registry that device classes use to reach the live {@link Ecowitt}
45704
+ * client (and its current sensor snapshot) for a given gateway. Keyed on the
45705
+ * gateway {@link import('@camstack/types').DeviceType.Hub} device's `stableId`
45706
+ * (standalone mode — the connection lives on the gateway device, not a broker).
45262
45707
  *
45263
- * Because the nodewitt facade's `stop()` is TERMINAL, the integration manager
45264
- * recreates the facade on reconnect / settings change and re-publishes it here.
45265
- * Device classes always read through the resolver, so they transparently pick up
45266
- * the new facade. Mirrors the Homematic / Dreame in-process facade resolver.
45708
+ * Because the nodewitt client's `stop()` is TERMINAL, the gateway device
45709
+ * recreates the client on reconnect / settings change and re-publishes it here.
45710
+ * Container + sensor children always read through the resolver, so they
45711
+ * transparently pick up the new client. Mirrors the Homematic / Dreame in-process
45712
+ * facade resolver.
45267
45713
  */
45268
45714
  var EcowittFacadeResolver = class {
45269
45715
  #facades = /* @__PURE__ */ new Map();
45270
- /** Publish or remove the facade for a broker id. `null` removes the entry. */
45271
- set(brokerId, facade) {
45716
+ /**
45717
+ * Per-gateway snapshot fan-out. Container + sensor children subscribe here
45718
+ * instead of attaching directly to the nodewitt facade's EventEmitter — a
45719
+ * station with >10 sensors would otherwise trip Node's default MaxListeners
45720
+ * cap (one listener per child on a single emitter). The gateway device pumps
45721
+ * this bus once per snapshot from its single facade subscription; a plain
45722
+ * `Set` of callbacks has no listener limit.
45723
+ */
45724
+ #snapshotSubs = /* @__PURE__ */ new Map();
45725
+ /** Publish or remove the client for a gateway id. `null` removes the entry. */
45726
+ set(gatewayId, facade) {
45272
45727
  if (facade === null) {
45273
- this.#facades.delete(brokerId);
45728
+ this.#facades.delete(gatewayId);
45274
45729
  return;
45275
45730
  }
45276
- this.#facades.set(brokerId, facade);
45277
- }
45278
- /** The live facade for a broker id, or null when unknown / stopped. */
45279
- get(brokerId) {
45280
- return this.#facades.get(brokerId) ?? null;
45281
- }
45282
- /** All current sensors for a broker's gateway, or [] when unknown. */
45283
- getSensors(brokerId) {
45284
- return this.#facades.get(brokerId)?.getSensors() ?? [];
45285
- }
45286
- /** Resolve a single sensor by its stable id for a broker, or null. */
45287
- getSensor(brokerId, sensorId) {
45288
- return this.getSensors(brokerId).find((s) => s.id === sensorId) ?? null;
45289
- }
45290
- /** Remove all registered facades (called on full shutdown). */
45291
- clear() {
45292
- this.#facades.clear();
45293
- }
45294
- };
45295
- /** The single in-process per-broker facade resolver shared between the registry
45296
- * and device instances. */
45297
- var ecowittFacades = new EcowittFacadeResolver();
45298
- //#endregion
45299
- //#region src/ecowitt-broker-registry.ts
45300
- /**
45301
- * Manages N live Ecowitt gateway connections ("brokers"), each backed by an
45302
- * {@link EcowittIntegrationManager}. Allocates stable ids (`ecowitt_001`, …),
45303
- * CRUD, an integration FK index, lifecycle helpers. Mirrors the Homematic /
45304
- * Dreame registry; on the default factory path it publishes each freshly-built
45305
- * facade on `ecowittFacades` so device classes can read sensors in-process.
45306
- */
45307
- var EcowittBrokerRegistry = class {
45308
- #logger;
45309
- #onBrokerConnected;
45310
- #onBrokerDisconnected;
45311
- #onSensorsChanged;
45312
- #makeManager;
45313
- #managers = /* @__PURE__ */ new Map();
45314
- #integrationToBroker = /* @__PURE__ */ new Map();
45315
- #nextId = 1;
45316
- constructor(logger, deps = {}) {
45317
- this.#logger = logger;
45318
- this.#onBrokerConnected = deps.onBrokerConnected ?? (() => void 0);
45319
- this.#onBrokerDisconnected = deps.onBrokerDisconnected ?? (() => void 0);
45320
- this.#onSensorsChanged = deps.onSensorsChanged ?? (() => void 0);
45321
- this.#makeManager = deps.makeManager ?? ((opts) => new EcowittIntegrationManager({
45322
- id: opts.id,
45323
- name: opts.name,
45324
- connection: opts.connection,
45325
- logger: opts.logger,
45326
- onConnected: opts.onConnected,
45327
- onDisconnected: opts.onDisconnected,
45328
- onSensorsChanged: opts.onSensorsChanged,
45329
- onFacadeBuilt: (id, facade) => ecowittFacades.set(id, facade)
45330
- }));
45331
- }
45332
- async restore(entries) {
45333
- for (const entry of entries) this.#seedCounter(entry.id);
45334
- for (const entry of entries) try {
45335
- await this.#startManager(entry);
45336
- } catch (err) {
45337
- this.#logger.warn("EcowittBrokerRegistry: failed to restore manager", {
45338
- tags: { brokerId: entry.id },
45339
- meta: { error: errMsg(err) }
45340
- });
45341
- }
45342
- }
45343
- async shutdown() {
45344
- const ids = Array.from(this.#managers.keys());
45345
- await Promise.all(ids.map(async (id) => {
45346
- try {
45347
- await this.#managers.get(id)?.stop();
45348
- } catch (err) {
45349
- this.#logger.warn("EcowittBrokerRegistry: shutdown stop failed", {
45350
- tags: { brokerId: id },
45351
- meta: { error: errMsg(err) }
45352
- });
45353
- }
45354
- }));
45355
- this.#managers.clear();
45356
- this.#integrationToBroker.clear();
45357
- ecowittFacades.clear();
45731
+ this.#facades.set(gatewayId, facade);
45358
45732
  }
45359
- setOnBrokerConnected(cb) {
45360
- this.#onBrokerConnected = cb;
45361
- }
45362
- setOnBrokerDisconnected(cb) {
45363
- this.#onBrokerDisconnected = cb;
45364
- }
45365
- setOnSensorsChanged(cb) {
45366
- this.#onSensorsChanged = cb;
45367
- }
45368
- async createEntry(name, connection, opts = {}) {
45369
- const id = this.#allocateId();
45370
- const entry = {
45371
- id,
45372
- name,
45373
- connection,
45374
- ...opts.integrationId !== void 0 ? { integrationId: opts.integrationId } : {}
45375
- };
45376
- await this.#startManager(entry);
45377
- if (opts.integrationId !== void 0) this.#integrationToBroker.set(opts.integrationId, id);
45378
- return entry;
45379
- }
45380
- async removeEntry(id) {
45381
- const mgr = this.#managers.get(id);
45382
- if (!mgr) throw new Error(`EcowittBrokerRegistry: unknown broker id "${id}"`);
45383
- for (const [integrationId, brokerId] of this.#integrationToBroker.entries()) if (brokerId === id) this.#integrationToBroker.delete(integrationId);
45384
- this.#managers.delete(id);
45385
- ecowittFacades.set(id, null);
45386
- try {
45387
- await mgr.stop();
45388
- } catch (err) {
45389
- this.#logger.warn("EcowittBrokerRegistry: removeEntry stop failed", {
45390
- tags: { brokerId: id },
45391
- meta: { error: errMsg(err) }
45392
- });
45733
+ /** Subscribe a child to per-gateway snapshot ticks. Returns an unsubscribe fn. */
45734
+ onSnapshot(gatewayId, cb) {
45735
+ let set = this.#snapshotSubs.get(gatewayId);
45736
+ if (!set) {
45737
+ set = /* @__PURE__ */ new Set();
45738
+ this.#snapshotSubs.set(gatewayId, set);
45393
45739
  }
45394
- }
45395
- async updateEntry(id, connection) {
45396
- const mgr = this.#managers.get(id);
45397
- if (!mgr) throw new Error(`EcowittBrokerRegistry: unknown broker id "${id}"`);
45398
- await mgr.applyConnection(connection);
45399
- return {
45400
- id,
45401
- name: mgr.getInfo().name,
45402
- connection
45740
+ set.add(cb);
45741
+ return () => {
45742
+ const current = this.#snapshotSubs.get(gatewayId);
45743
+ current?.delete(cb);
45744
+ if (current && current.size === 0) this.#snapshotSubs.delete(gatewayId);
45403
45745
  };
45404
45746
  }
45405
- linkIntegration(integrationId, brokerId) {
45406
- this.#integrationToBroker.set(integrationId, brokerId);
45407
- }
45408
- getBrokerIdByIntegrationId(integrationId) {
45409
- const brokerId = this.#integrationToBroker.get(integrationId);
45410
- if (brokerId === void 0) throw new Error(`EcowittBrokerRegistry: no broker linked for integration id "${integrationId}"`);
45411
- return brokerId;
45412
- }
45413
- list() {
45414
- return Array.from(this.#managers.values()).map((m) => m.getInfo());
45415
- }
45416
- get(id) {
45417
- return this.#managers.get(id)?.getInfo() ?? null;
45418
- }
45419
- getConnection(id) {
45420
- return this.#managers.get(id)?.getConnection() ?? null;
45421
- }
45422
- size() {
45423
- return this.#managers.size;
45747
+ /** Fan a single facade snapshot out to every subscribed child for a gateway. */
45748
+ emitSnapshot(gatewayId) {
45749
+ const set = this.#snapshotSubs.get(gatewayId);
45750
+ if (!set) return;
45751
+ for (const cb of set) try {
45752
+ cb();
45753
+ } catch {}
45424
45754
  }
45425
- connectedCount() {
45426
- let count = 0;
45427
- for (const mgr of this.#managers.values()) if (mgr.getInfo().status === "connected") count++;
45428
- return count;
45755
+ /** The live client for a gateway id, or null when unknown / stopped. */
45756
+ get(gatewayId) {
45757
+ return this.#facades.get(gatewayId) ?? null;
45429
45758
  }
45430
- async #startManager(entry) {
45431
- if (this.#managers.has(entry.id)) {
45432
- if (entry.integrationId !== void 0) this.#integrationToBroker.set(entry.integrationId, entry.id);
45433
- return;
45434
- }
45435
- const mgr = this.#makeManager({
45436
- id: entry.id,
45437
- name: entry.name,
45438
- connection: entry.connection,
45439
- logger: this.#logger,
45440
- onConnected: (id) => this.#onBrokerConnected(id),
45441
- onDisconnected: (id) => this.#onBrokerDisconnected(id),
45442
- onSensorsChanged: (id, sensors) => this.#onSensorsChanged(id, sensors)
45443
- });
45444
- this.#managers.set(entry.id, mgr);
45445
- if (entry.integrationId !== void 0) this.#integrationToBroker.set(entry.integrationId, entry.id);
45446
- await mgr.start();
45759
+ /** All current sensors for a gateway, or [] when unknown. */
45760
+ getSensors(gatewayId) {
45761
+ return this.#facades.get(gatewayId)?.getSensors() ?? [];
45447
45762
  }
45448
- #allocateId() {
45449
- const id = `ecowitt_${String(this.#nextId).padStart(3, "0")}`;
45450
- this.#nextId++;
45451
- return id;
45763
+ /** Resolve a single sensor by its stable id for a gateway, or null. */
45764
+ getSensor(gatewayId, sensorId) {
45765
+ return this.getSensors(gatewayId).find((s) => s.id === sensorId) ?? null;
45452
45766
  }
45453
- #seedCounter(id) {
45454
- const match = /^ecowitt_(\d+)$/.exec(id);
45455
- if (match === null || match[1] === void 0) return;
45456
- const n = parseInt(match[1], 10);
45457
- if (!isNaN(n)) this.#nextId = Math.max(this.#nextId, n + 1);
45767
+ /** Remove all registered clients (called on full shutdown). */
45768
+ clear() {
45769
+ this.#facades.clear();
45770
+ this.#snapshotSubs.clear();
45458
45771
  }
45459
45772
  };
45460
- //#endregion
45461
- //#region src/config.ts
45462
- /**
45463
- * Operator-supplied Ecowitt gateway settings for ONE broker (= one station).
45464
- * Two transports behind a `transport` discriminator:
45465
- *
45466
- * - `local` (local-poll): the addon polls the gateway over HTTP (`host`/`port`/
45467
- * optional `password`, with poll + mapping intervals).
45468
- * - `listener` (push): the addon runs an HTTP server the gateway uploads to
45469
- * (the gateway's "Customized" upload must point at the hub's LAN IP:port).
45470
- *
45471
- * Local-poll is the recommended default — it has no inbound-IP constraint.
45472
- */
45473
- var baseFields = {
45474
- /** Human-overridable station identity used to scope the adopted gateway. */
45475
- stationId: string().default("").describe("Optional stable station id (auto-derived when blank)") };
45476
- var ecowittConfigSchema = discriminatedUnion("transport", [object({
45477
- transport: literal("local"),
45478
- host: string().min(1).describe("Ecowitt gateway host name or IP address"),
45479
- port: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(80)).describe("Gateway HTTP port"),
45480
- password: string().default("").describe("Gateway password (optional — newer firmware)"),
45481
- pollIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e3).max(36e5).default(6e4)).describe("Live-data poll interval (ms)"),
45482
- mappingIntervalMs: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1e4).max(864e5).default(6e5)).describe("Sensor-map refresh interval (ms)"),
45483
- ...baseFields
45484
- }), object({
45485
- transport: literal("listener"),
45486
- listenPort: preprocess((v) => v === "" || v === null ? void 0 : v, number().int().min(1).max(65535).default(4199)).describe("Local TCP port the gateway uploads to"),
45487
- listenHost: string().default("").describe("Optional bind host (blank = all interfaces)"),
45488
- ...baseFields
45489
- })]);
45490
- /** Top-level addon config — an ordered list of broker entries (default empty). */
45491
- var ecowittAddonConfigSchema = object({ brokers: array(object({
45492
- id: string().min(1),
45493
- name: string().min(1),
45494
- connection: ecowittConfigSchema,
45495
- integrationId: string().optional()
45496
- })).default([]) });
45497
- /**
45498
- * Narrow an `unknown` value to a shallow-cloned plain object record, or an empty
45499
- * record when it is not a plain object. Mirrors the Homematic `toRecord` helper —
45500
- * a cast-free boundary narrowing.
45501
- */
45502
- function toRecord(value) {
45503
- if (typeof value === "object" && value !== null && !Array.isArray(value)) return Object.fromEntries(Object.entries(value));
45504
- return {};
45505
- }
45506
- /** Coerce a loose settings blob through the connection schema, applying defaults.
45507
- * A blob with no `transport` defaults to `local` for back-compat with simple forms. */
45508
- function settingsToEcowittConfig(settings) {
45509
- const raw = toRecord(settings);
45510
- if (raw["transport"] !== "local" && raw["transport"] !== "listener") raw["transport"] = "local";
45511
- return ecowittConfigSchema.parse(raw);
45512
- }
45513
- /** Hand-written connection form for the broker/integration creation UI. */
45514
- function buildConnectionFormSchema() {
45515
- return { sections: [
45516
- {
45517
- id: "transport",
45518
- title: "Transport",
45519
- description: "Choose how CamStack reads the gateway. Local poll connects out to the gateway (recommended). Push listener runs a server the gateway uploads to — configure the gateway \"Customized\" upload to point at this hub.",
45520
- columns: 1,
45521
- fields: [{
45522
- type: "select",
45523
- key: "transport",
45524
- label: "Transport",
45525
- default: "local",
45526
- options: [{
45527
- value: "local",
45528
- label: "Local poll (recommended)"
45529
- }, {
45530
- value: "listener",
45531
- label: "Push listener"
45532
- }]
45533
- }]
45534
- },
45535
- {
45536
- id: "local",
45537
- title: "Local poll settings",
45538
- columns: 2,
45539
- fields: [
45540
- {
45541
- type: "text",
45542
- key: "host",
45543
- label: "Gateway host / IP",
45544
- placeholder: "192.168.1.50",
45545
- showWhen: {
45546
- field: "transport",
45547
- equals: "local"
45548
- }
45549
- },
45550
- {
45551
- type: "number",
45552
- key: "port",
45553
- label: "HTTP port",
45554
- min: 1,
45555
- max: 65535,
45556
- default: 80,
45557
- showWhen: {
45558
- field: "transport",
45559
- equals: "local"
45560
- }
45561
- },
45562
- {
45563
- type: "password",
45564
- key: "password",
45565
- label: "Password (optional)",
45566
- showToggle: true,
45567
- showWhen: {
45568
- field: "transport",
45569
- equals: "local"
45570
- }
45571
- },
45572
- {
45573
- type: "number",
45574
- key: "pollIntervalMs",
45575
- label: "Poll interval (ms)",
45576
- min: 1e3,
45577
- max: 36e5,
45578
- default: 6e4,
45579
- showWhen: {
45580
- field: "transport",
45581
- equals: "local"
45582
- }
45583
- }
45584
- ]
45585
- },
45586
- {
45587
- id: "listener",
45588
- title: "Push listener settings",
45589
- columns: 2,
45590
- fields: [{
45591
- type: "number",
45592
- key: "listenPort",
45593
- label: "Listen port",
45594
- min: 1,
45595
- max: 65535,
45596
- default: 4199,
45597
- showWhen: {
45598
- field: "transport",
45599
- equals: "listener"
45600
- }
45601
- }, {
45602
- type: "text",
45603
- key: "listenHost",
45604
- label: "Bind host (optional)",
45605
- placeholder: "all interfaces",
45606
- showWhen: {
45607
- field: "transport",
45608
- equals: "listener"
45609
- }
45610
- }]
45611
- }
45612
- ] };
45613
- }
45614
- //#endregion
45615
- //#region src/ecowitt-broker-provider.ts
45616
- var ECOWITT_KIND = "ecowitt";
45617
- /**
45618
- * Construct the `broker` cap provider for the Ecowitt addon. Pure builder.
45619
- * Mirrors `buildDreameBrokerProvider`. The connection has no single secret to
45620
- * redact (the optional local password is the only one) — preserved on empty
45621
- * round-trip like the other providers.
45622
- */
45623
- function buildEcowittBrokerProvider(deps) {
45624
- const { ownerAddonId, registry, getBrokers, persistBrokers, cascadeRemoveDevices, logger } = deps;
45625
- const owns = (id) => getBrokers().some((b) => b.id === id);
45626
- /** Redact the local-poll password for an outbound settings read. */
45627
- const redact = (entry) => {
45628
- if (entry.connection.transport === "local") return {
45629
- ...entry.connection,
45630
- password: ""
45631
- };
45632
- return { ...entry.connection };
45633
- };
45634
- return {
45635
- list: async ({ kind }) => {
45636
- if (kind && kind !== ECOWITT_KIND) return [];
45637
- return registry.list().map((info) => ({
45638
- ...info,
45639
- addonId: ownerAddonId
45640
- }));
45641
- },
45642
- get: async ({ id }) => {
45643
- const info = registry.get(id);
45644
- return info ? {
45645
- ...info,
45646
- addonId: ownerAddonId
45647
- } : null;
45648
- },
45649
- listProviders: async () => [{
45650
- addonId: ownerAddonId,
45651
- kinds: [{
45652
- kind: ECOWITT_KIND,
45653
- label: "Ecowitt"
45654
- }]
45655
- }],
45656
- add: async ({ kind, name, settings }) => {
45657
- if (kind !== ECOWITT_KIND) throw new Error(`provider-ecowitt: only kind '${ECOWITT_KIND}' is handled here (got '${kind}')`);
45658
- const entry = await registry.createEntry(name, settingsToEcowittConfig(settings));
45659
- await persistBrokers([...getBrokers(), entry]);
45660
- return { id: entry.id };
45661
- },
45662
- remove: async ({ id }) => {
45663
- if (!owns(id)) return;
45664
- await registry.removeEntry(id);
45665
- await cascadeRemoveDevices(id).catch((err) => {
45666
- logger.warn("ecowitt: broker cascade-remove threw", {
45667
- tags: { brokerId: id },
45668
- meta: { error: errMsg(err) }
45669
- });
45670
- });
45671
- await persistBrokers(getBrokers().filter((b) => b.id !== id));
45672
- },
45673
- testConnection: async ({ id }) => {
45674
- if (!owns(id)) return {
45675
- ok: false,
45676
- error: "unknown broker"
45677
- };
45678
- const info = registry.get(id);
45679
- if (!info) return {
45680
- ok: false,
45681
- error: "unknown broker"
45682
- };
45683
- if (info.status === "connected") return {
45684
- ok: true,
45685
- latencyMs: info.lastCheckedAt ? Math.max(0, Date.now() - info.lastCheckedAt) : 0
45686
- };
45687
- return {
45688
- ok: false,
45689
- error: info.error ?? `status: ${info.status}`
45690
- };
45691
- },
45692
- getSettings: async ({ id }) => {
45693
- const entry = getBrokers().find((b) => b.id === id);
45694
- if (!entry) return null;
45695
- return redact(entry);
45696
- },
45697
- setSettings: async ({ id, settings }) => {
45698
- if (!owns(id)) return;
45699
- const existing = getBrokers().find((b) => b.id === id);
45700
- if (!existing) return;
45701
- const parsed = settingsToEcowittConfig(settings);
45702
- const merged = parsed.transport === "local" && existing.connection.transport === "local" ? {
45703
- ...parsed,
45704
- password: parsed.password.length > 0 ? parsed.password : existing.connection.password
45705
- } : parsed;
45706
- const updated = await registry.updateEntry(id, merged);
45707
- await persistBrokers(getBrokers().map((b) => b.id === id ? updated : b));
45708
- },
45709
- getBrokerConfig: async ({ id }) => {
45710
- const entry = getBrokers().find((b) => b.id === id);
45711
- if (!entry) return null;
45712
- return redact(entry);
45713
- },
45714
- getSettingsSchema: async ({ kind }) => {
45715
- if (kind !== ECOWITT_KIND) return null;
45716
- return buildConnectionFormSchema();
45717
- },
45718
- testSettings: async ({ kind, settings }) => {
45719
- if (kind !== ECOWITT_KIND) return {
45720
- ok: false,
45721
- error: `unsupported kind: ${kind}`
45722
- };
45723
- try {
45724
- settingsToEcowittConfig(settings);
45725
- return { ok: true };
45726
- } catch (err) {
45727
- return {
45728
- ok: false,
45729
- error: errMsg(err)
45730
- };
45731
- }
45732
- },
45733
- publish: async () => null,
45734
- subscribe: async () => ({ subscriptionId: "" }),
45735
- unsubscribe: async () => void 0,
45736
- getState: async () => null,
45737
- getStatus: async () => ({
45738
- brokerCount: registry.size(),
45739
- connectedCount: registry.connectedCount()
45740
- })
45741
- };
45742
- }
45773
+ /** The single in-process per-gateway client resolver shared between the gateway
45774
+ * device and its container / sensor children. */
45775
+ var ecowittFacades = new EcowittFacadeResolver();
45743
45776
  //#endregion
45744
45777
  //#region src/ecowitt-mapping.ts
45745
45778
  /**
@@ -45901,18 +45934,64 @@ var QUANTITY_LABEL = {
45901
45934
  lightning_count: "Lightning count",
45902
45935
  vpd: "VPD"
45903
45936
  };
45937
+ /** All device groups, in stable presentation order. */
45938
+ var ECOWITT_DEVICE_GROUPS = [
45939
+ "gateway",
45940
+ "weather-station",
45941
+ "temp-sensor-ch1"
45942
+ ];
45943
+ /** Human label for a device group (used as the per-group Container name suffix). */
45944
+ function deviceGroupLabel(group) {
45945
+ switch (group) {
45946
+ case "gateway": return "Gateway";
45947
+ case "weather-station": return "Weather Station";
45948
+ case "temp-sensor-ch1": return "Temp Sensor CH1";
45949
+ }
45950
+ }
45951
+ /**
45952
+ * Map a sensor's self-describing nodewitt {@link SensorCategory} (+ its channel)
45953
+ * to the camstack {@link EcowittDeviceGroup} it belongs to. Pure, total.
45954
+ *
45955
+ * The split:
45956
+ * - `weather-station` → `'weather-station'`.
45957
+ * - `channel-sensor` with channel 1 → `'temp-sensor-ch1'` (the CH1 split-out).
45958
+ * - everything else → `'gateway'`.
45959
+ *
45960
+ * CH2..8 grouping (documented decision): channel-sensors on channels 2–8 are
45961
+ * deliberately grouped under `'gateway'`, NOT given their own group. The group
45962
+ * enum is intentionally a fixed THREE (the product wants exactly gateway /
45963
+ * weather-station / CH1-temp surfaces); the gateway device is the natural home
45964
+ * for "everything else" — it already owns the console's indoor readings and the
45965
+ * standalone external sensors. A per-channel device explosion (CH2…CH8 each their
45966
+ * own device) is out of scope here and can be layered on later by widening the
45967
+ * enum, without changing this function's `weather-station`/`temp-sensor-ch1`
45968
+ * branches. `external` (lightning/rain/combo) and `gateway` (console/indoor)
45969
+ * categories also fall here, by design.
45970
+ *
45971
+ * Accepts an optional `category` (a persisted/older sensor may lack one): an
45972
+ * absent category resolves to `'gateway'`, the same safe default nodewitt uses
45973
+ * for an unattributed reading.
45974
+ */
45975
+ function deviceGroupForSensor(category, channel) {
45976
+ if (category === "weather-station") return "weather-station";
45977
+ if (category === "channel-sensor" && channel === 1) return "temp-sensor-ch1";
45978
+ return "gateway";
45979
+ }
45904
45980
  //#endregion
45905
45981
  //#region src/ecowitt-discovery.ts
45906
45982
  /**
45907
- * Build the SINGLE gateway adoption candidate (a {@link DeviceType.Container})
45908
- * with one preview accessory child per sensor. The gateway is keyed on the
45909
- * broker id one broker = one gateway = one Container. Pure: no I/O.
45910
- *
45911
- * Per the plan (model A), each sensor maps to a typed sensor cap; the `weather`
45912
- * cap is intentionally NOT used (a raw station has no sky-state `condition`).
45983
+ * The native id a group Container candidate is keyed on: `<gatewayId>:<group>`.
45984
+ * `gatewayId` is the gateway Hub's stableId, which ALREADY carries the `ecowitt:`
45985
+ * prefix (see `addon.ts` generateStableId) so this must NOT re-add it, else the
45986
+ * id double-prefixes to `ecowitt:ecowitt:<gw>:<group>`. One physical gateway
45987
+ * yields THREE candidates (one per {@link EcowittDeviceGroup}).
45913
45988
  */
45914
- function buildEcowittGatewayCandidate(input) {
45915
- const children = input.sensors.map((sensor) => ({
45989
+ function groupNativeId(gatewayId, group) {
45990
+ return `${gatewayId}:${group}`;
45991
+ }
45992
+ /** A preview accessory child for one sensor. */
45993
+ function sensorChild(sensor) {
45994
+ return {
45916
45995
  childNativeId: sensor.id,
45917
45996
  name: sensorLabel(sensor.quantity, sensor.channel, sensor.name, sensor.id),
45918
45997
  type: DeviceType.Sensor,
@@ -45921,215 +46000,61 @@ function buildEcowittGatewayCandidate(input) {
45921
46000
  alreadyAdopted: false,
45922
46001
  adoptedDeviceId: null,
45923
46002
  capabilities: [capForQuantity(sensor.quantity)]
45924
- }));
45925
- return {
45926
- childNativeId: input.brokerId,
45927
- name: input.gatewayName,
45928
- type: DeviceType.Container,
45929
- status: "online",
45930
- metadata: { serialNumber: input.brokerId },
45931
- alreadyAdopted: input.adoptedDeviceId !== null,
45932
- adoptedDeviceId: input.adoptedDeviceId,
45933
- capabilities: [],
45934
- children
45935
- };
45936
- }
45937
- //#endregion
45938
- //#region src/ecowitt-adoption-provider.ts
45939
- /** Single granularity: the whole gateway adopts as one Container. */
45940
- var DEVICES_FILTER = {
45941
- id: "devices",
45942
- label: "Devices",
45943
- isDefault: true
45944
- };
45945
- /** Resolve the adopted gateway CamStack device id for a broker, or null. */
45946
- async function adoptedGatewayId(brokerId, listAdoptedEcowitt) {
45947
- const all = await listAdoptedEcowitt();
45948
- for (const d of all) if (d.config["system"] === "ecowitt" && d.config["brokerId"] === brokerId) return d.id;
45949
- return null;
45950
- }
45951
- /**
45952
- * Construct the `device-adoption` cap provider for the Ecowitt addon. Pure
45953
- * builder. One broker = one gateway = one Container candidate; its sensors are
45954
- * preview accessory children that the Container's `getAccessoryChildren()`
45955
- * materialises live on adoption. Mirrors the Dreame adoption provider.
45956
- */
45957
- function buildEcowittAdoptionProvider(deps) {
45958
- const { registry, getBrokerIdForIntegration, listAdoptedEcowitt, adoptGateway, removeDevice, findDeviceConfig, logger } = deps;
45959
- async function gatewayCandidateForBroker(brokerId) {
45960
- const facade = registry.getFacadeForBroker(brokerId);
45961
- if (facade === null) return null;
45962
- const info = registry.list().find((b) => b.id === brokerId);
45963
- const adoptedDeviceId = await adoptedGatewayId(brokerId, listAdoptedEcowitt);
45964
- return buildEcowittGatewayCandidate({
45965
- brokerId,
45966
- gatewayName: info?.name ?? "Ecowitt gateway",
45967
- sensors: facade.getSensors(),
45968
- adoptedDeviceId
45969
- });
45970
- }
45971
- return {
45972
- listCandidateFilters: async () => ({ filters: [DEVICES_FILTER] }),
45973
- listCandidates: async ({ integrationId, page, pageSize }) => {
45974
- const candidate = await gatewayCandidateForBroker(await getBrokerIdForIntegration(integrationId));
45975
- const candidates = candidate !== null ? [candidate] : [];
45976
- return {
45977
- candidates,
45978
- totalCount: candidates.length,
45979
- page,
45980
- pageSize
45981
- };
45982
- },
45983
- getCandidate: async ({ integrationId, childNativeId }) => {
45984
- const candidate = await gatewayCandidateForBroker(await getBrokerIdForIntegration(integrationId));
45985
- return candidate !== null && candidate.childNativeId === childNativeId ? candidate : null;
45986
- },
45987
- getStatus: async () => {
45988
- try {
45989
- const brokers = registry.list();
45990
- let candidateCount = 0;
45991
- for (const broker of brokers) if (await gatewayCandidateForBroker(broker.id) !== null) candidateCount += 1;
45992
- const adoptedCount = (await listAdoptedEcowitt()).filter((d) => d.config["system"] === "ecowitt").length;
45993
- return {
45994
- lastDiscoveryAt: Date.now(),
45995
- candidateCount,
45996
- adoptedCount,
45997
- lastError: null
45998
- };
45999
- } catch (err) {
46000
- logger.warn("ecowitt adoption: getStatus failed", { meta: { error: errMsg(err) } });
46001
- return {
46002
- lastDiscoveryAt: null,
46003
- candidateCount: 0,
46004
- adoptedCount: 0,
46005
- lastError: errMsg(err)
46006
- };
46007
- }
46008
- },
46009
- refresh: async ({ integrationId }) => {
46010
- const brokerId = await getBrokerIdForIntegration(integrationId);
46011
- const candidate = await gatewayCandidateForBroker(brokerId);
46012
- const adoptedCount = (await listAdoptedEcowitt()).filter((d) => d.config["system"] === "ecowitt" && d.config["brokerId"] === brokerId).length;
46013
- return {
46014
- lastDiscoveryAt: Date.now(),
46015
- candidateCount: candidate !== null ? 1 : 0,
46016
- adoptedCount,
46017
- lastError: null
46018
- };
46019
- },
46020
- adopt: async ({ integrationId, childNativeIds, perCandidate }) => {
46021
- const brokerId = await getBrokerIdForIntegration(integrationId);
46022
- if (registry.getFacadeForBroker(brokerId) === null) throw new Error(`ecowitt adopt: broker ${brokerId} not connected`);
46023
- const adopted = [];
46024
- let failures = 0;
46025
- const info = registry.list().find((b) => b.id === brokerId);
46026
- for (const nativeId of childNativeIds) {
46027
- if (nativeId !== brokerId) {
46028
- logger.warn("ecowitt adopt: only the gateway candidate is adoptable — skipping", { meta: {
46029
- nativeId,
46030
- brokerId
46031
- } });
46032
- failures++;
46033
- continue;
46034
- }
46035
- try {
46036
- const { deviceId, accessoryDeviceIds } = await adoptGateway({
46037
- brokerId,
46038
- integrationId,
46039
- name: perCandidate?.[nativeId]?.name ?? info?.name ?? "Ecowitt gateway"
46040
- });
46041
- adopted.push({
46042
- childNativeId: nativeId,
46043
- parentDeviceId: deviceId,
46044
- accessoryDeviceIds
46045
- });
46046
- } catch (err) {
46047
- logger.warn("ecowitt adopt: failed to adopt gateway", { meta: {
46048
- brokerId,
46049
- error: errMsg(err)
46050
- } });
46051
- failures++;
46052
- }
46053
- }
46054
- if (adopted.length === 0 && failures > 0) throw new Error(`ecowitt adopt: all ${failures} adopt(s) failed`);
46055
- return { adopted };
46056
- },
46057
- release: async ({ camDeviceId }) => {
46058
- await removeDevice(camDeviceId);
46059
- },
46060
- resync: async ({ camDeviceId }) => {
46061
- const cfg = await findDeviceConfig(camDeviceId);
46062
- if (cfg === null) throw new Error(`ecowitt resync: device ${camDeviceId} not found`);
46063
- if (cfg["system"] !== "ecowitt") throw new Error(`ecowitt resync: device ${camDeviceId} is not an Ecowitt device`);
46064
- const brokerId = String(cfg["brokerId"]);
46065
- if (!(registry.getFacadeForBroker(brokerId) !== null)) throw new Error(`ecowitt resync: broker ${brokerId} no longer connected`);
46066
- return {
46067
- changed: false,
46068
- rebuiltChildren: 0
46069
- };
46070
- }
46071
46003
  };
46072
46004
  }
46073
- //#endregion
46074
- //#region src/ecowitt-broker-device-cascade.ts
46075
- /**
46076
- * Remove every adopted Ecowitt PARENT device (children cascade via the kernel)
46077
- * whose persisted config carries `{ system: 'ecowitt', brokerId }`. Used on
46078
- * broker.remove and integration delete. Best-effort per device; returns the
46079
- * count removed. Mirrors the Homematic / Dreame cascade helper.
46080
- */
46081
- async function cascadeRemoveDevicesForBroker(input) {
46082
- const { reg, devices, addonId, brokerId, logger } = input;
46083
- let removed = 0;
46084
- for (const d of reg.getAllForAddon(addonId)) {
46085
- if (d.parentDeviceId !== null) continue;
46086
- const cfg = await devices.loadConfig(d.id).catch(() => ({}));
46087
- if (cfg["system"] !== "ecowitt" || cfg["brokerId"] !== brokerId) continue;
46088
- try {
46089
- await devices.remove(d.id);
46090
- removed += 1;
46091
- } catch (err) {
46092
- logger.warn("ecowitt: broker cascade-remove failed", {
46093
- tags: { deviceId: d.id },
46094
- meta: {
46095
- brokerId,
46096
- error: errMsg(err)
46097
- }
46098
- });
46099
- }
46100
- }
46101
- return removed;
46102
- }
46103
- //#endregion
46104
- //#region src/ecowitt-broker-offline.ts
46105
46005
  /**
46106
- * Set every Ecowitt device belonging to `brokerId` to the requested online
46107
- * state. Every Ecowitt top-level gateway Container carries
46108
- * `{ system: 'ecowitt', brokerId }`. Churn-free; returns the count transitioned.
46109
- * Mirrors the Homematic / Dreame offline helper.
46006
+ * Build the THREE gateway adoption candidates (one {@link DeviceType.Container}
46007
+ * per {@link EcowittDeviceGroup}) for a single physical gateway. Each Container
46008
+ * carries only the sensors whose device group matches, as preview accessory
46009
+ * children that the Container's `getAccessoryChildren()` materialises on
46010
+ * adoption. Pure: no I/O.
46011
+ *
46012
+ * Discovery option (documented decision): we return 3 SEPARATE top-level
46013
+ * Container candidates (not 1 parent with 3 group-tagged children). Each maps 1:1
46014
+ * to a real adopted device, so the existing per-candidate adopt/release/resync
46015
+ * machinery (keyed on `childNativeId`) extends directly — the alternative
46016
+ * (nested group children under one parent) would require a new two-level
46017
+ * adoption shape and is higher-risk. Sensors are split by
46018
+ * {@link deviceGroupForSensor}; an empty group still yields a Container so its
46019
+ * sensors can appear as they come online over time (additive reconcile).
46020
+ *
46021
+ * Per the plan (model A), each sensor maps to a typed sensor cap; the `weather`
46022
+ * cap is intentionally NOT used (a raw station has no sky-state `condition`).
46110
46023
  */
46111
- function setBrokerDevicesOnline(devices, brokerId, online) {
46112
- let count = 0;
46113
- for (const dev of devices) {
46114
- if (dev.config.get("system") !== "ecowitt") continue;
46115
- if (dev.config.get("brokerId") !== brokerId) continue;
46116
- if (dev.online === online) continue;
46117
- dev.markOnline(online);
46118
- count += 1;
46119
- }
46120
- return count;
46024
+ function buildEcowittGatewayCandidates(input) {
46025
+ const byGroup = /* @__PURE__ */ new Map();
46026
+ for (const group of ECOWITT_DEVICE_GROUPS) byGroup.set(group, []);
46027
+ for (const sensor of input.sensors) {
46028
+ const group = deviceGroupForSensor(sensor.category, sensor.channel);
46029
+ byGroup.get(group)?.push(sensorChild(sensor));
46030
+ }
46031
+ return ECOWITT_DEVICE_GROUPS.map((group) => {
46032
+ const adoptedDeviceId = input.adoptedDeviceIdByGroup[group] ?? null;
46033
+ const children = byGroup.get(group) ?? [];
46034
+ return {
46035
+ childNativeId: groupNativeId(input.gatewayId, group),
46036
+ name: `${input.gatewayName} — ${deviceGroupLabel(group)}`,
46037
+ type: DeviceType.Container,
46038
+ status: "online",
46039
+ metadata: { serialNumber: input.gatewayId },
46040
+ alreadyAdopted: adoptedDeviceId !== null,
46041
+ adoptedDeviceId,
46042
+ capabilities: [],
46043
+ children
46044
+ };
46045
+ });
46121
46046
  }
46122
46047
  //#endregion
46123
46048
  //#region src/devices/ecowitt-sensor-device.ts
46124
46049
  /**
46125
46050
  * Persisted config every Ecowitt sensor child carries. `sensorId` resolves the
46126
- * live reading from the facade; `brokerId` selects the gateway; `quantity` is
46127
- * the Ecowitt physical quantity that drives the cap selection;
46128
- * `system`/`integrationId` are provenance.
46051
+ * live reading from the gateway's client; `gatewayId` selects the gateway (its
46052
+ * Hub stableId); `quantity` is the Ecowitt physical quantity that drives the cap
46053
+ * selection; `system`/`integrationId` are provenance.
46129
46054
  */
46130
46055
  var ecowittSensorSchema = object({
46131
46056
  sensorId: string().min(1).describe("Ecowitt sensor stable id"),
46132
- brokerId: string().min(1).describe("Registry broker id"),
46057
+ gatewayId: string().min(1).describe("Parent gateway Hub stableId"),
46133
46058
  quantity: string().min(1).describe("Ecowitt physical quantity"),
46134
46059
  system: literal("ecowitt").optional(),
46135
46060
  integrationId: string().optional()
@@ -46173,7 +46098,7 @@ var SUPPORTED_CAPS = new Set([
46173
46098
  var EcowittSensorDevice = class extends BaseDevice {
46174
46099
  features = [];
46175
46100
  sensorId;
46176
- brokerId;
46101
+ gatewayId;
46177
46102
  capName;
46178
46103
  valueKey;
46179
46104
  /**
@@ -46189,7 +46114,7 @@ var EcowittSensorDevice = class extends BaseDevice {
46189
46114
  const persisted = ecowittSensorSchema.parse(ctx.persistedConfig ?? {});
46190
46115
  super(ctx, ecowittSensorSchema, { type: ctx.deviceMeta.type });
46191
46116
  this.sensorId = persisted.sensorId;
46192
- this.brokerId = persisted.brokerId;
46117
+ this.gatewayId = persisted.gatewayId;
46193
46118
  const cap = capForQuantity(persisted.quantity);
46194
46119
  this.capName = SUPPORTED_CAPS.has(cap) ? cap : "numeric-sensor";
46195
46120
  this.valueKey = valueFieldForCap(this.capName);
@@ -46199,11 +46124,8 @@ var EcowittSensorDevice = class extends BaseDevice {
46199
46124
  system: "ecowitt"
46200
46125
  });
46201
46126
  }
46202
- get facade() {
46203
- return ecowittFacades.get(this.brokerId);
46204
- }
46205
46127
  resolveSensor() {
46206
- return ecowittFacades.getSensor(this.brokerId, this.sensorId);
46128
+ return ecowittFacades.getSensor(this.gatewayId, this.sensorId);
46207
46129
  }
46208
46130
  async onActivate() {
46209
46131
  await super.onActivate();
@@ -46220,13 +46142,12 @@ var EcowittSensorDevice = class extends BaseDevice {
46220
46142
  this.snapshotUnsub = null;
46221
46143
  }
46222
46144
  }
46223
- /** Attach a facade `snapshot` listener that recomputes this sensor's slice. */
46145
+ /** Subscribe to per-gateway snapshot ticks (recompute this sensor's slice).
46146
+ * Uses the resolver's shared fan-out bus rather than the facade EventEmitter
46147
+ * directly, so N sensors on one gateway never trip Node's MaxListeners cap.
46148
+ * Works even before the facade exists — `recomputeSlice` no-ops on a missing
46149
+ * sensor and replays once the gateway pumps the first snapshot. */
46224
46150
  attachSnapshotListener() {
46225
- const facade = this.facade;
46226
- if (!facade) {
46227
- this.ctx.logger.debug("EcowittSensorDevice: facade not present; no live listener yet", { meta: { sensorId: this.sensorId } });
46228
- return;
46229
- }
46230
46151
  const onSnapshot = () => {
46231
46152
  try {
46232
46153
  this.recomputeSlice();
@@ -46237,10 +46158,7 @@ var EcowittSensorDevice = class extends BaseDevice {
46237
46158
  } });
46238
46159
  }
46239
46160
  };
46240
- facade.on("snapshot", onSnapshot);
46241
- this.snapshotUnsub = () => {
46242
- facade.off("snapshot", onSnapshot);
46243
- };
46161
+ this.snapshotUnsub = ecowittFacades.onSnapshot(this.gatewayId, onSnapshot);
46244
46162
  }
46245
46163
  /** Recompute + write this sensor's typed cap slice (+ battery) from the live reading. */
46246
46164
  recomputeSlice() {
@@ -46390,41 +46308,53 @@ var ecowittSensorEntrySchema = object({
46390
46308
  sensorId: string(),
46391
46309
  quantity: string(),
46392
46310
  channel: number().optional(),
46393
- name: string().optional()
46311
+ name: string().optional(),
46312
+ category: _enum([
46313
+ "gateway",
46314
+ "weather-station",
46315
+ "channel-sensor",
46316
+ "external"
46317
+ ]).optional()
46394
46318
  });
46395
46319
  /**
46396
- * Persisted config for an Ecowitt gateway Container. `brokerId` selects the
46397
- * gateway facade; `sensors[]` is the additively-reconciled list of sensors that
46398
- * fan out as accessory children (updated by the addon via `applyDerivedSpec` on
46399
- * every `snapshot` push). `system`/`integrationId`/`name` are provenance.
46320
+ * Persisted config for one Ecowitt gateway-group Container. `gatewayId` selects
46321
+ * the parent gateway's live nodewitt client (the gateway Hub device's
46322
+ * `stableId`); `sensors[]` is the additively-reconciled list of sensors that fan
46323
+ * out as accessory children (updated by the gateway device via `applyDerivedSpec`
46324
+ * on every `snapshot` push). `system`/`integrationId`/`name` are provenance.
46400
46325
  */
46401
46326
  var ecowittContainerSchema = object({
46402
- brokerId: string().min(1).describe("Registry broker id"),
46327
+ gatewayId: string().min(1).describe("Parent gateway Hub stableId"),
46328
+ deviceGroup: _enum([
46329
+ "gateway",
46330
+ "weather-station",
46331
+ "temp-sensor-ch1"
46332
+ ]).default("gateway"),
46403
46333
  sensors: array(ecowittSensorEntrySchema).default([]),
46404
46334
  integrationId: string().optional(),
46405
46335
  system: literal("ecowitt").optional(),
46406
46336
  name: string().optional()
46407
46337
  });
46408
46338
  /**
46409
- * Parent gateway Container for one Ecowitt station. Owns no caps itself it
46410
- * declares `getAccessoryChildren()` so the kernel auto-spawns one
46411
- * {@link EcowittSensorDevice} per sensor in the LIVE `sensors[]` config and
46412
- * reconciles additions/removals when the addon re-persists the list via
46413
- * `applyDerivedSpec`. Mirrors `HaContainerDevice` (which reads its `entities[]`
46414
- * live and is re-derived on reconcile).
46339
+ * One gateway-group Container for an Ecowitt station. A CHILD of the gateway Hub
46340
+ * (standalone mode). Owns no caps itself — it declares `getAccessoryChildren()`
46341
+ * so the kernel auto-spawns one {@link EcowittSensorDevice} per sensor in the
46342
+ * LIVE `sensors[]` config and reconciles additions/removals when the gateway
46343
+ * re-persists the list via `applyDerivedSpec`. Mirrors `HaContainerDevice` (which
46344
+ * reads its `entities[]` live and is re-derived on reconcile).
46415
46345
  */
46416
46346
  var EcowittContainerDevice = class extends BaseDevice {
46417
46347
  features = [DeviceFeature.Resyncable];
46418
- brokerId;
46348
+ gatewayId;
46419
46349
  integrationId;
46420
46350
  constructor(ctx) {
46421
46351
  const cfg = ecowittContainerSchema.parse(ctx.persistedConfig ?? {});
46422
46352
  super(ctx, ecowittContainerSchema, { type: DeviceType.Container });
46423
- this.brokerId = cfg.brokerId;
46353
+ this.gatewayId = cfg.gatewayId;
46424
46354
  this.integrationId = cfg.integrationId;
46425
- this.online = ecowittFacades.get(this.brokerId) !== null;
46355
+ this.online = ecowittFacades.get(this.gatewayId) !== null;
46426
46356
  this.updateSourceInfo({
46427
- id: this.brokerId,
46357
+ id: this.gatewayId,
46428
46358
  system: "ecowitt"
46429
46359
  });
46430
46360
  }
@@ -46439,7 +46369,7 @@ var EcowittContainerDevice = class extends BaseDevice {
46439
46369
  };
46440
46370
  const config = {
46441
46371
  sensorId: sensor.sensorId,
46442
- brokerId: this.brokerId,
46372
+ gatewayId: this.gatewayId,
46443
46373
  quantity: sensor.quantity,
46444
46374
  capabilities: [capForQuantity(sensor.quantity)],
46445
46375
  system: "ecowitt",
@@ -46455,328 +46385,290 @@ var EcowittContainerDevice = class extends BaseDevice {
46455
46385
  }
46456
46386
  };
46457
46387
  //#endregion
46458
- //#region src/addon.ts
46459
- /** Default multi-broker config — a fresh install starts with no gateways. */
46460
- var DEFAULTS = { brokers: [] };
46388
+ //#region src/devices/ecowitt-gateway-device.ts
46461
46389
  /**
46462
- * Ecowitt weather-station device-provider addon (multi-gateway).
46390
+ * Ecowitt gateway — a {@link DeviceType.Hub} device (standalone mode, Reolink
46391
+ * pattern). The operator-supplied CONNECTION lives on THIS device's config; the
46392
+ * gateway owns exactly one live `@apocaliss92/nodewitt` client (via an
46393
+ * {@link EcowittIntegrationManager}) keyed on its own `stableId` and published on
46394
+ * the in-process {@link ecowittFacades} resolver so its container + sensor
46395
+ * children read the live snapshot.
46463
46396
  *
46464
- * Wraps the `@apocaliss92/nodewitt` local-poll / push client. One registered
46465
- * gateway = one "broker"; each adopted gateway becomes a {@link DeviceType.Container}
46466
- * parent that fans out one typed sensor child per `Sensor.quantity`. Modelled on
46467
- * the Homematic / Home Assistant / Dreame device-provider template, with an
46468
- * additive sensor reconcile (sensors appear over time): on each `snapshot` push
46469
- * the addon re-persists the gateway Container's `sensors[]` via the generic
46470
- * `applyDerivedSpec`, which spawns new sensor children + removes orphaned ones.
46397
+ * It registers the `device-discovery` cap: `refreshDiscovery`/`listDiscovered`
46398
+ * enumerate the THREE gateway-group Container candidates (gateway /
46399
+ * weather-station / temp-sensor-ch1) that actually have sensors; `adoptDevice`
46400
+ * spawns a group {@link EcowittContainerDevice} child whose sensors materialise
46401
+ * as entity children; `releaseDevice` removes it. On every nodewitt snapshot the
46402
+ * gateway re-derives each adopted group Container's `sensors[]` additively.
46471
46403
  */
46472
- var EcowittProviderAddon = class extends BaseDeviceProvider {
46473
- addonId = "provider-ecowitt";
46474
- providerName = "Ecowitt";
46475
- deviceClasses = { [DeviceType.Container]: EcowittContainerDevice };
46476
- registry = null;
46477
- constructor() {
46478
- super({ ...DEFAULTS });
46404
+ var EcowittGatewayDevice = class extends BaseDevice {
46405
+ features = [];
46406
+ manager = null;
46407
+ eventUnsubscribers = [];
46408
+ latestSensors = [];
46409
+ constructor(ctx) {
46410
+ ecowittGatewaySchema.parse(ctx.persistedConfig ?? {});
46411
+ super(ctx, ecowittGatewaySchema, { type: DeviceType.Hub });
46412
+ this.online = false;
46413
+ this.registerDeviceDiscovery();
46414
+ this.updateSourceInfo({
46415
+ id: this.stableId,
46416
+ system: "ecowitt"
46417
+ });
46479
46418
  }
46480
- async onInitialize() {
46481
- const regs = await super.onInitialize();
46482
- this.registry = new EcowittBrokerRegistry(this.ctx.logger);
46483
- this.registry.setOnBrokerConnected((brokerId) => {
46484
- this.ctx.logger.info("Ecowitt: broker connected", { meta: { brokerId } });
46485
- this.setBrokerDevicesOnline(brokerId, true);
46486
- });
46487
- this.registry.setOnBrokerDisconnected((brokerId) => {
46488
- this.setBrokerDevicesOnline(brokerId, false);
46489
- });
46490
- this.registry.setOnSensorsChanged((brokerId, sensors) => {
46491
- this.reconcileGatewaySensors(brokerId, sensors);
46492
- });
46493
- await this.registry.restore(this.config.brokers);
46494
- this.ctx.logger.info("Ecowitt: provider initialised", { meta: { brokerCount: this.config.brokers.length } });
46495
- await this.reconcileIntegrationsToBrokers();
46496
- this.subscribeIntegrationLifecycle();
46497
- return [
46498
- ...regs,
46499
- {
46500
- capability: brokerCapability,
46501
- provider: this.buildBrokerProvider()
46502
- },
46503
- {
46504
- capability: deviceAdoptionCapability,
46505
- provider: this.buildAdoptionProvider()
46506
- }
46507
- ];
46419
+ /** Adopt a pre-built manager (created by `onCreateDevice` so the live client
46420
+ * starts once) mirrors `ReolinkHub.adoptApi`. Published on the resolver so
46421
+ * children pick it up. */
46422
+ adoptManager(manager) {
46423
+ this.manager = manager;
46424
+ const facade = manager.facade;
46425
+ if (facade !== null) ecowittFacades.set(this.stableId, facade);
46508
46426
  }
46509
- async onConfigChanged() {
46510
- const reg = this.registry;
46511
- if (!reg) return;
46512
- const persisted = this.config.brokers;
46513
- const liveIds = new Set(reg.list().map((b) => b.id));
46514
- const persistedIds = new Set(persisted.map((e) => e.id));
46515
- for (const liveId of liveIds) if (!persistedIds.has(liveId)) try {
46516
- await reg.removeEntry(liveId);
46517
- } catch (err) {
46518
- this.ctx.logger.warn("Ecowitt onConfigChanged: removeEntry failed", { meta: {
46519
- brokerId: liveId,
46520
- error: errMsg(err)
46521
- } });
46522
- }
46523
- for (const entry of persisted) {
46524
- if (entry.id && liveIds.has(entry.id)) {
46525
- if (sameConnection(entry.connection, reg.getConnection(entry.id))) continue;
46526
- try {
46527
- await reg.updateEntry(entry.id, entry.connection);
46528
- } catch (err) {
46529
- this.ctx.logger.warn("Ecowitt onConfigChanged: updateEntry failed", { meta: {
46530
- brokerId: entry.id,
46531
- error: errMsg(err)
46532
- } });
46533
- }
46534
- continue;
46535
- }
46536
- try {
46537
- const created = await reg.createEntry(entry.name, entry.connection);
46538
- if (created.id !== entry.id) {
46539
- const next = persisted.map((b) => b === entry ? {
46540
- ...b,
46541
- id: created.id
46542
- } : b);
46543
- await this.updateGlobalSettings({ brokers: next });
46544
- }
46545
- } catch (err) {
46546
- this.ctx.logger.warn("Ecowitt onConfigChanged: failed to start new broker", { meta: {
46547
- brokerName: entry.name,
46548
- error: errMsg(err)
46549
- } });
46550
- }
46551
- }
46427
+ async onActivate() {
46428
+ if (this.manager === null) this.ensureManager().catch((err) => {
46429
+ this.ctx.logger.warn("Ecowitt gateway initial connect failed", { meta: { error: errMsg(err) } });
46430
+ });
46431
+ else this.refreshDiscoveryFromClient().catch(() => {});
46432
+ this.eventUnsubscribers.push(this.ctx.eventBus.subscribe({ category: EventCategory.DeviceUnregistered }, (event) => {
46433
+ if (event.data.parentDeviceId !== this.id) return;
46434
+ this.refreshDiscoveryFromClient().catch(() => {});
46435
+ }));
46552
46436
  }
46553
- async onShutdown() {
46554
- try {
46555
- await this.registry?.shutdown();
46437
+ async removeDevice() {
46438
+ for (const unsub of this.eventUnsubscribers) try {
46439
+ unsub();
46440
+ } catch {}
46441
+ this.eventUnsubscribers.length = 0;
46442
+ const mgr = this.manager;
46443
+ this.manager = null;
46444
+ ecowittFacades.set(this.stableId, null);
46445
+ if (mgr) try {
46446
+ await mgr.stop();
46556
46447
  } catch (err) {
46557
- this.ctx.logger.warn("Ecowitt: provider shutdown error", { meta: { error: errMsg(err) } });
46448
+ this.ctx.logger.warn("Ecowitt gateway: client stop failed", { meta: { error: errMsg(err) } });
46558
46449
  }
46559
- this.registry = null;
46560
- await super.onShutdown();
46561
46450
  }
46562
- /** Stable id, broker-scoped. One broker = one gateway, so the brokerId alone
46563
- * is the unique key for the gateway Container. */
46564
- generateStableId(_type, config) {
46565
- return `ecowitt:${String(config?.["brokerId"] ?? "unknown")}`;
46566
- }
46567
- /**
46568
- * Re-derive the adopted gateway Container's `sensors[]` from the live snapshot.
46569
- * When the set changed, re-persist it via the generic `applyDerivedSpec`, which
46570
- * the kernel uses to re-run `getAccessoryChildren()` (spawning new sensor
46571
- * children + removing orphaned ones). Best-effort; never throws.
46572
- */
46573
- async reconcileGatewaySensors(brokerId, sensors) {
46574
- try {
46575
- const reg = this.ctx.kernel.deviceRegistry;
46576
- const devices = this.ctx.kernel.devices;
46577
- if (!reg || !devices) return;
46578
- let containerId = null;
46579
- for (const d of reg.getAllForAddon(this.addonId)) {
46580
- if (d.parentDeviceId !== null) continue;
46581
- const cfg = await devices.loadConfig(d.id).catch(() => ({}));
46582
- if (cfg["system"] === "ecowitt" && cfg["brokerId"] === brokerId) {
46583
- containerId = d.id;
46584
- break;
46585
- }
46586
- }
46587
- if (containerId === null) return;
46588
- const nextSensors = sensors.map((s) => ({
46589
- sensorId: s.id,
46590
- quantity: s.quantity,
46591
- ...s.channel !== void 0 ? { channel: s.channel } : {},
46592
- ...s.name !== void 0 ? { name: s.name } : {}
46593
- }));
46594
- const cfg = await devices.loadConfig(containerId).catch(() => ({}));
46595
- if (sensorsEqual(Array.isArray(cfg["sensors"]) ? cfg["sensors"] : [], nextSensors)) return;
46596
- await devices.applyDerivedSpec(containerId, { config: { sensors: nextSensors } });
46597
- this.ctx.logger.info("Ecowitt: gateway sensors reconciled", { meta: {
46598
- brokerId,
46599
- deviceId: containerId,
46600
- sensorCount: nextSensors.length
46601
- } });
46451
+ async applySettingsPatch(patch) {
46452
+ if (!("connection" in patch)) return;
46453
+ const parsed = ecowittGatewaySchema.parse({
46454
+ connection: patch["connection"],
46455
+ system: "ecowitt-gateway"
46456
+ });
46457
+ await this.config.setAll({ connection: parsed.connection });
46458
+ const mgr = this.manager;
46459
+ if (mgr) try {
46460
+ await mgr.applyConnection(parsed.connection);
46602
46461
  } catch (err) {
46603
- this.ctx.logger.warn("Ecowitt: gateway sensor reconcile failed", { meta: {
46604
- brokerId,
46605
- error: errMsg(err)
46606
- } });
46462
+ this.ctx.logger.warn("Ecowitt gateway: applyConnection failed", { meta: { error: errMsg(err) } });
46607
46463
  }
46608
- }
46609
- buildBrokerProvider() {
46610
- return buildEcowittBrokerProvider({
46611
- ownerAddonId: this.ctx.id,
46612
- registry: this.requireRegistry(),
46613
- getBrokers: () => this.config.brokers,
46614
- persistBrokers: (brokers) => this.updateGlobalSettings({ brokers: [...brokers] }),
46615
- cascadeRemoveDevices: (brokerId) => this.cascadeRemoveDevicesForBroker(brokerId),
46616
- logger: this.ctx.logger
46464
+ else await this.ensureManager().catch((err) => {
46465
+ this.ctx.logger.warn("Ecowitt gateway re-connect after settings change failed", { meta: { error: errMsg(err) } });
46617
46466
  });
46618
46467
  }
46619
- async cascadeRemoveDevicesForBroker(brokerId) {
46620
- const reg = this.ctx.kernel.deviceRegistry;
46621
- const devices = this.ctx.kernel.devices;
46622
- if (!reg || !devices) return;
46623
- await cascadeRemoveDevicesForBroker({
46624
- reg,
46625
- devices,
46626
- addonId: this.addonId,
46627
- brokerId,
46628
- logger: this.ctx.logger
46468
+ /** Build + start the per-device nodewitt client (if not already running). */
46469
+ async ensureManager() {
46470
+ if (this.manager !== null) return;
46471
+ const connection = this.config.values.connection;
46472
+ const mgr = new EcowittIntegrationManager({
46473
+ id: this.stableId,
46474
+ name: this.name,
46475
+ connection,
46476
+ logger: this.ctx.logger,
46477
+ onConnected: () => this.setGatewayOnline(true),
46478
+ onDisconnected: () => this.setGatewayOnline(false),
46479
+ onSensorsChanged: (_id, sensors) => this.handleSensorsChanged(sensors),
46480
+ onFacadeBuilt: (_id, facade) => ecowittFacades.set(this.stableId, facade)
46629
46481
  });
46482
+ this.manager = mgr;
46483
+ await mgr.start();
46630
46484
  }
46631
- async reconcileIntegrationsToBrokers() {
46632
- try {
46633
- const mine = (await this.ctx.api.integrations.list.query()).filter((i) => i.addonId === this.ctx.id);
46634
- const surviving = new Set(mine.map((i) => i.id));
46635
- for (const integration of mine) {
46636
- const settings = await this.ctx.api.integrations.getSettings.query({ id: integration.id });
46637
- const brokerId = typeof settings["brokerId"] === "string" ? settings["brokerId"] : void 0;
46638
- if (brokerId === void 0) continue;
46639
- if (!this.config.brokers.some((b) => b.id === brokerId)) {
46640
- this.ctx.logger.warn("Ecowitt integration→broker: linked broker not found", { meta: {
46641
- integrationId: integration.id,
46642
- brokerId
46643
- } });
46644
- continue;
46645
- }
46646
- this.requireRegistry().linkIntegration(integration.id, brokerId);
46647
- }
46648
- const toRemove = this.config.brokers.filter((b) => b.integrationId !== void 0 && !surviving.has(b.integrationId)).map((b) => b.id);
46649
- if (toRemove.length === 0) return;
46650
- for (const id of toRemove) try {
46651
- await this.requireRegistry().removeEntry(id);
46652
- await this.cascadeRemoveDevicesForBroker(id);
46653
- } catch (err) {
46654
- this.ctx.logger.warn("Ecowitt integration→broker: broker cleanup failed", { meta: {
46655
- brokerId: id,
46656
- error: errMsg(err)
46657
- } });
46658
- }
46659
- const nextBrokers = this.config.brokers.filter((b) => !toRemove.includes(b.id));
46660
- await this.updateGlobalSettings({ brokers: nextBrokers });
46661
- } catch (err) {
46662
- this.ctx.logger.warn("Ecowitt integration→broker reconcile failed", { meta: { error: errMsg(err) } });
46663
- }
46664
- }
46665
- subscribeIntegrationLifecycle() {
46666
- const handler = (event) => {
46667
- const addonId = event.data["addonId"];
46668
- if (typeof addonId === "string" && addonId !== this.ctx.id) return;
46669
- this.reconcileIntegrationsToBrokers();
46670
- };
46671
- this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationEnabled }, handler);
46672
- this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationDisabled }, handler);
46673
- this.ctx.eventBus.subscribe({ category: EventCategory.IntegrationDeleted }, handler);
46674
- }
46675
- buildAdoptionProvider() {
46676
- return buildEcowittAdoptionProvider({
46677
- registry: {
46678
- getFacadeForBroker: (id) => this.requireRegistry().get(id) !== null ? { getSensors: () => ecowittFacades.getSensors(id) } : null,
46679
- list: () => this.requireRegistry().list().map((b) => ({
46680
- id: b.id,
46681
- name: b.name
46682
- }))
46683
- },
46684
- logger: this.ctx.logger,
46685
- getBrokerIdForIntegration: async (id) => {
46686
- const brokerId = (await this.ctx.api.integrations.getSettings.query({ id }))["brokerId"];
46687
- if (typeof brokerId !== "string") throw new Error(`integration ${id} has no linked brokerId`);
46688
- return brokerId;
46485
+ setGatewayOnline(online) {
46486
+ if (this.online === online) return;
46487
+ this.markOnline(online);
46488
+ this.ctx.logger.info("Ecowitt gateway " + (online ? "online" : "offline"), { tags: { deviceId: this.id } });
46489
+ this.setContainersOnline(online).catch(() => {});
46490
+ }
46491
+ async setContainersOnline(online) {
46492
+ const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
46493
+ for (const child of children) {
46494
+ if (child.type !== DeviceType.Container) continue;
46495
+ if (child.online === online) continue;
46496
+ child.markOnline(online);
46497
+ }
46498
+ }
46499
+ /** On each snapshot: cache sensors, re-derive discovery, additively reconcile
46500
+ * every adopted group Container's `sensors[]`. */
46501
+ handleSensorsChanged(sensors) {
46502
+ this.latestSensors = sensors;
46503
+ this.refreshDiscoveryFromClient().catch(() => {});
46504
+ this.reconcileGroupSensors(sensors).catch((err) => {
46505
+ this.ctx.logger.warn("Ecowitt gateway: sensor reconcile failed", { meta: { error: errMsg(err) } });
46506
+ });
46507
+ ecowittFacades.emitSnapshot(this.stableId);
46508
+ }
46509
+ registerDeviceDiscovery() {
46510
+ this.ctx.registerNativeCap(deviceDiscoveryCapability, {
46511
+ getStatus: async ({ deviceId }) => {
46512
+ if (deviceId !== this.id) return null;
46513
+ return this.runtimeState.getCapState("device-discovery") ?? null;
46689
46514
  },
46690
- listAdoptedEcowitt: async () => {
46691
- const reg = this.ctx.kernel.deviceRegistry;
46692
- const devices = this.ctx.kernel.devices;
46693
- if (!reg || !devices) return [];
46694
- const out = [];
46695
- for (const d of reg.getAllForAddon(this.addonId)) {
46696
- if (d.parentDeviceId !== null) continue;
46697
- const config = await devices.loadConfig(d.id).catch(() => ({}));
46698
- out.push({
46699
- id: d.id,
46700
- config
46701
- });
46702
- }
46703
- return out;
46515
+ listDiscovered: async ({ deviceId }) => {
46516
+ if (deviceId !== this.id) return [];
46517
+ return this.runtimeState.getCapState("device-discovery")?.discovered ?? [];
46704
46518
  },
46705
- adoptGateway: async ({ brokerId, integrationId, name }) => {
46706
- const devices = this.ctx.kernel.devices;
46707
- if (!devices) throw new Error("ecowitt adopt: kernel.devices unavailable");
46708
- const config = {
46709
- brokerId,
46710
- sensors: ecowittFacades.getSensors(brokerId).map((s) => ({
46711
- sensorId: s.id,
46712
- quantity: s.quantity,
46713
- ...s.channel !== void 0 ? { channel: s.channel } : {},
46714
- ...s.name !== void 0 ? { name: s.name } : {}
46715
- })),
46716
- system: "ecowitt",
46717
- integrationId,
46718
- name
46719
- };
46720
- const stableId = this.generateStableId(DeviceType.Container, config);
46721
- const device = await devices.create(stableId, EcowittContainerDevice, config, null, {
46722
- type: DeviceType.Container,
46723
- name,
46724
- integrationId
46725
- });
46726
- const children = await devices.getChildren(device.id);
46727
- return {
46728
- deviceId: device.id,
46729
- accessoryDeviceIds: children.map((c) => c.id)
46730
- };
46519
+ refreshDiscovery: async ({ deviceId }) => {
46520
+ if (deviceId !== this.id) return [];
46521
+ await this.refreshDiscoveryFromClient();
46522
+ return this.runtimeState.getCapState("device-discovery")?.discovered ?? [];
46731
46523
  },
46732
- removeDevice: async (id) => {
46733
- await this.ctx.kernel.devices?.remove(id);
46524
+ adoptDevice: async ({ deviceId, childNativeId, name }) => {
46525
+ if (deviceId !== this.id) throw new Error(`adoptDevice: deviceId mismatch — got ${deviceId}, expected ${this.id}`);
46526
+ return this.adoptGroupContainer(childNativeId, name);
46734
46527
  },
46735
- findDeviceConfig: async (id) => {
46736
- const devices = this.ctx.kernel.devices;
46737
- if (!devices) return null;
46738
- return devices.loadConfig(id).catch(() => null);
46528
+ releaseDevice: async ({ deviceId, childDeviceId }) => {
46529
+ if (deviceId !== this.id) return;
46530
+ await this.releaseGroupContainer(childDeviceId);
46739
46531
  }
46740
46532
  });
46533
+ this.setCapSlice(deviceDiscoveryCapability, {
46534
+ discovered: [],
46535
+ lastDiscoveryAt: null,
46536
+ lastError: null,
46537
+ lastFetchedAt: 0
46538
+ });
46741
46539
  }
46742
- globalSettingsSchema() {
46743
- return this.schema({ sections: [{
46744
- id: "ecowitt-broker",
46745
- title: "Ecowitt gateway",
46746
- description: "Ecowitt gateways are managed in the External systems → Brokers tab.",
46747
- columns: 1,
46748
- fields: [{
46749
- type: "info",
46750
- key: "brokerHelp",
46751
- label: "Gateways are managed separately",
46752
- content: "This integration links to an Ecowitt gateway broker. Add, edit, or remove gateways from External systems → Brokers. The integration only stores a reference to its broker."
46753
- }]
46754
- }] });
46755
- }
46756
- async supportsManualCreation() {
46757
- return false;
46758
- }
46759
- async onGetCreationSchema(_type) {
46760
- return null;
46540
+ /** Enumerate the three gateway-group Container candidates from the live client
46541
+ * snapshot, flag `alreadyAdopted` per group, persist into the slice. */
46542
+ async refreshDiscoveryFromClient() {
46543
+ let lastError = null;
46544
+ let discovered = [];
46545
+ try {
46546
+ const sensors = ecowittFacades.get(this.stableId)?.getSensors() ?? this.latestSensors;
46547
+ const adoptedByGroup = await this.adoptedContainerIdByGroup();
46548
+ discovered = buildEcowittGatewayCandidates({
46549
+ gatewayId: this.stableId,
46550
+ gatewayName: this.name,
46551
+ sensors,
46552
+ adoptedDeviceIdByGroup: adoptedByGroup
46553
+ });
46554
+ } catch (err) {
46555
+ lastError = errMsg(err);
46556
+ this.ctx.logger.warn("Ecowitt gateway discovery refresh failed", { meta: { error: lastError } });
46557
+ }
46558
+ this.runtimeState.setCapState(deviceDiscoveryCapability.name, {
46559
+ discovered,
46560
+ lastDiscoveryAt: Date.now(),
46561
+ lastError,
46562
+ lastFetchedAt: Date.now()
46563
+ });
46761
46564
  }
46762
- async onCreateDevice(_type, _config) {
46763
- throw new Error("Ecowitt gateways are adopted, not created manually");
46565
+ /** Map each device group → the adopted group Container's device id (null when
46566
+ * not adopted), by walking this gateway's direct children. */
46567
+ async adoptedContainerIdByGroup() {
46568
+ const out = {};
46569
+ const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
46570
+ for (const child of children) {
46571
+ if (child.type !== DeviceType.Container) continue;
46572
+ const cfg = await this.ctx.devices.loadConfig(child.id).catch(() => ({}));
46573
+ if (cfg["system"] !== "ecowitt") continue;
46574
+ out[configDeviceGroup(cfg)] = child.id;
46575
+ }
46576
+ return out;
46764
46577
  }
46765
- setBrokerDevicesOnline(brokerId, online) {
46766
- const reg = this.ctx.kernel.deviceRegistry;
46767
- if (!reg) return;
46768
- const n = setBrokerDevicesOnline(reg.getAllForAddon(this.addonId), brokerId, online);
46769
- if (n > 0) this.ctx.logger.info("Ecowitt: broker devices " + (online ? "online" : "offline"), { meta: {
46770
- brokerId,
46771
- count: n
46772
- } });
46578
+ /** Promote a discovered group candidate to a real group Container child. */
46579
+ async adoptGroupContainer(childNativeId, nameOverride) {
46580
+ const group = ECOWITT_DEVICE_GROUPS.find((g) => groupNativeId(this.stableId, g) === childNativeId);
46581
+ if (group === void 0) throw new Error(`adoptDevice: ${childNativeId} does not match any gateway group`);
46582
+ const existingId = (await this.adoptedContainerIdByGroup())[group];
46583
+ if (typeof existingId === "number") {
46584
+ const existing = (await this.ctx.devices.getAll()).find((d) => d.id === existingId);
46585
+ if (existing) return {
46586
+ deviceId: existing.id,
46587
+ stableId: existing.stableId
46588
+ };
46589
+ }
46590
+ const sensors = (ecowittFacades.get(this.stableId)?.getSensors() ?? this.latestSensors).filter((s) => deviceGroupForSensor(s.category, s.channel) === group).map(sensorToEntry);
46591
+ const name = nameOverride ?? `${this.name} — ${group}`;
46592
+ const config = {
46593
+ gatewayId: this.stableId,
46594
+ deviceGroup: group,
46595
+ sensors,
46596
+ system: "ecowitt",
46597
+ name
46598
+ };
46599
+ const stableId = `${this.stableId}:${group}`;
46600
+ const created = await this.ctx.devices.create(stableId, EcowittContainerDevice, config, this.id, {
46601
+ type: DeviceType.Container,
46602
+ name
46603
+ });
46604
+ this.ctx.logger.info("Ecowitt gateway: adopted group container", {
46605
+ tags: { deviceId: created.id },
46606
+ meta: {
46607
+ group,
46608
+ stableId,
46609
+ sensorCount: sensors.length
46610
+ }
46611
+ });
46612
+ await this.refreshDiscoveryFromClient().catch(() => {});
46613
+ return {
46614
+ deviceId: created.id,
46615
+ stableId
46616
+ };
46773
46617
  }
46774
- requireRegistry() {
46775
- if (!this.registry) throw new Error("Ecowitt provider not initialised");
46776
- return this.registry;
46618
+ async releaseGroupContainer(childDeviceId) {
46619
+ const child = (await this.ctx.devices.getAll()).find((d) => d.id === childDeviceId);
46620
+ if (!child || child.parentDeviceId !== this.id) throw new Error(`releaseDevice: ${childDeviceId} is not a child of gateway ${this.id}`);
46621
+ await this.ctx.devices.remove(childDeviceId);
46622
+ await this.refreshDiscoveryFromClient().catch(() => {});
46623
+ }
46624
+ /** Re-derive every adopted group Container's `sensors[]` from the live
46625
+ * snapshot (group-filtered) and re-persist via `applyDerivedSpec` when it
46626
+ * changed. Best-effort. */
46627
+ async reconcileGroupSensors(sensors) {
46628
+ const byGroup = bucketSensorsByGroup(sensors);
46629
+ const children = await this.ctx.devices.getChildren(this.id).catch(() => []);
46630
+ for (const child of children) {
46631
+ if (child.type !== DeviceType.Container) continue;
46632
+ const cfg = await this.ctx.devices.loadConfig(child.id).catch(() => ({}));
46633
+ if (cfg["system"] !== "ecowitt") continue;
46634
+ const group = configDeviceGroup(cfg);
46635
+ const nextSensors = byGroup.get(group) ?? [];
46636
+ if (sensorsEqual(Array.isArray(cfg["sensors"]) ? cfg["sensors"] : [], nextSensors)) continue;
46637
+ await this.ctx.devices.applyDerivedSpec(child.id, { config: { sensors: nextSensors } });
46638
+ this.ctx.logger.info("Ecowitt gateway: group sensors reconciled", { meta: {
46639
+ deviceId: child.id,
46640
+ group,
46641
+ sensorCount: nextSensors.length
46642
+ } });
46643
+ }
46777
46644
  }
46778
46645
  };
46779
- /** Structural equality of two persisted sensor lists (order-independent by id). */
46646
+ /** Resolve `deviceGroup` from a persisted container config (defaults to 'gateway'). */
46647
+ function configDeviceGroup(config) {
46648
+ const g = config["deviceGroup"];
46649
+ return ECOWITT_DEVICE_GROUPS.find((group) => group === g) ?? "gateway";
46650
+ }
46651
+ /** Build the persisted sensor entry (incl. self-describing category) from a live Sensor. */
46652
+ function sensorToEntry(s) {
46653
+ return {
46654
+ sensorId: s.id,
46655
+ quantity: s.quantity,
46656
+ ...s.channel !== void 0 ? { channel: s.channel } : {},
46657
+ ...s.name !== void 0 ? { name: s.name } : {},
46658
+ ...s.category !== void 0 ? { category: s.category } : {}
46659
+ };
46660
+ }
46661
+ /** Bucket live sensors into their device group. */
46662
+ function bucketSensorsByGroup(sensors) {
46663
+ const byGroup = /* @__PURE__ */ new Map();
46664
+ for (const group of ECOWITT_DEVICE_GROUPS) byGroup.set(group, []);
46665
+ for (const s of sensors) {
46666
+ const group = deviceGroupForSensor(s.category, s.channel);
46667
+ byGroup.get(group)?.push(sensorToEntry(s));
46668
+ }
46669
+ return byGroup;
46670
+ }
46671
+ /** Structural equality of two persisted sensor lists (order-independent by id + name). */
46780
46672
  function sensorsEqual(a, b) {
46781
46673
  if (a.length !== b.length) return false;
46782
46674
  const aById = /* @__PURE__ */ new Map();
@@ -46794,12 +46686,152 @@ function sensorsEqual(a, b) {
46794
46686
  return true;
46795
46687
  }
46796
46688
  //#endregion
46689
+ //#region src/addon.ts
46690
+ /**
46691
+ * Ecowitt weather-station device-provider addon — `mode: standalone` (the
46692
+ * Reolink pattern). No broker, no device-adoption cap. A gateway is added as a
46693
+ * DEVICE via the manual-creation form: the CONNECTION (transport / host / port /
46694
+ * password OR listener) lives on the gateway DEVICE config. The created gateway
46695
+ * is a {@link DeviceType.Hub} ({@link EcowittGatewayDevice}) that owns its own
46696
+ * live `@apocaliss92/nodewitt` client and registers `device-discovery` to adopt
46697
+ * its own children: up to THREE group {@link DeviceType.Container} children
46698
+ * (gateway / weather-station / temp-sensor-ch1), each fanning out one typed
46699
+ * sensor child per `Sensor.quantity`.
46700
+ *
46701
+ * `instanceMode: multiple` — many gateways may be added.
46702
+ */
46703
+ var EcowittProviderAddon = class extends BaseDeviceProvider {
46704
+ addonId = "provider-ecowitt";
46705
+ providerName = "Ecowitt";
46706
+ deviceClasses = {
46707
+ [DeviceType.Hub]: EcowittGatewayDevice,
46708
+ [DeviceType.Container]: EcowittContainerDevice
46709
+ };
46710
+ constructor() {
46711
+ super({});
46712
+ }
46713
+ async supportsDiscovery() {
46714
+ return true;
46715
+ }
46716
+ async getDiscoveryParamsSchema() {
46717
+ return buildDiscoveryParamsFormSchema();
46718
+ }
46719
+ async discoverDevices(input) {
46720
+ const broadcastAddr = typeof input?.params?.["broadcastAddress"] === "string" ? input.params["broadcastAddress"].trim() : "";
46721
+ const timeoutMs = typeof input?.params?.["timeoutMs"] === "number" ? input.params["timeoutMs"] : void 0;
46722
+ const gateways = await Ecowitt.discover({
46723
+ ...broadcastAddr.length > 0 ? { broadcastAddr } : {},
46724
+ ...timeoutMs !== void 0 ? { timeoutMs } : {}
46725
+ });
46726
+ this.ctx.logger.info("Ecowitt discovery complete", { meta: {
46727
+ count: gateways.length,
46728
+ broadcastAddr: broadcastAddr.length > 0 ? broadcastAddr : "local"
46729
+ } });
46730
+ return gateways.map((g) => {
46731
+ const displayName = g.model ?? g.name;
46732
+ return {
46733
+ stableId: `ecowitt:${slugifyHost(g.ip)}`,
46734
+ type: DeviceType.Hub,
46735
+ suggestedName: displayName,
46736
+ prefilledConfig: {
46737
+ name: displayName,
46738
+ connection: {
46739
+ transport: "local",
46740
+ host: g.ip
46741
+ }
46742
+ }
46743
+ };
46744
+ });
46745
+ }
46746
+ async adoptDiscoveredDevice(input) {
46747
+ return this.createDevice({
46748
+ type: DeviceType.Hub,
46749
+ config: input.candidate.prefilledConfig
46750
+ });
46751
+ }
46752
+ async supportsManualCreation() {
46753
+ return true;
46754
+ }
46755
+ async onGetCreationSchema(type) {
46756
+ if (type !== DeviceType.Hub) return null;
46757
+ return buildConnectionFormSchema();
46758
+ }
46759
+ async onCreateDevice(type, config) {
46760
+ if (type !== DeviceType.Hub) throw new Error(`Ecowitt provider does not support device type: ${type}`);
46761
+ const name = typeof config["name"] === "string" ? config["name"].trim() : "";
46762
+ if (!name) throw new Error("Gateway name is required");
46763
+ const connection = settingsToEcowittConfig(config);
46764
+ if (connection.transport === "local" && connection.host.trim().length === 0) throw new Error("Gateway host is required for local-poll transport");
46765
+ const stableId = this.generateStableId(DeviceType.Hub, { connection });
46766
+ const manager = new EcowittIntegrationManager({
46767
+ id: stableId,
46768
+ name,
46769
+ connection,
46770
+ logger: this.ctx.logger,
46771
+ onConnected: () => void 0,
46772
+ onDisconnected: () => void 0,
46773
+ onSensorsChanged: () => void 0,
46774
+ onFacadeBuilt: (_id, facade) => ecowittFacades.set(stableId, facade)
46775
+ });
46776
+ try {
46777
+ await manager.start();
46778
+ } catch (err) {
46779
+ this.ctx.logger.warn("Ecowitt create: initial client start failed — device kept", { meta: {
46780
+ stableId,
46781
+ error: errMsg(err)
46782
+ } });
46783
+ }
46784
+ return {
46785
+ meta: {
46786
+ type: DeviceType.Hub,
46787
+ name
46788
+ },
46789
+ config: {
46790
+ connection,
46791
+ system: "ecowitt-gateway"
46792
+ },
46793
+ onAfterCreate: async (device) => {
46794
+ if (device instanceof EcowittGatewayDevice) device.adoptManager(manager);
46795
+ }
46796
+ };
46797
+ }
46798
+ /**
46799
+ * Gateway stableId — derived from the connection (Reolink-style host/identity
46800
+ * key), NOT a broker id. Priority: `stationId` (operator-provided stable id) →
46801
+ * `host` (local transport) → `listen:<port>` (listener transport). Re-adding
46802
+ * the same gateway reuses its persisted row.
46803
+ */
46804
+ generateStableId(_type, config) {
46805
+ const connection = extractConnection(config);
46806
+ const station = typeof connection?.stationId === "string" ? connection.stationId.trim() : "";
46807
+ if (station.length > 0) return `ecowitt:${slugifyHost(station)}`;
46808
+ if (connection?.transport === "local") {
46809
+ const host = connection.host.trim();
46810
+ if (host.length > 0) return `ecowitt:${slugifyHost(host)}`;
46811
+ }
46812
+ if (connection?.transport === "listener") return `ecowitt:listen-${connection.listenPort}`;
46813
+ throw new Error("Ecowitt: gateway resolved neither a station id nor a host/listen endpoint — cannot persist a stable row key.");
46814
+ }
46815
+ };
46816
+ /** Narrow the create-spec config's `connection` field to an {@link EcowittConfig}. */
46817
+ function extractConnection(config) {
46818
+ const raw = config?.["connection"];
46819
+ if (typeof raw !== "object" || raw === null) return null;
46820
+ const transport = raw.transport;
46821
+ if (transport !== "local" && transport !== "listener") return null;
46822
+ return settingsToEcowittConfig(raw);
46823
+ }
46824
+ //#endregion
46825
+ exports.ECOWITT_DEVICE_GROUPS = ECOWITT_DEVICE_GROUPS;
46797
46826
  exports.EcowittProviderAddon = EcowittProviderAddon;
46798
46827
  exports.buildConnectionFormSchema = buildConnectionFormSchema;
46799
- exports.buildEcowittGatewayCandidate = buildEcowittGatewayCandidate;
46828
+ exports.buildEcowittGatewayCandidates = buildEcowittGatewayCandidates;
46800
46829
  exports.capForQuantity = capForQuantity;
46801
- exports.ecowittAddonConfigSchema = ecowittAddonConfigSchema;
46830
+ exports.deviceGroupForSensor = deviceGroupForSensor;
46831
+ exports.deviceGroupLabel = deviceGroupLabel;
46802
46832
  exports.ecowittConfigSchema = ecowittConfigSchema;
46833
+ exports.ecowittGatewaySchema = ecowittGatewaySchema;
46834
+ exports.groupNativeId = groupNativeId;
46803
46835
  exports.sensorLabel = sensorLabel;
46804
46836
  exports.settingsToEcowittConfig = settingsToEcowittConfig;
46805
46837
  exports.valueFieldForCap = valueFieldForCap;