@fdm-monster/server 1.5.4 → 1.6.0-rc1

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 (155) hide show
  1. package/.env.template +7 -0
  2. package/README.md +2 -1
  3. package/dist/consoles/upload-test.js +52 -0
  4. package/dist/consoles/upload-test.js.map +1 -0
  5. package/dist/constants/event.constants.js.map +1 -1
  6. package/dist/constants/service.constants.js +3 -18
  7. package/dist/constants/service.constants.js.map +1 -1
  8. package/dist/controllers/custom-gcode.controller.js.map +1 -1
  9. package/dist/controllers/printer-files.controller.js +9 -42
  10. package/dist/controllers/printer-files.controller.js.map +1 -1
  11. package/dist/entities/base.entity.js +29 -0
  12. package/dist/entities/base.entity.js.map +1 -0
  13. package/dist/models/Printer.js +4 -43
  14. package/dist/models/Printer.js.map +1 -1
  15. package/dist/models/PrinterFile.js +81 -0
  16. package/dist/models/PrinterFile.js.map +1 -0
  17. package/dist/models/index.js +4 -0
  18. package/dist/models/index.js.map +1 -1
  19. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js +41 -0
  20. package/dist/mongo-migrations/20231202183902-printer-files-simpler.js.map +1 -0
  21. package/dist/server.constants.js +1 -1
  22. package/dist/services/core/multer.service.js +3 -3
  23. package/dist/services/core/multer.service.js.map +1 -1
  24. package/dist/services/interfaces/print-completion.dto.js +0 -2
  25. package/dist/services/interfaces/print-completion.dto.js.map +1 -1
  26. package/dist/services/interfaces/print-completion.interface.js +6 -0
  27. package/dist/services/interfaces/{print-completion.service.js.map → print-completion.interface.js.map} +1 -1
  28. package/dist/services/interfaces/printer-file.dto.js +3 -1
  29. package/dist/services/interfaces/printer-file.dto.js.map +1 -1
  30. package/dist/services/octoprint/dto/connection-state.dto.js +46 -0
  31. package/dist/services/octoprint/dto/connection-state.dto.js.map +1 -0
  32. package/dist/services/octoprint/dto/octoprint-currentuser.dto.js +6 -0
  33. package/dist/services/octoprint/dto/octoprint-currentuser.dto.js.map +1 -0
  34. package/dist/services/octoprint/dto/octoprint-event.dto.js +41 -0
  35. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -0
  36. package/dist/services/octoprint/dto/octoprint-file.dto.js +84 -0
  37. package/dist/services/octoprint/dto/octoprint-file.dto.js.map +1 -0
  38. package/dist/services/octoprint/dto/octoprint-files.dto.js +17 -0
  39. package/dist/services/octoprint/dto/octoprint-files.dto.js.map +1 -0
  40. package/dist/services/{interfaces/print-completion.service.js → octoprint/dto/octoprint-session.dto.js} +1 -1
  41. package/dist/services/octoprint/dto/octoprint-session.dto.js.map +1 -0
  42. package/dist/services/octoprint/dto/octoprint-settings.dto.js +29 -0
  43. package/dist/services/octoprint/dto/octoprint-settings.dto.js.map +1 -0
  44. package/dist/services/octoprint/dto/octoprint-system-info.dto.js +41 -0
  45. package/dist/services/octoprint/dto/octoprint-system-info.dto.js.map +1 -0
  46. package/dist/services/octoprint/dto/state.dto.js +38 -0
  47. package/dist/services/octoprint/dto/state.dto.js.map +1 -0
  48. package/dist/services/octoprint/dto/websocket-output/connection-message.dto.js +6 -0
  49. package/dist/services/octoprint/dto/websocket-output/connection-message.dto.js.map +1 -0
  50. package/dist/services/octoprint/dto/websocket-output/current-message.dto.js +6 -0
  51. package/dist/services/octoprint/dto/websocket-output/current-message.dto.js.map +1 -0
  52. package/dist/services/octoprint/dto/websocket-output/event-message.dto.js +6 -0
  53. package/dist/services/octoprint/dto/websocket-output/event-message.dto.js.map +1 -0
  54. package/dist/services/octoprint/dto/websocket-output/event.type.js +54 -0
  55. package/dist/services/octoprint/dto/websocket-output/event.type.js.map +1 -0
  56. package/dist/services/octoprint/dto/websocket-output/events/client-authed.dto.js +6 -0
  57. package/dist/services/octoprint/dto/websocket-output/events/client-authed.dto.js.map +1 -0
  58. package/dist/services/octoprint/dto/websocket-output/events/client-closed.dto.js +6 -0
  59. package/dist/services/octoprint/dto/websocket-output/events/client-closed.dto.js.map +1 -0
  60. package/dist/services/octoprint/dto/websocket-output/events/client-opened.dto.js +6 -0
  61. package/dist/services/octoprint/dto/websocket-output/events/client-opened.dto.js.map +1 -0
  62. package/dist/services/octoprint/dto/websocket-output/events/dwelling.dto.js +6 -0
  63. package/dist/services/octoprint/dto/websocket-output/events/dwelling.dto.js.map +1 -0
  64. package/dist/services/octoprint/dto/websocket-output/events/file-added.dto.js +6 -0
  65. package/dist/services/octoprint/dto/websocket-output/events/file-added.dto.js.map +1 -0
  66. package/dist/services/octoprint/dto/websocket-output/events/file-deselected.dto.js +6 -0
  67. package/dist/services/octoprint/dto/websocket-output/events/file-deselected.dto.js.map +1 -0
  68. package/dist/services/octoprint/dto/websocket-output/events/file-removed.dto.js +6 -0
  69. package/dist/services/octoprint/dto/websocket-output/events/file-removed.dto.js.map +1 -0
  70. package/dist/services/octoprint/dto/websocket-output/events/folder-added.dto.js +6 -0
  71. package/dist/services/octoprint/dto/websocket-output/events/folder-added.dto.js.map +1 -0
  72. package/dist/services/octoprint/dto/websocket-output/events/home.dto.js +6 -0
  73. package/dist/services/octoprint/dto/websocket-output/events/home.dto.js.map +1 -0
  74. package/dist/services/octoprint/dto/websocket-output/events/metadata-analysis-finished.dto.js +6 -0
  75. package/dist/services/octoprint/dto/websocket-output/events/metadata-analysis-finished.dto.js.map +1 -0
  76. package/dist/services/octoprint/dto/websocket-output/events/metadata-analysis-started.dto.js +6 -0
  77. package/dist/services/octoprint/dto/websocket-output/events/metadata-analysis-started.dto.js.map +1 -0
  78. package/dist/services/octoprint/dto/websocket-output/events/metadata-statistics-updated.dto.js +6 -0
  79. package/dist/services/octoprint/dto/websocket-output/events/metadata-statistics-updated.dto.js.map +1 -0
  80. package/dist/services/octoprint/dto/websocket-output/events/position-update.dto.js +6 -0
  81. package/dist/services/octoprint/dto/websocket-output/events/position-update.dto.js.map +1 -0
  82. package/dist/services/octoprint/dto/websocket-output/events/print-cancelled.dto.js +6 -0
  83. package/dist/services/octoprint/dto/websocket-output/events/print-cancelled.dto.js.map +1 -0
  84. package/dist/services/octoprint/dto/websocket-output/events/print-cancelling.dto.js +6 -0
  85. package/dist/services/octoprint/dto/websocket-output/events/print-cancelling.dto.js.map +1 -0
  86. package/dist/services/octoprint/dto/websocket-output/events/print-done.dto.js +6 -0
  87. package/dist/services/octoprint/dto/websocket-output/events/print-done.dto.js.map +1 -0
  88. package/dist/services/octoprint/dto/websocket-output/events/print-failed.dto.js +6 -0
  89. package/dist/services/octoprint/dto/websocket-output/events/print-failed.dto.js.map +1 -0
  90. package/dist/services/octoprint/dto/websocket-output/events/print-paused.dto.js +6 -0
  91. package/dist/services/octoprint/dto/websocket-output/events/print-paused.dto.js.map +1 -0
  92. package/dist/services/octoprint/dto/websocket-output/events/print-resumed.dto.js +6 -0
  93. package/dist/services/octoprint/dto/websocket-output/events/print-resumed.dto.js.map +1 -0
  94. package/dist/services/octoprint/dto/websocket-output/events/print-started.dto.js +6 -0
  95. package/dist/services/octoprint/dto/websocket-output/events/print-started.dto.js.map +1 -0
  96. package/dist/services/octoprint/dto/websocket-output/events/printer-state-changed.dto.js +6 -0
  97. package/dist/services/octoprint/dto/websocket-output/events/printer-state-changed.dto.js.map +1 -0
  98. package/dist/services/octoprint/dto/websocket-output/events/transfer-done.dto.js +6 -0
  99. package/dist/services/octoprint/dto/websocket-output/events/transfer-done.dto.js.map +1 -0
  100. package/dist/services/octoprint/dto/websocket-output/events/transfer-started.dto.js +6 -0
  101. package/dist/services/octoprint/dto/websocket-output/events/transfer-started.dto.js.map +1 -0
  102. package/dist/services/octoprint/dto/websocket-output/events/updated-files.dto.js +6 -0
  103. package/dist/services/octoprint/dto/websocket-output/events/updated-files.dto.js.map +1 -0
  104. package/dist/services/octoprint/dto/websocket-output/events/upload.dto.js +6 -0
  105. package/dist/services/octoprint/dto/websocket-output/events/upload.dto.js.map +1 -0
  106. package/dist/services/octoprint/dto/websocket-output/events/user-logged-in.dto.js +6 -0
  107. package/dist/services/octoprint/dto/websocket-output/events/user-logged-in.dto.js.map +1 -0
  108. package/dist/services/octoprint/dto/websocket-output/events/z-change.dto.js +6 -0
  109. package/dist/services/octoprint/dto/websocket-output/events/z-change.dto.js.map +1 -0
  110. package/dist/services/octoprint/dto/websocket-output/history-message.dto.js +6 -0
  111. package/dist/services/octoprint/dto/websocket-output/history-message.dto.js.map +1 -0
  112. package/dist/services/octoprint/dto/websocket-output/plugin-message.dto.js +6 -0
  113. package/dist/services/octoprint/dto/websocket-output/plugin-message.dto.js.map +1 -0
  114. package/dist/services/octoprint/dto/websocket-output/timelapse-message.dto.js +6 -0
  115. package/dist/services/octoprint/dto/websocket-output/timelapse-message.dto.js.map +1 -0
  116. package/dist/services/octoprint/octoprint-api.routes.js +15 -15
  117. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  118. package/dist/services/octoprint/octoprint-api.service.js +186 -138
  119. package/dist/services/octoprint/octoprint-api.service.js.map +1 -1
  120. package/dist/services/octoprint/octoprint-sockio.adapter.js +45 -47
  121. package/dist/services/octoprint/octoprint-sockio.adapter.js.map +1 -1
  122. package/dist/services/octoprint/utils/api.utils.js +0 -35
  123. package/dist/services/octoprint/utils/api.utils.js.map +1 -1
  124. package/dist/services/orm/base.interface.js +6 -0
  125. package/dist/services/orm/base.interface.js.map +1 -0
  126. package/dist/services/orm/base.service.js +69 -0
  127. package/dist/services/orm/base.service.js.map +1 -0
  128. package/dist/services/print-completion.service.js +0 -1
  129. package/dist/services/print-completion.service.js.map +1 -1
  130. package/dist/services/printer-files.service.js +70 -49
  131. package/dist/services/printer-files.service.js.map +1 -1
  132. package/dist/services/printer.service.js +0 -2
  133. package/dist/services/printer.service.js.map +1 -1
  134. package/dist/shared/dtos/printer-login.dto.js +58 -0
  135. package/dist/shared/dtos/printer-login.dto.js.map +1 -0
  136. package/dist/{utils → shared}/websocket.adapter.js +3 -3
  137. package/dist/shared/websocket.adapter.js.map +1 -0
  138. package/dist/state/file-upload-tracker.cache.js.map +1 -1
  139. package/dist/state/file.cache.js +19 -35
  140. package/dist/state/file.cache.js.map +1 -1
  141. package/dist/state/printer-events.cache.js.map +1 -1
  142. package/dist/state/printer-files.store.js +15 -18
  143. package/dist/state/printer-files.store.js.map +1 -1
  144. package/dist/state/printer.cache.js.map +1 -1
  145. package/dist/state/settings.store.js +6 -1
  146. package/dist/state/settings.store.js.map +1 -1
  147. package/dist/tasks/print-completion.socketio.task.js +13 -18
  148. package/dist/tasks/print-completion.socketio.task.js.map +1 -1
  149. package/dist/tasks/printer-websocket.task.js.map +1 -1
  150. package/dist/utils/env.utils.js +0 -10
  151. package/dist/utils/env.utils.js.map +1 -1
  152. package/package.json +43 -33
  153. package/dist/utils/find-predicate.utils.js +0 -18
  154. package/dist/utils/find-predicate.utils.js.map +0 -1
  155. package/dist/utils/websocket.adapter.js.map +0 -1
