swipium 1.0.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.
Files changed (387) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/appMap/automationLink.js +74 -0
  4. package/dist/appMap/automationLink.js.map +1 -0
  5. package/dist/appMap/build.js +193 -0
  6. package/dist/appMap/build.js.map +1 -0
  7. package/dist/appMap/codeIndex.js +73 -0
  8. package/dist/appMap/codeIndex.js.map +1 -0
  9. package/dist/appMap/featureModel.js +83 -0
  10. package/dist/appMap/featureModel.js.map +1 -0
  11. package/dist/appMap/firstRunApply.js +131 -0
  12. package/dist/appMap/firstRunApply.js.map +1 -0
  13. package/dist/appMap/fsWalk.js +75 -0
  14. package/dist/appMap/fsWalk.js.map +1 -0
  15. package/dist/appMap/issues.js +227 -0
  16. package/dist/appMap/issues.js.map +1 -0
  17. package/dist/appMap/migrations.js +87 -0
  18. package/dist/appMap/migrations.js.map +1 -0
  19. package/dist/appMap/prelaunch.js +66 -0
  20. package/dist/appMap/prelaunch.js.map +1 -0
  21. package/dist/appMap/projectRegistry.js +70 -0
  22. package/dist/appMap/projectRegistry.js.map +1 -0
  23. package/dist/appMap/provenance.js +52 -0
  24. package/dist/appMap/provenance.js.map +1 -0
  25. package/dist/appMap/query.js +118 -0
  26. package/dist/appMap/query.js.map +1 -0
  27. package/dist/appMap/runtimeMerge.js +207 -0
  28. package/dist/appMap/runtimeMerge.js.map +1 -0
  29. package/dist/appMap/schema.js +65 -0
  30. package/dist/appMap/schema.js.map +1 -0
  31. package/dist/appMap/screenMatch.js +75 -0
  32. package/dist/appMap/screenMatch.js.map +1 -0
  33. package/dist/appMap/staticScan.js +614 -0
  34. package/dist/appMap/staticScan.js.map +1 -0
  35. package/dist/appMap/store.js +173 -0
  36. package/dist/appMap/store.js.map +1 -0
  37. package/dist/appMap/tsAstScan.js +184 -0
  38. package/dist/appMap/tsAstScan.js.map +1 -0
  39. package/dist/artifacts/bundletool.js +199 -0
  40. package/dist/artifacts/bundletool.js.map +1 -0
  41. package/dist/artifacts/resolve.js +388 -0
  42. package/dist/artifacts/resolve.js.map +1 -0
  43. package/dist/automationGen/appiumModel.js +129 -0
  44. package/dist/automationGen/appiumModel.js.map +1 -0
  45. package/dist/automationGen/ciEmitter.js +80 -0
  46. package/dist/automationGen/ciEmitter.js.map +1 -0
  47. package/dist/automationGen/jsEmitter.js +440 -0
  48. package/dist/automationGen/jsEmitter.js.map +1 -0
  49. package/dist/automationGen/packagePatch.js +56 -0
  50. package/dist/automationGen/packagePatch.js.map +1 -0
  51. package/dist/automationGen/projectProfile.js +317 -0
  52. package/dist/automationGen/projectProfile.js.map +1 -0
  53. package/dist/automationGen/pythonEmitter.js +386 -0
  54. package/dist/automationGen/pythonEmitter.js.map +1 -0
  55. package/dist/automationGen/readmeEmitter.js +66 -0
  56. package/dist/automationGen/readmeEmitter.js.map +1 -0
  57. package/dist/automationGen/suitePlan.js +94 -0
  58. package/dist/automationGen/suitePlan.js.map +1 -0
  59. package/dist/automationGen/validation.js +150 -0
  60. package/dist/automationGen/validation.js.map +1 -0
  61. package/dist/build/parseBuildLog.js +119 -0
  62. package/dist/build/parseBuildLog.js.map +1 -0
  63. package/dist/build/plan.js +150 -0
  64. package/dist/build/plan.js.map +1 -0
  65. package/dist/ci/preflight.js +85 -0
  66. package/dist/ci/preflight.js.map +1 -0
  67. package/dist/cli/init.js +105 -0
  68. package/dist/cli/init.js.map +1 -0
  69. package/dist/cli/scan.js +85 -0
  70. package/dist/cli/scan.js.map +1 -0
  71. package/dist/cli/suite.js +85 -0
  72. package/dist/cli/suite.js.map +1 -0
  73. package/dist/cli/verify.js +62 -0
  74. package/dist/cli/verify.js.map +1 -0
  75. package/dist/consent/consent.js +43 -0
  76. package/dist/consent/consent.js.map +1 -0
  77. package/dist/context/detect.js +156 -0
  78. package/dist/context/detect.js.map +1 -0
  79. package/dist/context/findApps.js +198 -0
  80. package/dist/context/findApps.js.map +1 -0
  81. package/dist/context/projectRoot.js +41 -0
  82. package/dist/context/projectRoot.js.map +1 -0
  83. package/dist/context/scan.js +167 -0
  84. package/dist/context/scan.js.map +1 -0
  85. package/dist/core/target.js +115 -0
  86. package/dist/core/target.js.map +1 -0
  87. package/dist/core/targetPlan.js +140 -0
  88. package/dist/core/targetPlan.js.map +1 -0
  89. package/dist/drivers/DirectDriver.js +228 -0
  90. package/dist/drivers/DirectDriver.js.map +1 -0
  91. package/dist/drivers/Driver.js +4 -0
  92. package/dist/drivers/Driver.js.map +1 -0
  93. package/dist/drivers/SimctlDriver.js +127 -0
  94. package/dist/drivers/SimctlDriver.js.map +1 -0
  95. package/dist/drivers/WdaDriver.js +250 -0
  96. package/dist/drivers/WdaDriver.js.map +1 -0
  97. package/dist/explore/candidates.js +93 -0
  98. package/dist/explore/candidates.js.map +1 -0
  99. package/dist/explore/graph.js +116 -0
  100. package/dist/explore/graph.js.map +1 -0
  101. package/dist/explore/memory.js +35 -0
  102. package/dist/explore/memory.js.map +1 -0
  103. package/dist/explore/planner.js +105 -0
  104. package/dist/explore/planner.js.map +1 -0
  105. package/dist/explore/policy.js +85 -0
  106. package/dist/explore/policy.js.map +1 -0
  107. package/dist/explore/runner.js +475 -0
  108. package/dist/explore/runner.js.map +1 -0
  109. package/dist/explore/signatures.js +35 -0
  110. package/dist/explore/signatures.js.map +1 -0
  111. package/dist/explore/suite.js +55 -0
  112. package/dist/explore/suite.js.map +1 -0
  113. package/dist/featureTesting/executionBootstrap.js +140 -0
  114. package/dist/featureTesting/executionBootstrap.js.map +1 -0
  115. package/dist/firstRun/authStateMachine.js +83 -0
  116. package/dist/firstRun/authStateMachine.js.map +1 -0
  117. package/dist/firstRun/classifyScreen.js +201 -0
  118. package/dist/firstRun/classifyScreen.js.map +1 -0
  119. package/dist/firstRun/firstRunPlanner.js +207 -0
  120. package/dist/firstRun/firstRunPlanner.js.map +1 -0
  121. package/dist/firstRun/firstRunRunner.js +331 -0
  122. package/dist/firstRun/firstRunRunner.js.map +1 -0
  123. package/dist/firstRun/generatedDataPolicy.js +215 -0
  124. package/dist/firstRun/generatedDataPolicy.js.map +1 -0
  125. package/dist/firstRun/inputPlanner.js +67 -0
  126. package/dist/firstRun/inputPlanner.js.map +1 -0
  127. package/dist/firstRun/onboardingStateMachine.js +46 -0
  128. package/dist/firstRun/onboardingStateMachine.js.map +1 -0
  129. package/dist/firstRun/paywallPolicy.js +54 -0
  130. package/dist/firstRun/paywallPolicy.js.map +1 -0
  131. package/dist/firstRun/types.js +7 -0
  132. package/dist/firstRun/types.js.map +1 -0
  133. package/dist/fixtures/catalog.js +131 -0
  134. package/dist/fixtures/catalog.js.map +1 -0
  135. package/dist/flows/discover.js +18 -0
  136. package/dist/flows/discover.js.map +1 -0
  137. package/dist/flows/generate.js +211 -0
  138. package/dist/flows/generate.js.map +1 -0
  139. package/dist/flows/lint.js +97 -0
  140. package/dist/flows/lint.js.map +1 -0
  141. package/dist/flows/pack.js +68 -0
  142. package/dist/flows/pack.js.map +1 -0
  143. package/dist/flows/run.js +738 -0
  144. package/dist/flows/run.js.map +1 -0
  145. package/dist/flows/schema.js +240 -0
  146. package/dist/flows/schema.js.map +1 -0
  147. package/dist/flows/seedExec.js +108 -0
  148. package/dist/flows/seedExec.js.map +1 -0
  149. package/dist/flows/templates.js +155 -0
  150. package/dist/flows/templates.js.map +1 -0
  151. package/dist/flows/waitGuards.js +12 -0
  152. package/dist/flows/waitGuards.js.map +1 -0
  153. package/dist/index.js +33 -0
  154. package/dist/index.js.map +1 -0
  155. package/dist/ios/signing.js +182 -0
  156. package/dist/ios/signing.js.map +1 -0
  157. package/dist/issues/classify.js +186 -0
  158. package/dist/issues/classify.js.map +1 -0
  159. package/dist/issues/fingerprint.js +130 -0
  160. package/dist/issues/fingerprint.js.map +1 -0
  161. package/dist/issues/index.js +240 -0
  162. package/dist/issues/index.js.map +1 -0
  163. package/dist/issues/metrics.js +155 -0
  164. package/dist/issues/metrics.js.map +1 -0
  165. package/dist/issues/recurrence.js +193 -0
  166. package/dist/issues/recurrence.js.map +1 -0
  167. package/dist/issues/report.js +110 -0
  168. package/dist/issues/report.js.map +1 -0
  169. package/dist/issues/reportBridge.js +119 -0
  170. package/dist/issues/reportBridge.js.map +1 -0
  171. package/dist/issues/schema.js +90 -0
  172. package/dist/issues/schema.js.map +1 -0
  173. package/dist/issues/sourceRevision.js +108 -0
  174. package/dist/issues/sourceRevision.js.map +1 -0
  175. package/dist/issues/store.js +155 -0
  176. package/dist/issues/store.js.map +1 -0
  177. package/dist/lib/android.js +278 -0
  178. package/dist/lib/android.js.map +1 -0
  179. package/dist/lib/commandTemplate.js +55 -0
  180. package/dist/lib/commandTemplate.js.map +1 -0
  181. package/dist/lib/coordSpace.js +23 -0
  182. package/dist/lib/coordSpace.js.map +1 -0
  183. package/dist/lib/device.js +87 -0
  184. package/dist/lib/device.js.map +1 -0
  185. package/dist/lib/gitignore.js +22 -0
  186. package/dist/lib/gitignore.js.map +1 -0
  187. package/dist/lib/image.js +97 -0
  188. package/dist/lib/image.js.map +1 -0
  189. package/dist/lib/logger.js +8 -0
  190. package/dist/lib/logger.js.map +1 -0
  191. package/dist/lib/metroState.js +45 -0
  192. package/dist/lib/metroState.js.map +1 -0
  193. package/dist/lib/needsInput.js +201 -0
  194. package/dist/lib/needsInput.js.map +1 -0
  195. package/dist/lib/png.js +103 -0
  196. package/dist/lib/png.js.map +1 -0
  197. package/dist/lib/redact.js +21 -0
  198. package/dist/lib/redact.js.map +1 -0
  199. package/dist/lib/result.js +87 -0
  200. package/dist/lib/result.js.map +1 -0
  201. package/dist/lib/schemaHash.js +65 -0
  202. package/dist/lib/schemaHash.js.map +1 -0
  203. package/dist/lib/sensitive.js +13 -0
  204. package/dist/lib/sensitive.js.map +1 -0
  205. package/dist/lib/simctl.js +149 -0
  206. package/dist/lib/simctl.js.map +1 -0
  207. package/dist/lib/spawn.js +144 -0
  208. package/dist/lib/spawn.js.map +1 -0
  209. package/dist/lib/wda.js +347 -0
  210. package/dist/lib/wda.js.map +1 -0
  211. package/dist/lib/wdaConfig.js +69 -0
  212. package/dist/lib/wdaConfig.js.map +1 -0
  213. package/dist/lib/wdaTune.js +58 -0
  214. package/dist/lib/wdaTune.js.map +1 -0
  215. package/dist/oracle/auth.js +22 -0
  216. package/dist/oracle/auth.js.map +1 -0
  217. package/dist/oracle/failures.js +193 -0
  218. package/dist/oracle/failures.js.map +1 -0
  219. package/dist/oracle/health.js +123 -0
  220. package/dist/oracle/health.js.map +1 -0
  221. package/dist/oracle/record.js +36 -0
  222. package/dist/oracle/record.js.map +1 -0
  223. package/dist/orchestration/envelope.js +52 -0
  224. package/dist/orchestration/envelope.js.map +1 -0
  225. package/dist/orchestration/goal.js +98 -0
  226. package/dist/orchestration/goal.js.map +1 -0
  227. package/dist/plan/plan.js +124 -0
  228. package/dist/plan/plan.js.map +1 -0
  229. package/dist/prompts/index.js +63 -0
  230. package/dist/prompts/index.js.map +1 -0
  231. package/dist/report/artifactManifest.js +44 -0
  232. package/dist/report/artifactManifest.js.map +1 -0
  233. package/dist/report/coverage.js +60 -0
  234. package/dist/report/coverage.js.map +1 -0
  235. package/dist/report/evidence.js +84 -0
  236. package/dist/report/evidence.js.map +1 -0
  237. package/dist/report/export.js +447 -0
  238. package/dist/report/export.js.map +1 -0
  239. package/dist/report/flake.js +61 -0
  240. package/dist/report/flake.js.map +1 -0
  241. package/dist/report/history.js +564 -0
  242. package/dist/report/history.js.map +1 -0
  243. package/dist/report/policy.js +98 -0
  244. package/dist/report/policy.js.map +1 -0
  245. package/dist/report/qaLevel.js +96 -0
  246. package/dist/report/qaLevel.js.map +1 -0
  247. package/dist/report/readiness.js +213 -0
  248. package/dist/report/readiness.js.map +1 -0
  249. package/dist/report/summary.js +42 -0
  250. package/dist/report/summary.js.map +1 -0
  251. package/dist/report/testCatalog.js +93 -0
  252. package/dist/report/testCatalog.js.map +1 -0
  253. package/dist/report/timing.js +37 -0
  254. package/dist/report/timing.js.map +1 -0
  255. package/dist/server.js +180 -0
  256. package/dist/server.js.map +1 -0
  257. package/dist/services/automationGenerate.js +60 -0
  258. package/dist/services/automationGenerate.js.map +1 -0
  259. package/dist/services/build.js +66 -0
  260. package/dist/services/build.js.map +1 -0
  261. package/dist/services/preflight.js +51 -0
  262. package/dist/services/preflight.js.map +1 -0
  263. package/dist/services/prepareAndroid.js +183 -0
  264. package/dist/services/prepareAndroid.js.map +1 -0
  265. package/dist/services/prepareIos.js +162 -0
  266. package/dist/services/prepareIos.js.map +1 -0
  267. package/dist/services/report.js +537 -0
  268. package/dist/services/report.js.map +1 -0
  269. package/dist/services/smoke.js +120 -0
  270. package/dist/services/smoke.js.map +1 -0
  271. package/dist/services/suiteGenerate.js +123 -0
  272. package/dist/services/suiteGenerate.js.map +1 -0
  273. package/dist/services/testSuiteKnowledge.js +150 -0
  274. package/dist/services/testSuiteKnowledge.js.map +1 -0
  275. package/dist/session/attach.js +47 -0
  276. package/dist/session/attach.js.map +1 -0
  277. package/dist/session/progress.js +56 -0
  278. package/dist/session/progress.js.map +1 -0
  279. package/dist/session/store.js +329 -0
  280. package/dist/session/store.js.map +1 -0
  281. package/dist/snapshot/overlays.js +132 -0
  282. package/dist/snapshot/overlays.js.map +1 -0
  283. package/dist/snapshot/parse.js +204 -0
  284. package/dist/snapshot/parse.js.map +1 -0
  285. package/dist/snapshot/present.js +12 -0
  286. package/dist/snapshot/present.js.map +1 -0
  287. package/dist/snapshot/settle.js +36 -0
  288. package/dist/snapshot/settle.js.map +1 -0
  289. package/dist/state/profile.js +318 -0
  290. package/dist/state/profile.js.map +1 -0
  291. package/dist/suite/compile.js +176 -0
  292. package/dist/suite/compile.js.map +1 -0
  293. package/dist/suite/lint.js +45 -0
  294. package/dist/suite/lint.js.map +1 -0
  295. package/dist/suite/pom.js +285 -0
  296. package/dist/suite/pom.js.map +1 -0
  297. package/dist/suite/testcase.js +87 -0
  298. package/dist/suite/testcase.js.map +1 -0
  299. package/dist/testSuite/generator.js +222 -0
  300. package/dist/testSuite/generator.js.map +1 -0
  301. package/dist/testSuite/history.js +44 -0
  302. package/dist/testSuite/history.js.map +1 -0
  303. package/dist/testSuite/issueLinks.js +96 -0
  304. package/dist/testSuite/issueLinks.js.map +1 -0
  305. package/dist/testSuite/merge.js +190 -0
  306. package/dist/testSuite/merge.js.map +1 -0
  307. package/dist/testSuite/schema.js +86 -0
  308. package/dist/testSuite/schema.js.map +1 -0
  309. package/dist/testSuite/store.js +116 -0
  310. package/dist/testSuite/store.js.map +1 -0
  311. package/dist/testSuite/traceability.js +55 -0
  312. package/dist/testSuite/traceability.js.map +1 -0
  313. package/dist/tools/act.js +457 -0
  314. package/dist/tools/act.js.map +1 -0
  315. package/dist/tools/agent.js +225 -0
  316. package/dist/tools/agent.js.map +1 -0
  317. package/dist/tools/appMap.js +317 -0
  318. package/dist/tools/appMap.js.map +1 -0
  319. package/dist/tools/assertVisual.js +74 -0
  320. package/dist/tools/assertVisual.js.map +1 -0
  321. package/dist/tools/automationGenerate.js +394 -0
  322. package/dist/tools/automationGenerate.js.map +1 -0
  323. package/dist/tools/capabilities.js +114 -0
  324. package/dist/tools/capabilities.js.map +1 -0
  325. package/dist/tools/clearOverlay.js +150 -0
  326. package/dist/tools/clearOverlay.js.map +1 -0
  327. package/dist/tools/detectContext.js +41 -0
  328. package/dist/tools/detectContext.js.map +1 -0
  329. package/dist/tools/doctor.js +116 -0
  330. package/dist/tools/doctor.js.map +1 -0
  331. package/dist/tools/explore.js +289 -0
  332. package/dist/tools/explore.js.map +1 -0
  333. package/dist/tools/firstRun.js +136 -0
  334. package/dist/tools/firstRun.js.map +1 -0
  335. package/dist/tools/flow.js +331 -0
  336. package/dist/tools/flow.js.map +1 -0
  337. package/dist/tools/flowGenerate.js +55 -0
  338. package/dist/tools/flowGenerate.js.map +1 -0
  339. package/dist/tools/getArtifact.js +39 -0
  340. package/dist/tools/getArtifact.js.map +1 -0
  341. package/dist/tools/health.js +41 -0
  342. package/dist/tools/health.js.map +1 -0
  343. package/dist/tools/ios.js +492 -0
  344. package/dist/tools/ios.js.map +1 -0
  345. package/dist/tools/jobs.js +20 -0
  346. package/dist/tools/jobs.js.map +1 -0
  347. package/dist/tools/network.js +50 -0
  348. package/dist/tools/network.js.map +1 -0
  349. package/dist/tools/note.js +69 -0
  350. package/dist/tools/note.js.map +1 -0
  351. package/dist/tools/plan.js +49 -0
  352. package/dist/tools/plan.js.map +1 -0
  353. package/dist/tools/prepareIosTarget.js +99 -0
  354. package/dist/tools/prepareIosTarget.js.map +1 -0
  355. package/dist/tools/prepareTarget.js +257 -0
  356. package/dist/tools/prepareTarget.js.map +1 -0
  357. package/dist/tools/report.js +42 -0
  358. package/dist/tools/report.js.map +1 -0
  359. package/dist/tools/screenRecord.js +24 -0
  360. package/dist/tools/screenRecord.js.map +1 -0
  361. package/dist/tools/screenshot.js +63 -0
  362. package/dist/tools/screenshot.js.map +1 -0
  363. package/dist/tools/smoke.js +39 -0
  364. package/dist/tools/smoke.js.map +1 -0
  365. package/dist/tools/snapshot.js +129 -0
  366. package/dist/tools/snapshot.js.map +1 -0
  367. package/dist/tools/startSession.js +169 -0
  368. package/dist/tools/startSession.js.map +1 -0
  369. package/dist/tools/state.js +87 -0
  370. package/dist/tools/state.js.map +1 -0
  371. package/dist/tools/suite.js +412 -0
  372. package/dist/tools/suite.js.map +1 -0
  373. package/dist/tools/testThis.js +774 -0
  374. package/dist/tools/testThis.js.map +1 -0
  375. package/dist/tools/wda.js +477 -0
  376. package/dist/tools/wda.js.map +1 -0
  377. package/dist/version.js +62 -0
  378. package/dist/version.js.map +1 -0
  379. package/dist/visual/ocr.js +72 -0
  380. package/dist/visual/ocr.js.map +1 -0
  381. package/dist/visual/provider.js +75 -0
  382. package/dist/visual/provider.js.map +1 -0
  383. package/docs/README.md +19 -0
  384. package/docs/assets/swipium-lockup-ink-on-light.png +0 -0
  385. package/docs/mcp-server.md +135 -0
  386. package/docs/tools.md +130 -0
  387. package/package.json +70 -0
