apify-cli 0.21.10-beta.5 → 0.21.10-beta.6

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.
Files changed (254) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/actor.js +3 -0
  3. package/dist/actor.js.map +1 -0
  4. package/dist/apify.js +3 -0
  5. package/dist/apify.js.map +1 -0
  6. package/dist/chunk-SA3HH2MX.js +236 -0
  7. package/dist/chunk-SA3HH2MX.js.map +1 -0
  8. package/dist/index.js +2 -3
  9. package/package.json +6 -6
  10. package/dist/commands/_register.js +0 -72
  11. package/dist/commands/_register.js.map +0 -1
  12. package/dist/commands/actor/_index.js +0 -24
  13. package/dist/commands/actor/_index.js.map +0 -1
  14. package/dist/commands/actor/charge.js +0 -84
  15. package/dist/commands/actor/charge.js.map +0 -1
  16. package/dist/commands/actor/get-input.js +0 -10
  17. package/dist/commands/actor/get-input.js.map +0 -1
  18. package/dist/commands/actor/get-public-url.js +0 -52
  19. package/dist/commands/actor/get-public-url.js.map +0 -1
  20. package/dist/commands/actor/get-value.js +0 -18
  21. package/dist/commands/actor/get-value.js.map +0 -1
  22. package/dist/commands/actor/push-data.js +0 -38
  23. package/dist/commands/actor/push-data.js.map +0 -1
  24. package/dist/commands/actor/set-value.js +0 -52
  25. package/dist/commands/actor/set-value.js.map +0 -1
  26. package/dist/commands/actors/_index.js +0 -28
  27. package/dist/commands/actors/_index.js.map +0 -1
  28. package/dist/commands/actors/build.js +0 -6
  29. package/dist/commands/actors/build.js.map +0 -1
  30. package/dist/commands/actors/call.js +0 -224
  31. package/dist/commands/actors/call.js.map +0 -1
  32. package/dist/commands/actors/info.js +0 -203
  33. package/dist/commands/actors/info.js.map +0 -1
  34. package/dist/commands/actors/ls.js +0 -226
  35. package/dist/commands/actors/ls.js.map +0 -1
  36. package/dist/commands/actors/pull.js +0 -150
  37. package/dist/commands/actors/pull.js.map +0 -1
  38. package/dist/commands/actors/push.js +0 -300
  39. package/dist/commands/actors/push.js.map +0 -1
  40. package/dist/commands/actors/rm.js +0 -43
  41. package/dist/commands/actors/rm.js.map +0 -1
  42. package/dist/commands/actors/start.js +0 -125
  43. package/dist/commands/actors/start.js.map +0 -1
  44. package/dist/commands/builds/_index.js +0 -22
  45. package/dist/commands/builds/_index.js.map +0 -1
  46. package/dist/commands/builds/create.js +0 -130
  47. package/dist/commands/builds/create.js.map +0 -1
  48. package/dist/commands/builds/info.js +0 -78
  49. package/dist/commands/builds/info.js.map +0 -1
  50. package/dist/commands/builds/log.js +0 -35
  51. package/dist/commands/builds/log.js.map +0 -1
  52. package/dist/commands/builds/ls.js +0 -141
  53. package/dist/commands/builds/ls.js.map +0 -1
  54. package/dist/commands/builds/rm.js +0 -59
  55. package/dist/commands/builds/rm.js.map +0 -1
  56. package/dist/commands/call.js +0 -5
  57. package/dist/commands/call.js.map +0 -1
  58. package/dist/commands/cli-management/install.js +0 -138
  59. package/dist/commands/cli-management/install.js.map +0 -1
  60. package/dist/commands/cli-management/upgrade.js +0 -270
  61. package/dist/commands/cli-management/upgrade.js.map +0 -1
  62. package/dist/commands/create.js +0 -264
  63. package/dist/commands/create.js.map +0 -1
  64. package/dist/commands/datasets/_index.js +0 -25
  65. package/dist/commands/datasets/_index.js.map +0 -1
  66. package/dist/commands/datasets/create.js +0 -38
  67. package/dist/commands/datasets/create.js.map +0 -1
  68. package/dist/commands/datasets/get-items.js +0 -84
  69. package/dist/commands/datasets/get-items.js.map +0 -1
  70. package/dist/commands/datasets/info.js +0 -125
  71. package/dist/commands/datasets/info.js.map +0 -1
  72. package/dist/commands/datasets/ls.js +0 -73
  73. package/dist/commands/datasets/ls.js.map +0 -1
  74. package/dist/commands/datasets/push-items.js +0 -70
  75. package/dist/commands/datasets/push-items.js.map +0 -1
  76. package/dist/commands/datasets/rename.js +0 -71
  77. package/dist/commands/datasets/rename.js.map +0 -1
  78. package/dist/commands/datasets/rm.js +0 -48
  79. package/dist/commands/datasets/rm.js.map +0 -1
  80. package/dist/commands/edit-input-schema.js +0 -162
  81. package/dist/commands/edit-input-schema.js.map +0 -1
  82. package/dist/commands/help.js +0 -43
  83. package/dist/commands/help.js.map +0 -1
  84. package/dist/commands/info.js +0 -21
  85. package/dist/commands/info.js.map +0 -1
  86. package/dist/commands/init-wrap-scrapy.js +0 -27
  87. package/dist/commands/init-wrap-scrapy.js.map +0 -1
  88. package/dist/commands/init.js +0 -94
  89. package/dist/commands/init.js.map +0 -1
  90. package/dist/commands/key-value-stores/_index.js +0 -30
  91. package/dist/commands/key-value-stores/_index.js.map +0 -1
  92. package/dist/commands/key-value-stores/create.js +0 -38
  93. package/dist/commands/key-value-stores/create.js.map +0 -1
  94. package/dist/commands/key-value-stores/delete-value.js +0 -61
  95. package/dist/commands/key-value-stores/delete-value.js.map +0 -1
  96. package/dist/commands/key-value-stores/get-value.js +0 -70
  97. package/dist/commands/key-value-stores/get-value.js.map +0 -1
  98. package/dist/commands/key-value-stores/info.js +0 -127
  99. package/dist/commands/key-value-stores/info.js.map +0 -1
  100. package/dist/commands/key-value-stores/keys.js +0 -61
  101. package/dist/commands/key-value-stores/keys.js.map +0 -1
  102. package/dist/commands/key-value-stores/ls.js +0 -70
  103. package/dist/commands/key-value-stores/ls.js.map +0 -1
  104. package/dist/commands/key-value-stores/rename.js +0 -71
  105. package/dist/commands/key-value-stores/rename.js.map +0 -1
  106. package/dist/commands/key-value-stores/rm.js +0 -48
  107. package/dist/commands/key-value-stores/rm.js.map +0 -1
  108. package/dist/commands/key-value-stores/set-value.js +0 -57
  109. package/dist/commands/key-value-stores/set-value.js.map +0 -1
  110. package/dist/commands/login.js +0 -183
  111. package/dist/commands/login.js.map +0 -1
  112. package/dist/commands/logout.js +0 -16
  113. package/dist/commands/logout.js.map +0 -1
  114. package/dist/commands/pull.js +0 -5
  115. package/dist/commands/pull.js.map +0 -1
  116. package/dist/commands/push.js +0 -5
  117. package/dist/commands/push.js.map +0 -1
  118. package/dist/commands/request-queues/_index.js +0 -9
  119. package/dist/commands/request-queues/_index.js.map +0 -1
  120. package/dist/commands/run.js +0 -434
  121. package/dist/commands/run.js.map +0 -1
  122. package/dist/commands/runs/_index.js +0 -23
  123. package/dist/commands/runs/_index.js.map +0 -1
  124. package/dist/commands/runs/abort.js +0 -68
  125. package/dist/commands/runs/abort.js.map +0 -1
  126. package/dist/commands/runs/info.js +0 -238
  127. package/dist/commands/runs/info.js.map +0 -1
  128. package/dist/commands/runs/log.js +0 -32
  129. package/dist/commands/runs/log.js.map +0 -1
  130. package/dist/commands/runs/ls.js +0 -106
  131. package/dist/commands/runs/ls.js.map +0 -1
  132. package/dist/commands/runs/resurrect.js +0 -54
  133. package/dist/commands/runs/resurrect.js.map +0 -1
  134. package/dist/commands/runs/rm.js +0 -58
  135. package/dist/commands/runs/rm.js.map +0 -1
  136. package/dist/commands/secrets/_index.js +0 -25
  137. package/dist/commands/secrets/_index.js.map +0 -1
  138. package/dist/commands/secrets/add.js +0 -22
  139. package/dist/commands/secrets/add.js.map +0 -1
  140. package/dist/commands/secrets/rm.js +0 -18
  141. package/dist/commands/secrets/rm.js.map +0 -1
  142. package/dist/commands/task/_index.js +0 -11
  143. package/dist/commands/task/_index.js.map +0 -1
  144. package/dist/commands/task/run.js +0 -91
  145. package/dist/commands/task/run.js.map +0 -1
  146. package/dist/commands/validate-schema.js +0 -44
  147. package/dist/commands/validate-schema.js.map +0 -1
  148. package/dist/entrypoints/_shared.js +0 -258
  149. package/dist/entrypoints/_shared.js.map +0 -1
  150. package/dist/entrypoints/actor.js +0 -19
  151. package/dist/entrypoints/actor.js.map +0 -1
  152. package/dist/entrypoints/apify.js +0 -18
  153. package/dist/entrypoints/apify.js.map +0 -1
  154. package/dist/index.js.map +0 -1
  155. package/dist/lib/actor.js +0 -74
  156. package/dist/lib/actor.js.map +0 -1
  157. package/dist/lib/command-framework/apify-command.js +0 -429
  158. package/dist/lib/command-framework/apify-command.js.map +0 -1
  159. package/dist/lib/command-framework/args.js +0 -24
  160. package/dist/lib/command-framework/args.js.map +0 -1
  161. package/dist/lib/command-framework/flags.js +0 -99
  162. package/dist/lib/command-framework/flags.js.map +0 -1
  163. package/dist/lib/command-framework/help/CommandHelp.js +0 -233
  164. package/dist/lib/command-framework/help/CommandHelp.js.map +0 -1
  165. package/dist/lib/command-framework/help/CommandWithSubcommands.js +0 -75
  166. package/dist/lib/command-framework/help/CommandWithSubcommands.js.map +0 -1
  167. package/dist/lib/command-framework/help/_BaseCommandRenderer.js +0 -63
  168. package/dist/lib/command-framework/help/_BaseCommandRenderer.js.map +0 -1
  169. package/dist/lib/command-framework/help/consts.js +0 -27
  170. package/dist/lib/command-framework/help/consts.js.map +0 -1
  171. package/dist/lib/command-framework/help.js +0 -105
  172. package/dist/lib/command-framework/help.js.map +0 -1
  173. package/dist/lib/commands/pretty-print-bytes.js +0 -13
  174. package/dist/lib/commands/pretty-print-bytes.js.map +0 -1
  175. package/dist/lib/commands/pretty-print-status.js +0 -29
  176. package/dist/lib/commands/pretty-print-status.js.map +0 -1
  177. package/dist/lib/commands/read-stdin.js +0 -42
  178. package/dist/lib/commands/read-stdin.js.map +0 -1
  179. package/dist/lib/commands/resolve-actor-context.js +0 -70
  180. package/dist/lib/commands/resolve-actor-context.js.map +0 -1
  181. package/dist/lib/commands/resolve-input.js +0 -162
  182. package/dist/lib/commands/resolve-input.js.map +0 -1
  183. package/dist/lib/commands/responsive-table.js +0 -129
  184. package/dist/lib/commands/responsive-table.js.map +0 -1
  185. package/dist/lib/commands/run-on-cloud.js +0 -126
  186. package/dist/lib/commands/run-on-cloud.js.map +0 -1
  187. package/dist/lib/commands/storage-size.js +0 -8
  188. package/dist/lib/commands/storage-size.js.map +0 -1
  189. package/dist/lib/commands/storages.js +0 -30
  190. package/dist/lib/commands/storages.js.map +0 -1
  191. package/dist/lib/consts.js +0 -58
  192. package/dist/lib/consts.js.map +0 -1
  193. package/dist/lib/create-utils.js +0 -156
  194. package/dist/lib/create-utils.js.map +0 -1
  195. package/dist/lib/exec.js +0 -34
  196. package/dist/lib/exec.js.map +0 -1
  197. package/dist/lib/files.js +0 -54
  198. package/dist/lib/files.js.map +0 -1
  199. package/dist/lib/hooks/runtimes/javascript.js +0 -86
  200. package/dist/lib/hooks/runtimes/javascript.js.map +0 -1
  201. package/dist/lib/hooks/runtimes/python.js +0 -80
  202. package/dist/lib/hooks/runtimes/python.js.map +0 -1
  203. package/dist/lib/hooks/runtimes/utils.js +0 -16
  204. package/dist/lib/hooks/runtimes/utils.js.map +0 -1
  205. package/dist/lib/hooks/useActorConfig.js +0 -177
  206. package/dist/lib/hooks/useActorConfig.js.map +0 -1
  207. package/dist/lib/hooks/useCLIMetadata.js +0 -83
  208. package/dist/lib/hooks/useCLIMetadata.js.map +0 -1
  209. package/dist/lib/hooks/useCLIVersionAssets.js +0 -92
  210. package/dist/lib/hooks/useCLIVersionAssets.js.map +0 -1
  211. package/dist/lib/hooks/useCLIVersionCheck.js +0 -91
  212. package/dist/lib/hooks/useCLIVersionCheck.js.map +0 -1
  213. package/dist/lib/hooks/useCommandSuggestions.js +0 -37
  214. package/dist/lib/hooks/useCommandSuggestions.js.map +0 -1
  215. package/dist/lib/hooks/useCwdProject.js +0 -174
  216. package/dist/lib/hooks/useCwdProject.js.map +0 -1
  217. package/dist/lib/hooks/useLocalState.js +0 -56
  218. package/dist/lib/hooks/useLocalState.js.map +0 -1
  219. package/dist/lib/hooks/useModuleVersion.js +0 -103
  220. package/dist/lib/hooks/useModuleVersion.js.map +0 -1
  221. package/dist/lib/hooks/useStdin.js +0 -65
  222. package/dist/lib/hooks/useStdin.js.map +0 -1
  223. package/dist/lib/input_schema.js +0 -130
  224. package/dist/lib/input_schema.js.map +0 -1
  225. package/dist/lib/outputs.js +0 -45
  226. package/dist/lib/outputs.js.map +0 -1
  227. package/dist/lib/project_analyzer.js +0 -30
  228. package/dist/lib/project_analyzer.js.map +0 -1
  229. package/dist/lib/projects/CrawleeAnalyzer.js +0 -20
  230. package/dist/lib/projects/CrawleeAnalyzer.js.map +0 -1
  231. package/dist/lib/projects/OldApifySDKAnalyzer.js +0 -38
  232. package/dist/lib/projects/OldApifySDKAnalyzer.js.map +0 -1
  233. package/dist/lib/projects/scrapy/ScrapyProjectAnalyzer.js +0 -73
  234. package/dist/lib/projects/scrapy/ScrapyProjectAnalyzer.js.map +0 -1
  235. package/dist/lib/projects/scrapy/Spider.js +0 -13
  236. package/dist/lib/projects/scrapy/Spider.js.map +0 -1
  237. package/dist/lib/projects/scrapy/SpiderFileAnalyzer.js +0 -20
  238. package/dist/lib/projects/scrapy/SpiderFileAnalyzer.js.map +0 -1
  239. package/dist/lib/projects/scrapy/wrapScrapyProject.js +0 -113
  240. package/dist/lib/projects/scrapy/wrapScrapyProject.js.map +0 -1
  241. package/dist/lib/projects/shared.js +0 -13
  242. package/dist/lib/projects/shared.js.map +0 -1
  243. package/dist/lib/secrets.js +0 -106
  244. package/dist/lib/secrets.js.map +0 -1
  245. package/dist/lib/telemetry.js +0 -86
  246. package/dist/lib/telemetry.js.map +0 -1
  247. package/dist/lib/types.js +0 -4
  248. package/dist/lib/types.js.map +0 -1
  249. package/dist/lib/utils/cliDebugPrint.js +0 -7
  250. package/dist/lib/utils/cliDebugPrint.js.map +0 -1
  251. package/dist/lib/utils/confirm.js +0 -28
  252. package/dist/lib/utils/confirm.js.map +0 -1
  253. package/dist/lib/utils.js +0 -457
  254. package/dist/lib/utils.js.map +0 -1