package/package.json CHANGED
@@ -7,17 +7,25 @@
7
7
  "author": "David Zwart",
8
8
  "license": "AGPL-3.0-or-later",
9
9
  "private": false,
10
- "version": "1.5.4",
10
+ "version": "1.6.0-rc1",
11
+ "bin": {
12
+ "fdm-monster": "dist/index.js",
13
+ "fdmm": "dist/index.js"
14
+ },
11
15
  "description": "FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.",
12
16
  "main": "dist/index.js",
13
17
  "scripts": {
18
+ "console:upload": "yarn build && cross-env NODE_ENV=development node ./dist/consoles/upload-test.js",
14
19
  "dev": "concurrently \"yarn build:watch\" \"yarn watch-dev\"",
15
20
  "watch-dev": "cross-env NODE_ENV=development nodemon --watch \"dist/**/*\" -e js ./dist/index.js",
21
+ "console:torm": "yarn build && cross-env NODE_ENV=development nodemon --watch \"dist/**/*\" -e js ./dist/consoles/sqlite-torm.js",
22
+ "console:migrate": "yarn build && cross-env NODE_ENV=development nodemon --watch \"dist/**/*\" -e js ./dist/consoles/typeorm-migrate.js",
23
+ "console:generate": "yarn build && cross-env NODE_ENV=development node ./dist/consoles/typeorm-generate.js",
16
24
  "build": "swc src -d dist",
17
25
  "build:watch": "swc src -w -d dist",
18
26
  "start:dev": "ts-node src/index.ts",
19
27
  "start": "cross-env NODE_ENV=production node dist/index.js",
20
- "migration:create": "migrate-mongo create printer-remove-settingsappearance",
28
+ "migration:create": "migrate-mongo create printer-files-simpler",
21
29
  "migration:up": "migrate-mongo up",
22
30
  "migration:down": "migrate-mongo down",
23
31
  "migration:status": "migrate-mongo status",
@@ -26,7 +34,11 @@
26
34
  "tsc": "tsc --noEmit",
27
35
  "test": "jest --forceExit --maxConcurrency=8 --runInBand ",
28
36
  "test:cov": "jest --forceExit --coverage --maxConcurrency=8 --runInBand ",
29
- "cov:show": "./coverage/lcov-report/index.html"
37
+ "cov:show": "./coverage/lcov-report/index.html",
38
+ "torm": "ts-node --swc -r tsconfig-paths/register ./node_modules/typeorm/cli.js",
39
+ "typeorm:generate": "yarn torm migration:generate -d src/data-source.ts --pretty src/migrations/CustomGCode",
40
+ "typeorm:migrate": "yarn torm migration:run -d src/data-source.ts",
41
+ "typeorm:revert": "yarn torm migration:revert -d src/data-source.ts"
30
42
  },
