@en-solutions/tgm-client-sdk 1.6.21

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 (533) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +788 -0
  3. package/esm2022/en-solutions-tgm-client-sdk.mjs +5 -0
  4. package/esm2022/lib/components/database-manager/database-manager/database-manager.component.mjs +308 -0
  5. package/esm2022/lib/components/database-manager/database-manager.module.mjs +66 -0
  6. package/esm2022/lib/components/database-manager/object-browser/object-browser.component.mjs +98 -0
  7. package/esm2022/lib/components/database-manager/query-editor/query-editor.component.mjs +196 -0
  8. package/esm2022/lib/components/database-manager/query-toolbar/query-toolbar.component.mjs +70 -0
  9. package/esm2022/lib/components/database-manager/record-detail/record-detail.component.mjs +112 -0
  10. package/esm2022/lib/components/database-manager/registry/entity-registry.mjs +512 -0
  11. package/esm2022/lib/components/database-manager/results-grid/results-grid.component.mjs +165 -0
  12. package/esm2022/lib/components/database-manager/services/entity-schema.service.mjs +91 -0
  13. package/esm2022/lib/components/database-manager/services/query-executor.service.mjs +204 -0
  14. package/esm2022/lib/components/database-manager/table-data-viewer/table-data-viewer.component.mjs +166 -0
  15. package/esm2022/lib/components/database-manager/table-structure/table-structure.component.mjs +42 -0
  16. package/esm2022/lib/components/database-manager/types/database-manager.types.mjs +6 -0
  17. package/esm2022/lib/components/reporting/export-button/export-button.component.mjs +203 -0
  18. package/esm2022/lib/components/reporting/generated-report-list/generated-report-list.component.mjs +285 -0
  19. package/esm2022/lib/components/reporting/report-definition-form/report-definition-form.component.mjs +206 -0
  20. package/esm2022/lib/components/reporting/report-definition-list/report-definition-list.component.mjs +252 -0
  21. package/esm2022/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.mjs +122 -0
  22. package/esm2022/lib/components/reporting/report-stats/report-stats.component.mjs +164 -0
  23. package/esm2022/lib/components/reporting/report-template-list/report-template-list.component.mjs +114 -0
  24. package/esm2022/lib/components/reporting/reporting.module.mjs +60 -0
  25. package/esm2022/lib/components/video-call/incoming-call/incoming-call.component.mjs +80 -0
  26. package/esm2022/lib/components/video-call/services/livekit-room.service.mjs +142 -0
  27. package/esm2022/lib/components/video-call/services/video-call-signaling.service.mjs +42 -0
  28. package/esm2022/lib/components/video-call/services/video-call-state.service.mjs +52 -0
  29. package/esm2022/lib/components/video-call/types/video-call.types.mjs +2 -0
  30. package/esm2022/lib/components/video-call/video-call.module.mjs +42 -0
  31. package/esm2022/lib/components/video-call/video-controls/video-controls.component.mjs +33 -0
  32. package/esm2022/lib/components/video-call/video-participant/video-participant.component.mjs +68 -0
  33. package/esm2022/lib/components/video-call/video-room/video-room.component.mjs +89 -0
  34. package/esm2022/lib/core/auth-interceptor.mjs +33 -0
  35. package/esm2022/lib/core/client-interceptor.mjs +34 -0
  36. package/esm2022/lib/core/error-handler.mjs +32 -0
  37. package/esm2022/lib/core/http-client.service.mjs +254 -0
  38. package/esm2022/lib/core/websocket.service.mjs +185 -0
  39. package/esm2022/lib/models/admin/audit.models.mjs +2 -0
  40. package/esm2022/lib/models/admin/backup.models.mjs +2 -0
  41. package/esm2022/lib/models/admin/client.models.mjs +2 -0
  42. package/esm2022/lib/models/admin/email-provider.models.mjs +2 -0
  43. package/esm2022/lib/models/admin/erp.models.mjs +2 -0
  44. package/esm2022/lib/models/admin/identity-provider.models.mjs +2 -0
  45. package/esm2022/lib/models/admin/index.mjs +14 -0
  46. package/esm2022/lib/models/admin/messaging-provider.models.mjs +2 -0
  47. package/esm2022/lib/models/admin/platform-admin.models.mjs +2 -0
  48. package/esm2022/lib/models/admin/queue.models.mjs +2 -0
  49. package/esm2022/lib/models/admin/role.models.mjs +2 -0
  50. package/esm2022/lib/models/admin/sandbox.models.mjs +2 -0
  51. package/esm2022/lib/models/admin/ticket.models.mjs +2 -0
  52. package/esm2022/lib/models/admin/webhook.models.mjs +2 -0
  53. package/esm2022/lib/models/api/ai.models.mjs +2 -0
  54. package/esm2022/lib/models/api/aip.models.mjs +2 -0
  55. package/esm2022/lib/models/api/cat.models.mjs +2 -0
  56. package/esm2022/lib/models/api/company.models.mjs +2 -0
  57. package/esm2022/lib/models/api/compliance.models.mjs +2 -0
  58. package/esm2022/lib/models/api/component.models.mjs +2 -0
  59. package/esm2022/lib/models/api/cortex-edge.models.mjs +2 -0
  60. package/esm2022/lib/models/api/cortex-event.models.mjs +2 -0
  61. package/esm2022/lib/models/api/cortex-insight.models.mjs +2 -0
  62. package/esm2022/lib/models/api/cortex-node.models.mjs +2 -0
  63. package/esm2022/lib/models/api/custom-field.models.mjs +2 -0
  64. package/esm2022/lib/models/api/deferral.models.mjs +2 -0
  65. package/esm2022/lib/models/api/diagnostic-report.models.mjs +2 -0
  66. package/esm2022/lib/models/api/document.models.mjs +2 -0
  67. package/esm2022/lib/models/api/energy.models.mjs +2 -0
  68. package/esm2022/lib/models/api/failure.models.mjs +2 -0
  69. package/esm2022/lib/models/api/fleet.models.mjs +2 -0
  70. package/esm2022/lib/models/api/inspection.models.mjs +2 -0
  71. package/esm2022/lib/models/api/intervention.models.mjs +2 -0
  72. package/esm2022/lib/models/api/iot.models.mjs +2 -0
  73. package/esm2022/lib/models/api/knowledge.models.mjs +2 -0
  74. package/esm2022/lib/models/api/loto.models.mjs +2 -0
  75. package/esm2022/lib/models/api/maintenance-record.models.mjs +2 -0
  76. package/esm2022/lib/models/api/maintenance.models.mjs +2 -0
  77. package/esm2022/lib/models/api/material.models.mjs +2 -0
  78. package/esm2022/lib/models/api/media.models.mjs +2 -0
  79. package/esm2022/lib/models/api/misc.models.mjs +2 -0
  80. package/esm2022/lib/models/api/project.models.mjs +2 -0
  81. package/esm2022/lib/models/api/quality.models.mjs +2 -0
  82. package/esm2022/lib/models/api/reporting.models.mjs +3 -0
  83. package/esm2022/lib/models/api/reservoir-websocket.models.mjs +17 -0
  84. package/esm2022/lib/models/api/reservoir.models.mjs +2 -0
  85. package/esm2022/lib/models/api/search.models.mjs +2 -0
  86. package/esm2022/lib/models/api/sensor.models.mjs +2 -0
  87. package/esm2022/lib/models/api/unit.models.mjs +2 -0
  88. package/esm2022/lib/models/api/user.models.mjs +2 -0
  89. package/esm2022/lib/models/api/warranty.models.mjs +2 -0
  90. package/esm2022/lib/models/api/work-permit.models.mjs +2 -0
  91. package/esm2022/lib/models/api/workflow.models.mjs +2 -0
  92. package/esm2022/lib/models/auth/index.mjs +4 -0
  93. package/esm2022/lib/models/auth/login.models.mjs +2 -0
  94. package/esm2022/lib/models/auth/sso.models.mjs +2 -0
  95. package/esm2022/lib/models/auth/totp.models.mjs +2 -0
  96. package/esm2022/lib/models/base.models.mjs +99 -0
  97. package/esm2022/lib/models/chat/chat.models.mjs +2 -0
  98. package/esm2022/lib/models/enums/cat.enums.mjs +17 -0
  99. package/esm2022/lib/models/enums/energy.enums.mjs +8 -0
  100. package/esm2022/lib/models/enums/erp.enums.mjs +5 -0
  101. package/esm2022/lib/models/enums/index.mjs +15 -0
  102. package/esm2022/lib/models/enums/inspection.enums.mjs +7 -0
  103. package/esm2022/lib/models/enums/loto.enums.mjs +25 -0
  104. package/esm2022/lib/models/enums/misc.enums.mjs +19 -0
  105. package/esm2022/lib/models/enums/quality.enums.mjs +22 -0
  106. package/esm2022/lib/models/enums/reservoir.enums.mjs +13 -0
  107. package/esm2022/lib/models/enums/sso.enums.mjs +3 -0
  108. package/esm2022/lib/models/enums/status.enums.mjs +41 -0
  109. package/esm2022/lib/models/enums/time.enums.mjs +5 -0
  110. package/esm2022/lib/models/enums/type.enums.mjs +45 -0
  111. package/esm2022/lib/models/enums/user.enums.mjs +6 -0
  112. package/esm2022/lib/models/enums/work-permit.enums.mjs +33 -0
  113. package/esm2022/lib/models/index.mjs +42 -0
  114. package/esm2022/lib/models/realtime/realtime-event.models.mjs +9 -0
  115. package/esm2022/lib/models/video/video-call.models.mjs +2 -0
  116. package/esm2022/lib/services/admin/activity-log.service.mjs +28 -0
  117. package/esm2022/lib/services/admin/announcement.service.mjs +37 -0
  118. package/esm2022/lib/services/admin/article-admin.service.mjs +37 -0
  119. package/esm2022/lib/services/admin/audit-log.service.mjs +53 -0
  120. package/esm2022/lib/services/admin/backup.service.mjs +28 -0
  121. package/esm2022/lib/services/admin/cache-admin.service.mjs +64 -0
  122. package/esm2022/lib/services/admin/client-admin.service.mjs +101 -0
  123. package/esm2022/lib/services/admin/client-api-key.service.mjs +31 -0
  124. package/esm2022/lib/services/admin/client-ocr.service.mjs +28 -0
  125. package/esm2022/lib/services/admin/client-usage.service.mjs +31 -0
  126. package/esm2022/lib/services/admin/data-export.service.mjs +19 -0
  127. package/esm2022/lib/services/admin/document-admin.service.mjs +40 -0
  128. package/esm2022/lib/services/admin/email-admin.service.mjs +28 -0
  129. package/esm2022/lib/services/admin/email-provider.service.mjs +58 -0
  130. package/esm2022/lib/services/admin/erp-admin.service.mjs +111 -0
  131. package/esm2022/lib/services/admin/identity-provider.service.mjs +46 -0
  132. package/esm2022/lib/services/admin/impersonation.service.mjs +19 -0
  133. package/esm2022/lib/services/admin/index.mjs +31 -0
  134. package/esm2022/lib/services/admin/messaging-provider.service.mjs +55 -0
  135. package/esm2022/lib/services/admin/notification.service.mjs +31 -0
  136. package/esm2022/lib/services/admin/platform-admin.service.mjs +34 -0
  137. package/esm2022/lib/services/admin/platform-webhook.service.mjs +34 -0
  138. package/esm2022/lib/services/admin/queue-admin.service.mjs +55 -0
  139. package/esm2022/lib/services/admin/role-admin.service.mjs +81 -0
  140. package/esm2022/lib/services/admin/sandbox-admin.service.mjs +34 -0
  141. package/esm2022/lib/services/admin/scheduler-admin.service.mjs +34 -0
  142. package/esm2022/lib/services/admin/subscription.service.mjs +28 -0
  143. package/esm2022/lib/services/admin/system-health.service.mjs +22 -0
  144. package/esm2022/lib/services/admin/user-admin.service.mjs +67 -0
  145. package/esm2022/lib/services/admin/user-permission.service.mjs +40 -0
  146. package/esm2022/lib/services/admin/webhook-admin.service.mjs +61 -0
  147. package/esm2022/lib/services/api/agent.service.mjs +29 -0
  148. package/esm2022/lib/services/api/ai-feedback.service.mjs +17 -0
  149. package/esm2022/lib/services/api/ai.service.mjs +66 -0
  150. package/esm2022/lib/services/api/aip-analysis.service.mjs +20 -0
  151. package/esm2022/lib/services/api/aip-financial.service.mjs +29 -0
  152. package/esm2022/lib/services/api/aip-geographic.service.mjs +30 -0
  153. package/esm2022/lib/services/api/aip-network.service.mjs +29 -0
  154. package/esm2022/lib/services/api/aip-performance.service.mjs +29 -0
  155. package/esm2022/lib/services/api/aip-resource.service.mjs +23 -0
  156. package/esm2022/lib/services/api/aip-workflow.service.mjs +32 -0
  157. package/esm2022/lib/services/api/aip.service.mjs +158 -0
  158. package/esm2022/lib/services/api/alert.service.mjs +26 -0
  159. package/esm2022/lib/services/api/anomaly-detection.service.mjs +40 -0
  160. package/esm2022/lib/services/api/asset-lifecycle.service.mjs +78 -0
  161. package/esm2022/lib/services/api/audit-entry.service.mjs +22 -0
  162. package/esm2022/lib/services/api/base-crud.service.mjs +37 -0
  163. package/esm2022/lib/services/api/bid.service.mjs +17 -0
  164. package/esm2022/lib/services/api/budget.service.mjs +17 -0
  165. package/esm2022/lib/services/api/bulk-operation.service.mjs +65 -0
  166. package/esm2022/lib/services/api/capex-project.service.mjs +17 -0
  167. package/esm2022/lib/services/api/cat.service.mjs +77 -0
  168. package/esm2022/lib/services/api/client-article.service.mjs +23 -0
  169. package/esm2022/lib/services/api/community.service.mjs +41 -0
  170. package/esm2022/lib/services/api/company-material-type.service.mjs +17 -0
  171. package/esm2022/lib/services/api/company-material.service.mjs +17 -0
  172. package/esm2022/lib/services/api/company.service.mjs +30 -0
  173. package/esm2022/lib/services/api/compliance.service.mjs +74 -0
  174. package/esm2022/lib/services/api/component-info.service.mjs +17 -0
  175. package/esm2022/lib/services/api/component-location.service.mjs +17 -0
  176. package/esm2022/lib/services/api/component.service.mjs +53 -0
  177. package/esm2022/lib/services/api/cortex-event.service.mjs +17 -0
  178. package/esm2022/lib/services/api/cortex-insight.service.mjs +23 -0
  179. package/esm2022/lib/services/api/cortex-node.service.mjs +17 -0
  180. package/esm2022/lib/services/api/cortex.service.mjs +29 -0
  181. package/esm2022/lib/services/api/custom-field.service.mjs +70 -0
  182. package/esm2022/lib/services/api/custom.service.mjs +43 -0
  183. package/esm2022/lib/services/api/dashboard.service.mjs +44 -0
  184. package/esm2022/lib/services/api/deferral.service.mjs +54 -0
  185. package/esm2022/lib/services/api/department.service.mjs +17 -0
  186. package/esm2022/lib/services/api/device-gateway.service.mjs +33 -0
  187. package/esm2022/lib/services/api/diagnostic-report.service.mjs +23 -0
  188. package/esm2022/lib/services/api/digital-twin.service.mjs +56 -0
  189. package/esm2022/lib/services/api/document.service.mjs +53 -0
  190. package/esm2022/lib/services/api/dynamic-crud.service.mjs +67 -0
  191. package/esm2022/lib/services/api/energy-analytics.service.mjs +42 -0
  192. package/esm2022/lib/services/api/energy-production.service.mjs +17 -0
  193. package/esm2022/lib/services/api/energy.service.mjs +91 -0
  194. package/esm2022/lib/services/api/entity-comment.service.mjs +31 -0
  195. package/esm2022/lib/services/api/event.service.mjs +17 -0
  196. package/esm2022/lib/services/api/export.service.mjs +216 -0
  197. package/esm2022/lib/services/api/extension.service.mjs +56 -0
  198. package/esm2022/lib/services/api/failure.service.mjs +53 -0
  199. package/esm2022/lib/services/api/fleet.service.mjs +140 -0
  200. package/esm2022/lib/services/api/inactive-component.service.mjs +17 -0
  201. package/esm2022/lib/services/api/index.mjs +101 -0
  202. package/esm2022/lib/services/api/inspection.service.mjs +29 -0
  203. package/esm2022/lib/services/api/intervention-request.service.mjs +17 -0
  204. package/esm2022/lib/services/api/intervention.service.mjs +17 -0
  205. package/esm2022/lib/services/api/knowledge.service.mjs +209 -0
  206. package/esm2022/lib/services/api/license.service.mjs +25 -0
  207. package/esm2022/lib/services/api/location.service.mjs +17 -0
  208. package/esm2022/lib/services/api/log.service.mjs +17 -0
  209. package/esm2022/lib/services/api/login-history.service.mjs +17 -0
  210. package/esm2022/lib/services/api/maintenance-plan.service.mjs +17 -0
  211. package/esm2022/lib/services/api/maintenance-record.service.mjs +17 -0
  212. package/esm2022/lib/services/api/material-consumable.service.mjs +41 -0
  213. package/esm2022/lib/services/api/material-instrument.service.mjs +29 -0
  214. package/esm2022/lib/services/api/material-item.service.mjs +53 -0
  215. package/esm2022/lib/services/api/material-tooling.service.mjs +41 -0
  216. package/esm2022/lib/services/api/measurement-unit.service.mjs +17 -0
  217. package/esm2022/lib/services/api/misc-crud.service.mjs +329 -0
  218. package/esm2022/lib/services/api/note.service.mjs +37 -0
  219. package/esm2022/lib/services/api/outage-resource.service.mjs +28 -0
  220. package/esm2022/lib/services/api/plant-data.service.mjs +31 -0
  221. package/esm2022/lib/services/api/procurement.service.mjs +53 -0
  222. package/esm2022/lib/services/api/project.service.mjs +17 -0
  223. package/esm2022/lib/services/api/property-template.service.mjs +17 -0
  224. package/esm2022/lib/services/api/quality.service.mjs +29 -0
  225. package/esm2022/lib/services/api/recurring-event.service.mjs +17 -0
  226. package/esm2022/lib/services/api/reporting.service.mjs +117 -0
  227. package/esm2022/lib/services/api/reservoir-data.service.mjs +19 -0
  228. package/esm2022/lib/services/api/reservoir.service.mjs +209 -0
  229. package/esm2022/lib/services/api/room.service.mjs +17 -0
  230. package/esm2022/lib/services/api/sandbox.service.mjs +62 -0
  231. package/esm2022/lib/services/api/scheduled-report.service.mjs +17 -0
  232. package/esm2022/lib/services/api/search.service.mjs +77 -0
  233. package/esm2022/lib/services/api/sensor.service.mjs +36 -0
  234. package/esm2022/lib/services/api/sla-policy.service.mjs +17 -0
  235. package/esm2022/lib/services/api/sla.service.mjs +17 -0
  236. package/esm2022/lib/services/api/threshold-alert-rule.service.mjs +17 -0
  237. package/esm2022/lib/services/api/ticket.service.mjs +73 -0
  238. package/esm2022/lib/services/api/time-entry.service.mjs +17 -0
  239. package/esm2022/lib/services/api/todo.service.mjs +17 -0
  240. package/esm2022/lib/services/api/unit.service.mjs +17 -0
  241. package/esm2022/lib/services/api/upload.service.mjs +84 -0
  242. package/esm2022/lib/services/api/user.service.mjs +107 -0
  243. package/esm2022/lib/services/api/warehouse.service.mjs +29 -0
  244. package/esm2022/lib/services/api/warranty.service.mjs +29 -0
  245. package/esm2022/lib/services/api/work-order.service.mjs +28 -0
  246. package/esm2022/lib/services/api/work-permit.service.mjs +17 -0
  247. package/esm2022/lib/services/api/workflow.service.mjs +86 -0
  248. package/esm2022/lib/services/auth/auth.service.mjs +97 -0
  249. package/esm2022/lib/services/auth/index.mjs +5 -0
  250. package/esm2022/lib/services/auth/platform-auth.service.mjs +39 -0
  251. package/esm2022/lib/services/auth/sso-auth.service.mjs +46 -0
  252. package/esm2022/lib/services/auth/totp.service.mjs +34 -0
  253. package/esm2022/lib/services/chat/chat-rest.service.mjs +104 -0
  254. package/esm2022/lib/services/chat/chat-websocket.service.mjs +70 -0
  255. package/esm2022/lib/services/chat/index.mjs +3 -0
  256. package/esm2022/lib/services/index.mjs +8 -0
  257. package/esm2022/lib/services/realtime/index.mjs +2 -0
  258. package/esm2022/lib/services/realtime/realtime-event.service.mjs +187 -0
  259. package/esm2022/lib/services/reservoir/index.mjs +2 -0
  260. package/esm2022/lib/services/reservoir/reservoir-websocket.service.mjs +105 -0
  261. package/esm2022/lib/services/video/index.mjs +3 -0
  262. package/esm2022/lib/services/video/video-call-rest.service.mjs +42 -0
  263. package/esm2022/lib/services/video/video-call-websocket.service.mjs +55 -0
  264. package/esm2022/lib/tgm-sdk.config.mjs +32 -0
  265. package/esm2022/lib/tgm-sdk.module.mjs +38 -0
  266. package/esm2022/public-api.mjs +52 -0
  267. package/fesm2022/en-solutions-tgm-client-sdk.mjs +11029 -0
  268. package/fesm2022/en-solutions-tgm-client-sdk.mjs.map +1 -0
  269. package/index.d.ts +5 -0
  270. package/lib/components/database-manager/database-manager/database-manager.component.d.ts +70 -0
  271. package/lib/components/database-manager/database-manager.module.d.ts +15 -0
  272. package/lib/components/database-manager/object-browser/object-browser.component.d.ts +35 -0
  273. package/lib/components/database-manager/query-editor/query-editor.component.d.ts +31 -0
  274. package/lib/components/database-manager/query-toolbar/query-toolbar.component.d.ts +23 -0
  275. package/lib/components/database-manager/record-detail/record-detail.component.d.ts +35 -0
  276. package/lib/components/database-manager/registry/entity-registry.d.ts +16 -0
  277. package/lib/components/database-manager/results-grid/results-grid.component.d.ts +62 -0
  278. package/lib/components/database-manager/services/entity-schema.service.d.ts +37 -0
  279. package/lib/components/database-manager/services/query-executor.service.d.ts +57 -0
  280. package/lib/components/database-manager/table-data-viewer/table-data-viewer.component.d.ts +54 -0
  281. package/lib/components/database-manager/table-structure/table-structure.component.d.ts +16 -0
  282. package/lib/components/database-manager/types/database-manager.types.d.ts +71 -0
  283. package/lib/components/reporting/export-button/export-button.component.d.ts +50 -0
  284. package/lib/components/reporting/generated-report-list/generated-report-list.component.d.ts +93 -0
  285. package/lib/components/reporting/report-definition-form/report-definition-form.component.d.ts +65 -0
  286. package/lib/components/reporting/report-definition-list/report-definition-list.component.d.ts +90 -0
  287. package/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.d.ts +46 -0
  288. package/lib/components/reporting/report-stats/report-stats.component.d.ts +47 -0
  289. package/lib/components/reporting/report-template-list/report-template-list.component.d.ts +39 -0
  290. package/lib/components/reporting/reporting.module.d.ts +14 -0
  291. package/lib/components/video-call/incoming-call/incoming-call.component.d.ts +20 -0
  292. package/lib/components/video-call/services/livekit-room.service.d.ts +28 -0
  293. package/lib/components/video-call/services/video-call-signaling.service.d.ts +21 -0
  294. package/lib/components/video-call/services/video-call-state.service.d.ts +25 -0
  295. package/lib/components/video-call/types/video-call.types.d.ts +49 -0
  296. package/lib/components/video-call/video-call.module.d.ts +11 -0
  297. package/lib/components/video-call/video-controls/video-controls.component.d.ts +13 -0
  298. package/lib/components/video-call/video-participant/video-participant.component.d.ts +17 -0
  299. package/lib/components/video-call/video-room/video-room.component.d.ts +30 -0
  300. package/lib/core/auth-interceptor.d.ts +13 -0
  301. package/lib/core/client-interceptor.d.ts +14 -0
  302. package/lib/core/error-handler.d.ts +13 -0
  303. package/lib/core/http-client.service.d.ts +61 -0
  304. package/lib/core/websocket.service.d.ts +37 -0
  305. package/lib/models/admin/audit.models.d.ts +73 -0
  306. package/lib/models/admin/backup.models.d.ts +101 -0
  307. package/lib/models/admin/client.models.d.ts +99 -0
  308. package/lib/models/admin/email-provider.models.d.ts +56 -0
  309. package/lib/models/admin/erp.models.d.ts +188 -0
  310. package/lib/models/admin/identity-provider.models.d.ts +1 -0
  311. package/lib/models/admin/index.d.ts +13 -0
  312. package/lib/models/admin/messaging-provider.models.d.ts +49 -0
  313. package/lib/models/admin/platform-admin.models.d.ts +33 -0
  314. package/lib/models/admin/queue.models.d.ts +54 -0
  315. package/lib/models/admin/role.models.d.ts +50 -0
  316. package/lib/models/admin/sandbox.models.d.ts +54 -0
  317. package/lib/models/admin/ticket.models.d.ts +48 -0
  318. package/lib/models/admin/webhook.models.d.ts +65 -0
  319. package/lib/models/api/ai.models.d.ts +75 -0
  320. package/lib/models/api/aip.models.d.ts +545 -0
  321. package/lib/models/api/cat.models.d.ts +260 -0
  322. package/lib/models/api/company.models.d.ts +125 -0
  323. package/lib/models/api/compliance.models.d.ts +74 -0
  324. package/lib/models/api/component.models.d.ts +294 -0
  325. package/lib/models/api/cortex-edge.models.d.ts +14 -0
  326. package/lib/models/api/cortex-event.models.d.ts +12 -0
  327. package/lib/models/api/cortex-insight.models.d.ts +25 -0
  328. package/lib/models/api/cortex-node.models.d.ts +10 -0
  329. package/lib/models/api/custom-field.models.d.ts +37 -0
  330. package/lib/models/api/deferral.models.d.ts +81 -0
  331. package/lib/models/api/diagnostic-report.models.d.ts +29 -0
  332. package/lib/models/api/document.models.d.ts +95 -0
  333. package/lib/models/api/energy.models.d.ts +210 -0
  334. package/lib/models/api/failure.models.d.ts +171 -0
  335. package/lib/models/api/fleet.models.d.ts +193 -0
  336. package/lib/models/api/inspection.models.d.ts +110 -0
  337. package/lib/models/api/intervention.models.d.ts +254 -0
  338. package/lib/models/api/iot.models.d.ts +15 -0
  339. package/lib/models/api/knowledge.models.d.ts +340 -0
  340. package/lib/models/api/loto.models.d.ts +51 -0
  341. package/lib/models/api/maintenance-record.models.d.ts +100 -0
  342. package/lib/models/api/maintenance.models.d.ts +188 -0
  343. package/lib/models/api/material.models.d.ts +261 -0
  344. package/lib/models/api/media.models.d.ts +106 -0
  345. package/lib/models/api/misc.models.d.ts +929 -0
  346. package/lib/models/api/project.models.d.ts +118 -0
  347. package/lib/models/api/quality.models.d.ts +153 -0
  348. package/lib/models/api/reporting.models.d.ts +76 -0
  349. package/lib/models/api/reservoir-websocket.models.d.ts +48 -0
  350. package/lib/models/api/reservoir.models.d.ts +274 -0
  351. package/lib/models/api/search.models.d.ts +30 -0
  352. package/lib/models/api/sensor.models.d.ts +117 -0
  353. package/lib/models/api/unit.models.d.ts +82 -0
  354. package/lib/models/api/user.models.d.ts +253 -0
  355. package/lib/models/api/warranty.models.d.ts +51 -0
  356. package/lib/models/api/work-permit.models.d.ts +70 -0
  357. package/lib/models/api/workflow.models.d.ts +52 -0
  358. package/lib/models/auth/index.d.ts +3 -0
  359. package/lib/models/auth/login.models.d.ts +134 -0
  360. package/lib/models/auth/sso.models.d.ts +136 -0
  361. package/lib/models/auth/totp.models.d.ts +19 -0
  362. package/lib/models/base.models.d.ts +90 -0
  363. package/lib/models/chat/chat.models.d.ts +171 -0
  364. package/lib/models/enums/cat.enums.d.ts +114 -0
  365. package/lib/models/enums/energy.enums.d.ts +50 -0
  366. package/lib/models/enums/erp.enums.d.ts +49 -0
  367. package/lib/models/enums/index.d.ts +14 -0
  368. package/lib/models/enums/inspection.enums.d.ts +61 -0
  369. package/lib/models/enums/loto.enums.d.ts +41 -0
  370. package/lib/models/enums/misc.enums.d.ts +151 -0
  371. package/lib/models/enums/quality.enums.d.ts +25 -0
  372. package/lib/models/enums/reservoir.enums.d.ts +80 -0
  373. package/lib/models/enums/sso.enums.d.ts +15 -0
  374. package/lib/models/enums/status.enums.d.ts +296 -0
  375. package/lib/models/enums/time.enums.d.ts +51 -0
  376. package/lib/models/enums/type.enums.d.ts +324 -0
  377. package/lib/models/enums/user.enums.d.ts +31 -0
  378. package/lib/models/enums/work-permit.enums.d.ts +56 -0
  379. package/lib/models/index.d.ts +41 -0
  380. package/lib/models/realtime/realtime-event.models.d.ts +95 -0
  381. package/lib/models/video/video-call.models.d.ts +65 -0
  382. package/lib/services/admin/activity-log.service.d.ts +13 -0
  383. package/lib/services/admin/announcement.service.d.ts +17 -0
  384. package/lib/services/admin/article-admin.service.d.ts +17 -0
  385. package/lib/services/admin/audit-log.service.d.ts +22 -0
  386. package/lib/services/admin/backup.service.d.ts +15 -0
  387. package/lib/services/admin/cache-admin.service.d.ts +26 -0
  388. package/lib/services/admin/client-admin.service.d.ts +38 -0
  389. package/lib/services/admin/client-api-key.service.d.ts +15 -0
  390. package/lib/services/admin/client-ocr.service.d.ts +14 -0
  391. package/lib/services/admin/client-usage.service.d.ts +15 -0
  392. package/lib/services/admin/data-export.service.d.ts +10 -0
  393. package/lib/services/admin/document-admin.service.d.ts +18 -0
  394. package/lib/services/admin/email-admin.service.d.ts +14 -0
  395. package/lib/services/admin/email-provider.service.d.ts +25 -0
  396. package/lib/services/admin/erp-admin.service.d.ts +41 -0
  397. package/lib/services/admin/identity-provider.service.d.ts +21 -0
  398. package/lib/services/admin/impersonation.service.d.ts +11 -0
  399. package/lib/services/admin/index.d.ts +30 -0
  400. package/lib/services/admin/messaging-provider.service.d.ts +24 -0
  401. package/lib/services/admin/notification.service.d.ts +15 -0
  402. package/lib/services/admin/platform-admin.service.d.ts +17 -0
  403. package/lib/services/admin/platform-webhook.service.d.ts +16 -0
  404. package/lib/services/admin/queue-admin.service.d.ts +24 -0
  405. package/lib/services/admin/role-admin.service.d.ts +37 -0
  406. package/lib/services/admin/sandbox-admin.service.d.ts +17 -0
  407. package/lib/services/admin/scheduler-admin.service.d.ts +61 -0
  408. package/lib/services/admin/subscription.service.d.ts +15 -0
  409. package/lib/services/admin/system-health.service.d.ts +11 -0
  410. package/lib/services/admin/user-admin.service.d.ts +27 -0
  411. package/lib/services/admin/user-permission.service.d.ts +18 -0
  412. package/lib/services/admin/webhook-admin.service.d.ts +26 -0
  413. package/lib/services/api/agent.service.d.ts +16 -0
  414. package/lib/services/api/ai-feedback.service.d.ts +9 -0
  415. package/lib/services/api/ai.service.d.ts +36 -0
  416. package/lib/services/api/aip-analysis.service.d.ts +13 -0
  417. package/lib/services/api/aip-financial.service.d.ts +16 -0
  418. package/lib/services/api/aip-geographic.service.d.ts +16 -0
  419. package/lib/services/api/aip-network.service.d.ts +16 -0
  420. package/lib/services/api/aip-performance.service.d.ts +16 -0
  421. package/lib/services/api/aip-resource.service.d.ts +14 -0
  422. package/lib/services/api/aip-workflow.service.d.ts +24 -0
  423. package/lib/services/api/aip.service.d.ts +73 -0
  424. package/lib/services/api/alert.service.d.ts +15 -0
  425. package/lib/services/api/anomaly-detection.service.d.ts +26 -0
  426. package/lib/services/api/asset-lifecycle.service.d.ts +29 -0
  427. package/lib/services/api/audit-entry.service.d.ts +13 -0
  428. package/lib/services/api/base-crud.service.d.ts +18 -0
  429. package/lib/services/api/bid.service.d.ts +10 -0
  430. package/lib/services/api/budget.service.d.ts +10 -0
  431. package/lib/services/api/bulk-operation.service.d.ts +26 -0
  432. package/lib/services/api/capex-project.service.d.ts +10 -0
  433. package/lib/services/api/cat.service.d.ts +40 -0
  434. package/lib/services/api/client-article.service.d.ts +14 -0
  435. package/lib/services/api/community.service.d.ts +21 -0
  436. package/lib/services/api/company-material-type.service.d.ts +10 -0
  437. package/lib/services/api/company-material.service.d.ts +9 -0
  438. package/lib/services/api/company.service.d.ts +15 -0
  439. package/lib/services/api/compliance.service.d.ts +35 -0
  440. package/lib/services/api/component-info.service.d.ts +10 -0
  441. package/lib/services/api/component-location.service.d.ts +10 -0
  442. package/lib/services/api/component.service.d.ts +32 -0
  443. package/lib/services/api/cortex-event.service.d.ts +10 -0
  444. package/lib/services/api/cortex-insight.service.d.ts +14 -0
  445. package/lib/services/api/cortex-node.service.d.ts +10 -0
  446. package/lib/services/api/cortex.service.d.ts +15 -0
  447. package/lib/services/api/custom-field.service.d.ts +33 -0
  448. package/lib/services/api/custom.service.d.ts +23 -0
  449. package/lib/services/api/dashboard.service.d.ts +18 -0
  450. package/lib/services/api/deferral.service.d.ts +29 -0
  451. package/lib/services/api/department.service.d.ts +9 -0
  452. package/lib/services/api/device-gateway.service.d.ts +16 -0
  453. package/lib/services/api/diagnostic-report.service.d.ts +14 -0
  454. package/lib/services/api/digital-twin.service.d.ts +29 -0
  455. package/lib/services/api/document.service.d.ts +28 -0
  456. package/lib/services/api/dynamic-crud.service.d.ts +41 -0
  457. package/lib/services/api/energy-analytics.service.d.ts +16 -0
  458. package/lib/services/api/energy-production.service.d.ts +10 -0
  459. package/lib/services/api/energy.service.d.ts +46 -0
  460. package/lib/services/api/entity-comment.service.d.ts +16 -0
  461. package/lib/services/api/event.service.d.ts +10 -0
  462. package/lib/services/api/export.service.d.ts +48 -0
  463. package/lib/services/api/extension.service.d.ts +24 -0
  464. package/lib/services/api/failure.service.d.ts +28 -0
  465. package/lib/services/api/fleet.service.d.ts +71 -0
  466. package/lib/services/api/inactive-component.service.d.ts +10 -0
  467. package/lib/services/api/index.d.ts +101 -0
  468. package/lib/services/api/inspection.service.d.ts +16 -0
  469. package/lib/services/api/intervention-request.service.d.ts +10 -0
  470. package/lib/services/api/intervention.service.d.ts +10 -0
  471. package/lib/services/api/knowledge.service.d.ts +106 -0
  472. package/lib/services/api/license.service.d.ts +14 -0
  473. package/lib/services/api/location.service.d.ts +9 -0
  474. package/lib/services/api/log.service.d.ts +9 -0
  475. package/lib/services/api/login-history.service.d.ts +10 -0
  476. package/lib/services/api/maintenance-plan.service.d.ts +10 -0
  477. package/lib/services/api/maintenance-record.service.d.ts +10 -0
  478. package/lib/services/api/material-consumable.service.d.ts +22 -0
  479. package/lib/services/api/material-instrument.service.d.ts +16 -0
  480. package/lib/services/api/material-item.service.d.ts +28 -0
  481. package/lib/services/api/material-tooling.service.d.ts +22 -0
  482. package/lib/services/api/measurement-unit.service.d.ts +10 -0
  483. package/lib/services/api/misc-crud.service.d.ts +167 -0
  484. package/lib/services/api/note.service.d.ts +14 -0
  485. package/lib/services/api/outage-resource.service.d.ts +15 -0
  486. package/lib/services/api/plant-data.service.d.ts +14 -0
  487. package/lib/services/api/procurement.service.d.ts +27 -0
  488. package/lib/services/api/project.service.d.ts +10 -0
  489. package/lib/services/api/property-template.service.d.ts +10 -0
  490. package/lib/services/api/quality.service.d.ts +16 -0
  491. package/lib/services/api/recurring-event.service.d.ts +10 -0
  492. package/lib/services/api/reporting.service.d.ts +38 -0
  493. package/lib/services/api/reservoir-data.service.d.ts +10 -0
  494. package/lib/services/api/reservoir.service.d.ts +109 -0
  495. package/lib/services/api/room.service.d.ts +10 -0
  496. package/lib/services/api/sandbox.service.d.ts +26 -0
  497. package/lib/services/api/scheduled-report.service.d.ts +10 -0
  498. package/lib/services/api/search.service.d.ts +54 -0
  499. package/lib/services/api/sensor.service.d.ts +17 -0
  500. package/lib/services/api/sla-policy.service.d.ts +10 -0
  501. package/lib/services/api/sla.service.d.ts +10 -0
  502. package/lib/services/api/threshold-alert-rule.service.d.ts +10 -0
  503. package/lib/services/api/ticket.service.d.ts +60 -0
  504. package/lib/services/api/time-entry.service.d.ts +10 -0
  505. package/lib/services/api/todo.service.d.ts +10 -0
  506. package/lib/services/api/unit.service.d.ts +10 -0
  507. package/lib/services/api/upload.service.d.ts +50 -0
  508. package/lib/services/api/user.service.d.ts +59 -0
  509. package/lib/services/api/warehouse.service.d.ts +15 -0
  510. package/lib/services/api/warranty.service.d.ts +16 -0
  511. package/lib/services/api/work-order.service.d.ts +17 -0
  512. package/lib/services/api/work-permit.service.d.ts +10 -0
  513. package/lib/services/api/workflow.service.d.ts +33 -0
  514. package/lib/services/auth/auth.service.d.ts +33 -0
  515. package/lib/services/auth/index.d.ts +4 -0
  516. package/lib/services/auth/platform-auth.service.d.ts +16 -0
  517. package/lib/services/auth/sso-auth.service.d.ts +21 -0
  518. package/lib/services/auth/totp.service.d.ts +18 -0
  519. package/lib/services/chat/chat-rest.service.d.ts +40 -0
  520. package/lib/services/chat/chat-websocket.service.d.ts +34 -0
  521. package/lib/services/chat/index.d.ts +2 -0
  522. package/lib/services/index.d.ts +7 -0
  523. package/lib/services/realtime/index.d.ts +1 -0
  524. package/lib/services/realtime/realtime-event.service.d.ts +137 -0
  525. package/lib/services/reservoir/index.d.ts +1 -0
  526. package/lib/services/reservoir/reservoir-websocket.service.d.ts +47 -0
  527. package/lib/services/video/index.d.ts +2 -0
  528. package/lib/services/video/video-call-rest.service.d.ts +19 -0
  529. package/lib/services/video/video-call-websocket.service.d.ts +31 -0
  530. package/lib/tgm-sdk.config.d.ts +36 -0
  531. package/lib/tgm-sdk.module.d.ts +13 -0
  532. package/package.json +40 -0
  533. package/public-api.d.ts +42 -0
