rhdh-e2e-test-utils 1.0.0 → 1.1.0
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 +652 -56
- package/dist/deployment/keycloak/config/keycloak-values.yaml +94 -0
- package/dist/deployment/keycloak/constants.d.ts +29 -0
- package/dist/deployment/keycloak/constants.d.ts.map +1 -0
- package/dist/deployment/keycloak/constants.js +75 -0
- package/dist/deployment/keycloak/deployment.d.ts +89 -0
- package/dist/deployment/keycloak/deployment.d.ts.map +1 -0
- package/dist/deployment/keycloak/deployment.js +437 -0
- package/dist/deployment/keycloak/index.d.ts +2 -0
- package/dist/deployment/keycloak/index.d.ts.map +1 -0
- package/dist/deployment/keycloak/index.js +1 -0
- package/dist/deployment/keycloak/types.d.ts +59 -0
- package/dist/deployment/keycloak/types.d.ts.map +1 -0
- package/dist/deployment/keycloak/types.js +1 -0
- package/dist/deployment/rhdh/config/auth/guest/app-config.yaml +5 -0
- package/dist/deployment/rhdh/config/auth/keycloak/app-config.yaml +19 -0
- package/dist/deployment/rhdh/config/auth/keycloak/dynamic-plugins.yaml +3 -0
- package/dist/deployment/rhdh/config/auth/keycloak/secrets.yaml +12 -0
- package/dist/deployment/rhdh/config/common/app-config-rhdh.yaml +6 -0
- package/dist/deployment/rhdh/config/common/dynamic-plugins.yaml +3 -0
- package/dist/deployment/rhdh/config/common/rhdh-secrets.yaml +7 -0
- package/dist/deployment/rhdh/config/helm/value_file.yaml +7 -0
- package/dist/deployment/rhdh/config/operator/subscription.yaml +21 -0
- package/dist/deployment/rhdh/constants.d.ts +6 -0
- package/dist/deployment/rhdh/constants.d.ts.map +1 -1
- package/dist/deployment/rhdh/constants.js +17 -5
- package/dist/deployment/rhdh/deployment.d.ts +8 -1
- package/dist/deployment/rhdh/deployment.d.ts.map +1 -1
- package/dist/deployment/rhdh/deployment.js +47 -39
- package/dist/deployment/rhdh/index.d.ts +0 -1
- package/dist/deployment/rhdh/index.d.ts.map +1 -1
- package/dist/deployment/rhdh/types.d.ts +4 -1
- package/dist/deployment/rhdh/types.d.ts.map +1 -1
- package/dist/eslint/base.config.d.ts.map +1 -1
- package/dist/eslint/base.config.js +9 -2
- package/dist/playwright/base-config.d.ts +3 -3
- package/dist/playwright/base-config.d.ts.map +1 -1
- package/dist/playwright/base-config.js +5 -4
- package/dist/playwright/fixtures/test.d.ts +4 -1
- package/dist/playwright/fixtures/test.d.ts.map +1 -1
- package/dist/playwright/fixtures/test.js +16 -4
- package/dist/playwright/global-setup.d.ts.map +1 -1
- package/dist/playwright/global-setup.js +36 -1
- package/dist/playwright/helpers/accessibility.d.ts +13 -0
- package/dist/playwright/helpers/accessibility.d.ts.map +1 -0
- package/dist/playwright/helpers/accessibility.js +24 -0
- package/dist/playwright/helpers/api-endpoints.d.ts +11 -0
- package/dist/playwright/helpers/api-endpoints.d.ts.map +1 -0
- package/dist/playwright/helpers/api-endpoints.js +15 -0
- package/dist/playwright/helpers/api-helper.d.ts +77 -0
- package/dist/playwright/helpers/api-helper.d.ts.map +1 -0
- package/dist/playwright/helpers/api-helper.js +285 -0
- package/dist/playwright/helpers/common.d.ts +31 -0
- package/dist/playwright/helpers/common.d.ts.map +1 -0
- package/dist/playwright/helpers/common.js +342 -0
- package/dist/playwright/helpers/index.d.ts +5 -0
- package/dist/playwright/helpers/index.d.ts.map +1 -0
- package/dist/playwright/helpers/index.js +4 -0
- package/dist/playwright/helpers/navbar.d.ts +2 -0
- package/dist/playwright/helpers/navbar.d.ts.map +1 -0
- package/dist/playwright/helpers/navbar.js +1 -0
- package/dist/playwright/helpers/ui-helper.d.ts +106 -0
- package/dist/playwright/helpers/ui-helper.d.ts.map +1 -0
- package/dist/playwright/helpers/ui-helper.js +439 -0
- package/dist/playwright/page-objects/global-obj.d.ts +25 -0
- package/dist/playwright/page-objects/global-obj.d.ts.map +1 -0
- package/dist/playwright/page-objects/global-obj.js +24 -0
- package/dist/playwright/page-objects/page-obj.d.ts +41 -0
- package/dist/playwright/page-objects/page-obj.d.ts.map +1 -0
- package/dist/playwright/page-objects/page-obj.js +40 -0
- package/dist/playwright/pages/catalog-import.d.ts +31 -0
- package/dist/playwright/pages/catalog-import.d.ts.map +1 -0
- package/dist/playwright/pages/catalog-import.js +65 -0
- package/dist/playwright/pages/catalog.d.ts +14 -0
- package/dist/playwright/pages/catalog.d.ts.map +1 -0
- package/dist/playwright/pages/catalog.js +37 -0
- package/dist/playwright/pages/extensions.d.ts +38 -0
- package/dist/playwright/pages/extensions.d.ts.map +1 -0
- package/dist/playwright/pages/extensions.js +110 -0
- package/dist/playwright/pages/home-page.d.ts +10 -0
- package/dist/playwright/pages/home-page.d.ts.map +1 -0
- package/dist/playwright/pages/home-page.js +46 -0
- package/dist/playwright/pages/index.d.ts +6 -0
- package/dist/playwright/pages/index.d.ts.map +1 -0
- package/dist/playwright/pages/index.js +5 -0
- package/dist/playwright/pages/notifications.d.ts +24 -0
- package/dist/playwright/pages/notifications.d.ts.map +1 -0
- package/dist/playwright/pages/notifications.js +112 -0
- package/dist/utils/kubernetes-client.d.ts +9 -0
- package/dist/utils/kubernetes-client.d.ts.map +1 -1
- package/dist/utils/kubernetes-client.js +57 -2
- package/dist/utils/merge-yamls.d.ts +25 -4
- package/dist/utils/merge-yamls.d.ts.map +1 -1
- package/dist/utils/merge-yamls.js +52 -12
- package/package.json +19 -6
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
global:
|
|
2
|
+
security:
|
|
3
|
+
allowInsecureImages: true
|
|
4
|
+
|
|
5
|
+
replicaCount: 1
|
|
6
|
+
|
|
7
|
+
# Use Bitnami legacy repository (Bitnami images moved to bitnamilegacy as of Aug 2025)
|
|
8
|
+
# Note: Legacy images are not updated/maintained. Consider migrating to official Keycloak image for long-term.
|
|
9
|
+
image:
|
|
10
|
+
registry: docker.io
|
|
11
|
+
repository: bitnamilegacy/keycloak
|
|
12
|
+
tag: "26.3.3-debian-12-r0"
|
|
13
|
+
pullPolicy: IfNotPresent
|
|
14
|
+
|
|
15
|
+
auth:
|
|
16
|
+
adminUser: admin
|
|
17
|
+
adminPassword: admin123
|
|
18
|
+
|
|
19
|
+
service:
|
|
20
|
+
type: ClusterIP
|
|
21
|
+
port: 8080
|
|
22
|
+
|
|
23
|
+
# OpenShift Route configuration
|
|
24
|
+
route:
|
|
25
|
+
enabled: true
|
|
26
|
+
host: "" # Will be auto-generated by OpenShift
|
|
27
|
+
tls:
|
|
28
|
+
enabled: false
|
|
29
|
+
|
|
30
|
+
ingress:
|
|
31
|
+
enabled: false
|
|
32
|
+
|
|
33
|
+
postgresql:
|
|
34
|
+
enabled: true
|
|
35
|
+
image:
|
|
36
|
+
registry: docker.io
|
|
37
|
+
repository: bitnamilegacy/postgresql
|
|
38
|
+
tag: "17.6.0-debian-12-r4"
|
|
39
|
+
pullPolicy: IfNotPresent
|
|
40
|
+
auth:
|
|
41
|
+
postgresPassword: postgres123
|
|
42
|
+
username: keycloak
|
|
43
|
+
password: keycloak123
|
|
44
|
+
database: keycloak
|
|
45
|
+
primary:
|
|
46
|
+
resources:
|
|
47
|
+
limits:
|
|
48
|
+
cpu: 1000m
|
|
49
|
+
memory: 1Gi
|
|
50
|
+
requests:
|
|
51
|
+
cpu: 100m
|
|
52
|
+
memory: 256Mi
|
|
53
|
+
persistence:
|
|
54
|
+
enabled: true
|
|
55
|
+
size: 1Gi
|
|
56
|
+
|
|
57
|
+
resources:
|
|
58
|
+
limits:
|
|
59
|
+
cpu: 1000m
|
|
60
|
+
memory: 1Gi
|
|
61
|
+
requests:
|
|
62
|
+
cpu: 100m
|
|
63
|
+
memory: 256Mi
|
|
64
|
+
|
|
65
|
+
extraEnvVars:
|
|
66
|
+
- name: KEYCLOAK_ADMIN
|
|
67
|
+
value: admin
|
|
68
|
+
- name: KEYCLOAK_ADMIN_PASSWORD
|
|
69
|
+
value: admin123
|
|
70
|
+
- name: KC_HTTP_ENABLED
|
|
71
|
+
value: "true"
|
|
72
|
+
- name: KC_PROXY_HEADERS
|
|
73
|
+
value: "xforwarded"
|
|
74
|
+
- name: KC_HOSTNAME_STRICT
|
|
75
|
+
value: "false"
|
|
76
|
+
- name: JAVA_OPTS_APPEND
|
|
77
|
+
value: "-Djava.net.preferIPv4Stack=true -Xms256m -Xmx512m"
|
|
78
|
+
|
|
79
|
+
# Increase probe timeouts for slower startup on resource-constrained clusters
|
|
80
|
+
livenessProbe:
|
|
81
|
+
enabled: true
|
|
82
|
+
initialDelaySeconds: 120
|
|
83
|
+
periodSeconds: 10
|
|
84
|
+
timeoutSeconds: 5
|
|
85
|
+
failureThreshold: 6
|
|
86
|
+
successThreshold: 1
|
|
87
|
+
|
|
88
|
+
readinessProbe:
|
|
89
|
+
enabled: true
|
|
90
|
+
initialDelaySeconds: 60
|
|
91
|
+
periodSeconds: 10
|
|
92
|
+
timeoutSeconds: 5
|
|
93
|
+
failureThreshold: 6
|
|
94
|
+
successThreshold: 1
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { KeycloakClientConfig } from "./types.js";
|
|
2
|
+
export declare const DEFAULT_KEYCLOAK_CONFIG: {
|
|
3
|
+
namespace: string;
|
|
4
|
+
releaseName: string;
|
|
5
|
+
adminUser: string;
|
|
6
|
+
adminPassword: string;
|
|
7
|
+
realm: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const DEFAULT_CONFIG_PATHS: {
|
|
10
|
+
valuesFile: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const BITNAMI_CHART_REPO = "https://charts.bitnami.com/bitnami";
|
|
13
|
+
export declare const BITNAMI_CHART_NAME = "bitnami/keycloak";
|
|
14
|
+
export declare const DEFAULT_RHDH_CLIENT: KeycloakClientConfig;
|
|
15
|
+
export declare const DEFAULT_GROUPS: {
|
|
16
|
+
name: string;
|
|
17
|
+
}[];
|
|
18
|
+
export declare const DEFAULT_USERS: {
|
|
19
|
+
username: string;
|
|
20
|
+
email: string;
|
|
21
|
+
firstName: string;
|
|
22
|
+
lastName: string;
|
|
23
|
+
enabled: boolean;
|
|
24
|
+
emailVerified: boolean;
|
|
25
|
+
password: string;
|
|
26
|
+
groups: string[];
|
|
27
|
+
}[];
|
|
28
|
+
export declare const SERVICE_ACCOUNT_ROLES: string[];
|
|
29
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/deployment/keycloak/constants.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAKvD,eAAO,MAAM,uBAAuB;;;;;;CAMnC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;CAKhC,CAAC;AAEF,eAAO,MAAM,kBAAkB,uCAAuC,CAAC;AACvE,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AAErD,eAAO,MAAM,mBAAmB,EAAE,oBA0BjC,CAAC;AAEF,eAAO,MAAM,cAAc;;GAI1B,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;GAqBzB,CAAC;AAGF,eAAO,MAAM,qBAAqB,UAIjC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import path from "path";
|
|
2
|
+
// Navigate from dist/deployment/keycloak/ to package root
|
|
3
|
+
const PACKAGE_ROOT = path.resolve(import.meta.dirname, "../../..");
|
|
4
|
+
export const DEFAULT_KEYCLOAK_CONFIG = {
|
|
5
|
+
namespace: "rhdh-keycloak",
|
|
6
|
+
releaseName: "keycloak",
|
|
7
|
+
adminUser: "admin",
|
|
8
|
+
adminPassword: "admin123",
|
|
9
|
+
realm: "rhdh",
|
|
10
|
+
};
|
|
11
|
+
export const DEFAULT_CONFIG_PATHS = {
|
|
12
|
+
valuesFile: path.join(PACKAGE_ROOT, "dist/deployment/keycloak/config/keycloak-values.yaml"),
|
|
13
|
+
};
|
|
14
|
+
export const BITNAMI_CHART_REPO = "https://charts.bitnami.com/bitnami";
|
|
15
|
+
export const BITNAMI_CHART_NAME = "bitnami/keycloak";
|
|
16
|
+
export const DEFAULT_RHDH_CLIENT = {
|
|
17
|
+
clientId: "rhdh-client",
|
|
18
|
+
clientSecret: "rhdh-client-secret",
|
|
19
|
+
name: "RHDH Client",
|
|
20
|
+
redirectUris: ["*"],
|
|
21
|
+
webOrigins: ["*"],
|
|
22
|
+
standardFlowEnabled: true,
|
|
23
|
+
implicitFlowEnabled: true,
|
|
24
|
+
directAccessGrantsEnabled: true,
|
|
25
|
+
serviceAccountsEnabled: true,
|
|
26
|
+
authorizationServicesEnabled: true,
|
|
27
|
+
publicClient: false,
|
|
28
|
+
defaultClientScopes: [
|
|
29
|
+
"service_account",
|
|
30
|
+
"web-origins",
|
|
31
|
+
"roles",
|
|
32
|
+
"profile",
|
|
33
|
+
"basic",
|
|
34
|
+
"email",
|
|
35
|
+
],
|
|
36
|
+
optionalClientScopes: [
|
|
37
|
+
"address",
|
|
38
|
+
"phone",
|
|
39
|
+
"offline_access",
|
|
40
|
+
"microprofile-jwt",
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
export const DEFAULT_GROUPS = [
|
|
44
|
+
{ name: "developers" },
|
|
45
|
+
{ name: "admins" },
|
|
46
|
+
{ name: "viewers" },
|
|
47
|
+
];
|
|
48
|
+
export const DEFAULT_USERS = [
|
|
49
|
+
{
|
|
50
|
+
username: "test1",
|
|
51
|
+
email: "test1@example.com",
|
|
52
|
+
firstName: "Test",
|
|
53
|
+
lastName: "User1",
|
|
54
|
+
enabled: true,
|
|
55
|
+
emailVerified: true,
|
|
56
|
+
password: "test1@123",
|
|
57
|
+
groups: ["developers"],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
username: "test2",
|
|
61
|
+
email: "test2@example.com",
|
|
62
|
+
firstName: "Test",
|
|
63
|
+
lastName: "User2",
|
|
64
|
+
enabled: true,
|
|
65
|
+
emailVerified: true,
|
|
66
|
+
password: "test2@123",
|
|
67
|
+
groups: ["developers"],
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
// Service account roles required for RHDH integration
|
|
71
|
+
export const SERVICE_ACCOUNT_ROLES = [
|
|
72
|
+
"view-authorization",
|
|
73
|
+
"manage-authorization",
|
|
74
|
+
"view-users",
|
|
75
|
+
];
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { KubernetesClientHelper } from "../../utils/kubernetes-client.js";
|
|
2
|
+
import type { KeycloakDeploymentOptions, KeycloakDeploymentConfig, KeycloakClientConfig, KeycloakUserConfig, KeycloakGroupConfig, KeycloakRealmConfig, KeycloakConnectionConfig } from "./types.js";
|
|
3
|
+
export declare class KeycloakHelper {
|
|
4
|
+
k8sClient: KubernetesClientHelper;
|
|
5
|
+
deploymentConfig: KeycloakDeploymentConfig;
|
|
6
|
+
keycloakUrl: string;
|
|
7
|
+
realm: string;
|
|
8
|
+
clientId: string;
|
|
9
|
+
clientSecret: string;
|
|
10
|
+
private _adminClient;
|
|
11
|
+
constructor(options?: KeycloakDeploymentOptions);
|
|
12
|
+
/**
|
|
13
|
+
* Deploy Keycloak using Helm and configure it for RHDH.
|
|
14
|
+
*/
|
|
15
|
+
deploy(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Check if Keycloak is already running
|
|
18
|
+
*/
|
|
19
|
+
isRunning(): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Configure Keycloak with realm, client, groups, and users for RHDH
|
|
22
|
+
*/
|
|
23
|
+
configureForRHDH(options?: {
|
|
24
|
+
realm?: string;
|
|
25
|
+
client?: Partial<KeycloakClientConfig>;
|
|
26
|
+
groups?: KeycloakGroupConfig[];
|
|
27
|
+
users?: KeycloakUserConfig[];
|
|
28
|
+
}): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Connect to an existing Keycloak instance
|
|
31
|
+
*/
|
|
32
|
+
connect(config: KeycloakConnectionConfig): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Create a new realm
|
|
35
|
+
*/
|
|
36
|
+
createRealm(config: KeycloakRealmConfig): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Create a new client in a realm
|
|
39
|
+
*/
|
|
40
|
+
createClient(realm: string, config: KeycloakClientConfig): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Create a group in a realm
|
|
43
|
+
*/
|
|
44
|
+
createGroup(realm: string, config: KeycloakGroupConfig): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Create a user in a realm with optional group membership
|
|
47
|
+
*/
|
|
48
|
+
createUser(realm: string, config: KeycloakUserConfig): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Get all users in a realm
|
|
51
|
+
*/
|
|
52
|
+
getUsers(realm: string): Promise<KeycloakUserConfig[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Get all groups in a realm
|
|
55
|
+
*/
|
|
56
|
+
getGroups(realm: string): Promise<KeycloakGroupConfig[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Delete a user from a realm
|
|
59
|
+
*/
|
|
60
|
+
deleteUser(realm: string, username: string): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Delete a group from a realm
|
|
63
|
+
*/
|
|
64
|
+
deleteGroup(realm: string, groupName: string): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Delete a realm
|
|
67
|
+
*/
|
|
68
|
+
deleteRealm(realm: string): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Teardown Keycloak deployment
|
|
71
|
+
*/
|
|
72
|
+
teardown(): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Wait for Keycloak to be ready
|
|
75
|
+
*/
|
|
76
|
+
waitUntilReady(timeout?: number): Promise<void>;
|
|
77
|
+
private _buildDeploymentConfig;
|
|
78
|
+
private _deployWithHelm;
|
|
79
|
+
private _createRoute;
|
|
80
|
+
getRouteLocation(): Promise<string>;
|
|
81
|
+
private _waitForKeycloak;
|
|
82
|
+
private _initializeAdminClient;
|
|
83
|
+
private _ensureAdminClient;
|
|
84
|
+
private _assignServiceAccountRoles;
|
|
85
|
+
private _addUserToGroup;
|
|
86
|
+
private _isConflictError;
|
|
87
|
+
private _log;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=deployment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../../../src/deployment/keycloak/deployment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAY1E,OAAO,KAAK,EACV,yBAAyB,EACzB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAEpB,qBAAa,cAAc;IAClB,SAAS,yBAAgC;IACzC,gBAAgB,EAAE,wBAAwB,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAM;IACzB,KAAK,EAAE,MAAM,CAAM;IACnB,QAAQ,EAAE,MAAM,CAAM;IACtB,YAAY,EAAE,MAAM,CAAM;IACjC,OAAO,CAAC,YAAY,CAAoC;gBAE5C,OAAO,GAAE,yBAA8B;IAInD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAUnC;;OAEG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACvC,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;QAC/B,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;KAC9B,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjB;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB9D;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7D;;OAEG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC;IAqChB;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB5E;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C1E;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAe5D;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAQ9D;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/B;;OAEG;IACG,cAAc,CAAC,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1D,OAAO,CAAC,sBAAsB;YAahB,eAAe;YAWf,YAAY;IA2BpB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;YAO3B,gBAAgB;YAoBhB,sBAAsB;YActB,kBAAkB;YAQlB,0BAA0B;YAmD1B,eAAe;IAqB7B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,IAAI;CAGb"}
|