31
43
  "keywords": [
32
44
  "fdm-monster",
@@ -39,16 +51,17 @@
39
51
  "vue"
40
52
  ],
41
53
  "dependencies": {
42
- "@fdm-monster/client": "1.4.4",
54
+ "@fdm-monster/client": "1.5.0-rc3",
43
55
  "@influxdata/influxdb-client": "1.33.2",
44
- "@sentry/node": "7.82.0",
56
+ "@sentry/node": "7.93.0",
45
57
  "adm-zip": "0.5.10",
46
- "awilix": "9.0.0",
47
- "awilix-express": "8.0.0",
48
- "axios": "1.6.2",
58
+ "awilix": "10.0.1",
59
+ "awilix-express": "9.0.1",
60
+ "axios": "1.6.5",
49
61
  "bcryptjs": "2.4.3",
62
+ "better-sqlite3": "9.2.2",
50
63
  "cache-manager": "4.1.0",
51
- "class-validator": "0.14.0",
64
+ "class-validator": "0.14.1",
52
65
  "connect-history-api-fallback": "2.0.0",
53
66
  "cookie-parser": "1.4.6",
54
67
  "cors": "2.8.5",
@@ -57,7 +70,6 @@
57
70
  "eventemitter2": "6.4.9",
58
71
  "express": "4.18.2",
59
72
  "form-data": "4.0.0",
60
- "got": "11.8.6",
61
73
  "helmet": "7.1.0",
62
74
  "ip": "1.1.8",
63
75
  "js-yaml": "4.1.0",
@@ -65,29 +77,30 @@
65
77
  "lodash": "4.17.21",
66
78
  "luxon": "3.4.4",
67
79
  "migrate-mongo": "11.0.0",
68
- "mongoose": "6.12.3",
69
- "mqtt": "5.3.0",
80
+ "mongoose": "6.12.5",
81
+ "mqtt": "5.3.4",
70
82
  "multer": "1.4.5-lts.1",
71
83
  "node-input-validator": "4.5.1",
72
- "nodemon": "3.0.1",
84
+ "nodemon": "3.0.2",
73
85
  "octokit": "3.1.2",
74
- "passport": "0.6.0",
86
+ "passport": "0.7.0",
75
87
  "passport-anonymous": "1.0.1",
76
88
  "passport-jwt": "4.0.1",
77
- "reflect-metadata": "0.1.13",
89
+ "reflect-metadata": "0.2.1",
78
90
  "semver": "7.5.4",
79
- "simple-git": "3.21.0",
80
- "socket.io": "4.7.2",
91
+ "simple-git": "3.22.0",
92
+ "socket.io": "4.7.4",
81
93
  "toad-scheduler": "3.0.0",
94
+ "typeorm": "0.3.19",
82
95
  "uuid": "9.0.1",
83
96
  "winston": "3.11.0",
84
- "ws": "8.14.2"
97
+ "ws": "8.16.0"
85
98
  },
