@cranberry-money/shared-utils 8.23.412 → 8.23.414
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/address.d.ts +4 -6
- package/dist/address.d.ts.map +1 -1
- package/dist/address.js +6 -100
- package/dist/address.js.map +1 -1
- package/dist/formatting-labels.d.ts +3 -0
- package/dist/formatting-labels.d.ts.map +1 -0
- package/dist/formatting-labels.js +26 -0
- package/dist/formatting-labels.js.map +1 -0
- package/dist/formatting.d.ts +0 -130
- package/dist/formatting.d.ts.map +1 -1
- package/dist/formatting.js +4 -203
- package/dist/formatting.js.map +1 -1
- package/dist/index.d.ts +9 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -33
- package/dist/index.js.map +1 -1
- package/dist/phoneFormatting.d.ts +2 -20
- package/dist/phoneFormatting.d.ts.map +1 -1
- package/dist/phoneFormatting.js +11 -143
- package/dist/phoneFormatting.js.map +1 -1
- package/dist/user-validation.d.ts +1 -2
- package/dist/user-validation.d.ts.map +1 -1
- package/dist/user-validation.js +10 -59
- package/dist/user-validation.js.map +1 -1
- package/dist/user-verification.d.ts +2 -39
- package/dist/user-verification.d.ts.map +1 -1
- package/dist/user-verification.js +11 -58
- package/dist/user-verification.js.map +1 -1
- package/dist/validation.d.ts +1 -3
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +10 -47
- package/dist/validation.js.map +1 -1
- package/package.json +3 -3
- package/dist/badges.d.ts +0 -2
- package/dist/badges.d.ts.map +0 -1
- package/dist/badges.js +0 -2
- package/dist/badges.js.map +0 -1
- package/dist/portfolio.d.ts +0 -12
- package/dist/portfolio.d.ts.map +0 -1
- package/dist/portfolio.js +0 -37
- package/dist/portfolio.js.map +0 -1
- package/dist/user-preferences.d.ts +0 -28
- package/dist/user-preferences.d.ts.map +0 -1
- package/dist/user-preferences.js +0 -88
- package/dist/user-preferences.js.map +0 -1
package/dist/badges.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"badges.d.ts","sourceRoot":"","sources":["../src/badges.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC"}
|
package/dist/badges.js
DELETED
package/dist/badges.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"badges.js","sourceRoot":"","sources":["../src/badges.ts"],"names":[],"mappings":""}
|
package/dist/portfolio.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { AssetAllocation } from '@cranberry-money/shared-types';
|
|
2
|
-
export declare function formatPortfolioValue(value: string | number): string;
|
|
3
|
-
/**
|
|
4
|
-
* Calculate portfolio return percentage
|
|
5
|
-
*/
|
|
6
|
-
export declare function calculateReturnPercentage(marketValue: string | number, transfersIn: string | number, transfersOut: string | number): number;
|
|
7
|
-
/**
|
|
8
|
-
* Parse numeric value from string or number
|
|
9
|
-
*/
|
|
10
|
-
export declare function parseNumericValue(value: string | number | undefined | null): number;
|
|
11
|
-
export declare const validateAllocations: (allocations: readonly AssetAllocation[]) => boolean;
|
|
12
|
-
//# sourceMappingURL=portfolio.d.ts.map
|
package/dist/portfolio.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"portfolio.d.ts","sourceRoot":"","sources":["../src/portfolio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIrE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAMnE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,YAAY,EAAE,MAAM,GAAG,MAAM,GAC5B,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,CAGnF;AAED,eAAO,MAAM,mBAAmB,GAAI,aAAa,SAAS,eAAe,EAAE,KAAG,OAM7E,CAAC"}
|
package/dist/portfolio.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { LOCALE_AUSTRALIA, DEFAULT_NUMERIC_ZERO, DEFAULT_EMPTY_STRING, AUD } from '@cranberry-money/shared-constants';
|
|
2
|
-
import { NUMBER_FORMAT_OPTIONS_CURRENCY } from './formatting';
|
|
3
|
-
export function formatPortfolioValue(value) {
|
|
4
|
-
const numValue = typeof value === 'string' ? parseFloat(value) : value;
|
|
5
|
-
return new Intl.NumberFormat(LOCALE_AUSTRALIA, {
|
|
6
|
-
...NUMBER_FORMAT_OPTIONS_CURRENCY,
|
|
7
|
-
currency: AUD,
|
|
8
|
-
}).format(numValue);
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Calculate portfolio return percentage
|
|
12
|
-
*/
|
|
13
|
-
export function calculateReturnPercentage(marketValue, transfersIn, transfersOut) {
|
|
14
|
-
const current = typeof marketValue === 'string' ? parseFloat(marketValue || DEFAULT_EMPTY_STRING) : marketValue;
|
|
15
|
-
const inflows = typeof transfersIn === 'string' ? parseFloat(transfersIn || DEFAULT_EMPTY_STRING) : transfersIn;
|
|
16
|
-
const outflows = typeof transfersOut === 'string' ? parseFloat(transfersOut || DEFAULT_EMPTY_STRING) : transfersOut;
|
|
17
|
-
const invested = inflows - outflows;
|
|
18
|
-
if (invested <= DEFAULT_NUMERIC_ZERO)
|
|
19
|
-
return DEFAULT_NUMERIC_ZERO;
|
|
20
|
-
const gain = current - invested;
|
|
21
|
-
return (gain / invested) * 100;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Parse numeric value from string or number
|
|
25
|
-
*/
|
|
26
|
-
export function parseNumericValue(value) {
|
|
27
|
-
if (value === undefined || value === null)
|
|
28
|
-
return DEFAULT_NUMERIC_ZERO;
|
|
29
|
-
return typeof value === 'string' ? parseFloat(value || DEFAULT_EMPTY_STRING) : value;
|
|
30
|
-
}
|
|
31
|
-
export const validateAllocations = (allocations) => {
|
|
32
|
-
const totalPercentage = allocations.reduce((sum, allocation) => {
|
|
33
|
-
return sum + (allocation.percentage ? parseFloat(allocation.percentage) : 0);
|
|
34
|
-
}, 0);
|
|
35
|
-
return Math.abs(totalPercentage - 100) < 0.01;
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=portfolio.js.map
|
package/dist/portfolio.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../src/portfolio.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AACtH,OAAO,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,KAAsB;IACzD,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvE,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE;QAC7C,GAAG,8BAA8B;QACjC,QAAQ,EAAE,GAAG;KACd,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAA4B,EAC5B,WAA4B,EAC5B,YAA6B;IAE7B,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAChH,MAAM,OAAO,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAChH,MAAM,QAAQ,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAEpH,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,IAAI,QAAQ,IAAI,oBAAoB;QAAE,OAAO,oBAAoB,CAAC;IAElE,MAAM,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;IAChC,OAAO,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAyC;IACzE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,oBAAoB,CAAC;IACvE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,WAAuC,EAAW,EAAE;IACtF,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;QAC7D,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC,EAAE,CAAC,CAAC,CAAC;IAEN,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC,CAAC"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { UserPreferences, UserPreferencesValidationError } from '@cranberry-money/shared-types';
|
|
2
|
-
export declare const validateUserPreferences: (preferences: Partial<UserPreferences>, userAccounts?: string[], userPortfolios?: {
|
|
3
|
-
uuid: string;
|
|
4
|
-
userAccountUuid: string;
|
|
5
|
-
}[]) => {
|
|
6
|
-
isValid: boolean;
|
|
7
|
-
errors?: UserPreferencesValidationError;
|
|
8
|
-
};
|
|
9
|
-
export declare const hasUserPreferences: (preferences: UserPreferences | null) => boolean;
|
|
10
|
-
export declare const getUserPreferencesSummary: (preferences: UserPreferences | null) => string;
|
|
11
|
-
export declare const formatUserPreferencesForDisplay: (preferences: UserPreferences | null) => {
|
|
12
|
-
hasPreferences: boolean;
|
|
13
|
-
favoriteAccount: string | null;
|
|
14
|
-
favoritePortfolio: string | null;
|
|
15
|
-
summary: string;
|
|
16
|
-
};
|
|
17
|
-
export declare const getAvailablePortfoliosForAccount: (userAccountUuid: string, allPortfolios: {
|
|
18
|
-
uuid: string;
|
|
19
|
-
userAccountUuid: string;
|
|
20
|
-
name: string;
|
|
21
|
-
}[]) => {
|
|
22
|
-
uuid: string;
|
|
23
|
-
name: string;
|
|
24
|
-
}[];
|
|
25
|
-
export declare const isValidUserPreferencesUpdate: (currentPreferences: UserPreferences | null, updates: Partial<UserPreferences>) => boolean;
|
|
26
|
-
export declare const getUserPreferencesCacheKey: (userProfileUuid: string) => string;
|
|
27
|
-
export declare const sanitizeUserPreferencesInput: (input: unknown) => Partial<UserPreferences>;
|
|
28
|
-
//# sourceMappingURL=user-preferences.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-preferences.d.ts","sourceRoot":"","sources":["../src/user-preferences.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAGrG,eAAO,MAAM,uBAAuB,GAClC,aAAa,OAAO,CAAC,eAAe,CAAC,EACrC,eAAc,MAAM,EAAO,EAC3B,iBAAgB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,EAAO,KAC/D;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,8BAA8B,CAAA;CA2B7D,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,aAAa,eAAe,GAAG,IAAI,KAAG,OAGxE,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,aAAa,eAAe,GAAG,IAAI,KAAG,MAc/E,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,aAAa,eAAe,GAAG,IAAI;;;;;CAOlF,CAAC;AAEF,eAAO,MAAM,gCAAgC,GAC3C,iBAAiB,MAAM,EACvB,eAAe;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KACvE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAIhC,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,oBAAoB,eAAe,GAAG,IAAI,EAC1C,SAAS,OAAO,CAAC,eAAe,CAAC,KAChC,OAWF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,iBAAiB,MAAM,KAAG,MAEpE,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,OAAO,OAAO,KAAG,OAAO,CAAC,eAAe,CAoBpF,CAAC"}
|
package/dist/user-preferences.js
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { USER_PREFERENCES_ERROR_MESSAGES } from '@cranberry-money/shared-constants';
|
|
2
|
-
export const validateUserPreferences = (preferences, userAccounts = [], userPortfolios = []) => {
|
|
3
|
-
const errors = {};
|
|
4
|
-
if (preferences.favoritePortfolio && !preferences.favoriteAccount) {
|
|
5
|
-
errors.favoriteAccount = USER_PREFERENCES_ERROR_MESSAGES.FAVORITE_ACCOUNT_REQUIRED_FOR_PORTFOLIO;
|
|
6
|
-
}
|
|
7
|
-
if (preferences.favoriteAccount && !userAccounts.includes(preferences.favoriteAccount)) {
|
|
8
|
-
errors.favoriteAccount = USER_PREFERENCES_ERROR_MESSAGES.FAVORITE_ACCOUNT_NOT_OWNED;
|
|
9
|
-
}
|
|
10
|
-
if (preferences.favoritePortfolio) {
|
|
11
|
-
const portfolioExists = userPortfolios.some((p) => p.uuid === preferences.favoritePortfolio);
|
|
12
|
-
if (!portfolioExists) {
|
|
13
|
-
errors.favoritePortfolio = USER_PREFERENCES_ERROR_MESSAGES.FAVORITE_PORTFOLIO_NOT_OWNED;
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
const portfolio = userPortfolios.find((p) => p.uuid === preferences.favoritePortfolio);
|
|
17
|
-
if (portfolio && preferences.favoriteAccount && portfolio.userAccountUuid !== preferences.favoriteAccount) {
|
|
18
|
-
errors.favoritePortfolio = USER_PREFERENCES_ERROR_MESSAGES.FAVORITE_PORTFOLIO_ACCOUNT_MISMATCH;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return {
|
|
23
|
-
isValid: Object.keys(errors).length === 0,
|
|
24
|
-
errors: Object.keys(errors).length > 0 ? errors : undefined,
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
export const hasUserPreferences = (preferences) => {
|
|
28
|
-
if (!preferences)
|
|
29
|
-
return false;
|
|
30
|
-
return Boolean(preferences.favoriteAccount || preferences.favoritePortfolio);
|
|
31
|
-
};
|
|
32
|
-
export const getUserPreferencesSummary = (preferences) => {
|
|
33
|
-
if (!preferences || !hasUserPreferences(preferences))
|
|
34
|
-
return 'No preferences set';
|
|
35
|
-
const parts = [];
|
|
36
|
-
if (preferences.favoriteAccount) {
|
|
37
|
-
parts.push(`Account: ${preferences.favoriteAccount}`);
|
|
38
|
-
}
|
|
39
|
-
if (preferences.favoritePortfolio) {
|
|
40
|
-
parts.push(`Portfolio: ${preferences.favoritePortfolio}`);
|
|
41
|
-
}
|
|
42
|
-
return parts.length > 0 ? parts.join(', ') : 'No preferences set';
|
|
43
|
-
};
|
|
44
|
-
export const formatUserPreferencesForDisplay = (preferences) => {
|
|
45
|
-
return {
|
|
46
|
-
hasPreferences: hasUserPreferences(preferences),
|
|
47
|
-
favoriteAccount: preferences?.favoriteAccount || null,
|
|
48
|
-
favoritePortfolio: preferences?.favoritePortfolio || null,
|
|
49
|
-
summary: getUserPreferencesSummary(preferences),
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
export const getAvailablePortfoliosForAccount = (userAccountUuid, allPortfolios) => {
|
|
53
|
-
return allPortfolios
|
|
54
|
-
.filter((portfolio) => portfolio.userAccountUuid === userAccountUuid)
|
|
55
|
-
.map(({ uuid, name }) => ({ uuid, name }));
|
|
56
|
-
};
|
|
57
|
-
export const isValidUserPreferencesUpdate = (currentPreferences, updates) => {
|
|
58
|
-
if (!updates || Object.keys(updates).length === 0)
|
|
59
|
-
return false;
|
|
60
|
-
if (!currentPreferences) {
|
|
61
|
-
return Boolean(updates.favoriteAccount || updates.favoritePortfolio);
|
|
62
|
-
}
|
|
63
|
-
return (updates.favoriteAccount !== currentPreferences.favoriteAccount ||
|
|
64
|
-
updates.favoritePortfolio !== currentPreferences.favoritePortfolio);
|
|
65
|
-
};
|
|
66
|
-
export const getUserPreferencesCacheKey = (userProfileUuid) => {
|
|
67
|
-
return `user_preferences_${userProfileUuid}`;
|
|
68
|
-
};
|
|
69
|
-
export const sanitizeUserPreferencesInput = (input) => {
|
|
70
|
-
const sanitized = {};
|
|
71
|
-
if (input && typeof input === 'object') {
|
|
72
|
-
const inputObj = input;
|
|
73
|
-
if (typeof inputObj.favoriteAccount === 'string' && inputObj.favoriteAccount.trim()) {
|
|
74
|
-
sanitized.favoriteAccount = inputObj.favoriteAccount.trim();
|
|
75
|
-
}
|
|
76
|
-
else if (inputObj.favoriteAccount === null || inputObj.favoriteAccount === '') {
|
|
77
|
-
sanitized.favoriteAccount = null;
|
|
78
|
-
}
|
|
79
|
-
if (typeof inputObj.favoritePortfolio === 'string' && inputObj.favoritePortfolio.trim()) {
|
|
80
|
-
sanitized.favoritePortfolio = inputObj.favoritePortfolio.trim();
|
|
81
|
-
}
|
|
82
|
-
else if (inputObj.favoritePortfolio === null || inputObj.favoritePortfolio === '') {
|
|
83
|
-
sanitized.favoritePortfolio = null;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return sanitized;
|
|
87
|
-
};
|
|
88
|
-
//# sourceMappingURL=user-preferences.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user-preferences.js","sourceRoot":"","sources":["../src/user-preferences.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,WAAqC,EACrC,eAAyB,EAAE,EAC3B,iBAA8D,EAAE,EACD,EAAE;IACjE,MAAM,MAAM,GAAmC,EAAE,CAAC;IAElD,IAAI,WAAW,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;QAClE,MAAM,CAAC,eAAe,GAAG,+BAA+B,CAAC,uCAAuC,CAAC;IACnG,CAAC;IAED,IAAI,WAAW,CAAC,eAAe,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;QACvF,MAAM,CAAC,eAAe,GAAG,+BAA+B,CAAC,0BAA0B,CAAC;IACtF,CAAC;IAED,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAC7F,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,CAAC,iBAAiB,GAAG,+BAA+B,CAAC,4BAA4B,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,iBAAiB,CAAC,CAAC;YACvF,IAAI,SAAS,IAAI,WAAW,CAAC,eAAe,IAAI,SAAS,CAAC,eAAe,KAAK,WAAW,CAAC,eAAe,EAAE,CAAC;gBAC1G,MAAM,CAAC,iBAAiB,GAAG,+BAA+B,CAAC,mCAAmC,CAAC;YACjG,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;QACzC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAmC,EAAW,EAAE;IACjF,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,WAAmC,EAAU,EAAE;IACvF,IAAI,CAAC,WAAW,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;QAAE,OAAO,oBAAoB,CAAC;IAElF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,cAAc,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACpE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,WAAmC,EAAE,EAAE;IACrF,OAAO;QACL,cAAc,EAAE,kBAAkB,CAAC,WAAW,CAAC;QAC/C,eAAe,EAAE,WAAW,EAAE,eAAe,IAAI,IAAI;QACrD,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,IAAI,IAAI;QACzD,OAAO,EAAE,yBAAyB,CAAC,WAAW,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAC9C,eAAuB,EACvB,aAAwE,EACtC,EAAE;IACpC,OAAO,aAAa;SACjB,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,eAAe,KAAK,eAAe,CAAC;SACpE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,kBAA0C,EAC1C,OAAiC,EACxB,EAAE;IACX,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEhE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,CACL,OAAO,CAAC,eAAe,KAAK,kBAAkB,CAAC,eAAe;QAC9D,OAAO,CAAC,iBAAiB,KAAK,kBAAkB,CAAC,iBAAiB,CACnE,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,eAAuB,EAAU,EAAE;IAC5E,OAAO,oBAAoB,eAAe,EAAE,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAc,EAA4B,EAAE;IACvF,MAAM,SAAS,GAA6B,EAAE,CAAC;IAE/C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAgC,CAAC;QAElD,IAAI,OAAO,QAAQ,CAAC,eAAe,KAAK,QAAQ,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;YACpF,SAAS,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAC9D,CAAC;aAAM,IAAI,QAAQ,CAAC,eAAe,KAAK,IAAI,IAAI,QAAQ,CAAC,eAAe,KAAK,EAAE,EAAE,CAAC;YAChF,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC;QACnC,CAAC;QAED,IAAI,OAAO,QAAQ,CAAC,iBAAiB,KAAK,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC;YACxF,SAAS,CAAC,iBAAiB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAClE,CAAC;aAAM,IAAI,QAAQ,CAAC,iBAAiB,KAAK,IAAI,IAAI,QAAQ,CAAC,iBAAiB,KAAK,EAAE,EAAE,CAAC;YACpF,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
|