iobroker.teslafi 3.0.0 → 3.0.2
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/README.md +16 -18
- package/build/lib/projectUtils.js +77 -120
- package/build/lib/projectUtils.js.map +1 -1
- package/build/lib/teslafiAPICaller.js +47 -206
- package/build/lib/teslafiAPICaller.js.map +1 -1
- package/build/main.js +1 -31
- package/build/main.js.map +1 -1
- package/io-package.json +27 -27
- package/package.json +16 -17
package/README.md
CHANGED
|
@@ -26,7 +26,11 @@
|
|
|
26
26
|
|
|
27
27
|
[](https://nodei.co/npm/iobroker.teslafi/)
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
## Sentry
|
|
30
|
+
|
|
31
|
+
**This adapter uses Sentry libraries to automatically report exceptions and code errors to the developers.** For more details and for information on how to disable error reporting, see <a href="https://github.com/ioBroker/plugin-sentry#plugin-sentry">Sentry-Plugin Documentation</a>!
|
|
32
|
+
|
|
33
|
+
## ioBroker TeslaFi Adapter – Seamless Tesla Data Integration for Your Smart Home
|
|
30
34
|
|
|
31
35
|
The TeslaFi adapter enables effortless integration of vehicle data from your TeslaFi account into the ioBroker system. Leverage this data to enhance your Tesla experience and optimize home automation workflows.
|
|
32
36
|
|
|
@@ -64,10 +68,6 @@ The adapter is compatible with all Tesla models supported by TeslaFi. A valid Te
|
|
|
64
68
|
|
|
65
69
|
The TeslaFi adapter is actively maintained, and additional features or data categories can be added based on user requests. Feel free to submit your ideas and help improve the adapter for the entire community!
|
|
66
70
|
|
|
67
|
-
## Sentry
|
|
68
|
-
|
|
69
|
-
This adapter employs Sentry libraries to automatically report exceptions and code errors to the developers. For more details and information on how to disable error reporting, please consult the [Sentry-Plugin Documentation](https://github.com/ioBroker/plugin-sentry#plugin-sentry)! Sentry reporting is initiated starting with js-controller 3.0.
|
|
70
|
-
|
|
71
71
|
## Donate
|
|
72
72
|
|
|
73
73
|
<a href="https://www.paypal.com/donate/?hosted_button_id=6EE4YUJRK7UWC"><img src="https://raw.githubusercontent.com/Hombach/ioBroker.teslafi/master/docu/bluePayPal.svg" height="40"></a>
|
|
@@ -79,6 +79,16 @@ If you enjoyed this project — or just feeling generous, consider buying me a b
|
|
|
79
79
|
Placeholder for the next version (at the beginning of the line):
|
|
80
80
|
### **WORK IN PROGRESS**
|
|
81
81
|
-->
|
|
82
|
+
### 3.0.2 (2026-06-19)
|
|
83
|
+
|
|
84
|
+
- (hombach) fixed warnings by adapter checker
|
|
85
|
+
|
|
86
|
+
### 3.0.1 (2026-06-05)
|
|
87
|
+
|
|
88
|
+
- (hombach) upgraded TypeScript to 6.x
|
|
89
|
+
- (hombach) fixed warnings by adapter checker
|
|
90
|
+
- (hombach) updated dependencies
|
|
91
|
+
|
|
82
92
|
### 3.0.0 (2026-05-05)
|
|
83
93
|
|
|
84
94
|
- (copilot) BREAKING: adapter requires node.js >= 22 now
|
|
@@ -96,19 +106,7 @@ If you enjoyed this project — or just feeling generous, consider buying me a b
|
|
|
96
106
|
- (hombach) update axios
|
|
97
107
|
- (hombach) update dependencies
|
|
98
108
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
- (hombach) optimize dependabot config (#209)
|
|
102
|
-
- (hombach) year 2026 changes
|
|
103
|
-
- (hombach) update axios
|
|
104
|
-
- (hombach) update dependencies
|
|
105
|
-
|
|
106
|
-
### 2.0.4 (2025-10-22)
|
|
107
|
-
|
|
108
|
-
- (hombach) upgrade NPM deployment system
|
|
109
|
-
- (hombach) bump dependencies
|
|
110
|
-
|
|
111
|
-
### Old Changes see [CHANGELOG OLD](CHANGELOG_OLD.md)
|
|
109
|
+
[Older changelogs can be found there](CHANGELOG_OLD.md)
|
|
112
110
|
|
|
113
111
|
## License
|
|
114
112
|
|
|
@@ -1,45 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProjectUtils = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* ProjectUtils
|
|
6
|
-
*/
|
|
7
4
|
class ProjectUtils {
|
|
8
5
|
adapter;
|
|
9
|
-
/**
|
|
10
|
-
* constructor
|
|
11
|
-
*
|
|
12
|
-
* @param adapter - ioBroker adapter instance
|
|
13
|
-
*/
|
|
14
6
|
constructor(adapter) {
|
|
15
7
|
this.adapter = adapter;
|
|
16
8
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Retrieves the value of a given state by its name.
|
|
19
|
-
*
|
|
20
|
-
* @param stateName - A string representing the name of the state to retrieve.
|
|
21
|
-
* @returns A Promise that resolves with the value of the state if it exists, otherwise resolves with null.
|
|
22
|
-
*/
|
|
23
9
|
async getStateValue(stateName) {
|
|
24
10
|
try {
|
|
25
11
|
const stateObject = await this.getState(stateName);
|
|
26
|
-
return stateObject?.val ?? null;
|
|
12
|
+
return stateObject?.val ?? null;
|
|
27
13
|
}
|
|
28
14
|
catch (error) {
|
|
29
15
|
this.adapter.log.error(`[getStateValue](${stateName}): ${error}`);
|
|
30
16
|
return null;
|
|
31
17
|
}
|
|
32
18
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Retrieves the state object by its name.
|
|
35
|
-
*
|
|
36
|
-
* @param stateName - A string representing the name of the state to retrieve.
|
|
37
|
-
* @returns A Promise that resolves with the object of the state if it exists, otherwise resolves with null.
|
|
38
|
-
*/
|
|
39
19
|
async getState(stateName) {
|
|
40
20
|
try {
|
|
41
21
|
if (await this.verifyStateAvailable(stateName)) {
|
|
42
|
-
// Get state value, so like: {val: false, ack: true, ts: 1591117034451, �}
|
|
43
22
|
const stateValueObject = await this.adapter.getStateAsync(stateName);
|
|
44
23
|
if (!this.isLikeEmpty(stateValueObject)) {
|
|
45
24
|
return stateValueObject;
|
|
@@ -52,33 +31,20 @@ class ProjectUtils {
|
|
|
52
31
|
return null;
|
|
53
32
|
}
|
|
54
33
|
}
|
|
55
|
-
/**
|
|
56
|
-
* Verifies the availability of a state by its name.
|
|
57
|
-
*
|
|
58
|
-
* @param stateName - A string representing the name of the state to verify.
|
|
59
|
-
* @returns A Promise that resolves with true if the state exists, otherwise resolves with false.
|
|
60
|
-
*/
|
|
61
34
|
async verifyStateAvailable(stateName) {
|
|
62
|
-
const stateObject = await this.adapter.getObjectAsync(stateName);
|
|
35
|
+
const stateObject = await this.adapter.getObjectAsync(stateName);
|
|
63
36
|
if (!stateObject) {
|
|
64
37
|
this.adapter.log.debug(`[verifyStateAvailable](${stateName}): State does not exist.`);
|
|
65
38
|
return false;
|
|
66
39
|
}
|
|
67
40
|
return true;
|
|
68
41
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Get foreign state value
|
|
71
|
-
*
|
|
72
|
-
* @param stateName - Full path to state, like 0_userdata.0.other.isSummer
|
|
73
|
-
* @returns State value, or null if error
|
|
74
|
-
*/
|
|
75
|
-
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
76
42
|
async asyncGetForeignStateVal(stateName) {
|
|
77
43
|
try {
|
|
78
44
|
const stateObject = await this.asyncGetForeignState(stateName);
|
|
79
45
|
if (stateObject == null) {
|
|
80
46
|
return null;
|
|
81
|
-
}
|
|
47
|
+
}
|
|
82
48
|
return stateObject.val;
|
|
83
49
|
}
|
|
84
50
|
catch (error) {
|
|
@@ -86,20 +52,13 @@ class ProjectUtils {
|
|
|
86
52
|
return null;
|
|
87
53
|
}
|
|
88
54
|
}
|
|
89
|
-
/**
|
|
90
|
-
* Get foreign state
|
|
91
|
-
*
|
|
92
|
-
* @param stateName - Full path to state, like 0_userdata.0.other.isSummer
|
|
93
|
-
* @returns State object: {val: false, ack: true, ts: 1591117034451, …}, or null if error
|
|
94
|
-
*/
|
|
95
55
|
async asyncGetForeignState(stateName) {
|
|
96
56
|
try {
|
|
97
|
-
const stateObject = await this.adapter.getForeignObjectAsync(stateName);
|
|
57
|
+
const stateObject = await this.adapter.getForeignObjectAsync(stateName);
|
|
98
58
|
if (!stateObject) {
|
|
99
59
|
throw new Error(`State '${stateName}' does not exist.`);
|
|
100
60
|
}
|
|
101
61
|
else {
|
|
102
|
-
// Get state value, so like: {val: false, ack: true, ts: 1591117034451, …}
|
|
103
62
|
const stateValueObject = await this.adapter.getForeignStateAsync(stateName);
|
|
104
63
|
if (!this.isLikeEmpty(stateValueObject)) {
|
|
105
64
|
return stateValueObject;
|
|
@@ -112,25 +71,9 @@ class ProjectUtils {
|
|
|
112
71
|
return null;
|
|
113
72
|
}
|
|
114
73
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Checks if the given input variable is effectively empty.
|
|
117
|
-
*
|
|
118
|
-
* This method examines the provided `inputVar` to determine if it contains any meaningful data.
|
|
119
|
-
* It performs a series of transformations to strip out whitespace and common punctuation, then checks if the result is an empty string.
|
|
120
|
-
*
|
|
121
|
-
* @param inputVar - The state variable to check, which can be of type `ioBroker.State`, `null`, or `undefined`.
|
|
122
|
-
* @returns A boolean indicating whether the input variable is considered empty (`true` if empty, `false` otherwise).
|
|
123
|
-
*/
|
|
124
74
|
isLikeEmpty(inputVar) {
|
|
125
75
|
if (typeof inputVar !== "undefined" && inputVar !== null) {
|
|
126
|
-
|
|
127
|
-
sTemp = sTemp.replace(/\s+/g, ""); // remove all white spaces
|
|
128
|
-
sTemp = sTemp.replace(/"+/g, ""); // remove all >"<
|
|
129
|
-
sTemp = sTemp.replace(/'+/g, ""); // remove all >'<
|
|
130
|
-
sTemp = sTemp.replace(/\[+/g, ""); // remove all >[<
|
|
131
|
-
sTemp = sTemp.replace(/\]+/g, ""); // remove all >]<
|
|
132
|
-
sTemp = sTemp.replace(/\{+/g, ""); // remove all >{<
|
|
133
|
-
sTemp = sTemp.replace(/\}+/g, ""); // remove all >}<
|
|
76
|
+
const sTemp = JSON.stringify(inputVar).replace(/[\s"'[\]{}]/g, "");
|
|
134
77
|
if (sTemp !== "") {
|
|
135
78
|
return false;
|
|
136
79
|
}
|
|
@@ -138,18 +81,6 @@ class ProjectUtils {
|
|
|
138
81
|
}
|
|
139
82
|
return true;
|
|
140
83
|
}
|
|
141
|
-
/**
|
|
142
|
-
* Checks if a string state exists, creates it if necessary, and updates its value.
|
|
143
|
-
*
|
|
144
|
-
* @param stateName - A string representing the name of the state.
|
|
145
|
-
* @param value - The string value to set for the state.
|
|
146
|
-
* @param description - Optional description for the state (default is "-").
|
|
147
|
-
* @param role - Optional role type for the state (default is "text").
|
|
148
|
-
* @param writeable - Optional boolean indicating if the state should be writeable (default is false).
|
|
149
|
-
* @param dontUpdate - Optional boolean indicating if the state should not be updated if it already exists (default is false).
|
|
150
|
-
* @param forceMode - Optional boolean indicating if the state should be reinitiated if it already exists (default is false).
|
|
151
|
-
* @returns A Promise that resolves when the state is checked, created (if necessary), and updated.
|
|
152
|
-
*/
|
|
153
84
|
async checkAndSetValue(stateName, value, description = "-", role = "text", writeable = false, dontUpdate = false, forceMode = false) {
|
|
154
85
|
if (value?.trim()?.length) {
|
|
155
86
|
const commonObj = {
|
|
@@ -168,22 +99,6 @@ class ProjectUtils {
|
|
|
168
99
|
}
|
|
169
100
|
}
|
|
170
101
|
}
|
|
171
|
-
/**
|
|
172
|
-
* Checks if a number state exists, creates it if necessary, and updates its value.
|
|
173
|
-
*
|
|
174
|
-
* @param stateName - A string representing the name of the state.
|
|
175
|
-
* @param value - The number value to set for the state.
|
|
176
|
-
* @param description - Optional description for the state (default is "-").
|
|
177
|
-
* @param unit - Optional unit string to set for the state (default is undefined).
|
|
178
|
-
* @param role - Optional role type for the state (default is "value").
|
|
179
|
-
* @param writeable - Optional boolean indicating if the state should be writeable (default is false).
|
|
180
|
-
* @param dontUpdate - Optional boolean indicating if the state should not be updated if it already exists (default is false).
|
|
181
|
-
* @param forceMode - Optional boolean indicating if the state should be reinitiated if it already exists (default is false).
|
|
182
|
-
* @param min - Optional number setting allowed value minimum
|
|
183
|
-
* @param max - Optional number setting allowed value maximum
|
|
184
|
-
* @param step - Optional number setting value step
|
|
185
|
-
* @returns A Promise that resolves when the state is checked, created (if necessary), and updated.
|
|
186
|
-
*/
|
|
187
102
|
async checkAndSetValueNumber(stateName, value, description = "-", unit, role = "value", writeable = false, dontUpdate = false, forceMode = false, min, max, step) {
|
|
188
103
|
if (value !== undefined) {
|
|
189
104
|
const commonObj = {
|
|
@@ -193,12 +108,10 @@ class ProjectUtils {
|
|
|
193
108
|
desc: description,
|
|
194
109
|
read: true,
|
|
195
110
|
write: writeable,
|
|
196
|
-
|
|
197
|
-
...(
|
|
198
|
-
|
|
199
|
-
...(
|
|
200
|
-
...((max ?? undefined) ? { max } : {}),
|
|
201
|
-
...((step ?? undefined) ? { step } : {}),
|
|
111
|
+
...(unit != null ? { unit } : {}),
|
|
112
|
+
...(min != null ? { min } : {}),
|
|
113
|
+
...(max != null ? { max } : {}),
|
|
114
|
+
...(step != null ? { step } : {}),
|
|
202
115
|
};
|
|
203
116
|
await (forceMode
|
|
204
117
|
? this.adapter.setObject(stateName, { type: "state", common: commonObj, native: {} })
|
|
@@ -208,18 +121,6 @@ class ProjectUtils {
|
|
|
208
121
|
}
|
|
209
122
|
}
|
|
210
123
|
}
|
|
211
|
-
/**
|
|
212
|
-
* Checks if a boolean state exists, creates it if necessary, and updates its value.
|
|
213
|
-
*
|
|
214
|
-
* @param stateName - A string representing the name of the state.
|
|
215
|
-
* @param value - The boolean value to set for the state.
|
|
216
|
-
* @param description - Optional description for the state (default is "-").
|
|
217
|
-
* @param role - Optional role type for the state (default is "indicator").
|
|
218
|
-
* @param writeable - Optional boolean indicating if the state should be writeable (default is false).
|
|
219
|
-
* @param dontUpdate - Optional boolean indicating if the state should not be updated if it already exists (default is false).
|
|
220
|
-
* @param forceMode - Optional boolean indicating if the state should be overwritten if it already exists (default is false).
|
|
221
|
-
* @returns A Promise that resolves when the state is checked, created (if necessary), and updated.
|
|
222
|
-
*/
|
|
223
124
|
async checkAndSetValueBoolean(stateName, value, description = "-", role = "indicator", writeable = false, dontUpdate = false, forceMode = false) {
|
|
224
125
|
if (value !== undefined && value !== null) {
|
|
225
126
|
const commonObj = {
|
|
@@ -238,18 +139,75 @@ class ProjectUtils {
|
|
|
238
139
|
}
|
|
239
140
|
}
|
|
240
141
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
142
|
+
async checkAndSetFolder(folderObjectName, name, icon = "", forceMode = false) {
|
|
143
|
+
const commonObj = {
|
|
144
|
+
type: "meta.folder",
|
|
145
|
+
name: name ?? folderObjectName.split(".").pop() ?? folderObjectName,
|
|
146
|
+
desc: "",
|
|
147
|
+
};
|
|
148
|
+
if (icon) {
|
|
149
|
+
commonObj.icon = icon;
|
|
150
|
+
}
|
|
151
|
+
await (forceMode
|
|
152
|
+
? this.adapter.setObject(folderObjectName, {
|
|
153
|
+
type: "folder",
|
|
154
|
+
common: commonObj,
|
|
155
|
+
native: {},
|
|
156
|
+
})
|
|
157
|
+
: this.adapter.setObjectNotExistsAsync(folderObjectName, {
|
|
158
|
+
type: "folder",
|
|
159
|
+
common: commonObj,
|
|
160
|
+
native: {},
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
async checkAndSetDevice(deviceObjectName, name, onlineId = "", icon = "", forceMode = false) {
|
|
164
|
+
const commonObj = {
|
|
165
|
+
name: name ?? deviceObjectName.split(".").pop() ?? deviceObjectName,
|
|
166
|
+
desc: "",
|
|
167
|
+
};
|
|
168
|
+
if (onlineId) {
|
|
169
|
+
commonObj.statusStates = {
|
|
170
|
+
onlineId,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
if (icon) {
|
|
174
|
+
commonObj.icon = icon;
|
|
175
|
+
}
|
|
176
|
+
await (forceMode
|
|
177
|
+
? this.adapter.setObject(deviceObjectName, {
|
|
178
|
+
type: "device",
|
|
179
|
+
common: commonObj,
|
|
180
|
+
native: {},
|
|
181
|
+
})
|
|
182
|
+
: this.adapter.setObjectNotExistsAsync(deviceObjectName, {
|
|
183
|
+
type: "device",
|
|
184
|
+
common: commonObj,
|
|
185
|
+
native: {},
|
|
186
|
+
}));
|
|
187
|
+
}
|
|
188
|
+
async checkAndSetChannel(channelObjectName, name, icon = "", forceMode = false) {
|
|
189
|
+
const commonObj = {
|
|
190
|
+
name: name ?? channelObjectName.split(".").pop() ?? channelObjectName,
|
|
191
|
+
desc: "",
|
|
192
|
+
};
|
|
193
|
+
if (icon) {
|
|
194
|
+
commonObj.icon = icon;
|
|
195
|
+
}
|
|
196
|
+
await (forceMode
|
|
197
|
+
? this.adapter.setObject(channelObjectName, {
|
|
198
|
+
type: "channel",
|
|
199
|
+
common: commonObj,
|
|
200
|
+
native: {},
|
|
201
|
+
})
|
|
202
|
+
: this.adapter.setObjectNotExistsAsync(channelObjectName, {
|
|
203
|
+
type: "channel",
|
|
204
|
+
common: commonObj,
|
|
205
|
+
native: {},
|
|
206
|
+
}));
|
|
207
|
+
}
|
|
248
208
|
generateErrorMessage(error, context) {
|
|
249
209
|
let errorMessages = "";
|
|
250
|
-
// Check if error object has an 'errors' property that is an array
|
|
251
210
|
if (error.errors && Array.isArray(error.errors)) {
|
|
252
|
-
// Iterate over the array of errors and concatenate their messages
|
|
253
211
|
for (const err of error.errors) {
|
|
254
212
|
if (errorMessages) {
|
|
255
213
|
errorMessages += ", ";
|
|
@@ -258,12 +216,11 @@ class ProjectUtils {
|
|
|
258
216
|
}
|
|
259
217
|
}
|
|
260
218
|
else if (error.message) {
|
|
261
|
-
errorMessages = error.message;
|
|
219
|
+
errorMessages = error.message;
|
|
262
220
|
}
|
|
263
221
|
else {
|
|
264
|
-
errorMessages = "Unknown error";
|
|
222
|
+
errorMessages = "Unknown error";
|
|
265
223
|
}
|
|
266
|
-
// Construct the final error message string with status, context, and error messages
|
|
267
224
|
return `Error (${error.statusMessage || error.statusText || "Unknown Status"}) occurred during: -${context}- : ${errorMessages}`;
|
|
268
225
|
}
|
|
269
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectUtils.js","sourceRoot":"","sources":["../../src/lib/projectUtils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"projectUtils.js","sourceRoot":"","sources":["../../src/lib/projectUtils.ts"],"names":[],"mappings":";;;AAKA,MAAa,YAAY;IACxB,OAAO,CAAwB;IAO/B,YAAY,OAA8B;QACzC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAQS,KAAK,CAAC,aAAa,CAAC,SAAiB;QAC9C,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACnD,OAAO,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,SAAS,MAAM,KAAc,EAAE,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAQO,KAAK,CAAC,QAAQ,CAAC,SAAiB;QACvC,IAAI,CAAC;YACJ,IAAI,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,CAAC;gBAEhD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBACrE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACzC,OAAO,gBAAgB,CAAC;gBACzB,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,IAAI,CAAC,CAAC;YACvE,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,SAAS,MAAM,KAAc,EAAE,CAAC,CAAC;YAC3E,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAQO,KAAK,CAAC,oBAAoB,CAAC,SAAiB;QACnD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,SAAS,0BAA0B,CAAC,CAAC;YACtF,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IASD,KAAK,CAAC,uBAAuB,CAAC,SAAiB;QAC9C,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC/D,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAC;YACb,CAAC;YACD,OAAO,WAAW,CAAC,GAAG,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,SAAS,MAAM,KAAc,EAAE,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAQO,KAAK,CAAC,oBAAoB,CAAC,SAAiB;QACnD,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;YACxE,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,mBAAmB,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBAEP,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;gBAC5E,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBACzC,OAAO,gBAAgB,CAAC;gBACzB,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,IAAI,CAAC,CAAC;YACvE,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,SAAS,MAAM,KAAc,EAAE,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAWO,WAAW,CAAC,QAA2C;QAC9D,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACnE,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBAClB,OAAO,KAAK,CAAC;YACd,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAcD,KAAK,CAAC,gBAAgB,CACrB,SAAiB,EACjB,KAAa,EACb,WAAW,GAAG,GAAG,EACjB,IAAI,GAAG,MAAM,EACb,SAAS,GAAG,KAAK,EACjB,UAAU,GAAG,KAAK,EAClB,SAAS,GAAG,KAAK;QAEjB,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAyB;gBACvC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS;gBAC7C,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,SAAS;aAChB,CAAC;YACF,MAAM,CAAC,SAAS;gBACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;gBACrF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAEtG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;QACF,CAAC;IACF,CAAC;IAkBD,KAAK,CAAC,sBAAsB,CAC3B,SAAiB,EACjB,KAAa,EACb,WAAW,GAAG,GAAG,EACjB,IAAa,EACb,IAAI,GAAG,OAAO,EACd,SAAS,GAAG,KAAK,EACjB,UAAU,GAAG,KAAK,EAClB,SAAS,GAAG,KAAK,EACjB,GAAY,EACZ,GAAY,EACZ,IAAa;QAEb,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,SAAS,GAAyB;gBACvC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS;gBAC7C,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,SAAS;gBAChB,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjC,CAAC;YAEF,MAAM,CAAC,SAAS;gBACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;gBACrF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAEtG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;QACF,CAAC;IACF,CAAC;IAcD,KAAK,CAAC,uBAAuB,CAC5B,SAAiB,EACjB,KAAc,EACd,WAAW,GAAG,GAAG,EACjB,IAAI,GAAG,WAAW,EAClB,SAAS,GAAG,KAAK,EACjB,UAAU,GAAG,KAAK,EAClB,SAAS,GAAG,KAAK;QAEjB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAyB;gBACvC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS;gBAC7C,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,SAAS;aAChB,CAAC;YAEF,MAAM,CAAC,SAAS;gBACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;gBACrF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAEtG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;QACF,CAAC;IACF,CAAC;IAWD,KAAK,CAAC,iBAAiB,CAAC,gBAAwB,EAAE,IAAa,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,GAAG,KAAK;QAC5F,MAAM,SAAS,GAAwB;YACtC,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,gBAAgB;YACnE,IAAI,EAAE,EAAE;SACR,CAAC;QACF,IAAI,IAAI,EAAE,CAAC;YACV,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,SAAS;YACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE;gBACzC,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;aACV,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,gBAAgB,EAAE;gBACvD,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;aACV,CAAC,CAAC,CAAC;IACP,CAAC;IAYD,KAAK,CAAC,iBAAiB,CAAC,gBAAwB,EAAE,IAAa,EAAE,QAAQ,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,GAAG,KAAK;QAC3G,MAAM,SAAS,GAA0B;YACxC,IAAI,EAAE,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,gBAAgB;YACnE,IAAI,EAAE,EAAE;SACR,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACd,SAAS,CAAC,YAAY,GAAG;gBACxB,QAAQ;aACR,CAAC;QACH,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACV,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,SAAS;YACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,EAAE;gBACzC,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;aACV,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,gBAAgB,EAAE;gBACvD,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;aACV,CAAC,CAAC,CAAC;IACP,CAAC;IAWD,KAAK,CAAC,kBAAkB,CAAC,iBAAyB,EAAE,IAAa,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,GAAG,KAAK;QAC9F,MAAM,SAAS,GAA2B;YACzC,IAAI,EAAE,IAAI,IAAI,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,iBAAiB;YACrE,IAAI,EAAE,EAAE;SACR,CAAC;QACF,IAAI,IAAI,EAAE,CAAC;YACV,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,SAAS;YACf,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,EAAE;gBAC1C,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;aACV,CAAC;YACH,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC,iBAAiB,EAAE;gBACxD,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,EAAE;aACV,CAAC,CAAC,CAAC;IACP,CAAC;IASM,oBAAoB,CAAC,KAAU,EAAE,OAAe;QACtD,IAAI,aAAa,GAAG,EAAE,CAAC;QAEvB,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAEjD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,aAAa,EAAE,CAAC;oBACnB,aAAa,IAAI,IAAI,CAAC;gBACvB,CAAC;gBACD,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC;YAC9B,CAAC;QACF,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1B,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,aAAa,GAAG,eAAe,CAAC;QACjC,CAAC;QAED,OAAO,UAAU,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,UAAU,IAAI,gBAAgB,uBAAuB,OAAO,OAAO,aAAa,EAAE,CAAC;IAClI,CAAC;CACD;AAnYD,oCAmYC"}
|