86
99
  "devDependencies": {
87
100
  "@lcov-viewer/cli": "1.3.0",
88
101
  "@lcov-viewer/istanbul-report": "1.4.0",
89
102
  "@swc/cli": "0.1.63",
90
- "@swc/core": "1.3.99",
103
+ "@swc/core": "1.3.102",
91
104
  "@swc/jest": "0.2.29",
92
105
  "@types/adm-zip": "0.5.5",
93
106
  "@types/bcryptjs": "2.4.6",
@@ -97,40 +110,37 @@
97
110
  "@types/express": "4.17.21",
98
111
  "@types/express-session": "1.17.10",
99
112
  "@types/ip": "1.1.3",
100
- "@types/jest": "29.5.10",
113
+ "@types/jest": "29.5.11",
101
114
  "@types/js-yaml": "4.0.9",
102
115
  "@types/lodash": "4.14.202",
103
- "@types/luxon": "3.3.5",
116
+ "@types/luxon": "3.4.0",
104
117
  "@types/migrate-mongo": "10.0.4",
105
118
  "@types/multer": "1.4.11",
106
- "@types/node": "20.10.0",
119
+ "@types/node": "20.11.0",
107
120
  "@types/passport-anonymous": "1.0.5",
108
- "@types/passport-jwt": "3.0.13",
121
+ "@types/passport-jwt": "4.0.0",
109
122
  "@types/semver": "7.5.6",
110
- "@types/supertest": "2.0.16",
123
+ "@types/supertest": "6.0.2",
111
124
  "@types/uuid": "9.0.7",
112
125
  "chokidar": "3.5.3",
113
126
  "concurrently": "8.2.2",
114
- "eslint": "8.54.0",
127
+ "eslint": "8.56.0",
115
128
  "eslint-config-airbnb-base": "15.0.0",
116
- "eslint-config-prettier": "9.0.0",
129
+ "eslint-config-prettier": "9.1.0",
117
130
  "eslint-config-standard": "17.1.0",
118
- "eslint-plugin-import": "2.29.0",
131
+ "eslint-plugin-import": "2.29.1",
119
132
  "eslint-plugin-node": "11.1.0",
120
133
  "eslint-plugin-prettier": "4.2.1",
121
134
  "eslint-plugin-promise": "6.1.1",
122
135
  "express-list-routes": "1.1.9",
123
136
  "jest": "29.7.0",
124
137
  "jest-27-expect-message": "1.1.0",
125
- "mongodb-memory-server": "9.1.1",
138
+ "mongodb-memory-server": "9.1.4",
126
139
  "nock": "13.4.0",
127
140
  "prettier": "2.8.8",
128
141
  "supertest": "6.3.3",
129
- "ts-node": "10.9.1",
130
- "typescript": "5.3.2"
131
- },
132
- "resolutions": {
133
- "got": "11.8.6"
142
+ "ts-node": "10.9.2",
143
+ "typescript": "5.3.3"
134
144
  },
