@sidekick-coder/zenith-kit 0.4.3 → 0.4.5

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 (1063) hide show
  1. package/bin/release.js +76 -0
  2. package/bin/zenith.js +9 -8
  3. package/dist/client/index.es.js +3274 -10177
  4. package/dist/client/src/client/components/ui/button/index.d.ts +2 -2
  5. package/dist/client/src/client/components/ui/sidebar/index.d.ts +1 -1
  6. package/dist/client/src/client/components/ui/toggle/index.d.ts +1 -1
  7. package/dist/client/src/client/components.d.ts +1 -0
  8. package/dist/client/src/client/composables/useForm.d.ts +1 -1
  9. package/dist/client/src/client/composables/useRoute.d.ts +3 -0
  10. package/dist/client/src/client/facades/emmitter.d.ts +1 -1
  11. package/dist/client/src/client/index.d.ts +1 -0
  12. package/dist/client/src/shared/schemas/dashboardMetaSchema.d.ts +6 -6
  13. package/dist/client/src/shared/validators/array.d.ts +5 -0
  14. package/dist/client/src/shared/validators/index.d.ts +1 -0
  15. package/dist/client/src/shared/validators/urlValidator.d.ts +0 -1
  16. package/dist/components/index.es.js +8507 -8638
  17. package/dist/components/src/client/components/DashboardGridUnitInput.vue.d.ts +1 -1
  18. package/dist/components/src/client/components/FileUploader.vue.d.ts +1 -1
  19. package/dist/components/src/client/components/FormFilePicker.vue.d.ts +1 -1
  20. package/dist/components/src/client/components/FormFileUploader.vue.d.ts +1 -1
  21. package/dist/components/src/client/components/FormImageUploader.vue.d.ts +1 -1
  22. package/dist/components/src/client/components/ui/combobox/ComboboxList.vue.d.ts +1 -1
  23. package/dist/components/src/client/components/ui/menubar/MenubarContent.vue.d.ts +1 -1
  24. package/dist/components/src/client/components/ui/popover/PopoverContent.vue.d.ts +1 -1
  25. package/dist/components/src/client/components.d.ts +1 -0
  26. package/dist/components/src/client/composables/useForm.d.ts +1 -1
  27. package/dist/components/src/client/composables/useRoute.d.ts +3 -0
  28. package/dist/components/src/client/facades/emmitter.d.ts +1 -1
  29. package/dist/components/src/client/index.d.ts +1 -0
  30. package/dist/components/src/shared/schemas/dashboardMetaSchema.d.ts +6 -6
  31. package/dist/components/src/shared/schemas/userSchema.d.ts +16 -16
  32. package/dist/components/src/shared/validators/array.d.ts +5 -0
  33. package/dist/components/src/shared/validators/index.d.ts +1 -0
  34. package/dist/components/src/shared/validators/urlValidator.d.ts +0 -1
  35. package/dist/server/AclEntity-BltZiTsS.d.mts +25 -0
  36. package/dist/server/AclEntity-C2YSHzip.mjs +2 -0
  37. package/dist/server/AuthMiddleware-D2BZKKBJ.d.mts +15 -0
  38. package/dist/server/AuthSilenceMiddleware-8l5EPeot.d.mts +16 -0
  39. package/dist/server/AuthorizationMiddleware-BjozUIyB.d.mts +25 -0
  40. package/dist/server/BaseEntityMixin-8XsQRDgt.mjs +2 -0
  41. package/dist/server/BaseException-cMfHz0w8.mjs +2 -0
  42. package/dist/server/BaseRelation-Br4CDT5e.d.mts +7 -0
  43. package/dist/server/BelongsToFileRelation-B-KDoKlS.d.mts +24 -0
  44. package/dist/server/BelongsToRelation-BdcBpcDt.d.mts +24 -0
  45. package/dist/server/BelongsToUserRelation-C1Mj-hdb.mjs +2 -0
  46. package/dist/server/BelongsToUserRelation-D-nXYwyy.d.mts +9 -0
  47. package/dist/server/CliService-BN3FMadM.d.mts +51 -0
  48. package/dist/server/CliTesterService-XVGae3eK.d.mts +11 -0
  49. package/dist/server/CliWrapperService-yg9gALPj.d.mts +30 -0
  50. package/dist/server/ConfigFSService-BOgh6pL9.d.mts +28 -0
  51. package/dist/server/ConfigManagerService-D7WdTGtJ.d.mts +26 -0
  52. package/dist/server/ConfigRepository-DdBw1w8b.d.mts +27 -0
  53. package/dist/server/ConfigS3Service-MPEl-P_u.d.mts +27 -0
  54. package/dist/server/ConfigService-CNvGuEng.mjs +2 -0
  55. package/dist/server/ConfigService-Di_lVTAw.d.mts +26 -0
  56. package/dist/server/ContainerService-CL9IKkoa.d.mts +20 -0
  57. package/dist/server/CookieMapEntity-BfC0NuKI.d.mts +18 -0
  58. package/dist/server/CookieMapEntity-CJRqkyl9.d.mts +13 -0
  59. package/dist/server/CookieMapEntity-KhdSUHhb.mjs +2 -0
  60. package/dist/server/DatabaseContract-iR4kncmi.d.mts +141 -0
  61. package/dist/server/DatabaseGateway-DHTbjF5C.d.mts +10 -0
  62. package/dist/server/DatabaseRepository-_gA6RkcH.d.mts +60 -0
  63. package/dist/server/DatabaseRepositoryInferMixin-BKv4RR8I.d.mts +19 -0
  64. package/dist/server/DownloadService-B-r-EqkZ.d.mts +17 -0
  65. package/dist/server/DriveBaseGateway-C5R7er0_.d.mts +32 -0
  66. package/dist/server/DriveConfigEntity-BTK1AHGA.mjs +2 -0
  67. package/dist/server/DriveConfigEntity-Dh8yII97.d.mts +92 -0
  68. package/dist/server/DriveContract-CaFb_Tph.d.mts +31 -0
  69. package/dist/server/DriveEntryEntity-BiZSWkGi.d.mts +11 -0
  70. package/dist/server/DriveFSGateway-_7luuCiK.d.mts +28 -0
  71. package/dist/server/DriveS3Gateway-BM7HhUZf.d.mts +42 -0
  72. package/dist/server/DriveService-Cb-DdupY.d.mts +70 -0
  73. package/dist/server/EmmitterService-BwETNyCU.d.mts +8 -0
  74. package/dist/server/EmmitterService-Dw_dThZJ.mjs +2 -0
  75. package/dist/server/EmmitterService-s7wZsSVf.d.mts +57 -0
  76. package/dist/server/EncryptService-B17nfV8V.d.mts +39 -0
  77. package/dist/server/EnvService-BUFUgqUW.mjs +2 -0
  78. package/dist/server/EnvService-D7rVDvqk.d.mts +54 -0
  79. package/dist/server/EventContract-B6JEPwRM.d.mts +18 -0
  80. package/dist/server/ExceptionService-S7L99ujh.d.mts +21 -0
  81. package/dist/server/FileEntity-6sT7RdiN.d.mts +194 -0
  82. package/dist/server/FileEntity-cztreoro.mjs +2 -0
  83. package/dist/server/FileMetaEntity-uHFGRj8P.mjs +2 -0
  84. package/dist/server/FileRepository--bOaDHZz.d.mts +48 -0
  85. package/dist/server/GitBranchRepository-C0VHcpbD.mjs +3 -0
  86. package/dist/server/GitBranchRepository-k7reiBa4.d.mts +30 -0
  87. package/dist/server/GitCommitRepository-fjbilGO0.mjs +2 -0
  88. package/dist/server/GitCommitRepository-j6tmgRS2.d.mts +40 -0
  89. package/dist/server/GitGateway-CNuhGhkh.d.mts +48 -0
  90. package/dist/server/HasManyRelation-v0qmO2nd.d.mts +26 -0
  91. package/dist/server/HasMetasRelation-BUoCpbto.d.mts +22 -0
  92. package/dist/server/HasherService-DnbIU1ub.d.mts +9 -0
  93. package/dist/server/HooksMixin-D_OSdJ8D.mjs +2 -0
  94. package/dist/server/HttpContextContract-BS6VXi67.d.mts +25 -0
  95. package/dist/server/HttpService-DnnqU2n1.d.mts +44 -0
  96. package/dist/server/KyselyContract-ACWyd3F_.d.mts +8 -0
  97. package/dist/server/LifecycleHook-BEVS4FKE.d.mts +22 -0
  98. package/dist/server/LifecycleHook-DecY1BiW.mjs +2 -0
  99. package/dist/server/LifecycleService-5eYElrdc.mjs +2 -0
  100. package/dist/server/LifecycleService-C43A9AOw.d.mts +50 -0
  101. package/dist/server/LoggerService-8XvsFBNN.mjs +2 -0
  102. package/dist/server/LoggerService-C5FUibjh.d.mts +12 -0
  103. package/dist/server/MetadataMixin-AVaqESW2.d.mts +15 -0
  104. package/dist/server/MetadataQueryService-WXBAN4d8.d.mts +37 -0
  105. package/dist/server/MetadataService-D5lAlAuy.d.mts +23 -0
  106. package/dist/server/MigrationEntity-B5VsB63u.d.mts +21 -0
  107. package/dist/server/MigratorService-DHug6UBq.d.mts +81 -0
  108. package/dist/server/ModelConfigMixin-7rCJZaAw.d.mts +24 -0
  109. package/dist/server/ModuleEntity-DZ2R1Bf_.mjs +2 -0
  110. package/dist/server/ModuleEntity-xa6rCTxe.d.mts +67 -0
  111. package/dist/server/PageRequestContextEntity-B1nE9xel.d.mts +45 -0
  112. package/dist/server/PermissionAssignmentRepository-DVS015ou.d.mts +28 -0
  113. package/dist/server/PermissionEntity-DFd-TfNn.d.mts +23 -0
  114. package/dist/server/PermissionRepository-9Kf8A5uC.d.mts +29 -0
  115. package/dist/server/PluginEntity-Bjl3keRp.d.mts +17 -0
  116. package/dist/server/PluginEntryEntity-BDBElYQ1.d.mts +31 -0
  117. package/dist/server/PluginEntryEntity-P80sQn2B.mjs +2 -0
  118. package/dist/server/PluginIpcClient-5kLU9aLc.d.mts +17 -0
  119. package/dist/server/PluginIpcHost-DTXHSMkU.d.mts +15 -0
  120. package/dist/server/PluginRouter-DOOBinlR.d.mts +43 -0
  121. package/dist/server/RelationsMixin-BaXvJfzK.d.mts +13 -0
  122. package/dist/server/RouteEntity-CLRlwjdn.d.mts +23 -0
  123. package/dist/server/RouterContract-thDZSYVJ.d.mts +19 -0
  124. package/dist/server/RouterFileBaseRoutingService-CEBdzCYd.d.mts +26 -0
  125. package/dist/server/RouterRegisterService-mU1J15Yt.d.mts +20 -0
  126. package/dist/server/RouterResourceConfigService-BdqbVblk.d.mts +26 -0
  127. package/dist/server/RouterResourceService-Cj73MVpb.d.mts +34 -0
  128. package/dist/server/RouterService-BS_1MzFI.mjs +2 -0
  129. package/dist/server/RouterService-DmiiZzf5.d.mts +69 -0
  130. package/dist/server/RoutineEntity-DTJtFI1m.d.mts +24 -0
  131. package/dist/server/SchedulerService-DDuSAEiJ.d.mts +53 -0
  132. package/dist/server/SeederEntity-DYcCU6bM.d.mts +18 -0
  133. package/dist/server/SeederService-B9j_aioh.d.mts +55 -0
  134. package/dist/server/ShellService-BYXgMyxs.mjs +2 -0
  135. package/dist/server/ShellService-BrVU19X3.d.mts +29 -0
  136. package/dist/server/SoftDeleteMixin-Be6a-3yd.mjs +2 -0
  137. package/dist/server/TokenRepository-C1RqlmxD.mjs +2 -0
  138. package/dist/server/TokenRepository-DplVSSbU.d.mts +37 -0
  139. package/dist/server/UserEntity-NnuYOCM7.d.mts +55 -0
  140. package/dist/server/UserRepository-BkGla4Vr.d.mts +37 -0
  141. package/dist/server/addIdColumn-BiPPrrLR.d.mts +7 -0
  142. package/dist/server/addSoftDeleteColumn-CZGL0m9X.d.mts +14 -0
  143. package/dist/server/addTimestampColumns-DW_pSZXf.d.mts +19 -0
  144. package/dist/server/basePath-BrKDzdou.d.mts +10 -0
  145. package/dist/server/chunk-CGLV7CjG.mjs +1 -0
  146. package/dist/server/commands/pluginBuild.d.mts +7 -0
  147. package/dist/server/commands/pluginBuild.mjs +2 -0
  148. package/dist/server/commands/pluginGenerateId.d.mts +7 -0
  149. package/dist/server/commands/pluginGenerateId.mjs +2 -0
  150. package/dist/server/common-CkVu3aD6.d.mts +22 -0
  151. package/dist/server/compose-Dq68rcKW.d.mts +5 -0
  152. package/dist/server/compose-XJLd0ioo.mjs +2 -0
  153. package/dist/server/config-DDScRnvV.d.mts +7 -0
  154. package/dist/server/config-OUxEJV91.d.mts +5 -0
  155. package/dist/server/container-Be1UNVpU.d.mts +7 -0
  156. package/dist/server/container-BwAJOg9B.mjs +2 -0
  157. package/dist/server/contracts/DatabaseContract.d.mts +2 -0
  158. package/dist/server/contracts/DatabaseContract.mjs +1 -0
  159. package/dist/server/contracts/DriveContract.d.mts +2 -0
  160. package/dist/server/contracts/DriveContract.mjs +1 -0
  161. package/dist/server/contracts/EventContract.d.mts +2 -0
  162. package/dist/server/contracts/EventContract.mjs +1 -0
  163. package/dist/server/contracts/HttpContextContract.d.mts +2 -0
  164. package/dist/server/contracts/HttpContextContract.mjs +1 -0
  165. package/dist/server/contracts/KyselyContract.d.mts +2 -0
  166. package/dist/server/contracts/KyselyContract.mjs +1 -0
  167. package/dist/server/contracts/RouterContract.d.mts +2 -0
  168. package/dist/server/contracts/RouterContract.mjs +1 -0
  169. package/dist/server/count-Cx1qqWRe.d.mts +12 -0
  170. package/dist/server/create-BnVaEuUC.d.mts +17 -0
  171. package/dist/server/createId-c4X4-v2p.mjs +2 -0
  172. package/dist/server/createLoaderFactory-Bpk6rD3D.d.mts +11 -0
  173. package/dist/server/cuid-7odspl-1.d.mts +5 -0
  174. package/dist/server/database-CWkgKEjr.d.mts +8 -0
  175. package/dist/server/defineHandler-fLDf436i.d.mts +10 -0
  176. package/dist/server/defineLoader-BOYnKv5_.d.mts +11 -0
  177. package/dist/server/destroy-Uj3B5q04.d.mts +14 -0
  178. package/dist/server/download-DzKRkAhD.d.mts +7 -0
  179. package/dist/server/drive-BZiloXJW.d.mts +7 -0
  180. package/dist/server/emmitter-9-6gueft.d.mts +7 -0
  181. package/dist/server/encrypt-BtQggXao.d.mts +7 -0
  182. package/dist/server/entities/AclEntity.d.mts +2 -0
  183. package/dist/server/entities/AclEntity.mjs +1 -0
  184. package/dist/server/entities/CookieMapEntity.d.mts +2 -0
  185. package/dist/server/entities/CookieMapEntity.mjs +1 -0
  186. package/dist/server/entities/DriveConfigEntity.d.mts +2 -0
  187. package/dist/server/entities/DriveConfigEntity.mjs +1 -0
  188. package/dist/server/entities/FileEntity.d.mts +2 -0
  189. package/dist/server/entities/FileEntity.mjs +1 -0
  190. package/dist/server/entities/FileMetaEntity.d.mts +2 -0
  191. package/dist/server/entities/FileMetaEntity.mjs +1 -0
  192. package/dist/server/entities/MigrationEntity.d.mts +2 -0
  193. package/dist/server/entities/MigrationEntity.mjs +2 -0
  194. package/dist/server/entities/ModuleEntity.d.mts +2 -0
  195. package/dist/server/entities/ModuleEntity.mjs +1 -0
  196. package/dist/server/entities/PageRequestContextEntity.d.mts +2 -0
  197. package/dist/server/entities/PageRequestContextEntity.mjs +2 -0
  198. package/dist/server/entities/PluginEntity.d.mts +2 -0
  199. package/dist/server/entities/PluginEntity.mjs +2 -0
  200. package/dist/server/entities/PluginEntryEntity.d.mts +2 -0
  201. package/dist/server/entities/PluginEntryEntity.mjs +1 -0
  202. package/dist/server/entities/RouteEntity.d.mts +2 -0
  203. package/dist/server/entities/RouteEntity.mjs +2 -0
  204. package/dist/server/entities/RoutineEntity.d.mts +2 -0
  205. package/dist/server/entities/RoutineEntity.mjs +2 -0
  206. package/dist/server/entities/SeederEntity.d.mts +2 -0
  207. package/dist/server/entities/SeederEntity.mjs +2 -0
  208. package/dist/server/env-oE1dEbgb.d.mts +7 -0
  209. package/dist/server/exists-Csru9uQi.d.mts +8 -0
  210. package/dist/server/facades/config.d.mts +2 -0
  211. package/dist/server/facades/config.mjs +2 -0
  212. package/dist/server/facades/container.d.mts +2 -0
  213. package/dist/server/facades/container.mjs +1 -0
  214. package/dist/server/facades/database.d.mts +2 -0
  215. package/dist/server/facades/database.mjs +2 -0
  216. package/dist/server/facades/download.d.mts +2 -0
  217. package/dist/server/facades/download.mjs +2 -0
  218. package/dist/server/facades/drive.d.mts +2 -0
  219. package/dist/server/facades/drive.mjs +2 -0
  220. package/dist/server/facades/emmitter.d.mts +2 -0
  221. package/dist/server/facades/emmitter.mjs +2 -0
  222. package/dist/server/facades/encrypt.d.mts +2 -0
  223. package/dist/server/facades/encrypt.mjs +2 -0
  224. package/dist/server/facades/env.d.mts +2 -0
  225. package/dist/server/facades/env.mjs +2 -0
  226. package/dist/server/facades/filesRepository.d.mts +2 -0
  227. package/dist/server/facades/filesRepository.mjs +2 -0
  228. package/dist/server/facades/hasher.d.mts +2 -0
  229. package/dist/server/facades/hasher.mjs +2 -0
  230. package/dist/server/facades/http.d.mts +2 -0
  231. package/dist/server/facades/http.mjs +2 -0
  232. package/dist/server/facades/lifecycle.d.mts +2 -0
  233. package/dist/server/facades/lifecycle.mjs +2 -0
  234. package/dist/server/facades/logger.d.mts +2 -0
  235. package/dist/server/facades/logger.mjs +2 -0
  236. package/dist/server/facades/migrator.d.mts +2 -0
  237. package/dist/server/facades/migrator.mjs +2 -0
  238. package/dist/server/facades/permissionAssignmentRepository.d.mts +2 -0
  239. package/dist/server/facades/permissionAssignmentRepository.mjs +2 -0
  240. package/dist/server/facades/permissionRepository.d.mts +2 -0
  241. package/dist/server/facades/permissionRepository.mjs +2 -0
  242. package/dist/server/facades/router.d.mts +2 -0
  243. package/dist/server/facades/router.mjs +2 -0
  244. package/dist/server/facades/scheduler.d.mts +2 -0
  245. package/dist/server/facades/scheduler.mjs +2 -0
  246. package/dist/server/facades/shell.d.mts +2 -0
  247. package/dist/server/facades/shell.mjs +2 -0
  248. package/dist/server/facades/tokenRepository.d.mts +2 -0
  249. package/dist/server/facades/tokenRepository.mjs +2 -0
  250. package/dist/server/facades/userRepository.d.mts +2 -0
  251. package/dist/server/facades/userRepository.mjs +2 -0
  252. package/dist/server/fileLoader-D1BgCxaZ.d.mts +11 -0
  253. package/dist/server/fileUrlLoader-DpVRfcGU.d.mts +12 -0
  254. package/dist/server/filesRepository-D9fxvd-E.d.mts +7 -0
  255. package/dist/server/findOne-Boxfam4u.d.mts +15 -0
  256. package/dist/server/firstOrCreate-DZr8L5yb.d.mts +15 -0
  257. package/dist/server/flatten-DHGvYNde.mjs +2 -0
  258. package/dist/server/gateways/DatabaseGateway.d.mts +2 -0
  259. package/dist/server/gateways/DatabaseGateway.mjs +2 -0
  260. package/dist/server/gateways/DriveBaseGateway.d.mts +2 -0
  261. package/dist/server/gateways/DriveBaseGateway.mjs +2 -0
  262. package/dist/server/gateways/DriveFSGateway.d.mts +2 -0
  263. package/dist/server/gateways/DriveFSGateway.mjs +2 -0
  264. package/dist/server/gateways/DriveS3Gateway.d.mts +2 -0
  265. package/dist/server/gateways/DriveS3Gateway.mjs +2 -0
  266. package/dist/server/gateways/GitGateway.d.mts +2 -0
  267. package/dist/server/gateways/GitGateway.mjs +3 -0
  268. package/dist/server/generateIndexFile-zJLs7hsX.d.mts +5 -0
  269. package/dist/server/hasManyThroughLoader-BlAt7DQD.d.mts +22 -0
  270. package/dist/server/hasManyThroughRelation-CydrMBzu.d.mts +33 -0
  271. package/dist/server/hasher-i-RJja9d.d.mts +7 -0
  272. package/dist/server/http-F5dtmcy0.d.mts +7 -0
  273. package/dist/server/importAll-CDPG0oSA.d.mts +22 -0
  274. package/dist/server/importOne-C4TjAH5G.d.mts +5 -0
  275. package/dist/server/index-BcsXXrHq.d.mts +1 -0
  276. package/dist/server/index.d.mts +127 -2890
  277. package/dist/server/index.mjs +1 -4
  278. package/dist/server/lifecycle-CBXw5SHi.d.mts +7 -0
  279. package/dist/server/list-DLrcQUmc.d.mts +16 -0
  280. package/dist/server/loadMetas-kut6dSZS.d.mts +18 -0
  281. package/dist/server/loaders/fileLoader.d.mts +2 -0
  282. package/dist/server/loaders/fileLoader.mjs +2 -0
  283. package/dist/server/loaders/fileUrlLoader.d.mts +2 -0
  284. package/dist/server/loaders/fileUrlLoader.mjs +2 -0
  285. package/dist/server/loaders/hasManyThroughLoader.d.mts +2 -0
  286. package/dist/server/loaders/hasManyThroughLoader.mjs +2 -0
  287. package/dist/server/loaders/loadMetas.d.mts +2 -0
  288. package/dist/server/loaders/loadMetas.mjs +2 -0
  289. package/dist/server/loaders/permissionLoader.d.mts +2 -0
  290. package/dist/server/loaders/permissionLoader.mjs +2 -0
  291. package/dist/server/loaders/userLoader.d.mts +2 -0
  292. package/dist/server/loaders/userLoader.mjs +2 -0
  293. package/dist/server/logger-B-eGxHk1.d.mts +7 -0
  294. package/dist/server/middlewares/AuthMiddleware.d.mts +2 -0
  295. package/dist/server/middlewares/AuthMiddleware.mjs +2 -0
  296. package/dist/server/middlewares/AuthSilenceMiddleware.d.mts +2 -0
  297. package/dist/server/middlewares/AuthSilenceMiddleware.mjs +2 -0
  298. package/dist/server/middlewares/AuthorizationMiddleware.d.mts +2 -0
  299. package/dist/server/middlewares/AuthorizationMiddleware.mjs +2 -0
  300. package/dist/server/migrator-D9OUJuE0.d.mts +7 -0
  301. package/dist/server/mixins/DatabaseRepositoryInferMixin.d.mts +2 -0
  302. package/dist/server/mixins/DatabaseRepositoryInferMixin.mjs +2 -0
  303. package/dist/server/mixins/MetadataMixin.d.mts +2 -0
  304. package/dist/server/mixins/MetadataMixin.mjs +2 -0
  305. package/dist/server/mixins/ModelConfigMixin.d.mts +2 -0
  306. package/dist/server/mixins/ModelConfigMixin.mjs +2 -0
  307. package/dist/server/mixins/ModelMixin.d.mts +60 -0
  308. package/dist/server/mixins/ModelMixin.mjs +2 -0
  309. package/dist/server/mixins/RelationsMixin.d.mts +2 -0
  310. package/dist/server/mixins/RelationsMixin.mjs +2 -0
  311. package/dist/server/normalizers-ByJRmAYa.mjs +2 -0
  312. package/dist/server/paginate-Dq4YCfoP.d.mts +33 -0
  313. package/dist/server/paginate-xPInooKh.mjs +2 -0
  314. package/dist/server/permissionAssignmentRepository-kW-shaeD.d.mts +7 -0
  315. package/dist/server/permissionLoader-DzP0E01F.d.mts +13 -0
  316. package/dist/server/permissionRepository-pSU0Pbu0.d.mts +7 -0
  317. package/dist/server/printTable-7dreX6wW.d.mts +15 -0
  318. package/dist/server/queries/common.d.mts +2 -0
  319. package/dist/server/queries/common.mjs +2 -0
  320. package/dist/server/queries/count.d.mts +2 -0
  321. package/dist/server/queries/count.mjs +2 -0
  322. package/dist/server/queries/create.d.mts +2 -0
  323. package/dist/server/queries/create.mjs +2 -0
  324. package/dist/server/queries/destroy.d.mts +2 -0
  325. package/dist/server/queries/destroy.mjs +2 -0
  326. package/dist/server/queries/exists.d.mts +2 -0
  327. package/dist/server/queries/exists.mjs +2 -0
  328. package/dist/server/queries/findOne.d.mts +2 -0
  329. package/dist/server/queries/findOne.mjs +2 -0
  330. package/dist/server/queries/firstOrCreate.d.mts +2 -0
  331. package/dist/server/queries/firstOrCreate.mjs +2 -0
  332. package/dist/server/queries/index.d.mts +14 -0
  333. package/dist/server/queries/index.mjs +1 -0
  334. package/dist/server/queries/list.d.mts +2 -0
  335. package/dist/server/queries/list.mjs +2 -0
  336. package/dist/server/queries/paginate.d.mts +2 -0
  337. package/dist/server/queries/paginate.mjs +1 -0
  338. package/dist/server/queries/softDelete.d.mts +2 -0
  339. package/dist/server/queries/softDelete.mjs +2 -0
  340. package/dist/server/queries/timestamp.d.mts +2 -0
  341. package/dist/server/queries/timestamp.mjs +2 -0
  342. package/dist/server/queries/update.d.mts +2 -0
  343. package/dist/server/queries/update.mjs +2 -0
  344. package/dist/server/queries/updateOrCreate.d.mts +2 -0
  345. package/dist/server/queries/updateOrCreate.mjs +2 -0
  346. package/dist/server/relations/BaseRelation.d.mts +2 -0
  347. package/dist/server/relations/BaseRelation.mjs +2 -0
  348. package/dist/server/relations/BelongsToFileRelation.d.mts +2 -0
  349. package/dist/server/relations/BelongsToFileRelation.mjs +2 -0
  350. package/dist/server/relations/BelongsToRelation.d.mts +2 -0
  351. package/dist/server/relations/BelongsToRelation.mjs +2 -0
  352. package/dist/server/relations/BelongsToUserRelation.d.mts +2 -0
  353. package/dist/server/relations/BelongsToUserRelation.mjs +1 -0
  354. package/dist/server/relations/HasManyRelation.d.mts +2 -0
  355. package/dist/server/relations/HasManyRelation.mjs +2 -0
  356. package/dist/server/relations/HasMetasRelation.d.mts +2 -0
  357. package/dist/server/relations/HasMetasRelation.mjs +2 -0
  358. package/dist/server/relations/hasManyThroughRelation.d.mts +2 -0
  359. package/dist/server/relations/hasManyThroughRelation.mjs +2 -0
  360. package/dist/server/repositories/ConfigRepository.d.mts +2 -0
  361. package/dist/server/repositories/ConfigRepository.mjs +2 -0
  362. package/dist/server/repositories/DatabaseRepository.d.mts +2 -0
  363. package/dist/server/repositories/DatabaseRepository.mjs +2 -0
  364. package/dist/server/repositories/FileRepository.d.mts +2 -0
  365. package/dist/server/repositories/FileRepository.mjs +2 -0
  366. package/dist/server/repositories/GitBranchRepository.d.mts +2 -0
  367. package/dist/server/repositories/GitBranchRepository.mjs +1 -0
  368. package/dist/server/repositories/GitCommitRepository.d.mts +2 -0
  369. package/dist/server/repositories/GitCommitRepository.mjs +1 -0
  370. package/dist/server/repositories/PermissionAssignmentRepository.d.mts +2 -0
  371. package/dist/server/repositories/PermissionAssignmentRepository.mjs +2 -0
  372. package/dist/server/repositories/PermissionRepository.d.mts +2 -0
  373. package/dist/server/repositories/PermissionRepository.mjs +2 -0
  374. package/dist/server/repositories/PermissionRepository.test-d.d.mts +1 -0
  375. package/dist/server/repositories/PermissionRepository.test-d.mjs +2 -0
  376. package/dist/server/repositories/TokenRepository.d.mts +2 -0
  377. package/dist/server/repositories/TokenRepository.mjs +1 -0
  378. package/dist/server/repositories/UserRepository.d.mts +2 -0
  379. package/dist/server/repositories/UserRepository.mjs +2 -0
  380. package/dist/server/router-D7lk_eki.d.mts +8 -0
  381. package/dist/server/scheduler-BZJ0JscK.d.mts +7 -0
  382. package/dist/server/services/CliService.d.mts +2 -0
  383. package/dist/server/services/CliService.mjs +2 -0
  384. package/dist/server/services/CliTesterService.d.mts +2 -0
  385. package/dist/server/services/CliTesterService.mjs +2 -0
  386. package/dist/server/services/CliWrapperService.d.mts +2 -0
  387. package/dist/server/services/CliWrapperService.mjs +2 -0
  388. package/dist/server/services/ConfigFSService.d.mts +2 -0
  389. package/dist/server/services/ConfigFSService.mjs +2 -0
  390. package/dist/server/services/ConfigManagerService.d.mts +2 -0
  391. package/dist/server/services/ConfigManagerService.mjs +2 -0
  392. package/dist/server/services/ConfigS3Service.d.mts +2 -0
  393. package/dist/server/services/ConfigS3Service.mjs +2 -0
  394. package/dist/server/services/DownloadService.d.mts +2 -0
  395. package/dist/server/services/DownloadService.mjs +2 -0
  396. package/dist/server/services/DriveService.d.mts +2 -0
  397. package/dist/server/services/DriveService.mjs +2 -0
  398. package/dist/server/services/EmmitterService.d.mts +2 -0
  399. package/dist/server/services/EmmitterService.mjs +2 -0
  400. package/dist/server/services/EncryptService.d.mts +2 -0
  401. package/dist/server/services/EncryptService.mjs +2 -0
  402. package/dist/server/services/EnvService.d.mts +2 -0
  403. package/dist/server/services/EnvService.mjs +1 -0
  404. package/dist/server/services/ExceptionService.d.mts +2 -0
  405. package/dist/server/services/ExceptionService.mjs +2 -0
  406. package/dist/server/services/HasherService.d.mts +2 -0
  407. package/dist/server/services/HasherService.mjs +2 -0
  408. package/dist/server/services/HttpService.d.mts +2 -0
  409. package/dist/server/services/HttpService.mjs +2 -0
  410. package/dist/server/services/LifecycleService.d.mts +2 -0
  411. package/dist/server/services/LifecycleService.mjs +1 -0
  412. package/dist/server/services/MetadataQueryService.d.mts +2 -0
  413. package/dist/server/services/MetadataQueryService.mjs +2 -0
  414. package/dist/server/services/MetadataService.d.mts +2 -0
  415. package/dist/server/services/MetadataService.mjs +2 -0
  416. package/dist/server/services/MigratorService.d.mts +2 -0
  417. package/dist/server/services/MigratorService.mjs +2 -0
  418. package/dist/server/services/PluginIpcClient.d.mts +2 -0
  419. package/dist/server/services/PluginIpcClient.mjs +2 -0
  420. package/dist/server/services/PluginIpcHost.d.mts +2 -0
  421. package/dist/server/services/PluginIpcHost.mjs +2 -0
  422. package/dist/server/services/PluginRouter.d.mts +2 -0
  423. package/dist/server/services/PluginRouter.mjs +2 -0
  424. package/dist/server/services/RouterFileBaseRoutingService.d.mts +2 -0
  425. package/dist/server/services/RouterFileBaseRoutingService.mjs +2 -0
  426. package/dist/server/services/RouterRegisterService.d.mts +2 -0
  427. package/dist/server/services/RouterRegisterService.mjs +2 -0
  428. package/dist/server/services/RouterResourceConfigService.d.mts +2 -0
  429. package/dist/server/services/RouterResourceConfigService.mjs +2 -0
  430. package/dist/server/services/RouterResourceService.d.mts +2 -0
  431. package/dist/server/services/RouterResourceService.mjs +2 -0
  432. package/dist/server/services/RouterService.d.mts +2 -0
  433. package/dist/server/services/RouterService.mjs +1 -0
  434. package/dist/server/services/SchedulerService.d.mts +2 -0
  435. package/dist/server/services/SchedulerService.mjs +2 -0
  436. package/dist/server/services/SeederService.d.mts +2 -0
  437. package/dist/server/services/SeederService.mjs +2 -0
  438. package/dist/server/services/ShellService.d.mts +2 -0
  439. package/dist/server/services/ShellService.mjs +1 -0
  440. package/dist/server/shell-D3lbVvdM.d.mts +7 -0
  441. package/dist/server/softDelete-zHpOCvxX.d.mts +28 -0
  442. package/dist/server/timestamp-OxM0lLhB.d.mts +9 -0
  443. package/dist/server/tokenRepository-BsrgOgMO.d.mts +7 -0
  444. package/dist/server/tokenSchema-B_NfLejF.d.mts +17 -0
  445. package/dist/server/tryCatch-Dz4OvJig.mjs +2 -0
  446. package/dist/server/update-9SpXDvjp.d.mts +19 -0
  447. package/dist/server/updateOrCreate-ytNvnRnp.d.mts +16 -0
  448. package/dist/server/userLoader-C7A1u-FB.d.mts +12 -0
  449. package/dist/server/userRepository-DgENwIFS.d.mts +7 -0
  450. package/dist/server/utils/addIdColumn.d.mts +1 -0
  451. package/dist/server/utils/addIdColumn.mjs +2 -0
  452. package/dist/server/utils/addSoftDeleteColumn.d.mts +2 -0
  453. package/dist/server/utils/addSoftDeleteColumn.mjs +2 -0
  454. package/dist/server/utils/addTimestampColumns.d.mts +2 -0
  455. package/dist/server/utils/addTimestampColumns.mjs +2 -0
  456. package/dist/server/utils/basePath.d.mts +2 -0
  457. package/dist/server/utils/basePath.mjs +2 -0
  458. package/dist/server/utils/config.d.mts +2 -0
  459. package/dist/server/utils/config.mjs +2 -0
  460. package/dist/server/utils/createLoaderFactory.d.mts +2 -0
  461. package/dist/server/utils/createLoaderFactory.mjs +2 -0
  462. package/dist/server/utils/cuid.d.mts +2 -0
  463. package/dist/server/utils/cuid.mjs +2 -0
  464. package/dist/server/utils/defineHandler.d.mts +2 -0
  465. package/dist/server/utils/defineHandler.mjs +2 -0
  466. package/dist/server/utils/defineLoader.d.mts +2 -0
  467. package/dist/server/utils/defineLoader.mjs +2 -0
  468. package/dist/server/utils/generateIndexFile.d.mts +2 -0
  469. package/dist/server/utils/generateIndexFile.mjs +2 -0
  470. package/dist/server/utils/importAll.d.mts +2 -0
  471. package/dist/server/utils/importAll.mjs +2 -0
  472. package/dist/server/utils/importOne.d.mts +2 -0
  473. package/dist/server/utils/importOne.mjs +2 -0
  474. package/dist/server/utils/printTable.d.mts +2 -0
  475. package/dist/server/utils/printTable.mjs +2 -0
  476. package/dist/server/validator-Bf0nhLLd.mjs +2 -0
  477. package/dist/shared/ValidatorService-DMd2DBVp.d.mts +103 -0
  478. package/dist/shared/ValidatorService-TM23rW-H.mjs +2 -0
  479. package/dist/shared/compose-e5D0sqye.d.mts +44 -0
  480. package/dist/shared/entities/AclEntity.d.mts +20 -0
  481. package/dist/shared/entities/AclEntity.mjs +2 -0
  482. package/dist/shared/entities/CookieMapEntity.d.mts +18 -0
  483. package/dist/shared/entities/CookieMapEntity.mjs +2 -0
  484. package/dist/shared/entities/DriveConfigEntity.d.mts +129 -0
  485. package/dist/shared/entities/DriveConfigEntity.mjs +2 -0
  486. package/dist/shared/entities/DriveEntryEntity.d.mts +11 -0
  487. package/dist/shared/entities/DriveEntryEntity.mjs +2 -0
  488. package/dist/shared/entities/FileEntity.d.mts +33 -0
  489. package/dist/shared/entities/FileEntity.mjs +2 -0
  490. package/dist/shared/entities/FileMetaEntity.d.mts +27 -0
  491. package/dist/shared/entities/FileMetaEntity.mjs +2 -0
  492. package/dist/shared/entities/FileUploadSessionEntity.d.mts +32 -0
  493. package/dist/shared/entities/FileUploadSessionEntity.mjs +2 -0
  494. package/dist/shared/entities/GitBranchEntity.d.mts +11 -0
  495. package/dist/shared/entities/GitBranchEntity.mjs +2 -0
  496. package/dist/shared/entities/GitCommitEntity.d.mts +14 -0
  497. package/dist/shared/entities/GitCommitEntity.mjs +2 -0
  498. package/dist/shared/entities/HeaderMapEntity.d.mts +18 -0
  499. package/dist/shared/entities/HeaderMapEntity.mjs +2 -0
  500. package/dist/shared/entities/LifecycleHook.d.mts +22 -0
  501. package/dist/shared/entities/LifecycleHook.mjs +2 -0
  502. package/dist/shared/entities/ModuleEntity.d.mts +28 -0
  503. package/dist/shared/entities/ModuleEntity.mjs +2 -0
  504. package/dist/shared/entities/ModuleManifestEntity.d.mts +31 -0
  505. package/dist/shared/entities/ModuleManifestEntity.mjs +2 -0
  506. package/dist/shared/entities/PaginationEntity.d.mts +13 -0
  507. package/dist/shared/entities/PaginationEntity.mjs +2 -0
  508. package/dist/shared/entities/PermissionEntity.d.mts +23 -0
  509. package/dist/shared/entities/PermissionEntity.mjs +2 -0
  510. package/dist/shared/entities/PluginEntity.d.mts +21 -0
  511. package/dist/shared/entities/PluginEntity.mjs +2 -0
  512. package/dist/shared/entities/RoleEntity.d.mts +26 -0
  513. package/dist/shared/entities/RoleEntity.mjs +2 -0
  514. package/dist/shared/entities/UserEntity.d.mts +34 -0
  515. package/dist/shared/entities/UserEntity.mjs +2 -0
  516. package/dist/shared/exceptions/BaseException.d.mts +9 -0
  517. package/dist/shared/exceptions/BaseException.mjs +2 -0
  518. package/dist/shared/exceptions/ShellException.d.mts +12 -0
  519. package/dist/shared/exceptions/ShellException.mjs +2 -0
  520. package/dist/shared/facades/validator.d.mts +7 -0
  521. package/dist/shared/facades/validator.mjs +2 -0
  522. package/dist/shared/index.d.mts +49 -1327
  523. package/dist/shared/index.mjs +1 -2
  524. package/dist/shared/mixins/BaseEntityMixin.d.mts +21 -0
  525. package/dist/shared/mixins/BaseEntityMixin.mjs +2 -0
  526. package/dist/shared/mixins/HooksMixin.d.mts +31 -0
  527. package/dist/shared/mixins/HooksMixin.mjs +2 -0
  528. package/dist/shared/mixins/SoftDeleteMixin.d.mts +11 -0
  529. package/dist/shared/mixins/SoftDeleteMixin.mjs +2 -0
  530. package/dist/shared/mixins/TimestampMixin.d.mts +12 -0
  531. package/dist/shared/mixins/TimestampMixin.mjs +2 -0
  532. package/dist/shared/schemas/dashboardMetaSchema.d.mts +129 -0
  533. package/dist/shared/schemas/dashboardMetaSchema.mjs +2 -0
  534. package/dist/shared/schemas/dashboardSchema.d.mts +128 -0
  535. package/dist/shared/schemas/dashboardSchema.mjs +2 -0
  536. package/dist/shared/schemas/permissionAssignmentSchema.d.mts +15 -0
  537. package/dist/shared/schemas/permissionAssignmentSchema.mjs +2 -0
  538. package/dist/shared/schemas/permissionSchema.d.mts +18 -0
  539. package/dist/shared/schemas/permissionSchema.mjs +2 -0
  540. package/dist/shared/schemas/tokenSchema.d.mts +17 -0
  541. package/dist/shared/schemas/tokenSchema.mjs +2 -0
  542. package/dist/shared/schemas/userSchema.d.mts +168 -0
  543. package/dist/shared/schemas/userSchema.mjs +2 -0
  544. package/dist/shared/services/ConfigService.d.mts +26 -0
  545. package/dist/shared/services/ConfigService.mjs +2 -0
  546. package/dist/shared/services/ContainerService.d.mts +20 -0
  547. package/dist/shared/services/ContainerService.mjs +2 -0
  548. package/dist/shared/services/EmmitterService.d.mts +57 -0
  549. package/dist/shared/services/EmmitterService.mjs +2 -0
  550. package/dist/shared/services/LifecycleService.d.mts +45 -0
  551. package/dist/shared/services/LifecycleService.mjs +2 -0
  552. package/dist/shared/services/LoggerService.d.mts +12 -0
  553. package/dist/shared/services/LoggerService.mjs +2 -0
  554. package/dist/shared/services/TranslatorService.d.mts +26 -0
  555. package/dist/shared/services/TranslatorService.mjs +2 -0
  556. package/dist/shared/services/UploadService.d.mts +9 -0
  557. package/dist/shared/services/UploadService.mjs +2 -0
  558. package/dist/shared/services/ValidatorService.d.mts +2 -0
  559. package/dist/shared/services/ValidatorService.mjs +1 -0
  560. package/dist/shared/typing-CBF7x7JF.d.mts +7 -0
  561. package/dist/shared/utils/compose.d.mts +2 -0
  562. package/dist/shared/utils/compose.mjs +2 -0
  563. package/dist/shared/utils/createId.d.mts +5 -0
  564. package/dist/shared/utils/createId.mjs +2 -0
  565. package/dist/shared/utils/flatten.d.mts +6 -0
  566. package/dist/shared/utils/flatten.mjs +2 -0
  567. package/dist/shared/utils/formatBytes.d.mts +5 -0
  568. package/dist/shared/utils/formatBytes.mjs +2 -0
  569. package/dist/shared/utils/index.d.mts +7 -0
  570. package/dist/shared/utils/index.mjs +1 -0
  571. package/dist/shared/utils/matchPaths.d.mts +5 -0
  572. package/dist/shared/utils/matchPaths.mjs +2 -0
  573. package/dist/shared/utils/parseRouteUrl.d.mts +6 -0
  574. package/dist/shared/utils/parseRouteUrl.mjs +2 -0
  575. package/dist/shared/utils/safeJson.d.mts +6 -0
  576. package/dist/shared/utils/safeJson.mjs +2 -0
  577. package/dist/shared/utils/tryCatch.d.mts +16 -0
  578. package/dist/shared/utils/tryCatch.mjs +2 -0
  579. package/dist/shared/utils/typing.d.mts +2 -0
  580. package/dist/shared/utils/typing.mjs +1 -0
  581. package/package.json +14 -16
  582. package/src/build/createTsdownConfig.ts +22 -0
  583. package/src/build/createViteConfig.ts +51 -0
  584. package/src/client/components.ts +1 -0
  585. package/src/client/composables/useFetchPagination.ts +6 -1
  586. package/src/client/composables/useForm.ts +1 -1
  587. package/src/client/composables/useRoute.ts +10 -0
  588. package/src/client/composables/useRouteQuery.ts +5 -4
  589. package/src/client/facades/emmitter.ts +1 -1
  590. package/src/client/index.ts +1 -0
  591. package/src/client/services/LayoutService.ts +1 -1
  592. package/src/client/zenith-env.d.ts +2 -1
  593. package/src/server/__tests__/helpers/createUser.ts +1 -1
  594. package/src/server/__tests__/setup.ts +1 -1
  595. package/src/server/commands/pluginBuild.ts +60 -0
  596. package/src/server/commands/pluginGenerateId.ts +18 -0
  597. package/src/server/contracts/HttpContextContract.ts +1 -1
  598. package/src/server/entities/MigrationEntity.ts +1 -1
  599. package/src/server/entities/PluginEntity.ts +0 -35
  600. package/src/server/entities/PluginEntryEntity.ts +0 -28
  601. package/src/server/entities/RoutineEntity.ts +1 -1
  602. package/src/server/entities/SeederEntity.ts +1 -1
  603. package/src/server/facades/emmitter.ts +2 -2
  604. package/src/server/facades/lifecycle.ts +6 -0
  605. package/src/server/gateways/DriveS3Gateway.ts +102 -32
  606. package/src/server/gateways/GitGateway.ts +2 -2
  607. package/src/server/globals.ts +2 -1
  608. package/src/server/index.ts +3 -2
  609. package/src/server/loaders/hasManyThroughLoader.ts +15 -6
  610. package/src/server/loaders/loadMetas.ts +1 -1
  611. package/src/server/middlewares/AuthMiddleware.ts +4 -3
  612. package/src/server/repositories/ConfigRepository.ts +1 -1
  613. package/src/server/repositories/UserRepository.ts +1 -1
  614. package/src/server/schemas/envSchema.ts +3 -2
  615. package/src/server/services/CliService.ts +12 -2
  616. package/src/server/services/CliWrapperService.ts +50 -4
  617. package/src/server/services/ConfigManagerService.ts +13 -5
  618. package/src/server/services/EncryptService.ts +1 -1
  619. package/src/server/services/EnvService.ts +2 -1
  620. package/src/server/services/ExceptionService.ts +2 -1
  621. package/src/server/services/HasherService.ts +6 -2
  622. package/src/server/services/HttpService.ts +24 -12
  623. package/src/server/services/MigratorService.ts +1 -1
  624. package/src/server/services/RouterService.ts +1 -1
  625. package/src/server/services/SchedulerService.ts +5 -2
  626. package/src/server/services/SeederService.ts +1 -1
  627. package/src/server/utils/basePath.ts +16 -1
  628. package/src/server/utils/config.ts +19 -0
  629. package/src/server/utils/createLoaderFactory.ts +1 -1
  630. package/src/server/utils/importAll.ts +1 -1
  631. package/src/server/utils/printTable.ts +7 -1
  632. package/src/shared/services/ConfigService.ts +5 -2
  633. package/src/shared/services/EmmitterService.ts +3 -2
  634. package/src/shared/utils/flatten.ts +1 -1
  635. package/src/shared/validators/array.ts +13 -0
  636. package/src/shared/validators/index.ts +1 -0
  637. package/src/shared/validators/paginationValidator.ts +5 -5
  638. package/src/shared/validators/urlValidator.ts +1 -1
  639. package/src/tests/services/HttpTesterService.ts +63 -0
  640. package/tsdown.config.ts +152 -121
  641. package/vite/createViteConfig.js +1 -1
  642. package/bin/zkit.js +0 -26
  643. package/cli/commands/build.js +0 -55
  644. package/cli/commands/generateLegacyFolder.js +0 -38
  645. package/cli/commands/generatePluginId.js +0 -17
  646. package/cli/config.js +0 -23
  647. package/cli/utils/createWrapper.js +0 -17
  648. package/commands/release.js +0 -78
  649. package/legacy/client/components/Alert.vue +0 -3
  650. package/legacy/client/components/AlertButton.vue +0 -3
  651. package/legacy/client/components/Button.vue +0 -3
  652. package/legacy/client/components/ClientOnly.vue +0 -3
  653. package/legacy/client/components/ColorPicker.vue +0 -3
  654. package/legacy/client/components/ColorWheel.vue +0 -3
  655. package/legacy/client/components/Component.vue +0 -3
  656. package/legacy/client/components/DataTable.vue +0 -4
  657. package/legacy/client/components/DataTablePagination.vue +0 -3
  658. package/legacy/client/components/DatePicker.vue +0 -3
  659. package/legacy/client/components/DialogForm.vue +0 -4
  660. package/legacy/client/components/FileUploader.vue +0 -3
  661. package/legacy/client/components/FormAutoFieldList.vue +0 -5
  662. package/legacy/client/components/FormAutocomplete.vue +0 -3
  663. package/legacy/client/components/FormColorPicker.vue +0 -3
  664. package/legacy/client/components/FormDatePicker.vue +0 -3
  665. package/legacy/client/components/FormFilePicker.vue +0 -3
  666. package/legacy/client/components/FormFileUploader.vue +0 -3
  667. package/legacy/client/components/FormImageUploader.vue +0 -3
  668. package/legacy/client/components/FormJsonInput.vue +0 -3
  669. package/legacy/client/components/FormSelect.vue +0 -3
  670. package/legacy/client/components/FormStringListInput.vue +0 -3
  671. package/legacy/client/components/FormSwitch.vue +0 -3
  672. package/legacy/client/components/FormTextField.vue +0 -3
  673. package/legacy/client/components/FormTextarea.vue +0 -3
  674. package/legacy/client/components/Icon.vue +0 -3
  675. package/legacy/client/components/Image.vue +0 -3
  676. package/legacy/client/components/JsonInput.vue +0 -3
  677. package/legacy/client/components/Logo.vue +0 -3
  678. package/legacy/client/components/LogoIcon.vue +0 -3
  679. package/legacy/client/components/ObjectInspect.vue +0 -3
  680. package/legacy/client/components/PageCrud.vue +0 -3
  681. package/legacy/client/components/PageSubtitle.vue +0 -3
  682. package/legacy/client/components/PageTable.vue +0 -3
  683. package/legacy/client/components/PageTitle.vue +0 -3
  684. package/legacy/client/components/Pagination.vue +0 -3
  685. package/legacy/client/components/Select.vue +0 -3
  686. package/legacy/client/components/StringListInput.vue +0 -3
  687. package/legacy/client/components/Switch.vue +0 -3
  688. package/legacy/client/components/TextField.vue +0 -3
  689. package/legacy/client/components/Textarea.vue +0 -3
  690. package/legacy/client/components/UserMenu.vue +0 -3
  691. package/legacy/client/components/index.ts +0 -349
  692. package/legacy/client/components/ui/accordion/Accordion.vue +0 -3
  693. package/legacy/client/components/ui/accordion/AccordionContent.vue +0 -3
  694. package/legacy/client/components/ui/accordion/AccordionItem.vue +0 -3
  695. package/legacy/client/components/ui/accordion/AccordionTrigger.vue +0 -3
  696. package/legacy/client/components/ui/accordion/index.ts +0 -1
  697. package/legacy/client/components/ui/alert/Alert.vue +0 -3
  698. package/legacy/client/components/ui/alert/AlertDescription.vue +0 -3
  699. package/legacy/client/components/ui/alert/AlertTitle.vue +0 -3
  700. package/legacy/client/components/ui/alert/index.ts +0 -1
  701. package/legacy/client/components/ui/alert-dialog/AlertDialog.vue +0 -3
  702. package/legacy/client/components/ui/alert-dialog/AlertDialogAction.vue +0 -3
  703. package/legacy/client/components/ui/alert-dialog/AlertDialogCancel.vue +0 -3
  704. package/legacy/client/components/ui/alert-dialog/AlertDialogContent.vue +0 -3
  705. package/legacy/client/components/ui/alert-dialog/AlertDialogDescription.vue +0 -3
  706. package/legacy/client/components/ui/alert-dialog/AlertDialogFooter.vue +0 -3
  707. package/legacy/client/components/ui/alert-dialog/AlertDialogHeader.vue +0 -3
  708. package/legacy/client/components/ui/alert-dialog/AlertDialogTitle.vue +0 -3
  709. package/legacy/client/components/ui/alert-dialog/AlertDialogTrigger.vue +0 -3
  710. package/legacy/client/components/ui/alert-dialog/index.ts +0 -1
  711. package/legacy/client/components/ui/aspect-ratio/AspectRatio.vue +0 -3
  712. package/legacy/client/components/ui/aspect-ratio/index.ts +0 -1
  713. package/legacy/client/components/ui/avatar/Avatar.vue +0 -3
  714. package/legacy/client/components/ui/avatar/AvatarFallback.vue +0 -3
  715. package/legacy/client/components/ui/avatar/AvatarImage.vue +0 -3
  716. package/legacy/client/components/ui/avatar/index.ts +0 -1
  717. package/legacy/client/components/ui/badge/Badge.vue +0 -3
  718. package/legacy/client/components/ui/badge/index.ts +0 -1
  719. package/legacy/client/components/ui/breadcrumb/Breadcrumb.vue +0 -3
  720. package/legacy/client/components/ui/breadcrumb/BreadcrumbEllipsis.vue +0 -3
  721. package/legacy/client/components/ui/breadcrumb/BreadcrumbItem.vue +0 -3
  722. package/legacy/client/components/ui/breadcrumb/BreadcrumbLink.vue +0 -3
  723. package/legacy/client/components/ui/breadcrumb/BreadcrumbList.vue +0 -3
  724. package/legacy/client/components/ui/breadcrumb/BreadcrumbPage.vue +0 -3
  725. package/legacy/client/components/ui/breadcrumb/BreadcrumbSeparator.vue +0 -3
  726. package/legacy/client/components/ui/breadcrumb/index.ts +0 -1
  727. package/legacy/client/components/ui/button/Button.vue +0 -3
  728. package/legacy/client/components/ui/button/index.ts +0 -1
  729. package/legacy/client/components/ui/calendar/Calendar.vue +0 -3
  730. package/legacy/client/components/ui/calendar/CalendarCell.vue +0 -3
  731. package/legacy/client/components/ui/calendar/CalendarCellTrigger.vue +0 -3
  732. package/legacy/client/components/ui/calendar/CalendarGrid.vue +0 -3
  733. package/legacy/client/components/ui/calendar/CalendarGridBody.vue +0 -3
  734. package/legacy/client/components/ui/calendar/CalendarGridHead.vue +0 -3
  735. package/legacy/client/components/ui/calendar/CalendarGridRow.vue +0 -3
  736. package/legacy/client/components/ui/calendar/CalendarHeadCell.vue +0 -3
  737. package/legacy/client/components/ui/calendar/CalendarHeader.vue +0 -3
  738. package/legacy/client/components/ui/calendar/CalendarHeading.vue +0 -3
  739. package/legacy/client/components/ui/calendar/CalendarNextButton.vue +0 -3
  740. package/legacy/client/components/ui/calendar/CalendarPrevButton.vue +0 -3
  741. package/legacy/client/components/ui/calendar/index.ts +0 -1
  742. package/legacy/client/components/ui/card/Card.vue +0 -3
  743. package/legacy/client/components/ui/card/CardAction.vue +0 -3
  744. package/legacy/client/components/ui/card/CardContent.vue +0 -3
  745. package/legacy/client/components/ui/card/CardDescription.vue +0 -3
  746. package/legacy/client/components/ui/card/CardFooter.vue +0 -3
  747. package/legacy/client/components/ui/card/CardHeader.vue +0 -3
  748. package/legacy/client/components/ui/card/CardTitle.vue +0 -3
  749. package/legacy/client/components/ui/card/index.ts +0 -1
  750. package/legacy/client/components/ui/carousel/Carousel.vue +0 -3
  751. package/legacy/client/components/ui/carousel/CarouselContent.vue +0 -3
  752. package/legacy/client/components/ui/carousel/CarouselItem.vue +0 -3
  753. package/legacy/client/components/ui/carousel/CarouselNext.vue +0 -3
  754. package/legacy/client/components/ui/carousel/CarouselPrevious.vue +0 -3
  755. package/legacy/client/components/ui/carousel/index.ts +0 -1
  756. package/legacy/client/components/ui/checkbox/Checkbox.vue +0 -3
  757. package/legacy/client/components/ui/checkbox/index.ts +0 -1
  758. package/legacy/client/components/ui/collapsible/Collapsible.vue +0 -3
  759. package/legacy/client/components/ui/collapsible/CollapsibleContent.vue +0 -3
  760. package/legacy/client/components/ui/collapsible/CollapsibleTrigger.vue +0 -3
  761. package/legacy/client/components/ui/collapsible/index.ts +0 -1
  762. package/legacy/client/components/ui/combobox/Combobox.vue +0 -3
  763. package/legacy/client/components/ui/combobox/ComboboxAnchor.vue +0 -3
  764. package/legacy/client/components/ui/combobox/ComboboxEmpty.vue +0 -3
  765. package/legacy/client/components/ui/combobox/ComboboxGroup.vue +0 -3
  766. package/legacy/client/components/ui/combobox/ComboboxInput.vue +0 -3
  767. package/legacy/client/components/ui/combobox/ComboboxItem.vue +0 -3
  768. package/legacy/client/components/ui/combobox/ComboboxItemIndicator.vue +0 -3
  769. package/legacy/client/components/ui/combobox/ComboboxList.vue +0 -3
  770. package/legacy/client/components/ui/combobox/ComboboxSeparator.vue +0 -3
  771. package/legacy/client/components/ui/combobox/ComboboxTrigger.vue +0 -3
  772. package/legacy/client/components/ui/combobox/ComboboxViewport.vue +0 -3
  773. package/legacy/client/components/ui/combobox/index.ts +0 -1
  774. package/legacy/client/components/ui/command/Command.vue +0 -3
  775. package/legacy/client/components/ui/command/CommandDialog.vue +0 -3
  776. package/legacy/client/components/ui/command/CommandEmpty.vue +0 -3
  777. package/legacy/client/components/ui/command/CommandGroup.vue +0 -3
  778. package/legacy/client/components/ui/command/CommandInput.vue +0 -3
  779. package/legacy/client/components/ui/command/CommandItem.vue +0 -3
  780. package/legacy/client/components/ui/command/CommandList.vue +0 -3
  781. package/legacy/client/components/ui/command/CommandSeparator.vue +0 -3
  782. package/legacy/client/components/ui/command/CommandShortcut.vue +0 -3
  783. package/legacy/client/components/ui/command/index.ts +0 -1
  784. package/legacy/client/components/ui/context-menu/ContextMenu.vue +0 -3
  785. package/legacy/client/components/ui/context-menu/ContextMenuCheckboxItem.vue +0 -3
  786. package/legacy/client/components/ui/context-menu/ContextMenuContent.vue +0 -3
  787. package/legacy/client/components/ui/context-menu/ContextMenuGroup.vue +0 -3
  788. package/legacy/client/components/ui/context-menu/ContextMenuItem.vue +0 -3
  789. package/legacy/client/components/ui/context-menu/ContextMenuLabel.vue +0 -3
  790. package/legacy/client/components/ui/context-menu/ContextMenuPortal.vue +0 -3
  791. package/legacy/client/components/ui/context-menu/ContextMenuRadioGroup.vue +0 -3
  792. package/legacy/client/components/ui/context-menu/ContextMenuRadioItem.vue +0 -3
  793. package/legacy/client/components/ui/context-menu/ContextMenuSeparator.vue +0 -3
  794. package/legacy/client/components/ui/context-menu/ContextMenuShortcut.vue +0 -3
  795. package/legacy/client/components/ui/context-menu/ContextMenuSub.vue +0 -3
  796. package/legacy/client/components/ui/context-menu/ContextMenuSubContent.vue +0 -3
  797. package/legacy/client/components/ui/context-menu/ContextMenuSubTrigger.vue +0 -3
  798. package/legacy/client/components/ui/context-menu/ContextMenuTrigger.vue +0 -3
  799. package/legacy/client/components/ui/context-menu/index.ts +0 -1
  800. package/legacy/client/components/ui/dialog/Dialog.vue +0 -3
  801. package/legacy/client/components/ui/dialog/DialogClose.vue +0 -3
  802. package/legacy/client/components/ui/dialog/DialogContent.vue +0 -3
  803. package/legacy/client/components/ui/dialog/DialogDescription.vue +0 -3
  804. package/legacy/client/components/ui/dialog/DialogFooter.vue +0 -3
  805. package/legacy/client/components/ui/dialog/DialogHeader.vue +0 -3
  806. package/legacy/client/components/ui/dialog/DialogOverlay.vue +0 -3
  807. package/legacy/client/components/ui/dialog/DialogScrollContent.vue +0 -3
  808. package/legacy/client/components/ui/dialog/DialogTitle.vue +0 -3
  809. package/legacy/client/components/ui/dialog/DialogTrigger.vue +0 -3
  810. package/legacy/client/components/ui/dialog/index.ts +0 -1
  811. package/legacy/client/components/ui/drawer/Drawer.vue +0 -3
  812. package/legacy/client/components/ui/drawer/DrawerClose.vue +0 -3
  813. package/legacy/client/components/ui/drawer/DrawerContent.vue +0 -3
  814. package/legacy/client/components/ui/drawer/DrawerDescription.vue +0 -3
  815. package/legacy/client/components/ui/drawer/DrawerFooter.vue +0 -3
  816. package/legacy/client/components/ui/drawer/DrawerHeader.vue +0 -3
  817. package/legacy/client/components/ui/drawer/DrawerOverlay.vue +0 -3
  818. package/legacy/client/components/ui/drawer/DrawerTitle.vue +0 -3
  819. package/legacy/client/components/ui/drawer/DrawerTrigger.vue +0 -3
  820. package/legacy/client/components/ui/drawer/index.ts +0 -1
  821. package/legacy/client/components/ui/dropdown-menu/DropdownMenu.vue +0 -3
  822. package/legacy/client/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -3
  823. package/legacy/client/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -3
  824. package/legacy/client/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -3
  825. package/legacy/client/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -3
  826. package/legacy/client/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -3
  827. package/legacy/client/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -3
  828. package/legacy/client/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -3
  829. package/legacy/client/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -3
  830. package/legacy/client/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -3
  831. package/legacy/client/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -3
  832. package/legacy/client/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -3
  833. package/legacy/client/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -3
  834. package/legacy/client/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -3
  835. package/legacy/client/components/ui/dropdown-menu/index.ts +0 -1
  836. package/legacy/client/components/ui/form/FormControl.vue +0 -3
  837. package/legacy/client/components/ui/form/FormDescription.vue +0 -3
  838. package/legacy/client/components/ui/form/FormItem.vue +0 -3
  839. package/legacy/client/components/ui/form/FormLabel.vue +0 -3
  840. package/legacy/client/components/ui/form/FormMessage.vue +0 -3
  841. package/legacy/client/components/ui/form/index.ts +0 -1
  842. package/legacy/client/components/ui/hover-card/HoverCard.vue +0 -3
  843. package/legacy/client/components/ui/hover-card/HoverCardContent.vue +0 -3
  844. package/legacy/client/components/ui/hover-card/HoverCardTrigger.vue +0 -3
  845. package/legacy/client/components/ui/hover-card/index.ts +0 -1
  846. package/legacy/client/components/ui/input/Input.vue +0 -3
  847. package/legacy/client/components/ui/input/index.ts +0 -1
  848. package/legacy/client/components/ui/label/Label.vue +0 -3
  849. package/legacy/client/components/ui/label/index.ts +0 -1
  850. package/legacy/client/components/ui/menubar/Menubar.vue +0 -3
  851. package/legacy/client/components/ui/menubar/MenubarCheckboxItem.vue +0 -3
  852. package/legacy/client/components/ui/menubar/MenubarContent.vue +0 -3
  853. package/legacy/client/components/ui/menubar/MenubarGroup.vue +0 -3
  854. package/legacy/client/components/ui/menubar/MenubarItem.vue +0 -3
  855. package/legacy/client/components/ui/menubar/MenubarLabel.vue +0 -3
  856. package/legacy/client/components/ui/menubar/MenubarMenu.vue +0 -3
  857. package/legacy/client/components/ui/menubar/MenubarRadioGroup.vue +0 -3
  858. package/legacy/client/components/ui/menubar/MenubarRadioItem.vue +0 -3
  859. package/legacy/client/components/ui/menubar/MenubarSeparator.vue +0 -3
  860. package/legacy/client/components/ui/menubar/MenubarShortcut.vue +0 -3
  861. package/legacy/client/components/ui/menubar/MenubarSub.vue +0 -3
  862. package/legacy/client/components/ui/menubar/MenubarSubContent.vue +0 -3
  863. package/legacy/client/components/ui/menubar/MenubarSubTrigger.vue +0 -3
  864. package/legacy/client/components/ui/menubar/MenubarTrigger.vue +0 -3
  865. package/legacy/client/components/ui/menubar/index.ts +0 -1
  866. package/legacy/client/components/ui/navigation-menu/NavigationMenu.vue +0 -3
  867. package/legacy/client/components/ui/navigation-menu/NavigationMenuContent.vue +0 -3
  868. package/legacy/client/components/ui/navigation-menu/NavigationMenuIndicator.vue +0 -3
  869. package/legacy/client/components/ui/navigation-menu/NavigationMenuItem.vue +0 -3
  870. package/legacy/client/components/ui/navigation-menu/NavigationMenuLink.vue +0 -3
  871. package/legacy/client/components/ui/navigation-menu/NavigationMenuList.vue +0 -3
  872. package/legacy/client/components/ui/navigation-menu/NavigationMenuTrigger.vue +0 -3
  873. package/legacy/client/components/ui/navigation-menu/NavigationMenuViewport.vue +0 -3
  874. package/legacy/client/components/ui/navigation-menu/index.ts +0 -1
  875. package/legacy/client/components/ui/number-field/NumberField.vue +0 -3
  876. package/legacy/client/components/ui/number-field/NumberFieldContent.vue +0 -3
  877. package/legacy/client/components/ui/number-field/NumberFieldDecrement.vue +0 -3
  878. package/legacy/client/components/ui/number-field/NumberFieldIncrement.vue +0 -3
  879. package/legacy/client/components/ui/number-field/NumberFieldInput.vue +0 -3
  880. package/legacy/client/components/ui/number-field/index.ts +0 -1
  881. package/legacy/client/components/ui/pagination/Pagination.vue +0 -3
  882. package/legacy/client/components/ui/pagination/PaginationContent.vue +0 -3
  883. package/legacy/client/components/ui/pagination/PaginationEllipsis.vue +0 -3
  884. package/legacy/client/components/ui/pagination/PaginationFirst.vue +0 -3
  885. package/legacy/client/components/ui/pagination/PaginationItem.vue +0 -3
  886. package/legacy/client/components/ui/pagination/PaginationLast.vue +0 -3
  887. package/legacy/client/components/ui/pagination/PaginationNext.vue +0 -3
  888. package/legacy/client/components/ui/pagination/PaginationPrevious.vue +0 -3
  889. package/legacy/client/components/ui/pagination/index.ts +0 -1
  890. package/legacy/client/components/ui/pin-input/PinInput.vue +0 -3
  891. package/legacy/client/components/ui/pin-input/PinInputGroup.vue +0 -3
  892. package/legacy/client/components/ui/pin-input/PinInputSeparator.vue +0 -3
  893. package/legacy/client/components/ui/pin-input/PinInputSlot.vue +0 -3
  894. package/legacy/client/components/ui/pin-input/index.ts +0 -1
  895. package/legacy/client/components/ui/popover/Popover.vue +0 -3
  896. package/legacy/client/components/ui/popover/PopoverAnchor.vue +0 -3
  897. package/legacy/client/components/ui/popover/PopoverContent.vue +0 -3
  898. package/legacy/client/components/ui/popover/PopoverTrigger.vue +0 -3
  899. package/legacy/client/components/ui/popover/index.ts +0 -1
  900. package/legacy/client/components/ui/progress/Progress.vue +0 -3
  901. package/legacy/client/components/ui/progress/index.ts +0 -1
  902. package/legacy/client/components/ui/radio-group/RadioGroup.vue +0 -3
  903. package/legacy/client/components/ui/radio-group/RadioGroupItem.vue +0 -3
  904. package/legacy/client/components/ui/radio-group/index.ts +0 -1
  905. package/legacy/client/components/ui/range-calendar/RangeCalendar.vue +0 -3
  906. package/legacy/client/components/ui/range-calendar/RangeCalendarCell.vue +0 -3
  907. package/legacy/client/components/ui/range-calendar/RangeCalendarCellTrigger.vue +0 -3
  908. package/legacy/client/components/ui/range-calendar/RangeCalendarGrid.vue +0 -3
  909. package/legacy/client/components/ui/range-calendar/RangeCalendarGridBody.vue +0 -3
  910. package/legacy/client/components/ui/range-calendar/RangeCalendarGridHead.vue +0 -3
  911. package/legacy/client/components/ui/range-calendar/RangeCalendarGridRow.vue +0 -3
  912. package/legacy/client/components/ui/range-calendar/RangeCalendarHeadCell.vue +0 -3
  913. package/legacy/client/components/ui/range-calendar/RangeCalendarHeader.vue +0 -3
  914. package/legacy/client/components/ui/range-calendar/RangeCalendarHeading.vue +0 -3
  915. package/legacy/client/components/ui/range-calendar/RangeCalendarNextButton.vue +0 -3
  916. package/legacy/client/components/ui/range-calendar/RangeCalendarPrevButton.vue +0 -3
  917. package/legacy/client/components/ui/range-calendar/index.ts +0 -1
  918. package/legacy/client/components/ui/resizable/ResizableHandle.vue +0 -3
  919. package/legacy/client/components/ui/resizable/ResizablePanel.vue +0 -3
  920. package/legacy/client/components/ui/resizable/ResizablePanelGroup.vue +0 -3
  921. package/legacy/client/components/ui/resizable/index.ts +0 -1
  922. package/legacy/client/components/ui/scroll-area/ScrollArea.vue +0 -3
  923. package/legacy/client/components/ui/scroll-area/ScrollBar.vue +0 -3
  924. package/legacy/client/components/ui/scroll-area/index.ts +0 -1
  925. package/legacy/client/components/ui/select/Select.vue +0 -3
  926. package/legacy/client/components/ui/select/SelectContent.vue +0 -3
  927. package/legacy/client/components/ui/select/SelectGroup.vue +0 -3
  928. package/legacy/client/components/ui/select/SelectItem.vue +0 -3
  929. package/legacy/client/components/ui/select/SelectItemText.vue +0 -3
  930. package/legacy/client/components/ui/select/SelectLabel.vue +0 -3
  931. package/legacy/client/components/ui/select/SelectScrollDownButton.vue +0 -3
  932. package/legacy/client/components/ui/select/SelectScrollUpButton.vue +0 -3
  933. package/legacy/client/components/ui/select/SelectSeparator.vue +0 -3
  934. package/legacy/client/components/ui/select/SelectTrigger.vue +0 -3
  935. package/legacy/client/components/ui/select/SelectValue.vue +0 -3
  936. package/legacy/client/components/ui/select/index.ts +0 -1
  937. package/legacy/client/components/ui/separator/Separator.vue +0 -3
  938. package/legacy/client/components/ui/separator/index.ts +0 -1
  939. package/legacy/client/components/ui/sheet/Sheet.vue +0 -3
  940. package/legacy/client/components/ui/sheet/SheetClose.vue +0 -3
  941. package/legacy/client/components/ui/sheet/SheetContent.vue +0 -3
  942. package/legacy/client/components/ui/sheet/SheetDescription.vue +0 -3
  943. package/legacy/client/components/ui/sheet/SheetFooter.vue +0 -3
  944. package/legacy/client/components/ui/sheet/SheetHeader.vue +0 -3
  945. package/legacy/client/components/ui/sheet/SheetOverlay.vue +0 -3
  946. package/legacy/client/components/ui/sheet/SheetTitle.vue +0 -3
  947. package/legacy/client/components/ui/sheet/SheetTrigger.vue +0 -3
  948. package/legacy/client/components/ui/sheet/index.ts +0 -1
  949. package/legacy/client/components/ui/sidebar/Sidebar.vue +0 -3
  950. package/legacy/client/components/ui/sidebar/SidebarContent.vue +0 -3
  951. package/legacy/client/components/ui/sidebar/SidebarFooter.vue +0 -3
  952. package/legacy/client/components/ui/sidebar/SidebarGroup.vue +0 -3
  953. package/legacy/client/components/ui/sidebar/SidebarGroupAction.vue +0 -3
  954. package/legacy/client/components/ui/sidebar/SidebarGroupContent.vue +0 -3
  955. package/legacy/client/components/ui/sidebar/SidebarGroupLabel.vue +0 -3
  956. package/legacy/client/components/ui/sidebar/SidebarHeader.vue +0 -3
  957. package/legacy/client/components/ui/sidebar/SidebarInput.vue +0 -3
  958. package/legacy/client/components/ui/sidebar/SidebarInset.vue +0 -3
  959. package/legacy/client/components/ui/sidebar/SidebarMenu.vue +0 -3
  960. package/legacy/client/components/ui/sidebar/SidebarMenuAction.vue +0 -3
  961. package/legacy/client/components/ui/sidebar/SidebarMenuBadge.vue +0 -3
  962. package/legacy/client/components/ui/sidebar/SidebarMenuButton.vue +0 -3
  963. package/legacy/client/components/ui/sidebar/SidebarMenuButtonChild.vue +0 -3
  964. package/legacy/client/components/ui/sidebar/SidebarMenuItem.vue +0 -3
  965. package/legacy/client/components/ui/sidebar/SidebarMenuSkeleton.vue +0 -3
  966. package/legacy/client/components/ui/sidebar/SidebarMenuSub.vue +0 -3
  967. package/legacy/client/components/ui/sidebar/SidebarMenuSubButton.vue +0 -3
  968. package/legacy/client/components/ui/sidebar/SidebarMenuSubItem.vue +0 -3
  969. package/legacy/client/components/ui/sidebar/SidebarProvider.vue +0 -3
  970. package/legacy/client/components/ui/sidebar/SidebarRail.vue +0 -3
  971. package/legacy/client/components/ui/sidebar/SidebarSeparator.vue +0 -3
  972. package/legacy/client/components/ui/sidebar/SidebarTrigger.vue +0 -3
  973. package/legacy/client/components/ui/sidebar/index.ts +0 -1
  974. package/legacy/client/components/ui/skeleton/Skeleton.vue +0 -3
  975. package/legacy/client/components/ui/skeleton/index.ts +0 -1
  976. package/legacy/client/components/ui/slider/Slider.vue +0 -3
  977. package/legacy/client/components/ui/slider/index.ts +0 -1
  978. package/legacy/client/components/ui/sonner/Sonner.vue +0 -3
  979. package/legacy/client/components/ui/sonner/index.ts +0 -1
  980. package/legacy/client/components/ui/stepper/Stepper.vue +0 -3
  981. package/legacy/client/components/ui/stepper/StepperDescription.vue +0 -3
  982. package/legacy/client/components/ui/stepper/StepperIndicator.vue +0 -3
  983. package/legacy/client/components/ui/stepper/StepperItem.vue +0 -3
  984. package/legacy/client/components/ui/stepper/StepperSeparator.vue +0 -3
  985. package/legacy/client/components/ui/stepper/StepperTitle.vue +0 -3
  986. package/legacy/client/components/ui/stepper/StepperTrigger.vue +0 -3
  987. package/legacy/client/components/ui/stepper/index.ts +0 -1
  988. package/legacy/client/components/ui/switch/Switch.vue +0 -3
  989. package/legacy/client/components/ui/switch/index.ts +0 -1
  990. package/legacy/client/components/ui/table/Table.vue +0 -3
  991. package/legacy/client/components/ui/table/TableBody.vue +0 -3
  992. package/legacy/client/components/ui/table/TableCaption.vue +0 -3
  993. package/legacy/client/components/ui/table/TableCell.vue +0 -3
  994. package/legacy/client/components/ui/table/TableEmpty.vue +0 -3
  995. package/legacy/client/components/ui/table/TableFooter.vue +0 -3
  996. package/legacy/client/components/ui/table/TableHead.vue +0 -3
  997. package/legacy/client/components/ui/table/TableHeader.vue +0 -3
  998. package/legacy/client/components/ui/table/TableRow.vue +0 -3
  999. package/legacy/client/components/ui/table/index.ts +0 -1
  1000. package/legacy/client/components/ui/tabs/Tabs.vue +0 -3
  1001. package/legacy/client/components/ui/tabs/TabsContent.vue +0 -3
  1002. package/legacy/client/components/ui/tabs/TabsList.vue +0 -3
  1003. package/legacy/client/components/ui/tabs/TabsTrigger.vue +0 -3
  1004. package/legacy/client/components/ui/tabs/index.ts +0 -1
  1005. package/legacy/client/components/ui/tags-input/TagsInput.vue +0 -3
  1006. package/legacy/client/components/ui/tags-input/TagsInputInput.vue +0 -3
  1007. package/legacy/client/components/ui/tags-input/TagsInputItem.vue +0 -3
  1008. package/legacy/client/components/ui/tags-input/TagsInputItemDelete.vue +0 -3
  1009. package/legacy/client/components/ui/tags-input/TagsInputItemText.vue +0 -3
  1010. package/legacy/client/components/ui/tags-input/index.ts +0 -1
  1011. package/legacy/client/components/ui/textarea/Textarea.vue +0 -3
  1012. package/legacy/client/components/ui/textarea/index.ts +0 -1
  1013. package/legacy/client/components/ui/toggle/Toggle.vue +0 -3
  1014. package/legacy/client/components/ui/toggle/index.ts +0 -1
  1015. package/legacy/client/components/ui/toggle-group/ToggleGroup.vue +0 -3
  1016. package/legacy/client/components/ui/toggle-group/ToggleGroupItem.vue +0 -3
  1017. package/legacy/client/components/ui/toggle-group/index.ts +0 -1
  1018. package/legacy/client/components/ui/tooltip/Tooltip.vue +0 -3
  1019. package/legacy/client/components/ui/tooltip/TooltipContent.vue +0 -3
  1020. package/legacy/client/components/ui/tooltip/TooltipProvider.vue +0 -3
  1021. package/legacy/client/components/ui/tooltip/TooltipTrigger.vue +0 -3
  1022. package/legacy/client/components/ui/tooltip/index.ts +0 -1
  1023. package/legacy/client/facades/acl.facade.ts +0 -1
  1024. package/legacy/client/facades/app.facade.ts +0 -6
  1025. package/legacy/client/facades/auth.facade.ts +0 -1
  1026. package/legacy/client/facades/config.facade.ts +0 -1
  1027. package/legacy/client/facades/fetch.facade.ts +0 -1
  1028. package/legacy/client/facades/logger.facade.ts +0 -1
  1029. package/legacy/client/facades/menu.facade.ts +0 -1
  1030. package/legacy/client/facades/router.facade.ts +0 -1
  1031. package/legacy/client/facades/translator.facade.ts +0 -10
  1032. package/legacy/client/layouts/AdminLayout.vue +0 -3
  1033. package/legacy/client/utils/autoPages.ts +0 -1
  1034. package/legacy/client/utils/createId.ts +0 -1
  1035. package/legacy/client/utils/di.ts +0 -1
  1036. package/legacy/client/utils/fetcher.ts +0 -1
  1037. package/legacy/client/utils/file.ts +0 -1
  1038. package/legacy/client/utils/index.ts +0 -7
  1039. package/legacy/client/utils/logger.ts +0 -1
  1040. package/legacy/client/utils/toast.ts +0 -1
  1041. package/legacy/server/entities/file.entity.ts +0 -4
  1042. package/legacy/server/exceptions/base.ts +0 -4
  1043. package/legacy/server/facades/arte.facade.ts +0 -6
  1044. package/legacy/server/facades/config.facade.ts +0 -4
  1045. package/legacy/server/facades/db.facade.ts +0 -4
  1046. package/legacy/server/facades/download.facade.ts +0 -4
  1047. package/legacy/server/facades/drive.facade.ts +0 -4
  1048. package/legacy/server/facades/emmitter.facade.ts +0 -4
  1049. package/legacy/server/facades/logger.facade.ts +0 -4
  1050. package/legacy/server/facades/router.facade.ts +0 -4
  1051. package/legacy/server/facades/scheduler.facade.ts +0 -4
  1052. package/legacy/server/middlewares/auth.middleware.ts +0 -6
  1053. package/legacy/server/middlewares/authorization.middleware.ts +0 -8
  1054. package/legacy/server/mixins/hooks.mixin.ts +0 -6
  1055. package/legacy/server/mixins/model.mixin.ts +0 -6
  1056. package/legacy/server/mixins/modelConfig.mixin.ts +0 -4
  1057. package/legacy/server/queries/index.ts +0 -6
  1058. package/legacy/server/services/metadataQuery.service.ts +0 -6
  1059. package/legacy/server/services/routerResourceConfig.service.ts +0 -5
  1060. package/legacy/shared/services/validator.service.ts +0 -4
  1061. package/legacy/shared/utils/compose.ts +0 -8
  1062. package/legacy/shared/utils/tryCatch.ts +0 -7
  1063. package/src/server/services/HttpTesterService.ts +0 -62
@@ -1,2890 +1,127 @@
1
- import { Command } from "commander";
2
- import chalk from "chalk";
3
- import fs, { ReadStream } from "fs";
4
- import * as v from "valibot";
5
- import { InferOutput } from "valibot";
6
- import * as _$_casl_ability0 from "@casl/ability";
7
- import { defineAbility } from "@casl/ability";
8
- import * as inquirer from "@inquirer/prompts";
9
- import cp from "child_process";
10
- import ms from "ms";
11
- import { S3Client } from "@aws-sdk/client-s3";
12
- import * as _$undici from "undici";
13
- import { RequestInit } from "undici";
14
- import dotenv from "dotenv";
15
- import express, { CookieOptions, Request as Request$1, Response as Response$1 } from "express";
16
- import cors from "cors";
17
- import * as _$kysely from "kysely";
18
- import { ColumnType, CreateTableBuilder as CreateTableBuilder$1, ExpressionBuilder as ExpressionBuilder$1, ExpressionWrapper, Generated, Insertable, Kysely, SelectQueryBuilder, Selectable, Updateable } from "kysely";
19
- import supertest, { Test } from "supertest";
20
- import { Job } from "node-schedule";
21
- import { ResolvableHead } from "@unhead/vue";
22
- import { Server } from "http";
23
- import { ChildProcess } from "node:child_process";
24
- import { Token, UserEntity } from "@sidekick-coder/zenith-kit/shared";
25
-
26
- //#region src/server/utils/printTable.d.ts
27
- interface TableColumn {
28
- label: string;
29
- value: string | ((item: any) => string);
30
- width?: number;
31
- realWidth?: number;
32
- }
33
- interface ObjectOptions {
34
- keyWidth?: number;
35
- }
36
- declare function printObject(output?: any, options?: ObjectOptions): void;
37
- declare function printTable(items: any[], columns?: TableColumn[]): void;
38
- //#endregion
39
- //#region src/shared/services/ConfigService.d.ts
40
- interface Entry {
41
- key: string;
42
- value: any;
43
- source: string;
44
- }
45
- declare class ConfigService {
46
- static __container_entry_key: string;
47
- entries: Map<string, Entry>;
48
- constructor();
49
- list(): Entry[];
50
- parseValue(value: any): any;
51
- loadFromRecord(record: Record<string, any>, source?: string): void;
52
- loadFromEntries(entries: [string, any][], source?: string): void;
53
- toRecord(): Record<string, any>;
54
- has(key: string): boolean;
55
- get<T = any | undefined>(key: string, defaultValue?: any): T;
56
- getOne<T = any | undefined>(keys: string[], defaultValue?: any): T;
57
- set(key: string, value: any, source?: string): void;
58
- unset(key: string): void;
59
- clear(): void;
60
- dump(): Record<string, any>;
61
- }
62
- //#endregion
63
- //#region src/shared/services/ContainerService.d.ts
64
- type Constructor$1<T = object> = new (...args: any[]) => T;
65
- type EntryKey = string | symbol | Constructor$1;
66
- declare class ContainerService {
67
- private entries;
68
- loadFromRecord(record: Record<string, any>): void;
69
- toRecord(): Record<string, any>;
70
- private getKey;
71
- set(payload: EntryKey, value: any): this;
72
- has(payload: EntryKey): boolean;
73
- get<T>(payload: EntryKey): T;
74
- unset(payload: EntryKey): void;
75
- singleton<T>(classConstructor: Constructor$1<T>): T;
76
- load(entries: Record<any, any>): void;
77
- proxy<T = unknown>(key: EntryKey): T;
78
- keys(): EntryKey[];
79
- }
80
- //#endregion
81
- //#region src/shared/services/LoggerService.d.ts
82
- declare class LoggerService {
83
- static __container_entry_key: string;
84
- info(message: string, meta?: any): void;
85
- debug(message: string, meta?: any): void;
86
- warn(message: string, meta?: any): void;
87
- error(message: string | Error, meta?: any): void;
88
- child(options: any): LoggerService;
89
- }
90
- //#endregion
91
- //#region src/shared/services/EmmitterService.d.ts
92
- interface EmmitterListenerOptions {
93
- event: string;
94
- }
95
- interface EmmitterListener {
96
- (data: any, options: EmmitterListenerOptions): void;
97
- }
98
- interface EmmitterHandler {
99
- id: string;
100
- event: string;
101
- listener: EmmitterListener;
102
- originalListener?: EmmitterListener;
103
- }
104
- interface OnOptions {
105
- id?: string;
106
- unique?: boolean;
107
- }
108
- interface OnDebounceOptions extends OnOptions {
109
- debounce?: number;
110
- }
111
- interface EmmitterServiceOptions {
112
- debug?: boolean;
113
- logger?: LoggerService;
114
- }
115
- declare class EmmitterService$1<Events extends Record<string, any> = Record<string, any>> {
116
- static __container_entry_key: string;
117
- handlers: EmmitterHandler[];
118
- debug: boolean;
119
- logger: LoggerService;
120
- constructor(options?: EmmitterServiceOptions);
121
- static create<Events extends Record<string, any> = Record<string, any>>(options?: EmmitterServiceOptions): EmmitterService$1<Events>;
122
- setDebug(debug: boolean): void;
123
- setLogger(logger: LoggerService): void;
124
- on<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler;
125
- on(event: string, listener: (args: any) => void, options?: OnOptions): EmmitterHandler;
126
- once<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler;
127
- once(event: string, listener: (args: any) => void, options?: OnOptions): EmmitterHandler;
128
- onDebounce<K extends keyof Events>(event: K, listener: (args: Events[K]) => void, options?: OnDebounceOptions): EmmitterHandler;
129
- onDebounce(event: string, listener: (args: any) => void, options?: OnDebounceOptions): EmmitterHandler;
130
- onAnyOf<K extends keyof Events>(events: K[], listener: (args: Events[K]) => void, options?: OnOptions): EmmitterHandler[];
131
- onAnyOf(events: string[], listener: (args: any) => void, options?: OnOptions): EmmitterHandler[];
132
- off(event: string, listener: EmmitterHandler['listener']): void;
133
- emit<K extends keyof Events>(event: K, args: Events[K]): void;
134
- emit(event: string, args?: any): void;
135
- emitAndWait<K extends keyof Events>(event: K, args: Events[K]): Promise<void>;
136
- emitAndWait(event: string, args?: any): Promise<void>;
137
- list(): EmmitterHandler[];
138
- listByEvent(event: string): EmmitterHandler[];
139
- remove(payload: string | string[]): void;
140
- clear(): void;
141
- hasHandlers(): boolean;
142
- }
143
- //#endregion
144
- //#region src/shared/entities/LifecycleHook.d.ts
145
- declare class LifecycleHook {
146
- hook_id: string;
147
- hook_aliases?: string[];
148
- order?: number;
149
- subhooks?: LifecycleHook[];
150
- register(): Promise<void>;
151
- load(): Promise<void>;
152
- boot(): Promise<void>;
153
- shutdown(): Promise<void>;
154
- /** @deprecated Use register */
155
- onRegister(): Promise<void>;
156
- /** @deprecated Use load */
157
- onLoad(): Promise<void>;
158
- /** @deprecated Use boot */
159
- onBoot(): Promise<void>;
160
- /** @deprecated Use shutdown */
161
- onShutdown(): Promise<void>;
162
- }
163
- //#endregion
164
- //#region src/shared/utils/compose.d.ts
165
- type Constructor<T = {}> = new (...args: any[]) => T;
166
- //#endregion
167
- //#region src/shared/services/LifecycleService.d.ts
168
- type LifecycleMethod = 'register' | 'load' | 'boot' | 'shutdown';
169
- interface ListOptions$1 {
170
- include?: string | string[];
171
- exclude?: string | string[];
172
- }
173
- interface LifecycleServiceOptions {
174
- debug?: boolean;
175
- hooks?: Map<string, LifecycleHook>;
176
- logger?: LoggerService;
177
- onError?: (error: Error, context: {
178
- hookId: string;
179
- method: LifecycleMethod;
180
- }) => void;
181
- }
182
- declare class LifecycleService$1 {
183
- static __container_entry_key: string;
184
- hooks: Map<string, LifecycleHook>;
185
- logger: LoggerService;
186
- debug: boolean;
187
- constructor(data?: LifecycleServiceOptions);
188
- setOnError(handler: Required<LifecycleServiceOptions>['onError']): void;
189
- onError(error: Error, context: {
190
- hookId: string;
191
- method: LifecycleMethod;
192
- }): void;
193
- mapAliases(args: string[]): string[];
194
- list(options?: ListOptions$1): LifecycleHook[];
195
- add(...payload: (LifecycleHook | Constructor<LifecycleHook>)[]): void;
196
- emitMethod(method: LifecycleMethod, options?: ListOptions$1): Promise<void>;
197
- emit(payload: LifecycleMethod | LifecycleMethod[], options?: ListOptions$1): Promise<void>;
198
- on(method: LifecycleMethod, handler: () => Promise<void>): void;
199
- register(options?: ListOptions$1): Promise<void>;
200
- load(options?: ListOptions$1): Promise<void>;
201
- boot(options?: ListOptions$1): Promise<void>;
202
- shutdown(options?: ListOptions$1): Promise<void>;
203
- clear(): void;
204
- }
205
- //#endregion
206
- //#region src/shared/schemas/permissionAssignmentSchema.d.ts
207
- type PermissionAssignment = v.InferOutput<typeof permissionAssignmentSchema>;
208
- declare const permissionAssignmentSchema: v.ObjectSchema<{
209
- readonly id: v.NumberSchema<undefined>;
210
- readonly permission_id: v.NumberSchema<undefined>;
211
- readonly assignable_type: v.StringSchema<undefined>;
212
- readonly assignable_id: v.StringSchema<undefined>;
213
- readonly created_at: v.StringSchema<undefined>;
214
- readonly updated_at: v.StringSchema<undefined>;
215
- }, undefined>;
216
- //#endregion
217
- //#region src/shared/schemas/permissionSchema.d.ts
218
- type Permission = v.InferOutput<typeof permissionSchema>;
219
- declare const permissionSchema: v.ObjectSchema<{
220
- readonly id: v.NumberSchema<undefined>;
221
- readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
222
- readonly description: v.NullableSchema<v.StringSchema<undefined>, undefined>;
223
- readonly action: v.StringSchema<undefined>;
224
- readonly subject: v.StringSchema<undefined>;
225
- readonly conditions: v.NullableSchema<v.StringSchema<undefined>, undefined>;
226
- readonly created_at: v.StringSchema<undefined>;
227
- readonly updated_at: v.StringSchema<undefined>;
228
- readonly expires_at: v.StringSchema<undefined>;
229
- }, undefined>;
230
- //#endregion
231
- //#region src/shared/schemas/tokenSchema.d.ts
232
- type Token$1 = v.InferOutput<typeof tokenSchema>;
233
- declare const tokenSchema: v.ObjectSchema<{
234
- readonly id: v.NumberSchema<undefined>;
235
- readonly name: v.NullableSchema<v.StringSchema<undefined>, undefined>;
236
- readonly type: v.StringSchema<undefined>;
237
- readonly user_id: v.NumberSchema<undefined>;
238
- readonly token: v.StringSchema<undefined>;
239
- readonly created_at: v.StringSchema<undefined>;
240
- readonly updated_at: v.StringSchema<undefined>;
241
- readonly expires_at: v.StringSchema<undefined>;
242
- }, undefined>;
243
- //#endregion
244
- //#region src/shared/mixins/HooksMixin.d.ts
245
- interface Listener {
246
- event: string;
247
- listener: (...args: any[]) => void;
248
- }
249
- //#endregion
250
- //#region src/shared/entities/PermissionEntity.d.ts
251
- declare const PermissionEntity_base: {
252
- new (...args: any[]): {
253
- merge(data: Partial< /*elided*/any>): /*elided*/any;
254
- };
255
- from<T>(this: new () => T, data: Partial<T>): T;
256
- } & Constructor;
257
- declare class PermissionEntity extends PermissionEntity_base {
258
- id: number;
259
- name: string;
260
- description: string | null;
261
- origin: string;
262
- subject: string;
263
- action: string;
264
- conditions: string | null | Record<string, any>;
265
- get editable(): boolean;
266
- get parsedConditions(): any;
267
- }
268
- //#endregion
269
- //#region src/shared/entities/AclEntity.d.ts
270
- declare class AclEntity {
271
- static __container_entry_key: string;
272
- ability: ReturnType<typeof defineAbility>;
273
- permissions: PermissionEntity[];
274
- debug: boolean;
275
- logger: LoggerService;
276
- constructor(data?: Partial<AclEntity>);
277
- can(action: string, subject: any, object?: Record<string, any>): boolean;
278
- cannot(action: string, subject: any, object?: Record<string, any>): boolean;
279
- subject(subject: string, object: Record<string, any>): Record<string, any> & _$_casl_ability0.ForcedSubject<string>;
280
- }
281
- //#endregion
282
- //#region src/shared/entities/CookieMapEntity.d.ts
283
- interface CookieMapEntityOptions {
284
- cookies?: Map<string, string>;
285
- prefix?: string;
286
- }
287
- declare class CookieMapEntity$1 {
288
- static __container_entry_key: string;
289
- cookies: Map<string, string>;
290
- prefix: string;
291
- constructor(data?: CookieMapEntityOptions);
292
- load(cookies: Record<string, string> | Map<string, string>): void;
293
- get(name: string, defaultValue?: string | null): string | null;
294
- set(name: string, value: string, options?: any): void;
295
- toRecord(): Record<string, string>;
296
- }
297
- //#endregion
298
- //#region src/shared/entities/DriveConfigEntity.d.ts
299
- declare class DriveConfig$1 {
300
- static get TYPES(): ({
301
- id: string;
302
- label: any;
303
- description: any;
304
- config_fields: {
305
- directory: {
306
- component: string;
307
- label: any;
308
- description: any;
309
- hint: any;
310
- };
311
- accessKeyId?: undefined;
312
- secretAccessKey?: undefined;
313
- bucket?: undefined;
314
- region?: undefined;
315
- prefix?: undefined;
316
- endpoint?: undefined;
317
- };
318
- } | {
319
- id: string;
320
- label: string;
321
- description: any;
322
- config_fields: {
323
- accessKeyId: {
324
- component: string;
325
- label: any;
326
- hint: any;
327
- type: string;
328
- };
329
- secretAccessKey: {
330
- component: string;
331
- label: any;
332
- hint: any;
333
- type: string;
334
- };
335
- bucket: {
336
- component: string;
337
- label: any;
338
- hint: any;
339
- };
340
- region: {
341
- component: string;
342
- label: any;
343
- hint: any;
344
- };
345
- prefix: {
346
- component: string;
347
- label: any;
348
- hint: any;
349
- };
350
- endpoint: {
351
- component: string;
352
- label: any;
353
- hint: any;
354
- };
355
- directory?: undefined;
356
- };
357
- })[];
358
- id: string;
359
- name: string;
360
- type: string;
361
- is_default: boolean;
362
- config: Record<string, any>;
363
- constructor(data: DriveConfig$1);
364
- get config_fields(): {};
365
- }
366
- //#endregion
367
- //#region src/shared/entities/DriveEntryEntity.d.ts
368
- declare class DriveEntry {
369
- name: string;
370
- path: string;
371
- type: 'file' | 'directory';
372
- metas: Record<string, any>;
373
- constructor(data: DriveEntry);
374
- }
375
- //#endregion
376
- //#region src/shared/entities/FileEntity.d.ts
377
- declare const FileEntity_base: {
378
- new (...args: any[]): {
379
- merge(data: Partial< /*elided*/any>): /*elided*/any;
380
- };
381
- from<T>(this: new () => T, data: Partial<T>): T;
382
- } & Constructor & {
383
- new (...args: any[]): {
384
- created_at: Date | string;
385
- updated_at: Date | string;
386
- };
387
- } & {
388
- new (...args: any[]): {
389
- deleted_at: Date | string | null;
390
- };
391
- };
392
- declare class FileEntity extends FileEntity_base {
393
- id: number;
394
- drive: string;
395
- mimetype: string;
396
- purpose: string;
397
- client_name: string;
398
- filename: string;
399
- public: boolean;
400
- url?: string;
401
- metas?: Record<string, any>;
402
- isImage(): boolean;
403
- }
404
- //#endregion
405
- //#region src/shared/entities/FileMetaEntity.d.ts
406
- declare const FileMeta_base$1: {
407
- new (...args: any[]): {
408
- merge(data: Partial< /*elided*/any>): /*elided*/any;
409
- };
410
- from<T>(this: new () => T, data: Partial<T>): T;
411
- } & Constructor & {
412
- new (...args: any[]): {
413
- created_at: Date | string;
414
- updated_at: Date | string;
415
- };
416
- } & {
417
- new (...args: any[]): {
418
- deleted_at: Date | string | null;
419
- };
420
- };
421
- declare class FileMeta$1 extends FileMeta_base$1 {
422
- id: number;
423
- file_id: number;
424
- name: string;
425
- value: string | null;
426
- }
427
- //#endregion
428
- //#region src/shared/entities/GitBranchEntity.d.ts
429
- declare class GitBranchEntity {
430
- name: string;
431
- remote: string | null;
432
- is_current: boolean;
433
- is_remote: boolean;
434
- constructor(data: GitBranchEntity);
435
- }
436
- //#endregion
437
- //#region src/shared/entities/GitCommitEntity.d.ts
438
- declare class GitCommitEntity {
439
- hash: string;
440
- short_hash: string;
441
- message: string;
442
- body: string;
443
- author_name: string;
444
- author_email: string;
445
- date: string;
446
- constructor(data: GitCommitEntity);
447
- }
448
- //#endregion
449
- //#region src/shared/entities/ModuleManifestEntity.d.ts
450
- interface ModuleManifestBuildImport {
451
- from: string;
452
- to?: string;
453
- type: 'global_import';
454
- }
455
- interface ModuleManifestBuild {
456
- imports?: ModuleManifestBuildImport[];
457
- }
458
- declare const ModuleManifest_base: {
459
- new (...args: any[]): {
460
- merge(data: Partial< /*elided*/any>): /*elided*/any;
461
- };
462
- from<T>(this: new () => T, data: Partial<T>): T;
463
- } & Constructor;
464
- declare class ModuleManifest extends ModuleManifest_base {
465
- id: string;
466
- name: string;
467
- version: string;
468
- description?: string;
469
- enabled: boolean;
470
- author?: string;
471
- dependencies?: Record<string, string>;
472
- build?: ModuleManifestBuild;
473
- [key: string]: any;
474
- }
475
- //#endregion
476
- //#region src/shared/entities/ModuleEntity.d.ts
477
- interface ModuleUpgradeInfo {
478
- source: 'git' | 'zip';
479
- [key: string]: any;
480
- }
481
- declare const Module_base$1: {
482
- new (...args: any[]): {
483
- merge(data: Partial< /*elided*/any>): /*elided*/any;
484
- };
485
- from<T>(this: new () => T, data: Partial<T>): T;
486
- } & Constructor & Constructor<{}> & typeof LifecycleHook;
487
- declare class Module$1 extends Module_base$1 {
488
- id: string;
489
- name: string;
490
- enabled: boolean;
491
- dependencies: Record<string, any>;
492
- build: ModuleManifest['build'];
493
- directory: string;
494
- upgrade_info?: ModuleUpgradeInfo;
495
- setData(data: Partial<Module$1 | ModuleManifest>): void;
496
- }
497
- //#endregion
498
- //#region src/shared/entities/PaginationEntity.d.ts
499
- declare class PaginationEntity<T = Record<string, any>> {
500
- items: T[];
501
- total: number;
502
- page: number;
503
- per_page: number;
504
- total_pages: number;
505
- constructor(data: Partial<PaginationEntity>);
506
- static from<T = Record<string, string>>(payload: Partial<PaginationEntity<T>>): PaginationEntity<T>;
507
- }
508
- //#endregion
509
- //#region src/shared/entities/PluginEntity.d.ts
510
- declare const PluginEntity_base: {
511
- new (...args: any[]): {
512
- merge(data: Partial< /*elided*/any>): /*elided*/any;
513
- };
514
- from<T>(this: new () => T, data: Partial<T>): T;
515
- } & Constructor;
516
- declare class PluginEntity$1 extends PluginEntity_base {
517
- id: string;
518
- name: string;
519
- version: string;
520
- enabled: boolean;
521
- aliases: string[];
522
- version_channel: string;
523
- version_available_channels: string[];
524
- }
525
- //#endregion
526
- //#region src/shared/entities/RoleEntity.d.ts
527
- declare const Role_base: {
528
- new (...args: any[]): {
529
- merge(data: Partial< /*elided*/any>): /*elided*/any;
530
- };
531
- from<T>(this: new () => T, data: Partial<T>): T;
532
- } & Constructor & {
533
- new (...args: any[]): {
534
- created_at: Date | string;
535
- updated_at: Date | string;
536
- };
537
- } & {
538
- new (...args: any[]): {
539
- deleted_at: Date | string | null;
540
- };
541
- };
542
- declare class Role extends Role_base {
543
- id: number;
544
- name: string;
545
- description?: string;
546
- }
547
- //#endregion
548
- //#region src/shared/entities/UserEntity.d.ts
549
- declare const UserEntity_base: {
550
- new (...args: any[]): {
551
- merge(data: Partial< /*elided*/any>): /*elided*/any;
552
- };
553
- from<T>(this: new () => T, data: Partial<T>): T;
554
- } & Constructor & {
555
- new (...args: any[]): {
556
- created_at: Date | string;
557
- updated_at: Date | string;
558
- };
559
- } & {
560
- new (...args: any[]): {
561
- deleted_at: Date | string | null;
562
- };
563
- };
564
- declare class UserEntity$1 extends UserEntity_base {
565
- id: number;
566
- email: string;
567
- name: string;
568
- username: string;
569
- password?: string;
570
- verified_at?: Date | string | null;
571
- permissions?: PermissionEntity[];
572
- roles?: Role[];
573
- get initials(): string;
574
- }
575
- //#endregion
576
- //#region src/server/services/CliService.d.ts
577
- interface CliEvents {
578
- 'cli:registered': {
579
- cli: CliService;
580
- };
581
- }
582
- declare class CliCommand extends Command {
583
- __is_cli_command: boolean;
584
- table: typeof printTable;
585
- object: typeof printObject;
586
- colors: chalk.Chalk & chalk.ChalkFunction & {
587
- supportsColor: chalk.ColorSupport | false;
588
- Level: chalk.Level;
589
- Color: ("black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray" | "grey" | "blackBright" | "redBright" | "greenBright" | "yellowBright" | "blueBright" | "magentaBright" | "cyanBright" | "whiteBright") | ("bgBlack" | "bgRed" | "bgGreen" | "bgYellow" | "bgBlue" | "bgMagenta" | "bgCyan" | "bgWhite" | "bgGray" | "bgGrey" | "bgBlackBright" | "bgRedBright" | "bgGreenBright" | "bgYellowBright" | "bgBlueBright" | "bgMagentaBright" | "bgCyanBright" | "bgWhiteBright");
590
- ForegroundColor: "black" | "red" | "green" | "yellow" | "blue" | "magenta" | "cyan" | "white" | "gray" | "grey" | "blackBright" | "redBright" | "greenBright" | "yellowBright" | "blueBright" | "magentaBright" | "cyanBright" | "whiteBright";
591
- BackgroundColor: "bgBlack" | "bgRed" | "bgGreen" | "bgYellow" | "bgBlue" | "bgMagenta" | "bgCyan" | "bgWhite" | "bgGray" | "bgGrey" | "bgBlackBright" | "bgRedBright" | "bgGreenBright" | "bgYellowBright" | "bgBlueBright" | "bgMagentaBright" | "bgCyanBright" | "bgWhiteBright";
592
- Modifiers: "reset" | "bold" | "dim" | "italic" | "underline" | "inverse" | "hidden" | "strikethrough" | "visible";
593
- stderr: chalk.Chalk & {
594
- supportsColor: chalk.ColorSupport | false;
595
- };
596
- };
597
- inquirer: typeof inquirer;
598
- needs: Set<string>;
599
- need(...args: string[]): this;
600
- createCommand(name?: string): CliCommand;
601
- }
602
- declare class CliService extends CliCommand {
603
- static __container_entry_key: string;
604
- dirs: Set<string>;
605
- logger: LoggerService;
606
- emmitter: EmmitterService$1<Record<string, any>>;
607
- debug: boolean;
608
- static create(name?: string): CliService;
609
- setLogger(logger: LoggerService): this;
610
- setDebug(debug: boolean): this;
611
- setEmmitter(emmitter: EmmitterService$1): this;
612
- createCommand(name?: string): CliService;
613
- addDir(dir: string): this;
614
- loadDir(dir: string): Promise<void>;
615
- load(): Promise<this>;
616
- }
617
- //#endregion
618
- //#region src/server/services/CliTesterService.d.ts
619
- declare class ArteTesterService extends CliService {
620
- constructor();
621
- add(path: string): Promise<void>;
622
- execute(args: string[]): Promise<void>;
623
- }
624
- //#endregion
625
- //#region src/server/services/CliWrapperService.d.ts
626
- declare class CliWrapperService {
627
- process: cp.ChildProcess | null;
628
- appBasePath: string;
629
- env: Map<string, any>;
630
- args: string[];
631
- configArguments: Map<string, string>;
632
- configFiles: string[];
633
- debug: boolean;
634
- logger: LoggerService;
635
- static create(): CliWrapperService;
636
- setBasePath(path: string): this;
637
- setDebug(debug: boolean): this;
638
- setLogger(logger: LoggerService): this;
639
- addConfigArgument(key: string, value: string): this;
640
- addConfigFile(...filePaths: string[]): this;
641
- addEnv(key: string, value: any): this;
642
- loadConfigArguments(): void;
643
- loadConfigFiles(): void;
644
- loadEnvironment(): void;
645
- loadArguments(args?: string[]): void;
646
- kill(code?: number): void;
647
- run(args?: string[]): Promise<void>;
648
- }
649
- //#endregion
650
- //#region src/server/services/ConfigFSService.d.ts
651
- interface ConfigFSServiceOptions {
652
- directory?: string;
653
- format?: 'json' | 'yml';
654
- formatOptions?: Record<string, any>;
655
- debug?: boolean;
656
- logger?: LoggerService;
657
- }
658
- declare class ConfigFSService extends ConfigService {
659
- logger: LoggerService;
660
- debug: boolean;
661
- format: 'json' | 'yml';
662
- formatOptions: Record<string, any>;
663
- directory: string;
664
- constructor(options?: ConfigFSServiceOptions);
665
- write(entry: string, data: any): Promise<void>;
666
- writeSync(entry: string, data: any): void;
667
- load(): Promise<void>;
668
- private parseKey;
669
- set(fullKey: string, value: any, source?: string): void;
670
- unset(fullKey: string): void;
671
- }
672
- //#endregion
673
- //#region src/server/schemas/envSchema.d.ts
674
- type EnvSchema = v.InferOutput<typeof envSchema>;
675
- declare const envSchema: v.LooseObjectSchema<{
676
- readonly NODE_ENV: v.OptionalSchema<v.UnionSchema<[v.LiteralSchema<"development", undefined>, v.LiteralSchema<"production", undefined>, v.LiteralSchema<"test", undefined>], undefined>, "development">;
677
- readonly ZENITH_BASE_PATH: v.StringSchema<undefined>;
678
- readonly ZENITH_STORAGE_PATH: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
679
- readonly ZENITH_APP_URL: v.OptionalSchema<v.StringSchema<undefined>, "http://localhost:3000">;
680
- readonly ZENITH_PORT: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, number>]>, "3000">;
681
- readonly ZENITH_HOST: v.OptionalSchema<v.StringSchema<undefined>, "0.0.0.0">;
682
- readonly ZENITH_LOG_LEVEL: v.OptionalSchema<v.PicklistSchema<["error", "warn", "info", "debug"], undefined>, "info">;
683
- readonly ZENITH_LIFECYCLE_DEBUG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.LiteralSchema<"1", undefined>, v.LiteralSchema<"0", undefined>], undefined>, v.TransformAction<"0" | "1" | "true" | "false", boolean>, v.BooleanSchema<undefined>]>, "false">;
684
- readonly ZENITH_CLIENT_CONFIG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
685
- readonly ZENITH_CONFIG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
686
- readonly ZENITH_CONFIG_ARGUMENTS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
687
- readonly ZENITH_CONFIG_FILES: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, string[]>]>, "">;
688
- readonly ZENITH_CONFIG_DEBUG: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnionSchema<[v.LiteralSchema<"true", undefined>, v.LiteralSchema<"false", undefined>, v.LiteralSchema<"1", undefined>, v.LiteralSchema<"0", undefined>], undefined>, v.TransformAction<"0" | "1" | "true" | "false", boolean>, v.BooleanSchema<undefined>]>, "false">;
689
- readonly ZENITH_CONFIG_DRIVER: v.OptionalSchema<v.PicklistSchema<["fs", "s3"], undefined>, "fs">;
690
- readonly ZENITH_CONFIG_FS_PATH: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
691
- readonly ZENITH_CONFIG_FS_FORMAT: v.OptionalSchema<v.PicklistSchema<["json", "yml"], undefined>, "json">;
692
- readonly ZENITH_CONFIG_FS_FORMAT_OPTIONS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, Record<string, any>>]>, "">;
693
- readonly ZENITH_CONFIG_S3_BUCKET: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
694
- readonly ZENITH_CONFIG_S3_REGION: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
695
- readonly ZENITH_CONFIG_S3_ACCESS_KEY_ID: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
696
- readonly ZENITH_CONFIG_S3_SECRET_ACCESS_KEY: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
697
- readonly ZENITH_CONFIG_S3_SESSION_TOKEN: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
698
- readonly ZENITH_CONFIG_S3_ENDPOINT: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
699
- readonly ZENITH_CONFIG_S3_PREFIX: v.OptionalSchema<v.StringSchema<undefined>, "">;
700
- readonly ZENITH_PLUGINS_DIRS: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TransformAction<string, string[]>]>, "">;
701
- }, undefined>;
702
- //#endregion
703
- //#region src/server/services/EnvService.d.ts
704
- declare class EnvService {
705
- static __container_entry_key: string;
706
- private env;
707
- private files;
708
- static create(): EnvService;
709
- static dotEnvConfig(options?: dotenv.DotenvConfigOptions): dotenv.DotenvConfigOutput;
710
- setFiles(files: string[]): this;
711
- addFile(file: string): this;
712
- load(): this;
713
- get production(): boolean;
714
- get development(): boolean;
715
- get test(): boolean;
716
- has<K extends keyof EnvSchema>(key: K): boolean;
717
- get<K extends keyof EnvSchema>(key: K, defaultValue?: any): EnvSchema[K];
718
- set<K extends keyof EnvSchema>(key: K, value: EnvSchema[K]): void;
719
- }
720
- //#endregion
721
- //#region src/server/services/ConfigManagerService.d.ts
722
- interface ConfigManagerOptions {
723
- env: EnvService;
724
- logger: LoggerService;
725
- silent?: boolean;
726
- }
727
- declare class ConfigManagerService {
728
- env: EnvService;
729
- logger: LoggerService;
730
- silent: boolean;
731
- constructor(options: ConfigManagerOptions);
732
- static create(options: ConfigManagerOptions): ConfigManagerService;
733
- private loadS3Config;
734
- private loadFSConfig;
735
- loadConfigFromEnv(service: ConfigService): void;
736
- loadConfigFromFile(service: ConfigService, file: string): void;
737
- loadConfigFromFiles(service: ConfigService, files: string[]): void;
738
- load(): Promise<ConfigService>;
739
- }
740
- //#endregion
741
- //#region src/server/gateways/DriveBaseGateway.d.ts
742
- interface UrlOptions {
743
- expires?: ms.StringValue;
744
- }
745
- interface UploadUrlOptions {
746
- expires?: ms.StringValue;
747
- mime_types?: string[];
748
- max_size?: number;
749
- }
750
- declare class DriveBaseGateway {
751
- id: string;
752
- name: string;
753
- description?: string;
754
- config: Record<string, any>;
755
- constructor(data: Pick<DriveBaseGateway, 'id' | 'name' | 'description' | 'config'>);
756
- list(folder?: string): Promise<DriveEntry[]>;
757
- find(filename: string): Promise<DriveEntry>;
758
- exists(filename: string): Promise<boolean>;
759
- read(filename: string): Promise<Uint8Array>;
760
- readStream(filename: string): Promise<NodeJS.ReadableStream>;
761
- write(filename: string, data: Uint8Array): Promise<void>;
762
- writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
763
- delete(filename: string): Promise<void>;
764
- url(filename: string, options?: UrlOptions): Promise<string>;
765
- uploadUrl(filename: string, options?: UploadUrlOptions): Promise<string>;
766
- }
767
- //#endregion
768
- //#region src/server/gateways/DriveS3Gateway.d.ts
769
- declare const schema: v.ObjectSchema<{
770
- readonly bucket: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
771
- readonly region: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
772
- readonly accessKeyId: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
773
- readonly secretAccessKey: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
774
- readonly sessionToken: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
775
- readonly endpoint: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
776
- readonly prefix: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
777
- }, undefined>;
778
- type S3DriveConfig = InferOutput<typeof schema>;
779
- declare class DriveS3 extends DriveBaseGateway {
780
- private schema;
781
- private _client?;
782
- constructor(data: Pick<DriveBaseGateway, 'id' | 'name' | 'description' | 'config'>);
783
- get valid(): boolean;
784
- private checkValid;
785
- protected get bucket(): string;
786
- protected get prefix(): string;
787
- private getKey;
788
- protected get client(): S3Client;
789
- exists: DriveBaseGateway['exists'];
790
- list: DriveBaseGateway['list'];
791
- find: DriveBaseGateway['find'];
792
- mkdir(_filename: string): Promise<void>;
793
- read: DriveBaseGateway['read'];
794
- readStream(filename: string): Promise<any>;
795
- write: DriveBaseGateway['write'];
796
- writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
797
- delete: DriveBaseGateway['delete'];
798
- url: DriveBaseGateway['url'];
799
- uploadUrl: DriveBaseGateway['uploadUrl'];
800
- }
801
- //#endregion
802
- //#region src/server/services/ConfigS3Service.d.ts
803
- interface InitiOptions extends Omit<S3DriveConfig, 'name' | 'description'> {
804
- prefix?: string;
805
- debug?: boolean;
806
- logger?: LoggerService;
807
- }
808
- declare class ConfigS3Service extends ConfigService {
809
- prefix: string;
810
- logger: LoggerService;
811
- debug: boolean;
812
- drive: DriveS3;
813
- bucket: string;
814
- region: string;
815
- endpoint?: string;
816
- constructor(options: InitiOptions);
817
- private parseKey;
818
- load(): Promise<void>;
819
- set(fullKey: string, value: any, source?: string): void;
820
- unset(fullKey: string): void;
821
- }
822
- //#endregion
823
- //#region src/server/services/DownloadService.d.ts
824
- interface DownloadedFetchOptions extends RequestInit {
825
- proxy?: string;
826
- }
827
- declare class DownloadService {
828
- fetch(url: string, options?: DownloadedFetchOptions): Promise<_$undici.Response>;
829
- stream(url: string, options?: DownloadedFetchOptions): Promise<{
830
- stream: NodeJS.ReadableStream;
831
- contentType: string;
832
- }>;
833
- }
834
- //#endregion
835
- //#region src/server/contracts/DriveContract.d.ts
836
- interface DriveUrlOptions {
837
- expires?: ms.StringValue;
838
- }
839
- interface DriveUploadUrlOptions {
840
- expires?: ms.StringValue;
841
- mime_types?: string[];
842
- max_size?: number;
843
- }
844
- interface DriveContract {
845
- id: string;
846
- name: string;
847
- description?: string;
848
- list(folder?: string): Promise<DriveEntry[]>;
849
- find(filename: string): Promise<DriveEntry>;
850
- exists(filename: string): Promise<boolean>;
851
- read(filename: string): Promise<Uint8Array>;
852
- write(filename: string, data: Uint8Array): Promise<void>;
853
- writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
854
- delete(filename: string): Promise<void>;
855
- url(filename: string, options?: DriveUrlOptions): Promise<string>;
856
- uploadUrl(filename: string, options?: DriveUploadUrlOptions): Promise<string>;
857
- readStream(filename: string): Promise<ReadStream>;
858
- }
859
- //#endregion
860
- //#region src/server/services/DriveService.d.ts
861
- interface ValidateUploadOptions {
862
- mime_types: string;
863
- maxSize?: number;
864
- }
865
- declare class DriveService {
866
- static __container_entry_key: string;
867
- gateways: Map<string, typeof DriveBaseGateway>;
868
- drives: Map<string, DriveBaseGateway>;
869
- selected?: string;
870
- defaultDrive?: string;
871
- debug: boolean;
872
- logger: LoggerService;
873
- get current(): DriveBaseGateway | undefined;
874
- constructor(data?: Partial<DriveService>);
875
- listDrives(): {
876
- default: boolean;
877
- id: string;
878
- name: string;
879
- description?: string;
880
- config: Record<string, any>;
881
- }[];
882
- get(name?: string): DriveBaseGateway;
883
- use(name?: string): DriveService;
884
- list(folder?: string): Promise<DriveEntry[]>;
885
- find(filename: string): Promise<DriveEntry>;
886
- exists(filename: string): Promise<boolean>;
887
- read(filename: string): Promise<Uint8Array>;
888
- readStream(filename: string): Promise<NodeJS.ReadableStream>;
889
- readAsText(filename: string): Promise<string>;
890
- write(filename: string, payload: Uint8Array | string | Record<string, unknown>): Promise<void>;
891
- writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
892
- /**
893
- * Retrieve a URL for a file in the drive.
894
- * @param payload File instance, File ID, DriveEntry instance or filename string
895
- * @param options
896
- * @returns string
897
- */
898
- url(filename: string, options?: DriveUrlOptions): Promise<string>;
899
- uploadUrl(filename: string, options?: DriveUrlOptions): Promise<string>;
900
- /**
901
- * Upload a file from the local filesystem to the drive.
902
- * @param source filename in local filesystem
903
- * @param destination
904
- * @returns
905
- */
906
- upload(source: string, destination: string): Promise<void>;
907
- /**
908
- * Download a file from the drive to the local filesystem.
909
- * @param filename filename in the drive
910
- * @param destination
911
- * @returns
912
- */
913
- download(filename: string, destination: string): Promise<void>;
914
- delete(filename: string): Promise<void>;
915
- load(): Promise<void>;
916
- createDefaultDrives(): Promise<void>;
917
- validateUpload(options: ValidateUploadOptions, file: {
918
- mimetype: string;
919
- size: number;
920
- }): void;
921
- }
922
- //#endregion
923
- //#region src/server/entities/CookieMapEntity.d.ts
924
- declare class CookieMapEntity extends CookieMapEntity$1 {
925
- request: Request$1;
926
- response: Response$1;
927
- constructor(request: Request$1, response: Response$1);
928
- set(name: string, value: string, options?: CookieOptions): void;
929
- }
930
- //#endregion
931
- //#region src/server/entities/PageRequestContextEntity.d.ts
932
- interface PageRequestContextEntityOptions {
933
- url: string;
934
- request: Request$1;
935
- response: Response$1;
936
- state?: Map<string, any>;
937
- nodeContainer?: ContainerService;
938
- nodeConfig?: ConfigService;
939
- nodeState?: Map<string, any>;
940
- browserContainer?: ContainerService;
941
- browserConfig?: ConfigService;
942
- browserState?: Map<string, any>;
943
- }
944
- declare class PageRequestContextEntity {
945
- url: string;
946
- request: Request$1;
947
- response: Response$1;
948
- cookies: CookieMapEntity;
949
- head: ResolvableHead[];
950
- nodeContainer: ContainerService;
951
- nodeConfig: ConfigService;
952
- nodeState: Map<string, any>;
953
- browserContainer: ContainerService;
954
- browserConfig: ConfigService;
955
- browserState: Map<string, any>;
956
- constructor(data: PageRequestContextEntityOptions);
957
- setBrowserState(key: string, value: any): void;
958
- setNodeState(key: string, value: any): void;
959
- setState(key: string, value: any): void;
960
- setBrowserContainerValue(key: string, value: any): void;
961
- setNodeContainerValue(key: string, value: any): void;
962
- setContainerValue(key: string, value: any): void;
963
- setBrowserConfigValue(key: string, value: any): void;
964
- setNodeConfigValue(key: string, value: any): void;
965
- setConfigValue(key: string, value: any): void;
966
- }
967
- //#endregion
968
- //#region src/server/repositories/DatabaseRepository.d.ts
969
- interface Pagination<T = any> {
970
- items: T[];
971
- page: number;
972
- per_page: number;
973
- total: number;
974
- total_pages: number;
975
- }
976
- interface FindManyOptions {
977
- limit?: number;
978
- offset?: number;
979
- orderBy?: string | string[];
980
- orderDirection?: 'asc' | 'desc' | ('asc' | 'desc')[];
981
- }
982
- interface PaginateOptions$1 {
983
- page?: number;
984
- limit?: number;
985
- orderBy?: FindManyOptions['orderBy'];
986
- orderDirection?: FindManyOptions['orderDirection'];
987
- }
988
- interface DeleteManyOptions {
989
- limit?: number;
990
- }
991
- declare class DatabaseRepository<TEntity = Record<string, any>, TPrimaryKey = any, TOptions = Record<string, any>> {
992
- protected db: Kysely<any>;
993
- protected table: string;
994
- protected primaryKey: string;
995
- autoCreatedAt: boolean;
996
- autoUpdatedAt: boolean;
997
- constructor(db: Kysely<any>, table: string, primaryKey: string);
998
- query(options?: {
999
- qb?: any;
1000
- } & TOptions): any;
1001
- count(options?: Record<string, any>): Promise<number>;
1002
- findMany(options?: FindManyOptions & TOptions): Promise<TEntity[]>;
1003
- findOne(options?: TOptions): Promise<TEntity | null>;
1004
- findById(id: TPrimaryKey, options?: TOptions): Promise<TEntity | null>;
1005
- findByIdOrFail(id: TPrimaryKey, options?: TOptions): Promise<NonNullable<Awaited<TEntity>>>;
1006
- paginate(options?: PaginateOptions$1 & TOptions): Promise<Pagination>;
1007
- protected beforeCreate(data: Partial<TEntity>): Promise<Partial<TEntity>>;
1008
- protected afterCreate(data: TEntity): Promise<void>;
1009
- create(data: Partial<TEntity>): Promise<TEntity>;
1010
- protected beforeCreateMany(data: Partial<TEntity>[]): Promise<Partial<TEntity>[]>;
1011
- protected afterCreateMany(data: TEntity[]): Promise<TEntity[]>;
1012
- createMany(data: Partial<TEntity>[]): Promise<any[]>;
1013
- protected beforeUpdate(data: Partial<TEntity>, id: TPrimaryKey): Promise<Partial<TEntity>>;
1014
- protected afterUpdate(data: TEntity): Promise<TEntity>;
1015
- updateById(id: TPrimaryKey, data: Partial<TEntity>): Promise<void>;
1016
- protected beforeDelete(id: TPrimaryKey): Promise<void>;
1017
- protected afterDelete(id: TPrimaryKey): Promise<void>;
1018
- deleteById(id: TPrimaryKey): Promise<void>;
1019
- protected beforeDeleteMany(options?: DeleteManyOptions & TOptions): (DeleteManyOptions & TOptions) | undefined;
1020
- protected afterDeleteMany(options?: DeleteManyOptions & TOptions): Promise<void> | void;
1021
- deleteMany(options?: DeleteManyOptions & TOptions): Promise<void>;
1022
- }
1023
- //#endregion
1024
- //#region src/server/repositories/UserRepository.d.ts
1025
- interface UserRepositoryQueryOptions {
1026
- id?: number | number[];
1027
- search?: string;
1028
- email?: string;
1029
- username?: string;
1030
- showDeleted?: boolean;
1031
- }
1032
- interface UserRepositoryEvents {
1033
- 'user:created': {
1034
- user: UserEntity$1;
1035
- };
1036
- 'user:updated': {
1037
- user: UserEntity$1;
1038
- };
1039
- 'user:deleted': {
1040
- user: UserEntity$1;
1041
- };
1042
- }
1043
- declare class UserRepository extends DatabaseRepository<UserEntity$1, number, UserRepositoryQueryOptions> {
1044
- static __container_entry_key: string;
1045
- autoCreatedAt: boolean;
1046
- autoUpdatedAt: boolean;
1047
- constructor(db: DatabaseRepository['db']);
1048
- hashUserPasswordIfDefined(data: Partial<UserEntity$1>): Promise<void>;
1049
- protected beforeCreate(data: Partial<UserEntity$1>): Promise<Partial<UserEntity$1>>;
1050
- protected beforeCreateMany(data: Partial<UserEntity$1>[]): Promise<Partial<UserEntity$1>[]>;
1051
- protected beforeUpdate(data: Partial<UserEntity$1>): Promise<Partial<UserEntity$1>>;
1052
- protected afterCreate(data: UserEntity$1): Promise<void>;
1053
- query(options?: UserRepositoryQueryOptions): any;
1054
- }
1055
- //#endregion
1056
- //#region src/server/entities/MigrationEntity.d.ts
1057
- interface MigrationEntiyData {
1058
- name: string;
1059
- source: string | null;
1060
- filename: string;
1061
- executedAt: Date | null;
1062
- }
1063
- declare class MigrationEntity {
1064
- name: string;
1065
- source: string | null;
1066
- filename: string;
1067
- executedAt: Date | null;
1068
- constructor(data: MigrationEntiyData);
1069
- up(db: Kysely<any>): Promise<void>;
1070
- down(db: Kysely<any>): Promise<void>;
1071
- }
1072
- //#endregion
1073
- //#region src/server/services/MigratorService.d.ts
1074
- interface MigrationSource {
1075
- id: string;
1076
- directory: string;
1077
- }
1078
- interface Migration {
1079
- name: string;
1080
- source: string | null;
1081
- filename: string;
1082
- executedAt: Date | null;
1083
- }
1084
- interface ListFilters$1 {
1085
- source?: string;
1086
- name?: string | string[];
1087
- }
1088
- interface MigrationResult {
1089
- name: string;
1090
- filename: string;
1091
- source: string | null;
1092
- result: 'success' | 'failed';
1093
- error?: any;
1094
- }
1095
- interface MigratorServiceOptions {
1096
- sources: MigrationSource[];
1097
- db: Kysely<any>;
1098
- debug?: boolean;
1099
- emmitter?: EmmitterService$1;
1100
- logger?: LoggerService;
1101
- }
1102
- interface MigratorServiceEvents {
1103
- 'migrator:before-migrate': {
1104
- migrations: MigrationEntity[];
1105
- };
1106
- 'migrator:after-migrate': {
1107
- migrations: MigrationEntity[];
1108
- };
1109
- 'migrator:before-rollback': {
1110
- migrations: MigrationEntity[];
1111
- };
1112
- 'migrator:after-rollback': {
1113
- migrations: MigrationEntity[];
1114
- };
1115
- }
1116
- declare class MigratorService {
1117
- static __container_entry_key: string;
1118
- debug: boolean;
1119
- emmitter: EmmitterService$1;
1120
- logger: LoggerService;
1121
- db: Kysely<any>;
1122
- sources: MigrationSource[];
1123
- constructor(options: MigratorServiceOptions);
1124
- addSource(source: MigrationSource): void;
1125
- private ensureMigrationsTable;
1126
- listSource(source: MigrationSource): Promise<MigrationEntity[]>;
1127
- list(filters?: ListFilters$1): Promise<MigrationEntity[]>;
1128
- private migrateUp;
1129
- private migrateDown;
1130
- private migrateFile;
1131
- private rollbackFile;
1132
- migrate(filters?: ListFilters$1 & {
1133
- steps?: number;
1134
- }): Promise<MigrationResult[]>;
1135
- rollback(filters?: ListFilters$1 & {
1136
- steps?: number;
1137
- }): Promise<MigrationResult[]>;
1138
- up(steps?: number, filters?: ListFilters$1): Promise<MigrationResult[]>;
1139
- down(steps?: number, filters?: ListFilters$1): Promise<MigrationResult[]>;
1140
- latest(filters?: ListFilters$1): Promise<MigrationResult[]>;
1141
- latestOrFail(filters?: ListFilters$1): Promise<MigrationResult[]>;
1142
- fresh(filters?: ListFilters$1 & {
1143
- steps?: number;
1144
- }): Promise<MigrationResult[]>;
1145
- }
1146
- //#endregion
1147
- //#region src/server/entities/AclEntity.d.ts
1148
- declare class Acl extends AclEntity {
1149
- authorize(action: string, subject: any, object?: Record<string, any>): void;
1150
- }
1151
- //#endregion
1152
- //#region src/server/contracts/HttpContextContract.d.ts
1153
- interface Request {
1154
- [key: string]: any;
1155
- }
1156
- interface Response {
1157
- [key: string]: any;
1158
- }
1159
- interface HttpContext {
1160
- url: string;
1161
- method: string;
1162
- params: Record<string, string>;
1163
- query: Record<string, string | string[]>;
1164
- body: Record<string, any>;
1165
- cookie: CookieMapEntity$1;
1166
- acl: Acl;
1167
- request: Request;
1168
- response: Response;
1169
- [key: string]: any;
1170
- }
1171
- //#endregion
1172
- //#region src/server/contracts/RouterContract.d.ts
1173
- interface Redirect {
1174
- redirect: string;
1175
- }
1176
- type HandleResult = Record<string, any> | Redirect | void;
1177
- interface Middleware {
1178
- handle(ctx: any): HandleResult | Promise<HandleResult>;
1179
- }
1180
- type ExtractMiddlewareContext<M extends Middleware> = Awaited<ReturnType<M['handle']>> extends Record<string, any> ? Awaited<ReturnType<M['handle']>> : {};
1181
- type ProcessMiddlewareArray<T extends readonly Middleware[]> = T extends readonly [infer First extends Middleware, ...infer Rest extends readonly Middleware[]] ? ExtractMiddlewareContext<First> & ProcessMiddlewareArray<Rest> : {};
1182
- type MiddlewareHandleResult<T extends readonly Middleware[] = readonly Middleware[]> = ProcessMiddlewareArray<T>;
1183
- interface Handler$1<T = Record<string, any>> {
1184
- (ctx: HttpContext & T): Promise<any> | any;
1185
- }
1186
- //#endregion
1187
- //#region src/server/entities/RouteEntity.d.ts
1188
- type RouteMethod = 'get' | 'GET' | 'post' | 'POST' | 'put' | 'PUT' | 'patch' | 'PATCH' | 'delete' | 'DELETE';
1189
- declare class Route {
1190
- path: string;
1191
- method: RouteMethod;
1192
- handler: Handler$1<any> | null;
1193
- middlewares: Middleware[];
1194
- metadata: Record<string, any> | null;
1195
- constructor(data?: Partial<Route>);
1196
- static params(routePath: string, requestPath: string): Record<string, string>;
1197
- static query(requestPath: string): Record<string, string>;
1198
- toJSON(): {
1199
- path: string;
1200
- method: RouteMethod;
1201
- middlewares: string[];
1202
- metadata: Record<string, any> | null;
1203
- };
1204
- }
1205
- //#endregion
1206
- //#region src/server/services/RouterService.d.ts
1207
- type RouteContext = 'global' | 'group' | 'route';
1208
- interface MiddlewareRegister {
1209
- middleware: Middleware;
1210
- context: RouteContext;
1211
- }
1212
- interface LoadOptions {
1213
- debug?: boolean;
1214
- }
1215
- interface RouterEvents {
1216
- 'router:registered': {
1217
- router: RouterService;
1218
- };
1219
- 'router:loaded': {
1220
- router: RouterService;
1221
- };
1222
- }
1223
- declare const RouterService_base: {
1224
- new (...args: any[]): {
1225
- listeners: Listener[];
1226
- on(event: string, listener: (...args: any[]) => void): void;
1227
- off(event: string, listener: (...args: any[]) => void): void;
1228
- emit(event: string, ...args: any[]): void;
1229
- emitAsync(event: string, ...args: any[]): Promise<void>;
1230
- };
1231
- } & Constructor;
1232
- declare class RouterService<C = {}> extends RouterService_base {
1233
- static __container_entry_key: string;
1234
- routes: Route[];
1235
- middlewares: MiddlewareRegister[];
1236
- prefixes: string[];
1237
- groups: RouterService<any>[];
1238
- groupPrefixes: string[];
1239
- debug: boolean;
1240
- logger: LoggerService;
1241
- metadata: Record<string, any>;
1242
- constructor(data?: Partial<RouterService<C>>);
1243
- use<T extends Middleware>(middleware: T, context?: RouteContext): RouterService<C & MiddlewareHandleResult<[typeof middleware]>>;
1244
- prefix(prefix: string): this;
1245
- makePath(args: string): string;
1246
- add(payload: Pick<Route, 'path' | 'method' | 'handler'>): void;
1247
- get(path: string, handler: Handler$1<C>): void;
1248
- post(path: string, handler: Handler$1<C>): void;
1249
- put(path: string, handler: Handler$1<C>): void;
1250
- patch(path: string, handler: Handler$1<C>): void;
1251
- many(methods: Route['method'][], path: string, handler: Handler$1<C>): void;
1252
- delete(path: string, handler: Handler$1<C>): void;
1253
- group(): RouterService<C>;
1254
- resolve(method: string, path: string): Route | null;
1255
- execute(route: Route, initialCtx: any): Promise<any>;
1256
- clear(): void;
1257
- list(): Route[];
1258
- load(options?: LoadOptions): Promise<void>;
1259
- loadSync(options?: LoadOptions): void;
1260
- }
1261
- //#endregion
1262
- //#region src/server/entities/RoutineEntity.d.ts
1263
- interface RoutineHandler {
1264
- (): void | Promise<void>;
1265
- }
1266
- interface RoutineEntityOptions {
1267
- id: string;
1268
- cron: string;
1269
- handler?: RoutineHandler;
1270
- }
1271
- declare class RoutineEntity {
1272
- id: string;
1273
- cron: string;
1274
- job?: Job;
1275
- static create(): RoutineEntity;
1276
- handle: RoutineHandler;
1277
- setId(id: string): this;
1278
- setCron(cron: string): this;
1279
- setHandler(handler: RoutineHandler): this;
1280
- }
1281
- //#endregion
1282
- //#region src/server/services/SchedulerService.d.ts
1283
- interface AddOptions {
1284
- id?: string;
1285
- }
1286
- interface SchedulerServiceOptions {
1287
- logger?: LoggerService;
1288
- debug?: boolean;
1289
- }
1290
- interface SchedulerEvents {
1291
- 'scheduler:registered': {
1292
- scheduler: SchedulerService;
1293
- };
1294
- 'scheduler:loaded': {
1295
- scheduler: SchedulerService;
1296
- };
1297
- 'scheduler:booted': {
1298
- scheduler: SchedulerService;
1299
- };
1300
- 'scheduler:shutdowned': {
1301
- scheduler: SchedulerService;
1302
- };
1303
- }
1304
- declare class SchedulerService {
1305
- static __container_entry_key: string;
1306
- routines: RoutineEntity[];
1307
- logger: LoggerService;
1308
- debug: boolean;
1309
- dirs: string[];
1310
- constructor(options?: SchedulerServiceOptions);
1311
- static create(options?: SchedulerServiceOptions): SchedulerService;
1312
- setLogger(logger: LoggerService): void;
1313
- setDebug(debug: boolean): void;
1314
- addDir(dir: string): void;
1315
- add(routine: Omit<RoutineEntity, 'job'>): void;
1316
- remove(id: RoutineEntity['id'] | RoutineEntity['id'][]): void;
1317
- loadFile(filename: string): Promise<void>;
1318
- loadDirectory(directory: string): Promise<void>;
1319
- load(): Promise<void>;
1320
- has(id: RoutineEntity['id']): boolean;
1321
- startRoutine(id: RoutineEntity['id']): Promise<void>;
1322
- addAndStart(routine: Omit<RoutineEntity, 'job'>): Promise<void>;
1323
- stopRoutine(id: RoutineEntity['id']): Promise<void>;
1324
- stopAndRemove(id: RoutineEntity['id']): Promise<void>;
1325
- boot(): Promise<void>;
1326
- shutdown(): Promise<void>;
1327
- list(): RoutineEntity[];
1328
- }
1329
- //#endregion
1330
- //#region src/server/entities/SeederEntity.d.ts
1331
- interface SeederEntiyData {
1332
- name: string;
1333
- source: string | null;
1334
- filename: string;
1335
- }
1336
- declare class SeederEntity {
1337
- name: string;
1338
- source: string | null;
1339
- filename: string;
1340
- constructor(data: SeederEntiyData);
1341
- run(db: Kysely<any>): Promise<void>;
1342
- }
1343
- //#endregion
1344
- //#region src/server/services/SeederService.d.ts
1345
- interface SeederSource {
1346
- id: string;
1347
- directory: string;
1348
- }
1349
- interface ListFilters {
1350
- source?: string | string[];
1351
- name?: string | string[];
1352
- }
1353
- interface SeederResult {
1354
- name: string;
1355
- filename: string;
1356
- source: string | null;
1357
- result: 'success' | 'failed';
1358
- error?: any;
1359
- }
1360
- interface SeederEvents {
1361
- 'seeder:before-run': {
1362
- seeders: string[];
1363
- };
1364
- 'seeder:after-run': {
1365
- seeders: string[];
1366
- };
1367
- }
1368
- interface SeederServiceOptions {
1369
- db: Kysely<any>;
1370
- sources?: SeederSource[];
1371
- debug?: boolean;
1372
- emmitter?: EmmitterService$1;
1373
- logger?: LoggerService;
1374
- }
1375
- declare class SeeederService {
1376
- static __container_entry_key: string;
1377
- debug: boolean;
1378
- emmitter: EmmitterService$1;
1379
- logger: LoggerService;
1380
- db: Kysely<any>;
1381
- sources: SeederSource[];
1382
- constructor(options: SeederServiceOptions);
1383
- addSource(source: SeederSource): void;
1384
- listSource(source: SeederSource): Promise<SeederEntity[]>;
1385
- list(filters?: ListFilters): Promise<SeederEntity[]>;
1386
- runSeeder(seeder: SeederEntity): Promise<SeederResult>;
1387
- run(filters?: ListFilters & {
1388
- steps?: number;
1389
- }): Promise<SeederResult[]>;
1390
- }
1391
- //#endregion
1392
- //#region src/server/contracts/EventContract.d.ts
1393
- interface EventContract extends SeederEvents, RouterEvents, CliEvents, SchedulerEvents, MigratorServiceEvents, UserRepositoryEvents {
1394
- 'page:request:start': PageRequestContextEntity;
1395
- 'page:request:before-render': PageRequestContextEntity;
1396
- 'page:request:after-render': PageRequestContextEntity;
1397
- [key: string]: any;
1398
- }
1399
- //#endregion
1400
- //#region src/server/services/EmmitterService.d.ts
1401
- declare class EmmitterService extends EmmitterService$1<EventContract> {}
1402
- //#endregion
1403
- //#region src/server/services/EncryptService.d.ts
1404
- interface URLOptions {
1405
- data?: any;
1406
- expires?: ms.StringValue;
1407
- expireAt?: number | Date;
1408
- }
1409
- interface EncryptServiceOptions {
1410
- key?: string;
1411
- debug?: boolean;
1412
- logger?: LoggerService;
1413
- env?: EnvService;
1414
- }
1415
- declare class EncryptService {
1416
- static __container_entry_key: string;
1417
- debug: boolean;
1418
- env: EnvService;
1419
- logger: LoggerService;
1420
- private readonly algorithm;
1421
- private key;
1422
- constructor(options: EncryptServiceOptions);
1423
- static create(options: EncryptServiceOptions): EncryptService;
1424
- setDebug(debug: boolean): void;
1425
- setLogger(logger: LoggerService): void;
1426
- setEnv(env: EnvService): void;
1427
- setKey(key: string): void;
1428
- encrypt(text: string): string;
1429
- decrypt(options: string): string;
1430
- encryptObject(obj: any): string;
1431
- decryptObject<T>(encryptedString: string): T;
1432
- url(path: string, options?: URLOptions): string;
1433
- verifyUrl(encryptedKey: string): any;
1434
- }
1435
- //#endregion
1436
- //#region src/server/services/ExceptionService.d.ts
1437
- interface ExceptionServiceOptions {
1438
- ignoreCodeErrors?: number[];
1439
- logger?: LoggerService;
1440
- env?: EnvService;
1441
- }
1442
- declare class ExceptionService {
1443
- static __container_entry_key: string;
1444
- ignoreCodeErrors: number[];
1445
- logger: LoggerService;
1446
- env: EnvService;
1447
- constructor(options?: ExceptionServiceOptions);
1448
- handle(error: Error, response: Response$1): Response$1<any, Record<string, any>>;
1449
- }
1450
- //#endregion
1451
- //#region src/server/services/HasherService.d.ts
1452
- declare class HasherService {
1453
- static __container_entry_key: string;
1454
- hash(value: string): Promise<string>;
1455
- compare(a: string, b: string): Promise<boolean>;
1456
- }
1457
- //#endregion
1458
- //#region src/server/services/HttpService.d.ts
1459
- interface HttpServiceOptions {
1460
- debug?: boolean;
1461
- router?: RouterService;
1462
- logger?: LoggerService;
1463
- exception?: ExceptionService;
1464
- emmitter?: EmmitterService$1;
1465
- env?: EnvService;
1466
- origins?: string[];
1467
- }
1468
- declare class HttpService {
1469
- static __container_entry_key: string;
1470
- app: express.Application;
1471
- server: Server | null;
1472
- router: RouterService;
1473
- exception: ExceptionService;
1474
- logger: LoggerService;
1475
- emmitter: EmmitterService$1;
1476
- env: EnvService;
1477
- debug: boolean;
1478
- onUnhandlerRouted: ((req: express.Request, res: express.Response) => void) | null;
1479
- constructor(options: HttpServiceOptions);
1480
- getExpressApp(): express.Application;
1481
- cors(options: cors.CorsOptions): void;
1482
- use: express.Application['use'];
1483
- routes(): void;
1484
- parser(req: express.Request, res: express.Response, next: express.NextFunction): void;
1485
- execute(url: URL, request: express.Request, response: express.Response, route: Route): Promise<void>;
1486
- start(): void;
1487
- stop(): Promise<void>;
1488
- }
1489
- //#endregion
1490
- //#region src/server/services/HttpTesterService.d.ts
1491
- interface HttpTesterServiceOptions {
1492
- http: HttpService;
1493
- }
1494
- declare class HttpTesterService {
1495
- static __container_entry_key: string;
1496
- http: HttpService;
1497
- request: supertest.SuperTest<supertest.Test>;
1498
- headers: Record<string, string>;
1499
- cookies: Record<string, string>;
1500
- constructor(options: HttpTesterServiceOptions);
1501
- create(request: Test): Test;
1502
- get(url: string): Test;
1503
- post(url: string, body?: any): Test;
1504
- loginByUser(user: UserEntity$1): Promise<void>;
1505
- loginByUsername(username: string): Promise<void>;
1506
- }
1507
- //#endregion
1508
- //#region src/server/services/LifecycleService.d.ts
1509
- declare class LifecycleService extends LifecycleService$1 {
1510
- addDirectory(dirname: string): Promise<void>;
1511
- }
1512
- //#endregion
1513
- //#region src/server/contracts/DatabaseContract.d.ts
1514
- interface SoftDeleteTable {
1515
- deleted_at?: ColumnType<Date | string | null, Date | string | undefined, Date | string | null>;
1516
- }
1517
- interface TimestampTable {
1518
- created_at: ColumnType<Date, string | undefined, never>;
1519
- updated_at: ColumnType<Date, string | undefined, never>;
1520
- }
1521
- interface MigrationsTable {
1522
- name: string;
1523
- module: string | null;
1524
- executed_at: ColumnType<Date, string | undefined, never>;
1525
- }
1526
- interface UserTable extends TimestampTable, SoftDeleteTable {
1527
- id: Generated<number>;
1528
- name: string;
1529
- username: string;
1530
- email: string;
1531
- password: string;
1532
- verified_at?: Date | string | null;
1533
- }
1534
- interface UserMetaTable extends TimestampTable, SoftDeleteTable {
1535
- id: Generated<number>;
1536
- user_id: number;
1537
- name: string;
1538
- value: string | null;
1539
- }
1540
- interface TokenTable extends TimestampTable {
1541
- id: Generated<number>;
1542
- user_id: number;
1543
- token: string;
1544
- type: string;
1545
- expires_at: string | null;
1546
- }
1547
- interface RoleTable {
1548
- id: Generated<number>;
1549
- name: string;
1550
- description: string | null;
1551
- }
1552
- interface UserRoleTable {
1553
- user_id: number;
1554
- role_id: number;
1555
- }
1556
- interface PermissionTable extends TimestampTable, SoftDeleteTable {
1557
- id: Generated<number>;
1558
- name: string;
1559
- description: string | null;
1560
- origin: string;
1561
- subject: string;
1562
- action: string;
1563
- conditions: string | null;
1564
- }
1565
- interface PermissionAssignmentTable {
1566
- id: Generated<number>;
1567
- permission_id: number;
1568
- assignable_type: string;
1569
- assignable_id: string;
1570
- }
1571
- interface FileTable extends TimestampTable, SoftDeleteTable {
1572
- id: Generated<number>;
1573
- drive: string;
1574
- mimetype: string;
1575
- client_name: string;
1576
- filename: string;
1577
- purpose: string;
1578
- public: boolean;
1579
- }
1580
- interface FileMetaTable extends TimestampTable, SoftDeleteTable {
1581
- id: Generated<number>;
1582
- file_id: number;
1583
- name: string;
1584
- value: string | null;
1585
- }
1586
- interface UploadSessionTable {
1587
- id: Generated<number>;
1588
- purpose: string;
1589
- mime_types: string;
1590
- max_size: number;
1591
- expires_at: string;
1592
- }
1593
- interface JobTable extends TimestampTable {
1594
- id: string;
1595
- queue_id: string;
1596
- status: 'pending' | 'in_progress' | 'completed' | 'failed';
1597
- data: string | null;
1598
- result: string | null;
1599
- error: string | null;
1600
- }
1601
- interface EmailTemplateTable extends TimestampTable, SoftDeleteTable {
1602
- id: Generated<number>;
1603
- name: string;
1604
- subject: string;
1605
- key: string;
1606
- body: string | null;
1607
- engine: string | null;
1608
- }
1609
- interface EmailTemplateMetaTable extends TimestampTable, SoftDeleteTable {
1610
- id: Generated<number>;
1611
- template_id: number;
1612
- name: string;
1613
- value: string;
1614
- }
1615
- interface OauthAccountTable extends TimestampTable, SoftDeleteTable {
1616
- id: Generated<number>;
1617
- user_id: number;
1618
- provider: string;
1619
- provider_user_id: string;
1620
- provider_user_email: string | null;
1621
- }
1622
- interface OauthTokenTable {
1623
- id: Generated<number>;
1624
- user_id: number | null;
1625
- provider: string | null;
1626
- action: string;
1627
- token: string;
1628
- expires_at: string;
1629
- metadata: string;
1630
- }
1631
- interface DatabaseContract {
1632
- users: UserTable;
1633
- user_metas: UserMetaTable;
1634
- tokens: TokenTable;
1635
- migrations: MigrationsTable;
1636
- files: FileTable;
1637
- file_metas: FileMetaTable;
1638
- file_upload_sessions: UploadSessionTable;
1639
- roles: RoleTable;
1640
- user_roles: UserRoleTable;
1641
- permissions: PermissionTable;
1642
- permissions_assignments: PermissionAssignmentTable;
1643
- jobs: JobTable;
1644
- email_templates: EmailTemplateTable;
1645
- email_template_metas: EmailTemplateMetaTable;
1646
- oauth_accounts: OauthAccountTable;
1647
- oauth_tokens: OauthTokenTable;
1648
- }
1649
- //#endregion
1650
- //#region src/server/services/MetadataQueryService.d.ts
1651
- interface Metadafilter {
1652
- eq?: string;
1653
- neq?: string;
1654
- like?: string;
1655
- nlike?: string;
1656
- in?: string[];
1657
- nin?: string[];
1658
- gt?: string;
1659
- gte?: string;
1660
- lt?: string;
1661
- lte?: string;
1662
- is_null?: boolean;
1663
- exists?: boolean;
1664
- }
1665
- interface MetadataQueryPayload {
1666
- [key: string]: string | Metadafilter;
1667
- }
1668
- declare class MetadataQueryService<T extends keyof DatabaseContract> {
1669
- private payload;
1670
- private table;
1671
- private foreignKey;
1672
- private parentKey;
1673
- constructor(payload: MetadataQueryPayload, table: T, foreignKey: keyof DatabaseContract[T], parentKey?: string);
1674
- get needWhereIn(): boolean;
1675
- get needWhereNotIn(): boolean;
1676
- apply(dbQuery: any): any;
1677
- private buildRowConditions;
1678
- whereIn: <DBQuery>(eb: ExpressionBuilder$1<any, any>) => DBQuery;
1679
- whereNotIn: <DBQuery>(eb: ExpressionBuilder$1<any, any>) => DBQuery;
1680
- }
1681
- //#endregion
1682
- //#region src/server/services/MetadataService.d.ts
1683
- declare class MetadataService {
1684
- id: number;
1685
- table: string;
1686
- foreignKey: string;
1687
- constructor(payload: Pick<MetadataService, 'table' | 'foreignKey' | 'id'>);
1688
- static parse(value: any): any;
1689
- static flatten(items: Array<{
1690
- name: string;
1691
- value: any;
1692
- }>): Record<string, any>;
1693
- get<T = any>(name: string): Promise<T | undefined>;
1694
- get<T = any>(name: string, defaultValue: T): Promise<T>;
1695
- set(name: string, value: any): Promise<void>;
1696
- list(): Promise<Array<{
1697
- name: string;
1698
- value: any;
1699
- }>>;
1700
- all(): Promise<Record<string, any>>;
1701
- }
1702
- //#endregion
1703
- //#region src/server/services/PluginIpcClient.d.ts
1704
- type IpcMessage<T = any> = {
1705
- id: string;
1706
- event: string;
1707
- data: T;
1708
- };
1709
- type IpcListener$1<T = any> = (data: T) => void;
1710
- declare class PluginIpcClient {
1711
- private listeners;
1712
- constructor();
1713
- on<T = any>(event: string, callback: IpcListener$1<T>): void;
1714
- off<T = any>(event: string, callback: IpcListener$1<T>): void;
1715
- emit<T = any>(event: string, data?: T): string;
1716
- }
1717
- //#endregion
1718
- //#region src/server/services/PluginIpcHost.d.ts
1719
- type IpcListener<T = any> = (data: T) => void;
1720
- declare class PluginIpcHost {
1721
- private readonly child;
1722
- private listeners;
1723
- constructor(child: ChildProcess);
1724
- on<T = any>(event: string, callback: IpcListener<T>): void;
1725
- off<T = any>(event: string, callback: IpcListener<T>): void;
1726
- emit<T = any>(event: string, data?: T): string;
1727
- }
1728
- //#endregion
1729
- //#region src/server/services/PluginRouter.d.ts
1730
- type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
1731
- interface RouteDefinition {
1732
- method: HttpMethod;
1733
- path: string;
1734
- }
1735
- interface RouteRequest {
1736
- requestId: string;
1737
- method: HttpMethod;
1738
- path: string;
1739
- body?: any;
1740
- headers?: Record<string, string>;
1741
- query?: Record<string, string>;
1742
- params?: Record<string, string>;
1743
- }
1744
- interface RouteResponsePayload {
1745
- requestId: string;
1746
- status: number;
1747
- body?: any;
1748
- headers?: Record<string, string>;
1749
- }
1750
- interface RouteReply {
1751
- status(code: number): RouteReply;
1752
- send(body?: any): void;
1753
- }
1754
- type RouteHandler = (req: RouteRequest, reply: RouteReply) => void | Promise<void>;
1755
- declare class PluginRouter {
1756
- private readonly client;
1757
- private routes;
1758
- constructor(client: PluginIpcClient);
1759
- private dispatch;
1760
- private register;
1761
- get(path: string, handler: RouteHandler): void;
1762
- post(path: string, handler: RouteHandler): void;
1763
- put(path: string, handler: RouteHandler): void;
1764
- patch(path: string, handler: RouteHandler): void;
1765
- delete(path: string, handler: RouteHandler): void;
1766
- }
1767
- //#endregion
1768
- //#region src/server/services/RouterFileBaseRoutingService.d.ts
1769
- declare class RouterFileBaseRoutingService {
1770
- private directory;
1771
- private prefix;
1772
- private module?;
1773
- private router;
1774
- private logger;
1775
- private routes;
1776
- debug: boolean;
1777
- setDirectory(directory: string): this;
1778
- setPrefix(prefix: string): this;
1779
- setRouter(router: RouterService): this;
1780
- setModule(module: string): this;
1781
- setLogger(logger: LoggerService): this;
1782
- setDebug(debug: boolean): this;
1783
- static create(directory: string): RouterFileBaseRoutingService;
1784
- loadFiles(): Promise<void>;
1785
- registerRoutes(): Promise<void>;
1786
- load(): Promise<void>;
1787
- }
1788
- //#endregion
1789
- //#region src/server/services/RouterRegisterService.d.ts
1790
- interface RouterRegisterEntry {
1791
- filepath: string;
1792
- metadata: Record<string, any>;
1793
- }
1794
- declare class RouterRegister<C = {}> extends RouterService<C> {
1795
- files: Map<string, RouterRegisterEntry>;
1796
- dirs: Map<string, RouterRegisterEntry>;
1797
- constructor(router?: Partial<RouterService<C>>);
1798
- addFile(filename: string, metadata?: Record<string, any>): void;
1799
- addDir(dirname: string, metadata?: Record<string, any>): void;
1800
- private loadFile;
1801
- private loadDir;
1802
- load(): Promise<void>;
1803
- }
1804
- //#endregion
1805
- //#region src/server/services/RouterResourceService.d.ts
1806
- type ResourceMethod = 'index' | 'show' | 'store' | 'update' | 'destroy';
1807
- interface RouterResourceOptions {
1808
- middleware?: Partial<Record<ResourceMethod | 'all', Middleware>>;
1809
- except?: ResourceMethod[];
1810
- }
1811
- declare const RouterResourceService_base: {
1812
- new (...args: any[]): {
1813
- listeners: Listener[];
1814
- on(event: string, listener: (...args: any[]) => void): void;
1815
- off(event: string, listener: (...args: any[]) => void): void;
1816
- emit(event: string, ...args: any[]): void;
1817
- emitAsync(event: string, ...args: any[]): Promise<void>;
1818
- };
1819
- } & Constructor;
1820
- declare class RouterResourceService extends RouterResourceService_base {
1821
- private options;
1822
- constructor(options?: RouterResourceOptions);
1823
- index(ctx: HttpContext): Promise<any>;
1824
- show(ctx: HttpContext): Promise<any>;
1825
- store(ctx: HttpContext): Promise<any>;
1826
- update(ctx: HttpContext): Promise<any>;
1827
- destroy(ctx: HttpContext): Promise<any>;
1828
- private wrap;
1829
- register(router: RouterService): void;
1830
- }
1831
- //#endregion
1832
- //#region src/server/mixins/ModelConfigMixin.d.ts
1833
- type ConfigModel = ReturnType<ReturnType<typeof ModelConfig>>;
1834
- interface Options$1 {
1835
- readonly?: boolean;
1836
- }
1837
- declare function ModelConfig(key: string, options?: Options$1): <TBase extends Constructor>(Base: TBase) => {
1838
- new (...args: any[]): {};
1839
- __isConfigModel: boolean;
1840
- serialize<T>(this: new (...args: any[]) => T, row: any): Promise<T>;
1841
- list<T>(this: new (...args: any[]) => T): Promise<T[]>;
1842
- find<T>(this: new (...args: any[]) => T, id: string): Promise<T | null>;
1843
- findOrFail<T>(this: new (...args: any[]) => T, id: string): Promise<T>;
1844
- create<T>(this: new (...args: any[]) => T, item: T & {
1845
- id: string;
1846
- }): Promise<void>;
1847
- update<T>(this: new (...args: any[]) => T, id: string, data: T): Promise<void>;
1848
- updateOrCreate<T>(this: new (...args: any[]) => T, id: string, data: Partial<T>): Promise<void>;
1849
- destroy<T>(this: new (...args: any[]) => T, id: string): Promise<void>;
1850
- } & TBase;
1851
- //#endregion
1852
- //#region src/server/services/RouterResourceConfigService.d.ts
1853
- declare class RouterResourceConfig extends RouterResourceService {
1854
- private model;
1855
- constructor(model: ConfigModel, options?: RouterResourceOptions);
1856
- index(ctx: HttpContext): Promise<{
1857
- page: number;
1858
- total: number;
1859
- total_pages: number;
1860
- items: {}[];
1861
- }>;
1862
- show(ctx: HttpContext): Promise<{}>;
1863
- store(ctx: HttpContext): Promise<{
1864
- message: string;
1865
- }>;
1866
- update(ctx: HttpContext): Promise<void>;
1867
- destroy(ctx: HttpContext): Promise<{
1868
- success: boolean;
1869
- }>;
1870
- }
1871
- //#endregion
1872
- //#region src/server/services/ShellService.d.ts
1873
- interface CommandOptions {
1874
- cwd?: string;
1875
- env?: NodeJS.ProcessEnv;
1876
- shell?: boolean;
1877
- }
1878
- interface ShellServiceOptions {
1879
- debug?: boolean;
1880
- logger?: LoggerService;
1881
- }
1882
- declare class ShellService {
1883
- static __container_entry_key: string;
1884
- debug: boolean;
1885
- logger: LoggerService;
1886
- constructor(options?: ShellServiceOptions);
1887
- /**
1888
- * Execute a shell command and return a promise
1889
- */
1890
- command(bin: string, args: string[], options?: CommandOptions): Promise<void>;
1891
- /**
1892
- * Execute a shell command and return the output as a string
1893
- */
1894
- executeCommandWithOutput(bin: string, args: string[], options?: CommandOptions): Promise<string>;
1895
- }
1896
- //#endregion
1897
- //#region src/server/repositories/ConfigRepository.d.ts
1898
- declare class ConfigRepository<TEntity = Record<string, any>, TOptions = Record<string, any>> {
1899
- protected config: ConfigService;
1900
- protected key: string;
1901
- protected primaryKey: string;
1902
- constructor(config: ConfigService, key: string, primaryKey?: string);
1903
- protected getItems(): TEntity[];
1904
- protected setItems(items: TEntity[]): void;
1905
- query(options?: TOptions): TEntity[];
1906
- count(options?: TOptions): Promise<number>;
1907
- findMany(options?: FindManyOptions & TOptions): Promise<TEntity[]>;
1908
- findOne(options?: TOptions): Promise<TEntity | null>;
1909
- findById(id: string, options?: TOptions): Promise<TEntity | null>;
1910
- findByIdOrFail(id: string, options?: TOptions): Promise<TEntity>;
1911
- paginate(options?: PaginateOptions$1 & TOptions): Promise<Pagination<TEntity>>;
1912
- create(data: Partial<TEntity>): Promise<TEntity>;
1913
- createMany(data: Partial<TEntity>[]): Promise<TEntity[]>;
1914
- updateById(id: string, data: Partial<TEntity>): Promise<TEntity>;
1915
- deleteById(id: string): Promise<void>;
1916
- deleteMany(options?: DeleteManyOptions & TOptions): Promise<void>;
1917
- }
1918
- //#endregion
1919
- //#region src/server/repositories/FileRepository.d.ts
1920
- interface FileRepositoryQueryOptions {
1921
- id?: number | number[];
1922
- search?: string;
1923
- purpose?: string[];
1924
- client_name?: string[];
1925
- metas?: MetadataQueryPayload;
1926
- }
1927
- declare class FileRepository extends DatabaseRepository<FileEntity, FileEntity['id'], FileRepositoryQueryOptions> {
1928
- constructor(db: DatabaseRepository['db']);
1929
- query(options?: FileRepositoryQueryOptions): any;
1930
- }
1931
- //#endregion
1932
- //#region src/server/repositories/GitBranchRepository.d.ts
1933
- interface GitBranchRepositoryOptions {
1934
- cwd: string;
1935
- shell?: ShellService;
1936
- }
1937
- declare class GitBranchRepository {
1938
- cwd: string;
1939
- shell: ShellService;
1940
- constructor(options: GitBranchRepositoryOptions);
1941
- list(): Promise<GitBranchEntity[]>;
1942
- fetch(options: {
1943
- remote: string;
1944
- branch: string;
1945
- localName?: string;
1946
- }): Promise<void>;
1947
- }
1948
- //#endregion
1949
- //#region src/server/repositories/GitCommitRepository.d.ts
1950
- interface GitCommitRepositoryOptions {
1951
- cwd: string;
1952
- shell?: ShellService;
1953
- }
1954
- interface GitCommitListOptions {
1955
- limit?: number;
1956
- cursor?: string;
1957
- branches?: string | string[];
1958
- }
1959
- interface GitCommitListResult {
1960
- items: GitCommitEntity[];
1961
- cursor_previous: string | null;
1962
- cursor_current: string | null;
1963
- cursor_next: string | null;
1964
- }
1965
- declare class GitCommitRepository {
1966
- cwd: string;
1967
- shell: ShellService;
1968
- constructor(options: GitCommitRepositoryOptions);
1969
- list(options?: GitCommitListOptions): Promise<GitCommitListResult>;
1970
- checkout(hash: string): Promise<void>;
1971
- }
1972
- //#endregion
1973
- //#region src/server/repositories/PermissionAssignmentRepository.d.ts
1974
- interface PermissionAssignmentRepositoryQueryOptions {
1975
- id?: number | number[];
1976
- permissionId?: number | number[];
1977
- assignableId?: string | string[];
1978
- assignableType?: string | string[];
1979
- }
1980
- declare class PermissionAssignmentRepository extends DatabaseRepository<PermissionAssignment, PermissionAssignment['id'], PermissionAssignmentRepositoryQueryOptions> {
1981
- constructor(db: DatabaseRepository['db']);
1982
- query(options?: PermissionAssignmentRepositoryQueryOptions): any;
1983
- }
1984
- //#endregion
1985
- //#region src/server/repositories/PermissionRepository.d.ts
1986
- interface PermissionRepositoryQueryOptions {
1987
- id?: number | number[];
1988
- search?: string;
1989
- }
1990
- declare class PermissionRepository extends DatabaseRepository<Permission, Permission['id'], PermissionRepositoryQueryOptions> {
1991
- constructor(db: DatabaseRepository['db']);
1992
- query(options?: PermissionRepositoryQueryOptions): any;
1993
- }
1994
- //#endregion
1995
- //#region src/server/mixins/DatabaseRepositoryInferMixin.d.ts
1996
- interface IRepositoryTypes<TEntity = Record<string, any>, TPrimaryKeyType = any, TOptions = Record<string, any>> {
1997
- count(options?: TOptions): Promise<number>;
1998
- findMany(options?: TOptions & FindManyOptions): Promise<TEntity[]>;
1999
- findById(id: TPrimaryKeyType, options?: TOptions): Promise<TEntity | null>;
2000
- findByIdOrFail(id: TPrimaryKeyType, options?: TOptions): Promise<TEntity>;
2001
- paginate(options?: TOptions & PaginateOptions$1): Promise<Pagination>;
2002
- create(data: Partial<TEntity>, options?: TOptions): Promise<TEntity>;
2003
- createMany(data: Partial<TEntity>[], options?: TOptions): Promise<TEntity[]>;
2004
- deleteById(id: TPrimaryKeyType): Promise<void>;
2005
- destroyMany(options?: TOptions): Promise<void>;
2006
- }
2007
- declare function DatabaseRepositoryInferMixin<TEntity = Record<string, any>, TPrimaryKeyType = any, TOptions = Record<string, any>>(): <TBase extends Constructor>(Base: TBase) => TBase & Constructor<IRepositoryTypes<TEntity, TPrimaryKeyType, TOptions>>;
2008
- //#endregion
2009
- //#region src/server/repositories/TokenRepository.d.ts
2010
- interface TokenRepositoryQueryOptions {
2011
- id?: number | number[];
2012
- search?: string;
2013
- type?: string | string[];
2014
- }
2015
- interface TokenRepositoryGenerateOptions {
2016
- user_id: number;
2017
- type?: string;
2018
- expires_in_hours?: number;
2019
- }
2020
- declare const TokenRepository_base: Constructor & Constructor<IRepositoryTypes<{
2021
- id: number;
2022
- name: string | null;
2023
- type: string;
2024
- user_id: number;
2025
- token: string;
2026
- created_at: string;
2027
- updated_at: string;
2028
- expires_at: string;
2029
- }, number, TokenRepositoryQueryOptions>> & Constructor<{}> & typeof DatabaseRepository;
2030
- declare class TokenRepository extends TokenRepository_base {
2031
- autoCreatedAt: boolean;
2032
- autoUpdatedAt: boolean;
2033
- constructor(db: DatabaseRepository['db']);
2034
- query(options?: TokenRepositoryQueryOptions): any;
2035
- findByToken(token: string): Promise<Token$1 | null>;
2036
- generate(options: TokenRepositoryGenerateOptions): Promise<Record<string, any>>;
2037
- }
2038
- //#endregion
2039
- //#region src/server/gateways/DatabaseGateway.d.ts
2040
- declare class DatabaseGateway<DB> extends Kysely<DB> {
2041
- static __container_entry_key: string;
2042
- _dialect_identifier: string;
2043
- }
2044
- //#endregion
2045
- //#region src/server/gateways/DriveFSGateway.d.ts
2046
- interface DriveFSConfig {
2047
- directory: string;
2048
- }
2049
- declare class DriveFS extends DriveBaseGateway {
2050
- private schema;
2051
- constructor(data: Pick<DriveBaseGateway, 'id' | 'name' | 'description' | 'config'>);
2052
- get valid(): boolean;
2053
- private checkValid;
2054
- protected get rootPath(): string;
2055
- exists: DriveBaseGateway['exists'];
2056
- list: DriveBaseGateway['list'];
2057
- find: DriveBaseGateway['find'];
2058
- mkdir(filename: string): Promise<void>;
2059
- read: DriveBaseGateway['read'];
2060
- readStream(filename: string): Promise<fs.ReadStream>;
2061
- write: DriveBaseGateway['write'];
2062
- writeStream(filename: string, stream: NodeJS.ReadableStream): Promise<void>;
2063
- delete: DriveBaseGateway['delete'];
2064
- url: DriveBaseGateway['url'];
2065
- uploadUrl: DriveBaseGateway['uploadUrl'];
2066
- }
2067
- //#endregion
2068
- //#region src/server/gateways/GitGateway.d.ts
2069
- interface GitRepoInfo {
2070
- directory: string;
2071
- head: string | null;
2072
- shortHash: string;
2073
- isDetachedHead: boolean;
2074
- remotes: string[];
2075
- }
2076
- interface GitGatewayOptions {
2077
- cwd: string;
2078
- sshKey?: string;
2079
- sshKeyFile?: string;
2080
- logger?: LoggerService;
2081
- shell?: ShellService;
2082
- debug?: boolean;
2083
- }
2084
- interface GitGatewayExecuteOptions {
2085
- args: string;
2086
- cwd?: string;
2087
- sshKey?: string;
2088
- sshKeyFile?: string;
2089
- logger?: LoggerService;
2090
- shell?: ShellService;
2091
- debug?: boolean;
2092
- }
2093
- declare class GitGateway {
2094
- private readonly cwd;
2095
- private readonly sshKey?;
2096
- private readonly sshKeyFile?;
2097
- private readonly logger;
2098
- private readonly debug;
2099
- private readonly shell;
2100
- constructor(options: GitGatewayOptions);
2101
- static execute(options: GitGatewayExecuteOptions): Promise<string>;
2102
- static clone(repoUrl: string, targetDir: string, options: Omit<GitGatewayOptions, 'cwd'>): Promise<GitGateway>;
2103
- run(args: string): Promise<string>;
2104
- tryRun(args: string): Promise<string | null>;
2105
- checkout(ref: string): Promise<string>;
2106
- fetchAll(): Promise<string>;
2107
- pull(): Promise<void>;
2108
- getInfo(): Promise<GitRepoInfo>;
2109
- }
2110
- //#endregion
2111
- //#region src/server/mixins/MetadataMixin.d.ts
2112
- declare function valueToString(value: any): string;
2113
- declare function Metadata<Table extends keyof DatabaseContract>(metasTable: Table, foreignKey: keyof DatabaseContract[Table]): <TBase extends Constructor>(Base: TBase) => {
2114
- new (...args: any[]): {
2115
- get<T = any>(name: string): Promise<T | undefined>;
2116
- get<T = any>(name: string, defaultValue: T): Promise<T>;
2117
- set(name: string, value: any): Promise<void>;
2118
- };
2119
- } & TBase;
2120
- //#endregion
2121
- //#region src/server/facades/database.d.ts
2122
- declare const database: DatabaseGateway<DatabaseContract>;
2123
- //#endregion
2124
- //#region src/server/queries/common.d.ts
2125
- type SelectFrom<T extends keyof DatabaseContract> = ReturnType<typeof database.selectFrom<T>> | SelectQueryBuilder<DatabaseContract, T, any>;
2126
- type InsertFrom<T extends keyof DatabaseContract> = ReturnType<typeof database.insertInto<T>>;
2127
- type UpdateFrom<T extends keyof DatabaseContract> = ReturnType<typeof database.updateTable<T>>;
2128
- type DeleteFrom<T extends keyof DatabaseContract> = ReturnType<typeof database.deleteFrom<T>>;
2129
- type SelectBuilder<T extends keyof DatabaseContract> = SelectQueryBuilder<DatabaseContract, T, Selectable<DatabaseContract[T]>>;
2130
- type ExpressionBuilder<T extends keyof DatabaseContract> = ExpressionBuilder$1<DatabaseContract, T>;
2131
- declare const now: () => _$kysely.RawBuilder<string>;
2132
- interface SerializeOptions<T extends keyof DatabaseContract> {
2133
- serialize?: (row: Selectable<DatabaseContract[T]>) => any;
2134
- }
2135
- type SerializableResult<T extends keyof DatabaseContract, O extends SerializeOptions<T> | undefined> = O extends undefined ? Selectable<DatabaseContract[T]> : O extends {
2136
- serialize: (row: Selectable<DatabaseContract[T]>) => infer R;
2137
- } ? R : Selectable<DatabaseContract[T]>;
2138
- //#endregion
2139
- //#region src/server/queries/updateOrCreate.d.ts
2140
- interface UpdateOrCreateOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
2141
- debug?: boolean;
2142
- where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
2143
- select?: (qb: SelectFrom<T>) => SelectFrom<T>;
2144
- update?: (qb: UpdateFrom<T>) => UpdateFrom<T>;
2145
- values: Insertable<DatabaseContract[T]> | Insertable<DatabaseContract[T]>[];
2146
- }
2147
- declare function updateOrCreate<T extends keyof DatabaseContract, O extends UpdateOrCreateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>>;
2148
- //#endregion
2149
- //#region src/server/queries/list.d.ts
2150
- interface ListOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
2151
- limit?: number;
2152
- offset?: number;
2153
- debug?: boolean;
2154
- where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
2155
- query?: (qb: SelectFrom<T>) => SelectFrom<T>;
2156
- }
2157
- declare function list<T extends keyof DatabaseContract, O extends ListOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>[]>;
2158
- //#endregion
2159
- //#region src/server/queries/paginate.d.ts
2160
- interface PaginateOptions<T extends keyof DatabaseContract> {
2161
- debug?: boolean;
2162
- page?: number;
2163
- limit?: number;
2164
- orderBy?: DatabaseContract[T] | (keyof DatabaseContract[T])[];
2165
- orderDesc?: ('asc' | 'desc') | ('asc' | 'desc')[];
2166
- where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
2167
- serialize?: (row: Selectable<DatabaseContract[T]>) => any;
2168
- query?: (qb: SelectFrom<T>) => any;
2169
- }
2170
- type PaginateResult<T extends keyof DatabaseContract, O extends PaginateOptions<T> | undefined> = O extends undefined ? Selectable<DatabaseContract[T]> : O extends {
2171
- serialize: (row: Selectable<DatabaseContract[T]>) => infer R;
2172
- } ? R : Selectable<DatabaseContract[T]>;
2173
- declare function paginate<T extends keyof DatabaseContract, O extends PaginateOptions<T>>(table: T, options?: O): Promise<PaginationEntity<PaginateResult<T, O>>>;
2174
- //#endregion
2175
- //#region src/server/queries/count.d.ts
2176
- interface CountOptions<T extends keyof DatabaseContract> {
2177
- query?: (qb: SelectFrom<T>) => SelectFrom<T>;
2178
- debug?: boolean;
2179
- }
2180
- declare function count<T extends keyof DatabaseContract, O extends CountOptions<T>>(table: T, options?: O): Promise<number>;
2181
- //#endregion
2182
- //#region src/server/queries/create.d.ts
2183
- interface CreateOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
2184
- values: Insertable<DatabaseContract[T]>;
2185
- primaryKey?: string;
2186
- normalize?: boolean | ((value: any) => any);
2187
- }
2188
- declare function createDefault<T extends keyof DatabaseContract, O extends CreateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>>;
2189
- declare function createMysql<T extends keyof DatabaseContract, O extends CreateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>>;
2190
- declare function create<T extends keyof DatabaseContract, O extends CreateOptions<T>>(table: T, options?: O): Promise<_$kysely.DrainOuterGeneric<{ [K_1 in (DatabaseContract[T] extends infer T_1 ? { [K in keyof T_1]: _$kysely.SelectType<T_1[K]> extends infer T_2 ? T_2 extends _$kysely.SelectType<T_1[K]> ? T_2 extends never ? never : K : never : never } : never)[keyof DatabaseContract[T]]]: _$kysely.SelectType<DatabaseContract[T][K_1]> }>>;
2191
- //#endregion
2192
- //#region src/server/queries/update.d.ts
2193
- interface UpdateOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
2194
- debug?: boolean;
2195
- values: Updateable<DatabaseContract[T]>;
2196
- normalize?: boolean | ((value: any) => any);
2197
- where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
2198
- query?: (qb: UpdateFrom<T>) => UpdateFrom<T>;
2199
- }
2200
- declare function updateDefault<T extends keyof DatabaseContract, O extends UpdateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>[]>;
2201
- declare function updateMysql<T extends keyof DatabaseContract, O extends UpdateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>[]>;
2202
- declare function update<T extends keyof DatabaseContract, O extends UpdateOptions<T>>(table: T, options?: O): Promise<_$kysely.DrainOuterGeneric<{ [K_1 in (DatabaseContract[T] extends infer T_1 ? { [K in keyof T_1]: _$kysely.SelectType<T_1[K]> extends infer T_2 ? T_2 extends _$kysely.SelectType<T_1[K]> ? T_2 extends never ? never : K : never : never } : never)[keyof DatabaseContract[T]]]: _$kysely.SelectType<DatabaseContract[T][K_1]> }>[]>;
2203
- //#endregion
2204
- //#region src/server/queries/destroy.d.ts
2205
- type DeleteFrom$1<T extends keyof DatabaseContract> = ReturnType<typeof database.deleteFrom<T>>;
2206
- interface DestroyOptions<T extends keyof DatabaseContract> {
2207
- query?: (qb: DeleteFrom$1<T>) => DeleteFrom$1<T>;
2208
- where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
2209
- }
2210
- declare function destroy<T extends keyof DatabaseContract, O extends DestroyOptions<T>>(table: T, options?: O): Promise<void>;
2211
- //#endregion
2212
- //#region src/server/queries/firstOrCreate.d.ts
2213
- interface FirstOrCreateOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
2214
- debug?: boolean;
2215
- select?: (qb: SelectFrom<T>) => SelectFrom<T>;
2216
- where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
2217
- values: Insertable<DatabaseContract[T]> | Insertable<DatabaseContract[T]>[];
2218
- }
2219
- declare function firstOrCreate<T extends keyof DatabaseContract, O extends FirstOrCreateOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O>>;
2220
- //#endregion
2221
- //#region src/server/queries/findOne.d.ts
2222
- interface FindOneOptions<T extends keyof DatabaseContract> extends SerializeOptions<T> {
2223
- name?: string;
2224
- query?: (qb: SelectFrom<T>) => SelectFrom<T>;
2225
- where?: (qb: ExpressionBuilder$1<DatabaseContract, T>) => ExpressionWrapper<DatabaseContract, T, any>;
2226
- }
2227
- declare function findOne<T extends keyof DatabaseContract, O extends FindOneOptions<T>>(table: T, options?: O): Promise<SerializableResult<T, O> | null>;
2228
- declare function findOneOrFail<T extends keyof DatabaseContract, O extends FindOneOptions<T>>(table: T, options?: O): Promise<NonNullable<Awaited<SerializableResult<T, O>>>>;
2229
- //#endregion
2230
- //#region src/server/mixins/ModelMixin.d.ts
2231
- type ModelListOptions<T extends keyof DatabaseContract> = Omit<ListOptions<T>, 'serialize'>;
2232
- type ModelFindOptions<T extends keyof DatabaseContract> = Omit<FindOneOptions<T>, 'serialize' | 'orderBy'>;
2233
- type ModelPaginateOptions<T extends keyof DatabaseContract> = Omit<PaginateOptions<T>, 'serialize'>;
2234
- type ModelCountOptions<T extends keyof DatabaseContract> = CountOptions<T>;
2235
- type ModelCreateOptions<T extends keyof DatabaseContract> = Omit<CreateOptions<T>, 'serialize'>;
2236
- type ModelUpdateOptions<T extends keyof DatabaseContract> = Omit<UpdateOptions<T>, 'serialize'>;
2237
- type ModelDestroyOptions<T extends keyof DatabaseContract> = DestroyOptions<T>;
2238
- type ModelFirstOrCreateOptions<T extends keyof DatabaseContract> = Omit<FirstOrCreateOptions<T>, 'serialize'>;
2239
- type ModelUpdateOrCreateOptions<T extends keyof DatabaseContract> = Omit<UpdateOrCreateOptions<T>, 'serialize'>;
2240
- type ModelEntity = ReturnType<ReturnType<typeof ModelMixin<any>>>;
2241
- declare function ModelMixin<Table extends keyof DatabaseContract>(table: Table, primaryKey?: keyof DatabaseContract[Table]): <TBase extends Constructor>(Base: TBase) => {
2242
- new (...args: any[]): {
2243
- save(): Promise<void>;
2244
- destroy(): Promise<void>;
2245
- softDelete(): Promise<void>;
2246
- };
2247
- __model: {
2248
- table: Table;
2249
- primaryKey: keyof DatabaseContract[Table];
2250
- };
2251
- serialize<T>(this: new () => T, row: any): Promise<T>;
2252
- select(): SelectQueryBuilder<DatabaseContract, Table, any>;
2253
- paginate<T>(this: new () => T, o?: ModelPaginateOptions<Table>): Promise<PaginationEntity<T>>;
2254
- list<T>(this: new () => T, o?: ModelListOptions<Table>): Promise<T[]>;
2255
- findOne<T>(this: new () => T, o?: ModelFindOptions<Table>): Promise<T | undefined>;
2256
- findOneOrFail<T>(this: new () => T, o?: ModelFindOptions<Table>): Promise<T>;
2257
- find<T>(this: new () => T, id: any): Promise<T | null>;
2258
- findOrFail<T>(this: new () => T, id: any): Promise<T>;
2259
- findBy<T>(this: new () => T, column: keyof DatabaseContract[Table], value: any): Promise<T>;
2260
- findByOrFail<T>(this: new () => T, column: keyof DatabaseContract[Table], value: any): Promise<T>;
2261
- exists<T>(this: new () => T, o?: ModelListOptions<Table>): Promise<boolean>;
2262
- count<T>(this: new () => T, o?: ModelCountOptions<Table>): Promise<number>;
2263
- create<T>(this: new () => T, payload: ModelCreateOptions<Table>["values"]): Promise<T>;
2264
- createMany<T>(this: new () => T, values: Array<ModelCreateOptions<Table>["values"]>): Promise<T[]>;
2265
- update<T>(this: new () => T, o: ModelUpdateOptions<Table>): Promise<T>;
2266
- updateById<T>(this: new () => T, id: any, values: ModelUpdateOptions<Table>["values"], options?: {
2267
- debug?: boolean;
2268
- }): Promise<T>;
2269
- destroy<T>(this: new () => T, o?: ModelDestroyOptions<Table>): Promise<void>;
2270
- firstOrCreate<T>(this: new () => T, o: ModelFirstOrCreateOptions<Table>): T;
2271
- updateOrCreate<T>(this: new (...args: any[]) => T, o: ModelUpdateOrCreateOptions<Table>): T;
2272
- destroyById<T>(this: new () => T, id: any): Promise<void>;
2273
- } & TBase;
2274
- //#endregion
2275
- //#region src/server/mixins/RelationsMixin.d.ts
2276
- interface Relation {
2277
- load(entities: any[]): Promise<void>;
2278
- }
2279
- declare function Relation<R extends Record<string, Relation>>(relations: R): <TBase extends Constructor>(Base: TBase) => {
2280
- new (...args: any[]): {};
2281
- load<T>(this: new () => T, entities: T | T[], names: keyof R | (keyof R)[]): Promise<void>;
2282
- } & TBase;
2283
- //#endregion
2284
- //#region src/server/facades/config.d.ts
2285
- declare const config: ConfigService;
2286
- //#endregion
2287
- //#region src/server/facades/container.d.ts
2288
- declare const _default: ContainerService;
2289
- //#endregion
2290
- //#region src/server/facades/download.d.ts
2291
- declare const download: DownloadService;
2292
- //#endregion
2293
- //#region src/server/facades/drive.d.ts
2294
- declare const drive: DriveService;
2295
- //#endregion
2296
- //#region src/server/facades/emmitter.d.ts
2297
- declare const emmitter: EmmitterService$1<Record<string, any>>;
2298
- //#endregion
2299
- //#region src/server/facades/encrypt.d.ts
2300
- declare const encrypt: EncryptService;
2301
- //#endregion
2302
- //#region src/server/facades/env.d.ts
2303
- declare const env: EnvService;
2304
- //#endregion
2305
- //#region src/server/facades/filesRepository.d.ts
2306
- declare const fileRepository: FileRepository;
2307
- //#endregion
2308
- //#region src/server/facades/hasher.d.ts
2309
- declare const hasher: HasherService;
2310
- //#endregion
2311
- //#region src/server/facades/http.d.ts
2312
- declare const http: HttpService;
2313
- //#endregion
2314
- //#region src/server/facades/logger.d.ts
2315
- declare const logger: LoggerService;
2316
- //#endregion
2317
- //#region src/server/facades/migrator.d.ts
2318
- declare const migrator: MigratorService;
2319
- //#endregion
2320
- //#region src/server/facades/permissionAssignmentRepository.d.ts
2321
- declare const permissionAssignmentRepository: PermissionAssignmentRepository;
2322
- //#endregion
2323
- //#region src/server/facades/permissionRepository.d.ts
2324
- declare const permissionRepository: PermissionRepository;
2325
- //#endregion
2326
- //#region src/server/facades/router.d.ts
2327
- declare const router: RouterService<HttpContext>;
2328
- //#endregion
2329
- //#region src/server/facades/scheduler.d.ts
2330
- declare const scheduler: SchedulerService;
2331
- //#endregion
2332
- //#region src/server/facades/shell.d.ts
2333
- declare const shell: ShellService;
2334
- //#endregion
2335
- //#region src/server/facades/tokenRepository.d.ts
2336
- declare const tokenRepository: TokenRepository;
2337
- //#endregion
2338
- //#region src/server/facades/userRepository.d.ts
2339
- declare const userRepository: UserRepository;
2340
- //#endregion
2341
- //#region src/server/contracts/KyselyContract.d.ts
2342
- interface DatabaseKysely extends Kysely<DatabaseContract> {}
2343
- //#endregion
2344
- //#region src/server/utils/defineLoader.d.ts
2345
- interface Loader<T = Record<string, any>> {
2346
- load(entities: T[]): Promise<void>;
2347
- }
2348
- interface LoaderRecord<T = Record<string, any>> {
2349
- [key: string]: Loader<T>;
2350
- }
2351
- declare function defineLoader<T = Record<string, any>>(loader: Loader<T>): Loader<T>;
2352
- //#endregion
2353
- //#region src/server/loaders/fileLoader.d.ts
2354
- interface FileLoaderOptions$1 {
2355
- fileIdProperty: string;
2356
- fileProperty: string;
2357
- }
2358
- declare function createFileLoader<T extends Record<string, any>>(options: FileLoaderOptions$1): Loader<T>;
2359
- //#endregion
2360
- //#region src/server/loaders/fileUrlLoader.d.ts
2361
- interface FileLoaderOptions {
2362
- fileIdProperty?: string;
2363
- fileUrlProperty?: string;
2364
- }
2365
- declare function loadFileUrl<T extends Record<string, any>>(entities: T[], options?: FileLoaderOptions): Promise<void>;
2366
- declare function createFileUrlLoader<T extends Record<string, any>>(options?: FileLoaderOptions): Loader<T>;
2367
- //#endregion
2368
- //#region src/server/loaders/hasManyThroughLoader.d.ts
2369
- type KeyOrFunction<T> = keyof T | ((entity: T) => any);
2370
- interface HasManyThroughLoaderOptions<TEntity extends Record<string, any> = Record<string, any>, TPivotEntity extends Record<string, any> = Record<string, any>, TTargetEntity extends Record<string, any> = Record<string, any>> {
2371
- key: string;
2372
- pivot: {
2373
- sourceKey: KeyOrFunction<TEntity>;
2374
- targetKey: KeyOrFunction<TPivotEntity>;
2375
- findEntities(ids: (string | number)[]): Promise<TPivotEntity[]>;
2376
- };
2377
- target: {
2378
- sourceKey: KeyOrFunction<TPivotEntity>;
2379
- targetKey: KeyOrFunction<TTargetEntity>;
2380
- findEntities(ids: (string | number)[]): Promise<TTargetEntity[]>;
2381
- };
2382
- }
2383
- declare function loadHasManyThrough<TEntity extends Record<string, any> = Record<string, any>, TPivotEntity extends Record<string, any> = Record<string, any>, TTargetEntity extends Record<string, any> = Record<string, any>>(payload: any | any[], options: HasManyThroughLoaderOptions<TEntity, TPivotEntity, TTargetEntity>): Promise<void>;
2384
- declare function createHasManyThroughLoader<TEntity extends Record<string, any> = Record<string, any>, TPivotEntity extends Record<string, any> = Record<string, any>, TTargetEntity extends Record<string, any> = Record<string, any>>(options: HasManyThroughLoaderOptions<TEntity, TPivotEntity, TTargetEntity>): Loader<TEntity>;
2385
- //#endregion
2386
- //#region src/server/loaders/loadMetas.d.ts
2387
- interface RepositoryMeta {
2388
- name: string;
2389
- value: any;
2390
- }
2391
- interface LoadMetasOptions {
2392
- findMany(ids: any[]): Promise<RepositoryMeta[]>;
2393
- entityIdKey?: string;
2394
- foreignKey?: string;
2395
- targetKey?: string;
2396
- }
2397
- declare function loadMetas<T extends Record<string, any>>(payload: T | T[], options: LoadMetasOptions): Promise<void>;
2398
- declare function createMetasLoader<T extends Record<string, any>>(options: LoadMetasOptions): Loader<T>;
2399
- //#endregion
2400
- //#region src/server/loaders/permissionLoader.d.ts
2401
- interface PermissionLoaderOptions {
2402
- assignableType: string | ((e: any) => string);
2403
- assignableId: string | ((e: any) => string);
2404
- targetKey?: string;
2405
- }
2406
- declare function loadPermissions<T extends Record<string, any>>(payload: T | T[], options?: PermissionLoaderOptions): Promise<void>;
2407
- declare function createPermissionLoader<T extends Record<string, any>>(options?: PermissionLoaderOptions): Loader<T>;
2408
- //#endregion
2409
- //#region src/server/loaders/userLoader.d.ts
2410
- interface UserLoaderOptions {
2411
- idKey?: string;
2412
- targetKey?: string;
2413
- }
2414
- declare function loadUser<T extends Record<string, any>>(entities: T[], options?: UserLoaderOptions): Promise<void>;
2415
- declare function createUserLoader<T extends Record<string, any>>(options?: UserLoaderOptions): Loader<T>;
2416
- //#endregion
2417
- //#region src/server/entities/DriveConfigEntity.d.ts
2418
- declare const DriveConfig_base: typeof DriveConfig$1 & {
2419
- new (...args: any[]): {};
2420
- __isConfigModel: boolean;
2421
- serialize<T>(this: new (...args: any[]) => T, row: any): Promise<T>;
2422
- list<T>(this: new (...args: any[]) => T): Promise<T[]>;
2423
- find<T>(this: new (...args: any[]) => T, id: string): Promise<T | null>;
2424
- findOrFail<T>(this: new (...args: any[]) => T, id: string): Promise<T>;
2425
- create<T>(this: new (...args: any[]) => T, item: T & {
2426
- id: string;
2427
- }): Promise<void>;
2428
- update<T>(this: new (...args: any[]) => T, id: string, data: T): Promise<void>;
2429
- updateOrCreate<T>(this: new (...args: any[]) => T, id: string, data: Partial<T>): Promise<void>;
2430
- destroy<T>(this: new (...args: any[]) => T, id: string): Promise<void>;
2431
- } & Constructor;
2432
- declare class DriveConfig extends DriveConfig_base {
2433
- static serialize<T>(this: new (...args: any[]) => T, row: any): Promise<T>;
2434
- }
2435
- //#endregion
2436
- //#region src/server/entities/FileEntity.d.ts
2437
- interface URLCache {
2438
- url: string;
2439
- expires: number;
2440
- }
2441
- declare const File_base: typeof FileEntity & {
2442
- new (...args: any[]): {
2443
- listeners: Listener[];
2444
- on(event: string, listener: (...args: any[]) => void): void;
2445
- off(event: string, listener: (...args: any[]) => void): void;
2446
- emit(event: string, ...args: any[]): void;
2447
- emitAsync(event: string, ...args: any[]): Promise<void>;
2448
- };
2449
- } & Constructor & {
2450
- new (...args: any[]): {
2451
- save(): Promise<void>;
2452
- destroy(): Promise<void>;
2453
- softDelete(): Promise<void>;
2454
- };
2455
- __model: {
2456
- table: "files";
2457
- primaryKey: keyof FileTable;
2458
- };
2459
- serialize<T>(this: new () => T, row: any): Promise<T>;
2460
- select(): _$kysely.SelectQueryBuilder<DatabaseContract, "files", any>;
2461
- paginate<T>(this: new () => T, o?: ModelPaginateOptions<"files"> | undefined): Promise<PaginationEntity<T>>;
2462
- list<T>(this: new () => T, o?: ModelListOptions<"files"> | undefined): Promise<T[]>;
2463
- findOne<T>(this: new () => T, o?: ModelFindOptions<"files"> | undefined): Promise<T | undefined>;
2464
- findOneOrFail<T>(this: new () => T, o?: ModelFindOptions<"files"> | undefined): Promise<T>;
2465
- find<T>(this: new () => T, id: any): Promise<T | null>;
2466
- findOrFail<T>(this: new () => T, id: any): Promise<T>;
2467
- findBy<T>(this: new () => T, column: keyof FileTable, value: any): Promise<T>;
2468
- findByOrFail<T>(this: new () => T, column: keyof FileTable, value: any): Promise<T>;
2469
- exists<T>(this: new () => T, o?: ModelListOptions<"files"> | undefined): Promise<boolean>;
2470
- count<T>(this: new () => T, o?: ModelCountOptions<"files"> | undefined): Promise<number>;
2471
- create<T>(this: new () => T, payload: object & {
2472
- drive: string;
2473
- mimetype: string;
2474
- client_name: string;
2475
- filename: string;
2476
- purpose: string;
2477
- public: boolean;
2478
- } & {
2479
- id?: number | undefined;
2480
- created_at?: string | undefined;
2481
- updated_at?: string | undefined;
2482
- deleted_at?: string | Date | undefined;
2483
- }): Promise<T>;
2484
- createMany<T>(this: new () => T, values: (object & {
2485
- drive: string;
2486
- mimetype: string;
2487
- client_name: string;
2488
- filename: string;
2489
- purpose: string;
2490
- public: boolean;
2491
- } & {
2492
- id?: number | undefined;
2493
- created_at?: string | undefined;
2494
- updated_at?: string | undefined;
2495
- deleted_at?: string | Date | undefined;
2496
- })[]): Promise<T[]>;
2497
- update<T>(this: new () => T, o: ModelUpdateOptions<"files">): Promise<T>;
2498
- updateById<T>(this: new () => T, id: any, values: {
2499
- id?: number | undefined;
2500
- deleted_at?: string | Date | null | undefined;
2501
- drive?: string | undefined;
2502
- mimetype?: string | undefined;
2503
- client_name?: string | undefined;
2504
- filename?: string | undefined;
2505
- purpose?: string | undefined;
2506
- public?: boolean | undefined;
2507
- }, options?: {
2508
- debug?: boolean;
2509
- } | undefined): Promise<T>;
2510
- destroy<T>(this: new () => T, o?: ModelDestroyOptions<"files"> | undefined): Promise<void>;
2511
- firstOrCreate<T>(this: new () => T, o: ModelFirstOrCreateOptions<"files">): T;
2512
- updateOrCreate<T>(this: new (...args: any[]) => T, o: ModelUpdateOrCreateOptions<"files">): T;
2513
- destroyById<T>(this: new () => T, id: any): Promise<void>;
2514
- } & {
2515
- new (...args: any[]): {};
2516
- load<T>(this: new () => T, entities: T | T[], names: "metas" | "metas"[]): Promise<void>;
2517
- } & {
2518
- new (...args: any[]): {
2519
- get<T = any>(name: string): Promise<T | undefined>;
2520
- get<T = any>(name: string, defaultValue: T): Promise<T>;
2521
- set(name: string, value: any): Promise<void>;
2522
- };
2523
- };
2524
- declare class File extends File_base {
2525
- static cache: Map<string, URLCache>;
2526
- static has(filename: string): Promise<boolean>;
2527
- static findByFilename(filename: string): Promise<File | undefined>;
2528
- readStream(): Promise<NodeJS.ReadableStream>;
2529
- read(): Promise<Uint8Array<ArrayBufferLike>>;
2530
- loadUrl(options?: DriveUrlOptions): Promise<void>;
2531
- static loadUrls(items: File[], options?: DriveUrlOptions): Promise<void>;
2532
- static loadMetas(items: File[]): Promise<void>;
2533
- deleteFromDrive(): Promise<void>;
2534
- }
2535
- //#endregion
2536
- //#region src/server/entities/FileMetaEntity.d.ts
2537
- declare const FileMeta_base: typeof FileMeta$1 & {
2538
- new (...args: any[]): {
2539
- save(): Promise<void>;
2540
- destroy(): Promise<void>;
2541
- softDelete(): Promise<void>;
2542
- };
2543
- __model: {
2544
- table: "file_metas";
2545
- primaryKey: keyof FileMetaTable;
2546
- };
2547
- serialize<T>(this: new () => T, row: any): Promise<T>;
2548
- select(): _$kysely.SelectQueryBuilder<DatabaseContract, "file_metas", any>;
2549
- paginate<T>(this: new () => T, o?: ModelPaginateOptions<"file_metas"> | undefined): Promise<PaginationEntity<T>>;
2550
- list<T>(this: new () => T, o?: ModelListOptions<"file_metas"> | undefined): Promise<T[]>;
2551
- findOne<T>(this: new () => T, o?: ModelFindOptions<"file_metas"> | undefined): Promise<T | undefined>;
2552
- findOneOrFail<T>(this: new () => T, o?: ModelFindOptions<"file_metas"> | undefined): Promise<T>;
2553
- find<T>(this: new () => T, id: any): Promise<T | null>;
2554
- findOrFail<T>(this: new () => T, id: any): Promise<T>;
2555
- findBy<T>(this: new () => T, column: keyof FileMetaTable, value: any): Promise<T>;
2556
- findByOrFail<T>(this: new () => T, column: keyof FileMetaTable, value: any): Promise<T>;
2557
- exists<T>(this: new () => T, o?: ModelListOptions<"file_metas"> | undefined): Promise<boolean>;
2558
- count<T>(this: new () => T, o?: ModelCountOptions<"file_metas"> | undefined): Promise<number>;
2559
- create<T>(this: new () => T, payload: object & {
2560
- name: string;
2561
- file_id: number;
2562
- } & {
2563
- id?: number | undefined;
2564
- value?: string | null | undefined;
2565
- created_at?: string | undefined;
2566
- updated_at?: string | undefined;
2567
- deleted_at?: string | Date | undefined;
2568
- }): Promise<T>;
2569
- createMany<T>(this: new () => T, values: (object & {
2570
- name: string;
2571
- file_id: number;
2572
- } & {
2573
- id?: number | undefined;
2574
- value?: string | null | undefined;
2575
- created_at?: string | undefined;
2576
- updated_at?: string | undefined;
2577
- deleted_at?: string | Date | undefined;
2578
- })[]): Promise<T[]>;
2579
- update<T>(this: new () => T, o: ModelUpdateOptions<"file_metas">): Promise<T>;
2580
- updateById<T>(this: new () => T, id: any, values: {
2581
- id?: number | undefined;
2582
- value?: string | null | undefined;
2583
- name?: string | undefined;
2584
- deleted_at?: string | Date | null | undefined;
2585
- file_id?: number | undefined;
2586
- }, options?: {
2587
- debug?: boolean;
2588
- } | undefined): Promise<T>;
2589
- destroy<T>(this: new () => T, o?: ModelDestroyOptions<"file_metas"> | undefined): Promise<void>;
2590
- firstOrCreate<T>(this: new () => T, o: ModelFirstOrCreateOptions<"file_metas">): T;
2591
- updateOrCreate<T>(this: new (...args: any[]) => T, o: ModelUpdateOrCreateOptions<"file_metas">): T;
2592
- destroyById<T>(this: new () => T, id: any): Promise<void>;
2593
- } & Constructor;
2594
- declare class FileMeta extends FileMeta_base {}
2595
- //#endregion
2596
- //#region src/server/entities/ModuleEntity.d.ts
2597
- declare const Module_base: typeof Module$1;
2598
- declare class Module extends Module_base {
2599
- get git(): GitGateway;
2600
- makePath(...parts: string[]): string;
2601
- staticPath(...parts: string[]): string;
2602
- command: typeof shell.command;
2603
- load(): void;
2604
- findClientEntrypointFilename(context?: 'dev' | 'node' | 'browser'): string | null;
2605
- }
2606
- //#endregion
2607
- //#region src/server/entities/PluginEntryEntity.d.ts
2608
- declare const PluginEntryEntity_base: typeof PluginEntity$1;
2609
- declare class PluginEntryEntity extends PluginEntryEntity_base {
2610
- directory: string;
2611
- makePath(...parts: string[]): string;
2612
- set: typeof config.set;
2613
- get: typeof config.get;
2614
- get git(): GitGateway;
2615
- get commits(): GitCommitRepository;
2616
- get branches(): GitBranchRepository;
2617
- }
2618
- //#endregion
2619
- //#region src/server/entities/PluginEntity.d.ts
2620
- interface AddApiFolderOptions {
2621
- prefix?: string;
2622
- }
2623
- declare class PluginEntity extends PluginEntryEntity {
2624
- apiFolders: Map<string, AddApiFolderOptions>;
2625
- apiDirectories: Set<string>;
2626
- constructor();
2627
- staticPath(...parts: string[]): string;
2628
- load(): Promise<void>;
2629
- onRouterRegistered(ctx: RouterEvents['router:registered']): Promise<void>;
2630
- addApiFolder(directory: string, options?: AddApiFolderOptions): void;
2631
- addRouterFolder(directory: string): void;
2632
- static fromPluginDiscoverEntity<T>(this: new () => T, entity: PluginEntryEntity): T;
2633
- }
2634
- //#endregion
2635
- //#region src/server/queries/exists.d.ts
2636
- declare function exists<T extends keyof DatabaseContract, O extends ListOptions<T>>(table: T, options?: O): Promise<boolean>;
2637
- //#endregion
2638
- //#region src/server/queries/softDelete.d.ts
2639
- type WhereCapable<QB> = {
2640
- where: (...args: any[]) => QB;
2641
- };
2642
- type UpdateFrom$1<T extends keyof DatabaseContract> = ReturnType<typeof database.updateTable<T>>;
2643
- interface SoftDeleteOptions<T extends keyof DatabaseContract> {
2644
- serialize?: (row: Selectable<DatabaseContract[T]>) => any;
2645
- query: (qb: UpdateFrom$1<T>) => UpdateFrom$1<T>;
2646
- }
2647
- type SoftDeleteResult<T extends keyof DatabaseContract, O extends SoftDeleteOptions<T> | undefined> = O extends undefined ? Selectable<DatabaseContract[T]>[] : O extends {
2648
- serialize: (row: Selectable<DatabaseContract[T]>) => infer R;
2649
- } ? R[] : Selectable<DatabaseContract[T]>[];
2650
- declare function whereNotDeleted<QB extends WhereCapable<QB>>(qb: QB): QB;
2651
- declare function undeleted(qb: ExpressionBuilder$1<any, any>): _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
2652
- declare namespace undeleted {
2653
- var column: (col: string) => (qb: ExpressionBuilder$1<any, any>) => _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
2654
- }
2655
- declare const deleted: (qb: ExpressionBuilder$1<any, any>) => _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
2656
- declare const addSoftDeleteColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
2657
- declare function softDelete<T extends keyof DatabaseContract, O extends SoftDeleteOptions<T>>(table: T, options?: O): Promise<SoftDeleteResult<T, O>>;
2658
- //#endregion
2659
- //#region src/server/queries/timestamp.d.ts
2660
- declare const addCreatedColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
2661
- declare const addUpdatedColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
2662
- declare const addTimestampColumns: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
2663
- //#endregion
2664
- //#region src/server/relations/BaseRelation.d.ts
2665
- declare class BaseRelation {
2666
- load(entities: any[]): Promise<void>;
2667
- }
2668
- //#endregion
2669
- //#region src/server/relations/BelongsToRelation.d.ts
2670
- interface BelongsToOptions {
2671
- table: string;
2672
- tableKey: string;
2673
- targetTable: string;
2674
- targetKey: string;
2675
- property: string;
2676
- serialize?: (row: any) => any;
2677
- }
2678
- declare class BelongsTo extends BaseRelation {
2679
- table: string;
2680
- tableKey: string;
2681
- targetTable: string;
2682
- targetKey: string;
2683
- property: string;
2684
- serialize: (row: any) => any;
2685
- constructor(options: BelongsToOptions);
2686
- load(entities: any[]): Promise<void>;
2687
- }
2688
- //#endregion
2689
- //#region src/server/relations/BelongsToFileRelation.d.ts
2690
- declare class LoadFileMetas extends BaseRelation {
2691
- fileKey: string;
2692
- property: string;
2693
- constructor(fileKey?: string, property?: string);
2694
- load(entities: any[]): Promise<void>;
2695
- }
2696
- declare class LoadFileUrl extends BaseRelation {
2697
- fileKey: string;
2698
- property: string;
2699
- constructor(fileKey?: string, property?: string);
2700
- load(entities: any[]): Promise<void>;
2701
- }
2702
- declare class BelongsToFile extends BelongsTo {
2703
- constructor(property?: string, targetKey?: string);
2704
- url(property?: string): LoadFileUrl;
2705
- metas(property?: string): LoadFileMetas;
2706
- }
2707
- //#endregion
2708
- //#region src/server/relations/BelongsToUserRelation.d.ts
2709
- declare class BelongsToUser extends BelongsTo {
2710
- constructor();
2711
- }
2712
- //#endregion
2713
- //#region src/server/relations/HasManyRelation.d.ts
2714
- interface HasManyOptions {
2715
- table: keyof DatabaseContract;
2716
- tableKey: string;
2717
- targetTable: keyof DatabaseContract;
2718
- targetKey: string;
2719
- property: string;
2720
- serialize?: (row: any) => any;
2721
- after?: (rows: any[]) => Promise<any>;
2722
- }
2723
- declare class HasMany {
2724
- table: string;
2725
- tableKey: string;
2726
- targetTable: string;
2727
- targetKey: string;
2728
- property: string;
2729
- serialize: (row: any) => any;
2730
- after: (rows: any[]) => Promise<any>;
2731
- constructor(options: HasManyOptions);
2732
- load(entities: any[]): Promise<void>;
2733
- }
2734
- //#endregion
2735
- //#region src/server/relations/HasMetasRelation.d.ts
2736
- interface HasMetasOptions {
2737
- table: keyof DatabaseContract;
2738
- tableKey: string;
2739
- targetTable: keyof DatabaseContract;
2740
- targetKey: string;
2741
- property: string;
2742
- }
2743
- declare class HasMetas {
2744
- table: string;
2745
- tableKey: string;
2746
- targetTable: string;
2747
- targetKey: string;
2748
- property: string;
2749
- constructor(options: HasMetasOptions);
2750
- load(entities: any[]): Promise<void>;
2751
- }
2752
- //#endregion
2753
- //#region src/server/relations/hasManyThroughRelation.d.ts
2754
- interface HasManyThroughOptions {
2755
- table: keyof DatabaseContract;
2756
- tableKey: string;
2757
- targetTable: keyof DatabaseContract;
2758
- targetKey: string;
2759
- pivotTable: keyof DatabaseContract;
2760
- pivotSourceKey: string;
2761
- pivotTargetKey: string;
2762
- property: string;
2763
- serialize?: (row: any) => any;
2764
- after?: (rows: any[]) => Promise<any>;
2765
- }
2766
- declare class HasManyThrough extends BaseRelation {
2767
- table: string;
2768
- tableKey: string;
2769
- targetTable: string;
2770
- targetKey: string;
2771
- pivotTable: string;
2772
- pivotSourceKey: string;
2773
- pivotTargetKey: string;
2774
- property: string;
2775
- serialize: (row: any) => any;
2776
- after: (rows: any[]) => Promise<any>;
2777
- constructor(options: HasManyThroughOptions);
2778
- load(entities: any[]): Promise<void>;
2779
- }
2780
- //#endregion
2781
- //#region src/server/middlewares/AuthMiddleware.d.ts
2782
- type AuthMiddlewareContext = {
2783
- user: UserEntity;
2784
- token: Token;
2785
- };
2786
- declare class AuthMiddleware implements Middleware {
2787
- handle(ctx: any): Promise<AuthMiddlewareContext>;
2788
- }
2789
- //#endregion
2790
- //#region src/server/middlewares/AuthSilenceMiddleware.d.ts
2791
- type AuthSilenceMiddlewareContext = {
2792
- user?: UserEntity$1;
2793
- token?: Token;
2794
- };
2795
- declare class AuthSilenceMiddleware implements Middleware {
2796
- handle(ctx: HttpContext): Promise<AuthSilenceMiddlewareContext>;
2797
- }
2798
- //#endregion
2799
- //#region src/server/middlewares/AuthorizationMiddleware.d.ts
2800
- type AuthorizationContext = MiddlewareHandleResult<[AuthorizationMiddleware]>;
2801
- interface AuthorizePermissionPayload {
2802
- action: string;
2803
- resource: string;
2804
- conditions?: Record<string, any>;
2805
- }
2806
- declare class AuthorizePermission implements Middleware {
2807
- private permissions;
2808
- constructor(payload: AuthorizePermissionPayload | AuthorizePermissionPayload[]);
2809
- handle(ctx: AuthorizationContext): Promise<void>;
2810
- }
2811
- declare class AuthorizationMiddleware implements Middleware {
2812
- handle(ctx: AuthSilenceMiddlewareContext): Promise<{
2813
- acl: Acl;
2814
- }>;
2815
- static create(payload: AuthorizePermissionPayload | AuthorizePermissionPayload[]): AuthorizePermission;
2816
- }
2817
- //#endregion
2818
- //#region src/server/utils/addIdColumn.d.ts
2819
- declare module 'kysely' {
2820
- interface CreateTableBuilder<TB extends string, C extends string = never> {
2821
- addIdColumn<CN extends string = 'id'>(col?: CN): CreateTableBuilder<TB, C | CN>;
2822
- }
2823
- }
2824
- //#endregion
2825
- //#region src/server/utils/addSoftDeleteColumn.d.ts
2826
- declare module 'kysely' {
2827
- interface CreateTableBuilder<TB extends string, C extends string = never> {
2828
- addSoftDeleteColumn(): CreateTableBuilder<TB, C | 'deleted_at'>;
2829
- }
2830
- }
2831
- //#endregion
2832
- //#region src/server/utils/addTimestampColumns.d.ts
2833
- declare module 'kysely' {
2834
- interface CreateTableBuilder<TB extends string, C extends string = never> {
2835
- addTimestampColumns(): CreateTableBuilder<TB, C | 'created_at' | 'updated_at'>;
2836
- addCreatedColumn(): CreateTableBuilder<TB, C | 'created_at'>;
2837
- addUpdatedColumn(): CreateTableBuilder<TB, C | 'updated_at'>;
2838
- }
2839
- }
2840
- //#endregion
2841
- //#region src/server/utils/basePath.d.ts
2842
- declare function basePath(...args: string[]): string;
2843
- declare function storagePath(...args: string[]): string;
2844
- declare function relativeToBasePath(...args: string[]): string;
2845
- declare function tmpPath(...args: string[]): string;
2846
- //#endregion
2847
- //#region src/server/utils/createLoaderFactory.d.ts
2848
- declare function createLoaderFactory<E extends Record<string, any> = Record<string, any>, R extends LoaderRecord<E> = LoaderRecord<E>>(loaders: R): {
2849
- keys: (keyof R)[];
2850
- loaders: R;
2851
- load: (entities: E | E[], names: keyof R | (keyof R)[]) => Promise<void>;
2852
- };
2853
- //#endregion
2854
- //#region src/server/utils/cuid.d.ts
2855
- declare function cuid(): string;
2856
- //#endregion
2857
- //#region src/server/utils/defineHandler.d.ts
2858
- interface Handler {
2859
- (ctx: HttpContext): Promise<any> | (() => any);
2860
- }
2861
- declare function defineHandler(handler: Handler): Handler;
2862
- //#endregion
2863
- //#region src/server/utils/generateIndexFile.d.ts
2864
- declare function generateIndexFile(options: any): void;
2865
- //#endregion
2866
- //#region src/server/utils/importAll.d.ts
2867
- interface Options {
2868
- cache?: boolean;
2869
- onBeforeImport?: (ctx: {
2870
- filename: string;
2871
- }) => void | Promise<void>;
2872
- onAfterImport?: (ctx: {
2873
- filename: string;
2874
- module: any;
2875
- }) => void | Promise<void>;
2876
- onError?: (ctx: {
2877
- filename: string;
2878
- error: Error;
2879
- }) => void | Promise<void>;
2880
- exclude?: string[];
2881
- }
2882
- declare function importFiles(files: string[], options?: Options): Promise<Record<string, any>>;
2883
- declare function importGlob(pattern: string, options?: Options): Promise<Record<string, any>>;
2884
- declare function importAll(directory: string, options?: Options): Promise<Record<string, any>>;
2885
- //#endregion
2886
- //#region src/server/utils/importOne.d.ts
2887
- declare function importOne(filenames: string[]): Promise<any>;
2888
- //#endregion
2889
- export { Acl as AclEntity, AddOptions, AuthMiddleware, AuthMiddlewareContext, AuthSilenceMiddleware, AuthSilenceMiddlewareContext, AuthorizationContext, AuthorizationMiddleware, AuthorizePermission, AuthorizePermissionPayload, BaseRelation, BelongsToFile as BelongsToFileRelation, BelongsTo as BelongsToRelation, BelongsToUser as BelongsToUserRelation, CliCommand, CliEvents, CliService, ArteTesterService as CliTesterService, CliWrapperService, ConfigFSService, ConfigFSServiceOptions, ConfigManagerOptions, ConfigManagerService, ConfigModel, ConfigRepository, ConfigS3Service, CookieMapEntity, CountOptions, CreateOptions, DatabaseContract, DatabaseGateway, DatabaseKysely, DatabaseRepository, DatabaseRepositoryInferMixin, DeleteFrom, DeleteManyOptions, DestroyOptions, DownloadService, DownloadedFetchOptions, DriveBaseGateway, DriveConfig as DriveConfigEntity, DriveContract, DriveFSConfig, DriveFS as DriveFSGateway, DriveS3 as DriveS3Gateway, DriveService, DriveUploadUrlOptions, DriveUrlOptions, EmailTemplateMetaTable, EmailTemplateTable, EmmitterService, EncryptService, EnvService, EventContract, ExceptionService, ExceptionServiceOptions, ExpressionBuilder, File as FileEntity, FileMeta as FileMetaEntity, FileMetaTable, FileRepository, FileRepositoryQueryOptions, FileTable, FindManyOptions, FindOneOptions, FirstOrCreateOptions, GitBranchRepository, GitBranchRepositoryOptions, GitCommitListOptions, GitCommitListResult, GitCommitRepository, GitCommitRepositoryOptions, GitGateway, GitGatewayOptions, GitRepoInfo, HandleResult, HasMany as HasManyRelation, HasManyThroughLoaderOptions, HasMetas as HasMetasRelation, HasherService, HttpContext, HttpMethod, HttpService, HttpServiceOptions, HttpTesterService, HttpTesterServiceOptions, IRepositoryTypes, InsertFrom, IpcMessage, JobTable, LifecycleService, ListOptions, LoadFileMetas, LoadFileUrl, Loader, LoaderRecord, Metadafilter, Metadata as MetadataMixin, MetadataQueryPayload, MetadataQueryService, MetadataService, Middleware, MiddlewareHandleResult, Migration, MigrationEntity, MigrationEntiyData, MigrationSource, MigrationsTable, MigratorService, MigratorServiceEvents, MigratorServiceOptions, ModelConfig as ModelConfigMixin, ModelCountOptions, ModelCreateOptions, ModelDestroyOptions, ModelEntity, ModelFindOptions, ModelFirstOrCreateOptions, ModelListOptions, ModelMixin, ModelPaginateOptions, ModelUpdateOptions, ModelUpdateOrCreateOptions, Module as ModuleEntity, OauthAccountTable, OauthTokenTable, ObjectOptions, PageRequestContextEntity, PageRequestContextEntityOptions, PaginateResult, Pagination, PermissionAssignmentRepository, PermissionAssignmentRepositoryQueryOptions, PermissionAssignmentTable, PermissionRepository, PermissionRepositoryQueryOptions, PermissionTable, PluginEntity, PluginEntryEntity, PluginIpcClient, PluginIpcHost, PluginRouter, Redirect, Relation as RelationsMixin, Request, ResourceMethod, Response, RoleTable, RouteDefinition, Route as RouteEntity, RouteHandler, RouteReply, RouteRequest, RouteResponsePayload, RouterEvents, RouterFileBaseRoutingService, RouterRegisterEntry, RouterRegister as RouterRegisterService, RouterResourceConfig as RouterResourceConfigService, RouterResourceOptions, RouterResourceService, RouterService, RoutineEntity, RoutineEntityOptions, RoutineHandler, S3DriveConfig, SchedulerEvents, SchedulerService, SchedulerServiceOptions, SeederEntity, SeederEntiyData, SeederEvents, SeederResult, SeeederService as SeederService, SeederServiceOptions, SeederSource, SelectBuilder, SelectFrom, SerializableResult, SerializeOptions, ShellService, ShellServiceOptions, SoftDeleteOptions, SoftDeleteResult, TableColumn, TokenRepository, TokenRepositoryGenerateOptions, TokenRepositoryQueryOptions, TokenTable, UpdateFrom, UpdateOptions, UpdateOrCreateOptions, UploadSessionTable, UploadUrlOptions, UrlOptions, UserMetaTable, UserRepository, UserRepositoryEvents, UserRepositoryQueryOptions, UserRoleTable, UserTable, addCreatedColumn, addSoftDeleteColumn, addTimestampColumns, addUpdatedColumn, basePath, config, _default as container, count, create, createDefault, createFileLoader, createFileUrlLoader, createHasManyThroughLoader, createLoaderFactory, createMetasLoader, createMysql, createPermissionLoader, createUserLoader, cuid, database, defineHandler, defineLoader, deleted, destroy, download, drive, emmitter, encrypt, env, exists, fileRepository as filesRepository, findOne, findOneOrFail, firstOrCreate, generateIndexFile, HasManyThrough as hasManyThroughRelation, hasher, http, importAll, importFiles, importGlob, importOne, list, loadFileUrl, loadHasManyThrough, loadMetas, loadPermissions, loadUser, logger, migrator, now, paginate, permissionAssignmentRepository, permissionRepository, printObject, printTable, relativeToBasePath, router, scheduler, shell, softDelete, storagePath, tmpPath, tokenRepository, undeleted, update, updateDefault, updateMysql, updateOrCreate, userRepository, valueToString, whereNotDeleted };
2890
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci91dGlscy9wcmludFRhYmxlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9MaWZlY3ljbGVIb29rLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3V0aWxzL2NvbXBvc2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zY2hlbWFzL3Blcm1pc3Npb25Bc3NpZ25tZW50U2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvblNjaGVtYS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zY2hlbWFzL3Rva2VuU2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL21peGlucy9Ib29rc01peGluLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1Blcm1pc3Npb25FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvQWNsRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Ecml2ZUNvbmZpZ0VudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0ZpbGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvRmlsZU1ldGFFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvR2l0QnJhbmNoRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0dpdENvbW1pdEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVNYW5pZmVzdEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUGFnaW5hdGlvbkVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUm9sZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0NsaVNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvQ2xpVGVzdGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9DbGlXcmFwcGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Db25maWdGU1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2NoZW1hcy9lbnZTY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvRW52U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Db25maWdNYW5hZ2VyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9Ecml2ZUJhc2VHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2dhdGV3YXlzL0RyaXZlUzNHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0NvbmZpZ1MzU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Eb3dubG9hZFNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0RyaXZlQ29udHJhY3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvRHJpdmVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QYWdlUmVxdWVzdENvbnRleHRFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvVXNlclJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvTWlncmF0aW9uRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL01pZ3JhdG9yU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9BY2xFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0h0dHBDb250ZXh0Q29udHJhY3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL1JvdXRlckNvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL1JvdXRlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvUm91dGluZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9TY2hlZHVsZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL1NlZWRlckVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9TZWVkZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2NvbnRyYWN0cy9FdmVudENvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9FbmNyeXB0U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9FeGNlcHRpb25TZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0hhc2hlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvSHR0cFNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvSHR0cFRlc3RlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9NZXRhZGF0YVF1ZXJ5U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9NZXRhZGF0YVNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUGx1Z2luSXBjQ2xpZW50LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1BsdWdpbklwY0hvc3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUGx1Z2luUm91dGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlckZpbGVCYXNlUm91dGluZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUm91dGVyUmVnaXN0ZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlclJlc291cmNlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9taXhpbnMvTW9kZWxDb25maWdNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJSZXNvdXJjZUNvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvU2hlbGxTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9Db25maWdSZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9GaWxlUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvR2l0QnJhbmNoUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvR2l0Q29tbWl0UmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvUGVybWlzc2lvbkFzc2lnbm1lbnRSZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9QZXJtaXNzaW9uUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9taXhpbnMvRGF0YWJhc2VSZXBvc2l0b3J5SW5mZXJNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvVG9rZW5SZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2dhdGV3YXlzL0RhdGFiYXNlR2F0ZXdheS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9Ecml2ZUZTR2F0ZXdheS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9HaXRHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9NZXRhZGF0YU1peGluLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvZGF0YWJhc2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9jb21tb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy91cGRhdGVPckNyZWF0ZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2xpc3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9wYWdpbmF0ZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2NvdW50LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvY3JlYXRlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvdXBkYXRlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvZGVzdHJveS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2ZpcnN0T3JDcmVhdGUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9maW5kT25lLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9Nb2RlbE1peGluLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9SZWxhdGlvbnNNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2NvbmZpZy5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2NvbnRhaW5lci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2Rvd25sb2FkLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvZHJpdmUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9lbW1pdHRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2VuY3J5cHQuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9lbnYuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9maWxlc1JlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9oYXNoZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9odHRwLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvbG9nZ2VyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvbWlncmF0b3IuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9wZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9wZXJtaXNzaW9uUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3JvdXRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3NjaGVkdWxlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3NoZWxsLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvdG9rZW5SZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvdXNlclJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0t5c2VseUNvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9sb2FkZXJzL2ZpbGVMb2FkZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9maWxlVXJsTG9hZGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2xvYWRlcnMvaGFzTWFueVRocm91Z2hMb2FkZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9sb2FkTWV0YXMuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9wZXJtaXNzaW9uTG9hZGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2xvYWRlcnMvdXNlckxvYWRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9Ecml2ZUNvbmZpZ0VudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9GaWxlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0ZpbGVNZXRhRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL01vZHVsZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbHVnaW5FbnRyeUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9leGlzdHMuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9zb2Z0RGVsZXRlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvdGltZXN0YW1wLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9CYXNlUmVsYXRpb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVsYXRpb25zL0JlbG9uZ3NUb1JlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9CZWxvbmdzVG9GaWxlUmVsYXRpb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVsYXRpb25zL0JlbG9uZ3NUb1VzZXJSZWxhdGlvbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZWxhdGlvbnMvSGFzTWFueVJlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9IYXNNZXRhc1JlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9oYXNNYW55VGhyb3VnaFJlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21pZGRsZXdhcmVzL0F1dGhNaWRkbGV3YXJlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21pZGRsZXdhcmVzL0F1dGhTaWxlbmNlTWlkZGxld2FyZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9taWRkbGV3YXJlcy9BdXRob3JpemF0aW9uTWlkZGxld2FyZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9hZGRJZENvbHVtbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9hZGRTb2Z0RGVsZXRlQ29sdW1uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2FkZFRpbWVzdGFtcENvbHVtbnMuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvYmFzZVBhdGguZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvY3JlYXRlTG9hZGVyRmFjdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9jdWlkLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2RlZmluZUhhbmRsZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvZ2VuZXJhdGVJbmRleEZpbGUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvaW1wb3J0QWxsLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2ltcG9ydE9uZS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW4ge1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZyB8ICgoaXRlbTogYW55KSA9PiBzdHJpbmcpO1xuICAgIHdpZHRoPzogbnVtYmVyO1xuICAgIHJlYWxXaWR0aD86IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0T3B0aW9ucyB7XG4gICAga2V5V2lkdGg/OiBudW1iZXI7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcmludE9iamVjdChvdXRwdXQ/OiBhbnksIG9wdGlvbnM/OiBPYmplY3RPcHRpb25zKTogdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHByaW50VGFibGUoaXRlbXM6IGFueVtdLCBjb2x1bW5zPzogVGFibGVDb2x1bW5bXSk6IHZvaWQ7XG4iLCJpbnRlcmZhY2UgRW50cnkge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBhbnk7XG4gICAgc291cmNlOiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgZW50cmllczogTWFwPHN0cmluZywgRW50cnk+O1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgbGlzdCgpOiBFbnRyeVtdO1xuICAgIHBhcnNlVmFsdWUodmFsdWU6IGFueSk6IGFueTtcbiAgICBsb2FkRnJvbVJlY29yZChyZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4sIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgbG9hZEZyb21FbnRyaWVzKGVudHJpZXM6IFtzdHJpbmcsIGFueV1bXSwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGhhcyhrZXk6IHN0cmluZyk6IGJvb2xlYW47XG4gICAgZ2V0PFQgPSBhbnkgfCB1bmRlZmluZWQ+KGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBUO1xuICAgIGdldE9uZTxUID0gYW55IHwgdW5kZWZpbmVkPihrZXlzOiBzdHJpbmdbXSwgZGVmYXVsdFZhbHVlPzogYW55KTogVDtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgdW5zZXQoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgIGNsZWFyKCk6IHZvaWQ7XG4gICAgZHVtcCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuZXhwb3J0IHt9O1xuIiwidHlwZSBDb25zdHJ1Y3RvcjxUID0gb2JqZWN0PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG50eXBlIEVudHJ5S2V5ID0gc3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250YWluZXJTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGVudHJpZXM7XG4gICAgbG9hZEZyb21SZWNvcmQocmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHByaXZhdGUgZ2V0S2V5O1xuICAgIHNldChwYXlsb2FkOiBFbnRyeUtleSwgdmFsdWU6IGFueSk6IHRoaXM7XG4gICAgaGFzKHBheWxvYWQ6IEVudHJ5S2V5KTogYm9vbGVhbjtcbiAgICBnZXQ8VD4ocGF5bG9hZDogRW50cnlLZXkpOiBUO1xuICAgIHVuc2V0KHBheWxvYWQ6IEVudHJ5S2V5KTogdm9pZDtcbiAgICBzaW5nbGV0b248VD4oY2xhc3NDb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8VD4pOiBUO1xuICAgIGxvYWQoZW50cmllczogUmVjb3JkPGFueSwgYW55Pik6IHZvaWQ7XG4gICAgcHJveHk8VCA9IHVua25vd24+KGtleTogRW50cnlLZXkpOiBUO1xuICAgIGtleXMoKTogRW50cnlLZXlbXTtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZGVidWcobWVzc2FnZTogc3RyaW5nLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nIHwgRXJyb3IsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIGNoaWxkKG9wdGlvbnM6IGFueSk6IExvZ2dlclNlcnZpY2U7XG59XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcuL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBFbW1pdHRlckxpc3RlbmVyT3B0aW9ucyB7XG4gICAgZXZlbnQ6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW1taXR0ZXJMaXN0ZW5lciB7XG4gICAgKGRhdGE6IGFueSwgb3B0aW9uczogRW1taXR0ZXJMaXN0ZW5lck9wdGlvbnMpOiB2b2lkO1xufVxuaW50ZXJmYWNlIEVtbWl0dGVySGFuZGxlciB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGxpc3RlbmVyOiBFbW1pdHRlckxpc3RlbmVyO1xuICAgIG9yaWdpbmFsTGlzdGVuZXI/OiBFbW1pdHRlckxpc3RlbmVyO1xufVxuaW50ZXJmYWNlIE9uT3B0aW9ucyB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgdW5pcXVlPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBPbkRlYm91bmNlT3B0aW9ucyBleHRlbmRzIE9uT3B0aW9ucyB7XG4gICAgZGVib3VuY2U/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtbWl0dGVyU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW1taXR0ZXJTZXJ2aWNlPEV2ZW50cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGhhbmRsZXJzOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IEVtbWl0dGVyU2VydmljZU9wdGlvbnMpO1xuICAgIHN0YXRpYyBjcmVhdGU8RXZlbnRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KG9wdGlvbnM/OiBFbW1pdHRlclNlcnZpY2VPcHRpb25zKTogRW1taXR0ZXJTZXJ2aWNlPEV2ZW50cz47XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB2b2lkO1xuICAgIHNldExvZ2dlcihsb2dnZXI6IExvZ2dlclNlcnZpY2UpOiB2b2lkO1xuICAgIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbmNlPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbmNlKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoYXJnczogYW55KSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uRGVib3VuY2U8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25EZWJvdW5jZU9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25EZWJvdW5jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uRGVib3VuY2VPcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uQW55T2Y8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnRzOiBLW10sIGxpc3RlbmVyOiAoYXJnczogRXZlbnRzW0tdKSA9PiB2b2lkLCBvcHRpb25zPzogT25PcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgb25BbnlPZihldmVudHM6IHN0cmluZ1tdLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogRW1taXR0ZXJIYW5kbGVyWydsaXN0ZW5lciddKTogdm9pZDtcbiAgICBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBhcmdzOiBFdmVudHNbS10pOiB2b2lkO1xuICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgYXJncz86IGFueSk6IHZvaWQ7XG4gICAgZW1pdEFuZFdhaXQ8SyBleHRlbmRzIGtleW9mIEV2ZW50cz4oZXZlbnQ6IEssIGFyZ3M6IEV2ZW50c1tLXSk6IFByb21pc2U8dm9pZD47XG4gICAgZW1pdEFuZFdhaXQoZXZlbnQ6IHN0cmluZywgYXJncz86IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdCgpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBsaXN0QnlFdmVudChldmVudDogc3RyaW5nKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgcmVtb3ZlKHBheWxvYWQ6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZDtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGhhc0hhbmRsZXJzKCk6IGJvb2xlYW47XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMaWZlY3ljbGVIb29rIHtcbiAgICBob29rX2lkOiBzdHJpbmc7XG4gICAgaG9va19hbGlhc2VzPzogc3RyaW5nW107XG4gICAgb3JkZXI/OiBudW1iZXI7XG4gICAgc3ViaG9va3M/OiBMaWZlY3ljbGVIb29rW107XG4gICAgcmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgYm9vdCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSByZWdpc3RlciAqL1xuICAgIG9uUmVnaXN0ZXIoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGxvYWQgKi9cbiAgICBvbkxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGJvb3QgKi9cbiAgICBvbkJvb3QoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIHNodXRkb3duICovXG4gICAgb25TaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBVbmlvblRvSW50ZXJzZWN0aW9uIH0gZnJvbSAnLi90eXBpbmcudHMnO1xuZXhwb3J0IHR5cGUgQW55Q2xhc3MgPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUID0ge30+ID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVDtcbmV4cG9ydCB0eXBlIE1peGluPFQ+ID0gKGJhc2U6IENvbnN0cnVjdG9yKSA9PiBDb25zdHJ1Y3RvcjxUPjtcbi8qKlxuICogQ29tcG9zZXMgbXVsdGlwbGUgbWl4aW5zIGludG8gYSBzaW5nbGUgY2xhc3MgdGhhdCBjYW4gYmUgZXh0ZW5kZWQuXG4gKiBBbGxvd3MgZm9yIG11bHRpcGxlIGluaGVyaXRhbmNlLWxpa2UgYmVoYXZpb3IgYnkgYXBwbHlpbmcgbWl4aW5zIHNlcXVlbnRpYWxseS5cbiAqXG4gKiBAcGFyYW0gbWl4aW5zIC0gQXJyYXkgb2YgbWl4aW4gZnVuY3Rpb25zIHRvIGNvbXBvc2VcbiAqIEByZXR1cm5zIEEgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBpbmNsdWRlcyBhbGwgbWl4aW4gZnVuY3Rpb25hbGl0eVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBVc2VyIGV4dGVuZHMgY29tcG9zZShUaW1lc3RhbXAsIFNvZnREZWxldGUpIHtcbiAqICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICogICAgIHN1cGVyKClcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbXBvc2U8TSBleHRlbmRzIEFycmF5PChiYXNlOiBDb25zdHJ1Y3Rvcjxhbnk+KSA9PiBDb25zdHJ1Y3Rvcjxhbnk+Pj4oLi4ubWl4aW5zOiBNKTogVW5pb25Ub0ludGVyc2VjdGlvbjxSZXR1cm5UeXBlPE1bbnVtYmVyXT4+O1xuLyoqXG4gKiBBbHRlcm5hdGl2ZSBjb21wb3NlIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHdpdGggYSBiYXNlIGNsYXNzXG4gKlxuICogQHBhcmFtIGJhc2VDbGFzcyAtIFRoZSBiYXNlIGNsYXNzIHRvIHN0YXJ0IHdpdGhcbiAqIEBwYXJhbSBtaXhpbnMgLSBBcnJheSBvZiBtaXhpbiBmdW5jdGlvbnMgdG8gYXBwbHlcbiAqIEByZXR1cm5zIEEgY2xhc3MgY29uc3RydWN0b3IgdGhhdCBleHRlbmRzIHRoZSBiYXNlIGNsYXNzIHdpdGggYWxsIG1peGluIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgVXNlciBleHRlbmRzIGNvbXBvc2VXaXRoKEJhc2VFbnRpdHksIFRpbWVzdGFtcCwgU29mdERlbGV0ZSkge1xuICogICBjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nKSB7XG4gKiAgICAgc3VwZXIoKVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY29tcG9zZVdpdGg8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3RvciwgTSBleHRlbmRzIEFycmF5PChiYXNlOiBDb25zdHJ1Y3RvcikgPT4gQ29uc3RydWN0b3I8YW55Pj4+KGJhc2VDbGFzczogVEJhc2UsIC4uLm1peGluczogTSk6IFRCYXNlICYgVW5pb25Ub0ludGVyc2VjdGlvbjxSZXR1cm5UeXBlPE1bbnVtYmVyXT4+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbWl4aW48VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oU291cmNlOiBUQmFzZSk6IDxUVGFyZ2V0IGV4dGVuZHMgQ29uc3RydWN0b3I+KFRhcmdldDogVFRhcmdldCkgPT4gVFRhcmdldCAmIFRCYXNlO1xuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi9Mb2dnZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBMaWZlY3ljbGVIb29rIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbnR5cGUgTGlmZWN5Y2xlTWV0aG9kID0gJ3JlZ2lzdGVyJyB8ICdsb2FkJyB8ICdib290JyB8ICdzaHV0ZG93bic7XG5pbnRlcmZhY2UgTGlzdE9wdGlvbnMge1xuICAgIGluY2x1ZGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBleGNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIExpZmVjeWNsZVNlcnZpY2VPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgaG9va3M/OiBNYXA8c3RyaW5nLCBMaWZlY3ljbGVIb29rPjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yLCBjb250ZXh0OiB7XG4gICAgICAgIGhvb2tJZDogc3RyaW5nO1xuICAgICAgICBtZXRob2Q6IExpZmVjeWNsZU1ldGhvZDtcbiAgICB9KSA9PiB2b2lkO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGhvb2tzOiBNYXA8c3RyaW5nLCBMaWZlY3ljbGVIb29rPjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoZGF0YT86IExpZmVjeWNsZVNlcnZpY2VPcHRpb25zKTtcbiAgICBzZXRPbkVycm9yKGhhbmRsZXI6IFJlcXVpcmVkPExpZmVjeWNsZVNlcnZpY2VPcHRpb25zPlsnb25FcnJvciddKTogdm9pZDtcbiAgICBvbkVycm9yKGVycm9yOiBFcnJvciwgY29udGV4dDoge1xuICAgICAgICBob29rSWQ6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBMaWZlY3ljbGVNZXRob2Q7XG4gICAgfSk6IHZvaWQ7XG4gICAgbWFwQWxpYXNlcyhhcmdzOiBzdHJpbmdbXSk6IHN0cmluZ1tdO1xuICAgIGxpc3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogTGlmZWN5Y2xlSG9va1tdO1xuICAgIGFkZCguLi5wYXlsb2FkOiAoTGlmZWN5Y2xlSG9vayB8IENvbnN0cnVjdG9yPExpZmVjeWNsZUhvb2s+KVtdKTogdm9pZDtcbiAgICBlbWl0TWV0aG9kKG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGVtaXQocGF5bG9hZDogTGlmZWN5Y2xlTWV0aG9kIHwgTGlmZWN5Y2xlTWV0aG9kW10sIG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgb24obWV0aG9kOiBMaWZlY3ljbGVNZXRob2QsIGhhbmRsZXI6ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkO1xuICAgIHJlZ2lzdGVyKG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZChvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGJvb3Qob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzaHV0ZG93bihvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNsZWFyKCk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvbkFzc2lnbm1lbnQgPSB2LkluZmVyT3V0cHV0PHR5cGVvZiBwZXJtaXNzaW9uQXNzaWdubWVudFNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uQXNzaWdubWVudFNjaGVtYTogdi5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IGlkOiB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHBlcm1pc3Npb25faWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYXNzaWduYWJsZV90eXBlOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGFzc2lnbmFibGVfaWQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY3JlYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB1cGRhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uID0gdi5JbmZlck91dHB1dDx0eXBlb2YgcGVybWlzc2lvblNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uU2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiB2Lk51bGxhYmxlU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYWN0aW9uOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHN1YmplY3Q6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY29uZGl0aW9uczogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBleHBpcmVzX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBUb2tlbiA9IHYuSW5mZXJPdXRwdXQ8dHlwZW9mIHRva2VuU2NoZW1hPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IHRva2VuU2NoZW1hOiB2Lk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgbmFtZTogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHR5cGU6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXNlcl9pZDogdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB0b2tlbjogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBjcmVhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZXhwaXJlc19hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbn0sIHVuZGVmaW5lZD47XG4iLCJpbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgTGlzdGVuZXIge1xuICAgIGV2ZW50OiBzdHJpbmc7XG4gICAgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGVtaXRIb29rKGNvbnN0cnVjdG9yOiBhbnksIGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG9uSG9vayhjb25zdHJ1Y3RvcjogYW55LCBldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIEhvb2tzU3RhdGljPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBsaXN0ZW5lcnM6IEFycmF5PCguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZD47XG4gICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59ICYgVEJhc2U7XG5leHBvcnQgZGVjbGFyZSBuYW1lc3BhY2UgSG9va3NTdGF0aWMge1xuICAgIHZhciBlbWl0OiB0eXBlb2YgZW1pdEhvb2s7XG4gICAgdmFyIG9uOiB0eXBlb2Ygb25Ib29rO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSG9va3M8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbGlzdGVuZXJzOiBMaXN0ZW5lcltdO1xuICAgICAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgb2ZmKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAgZW1pdEFzeW5jKGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufSAmIFRCYXNlO1xuIiwiZGVjbGFyZSBjb25zdCBQZXJtaXNzaW9uRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVybWlzc2lvbkVudGl0eSBleHRlbmRzIFBlcm1pc3Npb25FbnRpdHlfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gICAgb3JpZ2luOiBzdHJpbmc7XG4gICAgc3ViamVjdDogc3RyaW5nO1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIGNvbmRpdGlvbnM6IHN0cmluZyB8IG51bGwgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGdldCBlZGl0YWJsZSgpOiBib29sZWFuO1xuICAgIGdldCBwYXJzZWRDb25kaXRpb25zKCk6IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IGRlZmluZUFiaWxpdHkgfSBmcm9tICdAY2FzbC9hYmlsaXR5JztcbmltcG9ydCBQZXJtaXNzaW9uIGZyb20gJy4vUGVybWlzc2lvbkVudGl0eS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNsRW50aXR5IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgYWJpbGl0eTogUmV0dXJuVHlwZTx0eXBlb2YgZGVmaW5lQWJpbGl0eT47XG4gICAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25bXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8QWNsRW50aXR5Pik7XG4gICAgY2FuKGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBib29sZWFuO1xuICAgIGNhbm5vdChhY3Rpb246IHN0cmluZywgc3ViamVjdDogYW55LCBvYmplY3Q/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYm9vbGVhbjtcbiAgICBzdWJqZWN0KHN1YmplY3Q6IHN0cmluZywgb2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiAmIGltcG9ydChcIkBjYXNsL2FiaWxpdHlcIikuRm9yY2VkU3ViamVjdDxzdHJpbmc+O1xufVxuIiwiZXhwb3J0IGludGVyZmFjZSBDb29raWVNYXBFbnRpdHlPcHRpb25zIHtcbiAgICBjb29raWVzPzogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb29raWVNYXBFbnRpdHkge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBjb29raWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHByZWZpeDogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBDb29raWVNYXBFbnRpdHlPcHRpb25zKTtcbiAgICBsb2FkKGNvb2tpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBNYXA8c3RyaW5nLCBzdHJpbmc+KTogdm9pZDtcbiAgICBnZXQobmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgbnVsbDtcbiAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogYW55KTogdm9pZDtcbiAgICB0b1JlY29yZCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuIiwiZXhwb3J0IGRlY2xhcmUgY29uc3QgVFlQRVM6ICgpID0+ICh7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogYW55O1xuICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgY29uZmlnX2ZpZWxkczoge1xuICAgICAgICBkaXJlY3Rvcnk6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgIH07XG4gICAgICAgIGFjY2Vzc0tleUlkPzogdW5kZWZpbmVkO1xuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk/OiB1bmRlZmluZWQ7XG4gICAgICAgIGJ1Y2tldD86IHVuZGVmaW5lZDtcbiAgICAgICAgcmVnaW9uPzogdW5kZWZpbmVkO1xuICAgICAgICBwcmVmaXg/OiB1bmRlZmluZWQ7XG4gICAgICAgIGVuZHBvaW50PzogdW5kZWZpbmVkO1xuICAgIH07XG59IHwge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogYW55O1xuICAgIGNvbmZpZ19maWVsZHM6IHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGJ1Y2tldDoge1xuICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICB9O1xuICAgICAgICByZWdpb246IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgfTtcbiAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgIH07XG4gICAgICAgIGVuZHBvaW50OiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgIH07XG4gICAgICAgIGRpcmVjdG9yeT86IHVuZGVmaW5lZDtcbiAgICB9O1xufSlbXTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlQ29uZmlnIHtcbiAgICBzdGF0aWMgZ2V0IFRZUEVTKCk6ICh7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgICAgIGNvbmZpZ19maWVsZHM6IHtcbiAgICAgICAgICAgIGRpcmVjdG9yeToge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjZXNzS2V5SWQ/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBidWNrZXQ/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZWdpb24/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBwcmVmaXg/OiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBlbmRwb2ludD86IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICB9IHwge1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICBkZXNjcmlwdGlvbjogYW55O1xuICAgICAgICBjb25maWdfZmllbGRzOiB7XG4gICAgICAgICAgICBhY2Nlc3NLZXlJZDoge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnVja2V0OiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVnaW9uOiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcHJlZml4OiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZW5kcG9pbnQ6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkaXJlY3Rvcnk/OiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgfSlbXTtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgaXNfZGVmYXVsdDogYm9vbGVhbjtcbiAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29uc3RydWN0b3IoZGF0YTogRHJpdmVDb25maWcpO1xuICAgIGdldCBjb25maWdfZmllbGRzKCk6IHt9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVFbnRyeSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICB0eXBlOiAnZmlsZScgfCAnZGlyZWN0b3J5JztcbiAgICBtZXRhczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBEcml2ZUVudHJ5KTtcbn1cbiIsImRlY2xhcmUgY29uc3QgRmlsZUVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZUVudGl0eSBleHRlbmRzIEZpbGVFbnRpdHlfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBkcml2ZTogc3RyaW5nO1xuICAgIG1pbWV0eXBlOiBzdHJpbmc7XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIGNsaWVudF9uYW1lOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBwdWJsaWM6IGJvb2xlYW47XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIG1ldGFzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBpc0ltYWdlKCk6IGJvb2xlYW47XG59XG5leHBvcnQge307XG4iLCJkZWNsYXJlIGNvbnN0IEZpbGVNZXRhX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlTWV0YSBleHRlbmRzIEZpbGVNZXRhX2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgZmlsZV9pZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCB7fTtcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEdpdEJyYW5jaEVudGl0eSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHJlbW90ZTogc3RyaW5nIHwgbnVsbDtcbiAgICBpc19jdXJyZW50OiBib29sZWFuO1xuICAgIGlzX3JlbW90ZTogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBHaXRCcmFuY2hFbnRpdHkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2l0Q29tbWl0RW50aXR5IHtcbiAgICBoYXNoOiBzdHJpbmc7XG4gICAgc2hvcnRfaGFzaDogc3RyaW5nO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBib2R5OiBzdHJpbmc7XG4gICAgYXV0aG9yX25hbWU6IHN0cmluZztcbiAgICBhdXRob3JfZW1haWw6IHN0cmluZztcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoZGF0YTogR2l0Q29tbWl0RW50aXR5KTtcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlTWFuaWZlc3RCdWlsZEltcG9ydCB7XG4gICAgZnJvbTogc3RyaW5nO1xuICAgIHRvPzogc3RyaW5nO1xuICAgIHR5cGU6ICdnbG9iYWxfaW1wb3J0Jztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTW9kdWxlTWFuaWZlc3RCdWlsZCB7XG4gICAgaW1wb3J0cz86IE1vZHVsZU1hbmlmZXN0QnVpbGRJbXBvcnRbXTtcbn1cbmRlY2xhcmUgY29uc3QgTW9kdWxlTWFuaWZlc3RfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGVNYW5pZmVzdCBleHRlbmRzIE1vZHVsZU1hbmlmZXN0X2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGF1dGhvcj86IHN0cmluZztcbiAgICBkZXBlbmRlbmNpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGJ1aWxkPzogTW9kdWxlTWFuaWZlc3RCdWlsZDtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSBNb2R1bGVNYW5pZmVzdCBmcm9tICcuL01vZHVsZU1hbmlmZXN0RW50aXR5LnRzJztcbmltcG9ydCBMaWZlY3ljbGVIb29rIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTGlmZWN5Y2xlSG9vay50cyc7XG5pbnRlcmZhY2UgTW9kdWxlVXBncmFkZUluZm8ge1xuICAgIHNvdXJjZTogJ2dpdCcgfCAnemlwJztcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5kZWNsYXJlIGNvbnN0IE1vZHVsZV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3Rvcjx7fT4gJiB0eXBlb2YgTGlmZWN5Y2xlSG9vaztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZSBleHRlbmRzIE1vZHVsZV9iYXNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGRlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBidWlsZDogTW9kdWxlTWFuaWZlc3RbJ2J1aWxkJ107XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgdXBncmFkZV9pbmZvPzogTW9kdWxlVXBncmFkZUluZm87XG4gICAgc2V0RGF0YShkYXRhOiBQYXJ0aWFsPE1vZHVsZSB8IE1vZHVsZU1hbmlmZXN0Pik6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdpbmF0aW9uRW50aXR5PFQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgaXRlbXM6IFRbXTtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwZXJfcGFnZTogbnVtYmVyO1xuICAgIHRvdGFsX3BhZ2VzOiBudW1iZXI7XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGFydGlhbDxQYWdpbmF0aW9uRW50aXR5Pik7XG4gICAgc3RhdGljIGZyb208VCA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHBheWxvYWQ6IFBhcnRpYWw8UGFnaW5hdGlvbkVudGl0eTxUPj4pOiBQYWdpbmF0aW9uRW50aXR5PFQ+O1xufVxuIiwiZGVjbGFyZSBjb25zdCBQbHVnaW5FbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRpdHkgZXh0ZW5kcyBQbHVnaW5FbnRpdHlfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmVyc2lvbjogc3RyaW5nO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgYWxpYXNlczogc3RyaW5nW107XG4gICAgdmVyc2lvbl9jaGFubmVsOiBzdHJpbmc7XG4gICAgdmVyc2lvbl9hdmFpbGFibGVfY2hhbm5lbHM6IHN0cmluZ1tdO1xufVxuZXhwb3J0IHt9O1xuIiwiZGVjbGFyZSBjb25zdCBSb2xlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGNyZWF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgICAgIHVwZGF0ZWRfYXQ6IERhdGUgfCBzdHJpbmc7XG4gICAgfTtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZGVsZXRlZF9hdDogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb2xlIGV4dGVuZHMgUm9sZV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIFBlcm1pc3Npb24gZnJvbSAnLi9QZXJtaXNzaW9uRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIFJvbGUgZnJvbSAnLi9Sb2xlRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgVXNlckVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXNlckVudGl0eSBleHRlbmRzIFVzZXJFbnRpdHlfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB1c2VybmFtZTogc3RyaW5nO1xuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xuICAgIHZlcmlmaWVkX2F0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG4gICAgcGVybWlzc2lvbnM/OiBQZXJtaXNzaW9uW107XG4gICAgcm9sZXM/OiBSb2xlW107XG4gICAgZ2V0IGluaXRpYWxzKCk6IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENvbW1hbmQgYXMgQ29tbWFuZGVyQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgcHJpbnRUYWJsZSwgcHJpbnRPYmplY3QgfSBmcm9tICcuLi91dGlscy9wcmludFRhYmxlLnRzJztcbmltcG9ydCB7IEVtbWl0dGVyU2VydmljZSwgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuaW1wb3J0ICogYXMgaW5xdWlyZXIgZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuZXhwb3J0IGludGVyZmFjZSBDbGlFdmVudHMge1xuICAgICdjbGk6cmVnaXN0ZXJlZCc6IHtcbiAgICAgICAgY2xpOiBDbGlTZXJ2aWNlO1xuICAgIH07XG59XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBDbGlDb21tYW5kIGV4dGVuZHMgQ29tbWFuZGVyQ29tbWFuZCB7XG4gICAgX19pc19jbGlfY29tbWFuZDogYm9vbGVhbjtcbiAgICB0YWJsZTogdHlwZW9mIHByaW50VGFibGU7XG4gICAgb2JqZWN0OiB0eXBlb2YgcHJpbnRPYmplY3Q7XG4gICAgY29sb3JzOiBjaGFsay5DaGFsayAmIGNoYWxrLkNoYWxrRnVuY3Rpb24gJiB7XG4gICAgICAgIHN1cHBvcnRzQ29sb3I6IGNoYWxrLkNvbG9yU3VwcG9ydCB8IGZhbHNlO1xuICAgICAgICBMZXZlbDogY2hhbGsuTGV2ZWw7XG4gICAgICAgIENvbG9yOiAoXCJibGFja1wiIHwgXCJyZWRcIiB8IFwiZ3JlZW5cIiB8IFwieWVsbG93XCIgfCBcImJsdWVcIiB8IFwibWFnZW50YVwiIHwgXCJjeWFuXCIgfCBcIndoaXRlXCIgfCBcImdyYXlcIiB8IFwiZ3JleVwiIHwgXCJibGFja0JyaWdodFwiIHwgXCJyZWRCcmlnaHRcIiB8IFwiZ3JlZW5CcmlnaHRcIiB8IFwieWVsbG93QnJpZ2h0XCIgfCBcImJsdWVCcmlnaHRcIiB8IFwibWFnZW50YUJyaWdodFwiIHwgXCJjeWFuQnJpZ2h0XCIgfCBcIndoaXRlQnJpZ2h0XCIpIHwgKFwiYmdCbGFja1wiIHwgXCJiZ1JlZFwiIHwgXCJiZ0dyZWVuXCIgfCBcImJnWWVsbG93XCIgfCBcImJnQmx1ZVwiIHwgXCJiZ01hZ2VudGFcIiB8IFwiYmdDeWFuXCIgfCBcImJnV2hpdGVcIiB8IFwiYmdHcmF5XCIgfCBcImJnR3JleVwiIHwgXCJiZ0JsYWNrQnJpZ2h0XCIgfCBcImJnUmVkQnJpZ2h0XCIgfCBcImJnR3JlZW5CcmlnaHRcIiB8IFwiYmdZZWxsb3dCcmlnaHRcIiB8IFwiYmdCbHVlQnJpZ2h0XCIgfCBcImJnTWFnZW50YUJyaWdodFwiIHwgXCJiZ0N5YW5CcmlnaHRcIiB8IFwiYmdXaGl0ZUJyaWdodFwiKTtcbiAgICAgICAgRm9yZWdyb3VuZENvbG9yOiBcImJsYWNrXCIgfCBcInJlZFwiIHwgXCJncmVlblwiIHwgXCJ5ZWxsb3dcIiB8IFwiYmx1ZVwiIHwgXCJtYWdlbnRhXCIgfCBcImN5YW5cIiB8IFwid2hpdGVcIiB8IFwiZ3JheVwiIHwgXCJncmV5XCIgfCBcImJsYWNrQnJpZ2h0XCIgfCBcInJlZEJyaWdodFwiIHwgXCJncmVlbkJyaWdodFwiIHwgXCJ5ZWxsb3dCcmlnaHRcIiB8IFwiYmx1ZUJyaWdodFwiIHwgXCJtYWdlbnRhQnJpZ2h0XCIgfCBcImN5YW5CcmlnaHRcIiB8IFwid2hpdGVCcmlnaHRcIjtcbiAgICAgICAgQmFja2dyb3VuZENvbG9yOiBcImJnQmxhY2tcIiB8IFwiYmdSZWRcIiB8IFwiYmdHcmVlblwiIHwgXCJiZ1llbGxvd1wiIHwgXCJiZ0JsdWVcIiB8IFwiYmdNYWdlbnRhXCIgfCBcImJnQ3lhblwiIHwgXCJiZ1doaXRlXCIgfCBcImJnR3JheVwiIHwgXCJiZ0dyZXlcIiB8IFwiYmdCbGFja0JyaWdodFwiIHwgXCJiZ1JlZEJyaWdodFwiIHwgXCJiZ0dyZWVuQnJpZ2h0XCIgfCBcImJnWWVsbG93QnJpZ2h0XCIgfCBcImJnQmx1ZUJyaWdodFwiIHwgXCJiZ01hZ2VudGFCcmlnaHRcIiB8IFwiYmdDeWFuQnJpZ2h0XCIgfCBcImJnV2hpdGVCcmlnaHRcIjtcbiAgICAgICAgTW9kaWZpZXJzOiBcInJlc2V0XCIgfCBcImJvbGRcIiB8IFwiZGltXCIgfCBcIml0YWxpY1wiIHwgXCJ1bmRlcmxpbmVcIiB8IFwiaW52ZXJzZVwiIHwgXCJoaWRkZW5cIiB8IFwic3RyaWtldGhyb3VnaFwiIHwgXCJ2aXNpYmxlXCI7XG4gICAgICAgIHN0ZGVycjogY2hhbGsuQ2hhbGsgJiB7XG4gICAgICAgICAgICBzdXBwb3J0c0NvbG9yOiBjaGFsay5Db2xvclN1cHBvcnQgfCBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGlucXVpcmVyOiB0eXBlb2YgaW5xdWlyZXI7XG4gICAgbmVlZHM6IFNldDxzdHJpbmc+O1xuICAgIG5lZWQoLi4uYXJnczogc3RyaW5nW10pOiB0aGlzO1xuICAgIGNyZWF0ZUNvbW1hbmQobmFtZT86IHN0cmluZyk6IENsaUNvbW1hbmQ7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGlTZXJ2aWNlIGV4dGVuZHMgQ2xpQ29tbWFuZCB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRpcnM6IFNldDxzdHJpbmc+O1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBlbW1pdHRlcjogRW1taXR0ZXJTZXJ2aWNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIHN0YXRpYyBjcmVhdGUobmFtZT86IHN0cmluZyk6IENsaVNlcnZpY2U7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHRoaXM7XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB0aGlzO1xuICAgIHNldEVtbWl0dGVyKGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2UpOiB0aGlzO1xuICAgIGNyZWF0ZUNvbW1hbmQobmFtZT86IHN0cmluZyk6IENsaVNlcnZpY2U7XG4gICAgYWRkRGlyKGRpcjogc3RyaW5nKTogdGhpcztcbiAgICBsb2FkRGlyKGRpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dGhpcz47XG59XG4iLCJpbXBvcnQgQ2xpU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL0NsaVNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXJ0ZVRlc3RlclNlcnZpY2UgZXh0ZW5kcyBDbGlTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIGFkZChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGV4ZWN1dGUoYXJnczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IGNwIGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpV3JhcHBlclNlcnZpY2Uge1xuICAgIHByb2Nlc3M6IGNwLkNoaWxkUHJvY2VzcyB8IG51bGw7XG4gICAgYXBwQmFzZVBhdGg6IHN0cmluZztcbiAgICBlbnY6IE1hcDxzdHJpbmcsIGFueT47XG4gICAgYXJnczogc3RyaW5nW107XG4gICAgY29uZmlnQXJndW1lbnRzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNvbmZpZ0ZpbGVzOiBzdHJpbmdbXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgc3RhdGljIGNyZWF0ZSgpOiBDbGlXcmFwcGVyU2VydmljZTtcbiAgICBzZXRCYXNlUGF0aChwYXRoOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdGhpcztcbiAgICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKTogdGhpcztcbiAgICBhZGRDb25maWdBcmd1bWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHRoaXM7XG4gICAgYWRkQ29uZmlnRmlsZSguLi5maWxlUGF0aHM6IHN0cmluZ1tdKTogdGhpcztcbiAgICBhZGRFbnYoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAgIGxvYWRDb25maWdBcmd1bWVudHMoKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRmlsZXMoKTogdm9pZDtcbiAgICBsb2FkRW52aXJvbm1lbnQoKTogdm9pZDtcbiAgICBsb2FkQXJndW1lbnRzKGFyZ3M/OiBzdHJpbmdbXSk6IHZvaWQ7XG4gICAga2lsbChjb2RlPzogbnVtYmVyKTogdm9pZDtcbiAgICBydW4oYXJncz86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ0ZTU2VydmljZU9wdGlvbnMge1xuICAgIGRpcmVjdG9yeT86IHN0cmluZztcbiAgICBmb3JtYXQ/OiAnanNvbicgfCAneW1sJztcbiAgICBmb3JtYXRPcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ0ZTU2VydmljZSBleHRlbmRzIENvbmZpZ1NlcnZpY2Uge1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBmb3JtYXQ6ICdqc29uJyB8ICd5bWwnO1xuICAgIGZvcm1hdE9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IENvbmZpZ0ZTU2VydmljZU9wdGlvbnMpO1xuICAgIHdyaXRlKGVudHJ5OiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgd3JpdGVTeW5jKGVudHJ5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQ7XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHByaXZhdGUgcGFyc2VLZXk7XG4gICAgc2V0KGZ1bGxLZXk6IHN0cmluZywgdmFsdWU6IGFueSwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB1bnNldChmdWxsS2V5OiBzdHJpbmcpOiB2b2lkO1xufVxuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmV4cG9ydCB0eXBlIEVudlNjaGVtYSA9IHYuSW5mZXJPdXRwdXQ8dHlwZW9mIGVudlNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBlbnZTY2hlbWE6IHYuTG9vc2VPYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IE5PREVfRU5WOiB2Lk9wdGlvbmFsU2NoZW1hPHYuVW5pb25TY2hlbWE8W3YuTGl0ZXJhbFNjaGVtYTxcImRldmVsb3BtZW50XCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcInByb2R1Y3Rpb25cIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwidGVzdFwiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgXCJkZXZlbG9wbWVudFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQkFTRV9QQVRIOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9TVE9SQUdFX1BBVEg6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQVBQX1VSTDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfUE9SVDogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIG51bWJlcj5dPiwgXCIzMDAwXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9IT1NUOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIFwiMC4wLjAuMFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfTE9HX0xFVkVMOiB2Lk9wdGlvbmFsU2NoZW1hPHYuUGlja2xpc3RTY2hlbWE8W1wiZXJyb3JcIiwgXCJ3YXJuXCIsIFwiaW5mb1wiLCBcImRlYnVnXCJdLCB1bmRlZmluZWQ+LCBcImluZm9cIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0xJRkVDWUNMRV9ERUJVRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJ0cnVlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImZhbHNlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcIjFcIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwiMFwiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248XCIwXCIgfCBcIjFcIiB8IFwidHJ1ZVwiIHwgXCJmYWxzZVwiLCBib29sZWFuPiwgdi5Cb29sZWFuU2NoZW1hPHVuZGVmaW5lZD5dPiwgXCJmYWxzZVwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ0xJRU5UX0NPTkZJRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUc6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+LCBcIlwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX0FSR1VNRU5UUzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfRklMRVM6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBzdHJpbmdbXT5dPiwgXCJcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19ERUJVRzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJ0cnVlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcImZhbHNlXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcIjFcIiwgdW5kZWZpbmVkPiwgdi5MaXRlcmFsU2NoZW1hPFwiMFwiLCB1bmRlZmluZWQ+XSwgdW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248XCIwXCIgfCBcIjFcIiB8IFwidHJ1ZVwiIHwgXCJmYWxzZVwiLCBib29sZWFuPiwgdi5Cb29sZWFuU2NoZW1hPHVuZGVmaW5lZD5dPiwgXCJmYWxzZVwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX0RSSVZFUjogdi5PcHRpb25hbFNjaGVtYTx2LlBpY2tsaXN0U2NoZW1hPFtcImZzXCIsIFwiczNcIl0sIHVuZGVmaW5lZD4sIFwiZnNcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19GU19QQVRIOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19GU19GT1JNQVQ6IHYuT3B0aW9uYWxTY2hlbWE8di5QaWNrbGlzdFNjaGVtYTxbXCJqc29uXCIsIFwieW1sXCJdLCB1bmRlZmluZWQ+LCBcImpzb25cIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19GU19GT1JNQVRfT1BUSU9OUzogdi5PcHRpb25hbFNjaGVtYTx2LlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFt2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB2LlRyYW5zZm9ybUFjdGlvbjxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfQlVDS0VUOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19SRUdJT046IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX0FDQ0VTU19LRVlfSUQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX1NFQ1JFVF9BQ0NFU1NfS0VZOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19TRVNTSU9OX1RPS0VOOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19FTkRQT0lOVDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfUFJFRklYOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9QTFVHSU5TX0RJUlM6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBzdHJpbmdbXT5dPiwgXCJcIj47XG59LCB1bmRlZmluZWQ+O1xuIiwiaW1wb3J0IGRvdGVudiBmcm9tICdkb3RlbnYnO1xuaW1wb3J0IHR5cGUgeyBFbnZTY2hlbWEgfSBmcm9tICcjc2VydmVyL3NjaGVtYXMvZW52U2NoZW1hLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVudlNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBwcml2YXRlIGVudjtcbiAgICBwcml2YXRlIGZpbGVzO1xuICAgIHN0YXRpYyBjcmVhdGUoKTogRW52U2VydmljZTtcbiAgICBzdGF0aWMgZG90RW52Q29uZmlnKG9wdGlvbnM/OiBkb3RlbnYuRG90ZW52Q29uZmlnT3B0aW9ucyk6IGRvdGVudi5Eb3RlbnZDb25maWdPdXRwdXQ7XG4gICAgc2V0RmlsZXMoZmlsZXM6IHN0cmluZ1tdKTogdGhpcztcbiAgICBhZGRGaWxlKGZpbGU6IHN0cmluZyk6IHRoaXM7XG4gICAgbG9hZCgpOiB0aGlzO1xuICAgIGdldCBwcm9kdWN0aW9uKCk6IGJvb2xlYW47XG4gICAgZ2V0IGRldmVsb3BtZW50KCk6IGJvb2xlYW47XG4gICAgZ2V0IHRlc3QoKTogYm9vbGVhbjtcbiAgICBoYXM8SyBleHRlbmRzIGtleW9mIEVudlNjaGVtYT4oa2V5OiBLKTogYm9vbGVhbjtcbiAgICBnZXQ8SyBleHRlbmRzIGtleW9mIEVudlNjaGVtYT4oa2V5OiBLLCBkZWZhdWx0VmFsdWU/OiBhbnkpOiBFbnZTY2hlbWFbS107XG4gICAgc2V0PEsgZXh0ZW5kcyBrZXlvZiBFbnZTY2hlbWE+KGtleTogSywgdmFsdWU6IEVudlNjaGVtYVtLXSk6IHZvaWQ7XG59XG4iLCJpbXBvcnQgeyB0eXBlIExvZ2dlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSBFbnZTZXJ2aWNlIGZyb20gJy4vRW52U2VydmljZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ01hbmFnZXJPcHRpb25zIHtcbiAgICBlbnY6IEVudlNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHNpbGVudD86IGJvb2xlYW47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdNYW5hZ2VyU2VydmljZSB7XG4gICAgZW52OiBFbnZTZXJ2aWNlO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBzaWxlbnQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnMpO1xuICAgIHN0YXRpYyBjcmVhdGUob3B0aW9uczogQ29uZmlnTWFuYWdlck9wdGlvbnMpOiBDb25maWdNYW5hZ2VyU2VydmljZTtcbiAgICBwcml2YXRlIGxvYWRTM0NvbmZpZztcbiAgICBwcml2YXRlIGxvYWRGU0NvbmZpZztcbiAgICBsb2FkQ29uZmlnRnJvbUVudihzZXJ2aWNlOiBDb25maWdTZXJ2aWNlKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRnJvbUZpbGUoc2VydmljZTogQ29uZmlnU2VydmljZSwgZmlsZTogc3RyaW5nKTogdm9pZDtcbiAgICBsb2FkQ29uZmlnRnJvbUZpbGVzKHNlcnZpY2U6IENvbmZpZ1NlcnZpY2UsIGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQ7XG4gICAgbG9hZCgpOiBQcm9taXNlPENvbmZpZ1NlcnZpY2U+O1xufVxuIiwiaW1wb3J0IG1zIGZyb20gJ21zJztcbmltcG9ydCB0eXBlIERyaXZlRW50cnkgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgVXJsT3B0aW9ucyB7XG4gICAgZXhwaXJlcz86IG1zLlN0cmluZ1ZhbHVlO1xufVxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRVcmxPcHRpb25zIHtcbiAgICBleHBpcmVzPzogbXMuU3RyaW5nVmFsdWU7XG4gICAgbWltZV90eXBlcz86IHN0cmluZ1tdO1xuICAgIG1heF9zaXplPzogbnVtYmVyO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVCYXNlR2F0ZXdheSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBpY2s8RHJpdmVCYXNlR2F0ZXdheSwgJ2lkJyB8ICduYW1lJyB8ICdkZXNjcmlwdGlvbicgfCAnY29uZmlnJz4pO1xuICAgIGxpc3QoZm9sZGVyPzogc3RyaW5nKTogUHJvbWlzZTxEcml2ZUVudHJ5W10+O1xuICAgIGZpbmQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RHJpdmVFbnRyeT47XG4gICAgZXhpc3RzKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHJlYWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT47XG4gICAgcmVhZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+O1xuICAgIHdyaXRlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgdXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBVcmxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHVwbG9hZFVybChmaWxlbmFtZTogc3RyaW5nLCBvcHRpb25zPzogVXBsb2FkVXJsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbn1cbiIsImltcG9ydCB7IFMzQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB0eXBlIHsgSW5mZXJPdXRwdXQgfSBmcm9tICd2YWxpYm90JztcbmltcG9ydCBCYXNlRHJpdmUgZnJvbSAnI3NlcnZlci9nYXRld2F5cy9Ecml2ZUJhc2VHYXRld2F5LnRzJztcbmRlY2xhcmUgY29uc3Qgc2NoZW1hOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9iamVjdFNjaGVtYTx7XG4gICAgcmVhZG9ubHkgYnVja2V0OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFtpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBpbXBvcnQoXCJ2YWxpYm90XCIpLk1pbkxlbmd0aEFjdGlvbjxzdHJpbmcsIDEsIHVuZGVmaW5lZD5dPjtcbiAgICByZWFkb25seSByZWdpb246IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBhY2Nlc3NLZXlJZDogaW1wb3J0KFwidmFsaWJvdFwiKS5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgaW1wb3J0KFwidmFsaWJvdFwiKS5NaW5MZW5ndGhBY3Rpb248c3RyaW5nLCAxLCB1bmRlZmluZWQ+XT47XG4gICAgcmVhZG9ubHkgc2VjcmV0QWNjZXNzS2V5OiBpbXBvcnQoXCJ2YWxpYm90XCIpLlNjaGVtYVdpdGhQaXBlPHJlYWRvbmx5IFtpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBpbXBvcnQoXCJ2YWxpYm90XCIpLk1pbkxlbmd0aEFjdGlvbjxzdHJpbmcsIDEsIHVuZGVmaW5lZD5dPjtcbiAgICByZWFkb25seSBzZXNzaW9uVG9rZW46IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBlbmRwb2ludDogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHByZWZpeDogaW1wb3J0KFwidmFsaWJvdFwiKS5PcHRpb25hbFNjaGVtYTxpbXBvcnQoXCJ2YWxpYm90XCIpLlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xufSwgdW5kZWZpbmVkPjtcbmV4cG9ydCB0eXBlIFMzRHJpdmVDb25maWcgPSBJbmZlck91dHB1dDx0eXBlb2Ygc2NoZW1hPjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlUzMgZXh0ZW5kcyBCYXNlRHJpdmUge1xuICAgIHByaXZhdGUgc2NoZW1hO1xuICAgIHByaXZhdGUgX2NsaWVudD87XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGljazxCYXNlRHJpdmUsICdpZCcgfCAnbmFtZScgfCAnZGVzY3JpcHRpb24nIHwgJ2NvbmZpZyc+KTtcbiAgICBnZXQgdmFsaWQoKTogYm9vbGVhbjtcbiAgICBwcml2YXRlIGNoZWNrVmFsaWQ7XG4gICAgcHJvdGVjdGVkIGdldCBidWNrZXQoKTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBnZXQgcHJlZml4KCk6IHN0cmluZztcbiAgICBwcml2YXRlIGdldEtleTtcbiAgICBwcm90ZWN0ZWQgZ2V0IGNsaWVudCgpOiBTM0NsaWVudDtcbiAgICBleGlzdHM6IEJhc2VEcml2ZVsnZXhpc3RzJ107XG4gICAgbGlzdDogQmFzZURyaXZlWydsaXN0J107XG4gICAgZmluZDogQmFzZURyaXZlWydmaW5kJ107XG4gICAgbWtkaXIoX2ZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHJlYWQ6IEJhc2VEcml2ZVsncmVhZCddO1xuICAgIHJlYWRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgICB3cml0ZTogQmFzZURyaXZlWyd3cml0ZSddO1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGU6IEJhc2VEcml2ZVsnZGVsZXRlJ107XG4gICAgdXJsOiBCYXNlRHJpdmVbJ3VybCddO1xuICAgIHVwbG9hZFVybDogQmFzZURyaXZlWyd1cGxvYWRVcmwnXTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW1wb3J0IFMzRHJpdmUgZnJvbSAnI3NlcnZlci9nYXRld2F5cy9Ecml2ZVMzR2F0ZXdheS50cyc7XG5pbXBvcnQgdHlwZSB7IFMzRHJpdmVDb25maWcgfSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0RyaXZlUzNHYXRld2F5LnRzJztcbmludGVyZmFjZSBJbml0aU9wdGlvbnMgZXh0ZW5kcyBPbWl0PFMzRHJpdmVDb25maWcsICduYW1lJyB8ICdkZXNjcmlwdGlvbic+IHtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdTM1NlcnZpY2UgZXh0ZW5kcyBDb25maWdTZXJ2aWNlIHtcbiAgICBwcmVmaXg6IHN0cmluZztcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgZHJpdmU6IFMzRHJpdmU7XG4gICAgYnVja2V0OiBzdHJpbmc7XG4gICAgcmVnaW9uOiBzdHJpbmc7XG4gICAgZW5kcG9pbnQ/OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogSW5pdGlPcHRpb25zKTtcbiAgICBwcml2YXRlIHBhcnNlS2V5O1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzZXQoZnVsbEtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIHVuc2V0KGZ1bGxLZXk6IHN0cmluZyk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IFJlcXVlc3RJbml0IH0gZnJvbSAndW5kaWNpJztcbmV4cG9ydCBpbnRlcmZhY2UgRG93bmxvYWRlZEZldGNoT3B0aW9ucyBleHRlbmRzIFJlcXVlc3RJbml0IHtcbiAgICBwcm94eT86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvd25sb2FkU2VydmljZSB7XG4gICAgZmV0Y2godXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBEb3dubG9hZGVkRmV0Y2hPcHRpb25zKTogUHJvbWlzZTxpbXBvcnQoXCJ1bmRpY2lcIikuUmVzcG9uc2U+O1xuICAgIHN0cmVhbSh1cmw6IHN0cmluZywgb3B0aW9ucz86IERvd25sb2FkZWRGZXRjaE9wdGlvbnMpOiBQcm9taXNlPHtcbiAgICAgICAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW07XG4gICAgICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgfT47XG59XG4iLCJpbXBvcnQgdHlwZSB7IFJlYWRTdHJlYW0gfSBmcm9tICdmcyc7XG5pbXBvcnQgdHlwZSBtcyBmcm9tICdtcyc7XG5pbXBvcnQgdHlwZSBEcml2ZUVudHJ5IGZyb20gJyNzaGFyZWQvZW50aXRpZXMvRHJpdmVFbnRyeUVudGl0eS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIERyaXZlVXJsT3B0aW9ucyB7XG4gICAgZXhwaXJlcz86IG1zLlN0cmluZ1ZhbHVlO1xufVxuZXhwb3J0IGludGVyZmFjZSBEcml2ZVVwbG9hZFVybE9wdGlvbnMge1xuICAgIGV4cGlyZXM/OiBtcy5TdHJpbmdWYWx1ZTtcbiAgICBtaW1lX3R5cGVzPzogc3RyaW5nW107XG4gICAgbWF4X3NpemU/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIERyaXZlQ29udHJhY3Qge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGxpc3QoZm9sZGVyPzogc3RyaW5nKTogUHJvbWlzZTxEcml2ZUVudHJ5W10+O1xuICAgIGZpbmQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RHJpdmVFbnRyeT47XG4gICAgZXhpc3RzKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHJlYWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT47XG4gICAgd3JpdGUoZmlsZW5hbWU6IHN0cmluZywgZGF0YTogVWludDhBcnJheSk6IFByb21pc2U8dm9pZD47XG4gICAgd3JpdGVTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlbGV0ZShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cmwoZmlsZW5hbWU6IHN0cmluZywgb3B0aW9ucz86IERyaXZlVXJsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICB1cGxvYWRVcmwoZmlsZW5hbWU6IHN0cmluZywgb3B0aW9ucz86IERyaXZlVXBsb2FkVXJsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICByZWFkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFJlYWRTdHJlYW0+O1xufVxuIiwiaW1wb3J0IERyaXZlRW50cnkgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgRHJpdmVVcmxPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRHJpdmVDb250cmFjdC50cyc7XG5pbXBvcnQgQmFzZURyaXZlIGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvRHJpdmVCYXNlR2F0ZXdheS50cyc7XG5pbXBvcnQgdHlwZSBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbnRlcmZhY2UgVmFsaWRhdGVVcGxvYWRPcHRpb25zIHtcbiAgICBtaW1lX3R5cGVzOiBzdHJpbmc7XG4gICAgbWF4U2l6ZT86IG51bWJlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGdhdGV3YXlzOiBNYXA8c3RyaW5nLCB0eXBlb2YgQmFzZURyaXZlPjtcbiAgICBkcml2ZXM6IE1hcDxzdHJpbmcsIEJhc2VEcml2ZT47XG4gICAgc2VsZWN0ZWQ/OiBzdHJpbmc7XG4gICAgZGVmYXVsdERyaXZlPzogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBnZXQgY3VycmVudCgpOiBCYXNlRHJpdmUgfCB1bmRlZmluZWQ7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8RHJpdmVTZXJ2aWNlPik7XG4gICAgbGlzdERyaXZlcygpOiB7XG4gICAgICAgIGRlZmF1bHQ6IGJvb2xlYW47XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9W107XG4gICAgZ2V0KG5hbWU/OiBzdHJpbmcpOiBCYXNlRHJpdmU7XG4gICAgdXNlKG5hbWU/OiBzdHJpbmcpOiBEcml2ZVNlcnZpY2U7XG4gICAgbGlzdChmb2xkZXI/OiBzdHJpbmcpOiBQcm9taXNlPERyaXZlRW50cnlbXT47XG4gICAgZmluZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxEcml2ZUVudHJ5PjtcbiAgICBleGlzdHMoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG4gICAgcmVhZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxVaW50OEFycmF5PjtcbiAgICByZWFkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT47XG4gICAgcmVhZEFzVGV4dChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHdyaXRlKGZpbGVuYW1lOiBzdHJpbmcsIHBheWxvYWQ6IFVpbnQ4QXJyYXkgfCBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD47XG4gICAgd3JpdGVTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKlxuICAgICAqIFJldHJpZXZlIGEgVVJMIGZvciBhIGZpbGUgaW4gdGhlIGRyaXZlLlxuICAgICAqIEBwYXJhbSBwYXlsb2FkICBGaWxlIGluc3RhbmNlLCBGaWxlIElELCBEcml2ZUVudHJ5IGluc3RhbmNlIG9yIGZpbGVuYW1lIHN0cmluZ1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHJldHVybnMgc3RyaW5nXG4gICAgICovXG4gICAgdXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBEcml2ZVVybE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgdXBsb2FkVXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBEcml2ZVVybE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgLyoqXG4gICAgICogVXBsb2FkIGEgZmlsZSBmcm9tIHRoZSBsb2NhbCBmaWxlc3lzdGVtIHRvIHRoZSBkcml2ZS5cbiAgICAgKiBAcGFyYW0gc291cmNlIGZpbGVuYW1lIGluIGxvY2FsIGZpbGVzeXN0ZW1cbiAgICAgKiBAcGFyYW0gZGVzdGluYXRpb25cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIHVwbG9hZChzb3VyY2U6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqXG4gICAgICogRG93bmxvYWQgYSBmaWxlIGZyb20gdGhlIGRyaXZlIHRvIHRoZSBsb2NhbCBmaWxlc3lzdGVtLlxuICAgICAqIEBwYXJhbSBmaWxlbmFtZSBmaWxlbmFtZSBpbiB0aGUgZHJpdmVcbiAgICAgKiBAcGFyYW0gZGVzdGluYXRpb25cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGRvd25sb2FkKGZpbGVuYW1lOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlbGV0ZShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgY3JlYXRlRGVmYXVsdERyaXZlcygpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHZhbGlkYXRlVXBsb2FkKG9wdGlvbnM6IFZhbGlkYXRlVXBsb2FkT3B0aW9ucywgZmlsZToge1xuICAgICAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgICAgICBzaXplOiBudW1iZXI7XG4gICAgfSk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlLCBDb29raWVPcHRpb25zIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgQmFzZSBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb29raWVNYXBFbnRpdHkgZXh0ZW5kcyBCYXNlIHtcbiAgICByZXF1ZXN0OiBSZXF1ZXN0O1xuICAgIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCByZXNwb25zZTogUmVzcG9uc2UpO1xuICAgIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBDb29raWVPcHRpb25zKTogdm9pZDtcbn1cbiIsImltcG9ydCBDb29raWVNYXBFbnRpdHkgZnJvbSBcIiNzZXJ2ZXIvZW50aXRpZXMvQ29va2llTWFwRW50aXR5LnRzXCI7XG5pbXBvcnQgQ29udGFpbmVyU2VydmljZSBmcm9tIFwiI3NoYXJlZC9zZXJ2aWNlcy9Db250YWluZXJTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlc29sdmFibGVIZWFkIH0gZnJvbSAnQHVuaGVhZC92dWUnO1xuaW1wb3J0IENvbmZpZ1NlcnZpY2UgZnJvbSBcIiNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50c1wiO1xuZXhwb3J0IGludGVyZmFjZSBQYWdlUmVxdWVzdENvbnRleHRFbnRpdHlPcHRpb25zIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICByZXF1ZXN0OiBSZXF1ZXN0O1xuICAgIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICBzdGF0ZT86IE1hcDxzdHJpbmcsIGFueT47XG4gICAgbm9kZUNvbnRhaW5lcj86IENvbnRhaW5lclNlcnZpY2U7XG4gICAgbm9kZUNvbmZpZz86IENvbmZpZ1NlcnZpY2U7XG4gICAgbm9kZVN0YXRlPzogTWFwPHN0cmluZywgYW55PjtcbiAgICBicm93c2VyQ29udGFpbmVyPzogQ29udGFpbmVyU2VydmljZTtcbiAgICBicm93c2VyQ29uZmlnPzogQ29uZmlnU2VydmljZTtcbiAgICBicm93c2VyU3RhdGU/OiBNYXA8c3RyaW5nLCBhbnk+O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5IHtcbiAgICB1cmw6IHN0cmluZztcbiAgICByZXF1ZXN0OiBSZXF1ZXN0O1xuICAgIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICBjb29raWVzOiBDb29raWVNYXBFbnRpdHk7XG4gICAgaGVhZDogUmVzb2x2YWJsZUhlYWRbXTtcbiAgICBub2RlQ29udGFpbmVyOiBDb250YWluZXJTZXJ2aWNlO1xuICAgIG5vZGVDb25maWc6IENvbmZpZ1NlcnZpY2U7XG4gICAgbm9kZVN0YXRlOiBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIGJyb3dzZXJDb250YWluZXI6IENvbnRhaW5lclNlcnZpY2U7XG4gICAgYnJvd3NlckNvbmZpZzogQ29uZmlnU2VydmljZTtcbiAgICBicm93c2VyU3RhdGU6IE1hcDxzdHJpbmcsIGFueT47XG4gICAgY29uc3RydWN0b3IoZGF0YTogUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5T3B0aW9ucyk7XG4gICAgc2V0QnJvd3NlclN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXROb2RlU3RhdGUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldFN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXRCcm93c2VyQ29udGFpbmVyVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldE5vZGVDb250YWluZXJWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0Q29udGFpbmVyVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldEJyb3dzZXJDb25maWdWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0Tm9kZUNvbmZpZ1ZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXRDb25maWdWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSc7XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb248VCA9IGFueT4ge1xuICAgIGl0ZW1zOiBUW107XG4gICAgcGFnZTogbnVtYmVyO1xuICAgIHBlcl9wYWdlOiBudW1iZXI7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICB0b3RhbF9wYWdlczogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBGaW5kTWFueU9wdGlvbnMge1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIG9mZnNldD86IG51bWJlcjtcbiAgICBvcmRlckJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgb3JkZXJEaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJyB8ICgnYXNjJyB8ICdkZXNjJylbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGVPcHRpb25zIHtcbiAgICBwYWdlPzogbnVtYmVyO1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIG9yZGVyQnk/OiBGaW5kTWFueU9wdGlvbnNbJ29yZGVyQnknXTtcbiAgICBvcmRlckRpcmVjdGlvbj86IEZpbmRNYW55T3B0aW9uc1snb3JkZXJEaXJlY3Rpb24nXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlTWFueU9wdGlvbnMge1xuICAgIGxpbWl0PzogbnVtYmVyO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWJhc2VSZXBvc2l0b3J5PFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUUHJpbWFyeUtleSA9IGFueSwgVE9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgcHJvdGVjdGVkIGRiOiBLeXNlbHk8YW55PjtcbiAgICBwcm90ZWN0ZWQgdGFibGU6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcHJpbWFyeUtleTogc3RyaW5nO1xuICAgIGF1dG9DcmVhdGVkQXQ6IGJvb2xlYW47XG4gICAgYXV0b1VwZGF0ZWRBdDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihkYjogS3lzZWx5PGFueT4sIHRhYmxlOiBzdHJpbmcsIHByaW1hcnlLZXk6IHN0cmluZyk7XG4gICAgcXVlcnkob3B0aW9ucz86IHtcbiAgICAgICAgcWI/OiBhbnk7XG4gICAgfSAmIFRPcHRpb25zKTogYW55O1xuICAgIGNvdW50KG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGZpbmRNYW55KG9wdGlvbnM/OiBGaW5kTWFueU9wdGlvbnMgJiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eVtdPjtcbiAgICBmaW5kT25lKG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eSB8IG51bGw+O1xuICAgIGZpbmRCeUlkKGlkOiBUUHJpbWFyeUtleSwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5IHwgbnVsbD47XG4gICAgZmluZEJ5SWRPckZhaWwoaWQ6IFRQcmltYXJ5S2V5LCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPE5vbk51bGxhYmxlPEF3YWl0ZWQ8VEVudGl0eT4+PjtcbiAgICBwYWdpbmF0ZShvcHRpb25zPzogUGFnaW5hdGVPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPFBhZ2luYXRpb24+O1xuICAgIHByb3RlY3RlZCBiZWZvcmVDcmVhdGUoZGF0YTogUGFydGlhbDxURW50aXR5Pik6IFByb21pc2U8UGFydGlhbDxURW50aXR5Pj47XG4gICAgcHJvdGVjdGVkIGFmdGVyQ3JlYXRlKGRhdGE6IFRFbnRpdHkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNyZWF0ZShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+KTogUHJvbWlzZTxURW50aXR5PjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlQ3JlYXRlTWFueShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+W10pOiBQcm9taXNlPFBhcnRpYWw8VEVudGl0eT5bXT47XG4gICAgcHJvdGVjdGVkIGFmdGVyQ3JlYXRlTWFueShkYXRhOiBURW50aXR5W10pOiBQcm9taXNlPFRFbnRpdHlbXT47XG4gICAgY3JlYXRlTWFueShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+W10pOiBQcm9taXNlPGFueVtdPjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlVXBkYXRlKGRhdGE6IFBhcnRpYWw8VEVudGl0eT4sIGlkOiBUUHJpbWFyeUtleSk6IFByb21pc2U8UGFydGlhbDxURW50aXR5Pj47XG4gICAgcHJvdGVjdGVkIGFmdGVyVXBkYXRlKGRhdGE6IFRFbnRpdHkpOiBQcm9taXNlPFRFbnRpdHk+O1xuICAgIHVwZGF0ZUJ5SWQoaWQ6IFRQcmltYXJ5S2V5LCBkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+KTogUHJvbWlzZTx2b2lkPjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlRGVsZXRlKGlkOiBUUHJpbWFyeUtleSk6IFByb21pc2U8dm9pZD47XG4gICAgcHJvdGVjdGVkIGFmdGVyRGVsZXRlKGlkOiBUUHJpbWFyeUtleSk6IFByb21pc2U8dm9pZD47XG4gICAgZGVsZXRlQnlJZChpZDogVFByaW1hcnlLZXkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHByb3RlY3RlZCBiZWZvcmVEZWxldGVNYW55KG9wdGlvbnM/OiBEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogKERlbGV0ZU1hbnlPcHRpb25zICYgVE9wdGlvbnMpIHwgdW5kZWZpbmVkO1xuICAgIHByb3RlY3RlZCBhZnRlckRlbGV0ZU1hbnkob3B0aW9ucz86IERlbGV0ZU1hbnlPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbiAgICBkZWxldGVNYW55KG9wdGlvbnM/OiBEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgVXNlckVudGl0eSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuaW1wb3J0IERhdGFiYXNlUmVwb3NpdG9yeSBmcm9tICcuL0RhdGFiYXNlUmVwb3NpdG9yeSc7XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICBlbWFpbD86IHN0cmluZztcbiAgICB1c2VybmFtZT86IHN0cmluZztcbiAgICBzaG93RGVsZXRlZD86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZXBvc2l0b3J5RXZlbnRzIHtcbiAgICAndXNlcjpjcmVhdGVkJzoge1xuICAgICAgICB1c2VyOiBVc2VyRW50aXR5O1xuICAgIH07XG4gICAgJ3VzZXI6dXBkYXRlZCc6IHtcbiAgICAgICAgdXNlcjogVXNlckVudGl0eTtcbiAgICB9O1xuICAgICd1c2VyOmRlbGV0ZWQnOiB7XG4gICAgICAgIHVzZXI6IFVzZXJFbnRpdHk7XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXJSZXBvc2l0b3J5IGV4dGVuZHMgRGF0YWJhc2VSZXBvc2l0b3J5PFVzZXJFbnRpdHksIG51bWJlciwgVXNlclJlcG9zaXRvcnlRdWVyeU9wdGlvbnM+IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgYXV0b0NyZWF0ZWRBdDogYm9vbGVhbjtcbiAgICBhdXRvVXBkYXRlZEF0OiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIGhhc2hVc2VyUGFzc3dvcmRJZkRlZmluZWQoZGF0YTogUGFydGlhbDxVc2VyRW50aXR5Pik6IFByb21pc2U8dm9pZD47XG4gICAgcHJvdGVjdGVkIGJlZm9yZUNyZWF0ZShkYXRhOiBQYXJ0aWFsPFVzZXJFbnRpdHk+KTogUHJvbWlzZTxQYXJ0aWFsPFVzZXJFbnRpdHk+PjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlQ3JlYXRlTWFueShkYXRhOiBQYXJ0aWFsPFVzZXJFbnRpdHk+W10pOiBQcm9taXNlPFBhcnRpYWw8VXNlckVudGl0eT5bXT47XG4gICAgcHJvdGVjdGVkIGJlZm9yZVVwZGF0ZShkYXRhOiBQYXJ0aWFsPFVzZXJFbnRpdHk+KTogUHJvbWlzZTxQYXJ0aWFsPFVzZXJFbnRpdHk+PjtcbiAgICBwcm90ZWN0ZWQgYWZ0ZXJDcmVhdGUoZGF0YTogVXNlckVudGl0eSk6IFByb21pc2U8dm9pZD47XG4gICAgcXVlcnkob3B0aW9ucz86IFVzZXJSZXBvc2l0b3J5UXVlcnlPcHRpb25zKTogYW55O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tIFwia3lzZWx5XCI7XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvbkVudGl5RGF0YSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGV4ZWN1dGVkQXQ6IERhdGUgfCBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWlncmF0aW9uRW50aXR5IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgZXhlY3V0ZWRBdDogRGF0ZSB8IG51bGw7XG4gICAgY29uc3RydWN0b3IoZGF0YTogTWlncmF0aW9uRW50aXlEYXRhKTtcbiAgICB1cChkYjogS3lzZWx5PGFueT4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRvd24oZGI6IEt5c2VseTxhbnk+KTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBFbW1pdHRlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2UudHMnO1xuaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCBNaWdyYXRpb25FbnRpdHkgZnJvbSAnI3NlcnZlci9lbnRpdGllcy9NaWdyYXRpb25FbnRpdHkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25Tb3VyY2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvbiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGV4ZWN1dGVkQXQ6IERhdGUgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaXN0RmlsdGVycyB7XG4gICAgc291cmNlPzogc3RyaW5nO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cbmludGVyZmFjZSBNaWdyYXRpb25SZXN1bHQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICByZXN1bHQ6ICdzdWNjZXNzJyB8ICdmYWlsZWQnO1xuICAgIGVycm9yPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRvclNlcnZpY2VPcHRpb25zIHtcbiAgICBzb3VyY2VzOiBNaWdyYXRpb25Tb3VyY2VbXTtcbiAgICBkYjogS3lzZWx5PGFueT47XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGVtbWl0dGVyPzogRW1taXR0ZXJTZXJ2aWNlO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdG9yU2VydmljZUV2ZW50cyB7XG4gICAgJ21pZ3JhdG9yOmJlZm9yZS1taWdyYXRlJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xuICAgICdtaWdyYXRvcjphZnRlci1taWdyYXRlJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xuICAgICdtaWdyYXRvcjpiZWZvcmUtcm9sbGJhY2snOiB7XG4gICAgICAgIG1pZ3JhdGlvbnM6IE1pZ3JhdGlvbkVudGl0eVtdO1xuICAgIH07XG4gICAgJ21pZ3JhdG9yOmFmdGVyLXJvbGxiYWNrJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWlncmF0b3JTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGI6IEt5c2VseTxhbnk+O1xuICAgIHNvdXJjZXM6IE1pZ3JhdGlvblNvdXJjZVtdO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE1pZ3JhdG9yU2VydmljZU9wdGlvbnMpO1xuICAgIGFkZFNvdXJjZShzb3VyY2U6IE1pZ3JhdGlvblNvdXJjZSk6IHZvaWQ7XG4gICAgcHJpdmF0ZSBlbnN1cmVNaWdyYXRpb25zVGFibGU7XG4gICAgbGlzdFNvdXJjZShzb3VyY2U6IE1pZ3JhdGlvblNvdXJjZSk6IFByb21pc2U8TWlncmF0aW9uRW50aXR5W10+O1xuICAgIGxpc3QoZmlsdGVycz86IExpc3RGaWx0ZXJzKTogUHJvbWlzZTxNaWdyYXRpb25FbnRpdHlbXT47XG4gICAgcHJpdmF0ZSBtaWdyYXRlVXA7XG4gICAgcHJpdmF0ZSBtaWdyYXRlRG93bjtcbiAgICBwcml2YXRlIG1pZ3JhdGVGaWxlO1xuICAgIHByaXZhdGUgcm9sbGJhY2tGaWxlO1xuICAgIG1pZ3JhdGUoZmlsdGVycz86IExpc3RGaWx0ZXJzICYge1xuICAgICAgICBzdGVwcz86IG51bWJlcjtcbiAgICB9KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG4gICAgcm9sbGJhY2soZmlsdGVycz86IExpc3RGaWx0ZXJzICYge1xuICAgICAgICBzdGVwcz86IG51bWJlcjtcbiAgICB9KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG4gICAgdXAoc3RlcHM/OiBudW1iZXIsIGZpbHRlcnM/OiBMaXN0RmlsdGVycyk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIGRvd24oc3RlcHM/OiBudW1iZXIsIGZpbHRlcnM/OiBMaXN0RmlsdGVycyk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIGxhdGVzdChmaWx0ZXJzPzogTGlzdEZpbHRlcnMpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdFtdPjtcbiAgICBsYXRlc3RPckZhaWwoZmlsdGVycz86IExpc3RGaWx0ZXJzKTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG4gICAgZnJlc2goZmlsdGVycz86IExpc3RGaWx0ZXJzICYge1xuICAgICAgICBzdGVwcz86IG51bWJlcjtcbiAgICB9KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmFzZUFjbCBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0FjbEVudGl0eS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBY2wgZXh0ZW5kcyBCYXNlQWNsIHtcbiAgICBhdXRob3JpemUoYWN0aW9uOiBzdHJpbmcsIHN1YmplY3Q6IGFueSwgb2JqZWN0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQ7XG59XG4iLCJpbXBvcnQgdHlwZSBBY2wgZnJvbSAnI3NlcnZlci9lbnRpdGllcy9BY2xFbnRpdHkudHMnO1xuaW1wb3J0IHR5cGUgeyBDb29raWVNYXBFbnRpdHkgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdCB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZSB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBIdHRwQ29udGV4dCB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG4gICAgYm9keTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb29raWU6IENvb2tpZU1hcEVudGl0eTtcbiAgICBhY2w6IEFjbDtcbiAgICByZXF1ZXN0OiBSZXF1ZXN0O1xuICAgIHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSBcIi4vSHR0cENvbnRleHRDb250cmFjdFwiO1xuZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdCB7XG4gICAgcmVkaXJlY3Q6IHN0cmluZztcbn1cbmV4cG9ydCB0eXBlIEhhbmRsZVJlc3VsdCA9IFJlY29yZDxzdHJpbmcsIGFueT4gfCBSZWRpcmVjdCB8IHZvaWQ7XG5leHBvcnQgaW50ZXJmYWNlIE1pZGRsZXdhcmUge1xuICAgIGhhbmRsZShjdHg6IGFueSk6IEhhbmRsZVJlc3VsdCB8IFByb21pc2U8SGFuZGxlUmVzdWx0Pjtcbn1cbnR5cGUgRXh0cmFjdE1pZGRsZXdhcmVDb250ZXh0PE0gZXh0ZW5kcyBNaWRkbGV3YXJlPiA9IEF3YWl0ZWQ8UmV0dXJuVHlwZTxNWydoYW5kbGUnXT4+IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA/IEF3YWl0ZWQ8UmV0dXJuVHlwZTxNWydoYW5kbGUnXT4+IDoge307XG50eXBlIFByb2Nlc3NNaWRkbGV3YXJlQXJyYXk8VCBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmVbXT4gPSBUIGV4dGVuZHMgcmVhZG9ubHkgW2luZmVyIEZpcnN0IGV4dGVuZHMgTWlkZGxld2FyZSwgLi4uaW5mZXIgUmVzdCBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmVbXV0gPyBFeHRyYWN0TWlkZGxld2FyZUNvbnRleHQ8Rmlyc3Q+ICYgUHJvY2Vzc01pZGRsZXdhcmVBcnJheTxSZXN0PiA6IHt9O1xuZXhwb3J0IHR5cGUgTWlkZGxld2FyZUhhbmRsZVJlc3VsdDxUIGV4dGVuZHMgcmVhZG9ubHkgTWlkZGxld2FyZVtdID0gcmVhZG9ubHkgTWlkZGxld2FyZVtdPiA9IFByb2Nlc3NNaWRkbGV3YXJlQXJyYXk8VD47XG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXI8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICAoY3R4OiBIdHRwQ29udGV4dCAmIFQpOiBQcm9taXNlPGFueT4gfCBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IEhhbmRsZXIsIE1pZGRsZXdhcmUgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG50eXBlIFJvdXRlTWV0aG9kID0gJ2dldCcgfCAnR0VUJyB8ICdwb3N0JyB8ICdQT1NUJyB8ICdwdXQnIHwgJ1BVVCcgfCAncGF0Y2gnIHwgJ1BBVENIJyB8ICdkZWxldGUnIHwgJ0RFTEVURSc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3V0ZSB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIG1ldGhvZDogUm91dGVNZXRob2Q7XG4gICAgaGFuZGxlcjogSGFuZGxlcjxhbnk+IHwgbnVsbDtcbiAgICBtaWRkbGV3YXJlczogTWlkZGxld2FyZVtdO1xuICAgIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogUGFydGlhbDxSb3V0ZT4pO1xuICAgIHN0YXRpYyBwYXJhbXMocm91dGVQYXRoOiBzdHJpbmcsIHJlcXVlc3RQYXRoOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHN0YXRpYyBxdWVyeShyZXF1ZXN0UGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICB0b0pTT04oKToge1xuICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgIG1ldGhvZDogUm91dGVNZXRob2Q7XG4gICAgICAgIG1pZGRsZXdhcmVzOiBzdHJpbmdbXTtcbiAgICAgICAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICAgIH07XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgUm91dGUgZnJvbSAnI3NlcnZlci9lbnRpdGllcy9Sb3V0ZUVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IEhhbmRsZXIsIE1pZGRsZXdhcmUsIE1pZGRsZXdhcmVIYW5kbGVSZXN1bHQgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG50eXBlIFJvdXRlQ29udGV4dCA9ICdnbG9iYWwnIHwgJ2dyb3VwJyB8ICdyb3V0ZSc7XG5pbnRlcmZhY2UgTWlkZGxld2FyZVJlZ2lzdGVyIHtcbiAgICBtaWRkbGV3YXJlOiBNaWRkbGV3YXJlO1xuICAgIGNvbnRleHQ6IFJvdXRlQ29udGV4dDtcbn1cbmludGVyZmFjZSBMb2FkT3B0aW9ucyB7XG4gICAgZGVidWc/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJFdmVudHMge1xuICAgICdyb3V0ZXI6cmVnaXN0ZXJlZCc6IHtcbiAgICAgICAgcm91dGVyOiBSb3V0ZXJTZXJ2aWNlO1xuICAgIH07XG4gICAgJ3JvdXRlcjpsb2FkZWQnOiB7XG4gICAgICAgIHJvdXRlcjogUm91dGVyU2VydmljZTtcbiAgICB9O1xufVxuZGVjbGFyZSBjb25zdCBSb3V0ZXJTZXJ2aWNlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBsaXN0ZW5lcnM6IGltcG9ydChcIiNzaGFyZWQvaW5kZXgudHNcIikuTGlzdGVuZXJbXTtcbiAgICAgICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIGVtaXRBc3luYyhldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL2luZGV4LnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVyU2VydmljZTxDID0ge30+IGV4dGVuZHMgUm91dGVyU2VydmljZV9iYXNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgcm91dGVzOiBSb3V0ZVtdO1xuICAgIG1pZGRsZXdhcmVzOiBNaWRkbGV3YXJlUmVnaXN0ZXJbXTtcbiAgICBwcmVmaXhlczogc3RyaW5nW107XG4gICAgZ3JvdXBzOiBSb3V0ZXJTZXJ2aWNlPGFueT5bXTtcbiAgICBncm91cFByZWZpeGVzOiBzdHJpbmdbXTtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8Um91dGVyU2VydmljZTxDPj4pO1xuICAgIHVzZTxUIGV4dGVuZHMgTWlkZGxld2FyZT4obWlkZGxld2FyZTogVCwgY29udGV4dD86IFJvdXRlQ29udGV4dCk6IFJvdXRlclNlcnZpY2U8QyAmIE1pZGRsZXdhcmVIYW5kbGVSZXN1bHQ8W3R5cGVvZiBtaWRkbGV3YXJlXT4+O1xuICAgIHByZWZpeChwcmVmaXg6IHN0cmluZyk6IHRoaXM7XG4gICAgbWFrZVBhdGgoYXJnczogc3RyaW5nKTogc3RyaW5nO1xuICAgIGFkZChwYXlsb2FkOiBQaWNrPFJvdXRlLCAncGF0aCcgfCAnbWV0aG9kJyB8ICdoYW5kbGVyJz4pOiB2b2lkO1xuICAgIGdldChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXI8Qz4pOiB2b2lkO1xuICAgIHBvc3QocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyPEM+KTogdm9pZDtcbiAgICBwdXQocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyPEM+KTogdm9pZDtcbiAgICBwYXRjaChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXI8Qz4pOiB2b2lkO1xuICAgIG1hbnkobWV0aG9kczogUm91dGVbJ21ldGhvZCddW10sIHBhdGg6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcjxDPik6IHZvaWQ7XG4gICAgZGVsZXRlKHBhdGg6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcjxDPik6IHZvaWQ7XG4gICAgZ3JvdXAoKTogUm91dGVyU2VydmljZTxDPjtcbiAgICByZXNvbHZlKG1ldGhvZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBSb3V0ZSB8IG51bGw7XG4gICAgZXhlY3V0ZShyb3V0ZTogUm91dGUsIGluaXRpYWxDdHg6IGFueSk6IFByb21pc2U8YW55PjtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGxpc3QoKTogUm91dGVbXTtcbiAgICBsb2FkKG9wdGlvbnM/OiBMb2FkT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZFN5bmMob3B0aW9ucz86IExvYWRPcHRpb25zKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IEpvYiB9IGZyb20gJ25vZGUtc2NoZWR1bGUnO1xuZXhwb3J0IGludGVyZmFjZSBSb3V0aW5lSGFuZGxlciB7XG4gICAgKCk6IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0aW5lRW50aXR5T3B0aW9ucyB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjcm9uOiBzdHJpbmc7XG4gICAgaGFuZGxlcj86IFJvdXRpbmVIYW5kbGVyO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGluZUVudGl0eSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjcm9uOiBzdHJpbmc7XG4gICAgam9iPzogSm9iO1xuICAgIHN0YXRpYyBjcmVhdGUoKTogUm91dGluZUVudGl0eTtcbiAgICBoYW5kbGU6IFJvdXRpbmVIYW5kbGVyO1xuICAgIHNldElkKGlkOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldENyb24oY3Jvbjogc3RyaW5nKTogdGhpcztcbiAgICBzZXRIYW5kbGVyKGhhbmRsZXI6IFJvdXRpbmVIYW5kbGVyKTogdGhpcztcbn1cbiIsImltcG9ydCBSb3V0aW5lRW50aXR5IGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvUm91dGluZUVudGl0eS50cyc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIEFkZE9wdGlvbnMge1xuICAgIGlkPzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJTZXJ2aWNlT3B0aW9ucyB7XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlckV2ZW50cyB7XG4gICAgJ3NjaGVkdWxlcjpyZWdpc3RlcmVkJzoge1xuICAgICAgICBzY2hlZHVsZXI6IFNjaGVkdWxlclNlcnZpY2U7XG4gICAgfTtcbiAgICAnc2NoZWR1bGVyOmxvYWRlZCc6IHtcbiAgICAgICAgc2NoZWR1bGVyOiBTY2hlZHVsZXJTZXJ2aWNlO1xuICAgIH07XG4gICAgJ3NjaGVkdWxlcjpib290ZWQnOiB7XG4gICAgICAgIHNjaGVkdWxlcjogU2NoZWR1bGVyU2VydmljZTtcbiAgICB9O1xuICAgICdzY2hlZHVsZXI6c2h1dGRvd25lZCc6IHtcbiAgICAgICAgc2NoZWR1bGVyOiBTY2hlZHVsZXJTZXJ2aWNlO1xuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTY2hlZHVsZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgcm91dGluZXM6IFJvdXRpbmVFbnRpdHlbXTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgZGlyczogc3RyaW5nW107XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IFNjaGVkdWxlclNlcnZpY2VPcHRpb25zKTtcbiAgICBzdGF0aWMgY3JlYXRlKG9wdGlvbnM/OiBTY2hlZHVsZXJTZXJ2aWNlT3B0aW9ucyk6IFNjaGVkdWxlclNlcnZpY2U7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHZvaWQ7XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB2b2lkO1xuICAgIGFkZERpcihkaXI6IHN0cmluZyk6IHZvaWQ7XG4gICAgYWRkKHJvdXRpbmU6IE9taXQ8Um91dGluZUVudGl0eSwgJ2pvYic+KTogdm9pZDtcbiAgICByZW1vdmUoaWQ6IFJvdXRpbmVFbnRpdHlbJ2lkJ10gfCBSb3V0aW5lRW50aXR5WydpZCddW10pOiB2b2lkO1xuICAgIGxvYWRGaWxlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWREaXJlY3RvcnkoZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBoYXMoaWQ6IFJvdXRpbmVFbnRpdHlbJ2lkJ10pOiBib29sZWFuO1xuICAgIHN0YXJ0Um91dGluZShpZDogUm91dGluZUVudGl0eVsnaWQnXSk6IFByb21pc2U8dm9pZD47XG4gICAgYWRkQW5kU3RhcnQocm91dGluZTogT21pdDxSb3V0aW5lRW50aXR5LCAnam9iJz4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIHN0b3BSb3V0aW5lKGlkOiBSb3V0aW5lRW50aXR5WydpZCddKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzdG9wQW5kUmVtb3ZlKGlkOiBSb3V0aW5lRW50aXR5WydpZCddKTogUHJvbWlzZTx2b2lkPjtcbiAgICBib290KCk6IFByb21pc2U8dm9pZD47XG4gICAgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsaXN0KCk6IFJvdXRpbmVFbnRpdHlbXTtcbn1cbiIsImltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSBcImt5c2VseVwiO1xuZXhwb3J0IGludGVyZmFjZSBTZWVkZXJFbnRpeURhdGEge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlZWRlckVudGl0eSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFNlZWRlckVudGl5RGF0YSk7XG4gICAgcnVuKGRiOiBLeXNlbHk8YW55Pik6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgRW1taXR0ZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvRW1taXR0ZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgU2VlZGVyRW50aXR5IGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvU2VlZGVyRW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgU2VlZGVyU291cmNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaXN0RmlsdGVycyB7XG4gICAgc291cmNlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgbmFtZT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWVkZXJSZXN1bHQge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICByZXN1bHQ6ICdzdWNjZXNzJyB8ICdmYWlsZWQnO1xuICAgIGVycm9yPzogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWVkZXJFdmVudHMge1xuICAgICdzZWVkZXI6YmVmb3JlLXJ1bic6IHtcbiAgICAgICAgc2VlZGVyczogc3RyaW5nW107XG4gICAgfTtcbiAgICAnc2VlZGVyOmFmdGVyLXJ1bic6IHtcbiAgICAgICAgc2VlZGVyczogc3RyaW5nW107XG4gICAgfTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VlZGVyU2VydmljZU9wdGlvbnMge1xuICAgIGRiOiBLeXNlbHk8YW55PjtcbiAgICBzb3VyY2VzPzogU2VlZGVyU291cmNlW107XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGVtbWl0dGVyPzogRW1taXR0ZXJTZXJ2aWNlO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWVlZGVyU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRiOiBLeXNlbHk8YW55PjtcbiAgICBzb3VyY2VzOiBTZWVkZXJTb3VyY2VbXTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTZWVkZXJTZXJ2aWNlT3B0aW9ucyk7XG4gICAgYWRkU291cmNlKHNvdXJjZTogU2VlZGVyU291cmNlKTogdm9pZDtcbiAgICBsaXN0U291cmNlKHNvdXJjZTogU2VlZGVyU291cmNlKTogUHJvbWlzZTxTZWVkZXJFbnRpdHlbXT47XG4gICAgbGlzdChmaWx0ZXJzPzogTGlzdEZpbHRlcnMpOiBQcm9taXNlPFNlZWRlckVudGl0eVtdPjtcbiAgICBydW5TZWVkZXIoc2VlZGVyOiBTZWVkZXJFbnRpdHkpOiBQcm9taXNlPFNlZWRlclJlc3VsdD47XG4gICAgcnVuKGZpbHRlcnM/OiBMaXN0RmlsdGVycyAmIHtcbiAgICAgICAgc3RlcHM/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8U2VlZGVyUmVzdWx0W10+O1xufVxuIiwiaW1wb3J0IHR5cGUgUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5IGZyb20gXCIjc2VydmVyL2VudGl0aWVzL1BhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eS50c1wiO1xuaW1wb3J0IHR5cGUgeyBVc2VyUmVwb3NpdG9yeUV2ZW50cyB9IGZyb20gXCIjc2VydmVyL3JlcG9zaXRvcmllcy9Vc2VyUmVwb3NpdG9yeS50c1wiO1xuaW1wb3J0IHR5cGUgeyBDbGlFdmVudHMgfSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9DbGlTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IE1pZ3JhdG9yU2VydmljZUV2ZW50cyB9IGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL01pZ3JhdG9yU2VydmljZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXJFdmVudHMgfSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNjaGVkdWxlckV2ZW50cyB9IGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL1NjaGVkdWxlclNlcnZpY2UudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VlZGVyRXZlbnRzIH0gZnJvbSBcIiNzZXJ2ZXIvc2VydmljZXMvU2VlZGVyU2VydmljZS50c1wiO1xuZXhwb3J0IGludGVyZmFjZSBFdmVudENvbnRyYWN0IGV4dGVuZHMgU2VlZGVyRXZlbnRzLCBSb3V0ZXJFdmVudHMsIENsaUV2ZW50cywgU2NoZWR1bGVyRXZlbnRzLCBNaWdyYXRvclNlcnZpY2VFdmVudHMsIFVzZXJSZXBvc2l0b3J5RXZlbnRzIHtcbiAgICAncGFnZTpyZXF1ZXN0OnN0YXJ0JzogUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5O1xuICAgICdwYWdlOnJlcXVlc3Q6YmVmb3JlLXJlbmRlcic6IFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eTtcbiAgICAncGFnZTpyZXF1ZXN0OmFmdGVyLXJlbmRlcic6IFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eTtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmFzZUVtbWl0dGVyU2VydmljZSBmcm9tIFwiLi4vLi4vc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZVwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudENvbnRyYWN0IH0gZnJvbSAnLi4vY29udHJhY3RzL0V2ZW50Q29udHJhY3QnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW1taXR0ZXJTZXJ2aWNlIGV4dGVuZHMgQmFzZUVtbWl0dGVyU2VydmljZTxFdmVudENvbnRyYWN0PiB7XG59XG4iLCJpbXBvcnQgbXMgZnJvbSAnbXMnO1xuaW1wb3J0IEVudlNlcnZpY2UgZnJvbSAnLi9FbnZTZXJ2aWNlJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbnRlcmZhY2UgVVJMT3B0aW9ucyB7XG4gICAgZGF0YT86IGFueTtcbiAgICBleHBpcmVzPzogbXMuU3RyaW5nVmFsdWU7XG4gICAgZXhwaXJlQXQ/OiBudW1iZXIgfCBEYXRlO1xufVxuaW50ZXJmYWNlIEVuY3J5cHRTZXJ2aWNlT3B0aW9ucyB7XG4gICAga2V5Pzogc3RyaW5nO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIGVudj86IEVudlNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbmNyeXB0U2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGVudjogRW52U2VydmljZTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGdvcml0aG07XG4gICAgcHJpdmF0ZSBrZXk7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogRW5jcnlwdFNlcnZpY2VPcHRpb25zKTtcbiAgICBzdGF0aWMgY3JlYXRlKG9wdGlvbnM6IEVuY3J5cHRTZXJ2aWNlT3B0aW9ucyk6IEVuY3J5cHRTZXJ2aWNlO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdm9pZDtcbiAgICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKTogdm9pZDtcbiAgICBzZXRFbnYoZW52OiBFbnZTZXJ2aWNlKTogdm9pZDtcbiAgICBzZXRLZXkoa2V5OiBzdHJpbmcpOiB2b2lkO1xuICAgIGVuY3J5cHQodGV4dDogc3RyaW5nKTogc3RyaW5nO1xuICAgIGRlY3J5cHQob3B0aW9uczogc3RyaW5nKTogc3RyaW5nO1xuICAgIGVuY3J5cHRPYmplY3Qob2JqOiBhbnkpOiBzdHJpbmc7XG4gICAgZGVjcnlwdE9iamVjdDxUPihlbmNyeXB0ZWRTdHJpbmc6IHN0cmluZyk6IFQ7XG4gICAgdXJsKHBhdGg6IHN0cmluZywgb3B0aW9ucz86IFVSTE9wdGlvbnMpOiBzdHJpbmc7XG4gICAgdmVyaWZ5VXJsKGVuY3J5cHRlZEtleTogc3RyaW5nKTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuaW1wb3J0IEVudlNlcnZpY2UgZnJvbSAnLi9FbnZTZXJ2aWNlJztcbmV4cG9ydCBpbnRlcmZhY2UgRXhjZXB0aW9uU2VydmljZU9wdGlvbnMge1xuICAgIGlnbm9yZUNvZGVFcnJvcnM/OiBudW1iZXJbXTtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIGVudj86IEVudlNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeGNlcHRpb25TZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgaWdub3JlQ29kZUVycm9yczogbnVtYmVyW107XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGVudjogRW52U2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogRXhjZXB0aW9uU2VydmljZU9wdGlvbnMpO1xuICAgIGhhbmRsZShlcnJvcjogRXJyb3IsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFJlc3BvbnNlPGFueSwgUmVjb3JkPHN0cmluZywgYW55Pj47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBIYXNoZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgaGFzaCh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIGNvbXBhcmUoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBTZXJ2ZXIgfSBmcm9tICdodHRwJztcbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IGNvcnMgZnJvbSAnY29ycyc7XG5pbXBvcnQgUm91dGVyIGZyb20gJy4vUm91dGVyU2VydmljZS50cyc7XG5pbXBvcnQgRXhjZXB0aW9uU2VydmljZSBmcm9tICcuL0V4Y2VwdGlvblNlcnZpY2UudHMnO1xuaW1wb3J0IFJvdXRlIGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvUm91dGVFbnRpdHkudHMnO1xuaW1wb3J0IHsgRW1taXR0ZXJTZXJ2aWNlLCBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG5pbXBvcnQgRW52U2VydmljZSBmcm9tICcuL0VudlNlcnZpY2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBIdHRwU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICByb3V0ZXI/OiBSb3V0ZXI7XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBleGNlcHRpb24/OiBFeGNlcHRpb25TZXJ2aWNlO1xuICAgIGVtbWl0dGVyPzogRW1taXR0ZXJTZXJ2aWNlO1xuICAgIGVudj86IEVudlNlcnZpY2U7XG4gICAgb3JpZ2lucz86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cFNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBhcHA6IGV4cHJlc3MuQXBwbGljYXRpb247XG4gICAgc2VydmVyOiBTZXJ2ZXIgfCBudWxsO1xuICAgIHJvdXRlcjogUm91dGVyO1xuICAgIGV4Y2VwdGlvbjogRXhjZXB0aW9uU2VydmljZTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZTtcbiAgICBlbnY6IEVudlNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgb25VbmhhbmRsZXJSb3V0ZWQ6ICgocmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSkgPT4gdm9pZCkgfCBudWxsO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEh0dHBTZXJ2aWNlT3B0aW9ucyk7XG4gICAgZ2V0RXhwcmVzc0FwcCgpOiBleHByZXNzLkFwcGxpY2F0aW9uO1xuICAgIGNvcnMob3B0aW9uczogY29ycy5Db3JzT3B0aW9ucyk6IHZvaWQ7XG4gICAgdXNlOiBleHByZXNzLkFwcGxpY2F0aW9uWyd1c2UnXTtcbiAgICByb3V0ZXMoKTogdm9pZDtcbiAgICBwYXJzZXIocmVxOiBleHByZXNzLlJlcXVlc3QsIHJlczogZXhwcmVzcy5SZXNwb25zZSwgbmV4dDogZXhwcmVzcy5OZXh0RnVuY3Rpb24pOiB2b2lkO1xuICAgIGV4ZWN1dGUodXJsOiBVUkwsIHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCwgcmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UsIHJvdXRlOiBSb3V0ZSk6IFByb21pc2U8dm9pZD47XG4gICAgc3RhcnQoKTogdm9pZDtcbiAgICBzdG9wKCk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgeyBVc2VyRW50aXR5IH0gZnJvbSBcIiNzaGFyZWQvaW5kZXgudHNcIjtcbmltcG9ydCB0eXBlIEh0dHBTZXJ2aWNlIGZyb20gXCIuL0h0dHBTZXJ2aWNlXCI7XG5pbXBvcnQgc3VwZXJ0ZXN0LCB7IHR5cGUgVGVzdCB9IGZyb20gJ3N1cGVydGVzdCc7XG5leHBvcnQgaW50ZXJmYWNlIEh0dHBUZXN0ZXJTZXJ2aWNlT3B0aW9ucyB7XG4gICAgaHR0cDogSHR0cFNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIdHRwVGVzdGVyU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGh0dHA6IEh0dHBTZXJ2aWNlO1xuICAgIHJlcXVlc3Q6IHN1cGVydGVzdC5TdXBlclRlc3Q8c3VwZXJ0ZXN0LlRlc3Q+O1xuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgY29va2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBIdHRwVGVzdGVyU2VydmljZU9wdGlvbnMpO1xuICAgIGNyZWF0ZShyZXF1ZXN0OiBUZXN0KTogVGVzdDtcbiAgICBnZXQodXJsOiBzdHJpbmcpOiBUZXN0O1xuICAgIHBvc3QodXJsOiBzdHJpbmcsIGJvZHk/OiBhbnkpOiBUZXN0O1xuICAgIGxvZ2luQnlVc2VyKHVzZXI6IFVzZXJFbnRpdHkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvZ2luQnlVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBCYXNlTGlmZWN5Y2xlU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xpZmVjeWNsZVNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlU2VydmljZSBleHRlbmRzIEJhc2VMaWZlY3ljbGVTZXJ2aWNlIHtcbiAgICBhZGREaXJlY3RvcnkoZGlybmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgQ29sdW1uVHlwZSwgR2VuZXJhdGVkIH0gZnJvbSAna3lzZWx5JztcbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBkZWxldGVkX2F0PzogQ29sdW1uVHlwZTxEYXRlIHwgc3RyaW5nIHwgbnVsbCwgRGF0ZSB8IHN0cmluZyB8IHVuZGVmaW5lZCwgRGF0ZSB8IHN0cmluZyB8IG51bGw+O1xufVxuZXhwb3J0IGludGVyZmFjZSBUaW1lc3RhbXBUYWJsZSB7XG4gICAgY3JlYXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlLCBzdHJpbmcgfCB1bmRlZmluZWQsIG5ldmVyPjtcbiAgICB1cGRhdGVkX2F0OiBDb2x1bW5UeXBlPERhdGUsIHN0cmluZyB8IHVuZGVmaW5lZCwgbmV2ZXI+O1xufVxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25zVGFibGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBtb2R1bGU6IHN0cmluZyB8IG51bGw7XG4gICAgZXhlY3V0ZWRfYXQ6IENvbHVtblR5cGU8RGF0ZSwgc3RyaW5nIHwgdW5kZWZpbmVkLCBuZXZlcj47XG59XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBlbWFpbDogc3RyaW5nO1xuICAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gICAgdmVyaWZpZWRfYXQ/OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlck1ldGFUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBUb2tlblRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgZXhwaXJlc19hdDogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBVc2VyUm9sZVRhYmxlIHtcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgcm9sZV9pZDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIG9yaWdpbjogc3RyaW5nO1xuICAgIHN1YmplY3Q6IHN0cmluZztcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICBjb25kaXRpb25zOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uQXNzaWdubWVudFRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgcGVybWlzc2lvbl9pZDogbnVtYmVyO1xuICAgIGFzc2lnbmFibGVfdHlwZTogc3RyaW5nO1xuICAgIGFzc2lnbmFibGVfaWQ6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIGRyaXZlOiBzdHJpbmc7XG4gICAgbWltZXR5cGU6IHN0cmluZztcbiAgICBjbGllbnRfbmFtZTogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIHB1YmxpYzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZU1ldGFUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBmaWxlX2lkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRTZXNzaW9uVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgbWltZV90eXBlczogc3RyaW5nO1xuICAgIG1heF9zaXplOiBudW1iZXI7XG4gICAgZXhwaXJlc19hdDogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBKb2JUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHF1ZXVlX2lkOiBzdHJpbmc7XG4gICAgc3RhdHVzOiAncGVuZGluZycgfCAnaW5fcHJvZ3Jlc3MnIHwgJ2NvbXBsZXRlZCcgfCAnZmFpbGVkJztcbiAgICBkYXRhOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlc3VsdDogc3RyaW5nIHwgbnVsbDtcbiAgICBlcnJvcjogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzdWJqZWN0OiBzdHJpbmc7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgYm9keTogc3RyaW5nIHwgbnVsbDtcbiAgICBlbmdpbmU6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVNZXRhVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgdGVtcGxhdGVfaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT2F1dGhBY2NvdW50VGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHByb3ZpZGVyOiBzdHJpbmc7XG4gICAgcHJvdmlkZXJfdXNlcl9pZDogc3RyaW5nO1xuICAgIHByb3ZpZGVyX3VzZXJfZW1haWw6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9hdXRoVG9rZW5UYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIHVzZXJfaWQ6IG51bWJlciB8IG51bGw7XG4gICAgcHJvdmlkZXI6IHN0cmluZyB8IG51bGw7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICBleHBpcmVzX2F0OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VDb250cmFjdCB7XG4gICAgdXNlcnM6IFVzZXJUYWJsZTtcbiAgICB1c2VyX21ldGFzOiBVc2VyTWV0YVRhYmxlO1xuICAgIHRva2VuczogVG9rZW5UYWJsZTtcbiAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25zVGFibGU7XG4gICAgZmlsZXM6IEZpbGVUYWJsZTtcbiAgICBmaWxlX21ldGFzOiBGaWxlTWV0YVRhYmxlO1xuICAgIGZpbGVfdXBsb2FkX3Nlc3Npb25zOiBVcGxvYWRTZXNzaW9uVGFibGU7XG4gICAgcm9sZXM6IFJvbGVUYWJsZTtcbiAgICB1c2VyX3JvbGVzOiBVc2VyUm9sZVRhYmxlO1xuICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uVGFibGU7XG4gICAgcGVybWlzc2lvbnNfYXNzaWdubWVudHM6IFBlcm1pc3Npb25Bc3NpZ25tZW50VGFibGU7XG4gICAgam9iczogSm9iVGFibGU7XG4gICAgZW1haWxfdGVtcGxhdGVzOiBFbWFpbFRlbXBsYXRlVGFibGU7XG4gICAgZW1haWxfdGVtcGxhdGVfbWV0YXM6IEVtYWlsVGVtcGxhdGVNZXRhVGFibGU7XG4gICAgb2F1dGhfYWNjb3VudHM6IE9hdXRoQWNjb3VudFRhYmxlO1xuICAgIG9hdXRoX3Rva2VuczogT2F1dGhUb2tlblRhYmxlO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhZmlsdGVyIHtcbiAgICBlcT86IHN0cmluZztcbiAgICBuZXE/OiBzdHJpbmc7XG4gICAgbGlrZT86IHN0cmluZztcbiAgICBubGlrZT86IHN0cmluZztcbiAgICBpbj86IHN0cmluZ1tdO1xuICAgIG5pbj86IHN0cmluZ1tdO1xuICAgIGd0Pzogc3RyaW5nO1xuICAgIGd0ZT86IHN0cmluZztcbiAgICBsdD86IHN0cmluZztcbiAgICBsdGU/OiBzdHJpbmc7XG4gICAgaXNfbnVsbD86IGJvb2xlYW47XG4gICAgZXhpc3RzPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFRdWVyeVBheWxvYWQge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IE1ldGFkYWZpbHRlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFkYXRhUXVlcnlTZXJ2aWNlPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4ge1xuICAgIHByaXZhdGUgcGF5bG9hZDtcbiAgICBwcml2YXRlIHRhYmxlO1xuICAgIHByaXZhdGUgZm9yZWlnbktleTtcbiAgICBwcml2YXRlIHBhcmVudEtleTtcbiAgICBjb25zdHJ1Y3RvcihwYXlsb2FkOiBNZXRhZGF0YVF1ZXJ5UGF5bG9hZCwgdGFibGU6IFQsIGZvcmVpZ25LZXk6IGtleW9mIERhdGFiYXNlW1RdLCBwYXJlbnRLZXk/OiBzdHJpbmcpO1xuICAgIGdldCBuZWVkV2hlcmVJbigpOiBib29sZWFuO1xuICAgIGdldCBuZWVkV2hlcmVOb3RJbigpOiBib29sZWFuO1xuICAgIGFwcGx5KGRiUXVlcnk6IGFueSk6IGFueTtcbiAgICBwcml2YXRlIGJ1aWxkUm93Q29uZGl0aW9ucztcbiAgICB3aGVyZUluOiA8REJRdWVyeT4oZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gREJRdWVyeTtcbiAgICB3aGVyZU5vdEluOiA8REJRdWVyeT4oZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gREJRdWVyeTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIGZvcmVpZ25LZXk6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihwYXlsb2FkOiBQaWNrPE1ldGFkYXRhU2VydmljZSwgJ3RhYmxlJyB8ICdmb3JlaWduS2V5JyB8ICdpZCc+KTtcbiAgICBzdGF0aWMgcGFyc2UodmFsdWU6IGFueSk6IGFueTtcbiAgICBzdGF0aWMgZmxhdHRlbihpdGVtczogQXJyYXk8e1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBhbnk7XG4gICAgfT4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogVCk6IFByb21pc2U8VD47XG4gICAgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdCgpOiBQcm9taXNlPEFycmF5PHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogYW55O1xuICAgIH0+PjtcbiAgICBhbGwoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pjtcbn1cbiIsImV4cG9ydCB0eXBlIElwY01lc3NhZ2U8VCA9IGFueT4gPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGRhdGE6IFQ7XG59O1xudHlwZSBJcGNMaXN0ZW5lcjxUID0gYW55PiA9IChkYXRhOiBUKSA9PiB2b2lkO1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUGx1Z2luSXBjQ2xpZW50IHtcbiAgICBwcml2YXRlIGxpc3RlbmVycztcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIG9uPFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBJcGNMaXN0ZW5lcjxUPik6IHZvaWQ7XG4gICAgb2ZmPFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBJcGNMaXN0ZW5lcjxUPik6IHZvaWQ7XG4gICAgZW1pdDxUID0gYW55PihldmVudDogc3RyaW5nLCBkYXRhPzogVCk6IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgQ2hpbGRQcm9jZXNzIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbnR5cGUgSXBjTGlzdGVuZXI8VCA9IGFueT4gPSAoZGF0YTogVCkgPT4gdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFBsdWdpbklwY0hvc3Qge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2hpbGQ7XG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnM7XG4gICAgY29uc3RydWN0b3IoY2hpbGQ6IENoaWxkUHJvY2Vzcyk7XG4gICAgb248VCA9IGFueT4oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IElwY0xpc3RlbmVyPFQ+KTogdm9pZDtcbiAgICBvZmY8VCA9IGFueT4oZXZlbnQ6IHN0cmluZywgY2FsbGJhY2s6IElwY0xpc3RlbmVyPFQ+KTogdm9pZDtcbiAgICBlbWl0PFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGRhdGE/OiBUKTogc3RyaW5nO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgUGx1Z2luSXBjQ2xpZW50IH0gZnJvbSAnLi9QbHVnaW5JcGNDbGllbnQudHMnO1xuZXhwb3J0IHR5cGUgSHR0cE1ldGhvZCA9ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURSc7XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlRGVmaW5pdGlvbiB7XG4gICAgbWV0aG9kOiBIdHRwTWV0aG9kO1xuICAgIHBhdGg6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVSZXF1ZXN0IHtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBtZXRob2Q6IEh0dHBNZXRob2Q7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGJvZHk/OiBhbnk7XG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlUmVzcG9uc2VQYXlsb2FkIHtcbiAgICByZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBzdGF0dXM6IG51bWJlcjtcbiAgICBib2R5PzogYW55O1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVJlcGx5IHtcbiAgICBzdGF0dXMoY29kZTogbnVtYmVyKTogUm91dGVSZXBseTtcbiAgICBzZW5kKGJvZHk/OiBhbnkpOiB2b2lkO1xufVxuZXhwb3J0IHR5cGUgUm91dGVIYW5kbGVyID0gKHJlcTogUm91dGVSZXF1ZXN0LCByZXBseTogUm91dGVSZXBseSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBQbHVnaW5Sb3V0ZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50O1xuICAgIHByaXZhdGUgcm91dGVzO1xuICAgIGNvbnN0cnVjdG9yKGNsaWVudDogUGx1Z2luSXBjQ2xpZW50KTtcbiAgICBwcml2YXRlIGRpc3BhdGNoO1xuICAgIHByaXZhdGUgcmVnaXN0ZXI7XG4gICAgZ2V0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogUm91dGVIYW5kbGVyKTogdm9pZDtcbiAgICBwb3N0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogUm91dGVIYW5kbGVyKTogdm9pZDtcbiAgICBwdXQocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSb3V0ZUhhbmRsZXIpOiB2b2lkO1xuICAgIHBhdGNoKHBhdGg6IHN0cmluZywgaGFuZGxlcjogUm91dGVIYW5kbGVyKTogdm9pZDtcbiAgICBkZWxldGUocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBSb3V0ZUhhbmRsZXIpOiB2b2lkO1xufVxuIiwiaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvUm91dGVyU2VydmljZS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVyRmlsZUJhc2VSb3V0aW5nU2VydmljZSB7XG4gICAgcHJpdmF0ZSBkaXJlY3Rvcnk7XG4gICAgcHJpdmF0ZSBwcmVmaXg7XG4gICAgcHJpdmF0ZSBtb2R1bGU/O1xuICAgIHByaXZhdGUgcm91dGVyO1xuICAgIHByaXZhdGUgbG9nZ2VyO1xuICAgIHByaXZhdGUgcm91dGVzO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIHNldERpcmVjdG9yeShkaXJlY3Rvcnk6IHN0cmluZyk6IHRoaXM7XG4gICAgc2V0UHJlZml4KHByZWZpeDogc3RyaW5nKTogdGhpcztcbiAgICBzZXRSb3V0ZXIocm91dGVyOiBSb3V0ZXIpOiB0aGlzO1xuICAgIHNldE1vZHVsZShtb2R1bGU6IHN0cmluZyk6IHRoaXM7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHRoaXM7XG4gICAgc2V0RGVidWcoZGVidWc6IGJvb2xlYW4pOiB0aGlzO1xuICAgIHN0YXRpYyBjcmVhdGUoZGlyZWN0b3J5OiBzdHJpbmcpOiBSb3V0ZXJGaWxlQmFzZVJvdXRpbmdTZXJ2aWNlO1xuICAgIGxvYWRGaWxlcygpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHJlZ2lzdGVyUm91dGVzKCk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IFJvdXRlclNlcnZpY2UgZnJvbSAnLi9Sb3V0ZXJTZXJ2aWNlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyUmVnaXN0ZXJFbnRyeSB7XG4gICAgZmlsZXBhdGg6IHN0cmluZztcbiAgICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlclJlZ2lzdGVyPEMgPSB7fT4gZXh0ZW5kcyBSb3V0ZXJTZXJ2aWNlPEM+IHtcbiAgICBmaWxlczogTWFwPHN0cmluZywgUm91dGVyUmVnaXN0ZXJFbnRyeT47XG4gICAgZGlyczogTWFwPHN0cmluZywgUm91dGVyUmVnaXN0ZXJFbnRyeT47XG4gICAgY29uc3RydWN0b3Iocm91dGVyPzogUGFydGlhbDxSb3V0ZXJTZXJ2aWNlPEM+Pik7XG4gICAgYWRkRmlsZShmaWxlbmFtZTogc3RyaW5nLCBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkO1xuICAgIGFkZERpcihkaXJuYW1lOiBzdHJpbmcsIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQ7XG4gICAgcHJpdmF0ZSBsb2FkRmlsZTtcbiAgICBwcml2YXRlIGxvYWREaXI7XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gJy4vUm91dGVyU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvSHR0cENvbnRleHRDb250cmFjdC50cyc7XG5leHBvcnQgdHlwZSBSZXNvdXJjZU1ldGhvZCA9ICdpbmRleCcgfCAnc2hvdycgfCAnc3RvcmUnIHwgJ3VwZGF0ZScgfCAnZGVzdHJveSc7XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclJlc291cmNlT3B0aW9ucyB7XG4gICAgbWlkZGxld2FyZT86IFBhcnRpYWw8UmVjb3JkPFJlc291cmNlTWV0aG9kIHwgJ2FsbCcsIE1pZGRsZXdhcmU+PjtcbiAgICBleGNlcHQ/OiBSZXNvdXJjZU1ldGhvZFtdO1xufVxuZGVjbGFyZSBjb25zdCBSb3V0ZXJSZXNvdXJjZVNlcnZpY2VfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGxpc3RlbmVyczogaW1wb3J0KFwiI3NoYXJlZC9taXhpbnMvSG9va3NNaXhpbi50c1wiKS5MaXN0ZW5lcltdO1xuICAgICAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgb2ZmKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogdm9pZDtcbiAgICAgICAgZW1pdEFzeW5jKGV2ZW50OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlclJlc291cmNlU2VydmljZSBleHRlbmRzIFJvdXRlclJlc291cmNlU2VydmljZV9iYXNlIHtcbiAgICBwcml2YXRlIG9wdGlvbnM7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IFJvdXRlclJlc291cmNlT3B0aW9ucyk7XG4gICAgaW5kZXgoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8YW55PjtcbiAgICBzaG93KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPGFueT47XG4gICAgc3RvcmUoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8YW55PjtcbiAgICB1cGRhdGUoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8YW55PjtcbiAgICBkZXN0cm95KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPGFueT47XG4gICAgcHJpdmF0ZSB3cmFwO1xuICAgIHJlZ2lzdGVyKHJvdXRlcjogUm91dGVyKTogdm9pZDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3IgfSBmcm9tICcjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHMnO1xuZXhwb3J0IHR5cGUgQ29uZmlnTW9kZWwgPSBSZXR1cm5UeXBlPFJldHVyblR5cGU8dHlwZW9mIE1vZGVsQ29uZmlnPj47XG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gICAgcmVhZG9ubHk/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTW9kZWxDb25maWcoa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKTogPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSA9PiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHt9O1xuICAgIF9faXNDb25maWdNb2RlbDogYm9vbGVhbjtcbiAgICBzZXJpYWxpemU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgcm93OiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGxpc3Q8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFByb21pc2U8VFtdPjtcbiAgICBmaW5kPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGlkOiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPjtcbiAgICBmaW5kT3JGYWlsPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGlkOiBzdHJpbmcpOiBQcm9taXNlPFQ+O1xuICAgIGNyZWF0ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpdGVtOiBUICYge1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nLCBkYXRhOiBUKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGVPckNyZWF0ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nLCBkYXRhOiBQYXJ0aWFsPFQ+KTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZXN0cm95PFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xufSAmIFRCYXNlO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IFJvdXRlclJlc291cmNlU2VydmljZSBmcm9tICcuL1JvdXRlclJlc291cmNlU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlclJlc291cmNlT3B0aW9ucyB9IGZyb20gJy4vUm91dGVyUmVzb3VyY2VTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIHsgSHR0cENvbnRleHQgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9IdHRwQ29udGV4dENvbnRyYWN0LnRzJztcbmltcG9ydCB0eXBlIHsgQ29uZmlnTW9kZWwgfSBmcm9tICcjc2VydmVyL21peGlucy9Nb2RlbENvbmZpZ01peGluLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlclJlc291cmNlQ29uZmlnIGV4dGVuZHMgUm91dGVyUmVzb3VyY2VTZXJ2aWNlIHtcbiAgICBwcml2YXRlIG1vZGVsO1xuICAgIGNvbnN0cnVjdG9yKG1vZGVsOiBDb25maWdNb2RlbCwgb3B0aW9ucz86IFJvdXRlclJlc291cmNlT3B0aW9ucyk7XG4gICAgaW5kZXgoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8e1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgICAgIHRvdGFsOiBudW1iZXI7XG4gICAgICAgIHRvdGFsX3BhZ2VzOiBudW1iZXI7XG4gICAgICAgIGl0ZW1zOiB7fVtdO1xuICAgIH0+O1xuICAgIHNob3coY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8e30+O1xuICAgIHN0b3JlKGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPHtcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIH0+O1xuICAgIHVwZGF0ZShjdHg6IEh0dHBDb250ZXh0KTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZXN0cm95KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPHtcbiAgICAgICAgc3VjY2VzczogYm9vbGVhbjtcbiAgICB9Pjtcbn1cbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbnRlcmZhY2UgQ29tbWFuZE9wdGlvbnMge1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBlbnY/OiBOb2RlSlMuUHJvY2Vzc0VudjtcbiAgICBzaGVsbD86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNoZWxsU2VydmljZU9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlbGxTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBTaGVsbFNlcnZpY2VPcHRpb25zKTtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgc2hlbGwgY29tbWFuZCBhbmQgcmV0dXJuIGEgcHJvbWlzZVxuICAgICAqL1xuICAgIGNvbW1hbmQoYmluOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogQ29tbWFuZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKlxuICAgICAqIEV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kIGFuZCByZXR1cm4gdGhlIG91dHB1dCBhcyBhIHN0cmluZ1xuICAgICAqL1xuICAgIGV4ZWN1dGVDb21tYW5kV2l0aE91dHB1dChiaW46IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBDb21tYW5kT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIENvbmZpZ1NlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Db25maWdTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdGlvbiwgRmluZE1hbnlPcHRpb25zLCBQYWdpbmF0ZU9wdGlvbnMsIERlbGV0ZU1hbnlPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvRGF0YWJhc2VSZXBvc2l0b3J5LnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ1JlcG9zaXRvcnk8VEVudGl0eSA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRPcHRpb25zID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHByb3RlY3RlZCBjb25maWc6IENvbmZpZ1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIGtleTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBwcmltYXJ5S2V5OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWdTZXJ2aWNlLCBrZXk6IHN0cmluZywgcHJpbWFyeUtleT86IHN0cmluZyk7XG4gICAgcHJvdGVjdGVkIGdldEl0ZW1zKCk6IFRFbnRpdHlbXTtcbiAgICBwcm90ZWN0ZWQgc2V0SXRlbXMoaXRlbXM6IFRFbnRpdHlbXSk6IHZvaWQ7XG4gICAgcXVlcnkob3B0aW9ucz86IFRPcHRpb25zKTogVEVudGl0eVtdO1xuICAgIGNvdW50KG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBmaW5kTWFueShvcHRpb25zPzogRmluZE1hbnlPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHlbXT47XG4gICAgZmluZE9uZShvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHkgfCBudWxsPjtcbiAgICBmaW5kQnlJZChpZDogc3RyaW5nLCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHkgfCBudWxsPjtcbiAgICBmaW5kQnlJZE9yRmFpbChpZDogc3RyaW5nLCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHk+O1xuICAgIHBhZ2luYXRlKG9wdGlvbnM/OiBQYWdpbmF0ZU9wdGlvbnMgJiBUT3B0aW9ucyk6IFByb21pc2U8UGFnaW5hdGlvbjxURW50aXR5Pj47XG4gICAgY3JlYXRlKGRhdGE6IFBhcnRpYWw8VEVudGl0eT4pOiBQcm9taXNlPFRFbnRpdHk+O1xuICAgIGNyZWF0ZU1hbnkoZGF0YTogUGFydGlhbDxURW50aXR5PltdKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIHVwZGF0ZUJ5SWQoaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxURW50aXR5Pik6IFByb21pc2U8VEVudGl0eT47XG4gICAgZGVsZXRlQnlJZChpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGVNYW55KG9wdGlvbnM/OiBEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBEYXRhYmFzZVJlcG9zaXRvcnkgZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvRGF0YWJhc2VSZXBvc2l0b3J5LnRzJztcbmltcG9ydCB0eXBlIHsgTWV0YWRhdGFRdWVyeVBheWxvYWQgfSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL01ldGFkYXRhUXVlcnlTZXJ2aWNlLnRzJztcbmltcG9ydCB0eXBlIEZpbGVFbnRpdHkgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9GaWxlRW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJlcG9zaXRvcnlRdWVyeU9wdGlvbnMge1xuICAgIGlkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgc2VhcmNoPzogc3RyaW5nO1xuICAgIHB1cnBvc2U/OiBzdHJpbmdbXTtcbiAgICBjbGllbnRfbmFtZT86IHN0cmluZ1tdO1xuICAgIG1ldGFzPzogTWV0YWRhdGFRdWVyeVBheWxvYWQ7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlUmVwb3NpdG9yeSBleHRlbmRzIERhdGFiYXNlUmVwb3NpdG9yeTxGaWxlRW50aXR5LCBGaWxlRW50aXR5WydpZCddLCBGaWxlUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucz4ge1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBGaWxlUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucyk6IGFueTtcbn1cbiIsImltcG9ydCBTaGVsbFNlcnZpY2UgZnJvbSBcIiNzZXJ2ZXIvc2VydmljZXMvU2hlbGxTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgR2l0QnJhbmNoRW50aXR5IGZyb20gXCIjc2hhcmVkL2VudGl0aWVzL0dpdEJyYW5jaEVudGl0eS50c1wiO1xuZXhwb3J0IGludGVyZmFjZSBHaXRCcmFuY2hSZXBvc2l0b3J5T3B0aW9ucyB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgc2hlbGw/OiBTaGVsbFNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHaXRCcmFuY2hSZXBvc2l0b3J5IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBzaGVsbDogU2hlbGxTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdEJyYW5jaFJlcG9zaXRvcnlPcHRpb25zKTtcbiAgICBsaXN0KCk6IFByb21pc2U8R2l0QnJhbmNoRW50aXR5W10+O1xuICAgIGZldGNoKG9wdGlvbnM6IHtcbiAgICAgICAgcmVtb3RlOiBzdHJpbmc7XG4gICAgICAgIGJyYW5jaDogc3RyaW5nO1xuICAgICAgICBsb2NhbE5hbWU/OiBzdHJpbmc7XG4gICAgfSk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgU2hlbGxTZXJ2aWNlIGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL1NoZWxsU2VydmljZS50c1wiO1xuaW1wb3J0IEdpdENvbW1pdEVudGl0eSBmcm9tIFwiI3NoYXJlZC9lbnRpdGllcy9HaXRDb21taXRFbnRpdHkudHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q29tbWl0UmVwb3NpdG9yeU9wdGlvbnMge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHNoZWxsPzogU2hlbGxTZXJ2aWNlO1xufVxuZXhwb3J0IGludGVyZmFjZSBHaXRDb21taXRMaXN0T3B0aW9ucyB7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgY3Vyc29yPzogc3RyaW5nO1xuICAgIGJyYW5jaGVzPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIEdpdENvbW1pdExpc3RSZXN1bHQge1xuICAgIGl0ZW1zOiBHaXRDb21taXRFbnRpdHlbXTtcbiAgICBjdXJzb3JfcHJldmlvdXM6IHN0cmluZyB8IG51bGw7XG4gICAgY3Vyc29yX2N1cnJlbnQ6IHN0cmluZyB8IG51bGw7XG4gICAgY3Vyc29yX25leHQ6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHaXRDb21taXRSZXBvc2l0b3J5IHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBzaGVsbDogU2hlbGxTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdENvbW1pdFJlcG9zaXRvcnlPcHRpb25zKTtcbiAgICBsaXN0KG9wdGlvbnM/OiBHaXRDb21taXRMaXN0T3B0aW9ucyk6IFByb21pc2U8R2l0Q29tbWl0TGlzdFJlc3VsdD47XG4gICAgY2hlY2tvdXQoaGFzaDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBEYXRhYmFzZVJlcG9zaXRvcnkgZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvRGF0YWJhc2VSZXBvc2l0b3J5LnRzJztcbmltcG9ydCB0eXBlIHsgUGVybWlzc2lvbkFzc2lnbm1lbnQgfSBmcm9tICcjc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvbkFzc2lnbm1lbnRTY2hlbWEudHMnO1xuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnlRdWVyeU9wdGlvbnMge1xuICAgIGlkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgcGVybWlzc2lvbklkPzogbnVtYmVyIHwgbnVtYmVyW107XG4gICAgYXNzaWduYWJsZUlkPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgYXNzaWduYWJsZVR5cGU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeSBleHRlbmRzIERhdGFiYXNlUmVwb3NpdG9yeTxQZXJtaXNzaW9uQXNzaWdubWVudCwgUGVybWlzc2lvbkFzc2lnbm1lbnRbJ2lkJ10sIFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucz4ge1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnlRdWVyeU9wdGlvbnMpOiBhbnk7XG59XG4iLCJpbXBvcnQgRGF0YWJhc2VSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb24gfSBmcm9tICcjc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvblNjaGVtYS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcm1pc3Npb25SZXBvc2l0b3J5IGV4dGVuZHMgRGF0YWJhc2VSZXBvc2l0b3J5PFBlcm1pc3Npb24sIFBlcm1pc3Npb25bJ2lkJ10sIFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zPiB7XG4gICAgY29uc3RydWN0b3IoZGI6IERhdGFiYXNlUmVwb3NpdG9yeVsnZGInXSk7XG4gICAgcXVlcnkob3B0aW9ucz86IFBlcm1pc3Npb25SZXBvc2l0b3J5UXVlcnlPcHRpb25zKTogYW55O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBGaW5kTWFueU9wdGlvbnMsIFBhZ2luYXRlT3B0aW9ucywgUGFnaW5hdGlvbiB9IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgSVJlcG9zaXRvcnlUeXBlczxURW50aXR5ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFByaW1hcnlLZXlUeXBlID0gYW55LCBUT3B0aW9ucyA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb3VudChvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgZmluZE1hbnkob3B0aW9ucz86IFRPcHRpb25zICYgRmluZE1hbnlPcHRpb25zKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIGZpbmRCeUlkKGlkOiBUUHJpbWFyeUtleVR5cGUsIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eSB8IG51bGw+O1xuICAgIGZpbmRCeUlkT3JGYWlsKGlkOiBUUHJpbWFyeUtleVR5cGUsIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eT47XG4gICAgcGFnaW5hdGUob3B0aW9ucz86IFRPcHRpb25zICYgUGFnaW5hdGVPcHRpb25zKTogUHJvbWlzZTxQYWdpbmF0aW9uPjtcbiAgICBjcmVhdGUoZGF0YTogUGFydGlhbDxURW50aXR5Piwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5PjtcbiAgICBjcmVhdGVNYW55KGRhdGE6IFBhcnRpYWw8VEVudGl0eT5bXSwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIGRlbGV0ZUJ5SWQoaWQ6IFRQcmltYXJ5S2V5VHlwZSk6IFByb21pc2U8dm9pZD47XG4gICAgZGVzdHJveU1hbnkob3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERhdGFiYXNlUmVwb3NpdG9yeUluZmVyTWl4aW48VEVudGl0eSA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQcmltYXJ5S2V5VHlwZSA9IGFueSwgVE9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PigpOiA8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpID0+IFRCYXNlICYgQ29uc3RydWN0b3I8SVJlcG9zaXRvcnlUeXBlczxURW50aXR5LCBUUHJpbWFyeUtleVR5cGUsIFRPcHRpb25zPj47XG4iLCJpbXBvcnQgRGF0YWJhc2VSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSAnI3NoYXJlZC9zY2hlbWFzL3Rva2VuU2NoZW1hLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVwb3NpdG9yeUdlbmVyYXRlT3B0aW9ucyB7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgZXhwaXJlc19pbl9ob3Vycz86IG51bWJlcjtcbn1cbmRlY2xhcmUgY29uc3QgVG9rZW5SZXBvc2l0b3J5X2Jhc2U6IGltcG9ydChcIiNzaGFyZWQvdXRpbHMvaW5kZXgudHNcIikuQ29uc3RydWN0b3IgJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2luZGV4LnRzXCIpLkNvbnN0cnVjdG9yPGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL0RhdGFiYXNlUmVwb3NpdG9yeUluZmVyTWl4aW4udHNcIikuSVJlcG9zaXRvcnlUeXBlczx7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmcgfCBudWxsO1xuICAgIHR5cGU6IHN0cmluZztcbiAgICB1c2VyX2lkOiBudW1iZXI7XG4gICAgdG9rZW46IHN0cmluZztcbiAgICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gICAgdXBkYXRlZF9hdDogc3RyaW5nO1xuICAgIGV4cGlyZXNfYXQ6IHN0cmluZztcbn0sIG51bWJlciwgVG9rZW5SZXBvc2l0b3J5UXVlcnlPcHRpb25zPj4gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2luZGV4LnRzXCIpLkNvbnN0cnVjdG9yPHt9PiAmIHR5cGVvZiBEYXRhYmFzZVJlcG9zaXRvcnk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2tlblJlcG9zaXRvcnkgZXh0ZW5kcyBUb2tlblJlcG9zaXRvcnlfYmFzZSB7XG4gICAgYXV0b0NyZWF0ZWRBdDogYm9vbGVhbjtcbiAgICBhdXRvVXBkYXRlZEF0OiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBUb2tlblJlcG9zaXRvcnlRdWVyeU9wdGlvbnMpOiBhbnk7XG4gICAgZmluZEJ5VG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8VG9rZW4gfCBudWxsPjtcbiAgICBnZW5lcmF0ZShvcHRpb25zOiBUb2tlblJlcG9zaXRvcnlHZW5lcmF0ZU9wdGlvbnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHsgS3lzZWx5IH0gZnJvbSBcImt5c2VseVwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGF0YWJhc2VHYXRld2F5PERCPiBleHRlbmRzIEt5c2VseTxEQj4ge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBfZGlhbGVjdF9pZGVudGlmaWVyOiBzdHJpbmc7XG59XG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IEJhc2VEcml2ZSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0RyaXZlQmFzZUdhdGV3YXkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBEcml2ZUZTQ29uZmlnIHtcbiAgICBkaXJlY3Rvcnk6IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlRlMgZXh0ZW5kcyBCYXNlRHJpdmUge1xuICAgIHByaXZhdGUgc2NoZW1hO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBpY2s8QmFzZURyaXZlLCAnaWQnIHwgJ25hbWUnIHwgJ2Rlc2NyaXB0aW9uJyB8ICdjb25maWcnPik7XG4gICAgZ2V0IHZhbGlkKCk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjaGVja1ZhbGlkO1xuICAgIHByb3RlY3RlZCBnZXQgcm9vdFBhdGgoKTogc3RyaW5nO1xuICAgIGV4aXN0czogQmFzZURyaXZlWydleGlzdHMnXTtcbiAgICBsaXN0OiBCYXNlRHJpdmVbJ2xpc3QnXTtcbiAgICBmaW5kOiBCYXNlRHJpdmVbJ2ZpbmQnXTtcbiAgICBta2RpcihmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICByZWFkOiBCYXNlRHJpdmVbJ3JlYWQnXTtcbiAgICByZWFkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGZzLlJlYWRTdHJlYW0+O1xuICAgIHdyaXRlOiBCYXNlRHJpdmVbJ3dyaXRlJ107XG4gICAgd3JpdGVTdHJlYW0oZmlsZW5hbWU6IHN0cmluZywgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlbGV0ZTogQmFzZURyaXZlWydkZWxldGUnXTtcbiAgICB1cmw6IEJhc2VEcml2ZVsndXJsJ107XG4gICAgdXBsb2FkVXJsOiBCYXNlRHJpdmVbJ3VwbG9hZFVybCddO1xufVxuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW1wb3J0IFNoZWxsU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL1NoZWxsU2VydmljZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIEdpdFJlcG9JbmZvIHtcbiAgICBkaXJlY3Rvcnk6IHN0cmluZztcbiAgICBoZWFkOiBzdHJpbmcgfCBudWxsO1xuICAgIHNob3J0SGFzaDogc3RyaW5nO1xuICAgIGlzRGV0YWNoZWRIZWFkOiBib29sZWFuO1xuICAgIHJlbW90ZXM6IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBHaXRHYXRld2F5T3B0aW9ucyB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgc3NoS2V5Pzogc3RyaW5nO1xuICAgIHNzaEtleUZpbGU/OiBzdHJpbmc7XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBzaGVsbD86IFNoZWxsU2VydmljZTtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgR2l0R2F0ZXdheUV4ZWN1dGVPcHRpb25zIHtcbiAgICBhcmdzOiBzdHJpbmc7XG4gICAgY3dkPzogc3RyaW5nO1xuICAgIHNzaEtleT86IHN0cmluZztcbiAgICBzc2hLZXlGaWxlPzogc3RyaW5nO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG4gICAgc2hlbGw/OiBTaGVsbFNlcnZpY2U7XG4gICAgZGVidWc/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgR2l0R2F0ZXdheSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjd2Q7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzc2hLZXk/O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3NoS2V5RmlsZT87XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWJ1ZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNoZWxsO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEdpdEdhdGV3YXlPcHRpb25zKTtcbiAgICBzdGF0aWMgZXhlY3V0ZShvcHRpb25zOiBHaXRHYXRld2F5RXhlY3V0ZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgc3RhdGljIGNsb25lKHJlcG9Vcmw6IHN0cmluZywgdGFyZ2V0RGlyOiBzdHJpbmcsIG9wdGlvbnM6IE9taXQ8R2l0R2F0ZXdheU9wdGlvbnMsICdjd2QnPik6IFByb21pc2U8R2l0R2F0ZXdheT47XG4gICAgcnVuKGFyZ3M6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICB0cnlSdW4oYXJnczogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgICBjaGVja291dChyZWY6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICBmZXRjaEFsbCgpOiBQcm9taXNlPHN0cmluZz47XG4gICAgcHVsbCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGdldEluZm8oKTogUHJvbWlzZTxHaXRSZXBvSW5mbz47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3IgfSBmcm9tICcjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdmFsdWVUb1N0cmluZyh2YWx1ZTogYW55KTogc3RyaW5nO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTWV0YWRhdGE8VGFibGUgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4obWV0YXNUYWJsZTogVGFibGUsIGZvcmVpZ25LZXk6IGtleW9mIERhdGFiYXNlW1RhYmxlXSk6IDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSkgPT4ge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBnZXQ8VCA9IGFueT4obmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQpOiBQcm9taXNlPFQ+O1xuICAgICAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufSAmIFRCYXNlO1xuIiwiaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbXBvcnQgRGF0YWJhc2VHYXRld2F5IGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvRGF0YWJhc2VHYXRld2F5LnRzJztcbmRlY2xhcmUgY29uc3QgZGF0YWJhc2U6IERhdGFiYXNlR2F0ZXdheTxEYXRhYmFzZUNvbnRyYWN0PjtcbmV4cG9ydCBkZWZhdWx0IGRhdGFiYXNlO1xuIiwiaW1wb3J0IHR5cGUgeyBTZWxlY3RhYmxlLCBTZWxlY3RRdWVyeUJ1aWxkZXIsIEV4cHJlc3Npb25CdWlsZGVyIGFzIEtFeHByZXNzaW9uQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgZGIgZnJvbSAnI3NlcnZlci9mYWNhZGVzL2RhdGFiYXNlLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuZXhwb3J0IHR5cGUgU2VsZWN0RnJvbTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gUmV0dXJuVHlwZTx0eXBlb2YgZGIuc2VsZWN0RnJvbTxUPj4gfCBTZWxlY3RRdWVyeUJ1aWxkZXI8RGF0YWJhc2UsIFQsIGFueT47XG5leHBvcnQgdHlwZSBJbnNlcnRGcm9tPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBSZXR1cm5UeXBlPHR5cGVvZiBkYi5pbnNlcnRJbnRvPFQ+PjtcbmV4cG9ydCB0eXBlIFVwZGF0ZUZyb208VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFJldHVyblR5cGU8dHlwZW9mIGRiLnVwZGF0ZVRhYmxlPFQ+PjtcbmV4cG9ydCB0eXBlIERlbGV0ZUZyb208VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFJldHVyblR5cGU8dHlwZW9mIGRiLmRlbGV0ZUZyb208VD4+O1xuZXhwb3J0IHR5cGUgU2VsZWN0QnVpbGRlcjxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gU2VsZWN0UXVlcnlCdWlsZGVyPERhdGFiYXNlLCBULCBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPj47XG5leHBvcnQgdHlwZSBFeHByZXNzaW9uQnVpbGRlcjxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gS0V4cHJlc3Npb25CdWlsZGVyPERhdGFiYXNlLCBUPjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IG5vdzogKCkgPT4gaW1wb3J0KFwia3lzZWx5XCIpLlJhd0J1aWxkZXI8c3RyaW5nPjtcbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IHtcbiAgICBzZXJpYWxpemU/OiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gYW55O1xufVxuZXhwb3J0IHR5cGUgU2VyaWFsaXphYmxlUmVzdWx0PFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4gfCB1bmRlZmluZWQ+ID0gTyBleHRlbmRzIHVuZGVmaW5lZCA/IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+IDogTyBleHRlbmRzIHtcbiAgICBzZXJpYWxpemU6IChyb3c6IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+KSA9PiBpbmZlciBSO1xufSA/IFIgOiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPjtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyLCBJbnNlcnRhYmxlIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VsZWN0RnJvbSwgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zLCBVcGRhdGVGcm9tIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU9yQ3JlYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IGV4dGVuZHMgU2VyaWFsaXplT3B0aW9uczxUPiB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xuICAgIHNlbGVjdD86IChxYjogU2VsZWN0RnJvbTxUPikgPT4gU2VsZWN0RnJvbTxUPjtcbiAgICB1cGRhdGU/OiAocWI6IFVwZGF0ZUZyb208VD4pID0+IFVwZGF0ZUZyb208VD47XG4gICAgdmFsdWVzOiBJbnNlcnRhYmxlPERhdGFiYXNlW1RdPiB8IEluc2VydGFibGU8RGF0YWJhc2VbVF0+W107XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGVPckNyZWF0ZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBVcGRhdGVPckNyZWF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8U2VyaWFsaXphYmxlUmVzdWx0PFQsIE8+PjtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VsZWN0RnJvbSwgU2VyaWFsaXplT3B0aW9ucywgU2VyaWFsaXphYmxlUmVzdWx0IH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIExpc3RPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gZXh0ZW5kcyBTZXJpYWxpemVPcHRpb25zPFQ+IHtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xuICAgIHF1ZXJ5PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBTZWxlY3RGcm9tPFQ+O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbGlzdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBMaXN0T3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz5bXT47XG4iLCJpbXBvcnQgdHlwZSB7IEV4cHJlc3Npb25CdWlsZGVyLCBFeHByZXNzaW9uV3JhcHBlciwgU2VsZWN0YWJsZSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdEZyb20gfSBmcm9tICcuL2NvbW1vbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvUGFnaW5hdGlvbkVudGl0eS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBvcmRlckJ5PzogRGF0YWJhc2VbVF0gfCAoa2V5b2YgRGF0YWJhc2VbVF0pW107XG4gICAgb3JkZXJEZXNjPzogKCdhc2MnIHwgJ2Rlc2MnKSB8ICgnYXNjJyB8ICdkZXNjJylbXTtcbiAgICB3aGVyZT86IChxYjogRXhwcmVzc2lvbkJ1aWxkZXI8RGF0YWJhc2UsIFQ+KSA9PiBFeHByZXNzaW9uV3JhcHBlcjxEYXRhYmFzZSwgVCwgYW55PjtcbiAgICBzZXJpYWxpemU/OiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gYW55O1xuICAgIHF1ZXJ5PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBhbnk7XG59XG5leHBvcnQgdHlwZSBQYWdpbmF0ZVJlc3VsdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBQYWdpbmF0ZU9wdGlvbnM8VD4gfCB1bmRlZmluZWQ+ID0gTyBleHRlbmRzIHVuZGVmaW5lZCA/IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+IDogTyBleHRlbmRzIHtcbiAgICBzZXJpYWxpemU6IChyb3c6IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+KSA9PiBpbmZlciBSO1xufSA/IFIgOiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHBhZ2luYXRlPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFBhZ2luYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxQYWdpbmF0aW9uPFBhZ2luYXRlUmVzdWx0PFQsIE8+Pj47XG4iLCJpbXBvcnQgdHlwZSB7IFNlbGVjdEZyb20gfSBmcm9tICcuL2NvbW1vbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgQ291bnRPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4ge1xuICAgIHF1ZXJ5PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBTZWxlY3RGcm9tPFQ+O1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvdW50PFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIENvdW50T3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxudW1iZXI+O1xuIiwiaW1wb3J0IHR5cGUgeyBJbnNlcnRhYmxlIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4ge1xuICAgIHZhbHVlczogSW5zZXJ0YWJsZTxEYXRhYmFzZVtUXT47XG4gICAgcHJpbWFyeUtleT86IHN0cmluZztcbiAgICBub3JtYWxpemU/OiBib29sZWFuIHwgKCh2YWx1ZTogYW55KSA9PiBhbnkpO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBDcmVhdGVPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVNeXNxbDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBDcmVhdGVPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGU8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgQ3JlYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxpbXBvcnQoXCJreXNlbHlcIikuRHJhaW5PdXRlckdlbmVyaWM8eyBbS18xIGluIChEYXRhYmFzZVtUXSBleHRlbmRzIGluZmVyIFRfMSA/IHsgW0sgaW4ga2V5b2YgVF8xXTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFR5cGU8VF8xW0tdPiBleHRlbmRzIGluZmVyIFRfMiA/IFRfMiBleHRlbmRzIGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RUeXBlPFRfMVtLXT4gPyBUXzIgZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogSyA6IG5ldmVyIDogbmV2ZXI7IH0gOiBuZXZlcilba2V5b2YgRGF0YWJhc2VbVF1dXTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFR5cGU8RGF0YWJhc2VbVF1bS18xXT47IH0+PjtcbiIsImltcG9ydCB0eXBlIHsgVXBkYXRlYWJsZSwgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgVXBkYXRlRnJvbSwgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4ge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB2YWx1ZXM6IFVwZGF0ZWFibGU8RGF0YWJhc2VbVF0+O1xuICAgIG5vcm1hbGl6ZT86IGJvb2xlYW4gfCAoKHZhbHVlOiBhbnkpID0+IGFueSk7XG4gICAgd2hlcmU/OiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPERhdGFiYXNlLCBUPikgPT4gRXhwcmVzc2lvbldyYXBwZXI8RGF0YWJhc2UsIFQsIGFueT47XG4gICAgcXVlcnk/OiAocWI6IFVwZGF0ZUZyb208VD4pID0+IFVwZGF0ZUZyb208VD47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGVEZWZhdWx0PFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFVwZGF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8U2VyaWFsaXphYmxlUmVzdWx0PFQsIE8+W10+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBkYXRlTXlzcWw8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgVXBkYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz5bXT47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1cGRhdGU8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgVXBkYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxpbXBvcnQoXCJreXNlbHlcIikuRHJhaW5PdXRlckdlbmVyaWM8eyBbS18xIGluIChEYXRhYmFzZVtUXSBleHRlbmRzIGluZmVyIFRfMSA/IHsgW0sgaW4ga2V5b2YgVF8xXTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFR5cGU8VF8xW0tdPiBleHRlbmRzIGluZmVyIFRfMiA/IFRfMiBleHRlbmRzIGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RUeXBlPFRfMVtLXT4gPyBUXzIgZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogSyA6IG5ldmVyIDogbmV2ZXI7IH0gOiBuZXZlcilba2V5b2YgRGF0YWJhc2VbVF1dXTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFR5cGU8RGF0YWJhc2VbVF1bS18xXT47IH0+W10+O1xuIiwiaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uV3JhcHBlciwgRXhwcmVzc2lvbkJ1aWxkZXIgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbXBvcnQgZGIgZnJvbSAnI3NlcnZlci9mYWNhZGVzL2RhdGFiYXNlLnRzJztcbnR5cGUgRGVsZXRlRnJvbTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gUmV0dXJuVHlwZTx0eXBlb2YgZGIuZGVsZXRlRnJvbTxUPj47XG5leHBvcnQgaW50ZXJmYWNlIERlc3Ryb3lPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4ge1xuICAgIHF1ZXJ5PzogKHFiOiBEZWxldGVGcm9tPFQ+KSA9PiBEZWxldGVGcm9tPFQ+O1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZGVzdHJveTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBEZXN0cm95T3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyLCBJbnNlcnRhYmxlIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VsZWN0RnJvbSwgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIEZpcnN0T3JDcmVhdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gZXh0ZW5kcyBTZXJpYWxpemVPcHRpb25zPFQ+IHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgc2VsZWN0PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBTZWxlY3RGcm9tPFQ+O1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xuICAgIHZhbHVlczogSW5zZXJ0YWJsZTxEYXRhYmFzZVtUXT4gfCBJbnNlcnRhYmxlPERhdGFiYXNlW1RdPltdO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmlyc3RPckNyZWF0ZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBGaXJzdE9yQ3JlYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz4+O1xuIiwiaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uQnVpbGRlciwgRXhwcmVzc2lvbldyYXBwZXIgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RGcm9tLCBTZXJpYWxpemFibGVSZXN1bHQsIFNlcmlhbGl6ZU9wdGlvbnMgfSBmcm9tICcuL2NvbW1vbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgRmluZE9uZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4ge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcXVlcnk/OiAocWI6IFNlbGVjdEZyb208VD4pID0+IFNlbGVjdEZyb208VD47XG4gICAgd2hlcmU/OiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPERhdGFiYXNlLCBUPikgPT4gRXhwcmVzc2lvbldyYXBwZXI8RGF0YWJhc2UsIFQsIGFueT47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBmaW5kT25lPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIEZpbmRPbmVPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPiB8IG51bGw+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmluZE9uZU9yRmFpbDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBGaW5kT25lT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxOb25OdWxsYWJsZTxBd2FpdGVkPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPj4+PjtcbiIsImltcG9ydCB0eXBlIHsgVXBkYXRlT3JDcmVhdGVPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL3VwZGF0ZU9yQ3JlYXRlLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuaW1wb3J0IHR5cGUgeyBMaXN0T3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9saXN0LnRzJztcbmltcG9ydCB0eXBlIHsgUGFnaW5hdGVPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL3BhZ2luYXRlLnRzJztcbmltcG9ydCB0eXBlIHsgQ291bnRPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL2NvdW50LnRzJztcbmltcG9ydCB0eXBlIHsgQ3JlYXRlT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9jcmVhdGUudHMnO1xuaW1wb3J0IHR5cGUgeyBVcGRhdGVPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL3VwZGF0ZS50cyc7XG5pbXBvcnQgdHlwZSB7IERlc3Ryb3lPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL2Rlc3Ryb3kudHMnO1xuaW1wb3J0IHR5cGUgeyBGaXJzdE9yQ3JlYXRlT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9maXJzdE9yQ3JlYXRlLnRzJztcbmltcG9ydCB0eXBlIHsgRmluZE9uZU9wdGlvbnMgfSBmcm9tICcjc2VydmVyL3F1ZXJpZXMvZmluZE9uZS50cyc7XG5pbXBvcnQgdHlwZSBQYWdpbmF0aW9uIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvUGFnaW5hdGlvbkVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmltcG9ydCB0eXBlIHsgU2VsZWN0UXVlcnlCdWlsZGVyIH0gZnJvbSAna3lzZWx5JztcbmV4cG9ydCB0eXBlIE1vZGVsTGlzdE9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IE9taXQ8TGlzdE9wdGlvbnM8VD4sICdzZXJpYWxpemUnPjtcbmV4cG9ydCB0eXBlIE1vZGVsRmluZE9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IE9taXQ8RmluZE9uZU9wdGlvbnM8VD4sICdzZXJpYWxpemUnIHwgJ29yZGVyQnknPjtcbmV4cG9ydCB0eXBlIE1vZGVsUGFnaW5hdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBPbWl0PFBhZ2luYXRlT3B0aW9uczxUPiwgJ3NlcmlhbGl6ZSc+O1xuZXhwb3J0IHR5cGUgTW9kZWxDb3VudE9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IENvdW50T3B0aW9uczxUPjtcbmV4cG9ydCB0eXBlIE1vZGVsQ3JlYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gT21pdDxDcmVhdGVPcHRpb25zPFQ+LCAnc2VyaWFsaXplJz47XG5leHBvcnQgdHlwZSBNb2RlbFVwZGF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IE9taXQ8VXBkYXRlT3B0aW9uczxUPiwgJ3NlcmlhbGl6ZSc+O1xuZXhwb3J0IHR5cGUgTW9kZWxEZXN0cm95T3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gRGVzdHJveU9wdGlvbnM8VD47XG5leHBvcnQgdHlwZSBNb2RlbEZpcnN0T3JDcmVhdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBPbWl0PEZpcnN0T3JDcmVhdGVPcHRpb25zPFQ+LCAnc2VyaWFsaXplJz47XG5leHBvcnQgdHlwZSBNb2RlbFVwZGF0ZU9yQ3JlYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gT21pdDxVcGRhdGVPckNyZWF0ZU9wdGlvbnM8VD4sICdzZXJpYWxpemUnPjtcbmV4cG9ydCB0eXBlIE1vZGVsRW50aXR5ID0gUmV0dXJuVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiBNb2RlbE1peGluPGFueT4+PjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsTWl4aW48VGFibGUgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4odGFibGU6IFRhYmxlLCBwcmltYXJ5S2V5Pzoga2V5b2YgRGF0YWJhc2VbVGFibGVdKTogPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSA9PiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBkZXN0cm95KCk6IFByb21pc2U8dm9pZD47XG4gICAgICAgIHNvZnREZWxldGUoKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xuICAgIF9fbW9kZWw6IHtcbiAgICAgICAgdGFibGU6IFRhYmxlO1xuICAgICAgICBwcmltYXJ5S2V5OiBrZXlvZiBEYXRhYmFzZVtUYWJsZV07XG4gICAgfTtcbiAgICBzZXJpYWxpemU8VD4odGhpczogbmV3ICgpID0+IFQsIHJvdzogYW55KTogUHJvbWlzZTxUPjtcbiAgICBzZWxlY3QoKTogU2VsZWN0UXVlcnlCdWlsZGVyPERhdGFiYXNlLCBUYWJsZSwgYW55PjtcbiAgICBwYWdpbmF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IE1vZGVsUGFnaW5hdGVPcHRpb25zPFRhYmxlPik6IFByb21pc2U8UGFnaW5hdGlvbjxUPj47XG4gICAgbGlzdDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IE1vZGVsTGlzdE9wdGlvbnM8VGFibGU+KTogUHJvbWlzZTxUW10+O1xuICAgIGZpbmRPbmU8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBNb2RlbEZpbmRPcHRpb25zPFRhYmxlPik6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgZmluZE9uZU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IE1vZGVsRmluZE9wdGlvbnM8VGFibGU+KTogUHJvbWlzZTxUPjtcbiAgICBmaW5kPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55KTogUHJvbWlzZTxUIHwgbnVsbD47XG4gICAgZmluZE9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIERhdGFiYXNlW1RhYmxlXSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5T3JGYWlsPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIERhdGFiYXNlW1RhYmxlXSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZXhpc3RzPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogTW9kZWxMaXN0T3B0aW9uczxUYWJsZT4pOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIGNvdW50PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogTW9kZWxDb3VudE9wdGlvbnM8VGFibGU+KTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGNyZWF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgcGF5bG9hZDogTW9kZWxDcmVhdGVPcHRpb25zPFRhYmxlPltcInZhbHVlc1wiXSk6IFByb21pc2U8VD47XG4gICAgY3JlYXRlTWFueTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgdmFsdWVzOiBBcnJheTxNb2RlbENyZWF0ZU9wdGlvbnM8VGFibGU+W1widmFsdWVzXCJdPik6IFByb21pc2U8VFtdPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IE1vZGVsVXBkYXRlT3B0aW9uczxUYWJsZT4pOiBQcm9taXNlPFQ+O1xuICAgIHVwZGF0ZUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnksIHZhbHVlczogTW9kZWxVcGRhdGVPcHRpb25zPFRhYmxlPltcInZhbHVlc1wiXSwgb3B0aW9ucz86IHtcbiAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0pOiBQcm9taXNlPFQ+O1xuICAgIGRlc3Ryb3k8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBNb2RlbERlc3Ryb3lPcHRpb25zPFRhYmxlPik6IFByb21pc2U8dm9pZD47XG4gICAgZmlyc3RPckNyZWF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbzogTW9kZWxGaXJzdE9yQ3JlYXRlT3B0aW9uczxUYWJsZT4pOiBUO1xuICAgIHVwZGF0ZU9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIG86IE1vZGVsVXBkYXRlT3JDcmVhdGVPcHRpb25zPFRhYmxlPik6IFQ7XG4gICAgZGVzdHJveUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xufSAmIFRCYXNlO1xuIiwiaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG5pbnRlcmZhY2UgUmVsYXRpb24ge1xuICAgIGxvYWQoZW50aXRpZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFJlbGF0aW9uPFIgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBSZWxhdGlvbj4+KHJlbGF0aW9uczogUik6IDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSkgPT4ge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBsb2FkPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBlbnRpdGllczogVCB8IFRbXSwgbmFtZXM6IGtleW9mIFIgfCAoa2V5b2YgUilbXSk6IFByb21pc2U8dm9pZD47XG59ICYgVEJhc2U7XG5leHBvcnQge307XG4iLCJpbXBvcnQgQ29uZmlnU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBjb25maWc6IENvbmZpZ1NlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBjb25maWc7XG4iLCJpbXBvcnQgQ29udGFpbmVyU2VydmljZSBmcm9tIFwiI3NoYXJlZC9zZXJ2aWNlcy9Db250YWluZXJTZXJ2aWNlLnRzXCI7XG5kZWNsYXJlIGNvbnN0IF9kZWZhdWx0OiBDb250YWluZXJTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgX2RlZmF1bHQ7XG4iLCJpbXBvcnQgRG93bmxvYWRTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvRG93bmxvYWRTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgZG93bmxvYWQ6IERvd25sb2FkU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGRvd25sb2FkO1xuIiwiaW1wb3J0IERyaXZlU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL0RyaXZlU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGRyaXZlOiBEcml2ZVNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBkcml2ZTtcbiIsImltcG9ydCB7IEVtbWl0dGVyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuZGVjbGFyZSBjb25zdCBlbW1pdHRlcjogRW1taXR0ZXJTZXJ2aWNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IGRlZmF1bHQgZW1taXR0ZXI7XG4iLCJpbXBvcnQgRW5jcnlwdFNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9FbmNyeXB0U2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGVuY3J5cHQ6IEVuY3J5cHRTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgZW5jcnlwdDtcbiIsImltcG9ydCBFbnZTZXJ2aWNlIGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL0VudlNlcnZpY2UudHNcIjtcbmRlY2xhcmUgY29uc3QgZW52OiBFbnZTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgZW52O1xuIiwiaW1wb3J0IEZpbGVSZXBvc2l0b3J5IGZyb20gXCIjc2VydmVyL3JlcG9zaXRvcmllcy9GaWxlUmVwb3NpdG9yeS50c1wiO1xuZGVjbGFyZSBjb25zdCBmaWxlUmVwb3NpdG9yeTogRmlsZVJlcG9zaXRvcnk7XG5leHBvcnQgZGVmYXVsdCBmaWxlUmVwb3NpdG9yeTtcbiIsImltcG9ydCBIYXNoZXJTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvSGFzaGVyU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGhhc2hlcjogSGFzaGVyU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGhhc2hlcjtcbiIsImltcG9ydCBIdHRwU2VydmljZSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9IdHRwU2VydmljZS50c1wiO1xuZGVjbGFyZSBjb25zdCBodHRwOiBIdHRwU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGh0dHA7XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iLCJpbXBvcnQgTWlncmF0b3JTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvTWlncmF0b3JTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgbWlncmF0b3I6IE1pZ3JhdG9yU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IG1pZ3JhdG9yO1xuIiwiaW1wb3J0IFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9QZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnkudHMnO1xuZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnk6IFBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeTtcbmV4cG9ydCBkZWZhdWx0IHBlcm1pc3Npb25Bc3NpZ25tZW50UmVwb3NpdG9yeTtcbiIsImltcG9ydCBQZXJtaXNzaW9uUmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9QZXJtaXNzaW9uUmVwb3NpdG9yeS50cyc7XG5kZWNsYXJlIGNvbnN0IHBlcm1pc3Npb25SZXBvc2l0b3J5OiBQZXJtaXNzaW9uUmVwb3NpdG9yeTtcbmV4cG9ydCBkZWZhdWx0IHBlcm1pc3Npb25SZXBvc2l0b3J5O1xuIiwiaW1wb3J0IHR5cGUgeyBIdHRwQ29udGV4dCB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0h0dHBDb250ZXh0Q29udHJhY3QudHMnO1xuaW1wb3J0IFJvdXRlclNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3Qgcm91dGVyOiBSb3V0ZXJTZXJ2aWNlPEh0dHBDb250ZXh0PjtcbmV4cG9ydCBkZWZhdWx0IHJvdXRlcjtcbiIsImltcG9ydCBTY2hlZHVsZXJTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvU2NoZWR1bGVyU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IHNjaGVkdWxlcjogU2NoZWR1bGVyU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IHNjaGVkdWxlcjtcbiIsImltcG9ydCBTaGVsbFNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9TaGVsbFNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBzaGVsbDogU2hlbGxTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgc2hlbGw7XG4iLCJpbXBvcnQgVG9rZW5SZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL1Rva2VuUmVwb3NpdG9yeS50cyc7XG5kZWNsYXJlIGNvbnN0IHRva2VuUmVwb3NpdG9yeTogVG9rZW5SZXBvc2l0b3J5O1xuZXhwb3J0IGRlZmF1bHQgdG9rZW5SZXBvc2l0b3J5O1xuIiwiaW1wb3J0IFVzZXJSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL1VzZXJSZXBvc2l0b3J5LnRzJztcbmRlY2xhcmUgY29uc3QgdXNlclJlcG9zaXRvcnk6IFVzZXJSZXBvc2l0b3J5O1xuZXhwb3J0IGRlZmF1bHQgdXNlclJlcG9zaXRvcnk7XG4iLCJpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgfSBmcm9tICcuL0RhdGFiYXNlQ29udHJhY3QnO1xuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUt5c2VseSBleHRlbmRzIEt5c2VseTxEYXRhYmFzZUNvbnRyYWN0PiB7XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIExvYWRlcjxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGxvYWQoZW50aXRpZXM6IFRbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgaW50ZXJmYWNlIExvYWRlclJlY29yZDxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIFtrZXk6IHN0cmluZ106IExvYWRlcjxUPjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZUxvYWRlcjxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4obG9hZGVyOiBMb2FkZXI8VD4pOiBMb2FkZXI8VD47XG4iLCJpbnRlcmZhY2UgRmlsZUxvYWRlck9wdGlvbnMge1xuICAgIGZpbGVJZFByb3BlcnR5OiBzdHJpbmc7XG4gICAgZmlsZVByb3BlcnR5OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVGaWxlTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zOiBGaWxlTG9hZGVyT3B0aW9ucyk6IGltcG9ydChcIiNzZXJ2ZXIvdXRpbHMvZGVmaW5lTG9hZGVyLnRzXCIpLkxvYWRlcjxUPjtcbmV4cG9ydCB7fTtcbiIsImludGVyZmFjZSBGaWxlTG9hZGVyT3B0aW9ucyB7XG4gICAgZmlsZUlkUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgZmlsZVVybFByb3BlcnR5Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbG9hZEZpbGVVcmw8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KGVudGl0aWVzOiBUW10sIG9wdGlvbnM/OiBGaWxlTG9hZGVyT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVGaWxlVXJsTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zPzogRmlsZUxvYWRlck9wdGlvbnMpOiBpbXBvcnQoXCIjc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci50c1wiKS5Mb2FkZXI8VD47XG5leHBvcnQge307XG4iLCJ0eXBlIEtleU9yRnVuY3Rpb248VD4gPSBrZXlvZiBUIHwgKChlbnRpdHk6IFQpID0+IGFueSk7XG5leHBvcnQgaW50ZXJmYWNlIEhhc01hbnlUaHJvdWdoTG9hZGVyT3B0aW9uczxURW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQaXZvdEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUVGFyZ2V0RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwaXZvdDoge1xuICAgICAgICBzb3VyY2VLZXk6IEtleU9yRnVuY3Rpb248VEVudGl0eT47XG4gICAgICAgIHRhcmdldEtleTogS2V5T3JGdW5jdGlvbjxUUGl2b3RFbnRpdHk+O1xuICAgICAgICBmaW5kRW50aXRpZXMoaWRzOiAoc3RyaW5nIHwgbnVtYmVyKVtdKTogUHJvbWlzZTxUUGl2b3RFbnRpdHlbXT47XG4gICAgfTtcbiAgICB0YXJnZXQ6IHtcbiAgICAgICAgc291cmNlS2V5OiBLZXlPckZ1bmN0aW9uPFRQaXZvdEVudGl0eT47XG4gICAgICAgIHRhcmdldEtleTogS2V5T3JGdW5jdGlvbjxUVGFyZ2V0RW50aXR5PjtcbiAgICAgICAgZmluZEVudGl0aWVzKGlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8VFRhcmdldEVudGl0eVtdPjtcbiAgICB9O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbG9hZEhhc01hbnlUaHJvdWdoPFRFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFBpdm90RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRUYXJnZXRFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ocGF5bG9hZDogYW55IHwgYW55W10sIG9wdGlvbnM6IEhhc01hbnlUaHJvdWdoTG9hZGVyT3B0aW9uczxURW50aXR5LCBUUGl2b3RFbnRpdHksIFRUYXJnZXRFbnRpdHk+KTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUhhc01hbnlUaHJvdWdoTG9hZGVyPFRFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFBpdm90RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRUYXJnZXRFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9uczogSGFzTWFueVRocm91Z2hMb2FkZXJPcHRpb25zPFRFbnRpdHksIFRQaXZvdEVudGl0eSwgVFRhcmdldEVudGl0eT4pOiBpbXBvcnQoXCIjc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci50c1wiKS5Mb2FkZXI8VEVudGl0eT47XG5leHBvcnQge307XG4iLCJpbnRlcmZhY2UgUmVwb3NpdG9yeU1ldGEge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xufVxuaW50ZXJmYWNlIExvYWRNZXRhc09wdGlvbnMge1xuICAgIGZpbmRNYW55KGlkczogYW55W10pOiBQcm9taXNlPFJlcG9zaXRvcnlNZXRhW10+O1xuICAgIGVudGl0eUlkS2V5Pzogc3RyaW5nO1xuICAgIGZvcmVpZ25LZXk/OiBzdHJpbmc7XG4gICAgdGFyZ2V0S2V5Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbG9hZE1ldGFzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihwYXlsb2FkOiBUIHwgVFtdLCBvcHRpb25zOiBMb2FkTWV0YXNPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZU1ldGFzTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zOiBMb2FkTWV0YXNPcHRpb25zKTogaW1wb3J0KFwiI3NlcnZlci91dGlscy9kZWZpbmVMb2FkZXIudHNcIikuTG9hZGVyPFQ+O1xuZXhwb3J0IHt9O1xuIiwiaW50ZXJmYWNlIFBlcm1pc3Npb25Mb2FkZXJPcHRpb25zIHtcbiAgICBhc3NpZ25hYmxlVHlwZTogc3RyaW5nIHwgKChlOiBhbnkpID0+IHN0cmluZyk7XG4gICAgYXNzaWduYWJsZUlkOiBzdHJpbmcgfCAoKGU6IGFueSkgPT4gc3RyaW5nKTtcbiAgICB0YXJnZXRLZXk/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBsb2FkUGVybWlzc2lvbnM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KHBheWxvYWQ6IFQgfCBUW10sIG9wdGlvbnM/OiBQZXJtaXNzaW9uTG9hZGVyT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVQZXJtaXNzaW9uTG9hZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zPzogUGVybWlzc2lvbkxvYWRlck9wdGlvbnMpOiBpbXBvcnQoXCIjc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci50c1wiKS5Mb2FkZXI8VD47XG5leHBvcnQge307XG4iLCJpbnRlcmZhY2UgVXNlckxvYWRlck9wdGlvbnMge1xuICAgIGlkS2V5Pzogc3RyaW5nO1xuICAgIHRhcmdldEtleT86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxvYWRVc2VyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihlbnRpdGllczogVFtdLCBvcHRpb25zPzogVXNlckxvYWRlck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlVXNlckxvYWRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9ucz86IFVzZXJMb2FkZXJPcHRpb25zKTogaW1wb3J0KFwiI3NlcnZlci91dGlscy9kZWZpbmVMb2FkZXIudHNcIikuTG9hZGVyPFQ+O1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Ecml2ZUNvbmZpZ0VudGl0eS50cyc7XG5kZWNsYXJlIGNvbnN0IERyaXZlQ29uZmlnX2Jhc2U6IHR5cGVvZiBCYXNlICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBfX2lzQ29uZmlnTW9kZWw6IGJvb2xlYW47XG4gICAgc2VyaWFsaXplPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIHJvdzogYW55KTogUHJvbWlzZTxUPjtcbiAgICBsaXN0PFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBQcm9taXNlPFRbXT47XG4gICAgZmluZDxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD47XG4gICAgZmluZE9yRmFpbDxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTxUPjtcbiAgICBjcmVhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaXRlbTogVCAmIHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZywgZGF0YTogVCk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlT3JDcmVhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPik6IFByb21pc2U8dm9pZD47XG4gICAgZGVzdHJveTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZUNvbmZpZyBleHRlbmRzIERyaXZlQ29uZmlnX2Jhc2Uge1xuICAgIHN0YXRpYyBzZXJpYWxpemU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgcm93OiBhbnkpOiBQcm9taXNlPFQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9GaWxlRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgRHJpdmVVcmxPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRHJpdmVDb250cmFjdC50cyc7XG5pbnRlcmZhY2UgVVJMQ2FjaGUge1xuICAgIHVybDogc3RyaW5nO1xuICAgIGV4cGlyZXM6IG51bWJlcjtcbn1cbmRlY2xhcmUgY29uc3QgRmlsZV9iYXNlOiB0eXBlb2YgQmFzZSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBsaXN0ZW5lcnM6IGltcG9ydChcIiNzaGFyZWQvbWl4aW5zL0hvb2tzTWl4aW4udHNcIikuTGlzdGVuZXJbXTtcbiAgICAgICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIGVtaXRBc3luYyhldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBkZXN0cm95KCk6IFByb21pc2U8dm9pZD47XG4gICAgICAgIHNvZnREZWxldGUoKTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xuICAgIF9fbW9kZWw6IHtcbiAgICAgICAgdGFibGU6IFwiZmlsZXNcIjtcbiAgICAgICAgcHJpbWFyeUtleToga2V5b2YgaW1wb3J0KFwiLi4vaW5kZXgudHNcIikuRmlsZVRhYmxlO1xuICAgIH07XG4gICAgc2VyaWFsaXplPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCByb3c6IGFueSk6IFByb21pc2U8VD47XG4gICAgc2VsZWN0KCk6IGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RRdWVyeUJ1aWxkZXI8aW1wb3J0KFwiLi4vaW5kZXgudHNcIikuRGF0YWJhc2VDb250cmFjdCwgXCJmaWxlc1wiLCBhbnk+O1xuICAgIHBhZ2luYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbFBhZ2luYXRlT3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxpbXBvcnQoXCIuLi8uLi9zaGFyZWQvaW5kZXgudHNcIikuUGFnaW5hdGlvbkVudGl0eTxUPj47XG4gICAgbGlzdDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxMaXN0T3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxUW10+O1xuICAgIGZpbmRPbmU8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRmluZE9wdGlvbnM8XCJmaWxlc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgZmluZE9uZU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxGaW5kT3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxUPjtcbiAgICBmaW5kPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55KTogUHJvbWlzZTxUIHwgbnVsbD47XG4gICAgZmluZE9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIGltcG9ydChcIi4uL2luZGV4LnRzXCIpLkZpbGVUYWJsZSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5T3JGYWlsPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIGltcG9ydChcIi4uL2luZGV4LnRzXCIpLkZpbGVUYWJsZSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZXhpc3RzPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbExpc3RPcHRpb25zPFwiZmlsZXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIGNvdW50PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbENvdW50T3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGNyZWF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgcGF5bG9hZDogb2JqZWN0ICYge1xuICAgICAgICBkcml2ZTogc3RyaW5nO1xuICAgICAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgICAgICBjbGllbnRfbmFtZTogc3RyaW5nO1xuICAgICAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgICAgIHB1YmxpYzogYm9vbGVhbjtcbiAgICB9ICYge1xuICAgICAgICBpZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgY3JlYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXBkYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlZF9hdD86IHN0cmluZyB8IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgfSk6IFByb21pc2U8VD47XG4gICAgY3JlYXRlTWFueTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgdmFsdWVzOiAob2JqZWN0ICYge1xuICAgICAgICBkcml2ZTogc3RyaW5nO1xuICAgICAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgICAgICBjbGllbnRfbmFtZTogc3RyaW5nO1xuICAgICAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBwdXJwb3NlOiBzdHJpbmc7XG4gICAgICAgIHB1YmxpYzogYm9vbGVhbjtcbiAgICB9ICYge1xuICAgICAgICBpZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgY3JlYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXBkYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlZF9hdD86IHN0cmluZyB8IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgfSlbXSk6IFByb21pc2U8VFtdPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxVcGRhdGVPcHRpb25zPFwiZmlsZXNcIj4pOiBQcm9taXNlPFQ+O1xuICAgIHVwZGF0ZUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnksIHZhbHVlczoge1xuICAgICAgICBpZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlZF9hdD86IHN0cmluZyB8IERhdGUgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgICBkcml2ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbWltZXR5cGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsaWVudF9uYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBmaWxlbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcHVycG9zZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgcHVibGljPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICB9LCBvcHRpb25zPzoge1xuICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8VD47XG4gICAgZGVzdHJveTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxEZXN0cm95T3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPjtcbiAgICBmaXJzdE9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvOiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRmlyc3RPckNyZWF0ZU9wdGlvbnM8XCJmaWxlc1wiPik6IFQ7XG4gICAgdXBkYXRlT3JDcmVhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgbzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbFVwZGF0ZU9yQ3JlYXRlT3B0aW9uczxcImZpbGVzXCI+KTogVDtcbiAgICBkZXN0cm95QnlJZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8dm9pZD47XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBsb2FkPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBlbnRpdGllczogVCB8IFRbXSwgbmFtZXM6IFwibWV0YXNcIiB8IFwibWV0YXNcIltdKTogUHJvbWlzZTx2b2lkPjtcbn0gJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgZ2V0PFQgPSBhbnk+KG5hbWU6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogVCk6IFByb21pc2U8VD47XG4gICAgICAgIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZSBleHRlbmRzIEZpbGVfYmFzZSB7XG4gICAgc3RhdGljIGNhY2hlOiBNYXA8c3RyaW5nLCBVUkxDYWNoZT47XG4gICAgc3RhdGljIGhhcyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICBzdGF0aWMgZmluZEJ5RmlsZW5hbWUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RmlsZSB8IHVuZGVmaW5lZD47XG4gICAgcmVhZFN0cmVhbSgpOiBQcm9taXNlPE5vZGVKUy5SZWFkYWJsZVN0cmVhbT47XG4gICAgcmVhZCgpOiBQcm9taXNlPFVpbnQ4QXJyYXk8QXJyYXlCdWZmZXJMaWtlPj47XG4gICAgbG9hZFVybChvcHRpb25zPzogRHJpdmVVcmxPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzdGF0aWMgbG9hZFVybHMoaXRlbXM6IEZpbGVbXSwgb3B0aW9ucz86IERyaXZlVXJsT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgc3RhdGljIGxvYWRNZXRhcyhpdGVtczogRmlsZVtdKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGVGcm9tRHJpdmUoKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBCYXNlTWV0YSBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0ZpbGVNZXRhRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgRmlsZU1ldGFfYmFzZTogdHlwZW9mIEJhc2VNZXRhICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIHNhdmUoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBzb2Z0RGVsZXRlKCk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbiAgICBfX21vZGVsOiB7XG4gICAgICAgIHRhYmxlOiBcImZpbGVfbWV0YXNcIjtcbiAgICAgICAgcHJpbWFyeUtleToga2V5b2YgaW1wb3J0KFwiLi5cIikuRmlsZU1ldGFUYWJsZTtcbiAgICB9O1xuICAgIHNlcmlhbGl6ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgcm93OiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIHNlbGVjdCgpOiBpbXBvcnQoXCJreXNlbHlcIikuU2VsZWN0UXVlcnlCdWlsZGVyPGltcG9ydChcIi4uXCIpLkRhdGFiYXNlQ29udHJhY3QsIFwiZmlsZV9tZXRhc1wiLCBhbnk+O1xuICAgIHBhZ2luYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbFBhZ2luYXRlT3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPGltcG9ydChcIi4uLy4uL3NoYXJlZFwiKS5QYWdpbmF0aW9uRW50aXR5PFQ+PjtcbiAgICBsaXN0PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbExpc3RPcHRpb25zPFwiZmlsZV9tZXRhc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VFtdPjtcbiAgICBmaW5kT25lPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbEZpbmRPcHRpb25zPFwiZmlsZV9tZXRhc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD47XG4gICAgZmluZE9uZU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxGaW5kT3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+O1xuICAgIGZpbmQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnkpOiBQcm9taXNlPFQgfCBudWxsPjtcbiAgICBmaW5kT3JGYWlsPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55KTogUHJvbWlzZTxUPjtcbiAgICBmaW5kQnk8VD4odGhpczogbmV3ICgpID0+IFQsIGNvbHVtbjoga2V5b2YgaW1wb3J0KFwiLi5cIikuRmlsZU1ldGFUYWJsZSwgdmFsdWU6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5T3JGYWlsPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIGltcG9ydChcIi4uXCIpLkZpbGVNZXRhVGFibGUsIHZhbHVlOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGV4aXN0czxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxMaXN0T3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIGNvdW50PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbENvdW50T3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPG51bWJlcj47XG4gICAgY3JlYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBwYXlsb2FkOiBvYmplY3QgJiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZmlsZV9pZDogbnVtYmVyO1xuICAgIH0gJiB7XG4gICAgICAgIGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICB2YWx1ZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyZWF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHVwZGF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZWRfYXQ/OiBzdHJpbmcgfCBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIH0pOiBQcm9taXNlPFQ+O1xuICAgIGNyZWF0ZU1hbnk8VD4odGhpczogbmV3ICgpID0+IFQsIHZhbHVlczogKG9iamVjdCAmIHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICBmaWxlX2lkOiBudW1iZXI7XG4gICAgfSAmIHtcbiAgICAgICAgaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIHZhbHVlPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgY3JlYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgdXBkYXRlZF9hdD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZGVsZXRlZF9hdD86IHN0cmluZyB8IERhdGUgfCB1bmRlZmluZWQ7XG4gICAgfSlbXSk6IFByb21pc2U8VFtdPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxVcGRhdGVPcHRpb25zPFwiZmlsZV9tZXRhc1wiPik6IFByb21pc2U8VD47XG4gICAgdXBkYXRlQnlJZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSwgdmFsdWVzOiB7XG4gICAgICAgIGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICB2YWx1ZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZWRfYXQ/OiBzdHJpbmcgfCBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZmlsZV9pZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICB9LCBvcHRpb25zPzoge1xuICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgfSB8IHVuZGVmaW5lZCk6IFByb21pc2U8VD47XG4gICAgZGVzdHJveTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxEZXN0cm95T3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGZpcnN0T3JDcmVhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxGaXJzdE9yQ3JlYXRlT3B0aW9uczxcImZpbGVfbWV0YXNcIj4pOiBUO1xuICAgIHVwZGF0ZU9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxVcGRhdGVPckNyZWF0ZU9wdGlvbnM8XCJmaWxlX21ldGFzXCI+KTogVDtcbiAgICBkZXN0cm95QnlJZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8dm9pZD47XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZU1ldGEgZXh0ZW5kcyBGaWxlTWV0YV9iYXNlIHtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IEdpdEdhdGV3YXkgfSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0dpdEdhdGV3YXkudHMnO1xuaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVFbnRpdHkudHMnO1xuaW1wb3J0IHNoZWxsIGZyb20gJyNzZXJ2ZXIvZmFjYWRlcy9zaGVsbC50cyc7XG5kZWNsYXJlIGNvbnN0IE1vZHVsZV9iYXNlOiB0eXBlb2YgQmFzZTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vZHVsZSBleHRlbmRzIE1vZHVsZV9iYXNlIHtcbiAgICBnZXQgZ2l0KCk6IEdpdEdhdGV3YXk7XG4gICAgbWFrZVBhdGgoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICAgIHN0YXRpY1BhdGgoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICAgIGNvbW1hbmQ6IHR5cGVvZiBzaGVsbC5jb21tYW5kO1xuICAgIGxvYWQoKTogdm9pZDtcbiAgICBmaW5kQ2xpZW50RW50cnlwb2ludEZpbGVuYW1lKGNvbnRleHQ/OiAnZGV2JyB8ICdub2RlJyB8ICdicm93c2VyJyk6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgY29uZmlnIGZyb20gJyNzZXJ2ZXIvZmFjYWRlcy9jb25maWcudHMnO1xuaW1wb3J0IHsgR2l0R2F0ZXdheSB9IGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvR2l0R2F0ZXdheS50cyc7XG5pbXBvcnQgR2l0QnJhbmNoUmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9HaXRCcmFuY2hSZXBvc2l0b3J5LnRzJztcbmltcG9ydCBHaXRDb21taXRSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0dpdENvbW1pdFJlcG9zaXRvcnkudHMnO1xuaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9QbHVnaW5FbnRpdHkudHMnO1xuZGVjbGFyZSBjb25zdCBQbHVnaW5FbnRyeUVudGl0eV9iYXNlOiB0eXBlb2YgQmFzZTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsdWdpbkVudHJ5RW50aXR5IGV4dGVuZHMgUGx1Z2luRW50cnlFbnRpdHlfYmFzZSB7XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgbWFrZVBhdGgoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICAgIHNldDogdHlwZW9mIGNvbmZpZy5zZXQ7XG4gICAgZ2V0OiB0eXBlb2YgY29uZmlnLmdldDtcbiAgICBnZXQgZ2l0KCk6IEdpdEdhdGV3YXk7XG4gICAgZ2V0IGNvbW1pdHMoKTogR2l0Q29tbWl0UmVwb3NpdG9yeTtcbiAgICBnZXQgYnJhbmNoZXMoKTogR2l0QnJhbmNoUmVwb3NpdG9yeTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBQbHVnaW5FbnRyeUVudGl0eSBmcm9tICcuL1BsdWdpbkVudHJ5RW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgUm91dGVyRXZlbnRzIH0gZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJTZXJ2aWNlLnRzJztcbmludGVyZmFjZSBBZGRBcGlGb2xkZXJPcHRpb25zIHtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRpdHkgZXh0ZW5kcyBQbHVnaW5FbnRyeUVudGl0eSB7XG4gICAgYXBpRm9sZGVyczogTWFwPHN0cmluZywgQWRkQXBpRm9sZGVyT3B0aW9ucz47XG4gICAgYXBpRGlyZWN0b3JpZXM6IFNldDxzdHJpbmc+O1xuICAgIGNvbnN0cnVjdG9yKCk7XG4gICAgc3RhdGljUGF0aCguLi5wYXJ0czogc3RyaW5nW10pOiBzdHJpbmc7XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIG9uUm91dGVyUmVnaXN0ZXJlZChjdHg6IFJvdXRlckV2ZW50c1sncm91dGVyOnJlZ2lzdGVyZWQnXSk6IFByb21pc2U8dm9pZD47XG4gICAgYWRkQXBpRm9sZGVyKGRpcmVjdG9yeTogc3RyaW5nLCBvcHRpb25zPzogQWRkQXBpRm9sZGVyT3B0aW9ucyk6IHZvaWQ7XG4gICAgYWRkUm91dGVyRm9sZGVyKGRpcmVjdG9yeTogc3RyaW5nKTogdm9pZDtcbiAgICBzdGF0aWMgZnJvbVBsdWdpbkRpc2NvdmVyRW50aXR5PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBlbnRpdHk6IFBsdWdpbkVudHJ5RW50aXR5KTogVDtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgTGlzdE9wdGlvbnMgfSBmcm9tICcuL2xpc3QudHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBleGlzdHM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgTGlzdE9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8Ym9vbGVhbj47XG4iLCJpbXBvcnQgeyBDcmVhdGVUYWJsZUJ1aWxkZXIgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdGFibGUgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbXBvcnQgZGIgZnJvbSAnI3NlcnZlci9mYWNhZGVzL2RhdGFiYXNlLnRzJztcbnR5cGUgV2hlcmVDYXBhYmxlPFFCPiA9IHtcbiAgICB3aGVyZTogKC4uLmFyZ3M6IGFueVtdKSA9PiBRQjtcbn07XG50eXBlIFVwZGF0ZUZyb208VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFJldHVyblR5cGU8dHlwZW9mIGRiLnVwZGF0ZVRhYmxlPFQ+PjtcbmV4cG9ydCBpbnRlcmZhY2UgU29mdERlbGV0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiB7XG4gICAgc2VyaWFsaXplPzogKHJvdzogU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT4pID0+IGFueTtcbiAgICBxdWVyeTogKHFiOiBVcGRhdGVGcm9tPFQ+KSA9PiBVcGRhdGVGcm9tPFQ+O1xufVxuZXhwb3J0IHR5cGUgU29mdERlbGV0ZVJlc3VsdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBTb2Z0RGVsZXRlT3B0aW9uczxUPiB8IHVuZGVmaW5lZD4gPSBPIGV4dGVuZHMgdW5kZWZpbmVkID8gU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT5bXSA6IE8gZXh0ZW5kcyB7XG4gICAgc2VyaWFsaXplOiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gaW5mZXIgUjtcbn0gPyBSW10gOiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPltdO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2hlcmVOb3REZWxldGVkPFFCIGV4dGVuZHMgV2hlcmVDYXBhYmxlPFFCPj4ocWI6IFFCKTogUUI7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bmRlbGV0ZWQocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55Pik6IGltcG9ydChcImt5c2VseVwiKS5FeHByZXNzaW9uV3JhcHBlcjxhbnksIGFueSwgaW1wb3J0KFwia3lzZWx5XCIpLlNxbEJvb2w+O1xuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIHVuZGVsZXRlZCB7XG4gICAgdmFyIGNvbHVtbjogKGNvbDogc3RyaW5nKSA9PiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gaW1wb3J0KFwia3lzZWx5XCIpLkV4cHJlc3Npb25XcmFwcGVyPGFueSwgYW55LCBpbXBvcnQoXCJreXNlbHlcIikuU3FsQm9vbD47XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWxldGVkOiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gaW1wb3J0KFwia3lzZWx5XCIpLkV4cHJlc3Npb25XcmFwcGVyPGFueSwgYW55LCBpbXBvcnQoXCJreXNlbHlcIikuU3FsQm9vbD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhZGRTb2Z0RGVsZXRlQ29sdW1uOiAoY3RiOiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+KSA9PiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc29mdERlbGV0ZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBTb2Z0RGVsZXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTb2Z0RGVsZXRlUmVzdWx0PFQsIE8+PjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENyZWF0ZVRhYmxlQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhZGRDcmVhdGVkQ29sdW1uOiAoY3RiOiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+KSA9PiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgYWRkVXBkYXRlZENvbHVtbjogKGN0YjogQ3JlYXRlVGFibGVCdWlsZGVyPGFueSwgYW55PikgPT4gQ3JlYXRlVGFibGVCdWlsZGVyPGFueSwgYW55PjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGFkZFRpbWVzdGFtcENvbHVtbnM6IChjdGI6IENyZWF0ZVRhYmxlQnVpbGRlcjxhbnksIGFueT4pID0+IENyZWF0ZVRhYmxlQnVpbGRlcjxhbnksIGFueT47XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCYXNlUmVsYXRpb24ge1xuICAgIGxvYWQoZW50aXRpZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBCYXNlUmVsYXRpb24gZnJvbSAnLi9CYXNlUmVsYXRpb24udHMnO1xuaW50ZXJmYWNlIEJlbG9uZ3NUb09wdGlvbnMge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZTogc3RyaW5nO1xuICAgIHRhcmdldEtleTogc3RyaW5nO1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgc2VyaWFsaXplPzogKHJvdzogYW55KSA9PiBhbnk7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZWxvbmdzVG8gZXh0ZW5kcyBCYXNlUmVsYXRpb24ge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZTogc3RyaW5nO1xuICAgIHRhcmdldEtleTogc3RyaW5nO1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgc2VyaWFsaXplOiAocm93OiBhbnkpID0+IGFueTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCZWxvbmdzVG9PcHRpb25zKTtcbiAgICBsb2FkKGVudGl0aWVzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmVsb25nc1RvIGZyb20gJy4vQmVsb25nc1RvUmVsYXRpb24udHMnO1xuaW1wb3J0IEJhc2VSZWxhdGlvbiBmcm9tICcuL0Jhc2VSZWxhdGlvbi50cyc7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBMb2FkRmlsZU1ldGFzIGV4dGVuZHMgQmFzZVJlbGF0aW9uIHtcbiAgICBmaWxlS2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihmaWxlS2V5Pzogc3RyaW5nLCBwcm9wZXJ0eT86IHN0cmluZyk7XG4gICAgbG9hZChlbnRpdGllczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTG9hZEZpbGVVcmwgZXh0ZW5kcyBCYXNlUmVsYXRpb24ge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGZpbGVLZXk/OiBzdHJpbmcsIHByb3BlcnR5Pzogc3RyaW5nKTtcbiAgICBsb2FkKGVudGl0aWVzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZWxvbmdzVG9GaWxlIGV4dGVuZHMgQmVsb25nc1RvIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eT86IHN0cmluZywgdGFyZ2V0S2V5Pzogc3RyaW5nKTtcbiAgICB1cmwocHJvcGVydHk/OiBzdHJpbmcpOiBMb2FkRmlsZVVybDtcbiAgICBtZXRhcyhwcm9wZXJ0eT86IHN0cmluZyk6IExvYWRGaWxlTWV0YXM7XG59XG4iLCJpbXBvcnQgQmVsb25nc1RvIGZyb20gJy4vQmVsb25nc1RvUmVsYXRpb24udHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmVsb25nc1RvVXNlciBleHRlbmRzIEJlbG9uZ3NUbyB7XG4gICAgY29uc3RydWN0b3IoKTtcbn1cbiIsImltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuaW50ZXJmYWNlIEhhc01hbnlPcHRpb25zIHtcbiAgICB0YWJsZToga2V5b2YgRGF0YWJhc2U7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZToga2V5b2YgRGF0YWJhc2U7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU/OiAocm93OiBhbnkpID0+IGFueTtcbiAgICBhZnRlcj86IChyb3dzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFzTWFueSB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBzdHJpbmc7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU6IChyb3c6IGFueSkgPT4gYW55O1xuICAgIGFmdGVyOiAocm93czogYW55W10pID0+IFByb21pc2U8YW55PjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBIYXNNYW55T3B0aW9ucyk7XG4gICAgbG9hZChlbnRpdGllczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbnRlcmZhY2UgSGFzTWV0YXNPcHRpb25zIHtcbiAgICB0YWJsZToga2V5b2YgRGF0YWJhc2U7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZToga2V5b2YgRGF0YWJhc2U7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhhc01ldGFzIHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHRhYmxlS2V5OiBzdHJpbmc7XG4gICAgdGFyZ2V0VGFibGU6IHN0cmluZztcbiAgICB0YXJnZXRLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEhhc01ldGFzT3B0aW9ucyk7XG4gICAgbG9hZChlbnRpdGllczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2VSZWxhdGlvbiBmcm9tICcuL0Jhc2VSZWxhdGlvbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmludGVyZmFjZSBIYXNNYW55VGhyb3VnaE9wdGlvbnMge1xuICAgIHRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICB0YXJnZXRLZXk6IHN0cmluZztcbiAgICBwaXZvdFRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICBwaXZvdFNvdXJjZUtleTogc3RyaW5nO1xuICAgIHBpdm90VGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU/OiAocm93OiBhbnkpID0+IGFueTtcbiAgICBhZnRlcj86IChyb3dzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFzTWFueVRocm91Z2ggZXh0ZW5kcyBCYXNlUmVsYXRpb24ge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZTogc3RyaW5nO1xuICAgIHRhcmdldEtleTogc3RyaW5nO1xuICAgIHBpdm90VGFibGU6IHN0cmluZztcbiAgICBwaXZvdFNvdXJjZUtleTogc3RyaW5nO1xuICAgIHBpdm90VGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU6IChyb3c6IGFueSkgPT4gYW55O1xuICAgIGFmdGVyOiAocm93czogYW55W10pID0+IFByb21pc2U8YW55PjtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBIYXNNYW55VGhyb3VnaE9wdGlvbnMpO1xuICAgIGxvYWQoZW50aXRpZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgVG9rZW4sIFVzZXJFbnRpdHkgfSBmcm9tICdAc2lkZWtpY2stY29kZXIvemVuaXRoLWtpdC9zaGFyZWQnO1xuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvUm91dGVyQ29udHJhY3QudHMnO1xuZXhwb3J0IHR5cGUgQXV0aE1pZGRsZXdhcmVDb250ZXh0ID0ge1xuICAgIHVzZXI6IFVzZXJFbnRpdHk7XG4gICAgdG9rZW46IFRva2VuO1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dGhNaWRkbGV3YXJlIGltcGxlbWVudHMgTWlkZGxld2FyZSB7XG4gICAgaGFuZGxlKGN0eDogYW55KTogUHJvbWlzZTxBdXRoTWlkZGxld2FyZUNvbnRleHQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gJ0BzaWRla2ljay1jb2Rlci96ZW5pdGgta2l0L3NoYXJlZCc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG5pbXBvcnQgdHlwZSBVc2VyIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvVXNlckVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvSHR0cENvbnRleHRDb250cmFjdC50cyc7XG5leHBvcnQgdHlwZSBBdXRoU2lsZW5jZU1pZGRsZXdhcmVDb250ZXh0ID0ge1xuICAgIHVzZXI/OiBVc2VyO1xuICAgIHRva2VuPzogVG9rZW47XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aFNpbGVuY2VNaWRkbGV3YXJlIGltcGxlbWVudHMgTWlkZGxld2FyZSB7XG4gICAgaGFuZGxlKGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPEF1dGhTaWxlbmNlTWlkZGxld2FyZUNvbnRleHQ+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBBdXRoU2lsZW5jZU1pZGRsZXdhcmVDb250ZXh0IH0gZnJvbSAnLi9BdXRoU2lsZW5jZU1pZGRsZXdhcmUudHMnO1xuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlLCBNaWRkbGV3YXJlSGFuZGxlUmVzdWx0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvUm91dGVyQ29udHJhY3QudHMnO1xuaW1wb3J0IEFjbCBmcm9tICcjc2VydmVyL2VudGl0aWVzL0FjbEVudGl0eS50cyc7XG5leHBvcnQgdHlwZSBBdXRob3JpemF0aW9uQ29udGV4dCA9IE1pZGRsZXdhcmVIYW5kbGVSZXN1bHQ8W0F1dGhvcml6YXRpb25NaWRkbGV3YXJlXT47XG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6ZVBlcm1pc3Npb25QYXlsb2FkIHtcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICByZXNvdXJjZTogc3RyaW5nO1xuICAgIGNvbmRpdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQXV0aG9yaXplUGVybWlzc2lvbiBpbXBsZW1lbnRzIE1pZGRsZXdhcmUge1xuICAgIHByaXZhdGUgcGVybWlzc2lvbnM7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZDogQXV0aG9yaXplUGVybWlzc2lvblBheWxvYWQgfCBBdXRob3JpemVQZXJtaXNzaW9uUGF5bG9hZFtdKTtcbiAgICBoYW5kbGUoY3R4OiBBdXRob3JpemF0aW9uQ29udGV4dCk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdXRob3JpemF0aW9uTWlkZGxld2FyZSBpbXBsZW1lbnRzIE1pZGRsZXdhcmUge1xuICAgIGhhbmRsZShjdHg6IEF1dGhTaWxlbmNlTWlkZGxld2FyZUNvbnRleHQpOiBQcm9taXNlPHtcbiAgICAgICAgYWNsOiBBY2w7XG4gICAgfT47XG4gICAgc3RhdGljIGNyZWF0ZShwYXlsb2FkOiBBdXRob3JpemVQZXJtaXNzaW9uUGF5bG9hZCB8IEF1dGhvcml6ZVBlcm1pc3Npb25QYXlsb2FkW10pOiBBdXRob3JpemVQZXJtaXNzaW9uO1xufVxuIiwiZGVjbGFyZSBtb2R1bGUgJ2t5c2VseScge1xuICAgIGludGVyZmFjZSBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIgZXh0ZW5kcyBzdHJpbmcsIEMgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcj4ge1xuICAgICAgICBhZGRJZENvbHVtbjxDTiBleHRlbmRzIHN0cmluZyA9ICdpZCc+KGNvbD86IENOKTogQ3JlYXRlVGFibGVCdWlsZGVyPFRCLCBDIHwgQ04+O1xuICAgIH1cbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IHR5cGUgQ29sdW1uVHlwZSB9IGZyb20gJ2t5c2VseSc7XG5leHBvcnQgaW50ZXJmYWNlIFNvZnREZWxldGVUYWJsZSB7XG4gICAgZGVsZXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlIHwgbnVsbCwgbmV2ZXIgfCBudWxsIHwgc3RyaW5nIHwgbnVsbD47XG59XG5kZWNsYXJlIG1vZHVsZSAna3lzZWx5JyB7XG4gICAgaW50ZXJmYWNlIENyZWF0ZVRhYmxlQnVpbGRlcjxUQiBleHRlbmRzIHN0cmluZywgQyBleHRlbmRzIHN0cmluZyA9IG5ldmVyPiB7XG4gICAgICAgIGFkZFNvZnREZWxldGVDb2x1bW4oKTogQ3JlYXRlVGFibGVCdWlsZGVyPFRCLCBDIHwgJ2RlbGV0ZWRfYXQnPjtcbiAgICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbHVtblR5cGUgfSBmcm9tICdreXNlbHknO1xuZXhwb3J0IGludGVyZmFjZSBUaW1lc3RhbXBUYWJsZSB7XG4gICAgY3JlYXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlLCBzdHJpbmcgfCB1bmRlZmluZWQsIG5ldmVyPjtcbiAgICB1cGRhdGVkX2F0OiBDb2x1bW5UeXBlPERhdGUsIHN0cmluZyB8IHVuZGVmaW5lZCwgRGF0ZSB8IHN0cmluZyB8IFJldHVyblR5cGU8dHlwZW9mIG5vdz4+O1xufVxuZGVjbGFyZSBtb2R1bGUgJ2t5c2VseScge1xuICAgIGludGVyZmFjZSBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIgZXh0ZW5kcyBzdHJpbmcsIEMgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcj4ge1xuICAgICAgICBhZGRUaW1lc3RhbXBDb2x1bW5zKCk6IENyZWF0ZVRhYmxlQnVpbGRlcjxUQiwgQyB8ICdjcmVhdGVkX2F0JyB8ICd1cGRhdGVkX2F0Jz47XG4gICAgICAgIGFkZENyZWF0ZWRDb2x1bW4oKTogQ3JlYXRlVGFibGVCdWlsZGVyPFRCLCBDIHwgJ2NyZWF0ZWRfYXQnPjtcbiAgICAgICAgYWRkVXBkYXRlZENvbHVtbigpOiBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIsIEMgfCAndXBkYXRlZF9hdCc+O1xuICAgIH1cbn1cbmRlY2xhcmUgY29uc3Qgbm93OiAoKSA9PiBpbXBvcnQoXCJreXNlbHlcIikuUmF3QnVpbGRlcjxzdHJpbmc+O1xuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gYmFzZVBhdGgoLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmc7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBzdG9yYWdlUGF0aCguLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHJlbGF0aXZlVG9CYXNlUGF0aCguLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHRtcFBhdGgoLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmc7XG4iLCJpbXBvcnQgdHlwZSB7IExvYWRlclJlY29yZCB9IGZyb20gJy4vZGVmaW5lTG9hZGVyLnRzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZUxvYWRlckZhY3Rvcnk8RSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBSIGV4dGVuZHMgTG9hZGVyUmVjb3JkPEU+ID0gTG9hZGVyUmVjb3JkPEU+Pihsb2FkZXJzOiBSKToge1xuICAgIGtleXM6IChrZXlvZiBSKVtdO1xuICAgIGxvYWRlcnM6IFI7XG4gICAgbG9hZDogKGVudGl0aWVzOiBFIHwgRVtdLCBuYW1lczoga2V5b2YgUiB8IChrZXlvZiBSKVtdKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcbiIsImV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGN1aWQoKTogc3RyaW5nO1xuIiwiaW1wb3J0IHR5cGUgeyBIdHRwQ29udGV4dCB9IGZyb20gXCIjc2VydmVyL2NvbnRyYWN0cy9IdHRwQ29udGV4dENvbnRyYWN0LnRzXCI7XG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXIge1xuICAgIChjdHg6IEh0dHBDb250ZXh0KTogUHJvbWlzZTxhbnk+IHwgKCgpID0+IGFueSk7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWZpbmVIYW5kbGVyKGhhbmRsZXI6IEhhbmRsZXIpOiBIYW5kbGVyO1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZ2VuZXJhdGVJbmRleEZpbGUob3B0aW9uczogYW55KTogdm9pZDtcbiIsImludGVyZmFjZSBPcHRpb25zIHtcbiAgICBjYWNoZT86IGJvb2xlYW47XG4gICAgb25CZWZvcmVJbXBvcnQ/OiAoY3R4OiB7XG4gICAgICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgb25BZnRlckltcG9ydD86IChjdHg6IHtcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgbW9kdWxlOiBhbnk7XG4gICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgb25FcnJvcj86IChjdHg6IHtcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgZXJyb3I6IEVycm9yO1xuICAgIH0pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIGV4Y2x1ZGU/OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGltcG9ydEZpbGVzKGZpbGVzOiBzdHJpbmdbXSwgb3B0aW9ucz86IE9wdGlvbnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW1wb3J0R2xvYihwYXR0ZXJuOiBzdHJpbmcsIG9wdGlvbnM/OiBPcHRpb25zKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGltcG9ydEFsbChkaXJlY3Rvcnk6IHN0cmluZywgb3B0aW9ucz86IE9wdGlvbnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW1wb3J0T25lKGZpbGVuYW1lczogc3RyaW5nW10pOiBQcm9taXNlPGFueT47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBTyxjQUFVO0NBQUE7T0FBWSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM3QixJQUFXLGdCQUFNO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFD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QUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ1AxQixJQUFBLGdCQUFvQjtDQUFDO09BQUE7RUFBQTtFQUFjO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0VuQyxJQUFXLGNBQWM7Q0FBQztFQUFLLE1BQUcsQ0FBRyxFQUFFO0NBQUU7RUFBQztFQUFJO0VBQUU7RUFBSztDQUFDOzs7O0FDQ3RELElBQUksa0JBQWtCO0NBQUM7T0FBVyxFQUFFO0NBQUMsRUFBQTtDQUFJO0FBQ3pDLElBQUEsZ0JBQVU7Q0FBQTtPQUFZLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ3RCLElBQVcsMEJBQW9CO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQy9CLElBQUkscUJBQW1CO0NBQUE7T0FBUTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNML0IsSUFBVyx1QkFBdUI7Q0FBQztPQUFFLENBQUEsNEJBQW1CLEVBQUEs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SSxnQkFBYztDQUFDO0VBQUcsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QixJQUFBLFdBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTEEsSUFBQSxtQkFBcUI7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFxQjtFQUFBO0VBQXFCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDL0QsSUFBSSxvQkFBb0I7Q0FBQztFQUFDLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksaUJBQWU7Q0FBQztPQUFVLENBQUEsa0JBQWtCO0NBQUE7RUFBQTtFQUFTO0VBQUc7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Q1RCxJQUFJLFlBQVk7Q0FBQztFQUFLLE1BQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLE9BQUk7Q0FBQTtPQUFZLENBQUEsVUFBVTtDQUFNO0VBQUM7RUFBRTtFQUFNO0VBQUc7RUFBQTtDQUFBOzs7O0FDQ2hELElBQUksa0JBQWtCO0NBQUM7RUFBRyxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxlQUFVO0NBQUk7T0FBVztFQUFDO0VBQU07RUFBWTtFQUFNO0VBQU07Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0M1RCxJQUFPLFlBQVU7Q0FBQTtPQUFVLENBQUEsV0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMzQixJQUFTLGFBQWE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdEIsSUFBSSxhQUFTO0NBQUE7T0FBVTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTnZCLElBQUEsb0JBQXFCO0NBQUE7T0FBQTtFQUFBO0VBQWtCO0VBQVE7RUFBVztDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDMUQsSUFBQSxvQkFBcUI7Q0FBQTtPQUFBO0VBQUEsR0FBaUI7RUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQXZDLElBQU8seUJBQVU7Q0FBQTtPQUF1QixDQUFBLFFBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3hDLElBQUksa0JBQWtCO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRnRCLElBQVcsWUFBWTtDQUFDO09BQUUsQ0FBQSxXQUFtQixFQUFBLFlBQVU7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdkQsSUFBTyxZQUFjO0NBQUE7T0FBYTtFQUFBLEVBQUE7RUFBa0IsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FwRCxJQUFBLGFBQWU7Q0FBQTtFQUFNLE1BQUE7RUFBQTtFQUFXLE9BQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQ2hDLElBQU8sdUJBQVU7Q0FBQTtPQUFxQixDQUFBLFlBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdEMsSUFBSSx1QkFBZTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNGbkIsSUFBTyxhQUFVO0NBQUE7T0FBVyxDQUFBLEdBQUEsWUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QixJQUFXLG1CQUFpQjtDQUFBO09BQUEsQ0FBQSxHQUFBLFlBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQUEsbUJBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsT0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FBLElBQUksU0FBUztDQUFBO09BQVE7RUFBQSxFQUFlO0VBQUcsRUFBZTtFQUFrQixFQUFVO0VBQWEsRUFBa0I7RUFBWSxFQUFBO0VBQTJCLEVBQVc7RUFBQyxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3BLLElBQUksZ0JBQXVCO0NBQUM7T0FBVyxDQUFBLFFBQUEsWUFBcUI7Q0FBRSxDQUFBLElBQUEsR0FBUTtDQUFDO0FBQ3ZFLElBQUksVUFBUztDQUFBO09BQWE7RUFBQTtFQUFRO0VBQVU7RUFBQTtFQUFlO0VBQWlCO0VBQVc7RUFBQTtFQUFhO0VBQVk7RUFBZSxPQUFHO0VBQWdCO0VBQVc7RUFBWTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Z6SyxJQUFBLGVBQVU7Q0FBQTtPQUFhO0VBQU87RUFBTTtFQUF3QjtFQUFDO0NBQUE7RUFBQTtFQUFXO0VBQUc7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzNFLElBQUksa0JBQWU7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIbkIsSUFBVyx5QkFBTztDQUFBO09BQUEsQ0FBQSxZQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNsQixJQUFBLGtCQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUEsU0FBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FBLElBQU8sa0JBQVU7Q0FBQTtPQUFnQixDQUFBLEdBQUEsWUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNqQyxJQUFXLHdCQUFpQjtDQUFBO09BQUEsQ0FBQSxHQUFBLFlBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQUEsZ0JBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsT0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDREEsSUFBQSx3QkFBVTtDQUFBO09BQXNCLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2hDLElBQUksZUFBWTtDQUFBO09BQU07RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE9BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0h0QixJQUFBLGtCQUFxQjtDQUFBO09BQUE7RUFBQTtFQUF1QjtFQUFNO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNHbEQsSUFBTyxrQ0FBVTtDQUFBO09BQWdDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNqRCxJQUFJLDJCQUFXO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0xmLElBQU8sYUFBVTtDQUFBO0VBQVksTUFBRyxDQUFHLEVBQUU7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNyQyxJQUFXLGtCQUFHO0NBQUE7T0FBQSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDZCxJQUFVLG9CQUFNO0NBQUE7T0FBQSxDQUFBLGlCQUFBLGdCQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2hCLElBQUksb0JBQWdCO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDcEIsSUFBSSxxQkFBYTtDQUFBO0VBQUEsU0FBQSxhQUFBLGFBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0hqQixJQUFPLDZCQUFVO0NBQUE7T0FBMkIsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUMsSUFBUyx1QkFBaUI7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxpQkFBZTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSG5CLElBQU8scUJBQVU7Q0FBQTtPQUFtQixDQUFBLEtBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3BDLElBQUksa0JBQVk7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0VoQixJQUFPLGtCQUFVO0NBQUE7T0FBZ0IsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDakMsSUFBUSxZQUFNO0NBQUE7T0FBQSxDQUFBLEtBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2QsSUFBSSxnQkFBaUI7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ3JCLElBQUEsa0JBQUE7Q0FBQTtPQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBTyx5QkFBb0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMzQixJQUFVLHdCQUFNO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDaEIsSUFBSSxrQkFBaUI7Q0FBQTtPQUFJO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDVHpCLElBQUEsTUFBTztDQUFBO09BQWMsQ0FBQSxRQUFJLFVBQVE7Q0FBUTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDekMsSUFBTyxVQUFVO0NBQUE7T0FBUSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDekIsSUFBVSxXQUFZO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDdEIsSUFBQSxjQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSEEsSUFBTyxXQUFVO0NBQUE7T0FBUyxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDMUIsSUFBSSxlQUFnQjtDQUFBO09BQUEsQ0FBQSxRQUFBLFNBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ3BCLElBQUEsYUFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFBLDJCQUEyQjtDQUFBO0VBQU8sTUFBUTtFQUFBO0VBQU87RUFBUztFQUFNO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNoRSxJQUFBLHlCQUE0QjtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUIsSUFBVyx5QkFBeUI7Q0FBQztFQUFBLE1BQVE7RUFBQTtFQUFhO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxRCxJQUFBLFlBQUE7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTkEsSUFBSSxjQUFjO0NBQUM7T0FBUyxFQUFJO0NBQUUsRUFBRTtDQUFBO0FBQ3BDLElBQUEsUUFBTztDQUFBO09BQWM7RUFBQTtFQUFNO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRTNCLElBQUEsZUFBVTtDQUFBO09BQW1CLEVBQUE7Q0FBQSxFQUFBO0NBQUE7QUFDN0IsSUFBSSxxQkFBWTtDQUFVO09BQUEsQ0FBQSxZQUFBLGFBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLGNBQVM7Q0FBQTtPQUFZLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUN6QixJQUFBLGVBQUE7Q0FBQTtPQUFBLENBQUEsZUFBQSxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBQSxxQkFBc0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QixJQUFJLGdCQUFlO0NBQUE7RUFBQSxHQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNSbkIsSUFBTyxpQkFBVTtDQUFBO09BQWUsQ0FBQSxRQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDaEMsSUFBUSx1QkFBb0I7Q0FBQTtPQUFBLENBQUEsZUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQUEsZ0JBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RBLElBQU8sYUFBVTtDQUFBO09BQVcsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQzVCLElBQVMsMEJBQU07Q0FBQTtPQUFBLENBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNmLElBQUEsa0JBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNBLElBQUEsbUJBQWlCO0NBQUE7T0FBQTtFQUFBO0VBQXdCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNKekMsSUFBTyxrQkFBVTtDQUFBO09BQWdCLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDakMsSUFBSSxlQUFZO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNFaEIsSUFBTyxlQUFVO0NBQUE7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QUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEMsSUFBSSxjQUFRO0NBQU87T0FBQTtFQUFBLFFBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxRQUFBO0VBQUEsUUFBQTtFQUFBO0VBQUEsUUFBQTtFQUFBLEtBQUE7RUFBQSxRQUFBO0VBQUEsUUFBQTtFQUFBLFFBQUE7RUFBQSxRQUFBO0VBQUE7RUFBQSxRQUFBO0VBQUEsUUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTm5CLElBQU8sMkJBQVU7Q0FBQTtPQUF5QixDQUFBLFlBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQzFDLElBQUksb0JBQWlCO0NBQUE7T0FBQTtFQUFBO0VBQUEsVUFBQTtFQUFBLFVBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtF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O0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNHcEIsSUFBSSxpQkFBcUI7Q0FBQTtPQUFPLEVBQUE7Q0FBQSxFQUFBO0NBQWM7QUFDOUMsSUFBVyx3QkFBa0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDN0IsSUFBQSw2QkFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBQSx3QkFBYztDQUFBO09BQUE7RUFBMEI7RUFBRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNQMUMsSUFBVyxjQUFjO0NBQUM7T0FBVztFQUFBO0VBQVc7RUFBTztFQUFhO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3BFLElBQUEsWUFBVTtDQUFBO09BQVEsRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ2xCLElBQUksY0FBVztDQUFBO0VBQU8sR0FBQSxVQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQ3RCLElBQUEsdUJBQXFCO0NBQUE7T0FBQTtFQUFBO0VBQTZCO0VBQXNCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0h4RSxJQUFBLGlCQUFVO0NBQUE7T0FBZSxDQUFBLE9BQUEsV0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDekIsSUFBVSxzQkFBTTtDQUFBO09BQUEsQ0FBQSxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2hCLElBQUksZUFBYTtDQUFBO09BQVU7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDNCLElBQUEsbUJBQXFCO0NBQUE7RUFBQSxTQUFpQixhQUFVO0VBQUE7RUFBTztFQUFhO0VBQVk7RUFBa0I7RUFBRztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDckcsSUFBTyw2QkFBVTtDQUFBO09BQTJCLENBQUEscUJBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUMsSUFBSSxpQkFBYztDQUFBO09BQVE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRjFCLElBQU8sNkJBQVU7Q0FBQTtPQUEyQixDQUFBLGFBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUMsSUFBSSxzQkFBVztDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEZixJQUFPLDZCQUFVO0NBQUE7T0FBMkIsQ0FBQSxhQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVDLElBQVMsdUJBQU07Q0FBQTtPQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDZixJQUFXLHNCQUFhO0NBQUE7T0FBQSxDQUFBLGdCQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN4QixJQUFBLHNCQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0hBLElBQU8sNkNBQVU7Q0FBQTtPQUEyQyxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUQsSUFBSSxpQ0FBc0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0QxQixJQUFPLG1DQUFVO0NBQUE7T0FBaUMsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDbEQsSUFBSSx1QkFBc0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0QxQixJQUFPLG1CQUFVO0NBQUE7RUFBaUIsU0FBVSxpQkFBbUIsYUFBRTtFQUFBO0VBQWtCO0VBQUs7RUFBVztFQUFhO0VBQVE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN4SCxJQUFJLCtCQUEyQjtDQUFBO0VBQVEsT0FBTyxTQUFB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RUFBTTtFQUFDO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuRSxJQUFPLE1BQVU7Q0FBQTtPQUFBLENBQUEsU0FBbUIsV0FBYztDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ2xELElBQUksbUJBQWtCO0NBQUE7RUFBVyxNQUFRO0VBQUM7RUFBUTtFQUFHO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3JELElBQUEscUJBQUE7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNUQSxJQUFPLHdCQUFVO0NBQUE7RUFBd0IsTUFBQTtFQUFBO0VBQWM7RUFBQTtFQUFVO0VBQVE7RUFBbUI7RUFBQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzdGLElBQVcsaUJBQVE7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEbkIsSUFBTyxjQUFVO0NBQUE7RUFBYyxNQUFBO0VBQUE7RUFBYztFQUFBO0VBQVU7RUFBUTtFQUFtQjtFQUFDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbkYsSUFBVyxPQUFPO0NBQUE7RUFBQSxHQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQWxCLElBQU8sa0JBQVU7Q0FBQTtFQUFrQixNQUFBO0VBQUE7RUFBYztFQUFVO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzNELElBQVcsaUJBQVE7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtF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O0VBQUEsTUFBUTtFQUFBO0VBQU07RUFBVTtFQUFPO0VBQXFCO0NBQUU7RUFBQztFQUFHO0VBQUE7RUFBUztFQUFFO0VBQUE7Q0FBQTtBQUM5RyxJQUFXLGNBQWM7Q0FBQztPQUFXO0VBQUE7RUFBVztFQUFPO0VBQWlCO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3hFLElBQUEsYUFBZTtDQUFBO0VBQVMsR0FBQSxPQUFVLFVBQU87RUFBQTtFQUFjO0VBQUE7RUFBaUI7RUFBTztFQUFhO0VBQU07RUFBUztFQUFVO0VBQU07RUFBUTtFQUFZO0VBQU87RUFBQTtFQUFNO0VBQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDdEJoSyxJQUFBLFdBQVU7Q0FBQTtPQUFTLENBQUEsUUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuQixJQUFJLFdBQUs7Q0FBQTtFQUFhLEdBQUcsT0FBRSxNQUFRO0VBQUk7RUFB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RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0Z0QixJQUFJLG9CQUFjO0NBQUE7T0FBQSxFQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNsQixJQUFJLFdBQWtCO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3RCLElBQUEsbUJBQUE7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDREEsSUFBSSxtQkFBbUI7Q0FBQztFQUFJLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QixJQUFJLGNBQUE7Q0FBZTtFQUFFLE1BQU87RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSzVCLElBQUksV0FBSTtDQUFBO09BQW1CLEVBQUM7Q0FBQSxDQUFBLElBQU8sR0FBQTtDQUFBO0FBQ25DLElBQUksWUFBWTtDQUFDO0VBQUMsTUFBUTtFQUFBO0VBQVE7RUFBaUM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxTQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbkUsSUFBSSxPQUFPO0NBQUM7T0FBTztFQUFBO0VBQVE7RUFBWTtFQUFRO0VBQU87RUFBUyxPQUFLO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNKcEUsSUFBSSxnQkFBQztDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLFNBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNMLElBQUksV0FBUztDQUFBO09BQUEsQ0FBQSxjQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7Ozs7QUNKYixJQUFBLGNBQWM7Q0FBQTtPQUFhLENBQUEsU0FBTztDQUFJLENBQUEsR0FBQTtDQUFBO0FBQ3RDLElBQUEsU0FBTztDQUFPO09BQU87RUFB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
1
+ import { i as printTable, n as TableColumn, r as printObject, t as ObjectOptions } from "./printTable-7dreX6wW.mjs";
2
+ import { n as CliEvents, r as CliService, t as CliCommand } from "./CliService-BN3FMadM.mjs";
3
+ import { _ as UserMetaTable, a as FileTable, c as OauthAccountTable, d as PermissionTable, f as RoleTable, g as UploadSessionTable, h as TokenTable, i as FileMetaTable, l as OauthTokenTable, m as TimestampTable, n as EmailTemplateMetaTable, o as JobTable, p as SoftDeleteTable, r as EmailTemplateTable, s as MigrationsTable, t as DatabaseContract, u as PermissionAssignmentTable, v as UserRoleTable, y as UserTable } from "./DatabaseContract-iR4kncmi.mjs";
4
+ import { n as DriveUploadUrlOptions, r as DriveUrlOptions, t as DriveContract } from "./DriveContract-CaFb_Tph.mjs";
5
+ import { t as CookieMapEntity } from "./CookieMapEntity-CJRqkyl9.mjs";
6
+ import { n as PageRequestContextEntityOptions, t as PageRequestContextEntity } from "./PageRequestContextEntity-B1nE9xel.mjs";
7
+ import { a as Pagination, i as PaginateOptions, n as DeleteManyOptions, r as FindManyOptions, t as DatabaseRepository } from "./DatabaseRepository-_gA6RkcH.mjs";
8
+ import { n as UserRepositoryEvents, r as UserRepositoryQueryOptions, t as UserRepository } from "./UserRepository-BkGla4Vr.mjs";
9
+ import { n as MigrationEntiyData, t as MigrationEntity } from "./MigrationEntity-B5VsB63u.mjs";
10
+ import { a as MigratorServiceEvents, i as MigratorService, n as Migration, o as MigratorServiceOptions, r as MigrationSource, t as ListFilters } from "./MigratorService-DHug6UBq.mjs";
11
+ import { n as RouterService, t as RouterEvents } from "./RouterService-DmiiZzf5.mjs";
12
+ import { t as Acl } from "./AclEntity-BltZiTsS.mjs";
13
+ import { n as Request, r as Response, t as HttpContext } from "./HttpContextContract-BS6VXi67.mjs";
14
+ import { a as Redirect, i as MiddlewareHandleResult, n as Handler, r as Middleware, t as HandleResult } from "./RouterContract-thDZSYVJ.mjs";
15
+ import { t as Route } from "./RouteEntity-CLRlwjdn.mjs";
16
+ import { n as RoutineEntityOptions, r as RoutineHandler, t as RoutineEntity } from "./RoutineEntity-DTJtFI1m.mjs";
17
+ import { i as SchedulerServiceOptions, n as SchedulerEvents, r as SchedulerService, t as AddOptions } from "./SchedulerService-DDuSAEiJ.mjs";
18
+ import { n as SeederEntiyData, t as SeederEntity } from "./SeederEntity-DYcCU6bM.mjs";
19
+ import { a as SeederSource, i as SeederServiceOptions, n as SeederEvents, o as SeeederService, r as SeederResult } from "./SeederService-B9j_aioh.mjs";
20
+ import { t as EventContract } from "./EventContract-B6JEPwRM.mjs";
21
+ import { t as DatabaseKysely } from "./KyselyContract-ACWyd3F_.mjs";
22
+ import { t as DriveConfig } from "./DriveConfigEntity-Dh8yII97.mjs";
23
+ import { t as ArteTesterService } from "./CliTesterService-XVGae3eK.mjs";
24
+ import { t as CliWrapperService } from "./CliWrapperService-yg9gALPj.mjs";
25
+ import { n as ConfigFSServiceOptions, t as ConfigFSService } from "./ConfigFSService-BOgh6pL9.mjs";
26
+ import { t as EnvService } from "./EnvService-D7rVDvqk.mjs";
27
+ import { n as ConfigManagerService, t as ConfigManagerOptions } from "./ConfigManagerService-D7WdTGtJ.mjs";
28
+ import { n as UploadUrlOptions, r as UrlOptions, t as DriveBaseGateway } from "./DriveBaseGateway-C5R7er0_.mjs";
29
+ import { n as S3DriveConfig, t as DriveS3 } from "./DriveS3Gateway-BM7HhUZf.mjs";
30
+ import { t as ConfigS3Service } from "./ConfigS3Service-MPEl-P_u.mjs";
31
+ import { n as DownloadedFetchOptions, t as DownloadService } from "./DownloadService-B-r-EqkZ.mjs";
32
+ import { t as DriveService } from "./DriveService-Cb-DdupY.mjs";
33
+ import { t as EmmitterService } from "./EmmitterService-BwETNyCU.mjs";
34
+ import { t as EncryptService } from "./EncryptService-B17nfV8V.mjs";
35
+ import { n as ExceptionServiceOptions, t as ExceptionService } from "./ExceptionService-S7L99ujh.mjs";
36
+ import { t as HasherService } from "./HasherService-DnbIU1ub.mjs";
37
+ import { n as HttpServiceOptions, t as HttpService } from "./HttpService-DnnqU2n1.mjs";
38
+ import { t as LifecycleService } from "./LifecycleService-C43A9AOw.mjs";
39
+ import { n as MetadataQueryPayload, r as MetadataQueryService, t as Metadafilter } from "./MetadataQueryService-WXBAN4d8.mjs";
40
+ import { t as MetadataService } from "./MetadataService-D5lAlAuy.mjs";
41
+ import { n as PluginIpcClient, t as IpcMessage } from "./PluginIpcClient-5kLU9aLc.mjs";
42
+ import { t as PluginIpcHost } from "./PluginIpcHost-DTXHSMkU.mjs";
43
+ import { a as RouteReply, i as RouteHandler, n as PluginRouter, o as RouteRequest, r as RouteDefinition, s as RouteResponsePayload, t as HttpMethod } from "./PluginRouter-DOOBinlR.mjs";
44
+ import { t as RouterFileBaseRoutingService } from "./RouterFileBaseRoutingService-CEBdzCYd.mjs";
45
+ import { n as RouterRegisterEntry, t as RouterRegister } from "./RouterRegisterService-mU1J15Yt.mjs";
46
+ import { n as RouterResourceOptions, r as RouterResourceService, t as ResourceMethod } from "./RouterResourceService-Cj73MVpb.mjs";
47
+ import { n as ModelConfig, t as ConfigModel } from "./ModelConfigMixin-7rCJZaAw.mjs";
48
+ import { t as RouterResourceConfig } from "./RouterResourceConfigService-BdqbVblk.mjs";
49
+ import { n as ShellServiceOptions, t as ShellService } from "./ShellService-BrVU19X3.mjs";
50
+ import { t as ConfigRepository } from "./ConfigRepository-DdBw1w8b.mjs";
51
+ import { n as FileRepositoryQueryOptions, t as FileRepository } from "./FileRepository--bOaDHZz.mjs";
52
+ import { n as GitBranchRepositoryOptions, t as GitBranchRepository } from "./GitBranchRepository-k7reiBa4.mjs";
53
+ import { i as GitCommitRepositoryOptions, n as GitCommitListResult, r as GitCommitRepository, t as GitCommitListOptions } from "./GitCommitRepository-j6tmgRS2.mjs";
54
+ import { n as PermissionAssignmentRepositoryQueryOptions, t as PermissionAssignmentRepository } from "./PermissionAssignmentRepository-DVS015ou.mjs";
55
+ import { n as PermissionRepositoryQueryOptions, t as PermissionRepository } from "./PermissionRepository-9Kf8A5uC.mjs";
56
+ import { n as IRepositoryTypes, t as DatabaseRepositoryInferMixin } from "./DatabaseRepositoryInferMixin-BKv4RR8I.mjs";
57
+ import { n as TokenRepositoryGenerateOptions, r as TokenRepositoryQueryOptions, t as TokenRepository } from "./TokenRepository-DplVSSbU.mjs";
58
+ import { t as DatabaseGateway } from "./DatabaseGateway-DHTbjF5C.mjs";
59
+ import { n as DriveFSConfig, t as DriveFS } from "./DriveFSGateway-_7luuCiK.mjs";
60
+ import { n as GitGatewayOptions, r as GitRepoInfo, t as GitGateway } from "./GitGateway-CNuhGhkh.mjs";
61
+ import { n as valueToString, t as Metadata } from "./MetadataMixin-AVaqESW2.mjs";
62
+ import { t as database } from "./database-CWkgKEjr.mjs";
63
+ import { a as SelectFrom, c as UpdateFrom, i as SelectBuilder, l as now, n as ExpressionBuilder, o as SerializableResult, r as InsertFrom, s as SerializeOptions, t as DeleteFrom } from "./common-CkVu3aD6.mjs";
64
+ import { n as updateOrCreate, t as UpdateOrCreateOptions } from "./updateOrCreate-ytNvnRnp.mjs";
65
+ import { n as list, t as ListOptions } from "./list-DLrcQUmc.mjs";
66
+ import { n as PaginateResult, r as paginate } from "./paginate-Dq4YCfoP.mjs";
67
+ import { n as count, t as CountOptions } from "./count-Cx1qqWRe.mjs";
68
+ import { i as createMysql, n as create, r as createDefault, t as CreateOptions } from "./create-BnVaEuUC.mjs";
69
+ import { i as updateMysql, n as update, r as updateDefault, t as UpdateOptions } from "./update-9SpXDvjp.mjs";
70
+ import { n as destroy, t as DestroyOptions } from "./destroy-Uj3B5q04.mjs";
71
+ import { n as firstOrCreate, t as FirstOrCreateOptions } from "./firstOrCreate-DZr8L5yb.mjs";
72
+ import { n as findOne, r as findOneOrFail, t as FindOneOptions } from "./findOne-Boxfam4u.mjs";
73
+ import ModelMixin, { ModelCountOptions, ModelCreateOptions, ModelDestroyOptions, ModelEntity, ModelFindOptions, ModelFirstOrCreateOptions, ModelListOptions, ModelPaginateOptions, ModelUpdateOptions, ModelUpdateOrCreateOptions } from "./mixins/ModelMixin.mjs";
74
+ import { t as Relation } from "./RelationsMixin-BaXvJfzK.mjs";
75
+ import { t as config } from "./config-DDScRnvV.mjs";
76
+ import { t as _default } from "./container-Be1UNVpU.mjs";
77
+ import { t as download } from "./download-DzKRkAhD.mjs";
78
+ import { t as drive } from "./drive-BZiloXJW.mjs";
79
+ import { t as emmitter } from "./emmitter-9-6gueft.mjs";
80
+ import { t as encrypt } from "./encrypt-BtQggXao.mjs";
81
+ import { t as env } from "./env-oE1dEbgb.mjs";
82
+ import { t as fileRepository } from "./filesRepository-D9fxvd-E.mjs";
83
+ import { t as hasher } from "./hasher-i-RJja9d.mjs";
84
+ import { t as http } from "./http-F5dtmcy0.mjs";
85
+ import { t as lifecycle } from "./lifecycle-CBXw5SHi.mjs";
86
+ import { t as logger } from "./logger-B-eGxHk1.mjs";
87
+ import { t as migrator } from "./migrator-D9OUJuE0.mjs";
88
+ import { t as permissionAssignmentRepository } from "./permissionAssignmentRepository-kW-shaeD.mjs";
89
+ import { t as permissionRepository } from "./permissionRepository-pSU0Pbu0.mjs";
90
+ import { t as router } from "./router-D7lk_eki.mjs";
91
+ import { t as scheduler } from "./scheduler-BZJ0JscK.mjs";
92
+ import { t as shell } from "./shell-D3lbVvdM.mjs";
93
+ import { t as tokenRepository } from "./tokenRepository-BsrgOgMO.mjs";
94
+ import { t as userRepository } from "./userRepository-DgENwIFS.mjs";
95
+ import { n as LoaderRecord, r as defineLoader, t as Loader } from "./defineLoader-BOYnKv5_.mjs";
96
+ import { t as createFileLoader } from "./fileLoader-D1BgCxaZ.mjs";
97
+ import { n as loadFileUrl, t as createFileUrlLoader } from "./fileUrlLoader-DpVRfcGU.mjs";
98
+ import { n as createHasManyThroughLoader, r as loadHasManyThrough, t as HasManyThroughLoaderOptions } from "./hasManyThroughLoader-BlAt7DQD.mjs";
99
+ import { n as loadMetas, t as createMetasLoader } from "./loadMetas-kut6dSZS.mjs";
100
+ import { n as loadPermissions, t as createPermissionLoader } from "./permissionLoader-DzP0E01F.mjs";
101
+ import { n as loadUser, t as createUserLoader } from "./userLoader-C7A1u-FB.mjs";
102
+ import { n as FileMeta, t as File } from "./FileEntity-6sT7RdiN.mjs";
103
+ import { t as Module } from "./ModuleEntity-xa6rCTxe.mjs";
104
+ import { t as PluginEntryEntity } from "./PluginEntryEntity-BDBElYQ1.mjs";
105
+ import { t as PluginEntity } from "./PluginEntity-Bjl3keRp.mjs";
106
+ import { t as exists } from "./exists-Csru9uQi.mjs";
107
+ import { a as softDelete, i as deleted, n as SoftDeleteResult, o as undeleted, r as addSoftDeleteColumn, s as whereNotDeleted, t as SoftDeleteOptions } from "./softDelete-zHpOCvxX.mjs";
108
+ import { n as addTimestampColumns, r as addUpdatedColumn, t as addCreatedColumn } from "./timestamp-OxM0lLhB.mjs";
109
+ import { t as BaseRelation } from "./BaseRelation-Br4CDT5e.mjs";
110
+ import { t as BelongsTo } from "./BelongsToRelation-BdcBpcDt.mjs";
111
+ import { n as LoadFileMetas, r as LoadFileUrl, t as BelongsToFile } from "./BelongsToFileRelation-B-KDoKlS.mjs";
112
+ import { t as BelongsToUser } from "./BelongsToUserRelation-D-nXYwyy.mjs";
113
+ import { t as HasMany } from "./HasManyRelation-v0qmO2nd.mjs";
114
+ import { t as HasMetas } from "./HasMetasRelation-BUoCpbto.mjs";
115
+ import { t as HasManyThrough } from "./hasManyThroughRelation-CydrMBzu.mjs";
116
+ import { n as AuthMiddlewareContext, t as AuthMiddleware } from "./AuthMiddleware-D2BZKKBJ.mjs";
117
+ import { n as AuthSilenceMiddlewareContext, t as AuthSilenceMiddleware } from "./AuthSilenceMiddleware-8l5EPeot.mjs";
118
+ import { i as AuthorizePermissionPayload, n as AuthorizationMiddleware, r as AuthorizePermission, t as AuthorizationContext } from "./AuthorizationMiddleware-BjozUIyB.mjs";
119
+ import { a as storagePath, i as serverPath, n as clientPath, o as tmpPath, r as relativeToBasePath, t as basePath } from "./basePath-BrKDzdou.mjs";
120
+ import { t as getPluginConfig } from "./config-OUxEJV91.mjs";
121
+ import { t as createLoaderFactory } from "./createLoaderFactory-Bpk6rD3D.mjs";
122
+ import { t as cuid } from "./cuid-7odspl-1.mjs";
123
+ import { n as defineHandler } from "./defineHandler-fLDf436i.mjs";
124
+ import { t as generateIndexFile } from "./generateIndexFile-zJLs7hsX.mjs";
125
+ import { n as importFiles, r as importGlob, t as importAll } from "./importAll-CDPG0oSA.mjs";
126
+ import { t as importOne } from "./importOne-C4TjAH5G.mjs";
127
+ export { Acl as AclEntity, AddOptions, AuthMiddleware, AuthMiddlewareContext, AuthSilenceMiddleware, AuthSilenceMiddlewareContext, AuthorizationContext, AuthorizationMiddleware, AuthorizePermission, AuthorizePermissionPayload, BaseRelation, BelongsToFile as BelongsToFileRelation, BelongsTo as BelongsToRelation, BelongsToUser as BelongsToUserRelation, CliCommand, CliEvents, CliService, ArteTesterService as CliTesterService, CliWrapperService, ConfigFSService, ConfigFSServiceOptions, ConfigManagerOptions, ConfigManagerService, ConfigModel, ConfigRepository, ConfigS3Service, CookieMapEntity, CountOptions, CreateOptions, DatabaseContract, DatabaseGateway, DatabaseKysely, DatabaseRepository, DatabaseRepositoryInferMixin, DeleteFrom, DeleteManyOptions, DestroyOptions, DownloadService, DownloadedFetchOptions, DriveBaseGateway, DriveConfig as DriveConfigEntity, DriveContract, DriveFSConfig, DriveFS as DriveFSGateway, DriveS3 as DriveS3Gateway, DriveService, DriveUploadUrlOptions, DriveUrlOptions, EmailTemplateMetaTable, EmailTemplateTable, EmmitterService, EncryptService, EnvService, EventContract, ExceptionService, ExceptionServiceOptions, ExpressionBuilder, File as FileEntity, FileMeta as FileMetaEntity, FileMetaTable, FileRepository, FileRepositoryQueryOptions, FileTable, FindManyOptions, FindOneOptions, FirstOrCreateOptions, GitBranchRepository, GitBranchRepositoryOptions, GitCommitListOptions, GitCommitListResult, GitCommitRepository, GitCommitRepositoryOptions, GitGateway, GitGatewayOptions, GitRepoInfo, HandleResult, HasMany as HasManyRelation, HasManyThroughLoaderOptions, HasMetas as HasMetasRelation, HasherService, HttpContext, HttpMethod, HttpService, HttpServiceOptions, IRepositoryTypes, InsertFrom, IpcMessage, JobTable, LifecycleService, ListOptions, LoadFileMetas, LoadFileUrl, Loader, LoaderRecord, Metadafilter, Metadata as MetadataMixin, MetadataQueryPayload, MetadataQueryService, MetadataService, Middleware, MiddlewareHandleResult, Migration, MigrationEntity, MigrationEntiyData, MigrationSource, MigrationsTable, MigratorService, MigratorServiceEvents, MigratorServiceOptions, ModelConfig as ModelConfigMixin, ModelCountOptions, ModelCreateOptions, ModelDestroyOptions, ModelEntity, ModelFindOptions, ModelFirstOrCreateOptions, ModelListOptions, ModelMixin, ModelPaginateOptions, ModelUpdateOptions, ModelUpdateOrCreateOptions, Module as ModuleEntity, OauthAccountTable, OauthTokenTable, ObjectOptions, PageRequestContextEntity, PageRequestContextEntityOptions, PaginateResult, Pagination, PermissionAssignmentRepository, PermissionAssignmentRepositoryQueryOptions, PermissionAssignmentTable, PermissionRepository, PermissionRepositoryQueryOptions, PermissionTable, PluginEntity, PluginEntryEntity, PluginIpcClient, PluginIpcHost, PluginRouter, Redirect, Relation as RelationsMixin, Request, ResourceMethod, Response, RoleTable, RouteDefinition, Route as RouteEntity, RouteHandler, RouteReply, RouteRequest, RouteResponsePayload, RouterEvents, RouterFileBaseRoutingService, RouterRegisterEntry, RouterRegister as RouterRegisterService, RouterResourceConfig as RouterResourceConfigService, RouterResourceOptions, RouterResourceService, RouterService, RoutineEntity, RoutineEntityOptions, RoutineHandler, S3DriveConfig, SchedulerEvents, SchedulerService, SchedulerServiceOptions, SeederEntity, SeederEntiyData, SeederEvents, SeederResult, SeeederService as SeederService, SeederServiceOptions, SeederSource, SelectBuilder, SelectFrom, SerializableResult, SerializeOptions, ShellService, ShellServiceOptions, SoftDeleteOptions, SoftDeleteResult, TableColumn, TokenRepository, TokenRepositoryGenerateOptions, TokenRepositoryQueryOptions, TokenTable, UpdateFrom, UpdateOptions, UpdateOrCreateOptions, UploadSessionTable, UploadUrlOptions, UrlOptions, UserMetaTable, UserRepository, UserRepositoryEvents, UserRepositoryQueryOptions, UserRoleTable, UserTable, addCreatedColumn, addSoftDeleteColumn, addTimestampColumns, addUpdatedColumn, basePath, clientPath, config, _default as container, count, create, createDefault, createFileLoader, createFileUrlLoader, createHasManyThroughLoader, createLoaderFactory, createMetasLoader, createMysql, createPermissionLoader, createUserLoader, cuid, database, defineHandler, defineLoader, deleted, destroy, download, drive, emmitter, encrypt, env, exists, fileRepository as filesRepository, findOne, findOneOrFail, firstOrCreate, generateIndexFile, getPluginConfig, HasManyThrough as hasManyThroughRelation, hasher, http, importAll, importFiles, importGlob, importOne, lifecycle, list, loadFileUrl, loadHasManyThrough, loadMetas, loadPermissions, loadUser, logger, migrator, now, paginate, permissionAssignmentRepository, permissionRepository, printObject, printTable, relativeToBasePath, router, scheduler, serverPath, shell, softDelete, storagePath, tmpPath, tokenRepository, undeleted, update, updateDefault, updateMysql, updateOrCreate, userRepository, valueToString, whereNotDeleted };