@sidekick-coder/zenith-kit 0.4.2 → 0.4.4

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 (1068) 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-4CmshJVG.mjs +2 -0
  36. package/dist/server/AclEntity-MmrRnZLR.d.mts +25 -0
  37. package/dist/server/AuthMiddleware-4uo4whSb.d.mts +15 -0
  38. package/dist/server/AuthSilenceMiddleware-DG6Wu0wp.d.mts +16 -0
  39. package/dist/server/AuthorizationMiddleware-DkfUke36.d.mts +25 -0
  40. package/dist/server/BaseEntityMixin-C-feMg9r.mjs +2 -0
  41. package/dist/server/BaseException-cMfHz0w8.mjs +2 -0
  42. package/dist/server/BaseRelation-CLslXSKl.d.mts +7 -0
  43. package/dist/server/BelongsToFileRelation-BCW_eRpx.d.mts +24 -0
  44. package/dist/server/BelongsToRelation-CTDN8m2d.d.mts +24 -0
  45. package/dist/server/BelongsToUserRelation-Bj2ymCEB.mjs +2 -0
  46. package/dist/server/BelongsToUserRelation-D5urUoTb.d.mts +9 -0
  47. package/dist/server/CliService-CJmymbQ_.d.mts +51 -0
  48. package/dist/server/CliTesterService-D-Owa4Q6.d.mts +11 -0
  49. package/dist/server/CliWrapperService-QTItsE5c.d.mts +30 -0
  50. package/dist/server/ConfigFSService-CsbJHH3N.d.mts +28 -0
  51. package/dist/server/ConfigManagerService-Kt5W7XXE.d.mts +26 -0
  52. package/dist/server/ConfigRepository-BDPkp-w2.d.mts +27 -0
  53. package/dist/server/ConfigS3Service-Bjp5slAQ.d.mts +27 -0
  54. package/dist/server/ConfigService-CNvGuEng.mjs +2 -0
  55. package/dist/server/ConfigService-DTzzvpe6.d.mts +26 -0
  56. package/dist/server/ContainerService-Dv24H6z-.d.mts +20 -0
  57. package/dist/server/CookieMapEntity-C_rgGJPM.mjs +2 -0
  58. package/dist/server/CookieMapEntity-D5P_b4Xy.d.mts +13 -0
  59. package/dist/server/CookieMapEntity-yShn_H5l.d.mts +18 -0
  60. package/dist/server/DatabaseContract-BjjNxd-6.d.mts +141 -0
  61. package/dist/server/DatabaseGateway-w9S02fGb.d.mts +10 -0
  62. package/dist/server/DatabaseRepository-Be0eqEsF.d.mts +60 -0
  63. package/dist/server/DatabaseRepositoryInferMixin-S4h0hoYX.d.mts +19 -0
  64. package/dist/server/DownloadService-DZ_E1lTJ.d.mts +17 -0
  65. package/dist/server/DriveBaseGateway-Btlh6hZe.d.mts +32 -0
  66. package/dist/server/DriveConfigEntity-BOvAZ78M.d.mts +92 -0
  67. package/dist/server/DriveConfigEntity-BTK1AHGA.mjs +2 -0
  68. package/dist/server/DriveContract-i7LselSg.d.mts +31 -0
  69. package/dist/server/DriveEntryEntity-BR32uS6R.d.mts +11 -0
  70. package/dist/server/DriveFSGateway-BWU_UeEn.d.mts +28 -0
  71. package/dist/server/DriveS3Gateway-DM8XOtPx.d.mts +42 -0
  72. package/dist/server/DriveService-R12yfO1D.d.mts +70 -0
  73. package/dist/server/EmmitterService-BLWZGiBF.d.mts +8 -0
  74. package/dist/server/EmmitterService-CqmJgo-6.d.mts +57 -0
  75. package/dist/server/EmmitterService-Dw_dThZJ.mjs +2 -0
  76. package/dist/server/EncryptService-yXxbO2YX.d.mts +39 -0
  77. package/dist/server/EnvService-_BX3DmEX.d.mts +54 -0
  78. package/dist/server/EventContract-D8wqLX-d.d.mts +18 -0
  79. package/dist/server/ExceptionService-Bpv0O19A.d.mts +21 -0
  80. package/dist/server/FileEntity-Bc4ZaXbc.mjs +2 -0
  81. package/dist/server/FileEntity-MQFcJ-0b.d.mts +194 -0
  82. package/dist/server/FileMetaEntity-C2Q55zSv.mjs +2 -0
  83. package/dist/server/FileRepository-Cq4vh__Q.d.mts +48 -0
  84. package/dist/server/GitBranchRepository-DtkC9hPb.d.mts +30 -0
  85. package/dist/server/GitBranchRepository-duDYYamZ.mjs +3 -0
  86. package/dist/server/GitCommitRepository-AfwbM_CF.d.mts +40 -0
  87. package/dist/server/GitCommitRepository-CdZUcPrq.mjs +2 -0
  88. package/dist/server/GitGateway-LU9RlFZ4.d.mts +48 -0
  89. package/dist/server/HasManyRelation-BT9F_ypB.d.mts +26 -0
  90. package/dist/server/HasMetasRelation-CxrkAg9q.d.mts +22 -0
  91. package/dist/server/HasherService-BgbuRNcr.d.mts +9 -0
  92. package/dist/server/HooksMixin-D_OSdJ8D.mjs +2 -0
  93. package/dist/server/HttpContextContract-kX33KT52.d.mts +25 -0
  94. package/dist/server/HttpService-BSh3txO5.d.mts +44 -0
  95. package/dist/server/KyselyContract-BbJpKDHf.d.mts +8 -0
  96. package/dist/server/LifecycleHook-D1wQ1I5-.mjs +2 -0
  97. package/dist/server/LifecycleHook-DppE2FJl.d.mts +22 -0
  98. package/dist/server/LifecycleService-Bq06M7A9.d.mts +50 -0
  99. package/dist/server/LifecycleService-DcozFQFK.mjs +2 -0
  100. package/dist/server/LoggerService-8XvsFBNN.mjs +2 -0
  101. package/dist/server/LoggerService-QNGu1wlf.d.mts +12 -0
  102. package/dist/server/MetadataMixin-DnxTbS1I.d.mts +15 -0
  103. package/dist/server/MetadataQueryService-3Bgd1hbb.d.mts +37 -0
  104. package/dist/server/MetadataService-BXp06zAT.d.mts +23 -0
  105. package/dist/server/MigrationEntity-ClR1LcZW.d.mts +21 -0
  106. package/dist/server/MigratorService-DxYxl5MM.d.mts +81 -0
  107. package/dist/server/ModelConfigMixin-BEsoTOHR.d.mts +24 -0
  108. package/dist/server/ModuleEntity-BLdVBN_S.mjs +2 -0
  109. package/dist/server/ModuleEntity-CU7DtaCq.d.mts +67 -0
  110. package/dist/server/PageRequestContextEntity-CBUxdwIN.d.mts +45 -0
  111. package/dist/server/PermissionAssignmentRepository-04jgsKYC.d.mts +28 -0
  112. package/dist/server/PermissionEntity-C32mCDYd.d.mts +23 -0
  113. package/dist/server/PermissionRepository-BVho0kqV.d.mts +29 -0
  114. package/dist/server/PluginEntity-DxFzK7ML.d.mts +17 -0
  115. package/dist/server/PluginEntryEntity-Cbj1t3Xo.d.mts +31 -0
  116. package/dist/server/PluginEntryEntity-D3l5i4vi.mjs +2 -0
  117. package/dist/server/PluginIpcClient-gGRahR8N.d.mts +17 -0
  118. package/dist/server/PluginIpcHost-D5Fs7WsU.d.mts +15 -0
  119. package/dist/server/PluginRouter-D-Oz2FgQ.d.mts +43 -0
  120. package/dist/server/RelationsMixin-B0TTB7QR.d.mts +13 -0
  121. package/dist/server/RouteEntity-c76lpzV1.d.mts +23 -0
  122. package/dist/server/RouterContract-4RbOTz10.d.mts +19 -0
  123. package/dist/server/RouterFileBaseRoutingService-DQ2YXnyn.d.mts +26 -0
  124. package/dist/server/RouterRegisterService-w2jHOFz4.d.mts +20 -0
  125. package/dist/server/RouterResourceConfigService-Crk0Jvei.d.mts +26 -0
  126. package/dist/server/RouterResourceService-BlekELql.d.mts +34 -0
  127. package/dist/server/RouterService-D6nARD48.d.mts +69 -0
  128. package/dist/server/RouterService-DCxQeLXE.mjs +2 -0
  129. package/dist/server/RoutineEntity-0bRsPcdd.d.mts +24 -0
  130. package/dist/server/SchedulerService-zXI-OLO1.d.mts +53 -0
  131. package/dist/server/SeederEntity-CxnF2cTy.d.mts +18 -0
  132. package/dist/server/SeederService-DFVj9ygO.d.mts +55 -0
  133. package/dist/server/ShellService-Br4gD7XL.mjs +2 -0
  134. package/dist/server/ShellService-JSccq7FZ.d.mts +29 -0
  135. package/dist/server/SoftDeleteMixin-C0ebJWlN.mjs +2 -0
  136. package/dist/server/TokenRepository-B29SjKAE.d.mts +37 -0
  137. package/dist/server/TokenRepository-BIDZsAcu.mjs +2 -0
  138. package/dist/server/UserEntity-y7Ox0xs6.d.mts +55 -0
  139. package/dist/server/UserRepository-_bjmtMFr.d.mts +37 -0
  140. package/dist/server/addIdColumn-CNbjF-AJ.d.mts +7 -0
  141. package/dist/server/addSoftDeleteColumn-DUgTnzyC.d.mts +14 -0
  142. package/dist/server/addTimestampColumns-C7lPcck-.d.mts +19 -0
  143. package/dist/server/basePath-C0uhwuTc.d.mts +10 -0
  144. package/dist/server/chunk-CGLV7CjG.mjs +1 -0
  145. package/dist/server/commands/pluginBuild.d.mts +7 -0
  146. package/dist/server/commands/pluginBuild.mjs +2 -0
  147. package/dist/server/commands/pluginGenerateId.d.mts +7 -0
  148. package/dist/server/commands/pluginGenerateId.mjs +2 -0
  149. package/dist/server/common-yrtE3wjl.d.mts +22 -0
  150. package/dist/server/compose-BJsxWJSn.d.mts +5 -0
  151. package/dist/server/compose-XJLd0ioo.mjs +2 -0
  152. package/dist/server/config-D49QZfH2.d.mts +7 -0
  153. package/dist/server/config-kRv0xoFG.d.mts +5 -0
  154. package/dist/server/container-B91n6Zcp.d.mts +7 -0
  155. package/dist/server/container-BwAJOg9B.mjs +2 -0
  156. package/dist/server/contracts/DatabaseContract.d.mts +2 -0
  157. package/dist/server/contracts/DatabaseContract.mjs +1 -0
  158. package/dist/server/contracts/DriveContract.d.mts +2 -0
  159. package/dist/server/contracts/DriveContract.mjs +1 -0
  160. package/dist/server/contracts/EventContract.d.mts +2 -0
  161. package/dist/server/contracts/EventContract.mjs +1 -0
  162. package/dist/server/contracts/HttpContextContract.d.mts +2 -0
  163. package/dist/server/contracts/HttpContextContract.mjs +1 -0
  164. package/dist/server/contracts/KyselyContract.d.mts +2 -0
  165. package/dist/server/contracts/KyselyContract.mjs +1 -0
  166. package/dist/server/contracts/RouterContract.d.mts +2 -0
  167. package/dist/server/contracts/RouterContract.mjs +1 -0
  168. package/dist/server/count-CRSTJXZH.d.mts +12 -0
  169. package/dist/server/create-CAQHadL6.d.mts +17 -0
  170. package/dist/server/createId-c4X4-v2p.mjs +2 -0
  171. package/dist/server/createLoaderFactory-vQsdRiXo.d.mts +11 -0
  172. package/dist/server/cuid-mUpLoFE4.d.mts +5 -0
  173. package/dist/server/database-Grxfz8uk.d.mts +8 -0
  174. package/dist/server/defineHandler-DnEPCZcE.d.mts +10 -0
  175. package/dist/server/defineLoader-B0wYEHGY.d.mts +11 -0
  176. package/dist/server/destroy-BmIG5H0H.d.mts +14 -0
  177. package/dist/server/download-BgXiKzjo.d.mts +7 -0
  178. package/dist/server/drive-D08L5E-9.d.mts +7 -0
  179. package/dist/server/emmitter-gA6WyhSu.d.mts +7 -0
  180. package/dist/server/encrypt-BbCc7fVq.d.mts +7 -0
  181. package/dist/server/entities/AclEntity.d.mts +2 -0
  182. package/dist/server/entities/AclEntity.mjs +1 -0
  183. package/dist/server/entities/CookieMapEntity.d.mts +2 -0
  184. package/dist/server/entities/CookieMapEntity.mjs +1 -0
  185. package/dist/server/entities/DriveConfigEntity.d.mts +2 -0
  186. package/dist/server/entities/DriveConfigEntity.mjs +1 -0
  187. package/dist/server/entities/FileEntity.d.mts +2 -0
  188. package/dist/server/entities/FileEntity.mjs +1 -0
  189. package/dist/server/entities/FileMetaEntity.d.mts +2 -0
  190. package/dist/server/entities/FileMetaEntity.mjs +1 -0
  191. package/dist/server/entities/MigrationEntity.d.mts +2 -0
  192. package/dist/server/entities/MigrationEntity.mjs +2 -0
  193. package/dist/server/entities/ModuleEntity.d.mts +2 -0
  194. package/dist/server/entities/ModuleEntity.mjs +1 -0
  195. package/dist/server/entities/PageRequestContextEntity.d.mts +2 -0
  196. package/dist/server/entities/PageRequestContextEntity.mjs +2 -0
  197. package/dist/server/entities/PluginEntity.d.mts +2 -0
  198. package/dist/server/entities/PluginEntity.mjs +2 -0
  199. package/dist/server/entities/PluginEntryEntity.d.mts +2 -0
  200. package/dist/server/entities/PluginEntryEntity.mjs +1 -0
  201. package/dist/server/entities/RouteEntity.d.mts +2 -0
  202. package/dist/server/entities/RouteEntity.mjs +2 -0
  203. package/dist/server/entities/RoutineEntity.d.mts +2 -0
  204. package/dist/server/entities/RoutineEntity.mjs +2 -0
  205. package/dist/server/entities/SeederEntity.d.mts +2 -0
  206. package/dist/server/entities/SeederEntity.mjs +2 -0
  207. package/dist/server/env-ByosFXOb.d.mts +7 -0
  208. package/dist/server/exists-CMoGjhfv.d.mts +8 -0
  209. package/dist/server/facades/config.d.mts +2 -0
  210. package/dist/server/facades/config.mjs +2 -0
  211. package/dist/server/facades/container.d.mts +2 -0
  212. package/dist/server/facades/container.mjs +1 -0
  213. package/dist/server/facades/database.d.mts +2 -0
  214. package/dist/server/facades/database.mjs +2 -0
  215. package/dist/server/facades/download.d.mts +2 -0
  216. package/dist/server/facades/download.mjs +2 -0
  217. package/dist/server/facades/drive.d.mts +2 -0
  218. package/dist/server/facades/drive.mjs +2 -0
  219. package/dist/server/facades/emmitter.d.mts +2 -0
  220. package/dist/server/facades/emmitter.mjs +2 -0
  221. package/dist/server/facades/encrypt.d.mts +2 -0
  222. package/dist/server/facades/encrypt.mjs +2 -0
  223. package/dist/server/facades/env.d.mts +2 -0
  224. package/dist/server/facades/env.mjs +2 -0
  225. package/dist/server/facades/filesRepository.d.mts +2 -0
  226. package/dist/server/facades/filesRepository.mjs +2 -0
  227. package/dist/server/facades/hasher.d.mts +2 -0
  228. package/dist/server/facades/hasher.mjs +2 -0
  229. package/dist/server/facades/http.d.mts +2 -0
  230. package/dist/server/facades/http.mjs +2 -0
  231. package/dist/server/facades/lifecycle.d.mts +2 -0
  232. package/dist/server/facades/lifecycle.mjs +2 -0
  233. package/dist/server/facades/logger.d.mts +2 -0
  234. package/dist/server/facades/logger.mjs +2 -0
  235. package/dist/server/facades/migrator.d.mts +2 -0
  236. package/dist/server/facades/migrator.mjs +2 -0
  237. package/dist/server/facades/permissionAssignmentRepository.d.mts +2 -0
  238. package/dist/server/facades/permissionAssignmentRepository.mjs +2 -0
  239. package/dist/server/facades/permissionRepository.d.mts +2 -0
  240. package/dist/server/facades/permissionRepository.mjs +2 -0
  241. package/dist/server/facades/router.d.mts +2 -0
  242. package/dist/server/facades/router.mjs +2 -0
  243. package/dist/server/facades/scheduler.d.mts +2 -0
  244. package/dist/server/facades/scheduler.mjs +2 -0
  245. package/dist/server/facades/shell.d.mts +2 -0
  246. package/dist/server/facades/shell.mjs +2 -0
  247. package/dist/server/facades/tokenRepository.d.mts +2 -0
  248. package/dist/server/facades/tokenRepository.mjs +2 -0
  249. package/dist/server/facades/userRepository.d.mts +2 -0
  250. package/dist/server/facades/userRepository.mjs +2 -0
  251. package/dist/server/fileLoader-DhVafbzh.d.mts +11 -0
  252. package/dist/server/fileUrlLoader-DXg_ObHu.d.mts +12 -0
  253. package/dist/server/filesRepository-CpbvOWoK.d.mts +7 -0
  254. package/dist/server/findOne-Yf85IO8n.d.mts +15 -0
  255. package/dist/server/firstOrCreate-DZMuD4fZ.d.mts +15 -0
  256. package/dist/server/flatten-DHGvYNde.mjs +2 -0
  257. package/dist/server/gateways/DatabaseGateway.d.mts +2 -0
  258. package/dist/server/gateways/DatabaseGateway.mjs +2 -0
  259. package/dist/server/gateways/DriveBaseGateway.d.mts +2 -0
  260. package/dist/server/gateways/DriveBaseGateway.mjs +2 -0
  261. package/dist/server/gateways/DriveFSGateway.d.mts +2 -0
  262. package/dist/server/gateways/DriveFSGateway.mjs +2 -0
  263. package/dist/server/gateways/DriveS3Gateway.d.mts +2 -0
  264. package/dist/server/gateways/DriveS3Gateway.mjs +2 -0
  265. package/dist/server/gateways/GitGateway.d.mts +2 -0
  266. package/dist/server/gateways/GitGateway.mjs +3 -0
  267. package/dist/server/generateIndexFile-Dj5TLqbK.d.mts +5 -0
  268. package/dist/server/hasManyThroughLoader-BJ6Gc0s-.d.mts +22 -0
  269. package/dist/server/hasManyThroughRelation-B94etKvs.d.mts +33 -0
  270. package/dist/server/hasher-C0g6k-93.d.mts +7 -0
  271. package/dist/server/http-CkyWUZD3.d.mts +7 -0
  272. package/dist/server/importAll-C0DqhIlN.d.mts +22 -0
  273. package/dist/server/importOne-Ds4b9E1-.d.mts +5 -0
  274. package/dist/server/index-CjDodOH2.d.mts +1 -0
  275. package/dist/server/index.d.mts +127 -2886
  276. package/dist/server/index.mjs +1 -4
  277. package/dist/server/lifecycle-Diy1VgNc.d.mts +7 -0
  278. package/dist/server/list-BY2D2o_t.d.mts +16 -0
  279. package/dist/server/loadMetas-DQP8G_Tx.d.mts +18 -0
  280. package/dist/server/loaders/fileLoader.d.mts +2 -0
  281. package/dist/server/loaders/fileLoader.mjs +2 -0
  282. package/dist/server/loaders/fileUrlLoader.d.mts +2 -0
  283. package/dist/server/loaders/fileUrlLoader.mjs +2 -0
  284. package/dist/server/loaders/hasManyThroughLoader.d.mts +2 -0
  285. package/dist/server/loaders/hasManyThroughLoader.mjs +2 -0
  286. package/dist/server/loaders/loadMetas.d.mts +2 -0
  287. package/dist/server/loaders/loadMetas.mjs +2 -0
  288. package/dist/server/loaders/permissionLoader.d.mts +2 -0
  289. package/dist/server/loaders/permissionLoader.mjs +2 -0
  290. package/dist/server/loaders/userLoader.d.mts +2 -0
  291. package/dist/server/loaders/userLoader.mjs +2 -0
  292. package/dist/server/logger-Dx-KTUKs.d.mts +7 -0
  293. package/dist/server/middlewares/AuthMiddleware.d.mts +2 -0
  294. package/dist/server/middlewares/AuthMiddleware.mjs +2 -0
  295. package/dist/server/middlewares/AuthSilenceMiddleware.d.mts +2 -0
  296. package/dist/server/middlewares/AuthSilenceMiddleware.mjs +2 -0
  297. package/dist/server/middlewares/AuthorizationMiddleware.d.mts +2 -0
  298. package/dist/server/middlewares/AuthorizationMiddleware.mjs +2 -0
  299. package/dist/server/migrator-BBSk0pf2.d.mts +7 -0
  300. package/dist/server/mixins/DatabaseRepositoryInferMixin.d.mts +2 -0
  301. package/dist/server/mixins/DatabaseRepositoryInferMixin.mjs +2 -0
  302. package/dist/server/mixins/MetadataMixin.d.mts +2 -0
  303. package/dist/server/mixins/MetadataMixin.mjs +2 -0
  304. package/dist/server/mixins/ModelConfigMixin.d.mts +2 -0
  305. package/dist/server/mixins/ModelConfigMixin.mjs +2 -0
  306. package/dist/server/mixins/ModelMixin.d.mts +60 -0
  307. package/dist/server/mixins/ModelMixin.mjs +2 -0
  308. package/dist/server/mixins/RelationsMixin.d.mts +2 -0
  309. package/dist/server/mixins/RelationsMixin.mjs +2 -0
  310. package/dist/server/normalizers-B7C2UyKI.mjs +2 -0
  311. package/dist/server/paginate-CS_cZGL2.d.mts +33 -0
  312. package/dist/server/paginate-DrS9ADL9.mjs +2 -0
  313. package/dist/server/permissionAssignmentRepository-BbB31qVc.d.mts +7 -0
  314. package/dist/server/permissionLoader-DXX0ImGC.d.mts +13 -0
  315. package/dist/server/permissionRepository-BBcGCXe1.d.mts +7 -0
  316. package/dist/server/printTable-CN_CXp-Y.d.mts +15 -0
  317. package/dist/server/queries/common.d.mts +2 -0
  318. package/dist/server/queries/common.mjs +2 -0
  319. package/dist/server/queries/count.d.mts +2 -0
  320. package/dist/server/queries/count.mjs +2 -0
  321. package/dist/server/queries/create.d.mts +2 -0
  322. package/dist/server/queries/create.mjs +2 -0
  323. package/dist/server/queries/destroy.d.mts +2 -0
  324. package/dist/server/queries/destroy.mjs +2 -0
  325. package/dist/server/queries/exists.d.mts +2 -0
  326. package/dist/server/queries/exists.mjs +2 -0
  327. package/dist/server/queries/findOne.d.mts +2 -0
  328. package/dist/server/queries/findOne.mjs +2 -0
  329. package/dist/server/queries/firstOrCreate.d.mts +2 -0
  330. package/dist/server/queries/firstOrCreate.mjs +2 -0
  331. package/dist/server/queries/index.d.mts +14 -0
  332. package/dist/server/queries/index.mjs +1 -0
  333. package/dist/server/queries/list.d.mts +2 -0
  334. package/dist/server/queries/list.mjs +2 -0
  335. package/dist/server/queries/paginate.d.mts +2 -0
  336. package/dist/server/queries/paginate.mjs +1 -0
  337. package/dist/server/queries/softDelete.d.mts +2 -0
  338. package/dist/server/queries/softDelete.mjs +2 -0
  339. package/dist/server/queries/timestamp.d.mts +2 -0
  340. package/dist/server/queries/timestamp.mjs +2 -0
  341. package/dist/server/queries/update.d.mts +2 -0
  342. package/dist/server/queries/update.mjs +2 -0
  343. package/dist/server/queries/updateOrCreate.d.mts +2 -0
  344. package/dist/server/queries/updateOrCreate.mjs +2 -0
  345. package/dist/server/relations/BaseRelation.d.mts +2 -0
  346. package/dist/server/relations/BaseRelation.mjs +2 -0
  347. package/dist/server/relations/BelongsToFileRelation.d.mts +2 -0
  348. package/dist/server/relations/BelongsToFileRelation.mjs +2 -0
  349. package/dist/server/relations/BelongsToRelation.d.mts +2 -0
  350. package/dist/server/relations/BelongsToRelation.mjs +2 -0
  351. package/dist/server/relations/BelongsToUserRelation.d.mts +2 -0
  352. package/dist/server/relations/BelongsToUserRelation.mjs +1 -0
  353. package/dist/server/relations/HasManyRelation.d.mts +2 -0
  354. package/dist/server/relations/HasManyRelation.mjs +2 -0
  355. package/dist/server/relations/HasMetasRelation.d.mts +2 -0
  356. package/dist/server/relations/HasMetasRelation.mjs +2 -0
  357. package/dist/server/relations/hasManyThroughRelation.d.mts +2 -0
  358. package/dist/server/relations/hasManyThroughRelation.mjs +2 -0
  359. package/dist/server/repositories/ConfigRepository.d.mts +2 -0
  360. package/dist/server/repositories/ConfigRepository.mjs +2 -0
  361. package/dist/server/repositories/DatabaseRepository.d.mts +2 -0
  362. package/dist/server/repositories/DatabaseRepository.mjs +2 -0
  363. package/dist/server/repositories/FileRepository.d.mts +2 -0
  364. package/dist/server/repositories/FileRepository.mjs +2 -0
  365. package/dist/server/repositories/GitBranchRepository.d.mts +2 -0
  366. package/dist/server/repositories/GitBranchRepository.mjs +1 -0
  367. package/dist/server/repositories/GitCommitRepository.d.mts +2 -0
  368. package/dist/server/repositories/GitCommitRepository.mjs +1 -0
  369. package/dist/server/repositories/PermissionAssignmentRepository.d.mts +2 -0
  370. package/dist/server/repositories/PermissionAssignmentRepository.mjs +2 -0
  371. package/dist/server/repositories/PermissionRepository.d.mts +2 -0
  372. package/dist/server/repositories/PermissionRepository.mjs +2 -0
  373. package/dist/server/repositories/PermissionRepository.test-d.d.mts +1 -0
  374. package/dist/server/repositories/PermissionRepository.test-d.mjs +2 -0
  375. package/dist/server/repositories/TokenRepository.d.mts +2 -0
  376. package/dist/server/repositories/TokenRepository.mjs +1 -0
  377. package/dist/server/repositories/UserRepository.d.mts +2 -0
  378. package/dist/server/repositories/UserRepository.mjs +2 -0
  379. package/dist/server/router-CrMfo8ro.d.mts +8 -0
  380. package/dist/server/scheduler-B5aHEHHG.d.mts +7 -0
  381. package/dist/server/services/CliService.d.mts +2 -0
  382. package/dist/server/services/CliService.mjs +2 -0
  383. package/dist/server/services/CliTesterService.d.mts +2 -0
  384. package/dist/server/services/CliTesterService.mjs +2 -0
  385. package/dist/server/services/CliWrapperService.d.mts +2 -0
  386. package/dist/server/services/CliWrapperService.mjs +2 -0
  387. package/dist/server/services/ConfigFSService.d.mts +2 -0
  388. package/dist/server/services/ConfigFSService.mjs +2 -0
  389. package/dist/server/services/ConfigManagerService.d.mts +2 -0
  390. package/dist/server/services/ConfigManagerService.mjs +2 -0
  391. package/dist/server/services/ConfigS3Service.d.mts +2 -0
  392. package/dist/server/services/ConfigS3Service.mjs +2 -0
  393. package/dist/server/services/DownloadService.d.mts +2 -0
  394. package/dist/server/services/DownloadService.mjs +2 -0
  395. package/dist/server/services/DriveService.d.mts +2 -0
  396. package/dist/server/services/DriveService.mjs +2 -0
  397. package/dist/server/services/EmmitterService.d.mts +2 -0
  398. package/dist/server/services/EmmitterService.mjs +2 -0
  399. package/dist/server/services/EncryptService.d.mts +2 -0
  400. package/dist/server/services/EncryptService.mjs +2 -0
  401. package/dist/server/services/EnvService.d.mts +2 -0
  402. package/dist/server/services/EnvService.mjs +2 -0
  403. package/dist/server/services/ExceptionService.d.mts +2 -0
  404. package/dist/server/services/ExceptionService.mjs +2 -0
  405. package/dist/server/services/HasherService.d.mts +2 -0
  406. package/dist/server/services/HasherService.mjs +2 -0
  407. package/dist/server/services/HttpService.d.mts +2 -0
  408. package/dist/server/services/HttpService.mjs +2 -0
  409. package/dist/server/services/LifecycleService.d.mts +2 -0
  410. package/dist/server/services/LifecycleService.mjs +1 -0
  411. package/dist/server/services/MetadataQueryService.d.mts +2 -0
  412. package/dist/server/services/MetadataQueryService.mjs +2 -0
  413. package/dist/server/services/MetadataService.d.mts +2 -0
  414. package/dist/server/services/MetadataService.mjs +2 -0
  415. package/dist/server/services/MigratorService.d.mts +2 -0
  416. package/dist/server/services/MigratorService.mjs +2 -0
  417. package/dist/server/services/PluginIpcClient.d.mts +2 -0
  418. package/dist/server/services/PluginIpcClient.mjs +2 -0
  419. package/dist/server/services/PluginIpcHost.d.mts +2 -0
  420. package/dist/server/services/PluginIpcHost.mjs +2 -0
  421. package/dist/server/services/PluginRouter.d.mts +2 -0
  422. package/dist/server/services/PluginRouter.mjs +2 -0
  423. package/dist/server/services/RouterFileBaseRoutingService.d.mts +2 -0
  424. package/dist/server/services/RouterFileBaseRoutingService.mjs +2 -0
  425. package/dist/server/services/RouterRegisterService.d.mts +2 -0
  426. package/dist/server/services/RouterRegisterService.mjs +2 -0
  427. package/dist/server/services/RouterResourceConfigService.d.mts +2 -0
  428. package/dist/server/services/RouterResourceConfigService.mjs +2 -0
  429. package/dist/server/services/RouterResourceService.d.mts +2 -0
  430. package/dist/server/services/RouterResourceService.mjs +2 -0
  431. package/dist/server/services/RouterService.d.mts +2 -0
  432. package/dist/server/services/RouterService.mjs +1 -0
  433. package/dist/server/services/SchedulerService.d.mts +2 -0
  434. package/dist/server/services/SchedulerService.mjs +2 -0
  435. package/dist/server/services/SeederService.d.mts +2 -0
  436. package/dist/server/services/SeederService.mjs +2 -0
  437. package/dist/server/services/ShellService.d.mts +2 -0
  438. package/dist/server/services/ShellService.mjs +1 -0
  439. package/dist/server/shell-Ba7Df6SC.d.mts +7 -0
  440. package/dist/server/softDelete-DxFNZqGv.d.mts +28 -0
  441. package/dist/server/timestamp-C0vtHKw3.d.mts +9 -0
  442. package/dist/server/tokenRepository-D1xxFlR5.d.mts +7 -0
  443. package/dist/server/tokenSchema-BtAyOUev.d.mts +17 -0
  444. package/dist/server/tryCatch-Dz4OvJig.mjs +2 -0
  445. package/dist/server/update-Z_fdMXo_.d.mts +19 -0
  446. package/dist/server/updateOrCreate-Bgdpb4wQ.d.mts +16 -0
  447. package/dist/server/userLoader-BKAr8c-k.d.mts +12 -0
  448. package/dist/server/userRepository-CMWNp5A6.d.mts +7 -0
  449. package/dist/server/utils/addIdColumn.d.mts +1 -0
  450. package/dist/server/utils/addIdColumn.mjs +2 -0
  451. package/dist/server/utils/addSoftDeleteColumn.d.mts +2 -0
  452. package/dist/server/utils/addSoftDeleteColumn.mjs +2 -0
  453. package/dist/server/utils/addTimestampColumns.d.mts +2 -0
  454. package/dist/server/utils/addTimestampColumns.mjs +2 -0
  455. package/dist/server/utils/basePath.d.mts +2 -0
  456. package/dist/server/utils/basePath.mjs +2 -0
  457. package/dist/server/utils/config.d.mts +2 -0
  458. package/dist/server/utils/config.mjs +2 -0
  459. package/dist/server/utils/createLoaderFactory.d.mts +2 -0
  460. package/dist/server/utils/createLoaderFactory.mjs +2 -0
  461. package/dist/server/utils/cuid.d.mts +2 -0
  462. package/dist/server/utils/cuid.mjs +2 -0
  463. package/dist/server/utils/defineHandler.d.mts +2 -0
  464. package/dist/server/utils/defineHandler.mjs +2 -0
  465. package/dist/server/utils/defineLoader.d.mts +2 -0
  466. package/dist/server/utils/defineLoader.mjs +2 -0
  467. package/dist/server/utils/generateIndexFile.d.mts +2 -0
  468. package/dist/server/utils/generateIndexFile.mjs +2 -0
  469. package/dist/server/utils/importAll.d.mts +2 -0
  470. package/dist/server/utils/importAll.mjs +2 -0
  471. package/dist/server/utils/importOne.d.mts +2 -0
  472. package/dist/server/utils/importOne.mjs +2 -0
  473. package/dist/server/utils/printTable.d.mts +2 -0
  474. package/dist/server/utils/printTable.mjs +2 -0
  475. package/dist/server/validator-Bf0nhLLd.mjs +2 -0
  476. package/dist/shared/ValidatorService-DMd2DBVp.d.mts +103 -0
  477. package/dist/shared/ValidatorService-TM23rW-H.mjs +2 -0
  478. package/dist/shared/compose-e5D0sqye.d.mts +44 -0
  479. package/dist/shared/entities/AclEntity.d.mts +20 -0
  480. package/dist/shared/entities/AclEntity.mjs +2 -0
  481. package/dist/shared/entities/CookieMapEntity.d.mts +18 -0
  482. package/dist/shared/entities/CookieMapEntity.mjs +2 -0
  483. package/dist/shared/entities/DriveConfigEntity.d.mts +129 -0
  484. package/dist/shared/entities/DriveConfigEntity.mjs +2 -0
  485. package/dist/shared/entities/DriveEntryEntity.d.mts +11 -0
  486. package/dist/shared/entities/DriveEntryEntity.mjs +2 -0
  487. package/dist/shared/entities/FileEntity.d.mts +33 -0
  488. package/dist/shared/entities/FileEntity.mjs +2 -0
  489. package/dist/shared/entities/FileMetaEntity.d.mts +27 -0
  490. package/dist/shared/entities/FileMetaEntity.mjs +2 -0
  491. package/dist/shared/entities/FileUploadSessionEntity.d.mts +32 -0
  492. package/dist/shared/entities/FileUploadSessionEntity.mjs +2 -0
  493. package/dist/shared/entities/GitBranchEntity.d.mts +11 -0
  494. package/dist/shared/entities/GitBranchEntity.mjs +2 -0
  495. package/dist/shared/entities/GitCommitEntity.d.mts +14 -0
  496. package/dist/shared/entities/GitCommitEntity.mjs +2 -0
  497. package/dist/shared/entities/HeaderMapEntity.d.mts +18 -0
  498. package/dist/shared/entities/HeaderMapEntity.mjs +2 -0
  499. package/dist/shared/entities/LifecycleHook.d.mts +22 -0
  500. package/dist/shared/entities/LifecycleHook.mjs +2 -0
  501. package/dist/shared/entities/ModuleEntity.d.mts +28 -0
  502. package/dist/shared/entities/ModuleEntity.mjs +2 -0
  503. package/dist/shared/entities/ModuleManifestEntity.d.mts +31 -0
  504. package/dist/shared/entities/ModuleManifestEntity.mjs +2 -0
  505. package/dist/shared/entities/PaginationEntity.d.mts +13 -0
  506. package/dist/shared/entities/PaginationEntity.mjs +2 -0
  507. package/dist/shared/entities/PermissionEntity.d.mts +23 -0
  508. package/dist/shared/entities/PermissionEntity.mjs +2 -0
  509. package/dist/shared/entities/PluginEntity.d.mts +21 -0
  510. package/dist/shared/entities/PluginEntity.mjs +2 -0
  511. package/dist/shared/entities/RoleEntity.d.mts +26 -0
  512. package/dist/shared/entities/RoleEntity.mjs +2 -0
  513. package/dist/shared/entities/UserEntity.d.mts +34 -0
  514. package/dist/shared/entities/UserEntity.mjs +2 -0
  515. package/dist/shared/exceptions/BaseException.d.mts +9 -0
  516. package/dist/shared/exceptions/BaseException.mjs +2 -0
  517. package/dist/shared/exceptions/ShellException.d.mts +12 -0
  518. package/dist/shared/exceptions/ShellException.mjs +2 -0
  519. package/dist/shared/facades/validator.d.mts +7 -0
  520. package/dist/shared/facades/validator.mjs +2 -0
  521. package/dist/shared/index.d.mts +49 -1327
  522. package/dist/shared/index.mjs +1 -2
  523. package/dist/shared/mixins/BaseEntityMixin.d.mts +21 -0
  524. package/dist/shared/mixins/BaseEntityMixin.mjs +2 -0
  525. package/dist/shared/mixins/HooksMixin.d.mts +31 -0
  526. package/dist/shared/mixins/HooksMixin.mjs +2 -0
  527. package/dist/shared/mixins/SoftDeleteMixin.d.mts +11 -0
  528. package/dist/shared/mixins/SoftDeleteMixin.mjs +2 -0
  529. package/dist/shared/mixins/TimestampMixin.d.mts +12 -0
  530. package/dist/shared/mixins/TimestampMixin.mjs +2 -0
  531. package/dist/shared/schemas/dashboardMetaSchema.d.mts +129 -0
  532. package/dist/shared/schemas/dashboardMetaSchema.mjs +2 -0
  533. package/dist/shared/schemas/dashboardSchema.d.mts +128 -0
  534. package/dist/shared/schemas/dashboardSchema.mjs +2 -0
  535. package/dist/shared/schemas/permissionAssignmentSchema.d.mts +15 -0
  536. package/dist/shared/schemas/permissionAssignmentSchema.mjs +2 -0
  537. package/dist/shared/schemas/permissionSchema.d.mts +18 -0
  538. package/dist/shared/schemas/permissionSchema.mjs +2 -0
  539. package/dist/shared/schemas/tokenSchema.d.mts +17 -0
  540. package/dist/shared/schemas/tokenSchema.mjs +2 -0
  541. package/dist/shared/schemas/userSchema.d.mts +168 -0
  542. package/dist/shared/schemas/userSchema.mjs +2 -0
  543. package/dist/shared/services/ConfigService.d.mts +26 -0
  544. package/dist/shared/services/ConfigService.mjs +2 -0
  545. package/dist/shared/services/ContainerService.d.mts +20 -0
  546. package/dist/shared/services/ContainerService.mjs +2 -0
  547. package/dist/shared/services/EmmitterService.d.mts +57 -0
  548. package/dist/shared/services/EmmitterService.mjs +2 -0
  549. package/dist/shared/services/LifecycleService.d.mts +45 -0
  550. package/dist/shared/services/LifecycleService.mjs +2 -0
  551. package/dist/shared/services/LoggerService.d.mts +12 -0
  552. package/dist/shared/services/LoggerService.mjs +2 -0
  553. package/dist/shared/services/TranslatorService.d.mts +26 -0
  554. package/dist/shared/services/TranslatorService.mjs +2 -0
  555. package/dist/shared/services/UploadService.d.mts +9 -0
  556. package/dist/shared/services/UploadService.mjs +2 -0
  557. package/dist/shared/services/ValidatorService.d.mts +2 -0
  558. package/dist/shared/services/ValidatorService.mjs +1 -0
  559. package/dist/shared/typing-CBF7x7JF.d.mts +7 -0
  560. package/dist/shared/utils/compose.d.mts +2 -0
  561. package/dist/shared/utils/compose.mjs +2 -0
  562. package/dist/shared/utils/createId.d.mts +5 -0
  563. package/dist/shared/utils/createId.mjs +2 -0
  564. package/dist/shared/utils/flatten.d.mts +6 -0
  565. package/dist/shared/utils/flatten.mjs +2 -0
  566. package/dist/shared/utils/formatBytes.d.mts +5 -0
  567. package/dist/shared/utils/formatBytes.mjs +2 -0
  568. package/dist/shared/utils/index.d.mts +7 -0
  569. package/dist/shared/utils/index.mjs +1 -0
  570. package/dist/shared/utils/matchPaths.d.mts +5 -0
  571. package/dist/shared/utils/matchPaths.mjs +2 -0
  572. package/dist/shared/utils/parseRouteUrl.d.mts +6 -0
  573. package/dist/shared/utils/parseRouteUrl.mjs +2 -0
  574. package/dist/shared/utils/safeJson.d.mts +6 -0
  575. package/dist/shared/utils/safeJson.mjs +2 -0
  576. package/dist/shared/utils/tryCatch.d.mts +16 -0
  577. package/dist/shared/utils/tryCatch.mjs +2 -0
  578. package/dist/shared/utils/typing.d.mts +2 -0
  579. package/dist/shared/utils/typing.mjs +1 -0
  580. package/package.json +14 -16
  581. package/src/build/createTsdownConfig.ts +22 -0
  582. package/src/build/createViteConfig.ts +51 -0
  583. package/src/client/components.ts +1 -0
  584. package/src/client/composables/useFetchPagination.ts +6 -1
  585. package/src/client/composables/useForm.ts +1 -1
  586. package/src/client/composables/useRoute.ts +10 -0
  587. package/src/client/composables/useRouteQuery.ts +5 -4
  588. package/src/client/facades/emmitter.ts +1 -1
  589. package/src/client/index.ts +1 -0
  590. package/src/client/services/LayoutService.ts +1 -1
  591. package/src/client/zenith-env.d.ts +2 -1
  592. package/src/server/__tests__/helpers/createUser.ts +1 -1
  593. package/src/server/__tests__/setup.ts +1 -1
  594. package/src/server/commands/pluginBuild.ts +60 -0
  595. package/src/server/commands/pluginGenerateId.ts +18 -0
  596. package/src/server/contracts/HttpContextContract.ts +1 -1
  597. package/src/server/entities/MigrationEntity.ts +1 -1
  598. package/src/server/entities/PluginEntity.ts +0 -35
  599. package/src/server/entities/PluginEntryEntity.ts +0 -28
  600. package/src/server/entities/RoutineEntity.ts +1 -1
  601. package/src/server/entities/SeederEntity.ts +1 -1
  602. package/src/server/facades/emmitter.ts +2 -2
  603. package/src/server/facades/lifecycle.ts +6 -0
  604. package/src/server/gateways/DriveS3Gateway.ts +102 -32
  605. package/src/server/gateways/GitGateway.ts +2 -2
  606. package/src/server/globals.ts +2 -1
  607. package/src/server/index.ts +6 -3
  608. package/src/server/loaders/hasManyThroughLoader.ts +15 -6
  609. package/src/server/loaders/loadMetas.ts +1 -1
  610. package/src/server/middlewares/AuthMiddleware.ts +4 -3
  611. package/src/server/queries/index.ts +0 -1
  612. package/src/server/queries/softDelete.ts +1 -16
  613. package/src/server/queries/timestamp.ts +0 -36
  614. package/src/server/repositories/ConfigRepository.ts +1 -1
  615. package/src/server/repositories/UserRepository.ts +1 -1
  616. package/src/server/schemas/envSchema.ts +3 -2
  617. package/src/server/services/CliService.ts +12 -2
  618. package/src/server/services/CliWrapperService.ts +50 -4
  619. package/src/server/services/ConfigManagerService.ts +13 -5
  620. package/src/server/services/EncryptService.ts +1 -1
  621. package/src/server/services/EnvService.ts +13 -4
  622. package/src/server/services/ExceptionService.ts +2 -1
  623. package/src/server/services/HasherService.ts +6 -2
  624. package/src/server/services/HttpService.ts +24 -12
  625. package/src/server/services/MigratorService.ts +1 -1
  626. package/src/server/services/RouterService.ts +1 -1
  627. package/src/server/services/SchedulerService.ts +5 -2
  628. package/src/server/services/SeederService.ts +1 -1
  629. package/src/server/utils/addSoftDeleteColumn.ts +17 -0
  630. package/src/server/utils/addTimestampColumns.ts +39 -0
  631. package/src/server/utils/basePath.ts +16 -1
  632. package/src/server/utils/config.ts +19 -0
  633. package/src/server/utils/createLoaderFactory.ts +1 -1
  634. package/src/server/utils/importAll.ts +1 -1
  635. package/src/server/utils/printTable.ts +7 -1
  636. package/src/shared/services/ConfigService.ts +5 -2
  637. package/src/shared/services/EmmitterService.ts +3 -2
  638. package/src/shared/utils/flatten.ts +1 -1
  639. package/src/shared/validators/array.ts +13 -0
  640. package/src/shared/validators/index.ts +1 -0
  641. package/src/shared/validators/paginationValidator.ts +5 -5
  642. package/src/shared/validators/urlValidator.ts +1 -1
  643. package/src/tests/services/HttpTesterService.ts +63 -0
  644. package/tsdown.config.ts +152 -121
  645. package/vite/createViteConfig.js +1 -1
  646. package/bin/zkit.js +0 -26
  647. package/cli/commands/build.js +0 -55
  648. package/cli/commands/generateLegacyFolder.js +0 -38
  649. package/cli/commands/generatePluginId.js +0 -17
  650. package/cli/config.js +0 -23
  651. package/cli/utils/createWrapper.js +0 -17
  652. package/commands/release.js +0 -78
  653. package/legacy/client/components/Alert.vue +0 -3
  654. package/legacy/client/components/AlertButton.vue +0 -3
  655. package/legacy/client/components/Button.vue +0 -3
  656. package/legacy/client/components/ClientOnly.vue +0 -3
  657. package/legacy/client/components/ColorPicker.vue +0 -3
  658. package/legacy/client/components/ColorWheel.vue +0 -3
  659. package/legacy/client/components/Component.vue +0 -3
  660. package/legacy/client/components/DataTable.vue +0 -4
  661. package/legacy/client/components/DataTablePagination.vue +0 -3
  662. package/legacy/client/components/DatePicker.vue +0 -3
  663. package/legacy/client/components/DialogForm.vue +0 -4
  664. package/legacy/client/components/FileUploader.vue +0 -3
  665. package/legacy/client/components/FormAutoFieldList.vue +0 -5
  666. package/legacy/client/components/FormAutocomplete.vue +0 -3
  667. package/legacy/client/components/FormColorPicker.vue +0 -3
  668. package/legacy/client/components/FormDatePicker.vue +0 -3
  669. package/legacy/client/components/FormFilePicker.vue +0 -3
  670. package/legacy/client/components/FormFileUploader.vue +0 -3
  671. package/legacy/client/components/FormImageUploader.vue +0 -3
  672. package/legacy/client/components/FormJsonInput.vue +0 -3
  673. package/legacy/client/components/FormSelect.vue +0 -3
  674. package/legacy/client/components/FormStringListInput.vue +0 -3
  675. package/legacy/client/components/FormSwitch.vue +0 -3
  676. package/legacy/client/components/FormTextField.vue +0 -3
  677. package/legacy/client/components/FormTextarea.vue +0 -3
  678. package/legacy/client/components/Icon.vue +0 -3
  679. package/legacy/client/components/Image.vue +0 -3
  680. package/legacy/client/components/JsonInput.vue +0 -3
  681. package/legacy/client/components/Logo.vue +0 -3
  682. package/legacy/client/components/LogoIcon.vue +0 -3
  683. package/legacy/client/components/ObjectInspect.vue +0 -3
  684. package/legacy/client/components/PageCrud.vue +0 -3
  685. package/legacy/client/components/PageSubtitle.vue +0 -3
  686. package/legacy/client/components/PageTable.vue +0 -3
  687. package/legacy/client/components/PageTitle.vue +0 -3
  688. package/legacy/client/components/Pagination.vue +0 -3
  689. package/legacy/client/components/Select.vue +0 -3
  690. package/legacy/client/components/StringListInput.vue +0 -3
  691. package/legacy/client/components/Switch.vue +0 -3
  692. package/legacy/client/components/TextField.vue +0 -3
  693. package/legacy/client/components/Textarea.vue +0 -3
  694. package/legacy/client/components/UserMenu.vue +0 -3
  695. package/legacy/client/components/index.ts +0 -349
  696. package/legacy/client/components/ui/accordion/Accordion.vue +0 -3
  697. package/legacy/client/components/ui/accordion/AccordionContent.vue +0 -3
  698. package/legacy/client/components/ui/accordion/AccordionItem.vue +0 -3
  699. package/legacy/client/components/ui/accordion/AccordionTrigger.vue +0 -3
  700. package/legacy/client/components/ui/accordion/index.ts +0 -1
  701. package/legacy/client/components/ui/alert/Alert.vue +0 -3
  702. package/legacy/client/components/ui/alert/AlertDescription.vue +0 -3
  703. package/legacy/client/components/ui/alert/AlertTitle.vue +0 -3
  704. package/legacy/client/components/ui/alert/index.ts +0 -1
  705. package/legacy/client/components/ui/alert-dialog/AlertDialog.vue +0 -3
  706. package/legacy/client/components/ui/alert-dialog/AlertDialogAction.vue +0 -3
  707. package/legacy/client/components/ui/alert-dialog/AlertDialogCancel.vue +0 -3
  708. package/legacy/client/components/ui/alert-dialog/AlertDialogContent.vue +0 -3
  709. package/legacy/client/components/ui/alert-dialog/AlertDialogDescription.vue +0 -3
  710. package/legacy/client/components/ui/alert-dialog/AlertDialogFooter.vue +0 -3
  711. package/legacy/client/components/ui/alert-dialog/AlertDialogHeader.vue +0 -3
  712. package/legacy/client/components/ui/alert-dialog/AlertDialogTitle.vue +0 -3
  713. package/legacy/client/components/ui/alert-dialog/AlertDialogTrigger.vue +0 -3
  714. package/legacy/client/components/ui/alert-dialog/index.ts +0 -1
  715. package/legacy/client/components/ui/aspect-ratio/AspectRatio.vue +0 -3
  716. package/legacy/client/components/ui/aspect-ratio/index.ts +0 -1
  717. package/legacy/client/components/ui/avatar/Avatar.vue +0 -3
  718. package/legacy/client/components/ui/avatar/AvatarFallback.vue +0 -3
  719. package/legacy/client/components/ui/avatar/AvatarImage.vue +0 -3
  720. package/legacy/client/components/ui/avatar/index.ts +0 -1
  721. package/legacy/client/components/ui/badge/Badge.vue +0 -3
  722. package/legacy/client/components/ui/badge/index.ts +0 -1
  723. package/legacy/client/components/ui/breadcrumb/Breadcrumb.vue +0 -3
  724. package/legacy/client/components/ui/breadcrumb/BreadcrumbEllipsis.vue +0 -3
  725. package/legacy/client/components/ui/breadcrumb/BreadcrumbItem.vue +0 -3
  726. package/legacy/client/components/ui/breadcrumb/BreadcrumbLink.vue +0 -3
  727. package/legacy/client/components/ui/breadcrumb/BreadcrumbList.vue +0 -3
  728. package/legacy/client/components/ui/breadcrumb/BreadcrumbPage.vue +0 -3
  729. package/legacy/client/components/ui/breadcrumb/BreadcrumbSeparator.vue +0 -3
  730. package/legacy/client/components/ui/breadcrumb/index.ts +0 -1
  731. package/legacy/client/components/ui/button/Button.vue +0 -3
  732. package/legacy/client/components/ui/button/index.ts +0 -1
  733. package/legacy/client/components/ui/calendar/Calendar.vue +0 -3
  734. package/legacy/client/components/ui/calendar/CalendarCell.vue +0 -3
  735. package/legacy/client/components/ui/calendar/CalendarCellTrigger.vue +0 -3
  736. package/legacy/client/components/ui/calendar/CalendarGrid.vue +0 -3
  737. package/legacy/client/components/ui/calendar/CalendarGridBody.vue +0 -3
  738. package/legacy/client/components/ui/calendar/CalendarGridHead.vue +0 -3
  739. package/legacy/client/components/ui/calendar/CalendarGridRow.vue +0 -3
  740. package/legacy/client/components/ui/calendar/CalendarHeadCell.vue +0 -3
  741. package/legacy/client/components/ui/calendar/CalendarHeader.vue +0 -3
  742. package/legacy/client/components/ui/calendar/CalendarHeading.vue +0 -3
  743. package/legacy/client/components/ui/calendar/CalendarNextButton.vue +0 -3
  744. package/legacy/client/components/ui/calendar/CalendarPrevButton.vue +0 -3
  745. package/legacy/client/components/ui/calendar/index.ts +0 -1
  746. package/legacy/client/components/ui/card/Card.vue +0 -3
  747. package/legacy/client/components/ui/card/CardAction.vue +0 -3
  748. package/legacy/client/components/ui/card/CardContent.vue +0 -3
  749. package/legacy/client/components/ui/card/CardDescription.vue +0 -3
  750. package/legacy/client/components/ui/card/CardFooter.vue +0 -3
  751. package/legacy/client/components/ui/card/CardHeader.vue +0 -3
  752. package/legacy/client/components/ui/card/CardTitle.vue +0 -3
  753. package/legacy/client/components/ui/card/index.ts +0 -1
  754. package/legacy/client/components/ui/carousel/Carousel.vue +0 -3
  755. package/legacy/client/components/ui/carousel/CarouselContent.vue +0 -3
  756. package/legacy/client/components/ui/carousel/CarouselItem.vue +0 -3
  757. package/legacy/client/components/ui/carousel/CarouselNext.vue +0 -3
  758. package/legacy/client/components/ui/carousel/CarouselPrevious.vue +0 -3
  759. package/legacy/client/components/ui/carousel/index.ts +0 -1
  760. package/legacy/client/components/ui/checkbox/Checkbox.vue +0 -3
  761. package/legacy/client/components/ui/checkbox/index.ts +0 -1
  762. package/legacy/client/components/ui/collapsible/Collapsible.vue +0 -3
  763. package/legacy/client/components/ui/collapsible/CollapsibleContent.vue +0 -3
  764. package/legacy/client/components/ui/collapsible/CollapsibleTrigger.vue +0 -3
  765. package/legacy/client/components/ui/collapsible/index.ts +0 -1
  766. package/legacy/client/components/ui/combobox/Combobox.vue +0 -3
  767. package/legacy/client/components/ui/combobox/ComboboxAnchor.vue +0 -3
  768. package/legacy/client/components/ui/combobox/ComboboxEmpty.vue +0 -3
  769. package/legacy/client/components/ui/combobox/ComboboxGroup.vue +0 -3
  770. package/legacy/client/components/ui/combobox/ComboboxInput.vue +0 -3
  771. package/legacy/client/components/ui/combobox/ComboboxItem.vue +0 -3
  772. package/legacy/client/components/ui/combobox/ComboboxItemIndicator.vue +0 -3
  773. package/legacy/client/components/ui/combobox/ComboboxList.vue +0 -3
  774. package/legacy/client/components/ui/combobox/ComboboxSeparator.vue +0 -3
  775. package/legacy/client/components/ui/combobox/ComboboxTrigger.vue +0 -3
  776. package/legacy/client/components/ui/combobox/ComboboxViewport.vue +0 -3
  777. package/legacy/client/components/ui/combobox/index.ts +0 -1
  778. package/legacy/client/components/ui/command/Command.vue +0 -3
  779. package/legacy/client/components/ui/command/CommandDialog.vue +0 -3
  780. package/legacy/client/components/ui/command/CommandEmpty.vue +0 -3
  781. package/legacy/client/components/ui/command/CommandGroup.vue +0 -3
  782. package/legacy/client/components/ui/command/CommandInput.vue +0 -3
  783. package/legacy/client/components/ui/command/CommandItem.vue +0 -3
  784. package/legacy/client/components/ui/command/CommandList.vue +0 -3
  785. package/legacy/client/components/ui/command/CommandSeparator.vue +0 -3
  786. package/legacy/client/components/ui/command/CommandShortcut.vue +0 -3
  787. package/legacy/client/components/ui/command/index.ts +0 -1
  788. package/legacy/client/components/ui/context-menu/ContextMenu.vue +0 -3
  789. package/legacy/client/components/ui/context-menu/ContextMenuCheckboxItem.vue +0 -3
  790. package/legacy/client/components/ui/context-menu/ContextMenuContent.vue +0 -3
  791. package/legacy/client/components/ui/context-menu/ContextMenuGroup.vue +0 -3
  792. package/legacy/client/components/ui/context-menu/ContextMenuItem.vue +0 -3
  793. package/legacy/client/components/ui/context-menu/ContextMenuLabel.vue +0 -3
  794. package/legacy/client/components/ui/context-menu/ContextMenuPortal.vue +0 -3
  795. package/legacy/client/components/ui/context-menu/ContextMenuRadioGroup.vue +0 -3
  796. package/legacy/client/components/ui/context-menu/ContextMenuRadioItem.vue +0 -3
  797. package/legacy/client/components/ui/context-menu/ContextMenuSeparator.vue +0 -3
  798. package/legacy/client/components/ui/context-menu/ContextMenuShortcut.vue +0 -3
  799. package/legacy/client/components/ui/context-menu/ContextMenuSub.vue +0 -3
  800. package/legacy/client/components/ui/context-menu/ContextMenuSubContent.vue +0 -3
  801. package/legacy/client/components/ui/context-menu/ContextMenuSubTrigger.vue +0 -3
  802. package/legacy/client/components/ui/context-menu/ContextMenuTrigger.vue +0 -3
  803. package/legacy/client/components/ui/context-menu/index.ts +0 -1
  804. package/legacy/client/components/ui/dialog/Dialog.vue +0 -3
  805. package/legacy/client/components/ui/dialog/DialogClose.vue +0 -3
  806. package/legacy/client/components/ui/dialog/DialogContent.vue +0 -3
  807. package/legacy/client/components/ui/dialog/DialogDescription.vue +0 -3
  808. package/legacy/client/components/ui/dialog/DialogFooter.vue +0 -3
  809. package/legacy/client/components/ui/dialog/DialogHeader.vue +0 -3
  810. package/legacy/client/components/ui/dialog/DialogOverlay.vue +0 -3
  811. package/legacy/client/components/ui/dialog/DialogScrollContent.vue +0 -3
  812. package/legacy/client/components/ui/dialog/DialogTitle.vue +0 -3
  813. package/legacy/client/components/ui/dialog/DialogTrigger.vue +0 -3
  814. package/legacy/client/components/ui/dialog/index.ts +0 -1
  815. package/legacy/client/components/ui/drawer/Drawer.vue +0 -3
  816. package/legacy/client/components/ui/drawer/DrawerClose.vue +0 -3
  817. package/legacy/client/components/ui/drawer/DrawerContent.vue +0 -3
  818. package/legacy/client/components/ui/drawer/DrawerDescription.vue +0 -3
  819. package/legacy/client/components/ui/drawer/DrawerFooter.vue +0 -3
  820. package/legacy/client/components/ui/drawer/DrawerHeader.vue +0 -3
  821. package/legacy/client/components/ui/drawer/DrawerOverlay.vue +0 -3
  822. package/legacy/client/components/ui/drawer/DrawerTitle.vue +0 -3
  823. package/legacy/client/components/ui/drawer/DrawerTrigger.vue +0 -3
  824. package/legacy/client/components/ui/drawer/index.ts +0 -1
  825. package/legacy/client/components/ui/dropdown-menu/DropdownMenu.vue +0 -3
  826. package/legacy/client/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -3
  827. package/legacy/client/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -3
  828. package/legacy/client/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -3
  829. package/legacy/client/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -3
  830. package/legacy/client/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -3
  831. package/legacy/client/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -3
  832. package/legacy/client/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -3
  833. package/legacy/client/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -3
  834. package/legacy/client/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -3
  835. package/legacy/client/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -3
  836. package/legacy/client/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -3
  837. package/legacy/client/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -3
  838. package/legacy/client/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -3
  839. package/legacy/client/components/ui/dropdown-menu/index.ts +0 -1
  840. package/legacy/client/components/ui/form/FormControl.vue +0 -3
  841. package/legacy/client/components/ui/form/FormDescription.vue +0 -3
  842. package/legacy/client/components/ui/form/FormItem.vue +0 -3
  843. package/legacy/client/components/ui/form/FormLabel.vue +0 -3
  844. package/legacy/client/components/ui/form/FormMessage.vue +0 -3
  845. package/legacy/client/components/ui/form/index.ts +0 -1
  846. package/legacy/client/components/ui/hover-card/HoverCard.vue +0 -3
  847. package/legacy/client/components/ui/hover-card/HoverCardContent.vue +0 -3
  848. package/legacy/client/components/ui/hover-card/HoverCardTrigger.vue +0 -3
  849. package/legacy/client/components/ui/hover-card/index.ts +0 -1
  850. package/legacy/client/components/ui/input/Input.vue +0 -3
  851. package/legacy/client/components/ui/input/index.ts +0 -1
  852. package/legacy/client/components/ui/label/Label.vue +0 -3
  853. package/legacy/client/components/ui/label/index.ts +0 -1
  854. package/legacy/client/components/ui/menubar/Menubar.vue +0 -3
  855. package/legacy/client/components/ui/menubar/MenubarCheckboxItem.vue +0 -3
  856. package/legacy/client/components/ui/menubar/MenubarContent.vue +0 -3
  857. package/legacy/client/components/ui/menubar/MenubarGroup.vue +0 -3
  858. package/legacy/client/components/ui/menubar/MenubarItem.vue +0 -3
  859. package/legacy/client/components/ui/menubar/MenubarLabel.vue +0 -3
  860. package/legacy/client/components/ui/menubar/MenubarMenu.vue +0 -3
  861. package/legacy/client/components/ui/menubar/MenubarRadioGroup.vue +0 -3
  862. package/legacy/client/components/ui/menubar/MenubarRadioItem.vue +0 -3
  863. package/legacy/client/components/ui/menubar/MenubarSeparator.vue +0 -3
  864. package/legacy/client/components/ui/menubar/MenubarShortcut.vue +0 -3
  865. package/legacy/client/components/ui/menubar/MenubarSub.vue +0 -3
  866. package/legacy/client/components/ui/menubar/MenubarSubContent.vue +0 -3
  867. package/legacy/client/components/ui/menubar/MenubarSubTrigger.vue +0 -3
  868. package/legacy/client/components/ui/menubar/MenubarTrigger.vue +0 -3
  869. package/legacy/client/components/ui/menubar/index.ts +0 -1
  870. package/legacy/client/components/ui/navigation-menu/NavigationMenu.vue +0 -3
  871. package/legacy/client/components/ui/navigation-menu/NavigationMenuContent.vue +0 -3
  872. package/legacy/client/components/ui/navigation-menu/NavigationMenuIndicator.vue +0 -3
  873. package/legacy/client/components/ui/navigation-menu/NavigationMenuItem.vue +0 -3
  874. package/legacy/client/components/ui/navigation-menu/NavigationMenuLink.vue +0 -3
  875. package/legacy/client/components/ui/navigation-menu/NavigationMenuList.vue +0 -3
  876. package/legacy/client/components/ui/navigation-menu/NavigationMenuTrigger.vue +0 -3
  877. package/legacy/client/components/ui/navigation-menu/NavigationMenuViewport.vue +0 -3
  878. package/legacy/client/components/ui/navigation-menu/index.ts +0 -1
  879. package/legacy/client/components/ui/number-field/NumberField.vue +0 -3
  880. package/legacy/client/components/ui/number-field/NumberFieldContent.vue +0 -3
  881. package/legacy/client/components/ui/number-field/NumberFieldDecrement.vue +0 -3
  882. package/legacy/client/components/ui/number-field/NumberFieldIncrement.vue +0 -3
  883. package/legacy/client/components/ui/number-field/NumberFieldInput.vue +0 -3
  884. package/legacy/client/components/ui/number-field/index.ts +0 -1
  885. package/legacy/client/components/ui/pagination/Pagination.vue +0 -3
  886. package/legacy/client/components/ui/pagination/PaginationContent.vue +0 -3
  887. package/legacy/client/components/ui/pagination/PaginationEllipsis.vue +0 -3
  888. package/legacy/client/components/ui/pagination/PaginationFirst.vue +0 -3
  889. package/legacy/client/components/ui/pagination/PaginationItem.vue +0 -3
  890. package/legacy/client/components/ui/pagination/PaginationLast.vue +0 -3
  891. package/legacy/client/components/ui/pagination/PaginationNext.vue +0 -3
  892. package/legacy/client/components/ui/pagination/PaginationPrevious.vue +0 -3
  893. package/legacy/client/components/ui/pagination/index.ts +0 -1
  894. package/legacy/client/components/ui/pin-input/PinInput.vue +0 -3
  895. package/legacy/client/components/ui/pin-input/PinInputGroup.vue +0 -3
  896. package/legacy/client/components/ui/pin-input/PinInputSeparator.vue +0 -3
  897. package/legacy/client/components/ui/pin-input/PinInputSlot.vue +0 -3
  898. package/legacy/client/components/ui/pin-input/index.ts +0 -1
  899. package/legacy/client/components/ui/popover/Popover.vue +0 -3
  900. package/legacy/client/components/ui/popover/PopoverAnchor.vue +0 -3
  901. package/legacy/client/components/ui/popover/PopoverContent.vue +0 -3
  902. package/legacy/client/components/ui/popover/PopoverTrigger.vue +0 -3
  903. package/legacy/client/components/ui/popover/index.ts +0 -1
  904. package/legacy/client/components/ui/progress/Progress.vue +0 -3
  905. package/legacy/client/components/ui/progress/index.ts +0 -1
  906. package/legacy/client/components/ui/radio-group/RadioGroup.vue +0 -3
  907. package/legacy/client/components/ui/radio-group/RadioGroupItem.vue +0 -3
  908. package/legacy/client/components/ui/radio-group/index.ts +0 -1
  909. package/legacy/client/components/ui/range-calendar/RangeCalendar.vue +0 -3
  910. package/legacy/client/components/ui/range-calendar/RangeCalendarCell.vue +0 -3
  911. package/legacy/client/components/ui/range-calendar/RangeCalendarCellTrigger.vue +0 -3
  912. package/legacy/client/components/ui/range-calendar/RangeCalendarGrid.vue +0 -3
  913. package/legacy/client/components/ui/range-calendar/RangeCalendarGridBody.vue +0 -3
  914. package/legacy/client/components/ui/range-calendar/RangeCalendarGridHead.vue +0 -3
  915. package/legacy/client/components/ui/range-calendar/RangeCalendarGridRow.vue +0 -3
  916. package/legacy/client/components/ui/range-calendar/RangeCalendarHeadCell.vue +0 -3
  917. package/legacy/client/components/ui/range-calendar/RangeCalendarHeader.vue +0 -3
  918. package/legacy/client/components/ui/range-calendar/RangeCalendarHeading.vue +0 -3
  919. package/legacy/client/components/ui/range-calendar/RangeCalendarNextButton.vue +0 -3
  920. package/legacy/client/components/ui/range-calendar/RangeCalendarPrevButton.vue +0 -3
  921. package/legacy/client/components/ui/range-calendar/index.ts +0 -1
  922. package/legacy/client/components/ui/resizable/ResizableHandle.vue +0 -3
  923. package/legacy/client/components/ui/resizable/ResizablePanel.vue +0 -3
  924. package/legacy/client/components/ui/resizable/ResizablePanelGroup.vue +0 -3
  925. package/legacy/client/components/ui/resizable/index.ts +0 -1
  926. package/legacy/client/components/ui/scroll-area/ScrollArea.vue +0 -3
  927. package/legacy/client/components/ui/scroll-area/ScrollBar.vue +0 -3
  928. package/legacy/client/components/ui/scroll-area/index.ts +0 -1
  929. package/legacy/client/components/ui/select/Select.vue +0 -3
  930. package/legacy/client/components/ui/select/SelectContent.vue +0 -3
  931. package/legacy/client/components/ui/select/SelectGroup.vue +0 -3
  932. package/legacy/client/components/ui/select/SelectItem.vue +0 -3
  933. package/legacy/client/components/ui/select/SelectItemText.vue +0 -3
  934. package/legacy/client/components/ui/select/SelectLabel.vue +0 -3
  935. package/legacy/client/components/ui/select/SelectScrollDownButton.vue +0 -3
  936. package/legacy/client/components/ui/select/SelectScrollUpButton.vue +0 -3
  937. package/legacy/client/components/ui/select/SelectSeparator.vue +0 -3
  938. package/legacy/client/components/ui/select/SelectTrigger.vue +0 -3
  939. package/legacy/client/components/ui/select/SelectValue.vue +0 -3
  940. package/legacy/client/components/ui/select/index.ts +0 -1
  941. package/legacy/client/components/ui/separator/Separator.vue +0 -3
  942. package/legacy/client/components/ui/separator/index.ts +0 -1
  943. package/legacy/client/components/ui/sheet/Sheet.vue +0 -3
  944. package/legacy/client/components/ui/sheet/SheetClose.vue +0 -3
  945. package/legacy/client/components/ui/sheet/SheetContent.vue +0 -3
  946. package/legacy/client/components/ui/sheet/SheetDescription.vue +0 -3
  947. package/legacy/client/components/ui/sheet/SheetFooter.vue +0 -3
  948. package/legacy/client/components/ui/sheet/SheetHeader.vue +0 -3
  949. package/legacy/client/components/ui/sheet/SheetOverlay.vue +0 -3
  950. package/legacy/client/components/ui/sheet/SheetTitle.vue +0 -3
  951. package/legacy/client/components/ui/sheet/SheetTrigger.vue +0 -3
  952. package/legacy/client/components/ui/sheet/index.ts +0 -1
  953. package/legacy/client/components/ui/sidebar/Sidebar.vue +0 -3
  954. package/legacy/client/components/ui/sidebar/SidebarContent.vue +0 -3
  955. package/legacy/client/components/ui/sidebar/SidebarFooter.vue +0 -3
  956. package/legacy/client/components/ui/sidebar/SidebarGroup.vue +0 -3
  957. package/legacy/client/components/ui/sidebar/SidebarGroupAction.vue +0 -3
  958. package/legacy/client/components/ui/sidebar/SidebarGroupContent.vue +0 -3
  959. package/legacy/client/components/ui/sidebar/SidebarGroupLabel.vue +0 -3
  960. package/legacy/client/components/ui/sidebar/SidebarHeader.vue +0 -3
  961. package/legacy/client/components/ui/sidebar/SidebarInput.vue +0 -3
  962. package/legacy/client/components/ui/sidebar/SidebarInset.vue +0 -3
  963. package/legacy/client/components/ui/sidebar/SidebarMenu.vue +0 -3
  964. package/legacy/client/components/ui/sidebar/SidebarMenuAction.vue +0 -3
  965. package/legacy/client/components/ui/sidebar/SidebarMenuBadge.vue +0 -3
  966. package/legacy/client/components/ui/sidebar/SidebarMenuButton.vue +0 -3
  967. package/legacy/client/components/ui/sidebar/SidebarMenuButtonChild.vue +0 -3
  968. package/legacy/client/components/ui/sidebar/SidebarMenuItem.vue +0 -3
  969. package/legacy/client/components/ui/sidebar/SidebarMenuSkeleton.vue +0 -3
  970. package/legacy/client/components/ui/sidebar/SidebarMenuSub.vue +0 -3
  971. package/legacy/client/components/ui/sidebar/SidebarMenuSubButton.vue +0 -3
  972. package/legacy/client/components/ui/sidebar/SidebarMenuSubItem.vue +0 -3
  973. package/legacy/client/components/ui/sidebar/SidebarProvider.vue +0 -3
  974. package/legacy/client/components/ui/sidebar/SidebarRail.vue +0 -3
  975. package/legacy/client/components/ui/sidebar/SidebarSeparator.vue +0 -3
  976. package/legacy/client/components/ui/sidebar/SidebarTrigger.vue +0 -3
  977. package/legacy/client/components/ui/sidebar/index.ts +0 -1
  978. package/legacy/client/components/ui/skeleton/Skeleton.vue +0 -3
  979. package/legacy/client/components/ui/skeleton/index.ts +0 -1
  980. package/legacy/client/components/ui/slider/Slider.vue +0 -3
  981. package/legacy/client/components/ui/slider/index.ts +0 -1
  982. package/legacy/client/components/ui/sonner/Sonner.vue +0 -3
  983. package/legacy/client/components/ui/sonner/index.ts +0 -1
  984. package/legacy/client/components/ui/stepper/Stepper.vue +0 -3
  985. package/legacy/client/components/ui/stepper/StepperDescription.vue +0 -3
  986. package/legacy/client/components/ui/stepper/StepperIndicator.vue +0 -3
  987. package/legacy/client/components/ui/stepper/StepperItem.vue +0 -3
  988. package/legacy/client/components/ui/stepper/StepperSeparator.vue +0 -3
  989. package/legacy/client/components/ui/stepper/StepperTitle.vue +0 -3
  990. package/legacy/client/components/ui/stepper/StepperTrigger.vue +0 -3
  991. package/legacy/client/components/ui/stepper/index.ts +0 -1
  992. package/legacy/client/components/ui/switch/Switch.vue +0 -3
  993. package/legacy/client/components/ui/switch/index.ts +0 -1
  994. package/legacy/client/components/ui/table/Table.vue +0 -3
  995. package/legacy/client/components/ui/table/TableBody.vue +0 -3
  996. package/legacy/client/components/ui/table/TableCaption.vue +0 -3
  997. package/legacy/client/components/ui/table/TableCell.vue +0 -3
  998. package/legacy/client/components/ui/table/TableEmpty.vue +0 -3
  999. package/legacy/client/components/ui/table/TableFooter.vue +0 -3
  1000. package/legacy/client/components/ui/table/TableHead.vue +0 -3
  1001. package/legacy/client/components/ui/table/TableHeader.vue +0 -3
  1002. package/legacy/client/components/ui/table/TableRow.vue +0 -3
  1003. package/legacy/client/components/ui/table/index.ts +0 -1
  1004. package/legacy/client/components/ui/tabs/Tabs.vue +0 -3
  1005. package/legacy/client/components/ui/tabs/TabsContent.vue +0 -3
  1006. package/legacy/client/components/ui/tabs/TabsList.vue +0 -3
  1007. package/legacy/client/components/ui/tabs/TabsTrigger.vue +0 -3
  1008. package/legacy/client/components/ui/tabs/index.ts +0 -1
  1009. package/legacy/client/components/ui/tags-input/TagsInput.vue +0 -3
  1010. package/legacy/client/components/ui/tags-input/TagsInputInput.vue +0 -3
  1011. package/legacy/client/components/ui/tags-input/TagsInputItem.vue +0 -3
  1012. package/legacy/client/components/ui/tags-input/TagsInputItemDelete.vue +0 -3
  1013. package/legacy/client/components/ui/tags-input/TagsInputItemText.vue +0 -3
  1014. package/legacy/client/components/ui/tags-input/index.ts +0 -1
  1015. package/legacy/client/components/ui/textarea/Textarea.vue +0 -3
  1016. package/legacy/client/components/ui/textarea/index.ts +0 -1
  1017. package/legacy/client/components/ui/toggle/Toggle.vue +0 -3
  1018. package/legacy/client/components/ui/toggle/index.ts +0 -1
  1019. package/legacy/client/components/ui/toggle-group/ToggleGroup.vue +0 -3
  1020. package/legacy/client/components/ui/toggle-group/ToggleGroupItem.vue +0 -3
  1021. package/legacy/client/components/ui/toggle-group/index.ts +0 -1
  1022. package/legacy/client/components/ui/tooltip/Tooltip.vue +0 -3
  1023. package/legacy/client/components/ui/tooltip/TooltipContent.vue +0 -3
  1024. package/legacy/client/components/ui/tooltip/TooltipProvider.vue +0 -3
  1025. package/legacy/client/components/ui/tooltip/TooltipTrigger.vue +0 -3
  1026. package/legacy/client/components/ui/tooltip/index.ts +0 -1
  1027. package/legacy/client/facades/acl.facade.ts +0 -1
  1028. package/legacy/client/facades/app.facade.ts +0 -6
  1029. package/legacy/client/facades/auth.facade.ts +0 -1
  1030. package/legacy/client/facades/config.facade.ts +0 -1
  1031. package/legacy/client/facades/fetch.facade.ts +0 -1
  1032. package/legacy/client/facades/logger.facade.ts +0 -1
  1033. package/legacy/client/facades/menu.facade.ts +0 -1
  1034. package/legacy/client/facades/router.facade.ts +0 -1
  1035. package/legacy/client/facades/translator.facade.ts +0 -10
  1036. package/legacy/client/layouts/AdminLayout.vue +0 -3
  1037. package/legacy/client/utils/autoPages.ts +0 -1
  1038. package/legacy/client/utils/createId.ts +0 -1
  1039. package/legacy/client/utils/di.ts +0 -1
  1040. package/legacy/client/utils/fetcher.ts +0 -1
  1041. package/legacy/client/utils/file.ts +0 -1
  1042. package/legacy/client/utils/index.ts +0 -7
  1043. package/legacy/client/utils/logger.ts +0 -1
  1044. package/legacy/client/utils/toast.ts +0 -1
  1045. package/legacy/server/entities/file.entity.ts +0 -4
  1046. package/legacy/server/exceptions/base.ts +0 -4
  1047. package/legacy/server/facades/arte.facade.ts +0 -6
  1048. package/legacy/server/facades/config.facade.ts +0 -4
  1049. package/legacy/server/facades/db.facade.ts +0 -4
  1050. package/legacy/server/facades/download.facade.ts +0 -4
  1051. package/legacy/server/facades/drive.facade.ts +0 -4
  1052. package/legacy/server/facades/emmitter.facade.ts +0 -4
  1053. package/legacy/server/facades/logger.facade.ts +0 -4
  1054. package/legacy/server/facades/router.facade.ts +0 -4
  1055. package/legacy/server/facades/scheduler.facade.ts +0 -4
  1056. package/legacy/server/middlewares/auth.middleware.ts +0 -6
  1057. package/legacy/server/middlewares/authorization.middleware.ts +0 -8
  1058. package/legacy/server/mixins/hooks.mixin.ts +0 -6
  1059. package/legacy/server/mixins/model.mixin.ts +0 -6
  1060. package/legacy/server/mixins/modelConfig.mixin.ts +0 -4
  1061. package/legacy/server/queries/index.ts +0 -6
  1062. package/legacy/server/services/metadataQuery.service.ts +0 -6
  1063. package/legacy/server/services/routerResourceConfig.service.ts +0 -5
  1064. package/legacy/shared/services/validator.service.ts +0 -4
  1065. package/legacy/shared/utils/compose.ts +0 -8
  1066. package/legacy/shared/utils/tryCatch.ts +0 -7
  1067. package/src/server/services/HttpTesterService.ts +0 -62
  1068. /package/src/server/{queries/incremental.ts → utils/addIdColumn.ts} +0 -0
@@ -1,2886 +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/incremental.d.ts
2639
- declare module 'kysely' {
2640
- interface CreateTableBuilder<TB extends string, C extends string = never> {
2641
- addIdColumn<CN extends string = 'id'>(col?: CN): CreateTableBuilder<TB, C | CN>;
2642
- }
2643
- }
2644
- //#endregion
2645
- //#region src/server/queries/softDelete.d.ts
2646
- type WhereCapable<QB> = {
2647
- where: (...args: any[]) => QB;
2648
- };
2649
- type UpdateFrom$1<T extends keyof DatabaseContract> = ReturnType<typeof database.updateTable<T>>;
2650
- interface SoftDeleteOptions<T extends keyof DatabaseContract> {
2651
- serialize?: (row: Selectable<DatabaseContract[T]>) => any;
2652
- query: (qb: UpdateFrom$1<T>) => UpdateFrom$1<T>;
2653
- }
2654
- type SoftDeleteResult<T extends keyof DatabaseContract, O extends SoftDeleteOptions<T> | undefined> = O extends undefined ? Selectable<DatabaseContract[T]>[] : O extends {
2655
- serialize: (row: Selectable<DatabaseContract[T]>) => infer R;
2656
- } ? R[] : Selectable<DatabaseContract[T]>[];
2657
- declare function whereNotDeleted<QB extends WhereCapable<QB>>(qb: QB): QB;
2658
- declare function undeleted(qb: ExpressionBuilder$1<any, any>): _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
2659
- declare namespace undeleted {
2660
- var column: (col: string) => (qb: ExpressionBuilder$1<any, any>) => _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
2661
- }
2662
- declare const deleted: (qb: ExpressionBuilder$1<any, any>) => _$kysely.ExpressionWrapper<any, any, _$kysely.SqlBool>;
2663
- declare const addSoftDeleteColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
2664
- declare function softDelete<T extends keyof DatabaseContract, O extends SoftDeleteOptions<T>>(table: T, options?: O): Promise<SoftDeleteResult<T, O>>;
2665
- declare module 'kysely' {
2666
- interface CreateTableBuilder<TB extends string, C extends string = never> {
2667
- addSoftDeleteColumn(): CreateTableBuilder$1<TB, C | 'deleted_at'>;
2668
- }
2669
- }
2670
- //#endregion
2671
- //#region src/server/queries/timestamp.d.ts
2672
- declare const addCreatedColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
2673
- declare const addUpdatedColumn: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
2674
- declare const addTimestampColumns: (ctb: CreateTableBuilder$1<any, any>) => CreateTableBuilder$1<any, any>;
2675
- declare module 'kysely' {
2676
- interface CreateTableBuilder<TB extends string, C extends string = never> {
2677
- addTimestampColumns(): CreateTableBuilder$1<TB, C | 'created_at' | 'updated_at'>;
2678
- addCreatedColumn(): CreateTableBuilder$1<TB, C | 'created_at'>;
2679
- addUpdatedColumn(): CreateTableBuilder$1<TB, C | 'updated_at'>;
2680
- }
2681
- }
2682
- //#endregion
2683
- //#region src/server/relations/BaseRelation.d.ts
2684
- declare class BaseRelation {
2685
- load(entities: any[]): Promise<void>;
2686
- }
2687
- //#endregion
2688
- //#region src/server/relations/BelongsToRelation.d.ts
2689
- interface BelongsToOptions {
2690
- table: string;
2691
- tableKey: string;
2692
- targetTable: string;
2693
- targetKey: string;
2694
- property: string;
2695
- serialize?: (row: any) => any;
2696
- }
2697
- declare class BelongsTo extends BaseRelation {
2698
- table: string;
2699
- tableKey: string;
2700
- targetTable: string;
2701
- targetKey: string;
2702
- property: string;
2703
- serialize: (row: any) => any;
2704
- constructor(options: BelongsToOptions);
2705
- load(entities: any[]): Promise<void>;
2706
- }
2707
- //#endregion
2708
- //#region src/server/relations/BelongsToFileRelation.d.ts
2709
- declare class LoadFileMetas extends BaseRelation {
2710
- fileKey: string;
2711
- property: string;
2712
- constructor(fileKey?: string, property?: string);
2713
- load(entities: any[]): Promise<void>;
2714
- }
2715
- declare class LoadFileUrl extends BaseRelation {
2716
- fileKey: string;
2717
- property: string;
2718
- constructor(fileKey?: string, property?: string);
2719
- load(entities: any[]): Promise<void>;
2720
- }
2721
- declare class BelongsToFile extends BelongsTo {
2722
- constructor(property?: string, targetKey?: string);
2723
- url(property?: string): LoadFileUrl;
2724
- metas(property?: string): LoadFileMetas;
2725
- }
2726
- //#endregion
2727
- //#region src/server/relations/BelongsToUserRelation.d.ts
2728
- declare class BelongsToUser extends BelongsTo {
2729
- constructor();
2730
- }
2731
- //#endregion
2732
- //#region src/server/relations/HasManyRelation.d.ts
2733
- interface HasManyOptions {
2734
- table: keyof DatabaseContract;
2735
- tableKey: string;
2736
- targetTable: keyof DatabaseContract;
2737
- targetKey: string;
2738
- property: string;
2739
- serialize?: (row: any) => any;
2740
- after?: (rows: any[]) => Promise<any>;
2741
- }
2742
- declare class HasMany {
2743
- table: string;
2744
- tableKey: string;
2745
- targetTable: string;
2746
- targetKey: string;
2747
- property: string;
2748
- serialize: (row: any) => any;
2749
- after: (rows: any[]) => Promise<any>;
2750
- constructor(options: HasManyOptions);
2751
- load(entities: any[]): Promise<void>;
2752
- }
2753
- //#endregion
2754
- //#region src/server/relations/HasMetasRelation.d.ts
2755
- interface HasMetasOptions {
2756
- table: keyof DatabaseContract;
2757
- tableKey: string;
2758
- targetTable: keyof DatabaseContract;
2759
- targetKey: string;
2760
- property: string;
2761
- }
2762
- declare class HasMetas {
2763
- table: string;
2764
- tableKey: string;
2765
- targetTable: string;
2766
- targetKey: string;
2767
- property: string;
2768
- constructor(options: HasMetasOptions);
2769
- load(entities: any[]): Promise<void>;
2770
- }
2771
- //#endregion
2772
- //#region src/server/relations/hasManyThroughRelation.d.ts
2773
- interface HasManyThroughOptions {
2774
- table: keyof DatabaseContract;
2775
- tableKey: string;
2776
- targetTable: keyof DatabaseContract;
2777
- targetKey: string;
2778
- pivotTable: keyof DatabaseContract;
2779
- pivotSourceKey: string;
2780
- pivotTargetKey: string;
2781
- property: string;
2782
- serialize?: (row: any) => any;
2783
- after?: (rows: any[]) => Promise<any>;
2784
- }
2785
- declare class HasManyThrough extends BaseRelation {
2786
- table: string;
2787
- tableKey: string;
2788
- targetTable: string;
2789
- targetKey: string;
2790
- pivotTable: string;
2791
- pivotSourceKey: string;
2792
- pivotTargetKey: string;
2793
- property: string;
2794
- serialize: (row: any) => any;
2795
- after: (rows: any[]) => Promise<any>;
2796
- constructor(options: HasManyThroughOptions);
2797
- load(entities: any[]): Promise<void>;
2798
- }
2799
- //#endregion
2800
- //#region src/server/middlewares/AuthMiddleware.d.ts
2801
- type AuthMiddlewareContext = {
2802
- user: UserEntity;
2803
- token: Token;
2804
- };
2805
- declare class AuthMiddleware implements Middleware {
2806
- handle(ctx: any): Promise<AuthMiddlewareContext>;
2807
- }
2808
- //#endregion
2809
- //#region src/server/middlewares/AuthSilenceMiddleware.d.ts
2810
- type AuthSilenceMiddlewareContext = {
2811
- user?: UserEntity$1;
2812
- token?: Token;
2813
- };
2814
- declare class AuthSilenceMiddleware implements Middleware {
2815
- handle(ctx: HttpContext): Promise<AuthSilenceMiddlewareContext>;
2816
- }
2817
- //#endregion
2818
- //#region src/server/middlewares/AuthorizationMiddleware.d.ts
2819
- type AuthorizationContext = MiddlewareHandleResult<[AuthorizationMiddleware]>;
2820
- interface AuthorizePermissionPayload {
2821
- action: string;
2822
- resource: string;
2823
- conditions?: Record<string, any>;
2824
- }
2825
- declare class AuthorizePermission implements Middleware {
2826
- private permissions;
2827
- constructor(payload: AuthorizePermissionPayload | AuthorizePermissionPayload[]);
2828
- handle(ctx: AuthorizationContext): Promise<void>;
2829
- }
2830
- declare class AuthorizationMiddleware implements Middleware {
2831
- handle(ctx: AuthSilenceMiddlewareContext): Promise<{
2832
- acl: Acl;
2833
- }>;
2834
- static create(payload: AuthorizePermissionPayload | AuthorizePermissionPayload[]): AuthorizePermission;
2835
- }
2836
- //#endregion
2837
- //#region src/server/utils/basePath.d.ts
2838
- declare function basePath(...args: string[]): string;
2839
- declare function storagePath(...args: string[]): string;
2840
- declare function relativeToBasePath(...args: string[]): string;
2841
- declare function tmpPath(...args: string[]): string;
2842
- //#endregion
2843
- //#region src/server/utils/createLoaderFactory.d.ts
2844
- declare function createLoaderFactory<E extends Record<string, any> = Record<string, any>, R extends LoaderRecord<E> = LoaderRecord<E>>(loaders: R): {
2845
- keys: (keyof R)[];
2846
- loaders: R;
2847
- load: (entities: E | E[], names: keyof R | (keyof R)[]) => Promise<void>;
2848
- };
2849
- //#endregion
2850
- //#region src/server/utils/cuid.d.ts
2851
- declare function cuid(): string;
2852
- //#endregion
2853
- //#region src/server/utils/defineHandler.d.ts
2854
- interface Handler {
2855
- (ctx: HttpContext): Promise<any> | (() => any);
2856
- }
2857
- declare function defineHandler(handler: Handler): Handler;
2858
- //#endregion
2859
- //#region src/server/utils/generateIndexFile.d.ts
2860
- declare function generateIndexFile(options: any): void;
2861
- //#endregion
2862
- //#region src/server/utils/importAll.d.ts
2863
- interface Options {
2864
- cache?: boolean;
2865
- onBeforeImport?: (ctx: {
2866
- filename: string;
2867
- }) => void | Promise<void>;
2868
- onAfterImport?: (ctx: {
2869
- filename: string;
2870
- module: any;
2871
- }) => void | Promise<void>;
2872
- onError?: (ctx: {
2873
- filename: string;
2874
- error: Error;
2875
- }) => void | Promise<void>;
2876
- exclude?: string[];
2877
- }
2878
- declare function importFiles(files: string[], options?: Options): Promise<Record<string, any>>;
2879
- declare function importGlob(pattern: string, options?: Options): Promise<Record<string, any>>;
2880
- declare function importAll(directory: string, options?: Options): Promise<Record<string, any>>;
2881
- //#endregion
2882
- //#region src/server/utils/importOne.d.ts
2883
- declare function importOne(filenames: string[]): Promise<any>;
2884
- //#endregion
2885
- 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 };
2886
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZlci91dGlscy9wcmludFRhYmxlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9MaWZlY3ljbGVIb29rLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3V0aWxzL2NvbXBvc2UuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zY2hlbWFzL3Blcm1pc3Npb25Bc3NpZ25tZW50U2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL3NjaGVtYXMvcGVybWlzc2lvblNjaGVtYS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9zY2hlbWFzL3Rva2VuU2NoZW1hLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL21peGlucy9Ib29rc01peGluLmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL1Blcm1pc3Npb25FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvQWNsRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Ecml2ZUNvbmZpZ0VudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Ecml2ZUVudHJ5RW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0ZpbGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvRmlsZU1ldGFFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvR2l0QnJhbmNoRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2hhcmVkL2VudGl0aWVzL0dpdENvbW1pdEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVNYW5pZmVzdEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Nb2R1bGVFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUGFnaW5hdGlvbkVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zaGFyZWQvZW50aXRpZXMvUm9sZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0NsaVNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvQ2xpVGVzdGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9DbGlXcmFwcGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Db25maWdGU1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2NoZW1hcy9lbnZTY2hlbWEuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvRW52U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Db25maWdNYW5hZ2VyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9Ecml2ZUJhc2VHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2dhdGV3YXlzL0RyaXZlUzNHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0NvbmZpZ1MzU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Eb3dubG9hZFNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0RyaXZlQ29udHJhY3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvRHJpdmVTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QYWdlUmVxdWVzdENvbnRleHRFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvVXNlclJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvTWlncmF0aW9uRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL01pZ3JhdG9yU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9BY2xFbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0h0dHBDb250ZXh0Q29udHJhY3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL1JvdXRlckNvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL1JvdXRlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZW50aXRpZXMvUm91dGluZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9TY2hlZHVsZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL1NlZWRlckVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9TZWVkZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2NvbnRyYWN0cy9FdmVudENvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9FbmNyeXB0U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9FeGNlcHRpb25TZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL0hhc2hlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvSHR0cFNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvSHR0cFRlc3RlclNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvTGlmZWN5Y2xlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9NZXRhZGF0YVF1ZXJ5U2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9NZXRhZGF0YVNlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUGx1Z2luSXBjQ2xpZW50LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1BsdWdpbklwY0hvc3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUGx1Z2luUm91dGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlckZpbGVCYXNlUm91dGluZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvUm91dGVyUmVnaXN0ZXJTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1JvdXRlclJlc291cmNlU2VydmljZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9taXhpbnMvTW9kZWxDb25maWdNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9zZXJ2aWNlcy9Sb3V0ZXJSZXNvdXJjZUNvbmZpZ1NlcnZpY2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvU2hlbGxTZXJ2aWNlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9Db25maWdSZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9GaWxlUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvR2l0QnJhbmNoUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvR2l0Q29tbWl0UmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvUGVybWlzc2lvbkFzc2lnbm1lbnRSZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlcG9zaXRvcmllcy9QZXJtaXNzaW9uUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9taXhpbnMvRGF0YWJhc2VSZXBvc2l0b3J5SW5mZXJNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZXBvc2l0b3JpZXMvVG9rZW5SZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2dhdGV3YXlzL0RhdGFiYXNlR2F0ZXdheS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9Ecml2ZUZTR2F0ZXdheS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9nYXRld2F5cy9HaXRHYXRld2F5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9NZXRhZGF0YU1peGluLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvZGF0YWJhc2UuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9jb21tb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy91cGRhdGVPckNyZWF0ZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2xpc3QuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9wYWdpbmF0ZS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2NvdW50LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvY3JlYXRlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvdXBkYXRlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3F1ZXJpZXMvZGVzdHJveS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL2ZpcnN0T3JDcmVhdGUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9maW5kT25lLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9Nb2RlbE1peGluLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21peGlucy9SZWxhdGlvbnNNaXhpbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2NvbmZpZy5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2NvbnRhaW5lci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2Rvd25sb2FkLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvZHJpdmUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9lbW1pdHRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL2VuY3J5cHQuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9lbnYuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9maWxlc1JlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9oYXNoZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9odHRwLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvbG9nZ2VyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvbWlncmF0b3IuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9wZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvZmFjYWRlcy9wZXJtaXNzaW9uUmVwb3NpdG9yeS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3JvdXRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3NjaGVkdWxlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9mYWNhZGVzL3NoZWxsLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvdG9rZW5SZXBvc2l0b3J5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2ZhY2FkZXMvdXNlclJlcG9zaXRvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvY29udHJhY3RzL0t5c2VseUNvbnRyYWN0LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9sb2FkZXJzL2ZpbGVMb2FkZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9maWxlVXJsTG9hZGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2xvYWRlcnMvaGFzTWFueVRocm91Z2hMb2FkZXIuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9sb2FkTWV0YXMuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbG9hZGVycy9wZXJtaXNzaW9uTG9hZGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2xvYWRlcnMvdXNlckxvYWRlci5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9Ecml2ZUNvbmZpZ0VudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9GaWxlRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL0ZpbGVNZXRhRW50aXR5LmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL2VudGl0aWVzL01vZHVsZUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbHVnaW5FbnRyeUVudGl0eS5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9lbnRpdGllcy9QbHVnaW5FbnRpdHkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9leGlzdHMuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy9pbmNyZW1lbnRhbC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9xdWVyaWVzL3NvZnREZWxldGUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcXVlcmllcy90aW1lc3RhbXAuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVsYXRpb25zL0Jhc2VSZWxhdGlvbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZWxhdGlvbnMvQmVsb25nc1RvUmVsYXRpb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVsYXRpb25zL0JlbG9uZ3NUb0ZpbGVSZWxhdGlvbi5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci9yZWxhdGlvbnMvQmVsb25nc1RvVXNlclJlbGF0aW9uLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3JlbGF0aW9ucy9IYXNNYW55UmVsYXRpb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVsYXRpb25zL0hhc01ldGFzUmVsYXRpb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvcmVsYXRpb25zL2hhc01hbnlUaHJvdWdoUmVsYXRpb24uZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbWlkZGxld2FyZXMvQXV0aE1pZGRsZXdhcmUuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvbWlkZGxld2FyZXMvQXV0aFNpbGVuY2VNaWRkbGV3YXJlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL21pZGRsZXdhcmVzL0F1dGhvcml6YXRpb25NaWRkbGV3YXJlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2Jhc2VQYXRoLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2NyZWF0ZUxvYWRlckZhY3RvcnkuZC50cyIsIi4uLy4uL3NyYy9zZXJ2ZXIvdXRpbHMvY3VpZC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9kZWZpbmVIYW5kbGVyLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2dlbmVyYXRlSW5kZXhGaWxlLmQudHMiLCIuLi8uLi9zcmMvc2VydmVyL3V0aWxzL2ltcG9ydEFsbC5kLnRzIiwiLi4vLi4vc3JjL3NlcnZlci91dGlscy9pbXBvcnRPbmUuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uIHtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmcgfCAoKGl0ZW06IGFueSkgPT4gc3RyaW5nKTtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICByZWFsV2lkdGg/OiBudW1iZXI7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9iamVjdE9wdGlvbnMge1xuICAgIGtleVdpZHRoPzogbnVtYmVyO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcHJpbnRPYmplY3Qob3V0cHV0PzogYW55LCBvcHRpb25zPzogT2JqZWN0T3B0aW9ucyk6IHZvaWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwcmludFRhYmxlKGl0ZW1zOiBhbnlbXSwgY29sdW1ucz86IFRhYmxlQ29sdW1uW10pOiB2b2lkO1xuIiwiaW50ZXJmYWNlIEVudHJ5IHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIHNvdXJjZTogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlnU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGVudHJpZXM6IE1hcDxzdHJpbmcsIEVudHJ5PjtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIGxpc3QoKTogRW50cnlbXTtcbiAgICBwYXJzZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgbG9hZEZyb21SZWNvcmQocmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIGxvYWRGcm9tRW50cmllcyhlbnRyaWVzOiBbc3RyaW5nLCBhbnldW10sIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgdG9SZWNvcmQoKTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuO1xuICAgIGdldDxUID0gYW55IHwgdW5kZWZpbmVkPihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYW55KTogVDtcbiAgICBnZXRPbmU8VCA9IGFueSB8IHVuZGVmaW5lZD4oa2V5czogc3RyaW5nW10sIGRlZmF1bHRWYWx1ZT86IGFueSk6IFQ7XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBzb3VyY2U/OiBzdHJpbmcpOiB2b2lkO1xuICAgIHVuc2V0KGtleTogc3RyaW5nKTogdm9pZDtcbiAgICBjbGVhcigpOiB2b2lkO1xuICAgIGR1bXAoKTogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cbmV4cG9ydCB7fTtcbiIsInR5cGUgQ29uc3RydWN0b3I8VCA9IG9iamVjdD4gPSBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUO1xudHlwZSBFbnRyeUtleSA9IHN0cmluZyB8IHN5bWJvbCB8IENvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGFpbmVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSBlbnRyaWVzO1xuICAgIGxvYWRGcm9tUmVjb3JkKHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQ7XG4gICAgdG9SZWNvcmQoKTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBwcml2YXRlIGdldEtleTtcbiAgICBzZXQocGF5bG9hZDogRW50cnlLZXksIHZhbHVlOiBhbnkpOiB0aGlzO1xuICAgIGhhcyhwYXlsb2FkOiBFbnRyeUtleSk6IGJvb2xlYW47XG4gICAgZ2V0PFQ+KHBheWxvYWQ6IEVudHJ5S2V5KTogVDtcbiAgICB1bnNldChwYXlsb2FkOiBFbnRyeUtleSk6IHZvaWQ7XG4gICAgc2luZ2xldG9uPFQ+KGNsYXNzQ29uc3RydWN0b3I6IENvbnN0cnVjdG9yPFQ+KTogVDtcbiAgICBsb2FkKGVudHJpZXM6IFJlY29yZDxhbnksIGFueT4pOiB2b2lkO1xuICAgIHByb3h5PFQgPSB1bmtub3duPihrZXk6IEVudHJ5S2V5KTogVDtcbiAgICBrZXlzKCk6IEVudHJ5S2V5W107XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgbWV0YT86IGFueSk6IHZvaWQ7XG4gICAgd2FybihtZXNzYWdlOiBzdHJpbmcsIG1ldGE/OiBhbnkpOiB2b2lkO1xuICAgIGVycm9yKG1lc3NhZ2U6IHN0cmluZyB8IEVycm9yLCBtZXRhPzogYW55KTogdm9pZDtcbiAgICBjaGlsZChvcHRpb25zOiBhbnkpOiBMb2dnZXJTZXJ2aWNlO1xufVxuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnLi9Mb2dnZXJTZXJ2aWNlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgRW1taXR0ZXJMaXN0ZW5lck9wdGlvbnMge1xuICAgIGV2ZW50OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtbWl0dGVyTGlzdGVuZXIge1xuICAgIChkYXRhOiBhbnksIG9wdGlvbnM6IEVtbWl0dGVyTGlzdGVuZXJPcHRpb25zKTogdm9pZDtcbn1cbmludGVyZmFjZSBFbW1pdHRlckhhbmRsZXIge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBsaXN0ZW5lcjogRW1taXR0ZXJMaXN0ZW5lcjtcbiAgICBvcmlnaW5hbExpc3RlbmVyPzogRW1taXR0ZXJMaXN0ZW5lcjtcbn1cbmludGVyZmFjZSBPbk9wdGlvbnMge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIHVuaXF1ZT86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgT25EZWJvdW5jZU9wdGlvbnMgZXh0ZW5kcyBPbk9wdGlvbnMge1xuICAgIGRlYm91bmNlPzogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBFbW1pdHRlclNlcnZpY2VPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtbWl0dGVyU2VydmljZTxFdmVudHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBoYW5kbGVyczogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBFbW1pdHRlclNlcnZpY2VPcHRpb25zKTtcbiAgICBzdGF0aWMgY3JlYXRlPEV2ZW50cyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PihvcHRpb25zPzogRW1taXR0ZXJTZXJ2aWNlT3B0aW9ucyk6IEVtbWl0dGVyU2VydmljZTxFdmVudHM+O1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdm9pZDtcbiAgICBzZXRMb2dnZXIobG9nZ2VyOiBMb2dnZXJTZXJ2aWNlKTogdm9pZDtcbiAgICBvbjxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IChhcmdzOiBFdmVudHNbS10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25jZTxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgbGlzdGVuZXI6IChhcmdzOiBFdmVudHNbS10pID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXI7XG4gICAgb25jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKGFyZ3M6IGFueSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbkRlYm91bmNlPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uRGVib3VuY2VPcHRpb25zKTogRW1taXR0ZXJIYW5kbGVyO1xuICAgIG9uRGVib3VuY2UoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbkRlYm91bmNlT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcjtcbiAgICBvbkFueU9mPEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50czogS1tdLCBsaXN0ZW5lcjogKGFyZ3M6IEV2ZW50c1tLXSkgPT4gdm9pZCwgb3B0aW9ucz86IE9uT3B0aW9ucyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIG9uQW55T2YoZXZlbnRzOiBzdHJpbmdbXSwgbGlzdGVuZXI6IChhcmdzOiBhbnkpID0+IHZvaWQsIG9wdGlvbnM/OiBPbk9wdGlvbnMpOiBFbW1pdHRlckhhbmRsZXJbXTtcbiAgICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6IEVtbWl0dGVySGFuZGxlclsnbGlzdGVuZXInXSk6IHZvaWQ7XG4gICAgZW1pdDxLIGV4dGVuZHMga2V5b2YgRXZlbnRzPihldmVudDogSywgYXJnczogRXZlbnRzW0tdKTogdm9pZDtcbiAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIGFyZ3M/OiBhbnkpOiB2b2lkO1xuICAgIGVtaXRBbmRXYWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudHM+KGV2ZW50OiBLLCBhcmdzOiBFdmVudHNbS10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGVtaXRBbmRXYWl0KGV2ZW50OiBzdHJpbmcsIGFyZ3M/OiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3QoKTogRW1taXR0ZXJIYW5kbGVyW107XG4gICAgbGlzdEJ5RXZlbnQoZXZlbnQ6IHN0cmluZyk6IEVtbWl0dGVySGFuZGxlcltdO1xuICAgIHJlbW92ZShwYXlsb2FkOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQ7XG4gICAgY2xlYXIoKTogdm9pZDtcbiAgICBoYXNIYW5kbGVycygpOiBib29sZWFuO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGlmZWN5Y2xlSG9vayB7XG4gICAgaG9va19pZDogc3RyaW5nO1xuICAgIGhvb2tfYWxpYXNlcz86IHN0cmluZ1tdO1xuICAgIG9yZGVyPzogbnVtYmVyO1xuICAgIHN1Ymhvb2tzPzogTGlmZWN5Y2xlSG9va1tdO1xuICAgIHJlZ2lzdGVyKCk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGJvb3QoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKiBAZGVwcmVjYXRlZCBVc2UgcmVnaXN0ZXIgKi9cbiAgICBvblJlZ2lzdGVyKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBsb2FkICovXG4gICAgb25Mb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBib290ICovXG4gICAgb25Cb290KCk6IFByb21pc2U8dm9pZD47XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBzaHV0ZG93biAqL1xuICAgIG9uU2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgVW5pb25Ub0ludGVyc2VjdGlvbiB9IGZyb20gJy4vdHlwaW5nLnRzJztcbmV4cG9ydCB0eXBlIEFueUNsYXNzID0gbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuZXhwb3J0IHR5cGUgQ29uc3RydWN0b3I8VCA9IHt9PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQ7XG5leHBvcnQgdHlwZSBNaXhpbjxUPiA9IChiYXNlOiBDb25zdHJ1Y3RvcikgPT4gQ29uc3RydWN0b3I8VD47XG4vKipcbiAqIENvbXBvc2VzIG11bHRpcGxlIG1peGlucyBpbnRvIGEgc2luZ2xlIGNsYXNzIHRoYXQgY2FuIGJlIGV4dGVuZGVkLlxuICogQWxsb3dzIGZvciBtdWx0aXBsZSBpbmhlcml0YW5jZS1saWtlIGJlaGF2aW9yIGJ5IGFwcGx5aW5nIG1peGlucyBzZXF1ZW50aWFsbHkuXG4gKlxuICogQHBhcmFtIG1peGlucyAtIEFycmF5IG9mIG1peGluIGZ1bmN0aW9ucyB0byBjb21wb3NlXG4gKiBAcmV0dXJucyBBIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgaW5jbHVkZXMgYWxsIG1peGluIGZ1bmN0aW9uYWxpdHlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgVXNlciBleHRlbmRzIGNvbXBvc2UoVGltZXN0YW1wLCBTb2Z0RGVsZXRlKSB7XG4gKiAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHtcbiAqICAgICBzdXBlcigpXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb21wb3NlPE0gZXh0ZW5kcyBBcnJheTwoYmFzZTogQ29uc3RydWN0b3I8YW55PikgPT4gQ29uc3RydWN0b3I8YW55Pj4+KC4uLm1peGluczogTSk6IFVuaW9uVG9JbnRlcnNlY3Rpb248UmV0dXJuVHlwZTxNW251bWJlcl0+Pjtcbi8qKlxuICogQWx0ZXJuYXRpdmUgY29tcG9zZSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB3aXRoIGEgYmFzZSBjbGFzc1xuICpcbiAqIEBwYXJhbSBiYXNlQ2xhc3MgLSBUaGUgYmFzZSBjbGFzcyB0byBzdGFydCB3aXRoXG4gKiBAcGFyYW0gbWl4aW5zIC0gQXJyYXkgb2YgbWl4aW4gZnVuY3Rpb25zIHRvIGFwcGx5XG4gKiBAcmV0dXJucyBBIGNsYXNzIGNvbnN0cnVjdG9yIHRoYXQgZXh0ZW5kcyB0aGUgYmFzZSBjbGFzcyB3aXRoIGFsbCBtaXhpbiBmdW5jdGlvbmFsaXR5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFVzZXIgZXh0ZW5kcyBjb21wb3NlV2l0aChCYXNlRW50aXR5LCBUaW1lc3RhbXAsIFNvZnREZWxldGUpIHtcbiAqICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZykge1xuICogICAgIHN1cGVyKClcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNvbXBvc2VXaXRoPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3IsIE0gZXh0ZW5kcyBBcnJheTwoYmFzZTogQ29uc3RydWN0b3IpID0+IENvbnN0cnVjdG9yPGFueT4+PihiYXNlQ2xhc3M6IFRCYXNlLCAuLi5taXhpbnM6IE0pOiBUQmFzZSAmIFVuaW9uVG9JbnRlcnNlY3Rpb248UmV0dXJuVHlwZTxNW251bWJlcl0+PjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIG1peGluPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KFNvdXJjZTogVEJhc2UpOiA8VFRhcmdldCBleHRlbmRzIENvbnN0cnVjdG9yPihUYXJnZXQ6IFRUYXJnZXQpID0+IFRUYXJnZXQgJiBUQmFzZTtcbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJy4vTG9nZ2VyU2VydmljZS50cyc7XG5pbXBvcnQgTGlmZWN5Y2xlSG9vayBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0xpZmVjeWNsZUhvb2sudHMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG50eXBlIExpZmVjeWNsZU1ldGhvZCA9ICdyZWdpc3RlcicgfCAnbG9hZCcgfCAnYm9vdCcgfCAnc2h1dGRvd24nO1xuaW50ZXJmYWNlIExpc3RPcHRpb25zIHtcbiAgICBpbmNsdWRlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgZXhjbHVkZT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucyB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGhvb2tzPzogTWFwPHN0cmluZywgTGlmZWN5Y2xlSG9vaz47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBvbkVycm9yPzogKGVycm9yOiBFcnJvciwgY29udGV4dDoge1xuICAgICAgICBob29rSWQ6IHN0cmluZztcbiAgICAgICAgbWV0aG9kOiBMaWZlY3ljbGVNZXRob2Q7XG4gICAgfSkgPT4gdm9pZDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZmVjeWNsZVNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBob29rczogTWFwPHN0cmluZywgTGlmZWN5Y2xlSG9vaz47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucyk7XG4gICAgc2V0T25FcnJvcihoYW5kbGVyOiBSZXF1aXJlZDxMaWZlY3ljbGVTZXJ2aWNlT3B0aW9ucz5bJ29uRXJyb3InXSk6IHZvaWQ7XG4gICAgb25FcnJvcihlcnJvcjogRXJyb3IsIGNvbnRleHQ6IHtcbiAgICAgICAgaG9va0lkOiBzdHJpbmc7XG4gICAgICAgIG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kO1xuICAgIH0pOiB2b2lkO1xuICAgIG1hcEFsaWFzZXMoYXJnczogc3RyaW5nW10pOiBzdHJpbmdbXTtcbiAgICBsaXN0KG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IExpZmVjeWNsZUhvb2tbXTtcbiAgICBhZGQoLi4ucGF5bG9hZDogKExpZmVjeWNsZUhvb2sgfCBDb25zdHJ1Y3RvcjxMaWZlY3ljbGVIb29rPilbXSk6IHZvaWQ7XG4gICAgZW1pdE1ldGhvZChtZXRob2Q6IExpZmVjeWNsZU1ldGhvZCwgb3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBlbWl0KHBheWxvYWQ6IExpZmVjeWNsZU1ldGhvZCB8IExpZmVjeWNsZU1ldGhvZFtdLCBvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIG9uKG1ldGhvZDogTGlmZWN5Y2xlTWV0aG9kLCBoYW5kbGVyOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZDtcbiAgICByZWdpc3RlcihvcHRpb25zPzogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWQob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBib290KG9wdGlvbnM/OiBMaXN0T3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgc2h1dGRvd24ob3B0aW9ucz86IExpc3RPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICBjbGVhcigpOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0ICogYXMgdiBmcm9tICd2YWxpYm90JztcbmV4cG9ydCB0eXBlIFBlcm1pc3Npb25Bc3NpZ25tZW50ID0gdi5JbmZlck91dHB1dDx0eXBlb2YgcGVybWlzc2lvbkFzc2lnbm1lbnRTY2hlbWE+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgcGVybWlzc2lvbkFzc2lnbm1lbnRTY2hlbWE6IHYuT2JqZWN0U2NoZW1hPHtcbiAgICByZWFkb25seSBpZDogdi5OdW1iZXJTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBwZXJtaXNzaW9uX2lkOiB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGFzc2lnbmFibGVfdHlwZTogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBhc3NpZ25hYmxlX2lkOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGNyZWF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdXBkYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbn0sIHVuZGVmaW5lZD47XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IHR5cGUgUGVybWlzc2lvbiA9IHYuSW5mZXJPdXRwdXQ8dHlwZW9mIHBlcm1pc3Npb25TY2hlbWE+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgcGVybWlzc2lvblNjaGVtYTogdi5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IGlkOiB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IG5hbWU6IHYuTnVsbGFibGVTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBkZXNjcmlwdGlvbjogdi5OdWxsYWJsZVNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGFjdGlvbjogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBzdWJqZWN0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGNvbmRpdGlvbnM6IHYuTnVsbGFibGVTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBjcmVhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHVwZGF0ZWRfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZXhwaXJlc19hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbn0sIHVuZGVmaW5lZD47XG4iLCJpbXBvcnQgKiBhcyB2IGZyb20gJ3ZhbGlib3QnO1xuZXhwb3J0IHR5cGUgVG9rZW4gPSB2LkluZmVyT3V0cHV0PHR5cGVvZiB0b2tlblNjaGVtYT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCB0b2tlblNjaGVtYTogdi5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IGlkOiB2Lk51bWJlclNjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IG5hbWU6IHYuTnVsbGFibGVTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB0eXBlOiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IHVzZXJfaWQ6IHYuTnVtYmVyU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgdG9rZW46IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgY3JlYXRlZF9hdDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSB1cGRhdGVkX2F0OiB2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IGV4cGlyZXNfYXQ6IHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD47XG59LCB1bmRlZmluZWQ+O1xuIiwiaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbmVyIHtcbiAgICBldmVudDogc3RyaW5nO1xuICAgIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQ7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBlbWl0SG9vayhjb25zdHJ1Y3RvcjogYW55LCBldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBvbkhvb2soY29uc3RydWN0b3I6IGFueSwgZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBIb29rc1N0YXRpYzxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSk6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge307XG4gICAgbGlzdGVuZXJzOiBBcnJheTwoLi4uYXJnczogYW55W10pID0+IHZvaWQ+O1xuICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufSAmIFRCYXNlO1xuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIEhvb2tzU3RhdGljIHtcbiAgICB2YXIgZW1pdDogdHlwZW9mIGVtaXRIb29rO1xuICAgIHZhciBvbjogdHlwZW9mIG9uSG9vaztcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhvb2tzPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGxpc3RlbmVyczogTGlzdGVuZXJbXTtcbiAgICAgICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIGVtaXRBc3luYyhldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbn0gJiBUQmFzZTtcbiIsImRlY2xhcmUgY29uc3QgUGVybWlzc2lvbkVudGl0eV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBlcm1pc3Npb25FbnRpdHkgZXh0ZW5kcyBQZXJtaXNzaW9uRW50aXR5X2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICAgIG9yaWdpbjogc3RyaW5nO1xuICAgIHN1YmplY3Q6IHN0cmluZztcbiAgICBhY3Rpb246IHN0cmluZztcbiAgICBjb25kaXRpb25zOiBzdHJpbmcgfCBudWxsIHwgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbjtcbiAgICBnZXQgcGFyc2VkQ29uZGl0aW9ucygpOiBhbnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBkZWZpbmVBYmlsaXR5IH0gZnJvbSAnQGNhc2wvYWJpbGl0eSc7XG5pbXBvcnQgUGVybWlzc2lvbiBmcm9tICcuL1Blcm1pc3Npb25FbnRpdHkudHMnO1xuaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFjbEVudGl0eSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGFiaWxpdHk6IFJldHVyblR5cGU8dHlwZW9mIGRlZmluZUFiaWxpdHk+O1xuICAgIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uW107XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPEFjbEVudGl0eT4pO1xuICAgIGNhbihhY3Rpb246IHN0cmluZywgc3ViamVjdDogYW55LCBvYmplY3Q/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYm9vbGVhbjtcbiAgICBjYW5ub3QoYWN0aW9uOiBzdHJpbmcsIHN1YmplY3Q6IGFueSwgb2JqZWN0PzogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW47XG4gICAgc3ViamVjdChzdWJqZWN0OiBzdHJpbmcsIG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4gJiBpbXBvcnQoXCJAY2FzbC9hYmlsaXR5XCIpLkZvcmNlZFN1YmplY3Q8c3RyaW5nPjtcbn1cbiIsImV4cG9ydCBpbnRlcmZhY2UgQ29va2llTWFwRW50aXR5T3B0aW9ucyB7XG4gICAgY29va2llcz86IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29va2llTWFwRW50aXR5IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgY29va2llczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcmVmaXg6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihkYXRhPzogQ29va2llTWFwRW50aXR5T3B0aW9ucyk7XG4gICAgbG9hZChjb29raWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgTWFwPHN0cmluZywgc3RyaW5nPik6IHZvaWQ7XG4gICAgZ2V0KG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IG51bGw7XG4gICAgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgb3B0aW9ucz86IGFueSk6IHZvaWQ7XG4gICAgdG9SZWNvcmQoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbiIsImV4cG9ydCBkZWNsYXJlIGNvbnN0IFRZUEVTOiAoKSA9PiAoe1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IGFueTtcbiAgICBkZXNjcmlwdGlvbjogYW55O1xuICAgIGNvbmZpZ19maWVsZHM6IHtcbiAgICAgICAgZGlyZWN0b3J5OiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYW55O1xuICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICB9O1xuICAgICAgICBhY2Nlc3NLZXlJZD86IHVuZGVmaW5lZDtcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5PzogdW5kZWZpbmVkO1xuICAgICAgICBidWNrZXQ/OiB1bmRlZmluZWQ7XG4gICAgICAgIHJlZ2lvbj86IHVuZGVmaW5lZDtcbiAgICAgICAgcHJlZml4PzogdW5kZWZpbmVkO1xuICAgICAgICBlbmRwb2ludD86IHVuZGVmaW5lZDtcbiAgICB9O1xufSB8IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IGFueTtcbiAgICBjb25maWdfZmllbGRzOiB7XG4gICAgICAgIGFjY2Vzc0tleUlkOiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIHNlY3JldEFjY2Vzc0tleToge1xuICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICBidWNrZXQ6IHtcbiAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVnaW9uOiB7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgIH07XG4gICAgICAgIHByZWZpeDoge1xuICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICB9O1xuICAgICAgICBlbmRwb2ludDoge1xuICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICB9O1xuICAgICAgICBkaXJlY3Rvcnk/OiB1bmRlZmluZWQ7XG4gICAgfTtcbn0pW107XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZUNvbmZpZyB7XG4gICAgc3RhdGljIGdldCBUWVBFUygpOiAoe1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICBkZXNjcmlwdGlvbjogYW55O1xuICAgICAgICBjb25maWdfZmllbGRzOiB7XG4gICAgICAgICAgICBkaXJlY3Rvcnk6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhbnk7XG4gICAgICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFjY2Vzc0tleUlkPzogdW5kZWZpbmVkO1xuICAgICAgICAgICAgc2VjcmV0QWNjZXNzS2V5PzogdW5kZWZpbmVkO1xuICAgICAgICAgICAgYnVja2V0PzogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmVnaW9uPzogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcHJlZml4PzogdW5kZWZpbmVkO1xuICAgICAgICAgICAgZW5kcG9pbnQ/OiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgfSB8IHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgICAgZGVzY3JpcHRpb246IGFueTtcbiAgICAgICAgY29uZmlnX2ZpZWxkczoge1xuICAgICAgICAgICAgYWNjZXNzS2V5SWQ6IHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICBsYWJlbDogYW55O1xuICAgICAgICAgICAgICAgIGhpbnQ6IGFueTtcbiAgICAgICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICAgICAgdHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJ1Y2tldDoge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlZ2lvbjoge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByZWZpeDoge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGxhYmVsOiBhbnk7XG4gICAgICAgICAgICAgICAgaGludDogYW55O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGVuZHBvaW50OiB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGFueTtcbiAgICAgICAgICAgICAgICBoaW50OiBhbnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGlyZWN0b3J5PzogdW5kZWZpbmVkO1xuICAgICAgICB9O1xuICAgIH0pW107XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIGlzX2RlZmF1bHQ6IGJvb2xlYW47XG4gICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IERyaXZlQ29uZmlnKTtcbiAgICBnZXQgY29uZmlnX2ZpZWxkcygpOiB7fTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlRW50cnkge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgdHlwZTogJ2ZpbGUnIHwgJ2RpcmVjdG9yeSc7XG4gICAgbWV0YXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29uc3RydWN0b3IoZGF0YTogRHJpdmVFbnRyeSk7XG59XG4iLCJkZWNsYXJlIGNvbnN0IEZpbGVFbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICB9O1xufSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBkZWxldGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGVFbnRpdHkgZXh0ZW5kcyBGaWxlRW50aXR5X2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgZHJpdmU6IHN0cmluZztcbiAgICBtaW1ldHlwZTogc3RyaW5nO1xuICAgIHB1cnBvc2U6IHN0cmluZztcbiAgICBjbGllbnRfbmFtZTogc3RyaW5nO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljOiBib29sZWFuO1xuICAgIHVybD86IHN0cmluZztcbiAgICBtZXRhcz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgaXNJbWFnZSgpOiBib29sZWFuO1xufVxuZXhwb3J0IHt9O1xuIiwiZGVjbGFyZSBjb25zdCBGaWxlTWV0YV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZU1ldGEgZXh0ZW5kcyBGaWxlTWV0YV9iYXNlIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIGZpbGVfaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBHaXRCcmFuY2hFbnRpdHkge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICByZW1vdGU6IHN0cmluZyB8IG51bGw7XG4gICAgaXNfY3VycmVudDogYm9vbGVhbjtcbiAgICBpc19yZW1vdGU6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoZGF0YTogR2l0QnJhbmNoRW50aXR5KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEdpdENvbW1pdEVudGl0eSB7XG4gICAgaGFzaDogc3RyaW5nO1xuICAgIHNob3J0X2hhc2g6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgYm9keTogc3RyaW5nO1xuICAgIGF1dGhvcl9uYW1lOiBzdHJpbmc7XG4gICAgYXV0aG9yX2VtYWlsOiBzdHJpbmc7XG4gICAgZGF0ZTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IEdpdENvbW1pdEVudGl0eSk7XG59XG4iLCJleHBvcnQgaW50ZXJmYWNlIE1vZHVsZU1hbmlmZXN0QnVpbGRJbXBvcnQge1xuICAgIGZyb206IHN0cmluZztcbiAgICB0bz86IHN0cmluZztcbiAgICB0eXBlOiAnZ2xvYmFsX2ltcG9ydCc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1vZHVsZU1hbmlmZXN0QnVpbGQge1xuICAgIGltcG9ydHM/OiBNb2R1bGVNYW5pZmVzdEJ1aWxkSW1wb3J0W107XG59XG5kZWNsYXJlIGNvbnN0IE1vZHVsZU1hbmlmZXN0X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kdWxlTWFuaWZlc3QgZXh0ZW5kcyBNb2R1bGVNYW5pZmVzdF9iYXNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBhdXRob3I/OiBzdHJpbmc7XG4gICAgZGVwZW5kZW5jaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBidWlsZD86IE1vZHVsZU1hbmlmZXN0QnVpbGQ7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgTW9kdWxlTWFuaWZlc3QgZnJvbSAnLi9Nb2R1bGVNYW5pZmVzdEVudGl0eS50cyc7XG5pbXBvcnQgTGlmZWN5Y2xlSG9vayBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0xpZmVjeWNsZUhvb2sudHMnO1xuaW50ZXJmYWNlIE1vZHVsZVVwZ3JhZGVJbmZvIHtcbiAgICBzb3VyY2U6ICdnaXQnIHwgJ3ppcCc7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZGVjbGFyZSBjb25zdCBNb2R1bGVfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I8e30+ICYgdHlwZW9mIExpZmVjeWNsZUhvb2s7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGUgZXh0ZW5kcyBNb2R1bGVfYmFzZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBkZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgYnVpbGQ6IE1vZHVsZU1hbmlmZXN0WydidWlsZCddO1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xuICAgIHVwZ3JhZGVfaW5mbz86IE1vZHVsZVVwZ3JhZGVJbmZvO1xuICAgIHNldERhdGEoZGF0YTogUGFydGlhbDxNb2R1bGUgfCBNb2R1bGVNYW5pZmVzdD4pOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFnaW5hdGlvbkVudGl0eTxUID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGl0ZW1zOiBUW107XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYWdlOiBudW1iZXI7XG4gICAgcGVyX3BhZ2U6IG51bWJlcjtcbiAgICB0b3RhbF9wYWdlczogbnVtYmVyO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBhcnRpYWw8UGFnaW5hdGlvbkVudGl0eT4pO1xuICAgIHN0YXRpYyBmcm9tPFQgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PihwYXlsb2FkOiBQYXJ0aWFsPFBhZ2luYXRpb25FbnRpdHk8VD4+KTogUGFnaW5hdGlvbkVudGl0eTxUPjtcbn1cbiIsImRlY2xhcmUgY29uc3QgUGx1Z2luRW50aXR5X2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBtZXJnZShkYXRhOiBQYXJ0aWFsPC8qZWxpZGVkKi8gYW55Pik6IC8qZWxpZGVkKi8gYW55O1xuICAgIH07XG4gICAgZnJvbTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZGF0YTogUGFydGlhbDxUPik6IFQ7XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luRW50aXR5IGV4dGVuZHMgUGx1Z2luRW50aXR5X2Jhc2Uge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZlcnNpb246IHN0cmluZztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGFsaWFzZXM6IHN0cmluZ1tdO1xuICAgIHZlcnNpb25fY2hhbm5lbDogc3RyaW5nO1xuICAgIHZlcnNpb25fYXZhaWxhYmxlX2NoYW5uZWxzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCB7fTtcbiIsImRlY2xhcmUgY29uc3QgUm9sZV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbWVyZ2UoZGF0YTogUGFydGlhbDwvKmVsaWRlZCovIGFueT4pOiAvKmVsaWRlZCovIGFueTtcbiAgICB9O1xuICAgIGZyb208VD4odGhpczogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUO1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvciAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBjcmVhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgICAgICB1cGRhdGVkX2F0OiBEYXRlIHwgc3RyaW5nO1xuICAgIH07XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGRlbGV0ZWRfYXQ6IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm9sZSBleHRlbmRzIFJvbGVfYmFzZSB7XG4gICAgaWQ6IG51bWJlcjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSBQZXJtaXNzaW9uIGZyb20gJy4vUGVybWlzc2lvbkVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSBSb2xlIGZyb20gJy4vUm9sZUVudGl0eS50cyc7XG5kZWNsYXJlIGNvbnN0IFVzZXJFbnRpdHlfYmFzZToge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIG1lcmdlKGRhdGE6IFBhcnRpYWw8LyplbGlkZWQqLyBhbnk+KTogLyplbGlkZWQqLyBhbnk7XG4gICAgfTtcbiAgICBmcm9tPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBkYXRhOiBQYXJ0aWFsPFQ+KTogVDtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3IgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgY3JlYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICAgICAgdXBkYXRlZF9hdDogRGF0ZSB8IHN0cmluZztcbiAgICB9O1xufSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBkZWxldGVkX2F0OiBEYXRlIHwgc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXJFbnRpdHkgZXh0ZW5kcyBVc2VyRW50aXR5X2Jhc2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdXNlcm5hbWU6IHN0cmluZztcbiAgICBwYXNzd29yZD86IHN0cmluZztcbiAgICB2ZXJpZmllZF9hdD86IERhdGUgfCBzdHJpbmcgfCBudWxsO1xuICAgIHBlcm1pc3Npb25zPzogUGVybWlzc2lvbltdO1xuICAgIHJvbGVzPzogUm9sZVtdO1xuICAgIGdldCBpbml0aWFscygpOiBzdHJpbmc7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBDb21tYW5kIGFzIENvbW1hbmRlckNvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IHByaW50VGFibGUsIHByaW50T2JqZWN0IH0gZnJvbSAnLi4vdXRpbHMvcHJpbnRUYWJsZS50cyc7XG5pbXBvcnQgeyBFbW1pdHRlclNlcnZpY2UsIExvZ2dlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmltcG9ydCAqIGFzIGlucXVpcmVyIGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpRXZlbnRzIHtcbiAgICAnY2xpOnJlZ2lzdGVyZWQnOiB7XG4gICAgICAgIGNsaTogQ2xpU2VydmljZTtcbiAgICB9O1xufVxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgQ2xpQ29tbWFuZCBleHRlbmRzIENvbW1hbmRlckNvbW1hbmQge1xuICAgIF9faXNfY2xpX2NvbW1hbmQ6IGJvb2xlYW47XG4gICAgdGFibGU6IHR5cGVvZiBwcmludFRhYmxlO1xuICAgIG9iamVjdDogdHlwZW9mIHByaW50T2JqZWN0O1xuICAgIGNvbG9yczogY2hhbGsuQ2hhbGsgJiBjaGFsay5DaGFsa0Z1bmN0aW9uICYge1xuICAgICAgICBzdXBwb3J0c0NvbG9yOiBjaGFsay5Db2xvclN1cHBvcnQgfCBmYWxzZTtcbiAgICAgICAgTGV2ZWw6IGNoYWxrLkxldmVsO1xuICAgICAgICBDb2xvcjogKFwiYmxhY2tcIiB8IFwicmVkXCIgfCBcImdyZWVuXCIgfCBcInllbGxvd1wiIHwgXCJibHVlXCIgfCBcIm1hZ2VudGFcIiB8IFwiY3lhblwiIHwgXCJ3aGl0ZVwiIHwgXCJncmF5XCIgfCBcImdyZXlcIiB8IFwiYmxhY2tCcmlnaHRcIiB8IFwicmVkQnJpZ2h0XCIgfCBcImdyZWVuQnJpZ2h0XCIgfCBcInllbGxvd0JyaWdodFwiIHwgXCJibHVlQnJpZ2h0XCIgfCBcIm1hZ2VudGFCcmlnaHRcIiB8IFwiY3lhbkJyaWdodFwiIHwgXCJ3aGl0ZUJyaWdodFwiKSB8IChcImJnQmxhY2tcIiB8IFwiYmdSZWRcIiB8IFwiYmdHcmVlblwiIHwgXCJiZ1llbGxvd1wiIHwgXCJiZ0JsdWVcIiB8IFwiYmdNYWdlbnRhXCIgfCBcImJnQ3lhblwiIHwgXCJiZ1doaXRlXCIgfCBcImJnR3JheVwiIHwgXCJiZ0dyZXlcIiB8IFwiYmdCbGFja0JyaWdodFwiIHwgXCJiZ1JlZEJyaWdodFwiIHwgXCJiZ0dyZWVuQnJpZ2h0XCIgfCBcImJnWWVsbG93QnJpZ2h0XCIgfCBcImJnQmx1ZUJyaWdodFwiIHwgXCJiZ01hZ2VudGFCcmlnaHRcIiB8IFwiYmdDeWFuQnJpZ2h0XCIgfCBcImJnV2hpdGVCcmlnaHRcIik7XG4gICAgICAgIEZvcmVncm91bmRDb2xvcjogXCJibGFja1wiIHwgXCJyZWRcIiB8IFwiZ3JlZW5cIiB8IFwieWVsbG93XCIgfCBcImJsdWVcIiB8IFwibWFnZW50YVwiIHwgXCJjeWFuXCIgfCBcIndoaXRlXCIgfCBcImdyYXlcIiB8IFwiZ3JleVwiIHwgXCJibGFja0JyaWdodFwiIHwgXCJyZWRCcmlnaHRcIiB8IFwiZ3JlZW5CcmlnaHRcIiB8IFwieWVsbG93QnJpZ2h0XCIgfCBcImJsdWVCcmlnaHRcIiB8IFwibWFnZW50YUJyaWdodFwiIHwgXCJjeWFuQnJpZ2h0XCIgfCBcIndoaXRlQnJpZ2h0XCI7XG4gICAgICAgIEJhY2tncm91bmRDb2xvcjogXCJiZ0JsYWNrXCIgfCBcImJnUmVkXCIgfCBcImJnR3JlZW5cIiB8IFwiYmdZZWxsb3dcIiB8IFwiYmdCbHVlXCIgfCBcImJnTWFnZW50YVwiIHwgXCJiZ0N5YW5cIiB8IFwiYmdXaGl0ZVwiIHwgXCJiZ0dyYXlcIiB8IFwiYmdHcmV5XCIgfCBcImJnQmxhY2tCcmlnaHRcIiB8IFwiYmdSZWRCcmlnaHRcIiB8IFwiYmdHcmVlbkJyaWdodFwiIHwgXCJiZ1llbGxvd0JyaWdodFwiIHwgXCJiZ0JsdWVCcmlnaHRcIiB8IFwiYmdNYWdlbnRhQnJpZ2h0XCIgfCBcImJnQ3lhbkJyaWdodFwiIHwgXCJiZ1doaXRlQnJpZ2h0XCI7XG4gICAgICAgIE1vZGlmaWVyczogXCJyZXNldFwiIHwgXCJib2xkXCIgfCBcImRpbVwiIHwgXCJpdGFsaWNcIiB8IFwidW5kZXJsaW5lXCIgfCBcImludmVyc2VcIiB8IFwiaGlkZGVuXCIgfCBcInN0cmlrZXRocm91Z2hcIiB8IFwidmlzaWJsZVwiO1xuICAgICAgICBzdGRlcnI6IGNoYWxrLkNoYWxrICYge1xuICAgICAgICAgICAgc3VwcG9ydHNDb2xvcjogY2hhbGsuQ29sb3JTdXBwb3J0IHwgZmFsc2U7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBpbnF1aXJlcjogdHlwZW9mIGlucXVpcmVyO1xuICAgIG5lZWRzOiBTZXQ8c3RyaW5nPjtcbiAgICBuZWVkKC4uLmFyZ3M6IHN0cmluZ1tdKTogdGhpcztcbiAgICBjcmVhdGVDb21tYW5kKG5hbWU/OiBzdHJpbmcpOiBDbGlDb21tYW5kO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpU2VydmljZSBleHRlbmRzIENsaUNvbW1hbmQge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBkaXJzOiBTZXQ8c3RyaW5nPjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBzdGF0aWMgY3JlYXRlKG5hbWU/OiBzdHJpbmcpOiBDbGlTZXJ2aWNlO1xuICAgIHNldExvZ2dlcihsb2dnZXI6IExvZ2dlclNlcnZpY2UpOiB0aGlzO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdGhpcztcbiAgICBzZXRFbW1pdHRlcihlbW1pdHRlcjogRW1taXR0ZXJTZXJ2aWNlKTogdGhpcztcbiAgICBjcmVhdGVDb21tYW5kKG5hbWU/OiBzdHJpbmcpOiBDbGlTZXJ2aWNlO1xuICAgIGFkZERpcihkaXI6IHN0cmluZyk6IHRoaXM7XG4gICAgbG9hZERpcihkaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZCgpOiBQcm9taXNlPHRoaXM+O1xufVxuIiwiaW1wb3J0IENsaVNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9DbGlTZXJ2aWNlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFydGVUZXN0ZXJTZXJ2aWNlIGV4dGVuZHMgQ2xpU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKTtcbiAgICBhZGQocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBleGVjdXRlKGFyZ3M6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBjcCBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaVdyYXBwZXJTZXJ2aWNlIHtcbiAgICBwcm9jZXNzOiBjcC5DaGlsZFByb2Nlc3MgfCBudWxsO1xuICAgIGFwcEJhc2VQYXRoOiBzdHJpbmc7XG4gICAgZW52OiBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIGFyZ3M6IHN0cmluZ1tdO1xuICAgIGNvbmZpZ0FyZ3VtZW50czogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgICBjb25maWdGaWxlczogc3RyaW5nW107XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHN0YXRpYyBjcmVhdGUoKTogQ2xpV3JhcHBlclNlcnZpY2U7XG4gICAgc2V0QmFzZVBhdGgocGF0aDogc3RyaW5nKTogdGhpcztcbiAgICBzZXREZWJ1ZyhkZWJ1ZzogYm9vbGVhbik6IHRoaXM7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHRoaXM7XG4gICAgYWRkQ29uZmlnQXJndW1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB0aGlzO1xuICAgIGFkZENvbmZpZ0ZpbGUoLi4uZmlsZVBhdGhzOiBzdHJpbmdbXSk6IHRoaXM7XG4gICAgYWRkRW52KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdGhpcztcbiAgICBsb2FkQ29uZmlnQXJndW1lbnRzKCk6IHZvaWQ7XG4gICAgbG9hZENvbmZpZ0ZpbGVzKCk6IHZvaWQ7XG4gICAgbG9hZEVudmlyb25tZW50KCk6IHZvaWQ7XG4gICAgbG9hZEFyZ3VtZW50cyhhcmdzPzogc3RyaW5nW10pOiB2b2lkO1xuICAgIGtpbGwoY29kZT86IG51bWJlcik6IHZvaWQ7XG4gICAgcnVuKGFyZ3M/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgQ29uZmlnU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdGU1NlcnZpY2VPcHRpb25zIHtcbiAgICBkaXJlY3Rvcnk/OiBzdHJpbmc7XG4gICAgZm9ybWF0PzogJ2pzb24nIHwgJ3ltbCc7XG4gICAgZm9ybWF0T3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdGU1NlcnZpY2UgZXh0ZW5kcyBDb25maWdTZXJ2aWNlIHtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgZm9ybWF0OiAnanNvbicgfCAneW1sJztcbiAgICBmb3JtYXRPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBDb25maWdGU1NlcnZpY2VPcHRpb25zKTtcbiAgICB3cml0ZShlbnRyeTogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHdyaXRlU3luYyhlbnRyeTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkO1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBwcml2YXRlIHBhcnNlS2V5O1xuICAgIHNldChmdWxsS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHNvdXJjZT86IHN0cmluZyk6IHZvaWQ7XG4gICAgdW5zZXQoZnVsbEtleTogc3RyaW5nKTogdm9pZDtcbn1cbiIsImltcG9ydCAqIGFzIHYgZnJvbSAndmFsaWJvdCc7XG5leHBvcnQgdHlwZSBFbnZTY2hlbWEgPSB2LkluZmVyT3V0cHV0PHR5cGVvZiBlbnZTY2hlbWE+O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgZW52U2NoZW1hOiB2Lkxvb3NlT2JqZWN0U2NoZW1hPHtcbiAgICByZWFkb25seSBOT0RFX0VOVjogdi5PcHRpb25hbFNjaGVtYTx2LlVuaW9uU2NoZW1hPFt2LkxpdGVyYWxTY2hlbWE8XCJkZXZlbG9wbWVudFwiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCJwcm9kdWN0aW9uXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcInRlc3RcIiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIFwiZGV2ZWxvcG1lbnRcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0JBU0VfUEFUSDogdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfU1RPUkFHRV9QQVRIOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0FQUF9VUkw6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX1BPUlQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBudW1iZXI+XT4sIFwiMzAwMFwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfSE9TVDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBcIjAuMC4wLjBcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0xPR19MRVZFTDogdi5PcHRpb25hbFNjaGVtYTx2LlBpY2tsaXN0U2NoZW1hPFtcImVycm9yXCIsIFwid2FyblwiLCBcImluZm9cIiwgXCJkZWJ1Z1wiXSwgdW5kZWZpbmVkPiwgXCJpbmZvXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9MSUZFQ1lDTEVfREVCVUc6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5MaXRlcmFsU2NoZW1hPFwidHJ1ZVwiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCJmYWxzZVwiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCIxXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcIjBcIiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPFwiMFwiIHwgXCIxXCIgfCBcInRydWVcIiB8IFwiZmFsc2VcIiwgYm9vbGVhbj4sIHYuQm9vbGVhblNjaGVtYTx1bmRlZmluZWQ+XT4sIFwiZmFsc2VcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NMSUVOVF9DT05GSUc6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+LCBcIlwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj5dPiwgXCJcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19BUkdVTUVOVFM6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+LCBcIlwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX0ZJTEVTOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZywgc3RyaW5nW10+XT4sIFwiXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfREVCVUc6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5VbmlvblNjaGVtYTxbdi5MaXRlcmFsU2NoZW1hPFwidHJ1ZVwiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCJmYWxzZVwiLCB1bmRlZmluZWQ+LCB2LkxpdGVyYWxTY2hlbWE8XCIxXCIsIHVuZGVmaW5lZD4sIHYuTGl0ZXJhbFNjaGVtYTxcIjBcIiwgdW5kZWZpbmVkPl0sIHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPFwiMFwiIHwgXCIxXCIgfCBcInRydWVcIiB8IFwiZmFsc2VcIiwgYm9vbGVhbj4sIHYuQm9vbGVhblNjaGVtYTx1bmRlZmluZWQ+XT4sIFwiZmFsc2VcIj47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19EUklWRVI6IHYuT3B0aW9uYWxTY2hlbWE8di5QaWNrbGlzdFNjaGVtYTxbXCJmc1wiLCBcInMzXCJdLCB1bmRlZmluZWQ+LCBcImZzXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfRlNfUEFUSDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfRlNfRk9STUFUOiB2Lk9wdGlvbmFsU2NoZW1hPHYuUGlja2xpc3RTY2hlbWE8W1wianNvblwiLCBcInltbFwiXSwgdW5kZWZpbmVkPiwgXCJqc29uXCI+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfRlNfRk9STUFUX09QVElPTlM6IHYuT3B0aW9uYWxTY2hlbWE8di5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbdi5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdi5UcmFuc2Zvcm1BY3Rpb248c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+Pl0+LCBcIlwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX0JVQ0tFVDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfUkVHSU9OOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19BQ0NFU1NfS0VZX0lEOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgWkVOSVRIX0NPTkZJR19TM19TRUNSRVRfQUNDRVNTX0tFWTogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfU0VTU0lPTl9UT0tFTjogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCB1bmRlZmluZWQ+O1xuICAgIHJlYWRvbmx5IFpFTklUSF9DT05GSUdfUzNfRU5EUE9JTlQ6IHYuT3B0aW9uYWxTY2hlbWE8di5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBaRU5JVEhfQ09ORklHX1MzX1BSRUZJWDogdi5PcHRpb25hbFNjaGVtYTx2LlN0cmluZ1NjaGVtYTx1bmRlZmluZWQ+LCBcIlwiPjtcbiAgICByZWFkb25seSBaRU5JVEhfUExVR0lOU19ESVJTOiB2Lk9wdGlvbmFsU2NoZW1hPHYuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW3YuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHYuVHJhbnNmb3JtQWN0aW9uPHN0cmluZywgc3RyaW5nW10+XT4sIFwiXCI+O1xufSwgdW5kZWZpbmVkPjtcbiIsImltcG9ydCBkb3RlbnYgZnJvbSAnZG90ZW52JztcbmltcG9ydCB0eXBlIHsgRW52U2NoZW1hIH0gZnJvbSAnI3NlcnZlci9zY2hlbWFzL2VudlNjaGVtYS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBlbnY7XG4gICAgcHJpdmF0ZSBmaWxlcztcbiAgICBzdGF0aWMgY3JlYXRlKCk6IEVudlNlcnZpY2U7XG4gICAgc3RhdGljIGRvdEVudkNvbmZpZyhvcHRpb25zPzogZG90ZW52LkRvdGVudkNvbmZpZ09wdGlvbnMpOiBkb3RlbnYuRG90ZW52Q29uZmlnT3V0cHV0O1xuICAgIHNldEZpbGVzKGZpbGVzOiBzdHJpbmdbXSk6IHRoaXM7XG4gICAgYWRkRmlsZShmaWxlOiBzdHJpbmcpOiB0aGlzO1xuICAgIGxvYWQoKTogdGhpcztcbiAgICBnZXQgcHJvZHVjdGlvbigpOiBib29sZWFuO1xuICAgIGdldCBkZXZlbG9wbWVudCgpOiBib29sZWFuO1xuICAgIGdldCB0ZXN0KCk6IGJvb2xlYW47XG4gICAgaGFzPEsgZXh0ZW5kcyBrZXlvZiBFbnZTY2hlbWE+KGtleTogSyk6IGJvb2xlYW47XG4gICAgZ2V0PEsgZXh0ZW5kcyBrZXlvZiBFbnZTY2hlbWE+KGtleTogSywgZGVmYXVsdFZhbHVlPzogYW55KTogRW52U2NoZW1hW0tdO1xuICAgIHNldDxLIGV4dGVuZHMga2V5b2YgRW52U2NoZW1hPihrZXk6IEssIHZhbHVlOiBFbnZTY2hlbWFbS10pOiB2b2lkO1xufVxuIiwiaW1wb3J0IHsgdHlwZSBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG5pbXBvcnQgQ29uZmlnU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgRW52U2VydmljZSBmcm9tICcuL0VudlNlcnZpY2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBDb25maWdNYW5hZ2VyT3B0aW9ucyB7XG4gICAgZW52OiBFbnZTZXJ2aWNlO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBzaWxlbnQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlnTWFuYWdlclNlcnZpY2Uge1xuICAgIGVudjogRW52U2VydmljZTtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgc2lsZW50OiBib29sZWFuO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbmZpZ01hbmFnZXJPcHRpb25zKTtcbiAgICBzdGF0aWMgY3JlYXRlKG9wdGlvbnM6IENvbmZpZ01hbmFnZXJPcHRpb25zKTogQ29uZmlnTWFuYWdlclNlcnZpY2U7XG4gICAgcHJpdmF0ZSBsb2FkUzNDb25maWc7XG4gICAgcHJpdmF0ZSBsb2FkRlNDb25maWc7XG4gICAgbG9hZENvbmZpZ0Zyb21FbnYoc2VydmljZTogQ29uZmlnU2VydmljZSk6IHZvaWQ7XG4gICAgbG9hZENvbmZpZ0Zyb21GaWxlKHNlcnZpY2U6IENvbmZpZ1NlcnZpY2UsIGZpbGU6IHN0cmluZyk6IHZvaWQ7XG4gICAgbG9hZENvbmZpZ0Zyb21GaWxlcyhzZXJ2aWNlOiBDb25maWdTZXJ2aWNlLCBmaWxlczogc3RyaW5nW10pOiB2b2lkO1xuICAgIGxvYWQoKTogUHJvbWlzZTxDb25maWdTZXJ2aWNlPjtcbn1cbiIsImltcG9ydCBtcyBmcm9tICdtcyc7XG5pbXBvcnQgdHlwZSBEcml2ZUVudHJ5IGZyb20gJyNzaGFyZWQvZW50aXRpZXMvRHJpdmVFbnRyeUVudGl0eS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFVybE9wdGlvbnMge1xuICAgIGV4cGlyZXM/OiBtcy5TdHJpbmdWYWx1ZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkVXJsT3B0aW9ucyB7XG4gICAgZXhwaXJlcz86IG1zLlN0cmluZ1ZhbHVlO1xuICAgIG1pbWVfdHlwZXM/OiBzdHJpbmdbXTtcbiAgICBtYXhfc2l6ZT86IG51bWJlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlQmFzZUdhdGV3YXkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBQaWNrPERyaXZlQmFzZUdhdGV3YXksICdpZCcgfCAnbmFtZScgfCAnZGVzY3JpcHRpb24nIHwgJ2NvbmZpZyc+KTtcbiAgICBsaXN0KGZvbGRlcj86IHN0cmluZyk6IFByb21pc2U8RHJpdmVFbnRyeVtdPjtcbiAgICBmaW5kKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPERyaXZlRW50cnk+O1xuICAgIGV4aXN0cyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICByZWFkKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVpbnQ4QXJyYXk+O1xuICAgIHJlYWRTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPjtcbiAgICB3cml0ZShmaWxlbmFtZTogc3RyaW5nLCBkYXRhOiBVaW50OEFycmF5KTogUHJvbWlzZTx2b2lkPjtcbiAgICB3cml0ZVN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSk6IFByb21pc2U8dm9pZD47XG4gICAgZGVsZXRlKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVybChmaWxlbmFtZTogc3RyaW5nLCBvcHRpb25zPzogVXJsT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICB1cGxvYWRVcmwoZmlsZW5hbWU6IHN0cmluZywgb3B0aW9ucz86IFVwbG9hZFVybE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG59XG4iLCJpbXBvcnQgeyBTM0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQgdHlwZSB7IEluZmVyT3V0cHV0IH0gZnJvbSAndmFsaWJvdCc7XG5pbXBvcnQgQmFzZURyaXZlIGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvRHJpdmVCYXNlR2F0ZXdheS50cyc7XG5kZWNsYXJlIGNvbnN0IHNjaGVtYTogaW1wb3J0KFwidmFsaWJvdFwiKS5PYmplY3RTY2hlbWE8e1xuICAgIHJlYWRvbmx5IGJ1Y2tldDogaW1wb3J0KFwidmFsaWJvdFwiKS5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgaW1wb3J0KFwidmFsaWJvdFwiKS5NaW5MZW5ndGhBY3Rpb248c3RyaW5nLCAxLCB1bmRlZmluZWQ+XT47XG4gICAgcmVhZG9ubHkgcmVnaW9uOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9wdGlvbmFsU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgYWNjZXNzS2V5SWQ6IGltcG9ydChcInZhbGlib3RcIikuU2NoZW1hV2l0aFBpcGU8cmVhZG9ubHkgW2ltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIGltcG9ydChcInZhbGlib3RcIikuTWluTGVuZ3RoQWN0aW9uPHN0cmluZywgMSwgdW5kZWZpbmVkPl0+O1xuICAgIHJlYWRvbmx5IHNlY3JldEFjY2Vzc0tleTogaW1wb3J0KFwidmFsaWJvdFwiKS5TY2hlbWFXaXRoUGlwZTxyZWFkb25seSBbaW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgaW1wb3J0KFwidmFsaWJvdFwiKS5NaW5MZW5ndGhBY3Rpb248c3RyaW5nLCAxLCB1bmRlZmluZWQ+XT47XG4gICAgcmVhZG9ubHkgc2Vzc2lvblRva2VuOiBpbXBvcnQoXCJ2YWxpYm90XCIpLk9wdGlvbmFsU2NoZW1hPGltcG9ydChcInZhbGlib3RcIikuU3RyaW5nU2NoZW1hPHVuZGVmaW5lZD4sIHVuZGVmaW5lZD47XG4gICAgcmVhZG9ubHkgZW5kcG9pbnQ6IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbiAgICByZWFkb25seSBwcmVmaXg6IGltcG9ydChcInZhbGlib3RcIikuT3B0aW9uYWxTY2hlbWE8aW1wb3J0KFwidmFsaWJvdFwiKS5TdHJpbmdTY2hlbWE8dW5kZWZpbmVkPiwgdW5kZWZpbmVkPjtcbn0sIHVuZGVmaW5lZD47XG5leHBvcnQgdHlwZSBTM0RyaXZlQ29uZmlnID0gSW5mZXJPdXRwdXQ8dHlwZW9mIHNjaGVtYT47XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZVMzIGV4dGVuZHMgQmFzZURyaXZlIHtcbiAgICBwcml2YXRlIHNjaGVtYTtcbiAgICBwcml2YXRlIF9jbGllbnQ/O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBpY2s8QmFzZURyaXZlLCAnaWQnIHwgJ25hbWUnIHwgJ2Rlc2NyaXB0aW9uJyB8ICdjb25maWcnPik7XG4gICAgZ2V0IHZhbGlkKCk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBjaGVja1ZhbGlkO1xuICAgIHByb3RlY3RlZCBnZXQgYnVja2V0KCk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgZ2V0IHByZWZpeCgpOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBnZXRLZXk7XG4gICAgcHJvdGVjdGVkIGdldCBjbGllbnQoKTogUzNDbGllbnQ7XG4gICAgZXhpc3RzOiBCYXNlRHJpdmVbJ2V4aXN0cyddO1xuICAgIGxpc3Q6IEJhc2VEcml2ZVsnbGlzdCddO1xuICAgIGZpbmQ6IEJhc2VEcml2ZVsnZmluZCddO1xuICAgIG1rZGlyKF9maWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICByZWFkOiBCYXNlRHJpdmVbJ3JlYWQnXTtcbiAgICByZWFkU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gICAgd3JpdGU6IEJhc2VEcml2ZVsnd3JpdGUnXTtcbiAgICB3cml0ZVN0cmVhbShmaWxlbmFtZTogc3RyaW5nLCBzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSk6IFByb21pc2U8dm9pZD47XG4gICAgZGVsZXRlOiBCYXNlRHJpdmVbJ2RlbGV0ZSddO1xuICAgIHVybDogQmFzZURyaXZlWyd1cmwnXTtcbiAgICB1cGxvYWRVcmw6IEJhc2VEcml2ZVsndXBsb2FkVXJsJ107XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQ29uZmlnU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UudHMnO1xuaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBTM0RyaXZlIGZyb20gJyNzZXJ2ZXIvZ2F0ZXdheXMvRHJpdmVTM0dhdGV3YXkudHMnO1xuaW1wb3J0IHR5cGUgeyBTM0RyaXZlQ29uZmlnIH0gZnJvbSAnI3NlcnZlci9nYXRld2F5cy9Ecml2ZVMzR2F0ZXdheS50cyc7XG5pbnRlcmZhY2UgSW5pdGlPcHRpb25zIGV4dGVuZHMgT21pdDxTM0RyaXZlQ29uZmlnLCAnbmFtZScgfCAnZGVzY3JpcHRpb24nPiB7XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlnUzNTZXJ2aWNlIGV4dGVuZHMgQ29uZmlnU2VydmljZSB7XG4gICAgcHJlZml4OiBzdHJpbmc7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGRyaXZlOiBTM0RyaXZlO1xuICAgIGJ1Y2tldDogc3RyaW5nO1xuICAgIHJlZ2lvbjogc3RyaW5nO1xuICAgIGVuZHBvaW50Pzogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEluaXRpT3B0aW9ucyk7XG4gICAgcHJpdmF0ZSBwYXJzZUtleTtcbiAgICBsb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgc2V0KGZ1bGxLZXk6IHN0cmluZywgdmFsdWU6IGFueSwgc291cmNlPzogc3RyaW5nKTogdm9pZDtcbiAgICB1bnNldChmdWxsS2V5OiBzdHJpbmcpOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBSZXF1ZXN0SW5pdCB9IGZyb20gJ3VuZGljaSc7XG5leHBvcnQgaW50ZXJmYWNlIERvd25sb2FkZWRGZXRjaE9wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0SW5pdCB7XG4gICAgcHJveHk/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb3dubG9hZFNlcnZpY2Uge1xuICAgIGZldGNoKHVybDogc3RyaW5nLCBvcHRpb25zPzogRG93bmxvYWRlZEZldGNoT3B0aW9ucyk6IFByb21pc2U8aW1wb3J0KFwidW5kaWNpXCIpLlJlc3BvbnNlPjtcbiAgICBzdHJlYW0odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBEb3dubG9hZGVkRmV0Y2hPcHRpb25zKTogUHJvbWlzZTx7XG4gICAgICAgIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtO1xuICAgICAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICAgIH0+O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBSZWFkU3RyZWFtIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHR5cGUgbXMgZnJvbSAnbXMnO1xuaW1wb3J0IHR5cGUgRHJpdmVFbnRyeSBmcm9tICcjc2hhcmVkL2VudGl0aWVzL0RyaXZlRW50cnlFbnRpdHkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBEcml2ZVVybE9wdGlvbnMge1xuICAgIGV4cGlyZXM/OiBtcy5TdHJpbmdWYWx1ZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRHJpdmVVcGxvYWRVcmxPcHRpb25zIHtcbiAgICBleHBpcmVzPzogbXMuU3RyaW5nVmFsdWU7XG4gICAgbWltZV90eXBlcz86IHN0cmluZ1tdO1xuICAgIG1heF9zaXplPzogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBEcml2ZUNvbnRyYWN0IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBsaXN0KGZvbGRlcj86IHN0cmluZyk6IFByb21pc2U8RHJpdmVFbnRyeVtdPjtcbiAgICBmaW5kKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPERyaXZlRW50cnk+O1xuICAgIGV4aXN0cyhmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICByZWFkKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVpbnQ4QXJyYXk+O1xuICAgIHdyaXRlKGZpbGVuYW1lOiBzdHJpbmcsIGRhdGE6IFVpbnQ4QXJyYXkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgdXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBEcml2ZVVybE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgdXBsb2FkVXJsKGZpbGVuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBEcml2ZVVwbG9hZFVybE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG4gICAgcmVhZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZWFkU3RyZWFtPjtcbn1cbiIsImltcG9ydCBEcml2ZUVudHJ5IGZyb20gJyNzaGFyZWQvZW50aXRpZXMvRHJpdmVFbnRyeUVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IERyaXZlVXJsT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RyaXZlQ29udHJhY3QudHMnO1xuaW1wb3J0IEJhc2VEcml2ZSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0RyaXZlQmFzZUdhdGV3YXkudHMnO1xuaW1wb3J0IHR5cGUgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW50ZXJmYWNlIFZhbGlkYXRlVXBsb2FkT3B0aW9ucyB7XG4gICAgbWltZV90eXBlczogc3RyaW5nO1xuICAgIG1heFNpemU/OiBudW1iZXI7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZVNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBnYXRld2F5czogTWFwPHN0cmluZywgdHlwZW9mIEJhc2VEcml2ZT47XG4gICAgZHJpdmVzOiBNYXA8c3RyaW5nLCBCYXNlRHJpdmU+O1xuICAgIHNlbGVjdGVkPzogc3RyaW5nO1xuICAgIGRlZmF1bHREcml2ZT86IHN0cmluZztcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBsb2dnZXI6IExvZ2dlclNlcnZpY2U7XG4gICAgZ2V0IGN1cnJlbnQoKTogQmFzZURyaXZlIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPERyaXZlU2VydmljZT4pO1xuICAgIGxpc3REcml2ZXMoKToge1xuICAgICAgICBkZWZhdWx0OiBib29sZWFuO1xuICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgfVtdO1xuICAgIGdldChuYW1lPzogc3RyaW5nKTogQmFzZURyaXZlO1xuICAgIHVzZShuYW1lPzogc3RyaW5nKTogRHJpdmVTZXJ2aWNlO1xuICAgIGxpc3QoZm9sZGVyPzogc3RyaW5nKTogUHJvbWlzZTxEcml2ZUVudHJ5W10+O1xuICAgIGZpbmQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8RHJpdmVFbnRyeT47XG4gICAgZXhpc3RzKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHJlYWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8VWludDhBcnJheT47XG4gICAgcmVhZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+O1xuICAgIHJlYWRBc1RleHQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICB3cml0ZShmaWxlbmFtZTogc3RyaW5nLCBwYXlsb2FkOiBVaW50OEFycmF5IHwgc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSBhIFVSTCBmb3IgYSBmaWxlIGluIHRoZSBkcml2ZS5cbiAgICAgKiBAcGFyYW0gcGF5bG9hZCAgRmlsZSBpbnN0YW5jZSwgRmlsZSBJRCwgRHJpdmVFbnRyeSBpbnN0YW5jZSBvciBmaWxlbmFtZSBzdHJpbmdcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqIEByZXR1cm5zIHN0cmluZ1xuICAgICAqL1xuICAgIHVybChmaWxlbmFtZTogc3RyaW5nLCBvcHRpb25zPzogRHJpdmVVcmxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHVwbG9hZFVybChmaWxlbmFtZTogc3RyaW5nLCBvcHRpb25zPzogRHJpdmVVcmxPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIC8qKlxuICAgICAqIFVwbG9hZCBhIGZpbGUgZnJvbSB0aGUgbG9jYWwgZmlsZXN5c3RlbSB0byB0aGUgZHJpdmUuXG4gICAgICogQHBhcmFtIHNvdXJjZSBmaWxlbmFtZSBpbiBsb2NhbCBmaWxlc3lzdGVtXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICB1cGxvYWQoc291cmNlOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+O1xuICAgIC8qKlxuICAgICAqIERvd25sb2FkIGEgZmlsZSBmcm9tIHRoZSBkcml2ZSB0byB0aGUgbG9jYWwgZmlsZXN5c3RlbS5cbiAgICAgKiBAcGFyYW0gZmlsZW5hbWUgZmlsZW5hbWUgaW4gdGhlIGRyaXZlXG4gICAgICogQHBhcmFtIGRlc3RpbmF0aW9uXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBkb3dubG9hZChmaWxlbmFtZTogc3RyaW5nLCBkZXN0aW5hdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGUoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgbG9hZCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGNyZWF0ZURlZmF1bHREcml2ZXMoKTogUHJvbWlzZTx2b2lkPjtcbiAgICB2YWxpZGF0ZVVwbG9hZChvcHRpb25zOiBWYWxpZGF0ZVVwbG9hZE9wdGlvbnMsIGZpbGU6IHtcbiAgICAgICAgbWltZXR5cGU6IHN0cmluZztcbiAgICAgICAgc2l6ZTogbnVtYmVyO1xuICAgIH0pOiB2b2lkO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSwgQ29va2llT3B0aW9ucyB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IEJhc2UgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Db29raWVNYXBFbnRpdHkudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29va2llTWFwRW50aXR5IGV4dGVuZHMgQmFzZSB7XG4gICAgcmVxdWVzdDogUmVxdWVzdDtcbiAgICByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgcmVzcG9uc2U6IFJlc3BvbnNlKTtcbiAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogQ29va2llT3B0aW9ucyk6IHZvaWQ7XG59XG4iLCJpbXBvcnQgQ29va2llTWFwRW50aXR5IGZyb20gXCIjc2VydmVyL2VudGl0aWVzL0Nvb2tpZU1hcEVudGl0eS50c1wiO1xuaW1wb3J0IENvbnRhaW5lclNlcnZpY2UgZnJvbSBcIiNzaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZhYmxlSGVhZCB9IGZyb20gJ0B1bmhlYWQvdnVlJztcbmltcG9ydCBDb25maWdTZXJ2aWNlIGZyb20gXCIjc2hhcmVkL3NlcnZpY2VzL0NvbmZpZ1NlcnZpY2UudHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVJlcXVlc3RDb250ZXh0RW50aXR5T3B0aW9ucyB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcmVxdWVzdDogUmVxdWVzdDtcbiAgICByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgc3RhdGU/OiBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIG5vZGVDb250YWluZXI/OiBDb250YWluZXJTZXJ2aWNlO1xuICAgIG5vZGVDb25maWc/OiBDb25maWdTZXJ2aWNlO1xuICAgIG5vZGVTdGF0ZT86IE1hcDxzdHJpbmcsIGFueT47XG4gICAgYnJvd3NlckNvbnRhaW5lcj86IENvbnRhaW5lclNlcnZpY2U7XG4gICAgYnJvd3NlckNvbmZpZz86IENvbmZpZ1NlcnZpY2U7XG4gICAgYnJvd3NlclN0YXRlPzogTWFwPHN0cmluZywgYW55Pjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eSB7XG4gICAgdXJsOiBzdHJpbmc7XG4gICAgcmVxdWVzdDogUmVxdWVzdDtcbiAgICByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgY29va2llczogQ29va2llTWFwRW50aXR5O1xuICAgIGhlYWQ6IFJlc29sdmFibGVIZWFkW107XG4gICAgbm9kZUNvbnRhaW5lcjogQ29udGFpbmVyU2VydmljZTtcbiAgICBub2RlQ29uZmlnOiBDb25maWdTZXJ2aWNlO1xuICAgIG5vZGVTdGF0ZTogTWFwPHN0cmluZywgYW55PjtcbiAgICBicm93c2VyQ29udGFpbmVyOiBDb250YWluZXJTZXJ2aWNlO1xuICAgIGJyb3dzZXJDb25maWc6IENvbmZpZ1NlcnZpY2U7XG4gICAgYnJvd3NlclN0YXRlOiBNYXA8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eU9wdGlvbnMpO1xuICAgIHNldEJyb3dzZXJTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0Tm9kZVN0YXRlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXRTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0QnJvd3NlckNvbnRhaW5lclZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXROb2RlQ29udGFpbmVyVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldENvbnRhaW5lclZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZDtcbiAgICBzZXRCcm93c2VyQ29uZmlnVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xuICAgIHNldE5vZGVDb25maWdWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQ7XG4gICAgc2V0Q29uZmlnVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknO1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uPFQgPSBhbnk+IHtcbiAgICBpdGVtczogVFtdO1xuICAgIHBhZ2U6IG51bWJlcjtcbiAgICBwZXJfcGFnZTogbnVtYmVyO1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgdG90YWxfcGFnZXM6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmluZE1hbnlPcHRpb25zIHtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBvZmZzZXQ/OiBudW1iZXI7XG4gICAgb3JkZXJCeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIG9yZGVyRGlyZWN0aW9uPzogJ2FzYycgfCAnZGVzYycgfCAoJ2FzYycgfCAnZGVzYycpW107XG59XG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRlT3B0aW9ucyB7XG4gICAgcGFnZT86IG51bWJlcjtcbiAgICBsaW1pdD86IG51bWJlcjtcbiAgICBvcmRlckJ5PzogRmluZE1hbnlPcHRpb25zWydvcmRlckJ5J107XG4gICAgb3JkZXJEaXJlY3Rpb24/OiBGaW5kTWFueU9wdGlvbnNbJ29yZGVyRGlyZWN0aW9uJ107XG59XG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZU1hbnlPcHRpb25zIHtcbiAgICBsaW1pdD86IG51bWJlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFiYXNlUmVwb3NpdG9yeTxURW50aXR5ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFByaW1hcnlLZXkgPSBhbnksIFRPcHRpb25zID0gUmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIHByb3RlY3RlZCBkYjogS3lzZWx5PGFueT47XG4gICAgcHJvdGVjdGVkIHRhYmxlOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHByaW1hcnlLZXk6IHN0cmluZztcbiAgICBhdXRvQ3JlYXRlZEF0OiBib29sZWFuO1xuICAgIGF1dG9VcGRhdGVkQXQ6IGJvb2xlYW47XG4gICAgY29uc3RydWN0b3IoZGI6IEt5c2VseTxhbnk+LCB0YWJsZTogc3RyaW5nLCBwcmltYXJ5S2V5OiBzdHJpbmcpO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiB7XG4gICAgICAgIHFiPzogYW55O1xuICAgIH0gJiBUT3B0aW9ucyk6IGFueTtcbiAgICBjb3VudChvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55Pik6IFByb21pc2U8bnVtYmVyPjtcbiAgICBmaW5kTWFueShvcHRpb25zPzogRmluZE1hbnlPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHlbXT47XG4gICAgZmluZE9uZShvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHkgfCBudWxsPjtcbiAgICBmaW5kQnlJZChpZDogVFByaW1hcnlLZXksIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eSB8IG51bGw+O1xuICAgIGZpbmRCeUlkT3JGYWlsKGlkOiBUUHJpbWFyeUtleSwgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxOb25OdWxsYWJsZTxBd2FpdGVkPFRFbnRpdHk+Pj47XG4gICAgcGFnaW5hdGUob3B0aW9ucz86IFBhZ2luYXRlT3B0aW9ucyAmIFRPcHRpb25zKTogUHJvbWlzZTxQYWdpbmF0aW9uPjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlQ3JlYXRlKGRhdGE6IFBhcnRpYWw8VEVudGl0eT4pOiBQcm9taXNlPFBhcnRpYWw8VEVudGl0eT4+O1xuICAgIHByb3RlY3RlZCBhZnRlckNyZWF0ZShkYXRhOiBURW50aXR5KTogUHJvbWlzZTx2b2lkPjtcbiAgICBjcmVhdGUoZGF0YTogUGFydGlhbDxURW50aXR5Pik6IFByb21pc2U8VEVudGl0eT47XG4gICAgcHJvdGVjdGVkIGJlZm9yZUNyZWF0ZU1hbnkoZGF0YTogUGFydGlhbDxURW50aXR5PltdKTogUHJvbWlzZTxQYXJ0aWFsPFRFbnRpdHk+W10+O1xuICAgIHByb3RlY3RlZCBhZnRlckNyZWF0ZU1hbnkoZGF0YTogVEVudGl0eVtdKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIGNyZWF0ZU1hbnkoZGF0YTogUGFydGlhbDxURW50aXR5PltdKTogUHJvbWlzZTxhbnlbXT47XG4gICAgcHJvdGVjdGVkIGJlZm9yZVVwZGF0ZShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+LCBpZDogVFByaW1hcnlLZXkpOiBQcm9taXNlPFBhcnRpYWw8VEVudGl0eT4+O1xuICAgIHByb3RlY3RlZCBhZnRlclVwZGF0ZShkYXRhOiBURW50aXR5KTogUHJvbWlzZTxURW50aXR5PjtcbiAgICB1cGRhdGVCeUlkKGlkOiBUUHJpbWFyeUtleSwgZGF0YTogUGFydGlhbDxURW50aXR5Pik6IFByb21pc2U8dm9pZD47XG4gICAgcHJvdGVjdGVkIGJlZm9yZURlbGV0ZShpZDogVFByaW1hcnlLZXkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHByb3RlY3RlZCBhZnRlckRlbGV0ZShpZDogVFByaW1hcnlLZXkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlbGV0ZUJ5SWQoaWQ6IFRQcmltYXJ5S2V5KTogUHJvbWlzZTx2b2lkPjtcbiAgICBwcm90ZWN0ZWQgYmVmb3JlRGVsZXRlTWFueShvcHRpb25zPzogRGVsZXRlTWFueU9wdGlvbnMgJiBUT3B0aW9ucyk6IChEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKSB8IHVuZGVmaW5lZDtcbiAgICBwcm90ZWN0ZWQgYWZ0ZXJEZWxldGVNYW55KG9wdGlvbnM/OiBEZWxldGVNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gICAgZGVsZXRlTWFueShvcHRpb25zPzogRGVsZXRlTWFueU9wdGlvbnMgJiBUT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgdHlwZSB7IFVzZXJFbnRpdHkgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmltcG9ydCBEYXRhYmFzZVJlcG9zaXRvcnkgZnJvbSAnLi9EYXRhYmFzZVJlcG9zaXRvcnknO1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucyB7XG4gICAgaWQ/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgICBzZWFyY2g/OiBzdHJpbmc7XG4gICAgZW1haWw/OiBzdHJpbmc7XG4gICAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gICAgc2hvd0RlbGV0ZWQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVwb3NpdG9yeUV2ZW50cyB7XG4gICAgJ3VzZXI6Y3JlYXRlZCc6IHtcbiAgICAgICAgdXNlcjogVXNlckVudGl0eTtcbiAgICB9O1xuICAgICd1c2VyOnVwZGF0ZWQnOiB7XG4gICAgICAgIHVzZXI6IFVzZXJFbnRpdHk7XG4gICAgfTtcbiAgICAndXNlcjpkZWxldGVkJzoge1xuICAgICAgICB1c2VyOiBVc2VyRW50aXR5O1xuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVc2VyUmVwb3NpdG9yeSBleHRlbmRzIERhdGFiYXNlUmVwb3NpdG9yeTxVc2VyRW50aXR5LCBudW1iZXIsIFVzZXJSZXBvc2l0b3J5UXVlcnlPcHRpb25zPiB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGF1dG9DcmVhdGVkQXQ6IGJvb2xlYW47XG4gICAgYXV0b1VwZGF0ZWRBdDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihkYjogRGF0YWJhc2VSZXBvc2l0b3J5WydkYiddKTtcbiAgICBoYXNoVXNlclBhc3N3b3JkSWZEZWZpbmVkKGRhdGE6IFBhcnRpYWw8VXNlckVudGl0eT4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIHByb3RlY3RlZCBiZWZvcmVDcmVhdGUoZGF0YTogUGFydGlhbDxVc2VyRW50aXR5Pik6IFByb21pc2U8UGFydGlhbDxVc2VyRW50aXR5Pj47XG4gICAgcHJvdGVjdGVkIGJlZm9yZUNyZWF0ZU1hbnkoZGF0YTogUGFydGlhbDxVc2VyRW50aXR5PltdKTogUHJvbWlzZTxQYXJ0aWFsPFVzZXJFbnRpdHk+W10+O1xuICAgIHByb3RlY3RlZCBiZWZvcmVVcGRhdGUoZGF0YTogUGFydGlhbDxVc2VyRW50aXR5Pik6IFByb21pc2U8UGFydGlhbDxVc2VyRW50aXR5Pj47XG4gICAgcHJvdGVjdGVkIGFmdGVyQ3JlYXRlKGRhdGE6IFVzZXJFbnRpdHkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBVc2VyUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucyk6IGFueTtcbn1cbiIsImltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSBcImt5c2VseVwiO1xuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25FbnRpeURhdGEge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBleGVjdXRlZEF0OiBEYXRlIHwgbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZ3JhdGlvbkVudGl0eSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIGV4ZWN1dGVkQXQ6IERhdGUgfCBudWxsO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IE1pZ3JhdGlvbkVudGl5RGF0YSk7XG4gICAgdXAoZGI6IEt5c2VseTxhbnk+KTogUHJvbWlzZTx2b2lkPjtcbiAgICBkb3duKGRiOiBLeXNlbHk8YW55Pik6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgRW1taXR0ZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvRW1taXR0ZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvTG9nZ2VyU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgTWlncmF0aW9uRW50aXR5IGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvTWlncmF0aW9uRW50aXR5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uU291cmNlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb24ge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBleGVjdXRlZEF0OiBEYXRlIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEZpbHRlcnMge1xuICAgIHNvdXJjZT86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5pbnRlcmZhY2UgTWlncmF0aW9uUmVzdWx0IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gICAgcmVzdWx0OiAnc3VjY2VzcycgfCAnZmFpbGVkJztcbiAgICBlcnJvcj86IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0b3JTZXJ2aWNlT3B0aW9ucyB7XG4gICAgc291cmNlczogTWlncmF0aW9uU291cmNlW107XG4gICAgZGI6IEt5c2VseTxhbnk+O1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBlbW1pdHRlcj86IEVtbWl0dGVyU2VydmljZTtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRvclNlcnZpY2VFdmVudHMge1xuICAgICdtaWdyYXRvcjpiZWZvcmUtbWlncmF0ZSc6IHtcbiAgICAgICAgbWlncmF0aW9uczogTWlncmF0aW9uRW50aXR5W107XG4gICAgfTtcbiAgICAnbWlncmF0b3I6YWZ0ZXItbWlncmF0ZSc6IHtcbiAgICAgICAgbWlncmF0aW9uczogTWlncmF0aW9uRW50aXR5W107XG4gICAgfTtcbiAgICAnbWlncmF0b3I6YmVmb3JlLXJvbGxiYWNrJzoge1xuICAgICAgICBtaWdyYXRpb25zOiBNaWdyYXRpb25FbnRpdHlbXTtcbiAgICB9O1xuICAgICdtaWdyYXRvcjphZnRlci1yb2xsYmFjayc6IHtcbiAgICAgICAgbWlncmF0aW9uczogTWlncmF0aW9uRW50aXR5W107XG4gICAgfTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pZ3JhdG9yU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRiOiBLeXNlbHk8YW55PjtcbiAgICBzb3VyY2VzOiBNaWdyYXRpb25Tb3VyY2VbXTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNaWdyYXRvclNlcnZpY2VPcHRpb25zKTtcbiAgICBhZGRTb3VyY2Uoc291cmNlOiBNaWdyYXRpb25Tb3VyY2UpOiB2b2lkO1xuICAgIHByaXZhdGUgZW5zdXJlTWlncmF0aW9uc1RhYmxlO1xuICAgIGxpc3RTb3VyY2Uoc291cmNlOiBNaWdyYXRpb25Tb3VyY2UpOiBQcm9taXNlPE1pZ3JhdGlvbkVudGl0eVtdPjtcbiAgICBsaXN0KGZpbHRlcnM/OiBMaXN0RmlsdGVycyk6IFByb21pc2U8TWlncmF0aW9uRW50aXR5W10+O1xuICAgIHByaXZhdGUgbWlncmF0ZVVwO1xuICAgIHByaXZhdGUgbWlncmF0ZURvd247XG4gICAgcHJpdmF0ZSBtaWdyYXRlRmlsZTtcbiAgICBwcml2YXRlIHJvbGxiYWNrRmlsZTtcbiAgICBtaWdyYXRlKGZpbHRlcnM/OiBMaXN0RmlsdGVycyAmIHtcbiAgICAgICAgc3RlcHM/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIHJvbGxiYWNrKGZpbHRlcnM/OiBMaXN0RmlsdGVycyAmIHtcbiAgICAgICAgc3RlcHM/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIHVwKHN0ZXBzPzogbnVtYmVyLCBmaWx0ZXJzPzogTGlzdEZpbHRlcnMpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdFtdPjtcbiAgICBkb3duKHN0ZXBzPzogbnVtYmVyLCBmaWx0ZXJzPzogTGlzdEZpbHRlcnMpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdFtdPjtcbiAgICBsYXRlc3QoZmlsdGVycz86IExpc3RGaWx0ZXJzKTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHRbXT47XG4gICAgbGF0ZXN0T3JGYWlsKGZpbHRlcnM/OiBMaXN0RmlsdGVycyk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xuICAgIGZyZXNoKGZpbHRlcnM/OiBMaXN0RmlsdGVycyAmIHtcbiAgICAgICAgc3RlcHM/OiBudW1iZXI7XG4gICAgfSk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0W10+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2VBY2wgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9BY2xFbnRpdHkudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNsIGV4dGVuZHMgQmFzZUFjbCB7XG4gICAgYXV0aG9yaXplKGFjdGlvbjogc3RyaW5nLCBzdWJqZWN0OiBhbnksIG9iamVjdD86IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkO1xufVxuIiwiaW1wb3J0IHR5cGUgQWNsIGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvQWNsRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgQ29va2llTWFwRW50aXR5IH0gZnJvbSAnI3NoYXJlZC9pbmRleC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2Uge1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cENvbnRleHQge1xuICAgIHVybDogc3RyaW5nO1xuICAgIG1ldGhvZDogc3RyaW5nO1xuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+O1xuICAgIGJvZHk6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgY29va2llOiBDb29raWVNYXBFbnRpdHk7XG4gICAgYWNsOiBBY2w7XG4gICAgcmVxdWVzdDogUmVxdWVzdDtcbiAgICByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBIdHRwQ29udGV4dCB9IGZyb20gXCIuL0h0dHBDb250ZXh0Q29udHJhY3RcIjtcbmV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3Qge1xuICAgIHJlZGlyZWN0OiBzdHJpbmc7XG59XG5leHBvcnQgdHlwZSBIYW5kbGVSZXN1bHQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgUmVkaXJlY3QgfCB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBNaWRkbGV3YXJlIHtcbiAgICBoYW5kbGUoY3R4OiBhbnkpOiBIYW5kbGVSZXN1bHQgfCBQcm9taXNlPEhhbmRsZVJlc3VsdD47XG59XG50eXBlIEV4dHJhY3RNaWRkbGV3YXJlQ29udGV4dDxNIGV4dGVuZHMgTWlkZGxld2FyZT4gPSBBd2FpdGVkPFJldHVyblR5cGU8TVsnaGFuZGxlJ10+PiBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPyBBd2FpdGVkPFJldHVyblR5cGU8TVsnaGFuZGxlJ10+PiA6IHt9O1xudHlwZSBQcm9jZXNzTWlkZGxld2FyZUFycmF5PFQgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlW10+ID0gVCBleHRlbmRzIHJlYWRvbmx5IFtpbmZlciBGaXJzdCBleHRlbmRzIE1pZGRsZXdhcmUsIC4uLmluZmVyIFJlc3QgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlW11dID8gRXh0cmFjdE1pZGRsZXdhcmVDb250ZXh0PEZpcnN0PiAmIFByb2Nlc3NNaWRkbGV3YXJlQXJyYXk8UmVzdD4gOiB7fTtcbmV4cG9ydCB0eXBlIE1pZGRsZXdhcmVIYW5kbGVSZXN1bHQ8VCBleHRlbmRzIHJlYWRvbmx5IE1pZGRsZXdhcmVbXSA9IHJlYWRvbmx5IE1pZGRsZXdhcmVbXT4gPSBQcm9jZXNzTWlkZGxld2FyZUFycmF5PFQ+O1xuZXhwb3J0IGludGVyZmFjZSBIYW5kbGVyPFQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgKGN0eDogSHR0cENvbnRleHQgJiBUKTogUHJvbWlzZTxhbnk+IHwgYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBIYW5kbGVyLCBNaWRkbGV3YXJlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvUm91dGVyQ29udHJhY3QudHMnO1xudHlwZSBSb3V0ZU1ldGhvZCA9ICdnZXQnIHwgJ0dFVCcgfCAncG9zdCcgfCAnUE9TVCcgfCAncHV0JyB8ICdQVVQnIHwgJ3BhdGNoJyB8ICdQQVRDSCcgfCAnZGVsZXRlJyB8ICdERUxFVEUnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGUge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBtZXRob2Q6IFJvdXRlTWV0aG9kO1xuICAgIGhhbmRsZXI6IEhhbmRsZXI8YW55PiB8IG51bGw7XG4gICAgbWlkZGxld2FyZXM6IE1pZGRsZXdhcmVbXTtcbiAgICBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGw7XG4gICAgY29uc3RydWN0b3IoZGF0YT86IFBhcnRpYWw8Um91dGU+KTtcbiAgICBzdGF0aWMgcGFyYW1zKHJvdXRlUGF0aDogc3RyaW5nLCByZXF1ZXN0UGF0aDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBzdGF0aWMgcXVlcnkocmVxdWVzdFBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgdG9KU09OKCk6IHtcbiAgICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgICBtZXRob2Q6IFJvdXRlTWV0aG9kO1xuICAgICAgICBtaWRkbGV3YXJlczogc3RyaW5nW107XG4gICAgICAgIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcbiAgICB9O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IFJvdXRlIGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvUm91dGVFbnRpdHkudHMnO1xuaW1wb3J0IHR5cGUgeyBIYW5kbGVyLCBNaWRkbGV3YXJlLCBNaWRkbGV3YXJlSGFuZGxlUmVzdWx0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvUm91dGVyQ29udHJhY3QudHMnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xudHlwZSBSb3V0ZUNvbnRleHQgPSAnZ2xvYmFsJyB8ICdncm91cCcgfCAncm91dGUnO1xuaW50ZXJmYWNlIE1pZGRsZXdhcmVSZWdpc3RlciB7XG4gICAgbWlkZGxld2FyZTogTWlkZGxld2FyZTtcbiAgICBjb250ZXh0OiBSb3V0ZUNvbnRleHQ7XG59XG5pbnRlcmZhY2UgTG9hZE9wdGlvbnMge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVyRXZlbnRzIHtcbiAgICAncm91dGVyOnJlZ2lzdGVyZWQnOiB7XG4gICAgICAgIHJvdXRlcjogUm91dGVyU2VydmljZTtcbiAgICB9O1xuICAgICdyb3V0ZXI6bG9hZGVkJzoge1xuICAgICAgICByb3V0ZXI6IFJvdXRlclNlcnZpY2U7XG4gICAgfTtcbn1cbmRlY2xhcmUgY29uc3QgUm91dGVyU2VydmljZV9iYXNlOiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbGlzdGVuZXJzOiBpbXBvcnQoXCIjc2hhcmVkL2luZGV4LnRzXCIpLkxpc3RlbmVyW107XG4gICAgICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICBlbWl0QXN5bmMoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIH07XG59ICYgaW1wb3J0KFwiI3NoYXJlZC9pbmRleC50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlclNlcnZpY2U8QyA9IHt9PiBleHRlbmRzIFJvdXRlclNlcnZpY2VfYmFzZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHJvdXRlczogUm91dGVbXTtcbiAgICBtaWRkbGV3YXJlczogTWlkZGxld2FyZVJlZ2lzdGVyW107XG4gICAgcHJlZml4ZXM6IHN0cmluZ1tdO1xuICAgIGdyb3VwczogUm91dGVyU2VydmljZTxhbnk+W107XG4gICAgZ3JvdXBQcmVmaXhlczogc3RyaW5nW107XG4gICAgZGVidWc6IGJvb2xlYW47XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGNvbnN0cnVjdG9yKGRhdGE/OiBQYXJ0aWFsPFJvdXRlclNlcnZpY2U8Qz4+KTtcbiAgICB1c2U8VCBleHRlbmRzIE1pZGRsZXdhcmU+KG1pZGRsZXdhcmU6IFQsIGNvbnRleHQ/OiBSb3V0ZUNvbnRleHQpOiBSb3V0ZXJTZXJ2aWNlPEMgJiBNaWRkbGV3YXJlSGFuZGxlUmVzdWx0PFt0eXBlb2YgbWlkZGxld2FyZV0+PjtcbiAgICBwcmVmaXgocHJlZml4OiBzdHJpbmcpOiB0aGlzO1xuICAgIG1ha2VQYXRoKGFyZ3M6IHN0cmluZyk6IHN0cmluZztcbiAgICBhZGQocGF5bG9hZDogUGljazxSb3V0ZSwgJ3BhdGgnIHwgJ21ldGhvZCcgfCAnaGFuZGxlcic+KTogdm9pZDtcbiAgICBnZXQocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyPEM+KTogdm9pZDtcbiAgICBwb3N0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcjxDPik6IHZvaWQ7XG4gICAgcHV0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogSGFuZGxlcjxDPik6IHZvaWQ7XG4gICAgcGF0Y2gocGF0aDogc3RyaW5nLCBoYW5kbGVyOiBIYW5kbGVyPEM+KTogdm9pZDtcbiAgICBtYW55KG1ldGhvZHM6IFJvdXRlWydtZXRob2QnXVtdLCBwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXI8Qz4pOiB2b2lkO1xuICAgIGRlbGV0ZShwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IEhhbmRsZXI8Qz4pOiB2b2lkO1xuICAgIGdyb3VwKCk6IFJvdXRlclNlcnZpY2U8Qz47XG4gICAgcmVzb2x2ZShtZXRob2Q6IHN0cmluZywgcGF0aDogc3RyaW5nKTogUm91dGUgfCBudWxsO1xuICAgIGV4ZWN1dGUocm91dGU6IFJvdXRlLCBpbml0aWFsQ3R4OiBhbnkpOiBQcm9taXNlPGFueT47XG4gICAgY2xlYXIoKTogdm9pZDtcbiAgICBsaXN0KCk6IFJvdXRlW107XG4gICAgbG9hZChvcHRpb25zPzogTG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWRTeW5jKG9wdGlvbnM/OiBMb2FkT3B0aW9ucyk6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBKb2IgfSBmcm9tICdub2RlLXNjaGVkdWxlJztcbmV4cG9ydCBpbnRlcmZhY2UgUm91dGluZUhhbmRsZXIge1xuICAgICgpOiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGluZUVudGl0eU9wdGlvbnMge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY3Jvbjogc3RyaW5nO1xuICAgIGhhbmRsZXI/OiBSb3V0aW5lSGFuZGxlcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRpbmVFbnRpdHkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY3Jvbjogc3RyaW5nO1xuICAgIGpvYj86IEpvYjtcbiAgICBzdGF0aWMgY3JlYXRlKCk6IFJvdXRpbmVFbnRpdHk7XG4gICAgaGFuZGxlOiBSb3V0aW5lSGFuZGxlcjtcbiAgICBzZXRJZChpZDogc3RyaW5nKTogdGhpcztcbiAgICBzZXRDcm9uKGNyb246IHN0cmluZyk6IHRoaXM7XG4gICAgc2V0SGFuZGxlcihoYW5kbGVyOiBSb3V0aW5lSGFuZGxlcik6IHRoaXM7XG59XG4iLCJpbXBvcnQgUm91dGluZUVudGl0eSBmcm9tICcjc2VydmVyL2VudGl0aWVzL1JvdXRpbmVFbnRpdHkudHMnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuZXhwb3J0IGludGVyZmFjZSBBZGRPcHRpb25zIHtcbiAgICBpZD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVyU2VydmljZU9wdGlvbnMge1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG4gICAgZGVidWc/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJFdmVudHMge1xuICAgICdzY2hlZHVsZXI6cmVnaXN0ZXJlZCc6IHtcbiAgICAgICAgc2NoZWR1bGVyOiBTY2hlZHVsZXJTZXJ2aWNlO1xuICAgIH07XG4gICAgJ3NjaGVkdWxlcjpsb2FkZWQnOiB7XG4gICAgICAgIHNjaGVkdWxlcjogU2NoZWR1bGVyU2VydmljZTtcbiAgICB9O1xuICAgICdzY2hlZHVsZXI6Ym9vdGVkJzoge1xuICAgICAgICBzY2hlZHVsZXI6IFNjaGVkdWxlclNlcnZpY2U7XG4gICAgfTtcbiAgICAnc2NoZWR1bGVyOnNodXRkb3duZWQnOiB7XG4gICAgICAgIHNjaGVkdWxlcjogU2NoZWR1bGVyU2VydmljZTtcbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2NoZWR1bGVyU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIHJvdXRpbmVzOiBSb3V0aW5lRW50aXR5W107XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGRpcnM6IHN0cmluZ1tdO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBTY2hlZHVsZXJTZXJ2aWNlT3B0aW9ucyk7XG4gICAgc3RhdGljIGNyZWF0ZShvcHRpb25zPzogU2NoZWR1bGVyU2VydmljZU9wdGlvbnMpOiBTY2hlZHVsZXJTZXJ2aWNlO1xuICAgIHNldExvZ2dlcihsb2dnZXI6IExvZ2dlclNlcnZpY2UpOiB2b2lkO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdm9pZDtcbiAgICBhZGREaXIoZGlyOiBzdHJpbmcpOiB2b2lkO1xuICAgIGFkZChyb3V0aW5lOiBPbWl0PFJvdXRpbmVFbnRpdHksICdqb2InPik6IHZvaWQ7XG4gICAgcmVtb3ZlKGlkOiBSb3V0aW5lRW50aXR5WydpZCddIHwgUm91dGluZUVudGl0eVsnaWQnXVtdKTogdm9pZDtcbiAgICBsb2FkRmlsZShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkRGlyZWN0b3J5KGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2FkKCk6IFByb21pc2U8dm9pZD47XG4gICAgaGFzKGlkOiBSb3V0aW5lRW50aXR5WydpZCddKTogYm9vbGVhbjtcbiAgICBzdGFydFJvdXRpbmUoaWQ6IFJvdXRpbmVFbnRpdHlbJ2lkJ10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGFkZEFuZFN0YXJ0KHJvdXRpbmU6IE9taXQ8Um91dGluZUVudGl0eSwgJ2pvYic+KTogUHJvbWlzZTx2b2lkPjtcbiAgICBzdG9wUm91dGluZShpZDogUm91dGluZUVudGl0eVsnaWQnXSk6IFByb21pc2U8dm9pZD47XG4gICAgc3RvcEFuZFJlbW92ZShpZDogUm91dGluZUVudGl0eVsnaWQnXSk6IFByb21pc2U8dm9pZD47XG4gICAgYm9vdCgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdCgpOiBSb3V0aW5lRW50aXR5W107XG59XG4iLCJpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gXCJreXNlbHlcIjtcbmV4cG9ydCBpbnRlcmZhY2UgU2VlZGVyRW50aXlEYXRhIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpbGVuYW1lOiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWVkZXJFbnRpdHkge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBTZWVkZXJFbnRpeURhdGEpO1xuICAgIHJ1bihkYjogS3lzZWx5PGFueT4pOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IEVtbWl0dGVyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0VtbWl0dGVyU2VydmljZS50cyc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IFNlZWRlckVudGl0eSBmcm9tICcjc2VydmVyL2VudGl0aWVzL1NlZWRlckVudGl0eS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFNlZWRlclNvdXJjZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBkaXJlY3Rvcnk6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEZpbHRlcnMge1xuICAgIHNvdXJjZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIG5hbWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VlZGVyUmVzdWx0IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICBzb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gICAgcmVzdWx0OiAnc3VjY2VzcycgfCAnZmFpbGVkJztcbiAgICBlcnJvcj86IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VlZGVyRXZlbnRzIHtcbiAgICAnc2VlZGVyOmJlZm9yZS1ydW4nOiB7XG4gICAgICAgIHNlZWRlcnM6IHN0cmluZ1tdO1xuICAgIH07XG4gICAgJ3NlZWRlcjphZnRlci1ydW4nOiB7XG4gICAgICAgIHNlZWRlcnM6IHN0cmluZ1tdO1xuICAgIH07XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlZWRlclNlcnZpY2VPcHRpb25zIHtcbiAgICBkYjogS3lzZWx5PGFueT47XG4gICAgc291cmNlcz86IFNlZWRlclNvdXJjZVtdO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICBlbW1pdHRlcj86IEVtbWl0dGVyU2VydmljZTtcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VlZWRlclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBlbW1pdHRlcjogRW1taXR0ZXJTZXJ2aWNlO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBkYjogS3lzZWx5PGFueT47XG4gICAgc291cmNlczogU2VlZGVyU291cmNlW107XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogU2VlZGVyU2VydmljZU9wdGlvbnMpO1xuICAgIGFkZFNvdXJjZShzb3VyY2U6IFNlZWRlclNvdXJjZSk6IHZvaWQ7XG4gICAgbGlzdFNvdXJjZShzb3VyY2U6IFNlZWRlclNvdXJjZSk6IFByb21pc2U8U2VlZGVyRW50aXR5W10+O1xuICAgIGxpc3QoZmlsdGVycz86IExpc3RGaWx0ZXJzKTogUHJvbWlzZTxTZWVkZXJFbnRpdHlbXT47XG4gICAgcnVuU2VlZGVyKHNlZWRlcjogU2VlZGVyRW50aXR5KTogUHJvbWlzZTxTZWVkZXJSZXN1bHQ+O1xuICAgIHJ1bihmaWx0ZXJzPzogTGlzdEZpbHRlcnMgJiB7XG4gICAgICAgIHN0ZXBzPzogbnVtYmVyO1xuICAgIH0pOiBQcm9taXNlPFNlZWRlclJlc3VsdFtdPjtcbn1cbiIsImltcG9ydCB0eXBlIFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eSBmcm9tIFwiI3NlcnZlci9lbnRpdGllcy9QYWdlUmVxdWVzdENvbnRleHRFbnRpdHkudHNcIjtcbmltcG9ydCB0eXBlIHsgVXNlclJlcG9zaXRvcnlFdmVudHMgfSBmcm9tIFwiI3NlcnZlci9yZXBvc2l0b3JpZXMvVXNlclJlcG9zaXRvcnkudHNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpRXZlbnRzIH0gZnJvbSBcIiNzZXJ2ZXIvc2VydmljZXMvQ2xpU2VydmljZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBNaWdyYXRvclNlcnZpY2VFdmVudHMgfSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9NaWdyYXRvclNlcnZpY2UudHNcIjtcbmltcG9ydCB0eXBlIHsgUm91dGVyRXZlbnRzIH0gZnJvbSBcIiNzZXJ2ZXIvc2VydmljZXMvUm91dGVyU2VydmljZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTY2hlZHVsZXJFdmVudHMgfSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9TY2hlZHVsZXJTZXJ2aWNlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlZWRlckV2ZW50cyB9IGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL1NlZWRlclNlcnZpY2UudHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb250cmFjdCBleHRlbmRzIFNlZWRlckV2ZW50cywgUm91dGVyRXZlbnRzLCBDbGlFdmVudHMsIFNjaGVkdWxlckV2ZW50cywgTWlncmF0b3JTZXJ2aWNlRXZlbnRzLCBVc2VyUmVwb3NpdG9yeUV2ZW50cyB7XG4gICAgJ3BhZ2U6cmVxdWVzdDpzdGFydCc6IFBhZ2VSZXF1ZXN0Q29udGV4dEVudGl0eTtcbiAgICAncGFnZTpyZXF1ZXN0OmJlZm9yZS1yZW5kZXInOiBQYWdlUmVxdWVzdENvbnRleHRFbnRpdHk7XG4gICAgJ3BhZ2U6cmVxdWVzdDphZnRlci1yZW5kZXInOiBQYWdlUmVxdWVzdENvbnRleHRFbnRpdHk7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IEJhc2VFbW1pdHRlclNlcnZpY2UgZnJvbSBcIi4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9FbW1pdHRlclNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRDb250cmFjdCB9IGZyb20gJy4uL2NvbnRyYWN0cy9FdmVudENvbnRyYWN0JztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtbWl0dGVyU2VydmljZSBleHRlbmRzIEJhc2VFbW1pdHRlclNlcnZpY2U8RXZlbnRDb250cmFjdD4ge1xufVxuIiwiaW1wb3J0IG1zIGZyb20gJ21zJztcbmltcG9ydCBFbnZTZXJ2aWNlIGZyb20gJy4vRW52U2VydmljZSc7XG5pbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW50ZXJmYWNlIFVSTE9wdGlvbnMge1xuICAgIGRhdGE/OiBhbnk7XG4gICAgZXhwaXJlcz86IG1zLlN0cmluZ1ZhbHVlO1xuICAgIGV4cGlyZUF0PzogbnVtYmVyIHwgRGF0ZTtcbn1cbmludGVyZmFjZSBFbmNyeXB0U2VydmljZU9wdGlvbnMge1xuICAgIGtleT86IHN0cmluZztcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBlbnY/OiBFbnZTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jcnlwdFNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBlbnY6IEVudlNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxnb3JpdGhtO1xuICAgIHByaXZhdGUga2V5O1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEVuY3J5cHRTZXJ2aWNlT3B0aW9ucyk7XG4gICAgc3RhdGljIGNyZWF0ZShvcHRpb25zOiBFbmNyeXB0U2VydmljZU9wdGlvbnMpOiBFbmNyeXB0U2VydmljZTtcbiAgICBzZXREZWJ1ZyhkZWJ1ZzogYm9vbGVhbik6IHZvaWQ7XG4gICAgc2V0TG9nZ2VyKGxvZ2dlcjogTG9nZ2VyU2VydmljZSk6IHZvaWQ7XG4gICAgc2V0RW52KGVudjogRW52U2VydmljZSk6IHZvaWQ7XG4gICAgc2V0S2V5KGtleTogc3RyaW5nKTogdm9pZDtcbiAgICBlbmNyeXB0KHRleHQ6IHN0cmluZyk6IHN0cmluZztcbiAgICBkZWNyeXB0KG9wdGlvbnM6IHN0cmluZyk6IHN0cmluZztcbiAgICBlbmNyeXB0T2JqZWN0KG9iajogYW55KTogc3RyaW5nO1xuICAgIGRlY3J5cHRPYmplY3Q8VD4oZW5jcnlwdGVkU3RyaW5nOiBzdHJpbmcpOiBUO1xuICAgIHVybChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBVUkxPcHRpb25zKTogc3RyaW5nO1xuICAgIHZlcmlmeVVybChlbmNyeXB0ZWRLZXk6IHN0cmluZyk6IGFueTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmltcG9ydCBFbnZTZXJ2aWNlIGZyb20gJy4vRW52U2VydmljZSc7XG5leHBvcnQgaW50ZXJmYWNlIEV4Y2VwdGlvblNlcnZpY2VPcHRpb25zIHtcbiAgICBpZ25vcmVDb2RlRXJyb3JzPzogbnVtYmVyW107XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbiAgICBlbnY/OiBFbnZTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhjZXB0aW9uU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGlnbm9yZUNvZGVFcnJvcnM6IG51bWJlcltdO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBlbnY6IEVudlNlcnZpY2U7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86IEV4Y2VwdGlvblNlcnZpY2VPcHRpb25zKTtcbiAgICBoYW5kbGUoZXJyb3I6IEVycm9yLCByZXNwb25zZTogUmVzcG9uc2UpOiBSZXNwb25zZTxhbnksIFJlY29yZDxzdHJpbmcsIGFueT4+O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFzaGVyU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGhhc2godmFsdWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcbiAgICBjb21wYXJlKGE6IHN0cmluZywgYjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPjtcbn1cbiIsImltcG9ydCB0eXBlIHsgU2VydmVyIH0gZnJvbSAnaHR0cCc7XG5pbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCBjb3JzIGZyb20gJ2NvcnMnO1xuaW1wb3J0IFJvdXRlciBmcm9tICcuL1JvdXRlclNlcnZpY2UudHMnO1xuaW1wb3J0IEV4Y2VwdGlvblNlcnZpY2UgZnJvbSAnLi9FeGNlcHRpb25TZXJ2aWNlLnRzJztcbmltcG9ydCBSb3V0ZSBmcm9tICcjc2VydmVyL2VudGl0aWVzL1JvdXRlRW50aXR5LnRzJztcbmltcG9ydCB7IEVtbWl0dGVyU2VydmljZSwgTG9nZ2VyU2VydmljZSB9IGZyb20gJyNzaGFyZWQvaW5kZXgudHMnO1xuaW1wb3J0IEVudlNlcnZpY2UgZnJvbSAnLi9FbnZTZXJ2aWNlLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgSHR0cFNlcnZpY2VPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgcm91dGVyPzogUm91dGVyO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG4gICAgZXhjZXB0aW9uPzogRXhjZXB0aW9uU2VydmljZTtcbiAgICBlbW1pdHRlcj86IEVtbWl0dGVyU2VydmljZTtcbiAgICBlbnY/OiBFbnZTZXJ2aWNlO1xuICAgIG9yaWdpbnM/OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEh0dHBTZXJ2aWNlIHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgYXBwOiBleHByZXNzLkFwcGxpY2F0aW9uO1xuICAgIHNlcnZlcjogU2VydmVyIHwgbnVsbDtcbiAgICByb3V0ZXI6IFJvdXRlcjtcbiAgICBleGNlcHRpb246IEV4Y2VwdGlvblNlcnZpY2U7XG4gICAgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuICAgIGVtbWl0dGVyOiBFbW1pdHRlclNlcnZpY2U7XG4gICAgZW52OiBFbnZTZXJ2aWNlO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIG9uVW5oYW5kbGVyUm91dGVkOiAoKHJlcTogZXhwcmVzcy5SZXF1ZXN0LCByZXM6IGV4cHJlc3MuUmVzcG9uc2UpID0+IHZvaWQpIHwgbnVsbDtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBIdHRwU2VydmljZU9wdGlvbnMpO1xuICAgIGdldEV4cHJlc3NBcHAoKTogZXhwcmVzcy5BcHBsaWNhdGlvbjtcbiAgICBjb3JzKG9wdGlvbnM6IGNvcnMuQ29yc09wdGlvbnMpOiB2b2lkO1xuICAgIHVzZTogZXhwcmVzcy5BcHBsaWNhdGlvblsndXNlJ107XG4gICAgcm91dGVzKCk6IHZvaWQ7XG4gICAgcGFyc2VyKHJlcTogZXhwcmVzcy5SZXF1ZXN0LCByZXM6IGV4cHJlc3MuUmVzcG9uc2UsIG5leHQ6IGV4cHJlc3MuTmV4dEZ1bmN0aW9uKTogdm9pZDtcbiAgICBleGVjdXRlKHVybDogVVJMLCByZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QsIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlLCByb3V0ZTogUm91dGUpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHN0YXJ0KCk6IHZvaWQ7XG4gICAgc3RvcCgpOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IHsgVXNlckVudGl0eSB9IGZyb20gXCIjc2hhcmVkL2luZGV4LnRzXCI7XG5pbXBvcnQgdHlwZSBIdHRwU2VydmljZSBmcm9tIFwiLi9IdHRwU2VydmljZVwiO1xuaW1wb3J0IHN1cGVydGVzdCwgeyB0eXBlIFRlc3QgfSBmcm9tICdzdXBlcnRlc3QnO1xuZXhwb3J0IGludGVyZmFjZSBIdHRwVGVzdGVyU2VydmljZU9wdGlvbnMge1xuICAgIGh0dHA6IEh0dHBTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSHR0cFRlc3RlclNlcnZpY2Uge1xuICAgIHN0YXRpYyBfX2NvbnRhaW5lcl9lbnRyeV9rZXk6IHN0cmluZztcbiAgICBodHRwOiBIdHRwU2VydmljZTtcbiAgICByZXF1ZXN0OiBzdXBlcnRlc3QuU3VwZXJUZXN0PHN1cGVydGVzdC5UZXN0PjtcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNvb2tpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogSHR0cFRlc3RlclNlcnZpY2VPcHRpb25zKTtcbiAgICBjcmVhdGUocmVxdWVzdDogVGVzdCk6IFRlc3Q7XG4gICAgZ2V0KHVybDogc3RyaW5nKTogVGVzdDtcbiAgICBwb3N0KHVybDogc3RyaW5nLCBib2R5PzogYW55KTogVGVzdDtcbiAgICBsb2dpbkJ5VXNlcih1c2VyOiBVc2VyRW50aXR5KTogUHJvbWlzZTx2b2lkPjtcbiAgICBsb2dpbkJ5VXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgQmFzZUxpZmVjeWNsZVNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9MaWZlY3ljbGVTZXJ2aWNlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZmVjeWNsZVNlcnZpY2UgZXh0ZW5kcyBCYXNlTGlmZWN5Y2xlU2VydmljZSB7XG4gICAgYWRkRGlyZWN0b3J5KGRpcm5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbHVtblR5cGUsIEdlbmVyYXRlZCB9IGZyb20gJ2t5c2VseSc7XG5leHBvcnQgaW50ZXJmYWNlIFNvZnREZWxldGVUYWJsZSB7XG4gICAgZGVsZXRlZF9hdD86IENvbHVtblR5cGU8RGF0ZSB8IHN0cmluZyB8IG51bGwsIERhdGUgfCBzdHJpbmcgfCB1bmRlZmluZWQsIERhdGUgfCBzdHJpbmcgfCBudWxsPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVGltZXN0YW1wVGFibGUge1xuICAgIGNyZWF0ZWRfYXQ6IENvbHVtblR5cGU8RGF0ZSwgc3RyaW5nIHwgdW5kZWZpbmVkLCBuZXZlcj47XG4gICAgdXBkYXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlLCBzdHJpbmcgfCB1bmRlZmluZWQsIG5ldmVyPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uc1RhYmxlIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgbW9kdWxlOiBzdHJpbmcgfCBudWxsO1xuICAgIGV4ZWN1dGVkX2F0OiBDb2x1bW5UeXBlPERhdGUsIHN0cmluZyB8IHVuZGVmaW5lZCwgbmV2ZXI+O1xufVxuZXhwb3J0IGludGVyZmFjZSBVc2VyVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gICAgZW1haWw6IHN0cmluZztcbiAgICBwYXNzd29yZDogc3RyaW5nO1xuICAgIHZlcmlmaWVkX2F0PzogRGF0ZSB8IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFVzZXJNZXRhVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5UYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHRva2VuOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIGV4cGlyZXNfYXQ6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFJvbGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJvbGVUYWJsZSB7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHJvbGVfaWQ6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvblRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgICBvcmlnaW46IHN0cmluZztcbiAgICBzdWJqZWN0OiBzdHJpbmc7XG4gICAgYWN0aW9uOiBzdHJpbmc7XG4gICAgY29uZGl0aW9uczogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkFzc2lnbm1lbnRUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIHBlcm1pc3Npb25faWQ6IG51bWJlcjtcbiAgICBhc3NpZ25hYmxlX3R5cGU6IHN0cmluZztcbiAgICBhc3NpZ25hYmxlX2lkOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZpbGVUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBkcml2ZTogc3RyaW5nO1xuICAgIG1pbWV0eXBlOiBzdHJpbmc7XG4gICAgY2xpZW50X25hbWU6IHN0cmluZztcbiAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgIHB1cnBvc2U6IHN0cmluZztcbiAgICBwdWJsaWM6IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIEZpbGVNZXRhVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSwgU29mdERlbGV0ZVRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgZmlsZV9pZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkU2Vzc2lvblRhYmxlIHtcbiAgICBpZDogR2VuZXJhdGVkPG51bWJlcj47XG4gICAgcHVycG9zZTogc3RyaW5nO1xuICAgIG1pbWVfdHlwZXM6IHN0cmluZztcbiAgICBtYXhfc2l6ZTogbnVtYmVyO1xuICAgIGV4cGlyZXNfYXQ6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSm9iVGFibGUgZXh0ZW5kcyBUaW1lc3RhbXBUYWJsZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBxdWV1ZV9pZDogc3RyaW5nO1xuICAgIHN0YXR1czogJ3BlbmRpbmcnIHwgJ2luX3Byb2dyZXNzJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCc7XG4gICAgZGF0YTogc3RyaW5nIHwgbnVsbDtcbiAgICByZXN1bHQ6IHN0cmluZyB8IG51bGw7XG4gICAgZXJyb3I6IHN0cmluZyB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVUYWJsZSBleHRlbmRzIFRpbWVzdGFtcFRhYmxlLCBTb2Z0RGVsZXRlVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgc3ViamVjdDogc3RyaW5nO1xuICAgIGtleTogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZyB8IG51bGw7XG4gICAgZW5naW5lOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlTWV0YVRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIHRlbXBsYXRlX2lkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9hdXRoQWNjb3VudFRhYmxlIGV4dGVuZHMgVGltZXN0YW1wVGFibGUsIFNvZnREZWxldGVUYWJsZSB7XG4gICAgaWQ6IEdlbmVyYXRlZDxudW1iZXI+O1xuICAgIHVzZXJfaWQ6IG51bWJlcjtcbiAgICBwcm92aWRlcjogc3RyaW5nO1xuICAgIHByb3ZpZGVyX3VzZXJfaWQ6IHN0cmluZztcbiAgICBwcm92aWRlcl91c2VyX2VtYWlsOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGludGVyZmFjZSBPYXV0aFRva2VuVGFibGUge1xuICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPjtcbiAgICB1c2VyX2lkOiBudW1iZXIgfCBudWxsO1xuICAgIHByb3ZpZGVyOiBzdHJpbmcgfCBudWxsO1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIHRva2VuOiBzdHJpbmc7XG4gICAgZXhwaXJlc19hdDogc3RyaW5nO1xuICAgIG1ldGFkYXRhOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlQ29udHJhY3Qge1xuICAgIHVzZXJzOiBVc2VyVGFibGU7XG4gICAgdXNlcl9tZXRhczogVXNlck1ldGFUYWJsZTtcbiAgICB0b2tlbnM6IFRva2VuVGFibGU7XG4gICAgbWlncmF0aW9uczogTWlncmF0aW9uc1RhYmxlO1xuICAgIGZpbGVzOiBGaWxlVGFibGU7XG4gICAgZmlsZV9tZXRhczogRmlsZU1ldGFUYWJsZTtcbiAgICBmaWxlX3VwbG9hZF9zZXNzaW9uczogVXBsb2FkU2Vzc2lvblRhYmxlO1xuICAgIHJvbGVzOiBSb2xlVGFibGU7XG4gICAgdXNlcl9yb2xlczogVXNlclJvbGVUYWJsZTtcbiAgICBwZXJtaXNzaW9uczogUGVybWlzc2lvblRhYmxlO1xuICAgIHBlcm1pc3Npb25zX2Fzc2lnbm1lbnRzOiBQZXJtaXNzaW9uQXNzaWdubWVudFRhYmxlO1xuICAgIGpvYnM6IEpvYlRhYmxlO1xuICAgIGVtYWlsX3RlbXBsYXRlczogRW1haWxUZW1wbGF0ZVRhYmxlO1xuICAgIGVtYWlsX3RlbXBsYXRlX21ldGFzOiBFbWFpbFRlbXBsYXRlTWV0YVRhYmxlO1xuICAgIG9hdXRoX2FjY291bnRzOiBPYXV0aEFjY291bnRUYWJsZTtcbiAgICBvYXV0aF90b2tlbnM6IE9hdXRoVG9rZW5UYWJsZTtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbkJ1aWxkZXIgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYWZpbHRlciB7XG4gICAgZXE/OiBzdHJpbmc7XG4gICAgbmVxPzogc3RyaW5nO1xuICAgIGxpa2U/OiBzdHJpbmc7XG4gICAgbmxpa2U/OiBzdHJpbmc7XG4gICAgaW4/OiBzdHJpbmdbXTtcbiAgICBuaW4/OiBzdHJpbmdbXTtcbiAgICBndD86IHN0cmluZztcbiAgICBndGU/OiBzdHJpbmc7XG4gICAgbHQ/OiBzdHJpbmc7XG4gICAgbHRlPzogc3RyaW5nO1xuICAgIGlzX251bGw/OiBib29sZWFuO1xuICAgIGV4aXN0cz86IGJvb2xlYW47XG59XG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhUXVlcnlQYXlsb2FkIHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBNZXRhZGFmaWx0ZXI7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhZGF0YVF1ZXJ5U2VydmljZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IHtcbiAgICBwcml2YXRlIHBheWxvYWQ7XG4gICAgcHJpdmF0ZSB0YWJsZTtcbiAgICBwcml2YXRlIGZvcmVpZ25LZXk7XG4gICAgcHJpdmF0ZSBwYXJlbnRLZXk7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZDogTWV0YWRhdGFRdWVyeVBheWxvYWQsIHRhYmxlOiBULCBmb3JlaWduS2V5OiBrZXlvZiBEYXRhYmFzZVtUXSwgcGFyZW50S2V5Pzogc3RyaW5nKTtcbiAgICBnZXQgbmVlZFdoZXJlSW4oKTogYm9vbGVhbjtcbiAgICBnZXQgbmVlZFdoZXJlTm90SW4oKTogYm9vbGVhbjtcbiAgICBhcHBseShkYlF1ZXJ5OiBhbnkpOiBhbnk7XG4gICAgcHJpdmF0ZSBidWlsZFJvd0NvbmRpdGlvbnM7XG4gICAgd2hlcmVJbjogPERCUXVlcnk+KGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IERCUXVlcnk7XG4gICAgd2hlcmVOb3RJbjogPERCUXVlcnk+KGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IERCUXVlcnk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhZGF0YVNlcnZpY2Uge1xuICAgIGlkOiBudW1iZXI7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICBmb3JlaWduS2V5OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IocGF5bG9hZDogUGljazxNZXRhZGF0YVNlcnZpY2UsICd0YWJsZScgfCAnZm9yZWlnbktleScgfCAnaWQnPik7XG4gICAgc3RhdGljIHBhcnNlKHZhbHVlOiBhbnkpOiBhbnk7XG4gICAgc3RhdGljIGZsYXR0ZW4oaXRlbXM6IEFycmF5PHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogYW55O1xuICAgIH0+KTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBnZXQ8VCA9IGFueT4obmFtZTogc3RyaW5nKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgICBnZXQ8VCA9IGFueT4obmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQpOiBQcm9taXNlPFQ+O1xuICAgIHNldChuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxpc3QoKTogUHJvbWlzZTxBcnJheTx7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgdmFsdWU6IGFueTtcbiAgICB9Pj47XG4gICAgYWxsKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG59XG4iLCJleHBvcnQgdHlwZSBJcGNNZXNzYWdlPFQgPSBhbnk+ID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBkYXRhOiBUO1xufTtcbnR5cGUgSXBjTGlzdGVuZXI8VCA9IGFueT4gPSAoZGF0YTogVCkgPT4gdm9pZDtcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIFBsdWdpbklwY0NsaWVudCB7XG4gICAgcHJpdmF0ZSBsaXN0ZW5lcnM7XG4gICAgY29uc3RydWN0b3IoKTtcbiAgICBvbjxUID0gYW55PihldmVudDogc3RyaW5nLCBjYWxsYmFjazogSXBjTGlzdGVuZXI8VD4pOiB2b2lkO1xuICAgIG9mZjxUID0gYW55PihldmVudDogc3RyaW5nLCBjYWxsYmFjazogSXBjTGlzdGVuZXI8VD4pOiB2b2lkO1xuICAgIGVtaXQ8VCA9IGFueT4oZXZlbnQ6IHN0cmluZywgZGF0YT86IFQpOiBzdHJpbmc7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IENoaWxkUHJvY2VzcyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG50eXBlIElwY0xpc3RlbmVyPFQgPSBhbnk+ID0gKGRhdGE6IFQpID0+IHZvaWQ7XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBQbHVnaW5JcGNIb3N0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkO1xuICAgIHByaXZhdGUgbGlzdGVuZXJzO1xuICAgIGNvbnN0cnVjdG9yKGNoaWxkOiBDaGlsZFByb2Nlc3MpO1xuICAgIG9uPFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBJcGNMaXN0ZW5lcjxUPik6IHZvaWQ7XG4gICAgb2ZmPFQgPSBhbnk+KGV2ZW50OiBzdHJpbmcsIGNhbGxiYWNrOiBJcGNMaXN0ZW5lcjxUPik6IHZvaWQ7XG4gICAgZW1pdDxUID0gYW55PihldmVudDogc3RyaW5nLCBkYXRhPzogVCk6IHN0cmluZztcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IFBsdWdpbklwY0NsaWVudCB9IGZyb20gJy4vUGx1Z2luSXBjQ2xpZW50LnRzJztcbmV4cG9ydCB0eXBlIEh0dHBNZXRob2QgPSAnR0VUJyB8ICdQT1NUJyB8ICdQVVQnIHwgJ1BBVENIJyB8ICdERUxFVEUnO1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZURlZmluaXRpb24ge1xuICAgIG1ldGhvZDogSHR0cE1ldGhvZDtcbiAgICBwYXRoOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlUmVxdWVzdCB7XG4gICAgcmVxdWVzdElkOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBIdHRwTWV0aG9kO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBib2R5PzogYW55O1xuICAgIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVJlc3BvbnNlUGF5bG9hZCB7XG4gICAgcmVxdWVzdElkOiBzdHJpbmc7XG4gICAgc3RhdHVzOiBudW1iZXI7XG4gICAgYm9keT86IGFueTtcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVSZXBseSB7XG4gICAgc3RhdHVzKGNvZGU6IG51bWJlcik6IFJvdXRlUmVwbHk7XG4gICAgc2VuZChib2R5PzogYW55KTogdm9pZDtcbn1cbmV4cG9ydCB0eXBlIFJvdXRlSGFuZGxlciA9IChyZXE6IFJvdXRlUmVxdWVzdCwgcmVwbHk6IFJvdXRlUmVwbHkpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgY2xhc3MgUGx1Z2luUm91dGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDtcbiAgICBwcml2YXRlIHJvdXRlcztcbiAgICBjb25zdHJ1Y3RvcihjbGllbnQ6IFBsdWdpbklwY0NsaWVudCk7XG4gICAgcHJpdmF0ZSBkaXNwYXRjaDtcbiAgICBwcml2YXRlIHJlZ2lzdGVyO1xuICAgIGdldChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IFJvdXRlSGFuZGxlcik6IHZvaWQ7XG4gICAgcG9zdChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IFJvdXRlSGFuZGxlcik6IHZvaWQ7XG4gICAgcHV0KHBhdGg6IHN0cmluZywgaGFuZGxlcjogUm91dGVIYW5kbGVyKTogdm9pZDtcbiAgICBwYXRjaChwYXRoOiBzdHJpbmcsIGhhbmRsZXI6IFJvdXRlSGFuZGxlcik6IHZvaWQ7XG4gICAgZGVsZXRlKHBhdGg6IHN0cmluZywgaGFuZGxlcjogUm91dGVIYW5kbGVyKTogdm9pZDtcbn1cbiIsImltcG9ydCB0eXBlIFJvdXRlciBmcm9tICcjc2VydmVyL3NlcnZpY2VzL1JvdXRlclNlcnZpY2UudHMnO1xuaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlckZpbGVCYXNlUm91dGluZ1NlcnZpY2Uge1xuICAgIHByaXZhdGUgZGlyZWN0b3J5O1xuICAgIHByaXZhdGUgcHJlZml4O1xuICAgIHByaXZhdGUgbW9kdWxlPztcbiAgICBwcml2YXRlIHJvdXRlcjtcbiAgICBwcml2YXRlIGxvZ2dlcjtcbiAgICBwcml2YXRlIHJvdXRlcztcbiAgICBkZWJ1ZzogYm9vbGVhbjtcbiAgICBzZXREaXJlY3RvcnkoZGlyZWN0b3J5OiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldFByZWZpeChwcmVmaXg6IHN0cmluZyk6IHRoaXM7XG4gICAgc2V0Um91dGVyKHJvdXRlcjogUm91dGVyKTogdGhpcztcbiAgICBzZXRNb2R1bGUobW9kdWxlOiBzdHJpbmcpOiB0aGlzO1xuICAgIHNldExvZ2dlcihsb2dnZXI6IExvZ2dlclNlcnZpY2UpOiB0aGlzO1xuICAgIHNldERlYnVnKGRlYnVnOiBib29sZWFuKTogdGhpcztcbiAgICBzdGF0aWMgY3JlYXRlKGRpcmVjdG9yeTogc3RyaW5nKTogUm91dGVyRmlsZUJhc2VSb3V0aW5nU2VydmljZTtcbiAgICBsb2FkRmlsZXMoKTogUHJvbWlzZTx2b2lkPjtcbiAgICByZWdpc3RlclJvdXRlcygpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCBSb3V0ZXJTZXJ2aWNlIGZyb20gJy4vUm91dGVyU2VydmljZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclJlZ2lzdGVyRW50cnkge1xuICAgIGZpbGVwYXRoOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3V0ZXJSZWdpc3RlcjxDID0ge30+IGV4dGVuZHMgUm91dGVyU2VydmljZTxDPiB7XG4gICAgZmlsZXM6IE1hcDxzdHJpbmcsIFJvdXRlclJlZ2lzdGVyRW50cnk+O1xuICAgIGRpcnM6IE1hcDxzdHJpbmcsIFJvdXRlclJlZ2lzdGVyRW50cnk+O1xuICAgIGNvbnN0cnVjdG9yKHJvdXRlcj86IFBhcnRpYWw8Um91dGVyU2VydmljZTxDPj4pO1xuICAgIGFkZEZpbGUoZmlsZW5hbWU6IHN0cmluZywgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZDtcbiAgICBhZGREaXIoZGlybmFtZTogc3RyaW5nLCBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkO1xuICAgIHByaXZhdGUgbG9hZEZpbGU7XG4gICAgcHJpdmF0ZSBsb2FkRGlyO1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbn1cbiIsImltcG9ydCB0eXBlIFJvdXRlciBmcm9tICcuL1JvdXRlclNlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBNaWRkbGV3YXJlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvUm91dGVyQ29udHJhY3QudHMnO1xuaW1wb3J0IHR5cGUgeyBIdHRwQ29udGV4dCB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0h0dHBDb250ZXh0Q29udHJhY3QudHMnO1xuZXhwb3J0IHR5cGUgUmVzb3VyY2VNZXRob2QgPSAnaW5kZXgnIHwgJ3Nob3cnIHwgJ3N0b3JlJyB8ICd1cGRhdGUnIHwgJ2Rlc3Ryb3knO1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJSZXNvdXJjZU9wdGlvbnMge1xuICAgIG1pZGRsZXdhcmU/OiBQYXJ0aWFsPFJlY29yZDxSZXNvdXJjZU1ldGhvZCB8ICdhbGwnLCBNaWRkbGV3YXJlPj47XG4gICAgZXhjZXB0PzogUmVzb3VyY2VNZXRob2RbXTtcbn1cbmRlY2xhcmUgY29uc3QgUm91dGVyUmVzb3VyY2VTZXJ2aWNlX2Jhc2U6IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBsaXN0ZW5lcnM6IGltcG9ydChcIiNzaGFyZWQvbWl4aW5zL0hvb2tzTWl4aW4udHNcIikuTGlzdGVuZXJbXTtcbiAgICAgICAgb24oZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIG9mZihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogdm9pZDtcbiAgICAgICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XG4gICAgICAgIGVtaXRBc3luYyhldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbn0gJiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHNcIikuQ29uc3RydWN0b3I7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3V0ZXJSZXNvdXJjZVNlcnZpY2UgZXh0ZW5kcyBSb3V0ZXJSZXNvdXJjZVNlcnZpY2VfYmFzZSB7XG4gICAgcHJpdmF0ZSBvcHRpb25zO1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBSb3V0ZXJSZXNvdXJjZU9wdGlvbnMpO1xuICAgIGluZGV4KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPGFueT47XG4gICAgc2hvdyhjdHg6IEh0dHBDb250ZXh0KTogUHJvbWlzZTxhbnk+O1xuICAgIHN0b3JlKGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPGFueT47XG4gICAgdXBkYXRlKGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPGFueT47XG4gICAgZGVzdHJveShjdHg6IEh0dHBDb250ZXh0KTogUHJvbWlzZTxhbnk+O1xuICAgIHByaXZhdGUgd3JhcDtcbiAgICByZWdpc3Rlcihyb3V0ZXI6IFJvdXRlcik6IHZvaWQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCB0eXBlIENvbmZpZ01vZGVsID0gUmV0dXJuVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiBNb2RlbENvbmZpZz4+O1xuaW50ZXJmYWNlIE9wdGlvbnMge1xuICAgIHJlYWRvbmx5PzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vZGVsQ29uZmlnKGtleTogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucyk6IDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSkgPT4ge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7fTtcbiAgICBfX2lzQ29uZmlnTW9kZWw6IGJvb2xlYW47XG4gICAgc2VyaWFsaXplPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIHJvdzogYW55KTogUHJvbWlzZTxUPjtcbiAgICBsaXN0PFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBQcm9taXNlPFRbXT47XG4gICAgZmluZDxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD47XG4gICAgZmluZE9yRmFpbDxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTxUPjtcbiAgICBjcmVhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaXRlbTogVCAmIHtcbiAgICAgICAgaWQ6IHN0cmluZztcbiAgICB9KTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZywgZGF0YTogVCk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlT3JDcmVhdGU8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPik6IFByb21pc2U8dm9pZD47XG4gICAgZGVzdHJveTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn0gJiBUQmFzZTtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCBSb3V0ZXJSZXNvdXJjZVNlcnZpY2UgZnJvbSAnLi9Sb3V0ZXJSZXNvdXJjZVNlcnZpY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXJSZXNvdXJjZU9wdGlvbnMgfSBmcm9tICcuL1JvdXRlclJlc291cmNlU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvSHR0cENvbnRleHRDb250cmFjdC50cyc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ01vZGVsIH0gZnJvbSAnI3NlcnZlci9taXhpbnMvTW9kZWxDb25maWdNaXhpbi50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3V0ZXJSZXNvdXJjZUNvbmZpZyBleHRlbmRzIFJvdXRlclJlc291cmNlU2VydmljZSB7XG4gICAgcHJpdmF0ZSBtb2RlbDtcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogQ29uZmlnTW9kZWwsIG9wdGlvbnM/OiBSb3V0ZXJSZXNvdXJjZU9wdGlvbnMpO1xuICAgIGluZGV4KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPHtcbiAgICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgICB0b3RhbDogbnVtYmVyO1xuICAgICAgICB0b3RhbF9wYWdlczogbnVtYmVyO1xuICAgICAgICBpdGVtczoge31bXTtcbiAgICB9PjtcbiAgICBzaG93KGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPHt9PjtcbiAgICBzdG9yZShjdHg6IEh0dHBDb250ZXh0KTogUHJvbWlzZTx7XG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICB9PjtcbiAgICB1cGRhdGUoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8dm9pZD47XG4gICAgZGVzdHJveShjdHg6IEh0dHBDb250ZXh0KTogUHJvbWlzZTx7XG4gICAgICAgIHN1Y2Nlc3M6IGJvb2xlYW47XG4gICAgfT47XG59XG4iLCJpbXBvcnQgTG9nZ2VyU2VydmljZSBmcm9tICcjc2hhcmVkL3NlcnZpY2VzL0xvZ2dlclNlcnZpY2UudHMnO1xuaW50ZXJmYWNlIENvbW1hbmRPcHRpb25zIHtcbiAgICBjd2Q/OiBzdHJpbmc7XG4gICAgZW52PzogTm9kZUpTLlByb2Nlc3NFbnY7XG4gICAgc2hlbGw/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBTaGVsbFNlcnZpY2VPcHRpb25zIHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgbG9nZ2VyPzogTG9nZ2VyU2VydmljZTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoZWxsU2VydmljZSB7XG4gICAgc3RhdGljIF9fY29udGFpbmVyX2VudHJ5X2tleTogc3RyaW5nO1xuICAgIGRlYnVnOiBib29sZWFuO1xuICAgIGxvZ2dlcjogTG9nZ2VyU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogU2hlbGxTZXJ2aWNlT3B0aW9ucyk7XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZSBhIHNoZWxsIGNvbW1hbmQgYW5kIHJldHVybiBhIHByb21pc2VcbiAgICAgKi9cbiAgICBjb21tYW5kKGJpbjogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9ucz86IENvbW1hbmRPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbiAgICAvKipcbiAgICAgKiBFeGVjdXRlIGEgc2hlbGwgY29tbWFuZCBhbmQgcmV0dXJuIHRoZSBvdXRwdXQgYXMgYSBzdHJpbmdcbiAgICAgKi9cbiAgICBleGVjdXRlQ29tbWFuZFdpdGhPdXRwdXQoYmluOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zPzogQ29tbWFuZE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSBDb25maWdTZXJ2aWNlIGZyb20gJyNzaGFyZWQvc2VydmljZXMvQ29uZmlnU2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2luYXRpb24sIEZpbmRNYW55T3B0aW9ucywgUGFnaW5hdGVPcHRpb25zLCBEZWxldGVNYW55T3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25maWdSZXBvc2l0b3J5PFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUT3B0aW9ucyA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBDb25maWdTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBrZXk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcHJpbWFyeUtleTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnU2VydmljZSwga2V5OiBzdHJpbmcsIHByaW1hcnlLZXk/OiBzdHJpbmcpO1xuICAgIHByb3RlY3RlZCBnZXRJdGVtcygpOiBURW50aXR5W107XG4gICAgcHJvdGVjdGVkIHNldEl0ZW1zKGl0ZW1zOiBURW50aXR5W10pOiB2b2lkO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBUT3B0aW9ucyk6IFRFbnRpdHlbXTtcbiAgICBjb3VudChvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj47XG4gICAgZmluZE1hbnkob3B0aW9ucz86IEZpbmRNYW55T3B0aW9ucyAmIFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5W10+O1xuICAgIGZpbmRPbmUob3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5IHwgbnVsbD47XG4gICAgZmluZEJ5SWQoaWQ6IHN0cmluZywgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5IHwgbnVsbD47XG4gICAgZmluZEJ5SWRPckZhaWwoaWQ6IHN0cmluZywgb3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxURW50aXR5PjtcbiAgICBwYWdpbmF0ZShvcHRpb25zPzogUGFnaW5hdGVPcHRpb25zICYgVE9wdGlvbnMpOiBQcm9taXNlPFBhZ2luYXRpb248VEVudGl0eT4+O1xuICAgIGNyZWF0ZShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+KTogUHJvbWlzZTxURW50aXR5PjtcbiAgICBjcmVhdGVNYW55KGRhdGE6IFBhcnRpYWw8VEVudGl0eT5bXSk6IFByb21pc2U8VEVudGl0eVtdPjtcbiAgICB1cGRhdGVCeUlkKGlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8VEVudGl0eT4pOiBQcm9taXNlPFRFbnRpdHk+O1xuICAgIGRlbGV0ZUJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgZGVsZXRlTWFueShvcHRpb25zPzogRGVsZXRlTWFueU9wdGlvbnMgJiBUT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgRGF0YWJhc2VSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IE1ldGFkYXRhUXVlcnlQYXlsb2FkIH0gZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9NZXRhZGF0YVF1ZXJ5U2VydmljZS50cyc7XG5pbXBvcnQgdHlwZSBGaWxlRW50aXR5IGZyb20gJyNzaGFyZWQvZW50aXRpZXMvRmlsZUVudGl0eS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIEZpbGVSZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICBwdXJwb3NlPzogc3RyaW5nW107XG4gICAgY2xpZW50X25hbWU/OiBzdHJpbmdbXTtcbiAgICBtZXRhcz86IE1ldGFkYXRhUXVlcnlQYXlsb2FkO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9zaXRvcnkgZXh0ZW5kcyBEYXRhYmFzZVJlcG9zaXRvcnk8RmlsZUVudGl0eSwgRmlsZUVudGl0eVsnaWQnXSwgRmlsZVJlcG9zaXRvcnlRdWVyeU9wdGlvbnM+IHtcbiAgICBjb25zdHJ1Y3RvcihkYjogRGF0YWJhc2VSZXBvc2l0b3J5WydkYiddKTtcbiAgICBxdWVyeShvcHRpb25zPzogRmlsZVJlcG9zaXRvcnlRdWVyeU9wdGlvbnMpOiBhbnk7XG59XG4iLCJpbXBvcnQgU2hlbGxTZXJ2aWNlIGZyb20gXCIjc2VydmVyL3NlcnZpY2VzL1NoZWxsU2VydmljZS50c1wiO1xuaW1wb3J0IEdpdEJyYW5jaEVudGl0eSBmcm9tIFwiI3NoYXJlZC9lbnRpdGllcy9HaXRCcmFuY2hFbnRpdHkudHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgR2l0QnJhbmNoUmVwb3NpdG9yeU9wdGlvbnMge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHNoZWxsPzogU2hlbGxTZXJ2aWNlO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2l0QnJhbmNoUmVwb3NpdG9yeSB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgc2hlbGw6IFNoZWxsU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBHaXRCcmFuY2hSZXBvc2l0b3J5T3B0aW9ucyk7XG4gICAgbGlzdCgpOiBQcm9taXNlPEdpdEJyYW5jaEVudGl0eVtdPjtcbiAgICBmZXRjaChvcHRpb25zOiB7XG4gICAgICAgIHJlbW90ZTogc3RyaW5nO1xuICAgICAgICBicmFuY2g6IHN0cmluZztcbiAgICAgICAgbG9jYWxOYW1lPzogc3RyaW5nO1xuICAgIH0pOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IFNoZWxsU2VydmljZSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9TaGVsbFNlcnZpY2UudHNcIjtcbmltcG9ydCBHaXRDb21taXRFbnRpdHkgZnJvbSBcIiNzaGFyZWQvZW50aXRpZXMvR2l0Q29tbWl0RW50aXR5LnRzXCI7XG5leHBvcnQgaW50ZXJmYWNlIEdpdENvbW1pdFJlcG9zaXRvcnlPcHRpb25zIHtcbiAgICBjd2Q6IHN0cmluZztcbiAgICBzaGVsbD86IFNoZWxsU2VydmljZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q29tbWl0TGlzdE9wdGlvbnMge1xuICAgIGxpbWl0PzogbnVtYmVyO1xuICAgIGN1cnNvcj86IHN0cmluZztcbiAgICBicmFuY2hlcz86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBHaXRDb21taXRMaXN0UmVzdWx0IHtcbiAgICBpdGVtczogR2l0Q29tbWl0RW50aXR5W107XG4gICAgY3Vyc29yX3ByZXZpb3VzOiBzdHJpbmcgfCBudWxsO1xuICAgIGN1cnNvcl9jdXJyZW50OiBzdHJpbmcgfCBudWxsO1xuICAgIGN1cnNvcl9uZXh0OiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2l0Q29tbWl0UmVwb3NpdG9yeSB7XG4gICAgY3dkOiBzdHJpbmc7XG4gICAgc2hlbGw6IFNoZWxsU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBHaXRDb21taXRSZXBvc2l0b3J5T3B0aW9ucyk7XG4gICAgbGlzdChvcHRpb25zPzogR2l0Q29tbWl0TGlzdE9wdGlvbnMpOiBQcm9taXNlPEdpdENvbW1pdExpc3RSZXN1bHQ+O1xuICAgIGNoZWNrb3V0KGhhc2g6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG4iLCJpbXBvcnQgRGF0YWJhc2VSZXBvc2l0b3J5IGZyb20gJyNzZXJ2ZXIvcmVwb3NpdG9yaWVzL0RhdGFiYXNlUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgdHlwZSB7IFBlcm1pc3Npb25Bc3NpZ25tZW50IH0gZnJvbSAnI3NoYXJlZC9zY2hlbWFzL3Blcm1pc3Npb25Bc3NpZ25tZW50U2NoZW1hLnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkFzc2lnbm1lbnRSZXBvc2l0b3J5UXVlcnlPcHRpb25zIHtcbiAgICBpZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIHBlcm1pc3Npb25JZD86IG51bWJlciB8IG51bWJlcltdO1xuICAgIGFzc2lnbmFibGVJZD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIGFzc2lnbmFibGVUeXBlPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnkgZXh0ZW5kcyBEYXRhYmFzZVJlcG9zaXRvcnk8UGVybWlzc2lvbkFzc2lnbm1lbnQsIFBlcm1pc3Npb25Bc3NpZ25tZW50WydpZCddLCBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnlRdWVyeU9wdGlvbnM+IHtcbiAgICBjb25zdHJ1Y3RvcihkYjogRGF0YWJhc2VSZXBvc2l0b3J5WydkYiddKTtcbiAgICBxdWVyeShvcHRpb25zPzogUGVybWlzc2lvbkFzc2lnbm1lbnRSZXBvc2l0b3J5UXVlcnlPcHRpb25zKTogYW55O1xufVxuIiwiaW1wb3J0IERhdGFiYXNlUmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9EYXRhYmFzZVJlcG9zaXRvcnkudHMnO1xuaW1wb3J0IHR5cGUgeyBQZXJtaXNzaW9uIH0gZnJvbSAnI3NoYXJlZC9zY2hlbWFzL3Blcm1pc3Npb25TY2hlbWEudHMnO1xuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucyB7XG4gICAgaWQ/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgICBzZWFyY2g/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJtaXNzaW9uUmVwb3NpdG9yeSBleHRlbmRzIERhdGFiYXNlUmVwb3NpdG9yeTxQZXJtaXNzaW9uLCBQZXJtaXNzaW9uWydpZCddLCBQZXJtaXNzaW9uUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucz4ge1xuICAgIGNvbnN0cnVjdG9yKGRiOiBEYXRhYmFzZVJlcG9zaXRvcnlbJ2RiJ10pO1xuICAgIHF1ZXJ5KG9wdGlvbnM/OiBQZXJtaXNzaW9uUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucyk6IGFueTtcbn1cbiIsImltcG9ydCB0eXBlIHsgRmluZE1hbnlPcHRpb25zLCBQYWdpbmF0ZU9wdGlvbnMsIFBhZ2luYXRpb24gfSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9EYXRhYmFzZVJlcG9zaXRvcnkudHMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIElSZXBvc2l0b3J5VHlwZXM8VEVudGl0eSA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQcmltYXJ5S2V5VHlwZSA9IGFueSwgVE9wdGlvbnMgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY291bnQob3B0aW9ucz86IFRPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGZpbmRNYW55KG9wdGlvbnM/OiBUT3B0aW9ucyAmIEZpbmRNYW55T3B0aW9ucyk6IFByb21pc2U8VEVudGl0eVtdPjtcbiAgICBmaW5kQnlJZChpZDogVFByaW1hcnlLZXlUeXBlLCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHkgfCBudWxsPjtcbiAgICBmaW5kQnlJZE9yRmFpbChpZDogVFByaW1hcnlLZXlUeXBlLCBvcHRpb25zPzogVE9wdGlvbnMpOiBQcm9taXNlPFRFbnRpdHk+O1xuICAgIHBhZ2luYXRlKG9wdGlvbnM/OiBUT3B0aW9ucyAmIFBhZ2luYXRlT3B0aW9ucyk6IFByb21pc2U8UGFnaW5hdGlvbj47XG4gICAgY3JlYXRlKGRhdGE6IFBhcnRpYWw8VEVudGl0eT4sIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eT47XG4gICAgY3JlYXRlTWFueShkYXRhOiBQYXJ0aWFsPFRFbnRpdHk+W10sIG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8VEVudGl0eVtdPjtcbiAgICBkZWxldGVCeUlkKGlkOiBUUHJpbWFyeUtleVR5cGUpOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlc3Ryb3lNYW55KG9wdGlvbnM/OiBUT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXRhYmFzZVJlcG9zaXRvcnlJbmZlck1peGluPFRFbnRpdHkgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUUHJpbWFyeUtleVR5cGUgPSBhbnksIFRPcHRpb25zID0gUmVjb3JkPHN0cmluZywgYW55Pj4oKTogPFRCYXNlIGV4dGVuZHMgQ29uc3RydWN0b3I+KEJhc2U6IFRCYXNlKSA9PiBUQmFzZSAmIENvbnN0cnVjdG9yPElSZXBvc2l0b3J5VHlwZXM8VEVudGl0eSwgVFByaW1hcnlLZXlUeXBlLCBUT3B0aW9ucz4+O1xuIiwiaW1wb3J0IERhdGFiYXNlUmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9EYXRhYmFzZVJlcG9zaXRvcnkudHMnO1xuaW1wb3J0IHR5cGUgeyBUb2tlbiB9IGZyb20gJyNzaGFyZWQvc2NoZW1hcy90b2tlblNjaGVtYS50cyc7XG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucyB7XG4gICAgaWQ/OiBudW1iZXIgfCBudW1iZXJbXTtcbiAgICBzZWFyY2g/OiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuZXhwb3J0IGludGVyZmFjZSBUb2tlblJlcG9zaXRvcnlHZW5lcmF0ZU9wdGlvbnMge1xuICAgIHVzZXJfaWQ6IG51bWJlcjtcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIGV4cGlyZXNfaW5faG91cnM/OiBudW1iZXI7XG59XG5kZWNsYXJlIGNvbnN0IFRva2VuUmVwb3NpdG9yeV9iYXNlOiBpbXBvcnQoXCIjc2hhcmVkL3V0aWxzL2luZGV4LnRzXCIpLkNvbnN0cnVjdG9yICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9pbmRleC50c1wiKS5Db25zdHJ1Y3RvcjxpbXBvcnQoXCIjc2VydmVyL21peGlucy9EYXRhYmFzZVJlcG9zaXRvcnlJbmZlck1peGluLnRzXCIpLklSZXBvc2l0b3J5VHlwZXM8e1xuICAgIGlkOiBudW1iZXI7XG4gICAgbmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdXNlcl9pZDogbnVtYmVyO1xuICAgIHRva2VuOiBzdHJpbmc7XG4gICAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICAgIHVwZGF0ZWRfYXQ6IHN0cmluZztcbiAgICBleHBpcmVzX2F0OiBzdHJpbmc7XG59LCBudW1iZXIsIFRva2VuUmVwb3NpdG9yeVF1ZXJ5T3B0aW9ucz4+ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9pbmRleC50c1wiKS5Db25zdHJ1Y3Rvcjx7fT4gJiB0eXBlb2YgRGF0YWJhc2VSZXBvc2l0b3J5O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5SZXBvc2l0b3J5IGV4dGVuZHMgVG9rZW5SZXBvc2l0b3J5X2Jhc2Uge1xuICAgIGF1dG9DcmVhdGVkQXQ6IGJvb2xlYW47XG4gICAgYXV0b1VwZGF0ZWRBdDogYm9vbGVhbjtcbiAgICBjb25zdHJ1Y3RvcihkYjogRGF0YWJhc2VSZXBvc2l0b3J5WydkYiddKTtcbiAgICBxdWVyeShvcHRpb25zPzogVG9rZW5SZXBvc2l0b3J5UXVlcnlPcHRpb25zKTogYW55O1xuICAgIGZpbmRCeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFRva2VuIHwgbnVsbD47XG4gICAgZ2VuZXJhdGUob3B0aW9uczogVG9rZW5SZXBvc2l0b3J5R2VuZXJhdGVPcHRpb25zKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IEt5c2VseSB9IGZyb20gXCJreXNlbHlcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERhdGFiYXNlR2F0ZXdheTxEQj4gZXh0ZW5kcyBLeXNlbHk8REI+IHtcbiAgICBzdGF0aWMgX19jb250YWluZXJfZW50cnlfa2V5OiBzdHJpbmc7XG4gICAgX2RpYWxlY3RfaWRlbnRpZmllcjogc3RyaW5nO1xufVxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBCYXNlRHJpdmUgZnJvbSAnI3NlcnZlci9nYXRld2F5cy9Ecml2ZUJhc2VHYXRld2F5LnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgRHJpdmVGU0NvbmZpZyB7XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcml2ZUZTIGV4dGVuZHMgQmFzZURyaXZlIHtcbiAgICBwcml2YXRlIHNjaGVtYTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBQaWNrPEJhc2VEcml2ZSwgJ2lkJyB8ICduYW1lJyB8ICdkZXNjcmlwdGlvbicgfCAnY29uZmlnJz4pO1xuICAgIGdldCB2YWxpZCgpOiBib29sZWFuO1xuICAgIHByaXZhdGUgY2hlY2tWYWxpZDtcbiAgICBwcm90ZWN0ZWQgZ2V0IHJvb3RQYXRoKCk6IHN0cmluZztcbiAgICBleGlzdHM6IEJhc2VEcml2ZVsnZXhpc3RzJ107XG4gICAgbGlzdDogQmFzZURyaXZlWydsaXN0J107XG4gICAgZmluZDogQmFzZURyaXZlWydmaW5kJ107XG4gICAgbWtkaXIoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG4gICAgcmVhZDogQmFzZURyaXZlWydyZWFkJ107XG4gICAgcmVhZFN0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxmcy5SZWFkU3RyZWFtPjtcbiAgICB3cml0ZTogQmFzZURyaXZlWyd3cml0ZSddO1xuICAgIHdyaXRlU3RyZWFtKGZpbGVuYW1lOiBzdHJpbmcsIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtKTogUHJvbWlzZTx2b2lkPjtcbiAgICBkZWxldGU6IEJhc2VEcml2ZVsnZGVsZXRlJ107XG4gICAgdXJsOiBCYXNlRHJpdmVbJ3VybCddO1xuICAgIHVwbG9hZFVybDogQmFzZURyaXZlWyd1cGxvYWRVcmwnXTtcbn1cbiIsImltcG9ydCBMb2dnZXJTZXJ2aWNlIGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmltcG9ydCBTaGVsbFNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9TaGVsbFNlcnZpY2UudHMnO1xuZXhwb3J0IGludGVyZmFjZSBHaXRSZXBvSW5mbyB7XG4gICAgZGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgaGVhZDogc3RyaW5nIHwgbnVsbDtcbiAgICBzaG9ydEhhc2g6IHN0cmluZztcbiAgICBpc0RldGFjaGVkSGVhZDogYm9vbGVhbjtcbiAgICByZW1vdGVzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgR2l0R2F0ZXdheU9wdGlvbnMge1xuICAgIGN3ZDogc3RyaW5nO1xuICAgIHNzaEtleT86IHN0cmluZztcbiAgICBzc2hLZXlGaWxlPzogc3RyaW5nO1xuICAgIGxvZ2dlcj86IExvZ2dlclNlcnZpY2U7XG4gICAgc2hlbGw/OiBTaGVsbFNlcnZpY2U7XG4gICAgZGVidWc/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIEdpdEdhdGV3YXlFeGVjdXRlT3B0aW9ucyB7XG4gICAgYXJnczogc3RyaW5nO1xuICAgIGN3ZD86IHN0cmluZztcbiAgICBzc2hLZXk/OiBzdHJpbmc7XG4gICAgc3NoS2V5RmlsZT86IHN0cmluZztcbiAgICBsb2dnZXI/OiBMb2dnZXJTZXJ2aWNlO1xuICAgIHNoZWxsPzogU2hlbGxTZXJ2aWNlO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEdpdEdhdGV3YXkge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3dkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3NoS2V5PztcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNzaEtleUZpbGU/O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVidWc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzaGVsbDtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOiBHaXRHYXRld2F5T3B0aW9ucyk7XG4gICAgc3RhdGljIGV4ZWN1dGUob3B0aW9uczogR2l0R2F0ZXdheUV4ZWN1dGVPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHN0YXRpYyBjbG9uZShyZXBvVXJsOiBzdHJpbmcsIHRhcmdldERpcjogc3RyaW5nLCBvcHRpb25zOiBPbWl0PEdpdEdhdGV3YXlPcHRpb25zLCAnY3dkJz4pOiBQcm9taXNlPEdpdEdhdGV3YXk+O1xuICAgIHJ1bihhcmdzOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG4gICAgdHJ5UnVuKGFyZ3M6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XG4gICAgY2hlY2tvdXQocmVmOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG4gICAgZmV0Y2hBbGwoKTogUHJvbWlzZTxzdHJpbmc+O1xuICAgIHB1bGwoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBnZXRJbmZvKCk6IFByb21pc2U8R2l0UmVwb0luZm8+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdG9yIH0gZnJvbSAnI3NoYXJlZC91dGlscy9jb21wb3NlLnRzJztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHZhbHVlVG9TdHJpbmcodmFsdWU6IGFueSk6IHN0cmluZztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1ldGFkYXRhPFRhYmxlIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+KG1ldGFzVGFibGU6IFRhYmxlLCBmb3JlaWduS2V5OiBrZXlvZiBEYXRhYmFzZVtUYWJsZV0pOiA8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpID0+IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBnZXQ8VCA9IGFueT4obmFtZTogc3RyaW5nKTogUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcbiAgICAgICAgZ2V0PFQgPSBhbnk+KG5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlOiBUKTogUHJvbWlzZTxUPjtcbiAgICAgICAgc2V0KG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbn0gJiBUQmFzZTtcbiIsImltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuaW1wb3J0IERhdGFiYXNlR2F0ZXdheSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0RhdGFiYXNlR2F0ZXdheS50cyc7XG5kZWNsYXJlIGNvbnN0IGRhdGFiYXNlOiBEYXRhYmFzZUdhdGV3YXk8RGF0YWJhc2VDb250cmFjdD47XG5leHBvcnQgZGVmYXVsdCBkYXRhYmFzZTtcbiIsImltcG9ydCB0eXBlIHsgU2VsZWN0YWJsZSwgU2VsZWN0UXVlcnlCdWlsZGVyLCBFeHByZXNzaW9uQnVpbGRlciBhcyBLRXhwcmVzc2lvbkJ1aWxkZXIgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IGRiIGZyb20gJyNzZXJ2ZXIvZmFjYWRlcy9kYXRhYmFzZS50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmV4cG9ydCB0eXBlIFNlbGVjdEZyb208VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFJldHVyblR5cGU8dHlwZW9mIGRiLnNlbGVjdEZyb208VD4+IHwgU2VsZWN0UXVlcnlCdWlsZGVyPERhdGFiYXNlLCBULCBhbnk+O1xuZXhwb3J0IHR5cGUgSW5zZXJ0RnJvbTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gUmV0dXJuVHlwZTx0eXBlb2YgZGIuaW5zZXJ0SW50bzxUPj47XG5leHBvcnQgdHlwZSBVcGRhdGVGcm9tPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBSZXR1cm5UeXBlPHR5cGVvZiBkYi51cGRhdGVUYWJsZTxUPj47XG5leHBvcnQgdHlwZSBEZWxldGVGcm9tPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBSZXR1cm5UeXBlPHR5cGVvZiBkYi5kZWxldGVGcm9tPFQ+PjtcbmV4cG9ydCB0eXBlIFNlbGVjdEJ1aWxkZXI8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFNlbGVjdFF1ZXJ5QnVpbGRlcjxEYXRhYmFzZSwgVCwgU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT4+O1xuZXhwb3J0IHR5cGUgRXhwcmVzc2lvbkJ1aWxkZXI8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IEtFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBub3c6ICgpID0+IGltcG9ydChcImt5c2VseVwiKS5SYXdCdWlsZGVyPHN0cmluZz47XG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiB7XG4gICAgc2VyaWFsaXplPzogKHJvdzogU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT4pID0+IGFueTtcbn1cbmV4cG9ydCB0eXBlIFNlcmlhbGl6YWJsZVJlc3VsdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBTZXJpYWxpemVPcHRpb25zPFQ+IHwgdW5kZWZpbmVkPiA9IE8gZXh0ZW5kcyB1bmRlZmluZWQgPyBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPiA6IE8gZXh0ZW5kcyB7XG4gICAgc2VyaWFsaXplOiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gaW5mZXIgUjtcbn0gPyBSIDogU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT47XG4iLCJpbXBvcnQgdHlwZSB7IEV4cHJlc3Npb25CdWlsZGVyLCBFeHByZXNzaW9uV3JhcHBlciwgSW5zZXJ0YWJsZSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdEZyb20sIFNlcmlhbGl6YWJsZVJlc3VsdCwgU2VyaWFsaXplT3B0aW9ucywgVXBkYXRlRnJvbSB9IGZyb20gJy4vY29tbW9uLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVPckNyZWF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiBleHRlbmRzIFNlcmlhbGl6ZU9wdGlvbnM8VD4ge1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB3aGVyZT86IChxYjogRXhwcmVzc2lvbkJ1aWxkZXI8RGF0YWJhc2UsIFQ+KSA9PiBFeHByZXNzaW9uV3JhcHBlcjxEYXRhYmFzZSwgVCwgYW55PjtcbiAgICBzZWxlY3Q/OiAocWI6IFNlbGVjdEZyb208VD4pID0+IFNlbGVjdEZyb208VD47XG4gICAgdXBkYXRlPzogKHFiOiBVcGRhdGVGcm9tPFQ+KSA9PiBVcGRhdGVGcm9tPFQ+O1xuICAgIHZhbHVlczogSW5zZXJ0YWJsZTxEYXRhYmFzZVtUXT4gfCBJbnNlcnRhYmxlPERhdGFiYXNlW1RdPltdO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBkYXRlT3JDcmVhdGU8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgVXBkYXRlT3JDcmVhdGVPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPj47XG4iLCJpbXBvcnQgdHlwZSB7IEV4cHJlc3Npb25CdWlsZGVyLCBFeHByZXNzaW9uV3JhcHBlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdEZyb20sIFNlcmlhbGl6ZU9wdGlvbnMsIFNlcmlhbGl6YWJsZVJlc3VsdCB9IGZyb20gJy4vY29tbW9uLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuZXhwb3J0IGludGVyZmFjZSBMaXN0T3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IGV4dGVuZHMgU2VyaWFsaXplT3B0aW9uczxUPiB7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB3aGVyZT86IChxYjogRXhwcmVzc2lvbkJ1aWxkZXI8RGF0YWJhc2UsIFQ+KSA9PiBFeHByZXNzaW9uV3JhcHBlcjxEYXRhYmFzZSwgVCwgYW55PjtcbiAgICBxdWVyeT86IChxYjogU2VsZWN0RnJvbTxUPikgPT4gU2VsZWN0RnJvbTxUPjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxpc3Q8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgTGlzdE9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8U2VyaWFsaXphYmxlUmVzdWx0PFQsIE8+W10+O1xuIiwiaW1wb3J0IHR5cGUgeyBFeHByZXNzaW9uQnVpbGRlciwgRXhwcmVzc2lvbldyYXBwZXIsIFNlbGVjdGFibGUgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBTZWxlY3RGcm9tIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbXBvcnQgUGFnaW5hdGlvbiBmcm9tICcjc2hhcmVkL2VudGl0aWVzL1BhZ2luYXRpb25FbnRpdHkudHMnO1xuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIHBhZ2U/OiBudW1iZXI7XG4gICAgbGltaXQ/OiBudW1iZXI7XG4gICAgb3JkZXJCeT86IERhdGFiYXNlW1RdIHwgKGtleW9mIERhdGFiYXNlW1RdKVtdO1xuICAgIG9yZGVyRGVzYz86ICgnYXNjJyB8ICdkZXNjJykgfCAoJ2FzYycgfCAnZGVzYycpW107XG4gICAgd2hlcmU/OiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPERhdGFiYXNlLCBUPikgPT4gRXhwcmVzc2lvbldyYXBwZXI8RGF0YWJhc2UsIFQsIGFueT47XG4gICAgc2VyaWFsaXplPzogKHJvdzogU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT4pID0+IGFueTtcbiAgICBxdWVyeT86IChxYjogU2VsZWN0RnJvbTxUPikgPT4gYW55O1xufVxuZXhwb3J0IHR5cGUgUGFnaW5hdGVSZXN1bHQ8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgUGFnaW5hdGVPcHRpb25zPFQ+IHwgdW5kZWZpbmVkPiA9IE8gZXh0ZW5kcyB1bmRlZmluZWQgPyBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPiA6IE8gZXh0ZW5kcyB7XG4gICAgc2VyaWFsaXplOiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gaW5mZXIgUjtcbn0gPyBSIDogU2VsZWN0YWJsZTxEYXRhYmFzZVtUXT47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBwYWdpbmF0ZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBQYWdpbmF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8UGFnaW5hdGlvbjxQYWdpbmF0ZVJlc3VsdDxULCBPPj4+O1xuIiwiaW1wb3J0IHR5cGUgeyBTZWxlY3RGcm9tIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIENvdW50T3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IHtcbiAgICBxdWVyeT86IChxYjogU2VsZWN0RnJvbTxUPikgPT4gU2VsZWN0RnJvbTxUPjtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjb3VudDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBDb3VudE9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8bnVtYmVyPjtcbiIsImltcG9ydCB0eXBlIHsgSW5zZXJ0YWJsZSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZVJlc3VsdCwgU2VyaWFsaXplT3B0aW9ucyB9IGZyb20gJy4vY29tbW9uLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gZXh0ZW5kcyBTZXJpYWxpemVPcHRpb25zPFQ+IHtcbiAgICB2YWx1ZXM6IEluc2VydGFibGU8RGF0YWJhc2VbVF0+O1xuICAgIHByaW1hcnlLZXk/OiBzdHJpbmc7XG4gICAgbm9ybWFsaXplPzogYm9vbGVhbiB8ICgodmFsdWU6IGFueSkgPT4gYW55KTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHQ8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgQ3JlYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz4+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlTXlzcWw8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgQ3JlYXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz4+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIENyZWF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8aW1wb3J0KFwia3lzZWx5XCIpLkRyYWluT3V0ZXJHZW5lcmljPHsgW0tfMSBpbiAoRGF0YWJhc2VbVF0gZXh0ZW5kcyBpbmZlciBUXzEgPyB7IFtLIGluIGtleW9mIFRfMV06IGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RUeXBlPFRfMVtLXT4gZXh0ZW5kcyBpbmZlciBUXzIgPyBUXzIgZXh0ZW5kcyBpbXBvcnQoXCJreXNlbHlcIikuU2VsZWN0VHlwZTxUXzFbS10+ID8gVF8yIGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IEsgOiBuZXZlciA6IG5ldmVyOyB9IDogbmV2ZXIpW2tleW9mIERhdGFiYXNlW1RdXV06IGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RUeXBlPERhdGFiYXNlW1RdW0tfMV0+OyB9Pj47XG4iLCJpbXBvcnQgdHlwZSB7IFVwZGF0ZWFibGUsIEV4cHJlc3Npb25CdWlsZGVyLCBFeHByZXNzaW9uV3JhcHBlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFVwZGF0ZUZyb20sIFNlcmlhbGl6YWJsZVJlc3VsdCwgU2VyaWFsaXplT3B0aW9ucyB9IGZyb20gJy4vY29tbW9uLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gZXh0ZW5kcyBTZXJpYWxpemVPcHRpb25zPFQ+IHtcbiAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgdmFsdWVzOiBVcGRhdGVhYmxlPERhdGFiYXNlW1RdPjtcbiAgICBub3JtYWxpemU/OiBib29sZWFuIHwgKCh2YWx1ZTogYW55KSA9PiBhbnkpO1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xuICAgIHF1ZXJ5PzogKHFiOiBVcGRhdGVGcm9tPFQ+KSA9PiBVcGRhdGVGcm9tPFQ+O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBkYXRlRGVmYXVsdDxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBVcGRhdGVPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPFNlcmlhbGl6YWJsZVJlc3VsdDxULCBPPltdPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHVwZGF0ZU15c3FsPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFVwZGF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8U2VyaWFsaXphYmxlUmVzdWx0PFQsIE8+W10+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdXBkYXRlPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFVwZGF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8aW1wb3J0KFwia3lzZWx5XCIpLkRyYWluT3V0ZXJHZW5lcmljPHsgW0tfMSBpbiAoRGF0YWJhc2VbVF0gZXh0ZW5kcyBpbmZlciBUXzEgPyB7IFtLIGluIGtleW9mIFRfMV06IGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RUeXBlPFRfMVtLXT4gZXh0ZW5kcyBpbmZlciBUXzIgPyBUXzIgZXh0ZW5kcyBpbXBvcnQoXCJreXNlbHlcIikuU2VsZWN0VHlwZTxUXzFbS10+ID8gVF8yIGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IEsgOiBuZXZlciA6IG5ldmVyOyB9IDogbmV2ZXIpW2tleW9mIERhdGFiYXNlW1RdXV06IGltcG9ydChcImt5c2VseVwiKS5TZWxlY3RUeXBlPERhdGFiYXNlW1RdW0tfMV0+OyB9PltdPjtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbldyYXBwZXIsIEV4cHJlc3Npb25CdWlsZGVyIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuaW1wb3J0IGRiIGZyb20gJyNzZXJ2ZXIvZmFjYWRlcy9kYXRhYmFzZS50cyc7XG50eXBlIERlbGV0ZUZyb208VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IFJldHVyblR5cGU8dHlwZW9mIGRiLmRlbGV0ZUZyb208VD4+O1xuZXhwb3J0IGludGVyZmFjZSBEZXN0cm95T3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IHtcbiAgICBxdWVyeT86IChxYjogRGVsZXRlRnJvbTxUPikgPT4gRGVsZXRlRnJvbTxUPjtcbiAgICB3aGVyZT86IChxYjogRXhwcmVzc2lvbkJ1aWxkZXI8RGF0YWJhc2UsIFQ+KSA9PiBFeHByZXNzaW9uV3JhcHBlcjxEYXRhYmFzZSwgVCwgYW55Pjtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlc3Ryb3k8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgRGVzdHJveU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IEV4cHJlc3Npb25CdWlsZGVyLCBFeHByZXNzaW9uV3JhcHBlciwgSW5zZXJ0YWJsZSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdEZyb20sIFNlcmlhbGl6YWJsZVJlc3VsdCwgU2VyaWFsaXplT3B0aW9ucyB9IGZyb20gJy4vY29tbW9uLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuZXhwb3J0IGludGVyZmFjZSBGaXJzdE9yQ3JlYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IGV4dGVuZHMgU2VyaWFsaXplT3B0aW9uczxUPiB7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIHNlbGVjdD86IChxYjogU2VsZWN0RnJvbTxUPikgPT4gU2VsZWN0RnJvbTxUPjtcbiAgICB3aGVyZT86IChxYjogRXhwcmVzc2lvbkJ1aWxkZXI8RGF0YWJhc2UsIFQ+KSA9PiBFeHByZXNzaW9uV3JhcHBlcjxEYXRhYmFzZSwgVCwgYW55PjtcbiAgICB2YWx1ZXM6IEluc2VydGFibGU8RGF0YWJhc2VbVF0+IHwgSW5zZXJ0YWJsZTxEYXRhYmFzZVtUXT5bXTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZpcnN0T3JDcmVhdGU8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgRmlyc3RPckNyZWF0ZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8U2VyaWFsaXphYmxlUmVzdWx0PFQsIE8+PjtcbiIsImltcG9ydCB0eXBlIHsgRXhwcmVzc2lvbkJ1aWxkZXIsIEV4cHJlc3Npb25XcmFwcGVyIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VsZWN0RnJvbSwgU2VyaWFsaXphYmxlUmVzdWx0LCBTZXJpYWxpemVPcHRpb25zIH0gZnJvbSAnLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5leHBvcnQgaW50ZXJmYWNlIEZpbmRPbmVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gZXh0ZW5kcyBTZXJpYWxpemVPcHRpb25zPFQ+IHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHF1ZXJ5PzogKHFiOiBTZWxlY3RGcm9tPFQ+KSA9PiBTZWxlY3RGcm9tPFQ+O1xuICAgIHdoZXJlPzogKHFiOiBFeHByZXNzaW9uQnVpbGRlcjxEYXRhYmFzZSwgVD4pID0+IEV4cHJlc3Npb25XcmFwcGVyPERhdGFiYXNlLCBULCBhbnk+O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZmluZE9uZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBGaW5kT25lT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz4gfCBudWxsPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGZpbmRPbmVPckZhaWw8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlLCBPIGV4dGVuZHMgRmluZE9uZU9wdGlvbnM8VD4+KHRhYmxlOiBULCBvcHRpb25zPzogTyk6IFByb21pc2U8Tm9uTnVsbGFibGU8QXdhaXRlZDxTZXJpYWxpemFibGVSZXN1bHQ8VCwgTz4+Pj47XG4iLCJpbXBvcnQgdHlwZSB7IFVwZGF0ZU9yQ3JlYXRlT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy91cGRhdGVPckNyZWF0ZS50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmltcG9ydCB0eXBlIHsgTGlzdE9wdGlvbnMgfSBmcm9tICcjc2VydmVyL3F1ZXJpZXMvbGlzdC50cyc7XG5pbXBvcnQgdHlwZSB7IFBhZ2luYXRlT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9wYWdpbmF0ZS50cyc7XG5pbXBvcnQgdHlwZSB7IENvdW50T3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9jb3VudC50cyc7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZU9wdGlvbnMgfSBmcm9tICcjc2VydmVyL3F1ZXJpZXMvY3JlYXRlLnRzJztcbmltcG9ydCB0eXBlIHsgVXBkYXRlT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy91cGRhdGUudHMnO1xuaW1wb3J0IHR5cGUgeyBEZXN0cm95T3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvcXVlcmllcy9kZXN0cm95LnRzJztcbmltcG9ydCB0eXBlIHsgRmlyc3RPckNyZWF0ZU9wdGlvbnMgfSBmcm9tICcjc2VydmVyL3F1ZXJpZXMvZmlyc3RPckNyZWF0ZS50cyc7XG5pbXBvcnQgdHlwZSB7IEZpbmRPbmVPcHRpb25zIH0gZnJvbSAnI3NlcnZlci9xdWVyaWVzL2ZpbmRPbmUudHMnO1xuaW1wb3J0IHR5cGUgUGFnaW5hdGlvbiBmcm9tICcjc2hhcmVkL2VudGl0aWVzL1BhZ2luYXRpb25FbnRpdHkudHMnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3RvciB9IGZyb20gJyNzaGFyZWQvdXRpbHMvY29tcG9zZS50cyc7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdFF1ZXJ5QnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5leHBvcnQgdHlwZSBNb2RlbExpc3RPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBPbWl0PExpc3RPcHRpb25zPFQ+LCAnc2VyaWFsaXplJz47XG5leHBvcnQgdHlwZSBNb2RlbEZpbmRPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBPbWl0PEZpbmRPbmVPcHRpb25zPFQ+LCAnc2VyaWFsaXplJyB8ICdvcmRlckJ5Jz47XG5leHBvcnQgdHlwZSBNb2RlbFBhZ2luYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gT21pdDxQYWdpbmF0ZU9wdGlvbnM8VD4sICdzZXJpYWxpemUnPjtcbmV4cG9ydCB0eXBlIE1vZGVsQ291bnRPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBDb3VudE9wdGlvbnM8VD47XG5leHBvcnQgdHlwZSBNb2RlbENyZWF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IE9taXQ8Q3JlYXRlT3B0aW9uczxUPiwgJ3NlcmlhbGl6ZSc+O1xuZXhwb3J0IHR5cGUgTW9kZWxVcGRhdGVPcHRpb25zPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZT4gPSBPbWl0PFVwZGF0ZU9wdGlvbnM8VD4sICdzZXJpYWxpemUnPjtcbmV4cG9ydCB0eXBlIE1vZGVsRGVzdHJveU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IERlc3Ryb3lPcHRpb25zPFQ+O1xuZXhwb3J0IHR5cGUgTW9kZWxGaXJzdE9yQ3JlYXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gT21pdDxGaXJzdE9yQ3JlYXRlT3B0aW9uczxUPiwgJ3NlcmlhbGl6ZSc+O1xuZXhwb3J0IHR5cGUgTW9kZWxVcGRhdGVPckNyZWF0ZU9wdGlvbnM8VCBleHRlbmRzIGtleW9mIERhdGFiYXNlPiA9IE9taXQ8VXBkYXRlT3JDcmVhdGVPcHRpb25zPFQ+LCAnc2VyaWFsaXplJz47XG5leHBvcnQgdHlwZSBNb2RlbEVudGl0eSA9IFJldHVyblR5cGU8UmV0dXJuVHlwZTx0eXBlb2YgTW9kZWxNaXhpbjxhbnk+Pj47XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb2RlbE1peGluPFRhYmxlIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+KHRhYmxlOiBUYWJsZSwgcHJpbWFyeUtleT86IGtleW9mIERhdGFiYXNlW1RhYmxlXSk6IDxUQmFzZSBleHRlbmRzIENvbnN0cnVjdG9yPihCYXNlOiBUQmFzZSkgPT4ge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIHNhdmUoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBzb2Z0RGVsZXRlKCk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbiAgICBfX21vZGVsOiB7XG4gICAgICAgIHRhYmxlOiBUYWJsZTtcbiAgICAgICAgcHJpbWFyeUtleToga2V5b2YgRGF0YWJhc2VbVGFibGVdO1xuICAgIH07XG4gICAgc2VyaWFsaXplPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCByb3c6IGFueSk6IFByb21pc2U8VD47XG4gICAgc2VsZWN0KCk6IFNlbGVjdFF1ZXJ5QnVpbGRlcjxEYXRhYmFzZSwgVGFibGUsIGFueT47XG4gICAgcGFnaW5hdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBNb2RlbFBhZ2luYXRlT3B0aW9uczxUYWJsZT4pOiBQcm9taXNlPFBhZ2luYXRpb248VD4+O1xuICAgIGxpc3Q8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBNb2RlbExpc3RPcHRpb25zPFRhYmxlPik6IFByb21pc2U8VFtdPjtcbiAgICBmaW5kT25lPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogTW9kZWxGaW5kT3B0aW9uczxUYWJsZT4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgIGZpbmRPbmVPckZhaWw8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBNb2RlbEZpbmRPcHRpb25zPFRhYmxlPik6IFByb21pc2U8VD47XG4gICAgZmluZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8VCB8IG51bGw+O1xuICAgIGZpbmRPckZhaWw8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGZpbmRCeTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgY29sdW1uOiBrZXlvZiBEYXRhYmFzZVtUYWJsZV0sIHZhbHVlOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGZpbmRCeU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgY29sdW1uOiBrZXlvZiBEYXRhYmFzZVtUYWJsZV0sIHZhbHVlOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGV4aXN0czxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IE1vZGVsTGlzdE9wdGlvbnM8VGFibGU+KTogUHJvbWlzZTxib29sZWFuPjtcbiAgICBjb3VudDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IE1vZGVsQ291bnRPcHRpb25zPFRhYmxlPik6IFByb21pc2U8bnVtYmVyPjtcbiAgICBjcmVhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIHBheWxvYWQ6IE1vZGVsQ3JlYXRlT3B0aW9uczxUYWJsZT5bXCJ2YWx1ZXNcIl0pOiBQcm9taXNlPFQ+O1xuICAgIGNyZWF0ZU1hbnk8VD4odGhpczogbmV3ICgpID0+IFQsIHZhbHVlczogQXJyYXk8TW9kZWxDcmVhdGVPcHRpb25zPFRhYmxlPltcInZhbHVlc1wiXT4pOiBQcm9taXNlPFRbXT47XG4gICAgdXBkYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvOiBNb2RlbFVwZGF0ZU9wdGlvbnM8VGFibGU+KTogUHJvbWlzZTxUPjtcbiAgICB1cGRhdGVCeUlkPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55LCB2YWx1ZXM6IE1vZGVsVXBkYXRlT3B0aW9uczxUYWJsZT5bXCJ2YWx1ZXNcIl0sIG9wdGlvbnM/OiB7XG4gICAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9KTogUHJvbWlzZTxUPjtcbiAgICBkZXN0cm95PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogTW9kZWxEZXN0cm95T3B0aW9uczxUYWJsZT4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGZpcnN0T3JDcmVhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIG86IE1vZGVsRmlyc3RPckNyZWF0ZU9wdGlvbnM8VGFibGU+KTogVDtcbiAgICB1cGRhdGVPckNyZWF0ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBvOiBNb2RlbFVwZGF0ZU9yQ3JlYXRlT3B0aW9uczxUYWJsZT4pOiBUO1xuICAgIGRlc3Ryb3lCeUlkPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55KTogUHJvbWlzZTx2b2lkPjtcbn0gJiBUQmFzZTtcbiIsImltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3IgfSBmcm9tICcjc2hhcmVkL3V0aWxzL2NvbXBvc2UudHMnO1xuaW50ZXJmYWNlIFJlbGF0aW9uIHtcbiAgICBsb2FkKGVudGl0aWVzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZWxhdGlvbjxSIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgUmVsYXRpb24+PihyZWxhdGlvbnM6IFIpOiA8VEJhc2UgZXh0ZW5kcyBDb25zdHJ1Y3Rvcj4oQmFzZTogVEJhc2UpID0+IHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge307XG4gICAgbG9hZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZW50aXRpZXM6IFQgfCBUW10sIG5hbWVzOiBrZXlvZiBSIHwgKGtleW9mIFIpW10pOiBQcm9taXNlPHZvaWQ+O1xufSAmIFRCYXNlO1xuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IENvbmZpZ1NlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Db25maWdTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgY29uZmlnOiBDb25maWdTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgY29uZmlnO1xuIiwiaW1wb3J0IENvbnRhaW5lclNlcnZpY2UgZnJvbSBcIiNzaGFyZWQvc2VydmljZXMvQ29udGFpbmVyU2VydmljZS50c1wiO1xuZGVjbGFyZSBjb25zdCBfZGVmYXVsdDogQ29udGFpbmVyU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IF9kZWZhdWx0O1xuIiwiaW1wb3J0IERvd25sb2FkU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL0Rvd25sb2FkU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IGRvd25sb2FkOiBEb3dubG9hZFNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBkb3dubG9hZDtcbiIsImltcG9ydCBEcml2ZVNlcnZpY2UgZnJvbSAnI3NlcnZlci9zZXJ2aWNlcy9Ecml2ZVNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBkcml2ZTogRHJpdmVTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgZHJpdmU7XG4iLCJpbXBvcnQgeyBFbW1pdHRlclNlcnZpY2UgfSBmcm9tICcjc2hhcmVkL2luZGV4LnRzJztcbmRlY2xhcmUgY29uc3QgZW1taXR0ZXI6IEVtbWl0dGVyU2VydmljZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PjtcbmV4cG9ydCBkZWZhdWx0IGVtbWl0dGVyO1xuIiwiaW1wb3J0IEVuY3J5cHRTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvRW5jcnlwdFNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBlbmNyeXB0OiBFbmNyeXB0U2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGVuY3J5cHQ7XG4iLCJpbXBvcnQgRW52U2VydmljZSBmcm9tIFwiI3NlcnZlci9zZXJ2aWNlcy9FbnZTZXJ2aWNlLnRzXCI7XG5kZWNsYXJlIGNvbnN0IGVudjogRW52U2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IGVudjtcbiIsImltcG9ydCBGaWxlUmVwb3NpdG9yeSBmcm9tIFwiI3NlcnZlci9yZXBvc2l0b3JpZXMvRmlsZVJlcG9zaXRvcnkudHNcIjtcbmRlY2xhcmUgY29uc3QgZmlsZVJlcG9zaXRvcnk6IEZpbGVSZXBvc2l0b3J5O1xuZXhwb3J0IGRlZmF1bHQgZmlsZVJlcG9zaXRvcnk7XG4iLCJpbXBvcnQgSGFzaGVyU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL0hhc2hlclNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBoYXNoZXI6IEhhc2hlclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBoYXNoZXI7XG4iLCJpbXBvcnQgSHR0cFNlcnZpY2UgZnJvbSBcIiNzZXJ2ZXIvc2VydmljZXMvSHR0cFNlcnZpY2UudHNcIjtcbmRlY2xhcmUgY29uc3QgaHR0cDogSHR0cFNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBodHRwO1xuIiwiaW1wb3J0IExvZ2dlclNlcnZpY2UgZnJvbSAnI3NoYXJlZC9zZXJ2aWNlcy9Mb2dnZXJTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3QgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlO1xuZXhwb3J0IGRlZmF1bHQgbG9nZ2VyO1xuIiwiaW1wb3J0IE1pZ3JhdG9yU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL01pZ3JhdG9yU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IG1pZ3JhdG9yOiBNaWdyYXRvclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBtaWdyYXRvcjtcbiIsImltcG9ydCBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnkgZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvUGVybWlzc2lvbkFzc2lnbm1lbnRSZXBvc2l0b3J5LnRzJztcbmRlY2xhcmUgY29uc3QgcGVybWlzc2lvbkFzc2lnbm1lbnRSZXBvc2l0b3J5OiBQZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnk7XG5leHBvcnQgZGVmYXVsdCBwZXJtaXNzaW9uQXNzaWdubWVudFJlcG9zaXRvcnk7XG4iLCJpbXBvcnQgUGVybWlzc2lvblJlcG9zaXRvcnkgZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvUGVybWlzc2lvblJlcG9zaXRvcnkudHMnO1xuZGVjbGFyZSBjb25zdCBwZXJtaXNzaW9uUmVwb3NpdG9yeTogUGVybWlzc2lvblJlcG9zaXRvcnk7XG5leHBvcnQgZGVmYXVsdCBwZXJtaXNzaW9uUmVwb3NpdG9yeTtcbiIsImltcG9ydCB0eXBlIHsgSHR0cENvbnRleHQgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9IdHRwQ29udGV4dENvbnRyYWN0LnRzJztcbmltcG9ydCBSb3V0ZXJTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvUm91dGVyU2VydmljZS50cyc7XG5kZWNsYXJlIGNvbnN0IHJvdXRlcjogUm91dGVyU2VydmljZTxIdHRwQ29udGV4dD47XG5leHBvcnQgZGVmYXVsdCByb3V0ZXI7XG4iLCJpbXBvcnQgU2NoZWR1bGVyU2VydmljZSBmcm9tICcjc2VydmVyL3NlcnZpY2VzL1NjaGVkdWxlclNlcnZpY2UudHMnO1xuZGVjbGFyZSBjb25zdCBzY2hlZHVsZXI6IFNjaGVkdWxlclNlcnZpY2U7XG5leHBvcnQgZGVmYXVsdCBzY2hlZHVsZXI7XG4iLCJpbXBvcnQgU2hlbGxTZXJ2aWNlIGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvU2hlbGxTZXJ2aWNlLnRzJztcbmRlY2xhcmUgY29uc3Qgc2hlbGw6IFNoZWxsU2VydmljZTtcbmV4cG9ydCBkZWZhdWx0IHNoZWxsO1xuIiwiaW1wb3J0IFRva2VuUmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9Ub2tlblJlcG9zaXRvcnkudHMnO1xuZGVjbGFyZSBjb25zdCB0b2tlblJlcG9zaXRvcnk6IFRva2VuUmVwb3NpdG9yeTtcbmV4cG9ydCBkZWZhdWx0IHRva2VuUmVwb3NpdG9yeTtcbiIsImltcG9ydCBVc2VyUmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9Vc2VyUmVwb3NpdG9yeS50cyc7XG5kZWNsYXJlIGNvbnN0IHVzZXJSZXBvc2l0b3J5OiBVc2VyUmVwb3NpdG9yeTtcbmV4cG9ydCBkZWZhdWx0IHVzZXJSZXBvc2l0b3J5O1xuIiwiaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IH0gZnJvbSAnLi9EYXRhYmFzZUNvbnRyYWN0JztcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VLeXNlbHkgZXh0ZW5kcyBLeXNlbHk8RGF0YWJhc2VDb250cmFjdD4ge1xufVxuIiwiZXhwb3J0IGludGVyZmFjZSBMb2FkZXI8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBsb2FkKGVudGl0aWVzOiBUW10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IGludGVyZmFjZSBMb2FkZXJSZWNvcmQ8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBba2V5OiBzdHJpbmddOiBMb2FkZXI8VD47XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBkZWZpbmVMb2FkZXI8VCA9IFJlY29yZDxzdHJpbmcsIGFueT4+KGxvYWRlcjogTG9hZGVyPFQ+KTogTG9hZGVyPFQ+O1xuIiwiaW50ZXJmYWNlIEZpbGVMb2FkZXJPcHRpb25zIHtcbiAgICBmaWxlSWRQcm9wZXJ0eTogc3RyaW5nO1xuICAgIGZpbGVQcm9wZXJ0eTogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlRmlsZUxvYWRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9uczogRmlsZUxvYWRlck9wdGlvbnMpOiBpbXBvcnQoXCIjc2VydmVyL3V0aWxzL2RlZmluZUxvYWRlci50c1wiKS5Mb2FkZXI8VD47XG5leHBvcnQge307XG4iLCJpbnRlcmZhY2UgRmlsZUxvYWRlck9wdGlvbnMge1xuICAgIGZpbGVJZFByb3BlcnR5Pzogc3RyaW5nO1xuICAgIGZpbGVVcmxQcm9wZXJ0eT86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxvYWRGaWxlVXJsPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihlbnRpdGllczogVFtdLCBvcHRpb25zPzogRmlsZUxvYWRlck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlRmlsZVVybExvYWRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9ucz86IEZpbGVMb2FkZXJPcHRpb25zKTogaW1wb3J0KFwiI3NlcnZlci91dGlscy9kZWZpbmVMb2FkZXIudHNcIikuTG9hZGVyPFQ+O1xuZXhwb3J0IHt9O1xuIiwidHlwZSBLZXlPckZ1bmN0aW9uPFQ+ID0ga2V5b2YgVCB8ICgoZW50aXR5OiBUKSA9PiBhbnkpO1xuZXhwb3J0IGludGVyZmFjZSBIYXNNYW55VGhyb3VnaExvYWRlck9wdGlvbnM8VEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUUGl2b3RFbnRpdHkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gUmVjb3JkPHN0cmluZywgYW55PiwgVFRhcmdldEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgcGl2b3Q6IHtcbiAgICAgICAgc291cmNlS2V5OiBLZXlPckZ1bmN0aW9uPFRFbnRpdHk+O1xuICAgICAgICB0YXJnZXRLZXk6IEtleU9yRnVuY3Rpb248VFBpdm90RW50aXR5PjtcbiAgICAgICAgZmluZEVudGl0aWVzKGlkczogKHN0cmluZyB8IG51bWJlcilbXSk6IFByb21pc2U8VFBpdm90RW50aXR5W10+O1xuICAgIH07XG4gICAgdGFyZ2V0OiB7XG4gICAgICAgIHNvdXJjZUtleTogS2V5T3JGdW5jdGlvbjxUUGl2b3RFbnRpdHk+O1xuICAgICAgICB0YXJnZXRLZXk6IEtleU9yRnVuY3Rpb248VFRhcmdldEVudGl0eT47XG4gICAgICAgIGZpbmRFbnRpdGllcyhpZHM6IChzdHJpbmcgfCBudW1iZXIpW10pOiBQcm9taXNlPFRUYXJnZXRFbnRpdHlbXT47XG4gICAgfTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxvYWRIYXNNYW55VGhyb3VnaDxURW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQaXZvdEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUVGFyZ2V0RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KHBheWxvYWQ6IGFueSB8IGFueVtdLCBvcHRpb25zOiBIYXNNYW55VGhyb3VnaExvYWRlck9wdGlvbnM8VEVudGl0eSwgVFBpdm90RW50aXR5LCBUVGFyZ2V0RW50aXR5Pik6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVIYXNNYW55VGhyb3VnaExvYWRlcjxURW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFRQaXZvdEVudGl0eSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4gPSBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBUVGFyZ2V0RW50aXR5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4+KG9wdGlvbnM6IEhhc01hbnlUaHJvdWdoTG9hZGVyT3B0aW9uczxURW50aXR5LCBUUGl2b3RFbnRpdHksIFRUYXJnZXRFbnRpdHk+KTogaW1wb3J0KFwiI3NlcnZlci91dGlscy9kZWZpbmVMb2FkZXIudHNcIikuTG9hZGVyPFRFbnRpdHk+O1xuZXhwb3J0IHt9O1xuIiwiaW50ZXJmYWNlIFJlcG9zaXRvcnlNZXRhIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IGFueTtcbn1cbmludGVyZmFjZSBMb2FkTWV0YXNPcHRpb25zIHtcbiAgICBmaW5kTWFueShpZHM6IGFueVtdKTogUHJvbWlzZTxSZXBvc2l0b3J5TWV0YVtdPjtcbiAgICBlbnRpdHlJZEtleT86IHN0cmluZztcbiAgICBmb3JlaWduS2V5Pzogc3RyaW5nO1xuICAgIHRhcmdldEtleT86IHN0cmluZztcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGxvYWRNZXRhczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ocGF5bG9hZDogVCB8IFRbXSwgb3B0aW9uczogTG9hZE1ldGFzT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBjcmVhdGVNZXRhc0xvYWRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9uczogTG9hZE1ldGFzT3B0aW9ucyk6IGltcG9ydChcIiNzZXJ2ZXIvdXRpbHMvZGVmaW5lTG9hZGVyLnRzXCIpLkxvYWRlcjxUPjtcbmV4cG9ydCB7fTtcbiIsImludGVyZmFjZSBQZXJtaXNzaW9uTG9hZGVyT3B0aW9ucyB7XG4gICAgYXNzaWduYWJsZVR5cGU6IHN0cmluZyB8ICgoZTogYW55KSA9PiBzdHJpbmcpO1xuICAgIGFzc2lnbmFibGVJZDogc3RyaW5nIHwgKChlOiBhbnkpID0+IHN0cmluZyk7XG4gICAgdGFyZ2V0S2V5Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gbG9hZFBlcm1pc3Npb25zPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihwYXlsb2FkOiBUIHwgVFtdLCBvcHRpb25zPzogUGVybWlzc2lvbkxvYWRlck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlUGVybWlzc2lvbkxvYWRlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4ob3B0aW9ucz86IFBlcm1pc3Npb25Mb2FkZXJPcHRpb25zKTogaW1wb3J0KFwiI3NlcnZlci91dGlscy9kZWZpbmVMb2FkZXIudHNcIikuTG9hZGVyPFQ+O1xuZXhwb3J0IHt9O1xuIiwiaW50ZXJmYWNlIFVzZXJMb2FkZXJPcHRpb25zIHtcbiAgICBpZEtleT86IHN0cmluZztcbiAgICB0YXJnZXRLZXk/OiBzdHJpbmc7XG59XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBsb2FkVXNlcjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oZW50aXRpZXM6IFRbXSwgb3B0aW9ucz86IFVzZXJMb2FkZXJPcHRpb25zKTogUHJvbWlzZTx2b2lkPjtcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGNyZWF0ZVVzZXJMb2FkZXI8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KG9wdGlvbnM/OiBVc2VyTG9hZGVyT3B0aW9ucyk6IGltcG9ydChcIiNzZXJ2ZXIvdXRpbHMvZGVmaW5lTG9hZGVyLnRzXCIpLkxvYWRlcjxUPjtcbmV4cG9ydCB7fTtcbiIsImltcG9ydCBCYXNlIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvRHJpdmVDb25maWdFbnRpdHkudHMnO1xuZGVjbGFyZSBjb25zdCBEcml2ZUNvbmZpZ19iYXNlOiB0eXBlb2YgQmFzZSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge307XG4gICAgX19pc0NvbmZpZ01vZGVsOiBib29sZWFuO1xuICAgIHNlcmlhbGl6ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCByb3c6IGFueSk6IFByb21pc2U8VD47XG4gICAgbGlzdDxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTogUHJvbWlzZTxUW10+O1xuICAgIGZpbmQ8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+O1xuICAgIGZpbmRPckZhaWw8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZyk6IFByb21pc2U8VD47XG4gICAgY3JlYXRlPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGl0ZW06IFQgJiB7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgfSk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGlkOiBzdHJpbmcsIGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZU9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIGlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8VD4pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGRlc3Ryb3k8VD4odGhpczogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCwgaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRHJpdmVDb25maWcgZXh0ZW5kcyBEcml2ZUNvbmZpZ19iYXNlIHtcbiAgICBzdGF0aWMgc2VyaWFsaXplPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIHJvdzogYW55KTogUHJvbWlzZTxUPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBCYXNlIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvRmlsZUVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IERyaXZlVXJsT3B0aW9ucyB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RyaXZlQ29udHJhY3QudHMnO1xuaW50ZXJmYWNlIFVSTENhY2hlIHtcbiAgICB1cmw6IHN0cmluZztcbiAgICBleHBpcmVzOiBudW1iZXI7XG59XG5kZWNsYXJlIGNvbnN0IEZpbGVfYmFzZTogdHlwZW9mIEJhc2UgJiB7XG4gICAgbmV3ICguLi5hcmdzOiBhbnlbXSk6IHtcbiAgICAgICAgbGlzdGVuZXJzOiBpbXBvcnQoXCIjc2hhcmVkL21peGlucy9Ib29rc01peGluLnRzXCIpLkxpc3RlbmVyW107XG4gICAgICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiB2b2lkO1xuICAgICAgICBvZmYoZXZlbnQ6IHN0cmluZywgbGlzdGVuZXI6ICguLi5hcmdzOiBhbnlbXSkgPT4gdm9pZCk6IHZvaWQ7XG4gICAgICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkO1xuICAgICAgICBlbWl0QXN5bmMoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIH07XG59ICYgaW1wb3J0KFwiI3NoYXJlZC91dGlscy9jb21wb3NlLnRzXCIpLkNvbnN0cnVjdG9yICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIHNhdmUoKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgZGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgICAgICBzb2Z0RGVsZXRlKCk6IFByb21pc2U8dm9pZD47XG4gICAgfTtcbiAgICBfX21vZGVsOiB7XG4gICAgICAgIHRhYmxlOiBcImZpbGVzXCI7XG4gICAgICAgIHByaW1hcnlLZXk6IGtleW9mIGltcG9ydChcIi4uL2luZGV4LnRzXCIpLkZpbGVUYWJsZTtcbiAgICB9O1xuICAgIHNlcmlhbGl6ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgcm93OiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIHNlbGVjdCgpOiBpbXBvcnQoXCJreXNlbHlcIikuU2VsZWN0UXVlcnlCdWlsZGVyPGltcG9ydChcIi4uL2luZGV4LnRzXCIpLkRhdGFiYXNlQ29udHJhY3QsIFwiZmlsZXNcIiwgYW55PjtcbiAgICBwYWdpbmF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxQYWdpbmF0ZU9wdGlvbnM8XCJmaWxlc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8aW1wb3J0KFwiLi4vLi4vc2hhcmVkL2luZGV4LnRzXCIpLlBhZ2luYXRpb25FbnRpdHk8VD4+O1xuICAgIGxpc3Q8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsTGlzdE9wdGlvbnM8XCJmaWxlc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VFtdPjtcbiAgICBmaW5kT25lPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvPzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbEZpbmRPcHRpb25zPFwiZmlsZXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgIGZpbmRPbmVPckZhaWw8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRmluZE9wdGlvbnM8XCJmaWxlc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8VD47XG4gICAgZmluZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8VCB8IG51bGw+O1xuICAgIGZpbmRPckZhaWw8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGZpbmRCeTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgY29sdW1uOiBrZXlvZiBpbXBvcnQoXCIuLi9pbmRleC50c1wiKS5GaWxlVGFibGUsIHZhbHVlOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGZpbmRCeU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgY29sdW1uOiBrZXlvZiBpbXBvcnQoXCIuLi9pbmRleC50c1wiKS5GaWxlVGFibGUsIHZhbHVlOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGV4aXN0czxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxMaXN0T3B0aW9uczxcImZpbGVzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICBjb3VudDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxDb3VudE9wdGlvbnM8XCJmaWxlc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8bnVtYmVyPjtcbiAgICBjcmVhdGU8VD4odGhpczogbmV3ICgpID0+IFQsIHBheWxvYWQ6IG9iamVjdCAmIHtcbiAgICAgICAgZHJpdmU6IHN0cmluZztcbiAgICAgICAgbWltZXR5cGU6IHN0cmluZztcbiAgICAgICAgY2xpZW50X25hbWU6IHN0cmluZztcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgcHVycG9zZTogc3RyaW5nO1xuICAgICAgICBwdWJsaWM6IGJvb2xlYW47XG4gICAgfSAmIHtcbiAgICAgICAgaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyZWF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHVwZGF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZWRfYXQ/OiBzdHJpbmcgfCBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIH0pOiBQcm9taXNlPFQ+O1xuICAgIGNyZWF0ZU1hbnk8VD4odGhpczogbmV3ICgpID0+IFQsIHZhbHVlczogKG9iamVjdCAmIHtcbiAgICAgICAgZHJpdmU6IHN0cmluZztcbiAgICAgICAgbWltZXR5cGU6IHN0cmluZztcbiAgICAgICAgY2xpZW50X25hbWU6IHN0cmluZztcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgcHVycG9zZTogc3RyaW5nO1xuICAgICAgICBwdWJsaWM6IGJvb2xlYW47XG4gICAgfSAmIHtcbiAgICAgICAgaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyZWF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHVwZGF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZWRfYXQ/OiBzdHJpbmcgfCBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIH0pW10pOiBQcm9taXNlPFRbXT47XG4gICAgdXBkYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvOiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsVXBkYXRlT3B0aW9uczxcImZpbGVzXCI+KTogUHJvbWlzZTxUPjtcbiAgICB1cGRhdGVCeUlkPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55LCB2YWx1ZXM6IHtcbiAgICAgICAgaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZWRfYXQ/OiBzdHJpbmcgfCBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZHJpdmU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIG1pbWV0eXBlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBjbGllbnRfbmFtZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgZmlsZW5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHB1cnBvc2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHB1YmxpYz86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgfSwgb3B0aW9ucz86IHtcbiAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0gfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+O1xuICAgIGRlc3Ryb3k8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRGVzdHJveU9wdGlvbnM8XCJmaWxlc1wiPiB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD47XG4gICAgZmlyc3RPckNyZWF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbzogaW1wb3J0KFwiI3NlcnZlci9taXhpbnMvTW9kZWxNaXhpbi50c1wiKS5Nb2RlbEZpcnN0T3JDcmVhdGVPcHRpb25zPFwiZmlsZXNcIj4pOiBUO1xuICAgIHVwZGF0ZU9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQsIG86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxVcGRhdGVPckNyZWF0ZU9wdGlvbnM8XCJmaWxlc1wiPik6IFQ7XG4gICAgZGVzdHJveUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xufSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge307XG4gICAgbG9hZDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZW50aXRpZXM6IFQgfCBUW10sIG5hbWVzOiBcIm1ldGFzXCIgfCBcIm1ldGFzXCJbXSk6IFByb21pc2U8dm9pZD47XG59ICYge1xuICAgIG5ldyAoLi4uYXJnczogYW55W10pOiB7XG4gICAgICAgIGdldDxUID0gYW55PihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgICAgICBnZXQ8VCA9IGFueT4obmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IFQpOiBQcm9taXNlPFQ+O1xuICAgICAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogUHJvbWlzZTx2b2lkPjtcbiAgICB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGUgZXh0ZW5kcyBGaWxlX2Jhc2Uge1xuICAgIHN0YXRpYyBjYWNoZTogTWFwPHN0cmluZywgVVJMQ2FjaGU+O1xuICAgIHN0YXRpYyBoYXMoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG4gICAgc3RhdGljIGZpbmRCeUZpbGVuYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPEZpbGUgfCB1bmRlZmluZWQ+O1xuICAgIHJlYWRTdHJlYW0oKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+O1xuICAgIHJlYWQoKTogUHJvbWlzZTxVaW50OEFycmF5PEFycmF5QnVmZmVyTGlrZT4+O1xuICAgIGxvYWRVcmwob3B0aW9ucz86IERyaXZlVXJsT3B0aW9ucyk6IFByb21pc2U8dm9pZD47XG4gICAgc3RhdGljIGxvYWRVcmxzKGl0ZW1zOiBGaWxlW10sIG9wdGlvbnM/OiBEcml2ZVVybE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHN0YXRpYyBsb2FkTWV0YXMoaXRlbXM6IEZpbGVbXSk6IFByb21pc2U8dm9pZD47XG4gICAgZGVsZXRlRnJvbURyaXZlKCk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmFzZU1ldGEgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9GaWxlTWV0YUVudGl0eS50cyc7XG5kZWNsYXJlIGNvbnN0IEZpbGVNZXRhX2Jhc2U6IHR5cGVvZiBCYXNlTWV0YSAmIHtcbiAgICBuZXcgKC4uLmFyZ3M6IGFueVtdKToge1xuICAgICAgICBzYXZlKCk6IFByb21pc2U8dm9pZD47XG4gICAgICAgIGRlc3Ryb3koKTogUHJvbWlzZTx2b2lkPjtcbiAgICAgICAgc29mdERlbGV0ZSgpOiBQcm9taXNlPHZvaWQ+O1xuICAgIH07XG4gICAgX19tb2RlbDoge1xuICAgICAgICB0YWJsZTogXCJmaWxlX21ldGFzXCI7XG4gICAgICAgIHByaW1hcnlLZXk6IGtleW9mIGltcG9ydChcIi4uXCIpLkZpbGVNZXRhVGFibGU7XG4gICAgfTtcbiAgICBzZXJpYWxpemU8VD4odGhpczogbmV3ICgpID0+IFQsIHJvdzogYW55KTogUHJvbWlzZTxUPjtcbiAgICBzZWxlY3QoKTogaW1wb3J0KFwia3lzZWx5XCIpLlNlbGVjdFF1ZXJ5QnVpbGRlcjxpbXBvcnQoXCIuLlwiKS5EYXRhYmFzZUNvbnRyYWN0LCBcImZpbGVfbWV0YXNcIiwgYW55PjtcbiAgICBwYWdpbmF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxQYWdpbmF0ZU9wdGlvbnM8XCJmaWxlX21ldGFzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxpbXBvcnQoXCIuLi8uLi9zaGFyZWRcIikuUGFnaW5hdGlvbkVudGl0eTxUPj47XG4gICAgbGlzdDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxMaXN0T3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPFRbXT47XG4gICAgZmluZE9uZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxGaW5kT3B0aW9uczxcImZpbGVfbWV0YXNcIj4gfCB1bmRlZmluZWQpOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+O1xuICAgIGZpbmRPbmVPckZhaWw8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRmluZE9wdGlvbnM8XCJmaWxlX21ldGFzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxUPjtcbiAgICBmaW5kPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBpZDogYW55KTogUHJvbWlzZTxUIHwgbnVsbD47XG4gICAgZmluZE9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgaWQ6IGFueSk6IFByb21pc2U8VD47XG4gICAgZmluZEJ5PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBjb2x1bW46IGtleW9mIGltcG9ydChcIi4uXCIpLkZpbGVNZXRhVGFibGUsIHZhbHVlOiBhbnkpOiBQcm9taXNlPFQ+O1xuICAgIGZpbmRCeU9yRmFpbDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgY29sdW1uOiBrZXlvZiBpbXBvcnQoXCIuLlwiKS5GaWxlTWV0YVRhYmxlLCB2YWx1ZTogYW55KTogUHJvbWlzZTxUPjtcbiAgICBleGlzdHM8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsTGlzdE9wdGlvbnM8XCJmaWxlX21ldGFzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxib29sZWFuPjtcbiAgICBjb3VudDxUPih0aGlzOiBuZXcgKCkgPT4gVCwgbz86IGltcG9ydChcIiNzZXJ2ZXIvbWl4aW5zL01vZGVsTWl4aW4udHNcIikuTW9kZWxDb3VudE9wdGlvbnM8XCJmaWxlX21ldGFzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTxudW1iZXI+O1xuICAgIGNyZWF0ZTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgcGF5bG9hZDogb2JqZWN0ICYge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICAgIGZpbGVfaWQ6IG51bWJlcjtcbiAgICB9ICYge1xuICAgICAgICBpZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgICBjcmVhdGVkX2F0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICB1cGRhdGVkX2F0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBkZWxldGVkX2F0Pzogc3RyaW5nIHwgRGF0ZSB8IHVuZGVmaW5lZDtcbiAgICB9KTogUHJvbWlzZTxUPjtcbiAgICBjcmVhdGVNYW55PFQ+KHRoaXM6IG5ldyAoKSA9PiBULCB2YWx1ZXM6IChvYmplY3QgJiB7XG4gICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgZmlsZV9pZDogbnVtYmVyO1xuICAgIH0gJiB7XG4gICAgICAgIGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgICB2YWx1ZT86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNyZWF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIHVwZGF0ZWRfYXQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGRlbGV0ZWRfYXQ/OiBzdHJpbmcgfCBEYXRlIHwgdW5kZWZpbmVkO1xuICAgIH0pW10pOiBQcm9taXNlPFRbXT47XG4gICAgdXBkYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvOiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsVXBkYXRlT3B0aW9uczxcImZpbGVfbWV0YXNcIj4pOiBQcm9taXNlPFQ+O1xuICAgIHVwZGF0ZUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnksIHZhbHVlczoge1xuICAgICAgICBpZD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgICBuYW1lPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBkZWxldGVkX2F0Pzogc3RyaW5nIHwgRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICAgIGZpbGVfaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgfSwgb3B0aW9ucz86IHtcbiAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH0gfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+O1xuICAgIGRlc3Ryb3k8VD4odGhpczogbmV3ICgpID0+IFQsIG8/OiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRGVzdHJveU9wdGlvbnM8XCJmaWxlX21ldGFzXCI+IHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPjtcbiAgICBmaXJzdE9yQ3JlYXRlPFQ+KHRoaXM6IG5ldyAoKSA9PiBULCBvOiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsRmlyc3RPckNyZWF0ZU9wdGlvbnM8XCJmaWxlX21ldGFzXCI+KTogVDtcbiAgICB1cGRhdGVPckNyZWF0ZTxUPih0aGlzOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBULCBvOiBpbXBvcnQoXCIjc2VydmVyL21peGlucy9Nb2RlbE1peGluLnRzXCIpLk1vZGVsVXBkYXRlT3JDcmVhdGVPcHRpb25zPFwiZmlsZV9tZXRhc1wiPik6IFQ7XG4gICAgZGVzdHJveUJ5SWQ8VD4odGhpczogbmV3ICgpID0+IFQsIGlkOiBhbnkpOiBQcm9taXNlPHZvaWQ+O1xufSAmIGltcG9ydChcIiNzaGFyZWQvdXRpbHMvY29tcG9zZS50c1wiKS5Db25zdHJ1Y3RvcjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGVNZXRhIGV4dGVuZHMgRmlsZU1ldGFfYmFzZSB7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgeyBHaXRHYXRld2F5IH0gZnJvbSAnI3NlcnZlci9nYXRld2F5cy9HaXRHYXRld2F5LnRzJztcbmltcG9ydCBCYXNlIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvTW9kdWxlRW50aXR5LnRzJztcbmltcG9ydCBzaGVsbCBmcm9tICcjc2VydmVyL2ZhY2FkZXMvc2hlbGwudHMnO1xuZGVjbGFyZSBjb25zdCBNb2R1bGVfYmFzZTogdHlwZW9mIEJhc2U7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNb2R1bGUgZXh0ZW5kcyBNb2R1bGVfYmFzZSB7XG4gICAgZ2V0IGdpdCgpOiBHaXRHYXRld2F5O1xuICAgIG1ha2VQYXRoKC4uLnBhcnRzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgICBzdGF0aWNQYXRoKC4uLnBhcnRzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgICBjb21tYW5kOiB0eXBlb2Ygc2hlbGwuY29tbWFuZDtcbiAgICBsb2FkKCk6IHZvaWQ7XG4gICAgZmluZENsaWVudEVudHJ5cG9pbnRGaWxlbmFtZShjb250ZXh0PzogJ2RldicgfCAnbm9kZScgfCAnYnJvd3NlcicpOiBzdHJpbmcgfCBudWxsO1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IGNvbmZpZyBmcm9tICcjc2VydmVyL2ZhY2FkZXMvY29uZmlnLnRzJztcbmltcG9ydCB7IEdpdEdhdGV3YXkgfSBmcm9tICcjc2VydmVyL2dhdGV3YXlzL0dpdEdhdGV3YXkudHMnO1xuaW1wb3J0IEdpdEJyYW5jaFJlcG9zaXRvcnkgZnJvbSAnI3NlcnZlci9yZXBvc2l0b3JpZXMvR2l0QnJhbmNoUmVwb3NpdG9yeS50cyc7XG5pbXBvcnQgR2l0Q29tbWl0UmVwb3NpdG9yeSBmcm9tICcjc2VydmVyL3JlcG9zaXRvcmllcy9HaXRDb21taXRSZXBvc2l0b3J5LnRzJztcbmltcG9ydCBCYXNlIGZyb20gJyNzaGFyZWQvZW50aXRpZXMvUGx1Z2luRW50aXR5LnRzJztcbmRlY2xhcmUgY29uc3QgUGx1Z2luRW50cnlFbnRpdHlfYmFzZTogdHlwZW9mIEJhc2U7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbHVnaW5FbnRyeUVudGl0eSBleHRlbmRzIFBsdWdpbkVudHJ5RW50aXR5X2Jhc2Uge1xuICAgIGRpcmVjdG9yeTogc3RyaW5nO1xuICAgIG1ha2VQYXRoKC4uLnBhcnRzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgICBzZXQ6IHR5cGVvZiBjb25maWcuc2V0O1xuICAgIGdldDogdHlwZW9mIGNvbmZpZy5nZXQ7XG4gICAgZ2V0IGdpdCgpOiBHaXRHYXRld2F5O1xuICAgIGdldCBjb21taXRzKCk6IEdpdENvbW1pdFJlcG9zaXRvcnk7XG4gICAgZ2V0IGJyYW5jaGVzKCk6IEdpdEJyYW5jaFJlcG9zaXRvcnk7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgUGx1Z2luRW50cnlFbnRpdHkgZnJvbSAnLi9QbHVnaW5FbnRyeUVudGl0eS50cyc7XG5pbXBvcnQgdHlwZSB7IFJvdXRlckV2ZW50cyB9IGZyb20gJyNzZXJ2ZXIvc2VydmljZXMvUm91dGVyU2VydmljZS50cyc7XG5pbnRlcmZhY2UgQWRkQXBpRm9sZGVyT3B0aW9ucyB7XG4gICAgcHJlZml4Pzogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGx1Z2luRW50aXR5IGV4dGVuZHMgUGx1Z2luRW50cnlFbnRpdHkge1xuICAgIGFwaUZvbGRlcnM6IE1hcDxzdHJpbmcsIEFkZEFwaUZvbGRlck9wdGlvbnM+O1xuICAgIGFwaURpcmVjdG9yaWVzOiBTZXQ8c3RyaW5nPjtcbiAgICBjb25zdHJ1Y3RvcigpO1xuICAgIHN0YXRpY1BhdGgoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICAgIGxvYWQoKTogUHJvbWlzZTx2b2lkPjtcbiAgICBvblJvdXRlclJlZ2lzdGVyZWQoY3R4OiBSb3V0ZXJFdmVudHNbJ3JvdXRlcjpyZWdpc3RlcmVkJ10pOiBQcm9taXNlPHZvaWQ+O1xuICAgIGFkZEFwaUZvbGRlcihkaXJlY3Rvcnk6IHN0cmluZywgb3B0aW9ucz86IEFkZEFwaUZvbGRlck9wdGlvbnMpOiB2b2lkO1xuICAgIGFkZFJvdXRlckZvbGRlcihkaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQ7XG4gICAgc3RhdGljIGZyb21QbHVnaW5EaXNjb3ZlckVudGl0eTxUPih0aGlzOiBuZXcgKCkgPT4gVCwgZW50aXR5OiBQbHVnaW5FbnRyeUVudGl0eSk6IFQ7XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IExpc3RPcHRpb25zIH0gZnJvbSAnLi9saXN0LnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gZXhpc3RzPFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIExpc3RPcHRpb25zPFQ+Pih0YWJsZTogVCwgb3B0aW9ucz86IE8pOiBQcm9taXNlPGJvb2xlYW4+O1xuIiwiZGVjbGFyZSBtb2R1bGUgJ2t5c2VseScge1xuICAgIGludGVyZmFjZSBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIgZXh0ZW5kcyBzdHJpbmcsIEMgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcj4ge1xuICAgICAgICBhZGRJZENvbHVtbjxDTiBleHRlbmRzIHN0cmluZyA9ICdpZCc+KGNvbD86IENOKTogQ3JlYXRlVGFibGVCdWlsZGVyPFRCLCBDIHwgQ04+O1xuICAgIH1cbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENyZWF0ZVRhYmxlQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IENvbHVtblR5cGUsIEV4cHJlc3Npb25CdWlsZGVyIH0gZnJvbSAna3lzZWx5JztcbmltcG9ydCB0eXBlIHsgU2VsZWN0YWJsZSB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgeyBub3cgfSBmcm9tICcuL2NvbW1vbi50cyc7XG5pbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmltcG9ydCBkYiBmcm9tICcjc2VydmVyL2ZhY2FkZXMvZGF0YWJhc2UudHMnO1xudHlwZSBXaGVyZUNhcGFibGU8UUI+ID0ge1xuICAgIHdoZXJlOiAoLi4uYXJnczogYW55W10pID0+IFFCO1xufTtcbnR5cGUgVXBkYXRlRnJvbTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+ID0gUmV0dXJuVHlwZTx0eXBlb2YgZGIudXBkYXRlVGFibGU8VD4+O1xuZXhwb3J0IGludGVyZmFjZSBTb2Z0RGVsZXRlT3B0aW9uczxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2U+IHtcbiAgICBzZXJpYWxpemU/OiAocm93OiBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPikgPT4gYW55O1xuICAgIHF1ZXJ5OiAocWI6IFVwZGF0ZUZyb208VD4pID0+IFVwZGF0ZUZyb208VD47XG59XG5leHBvcnQgdHlwZSBTb2Z0RGVsZXRlUmVzdWx0PFQgZXh0ZW5kcyBrZXlvZiBEYXRhYmFzZSwgTyBleHRlbmRzIFNvZnREZWxldGVPcHRpb25zPFQ+IHwgdW5kZWZpbmVkPiA9IE8gZXh0ZW5kcyB1bmRlZmluZWQgPyBTZWxlY3RhYmxlPERhdGFiYXNlW1RdPltdIDogTyBleHRlbmRzIHtcbiAgICBzZXJpYWxpemU6IChyb3c6IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+KSA9PiBpbmZlciBSO1xufSA/IFJbXSA6IFNlbGVjdGFibGU8RGF0YWJhc2VbVF0+W107XG5leHBvcnQgaW50ZXJmYWNlIFNvZnREZWxldGVUYWJsZSB7XG4gICAgZGVsZXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlIHwgbnVsbCwgbmV2ZXIgfCBudWxsIHwgUmV0dXJuVHlwZTx0eXBlb2Ygbm93Piwgc3RyaW5nIHwgbnVsbCB8IFJldHVyblR5cGU8dHlwZW9mIG5vdz4+O1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gd2hlcmVOb3REZWxldGVkPFFCIGV4dGVuZHMgV2hlcmVDYXBhYmxlPFFCPj4ocWI6IFFCKTogUUI7XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiB1bmRlbGV0ZWQocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55Pik6IGltcG9ydChcImt5c2VseVwiKS5FeHByZXNzaW9uV3JhcHBlcjxhbnksIGFueSwgaW1wb3J0KFwia3lzZWx5XCIpLlNxbEJvb2w+O1xuZXhwb3J0IGRlY2xhcmUgbmFtZXNwYWNlIHVuZGVsZXRlZCB7XG4gICAgdmFyIGNvbHVtbjogKGNvbDogc3RyaW5nKSA9PiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gaW1wb3J0KFwia3lzZWx5XCIpLkV4cHJlc3Npb25XcmFwcGVyPGFueSwgYW55LCBpbXBvcnQoXCJreXNlbHlcIikuU3FsQm9vbD47XG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBkZWxldGVkOiAocWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gaW1wb3J0KFwia3lzZWx5XCIpLkV4cHJlc3Npb25XcmFwcGVyPGFueSwgYW55LCBpbXBvcnQoXCJreXNlbHlcIikuU3FsQm9vbD47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhZGRTb2Z0RGVsZXRlQ29sdW1uOiAoY3RiOiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+KSA9PiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gc29mdERlbGV0ZTxUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsIE8gZXh0ZW5kcyBTb2Z0RGVsZXRlT3B0aW9uczxUPj4odGFibGU6IFQsIG9wdGlvbnM/OiBPKTogUHJvbWlzZTxTb2Z0RGVsZXRlUmVzdWx0PFQsIE8+PjtcbmRlY2xhcmUgbW9kdWxlICdreXNlbHknIHtcbiAgICBpbnRlcmZhY2UgQ3JlYXRlVGFibGVCdWlsZGVyPFRCIGV4dGVuZHMgc3RyaW5nLCBDIGV4dGVuZHMgc3RyaW5nID0gbmV2ZXI+IHtcbiAgICAgICAgYWRkU29mdERlbGV0ZUNvbHVtbigpOiBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIsIEMgfCAnZGVsZXRlZF9hdCc+O1xuICAgIH1cbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCB7IENyZWF0ZVRhYmxlQnVpbGRlciB9IGZyb20gJ2t5c2VseSc7XG5pbXBvcnQgdHlwZSB7IENvbHVtblR5cGUgfSBmcm9tICdreXNlbHknO1xuaW1wb3J0IHsgbm93IH0gZnJvbSAnLi9jb21tb24udHMnO1xuZXhwb3J0IGludGVyZmFjZSBUaW1lc3RhbXBUYWJsZSB7XG4gICAgY3JlYXRlZF9hdDogQ29sdW1uVHlwZTxEYXRlLCBzdHJpbmcgfCB1bmRlZmluZWQsIG5ldmVyPjtcbiAgICB1cGRhdGVkX2F0OiBDb2x1bW5UeXBlPERhdGUsIHN0cmluZyB8IHVuZGVmaW5lZCwgRGF0ZSB8IHN0cmluZyB8IFJldHVyblR5cGU8dHlwZW9mIG5vdz4+O1xufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgYWRkQ3JlYXRlZENvbHVtbjogKGN0YjogQ3JlYXRlVGFibGVCdWlsZGVyPGFueSwgYW55PikgPT4gQ3JlYXRlVGFibGVCdWlsZGVyPGFueSwgYW55PjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGFkZFVwZGF0ZWRDb2x1bW46IChjdGI6IENyZWF0ZVRhYmxlQnVpbGRlcjxhbnksIGFueT4pID0+IENyZWF0ZVRhYmxlQnVpbGRlcjxhbnksIGFueT47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBhZGRUaW1lc3RhbXBDb2x1bW5zOiAoY3RiOiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+KSA9PiBDcmVhdGVUYWJsZUJ1aWxkZXI8YW55LCBhbnk+O1xuZGVjbGFyZSBtb2R1bGUgJ2t5c2VseScge1xuICAgIGludGVyZmFjZSBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIgZXh0ZW5kcyBzdHJpbmcsIEMgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlcj4ge1xuICAgICAgICBhZGRUaW1lc3RhbXBDb2x1bW5zKCk6IENyZWF0ZVRhYmxlQnVpbGRlcjxUQiwgQyB8ICdjcmVhdGVkX2F0JyB8ICd1cGRhdGVkX2F0Jz47XG4gICAgICAgIGFkZENyZWF0ZWRDb2x1bW4oKTogQ3JlYXRlVGFibGVCdWlsZGVyPFRCLCBDIHwgJ2NyZWF0ZWRfYXQnPjtcbiAgICAgICAgYWRkVXBkYXRlZENvbHVtbigpOiBDcmVhdGVUYWJsZUJ1aWxkZXI8VEIsIEMgfCAndXBkYXRlZF9hdCc+O1xuICAgIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VSZWxhdGlvbiB7XG4gICAgbG9hZChlbnRpdGllczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufVxuIiwiaW1wb3J0IEJhc2VSZWxhdGlvbiBmcm9tICcuL0Jhc2VSZWxhdGlvbi50cyc7XG5pbnRlcmZhY2UgQmVsb25nc1RvT3B0aW9ucyB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBzdHJpbmc7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU/OiAocm93OiBhbnkpID0+IGFueTtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJlbG9uZ3NUbyBleHRlbmRzIEJhc2VSZWxhdGlvbiB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBzdHJpbmc7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBzZXJpYWxpemU6IChyb3c6IGFueSkgPT4gYW55O1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJlbG9uZ3NUb09wdGlvbnMpO1xuICAgIGxvYWQoZW50aXRpZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCB7fTtcbiIsImltcG9ydCBCZWxvbmdzVG8gZnJvbSAnLi9CZWxvbmdzVG9SZWxhdGlvbi50cyc7XG5pbXBvcnQgQmFzZVJlbGF0aW9uIGZyb20gJy4vQmFzZVJlbGF0aW9uLnRzJztcbmV4cG9ydCBkZWNsYXJlIGNsYXNzIExvYWRGaWxlTWV0YXMgZXh0ZW5kcyBCYXNlUmVsYXRpb24ge1xuICAgIGZpbGVLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIGNvbnN0cnVjdG9yKGZpbGVLZXk/OiBzdHJpbmcsIHByb3BlcnR5Pzogc3RyaW5nKTtcbiAgICBsb2FkKGVudGl0aWVzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBMb2FkRmlsZVVybCBleHRlbmRzIEJhc2VSZWxhdGlvbiB7XG4gICAgZmlsZUtleTogc3RyaW5nO1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IoZmlsZUtleT86IHN0cmluZywgcHJvcGVydHk/OiBzdHJpbmcpO1xuICAgIGxvYWQoZW50aXRpZXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJlbG9uZ3NUb0ZpbGUgZXh0ZW5kcyBCZWxvbmdzVG8ge1xuICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5Pzogc3RyaW5nLCB0YXJnZXRLZXk/OiBzdHJpbmcpO1xuICAgIHVybChwcm9wZXJ0eT86IHN0cmluZyk6IExvYWRGaWxlVXJsO1xuICAgIG1ldGFzKHByb3BlcnR5Pzogc3RyaW5nKTogTG9hZEZpbGVNZXRhcztcbn1cbiIsImltcG9ydCBCZWxvbmdzVG8gZnJvbSAnLi9CZWxvbmdzVG9SZWxhdGlvbi50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZWxvbmdzVG9Vc2VyIGV4dGVuZHMgQmVsb25nc1RvIHtcbiAgICBjb25zdHJ1Y3RvcigpO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBEYXRhYmFzZUNvbnRyYWN0IGFzIERhdGFiYXNlIH0gZnJvbSAnI3NlcnZlci9jb250cmFjdHMvRGF0YWJhc2VDb250cmFjdC50cyc7XG5pbnRlcmZhY2UgSGFzTWFueU9wdGlvbnMge1xuICAgIHRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICB0YXJnZXRLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIHNlcmlhbGl6ZT86IChyb3c6IGFueSkgPT4gYW55O1xuICAgIGFmdGVyPzogKHJvd3M6IGFueVtdKSA9PiBQcm9taXNlPGFueT47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIYXNNYW55IHtcbiAgICB0YWJsZTogc3RyaW5nO1xuICAgIHRhYmxlS2V5OiBzdHJpbmc7XG4gICAgdGFyZ2V0VGFibGU6IHN0cmluZztcbiAgICB0YXJnZXRLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIHNlcmlhbGl6ZTogKHJvdzogYW55KSA9PiBhbnk7XG4gICAgYWZ0ZXI6IChyb3dzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+O1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEhhc01hbnlPcHRpb25zKTtcbiAgICBsb2FkKGVudGl0aWVzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgdHlwZSB7IERhdGFiYXNlQ29udHJhY3QgYXMgRGF0YWJhc2UgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9EYXRhYmFzZUNvbnRyYWN0LnRzJztcbmludGVyZmFjZSBIYXNNZXRhc09wdGlvbnMge1xuICAgIHRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBrZXlvZiBEYXRhYmFzZTtcbiAgICB0YXJnZXRLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGFzTWV0YXMge1xuICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgdGFibGVLZXk6IHN0cmluZztcbiAgICB0YXJnZXRUYWJsZTogc3RyaW5nO1xuICAgIHRhcmdldEtleTogc3RyaW5nO1xuICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3Iob3B0aW9uczogSGFzTWV0YXNPcHRpb25zKTtcbiAgICBsb2FkKGVudGl0aWVzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG59XG5leHBvcnQge307XG4iLCJpbXBvcnQgQmFzZVJlbGF0aW9uIGZyb20gJy4vQmFzZVJlbGF0aW9uLnRzJztcbmltcG9ydCB0eXBlIHsgRGF0YWJhc2VDb250cmFjdCBhcyBEYXRhYmFzZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL0RhdGFiYXNlQ29udHJhY3QudHMnO1xuaW50ZXJmYWNlIEhhc01hbnlUaHJvdWdoT3B0aW9ucyB7XG4gICAgdGFibGU6IGtleW9mIERhdGFiYXNlO1xuICAgIHRhYmxlS2V5OiBzdHJpbmc7XG4gICAgdGFyZ2V0VGFibGU6IGtleW9mIERhdGFiYXNlO1xuICAgIHRhcmdldEtleTogc3RyaW5nO1xuICAgIHBpdm90VGFibGU6IGtleW9mIERhdGFiYXNlO1xuICAgIHBpdm90U291cmNlS2V5OiBzdHJpbmc7XG4gICAgcGl2b3RUYXJnZXRLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIHNlcmlhbGl6ZT86IChyb3c6IGFueSkgPT4gYW55O1xuICAgIGFmdGVyPzogKHJvd3M6IGFueVtdKSA9PiBQcm9taXNlPGFueT47XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIYXNNYW55VGhyb3VnaCBleHRlbmRzIEJhc2VSZWxhdGlvbiB7XG4gICAgdGFibGU6IHN0cmluZztcbiAgICB0YWJsZUtleTogc3RyaW5nO1xuICAgIHRhcmdldFRhYmxlOiBzdHJpbmc7XG4gICAgdGFyZ2V0S2V5OiBzdHJpbmc7XG4gICAgcGl2b3RUYWJsZTogc3RyaW5nO1xuICAgIHBpdm90U291cmNlS2V5OiBzdHJpbmc7XG4gICAgcGl2b3RUYXJnZXRLZXk6IHN0cmluZztcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgIHNlcmlhbGl6ZTogKHJvdzogYW55KSA9PiBhbnk7XG4gICAgYWZ0ZXI6IChyb3dzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+O1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEhhc01hbnlUaHJvdWdoT3B0aW9ucyk7XG4gICAgbG9hZChlbnRpdGllczogYW55W10pOiBQcm9taXNlPHZvaWQ+O1xufVxuZXhwb3J0IHt9O1xuIiwiaW1wb3J0IHR5cGUgeyBUb2tlbiwgVXNlckVudGl0eSB9IGZyb20gJ0BzaWRla2ljay1jb2Rlci96ZW5pdGgta2l0L3NoYXJlZCc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG5leHBvcnQgdHlwZSBBdXRoTWlkZGxld2FyZUNvbnRleHQgPSB7XG4gICAgdXNlcjogVXNlckVudGl0eTtcbiAgICB0b2tlbjogVG9rZW47XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXV0aE1pZGRsZXdhcmUgaW1wbGVtZW50cyBNaWRkbGV3YXJlIHtcbiAgICBoYW5kbGUoY3R4OiBhbnkpOiBQcm9taXNlPEF1dGhNaWRkbGV3YXJlQ29udGV4dD47XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSAnQHNpZGVraWNrLWNvZGVyL3plbml0aC1raXQvc2hhcmVkJztcbmltcG9ydCB0eXBlIHsgTWlkZGxld2FyZSB9IGZyb20gJyNzZXJ2ZXIvY29udHJhY3RzL1JvdXRlckNvbnRyYWN0LnRzJztcbmltcG9ydCB0eXBlIFVzZXIgZnJvbSAnI3NoYXJlZC9lbnRpdGllcy9Vc2VyRW50aXR5LnRzJztcbmltcG9ydCB0eXBlIHsgSHR0cENvbnRleHQgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9IdHRwQ29udGV4dENvbnRyYWN0LnRzJztcbmV4cG9ydCB0eXBlIEF1dGhTaWxlbmNlTWlkZGxld2FyZUNvbnRleHQgPSB7XG4gICAgdXNlcj86IFVzZXI7XG4gICAgdG9rZW4/OiBUb2tlbjtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdXRoU2lsZW5jZU1pZGRsZXdhcmUgaW1wbGVtZW50cyBNaWRkbGV3YXJlIHtcbiAgICBoYW5kbGUoY3R4OiBIdHRwQ29udGV4dCk6IFByb21pc2U8QXV0aFNpbGVuY2VNaWRkbGV3YXJlQ29udGV4dD47XG59XG4iLCJpbXBvcnQgdHlwZSB7IEF1dGhTaWxlbmNlTWlkZGxld2FyZUNvbnRleHQgfSBmcm9tICcuL0F1dGhTaWxlbmNlTWlkZGxld2FyZS50cyc7XG5pbXBvcnQgdHlwZSB7IE1pZGRsZXdhcmUsIE1pZGRsZXdhcmVIYW5kbGVSZXN1bHQgfSBmcm9tICcjc2VydmVyL2NvbnRyYWN0cy9Sb3V0ZXJDb250cmFjdC50cyc7XG5pbXBvcnQgQWNsIGZyb20gJyNzZXJ2ZXIvZW50aXRpZXMvQWNsRW50aXR5LnRzJztcbmV4cG9ydCB0eXBlIEF1dGhvcml6YXRpb25Db250ZXh0ID0gTWlkZGxld2FyZUhhbmRsZVJlc3VsdDxbQXV0aG9yaXphdGlvbk1pZGRsZXdhcmVdPjtcbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXplUGVybWlzc2lvblBheWxvYWQge1xuICAgIGFjdGlvbjogc3RyaW5nO1xuICAgIHJlc291cmNlOiBzdHJpbmc7XG4gICAgY29uZGl0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5leHBvcnQgZGVjbGFyZSBjbGFzcyBBdXRob3JpemVQZXJtaXNzaW9uIGltcGxlbWVudHMgTWlkZGxld2FyZSB7XG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9ucztcbiAgICBjb25zdHJ1Y3RvcihwYXlsb2FkOiBBdXRob3JpemVQZXJtaXNzaW9uUGF5bG9hZCB8IEF1dGhvcml6ZVBlcm1pc3Npb25QYXlsb2FkW10pO1xuICAgIGhhbmRsZShjdHg6IEF1dGhvcml6YXRpb25Db250ZXh0KTogUHJvbWlzZTx2b2lkPjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dGhvcml6YXRpb25NaWRkbGV3YXJlIGltcGxlbWVudHMgTWlkZGxld2FyZSB7XG4gICAgaGFuZGxlKGN0eDogQXV0aFNpbGVuY2VNaWRkbGV3YXJlQ29udGV4dCk6IFByb21pc2U8e1xuICAgICAgICBhY2w6IEFjbDtcbiAgICB9PjtcbiAgICBzdGF0aWMgY3JlYXRlKHBheWxvYWQ6IEF1dGhvcml6ZVBlcm1pc3Npb25QYXlsb2FkIHwgQXV0aG9yaXplUGVybWlzc2lvblBheWxvYWRbXSk6IEF1dGhvcml6ZVBlcm1pc3Npb247XG59XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBiYXNlUGF0aCguLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZztcbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIHN0b3JhZ2VQYXRoKC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gcmVsYXRpdmVUb0Jhc2VQYXRoKC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gdG1wUGF0aCguLi5hcmdzOiBzdHJpbmdbXSk6IHN0cmluZztcbiIsImltcG9ydCB0eXBlIHsgTG9hZGVyUmVjb3JkIH0gZnJvbSAnLi9kZWZpbmVMb2FkZXIudHMnO1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3JlYXRlTG9hZGVyRmFjdG9yeTxFIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55PiA9IFJlY29yZDxzdHJpbmcsIGFueT4sIFIgZXh0ZW5kcyBMb2FkZXJSZWNvcmQ8RT4gPSBMb2FkZXJSZWNvcmQ8RT4+KGxvYWRlcnM6IFIpOiB7XG4gICAga2V5czogKGtleW9mIFIpW107XG4gICAgbG9hZGVyczogUjtcbiAgICBsb2FkOiAoZW50aXRpZXM6IEUgfCBFW10sIG5hbWVzOiBrZXlvZiBSIHwgKGtleW9mIFIpW10pID0+IFByb21pc2U8dm9pZD47XG59O1xuIiwiZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gY3VpZCgpOiBzdHJpbmc7XG4iLCJpbXBvcnQgdHlwZSB7IEh0dHBDb250ZXh0IH0gZnJvbSBcIiNzZXJ2ZXIvY29udHJhY3RzL0h0dHBDb250ZXh0Q29udHJhY3QudHNcIjtcbmV4cG9ydCBpbnRlcmZhY2UgSGFuZGxlciB7XG4gICAgKGN0eDogSHR0cENvbnRleHQpOiBQcm9taXNlPGFueT4gfCAoKCkgPT4gYW55KTtcbn1cbmV4cG9ydCBkZWNsYXJlIGZ1bmN0aW9uIGRlZmluZUhhbmRsZXIoaGFuZGxlcjogSGFuZGxlcik6IEhhbmRsZXI7XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBnZW5lcmF0ZUluZGV4RmlsZShvcHRpb25zOiBhbnkpOiB2b2lkO1xuIiwiaW50ZXJmYWNlIE9wdGlvbnMge1xuICAgIGNhY2hlPzogYm9vbGVhbjtcbiAgICBvbkJlZm9yZUltcG9ydD86IChjdHg6IHtcbiAgICAgICAgZmlsZW5hbWU6IHN0cmluZztcbiAgICB9KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBvbkFmdGVySW1wb3J0PzogKGN0eDoge1xuICAgICAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBtb2R1bGU6IGFueTtcbiAgICB9KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICBvbkVycm9yPzogKGN0eDoge1xuICAgICAgICBmaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICBlcnJvcjogRXJyb3I7XG4gICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgZXhjbHVkZT86IHN0cmluZ1tdO1xufVxuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW1wb3J0RmlsZXMoZmlsZXM6IHN0cmluZ1tdLCBvcHRpb25zPzogT3B0aW9ucyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5leHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpbXBvcnRHbG9iKHBhdHRlcm46IHN0cmluZywgb3B0aW9ucz86IE9wdGlvbnMpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+O1xuZXhwb3J0IGRlY2xhcmUgZnVuY3Rpb24gaW1wb3J0QWxsKGRpcmVjdG9yeTogc3RyaW5nLCBvcHRpb25zPzogT3B0aW9ucyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj47XG5leHBvcnQge307XG4iLCJleHBvcnQgZGVjbGFyZSBmdW5jdGlvbiBpbXBvcnRPbmUoZmlsZW5hbWVzOiBzdHJpbmdbXSk6IFByb21pc2U8YW55PjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFPLGNBQVU7Q0FBQTtPQUFZLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzdCLElBQVcsZ0JBQU07Q0FBQTtPQUFBLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUNqQixJQUFXLGNBQVc7Q0FBSTtPQUFVLENBQUEsY0FBTztDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMzQyxJQUFXLGFBQU87Q0FBQTtPQUFBLENB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QTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDUDFCLElBQUEsZ0JBQW9CO0NBQUM7T0FBQTtFQUFBO0VBQWM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRW5DLElBQVcsY0FBYztDQUFDO0VBQUssTUFBRyxDQUFHLEVBQUU7Q0FBRTtFQUFDO0VBQUk7RUFBRTtFQUFLO0NBQUM7Ozs7QUNDdEQsSUFBSSxrQkFB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QyxJQUFJLGdCQUFVO0NBQUE7T0FBQSxDQUFBLFFBQUEsY0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RkLElBQUEsYUFBZTtDQUFBO09BQU0sQ0FBQSxRQUFXLFdBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQ2hDLElBQUksa0JBQWtCO0NBQUM7RUFBRyxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxhQUFVO0NBQUk7T0FBVyxDQUFDLFFBQVEsZ0JBQWdCO0NBQUU7RUFBQztFQUFHO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDVELElBQUksa0JBQWM7Q0FBRztFQUFLLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLGFBQVU7Q0FBQTtPQUFhLENBQUMsZ0JBQWM7Q0FBRTtFQUFDO0VBQUc7RUFBQTtFQUFTO0VBQUc7RUFBQTtDQUFBOzs7O0FDRjVELElBQUEsa0JBQXFCO0NBQUE7T0FBQSxDQUFBLGdCQUFnQjtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQXJDLElBQUEsa0JBQXFCO0NBQUE7T0FBQSxDQUFBLGdCQUFnQjtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQ3JDLElBQVUsNEJBQU07Q0FBQTtPQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDaEIsSUFBUyxzQkFBTTtDQUFBO09BQUEsQ0FBQSwwQkFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDZixJQUFJLHNCQUFxQjtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDekIsSUFBQSxpQkFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RBLElBQUksb0JBQW9CO0NBQUM7T0FBQSxFQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUN6QixJQUFJLGdCQUFjO0NBQUM7RUFBRyxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3RCLElBQUEsV0FBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNMQSxJQUFBLG1CQUFxQjtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQXFCO0VBQUE7RUFBcUI7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0MvRCxJQUFJLG9CQUFvQjtDQUFDO0VBQUMsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDMUIsSUFBSSxpQkFBZTtDQUFDO09BQVUsQ0FBQSxrQkFBa0I7Q0FBQTtFQUFBO0VBQVM7RUFBRztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDVELElBQUksWUFBWTtDQUFDO0VBQUssTUFBSTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksT0FBSTtDQUFBO09BQVksQ0FBQSxVQUFVO0NBQU07RUFBQztFQUFFO0VBQU07RUFBRztFQUFBO0NBQUE7Ozs7QUNDaEQsSUFBSSxrQkFBa0I7Q0FBQztFQUFHLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLGVBQVU7Q0FBSTtPQUFXO0VBQUM7RUFBTTtFQUFZO0VBQU07RUFBTTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQzVELElBQU8sWUFBVTtDQUFBO09BQVUsQ0FBQSxXQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzNCLElBQVMsYUFBYTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUEsTUFBQTtFQUFBLE1BQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QixJQUFJLGFBQVM7Q0FBQTtPQUFVO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNOdkIsSUFBQSxvQkFBcUI7Q0FBQTtPQUFBO0VBQUE7RUFBeUI7RUFBQztFQUFXO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0MxRCxJQUFBLG9CQUFxQjtDQUFBO09BQUE7RUFBQSxHQUFrQjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNBdkMsSUFBTyx5QkFBVTtDQUFBO09BQXVCLENBQUEsUUFBQSxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDeEMsSUFBSSxrQkFBa0I7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNGdEIsSUFBVyxZQUFZO0NBQUM7T0FBRSxDQUFBLFdBQW1CLEVBQUEsWUFBVTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN2RCxJQUFPLFlBQWM7Q0FBQTtPQUFhO0VBQUEsRUFBQTtFQUFrQixFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQXBELElBQUEsYUFBZTtDQUFBO0VBQU0sTUFBQTtFQUFBO0VBQVcsT0FBQTtFQUFBLE9BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDaEMsSUFBTyx1QkFBVTtDQUFBO09BQXFCLENBQUEsWUFBQSxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QyxJQUFJLHVCQUFlO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0ZuQixJQUFPLGFBQVU7Q0FBQTtPQUFXLENBQUEsR0FBQSxZQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQVcsbUJBQWlCO0NBQUE7T0FBQSxDQUFBLEdBQUEsWUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUIsSUFBQSxtQkFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE9BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQUEsSUFBSSxTQUFTO0NBQUE7T0FBUTtFQUFBLEVBQWU7RUFBRyxFQUFlO0VBQWtCLEVBQVU7RUFBYSxFQUFrQjtFQUFZLEVBQUE7RUFBMkIsRUFBVztFQUFDLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBLEVBQUE7RUFBQSxFQUFBO0VBQUEsRUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEssSUFBSSxnQkFBdUI7Q0FBQztPQUFXLENBQUEsUUFBQSxZQUFxQjtDQUFFLENBQUEsSUFBQSxHQUFRO0NBQUM7QUFDdkUsSUFBSSxVQUFTO0NBQUE7T0FBYTtFQUFBO0VBQVE7RUFBVTtFQUFBO0VBQWU7RUFBaUI7RUFBVztFQUFBO0VBQWE7RUFBWTtFQUFlLE9BQUc7RUFBZ0I7RUFBVztFQUFZO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRnpLLElBQUEsZUFBVTtDQUFBO09BQWE7RUFBTztFQUFNO0VBQXdCO0VBQUM7Q0FBQTtFQUFBO0VBQVc7RUFBRztFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDM0UsSUFBSSxrQkFBZTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0huQixJQUFXLHlCQUFPO0NBQUE7T0FBQSxDQUFBLFlBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQ2xCLElBQUEsa0JBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQSxTQUFBO0VBQUE7RUFBQTtFQUFBLE9BQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDQUEsSUFBTyxrQkFBVTtDQUFBO09BQWdCLENBQUEsR0FBQSxZQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2pDLElBQVcsd0JBQWlCO0NBQUE7T0FBQSxDQUFBLEdBQUEsWUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUIsSUFBQSxnQkFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEQSxJQUFBLHdCQUFVO0NBQUE7T0FBc0IsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDaEMsSUFBSSxlQUFZO0NBQUE7T0FBTTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLE9BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsT0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSHRCLElBQUEsa0JBQXFCO0NBQUE7T0FBQTtFQUFBO0VBQXVCO0VBQU07RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0dsRCxJQUFPLGtDQUFVO0NBQUE7T0FBZ0M7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2pELElBQUksMkJBQVc7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDTGYsSUFBTyxhQUFVO0NBQUE7RUFBWSxNQUFHLENBQUcsRUFBRTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3JDLElBQVcsa0JBQUc7Q0FBQTtPQUFBLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNkLElBQVUsb0JBQU07Q0FBQTtPQUFBLENBQUEsaUJBQUEsZ0JBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDaEIsSUFBSSxvQkFBZ0I7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUNwQixJQUFJLHFCQUFhO0NBQUE7RUFBQSxTQUFBLGFBQUEsYUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSGpCLElBQU8sNkJBQVU7Q0FBQTtPQUEyQixFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QyxJQUFTLHVCQUFpQjtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUMxQixJQUFJLGlCQUFlO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIbkIsSUFBTyxxQkFBVTtDQUFBO09BQW1CLENBQUEsS0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEMsSUFBSSxrQkFBWTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRWhCLElBQU8sa0JBQVU7Q0FBQTtPQUFnQixFQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNqQyxJQUFRLFlBQU07Q0FBQTtPQUFBLENBQUEsS0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDZCxJQUFJLGdCQUFpQjtDQUFBO09BQUEsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDckIsSUFBQSxrQkFBQTtDQUFBO09BQUEsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFPLHlCQUFvQjtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzNCLElBQVUsd0JBQU07Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNoQixJQUFJLGtCQUFpQjtDQUFBO09BQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNUekIsSUFBQSxNQUFPO0NBQUE7T0FBYyxDQUFBLFFBQUksVUFBUTtDQUFRO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0N6QyxJQUFPLFVBQVU7Q0FBQTtPQUFRLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUN6QixJQUFVLFdBQVk7Q0FBQTtPQUFBLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUN0QixJQUFBLGNBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIQSxJQUFPLFdBQVU7Q0FBQTtPQUFTLEVBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUMxQixJQUFJLGVBQWdCO0NBQUE7T0FBQSxDQUFBLFFBQUEsU0FBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDcEIsSUFBQSxhQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNBLElBQUEsMkJBQTJCO0NBQUE7RUFBTyxNQUFRO0VBQUE7RUFBTztFQUFTO0VBQU07RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2hFLElBQUEseUJBQTRCO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QixJQUFXLHlCQUF5QjtDQUFDO0VBQUEsTUFBUTtFQUFBO0VBQWE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFELElBQUEsWUFBQTtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNOQSxJQUFJLGNBQWM7Q0FBQztPQUFTLEVBQUk7Q0FBRSxFQUFFO0NBQUE7QUFDcEMsSUFBQSxRQUFPO0NBQUE7T0FBYztFQUFBO0VBQU07RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNFM0IsSUFBQSxlQUFVO0NBQUE7T0FBbUIsRUFBQTtDQUFBLEVBQUE7Q0FBQTtBQUM3QixJQUFJLHFCQUFZO0NBQVU7T0FBQSxDQUFBLFlBQUEsYUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzFCLElBQUksY0FBUztDQUFBO09BQVksRUFBQTtDQUFBLENBQUEsR0FBQTtDQUFBO0FBQ3pCLElBQUEsZUFBQTtDQUFBO09BQUEsQ0FBQSxlQUFBLGNBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFBLHFCQUFzQjtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3RCLElBQUksZ0JBQWU7Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ1JuQixJQUFPLGlCQUFVO0NBQUE7T0FBZSxDQUFBLFFBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTtBQUNoQyxJQUFRLHVCQUFvQjtDQUFBO09BQUEsQ0FBQSxlQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUIsSUFBQSxnQkFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDREEsSUFBTyxhQUFVO0NBQUE7T0FBVyxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDNUIsSUFBUywwQkFBTTtDQUFBO09BQUEsQ0FBQSxjQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2YsSUFBQSxrQkFBQTtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0EsSUFBQSxtQkFBaUI7Q0FBQTtPQUFBO0VBQUE7RUFBd0I7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0p6QyxJQUFPLGtCQUFVO0NBQUE7T0FBZ0IsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNqQyxJQUFJLGVBQVk7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0VoQixJQUFPLGVBQVU7Q0FBQTtPQUFhLEVBQUE7Q0FBQSxDQUFBLElBQUEsR0FBQTtDQUFBO0FBQzlCLElBQVEsY0FBTTtDQUFBO09BQUEsRUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7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QUFBO0VBQUEsUUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLFFBQUE7RUFBQSxRQUFBO0VBQUE7RUFBQSxRQUFBO0VBQUEsS0FBQTtFQUFBLFFBQUE7RUFBQSxRQUFBO0VBQUEsUUFBQTtFQUFBLFFBQUE7RUFBQTtFQUFBLFFBQUE7RUFBQSxRQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNObkIsSUFBTywyQkFBVTtDQUFBO09BQXlCLENBQUEsWUFBQTtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7QUFDMUMsSUFBSSxvQkFBaUI7Q0FBQTtPQUFBO0VBQUE7RUFBQSxVQUFBO0VBQUEsVUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIckIsSUFBQSxtQkFBcUI7Q0FBQTtPQUFBLENBQUEsU0FBaUIs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QUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDakJ0QyxJQUFPLGVBQVU7Q0FBQTtPQUFhLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDOUIsSUFBUyx1QkFBTTtDQUFBO09BQUEsQ0FBQSxhQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNmLElBQUksdUJBQVk7Q0FBQTtFQUFBLFNBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSmhCLElBQUEsa0JBQXFCO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBZ0I7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0FyQyxJQUFXLGFBQWE7Q0FBQztFQUFFLE1BQU8sQ0FBQSxFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNsQyxJQUFJLGdCQUFVO0NBQUE7RUFBQSxNQUFBLENBQUEsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNkLElBQVcsa0JBQU07Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RqQixJQUFJLGNBQWM7Q0FBQztFQUFFLE1BQU8sQ0FBQyxFQUFBO0NBQUk7RUFBQztFQUFJO0VBQUc7RUFBSTtDQUFBO0FBQzdDLElBQU8sZ0JBQWM7Q0FBQTtFQUFBLE1BQWM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRG5DLElBQVcsYUFBYTtDQUFDO09BQVMsRUFBQTtDQUFLLEVBQUU7Q0FBQztBQUMxQyxJQUFPLGtCQUFVO0NBQUE7T0FBZ0IsQ0FBQSxXQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2pDLElBQVcsZUFBVztDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN0QixJQUFVLHVCQUFNO0NBQUE7T0FBQSxDQUFBLE9BQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ2hCLElBQUEsYUFBQTtDQUFBO09BQUEsQ0FBQSxXQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNBLElBQU8sZUFBVTtDQUFBO09BQWE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDOUIsSUFBSSxlQUFpQjtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0xyQixJQUFBLCtCQUFxQjtDQUFBO09BQUE7RUFBQTtFQUE2QjtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEbEQsSUFBTyxzQkFBVTtDQUFBO09BQW9CLENBQUEsT0FBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNyQyxJQUFJLGlCQUFnQjtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0dwQixJQUFJLGlCQUFxQjtDQUFBO09BQU8sRUFBQTtDQUFBLEVBQUE7Q0FBYztBQUM5QyxJQUFXLHdCQUFrQjtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM3QixJQUFBLDZCQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDQSxJQUFBLHdCQUFjO0NBQUE7T0FBQTtFQUEwQjtFQUFFO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ1AxQyxJQUFXLGNBQWM7Q0FBQztPQUFXO0VBQUE7RUFBVztFQUFPO0VBQWE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDcEUsSUFBQSxZQUFVO0NBQUE7T0FBUSxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDbEIsSUFBSSxjQUFXO0NBQUE7RUFBTyxHQUFBLFVBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDdEIsSUFBQSx1QkFBcUI7Q0FBQTtPQUFBO0VBQUE7RUFBNkI7RUFBc0I7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSHhFLElBQUEsaUJBQVU7Q0FBQTtPQUFlLENBQUEsT0FBQSxXQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN6QixJQUFVLHNCQUFNO0NBQUE7T0FBQSxDQUFBLGNBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDaEIsSUFBSSxlQUFhO0NBQUE7T0FBVTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEM0IsSUFBQSxtQkFBcUI7Q0FBQTtFQUFBLFNBQWlCLGFBQVU7RUFBQTtFQUFPO0VBQWE7RUFBWTtFQUFrQjtFQUFHO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0NyRyxJQUFPLDZCQUFVO0NBQUE7T0FBMkIsQ0FBQSxxQkFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QyxJQUFJLGlCQUFjO0NBQUE7T0FBUTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNGMUIsSUFBTyw2QkFBVTtDQUFBO09BQTJCLENBQUEsYUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QyxJQUFJLHNCQUFXO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RmLElBQU8sNkJBQVU7Q0FBQTtPQUEyQixDQUFBLGFBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDNUMsSUFBUyx1QkFBTTtDQUFBO09BQUEsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNmLElBQVcsc0JBQWE7Q0FBQTtPQUFBLENBQUEsZ0JBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3hCLElBQUEsc0JBQUE7Q0FBQTtPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSEEsSUFBTyw2Q0FBVTtDQUFBO09BQTJDLEVBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1RCxJQUFJLGlDQUFzQjtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDFCLElBQU8sbUNBQVU7Q0FBQTtPQUFpQyxFQUFBO0NBQUEsQ0FBQSxJQUFBLEdBQUE7Q0FBQTtBQUNsRCxJQUFJLHVCQUFzQjtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRDFCLElBQU8sbUJBQVU7Q0FBQTtFQUFpQixTQUFVLGlCQUFtQixhQUFFO0VBQUE7RUFBa0I7RUFBSztFQUFXO0VBQWE7RUFBUTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3hILElBQUksK0JBQTJCO0NBQUE7RUFBUSxPQUFPLFNBQUEsaUJBQUEsYUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDOUMsSUFBVyw4QkFBUTtDQUFBO09BQUEsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuQixJQUFXLGlDQUFpQjtDQUFBO09BQUEsRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUM1QixJQUFBLHVCQUFBO0NBQUE7T0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNBLElBQUEsa0JBQWlCO0NBQUE7T0FBQTtFQUFBO0VBQStCO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNOaEQsSUFBQSxrQkFBcUI7Q0FBQTtFQUFBLE9BQUEsQ0FBQSxJQUFrQixPQUFFO0NBQU87RUFBQztFQUFBO0VBQU87RUFBSTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0M1RCxJQUFPLGdCQUFVO0NBQUE7T0FBYyxFQUFBO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDL0IsSUFBSSxVQUFVO0NBQUM7T0FBTTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsR0FBQTtFQUFBO0VBQUE7RUFBQSxPQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDRHJCLElBQU8sY0FBVTtDQUFBO09BQVksRUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDN0IsSUFBSSxvQkFBaUI7Q0FBQTtPQUFBLENBQUEsZUFBQSxhQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNyQixJQUFJLDJCQUFtQjtDQUFBO09BQUEsQ0FBQSxlQUFBLGFBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdkIsSUFBSSxhQUFpQjtDQUFBO09BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0hyQixJQUFPLGdCQUFpQjtDQUFBO09BQWMsRUFBQTtDQUFLLENBQUMsR0FBQztDQUFHO0FBQ2hELElBQUEsV0FBZTtDQUFBO0VBQUEsR0FBUyxPQUFRLFVBQU87RUFBQTtFQUFjO0VBQUE7RUFBVTtFQUFZO0VBQU87RUFBWTtFQUFNO0VBQVM7RUFBQTtFQUFNO0VBQVM7RUFBUztFQUFBO0NBQUE7RUFBQTtFQUFhO0VBQUk7RUFBRTtFQUFNO0VBQUk7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RsSyxJQUFBLFdBQWM7Q0FBQTtPQUFVLENBQUEsa0JBQWdCLGdCQUFpQjtDQUFBLENBQUEsSUFBQSxHQUFBO0NBQUE7Ozs7QUNFekQsSUFBVyxhQUFhO0NBQUM7RUFBQSxNQUFRO0VBQUE7RUFBTTtFQUFVLFNBQUU7RUFBVztFQUFVO0VBQWM7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ3RGLElBQVcsYUFBYTtDQUFDO0VBQUEsTUFBUTtFQUFBO0VBQU07RUFBVSxTQUFFO0VBQVc7RUFBVTtDQUFBO0VBQUE7RUFBQTtFQUFjO0VBQUM7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN2RixJQUFXLGFBQWE7Q0FBQztFQUFBLE1BQVE7RUFBQTtFQUFNO0VBQVUsU0FBRTtFQUFXO0VBQVU7Q0FBQTtFQUFBO0VBQVc7RUFBRztFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdEYsSUFBVyxhQUFDO0NBQWE7RUFBRyxNQUFPO0VBQUM7RUFBTTtFQUFBLFNBQVU7RUFBRTtFQUFtQjtDQUFBO0VBQUE7RUFBUztFQUFJO0VBQUE7RUFBQTtFQUFXO0VBQUE7Q0FBQTtBQUNqRyxJQUFXLGdCQUFDO0NBQUE7RUFBb0IsTUFBQTtFQUFPO0VBQU87RUFBWTtFQUFBO0VBQUE7RUFBQTtFQUE2QjtFQUFFO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN6RixJQUFPLG9CQUF3QjtDQUFDO0VBQUEsTUFBUTtFQUFBO0VBQVM7RUFBVztFQUFNO0VBQUM7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ25FLElBQU8sTUFBVTtDQUFBO09BQUEsQ0FBQSxTQUFtQixXQUFjO0NBQUEsQ0FBQSxHQUFBO0NBQUE7QUFDbEQsSUFBSSxtQkFBa0I7Q0FBQTtFQUFXLE1BQVE7RUFBQztFQUFRO0VBQUc7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDckQsSUFBQSxxQkFBQTtDQUFBO0VBQUEsR0FBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ1RBLElBQU8sd0JBQVU7Q0FBQTtFQUF3QixNQUFBO0VBQUE7RUFBYztFQUFBO0VBQVU7RUFBUTtFQUFtQjtFQUFDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDN0YsSUFBVyxpQkFBUTtDQUFBO0VBQUEsR0FBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0RuQixJQUFPLGNBQVU7Q0FBQTtFQUFjLE1BQUE7RUFBQTtFQUFjO0VBQUE7RUFBVTtFQUFRO0VBQW1CO0VBQUM7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuRixJQUFXLE9BQU87Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNBbEIsSUFBTyxrQkFBVTtDQUFBO0VBQWtCLE1BQUE7RUFBQTtFQUFjO0VBQVU7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDM0QsSUFBVyxpQkFBUTtDQUFBO0VBQUEsR0FBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuQixJQUFXLFdBQU07Q0FBQTtFQUFBLEdBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBOzs7O0FDSmpCLElBQU8sZUFBVTtDQUFBO0VBQWUsTUFBQTtFQUFBO0VBQWM7RUFBQTtFQUFVO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN4RCxJQUFXLFFBQU07Q0FBQTtFQUFBLEdBQVksTUFBTTtFQUFBO0VBQVc7RUFBRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNDaEQsSUFBVyxnQkFBWTtDQUFBO0VBQVUsTUFBRTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuQyxJQUFJLGdCQUFtQjtDQUFBO0VBQUEsR0FBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUN2QixJQUFJLGNBQXFCO0NBQUM7RUFBRSxHQUFPLE1BQU07RUFBQztFQUFLO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQy9DLElBQUEsU0FBQTtDQUFBO0VBQUEsR0FBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxTQUFBO0VBQUE7RUFBQTtFQUFBLFNBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQSxTQUFBO0VBQUEsU0FBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNIQSxJQUFXLGdCQUFRO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ25CLElBQVcsZ0JBQVk7Q0FBQTtFQUFXLEdBQUMsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDbkMsSUFBSSxjQUFxQjtDQUFDO0VBQUUsR0FBTyxNQUFNO0VBQUM7RUFBSztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VB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YztDQUFDO09BQVc7RUFBQTtFQUFXO0VBQU87RUFBaUI7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDeEUsSUFBQSxhQUFlO0NBQUE7RUFBUyxHQUFBLE9BQVUsVUFBTztFQUFBO0VBQWM7RUFBQTtFQUFpQjtFQUFPO0VBQWE7RUFBTTtFQUFTO0VBQVU7RUFBTTtFQUFRO0VBQVk7RUFBTztFQUFBO0VBQU07RUFBSTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUN0QmhLLElBQUEsV0FBVTtDQUFBO09BQVMsQ0FBQSxRQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ25CLElBQUksV0FBSztDQUFBO0VBQWEsR0FBRyxPQUFFLE1BQVE7RUFBSTtFQUFDO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFB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V0FBa0I7Q0FBQTtFQUFBLE1BQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7QUFDdEIsSUFBQSxtQkFBQTtDQUFBO0VBQUEsTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNEQSxJQUFJLG1CQUFtQjtDQUFDO0VBQUksTUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQzVCLElBQUksY0FBQTtDQUFlO0VBQUUsTUFBTztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7Ozs7QUNLNUIsSUFBSSxXQUFJO0NBQUE7T0FBbUIsRUFBQztDQUFBLENBQUEsSUFBTyxHQUFBO0NBQUE7QUFDbkMsSUFBSSxZQUFZO0NBQUM7RUFBQyxNQUFRO0VBQUE7RUFBUTtFQUFpQztFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBLFNBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTtBQUNuRSxJQUFJLE9BQU87Q0FBQztPQUFPO0VBQUE7RUFBUTtFQUFZO0VBQVE7RUFBTztFQUFTLE9BQUs7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0NBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7Q0FBQTs7OztBQ0pwRSxJQUFJLGdCQUFDO0NBQUE7RUFBQSxNQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUEsU0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtDQUFBO0FBQ0wsSUFBSSxXQUFTO0NBQUE7T0FBQSxDQUFBLGNBQUE7Q0FBQSxDQUFBLEdBQUE7Q0FBQTs7OztBQ0piLElBQUEsY0FBYztDQUFBO09BQWEsQ0FBQSxTQUFPO0NBQUksQ0FBQSxHQUFBO0NBQUE7QUFDdEMsSUFBQSxTQUFPO0NBQU87T0FBTztFQUFBO0VBQWUsTUFBQTtFQUFZO0VBQUE7Q0FBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFBO0VBQUE7RUFBQTtFQUFB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
1
+ import { i as printTable, n as TableColumn, r as printObject, t as ObjectOptions } from "./printTable-CN_CXp-Y.mjs";
2
+ import { n as CliEvents, r as CliService, t as CliCommand } from "./CliService-CJmymbQ_.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-BjjNxd-6.mjs";
4
+ import { n as DriveUploadUrlOptions, r as DriveUrlOptions, t as DriveContract } from "./DriveContract-i7LselSg.mjs";
5
+ import { t as CookieMapEntity } from "./CookieMapEntity-D5P_b4Xy.mjs";
6
+ import { n as PageRequestContextEntityOptions, t as PageRequestContextEntity } from "./PageRequestContextEntity-CBUxdwIN.mjs";
7
+ import { a as Pagination, i as PaginateOptions, n as DeleteManyOptions, r as FindManyOptions, t as DatabaseRepository } from "./DatabaseRepository-Be0eqEsF.mjs";
8
+ import { n as UserRepositoryEvents, r as UserRepositoryQueryOptions, t as UserRepository } from "./UserRepository-_bjmtMFr.mjs";
9
+ import { n as MigrationEntiyData, t as MigrationEntity } from "./MigrationEntity-ClR1LcZW.mjs";
10
+ import { a as MigratorServiceEvents, i as MigratorService, n as Migration, o as MigratorServiceOptions, r as MigrationSource, t as ListFilters } from "./MigratorService-DxYxl5MM.mjs";
11
+ import { n as RouterService, t as RouterEvents } from "./RouterService-D6nARD48.mjs";
12
+ import { t as Acl } from "./AclEntity-MmrRnZLR.mjs";
13
+ import { n as Request, r as Response, t as HttpContext } from "./HttpContextContract-kX33KT52.mjs";
14
+ import { a as Redirect, i as MiddlewareHandleResult, n as Handler, r as Middleware, t as HandleResult } from "./RouterContract-4RbOTz10.mjs";
15
+ import { t as Route } from "./RouteEntity-c76lpzV1.mjs";
16
+ import { n as RoutineEntityOptions, r as RoutineHandler, t as RoutineEntity } from "./RoutineEntity-0bRsPcdd.mjs";
17
+ import { i as SchedulerServiceOptions, n as SchedulerEvents, r as SchedulerService, t as AddOptions } from "./SchedulerService-zXI-OLO1.mjs";
18
+ import { n as SeederEntiyData, t as SeederEntity } from "./SeederEntity-CxnF2cTy.mjs";
19
+ import { a as SeederSource, i as SeederServiceOptions, n as SeederEvents, o as SeeederService, r as SeederResult } from "./SeederService-DFVj9ygO.mjs";
20
+ import { t as EventContract } from "./EventContract-D8wqLX-d.mjs";
21
+ import { t as DatabaseKysely } from "./KyselyContract-BbJpKDHf.mjs";
22
+ import { t as DriveConfig } from "./DriveConfigEntity-BOvAZ78M.mjs";
23
+ import { t as ArteTesterService } from "./CliTesterService-D-Owa4Q6.mjs";
24
+ import { t as CliWrapperService } from "./CliWrapperService-QTItsE5c.mjs";
25
+ import { n as ConfigFSServiceOptions, t as ConfigFSService } from "./ConfigFSService-CsbJHH3N.mjs";
26
+ import { t as EnvService } from "./EnvService-_BX3DmEX.mjs";
27
+ import { n as ConfigManagerService, t as ConfigManagerOptions } from "./ConfigManagerService-Kt5W7XXE.mjs";
28
+ import { n as UploadUrlOptions, r as UrlOptions, t as DriveBaseGateway } from "./DriveBaseGateway-Btlh6hZe.mjs";
29
+ import { n as S3DriveConfig, t as DriveS3 } from "./DriveS3Gateway-DM8XOtPx.mjs";
30
+ import { t as ConfigS3Service } from "./ConfigS3Service-Bjp5slAQ.mjs";
31
+ import { n as DownloadedFetchOptions, t as DownloadService } from "./DownloadService-DZ_E1lTJ.mjs";
32
+ import { t as DriveService } from "./DriveService-R12yfO1D.mjs";
33
+ import { t as EmmitterService } from "./EmmitterService-BLWZGiBF.mjs";
34
+ import { t as EncryptService } from "./EncryptService-yXxbO2YX.mjs";
35
+ import { n as ExceptionServiceOptions, t as ExceptionService } from "./ExceptionService-Bpv0O19A.mjs";
36
+ import { t as HasherService } from "./HasherService-BgbuRNcr.mjs";
37
+ import { n as HttpServiceOptions, t as HttpService } from "./HttpService-BSh3txO5.mjs";
38
+ import { t as LifecycleService } from "./LifecycleService-Bq06M7A9.mjs";
39
+ import { n as MetadataQueryPayload, r as MetadataQueryService, t as Metadafilter } from "./MetadataQueryService-3Bgd1hbb.mjs";
40
+ import { t as MetadataService } from "./MetadataService-BXp06zAT.mjs";
41
+ import { n as PluginIpcClient, t as IpcMessage } from "./PluginIpcClient-gGRahR8N.mjs";
42
+ import { t as PluginIpcHost } from "./PluginIpcHost-D5Fs7WsU.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-D-Oz2FgQ.mjs";
44
+ import { t as RouterFileBaseRoutingService } from "./RouterFileBaseRoutingService-DQ2YXnyn.mjs";
45
+ import { n as RouterRegisterEntry, t as RouterRegister } from "./RouterRegisterService-w2jHOFz4.mjs";
46
+ import { n as RouterResourceOptions, r as RouterResourceService, t as ResourceMethod } from "./RouterResourceService-BlekELql.mjs";
47
+ import { n as ModelConfig, t as ConfigModel } from "./ModelConfigMixin-BEsoTOHR.mjs";
48
+ import { t as RouterResourceConfig } from "./RouterResourceConfigService-Crk0Jvei.mjs";
49
+ import { n as ShellServiceOptions, t as ShellService } from "./ShellService-JSccq7FZ.mjs";
50
+ import { t as ConfigRepository } from "./ConfigRepository-BDPkp-w2.mjs";
51
+ import { n as FileRepositoryQueryOptions, t as FileRepository } from "./FileRepository-Cq4vh__Q.mjs";
52
+ import { n as GitBranchRepositoryOptions, t as GitBranchRepository } from "./GitBranchRepository-DtkC9hPb.mjs";
53
+ import { i as GitCommitRepositoryOptions, n as GitCommitListResult, r as GitCommitRepository, t as GitCommitListOptions } from "./GitCommitRepository-AfwbM_CF.mjs";
54
+ import { n as PermissionAssignmentRepositoryQueryOptions, t as PermissionAssignmentRepository } from "./PermissionAssignmentRepository-04jgsKYC.mjs";
55
+ import { n as PermissionRepositoryQueryOptions, t as PermissionRepository } from "./PermissionRepository-BVho0kqV.mjs";
56
+ import { n as IRepositoryTypes, t as DatabaseRepositoryInferMixin } from "./DatabaseRepositoryInferMixin-S4h0hoYX.mjs";
57
+ import { n as TokenRepositoryGenerateOptions, r as TokenRepositoryQueryOptions, t as TokenRepository } from "./TokenRepository-B29SjKAE.mjs";
58
+ import { t as DatabaseGateway } from "./DatabaseGateway-w9S02fGb.mjs";
59
+ import { n as DriveFSConfig, t as DriveFS } from "./DriveFSGateway-BWU_UeEn.mjs";
60
+ import { n as GitGatewayOptions, r as GitRepoInfo, t as GitGateway } from "./GitGateway-LU9RlFZ4.mjs";
61
+ import { n as valueToString, t as Metadata } from "./MetadataMixin-DnxTbS1I.mjs";
62
+ import { t as database } from "./database-Grxfz8uk.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-yrtE3wjl.mjs";
64
+ import { n as updateOrCreate, t as UpdateOrCreateOptions } from "./updateOrCreate-Bgdpb4wQ.mjs";
65
+ import { n as list, t as ListOptions } from "./list-BY2D2o_t.mjs";
66
+ import { n as PaginateResult, r as paginate } from "./paginate-CS_cZGL2.mjs";
67
+ import { n as count, t as CountOptions } from "./count-CRSTJXZH.mjs";
68
+ import { i as createMysql, n as create, r as createDefault, t as CreateOptions } from "./create-CAQHadL6.mjs";
69
+ import { i as updateMysql, n as update, r as updateDefault, t as UpdateOptions } from "./update-Z_fdMXo_.mjs";
70
+ import { n as destroy, t as DestroyOptions } from "./destroy-BmIG5H0H.mjs";
71
+ import { n as firstOrCreate, t as FirstOrCreateOptions } from "./firstOrCreate-DZMuD4fZ.mjs";
72
+ import { n as findOne, r as findOneOrFail, t as FindOneOptions } from "./findOne-Yf85IO8n.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-B0TTB7QR.mjs";
75
+ import { t as config } from "./config-D49QZfH2.mjs";
76
+ import { t as _default } from "./container-B91n6Zcp.mjs";
77
+ import { t as download } from "./download-BgXiKzjo.mjs";
78
+ import { t as drive } from "./drive-D08L5E-9.mjs";
79
+ import { t as emmitter } from "./emmitter-gA6WyhSu.mjs";
80
+ import { t as encrypt } from "./encrypt-BbCc7fVq.mjs";
81
+ import { t as env } from "./env-ByosFXOb.mjs";
82
+ import { t as fileRepository } from "./filesRepository-CpbvOWoK.mjs";
83
+ import { t as hasher } from "./hasher-C0g6k-93.mjs";
84
+ import { t as http } from "./http-CkyWUZD3.mjs";
85
+ import { t as lifecycle } from "./lifecycle-Diy1VgNc.mjs";
86
+ import { t as logger } from "./logger-Dx-KTUKs.mjs";
87
+ import { t as migrator } from "./migrator-BBSk0pf2.mjs";
88
+ import { t as permissionAssignmentRepository } from "./permissionAssignmentRepository-BbB31qVc.mjs";
89
+ import { t as permissionRepository } from "./permissionRepository-BBcGCXe1.mjs";
90
+ import { t as router } from "./router-CrMfo8ro.mjs";
91
+ import { t as scheduler } from "./scheduler-B5aHEHHG.mjs";
92
+ import { t as shell } from "./shell-Ba7Df6SC.mjs";
93
+ import { t as tokenRepository } from "./tokenRepository-D1xxFlR5.mjs";
94
+ import { t as userRepository } from "./userRepository-CMWNp5A6.mjs";
95
+ import { n as LoaderRecord, r as defineLoader, t as Loader } from "./defineLoader-B0wYEHGY.mjs";
96
+ import { t as createFileLoader } from "./fileLoader-DhVafbzh.mjs";
97
+ import { n as loadFileUrl, t as createFileUrlLoader } from "./fileUrlLoader-DXg_ObHu.mjs";
98
+ import { n as createHasManyThroughLoader, r as loadHasManyThrough, t as HasManyThroughLoaderOptions } from "./hasManyThroughLoader-BJ6Gc0s-.mjs";
99
+ import { n as loadMetas, t as createMetasLoader } from "./loadMetas-DQP8G_Tx.mjs";
100
+ import { n as loadPermissions, t as createPermissionLoader } from "./permissionLoader-DXX0ImGC.mjs";
101
+ import { n as loadUser, t as createUserLoader } from "./userLoader-BKAr8c-k.mjs";
102
+ import { n as FileMeta, t as File } from "./FileEntity-MQFcJ-0b.mjs";
103
+ import { t as Module } from "./ModuleEntity-CU7DtaCq.mjs";
104
+ import { t as PluginEntryEntity } from "./PluginEntryEntity-Cbj1t3Xo.mjs";
105
+ import { t as PluginEntity } from "./PluginEntity-DxFzK7ML.mjs";
106
+ import { t as exists } from "./exists-CMoGjhfv.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-DxFNZqGv.mjs";
108
+ import { n as addTimestampColumns, r as addUpdatedColumn, t as addCreatedColumn } from "./timestamp-C0vtHKw3.mjs";
109
+ import { t as BaseRelation } from "./BaseRelation-CLslXSKl.mjs";
110
+ import { t as BelongsTo } from "./BelongsToRelation-CTDN8m2d.mjs";
111
+ import { n as LoadFileMetas, r as LoadFileUrl, t as BelongsToFile } from "./BelongsToFileRelation-BCW_eRpx.mjs";
112
+ import { t as BelongsToUser } from "./BelongsToUserRelation-D5urUoTb.mjs";
113
+ import { t as HasMany } from "./HasManyRelation-BT9F_ypB.mjs";
114
+ import { t as HasMetas } from "./HasMetasRelation-CxrkAg9q.mjs";
115
+ import { t as HasManyThrough } from "./hasManyThroughRelation-B94etKvs.mjs";
116
+ import { n as AuthMiddlewareContext, t as AuthMiddleware } from "./AuthMiddleware-4uo4whSb.mjs";
117
+ import { n as AuthSilenceMiddlewareContext, t as AuthSilenceMiddleware } from "./AuthSilenceMiddleware-DG6Wu0wp.mjs";
118
+ import { i as AuthorizePermissionPayload, n as AuthorizationMiddleware, r as AuthorizePermission, t as AuthorizationContext } from "./AuthorizationMiddleware-DkfUke36.mjs";
119
+ import { a as storagePath, i as serverPath, n as clientPath, o as tmpPath, r as relativeToBasePath, t as basePath } from "./basePath-C0uhwuTc.mjs";
120
+ import { t as getPluginConfig } from "./config-kRv0xoFG.mjs";
121
+ import { t as createLoaderFactory } from "./createLoaderFactory-vQsdRiXo.mjs";
122
+ import { t as cuid } from "./cuid-mUpLoFE4.mjs";
123
+ import { n as defineHandler } from "./defineHandler-DnEPCZcE.mjs";
124
+ import { t as generateIndexFile } from "./generateIndexFile-Dj5TLqbK.mjs";
125
+ import { n as importFiles, r as importGlob, t as importAll } from "./importAll-C0DqhIlN.mjs";
126
+ import { t as importOne } from "./importOne-Ds4b9E1-.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 };