@@ -0,0 +1,457 @@
1
+ // qa_act — the single consolidated action tool (DESIGN §3 locked schema).
2
+ // Resolves a target (ref | selector | coords), performs the action, waits for the screen
3
+ // to settle, then returns the post-action snapshot + a deterministic health check. So one
4
+ // call both acts AND observes the result.
5
+ import { z } from 'zod';
6
+ import { qaOk, qaError, qaStop } from '../lib/result.js';
7
+ import { parseSnapshot, signature } from '../snapshot/parse.js';
8
+ import { presentElements } from '../snapshot/present.js';
9
+ import { obstructionAt } from '../snapshot/overlays.js';
10
+ import { settle } from '../snapshot/settle.js';
11
+ import { checkHealth } from '../oracle/health.js';
12
+ import { recordHealthFindings } from '../oracle/record.js';
13
+ import { makeRedactor } from '../lib/redact.js';
14
+ import { getDriver } from '../session/attach.js';
15
+ import { resolveTarget, setsEqual } from '../core/target.js';
16
+ import { recordableNativeSelector, recordableTap } from '../flows/generate.js';
17
+ import { classifyFlowDriverError } from '../flows/run.js';
18
+ function nativeSelectorFor(selector) {
19
+ const m = selector?.match(/^(accessibility id|name|predicate string|class chain)\s*=\s*(.+)$/i);
20
+ if (!m)
21
+ return null;
22
+ return { using: m[1].toLowerCase(), value: m[2] };
23
+ }
24
+ function recordableNativeTarget(session, native) {
25
+ const selectorKind = native.using === 'accessibility id' ? 'accessibility_id' : native.using === 'name' ? 'name' : native.using === 'predicate string' ? 'predicate' : 'class_chain';
26
+ return {
27
+ selector: native.value,
28
+ selectorKind,
29
+ exportability: 'semantic',
30
+ ...recordableNativeSelector(session, selectorKind, native.value),
31
+ };
32
+ }
33
+ export function registerAct(server, sessions) {
34
+ server.registerTool('qa_act', {
35
+ title: 'Act on the screen',
36
+ description: 'Perform one synchronized UI action and observe the result. Actions & their fields:\n' +
37
+ '- tap: target {ref|text|id|selector|x,y}\n' +
38
+ '- type: target (a field) + text + mode:"replace"|"append" (default replace); optional submit:true\n' +
39
+ '- clear: target (a field), focuses it and clears existing text\n' +
40
+ '- swipe: direction up|down|left|right (optional target as start point)\n' +
41
+ '- scroll: direction + optional untilVisible {text|id} + maxScrolls (default 8)\n' +
42
+ '- press: key back|home|enter\n' +
43
+ '- open_url: url (deep link)\n' +
44
+ '- wait: for {settled:true | ref | text | id | selector} + timeoutMs\n' +
45
+ 'Every non-wait action auto-waits for the screen to settle, then returns the post snapshot (quality + @eN elements), whether the screen changed, and a health check.',
46
+ inputSchema: {
47
+ sessionId: z.string(),
48
+ action: z.enum(['tap', 'type', 'clear', 'swipe', 'scroll', 'press', 'open_url', 'wait']),
49
+ target: z
50
+ .object({
51
+ ref: z.string().optional(),
52
+ text: z.string().optional(),
53
+ id: z.string().optional(),
54
+ selector: z.string().optional().describe('Backend-native selector, e.g. "accessibility id=email", "name=Continue", "predicate string=label == \\"Continue\\"", or "class chain=**/XCUIElementTypeButton[...]".'),
55
+ index: z.number().optional(),
56
+ x: z.number().optional(),
57
+ y: z.number().optional(),
58
+ })
59
+ .optional(),
60
+ text: z.string().optional(),
61
+ mode: z.enum(['replace', 'append']).optional(),
62
+ submit: z.boolean().optional(),
63
+ direction: z.enum(['up', 'down', 'left', 'right']).optional(),
64
+ untilVisible: z.object({ text: z.string().optional(), id: z.string().optional() }).optional(),
65
+ maxScrolls: z.number().optional(),
66
+ key: z.enum(['back', 'home', 'enter']).optional(),
67
+ url: z.string().optional(),
68
+ durationMs: z.number().optional().describe('tap press duration. Coordinate taps default to ~100ms (RN ignores instant taps); ref/selector taps are instant unless set.'),
69
+ ignoreOverlay: z.boolean().optional().describe('tap even if an overlay obstructs the target (default false → returns blockedByOverlay).'),
70
+ for: z
71
+ .object({
72
+ settled: z.boolean().optional(),
73
+ ref: z.string().optional(),
74
+ text: z.string().optional(),
75
+ id: z.string().optional(),
76
+ selector: z.string().optional().describe('Backend-native selector, e.g. "accessibility id=email" or "name=Continue". Requires WDA/native selector support.'),
77
+ })
78
+ .optional(),
79
+ timeoutMs: z.number().optional(),
80
+ },
81
+ }, async (args) => {
82
+ const { sessionId, action } = args;
83
+ const session = sessions.get(sessionId);
84
+ const { driver: d } = session ? await getDriver(session) : { driver: undefined };
85
+ if (!session || !d) {
86
+ return qaError({
87
+ what: 'No device attached to this session',
88
+ changedState: false,
89
+ retrySafe: true,
90
+ nextSteps: ['Call qa_prepare_target first.'],
91
+ });
92
+ }
93
+ if (d.kind === 'simulator') {
94
+ return qaError({
95
+ what: 'Structured interaction (tap/type/swipe) is not available on the iOS simulator backend',
96
+ changedState: false,
97
+ retrySafe: false,
98
+ failureCode: 'BACKEND_UNSUPPORTED',
99
+ nextSteps: ['Attach WebDriverAgent with qa_wda for structured tap/type/snapshot. Without WDA, navigate via qa_ios deep links and verify with qa_assert_visual.'],
100
+ });
101
+ }
102
+ // Budget gate (review §4.1 / Rec 4): refuse new work once the session budget is spent.
103
+ // `wait` is exempt from the action/screenshot caps (it's synchronization, not an
104
+ // action), but it is NOT exempt from the TIME budget — otherwise repeated waits could
105
+ // burn the clock indefinitely.
106
+ const stopReason = sessions.budgetStop(session);
107
+ if (stopReason && (action !== 'wait' || /time budget/.test(stopReason))) {
108
+ return qaStop(stopReason, { counters: session.counters, mode: session.mode });
109
+ }
110
+ const fail = (what, changedState) => qaError({ what, changedState, retrySafe: true, nextSteps: ['Run qa_snapshot to see the current screen, then retry.'] });
111
+ // ---- wait is its own path (no settle/health afterward) ----
112
+ if (action === 'wait') {
113
+ const timeoutMs = args.timeoutMs ?? 8000;
114
+ if (args.for?.settled || !args.for) {
115
+ const s = await settle(d, { timeoutMs });
116
+ const post = parseSnapshot(s.xml);
117
+ session.lastSnapshot = { fullByRef: post.fullByRef, signatures: new Set(post.elements.map(signature)), allNodes: post.allNodes };
118
+ const { elements: shown, rendered } = presentElements(post.elements, makeRedactor(session.secrets));
119
+ return qaOk({ action, settled: s.settled, quality: post.quality.verdict, elements: shown }, `wait(settled)=${s.settled}\n\n${rendered}`);
120
+ }
121
+ const deadline = Date.now() + timeoutMs;
122
+ const want = args.for;
123
+ const native = nativeSelectorFor(want?.selector);
124
+ if (want?.selector && !native) {
125
+ return qaError({ what: `Unsupported wait selector ${JSON.stringify(want.selector)}`, changedState: false, retrySafe: true, nextSteps: ['Use accessibility id=..., name=..., predicate string=..., class chain=..., or wait by text/id/ref.'] });
126
+ }
127
+ if (native) {
128
+ if (!d.existsBySelector)
129
+ return qaError({
130
+ what: `${native.using} waits require backend-native selector support`,
131
+ changedState: false,
132
+ retrySafe: false,
133
+ failureCode: 'BACKEND_UNSUPPORTED',
134
+ nextSteps: ['Use a WDA-backed iOS session, or wait by text/id/ref on this backend.'],
135
+ });
136
+ while (Date.now() < deadline) {
137
+ if (await d.existsBySelector(native.using, native.value)) {
138
+ return qaOk({ action, found: true, selector: want?.selector, via: 'native-selector' }, `wait: found ${want?.selector}`);
139
+ }
140
+ await new Promise((r) => setTimeout(r, 400));
141
+ }
142
+ return qaError({ what: `wait timed out (${timeoutMs}ms) for ${JSON.stringify(want)}`, changedState: false, retrySafe: true, nextSteps: ['Re-check the native selector value, or run qa_snapshot to inspect the current screen.'] });
143
+ }
144
+ while (Date.now() < deadline) {
145
+ const parsed = parseSnapshot(await d.dumpXml());
146
+ session.lastSnapshot = { fullByRef: parsed.fullByRef, signatures: new Set(parsed.elements.map(signature)), allNodes: parsed.allNodes };
147
+ const hit = parsed.elements.find((e) => (want.ref && e.ref === want.ref) ||
148
+ (want.id && e.id === want.id) ||
149
+ (want.text && (e.text?.toLowerCase().includes(want.text.toLowerCase()) || e.label?.toLowerCase().includes(want.text.toLowerCase()))));
150
+ if (hit)
151
+ return qaOk({ action, found: true, ref: hit.ref }, `wait: found ${hit.ref}`);
152
+ await new Promise((r) => setTimeout(r, 400));
153
+ }
154
+ return qaError({ what: `wait timed out (${timeoutMs}ms) for ${JSON.stringify(want)}`, changedState: false, retrySafe: true, nextSteps: ['Re-snapshot; the element may use different text/id.'] });
155
+ }
156
+ // Phase timing (P1.6): mark the first real action so the report can split setup vs active.
157
+ sessions.milestone(session, 'first_action');
158
+ const preSigs = session.lastSnapshot?.signatures ?? new Set();
159
+ let meta = {};
160
+ // remembered so a no-change tap can be retried as a longer press (RN tap quirk)
161
+ let tapRetry;
162
+ // action-IR step to record once the action succeeds (built here while lastSnapshot is
163
+ // still the PRE-navigation screen, so a tapped @ref still resolves to its label).
164
+ let toRecord;
165
+ try {
166
+ switch (action) {
167
+ case 'tap': {
168
+ const native = nativeSelectorFor(args.target?.selector);
169
+ if (native) {
170
+ if (!d.tapBySelector)
171
+ return qaError({
172
+ what: `${native.using} selectors require backend-native selector support`,
173
+ changedState: false,
174
+ retrySafe: false,
175
+ failureCode: 'BACKEND_UNSUPPORTED',
176
+ nextSteps: ['Use a WDA-backed iOS session, or target by ref/text/id/coordinates on this backend.'],
177
+ });
178
+ await d.tapBySelector(native.using, native.value);
179
+ meta = { selector: args.target?.selector, via: 'native-selector' };
180
+ toRecord = { action: 'tap', ...recordableNativeTarget(session, native) };
181
+ break;
182
+ }
183
+ const t = await resolveTarget(session, args.target);
184
+ if ('error' in t)
185
+ return fail(t.error, false);
186
+ // Overlay obstruction check (CR4): if another element is drawn over the target
187
+ // point, return a structured blockedByOverlay instead of tapping blindly.
188
+ if (!args.ignoreOverlay && t.via !== 'coords' && session.lastSnapshot?.allNodes) {
189
+ // works for ref AND selector taps — t.ref is the resolved @eN in either case
190
+ const node = t.ref ? session.lastSnapshot.fullByRef.get(t.ref) : undefined;
191
+ const obs = obstructionAt(session.lastSnapshot.allNodes, node, t.x, t.y);
192
+ if (obs.obstructed) {
193
+ return qaError({
194
+ what: `Target at (${t.x},${t.y}) is obstructed by ${obs.by?.cls?.split('.').pop()}${obs.by?.text ? ` "${obs.by.text}"` : ''}`,
195
+ changedState: false,
196
+ retrySafe: true,
197
+ failureCode: 'OVERLAY_OBSTRUCTION',
198
+ nextSteps: ['Call qa_clear_overlay (auto, or hide_keyboard/minimize_logbox), then retry — or pass ignoreOverlay:true to tap anyway.'],
199
+ }, { blockedByOverlay: true, obstructedBy: obs.by });
200
+ }
201
+ }
202
+ // Coordinate taps default to a short press (RN often ignores instant taps);
203
+ // ref/selector taps stay instant unless durationMs is given.
204
+ const isCoord = t.via === 'coords';
205
+ const durationMs = args.durationMs ?? (isCoord ? 100 : undefined);
206
+ if (durationMs)
207
+ await d.pressXY(t.x, t.y, durationMs);
208
+ else
209
+ await d.tapXY(t.x, t.y);
210
+ tapRetry = { x: t.x, y: t.y, instant: !durationMs };
211
+ meta = { tappedAt: [t.x, t.y], via: t.via, ...(durationMs ? { durationMs } : {}) };
212
+ toRecord = { action: 'tap', ...recordableTap(session, args.target, t) };
213
+ break;
214
+ }
215
+ case 'type': {
216
+ if (args.text == null)
217
+ return fail('type requires `text`.', false);
218
+ const native = nativeSelectorFor(args.target?.selector);
219
+ if (native) {
220
+ if (!d.typeBySelector)
221
+ return qaError({
222
+ what: `${native.using} selectors require backend-native selector support`,
223
+ changedState: false,
224
+ retrySafe: false,
225
+ failureCode: 'BACKEND_UNSUPPORTED',
226
+ nextSteps: ['Use a WDA-backed iOS session, or target by ref/text/id/coordinates on this backend.'],
227
+ });
228
+ if ((args.mode ?? 'replace') === 'replace') {
229
+ if (!d.clearBySelector)
230
+ return qaError({
231
+ what: `replace-mode typing by ${native.using} requires backend-native clear support`,
232
+ changedState: false,
233
+ retrySafe: false,
234
+ failureCode: 'BACKEND_UNSUPPORTED',
235
+ nextSteps: ['Use append mode, or attach a WDA backend that supports element clear.'],
236
+ });
237
+ await d.clearBySelector(native.using, native.value);
238
+ }
239
+ await d.typeBySelector(native.using, native.value, args.text);
240
+ meta = { typedChars: args.text.length, redacted: true, mode: args.mode ?? 'replace', via: 'native-selector', selector: args.target?.selector, submit: !!args.submit };
241
+ toRecord = { action: 'type', ...recordableNativeTarget(session, native), text: args.text };
242
+ if (args.submit)
243
+ await d.pressKey('enter');
244
+ break;
245
+ }
246
+ const t = await resolveTarget(session, args.target);
247
+ if ('error' in t)
248
+ return fail(t.error, false);
249
+ // Typing into a secure field → remember the value so it's scrubbed everywhere, and
250
+ // record that a login was performed (auth-state reporting, P1.5).
251
+ if (t.secure) {
252
+ session.secrets.add(args.text);
253
+ sessions.markAuth(session, { loginPerformed: true, loginPerformedAt: Date.now() });
254
+ sessions.milestone(session, 'login_performed');
255
+ }
256
+ await d.tapXY(t.x, t.y); // focus + raise IME (real touch)
257
+ await new Promise((r) => setTimeout(r, 700));
258
+ if ((args.mode ?? 'replace') === 'replace')
259
+ await d.clearFocusedText(t.textLen);
260
+ await d.inputText(args.text);
261
+ if (args.submit)
262
+ await d.pressKey('enter');
263
+ // Never echo the typed value — it may be a password/OTP/email/token and would
264
+ // leak into the agent transcript + artifacts (DESIGN §9.7 sensitive-mode).
265
+ meta = { typedChars: args.text.length, redacted: true, mode: args.mode ?? 'replace', via: t.via, submit: !!args.submit };
266
+ // Never store a secret's value in the IR — secrets become a ${VAR} at generate time.
267
+ {
268
+ const targetRecord = recordableTap(session, args.target, t);
269
+ toRecord = {
270
+ action: 'type',
271
+ selector: targetRecord.selector,
272
+ selectorKind: targetRecord.selectorKind,
273
+ secret: !!t.secure,
274
+ text: t.secure ? undefined : args.text,
275
+ exportability: t.secure ? 'needs-human-data' : targetRecord.exportability,
276
+ provenance: targetRecord.provenance,
277
+ };
278
+ }
279
+ break;
280
+ }
281
+ case 'clear': {
282
+ const native = nativeSelectorFor(args.target?.selector);
283
+ if (native) {
284
+ if (!d.clearBySelector)
285
+ return qaError({
286
+ what: `${native.using} selectors require backend-native clear support`,
287
+ changedState: false,
288
+ retrySafe: false,
289
+ failureCode: 'BACKEND_UNSUPPORTED',
290
+ nextSteps: ['Use a WDA-backed iOS session, or target by ref/text/id/coordinates on this backend.'],
291
+ });
292
+ await d.clearBySelector(native.using, native.value);
293
+ meta = { cleared: true, via: 'native-selector', selector: args.target?.selector };
294
+ toRecord = { action: 'clear', ...recordableNativeTarget(session, native) };
295
+ break;
296
+ }
297
+ const t = await resolveTarget(session, args.target);
298
+ if ('error' in t)
299
+ return fail(t.error, false);
300
+ await d.tapXY(t.x, t.y);
301
+ await new Promise((r) => setTimeout(r, 400));
302
+ await d.clearFocusedText(t.textLen);
303
+ meta = { cleared: true, via: t.via };
304
+ toRecord = { action: 'clear', ...recordableTap(session, args.target, t) };
305
+ break;
306
+ }
307
+ case 'swipe': {
308
+ if (!args.direction)
309
+ return fail('swipe requires `direction`.', false);
310
+ const start = args.target ? await resolveTarget(session, args.target) : null;
311
+ const sx = start && !('error' in start) ? start.x : 0;
312
+ const sy = start && !('error' in start) ? start.y : 0;
313
+ const from = sx && sy ? { x: sx, y: sy } : { x: 540, y: 1200 };
314
+ const dist = 800;
315
+ const to = {
316
+ up: { x: from.x, y: from.y - dist },
317
+ down: { x: from.x, y: from.y + dist },
318
+ left: { x: from.x - dist, y: from.y },
319
+ right: { x: from.x + dist, y: from.y },
320
+ }[args.direction];
321
+ await d.swipe(from.x, from.y, to.x, to.y, 300);
322
+ meta = { direction: args.direction };
323
+ toRecord = { action: 'swipe', direction: args.direction, exportability: 'coordinate' };
324
+ break;
325
+ }
326
+ case 'scroll': {
327
+ if (!args.direction)
328
+ return fail('scroll requires `direction`.', false);
329
+ const max = args.maxScrolls ?? 8;
330
+ // scroll down = swipe up; build a screen-relative gesture
331
+ const dir = args.direction;
332
+ let found = false;
333
+ for (let i = 0; i < max; i++) {
334
+ const cx = 540;
335
+ const cy = 1200;
336
+ const dist = 900;
337
+ const vec = {
338
+ down: [cx, cy + dist / 2, cx, cy - dist / 2],
339
+ up: [cx, cy - dist / 2, cx, cy + dist / 2],
340
+ left: [cx + dist / 2, cy, cx - dist / 2, cy],
341
+ right: [cx - dist / 2, cy, cx + dist / 2, cy],
342
+ }[dir];
343
+ await d.swipe(vec[0], vec[1], vec[2], vec[3], 300);
344
+ await new Promise((r) => setTimeout(r, 400));
345
+ if (args.untilVisible) {
346
+ const parsed = parseSnapshot(await d.dumpXml());
347
+ const u = args.untilVisible;
348
+ found = parsed.elements.some((e) => (u.id && e.id === u.id) || (u.text && (e.text?.toLowerCase().includes(u.text.toLowerCase()) || e.label?.toLowerCase().includes(u.text.toLowerCase()))));
349
+ if (found)
350
+ break;
351
+ }
352
+ }
353
+ meta = { direction: dir, untilVisibleFound: args.untilVisible ? found : undefined };
354
+ toRecord = { action: 'scroll', direction: dir, selector: args.untilVisible?.text, exportability: args.untilVisible?.text ? 'semantic' : 'coordinate' };
355
+ break;
356
+ }
357
+ case 'press': {
358
+ if (!args.key)
359
+ return fail('press requires `key`.', false);
360
+ await d.pressKey(args.key);
361
+ meta = { key: args.key };
362
+ toRecord = { action: 'press', key: args.key, exportability: 'semantic' };
363
+ break;
364
+ }
365
+ case 'open_url': {
366
+ if (!args.url)
367
+ return fail('open_url requires `url`.', false);
368
+ await d.openUrl(args.url);
369
+ meta = { url: args.url };
370
+ toRecord = { action: 'open_url', url: args.url, exportability: 'semantic' };
371
+ break;
372
+ }
373
+ }
374
+ }
375
+ catch (e) {
376
+ const failureCode = classifyFlowDriverError(e);
377
+ return qaError({
378
+ what: `Action "${action}" failed: ${String(e)}`,
379
+ changedState: true,
380
+ retrySafe: !['WDA_SESSION_FAILED', 'UNKNOWN'].includes(failureCode),
381
+ failureCode,
382
+ nextSteps: failureCode === 'UNKNOWN' ? ['Confirm the device is online and re-snapshot.'] : ['Use the failureCode to choose recovery, then re-snapshot before retrying.'],
383
+ });
384
+ }
385
+ // count this as an action (wait already returned earlier)
386
+ sessions.bump(session, 'actions');
387
+ // Record the action into the IR for qa_flow_generate (the action definitely happened here;
388
+ // recorded now so a later post-snapshot failure doesn't lose the step).
389
+ if (toRecord)
390
+ sessions.addRecordedAction(session, { at: Date.now(), ...toRecord });
391
+ // Post-action observation is wrapped so a settle/dump/parse failure (e.g. the
392
+ // looping-animation case) returns a Swipium-shaped result, never a raw MCP error.
393
+ try {
394
+ // settle → observe → health
395
+ let s = await settle(d, { timeoutMs: args.timeoutMs ?? 8000 });
396
+ let post = parseSnapshot(s.xml);
397
+ let postSigs = new Set(post.elements.map(signature));
398
+ let changed = !setsEqual(preSigs, postSigs);
399
+ // No-change retry (review §4.5/§4.7): an instant tap that did nothing is often the RN
400
+ // tap quirk — retry ONCE as a longer press before believing it's blocked.
401
+ let retriedAsPress = false;
402
+ if (!changed && action === 'tap' && tapRetry?.instant) {
403
+ await d.pressXY(tapRetry.x, tapRetry.y, 120);
404
+ retriedAsPress = true;
405
+ s = await settle(d, { timeoutMs: args.timeoutMs ?? 8000 });
406
+ post = parseSnapshot(s.xml);
407
+ postSigs = new Set(post.elements.map(signature));
408
+ changed = !setsEqual(preSigs, postSigs);
409
+ }
410
+ session.lastSnapshot = { fullByRef: post.fullByRef, signatures: postSigs, allNodes: post.allNodes };
411
+ const health = await checkHealth(d, session.appId, s.xml);
412
+ // Track no-change actions for the budget / no-op-loop detector.
413
+ if (!changed && (action === 'tap' || action === 'swipe' || action === 'scroll' || action === 'press')) {
414
+ sessions.bump(session, 'noChangeActions');
415
+ }
416
+ const budgetReached = sessions.budgetStop(session);
417
+ // Sensitive-mode present: mask secure fields + scrub known secrets AND the just-typed
418
+ // value (covers non-secure fields like email for this immediate response).
419
+ const redact = makeRedactor([...session.secrets, ...(action === 'type' && args.text ? [args.text] : [])]);
420
+ const { elements: outElements, rendered } = presentElements(post.elements, redact);
421
+ // Record non-info findings for qa_report (deterministic bug trail) + app-error screenshot.
422
+ await recordHealthFindings(sessions, session, health.findings, d, health.foreground);
423
+ const banner = `${action} ${JSON.stringify(meta)} → changed=${changed}${retriedAsPress ? ' (retried as press)' : ''} ` +
424
+ `settled=${s.settled} quality=${post.quality.verdict} native=${health.nativeHealthy ? 'ok' : health.nativeStatus} app=${health.appStatus}` +
425
+ (budgetReached ? `\n⏹ budget reached: ${budgetReached} — call qa_report.` : '') +
426
+ (!changed && retriedAsPress ? `\nNo change even after a press retry — likely wrong coords / disabled element / overlay / auth wall.` : '');
427
+ const findings = health.findings.length ? '\n' + health.findings.map((f) => `[${f.severity}] ${f.layer ?? '?'}/${f.kind}: ${f.detail}${f.evidence ? ` — "${f.evidence}"` : ''}`).join('\n') : '';
428
+ return qaOk({
429
+ action,
430
+ ...meta,
431
+ changed,
432
+ retriedAsPress,
433
+ settled: s.settled,
434
+ quality: post.quality.verdict,
435
+ health,
436
+ counters: session.counters,
437
+ ...(budgetReached ? { budgetReached } : {}),
438
+ elements: outElements,
439
+ }, `${banner}${findings}\n\n${rendered}`);
440
+ }
441
+ catch (e) {
442
+ // The action ran; observing the result failed (often a UI that never reaches idle).
443
+ const idle = /idle|dump|hierarchy/i.test(String(e));
444
+ if (idle)
445
+ sessions.setMode(session, 'visual-fallback');
446
+ return qaError({
447
+ what: `Action "${action}" ran, but observing the result failed: ${String(e)}`,
448
+ changedState: true,
449
+ retrySafe: false,
450
+ nextSteps: idle
451
+ ? ['Switched to visual-fallback. Use qa_screenshot; qa_check_health still works.']
452
+ : ['Re-check the device is online, then qa_screenshot / qa_check_health.'],
453
+ });
454
+ }
455
+ });
456
+ }
457
+ //# sourceMappingURL=act.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"act.js","sourceRoot":"","sources":["../../src/tools/act.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yFAAyF;AACzF,0FAA0F;AAC1F,0CAA0C;AAE1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAS1D,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,MAAM,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAChG,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAA4B,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAuD,EAAE,MAAsB;IAC7G,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,KAAK,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;IACrL,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,KAAK;QACtB,YAAY;QACZ,aAAa,EAAE,UAAU;QACzB,GAAG,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;KACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAiB,EAAE,QAAsB;IACnE,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,sFAAsF;YACtF,4CAA4C;YAC5C,qGAAqG;YACrG,kEAAkE;YAClE,0EAA0E;YAC1E,kFAAkF;YAClF,gCAAgC;YAChC,+BAA+B;YAC/B,uEAAuE;YACvE,qKAAqK;QACvK,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACrB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YACxF,MAAM,EAAE,CAAC;iBACN,MAAM,CAAC;gBACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sKAAsK,CAAC;gBAChN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC5B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACxB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACzB,CAAC;iBACD,QAAQ,EAAE;YACb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC3B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC9C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC9B,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC7D,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;YAC7F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;YACjD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4HAA4H,CAAC;YACxK,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yFAAyF,CAAC;YACzI,GAAG,EAAE,CAAC;iBACH,MAAM,CAAC;gBACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;gBAC/B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;gBACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kHAAkH,CAAC;aAC7J,CAAC;iBACD,QAAQ,EAAE;YACb,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACjC;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACjF,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,oCAAoC;gBAC1C,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,IAAI;gBACf,SAAS,EAAE,CAAC,+BAA+B,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,uFAAuF;gBAC7F,YAAY,EAAE,KAAK;gBACnB,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,qBAAqB;gBAClC,SAAS,EAAE,CAAC,mJAAmJ,CAAC;aACjK,CAAC,CAAC;QACL,CAAC;QACD,uFAAuF;QACvF,iFAAiF;QACjF,sFAAsF;QACtF,+BAA+B;QAC/B,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,UAAU,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACxE,OAAO,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,YAAqB,EAAE,EAAE,CACnD,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,wDAAwD,CAAC,EAAE,CAAC,CAAC;QAE1H,8DAA8D;QAC9D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;YACzC,IAAI,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClC,OAAO,CAAC,YAAY,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjI,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBACpG,OAAO,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC,OAAO,OAAO,QAAQ,EAAE,CAAC,CAAC;YAC3I,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;YACtB,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACjD,IAAI,IAAI,EAAE,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC,EAAE,IAAI,EAAE,6BAA6B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,oGAAoG,CAAC,EAAE,CAAC,CAAC;YAClP,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,CAAC,CAAC,gBAAgB;oBAAE,OAAO,OAAO,CAAC;wBACtC,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,gDAAgD;wBACrE,YAAY,EAAE,KAAK;wBACnB,SAAS,EAAE,KAAK;wBAChB,WAAW,EAAE,qBAAqB;wBAClC,SAAS,EAAE,CAAC,uEAAuE,CAAC;qBACrF,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;oBAC7B,IAAI,MAAM,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzD,OAAO,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,iBAAiB,EAAE,EAAE,eAAe,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;oBAC1H,CAAC;oBACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,SAAS,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,uFAAuF,CAAC,EAAE,CAAC,CAAC;YACtO,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,YAAY,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACvI,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;oBAChC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;oBAC7B,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CACrI,CAAC;gBACF,IAAI,GAAG;oBAAE,OAAO,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,eAAe,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBACtF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,OAAO,CAAC,EAAE,IAAI,EAAE,mBAAmB,SAAS,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,qDAAqD,CAAC,EAAE,CAAC,CAAC;QACpM,CAAC;QAED,2FAA2F;QAC3F,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,UAAU,IAAI,IAAI,GAAG,EAAU,CAAC;QACtE,IAAI,IAAI,GAA4B,EAAE,CAAC;QACvC,gFAAgF;QAChF,IAAI,QAAgE,CAAC;QACrE,sFAAsF;QACtF,kFAAkF;QAClF,IAAI,QAAgD,CAAC;QAErD,IAAI,CAAC;YACH,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,KAAK,CAAC,CAAC,CAAC;oBACX,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBACxD,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,CAAC,CAAC,CAAC,aAAa;4BAAE,OAAO,OAAO,CAAC;gCACnC,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,oDAAoD;gCACzE,YAAY,EAAE,KAAK;gCACnB,SAAS,EAAE,KAAK;gCAChB,WAAW,EAAE,qBAAqB;gCAClC,SAAS,EAAE,CAAC,qFAAqF,CAAC;6BACnG,CAAC,CAAC;wBACH,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;wBAClD,IAAI,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC;wBACnE,QAAQ,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;wBACzE,MAAM;oBACR,CAAC;oBACD,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpD,IAAI,OAAO,IAAI,CAAC;wBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC9C,+EAA+E;oBAC/E,0EAA0E;oBAC1E,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC;wBAChF,6EAA6E;wBAC7E,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBAC3E,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;wBACzE,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;4BACnB,OAAO,OAAO,CACZ;gCACE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gCAC7H,YAAY,EAAE,KAAK;gCACnB,SAAS,EAAE,IAAI;gCACf,WAAW,EAAE,qBAAqB;gCAClC,SAAS,EAAE,CAAC,wHAAwH,CAAC;6BACtI,EACD,EAAE,gBAAgB,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,EAAE,CACjD,CAAC;wBACJ,CAAC;oBACH,CAAC;oBACD,4EAA4E;oBAC5E,6DAA6D;oBAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC;oBACnC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAClE,IAAI,UAAU;wBAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;;wBACjD,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7B,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC;oBACpD,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;oBACnF,QAAQ,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;oBACxE,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;oBACnE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBACxD,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,CAAC,CAAC,CAAC,cAAc;4BAAE,OAAO,OAAO,CAAC;gCACpC,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,oDAAoD;gCACzE,YAAY,EAAE,KAAK;gCACnB,SAAS,EAAE,KAAK;gCAChB,WAAW,EAAE,qBAAqB;gCAClC,SAAS,EAAE,CAAC,qFAAqF,CAAC;6BACnG,CAAC,CAAC;wBACH,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;4BAC3C,IAAI,CAAC,CAAC,CAAC,eAAe;gCAAE,OAAO,OAAO,CAAC;oCACrC,IAAI,EAAE,0BAA0B,MAAM,CAAC,KAAK,wCAAwC;oCACpF,YAAY,EAAE,KAAK;oCACnB,SAAS,EAAE,KAAK;oCAChB,WAAW,EAAE,qBAAqB;oCAClC,SAAS,EAAE,CAAC,uEAAuE,CAAC;iCACrF,CAAC,CAAC;4BACH,MAAM,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;wBACtD,CAAC;wBACD,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC9D,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACtK,QAAQ,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;wBAC3F,IAAI,IAAI,CAAC,MAAM;4BAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;wBAC3C,MAAM;oBACR,CAAC;oBACD,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpD,IAAI,OAAO,IAAI,CAAC;wBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC9C,mFAAmF;oBACnF,kEAAkE;oBAClE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;wBACb,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC/B,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBACnF,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;oBACjD,CAAC;oBACD,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;oBAC1D,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC7C,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,SAAS;wBAAE,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBAChF,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,IAAI,CAAC,MAAM;wBAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAC3C,8EAA8E;oBAC9E,2EAA2E;oBAC3E,IAAI,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACzH,qFAAqF;oBACrF,CAAC;wBACC,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;wBAC5D,QAAQ,GAAG;4BACT,MAAM,EAAE,MAAM;4BACd,QAAQ,EAAE,YAAY,CAAC,QAAQ;4BAC/B,YAAY,EAAE,YAAY,CAAC,YAAY;4BACvC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM;4BAClB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;4BACtC,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa;4BACzE,UAAU,EAAE,YAAY,CAAC,UAAU;yBACpC,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBACxD,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,CAAC,CAAC,CAAC,eAAe;4BAAE,OAAO,OAAO,CAAC;gCACrC,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,iDAAiD;gCACtE,YAAY,EAAE,KAAK;gCACnB,SAAS,EAAE,KAAK;gCAChB,WAAW,EAAE,qBAAqB;gCAClC,SAAS,EAAE,CAAC,qFAAqF,CAAC;6BACnG,CAAC,CAAC;wBACH,MAAM,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;wBACpD,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;wBAClF,QAAQ,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;wBAC3E,MAAM;oBACR,CAAC;oBACD,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpD,IAAI,OAAO,IAAI,CAAC;wBAAE,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC9C,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBACxB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;oBAC7C,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACpC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;oBACrC,QAAQ,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC1E,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,IAAI,CAAC,IAAI,CAAC,SAAS;wBAAE,OAAO,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;oBACvE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC7E,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,MAAM,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACtD,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;oBAC/D,MAAM,IAAI,GAAG,GAAG,CAAC;oBACjB,MAAM,EAAE,GAAG;wBACT,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE;wBACnC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE;wBACrC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;wBACrC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE;qBACvC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAClB,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBAC/C,IAAI,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;oBACrC,QAAQ,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;oBACvF,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,IAAI,CAAC,SAAS;wBAAE,OAAO,IAAI,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;oBACxE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;oBACjC,0DAA0D;oBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;oBAC3B,IAAI,KAAK,GAAG,KAAK,CAAC;oBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7B,MAAM,EAAE,GAAG,GAAG,CAAC;wBACf,MAAM,EAAE,GAAG,IAAI,CAAC;wBAChB,MAAM,IAAI,GAAG,GAAG,CAAC;wBACjB,MAAM,GAAG,GAAG;4BACV,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;4BAC5C,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;4BAC1C,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;4BAC5C,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;yBAC9C,CAAC,GAAG,CAAqC,CAAC;wBAC3C,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;wBACnD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;wBAC7C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;4BACtB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;4BAChD,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;4BAC5B,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAC9J,CAAC;4BACF,IAAI,KAAK;gCAAE,MAAM;wBACnB,CAAC;oBACH,CAAC;oBACD,IAAI,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACpF,QAAQ,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;oBACvJ,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,IAAI,CAAC,IAAI,CAAC,GAAG;wBAAE,OAAO,IAAI,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;oBAC3D,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3B,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;oBACzB,QAAQ,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;oBACzE,MAAM;gBACR,CAAC;gBACD,KAAK,UAAU,CAAC,CAAC,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,GAAG;wBAAE,OAAO,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;oBAC9D,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC1B,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;oBACzB,QAAQ,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;oBAC5E,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,WAAW,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,WAAW,MAAM,aAAa,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC/C,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,CAAC,CAAC,oBAAoB,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACnE,WAAW;gBACX,SAAS,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC,CAAC,CAAC,CAAC,2EAA2E,CAAC;aACzK,CAAC,CAAC;QACL,CAAC;QAED,0DAA0D;QAC1D,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAClC,2FAA2F;QAC3F,wEAAwE;QACxE,IAAI,QAAQ;YAAE,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;QAEnF,8EAA8E;QAC9E,kFAAkF;QAClF,IAAI,CAAC;YACL,4BAA4B;YAC5B,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC;YAC/D,IAAI,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACrD,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE5C,sFAAsF;YACtF,0EAA0E;YAC1E,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,KAAK,IAAI,QAAQ,EAAE,OAAO,EAAE,CAAC;gBACtD,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC7C,cAAc,GAAG,IAAI,CAAC;gBACtB,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC;gBAC3D,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5B,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;gBACjD,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO,CAAC,YAAY,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpG,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAE1D,gEAAgE;YAChE,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC;gBACtG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAEnD,sFAAsF;YACtF,2EAA2E;YAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1G,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAEnF,2FAA2F;YAC3F,MAAM,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAErF,MAAM,MAAM,GACV,GAAG,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,GAAG;gBACvG,WAAW,CAAC,CAAC,OAAO,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,WAAW,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,QAAQ,MAAM,CAAC,SAAS,EAAE;gBAC1I,CAAC,aAAa,CAAC,CAAC,CAAC,uBAAuB,aAAa,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/E,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,sGAAsG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7I,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEjM,OAAO,IAAI,CACT;gBACE,MAAM;gBACN,GAAG,IAAI;gBACP,OAAO;gBACP,cAAc;gBACd,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC7B,MAAM;gBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,QAAQ,EAAE,WAAW;aACtB,EACD,GAAG,MAAM,GAAG,QAAQ,OAAO,QAAQ,EAAE,CACtC,CAAC;QACF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,oFAAoF;YACpF,MAAM,IAAI,GAAG,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,IAAI;gBAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YACvD,OAAO,OAAO,CAAC;gBACb,IAAI,EAAE,WAAW,MAAM,2CAA2C,MAAM,CAAC,CAAC,CAAC,EAAE;gBAC7E,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,IAAI;oBACb,CAAC,CAAC,CAAC,8EAA8E,CAAC;oBAClF,CAAC,CAAC,CAAC,sEAAsE,CAAC;aAC7E,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}