135
145
  "ignore-engines": false,
136
146
  "engine-strict": true,
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "findFileIndex", {
6
- enumerable: true,
7
- get: function() {
8
- return findFileIndex;
9
- }
10
- });
11
- const _lodash = require("lodash");
12
- const findFileIndex = (fileList, filePath)=>{
13
- return (0, _lodash.findIndex)(fileList.files, (f)=>{
14
- return f.path === filePath;
15
- });
16
- };
17
-
18
- //# sourceMappingURL=find-predicate.utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/find-predicate.utils.ts"],"names":["findFileIndex","fileList","filePath","findIndex","files","f","path"],"mappings":";;;;+BAEaA;;;eAAAA;;;wBAFa;AAEnB,MAAMA,gBAAgB,CAACC,UAAUC;IACtC,OAAOC,IAAAA,iBAAS,EAACF,SAASG,KAAK,EAAE,CAACC;QAChC,OAAOA,EAAEC,IAAI,KAAKJ;IACpB;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/websocket.adapter.ts"],"names":["WebsocketAdapter","socket","logger","constructor","loggerFactory","name","isOpened","readyState","WebSocket","OPEN","close","open","url","handshakeTimeout","AppConstants","defaultWebsocketHandshakeTimeout","onopen","event","onOpen","onerror","error","onError","onclose","onClose","onmessage","message","onMessage","data","sendMessage","payload","Promise","resolve","reject","send","afterOpened","afterClosed"],"mappings":";;;;+BAKaA;;;eAAAA;;;iCALgB;oBAC6C;AAInE,MAAMA;IACXC,OAAmB;IACnB,CAACC,MAAM,CAAgB;IAEvBC,YAAY,EAAEC,aAAa,EAAqC,CAAE;QAChE,IAAI,CAAC,CAACF,MAAM,GAAGE,cAAcJ,iBAAiBK,IAAI;IACpD;IAEA,IAAIC,WAAW;QACb,OAAO,IAAI,CAACL,MAAM,EAAEM,eAAeC,aAAS,CAACC,IAAI;IACnD;IAEAC,QAAQ;QACN,IAAI,CAACT,MAAM,EAAES;QACb,OAAO,IAAI,CAACT,MAAM;IACpB;IASAU,KAAKC,GAAiB,EAAQ;QAC5B,IAAI,CAACX,MAAM,GAAG,IAAIO,aAAS,CAACI,KAAK;YAAEC,kBAAkBC,6BAAY,CAACC,gCAAgC;QAAC;QACnG,IAAI,CAACd,MAAM,CAACe,MAAM,GAAG,CAACC,QAAU,IAAI,CAACC,MAAM,CAACD;QAC5C,IAAI,CAAChB,MAAM,CAACkB,OAAO,GAAG,CAACC,QAAU,IAAI,CAACC,OAAO,CAACD;QAC9C,IAAI,CAACnB,MAAM,CAACqB,OAAO,GAAG,CAACL,QAAU,IAAI,CAACM,OAAO,CAACN;QAC9C,IAAI,CAAChB,MAAM,CAACuB,SAAS,GAAG,CAACC,UAAY,IAAI,CAACC,SAAS,CAACD,QAAQE,IAAI;IAClE;IASA,MAAMC,YAAYC,OAAe,EAAiB;QAChD,IAAI,CAAC,IAAI,CAACvB,QAAQ,IAAI,CAAC,IAAI,CAACL,MAAM,EAAE;YAClC,IAAI,CAAC,CAACC,MAAM,CAACkB,KAAK,CAAC;YACnB;QACF;QACA,OAAO,MAAM,IAAIU,QAAQ,CAACC,SAASC;YACjC,IAAI,CAAC/B,MAAM,CAAEgC,IAAI,CAACJ,SAAS,CAACT;gBAC1B,IAAIA,OAAOY,OAAOZ;gBAClBW;YACF;QACF;IACF;IASAV,QAAQD,KAAiB,EAAwB,CAAC;IASlDc,YAAYjB,KAAc,EAAwB,CAAC;IASnDkB,YAAYlB,KAAiB,EAAwB,CAAC;IAStDS,UAAUT,KAAW,EAAwB,CAAC;IAQ9C,MAAMC,OAAOD,KAAc,EAAiB;QAC1C,MAAM,IAAI,CAACiB,WAAW,CAACjB;IACzB;IAQA,MAAMM,QAAQN,KAAiB,EAAiB;QAC9C,MAAM,IAAI,CAACkB,WAAW,CAAClB;IACzB;AACF"}