@webiny/app-tenancy 0.0.0-unstable.6e5425ee89 → 0.0.0-unstable.7f63ea0744
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/package.json +9 -9
- package/plugins/installation.js +14 -16
- package/plugins/installation.js.map +1 -1
- package/withTenant.js +24 -26
- package/withTenant.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-tenancy",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.7f63ea0744",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@apollo/react-hooks": "3.1.5",
|
|
17
|
-
"@babel/runtime": "7.20.
|
|
17
|
+
"@babel/runtime": "7.20.13",
|
|
18
18
|
"@emotion/styled": "10.3.0",
|
|
19
19
|
"@types/react": "17.0.39",
|
|
20
|
-
"@webiny/app": "0.0.0-unstable.
|
|
21
|
-
"@webiny/app-admin": "0.0.0-unstable.
|
|
22
|
-
"@webiny/plugins": "0.0.0-unstable.
|
|
23
|
-
"@webiny/ui": "0.0.0-unstable.
|
|
20
|
+
"@webiny/app": "0.0.0-unstable.7f63ea0744",
|
|
21
|
+
"@webiny/app-admin": "0.0.0-unstable.7f63ea0744",
|
|
22
|
+
"@webiny/plugins": "0.0.0-unstable.7f63ea0744",
|
|
23
|
+
"@webiny/ui": "0.0.0-unstable.7f63ea0744",
|
|
24
24
|
"apollo-client": "2.6.10",
|
|
25
25
|
"graphql-tag": "2.12.6",
|
|
26
26
|
"react": "17.0.2",
|
|
@@ -34,8 +34,8 @@
|
|
|
34
34
|
"@babel/preset-env": "^7.19.4",
|
|
35
35
|
"@babel/preset-react": "^7.16.0",
|
|
36
36
|
"@babel/preset-typescript": "^7.18.6",
|
|
37
|
-
"@webiny/cli": "^0.0.0-unstable.
|
|
38
|
-
"@webiny/project-utils": "^0.0.0-unstable.
|
|
37
|
+
"@webiny/cli": "^0.0.0-unstable.7f63ea0744",
|
|
38
|
+
"@webiny/project-utils": "^0.0.0-unstable.7f63ea0744",
|
|
39
39
|
"babel-plugin-emotion": "^9.2.8",
|
|
40
40
|
"babel-plugin-lodash": "^3.3.4",
|
|
41
41
|
"rimraf": "^3.0.2",
|
|
@@ -50,5 +50,5 @@
|
|
|
50
50
|
"build": "yarn webiny run build",
|
|
51
51
|
"watch": "yarn webiny run watch"
|
|
52
52
|
},
|
|
53
|
-
"gitHead": "
|
|
53
|
+
"gitHead": "7f63ea0744c9e31977e5dabb95538d22b4db585c"
|
|
54
54
|
}
|
package/plugins/installation.js
CHANGED
|
@@ -67,22 +67,20 @@ var plugin = {
|
|
|
67
67
|
return (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee() {
|
|
68
68
|
var client, _yield$client$query, data;
|
|
69
69
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
70
|
-
while (1) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return _context.stop();
|
|
85
|
-
}
|
|
70
|
+
while (1) switch (_context.prev = _context.next) {
|
|
71
|
+
case 0:
|
|
72
|
+
client = _ref3.client;
|
|
73
|
+
_context.next = 3;
|
|
74
|
+
return client.query({
|
|
75
|
+
query: IS_INSTALLED
|
|
76
|
+
});
|
|
77
|
+
case 3:
|
|
78
|
+
_yield$client$query = _context.sent;
|
|
79
|
+
data = _yield$client$query.data;
|
|
80
|
+
return _context.abrupt("return", data.tenancy.version);
|
|
81
|
+
case 6:
|
|
82
|
+
case "end":
|
|
83
|
+
return _context.stop();
|
|
86
84
|
}
|
|
87
85
|
}, _callee);
|
|
88
86
|
}))();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SimpleFormPlaceholder","styled","minHeight","minWidth","IS_INSTALLED","gql","INSTALL","TenancyInstaller","onInstalled","client","useApolloClient","useState","error","setError","useEffect","mutate","mutation","then","data","tenancy","install","message","setTimeout","label","plugin","name","type","title","dependencies","secure","getInstalledVersion","query","version","render"],"sources":["installation.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport gql from \"graphql-tag\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { Alert } from \"@webiny/ui/Alert\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { SimpleForm, SimpleFormContent } from \"@webiny/app-admin/components/SimpleForm\";\nimport styled from \"@emotion/styled\";\nimport { AdminInstallationPlugin } from \"@webiny/app-admin/types\";\n\nconst SimpleFormPlaceholder = styled.div({\n minHeight: 300,\n minWidth: 400\n});\n\nconst IS_INSTALLED = gql`\n query IsTenancyInstalled {\n tenancy {\n version\n }\n }\n`;\n\nconst INSTALL = gql`\n mutation InstallTenancy {\n tenancy {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface TenancyInstallerProps {\n onInstalled: () => Promise<void>;\n}\nconst TenancyInstaller: React.FC<TenancyInstallerProps> = ({ onInstalled }) => {\n const client = useApolloClient();\n const [error, setError] = useState(null);\n\n useEffect(() => {\n client.mutate({ mutation: INSTALL }).then(({ data }) => {\n const { error } = data.tenancy.install;\n if (error) {\n setError(error.message);\n return;\n }\n\n // Just so the user sees the actual message.\n setTimeout(onInstalled, 3000);\n });\n }, []);\n\n const label = error ? (\n <Alert title={`Something went wrong`} type={\"danger\"}>\n {error}\n </Alert>\n ) : (\n `Installing Tenancy...`\n );\n\n return (\n <SimpleForm>\n <CircularProgress label={label} />\n <SimpleFormContent>\n <SimpleFormPlaceholder />\n </SimpleFormContent>\n </SimpleForm>\n );\n};\n\nconst plugin: AdminInstallationPlugin = {\n name: \"admin-installation-tenancy\",\n type: \"admin-installation\",\n title: `Tenancy`,\n dependencies: [],\n secure: false,\n async getInstalledVersion({ client }) {\n const { data } = await client.query({ query: IS_INSTALLED });\n return data.tenancy.version;\n },\n render({ onInstalled }) {\n return <TenancyInstaller onInstalled={onInstalled} />;\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAqC;AAGrC,IAAMA,qBAAqB,oBAAGC,eAAM;EAAA;EAAA;AAAA,GAAK;EACrCC,SAAS,EAAE,GAAG;EACdC,QAAQ,EAAE;AACd,CAAC,CAAC;AAEF,IAAMC,YAAY,OAAGC,mBAAG,gLAMvB;AAED,IAAMC,OAAO,OAAGD,mBAAG,2TAYlB;AAKD,IAAME,gBAAiD,GAAG,SAApDA,gBAAiD,OAAwB;EAAA,IAAlBC,WAAW,QAAXA,WAAW;EACpE,IAAMC,MAAM,GAAG,IAAAC,2BAAe,GAAE;EAChC,gBAA0B,IAAAC,eAAQ,EAAC,IAAI,CAAC;IAAA;IAAjCC,KAAK;IAAEC,QAAQ;EAEtB,IAAAC,gBAAS,EAAC,YAAM;IACZL,MAAM,CAACM,MAAM,CAAC;MAAEC,QAAQ,EAAEV;IAAQ,CAAC,CAAC,CAACW,IAAI,CAAC,iBAAc;MAAA,IAAXC,IAAI,SAAJA,IAAI;MAC7C,IAAQN,KAAK,GAAKM,IAAI,CAACC,OAAO,CAACC,OAAO,CAA9BR,KAAK;MACb,IAAIA,KAAK,EAAE;QACPC,QAAQ,CAACD,KAAK,CAACS,OAAO,CAAC;QACvB;MACJ;;MAEA;MACAC,UAAU,CAACd,WAAW,EAAE,IAAI,CAAC;IACjC,CAAC,CAAC;EACN,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMe,KAAK,GAAGX,KAAK,gBACf,6BAAC,YAAK;IAAC,KAAK,wBAAyB;IAAC,IAAI,EAAE;EAAS,GAChDA,KAAK,CACF,0BAGX;EAED,oBACI,6BAAC,sBAAU,qBACP,6BAAC,0BAAgB;IAAC,KAAK,EAAEW;EAAM,EAAG,eAClC,6BAAC,6BAAiB,qBACd,6BAAC,qBAAqB,OAAG,CACT,CACX;AAErB,CAAC;AAED,IAAMC,MAA+B,GAAG;EACpCC,IAAI,EAAE,4BAA4B;EAClCC,IAAI,EAAE,oBAAoB;EAC1BC,KAAK,WAAW;EAChBC,YAAY,EAAE,EAAE;EAChBC,MAAM,EAAE,KAAK;EACPC,mBAAmB,sCAAa;IAAA;MAAA;MAAA;QAAA;UAAA;
|
|
1
|
+
{"version":3,"names":["SimpleFormPlaceholder","styled","minHeight","minWidth","IS_INSTALLED","gql","INSTALL","TenancyInstaller","onInstalled","client","useApolloClient","useState","error","setError","useEffect","mutate","mutation","then","data","tenancy","install","message","setTimeout","label","plugin","name","type","title","dependencies","secure","getInstalledVersion","query","version","render"],"sources":["installation.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport gql from \"graphql-tag\";\nimport { useApolloClient } from \"@apollo/react-hooks\";\nimport { Alert } from \"@webiny/ui/Alert\";\nimport { CircularProgress } from \"@webiny/ui/Progress\";\nimport { SimpleForm, SimpleFormContent } from \"@webiny/app-admin/components/SimpleForm\";\nimport styled from \"@emotion/styled\";\nimport { AdminInstallationPlugin } from \"@webiny/app-admin/types\";\n\nconst SimpleFormPlaceholder = styled.div({\n minHeight: 300,\n minWidth: 400\n});\n\nconst IS_INSTALLED = gql`\n query IsTenancyInstalled {\n tenancy {\n version\n }\n }\n`;\n\nconst INSTALL = gql`\n mutation InstallTenancy {\n tenancy {\n install {\n data\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface TenancyInstallerProps {\n onInstalled: () => Promise<void>;\n}\nconst TenancyInstaller: React.FC<TenancyInstallerProps> = ({ onInstalled }) => {\n const client = useApolloClient();\n const [error, setError] = useState(null);\n\n useEffect(() => {\n client.mutate({ mutation: INSTALL }).then(({ data }) => {\n const { error } = data.tenancy.install;\n if (error) {\n setError(error.message);\n return;\n }\n\n // Just so the user sees the actual message.\n setTimeout(onInstalled, 3000);\n });\n }, []);\n\n const label = error ? (\n <Alert title={`Something went wrong`} type={\"danger\"}>\n {error}\n </Alert>\n ) : (\n `Installing Tenancy...`\n );\n\n return (\n <SimpleForm>\n <CircularProgress label={label} />\n <SimpleFormContent>\n <SimpleFormPlaceholder />\n </SimpleFormContent>\n </SimpleForm>\n );\n};\n\nconst plugin: AdminInstallationPlugin = {\n name: \"admin-installation-tenancy\",\n type: \"admin-installation\",\n title: `Tenancy`,\n dependencies: [],\n secure: false,\n async getInstalledVersion({ client }) {\n const { data } = await client.query({ query: IS_INSTALLED });\n return data.tenancy.version;\n },\n render({ onInstalled }) {\n return <TenancyInstaller onInstalled={onInstalled} />;\n }\n};\n\nexport default plugin;\n"],"mappings":";;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAqC;AAGrC,IAAMA,qBAAqB,oBAAGC,eAAM;EAAA;EAAA;AAAA,GAAK;EACrCC,SAAS,EAAE,GAAG;EACdC,QAAQ,EAAE;AACd,CAAC,CAAC;AAEF,IAAMC,YAAY,OAAGC,mBAAG,gLAMvB;AAED,IAAMC,OAAO,OAAGD,mBAAG,2TAYlB;AAKD,IAAME,gBAAiD,GAAG,SAApDA,gBAAiD,OAAwB;EAAA,IAAlBC,WAAW,QAAXA,WAAW;EACpE,IAAMC,MAAM,GAAG,IAAAC,2BAAe,GAAE;EAChC,gBAA0B,IAAAC,eAAQ,EAAC,IAAI,CAAC;IAAA;IAAjCC,KAAK;IAAEC,QAAQ;EAEtB,IAAAC,gBAAS,EAAC,YAAM;IACZL,MAAM,CAACM,MAAM,CAAC;MAAEC,QAAQ,EAAEV;IAAQ,CAAC,CAAC,CAACW,IAAI,CAAC,iBAAc;MAAA,IAAXC,IAAI,SAAJA,IAAI;MAC7C,IAAQN,KAAK,GAAKM,IAAI,CAACC,OAAO,CAACC,OAAO,CAA9BR,KAAK;MACb,IAAIA,KAAK,EAAE;QACPC,QAAQ,CAACD,KAAK,CAACS,OAAO,CAAC;QACvB;MACJ;;MAEA;MACAC,UAAU,CAACd,WAAW,EAAE,IAAI,CAAC;IACjC,CAAC,CAAC;EACN,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMe,KAAK,GAAGX,KAAK,gBACf,6BAAC,YAAK;IAAC,KAAK,wBAAyB;IAAC,IAAI,EAAE;EAAS,GAChDA,KAAK,CACF,0BAGX;EAED,oBACI,6BAAC,sBAAU,qBACP,6BAAC,0BAAgB;IAAC,KAAK,EAAEW;EAAM,EAAG,eAClC,6BAAC,6BAAiB,qBACd,6BAAC,qBAAqB,OAAG,CACT,CACX;AAErB,CAAC;AAED,IAAMC,MAA+B,GAAG;EACpCC,IAAI,EAAE,4BAA4B;EAClCC,IAAI,EAAE,oBAAoB;EAC1BC,KAAK,WAAW;EAChBC,YAAY,EAAE,EAAE;EAChBC,MAAM,EAAE,KAAK;EACPC,mBAAmB,sCAAa;IAAA;MAAA;MAAA;QAAA;UAAA;YAAVrB,MAAM,SAANA,MAAM;YAAA;YAAA,OACPA,MAAM,CAACsB,KAAK,CAAC;cAAEA,KAAK,EAAE3B;YAAa,CAAC,CAAC;UAAA;YAAA;YAApDc,IAAI,uBAAJA,IAAI;YAAA,iCACLA,IAAI,CAACC,OAAO,CAACa,OAAO;UAAA;UAAA;YAAA;QAAA;MAAA;IAAA;EAC/B,CAAC;EACDC,MAAM,yBAAkB;IAAA,IAAfzB,WAAW,SAAXA,WAAW;IAChB,oBAAO,6BAAC,gBAAgB;MAAC,WAAW,EAAEA;IAAY,EAAG;EACzD;AACJ,CAAC;AAAC,eAEagB,MAAM;AAAA"}
|
package/withTenant.js
CHANGED
|
@@ -26,33 +26,31 @@ var withTenant = function withTenant(Component) {
|
|
|
26
26
|
var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(params) {
|
|
27
27
|
var response, defaultTenantId;
|
|
28
28
|
return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
|
|
29
|
-
while (1) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"x-tenant": tenant || "root"
|
|
44
|
-
}
|
|
29
|
+
while (1) switch (_context.prev = _context.next) {
|
|
30
|
+
case 0:
|
|
31
|
+
if (!(tenant || !isMultiTenant)) {
|
|
32
|
+
_context.next = 2;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
return _context.abrupt("return", getIdentityData(params));
|
|
36
|
+
case 2:
|
|
37
|
+
_context.next = 4;
|
|
38
|
+
return params.client.query({
|
|
39
|
+
query: GET_DEFAULT_TENANT,
|
|
40
|
+
context: {
|
|
41
|
+
headers: {
|
|
42
|
+
"x-tenant": tenant || "root"
|
|
45
43
|
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
case 4:
|
|
47
|
+
response = _context.sent;
|
|
48
|
+
defaultTenantId = response.data.tenancy.getDefaultTenant.data.id;
|
|
49
|
+
setTenant(defaultTenantId);
|
|
50
|
+
return _context.abrupt("return", getIdentityData(params));
|
|
51
|
+
case 8:
|
|
52
|
+
case "end":
|
|
53
|
+
return _context.stop();
|
|
56
54
|
}
|
|
57
55
|
}, _callee);
|
|
58
56
|
}));
|
package/withTenant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["GET_DEFAULT_TENANT","gql","withTenant","Component","WithTenant","getIdentityData","children","useTenancy","tenant","setTenant","isMultiTenant","getIdentityWithTenant","params","client","query","context","headers","response","defaultTenantId","data","tenancy","getDefaultTenant","id"],"sources":["withTenant.tsx"],"sourcesContent":["import React from \"react\";\nimport { gql } from \"graphql-tag\";\nimport { useTenancy } from \"~/hooks/useTenancy\";\nimport ApolloClient from \"apollo-client\";\n\nexport const GET_DEFAULT_TENANT = gql`\n query GetDefaultTenant {\n tenancy {\n getDefaultTenant {\n data {\n id\n name\n description\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface GetIdentityWithTenantParams {\n client: ApolloClient<any>;\n}\ninterface WithTenantProps {\n getIdentityData: (params: GetIdentityWithTenantParams) => Promise<Record<string, string>>;\n children: React.ReactNode;\n}\nexport const withTenant = (Component: React.FC<WithTenantProps>): React.FC<WithTenantProps> => {\n return function WithTenant({ getIdentityData, children }) {\n const { tenant, setTenant, isMultiTenant } = useTenancy();\n\n const getIdentityWithTenant = async (params: GetIdentityWithTenantParams) => {\n if (tenant || !isMultiTenant) {\n return getIdentityData(params);\n }\n\n // Get default tenant\n const response = await params.client.query({\n query: GET_DEFAULT_TENANT,\n context: { headers: { \"x-tenant\": tenant || \"root\" } }\n });\n\n const defaultTenantId = response.data.tenancy.getDefaultTenant.data.id;\n\n setTenant(defaultTenantId);\n\n return getIdentityData(params);\n };\n\n return <Component getIdentityData={getIdentityWithTenant}>{children}</Component>;\n };\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AAAgD;AAGzC,IAAMA,kBAAkB,OAAGC,eAAG,yaAgBpC;AAAC;AASK,IAAMC,UAAU,GAAG,SAAbA,UAAU,CAAIC,SAAoC,EAAgC;EAC3F,OAAO,SAASC,UAAU,OAAgC;IAAA,IAA7BC,eAAe,QAAfA,eAAe;MAAEC,QAAQ,QAARA,QAAQ;IAClD,kBAA6C,IAAAC,uBAAU,GAAE;MAAjDC,MAAM,eAANA,MAAM;MAAEC,SAAS,eAATA,SAAS;MAAEC,aAAa,eAAbA,aAAa;IAExC,IAAMC,qBAAqB;MAAA,mGAAG,iBAAOC,MAAmC;QAAA;QAAA;UAAA;YAAA;cAAA
|
|
1
|
+
{"version":3,"names":["GET_DEFAULT_TENANT","gql","withTenant","Component","WithTenant","getIdentityData","children","useTenancy","tenant","setTenant","isMultiTenant","getIdentityWithTenant","params","client","query","context","headers","response","defaultTenantId","data","tenancy","getDefaultTenant","id"],"sources":["withTenant.tsx"],"sourcesContent":["import React from \"react\";\nimport { gql } from \"graphql-tag\";\nimport { useTenancy } from \"~/hooks/useTenancy\";\nimport ApolloClient from \"apollo-client\";\n\nexport const GET_DEFAULT_TENANT = gql`\n query GetDefaultTenant {\n tenancy {\n getDefaultTenant {\n data {\n id\n name\n description\n }\n error {\n code\n message\n }\n }\n }\n }\n`;\n\ninterface GetIdentityWithTenantParams {\n client: ApolloClient<any>;\n}\ninterface WithTenantProps {\n getIdentityData: (params: GetIdentityWithTenantParams) => Promise<Record<string, string>>;\n children: React.ReactNode;\n}\nexport const withTenant = (Component: React.FC<WithTenantProps>): React.FC<WithTenantProps> => {\n return function WithTenant({ getIdentityData, children }) {\n const { tenant, setTenant, isMultiTenant } = useTenancy();\n\n const getIdentityWithTenant = async (params: GetIdentityWithTenantParams) => {\n if (tenant || !isMultiTenant) {\n return getIdentityData(params);\n }\n\n // Get default tenant\n const response = await params.client.query({\n query: GET_DEFAULT_TENANT,\n context: { headers: { \"x-tenant\": tenant || \"root\" } }\n });\n\n const defaultTenantId = response.data.tenancy.getDefaultTenant.data.id;\n\n setTenant(defaultTenantId);\n\n return getIdentityData(params);\n };\n\n return <Component getIdentityData={getIdentityWithTenant}>{children}</Component>;\n };\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA;AACA;AAAgD;AAGzC,IAAMA,kBAAkB,OAAGC,eAAG,yaAgBpC;AAAC;AASK,IAAMC,UAAU,GAAG,SAAbA,UAAU,CAAIC,SAAoC,EAAgC;EAC3F,OAAO,SAASC,UAAU,OAAgC;IAAA,IAA7BC,eAAe,QAAfA,eAAe;MAAEC,QAAQ,QAARA,QAAQ;IAClD,kBAA6C,IAAAC,uBAAU,GAAE;MAAjDC,MAAM,eAANA,MAAM;MAAEC,SAAS,eAATA,SAAS;MAAEC,aAAa,eAAbA,aAAa;IAExC,IAAMC,qBAAqB;MAAA,mGAAG,iBAAOC,MAAmC;QAAA;QAAA;UAAA;YAAA;cAAA,MAChEJ,MAAM,IAAI,CAACE,aAAa;gBAAA;gBAAA;cAAA;cAAA,iCACjBL,eAAe,CAACO,MAAM,CAAC;YAAA;cAAA;cAAA,OAIXA,MAAM,CAACC,MAAM,CAACC,KAAK,CAAC;gBACvCA,KAAK,EAAEd,kBAAkB;gBACzBe,OAAO,EAAE;kBAAEC,OAAO,EAAE;oBAAE,UAAU,EAAER,MAAM,IAAI;kBAAO;gBAAE;cACzD,CAAC,CAAC;YAAA;cAHIS,QAAQ;cAKRC,eAAe,GAAGD,QAAQ,CAACE,IAAI,CAACC,OAAO,CAACC,gBAAgB,CAACF,IAAI,CAACG,EAAE;cAEtEb,SAAS,CAACS,eAAe,CAAC;cAAC,iCAEpBb,eAAe,CAACO,MAAM,CAAC;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA,CACjC;MAAA,gBAhBKD,qBAAqB;QAAA;MAAA;IAAA,GAgB1B;IAED,oBAAO,6BAAC,SAAS;MAAC,eAAe,EAAEA;IAAsB,GAAEL,QAAQ,CAAa;EACpF,CAAC;AACL,CAAC;AAAC"}
|