package/dist/lib/utils.js DELETED
@@ -1,457 +0,0 @@
1
- import { createWriteStream, existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
2
- import { mkdir, readFile } from 'node:fs/promises';
3
- import { get } from 'node:https';
4
- import { dirname, join } from 'node:path';
5
- import process from 'node:process';
6
- import { finished } from 'node:stream/promises';
7
- import { DurationFormatter as SapphireDurationFormatter, TimeTypes } from '@sapphire/duration';
8
- import { Timestamp } from '@sapphire/timestamp';
9
- import AdmZip from 'adm-zip';
10
- import _Ajv2019 from 'ajv/dist/2019.js';
11
- import { ApifyClient } from 'apify-client';
12
- import archiver from 'archiver';
13
- import { AxiosHeaders } from 'axios';
14
- import escapeStringRegexp from 'escape-string-regexp';
15
- import { globby } from 'globby';
16
- import { getEncoding } from 'istextorbinary';
17
- import { Mime } from 'mime';
18
- import otherMimes from 'mime/types/other.js';
19
- import standardMimes from 'mime/types/standard.js';
20
- import { gte, minVersion, satisfies } from 'semver';
21
- import { ACTOR_ENV_VARS, ACTOR_JOB_TERMINAL_STATUSES, ACTOR_NAME, APIFY_ENV_VARS, KEY_VALUE_STORE_KEYS, LOCAL_ACTOR_ENV_VARS, LOCAL_STORAGE_SUBDIRS, SOURCE_FILE_FORMATS, } from '@apify/consts';
22
- import { APIFY_CLIENT_DEFAULT_HEADERS, AUTH_FILE_PATH, DEFAULT_LOCAL_STORAGE_DIR, GLOBAL_CONFIGS_FOLDER, INPUT_FILE_REG_EXP, LOCAL_CONFIG_PATH, MINIMUM_SUPPORTED_PYTHON_VERSION, SUPPORTED_NODEJS_VERSION, } from './consts.js';
23
- import { deleteFile, ensureFolderExistsSync, rimrafPromised } from './files.js';
24
- // Export AJV properly: https://github.com/ajv-validator/ajv/issues/2132
25
- // Welcome to the state of JavaScript/TypeScript and CJS/ESM interop.
26
- export const Ajv2019 = _Ajv2019;
27
- export const httpsGet = async (url) => {
28
- return new Promise((resolve, reject) => {
29
- get(url, (response) => {
30
- // Handle redirects
31
- if (response.statusCode === 301 || response.statusCode === 302) {
32
- resolve(httpsGet(response.headers.location));
33
- // Destroy the response to close the HTTP connection, otherwise this hangs for a long time with Node 19+ (due to HTTP keep-alive).
34
- response.destroy();
35
- }
36
- else {
37
- resolve(response);
38
- }
39
- }).on('error', reject);
40
- });
41
- };
42
- export const getLocalStorageDir = () => {
43
- const envVar = APIFY_ENV_VARS.LOCAL_STORAGE_DIR;
44
- return process.env[envVar] || process.env.CRAWLEE_STORAGE_DIR || DEFAULT_LOCAL_STORAGE_DIR;
45
- };
46
- export const getLocalKeyValueStorePath = (storeId) => {
47
- const envVar = ACTOR_ENV_VARS.DEFAULT_KEY_VALUE_STORE_ID;
48
- const storeDir = storeId || process.env[envVar] || LOCAL_ACTOR_ENV_VARS[envVar];
49
- return join(getLocalStorageDir(), LOCAL_STORAGE_SUBDIRS.keyValueStores, storeDir);
50
- };
51
- export const getLocalDatasetPath = (storeId) => {
52
- const envVar = ACTOR_ENV_VARS.DEFAULT_DATASET_ID;
53
- const storeDir = storeId || process.env[envVar] || LOCAL_ACTOR_ENV_VARS[envVar];
54
- return join(getLocalStorageDir(), LOCAL_STORAGE_SUBDIRS.datasets, storeDir);
55
- };
56
- export const getLocalRequestQueuePath = (storeId) => {
57
- const envVar = ACTOR_ENV_VARS.DEFAULT_REQUEST_QUEUE_ID;
58
- const storeDir = storeId || process.env[envVar] || LOCAL_ACTOR_ENV_VARS[envVar];
59
- return join(getLocalStorageDir(), LOCAL_STORAGE_SUBDIRS.requestQueues, storeDir);
60
- };
61
- /**
62
- * Returns object from auth file or empty object.
63
- */
64
- export const getLocalUserInfo = async () => {
65
- let result = {};
66
- try {
67
- const raw = await readFile(AUTH_FILE_PATH(), 'utf-8');
68
- result = JSON.parse(raw);
69
- }
70
- catch {
71
- return {};
72
- }
73
- if (!result.username && !result.id) {
74
- throw new Error('Corrupted local user info was found. Please run "apify login" to fix it.');
75
- }
76
- return result;
77
- };
78
- /**
79
- * Gets instance of ApifyClient for user otherwise throws error
80
- */
81
- export async function getLoggedClientOrThrow() {
82
- const loggedClient = await getLoggedClient();
83
- if (!loggedClient) {
84
- throw new Error('You are not logged in with your Apify account. Call "apify login" to fix that.');
85
- }
86
- return loggedClient;
87
- }
88
- const getTokenWithAuthFileFallback = (existingToken) => {
89
- if (!existingToken && existsSync(GLOBAL_CONFIGS_FOLDER()) && existsSync(AUTH_FILE_PATH())) {
90
- const raw = readFileSync(AUTH_FILE_PATH(), 'utf-8');
91
- return JSON.parse(raw).token;
92
- }
93
- return existingToken;
94
- };
95
- /**
96
- * Returns options for ApifyClient
97
- */
98
- export const getApifyClientOptions = (token, apiBaseUrl) => {
99
- token = getTokenWithAuthFileFallback(token);
100
- return {
101
- token,
102
- baseUrl: apiBaseUrl || process.env.APIFY_CLIENT_BASE_URL,
103
- requestInterceptors: [
104
- (config) => {
105
- config.headers ??= new AxiosHeaders();
106
- for (const [key, value] of Object.entries(APIFY_CLIENT_DEFAULT_HEADERS)) {
107
- config.headers[key] = value;
108
- }
109
- return config;
110
- },
111
- ],
112
- };
113
- };
114
- /**
115
- * Gets instance of ApifyClient for token or for params from global auth file.
116
- * NOTE: It refreshes global auth file each run
117
- * @param [token]
118
- */
119
- export async function getLoggedClient(token, apiBaseUrl) {
120
- token = getTokenWithAuthFileFallback(token);
121
- const apifyClient = new ApifyClient(getApifyClientOptions(token, apiBaseUrl));
122
- let userInfo;
123
- try {
124
- userInfo = await apifyClient.user('me').get();
125
- }
126
- catch {
127
- return null;
128
- }
129
- // Always refresh Auth file
130
- ensureApifyDirectory(AUTH_FILE_PATH());
131
- writeFileSync(AUTH_FILE_PATH(), JSON.stringify({ token: apifyClient.token, ...userInfo }, null, '\t'));
132
- return apifyClient;
133
- }
134
- export const getLocalConfigPath = (cwd) => join(cwd, LOCAL_CONFIG_PATH);
135
- export const getJsonFileContent = (filePath) => {
136
- if (!existsSync(filePath)) {
137
- return;
138
- }
139
- return JSON.parse(readFileSync(filePath, { encoding: 'utf-8' }));
140
- };
141
- export const getLocalConfig = (cwd) => getJsonFileContent(getLocalConfigPath(cwd));
142
- export const setLocalConfig = async (localConfig, actDir) => {
143
- const fullPath = join(actDir || process.cwd(), LOCAL_CONFIG_PATH);
144
- await mkdir(dirname(fullPath), { recursive: true });
145
- writeFileSync(fullPath, JSON.stringify(localConfig, null, '\t'));
146
- };
147
- const GITIGNORE_REQUIRED_CONTENTS = [getLocalStorageDir(), 'node_modules', '.venv'];
148
- export const setLocalEnv = async (actDir) => {
149
- // Create folders for emulation Apify stores
150
- const keyValueStorePath = getLocalKeyValueStorePath();
151
- ensureFolderExistsSync(actDir, getLocalDatasetPath());
152
- ensureFolderExistsSync(actDir, getLocalRequestQueuePath());
153
- ensureFolderExistsSync(actDir, keyValueStorePath);
154
- // Create or update gitignore
155
- const gitignorePath = join(actDir, '.gitignore');
156
- let gitignoreContents = '';
157
- if (existsSync(gitignorePath)) {
158
- gitignoreContents = readFileSync(gitignorePath, { encoding: 'utf-8' });
159
- }
160
- const gitignoreAdditions = [];
161
- for (const gitignoreRequirement of GITIGNORE_REQUIRED_CONTENTS) {
162
- if (!RegExp(`^${escapeStringRegexp(gitignoreRequirement)}$`, 'mg').test(gitignoreContents)) {
163
- gitignoreAdditions.push(gitignoreRequirement);
164
- }
165
- }
166
- if (gitignoreAdditions.length > 0) {
167
- if (gitignoreContents.length > 0) {
168
- gitignoreAdditions.unshift('# Added by Apify CLI');
169
- writeFileSync(gitignorePath, `\n${gitignoreAdditions.join('\n')}\n`, { flag: 'a' });
170
- }
171
- else {
172
- writeFileSync(gitignorePath, `${gitignoreAdditions.join('\n')}\n`, { flag: 'w' });
173
- }
174
- }
175
- };
176
- const mime = new Mime(standardMimes, otherMimes).define({
177
- // .tgz files don't have a MIME type defined, this fixes it
178
- 'application/gzip': ['tgz'],
179
- // Default mime-type for .ts(x) files is video/mp2t. But in our usecases they're almost always TypeScript, which we want to treat as text
180
- 'text/typescript': ['ts', 'tsx', 'mts'],
181
- }, true);
182
- // Detect whether file is binary from its MIME type, or if not available, contents
183
- const getSourceFileFormat = (filePath, fileContent) => {
184
- // Try to detect the MIME type from the file path
185
- const contentType = mime.getType(filePath);
186
- if (contentType) {
187
- const format = contentType.startsWith('text/') ||
188
- contentType.includes('javascript') ||
189
- contentType.includes('json') ||
190
- contentType.includes('xml') ||
191
- contentType.includes('application/node') || // .cjs files
192
- contentType.includes('application/toml') || // for example pyproject.toml files
193
- contentType.includes('application/x-sh') || // .sh files
194
- contentType.includes('application/x-httpd-php') // .php files
195
- ? SOURCE_FILE_FORMATS.TEXT
196
- : SOURCE_FILE_FORMATS.BASE64;
197
- return format;
198
- }
199
- // If the MIME type detection failed, try to detect the file encoding from the file content
200
- const encoding = getEncoding(fileContent);
201
- return encoding === 'binary' ? SOURCE_FILE_FORMATS.BASE64 : SOURCE_FILE_FORMATS.TEXT;
202
- };
203
- export const createSourceFiles = async (paths, cwd) => {
204
- return paths.map((filePath) => {
205
- const file = readFileSync(join(cwd, filePath));
206
- const format = getSourceFileFormat(filePath, file);
207
- return {
208
- name: filePath,
209
- format,
210
- content: format === SOURCE_FILE_FORMATS.TEXT ? file.toString('utf8') : file.toString('base64'),
211
- };
212
- });
213
- };
214
- /**
215
- * Get Actor local files, omit files defined in .gitignore and .git folder
216
- * All dot files(.file) and folders(.folder/) are included.
217
- */
218
- export const getActorLocalFilePaths = async (cwd) => globby(['*', '**/**'], {
219
- ignore: ['.git/**', 'apify_storage', 'node_modules', 'storage', 'crawlee_storage'],
220
- gitignore: true,
221
- dot: true,
222
- cwd,
223
- });
224
- /**
225
- * Create zip file with all Actor files specified with pathsToZip
226
- */
227
- export const createActZip = async (zipName, pathsToZip, cwd) => {
228
- // NOTE: There can be a zip from a previous unfinished operation.
229
- if (existsSync(zipName)) {
230
- await deleteFile(zipName);
231
- }
232
- const writeStream = createWriteStream(zipName);
233
- const archive = archiver('zip');
234
- archive.pipe(writeStream);
235
- pathsToZip.forEach((globPath) => archive.glob(globPath, { cwd }));
236
- await archive.finalize();
237
- };
238
- /**
239
- * Get Actor input from local store
240
- */
241
- export const getLocalInput = (cwd) => {
242
- const defaultLocalStorePath = getLocalKeyValueStorePath();
243
- const folderExists = existsSync(join(cwd, defaultLocalStorePath));
244
- if (!folderExists)
245
- return;
246
- const files = readdirSync(join(cwd, defaultLocalStorePath));
247
- const inputName = files.find((file) => !!file.match(INPUT_FILE_REG_EXP));
248
- // No input file
249
- if (!inputName)
250
- return;
251
- const input = readFileSync(join(cwd, defaultLocalStorePath, inputName));
252
- const contentType = mime.getType(inputName);
253
- return { body: input, contentType, fileName: inputName };
254
- };
255
- export const purgeDefaultQueue = async () => {
256
- const defaultQueuesPath = getLocalRequestQueuePath();
257
- if (existsSync(getLocalStorageDir()) && existsSync(defaultQueuesPath)) {
258
- await rimrafPromised(defaultQueuesPath);
259
- }
260
- };
261
- export const purgeDefaultDataset = async () => {
262
- const defaultDatasetPath = getLocalDatasetPath();
263
- if (existsSync(getLocalStorageDir()) && existsSync(defaultDatasetPath)) {
264
- await rimrafPromised(defaultDatasetPath);
265
- }
266
- };
267
- export const purgeDefaultKeyValueStore = async () => {
268
- const defaultKeyValueStorePath = getLocalKeyValueStorePath();
269
- if (!existsSync(getLocalStorageDir()) || !existsSync(defaultKeyValueStorePath)) {
270
- return;
271
- }
272
- const filesToDelete = readdirSync(defaultKeyValueStorePath);
273
- const deletePromises = [];
274
- filesToDelete.forEach((file) => {
275
- if (!file.match(INPUT_FILE_REG_EXP)) {
276
- deletePromises.push(deleteFile(join(defaultKeyValueStorePath, file)));
277
- }
278
- });
279
- await Promise.all(deletePromises);
280
- };
281
- export const outputJobLog = async ({ job, timeoutMillis, apifyClient, }) => {
282
- const { id: logId, status } = job;
283
- const client = apifyClient || new ApifyClient({ baseUrl: process.env.APIFY_CLIENT_BASE_URL });
284
- // In case job was already done just output log
285
- if (ACTOR_JOB_TERMINAL_STATUSES.includes(status)) {
286
- if (process.env.APIFY_NO_LOGS_IN_TESTS) {
287
- return;
288
- }
289
- const log = await client.log(logId).get();
290
- process.stderr.write(log);
291
- return;
292
- }
293
- // In other case stream it to stderr
294
- // eslint-disable-next-line no-async-promise-executor
295
- return new Promise(async (resolve) => {
296
- const stream = await client.log(logId).stream();
297
- if (!stream) {
298
- resolve('no-logs');
299
- return;
300
- }
301
- let nodeTimeout = null;
302
- stream.on('data', (chunk) => {
303
- // In tests, writing to process.stderr directly messes with vitest's output
304
- // With that said, we still NEED to wait for this stream to end, as otherwise tests become flaky.
305
- if (process.env.APIFY_NO_LOGS_IN_TESTS) {
306
- return;
307
- }
308
- process.stderr.write(chunk.toString());
309
- });
310
- stream.once('end', () => {
311
- resolve('finished');
312
- if (nodeTimeout) {
313
- clearTimeout(nodeTimeout);
314
- }
315
- });
316
- if (timeoutMillis) {
317
- nodeTimeout = setTimeout(() => {
318
- stream.destroy();
319
- resolve('timeouts');
320
- }, timeoutMillis);
321
- }
322
- });
323
- };
324
- /**
325
- * Returns npm command for current os
326
- * NOTE: For window we have to returns npm.cmd instead of npm, otherwise it doesn't work
327
- */
328
- export const getNpmCmd = () => {
329
- return /^win/.test(process.platform) ? 'npm.cmd' : 'npm';
330
- };
331
- /**
332
- * Returns true if apify storage is empty (expect INPUT.*)
333
- */
334
- export const checkIfStorageIsEmpty = async () => {
335
- const filesWithoutInput = await globby([
336
- `${getLocalStorageDir()}/**`,
337
- // Omit INPUT.* file
338
- `!${getLocalKeyValueStorePath()}/${KEY_VALUE_STORE_KEYS.INPUT}.*`,
339
- // Omit INPUT_CLI-* files
340
- `!${getLocalKeyValueStorePath()}/${KEY_VALUE_STORE_KEYS.INPUT}_CLI-*`,
341
- ]);
342
- return filesWithoutInput.length === 0;
343
- };
344
- /**
345
- * Validates Actor name, if finds issue throws error.
346
- * @param actorName
347
- */
348
- export const validateActorName = (actorName) => {
349
- if (!ACTOR_NAME.REGEX.test(actorName)) {
350
- throw new Error('The Actor name must be a DNS hostname-friendly string (e.g. my-newest-actor).');
351
- }
352
- if (actorName.length < ACTOR_NAME.MIN_LENGTH) {
353
- throw new Error('The Actor name must be at least 3 characters long.');
354
- }
355
- if (actorName.length > ACTOR_NAME.MAX_LENGTH) {
356
- throw new Error('The Actor name must be a maximum of 30 characters long.');
357
- }
358
- };
359
- export const sanitizeActorName = (actorName) => {
360
- let sanitizedName = actorName.replaceAll(/[^a-zA-Z0-9-]/g, '-');
361
- if (sanitizedName.length < ACTOR_NAME.MIN_LENGTH) {
362
- sanitizedName = `${sanitizedName}-apify-actor`;
363
- }
364
- sanitizedName = sanitizedName.replaceAll(/^-+/g, '').replaceAll(/-+$/g, '');
365
- return sanitizedName.slice(0, ACTOR_NAME.MAX_LENGTH);
366
- };
367
- export const isPythonVersionSupported = (installedPythonVersion) => {
368
- return satisfies(installedPythonVersion, `^${MINIMUM_SUPPORTED_PYTHON_VERSION}`);
369
- };
370
- export const isNodeVersionSupported = (installedNodeVersion) => {
371
- // SUPPORTED_NODEJS_VERSION can be a version range,
372
- // we need to get the minimum supported version from that range to be able to compare them
373
- const minimumSupportedNodeVersion = minVersion(SUPPORTED_NODEJS_VERSION);
374
- return gte(installedNodeVersion, minimumSupportedNodeVersion);
375
- };
376
- export const downloadAndUnzip = async ({ url, pathTo }) => {
377
- const zipStream = await httpsGet(url);
378
- const chunks = [];
379
- zipStream.on('data', (chunk) => chunks.push(chunk));
380
- await finished(zipStream);
381
- const zip = new AdmZip(Buffer.concat(chunks));
382
- zip.extractAllTo(pathTo, true);
383
- };
384
- /**
385
- * Ensures the Apify directory exists, as well as nested folders (for tests)
386
- */
387
- export function ensureApifyDirectory(file) {
388
- const path = dirname(file);
389
- mkdirSync(path, { recursive: true });
390
- }
391
- export const TimestampFormatter = new Timestamp('YYYY-MM-DD [at] HH:mm:ss');
392
- export const MultilineTimestampFormatter = new Timestamp(`YYYY-MM-DD[\n]HH:mm:ss`);
393
- export const DateOnlyTimestampFormatter = new Timestamp('YYYY-MM-DD');
394
- export const DurationFormatter = new SapphireDurationFormatter();
395
- export const ShortDurationFormatter = new SapphireDurationFormatter({
396
- [TimeTypes.Day]: {
397
- DEFAULT: 'd',
398
- },
399
- [TimeTypes.Hour]: {
400
- DEFAULT: 'h',
401
- },
402
- [TimeTypes.Minute]: {
403
- DEFAULT: 'm',
404
- },
405
- [TimeTypes.Month]: {
406
- DEFAULT: 'M',
407
- },
408
- [TimeTypes.Second]: {
409
- DEFAULT: 's',
410
- },
411
- [TimeTypes.Week]: {
412
- DEFAULT: 'w',
413
- },
414
- [TimeTypes.Year]: {
415
- DEFAULT: 'y',
416
- },
417
- });
418
- /**
419
- * A "polyfill" for Object.groupBy
420
- */
421
- export function objectGroupBy(items, keySelector) {
422
- if ('groupBy' in Object) {
423
- return Object.groupBy(items, keySelector);
424
- }
425
- const result = {};
426
- let i = 0;
427
- for (const item of items) {
428
- const key = keySelector(item, i++);
429
- if (!result[key]) {
430
- result[key] = [];
431
- }
432
- result[key].push(item);
433
- }
434
- return result;
435
- }
436
- /**
437
- * A "polyfill" for Map.groupBy
438
- */
439
- export function mapGroupBy(items, keySelector) {
440
- const map = new Map();
441
- let index = 0;
442
- for (const value of items) {
443
- const key = keySelector(value, index++);
444
- const list = map.get(key);
445
- if (list) {
446
- list.push(value);
447
- }
448
- else {
449
- map.set(key, [value]);
450
- }
451
- }
452
- return map;
453
- }
454
- export function printJsonToStdout(object) {
455
- console.log(JSON.stringify(object, null, 2));
456
- }
457
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7G,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,IAAI,yBAAyB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAiB,WAAW,EAAuC,MAAM,cAAc,CAAC;AAC/F,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAO,aAAa,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,EACN,cAAc,EACd,2BAA2B,EAC3B,UAAU,EACV,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,GACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACN,4BAA4B,EAC5B,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,gCAAgC,EAChC,wBAAwB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGhF,wEAAwE;AACxE,qEAAqE;AACrE,MAAM,CAAC,MAAM,OAAO,GAAG,QAAgE,CAAC;AAExF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;IAC7C,OAAO,IAAI,OAAO,CAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvD,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE;YACrB,mBAAmB;YACnB,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC,CAAC;gBAC9C,kIAAkI;gBAClI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnB,CAAC;QACF,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACtC,MAAM,MAAM,GAAG,cAAc,CAAC,iBAAiB,CAAC;IAEhD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,yBAAyB,CAAC;AAC5F,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC7D,MAAM,MAAM,GAAG,cAAc,CAAC,0BAA0B,CAAC;IACzD,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAEhF,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,qBAAqB,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AACnF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,EAAE;IACvD,MAAM,MAAM,GAAG,cAAc,CAAC,kBAAkB,CAAC;IACjD,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAEhF,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC5D,MAAM,MAAM,GAAG,cAAc,CAAC,wBAAwB,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAEhF,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAuB,EAAE;IAC7D,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;QACtD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC3C,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;IAE7C,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;IACnG,CAAC;IAED,OAAO,YAAY,CAAC;AACrB,CAAC;AAED,MAAM,4BAA4B,GAAG,CAAC,aAAsB,EAAE,EAAE;IAC/D,IAAI,CAAC,aAAa,IAAI,UAAU,CAAC,qBAAqB,EAAE,CAAC,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAC3F,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAC9B,CAAC;IAED,OAAO,aAAa,CAAC;AACtB,CAAC,CAAC;AAKF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAc,EAAE,UAAmB,EAAsB,EAAE;IAChG,KAAK,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IAE5C,OAAO;QACN,KAAK;QACL,OAAO,EAAE,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACxD,mBAAmB,EAAE;YACpB,CAAC,MAAM,EAAE,EAAE;gBACV,MAAM,CAAC,OAAO,KAAK,IAAI,YAAY,EAAqB,CAAC;gBAEzD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE,CAAC;oBACzE,MAAM,CAAC,OAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC9B,CAAC;gBAED,OAAO,MAAM,CAAC;YACf,CAAC;SACD;KACD,CAAC;AACH,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAc,EAAE,UAAmB;IACxE,KAAK,GAAG,4BAA4B,CAAC,KAAK,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAE9E,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACJ,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;IAED,2BAA2B;IAC3B,oBAAoB,CAAC,cAAc,EAAE,CAAC,CAAC;IAEvC,aAAa,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEvG,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAA8B,QAAgB,EAAE,EAAE;IACnF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO;IACR,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAM,CAAC;AACvE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,WAAoC,EAAE,MAAe,EAAE,EAAE;IAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAElE,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,kBAAkB,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AAEpF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;IACnD,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAC;IACtD,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC;IACtD,sBAAsB,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC;IAC3D,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAElD,6BAA6B;IAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjD,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAC3B,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,iBAAiB,GAAG,YAAY,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,kBAAkB,GAAG,EAAE,CAAC;IAC9B,KAAK,MAAM,oBAAoB,IAAI,2BAA2B,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAC5F,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IAED,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,kBAAkB,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;YACnD,aAAa,CAAC,aAAa,EAAE,KAAK,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACP,aAAa,CAAC,aAAa,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;QACnF,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,MAAM,CACtD;IACC,2DAA2D;IAC3D,kBAAkB,EAAE,CAAC,KAAK,CAAC;IAC3B,yIAAyI;IACzI,iBAAiB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;CACvC,EACD,IAAI,CACJ,CAAC;AAEF,kFAAkF;AAClF,MAAM,mBAAmB,GAAG,CAAC,QAAgB,EAAE,WAAmB,EAAE,EAAE;IACrE,iDAAiD;IACjD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,MAAM,GACX,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC;YAC/B,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC;YAClC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3B,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,aAAa;YACzD,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,mCAAmC;YAC/E,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,YAAY;YACxD,WAAW,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,aAAa;YAC5D,CAAC,CAAC,mBAAmB,CAAC,IAAI;YAC1B,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAE/B,OAAO,MAAM,CAAC;IACf,CAAC;IAED,2FAA2F;IAC3F,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC;AACtF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,KAAe,EAAE,GAAW,EAAE,EAAE;IACvE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO;YACN,IAAI,EAAE,QAAQ;YACd,MAAM;YACN,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;SAC9F,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,GAAY,EAAE,EAAE,CAC5D,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE;IACtB,MAAM,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,CAAC;IAClF,SAAS,EAAE,IAAI;IACf,GAAG,EAAE,IAAI;IACT,GAAG;CACH,CAAC,CAAC;AAEJ;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,OAAe,EAAE,UAAoB,EAAE,GAAW,EAAE,EAAE;IACxF,iEAAiE;IACjE,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAE1B,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAElE,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,EAAE;IAC5C,MAAM,qBAAqB,GAAG,yBAAyB,EAAE,CAAC;IAE1D,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAElE,IAAI,CAAC,YAAY;QAAE,OAAO;IAE1B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzE,gBAAgB;IAChB,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;IAC3C,MAAM,iBAAiB,GAAG,wBAAwB,EAAE,CAAC;IACrD,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACvE,MAAM,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;IAC7C,MAAM,kBAAkB,GAAG,mBAAmB,EAAE,CAAC;IACjD,IAAI,UAAU,CAAC,kBAAkB,EAAE,CAAC,IAAI,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxE,MAAM,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,IAAI,EAAE;IACnD,MAAM,wBAAwB,GAAG,yBAAyB,EAAE,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAChF,OAAO;IACR,CAAC;IACD,MAAM,aAAa,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAE5D,MAAM,cAAc,GAAoB,EAAE,CAAC;IAC3C,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YACrC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACvE,CAAC;IACF,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,EAClC,GAAG,EACH,aAAa,EACb,WAAW,GAKX,EAAE,EAAE;IACJ,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAClC,MAAM,MAAM,GAAG,WAAW,IAAI,IAAI,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAE9F,+CAA+C;IAC/C,IAAI,2BAA2B,CAAC,QAAQ,CAAC,MAAe,CAAC,EAAE,CAAC;QAC3D,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;YACxC,OAAO;QACR,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,CAAC,CAAC;QAC3B,OAAO;IACR,CAAC;IAED,oCAAoC;IACpC,qDAAqD;IACrD,OAAO,IAAI,OAAO,CAAsC,KAAK,EAAE,OAAO,EAAE,EAAE;QACzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,CAAC,SAAS,CAAC,CAAC;YACnB,OAAO;QACR,CAAC;QAED,IAAI,WAAW,GAA0B,IAAI,CAAC;QAE9C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,2EAA2E;YAC3E,iGAAiG;YACjG,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;gBACxC,OAAO;YACR,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,UAAU,CAAC,CAAC;YAEpB,IAAI,WAAW,EAAE,CAAC;gBACjB,YAAY,CAAC,WAAW,CAAC,CAAC;YAC3B,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,aAAa,EAAE,CAAC;YACnB,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,UAAU,CAAC,CAAC;YACrB,CAAC,EAAE,aAAa,CAAC,CAAC;QACnB,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,GAAW,EAAE;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1D,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;IAC/C,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC;QACtC,GAAG,kBAAkB,EAAE,KAAK;QAC5B,oBAAoB;QACpB,IAAI,yBAAyB,EAAE,IAAI,oBAAoB,CAAC,KAAK,IAAI;QACjE,yBAAyB;QACzB,IAAI,yBAAyB,EAAE,IAAI,oBAAoB,CAAC,KAAK,QAAQ;KACrE,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE;IACtD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IAClG,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC5E,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,EAAE;IACtD,IAAI,aAAa,GAAG,SAAS,CAAC,UAAU,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAEhE,IAAI,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QAClD,aAAa,GAAG,GAAG,aAAa,cAAc,CAAC;IAChD,CAAC;IAED,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE5E,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,sBAA8B,EAAE,EAAE;IAC1E,OAAO,SAAS,CAAC,sBAAsB,EAAE,IAAI,gCAAgC,EAAE,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,oBAA4B,EAAE,EAAE;IACtE,mDAAmD;IACnD,0FAA0F;IAC1F,MAAM,2BAA2B,GAAG,UAAU,CAAC,wBAAwB,CAAE,CAAC;IAC1E,OAAO,GAAG,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAmC,EAAE,EAAE;IAC1F,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3B,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,yBAAyB,EAAE,CAAC;AAEjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,yBAAyB,CAAC;IACnE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QAChB,OAAO,EAAE,GAAG;KACZ;IACD,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACjB,OAAO,EAAE,GAAG;KACZ;IACD,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QACnB,OAAO,EAAE,GAAG;KACZ;IACD,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QAClB,OAAO,EAAE,GAAG;KACZ;IACD,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QACnB,OAAO,EAAE,GAAG;KACZ;IACD,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACjB,OAAO,EAAE,GAAG;KACZ;IACD,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;QACjB,OAAO,EAAE,GAAG;KACZ;CACD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,aAAa,CAC5B,KAAkB,EAClB,WAA0C;IAE1C,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACzB,OAAQ,MAAM,CAAC,OAAgC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAClB,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAO,KAAkB,EAAE,WAA0C;IAC9F,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE1B,IAAI,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,CAAC;IACF,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAe;IAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC"}