@@ -0,0 +1,285 @@
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../services/api/reporting.service";
5
+ import * as i2 from "@angular/common";
6
+ export class GeneratedReportListComponent {
7
+ reportingService;
8
+ // ── Data ──
9
+ reports;
10
+ loading = false;
11
+ autoFetch = true;
12
+ pageSize = 10;
13
+ showDownload = true;
14
+ showDelete = true;
15
+ showPagination = true;
16
+ // ── Visible columns ──
17
+ showName = true;
18
+ showType = true;
19
+ showFormat = true;
20
+ showStatus = true;
21
+ showRecordCount = true;
22
+ showFileSize = true;
23
+ showCreatedAt = true;
24
+ // ── Labels ──
25
+ emptyMessage = 'No generated reports found.';
26
+ title = '';
27
+ nameHeader = 'Report';
28
+ typeHeader = 'Type';
29
+ formatHeader = 'Format';
30
+ statusHeader = 'Status';
31
+ recordCountHeader = 'Records';
32
+ fileSizeHeader = 'Size';
33
+ createdAtHeader = 'Created';
34
+ actionsHeader = 'Actions';
35
+ downloadLabel = 'Download';
36
+ deleteLabel = 'Delete';
37
+ viewLabel = 'View';
38
+ previousLabel = 'Previous';
39
+ nextLabel = 'Next';
40
+ // ── Status labels (customizable per status) ──
41
+ statusLabels = {};
42
+ // ── CSS overrides ──
43
+ containerClass = '';
44
+ tableClass = '';
45
+ // ── Custom status CSS classes ──
46
+ statusClasses = {};
47
+ // ── Custom templates ──
48
+ rowTemplate;
49
+ emptyTemplate;
50
+ loadingTemplate;
51
+ headerTemplate;
52
+ actionsTemplate;
53
+ statusTemplate;
54
+ paginationTemplate;
55
+ // ── Events ──
56
+ download = new EventEmitter();
57
+ delete = new EventEmitter();
58
+ view = new EventEmitter();
59
+ pageChange = new EventEmitter();
60
+ reportsFetched = new EventEmitter();
61
+ fetchError = new EventEmitter();
62
+ internalReports = [];
63
+ internalLoading = false;
64
+ currentPage = 0;
65
+ totalItems = 0;
66
+ constructor(reportingService) {
67
+ this.reportingService = reportingService;
68
+ }
69
+ ngOnInit() {
70
+ if (!this.reports && this.autoFetch) {
71
+ this.fetchReports();
72
+ }
73
+ }
74
+ get displayReports() {
75
+ return this.reports ?? this.internalReports;
76
+ }
77
+ get isLoading() {
78
+ return this.loading || this.internalLoading;
79
+ }
80
+ get totalPages() {
81
+ const total = this.totalItems || this.displayReports.length;
82
+ return Math.ceil(total / this.pageSize) || 1;
83
+ }
84
+ get hasPrev() {
85
+ return this.currentPage > 0;
86
+ }
87
+ get hasNext() {
88
+ return this.currentPage < this.totalPages - 1;
89
+ }
90
+ onDownload(report) {
91
+ this.download.emit(report);
92
+ }
93
+ onDelete(report) {
94
+ this.delete.emit(report);
95
+ }
96
+ onView(report) {
97
+ this.view.emit(report);
98
+ }
99
+ onPrevPage() {
100
+ if (this.hasPrev) {
101
+ this.currentPage--;
102
+ this.pageChange.emit({ page: this.currentPage, size: this.pageSize });
103
+ if (!this.reports && this.autoFetch) {
104
+ this.fetchReports();
105
+ }
106
+ }
107
+ }
108
+ onNextPage() {
109
+ if (this.hasNext) {
110
+ this.currentPage++;
111
+ this.pageChange.emit({ page: this.currentPage, size: this.pageSize });
112
+ if (!this.reports && this.autoFetch) {
113
+ this.fetchReports();
114
+ }
115
+ }
116
+ }
117
+ goToPage = (page) => {
118
+ this.currentPage = page;
119
+ this.pageChange.emit({ page: this.currentPage, size: this.pageSize });
120
+ if (!this.reports && this.autoFetch) {
121
+ this.fetchReports();
122
+ }
123
+ };
124
+ trackById(_index, report) {
125
+ return report.id;
126
+ }
127
+ getStatusLabel(status) {
128
+ return this.statusLabels[status] ?? status;
129
+ }
130
+ getStatusClass(status) {
131
+ if (this.statusClasses[status])
132
+ return this.statusClasses[status];
133
+ switch (status) {
134
+ case 'PENDING':
135
+ return 'tgm-status--pending';
136
+ case 'IN_PROGRESS':
137
+ return 'tgm-status--progress';
138
+ case 'COMPLETED':
139
+ return 'tgm-status--completed';
140
+ case 'FAILED':
141
+ return 'tgm-status--failed';
142
+ default:
143
+ return '';
144
+ }
145
+ }
146
+ formatDate(dateStr) {
147
+ if (!dateStr)
148
+ return '—';
149
+ try {
150
+ return new Date(dateStr).toLocaleDateString(undefined, {
151
+ year: 'numeric',
152
+ month: 'short',
153
+ day: 'numeric',
154
+ hour: '2-digit',
155
+ minute: '2-digit',
156
+ });
157
+ }
158
+ catch {
159
+ return dateStr;
160
+ }
161
+ }
162
+ formatFileSize(bytes) {
163
+ if (!bytes)
164
+ return '—';
165
+ if (bytes < 1024)
166
+ return `${bytes} B`;
167
+ if (bytes < 1024 * 1024)
168
+ return `${(bytes / 1024).toFixed(1)} KB`;
169
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
170
+ }
171
+ fetchReports() {
172
+ this.internalLoading = true;
173
+ this.reportingService.listGeneratedReports(this.currentPage, this.pageSize).subscribe({
174
+ next: (res) => {
175
+ this.internalReports = res.data ?? [];
176
+ this.totalItems = res.total ?? this.internalReports.length;
177
+ this.internalLoading = false;
178
+ this.reportsFetched.emit(this.internalReports);
179
+ },
180
+ error: (err) => {
181
+ this.internalLoading = false;
182
+ this.fetchError.emit(err);
183
+ },
184
+ });
185
+ }
186
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeneratedReportListComponent, deps: [{ token: i1.ReportingService }], target: i0.ɵɵFactoryTarget.Component });
187
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GeneratedReportListComponent, isStandalone: true, selector: "tgm-generated-report-list", inputs: { reports: "reports", loading: "loading", autoFetch: "autoFetch", pageSize: "pageSize", showDownload: "showDownload", showDelete: "showDelete", showPagination: "showPagination", showName: "showName", showType: "showType", showFormat: "showFormat", showStatus: "showStatus", showRecordCount: "showRecordCount", showFileSize: "showFileSize", showCreatedAt: "showCreatedAt", emptyMessage: "emptyMessage", title: "title", nameHeader: "nameHeader", typeHeader: "typeHeader", formatHeader: "formatHeader", statusHeader: "statusHeader", recordCountHeader: "recordCountHeader", fileSizeHeader: "fileSizeHeader", createdAtHeader: "createdAtHeader", actionsHeader: "actionsHeader", downloadLabel: "downloadLabel", deleteLabel: "deleteLabel", viewLabel: "viewLabel", previousLabel: "previousLabel", nextLabel: "nextLabel", statusLabels: "statusLabels", containerClass: "containerClass", tableClass: "tableClass", statusClasses: "statusClasses", rowTemplate: "rowTemplate", emptyTemplate: "emptyTemplate", loadingTemplate: "loadingTemplate", headerTemplate: "headerTemplate", actionsTemplate: "actionsTemplate", statusTemplate: "statusTemplate", paginationTemplate: "paginationTemplate" }, outputs: { download: "download", delete: "delete", view: "view", pageChange: "pageChange", reportsFetched: "reportsFetched", fetchError: "fetchError" }, ngImport: i0, template: "<div class=\"tgm-report-list\" [ngClass]=\"containerClass\">\n <!-- Header -->\n <ng-container *ngIf=\"headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <h3 class=\"tgm-report-list__title\" *ngIf=\"title\">{{ title }}</h3>\n </ng-template>\n\n <!-- Loading -->\n <ng-container *ngIf=\"isLoading\">\n <ng-container *ngIf=\"loadingTemplate; else defaultLoading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultLoading>\n <div class=\"tgm-report-list__loading\">\n <div class=\"tgm-spinner\"></div>\n <p>Loading reports...</p>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Empty -->\n <ng-container *ngIf=\"!isLoading && displayReports.length === 0\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultEmpty>\n <div class=\"tgm-report-list__empty\">\n <p>{{ emptyMessage }}</p>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Table -->\n <div class=\"tgm-table-wrapper\" *ngIf=\"!isLoading && displayReports.length > 0\">\n <table class=\"tgm-table\" [ngClass]=\"tableClass\">\n <thead>\n <tr>\n <th *ngIf=\"showName\">{{ nameHeader }}</th>\n <th *ngIf=\"showType\">{{ typeHeader }}</th>\n <th *ngIf=\"showFormat\">{{ formatHeader }}</th>\n <th *ngIf=\"showStatus\">{{ statusHeader }}</th>\n <th *ngIf=\"showRecordCount\">{{ recordCountHeader }}</th>\n <th *ngIf=\"showFileSize\">{{ fileSizeHeader }}</th>\n <th *ngIf=\"showCreatedAt\">{{ createdAtHeader }}</th>\n <th *ngIf=\"showDownload || showDelete\">{{ actionsHeader }}</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let report of displayReports; let i = index; trackBy: trackById\">\n <!-- Custom row template -->\n <ng-container *ngIf=\"rowTemplate; else defaultRow\">\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: report, index: i }\"></ng-container>\n </ng-container>\n\n <!-- Default row -->\n <ng-template #defaultRow>\n <tr>\n <td *ngIf=\"showName\">\n <span class=\"tgm-report-name\" (click)=\"onView(report)\">{{ report.reportName }}</span>\n </td>\n <td *ngIf=\"showType\">\n <span class=\"tgm-badge tgm-badge--type\">{{ report.reportType }}</span>\n </td>\n <td *ngIf=\"showFormat\">{{ report.reportFormat }}</td>\n <td *ngIf=\"showStatus\">\n <!-- Custom status template -->\n <ng-container *ngIf=\"statusTemplate; else defaultStatus\">\n <ng-container *ngTemplateOutlet=\"statusTemplate; context: { $implicit: report }\"></ng-container>\n </ng-container>\n <ng-template #defaultStatus>\n <span class=\"tgm-status\" [ngClass]=\"getStatusClass(report.status)\">\n {{ getStatusLabel(report.status) }}\n </span>\n </ng-template>\n </td>\n <td *ngIf=\"showRecordCount\">{{ report.recordCount }}</td>\n <td *ngIf=\"showFileSize\">{{ formatFileSize(report.fileSizeBytes) }}</td>\n <td *ngIf=\"showCreatedAt\">{{ formatDate(report.createdAt) }}</td>\n <td *ngIf=\"showDownload || showDelete\">\n <!-- Custom actions -->\n <ng-container *ngIf=\"actionsTemplate; else defaultActions\">\n <ng-container *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: report }\"></ng-container>\n </ng-container>\n <ng-template #defaultActions>\n <div class=\"tgm-actions\">\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--ghost\" (click)=\"onView(report)\">{{ viewLabel }}</button>\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--primary\"\n *ngIf=\"showDownload && report.status === 'COMPLETED'\"\n (click)=\"onDownload(report)\">\n {{ downloadLabel }}\n </button>\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--danger\"\n *ngIf=\"showDelete\"\n (click)=\"onDelete(report)\">\n {{ deleteLabel }}\n </button>\n </div>\n </ng-template>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </tbody>\n </table>\n\n <!-- Pagination -->\n <ng-container *ngIf=\"showPagination && totalPages > 1\">\n <ng-container *ngIf=\"paginationTemplate; else defaultPagination\">\n <ng-container *ngTemplateOutlet=\"paginationTemplate; context: {\n page: currentPage,\n pageSize: pageSize,\n total: totalItems,\n onPageChange: goToPage\n }\"></ng-container>\n </ng-container>\n <ng-template #defaultPagination>\n <div class=\"tgm-pagination\">\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--ghost\" [disabled]=\"!hasPrev\" (click)=\"onPrevPage()\">\n {{ previousLabel }}\n </button>\n <span class=\"tgm-pagination__info\">{{ currentPage + 1 }} / {{ totalPages }}</span>\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--ghost\" [disabled]=\"!hasNext\" (click)=\"onNextPage()\">\n {{ nextLabel }}\n </button>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: [":host{--tgm-report-bg: rgba(255, 255, 255, .05);--tgm-report-bg-hover: rgba(255, 255, 255, .08);--tgm-report-border: rgba(255, 255, 255, .1);--tgm-report-text: #e5e7eb;--tgm-report-text-secondary: #9ca3af;--tgm-report-text-muted: #6b7280;--tgm-report-primary: #3b82f6;--tgm-report-primary-hover: #2563eb;--tgm-report-success: #22c55e;--tgm-report-warning: #eab308;--tgm-report-danger: #ef4444;--tgm-report-danger-hover: #dc2626;--tgm-report-info: #3b82f6;--tgm-report-radius: 8px;--tgm-report-radius-sm: 4px;--tgm-report-font-family: inherit;--tgm-report-font-size: 14px;--tgm-report-spacing: 16px;--tgm-report-spacing-sm: 8px;display:block;font-family:var(--tgm-report-font-family);font-size:var(--tgm-report-font-size);color:var(--tgm-report-text)}.tgm-report-list__title{margin:0 0 var(--tgm-report-spacing);font-size:18px;font-weight:600}.tgm-report-list__loading,.tgm-report-list__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 0;color:var(--tgm-report-text-muted)}.tgm-report-list__loading p,.tgm-report-list__empty p{margin:12px 0 0}.tgm-table-wrapper{overflow-x:auto}.tgm-table{width:100%;border-collapse:collapse}.tgm-table th,.tgm-table td{padding:10px 12px;text-align:left;white-space:nowrap}.tgm-table th{font-size:12px;font-weight:600;color:var(--tgm-report-text-muted);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--tgm-report-border)}.tgm-table td{font-size:13px;border-bottom:1px solid var(--tgm-report-border)}.tgm-table tbody tr{transition:background .1s}.tgm-table tbody tr:hover{background:var(--tgm-report-bg-hover)}.tgm-report-name{font-weight:500;color:var(--tgm-report-primary);cursor:pointer}.tgm-report-name:hover{text-decoration:underline}.tgm-badge{display:inline-flex;align-items:center;padding:2px 8px;font-size:11px;font-weight:500;border-radius:var(--tgm-report-radius-sm)}.tgm-badge--type{background:#3b82f626;color:var(--tgm-report-primary)}.tgm-status{display:inline-flex;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;border-radius:var(--tgm-report-radius-sm);text-transform:uppercase;letter-spacing:.03em}.tgm-status--pending{background:#eab30826;color:var(--tgm-report-warning)}.tgm-status--progress{background:#3b82f626;color:var(--tgm-report-info)}.tgm-status--completed{background:#22c55e26;color:var(--tgm-report-success)}.tgm-status--failed{background:#ef444426;color:var(--tgm-report-danger)}.tgm-actions{display:flex;gap:4px}.tgm-pagination{display:flex;align-items:center;justify-content:center;gap:var(--tgm-report-spacing-sm);padding:var(--tgm-report-spacing) 0}.tgm-pagination__info{font-size:13px;color:var(--tgm-report-text-secondary)}.tgm-btn{display:inline-flex;align-items:center;justify-content:center;padding:6px 16px;font-size:13px;font-weight:500;border:none;border-radius:var(--tgm-report-radius-sm);cursor:pointer;transition:background .15s,opacity .15s;font-family:var(--tgm-report-font-family)}.tgm-btn--sm{padding:4px 10px;font-size:12px}.tgm-btn--primary{background:var(--tgm-report-primary);color:#fff}.tgm-btn--primary:hover:not(:disabled){background:var(--tgm-report-primary-hover)}.tgm-btn--danger{background:var(--tgm-report-danger);color:#fff}.tgm-btn--danger:hover:not(:disabled){background:var(--tgm-report-danger-hover)}.tgm-btn--ghost{background:transparent;color:var(--tgm-report-text-secondary)}.tgm-btn--ghost:hover:not(:disabled){background:var(--tgm-report-bg-hover);color:var(--tgm-report-text)}.tgm-btn:disabled{opacity:.4;cursor:not-allowed}.tgm-spinner{width:32px;height:32px;border:3px solid var(--tgm-report-border);border-top-color:var(--tgm-report-primary);border-radius:50%;animation:tgm-spin .8s linear infinite}@keyframes tgm-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
188
+ }
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GeneratedReportListComponent, decorators: [{
190
+ type: Component,
191
+ args: [{ selector: 'tgm-generated-report-list', standalone: true, imports: [CommonModule], template: "<div class=\"tgm-report-list\" [ngClass]=\"containerClass\">\n <!-- Header -->\n <ng-container *ngIf=\"headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <h3 class=\"tgm-report-list__title\" *ngIf=\"title\">{{ title }}</h3>\n </ng-template>\n\n <!-- Loading -->\n <ng-container *ngIf=\"isLoading\">\n <ng-container *ngIf=\"loadingTemplate; else defaultLoading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultLoading>\n <div class=\"tgm-report-list__loading\">\n <div class=\"tgm-spinner\"></div>\n <p>Loading reports...</p>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Empty -->\n <ng-container *ngIf=\"!isLoading && displayReports.length === 0\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultEmpty>\n <div class=\"tgm-report-list__empty\">\n <p>{{ emptyMessage }}</p>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Table -->\n <div class=\"tgm-table-wrapper\" *ngIf=\"!isLoading && displayReports.length > 0\">\n <table class=\"tgm-table\" [ngClass]=\"tableClass\">\n <thead>\n <tr>\n <th *ngIf=\"showName\">{{ nameHeader }}</th>\n <th *ngIf=\"showType\">{{ typeHeader }}</th>\n <th *ngIf=\"showFormat\">{{ formatHeader }}</th>\n <th *ngIf=\"showStatus\">{{ statusHeader }}</th>\n <th *ngIf=\"showRecordCount\">{{ recordCountHeader }}</th>\n <th *ngIf=\"showFileSize\">{{ fileSizeHeader }}</th>\n <th *ngIf=\"showCreatedAt\">{{ createdAtHeader }}</th>\n <th *ngIf=\"showDownload || showDelete\">{{ actionsHeader }}</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let report of displayReports; let i = index; trackBy: trackById\">\n <!-- Custom row template -->\n <ng-container *ngIf=\"rowTemplate; else defaultRow\">\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: report, index: i }\"></ng-container>\n </ng-container>\n\n <!-- Default row -->\n <ng-template #defaultRow>\n <tr>\n <td *ngIf=\"showName\">\n <span class=\"tgm-report-name\" (click)=\"onView(report)\">{{ report.reportName }}</span>\n </td>\n <td *ngIf=\"showType\">\n <span class=\"tgm-badge tgm-badge--type\">{{ report.reportType }}</span>\n </td>\n <td *ngIf=\"showFormat\">{{ report.reportFormat }}</td>\n <td *ngIf=\"showStatus\">\n <!-- Custom status template -->\n <ng-container *ngIf=\"statusTemplate; else defaultStatus\">\n <ng-container *ngTemplateOutlet=\"statusTemplate; context: { $implicit: report }\"></ng-container>\n </ng-container>\n <ng-template #defaultStatus>\n <span class=\"tgm-status\" [ngClass]=\"getStatusClass(report.status)\">\n {{ getStatusLabel(report.status) }}\n </span>\n </ng-template>\n </td>\n <td *ngIf=\"showRecordCount\">{{ report.recordCount }}</td>\n <td *ngIf=\"showFileSize\">{{ formatFileSize(report.fileSizeBytes) }}</td>\n <td *ngIf=\"showCreatedAt\">{{ formatDate(report.createdAt) }}</td>\n <td *ngIf=\"showDownload || showDelete\">\n <!-- Custom actions -->\n <ng-container *ngIf=\"actionsTemplate; else defaultActions\">\n <ng-container *ngTemplateOutlet=\"actionsTemplate; context: { $implicit: report }\"></ng-container>\n </ng-container>\n <ng-template #defaultActions>\n <div class=\"tgm-actions\">\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--ghost\" (click)=\"onView(report)\">{{ viewLabel }}</button>\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--primary\"\n *ngIf=\"showDownload && report.status === 'COMPLETED'\"\n (click)=\"onDownload(report)\">\n {{ downloadLabel }}\n </button>\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--danger\"\n *ngIf=\"showDelete\"\n (click)=\"onDelete(report)\">\n {{ deleteLabel }}\n </button>\n </div>\n </ng-template>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </tbody>\n </table>\n\n <!-- Pagination -->\n <ng-container *ngIf=\"showPagination && totalPages > 1\">\n <ng-container *ngIf=\"paginationTemplate; else defaultPagination\">\n <ng-container *ngTemplateOutlet=\"paginationTemplate; context: {\n page: currentPage,\n pageSize: pageSize,\n total: totalItems,\n onPageChange: goToPage\n }\"></ng-container>\n </ng-container>\n <ng-template #defaultPagination>\n <div class=\"tgm-pagination\">\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--ghost\" [disabled]=\"!hasPrev\" (click)=\"onPrevPage()\">\n {{ previousLabel }}\n </button>\n <span class=\"tgm-pagination__info\">{{ currentPage + 1 }} / {{ totalPages }}</span>\n <button class=\"tgm-btn tgm-btn--sm tgm-btn--ghost\" [disabled]=\"!hasNext\" (click)=\"onNextPage()\">\n {{ nextLabel }}\n </button>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: [":host{--tgm-report-bg: rgba(255, 255, 255, .05);--tgm-report-bg-hover: rgba(255, 255, 255, .08);--tgm-report-border: rgba(255, 255, 255, .1);--tgm-report-text: #e5e7eb;--tgm-report-text-secondary: #9ca3af;--tgm-report-text-muted: #6b7280;--tgm-report-primary: #3b82f6;--tgm-report-primary-hover: #2563eb;--tgm-report-success: #22c55e;--tgm-report-warning: #eab308;--tgm-report-danger: #ef4444;--tgm-report-danger-hover: #dc2626;--tgm-report-info: #3b82f6;--tgm-report-radius: 8px;--tgm-report-radius-sm: 4px;--tgm-report-font-family: inherit;--tgm-report-font-size: 14px;--tgm-report-spacing: 16px;--tgm-report-spacing-sm: 8px;display:block;font-family:var(--tgm-report-font-family);font-size:var(--tgm-report-font-size);color:var(--tgm-report-text)}.tgm-report-list__title{margin:0 0 var(--tgm-report-spacing);font-size:18px;font-weight:600}.tgm-report-list__loading,.tgm-report-list__empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:48px 0;color:var(--tgm-report-text-muted)}.tgm-report-list__loading p,.tgm-report-list__empty p{margin:12px 0 0}.tgm-table-wrapper{overflow-x:auto}.tgm-table{width:100%;border-collapse:collapse}.tgm-table th,.tgm-table td{padding:10px 12px;text-align:left;white-space:nowrap}.tgm-table th{font-size:12px;font-weight:600;color:var(--tgm-report-text-muted);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--tgm-report-border)}.tgm-table td{font-size:13px;border-bottom:1px solid var(--tgm-report-border)}.tgm-table tbody tr{transition:background .1s}.tgm-table tbody tr:hover{background:var(--tgm-report-bg-hover)}.tgm-report-name{font-weight:500;color:var(--tgm-report-primary);cursor:pointer}.tgm-report-name:hover{text-decoration:underline}.tgm-badge{display:inline-flex;align-items:center;padding:2px 8px;font-size:11px;font-weight:500;border-radius:var(--tgm-report-radius-sm)}.tgm-badge--type{background:#3b82f626;color:var(--tgm-report-primary)}.tgm-status{display:inline-flex;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;border-radius:var(--tgm-report-radius-sm);text-transform:uppercase;letter-spacing:.03em}.tgm-status--pending{background:#eab30826;color:var(--tgm-report-warning)}.tgm-status--progress{background:#3b82f626;color:var(--tgm-report-info)}.tgm-status--completed{background:#22c55e26;color:var(--tgm-report-success)}.tgm-status--failed{background:#ef444426;color:var(--tgm-report-danger)}.tgm-actions{display:flex;gap:4px}.tgm-pagination{display:flex;align-items:center;justify-content:center;gap:var(--tgm-report-spacing-sm);padding:var(--tgm-report-spacing) 0}.tgm-pagination__info{font-size:13px;color:var(--tgm-report-text-secondary)}.tgm-btn{display:inline-flex;align-items:center;justify-content:center;padding:6px 16px;font-size:13px;font-weight:500;border:none;border-radius:var(--tgm-report-radius-sm);cursor:pointer;transition:background .15s,opacity .15s;font-family:var(--tgm-report-font-family)}.tgm-btn--sm{padding:4px 10px;font-size:12px}.tgm-btn--primary{background:var(--tgm-report-primary);color:#fff}.tgm-btn--primary:hover:not(:disabled){background:var(--tgm-report-primary-hover)}.tgm-btn--danger{background:var(--tgm-report-danger);color:#fff}.tgm-btn--danger:hover:not(:disabled){background:var(--tgm-report-danger-hover)}.tgm-btn--ghost{background:transparent;color:var(--tgm-report-text-secondary)}.tgm-btn--ghost:hover:not(:disabled){background:var(--tgm-report-bg-hover);color:var(--tgm-report-text)}.tgm-btn:disabled{opacity:.4;cursor:not-allowed}.tgm-spinner{width:32px;height:32px;border:3px solid var(--tgm-report-border);border-top-color:var(--tgm-report-primary);border-radius:50%;animation:tgm-spin .8s linear infinite}@keyframes tgm-spin{to{transform:rotate(360deg)}}\n"] }]
192
+ }], ctorParameters: () => [{ type: i1.ReportingService }], propDecorators: { reports: [{
193
+ type: Input
194
+ }], loading: [{
195
+ type: Input
196
+ }], autoFetch: [{
197
+ type: Input
198
+ }], pageSize: [{
199
+ type: Input
200
+ }], showDownload: [{
201
+ type: Input
202
+ }], showDelete: [{
203
+ type: Input
204
+ }], showPagination: [{
205
+ type: Input
206
+ }], showName: [{
207
+ type: Input
208
+ }], showType: [{
209
+ type: Input
210
+ }], showFormat: [{
211
+ type: Input
212
+ }], showStatus: [{
213
+ type: Input
214
+ }], showRecordCount: [{
215
+ type: Input
216
+ }], showFileSize: [{
217
+ type: Input
218
+ }], showCreatedAt: [{
219
+ type: Input
220
+ }], emptyMessage: [{
221
+ type: Input
222
+ }], title: [{
223
+ type: Input
224
+ }], nameHeader: [{
225
+ type: Input
226
+ }], typeHeader: [{
227
+ type: Input
228
+ }], formatHeader: [{
229
+ type: Input
230
+ }], statusHeader: [{
231
+ type: Input
232
+ }], recordCountHeader: [{
233
+ type: Input
234
+ }], fileSizeHeader: [{
235
+ type: Input
236
+ }], createdAtHeader: [{
237
+ type: Input
238
+ }], actionsHeader: [{
239
+ type: Input
240
+ }], downloadLabel: [{
241
+ type: Input
242
+ }], deleteLabel: [{
243
+ type: Input
244
+ }], viewLabel: [{
245
+ type: Input
246
+ }], previousLabel: [{
247
+ type: Input
248
+ }], nextLabel: [{
249
+ type: Input
250
+ }], statusLabels: [{
251
+ type: Input
252
+ }], containerClass: [{
253
+ type: Input
254
+ }], tableClass: [{
255
+ type: Input
256
+ }], statusClasses: [{
257
+ type: Input
258
+ }], rowTemplate: [{
259
+ type: Input
260
+ }], emptyTemplate: [{
261
+ type: Input
262
+ }], loadingTemplate: [{
263
+ type: Input
264
+ }], headerTemplate: [{
265
+ type: Input
266
+ }], actionsTemplate: [{
267
+ type: Input
268
+ }], statusTemplate: [{
269
+ type: Input
270
+ }], paginationTemplate: [{
271
+ type: Input
272
+ }], download: [{
273
+ type: Output
274
+ }], delete: [{
275
+ type: Output
276
+ }], view: [{
277
+ type: Output
278
+ }], pageChange: [{
279
+ type: Output
280
+ }], reportsFetched: [{
281
+ type: Output
282
+ }], fetchError: [{
283
+ type: Output
284
+ }] } });
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLXJlcG9ydC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9yZXBvcnRpbmcvZ2VuZXJhdGVkLXJlcG9ydC1saXN0L2dlbmVyYXRlZC1yZXBvcnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcmVwb3J0aW5nL2dlbmVyYXRlZC1yZXBvcnQtbGlzdC9nZW5lcmF0ZWQtcmVwb3J0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFXL0MsTUFBTSxPQUFPLDRCQUE0QjtJQXlFbkI7SUF4RXBCLGFBQWE7SUFDSixPQUFPLENBQXFCO0lBQzVCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ2QsWUFBWSxHQUFHLElBQUksQ0FBQztJQUNwQixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFFL0Isd0JBQXdCO0lBQ2YsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNoQixRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ2hCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDbEIsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNsQixlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDcEIsYUFBYSxHQUFHLElBQUksQ0FBQztJQUU5QixlQUFlO0lBQ04sWUFBWSxHQUFHLDZCQUE2QixDQUFDO0lBQzdDLEtBQUssR0FBRyxF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YUFBYTtzQkFBckIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBUUksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdlbmVyYXRlZFJlcG9ydCwgUmVwb3J0U3RhdHVzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2FwaS9yZXBvcnRpbmcubW9kZWxzJztcbmltcG9ydCB7IFJlcG9ydGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcGkvcmVwb3J0aW5nLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Z20tZ2VuZXJhdGVkLXJlcG9ydC1saXN0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW5lcmF0ZWQtcmVwb3J0LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9nZW5lcmF0ZWQtcmVwb3J0LWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJhdGVkUmVwb3J0TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIOKUgOKUgCBEYXRhIOKUgOKUgFxuICBASW5wdXQoKSByZXBvcnRzPzogR2VuZXJhdGVkUmVwb3J0W107XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b0ZldGNoID0gdHJ1ZTtcbiAgQElucHV0KCkgcGFnZVNpemUgPSAxMDtcbiAgQElucHV0KCkgc2hvd0Rvd25sb2FkID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0RlbGV0ZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uID0gdHJ1ZTtcblxuICAvLyDilIDilIAgVmlzaWJsZSBjb2x1bW5zIOKUgOKUgFxuICBASW5wdXQoKSBzaG93TmFtZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dUeXBlID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0Zvcm1hdCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dTdGF0dXMgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93UmVjb3JkQ291bnQgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93RmlsZVNpemUgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q3JlYXRlZEF0ID0gdHJ1ZTtcblxuICAvLyDilIDilIAgTGFiZWxzIOKUgOKUgFxuICBASW5wdXQoKSBlbXB0eU1lc3NhZ2UgPSAnTm8gZ2VuZXJhdGVkIHJlcG9ydHMgZm91bmQuJztcbiAgQElucHV0KCkgdGl0bGUgPSAnJztcbiAgQElucHV0KCkgbmFtZUhlYWRlciA9ICdSZXBvcnQnO1xuICBASW5wdXQoKSB0eXBlSGVhZGVyID0gJ1R5cGUnO1xuICBASW5wdXQoKSBmb3JtYXRIZWFkZXIgPSAnRm9ybWF0JztcbiAgQElucHV0KCkgc3RhdHVzSGVhZGVyID0gJ1N0YXR1cyc7XG4gIEBJbnB1dCgpIHJlY29yZENvdW50SGVhZGVyID0gJ1JlY29yZHMnO1xuICBASW5wdXQoKSBmaWxlU2l6ZUhlYWRlciA9ICdTaXplJztcbiAgQElucHV0KCkgY3JlYXRlZEF0SGVhZGVyID0gJ0NyZWF0ZWQnO1xuICBASW5wdXQoKSBhY3Rpb25zSGVhZGVyID0gJ0FjdGlvbnMnO1xuICBASW5wdXQoKSBkb3dubG9hZExhYmVsID0gJ0Rvd25sb2FkJztcbiAgQElucHV0KCkgZGVsZXRlTGFiZWwgPSAnRGVsZXRlJztcbiAgQElucHV0KCkgdmlld0xhYmVsID0gJ1ZpZXcnO1xuICBASW5wdXQoKSBwcmV2aW91c0xhYmVsID0gJ1ByZXZpb3VzJztcbiAgQElucHV0KCkgbmV4dExhYmVsID0gJ05leHQnO1xuXG4gIC8vIOKUgOKUgCBTdGF0dXMgbGFiZWxzIChjdXN0b21pemFibGUgcGVyIHN0YXR1cykg4pSA4pSAXG4gIEBJbnB1dCgpIHN0YXR1c0xhYmVsczogUGFydGlhbDxSZWNvcmQ8UmVwb3J0U3RhdHVzLCBzdHJpbmc+PiA9IHt9O1xuXG4gIC8vIOKUgOKUgCBDU1Mgb3ZlcnJpZGVzIOKUgOKUgFxuICBASW5wdXQoKSBjb250YWluZXJDbGFzcyA9ICcnO1xuICBASW5wdXQoKSB0YWJsZUNsYXNzID0gJyc7XG5cbiAgLy8g4pSA4pSAIEN1c3RvbSBzdGF0dXMgQ1NTIGNsYXNzZXMg4pSA4pSAXG4gIEBJbnB1dCgpIHN0YXR1c0NsYXNzZXM6IFBhcnRpYWw8UmVjb3JkPFJlcG9ydFN0YXR1cywgc3RyaW5nPj4gPSB7fTtcblxuICAvLyDilIDilIAgQ3VzdG9tIHRlbXBsYXRlcyDilIDilIBcbiAgQElucHV0KCkgcm93VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogR2VuZXJhdGVkUmVwb3J0OyBpbmRleDogbnVtYmVyIH0+O1xuICBASW5wdXQoKSBlbXB0eVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dm9pZD47XG4gIEBJbnB1dCgpIGxvYWRpbmdUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBASW5wdXQoKSBhY3Rpb25zVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogR2VuZXJhdGVkUmVwb3J0IH0+O1xuICBASW5wdXQoKSBzdGF0dXNUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBHZW5lcmF0ZWRSZXBvcnQgfT47XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIG9uUGFnZUNoYW5nZTogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgfT47XG5cbiAgLy8g4pSA4pSAIEV2ZW50cyDilIDilIBcbiAgQE91dHB1dCgpIGRvd25sb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxHZW5lcmF0ZWRSZXBvcnQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPEdlbmVyYXRlZFJlcG9ydD4oKTtcbiAgQE91dHB1dCgpIHZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPEdlbmVyYXRlZFJlcG9ydD4oKTtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGFnZTogbnVtYmVyOyBzaXplOiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIHJlcG9ydHNGZXRjaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxHZW5lcmF0ZWRSZXBvcnRbXT4oKTtcbiAgQE91dHB1dCgpIGZldGNoRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBpbnRlcm5hbFJlcG9ydHM6IEdlbmVyYXRlZFJlcG9ydFtdID0gW107XG4gIGludGVybmFsTG9hZGluZyA9IGZhbHNlO1xuICBjdXJyZW50UGFnZSA9IDA7XG4gIHRvdGFsSXRlbXMgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVwb3J0aW5nU2VydmljZTogUmVwb3J0aW5nU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVwb3J0cyAmJiB0aGlzLmF1dG9GZXRjaCkge1xuICAgICAgdGhpcy5mZXRjaFJlcG9ydHMoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzcGxheVJlcG9ydHMoKTogR2VuZXJhdGVkUmVwb3J0W10ge1xuICAgIHJldHVybiB0aGlzLnJlcG9ydHMgPz8gdGhpcy5pbnRlcm5hbFJlcG9ydHM7XG4gIH1cblxuICBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmcgfHwgdGhpcy5pbnRlcm5hbExvYWRpbmc7XG4gIH1cblxuICBnZXQgdG90YWxQYWdlcygpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy50b3RhbEl0ZW1zIHx8IHRoaXMuZGlzcGxheVJlcG9ydHMubGVuZ3RoO1xuICAgIHJldHVybiBNYXRoLmNlaWwodG90YWwgLyB0aGlzLnBhZ2VTaXplKSB8fCAxO1xuICB9XG5cbiAgZ2V0IGhhc1ByZXYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPiAwO1xuICB9XG5cbiAgZ2V0IGhhc05leHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPCB0aGlzLnRvdGFsUGFnZXMgLSAxO1xuICB9XG5cbiAgb25Eb3dubG9hZChyZXBvcnQ6IEdlbmVyYXRlZFJlcG9ydCk6IHZvaWQge1xuICAgIHRoaXMuZG93bmxvYWQuZW1pdChyZXBvcnQpO1xuICB9XG5cbiAgb25EZWxldGUocmVwb3J0OiBHZW5lcmF0ZWRSZXBvcnQpOiB2b2lkIHtcbiAgICB0aGlzLmRlbGV0ZS5lbWl0KHJlcG9ydCk7XG4gIH1cblxuICBvblZpZXcocmVwb3J0OiBHZW5lcmF0ZWRSZXBvcnQpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXcuZW1pdChyZXBvcnQpO1xuICB9XG5cbiAgb25QcmV2UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQcmV2KSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLS07XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIHNpemU6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgICBpZiAoIXRoaXMucmVwb3J0cyAmJiB0aGlzLmF1dG9GZXRjaCkge1xuICAgICAgICB0aGlzLmZldGNoUmVwb3J0cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uTmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGFzTmV4dCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSsrO1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlOiB0aGlzLmN1cnJlbnRQYWdlLCBzaXplOiB0aGlzLnBhZ2VTaXplIH0pO1xuICAgICAgaWYgKCF0aGlzLnJlcG9ydHMgJiYgdGhpcy5hdXRvRmV0Y2gpIHtcbiAgICAgICAgdGhpcy5mZXRjaFJlcG9ydHMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnb1RvUGFnZSA9IChwYWdlOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IHBhZ2U6IHRoaXMuY3VycmVudFBhZ2UsIHNpemU6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgaWYgKCF0aGlzLnJlcG9ydHMgJiYgdGhpcy5hdXRvRmV0Y2gpIHtcbiAgICAgIHRoaXMuZmV0Y2hSZXBvcnRzKCk7XG4gICAgfVxuICB9O1xuXG4gIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgcmVwb3J0OiBHZW5lcmF0ZWRSZXBvcnQpOiBudW1iZXIge1xuICAgIHJldHVybiByZXBvcnQuaWQ7XG4gIH1cblxuICBnZXRTdGF0dXNMYWJlbChzdGF0dXM6IFJlcG9ydFN0YXR1cyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzTGFiZWxzW3N0YXR1c10gPz8gc3RhdHVzO1xuICB9XG5cbiAgZ2V0U3RhdHVzQ2xhc3Moc3RhdHVzOiBSZXBvcnRTdGF0dXMpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnN0YXR1c0NsYXNzZXNbc3RhdHVzXSkgcmV0dXJuIHRoaXMuc3RhdHVzQ2xhc3Nlc1tzdGF0dXNdITtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnUEVORElORyc6XG4gICAgICAgIHJldHVybiAndGdtLXN0YXR1cy0tcGVuZGluZyc7XG4gICAgICBjYXNlICdJTl9QUk9HUkVTUyc6XG4gICAgICAgIHJldHVybiAndGdtLXN0YXR1cy0tcHJvZ3Jlc3MnO1xuICAgICAgY2FzZSAnQ09NUExFVEVEJzpcbiAgICAgICAgcmV0dXJuICd0Z20tc3RhdHVzLS1jb21wbGV0ZWQnO1xuICAgICAgY2FzZSAnRkFJTEVEJzpcbiAgICAgICAgcmV0dXJuICd0Z20tc3RhdHVzLS1mYWlsZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZVN0cj86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gJ+KAlCc7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlU3RyKS50b0xvY2FsZURhdGVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICBob3VyOiAnMi1kaWdpdCcsXG4gICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZGF0ZVN0cjtcbiAgICB9XG4gIH1cblxuICBmb3JtYXRGaWxlU2l6ZShieXRlcz86IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCFieXRlcykgcmV0dXJuICfigJQnO1xuICAgIGlmIChieXRlcyA8IDEwMjQpIHJldHVybiBgJHtieXRlc30gQmA7XG4gICAgaWYgKGJ5dGVzIDwgMTAyNCAqIDEwMjQpIHJldHVybiBgJHsoYnl0ZXMgLyAxMDI0KS50b0ZpeGVkKDEpfSBLQmA7XG4gICAgcmV0dXJuIGAkeyhieXRlcyAvICgxMDI0ICogMTAyNCkpLnRvRml4ZWQoMSl9IE1CYDtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hSZXBvcnRzKCk6IHZvaWQge1xuICAgIHRoaXMuaW50ZXJuYWxMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UubGlzdEdlbmVyYXRlZFJlcG9ydHModGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wYWdlU2l6ZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbFJlcG9ydHMgPSByZXMuZGF0YSA/PyBbXTtcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gKHJlcyBhcyBhbnkpLnRvdGFsID8/IHRoaXMuaW50ZXJuYWxSZXBvcnRzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5pbnRlcm5hbExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXBvcnRzRmV0Y2hlZC5lbWl0KHRoaXMuaW50ZXJuYWxSZXBvcnRzKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLmludGVybmFsTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZldGNoRXJyb3IuZW1pdChlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRnbS1yZXBvcnQtbGlzdFwiIFtuZ0NsYXNzXT1cImNvbnRhaW5lckNsYXNzXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyVGVtcGxhdGU7IGVsc2UgZGVmYXVsdEhlYWRlclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0SGVhZGVyPlxuICAgIDxoMyBjbGFzcz1cInRnbS1yZXBvcnQtbGlzdF9fdGl0bGVcIiAqbmdJZj1cInRpdGxlXCI+e3sgdGl0bGUgfX08L2gzPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDwhLS0gTG9hZGluZyAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nVGVtcGxhdGU7IGVsc2UgZGVmYXVsdExvYWRpbmdcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMb2FkaW5nPlxuICAgICAgPGRpdiBjbGFzcz1cInRnbS1yZXBvcnQtbGlzdF9fbG9hZGluZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGdtLXNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgPHA+TG9hZGluZyByZXBvcnRzLi4uPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBFbXB0eSAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgZGlzcGxheVJlcG9ydHMubGVuZ3RoID09PSAwXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVtcHR5VGVtcGxhdGU7IGVsc2UgZGVmYXVsdEVtcHR5XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVtcHR5PlxuICAgICAgPGRpdiBjbGFzcz1cInRnbS1yZXBvcnQtbGlzdF9fZW1wdHlcIj5cbiAgICAgICAgPHA+e3sgZW1wdHlNZXNzYWdlIH19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBUYWJsZSAtLT5cbiAgPGRpdiBjbGFzcz1cInRnbS10YWJsZS13cmFwcGVyXCIgKm5nSWY9XCIhaXNMb2FkaW5nICYmIGRpc3BsYXlSZXBvcnRzLmxlbmd0aCA+IDBcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0Z20tdGFibGVcIiBbbmdDbGFzc109XCJ0YWJsZUNsYXNzXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggKm5nSWY9XCJzaG93TmFtZVwiPnt7IG5hbWVIZWFkZXIgfX08L3RoPlxuICAgICAgICAgIDx0aCAqbmdJZj1cInNob3dUeXBlXCI+e3sgdHlwZUhlYWRlciB9fTwvdGg+XG4gICAgICAgICAgPHRoICpuZ0lmPVwic2hvd0Zvcm1hdFwiPnt7IGZvcm1hdEhlYWRlciB9fTwvdGg+XG4gICAgICAgICAgPHRoICpuZ0lmPVwic2hvd1N0YXR1c1wiPnt7IHN0YXR1c0hlYWRlciB9fTwvdGg+XG4gICAgICAgICAgPHRoICpuZ0lmPVwic2hvd1JlY29yZENvdW50XCI+e3sgcmVjb3JkQ291bnRIZWFkZXIgfX08L3RoPlxuICAgICAgICAgIDx0aCAqbmdJZj1cInNob3dGaWxlU2l6ZVwiPnt7IGZpbGVTaXplSGVhZGVyIH19PC90aD5cbiAgICAgICAgICA8dGggKm5nSWY9XCJzaG93Q3JlYXRlZEF0XCI+e3sgY3JlYXRlZEF0SGVhZGVyIH19PC90aD5cbiAgICAgICAgICA8dGggKm5nSWY9XCJzaG93RG93bmxvYWQgfHwgc2hvd0RlbGV0ZVwiPnt7IGFjdGlvbnNIZWFkZXIgfX08L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVwb3J0IG9mIGRpc3BsYXlSZXBvcnRzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5SWRcIj5cbiAgICAgICAgICA8IS0tIEN1c3RvbSByb3cgdGVtcGxhdGUgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd1RlbXBsYXRlOyBlbHNlIGRlZmF1bHRSb3dcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydCwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSBEZWZhdWx0IHJvdyAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRSb3c+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dOYW1lXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tcmVwb3J0LW5hbWVcIiAoY2xpY2spPVwib25WaWV3KHJlcG9ydClcIj57eyByZXBvcnQucmVwb3J0TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd1R5cGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnbS1iYWRnZSB0Z20tYmFkZ2UtLXR5cGVcIj57eyByZXBvcnQucmVwb3J0VHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd0Zvcm1hdFwiPnt7IHJlcG9ydC5yZXBvcnRGb3JtYXQgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJzaG93U3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBDdXN0b20gc3RhdHVzIHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXNUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0U3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZXBvcnQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFN0YXR1cz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGdtLXN0YXR1c1wiIFtuZ0NsYXNzXT1cImdldFN0YXR1c0NsYXNzKHJlcG9ydC5zdGF0dXMpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldFN0YXR1c0xhYmVsKHJlcG9ydC5zdGF0dXMpIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd1JlY29yZENvdW50XCI+e3sgcmVwb3J0LnJlY29yZENvdW50IH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd0ZpbGVTaXplXCI+e3sgZm9ybWF0RmlsZVNpemUocmVwb3J0LmZpbGVTaXplQnl0ZXMpIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd0NyZWF0ZWRBdFwiPnt7IGZvcm1hdERhdGUocmVwb3J0LmNyZWF0ZWRBdCkgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJzaG93RG93bmxvYWQgfHwgc2hvd0RlbGV0ZVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQ3VzdG9tIGFjdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbnNUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0QWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjdGlvbnNUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlcG9ydCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0QWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGdtLWJ0biB0Z20tYnRuLS1zbSB0Z20tYnRuLS1naG9zdFwiIChjbGljayk9XCJvblZpZXcocmVwb3J0KVwiPnt7IHZpZXdMYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGdtLWJ0biB0Z20tYnRuLS1zbSB0Z20tYnRuLS1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dEb3dubG9hZCAmJiByZXBvcnQuc3RhdHVzID09PSAnQ09NUExFVEVEJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bmxvYWQocmVwb3J0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRvd25sb2FkTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0Z20tYnRuIHRnbS1idG4tLXNtIHRnbS1idG4tLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RGVsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUocmVwb3J0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRlbGV0ZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG5cbiAgICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQYWdpbmF0aW9uICYmIHRvdGFsUGFnZXMgPiAxXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFnaW5hdGlvblRlbXBsYXRlOyBlbHNlIGRlZmF1bHRQYWdpbmF0aW9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmF0aW9uVGVtcGxhdGU7IGNvbnRleHQ6IHtcbiAgICAgICAgICBwYWdlOiBjdXJyZW50UGFnZSxcbiAgICAgICAgICBwYWdlU2l6ZTogcGFnZVNpemUsXG4gICAgICAgICAgdG90YWw6IHRvdGFsSXRlbXMsXG4gICAgICAgICAgb25QYWdlQ2hhbmdlOiBnb1RvUGFnZVxuICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhZ2luYXRpb24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tcGFnaW5hdGlvblwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0Z20tYnRuIHRnbS1idG4tLXNtIHRnbS1idG4tLWdob3N0XCIgW2Rpc2FibGVkXT1cIiFoYXNQcmV2XCIgKGNsaWNrKT1cIm9uUHJldlBhZ2UoKVwiPlxuICAgICAgICAgICAge3sgcHJldmlvdXNMYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGdtLXBhZ2luYXRpb25fX2luZm9cIj57eyBjdXJyZW50UGFnZSArIDEgfX0gLyB7eyB0b3RhbFBhZ2VzIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0Z20tYnRuIHRnbS1idG4tLXNtIHRnbS1idG4tLWdob3N0XCIgW2Rpc2FibGVkXT1cIiFoYXNOZXh0XCIgKGNsaWNrKT1cIm9uTmV4dFBhZ2UoKVwiPlxuICAgICAgICAgICAge3sgbmV4dExhYmVsIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==