@gitpod/gitpod-protocol 0.1.5-patch-1.2 → 0.1.5-pavel-pvc-feat.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/data/gitpod-schema.json +53 -26
  2. package/lib/accounting-protocol.d.ts +155 -0
  3. package/lib/accounting-protocol.d.ts.map +1 -0
  4. package/lib/accounting-protocol.js +100 -0
  5. package/lib/accounting-protocol.js.map +1 -0
  6. package/lib/admin-protocol.d.ts +32 -4
  7. package/lib/admin-protocol.d.ts.map +1 -1
  8. package/lib/admin-protocol.js +15 -0
  9. package/lib/admin-protocol.js.map +1 -1
  10. package/lib/analytics.d.ts +44 -0
  11. package/lib/analytics.d.ts.map +1 -0
  12. package/lib/analytics.js +10 -0
  13. package/lib/analytics.js.map +1 -0
  14. package/lib/auth.d.ts.map +1 -1
  15. package/lib/context-url.d.ts +31 -0
  16. package/lib/context-url.d.ts.map +1 -0
  17. package/lib/context-url.js +102 -0
  18. package/lib/context-url.js.map +1 -0
  19. package/lib/context-url.spec.d.ts +14 -0
  20. package/lib/context-url.spec.d.ts.map +1 -0
  21. package/lib/context-url.spec.js +109 -0
  22. package/lib/context-url.spec.js.map +1 -0
  23. package/lib/email-protocol.d.ts +1 -2
  24. package/lib/email-protocol.d.ts.map +1 -1
  25. package/lib/email-protocol.js +4 -4
  26. package/lib/email-protocol.js.map +1 -1
  27. package/lib/encryption/container-module.d.ts.map +1 -1
  28. package/lib/encryption/container-module.js +5 -4
  29. package/lib/encryption/container-module.js.map +1 -1
  30. package/lib/encryption/encryption-engine.d.ts.map +1 -1
  31. package/lib/encryption/encryption-engine.js +25 -26
  32. package/lib/encryption/encryption-engine.js.map +1 -1
  33. package/lib/encryption/encryption-engine.spec.d.ts.map +1 -1
  34. package/lib/encryption/encryption-engine.spec.js +29 -37
  35. package/lib/encryption/encryption-engine.spec.js.map +1 -1
  36. package/lib/encryption/encryption-service.d.ts.map +1 -1
  37. package/lib/encryption/encryption-service.js +30 -44
  38. package/lib/encryption/encryption-service.js.map +1 -1
  39. package/lib/encryption/key-provider.d.ts.map +1 -1
  40. package/lib/encryption/key-provider.js +31 -38
  41. package/lib/encryption/key-provider.js.map +1 -1
  42. package/lib/env.d.ts +2 -3
  43. package/lib/env.d.ts.map +1 -1
  44. package/lib/env.js +24 -25
  45. package/lib/env.js.map +1 -1
  46. package/lib/gitpod-file-parser.d.ts.map +1 -1
  47. package/lib/gitpod-file-parser.js +26 -42
  48. package/lib/gitpod-file-parser.js.map +1 -1
  49. package/lib/gitpod-file-parser.spec.js +145 -142
  50. package/lib/gitpod-file-parser.spec.js.map +1 -1
  51. package/lib/gitpod-service.d.ts +165 -32
  52. package/lib/gitpod-service.d.ts.map +1 -1
  53. package/lib/gitpod-service.js +176 -265
  54. package/lib/gitpod-service.js.map +1 -1
  55. package/lib/headless-workspace-log.d.ts +9 -11
  56. package/lib/headless-workspace-log.d.ts.map +1 -1
  57. package/lib/headless-workspace-log.js +6 -8
  58. package/lib/headless-workspace-log.js.map +1 -1
  59. package/lib/ide-frontend-service.d.ts +1 -1
  60. package/lib/ide-protocol.d.ts +105 -0
  61. package/lib/ide-protocol.d.ts.map +1 -0
  62. package/lib/{util/without.js → ide-protocol.js} +2 -2
  63. package/lib/ide-protocol.js.map +1 -0
  64. package/lib/index.d.ts +16 -10
  65. package/lib/index.d.ts.map +1 -1
  66. package/lib/index.js +7 -1
  67. package/lib/index.js.map +1 -1
  68. package/lib/installation-admin-protocol.d.ts +27 -0
  69. package/lib/installation-admin-protocol.d.ts.map +1 -0
  70. package/lib/installation-admin-protocol.js +30 -0
  71. package/lib/installation-admin-protocol.js.map +1 -0
  72. package/lib/license-protocol.d.ts.map +1 -1
  73. package/lib/license-protocol.js.map +1 -1
  74. package/lib/messaging/browser/connection.d.ts +5 -3
  75. package/lib/messaging/browser/connection.d.ts.map +1 -1
  76. package/lib/messaging/browser/connection.js +184 -34
  77. package/lib/messaging/browser/connection.js.map +1 -1
  78. package/lib/messaging/browser/window-connection.d.ts +4 -4
  79. package/lib/messaging/browser/window-connection.d.ts.map +1 -1
  80. package/lib/messaging/browser/window-connection.js +42 -59
  81. package/lib/messaging/browser/window-connection.js.map +1 -1
  82. package/lib/messaging/client-call-metrics.d.ts +35 -0
  83. package/lib/messaging/client-call-metrics.d.ts.map +1 -0
  84. package/lib/messaging/client-call-metrics.js +83 -0
  85. package/lib/messaging/client-call-metrics.js.map +1 -0
  86. package/lib/messaging/error.d.ts +4 -1
  87. package/lib/messaging/error.d.ts.map +1 -1
  88. package/lib/messaging/error.js +8 -2
  89. package/lib/messaging/error.js.map +1 -1
  90. package/lib/messaging/handler.d.ts +10 -0
  91. package/lib/messaging/handler.d.ts.map +1 -1
  92. package/lib/messaging/handler.js +1 -1
  93. package/lib/messaging/node/connection.d.ts +1 -17
  94. package/lib/messaging/node/connection.d.ts.map +1 -1
  95. package/lib/messaging/node/connection.js +24 -60
  96. package/lib/messaging/node/connection.js.map +1 -1
  97. package/lib/messaging/proxy-factory.d.ts +3 -1
  98. package/lib/messaging/proxy-factory.d.ts.map +1 -1
  99. package/lib/messaging/proxy-factory.js +75 -162
  100. package/lib/messaging/proxy-factory.js.map +1 -1
  101. package/lib/oss-allowlist.d.ts +14 -0
  102. package/lib/oss-allowlist.d.ts.map +1 -0
  103. package/lib/oss-allowlist.js +8 -0
  104. package/lib/oss-allowlist.js.map +1 -0
  105. package/lib/payment-protocol.d.ts +18 -0
  106. package/lib/payment-protocol.d.ts.map +1 -0
  107. package/lib/payment-protocol.js +13 -0
  108. package/lib/payment-protocol.js.map +1 -0
  109. package/lib/permission.d.ts +10 -3
  110. package/lib/permission.d.ts.map +1 -1
  111. package/lib/permission.js +41 -31
  112. package/lib/permission.js.map +1 -1
  113. package/lib/plans.d.ts +210 -0
  114. package/lib/plans.d.ts.map +1 -0
  115. package/lib/plans.js +605 -0
  116. package/lib/plans.js.map +1 -0
  117. package/lib/protocol.d.ts +163 -82
  118. package/lib/protocol.d.ts.map +1 -1
  119. package/lib/protocol.js +180 -199
  120. package/lib/protocol.js.map +1 -1
  121. package/lib/snapshot-url.d.ts +14 -0
  122. package/lib/snapshot-url.d.ts.map +1 -0
  123. package/lib/snapshot-url.js +26 -0
  124. package/lib/snapshot-url.js.map +1 -0
  125. package/{src/util/without.ts → lib/snapshot-url.spec.d.ts} +2 -3
  126. package/lib/snapshot-url.spec.d.ts.map +1 -0
  127. package/lib/snapshot-url.spec.js +41 -0
  128. package/lib/snapshot-url.spec.js.map +1 -0
  129. package/lib/team-subscription-protocol.d.ts +75 -0
  130. package/lib/team-subscription-protocol.d.ts.map +1 -0
  131. package/lib/team-subscription-protocol.js +63 -0
  132. package/lib/team-subscription-protocol.js.map +1 -0
  133. package/lib/teams-projects-protocol.d.ts +113 -0
  134. package/lib/teams-projects-protocol.d.ts.map +1 -0
  135. package/lib/teams-projects-protocol.js +30 -0
  136. package/lib/teams-projects-protocol.js.map +1 -0
  137. package/lib/typings/globals.d.ts +2 -2
  138. package/lib/typings/globals.d.ts.map +1 -1
  139. package/lib/util/analytics.d.ts +8 -0
  140. package/lib/util/analytics.d.ts.map +1 -0
  141. package/lib/util/analytics.js +88 -0
  142. package/lib/util/analytics.js.map +1 -0
  143. package/lib/util/async-iterator.d.ts.map +1 -1
  144. package/lib/util/async-iterator.js +57 -135
  145. package/lib/util/async-iterator.js.map +1 -1
  146. package/lib/util/cancelable.js +17 -59
  147. package/lib/util/cancelable.js.map +1 -1
  148. package/lib/util/date-time.js +11 -11
  149. package/lib/util/date-time.js.map +1 -1
  150. package/lib/util/deferred.js +10 -12
  151. package/lib/util/deferred.js.map +1 -1
  152. package/lib/util/disposable.d.ts.map +1 -1
  153. package/lib/util/disposable.js +27 -40
  154. package/lib/util/disposable.js.map +1 -1
  155. package/lib/util/event.d.ts.map +1 -1
  156. package/lib/util/event.js +63 -77
  157. package/lib/util/event.js.map +1 -1
  158. package/lib/util/garbage-collected-cache.d.ts +1 -0
  159. package/lib/util/garbage-collected-cache.d.ts.map +1 -1
  160. package/lib/util/garbage-collected-cache.js +27 -47
  161. package/lib/util/garbage-collected-cache.js.map +1 -1
  162. package/lib/util/generate-workspace-id.d.ts +1 -1
  163. package/lib/util/generate-workspace-id.d.ts.map +1 -1
  164. package/lib/util/generate-workspace-id.js +460 -497
  165. package/lib/util/generate-workspace-id.js.map +1 -1
  166. package/lib/util/generate-workspace-id.spec.js +61 -78
  167. package/lib/util/generate-workspace-id.spec.js.map +1 -1
  168. package/lib/util/gitpod-cookie.d.ts +20 -0
  169. package/lib/util/gitpod-cookie.d.ts.map +1 -0
  170. package/lib/util/gitpod-cookie.js +41 -0
  171. package/lib/util/gitpod-cookie.js.map +1 -0
  172. package/lib/util/gitpod-host-url.d.ts +1 -2
  173. package/lib/util/gitpod-host-url.d.ts.map +1 -1
  174. package/lib/util/gitpod-host-url.js +108 -109
  175. package/lib/util/gitpod-host-url.js.map +1 -1
  176. package/lib/util/gitpod-host-url.spec.d.ts +7 -1
  177. package/lib/util/gitpod-host-url.spec.d.ts.map +1 -1
  178. package/lib/util/gitpod-host-url.spec.js +113 -31
  179. package/lib/util/gitpod-host-url.spec.js.map +1 -1
  180. package/lib/util/grpc.d.ts +15 -0
  181. package/lib/util/grpc.d.ts.map +1 -0
  182. package/lib/util/grpc.js +18 -0
  183. package/lib/util/grpc.js.map +1 -0
  184. package/lib/util/jaeger-client-types.d.ts +68 -0
  185. package/lib/util/jaeger-client-types.d.ts.map +1 -0
  186. package/lib/{theia-plugins.js → util/jaeger-client-types.js} +1 -1
  187. package/lib/util/jaeger-client-types.js.map +1 -0
  188. package/lib/util/logging.d.ts +49 -33
  189. package/lib/util/logging.d.ts.map +1 -1
  190. package/lib/util/logging.js +125 -129
  191. package/lib/util/logging.js.map +1 -1
  192. package/lib/util/make-link.js +5 -5
  193. package/lib/util/make-link.js.map +1 -1
  194. package/lib/util/parse-workspace-id.d.ts +10 -0
  195. package/lib/util/parse-workspace-id.d.ts.map +1 -1
  196. package/lib/util/parse-workspace-id.js +31 -7
  197. package/lib/util/parse-workspace-id.js.map +1 -1
  198. package/lib/util/parse-workspace-id.spec.d.ts +4 -0
  199. package/lib/util/parse-workspace-id.spec.d.ts.map +1 -1
  200. package/lib/util/parse-workspace-id.spec.js +123 -84
  201. package/lib/util/parse-workspace-id.spec.js.map +1 -1
  202. package/lib/util/queue.js +16 -55
  203. package/lib/util/queue.js.map +1 -1
  204. package/lib/util/queue.spec.js +147 -288
  205. package/lib/util/queue.spec.js.map +1 -1
  206. package/lib/util/repeat.d.ts +15 -0
  207. package/lib/util/repeat.d.ts.map +1 -0
  208. package/lib/util/repeat.js +55 -0
  209. package/lib/util/repeat.js.map +1 -0
  210. package/lib/util/semaphore.d.ts.map +1 -1
  211. package/lib/util/semaphore.js +15 -46
  212. package/lib/util/semaphore.js.map +1 -1
  213. package/lib/util/skip-if.d.ts.map +1 -1
  214. package/lib/util/skip-if.js +6 -6
  215. package/lib/util/skip-if.js.map +1 -1
  216. package/lib/util/timeutil.d.ts.map +1 -1
  217. package/lib/util/timeutil.js +28 -16
  218. package/lib/util/timeutil.js.map +1 -1
  219. package/lib/util/timeutil.spec.d.ts.map +1 -1
  220. package/lib/util/timeutil.spec.js +21 -24
  221. package/lib/util/timeutil.spec.js.map +1 -1
  222. package/lib/util/tracing.d.ts +52 -6
  223. package/lib/util/tracing.d.ts.map +1 -1
  224. package/lib/util/tracing.js +199 -64
  225. package/lib/util/tracing.js.map +1 -1
  226. package/lib/util/tracing.spec.d.ts +7 -0
  227. package/lib/util/tracing.spec.d.ts.map +1 -0
  228. package/lib/util/tracing.spec.js +121 -0
  229. package/lib/util/tracing.spec.js.map +1 -0
  230. package/lib/util/workspace-port-authentication.d.ts +7 -7
  231. package/lib/util/workspace-port-authentication.d.ts.map +1 -1
  232. package/lib/util/workspace-port-authentication.js +10 -12
  233. package/lib/util/workspace-port-authentication.js.map +1 -1
  234. package/lib/workspace-cluster.d.ts +76 -0
  235. package/lib/workspace-cluster.d.ts.map +1 -0
  236. package/lib/workspace-cluster.js +31 -0
  237. package/lib/workspace-cluster.js.map +1 -0
  238. package/lib/workspace-instance.d.ts +26 -4
  239. package/lib/workspace-instance.d.ts.map +1 -1
  240. package/lib/wsready.d.ts +1 -1
  241. package/lib/wsready.d.ts.map +1 -1
  242. package/lib/wsready.js +2 -2
  243. package/package.json +31 -17
  244. package/pkg-yarn.lock +17 -9
  245. package/provenance-bundle.jsonl +2 -0
  246. package/src/accounting-protocol.ts +231 -0
  247. package/src/admin-protocol.ts +70 -19
  248. package/src/analytics.ts +52 -0
  249. package/src/auth.ts +2 -2
  250. package/src/context-url.spec.ts +67 -0
  251. package/src/context-url.ts +109 -0
  252. package/src/email-protocol.ts +5 -7
  253. package/src/encryption/container-module.ts +2 -3
  254. package/src/encryption/encryption-engine.spec.ts +9 -8
  255. package/src/encryption/encryption-engine.ts +14 -14
  256. package/src/encryption/encryption-service.ts +4 -5
  257. package/src/encryption/key-provider.ts +16 -19
  258. package/src/env.ts +18 -18
  259. package/src/gitpod-file-parser.spec.ts +55 -61
  260. package/src/gitpod-file-parser.ts +16 -17
  261. package/src/gitpod-service.ts +315 -103
  262. package/src/headless-workspace-log.ts +12 -14
  263. package/src/ide-frontend-service.ts +2 -2
  264. package/src/ide-protocol.ts +119 -0
  265. package/src/index.ts +16 -10
  266. package/src/installation-admin-protocol.ts +42 -0
  267. package/src/license-protocol.ts +5 -6
  268. package/src/messaging/browser/connection.ts +197 -18
  269. package/src/messaging/browser/window-connection.ts +39 -29
  270. package/src/messaging/client-call-metrics.ts +96 -0
  271. package/src/messaging/error.ts +12 -5
  272. package/src/messaging/handler.ts +13 -1
  273. package/src/messaging/node/connection.ts +23 -70
  274. package/src/messaging/proxy-factory.ts +35 -34
  275. package/src/oss-allowlist.ts +15 -0
  276. package/src/payment-protocol.ts +20 -0
  277. package/src/permission.ts +42 -33
  278. package/src/plans.ts +679 -0
  279. package/src/protocol.ts +378 -273
  280. package/src/snapshot-url.spec.ts +27 -0
  281. package/src/snapshot-url.ts +27 -0
  282. package/src/team-subscription-protocol.ts +123 -0
  283. package/src/teams-projects-protocol.ts +147 -0
  284. package/src/typings/globals.ts +4 -4
  285. package/src/util/analytics.ts +109 -0
  286. package/src/util/async-iterator.ts +4 -5
  287. package/src/util/cancelable.ts +3 -3
  288. package/src/util/date-time.ts +8 -8
  289. package/src/util/deferred.ts +6 -6
  290. package/src/util/disposable.ts +3 -6
  291. package/src/util/event.ts +9 -11
  292. package/src/util/garbage-collected-cache.ts +11 -8
  293. package/src/util/generate-workspace-id.spec.ts +29 -9
  294. package/src/util/generate-workspace-id.ts +458 -438
  295. package/src/util/gitpod-cookie.ts +38 -0
  296. package/src/util/gitpod-host-url.spec.ts +59 -8
  297. package/src/util/gitpod-host-url.ts +52 -40
  298. package/src/util/grpc.ts +15 -0
  299. package/src/util/jaeger-client-types.ts +102 -0
  300. package/src/util/logging.ts +145 -71
  301. package/src/util/make-link.ts +6 -7
  302. package/src/util/parse-workspace-id.spec.ts +37 -8
  303. package/src/util/parse-workspace-id.ts +32 -7
  304. package/src/util/queue.spec.ts +28 -26
  305. package/src/util/repeat.ts +45 -0
  306. package/src/util/semaphore.ts +6 -8
  307. package/src/util/skip-if.ts +10 -7
  308. package/src/util/timeutil.spec.ts +14 -15
  309. package/src/util/timeutil.ts +19 -15
  310. package/src/util/tracing.spec.ts +88 -0
  311. package/src/util/tracing.ts +202 -31
  312. package/src/util/workspace-port-authentication.ts +10 -13
  313. package/src/workspace-cluster.ts +107 -0
  314. package/src/workspace-instance.ts +66 -30
  315. package/src/wsready.ts +3 -3
  316. package/data/builtin-theia-plugins.json +0 -372
  317. package/lib/messaging/connection-error-handler.d.ts +0 -27
  318. package/lib/messaging/connection-error-handler.d.ts.map +0 -1
  319. package/lib/messaging/connection-error-handler.js +0 -46
  320. package/lib/messaging/connection-error-handler.js.map +0 -1
  321. package/lib/theia-plugins.d.ts +0 -11
  322. package/lib/theia-plugins.d.ts.map +0 -1
  323. package/lib/theia-plugins.js.map +0 -1
  324. package/lib/util/context-url.d.ts +0 -13
  325. package/lib/util/context-url.d.ts.map +0 -1
  326. package/lib/util/context-url.js +0 -26
  327. package/lib/util/context-url.js.map +0 -1
  328. package/lib/util/context-url.spec.d.ts +0 -10
  329. package/lib/util/context-url.spec.d.ts.map +0 -1
  330. package/lib/util/context-url.spec.js +0 -52
  331. package/lib/util/context-url.spec.js.map +0 -1
  332. package/lib/util/repeater.d.ts +0 -22
  333. package/lib/util/repeater.d.ts.map +0 -1
  334. package/lib/util/repeater.js +0 -118
  335. package/lib/util/repeater.js.map +0 -1
  336. package/lib/util/safe-promise.d.ts +0 -11
  337. package/lib/util/safe-promise.d.ts.map +0 -1
  338. package/lib/util/safe-promise.js +0 -34
  339. package/lib/util/safe-promise.js.map +0 -1
  340. package/lib/util/without.d.ts +0 -7
  341. package/lib/util/without.d.ts.map +0 -1
  342. package/lib/util/without.js.map +0 -1
  343. package/src/messaging/connection-error-handler.ts +0 -62
  344. package/src/theia-plugins.ts +0 -11
  345. package/src/util/context-url.spec.ts +0 -25
  346. package/src/util/context-url.ts +0 -23
  347. package/src/util/jaeger-client.d.ts +0 -105
  348. package/src/util/repeater.ts +0 -49
  349. package/src/util/safe-promise.ts +0 -26
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-cluster.js","sourceRoot":"","sources":["../src/workspace-cluster.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,yBAAyB;AACzB,+BAAkD;AAyClD,IAAiB,SAAS,CAGzB;AAHD,WAAiB,SAAS;IACT,4BAAkB,GAAG,CAAC,IAAY,EAAU,EAAE,CACvD,EAAE,CAAC,YAAY,CAAC,IAAA,+BAAyB,EAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5E,CAAC,EAHgB,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAGzB;AAcD,IAAiB,mBAAmB,CAUnC;AAVD,WAAiB,mBAAmB;IAChC,SAAgB,EAAE,CAAC,CAAM;QACrB,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,CAAC;IAC9B,CAAC;IAFe,sBAAE,KAEjB,CAAA;IACD,SAAgB,yBAAyB,CAAC,CAAM;QAC5C,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC;IAChD,CAAC;IAFe,6CAAyB,4BAExC,CAAA;IACD,SAAgB,aAAa,CAAC,EAAuB,EAAE,UAA0B;QAC7E,OAAO,yBAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,CAAC;IACzE,CAAC;IAFe,iCAAa,gBAE5B,CAAA;AACL,CAAC,EAVgB,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAUnC;AAEY,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC"}
@@ -10,6 +10,7 @@ export interface WorkspaceInstance {
10
10
  creationTime: string;
11
11
  deployedTime?: string;
12
12
  startedTime?: string;
13
+ stoppingTime?: string;
13
14
  stoppedTime?: string;
14
15
  ideUrl: string;
15
16
  region: string;
@@ -17,6 +18,10 @@ export interface WorkspaceInstance {
17
18
  status: WorkspaceInstanceStatus;
18
19
  configuration?: WorkspaceInstanceConfiguration;
19
20
  readonly deleted?: boolean;
21
+ /**
22
+ * Contains information about the image build, if there was any
23
+ */
24
+ imageBuildInfo?: ImageBuildInfo;
20
25
  }
21
26
  export interface WorkspaceInstanceStatus {
22
27
  phase: WorkspaceInstancePhase;
@@ -35,16 +40,16 @@ export interface WorkspaceInstanceConditions {
35
40
  failed?: string;
36
41
  timeout?: string;
37
42
  pullingImages?: boolean;
38
- serviceExists?: boolean;
39
43
  deployed?: boolean;
40
44
  neededImageBuild?: boolean;
41
45
  firstUserActivity?: string;
46
+ headlessTaskFailed?: string;
47
+ stoppedByRequest?: boolean;
42
48
  }
43
- export declare type AdmissionLevel = 'owner_only' | 'everyone';
44
- export declare type PortVisibility = 'public' | 'private';
49
+ export declare type AdmissionLevel = "owner_only" | "everyone";
50
+ export declare type PortVisibility = "public" | "private";
45
51
  export interface WorkspaceInstancePort {
46
52
  port: number;
47
- targetPort?: number;
48
53
  visibility?: PortVisibility;
49
54
  url?: string;
50
55
  }
@@ -62,5 +67,22 @@ export interface WorkspaceInstanceConfiguration {
62
67
  theiaVersion?: string;
63
68
  featureFlags?: NamedWorkspaceFeatureFlag[];
64
69
  ideImage: string;
70
+ desktopIdeImage?: string;
71
+ supervisorImage?: string;
72
+ }
73
+ /**
74
+ * Holds information about the image build (if there was one) for this WorkspaceInstance
75
+ */
76
+ export interface ImageBuildInfo {
77
+ log?: ImageBuildLogInfo;
78
+ }
79
+ /**
80
+ * Holds information about how to access logs for this an image build
81
+ */
82
+ export interface ImageBuildLogInfo {
83
+ url: string;
84
+ headers: {
85
+ [key: string]: string;
86
+ };
65
87
  }
66
88
  //# sourceMappingURL=workspace-instance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-instance.d.ts","sourceRoot":"","sources":["../src/workspace-instance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,WAAW,iBAAiB;IAE9B,EAAE,EAAE,MAAM,CAAC;IAGX,WAAW,EAAE,MAAM,CAAC;IAGpB,YAAY,EAAE,MAAM,CAAC;IAGrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,MAAM,EAAE,MAAM,CAAC;IAGf,MAAM,EAAE,MAAM,CAAC;IAGf,cAAc,EAAE,MAAM,CAAC;IAGvB,MAAM,EAAE,uBAAuB,CAAC;IAKhC,aAAa,CAAC,EAAE,8BAA8B,CAAC;IAG/C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC9B;AAGD,MAAM,WAAW,uBAAuB;IAEpC,KAAK,EAAE,sBAAsB,CAAC;IAG9B,UAAU,EAAE,2BAA2B,CAAC;IAGxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAGvC,IAAI,CAAC,EAAE,2BAA2B,CAAC;IAGnC,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,oBAAY,sBAAsB,GAG9B,SAAS,GAIT,WAAW,GAKX,SAAS,GAKT,UAAU,GAIV,cAAc,GAId,SAAS,GAIT,aAAa,GAGb,UAAU,GAGV,SAAS,CAAC;AAEd,MAAM,WAAW,2BAA2B;IAExC,MAAM,CAAC,EAAE,MAAM,CAAA;IAGf,OAAO,CAAC,EAAE,MAAM,CAAA;IAGhB,aAAa,CAAC,EAAE,OAAO,CAAA;IAGvB,aAAa,CAAC,EAAE,OAAO,CAAA;IAGvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAGD,oBAAY,cAAc,GAAG,YAAY,GAAG,UAAU,CAAC;AAGvD,oBAAY,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGlD,MAAM,WAAW,qBAAqB;IAElC,IAAI,EAAE,MAAM,CAAC;IAGb,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAG5B,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,2BAA2B;IAExC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAG3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAG7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAG1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAG5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAG3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAChC;AAGD,MAAM,WAAW,8BAA8B;IAG3C,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,YAAY,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAG3C,QAAQ,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"workspace-instance.d.ts","sourceRoot":"","sources":["../src/workspace-instance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAGvD,MAAM,WAAW,iBAAiB;IAE9B,EAAE,EAAE,MAAM,CAAC;IAGX,WAAW,EAAE,MAAM,CAAC;IAGpB,YAAY,EAAE,MAAM,CAAC;IAGrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,MAAM,EAAE,MAAM,CAAC;IAIf,MAAM,EAAE,MAAM,CAAC;IAIf,cAAc,EAAE,MAAM,CAAC;IAGvB,MAAM,EAAE,uBAAuB,CAAC;IAKhC,aAAa,CAAC,EAAE,8BAA8B,CAAC;IAG/C,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACnC;AAGD,MAAM,WAAW,uBAAuB;IAEpC,KAAK,EAAE,sBAAsB,CAAC;IAG9B,UAAU,EAAE,2BAA2B,CAAC;IAGxC,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,YAAY,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAGvC,IAAI,CAAC,EAAE,2BAA2B,CAAC;IAGnC,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAGD,oBAAY,sBAAsB,GAG5B,SAAS,GAIT,WAAW,GAKX,SAAS,GAKT,UAAU,GAIV,cAAc,GAId,SAAS,GAIT,aAAa,GAGb,UAAU,GAGV,SAAS,CAAC;AAEhB,MAAM,WAAW,2BAA2B;IAGxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAM3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAGD,oBAAY,cAAc,GAAG,YAAY,GAAG,UAAU,CAAC;AAGvD,oBAAY,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAGlD,MAAM,WAAW,qBAAqB;IAElC,IAAI,EAAE,MAAM,CAAC;IAGb,UAAU,CAAC,EAAE,cAAc,CAAC;IAG5B,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,2BAA2B;IAExC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAG3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAG1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAG3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AAGD,MAAM,WAAW,8BAA8B;IAG3C,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,YAAY,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAG3C,QAAQ,EAAE,MAAM,CAAC;IAGjB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,GAAG,CAAC,EAAE,iBAAiB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACtC"}
package/lib/wsready.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
2
+ * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
3
3
  * Licensed under the GNU Affero General Public License (AGPL).
4
4
  * See License-AGPL.txt in the project root for license information.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"wsready.d.ts","sourceRoot":"","sources":["../src/wsready.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,oBAAY,mBAAmB;IAC3B,uBAAuB,gBAAgB;IACvC,yBAAyB,kBAAkB;IAC3C,sBAAsB,eAAe;CACxC;AACD,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,mBAAmB,CAAA;CAC9B"}
1
+ {"version":3,"file":"wsready.d.ts","sourceRoot":"","sources":["../src/wsready.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,oBAAY,mBAAmB;IAC3B,uBAAuB,gBAAgB;IACvC,yBAAyB,kBAAkB;IAC3C,sBAAsB,eAAe;CACxC;AACD,MAAM,WAAW,qBAAqB;IAClC,MAAM,EAAE,mBAAmB,CAAC;CAC/B"}
package/lib/wsready.js CHANGED
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  /**
3
- * Copyright (c) 2020 Gitpod GmbH. All rights reserved.
3
+ * Copyright (c) 2022 Gitpod GmbH. All rights reserved.
4
4
  * Licensed under the GNU Affero General Public License (AGPL).
5
5
  * See License-AGPL.txt in the project root for license information.
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
8
  exports.WorkspaceInitSource = void 0;
9
- // generated using github.com/32leaves/bel on 2020-06-11 14:47:30.351829728 +0000 UTC m=+0.002956090
9
+ // generated using github.com/32leaves/bel on 2022-02-15 11:53:18.380158212 +0000 UTC m=+0.011913675
10
10
  // DO NOT MODIFY
11
11
  var WorkspaceInitSource;
12
12
  (function (WorkspaceInitSource) {
package/package.json CHANGED
@@ -1,40 +1,54 @@
1
1
  {
2
2
  "dependencies": {
3
+ "@types/react": "17.0.32",
3
4
  "ajv": "^6.5.4",
4
- "inversify": "^5.0.1",
5
- "jaeger-client": "3.17.2",
5
+ "analytics-node": "^4.0.1",
6
+ "cookie": "^0.4.2",
7
+ "inversify": "^5.1.1",
8
+ "jaeger-client": "^3.18.1",
6
9
  "js-yaml": "^3.10.0",
7
- "opentracing": "^0.14.4",
8
- "prom-client": "^10.2.0",
10
+ "opentracing": "^0.14.5",
11
+ "prom-client": "^13.2.0",
9
12
  "random-number-csprng": "^1.0.2",
10
- "reconnecting-websocket": "^4.2.0",
11
- "reflect-metadata": "^0.1.10",
12
- "uuid": "^3.3.3",
13
+ "react": "17.0.2",
14
+ "react-dom": "17.0.2",
15
+ "reconnecting-websocket": "^4.4.0",
16
+ "reflect-metadata": "^0.1.13",
17
+ "uuid": "^8.3.2",
18
+ "vscode-jsonrpc": "^5.0.1",
19
+ "vscode-languageserver-protocol": "3.16.0",
20
+ "vscode-languageserver-types": "3.16.0",
13
21
  "vscode-uri": "^1.0.1",
14
22
  "vscode-ws-jsonrpc": "^0.2.0",
15
- "ws": "^5.2.2"
23
+ "ws": "^7.4.6"
16
24
  },
17
25
  "devDependencies": {
18
- "@types/chai-subset": "^1.3.1",
26
+ "@types/analytics-node": "^3.1.5",
27
+ "@types/chai-subset": "^1.3.3",
28
+ "@types/cookie": "^0.4.1",
29
+ "@types/jaeger-client": "^3.18.3",
19
30
  "@types/js-yaml": "^3.10.1",
31
+ "@types/mocha": "^5.2.7",
32
+ "@types/node": "^16.11.6",
20
33
  "@types/random-number-csprng": "^1.0.0",
21
- "@types/uuid": "^3.4.5",
34
+ "@types/uuid": "^8.3.1",
22
35
  "@types/ws": "^5.1.2",
23
- "chai": "^4.1.2",
36
+ "chai": "^4.3.4",
24
37
  "chai-subset": "^1.6.0",
25
38
  "mocha": "^5.0.0",
26
39
  "mocha-typescript": "^1.1.11",
27
40
  "rimraf": "^2.6.2",
28
41
  "ts-node": "^9.0.0",
29
- "typescript": "^3.9.3",
30
- "typescript-json-schema": "^0.43.0",
42
+ "typescript": "~4.4.2",
43
+ "typescript-json-schema": "^0.50.1",
31
44
  "typescript-parser": "^2.6.1"
32
45
  },
33
46
  "files": [
34
47
  "lib",
35
48
  "data/*.json",
36
49
  "src",
37
- "pkg-yarn.lock"
50
+ "pkg-yarn.lock",
51
+ "provenance-bundle.jsonl"
38
52
  ],
39
53
  "license": "UNLICENSED",
40
54
  "main": "./lib/index.js",
@@ -43,9 +57,9 @@
43
57
  "build": "tsc",
44
58
  "clean": "rimraf lib",
45
59
  "prepare": "yarn run clean && yarn run build",
46
- "test": "mocha --opts mocha.opts '**/*.spec.ts'",
60
+ "test": "mocha --opts mocha.opts './**/*.spec.ts' --exclude './node_modules/**'",
47
61
  "watch": "leeway exec --package .:lib --transitive-dependencies --filter-type yarn --components --parallel -- tsc -w --preserveWatchOutput"
48
62
  },
49
63
  "types": "./lib/index.d.ts",
50
- "version": "0.1.5-patch-1.2"
51
- }
64
+ "version": "0.1.5-pavel-pvc-feat.0"
65
+ }
package/pkg-yarn.lock CHANGED
@@ -4,19 +4,27 @@
4
4
 
5
5
  "@gitpod/gitpod-protocol@0.1.5":
6
6
  version "0.1.5"
7
- resolved "file:///tmp/cache/9746bbf9b3720c4fc4f6640771a38edcca4df17e.tar.gz"
7
+ resolved "file:///tmp/cache/86bab343e75e844e0ab9d221b3e5bfba60481f90.tar.gz"
8
8
  dependencies:
9
+ "@types/react" "17.0.32"
9
10
  ajv "^6.5.4"
10
- inversify "^5.0.1"
11
- jaeger-client "3.17.2"
11
+ analytics-node "^4.0.1"
12
+ cookie "^0.4.2"
13
+ inversify "^5.1.1"
14
+ jaeger-client "^3.18.1"
12
15
  js-yaml "^3.10.0"
13
- opentracing "^0.14.4"
14
- prom-client "^10.2.0"
16
+ opentracing "^0.14.5"
17
+ prom-client "^13.2.0"
15
18
  random-number-csprng "^1.0.2"
16
- reconnecting-websocket "^4.2.0"
17
- reflect-metadata "^0.1.10"
18
- uuid "^3.3.3"
19
+ react "17.0.2"
20
+ react-dom "17.0.2"
21
+ reconnecting-websocket "^4.4.0"
22
+ reflect-metadata "^0.1.13"
23
+ uuid "^8.3.2"
24
+ vscode-jsonrpc "^5.0.1"
25
+ vscode-languageserver-protocol "3.16.0"
26
+ vscode-languageserver-types "3.16.0"
19
27
  vscode-uri "^1.0.1"
20
28
  vscode-ws-jsonrpc "^0.2.0"
21
- ws "^5.2.2"
29
+ ws "^7.4.6"
22
30
 
@@ -0,0 +1,2 @@
1
+ {"payloadType":"application/vnd.in-toto+json","payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YwLjEiLAogICJwcmVkaWNhdGVUeXBlIjogImh0dHBzOi8vc2xzYS5kZXYvcHJvdmVuYW5jZS92MC4xIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90eXBpbmdzL2dsb2JhbHMuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZjM1NDUyMGUxMzQ2ZDg2NzRjY2Y4NTEwNjk1NDU3OTllMDRiY2QzMjUzNjk4NGQwNDI0MDRmODIyMjE0MjJmOCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hY2NvdW50aW5nLXByb3RvY29sLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjZhYzhkNDdlZjZkNDY3MjJlOWRhZGNmNmE4YTc2NTUwYjNlYWYxNjQ5ZGQ0OWYxNWM4NmE5YzU1ZmJhNTIzYzQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9ncnBjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQwZGE3NjNhNDFlMThkNTA1M2U2ODg1ZGJiMjE5MjUxZDY2NDU2ZDdkYzFlOWI1YjMyN2Y1M2I2OTBiNjlhMjkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90cmFjaW5nLnNwZWMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImE3ZmQwMjkzZDUyYTFhMjkwZmQ3NzJhMmI3N2VkNmM3YjhlMmZmNGI3Y2Y1NTA0YTMxNDEwM2ExMWUwMGZjOTYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcGVybWlzc2lvbi5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNDkzOTQwZWRlZGNjYmZjNGEzNGY4M2EzOTBjNmVhMDRlMDQ2OTFjOTU5OWJjMzIwYjE1N2EyN2RjMTkyZTI2ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbWFpbC1wcm90b2NvbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkM2EyMWM2ZDBiMzg2NmQ1MGQ3MTU3NTVhZjMxOTJiNWI5Mzk5OGFiYzY3N2E0MTY3ZGRjM2NkNGExN2QxOGQzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2xpY2Vuc2UtcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMzlkMjkyZGRiNDdmNmY3MDc0ZjY2ODJhODU2MTMxOGU5ZWMyNWMzZjU1NGJlOGFmYjU0ODA2MzhjNzY5ZjhhYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RpbWV1dGlsLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjI0ODg1YzQyNzZkZTE1YTdkMzJmZmRjZjM0NGU2YTI0MTNiOTkxZDQwMzlkNGEzYzg3ZmJkODk5N2NhMTJkZmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9xdWV1ZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjEzMDM5ZTVmZWExOTAyOTEwNjA1YTM2Y2IyZjVkM2FmMDRlMGU3ZTUwMzM2OTJlM2QxZDllZmE1NzM1ZWNmMyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RyYWNpbmcuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjE4NjkyZjM2YWQzYTExMDkzOGNiMGRhZTY3NzQ5NjE3ZGRjMmFkNTdkZjNlM2Y3ODE1ZDNlNjE5YmUxMmU2MmUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd29ya3NwYWNlLWNsdXN0ZXIuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY1YmYzYzJiYjA2ZjI5ZWE5YmQ4ODIxMTg3MGUxNzcyYzUwNWVlZjgyNjY5NmYyZTY2Y2NhMGYzYzI0M2E4MTkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9xdWV1ZS5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkODRjYWY3OWVmYzc5OTI0ZDRkYjVmZGZkNjBmYzk5Y2ExZmM3MGYyM2VmYjE4NjY1MzFiMWJiZDRhYzE3OWYxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL29zcy1hbGxvd2xpc3QuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjkxMDAyYWUzNGRmMjEzMWY2MDNkZWMyZmMxMzM5Njg5Nzk1YTEwYjdhYWE0ZWY2NzRlYjI4ZGVlN2UxYjNkMWIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2Vycm9yLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImVhODQ4YThjNGNiMjlkMzdhYWE5Yzk4NmY1MTRkYWYwNmJkZWY2NDQzNzUwOGJhNjhhOTRjNDE4MTE4NzY0ZTYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd3NyZWFkeS5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJjMWVmNDFjY2FjMzkxZGI5YzZkYjQxMDU2MWVmMDJhYzE1YzI4NDU4YzJlMTY2MTA0MDRhOWI0OThiZjA2ZWViIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2hlYWRsZXNzLXdvcmtzcGFjZS1sb2cuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQ1YjdhMDM4ODdhMGM0ZGQ0ZjU0Y2MxNDg3NmNiZGZkNTA5NThkZmQ1NDBiMThjZjdkNjhhYWJjZDdlZjY0MjIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtY29va2llLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhYmI1YWU1OTk4OGUzNTMwOWMzZTRkYmJhMjdmZmM4YzIzMGY5YjlkZDEzYTJhYzlkZmU1ZTJjZjFlZGJmMDM4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2NvbnRleHQtdXJsLnNwZWMuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNTQ5MjZjZjNkMDk4N2Y0M2NiNDc0M2YxYmQxMzE0ZWI1OTJkNDhjZTEzNDhkNmJmMjgyMzUzYzcwMWJiYWVhMCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9naXRwb2Qtc2VydmljZS5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyMjQ5OGFkZDIyMmQxMjA2YzA4ZTU2YzQ5ZmNhYmZmNDJlOGE4NzVjODJlNWIwMmQ4Y2E3YjQyNDI1NDg4N2E5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2FyYmFnZS1jb2xsZWN0ZWQtY2FjaGUuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc5YjMzNzUwYmY2NmU3MDc5NjA3NDdiMjkxMjgxODcyZTZlZTk2YmU0NzM2N2VkZTIzMWY0M2I1Mzc4NGRkNDYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdGVhbS1zdWJzY3JpcHRpb24tcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjA2NDg3ZjAzNDJhMGE1YTM3NTlmODM5YWVhMzQ5Yzc3MWNkNzgzNWViMmRkNGFiOTEwODU5ZDgxYTdiMjYyNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvYnJvd3Nlci9jb25uZWN0aW9uLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjAxZmFmN2E3MDlhOWE4MmI4NWFmYmM2MDc0NGFlYmRiNWM1YzkyZDlmOWUwODQ5NmJjNDZlMDVhNTdlOTRjMmYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9lbmNyeXB0aW9uLXNlcnZpY2UuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODVlYjM4YzIxZjBhN2I5ZmMzZmJkNzE3ZjdhYWFlOWFmODYwZTdlNjA4MjBlZDA1ZmQ2ODMyNzUyYTI3M2QwZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90ZWFtcy1wcm9qZWN0cy1wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjNhMTAzOTQ4MzAyYjI2MmFlZTE0YjVjMDJiYTk4Yzk4YTVkYmJhMTBmNjIzZGQzYTU2ZGU3NGM1YTZkODk0NjciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kYXRlLXRpbWUuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBiMmQzYmZkZTk5NDU4Mjc5MmNiZGQ3M2QyNGU5M2RhOWEzYjczYTExZWY4ZjUzNTY3NWQ0Mzk2MGFhNjBmYmMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9jb250YWluZXItbW9kdWxlLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMzhhNjk3YjRkYmRiNWYxYWE4NTg5NmMxNTdkMjRjZTBkNWQxMTVjNzRmNGFkOGFmNzEyOGQ0M2IwZDU2YTU3OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wbGFucy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4ZGRjMDc0YWFlOGU0N2NjNTI2ZjcxN2JhNjgyNGU3ZGU0NTM3OWE3NTQ5OGM2MGU4Y2QxYjA4NGZiZmE2MmZjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2FyYmFnZS1jb2xsZWN0ZWQtY2FjaGUuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5OTU5MGFjMzVhZDQxMzliMzRiOTRmMmU1NGFmNzM4MGMzYTgzYjQxMDlhMTM5MWRjOTliMDhmZmJjZDU1MTA2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3NuYXBzaG90LXVybC5zcGVjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImMyZjU2ZWUwYzc1MzljMzlmNjk3MWVlOWZhODFjMDQ1MGRmZjQ0YWEzZjAxZDY2NmM4YWQ2MjI5YmRmMzM0NjUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvb3NzLWFsbG93bGlzdC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2NzdlOTNkM2NmZTQwMzgyNGJlOTFiNTRhMTAyMTBkZjNkNjE5NWFkYzQyZmUwZDBjZWQ2OWZlYTg1NjE5MWFkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvY2FuY2VsYWJsZS5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyYWE4NjllZDM5ODBiNmEwZjdjYzk3MjA3Y2U5MWYyOWY3Y2RjMmUzNzcyNmIzYjU3MTdkMGY2MmMyZTEwNTE4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3BheW1lbnQtcHJvdG9jb2wuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjc3YzNhZmUzNGViZWRhYzMyNTQ5YzQxMWRhZTAwMTJjYzg4YjIzY2JmNjk4MWUzNDExNjUwMDI2NzcyZmViZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3NraXAtaWYuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjM0OTlhNDcxOGI3MWU1ZjE4NzU4YzY0ODhhMmQzYTVmZmRkYjE3ODdkMzdhYmQ5ZDFiN2I3NDZjZTBhMDdjYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dlbmVyYXRlLXdvcmtzcGFjZS1pZC5zcGVjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc1Zjk1MzYyYTBhMWVhOTQzNWE4NTcwODgzYjgyYWExYmVlMGYyNmU4MjFhZGNiZWQyM2UxMzY0NzM3ZDk4MmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYW5hbHl0aWNzLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImU5ZjUyNGIzOGU5MzU3NDNlMWFhNzc0NTBkYmMyYzM2YjFhMWNlZGQwNjQ1ZWFiOGVmNmFjNzdmMjhiNDgzNTkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9hc3luYy1pdGVyYXRvci5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjdhMDU2NGUwNTMzNjViZjFkMmNlYjFjNjdiM2RjYTU0NTYzNjExOWIzY2U1NWNmMjc4Yjc1ZDllMGZlMWRiMDciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd3NyZWFkeS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNmU4ODdmYTM2OWY4ZDY4NTU1YzNhNWYyZWJlNjgxMjBjYTdkMzUyZDMzYWU3NmRhYTZjOWI4OTEwMGYyMDJmMiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvbm9kZS9jb25uZWN0aW9uLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImZmYmQ3OGQzZjFlYmZhNTZmYzg5OGRiNWE3MjM4ZTIyMzhiMTY3NmUzMWNmZDQzOGE4ZmU1ZjA1YjA5ZjI2ZmMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZ2l0cG9kLXNlcnZpY2UuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5MWQyM2EwM2EwODRjNGE2YjgwNmY1OGYxMjgzZDcwYWM1ZTA3YTRlNzY5ZDJiMmM5NzYyMTc1MjQzZmU2MjAzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2FyYmFnZS1jb2xsZWN0ZWQtY2FjaGUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMzRlYWM4ZWEyMGFhNTU2NDcyOTE0YjdkYWJiMWY1YWQxNzFiNDMyZjE4OTk1OTQ4M2I5NGZjMjY2NGQxNTE2ZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvcHJveHktZmFjdG9yeS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYjg2MmE2NjI1YmI2MDFkMThiNjUyNWZhZDhiZjc4MzI2NTUyMjJiYzE5NThlZmM1OWM1YjFhNWEwYWQ4NjE4MyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3dvcmtzcGFjZS1wb3J0LWF1dGhlbnRpY2F0aW9uLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2YWI4OTIzYTQxZDU1ZWQ2NjIwZmM3YTIzYzQxOTlkYzViMzg5OTkwODI0ZmY0MjczNjYyODZlODdlYTc5OGZjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvYXN5bmMtaXRlcmF0b3IuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTEzYjBlNjU5NWI0YzBmOTVjNTM4YjE1ZjU1YzUyMmY0MTg0MmY2MWE0OGVmZjg4NWQ0YzgwOWRiYTk3MDg4MiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9vc3MtYWxsb3dsaXN0LmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYmQyYzc1MWFlN2ExODFlYWYzZmRlMzlkODNiNWQ2ZWYxYTkxNTliMjAwNGQwNTMzOWQzN2U1OTA3YjM2MTYxZSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2NvbnRhaW5lci1tb2R1bGUuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYmRlYzIyODg0ZmNiZTEyZWU0ODNkOTNjZWQyMmUyYjk4YmU2MTNhNWYwOWY3NjI1Zjc2MTMxNzUxZTIzMjk1OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2V2ZW50LmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhNTg1ZDIwYTQ3YTJiZjA5OGI0ZGNhMjVmNDBmNmVlODk1ZTEyZGU2MzNjYzI0ZjgxYTI5OWI1MmVmMTViZmMxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3BheW1lbnQtcHJvdG9jb2wuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY4YjQ2YjdlODlmYmRjZWNlYjdiY2YzOWQwNGMwMWIyNGNlM2YwMTEzYTAxNmVhYThmYzIwMDU1NzQwNmJlNWQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdHlwaW5ncy9nbG9iYWxzLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzZDY3MTkyMDdiZjlhODk2NDQ5N2NjZjg0NWY0Yjk5NWY3MTIxNmYyZTc3ODRlOTYwMmViZjVmMzQ5ZTY0YmQwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3Byb3RvY29sLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjg5OTkyNDY5MWQwNjYzMTBhYTBjYmU1Y2RkYWRjNWVlZTg1NmNkNTYzNDI0MjE3OTU4NmMwZDliY2ZlYzM0ZDUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9wYXJzZS13b3Jrc3BhY2UtaWQuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxMjY1ZjY4MzMzZWI0Mjg3MmYyYTI0NjRlMDE2NGRlNWJmOGZmYzQ0NjFkYTNlYzFhMTlkYTQ1NDllNDcyMjZhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vY29udGFpbmVyLW1vZHVsZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTRmZDExZjE3MzIwNmE2YzE5Yjc2NWQ4ZjQ4ZDE0M2M1MDVhOGNkNzNiMGMzZDA5NTY4MGI4NGQ3ZjhmNzcxYyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9zbmFwc2hvdC11cmwuc3BlYy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQwNTM0ZDU1ODllNWZiNzg1N2U4NDU0ZTI2MzY3OTY0Y2Y4MDEzODZkMWZiOGZjMDUxNWNlMmU0MWIxMDllOGUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2Jyb3dzZXIvY29ubmVjdGlvbi5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2ZjQ4MjY2ODEyNjFkYWYwMTBmZDMxOThkYzMxNDRiODZhM2RjYWYzNjE0ODU1NDViY2Y1NWViYzk5YWJlNzgxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdHJhY2luZy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBkYTVjMTJiNGY3ZDBmYzdkMjhiMmEwYTYwN2Q0MjRjOTY0YTUyZTc5NjRmOTJkMjk3OTU3ZDllNWI1NDZjMTEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9xdWV1ZS5zcGVjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQzZTZmYzIxNDE4MzJlZmJkZTFiMDlhODY3NDg3Njc1NWMxODI0MjhjNTlmNWM0ZDBmNDM0NTMxNDQ0NTlmNmMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaGVhZGxlc3Mtd29ya3NwYWNlLWxvZy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBhMWJhYmJkZTEwOWNmMjA1ZGFmODA0NDlkMTU0YWU1Y2Y1NGU2ZWExNjU5MTRkNjZmMGQ2YzY0NWM2ZmE4NmQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2Jyb3dzZXIvY29ubmVjdGlvbi5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZWRjZDQ2NWFjODNkMTIwYjdlMTYxZjdkY2JjOGY2ZGUzZjcxYzhhZWFiMGI2NDczM2FmMzkxY2IxYTk4MWExYyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3JlcGVhdC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTYzOTY1MWZlZjA4YTYxYzY3ZGQwYjkwZDQ3YTVkMTQwMTQ5YzM0YTI1NjNlYTVkYjBlNWVjZjU3MDI1YmExNCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2phZWdlci1jbGllbnQtdHlwZXMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjlkODc1YTNjNmY0OTdlZDFmOWUzYjk4MDAxOTQ1ZjhiZDE5N2IxOTk5ZmI2YWQ4N2UxNzlkNDc3ZDIyZmQ3ODEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9tYWtlLWxpbmsuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTk5OTlmNGU2ZmFmMGFmN2MzNGZlNDlhZDQ0NDQyZTkwOWY2MTVjMmRhMTVmYTk1MGRmMWQ1M2ZhM2M2YjAyNyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2VuY3J5cHRpb24tZW5naW5lLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImJhMzk2NGIzMzE3NzcxYzBhMTk5MGZjNTdhZjlmYmZmM2JmMmQ2Njk1NzgyNDk1MjE2YjQxZTMwOTI4YWFlNTYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdGVhbXMtcHJvamVjdHMtcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNTNiZjYzYmNlZjczZWJmZDY5NTA2MWQ2ODRiYzdjYTM4MDA0NjhhZTllNjA0NjY4NWViNGNhYjc4MGI4ZTRiNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbnYuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjgwNGM0YWM0NWE1MzZjNDRmNWE2NjY0ZmI5NTQxZTk1MmQ3MjAwYTgwZDYyN2E4ZmRjNmQ4YzZkZjM4MzBkMGIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbGljZW5zZS1wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjE0YjVlZmI4OGI2YmFjYWEwMzExNjQ0NTAyYzg3ZWZlNTA0NDhmZTczNmVjMjJjNDQ3NmQ2MWM2MTYxZDljZGUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kYXRlLXRpbWUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNjg3OGJlYjBmN2NlZjJmYTg5MjY2NTVlNWM1OTkwYzA5YTZiOWM4MGMwNDE2NjEwMjRiYjBiMGJmMjJjOGExOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9oZWFkbGVzcy13b3Jrc3BhY2UtbG9nLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjdjNGFiMTY3OWVhY2ZjMjg2ZTlmNGI0NDExMzYyYzYxZWVkMmIxOTBkOTliYWRjYmZkMGU1MjVkNGRhMmIzYmUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9lbmNyeXB0aW9uLWVuZ2luZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMWQ2M2UwMWE0NGM5NmZhYWQ5NTFhNDRlN2YzZDAzMzIxNTY2MzcxNDY4NzYzZmVjYzg2YWQ4YzU4MjhkN2U3NCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9jb250ZXh0LXVybC5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTFjNGY3MmRhYzY3YzRjZWY4NTI0Mjc4MWM5MThkM2RmNDMyMGNlYTIwNmFlZDcxOGYxZTZjMWQ0ZjBlNjAyMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3JlcGVhdC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4NzAyZjQ4OTIwZTkxYTIxZWNlYWY5MzNlNzMxNTNkYTUxMTBmYzI3YTY5M2VlYTUwMmFkNmI4OTIxZjBkYTliIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vZW5jcnlwdGlvbi1zZXJ2aWNlLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQyZWQwMGI4OTgyNjkxNTgyZWJlODk5ZWExYTg2YzM4Y2ZhOWNiM2YzYTU5ZTFhYWMyMzg5NDQ0NmY5YmZlYzgiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9ldmVudC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4ZmIwYmUwYzJkZDYzMWRjYzI5ZWQ3MmQwZWY4ODExOTg0MDA0YmNjZDExOWZlNmEyNDVkYTQ5NDA1NTBhNzUzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1maWxlLXBhcnNlci5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzY4YWUxMjAwNTk4MTllMGVjNmZmM2E0ODdmODQ4MzhhOTZiZmM3MWU3OTBjZWRmZGM3ZTJlOTIzN2Q5NTZjZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RpbWV1dGlsLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNDA4MTVjOGVjMTc1MGE4NmRhZjllMDk0M2VkM2QzMzFiMDkxMjlhMWQyZTdmZmZmNTkyYzk5ODUyMjhiNjVkNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wZXJtaXNzaW9uLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZThmOTUwMDBhOTRlMzk2OTgxMGZiMDA0ZWE5NTRlNjNlZjUxMDAzODE0MWM0ZGFlMGRhMTQ2NDlmMmNiMjE1NCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9naXRwb2Qtc2VydmljZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZmFkYjliOTZiOGY5MjQzYTYxMjA5M2FkZDA2NDc1OGNhYzJkMDg1NjA4OGEzMWUzMmE3ZjZjNjI3YmE3OGQ5NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9zbmFwc2hvdC11cmwuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNDg2OGVhMjliZjljNmFjOWFmNDE5YmE0ZTVlMTg4Zjk4ZWU3YTI3NjE0MjMzODU3MzJjMDZhYzEyYTAxYTdjMCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9jb250ZXh0LXVybC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkN2EzYWFkNGY5YTJjMTVjODEyNDZjMDFjMDY5MWU1OTMzYTliY2JjNjcxYmY1ODg2NDA1NjRkODI0NWNiZWQyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3RlYW1zLXByb2plY3RzLXByb3RvY29sLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImRmOTIxMTRkN2RlZTYxZTU2ZjRmZGFiZDkyYmUyOGI0NjlkN2ExMGNlODFlNjQyZDNjZTRmNTI1NTJjOGY2MmYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZ2l0cG9kLWZpbGUtcGFyc2VyLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODU5ZTlkZGJkZjQ1ODc4YWQzZTJjMWZhMTgxYzAwZjU3ZjJlOTk4ZTFhZDEyYTU0NDRhNTkxNGNkYjNlMmIzMCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2tleS1wcm92aWRlci5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNWIyYTQ5MjhlNDA0NzBlZDBhYTdhNTRjNjBhMWRiOGU4OWFkYzUzMzA0ODIwZjIyY2FmNGM5Y2NkZDE5NjY0YSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvYnJvd3Nlci93aW5kb3ctY29ubmVjdGlvbi5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIwZWJhMmM1NjA2YTk1NTk2ZmQwMjE0ZDg1MzIzM2RiZmI3YTRlNDM1Y2UwY2NmODZlNWJkNjA4Y2E3ZDQ0MjExIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9jbGllbnQtY2FsbC1tZXRyaWNzLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImU0NTEzMDk2MzdlM2Q3MDFkYjA4ZmM4YjU5ZDhhZmZhZjk5ZmFiMWM0ZTZjMzBlNWRmYWI3MDUwYzNlMTAzOGMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kaXNwb3NhYmxlLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkZjBkNzk3NGRhZjMyNTFhNDUwNjY2NTc1OTlhMDY0MTllYjBkZTU2ZTcwMTkxZTRkMzVhNTQwMWJiNTVkNjY0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24vZW5jcnlwdGlvbi1lbmdpbmUuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2MDEwMzlkZGJiNzZmMmI2OWJhMjQ5YzEyNTIxYWIyOWU0N2FhOTkyYzhlYjA1ZWIwZTE3NzMxNTdlOWY4OTg3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2l0cG9kLWNvb2tpZS5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyNDcxZmYxNTRmNWNiOTFlM2E1OThmZmQ1YWMzNjFhMTcxNmZjNzBjOGJmZDkwMTJkNWQxOTI0YzUyYzM0OWQ0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2luc3RhbGxhdGlvbi1hZG1pbi1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZWU0YTg5MjYyN2VjYTkwYjE0YTc5MzU1YjE1Y2RiNDQxYWYwODcyNmVjOWU2NzNmNTk2NDI0YjUzNzZmMjJmNiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2FuYWx5dGljcy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc0NDI0NzlmYTUzMTZlZmY2MDk2OTU2OTc3NmM3ZjE3N2VhYmE3MDAwNzA4ZTFhOGViY2VjMGI0YzFmOWZkNTEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9kZWZlcnJlZC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNTIyYzRmMTczNjc5NWMwMDM2MDRhNWViZmU0MjQ1YWY0NWEyNzc3YmQ1YmI5Njk1MWRkMzA5NjBkOGEzNzQ1ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pbmRleC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2YTlhYjlkNzZmZjRhODg5NzgyNjcxYzdmMmNkOWQwZThjMDIxOTVlMzc2YTYxN2I0ZTY5MDM1NDE3MzdhNDI4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvc2tpcC1pZi5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2NzUzNjViNDI5M2M3NzQzY2E1NGZhNDg0YjA2ZGViNjc3YjVmZGI1ZGNjNGI4Y2Q2OGRlYTE2NjZhNmMzMjFhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvY2FuY2VsYWJsZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDUzYjA3MmNkYmQ5MjIzOTU0ZGQ1ZmRhOTJkOTJjOTlmODA5OWQ4ZWFlNTBjZmE2YzRiZjJkYWFkZDA2MWEwYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wYXltZW50LXByb3RvY29sLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNWM4YTM5MDczZjZkZWY5ZmYyOWYyMGUwZjljMWQ2NGNjM2YxMTg1YTUxN2Y2YjAzNmY2NGJlMThjZTc3NWQzNCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbWFpbC1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWM1YTJiYzE1MjRhYzFlOTY5MzhmMjQ1ZDhmNzBmOTJmZTMwYWZjZjJhZTJiYmE4NjNlMzQwZWU5NTkwNGQyNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dlbmVyYXRlLXdvcmtzcGFjZS1pZC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1NzdiMzEwMWY2MzdjODNkZmZiYzQzNWRjZTU1NzMxYjUwNzE5NDVmZWU0MjAxNzc4MmZjNDZmZmNmNjhkYjIxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGlzcG9zYWJsZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQ4MDhmZDI3ODEwZGNhNmY5YjA2NDU2YmYxMzBlZTBlYjFlMjcyNjJmNmNhMGI2MzRmMmQ1MmE1Njc2ZWI3NmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvc25hcHNob3QtdXJsLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjk4Y2RlNTc1ZGQ3ZjE4MTE0MDM0OWIyMTUxOTcxOWRjZTNmZGIxMWI2MWMyNDg5NjcxMTE4MzBkNDlhYjE2M2EiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbGljZW5zZS1wcm90b2NvbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmNGVhZjA5ZTI1Y2RiNDYwMzljZmQwNmY2Y2ExMWY5M2FmMDdjYmZmYjZjM2Y2ZmY5YTk1NDg5NjVhY2UwNDYyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2l0cG9kLWhvc3QtdXJsLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjEzYWQ5MDNmOTg5ZTk4OTg4ZWY3YzU1ZjBhYjQ4MzVkOGE4ODEwZTMzZGQ1ZTgxNmFhYjU0MTIxMjUyNDkxODciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9ldmVudC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzYTZiYzQyNjUzYjMwMjc0Zjk1NDlkODViMDFkNmY5ZDEzZjc4YTZkNjI5ZWVkZDc4NTkzY2E0YzUzYzczNWExIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGF0ZS10aW1lLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNmE0MmFlYjU3M2ExNmM0YWRmZTAzM2JjYTkxZTZhMmQyMmU2NTM0Y2JhMGQ4ZTFjMWM0NzRmYzg2NmI3YWNkOCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pZGUtcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzE1ZWFlOTE4YzJmNjVlYzlkOGIwYTNjMTA1ZmQ0NDY1ZTcyZjk3NGUzODcwODg0NTE3NzM2YjBlODZjOTE3NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9naXRwb2QtZmlsZS1wYXJzZXIuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2NDJjMmNiZDFjYzNiMGM1ZmQwMGM4MTg4NzMyMWViNzkzZTRjMTZhNjMwZTY4YzIyZGNkMGMxZjZkNjNiZGE3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1maWxlLXBhcnNlci5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjkzMTE5ODI0MDQ3ZmEzNjliMmI4Y2U2MGFiYjMxZjVkZjYxZDc4MDgxNDU4ODU1YmY0ODM4MzZhYjRkZmEwZDciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaWRlLWZyb250ZW5kLXNlcnZpY2UuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2E0NWUyNWE1ZDFjZWQwOWVmMWI1OGU0YThkOGE5ZTIyMGJlNjRmNDVhZWJjMzEyOGI1NTRkYTRjNDMwODhmMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hbmFseXRpY3MuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyYTZkMDJmNjJhMGRiNzA1OTAzMGRhYzc3NGUxMGY1NzczNWQ4M2RjNzAyMWU5NzdlNTg1NGQwMGFmY2IyMzczIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGVlcC1wYXJ0aWFsLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjA1ZTY4MTEzODI3MDUxY2RkOTE5NTdkMjlhZTYzYTgxZWQwZTg0N2JhODkxOWM3YmY4Zjk3ZTliZjY5YTBkNGEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYXV0aC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJjMmRkNjcwNTY0YzA0MmVlMDNmYTgwMmIwYTdlM2RiMzZhMzgwMWIzN2RhZjNjMDg1MTI4MGIzNWI3MTg5MmNhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24va2V5LXByb3ZpZGVyLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjI4NjYxYjY1NTUyZjdiYzJkZWJiZTU1MzBjMTg4MTMxOWRmMzk4YWQ5MjBjZjI4ZGRhZGUyYzA1NDIyYzA2YzkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9nZW5lcmF0ZS13b3Jrc3BhY2UtaWQuc3BlYy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImJkZWE2N2FjZWNhMjc0ZWI0YTQ1ZjE0ODYyZmEzMzE3MTQyYTdmMzYxZWNlOWEwNTJmNGQ4OGY1NzY4NjMxYzUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90aW1ldXRpbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjU3YzcyZWZkMTVjZWU4OTliNGY0NjI4NzM5NDhjZTdkODlhYzIzZGQ0M2FkY2NlYzM5ZGEwZTcwNzkxMjM1MmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvc25hcHNob3QtdXJsLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiOGJjODRmNTE1MTNiNDUxMTc1OWUyNzg0NTYzNDAxY2NjOTc2Mjk1ZTk3NTRjOGNmNTA0ZGM4NTA4NzIwNjFiMiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2xvZ2dpbmcuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNjY2ZWUwYTAzOWFjNTgzOGEyNTlkODM1NDQwMDkxOWNkMDRlMGVhODIxYWU5NDBmYzNhMmM2ZDljMDBkMWRmNyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvbm9kZS9jb25uZWN0aW9uLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJjM2VkZjFlYmUwNWQzZTBiMzAzZTcwMTAzNzhiZWFhZTdkZjdjMTUwMjgxZjk5ZDk4NGFiNzliM2EyNmE3YWNhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZXZlbnQuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5OTE1NzI0Yzg4NDQ0Zjc4NDA5ZmI4ZDhiZjNmOTg4ZjU2YWNiN2M0YmUyNzVmZjhjMzEyYjFkMjc4NmEwZTIzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2l0cG9kLWhvc3QtdXJsLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBjM2I2M2RjZTJkZmI5YWNjOTI4NzAwMTkzMDRkMDZkNzE5YzVlY2M1NzdkNmVkY2MzZmJkY2FjYTc3ZjVkZjciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaW5kZXguZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2NTJlZmFkZjU2YTVlZGQ3ZmM4MmVlYjk4MzQyYWQyZmIwNmZmMWM2OGVhOGNlMzIxYjE1OGIzMWNiOTJkZmQxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2FjY291bnRpbmctcHJvdG9jb2wuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTNlOTA3YTM4M2MxYzM5ODc2NzAyMWVmYjViZjFjMzc4MTc0MDI0NGU3MjJjZmI4NjMxYTVmNWFkYjUxYTcxYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2VuY3J5cHRpb24tZW5naW5lLnNwZWMuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmYjcwZGI4NThkZTU3NDYzMGZiNTU4MDFlMzQwMzIxOTUxM2EzMDk0YTNlZjBjZDkzMDg0OTM4MzFjZTM0ZDZmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3dzcmVhZHkuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNGIxOTUzOTU1ZWQxNjc1OWYwMjYxYjBlODJkYTNmM2YyYjZlYWFjMDYyZjU0OGFiYzlkNzkxYTJhNTJlYzQyOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hdXRoLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyODg5MjExNmMyMjYyMDYyYjllOWMzMjQwMGQ3YzhhYWViNzZkNjI3ZTg3OTQ5Zjg1NTRhZjhlZjBmN2ZlY2RjIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2luZGV4LmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4OGNiNTU5Zjc3NjBhOTk2NzE5YTkyMmIwMmEzZGI1YzE0ZDlkN2I0OWVhZTNkNzhmYzk2M2JmNmI5ODRhNWIxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24va2V5LXByb3ZpZGVyLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImViNTIxZTRjNzZmNjVjZjQxZGQ4OTkzZWU2NDNjMjRhOTZiNzAzMDM2ZTM3NzAwNzY5YTA2YzMzMjA5ZDY3NDciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaWRlLXByb3RvY29sLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2NWRiYTdiZTE4ZDAxZThmNGU3ZjdjNmJiMDE1NzI0N2IxZWRkNjhhZDY3YzA3MjJhNThjMGU1ZGVjOTE3YzVmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvY2FuY2VsYWJsZS5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmM2JhY2I2ODJjOTBjZjgwZWVhMjJlZWI4NzQyOTA5OTEwMzM1MGNiM2U2ZWU5YWRjMzlmYzEwNTk4NTM4YTliIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2VuZXJhdGUtd29ya3NwYWNlLWlkLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImFjM2YxYTljZTJiNTlmYmYxYmU0YzYwOWNkM2E4OWE4ZWU3ZjVlZjk3Y2MxZDA4M2Q2MDdhZTljY2I5NzA1Y2MiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9nZW5lcmF0ZS13b3Jrc3BhY2UtaWQuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODhhZDVlZTRjNDMwMDFlMTQ5NDFjYmRkMDM0MzI3NjcxYTk3NjdiZjU4ZTVmNWFiYjlkMzkzZDM2MTEyYjBhNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hbmFseXRpY3MuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDIwMmViMGEzMmMwMmU4OGIzY2I5ZTNjMjc2MDU2NDg0OTlkY2I4MGQxNGMwMTVkNDBkNDAyNDcxMDE3ZTRhMCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvY2xpZW50LWNhbGwtbWV0cmljcy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYzJlMTIxMjJlZDZkODQwODgxYTA4MjVlNzNiZjVkYzYxOWY0ZTI1ZDg2ZTNkMTQyMTE1NjgzNTFlM2IxYjdiNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RlZmVycmVkLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjk0M2RlMTU1MjAxMTE1OTE3MmRiZDUxZDRiOWJkMzYwY2Q1M2VlYTYwY2QxYWQwNTEyZTA0MGQxZTRkNTJmOWIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZ2l0cG9kLWZpbGUtcGFyc2VyLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0YmRjNmE3OThhNWZjZTNlNzQwMWFiYWEzZTYwZTgwNjdlNTc4MWU5NjY3ZjdlYWI4NmM0NjBjYzE0MDNlNGJkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGVlcC1wYXJ0aWFsLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkMWUwMTJhNzFiZjJmZGYwYjhlZDViYzA0YTQ0ZGE5Mjk2ZTg4YTM3YTAzOWFiNDc5Y2Q4ZWI2ZDMzMjk4ZjY3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcGFyc2Utd29ya3NwYWNlLWlkLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjAyYjUyZDg1ZGFkMWVmOGU5MDEyM2Y3OWE5N2EzZGM1YmI3ZmMyYTZiZTJiMzc1M2U1MmRhMzhiNmVlNDBiN2QiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYXV0aC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjViMzk4ZGU0OWNiNGRkMjVlZDIzNzM2ODMzMWQ3YzQyNWRiNTBjYjhlNmFkYmQ4MjhlZTNmMWYwYzAxM2VjNDkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9sb2dnaW5nLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIwZDQ3NzliZWJhYjhmZmNkYzg5NmJiZjg4MzBkNDA4ZDRlMTI5MGJmOGU2NTE1MzVmYWE0YzBiZmI5Mzk0NTkwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2lkZS1wcm90b2NvbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI5Nzc3ZmJlZjg3NzQyMDZlNzUzMzZmMWY4ZjZmZjlmZGYyOTFiNTMxMTA1NWViNTI2YWFmYWMyYjVjZWUyM2FkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3RlYW0tc3Vic2NyaXB0aW9uLXByb3RvY29sLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzZDdiYzcxZDIxYmViYTkzZTQ1OWI3MjY5ZWU1NDJiYmViNDY3Mzc3YTc0Yjk3ZGJkOTFkMTQ0ZjRiNzg2ZWE4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvc2tpcC1pZi5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjgwNDUwZWM0YjBlMTFmMTBhNjg3NzhkMTdkZTE5Mzg0OWMwMWZmNDkzZGE4YTUzYjQwNTAzNTU2NjBiYjE2ODgiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9hc3luYy1pdGVyYXRvci5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTc2NjUzYzQwYjAwMWZkZTU4YTU5ZDJiMjkyYTRkY2FkNWQxMWRkYzQwZjMyN2RjN2UzMGVhZGZjYjhjODhlMyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9oZWFkbGVzcy13b3Jrc3BhY2UtbG9nLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjcwOTc0MDdiMzg3YjQyM2E5MTg5ZTBmY2U3NDI5OTc2OTAwMmJiNWI3ZDM1ZGNhNGRjNmMzYzViMWU3NzE2MmYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaWRlLWZyb250ZW5kLXNlcnZpY2UuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjcwOWIyY2Q0MDdkNzM0MDRlNWJiNzU3ZjM0YTUyMTFlOTM5ODc4YjQ0ZGEyZGY5NDIyZmVhYTg2NWFlYWI1OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pbnN0YWxsYXRpb24tYWRtaW4tcHJvdG9jb2wuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzc4OGYyMzEwNjAzOGM1ZjM5N2RiZjRjM2ZjZjY5YTUzZWJjMTkzYTM2YzhkODcxNzRjMzdhNWY0ZTI1ZDQxYyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dpdHBvZC1ob3N0LXVybC5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjRmYTdhMDY4NjljNzg5ZDI3NDZkOTllYmNkY2RhMjg4MWI1NzBlMjk5NTI5NzdlNmI3ZTRiYTdjNTRiNTVlNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbnYuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2MjJmNDk2NDE0YWRjMDI5ODU4MTYxYjAxYzU5MmYyMDE5ZmU0NzZmNzE5NDg2MjQyMjQzZmQ3NjU0ZTY4NTI4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9lcnJvci5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjYzZTJlZDIwOTY1YTg3ODBlMDIyYWIwMjE2MjcyMjMyYzJmM2MwNzVlN2Y0ZWZhNTIxODU4MWNjMjE3NjAzMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvZXJyb3IuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0YmJiY2RiZDE5NTRiMTQ0NDdkMTI2NDczYmM0MWJiMDNjMTJlZmU5ZTI2MTAxYzI1NGE4NjE3YTU4MWM5Y2VlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvc2VtYXBob3JlLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY2NGU3ODQ0NjNhMGVmMDFkMWI5YmMxOTFiN2NlMjExM2MxM2Y5MmU4MmJhMDE0M2UyYWIyYzA1NDFiYWYyNWEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9ncnBjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMzkyNTBiMTRhMTUyYTdmNDI3ZmVhMzg1YzdjZWNlNWUzNmRiOGE2ZTMxMGIxMjM5YzZlYjE4ODFkZTk1NTE5OSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RpbWV1dGlsLnNwZWMuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiOTYzNWQ0OTk3ZjE0OTFiN2NmMzk4YmUxZmRkMmZkMTMxNDY3YWJlMjUxYWY1ZWZhZGZhMDQyZGM4MTkzYTU1YSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pbnN0YWxsYXRpb24tYWRtaW4tcHJvdG9jb2wuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzMGJlYTVjNDVlY2IxMGFmZmNkOGIyMTA3N2FkNmZjNWY0ZTViNTJiNjBlOGM0MGVhMGQzMjVmMzZhNzM0NzFmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9wcm94eS1mYWN0b3J5LmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc5OGYwZDMwYzkwYTljMDU2MmNkZDlmZDM5N2Q5N2YwNTg1MWY2MDg4YWY3ZGY4MDJjZjc2ZGFiN2M4YzJiOGYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaW5zdGFsbGF0aW9uLWFkbWluLXByb3RvY29sLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImY2YmMyM2JiMDU4ZTc4OTNjYjk0ZDk1YmE0NzQ4NDcyMGRlYzk0ODdhZGY2MWM3ZDA4NzQ0YzBmNDM4YjA1OGQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdHlwaW5ncy9nbG9iYWxzLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZjQ3MWVhZGQ1NzMwZTZhYjFhYmQ3YzVkYmM2NmRlYTE0YzMwM2JjMTEyMGIwYjA5Y2NhMDZhNDc0NGE1NDkwNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtaW5zdGFuY2UuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxMzFkNzY5MjMyYTRiNDBkYmE4N2NiODg4MWE3NzFmM2JmMWVhZDA5OTYzOTk0MTAxMTcxYjk3MWI4MzFiZjZiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2NvbnRleHQtdXJsLnNwZWMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImJhNzYxNWFhYTdjN2ZhNDM0NmVjYzc2OTlkMmEwY2YwODM0NmNkZjljNmUxYTgzODJlZWZmYTQyZDE5NjczOTkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90cmFjaW5nLnNwZWMuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiY2FhZTdjMTc5N2VjYmYzYWQ1NTM2YTMxODEyOTI0ZjI1MDNmMjg0NGNmZGMwZTRjYTQ3NTQyNGQ1ZTc2NmMxMCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtY2x1c3Rlci5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkY2QxM2MxODM4NTg3NGNmZGJmODI1YzEzY2JkMjM2YjI3MzdlYWEwMzg4ZmUxYTNhY2Q4MDkxMzY2YmM0ZGE2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9ub2RlL2Nvbm5lY3Rpb24uZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMzU4YWVlYTY1ZmVkZTQxMGZiOWI3MDU2NThmM2Q5NDIwMDk4YTI0YTE1NTk3NzllMjgwYTVjYjI0ZDYzNDU0NyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtY2x1c3Rlci5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjY3ZDFiZjc5YzdmYWQ1NTMxMjRjNjQyYTIyMjgyOTc5MDcwNjQ2YTA3MzAzNWMzZGQ4MTJjNDFhZTMxZjkzNmMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd29ya3NwYWNlLWluc3RhbmNlLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImE1NDBmZTUyOGY4YjhiZWM4ZjY2Njc0NjYzMjU4NTBiYTljMGIwOGI3MDQ2YjYyODIyMTJkMGIyZDE3ZTFjYWYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWRtaW4tcHJvdG9jb2wuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDlhZmRlMDkwNGRlZTMxMTY0YzA2ZDA0YjY3ZWM3Y2Y0OTg2Y2RkMDNkYmY2ZDRkYjZhMWE2YmExNjhkZjc3MCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2VuY3J5cHRpb24tZW5naW5lLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjE2ZDUyYzEyNzQxYmNlMzY4OGJjMTAzYzc2ZWFhMWNiNzNlYTdhY2I2ZTM0OTNmNmVlM2M4Y2VjNzYwNTY3MDciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC90aW1ldXRpbC5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyODBjMDMyNjI4YzZiODA2NGMxZGEwOTdjZGUwMTZiNDBjNDgxYTBjYTA1YTNhNjdlYWRiODIwZmFmZmY2YzMyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvamFlZ2VyLWNsaWVudC10eXBlcy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmNmZkMTQ5MTA1NzYzNTQ2ZGMzNmE5ODY3ZTM0NzMxOTAzOGVlZmU0MjI5OTZmNjVjYWM3ZjFjMWJmZmViZmRmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2VuZXJhdGUtd29ya3NwYWNlLWlkLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlNGU1NzJkZWY2Y2VkOTNjYWI3MGZkY2VkYjE2ZTE1NGExYmQ1NDczMjM3M2QyZDJmZGU4ZTEzNzRkNmVmNDM3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9oYW5kbGVyLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjdhOTc3ZTA1OTMzOGY3MTVkZjcxNTcwZGVhZmU5YzI3OWY3ODQwMDBlZmU4ZWQ5NDEzM2YxYzY3OGQxYmFkYzciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtY29va2llLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjM2YjZlOTJlYTU4NWMxOGZjYTllNDUyMmU1ZmViNmQ1MjVkNTE0NDhmNjk3YzExNzhhYjVmYjZmNTcwYjJmZWUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYW5hbHl0aWNzLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0NGZhZDczZDU5ZDg1NDJiYzU5MGRjM2VkYzQ2MDI3ZGJiMTI4ZmVmM2EzYTk4NmNkMjFhZjljZmZkMDVlNDBmIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcXVldWUuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkOWJhYmM1YjQ5MzYwMzk3NWQ4OGRhZmRlYzRlYjkxNWY1NTE0ZDhmMGEyNmJmNGRmMGI2OGIwNTBlMmIzNTYzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdHJhY2luZy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkZDgwZmI5YzM4MGM3ZDkxNzEzN2JjMTgxOWExZGIyNWM0Y2UyZDBhMDhlNGM5MTdlZThlM2VhYTg5ZTBlMDI2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3NuYXBzaG90LXVybC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImNiYjhiNjBlNmY1YTdjYmE1ZWY1YjU3NTNhMzZmZGM2OGFhMzJjZmQyZTllYzI1OTkwYzNjZjY4NWQ0MTA4NDkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvaW5kZXguanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZmNlMjBlNzNlZDlmNzVjOTI3NmRkYzhhMDQ0YzRiMTEwN2Q0ODAzNjU5MmQzZmY0MmMyMWI4ZjMzNzkzNWJjMyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90ZWFtcy1wcm9qZWN0cy1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODgyOGZmYjQ5MWIyMDFmZTNhY2I2YmEzMDc5Y2Q4MDZmZjQ5N2UyOGU4MDcxZDliMjFiNmU2MzNlZjhlZjM5NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wbGFucy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4ZThkOGMxYTRmZDdjZTI5ZDA5ZDFkMDNmMTllZDNiYTQwM2I4NzRhZjBlMWE2YjE4Y2ZhMWJlZjUxY2JmZDk4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3RlYW0tc3Vic2NyaXB0aW9uLXByb3RvY29sLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQzMzFiYTIwZWIzMzI0ZDA3NDIwMWZmMjIxOGFiYzBlM2NkMTRmOTJlNDViMjM1YWUzMmY0MTQ5YThhNDM0MzYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC93b3Jrc3BhY2UtcG9ydC1hdXRoZW50aWNhdGlvbi5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJiYWYwODcxMDU3ODEwMDYwYjdlZDc1ZDYwM2I0NGUxMTJmZmRmMWE0NDQ2NWU1YWEyMGUyNzIzZDI1YWQwMjYzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2FkbWluLXByb3RvY29sLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNWI4N2Q3Mjg2YTQ3MGQ4NGNhNjRjZjM3YjE0NWVjOTk5M2Q5YmFjNmM2ODUwMTIwMTA3MzU5MGFjZGYwOTNmOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2Rpc3Bvc2FibGUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjg1Zjg1ZTk5NDg3ZDRmZDhhZWQ5NjZmYjIzMTc5OWUyYTllOWZmNDhlOTRjYmVmY2Y2YzNlZWI3N2NiOTBkNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2NvbnRhaW5lci1tb2R1bGUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiM2UzODc3ZmE0Mjc4ZDhlMzJmNGJiZjAyM2NmMmU5MmUzNDhiZTZmZmQ2ZDk1ZWVmMDNiNTBjOWRiYjY1MzM5MiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RlZXAtcGFydGlhbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjk2NGEyOTMxYzE3OTNkZGVhNWE4NmYyNTc2Y2ZiZTQzYjMyYWUwMjBmNmRhOTU4YWU0ZjY5MDVmOWY1MWYyMTAiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2Jyb3dzZXIvd2luZG93LWNvbm5lY3Rpb24uanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiOWFiZjNiNTdiYzgzNDYyNzJlMTRlNDJhMjJhZmZlMjA5ZGM2M2NiZTk1YzkyMDI3YTY0YzYyNGRhMDA1Zjc2NCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvYnJvd3Nlci93aW5kb3ctY29ubmVjdGlvbi5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiN2ZkNTIxYjcwYjc3M2ZiODQ4ZDEyNjlkYzc1NWFhNGE2NjkzZGEyYjE4M2E4NjgxNDYzZTU0YWFkMDgyMzBmNSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dpdHBvZC1ob3N0LXVybC5zcGVjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjc1NTE0OWZlODMxM2IwNmI0MTIxZjJjZmQyMDA5MmRmMTkwMWQ2NTdhYjkwZWM4MmQ2OTkwNmY0OTIwNTliYjkiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcGVybWlzc2lvbi5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyYmU5MjkyZGQ3NjQ0NjFhNWRlZDJlMjczYzEyYmM3MGQ5ZWNkYWI2ZmUwZWIxZTgxNjQ2OWY3ZGY2MDVmZTM0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGF0ZS10aW1lLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjIxZGY2NjJjODMxYzI1ZGVlZDM2MmNlZTg4M2Q1YWQ2NTM1NmY5MTU0ZTUzMzdlMzU3MjIwMWY3NTY1YmJmZWYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9ncnBjLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI4ZjQxZmRkYjI5ZjU0YmRlZjY2MTFmMWQyZDE5NmEzNGQ4YmIwZGZiNGMxOGQ1MWQ0OTEwYzlkOTcwOGUxYjcwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdHJhY2luZy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmNTExNTlmMjJhOGI2NmIyZjFjNWU2NTFlMzhhYTFmNTdiZTRlNjdiNTIzMzBkMDE2YmQzNmQxNGY4NWNlNzZlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGVmZXJyZWQuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTg4ZThlZWJmZDM4OTA5OTA4ZTMwOGM2MDg2YmUzNGMxZGM5YWM1MzhiYTM4Zjg1NWU5MDMwMWI3NDc4NDkxYSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3NlbWFwaG9yZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWI5ZWE1YjA5Y2E3OWViMmE2ZmZiZDNlNDMzYjhmYjkzNDQ1NDAxMDZlMzEwYzhhODY5MjUzN2FlYTExOTU3MiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvY2xpZW50LWNhbGwtbWV0cmljcy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImMwNjcxNzY5MzQ2M2UxYTNiNjhiZDczZTZhNjg3ODIwMzFjOWFmNTdhZDI2ZTA4YjMxZjBiNjFmNzllOTJlZjQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtaG9zdC11cmwuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyMTIxNzY0ZjBhMWU2NTAyNzA2MTc3MjhhMDI1MmZlODQ0Y2NkZjRjNmNkOTM5MTlmZTg4N2ZiN2NiYWEzNzhlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ2l0cG9kLWhvc3QtdXJsLnNwZWMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjE4ZGQ1NmMyMzVkMDU0NjVhZGZkYjA5NzRkZmU4OTNjZjU0MGQ0OTc0OTllZjQ3NzhjMjk3NzAxYTAzNzRjZDUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvY29udGV4dC11cmwuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDYxMWJmMzUzYWQwZmIzMWMyYmI0Nzg0NTQ3OWFlOWFkZWNhZDI5NGY3NWQyNzcxNzUwMzJhN2YxMTE0ZTQ2NSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wcm90b2NvbC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxY2Y3Yzk0NzE2MGQ0MjBhNTExMDExMzcxMzZhNDQ2MjM0MTkyOGQ4OTk3MjhlMjRkMDg5YzJmZTNhNjQ0ZTMzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcmVwZWF0LmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQ5OTA1OTE1Y2NhOTVhMTlmNTRmZGZlZGY3N2VkYjIxMjY1ZTYwNGZlOGJiNjU0ZmZmZTg3YjMyMzBlYTc4NzIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9lbmNyeXB0aW9uLWVuZ2luZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBjNmFkMjU1YzdjY2Q5YzQ1ZmU0MWIzNTc5MzdiZmEzNjQ2NTAwYjYwYTE1NmJkMmViZTZjNDI1NmMwMzhhNzEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZ2l0cG9kLWZpbGUtcGFyc2VyLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI5NjFkMzA1MDMyZTE1N2FiNmUzYmJlMzdiNDFhYzRmMWQ0MzBlYzUyMTM2N2YwYThmMjI4ZWEzZTk3YzAyMzciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2hhbmRsZXIuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2YTc0YTg4MWE5OWI2MjcxOWE5ZGExYzFiM2IyNmVlZTIzZTQ5ZTYyYTdlODdjNjc1NTkwZGEwMzk1NmUwOTNiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VtYWlsLXByb3RvY29sLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjU0ODlkNDA1ZDg3NmVhM2RlNDM0NTViZDEzMjRjODIxMGU3OTk0OGNjMzJlZTg5ZWE2NTU4NWUwNWRjYTk2ZmUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9lbmNyeXB0aW9uLWVuZ2luZS5zcGVjLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2MTc0YWI2YzA4NmViOGI1N2UzNjRiOTE1M2I3ZmRlYWU5ZmVhMzAxOWIwYmRiNjIxOWQ5MDYyNWE2MTI1OTA2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvd29ya3NwYWNlLXBvcnQtYXV0aGVudGljYXRpb24uZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZWIzMzhhYjA2YmI0M2RhYzE4NjY0NmQ5ODJiNjhiNWIxZWJmNGM4NDgzOGU5YWVjZDM2NWZiN2UyZDZkYzdmMyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dlbmVyYXRlLXdvcmtzcGFjZS1pZC5zcGVjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjAwNjdkYzgzMGIyYTVkZTBkNTJlNzRlMzIzODEyN2U2NzlhOTM2ZTBhNzcwYWFjYmNlNjYxNjJiMjIwMDMxNGIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9wYXJzZS13b3Jrc3BhY2UtaWQuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxMzg2N2RjZTZkZDRmOTdhMjlmNGY4ZmZjNzQ4NWU3ZmM5ZGEzYTg4N2JiODc5ZjZhNGM4YTU4N2M1MDU3ZmE3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcXVldWUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODZkYzc3OTUxMTA3MThkNmVhN2IxOWUxYjAzMTdjNzYwZjNkZGY2NzJjMTE5ZDc3NzhjOWYyMmI5YThhMGY2NCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbnYuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMWZiNjEyNjg5MjYwZTY4ZTczNGM2ZGNkYWJmODhhNzJjZTE0Yzk2NDUwNTA0Yzg1ZGRjMzI5ZGQyMDMzOGM4ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2VuY3J5cHRpb24tc2VydmljZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImYyNTkwODQyZGQ3NjdlZjkwOTU3NmJiYWI4MTEwNWY1MDQ1OTRiNDZlY2JhOTJkNmJmZmRkYTBlNjZmMGUxMDciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9jYW5jZWxhYmxlLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZWRmNWJjNTM5MGJkMzlmNGZhMjRjMWRjOGU1NmM2NWE1NWIxYzUzYWQ4N2NhYmMwNTZlZjJhNGQwY2ZkYzI2OCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RpbWV1dGlsLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyMTg0ODc5MGJiM2VjMTU4OTIwOWI5ODM2ZTMyOTZmNzczMzhhNTk4NzlmMGFmZmVkYjI4OTM3OGNmOWIyODA5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcGFyc2Utd29ya3NwYWNlLWlkLnNwZWMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImFkZGI5OGI2ZmExNjU4NzNjZDAzYTA2N2UwNDk5YTJkMWE5ZDRiZmNiNmFkYzQ4ZmRmNDkyMTYyMDM4MjAxNTQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZ2l0cG9kLWZpbGUtcGFyc2VyLnNwZWMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjE1YjhhMTgzNmZhYzA0ZmM3YTM4NjA4ZjI0NDRiYjg2ZjMwZTQyY2UyYmQ4YjI4ZjdjMTVlYWViNDVjMjdjYjIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9tYWtlLWxpbmsuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2YThiYmY4ZGNlOWNmNTIyNzY5MWEwNmE0YmU3ZWI3NTZmODFkMTg0NWUxYTE4ZTU4MDljNjIzODllODQ4YjM5IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbG9nZ2luZy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3ZTk4OGM3MzMzNzZhMzkyYmY0ZWVhZmEwYWM3Nzk3NWM5N2EyMTI3YmYyN2UyYjNhNTVmOTM0OTFhYmM5Nzc2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvYW5hbHl0aWNzLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBiYTViZDYxNDkzNDlmNzUxMTVlMjc0OGM1OTlmZDBmZmQ1NmExNWM5OGY4NTY5YTY2YzQ2ZDk4Y2I1N2RlYWIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWRtaW4tcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMGFhY2E3MDljZDM3ZDEwOGU1YmMwNTZiYmY1NDkzZmE3OGIyMjM5MmE4MjRkOGUyZjFlODIwMzUxY2EzNDFlZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbmNyeXB0aW9uL2VuY3J5cHRpb24tc2VydmljZS5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMGI1MTI5MThkNjBhZDIxZDE2ZGQxYzc3ZDc4ZDVmNDlmYzRlYmMwMmM0MGMyYTMzOTFhNGNlYjg0NDg5MmVlZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2Rpc3Bvc2FibGUuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYWU5OTE0ZjdiMmQyYzFmODRiOWIwOTg4NWFhMTM3MWIwODdjMTZiMTc3ZDg0ZjRkMWM2MDRmMmE1YTRjODA5ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3JlcGVhdC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImE3Y2E2MDM0Yjk1N2ZlMjg1Zjc2ZjFjZGM0NTIwNTk0OGRiZjlhNzMwMTE4YzMyOTI2MGZhZDM4NDk1N2ZlODYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9xdWV1ZS5zcGVjLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZjRiYWQyNDg2OTUzZWRhMWQ1NmI1YTZjZWM5ZGExZTMyYmVhYzU0YTA0ZTFhMGMzNDM0MTYxYzRhNzYwMDU5NCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2RlZXAtcGFydGlhbC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1NmQ5ZDhkMmFmODhjYTE3MjI2NGVkOTBhOTVkZGZiMzZkZTcxZmQ3MTUxYTE0NGJjNjQ2M2UwNmU1ZjZjMTI0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3BheW1lbnQtcHJvdG9jb2wuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiN2YyZDQ2NzM4YjkxNzNkM2I0M2ZjMzJlMzIwYWFmMTdiZGZlZDI1ZGQ5OTY0Y2YxNzQwOTI1MjFjZGRiYjI5ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9hY2NvdW50aW5nLXByb3RvY29sLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMDdjYzk3ZWVjY2E3YWM0MWViYTdkNTNhZTM4ZjgyOGU2Mzc1MTUzMjBjODY0ZTNhY2E3NjgzMTBjYmM4NTJjNCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL3lhcm4ubG9jayIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1M2MyODlkMzY0NjFiMGE0YjEzZGQ3ZTIwNDYxY2JmZTBjZTExNDhkZDYzM2VlYWY3MzRkYWNhMjM3YjRjYTgzIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvamFlZ2VyLWNsaWVudC10eXBlcy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjkwMWZiZjgyN2QwYjBlODM2Yjc2ZWZjNzkzYWU0NTgzOWZkYjFlOGE2NTI2YTNmMjcwMTZkNTc1ZTRmMzg3ZTUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC93b3Jrc3BhY2UtcG9ydC1hdXRoZW50aWNhdGlvbi5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI1NjljNmQ3NWFhNDgzNWIyOTIwN2JmZWI1ZTJjMzkzZGMyYTVkYzUzZGYxNGQ1YzVlYTAzOTQ4OGZiNjAyNGMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL25vZGUvY29ubmVjdGlvbi5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImNkNDE4OTlhYzI5ZTdmYjdlN2NhNzExOWIzZDJiN2UwZDE1MzUxMDY2YzE1YWMzOWQwYmM2OTZmOWY4ZWQ2ZDgiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9nZW5lcmF0ZS13b3Jrc3BhY2UtaWQuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJkZGI1ZmJlODQzNTQ1Y2MyMjVhMjUyZTQ0YjQwZTJjNjVlZDdhZGE5ZDBmNmZlNGIwYThkZDBhYjhjZjJhYmEyIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcGFyc2Utd29ya3NwYWNlLWlkLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImM5MThlZDA0MjliNDNhOWJkNjE1MjRmNmFjNGNmZjkwMzdiZWFhNTY0M2E1NTEyOGU2OWEwMGU0MDg5YmZkN2MiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWNjb3VudGluZy1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTVjM2JkZTdmOWI1OWIyOGQ1MzY4OTBmNTFjMDQwNWFmM2I2ZTY5ZWQxZDhjMmQ5MmE4YjJmOWE2NzBjNTRlMSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9lbnYuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiOWNmMTM2MDZiZjQ1OGI4MmQ1YWM5YjA3Y2JkYWFlM2QxNDk4OWNkMjU5MjUzNDNjYmM2MjY4Y2U4ZWZiNWEyNCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93c3JlYWR5LmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiODMyMDcyYTkwNThkZjQxMjNhMWNmYzJmMjZlZTc2ODA2NDdmMzQ1ZTU3OGNhZTkzZGQzNWI4MTNjOTRlZGU5ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RpbWV1dGlsLnNwZWMuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3OTdmOGU5NDQ2YTgyZTMzNWE0M2ZmMjFmNDQxMGU1NmY1NTQ4NjkwM2IxYThlYzYxNGIwNWExYmQ3YTUzODE0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZ3JwYy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxZTZlZjJjMTEwMjA0N2ZmZmJhZDJjYTAzNTI0ZWU4ZjQwZWQ1NTlmZDc3NDBmMTJhMDg2ZWU0Y2JjNTU1MTU3IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3BsYW5zLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmN2EwZjg5NWIzNTliZmJhZDA5NjAyNDcwOTRhZTRiNmYxNmU5ZmE4M2MyMGVmM2I3NzI5N2MwMWVmOTc1MzZkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvZGVmZXJyZWQuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2MGEyZDYyNjgwMTU5MmNiYmIzZDMxMzEwMzcyNjFiNmI1MWI1Y2ZjMmMyOTU0ZTIzYzUyZWQxZDMwZGI0NjIxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbWFrZS1saW5rLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0M2ZmNDYzYWZlOTc1ZDA1ZWMxZjMyMzdlZTMwZWVhMzUwYjI1NTU5ZmNjMTM0YzI0ZWZhMWU2M2Y1YjdhOWQxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2lkZS1mcm9udGVuZC1zZXJ2aWNlLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhYWFkM2YxOGZiMDQ5ZjlhNTEzYzBjODgyZGI0YTNiMWE5NDgzYmUzY2U2ZjQyMTNjODBiMDExYjUxZjI2ZDM1IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3R5cGluZ3MvZ2xvYmFscy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI0YzcyZTM3MjNkYmQ5ZGY1MmNmZmU2OGNjYjhlOTdkMzY5ZWY3ZGIxYTIzYjVlNWUxNmNkOWM1YjcwNDMzOGY4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2F1dGguZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiN2IyOGYxMjc5ZmQ3ZWYwMTA3Nzg2YmNkMzcwMThiMGRmM2ZjZWNkZGMzZTkwZjE5NjFjNGM1MGVhMDJkNmI1NyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvcHJveHktZmFjdG9yeS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjZkMThhYmEwMzcwMTVjNzc3YThhZDk2N2NiMWQxZjc5YTA4OTJhOTRkMTYwZGE2N2RlMzI3MDRjNmZlMjEzZmIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2hhbmRsZXIuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzI4N2M0ZTBhNDAxN2U5MDhjYjY2MDg4ZWFlNDNiZTJlZGVlM2JlMWIwMTBhZGIwMjM3NzM4NDMxMTk1MmJhZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RpbWV1dGlsLnNwZWMuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImZhM2ViOTE3ZWEzMmVlMDgwOTRjYjY1Mjk5NTNkMzYzYWZhMDU2ODU4M2I5NzM1MTdmMjlkYTM1ZDZmNGE0NDAiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW5jcnlwdGlvbi9lbmNyeXB0aW9uLWVuZ2luZS5zcGVjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImE5NzlmN2Y1MzcxODU4NjFmOTBmZWU4ZDMzZjI5Y2FmYjZkOWMzMDBhOTc4NDJjYWY5NTAzZDA4ZjczZjNmNWMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvY29udGV4dC11cmwuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmN2NjMGE2ODI1ZjM5NjRjNzA4MDllOWM2OTJiMjI1NWZiMzNiNmRiNTBkNTUwMTU4NmJiN2Q5MjEwMzgyYzc2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvdHJhY2luZy5zcGVjLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImJjNDQwZTQ5MzZkMWNjMzdmODVjYTc4M2EyNDZkNzdiNjg5YzU0MDU4MmVhYjkxZDdlNDE2ZDFiNDdlOThmMWEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvY29udGV4dC11cmwuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjBiOWJiZGJjZTQ3YzRkYjMyMzRjNGIwN2FlMzRkYTc3ZmY2OTJhNDE4Mjc1OTNkOTk1NTk2MTQwMWQ2MGViNmUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL3Byb3h5LWZhY3RvcnkuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZmZjN2I2YWJjYTA2M2VjMjVhMGJiNjIxOTdlZDJlOTQwMWUwZDhkMmI0NzFlODUwYjYxZmMyYTdjNjcwYWJlOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dpdHBvZC1ob3N0LXVybC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImRlMmVhMDk4OGJkMDk2ZTY4ZGI0YTNkZmYyZjA2YzM5ZWQ1OTZhMzJlMTAzYWNhYjc0Y2Q2MWE0M2E5ZjAzMzgiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtY29va2llLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMWEwN2Q4MWVmMTI0YjkwMTE2MjMwMzA5YTAwZGYzYzdhZGZmMzRmNDVkZjUwYTczMjUxODg3N2FkMDAwNDA1ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9naXRwb2QtZmlsZS1wYXJzZXIuanMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMzA4NGNlMzNiMGNjN2FmMGZjMWI0ZDVkM2RjZDY2NjI3Y2M1ZTAyY2UyN2E0ZGRmYTBlMDk4NTEzZTIzMjU1ZCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3BhcnNlLXdvcmtzcGFjZS1pZC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMjdlZWMyMGIxYmFiMjAyYjY1ZjYyMDkxYjlkNWNjN2U1OTUxZmM3MjQzZTVkNzM0ZDEzN2VmMGVkOTNkOGJjNyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvaGFuZGxlci5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTQzNzMwZDE3NzBjYjY0YzMzNjMxNDNmYjg4Njc4MzJlZTg4N2E0MDFiOGZiNTAzMDM0NjJjNDkxNmNiZTkxMiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi90ZWFtLXN1YnNjcmlwdGlvbi1wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImZhZjNmN2M2YjA1NWMxZTc4YjM2ZjI0YWVjYTMwMzVjZTMzYTkxMWFhM2EyNjkyNTdmMDFlMjczYmI3ZTI1ZjciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvYWRtaW4tcHJvdG9jb2wuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjE3Mjg4NTRjNmI1NjcxZjZiMjFlYjJkNDNkMzBjNmQzNDU4YWU3M2I1MTgxNmY3ZDgzYzM2ZGQ3YzcxMmIxYmEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcHJvdG9jb2wuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJmYTYxYzQyNDRiNjVhNTYzZmE1MGUyZWY3ZmMwNDAwM2U0NDhhZjNhYmY1ZDQ1NjI5NDcyNzhkNTA4MWI0OTcxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcGFyc2Utd29ya3NwYWNlLWlkLnNwZWMuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzODZmNDBiODdmOGRiYWIwNThmNTVhZmEyNTI1ZmNlMjc5NTdlMjVjODQ0MmIxMDc5NGZlNmQ1NjBlYWE5NWE4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2dpdHBvZC1zZXJ2aWNlLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjAzMzAwY2M1MTkyZjM2YWQ0N2Y3NTc2MmI0ZThhMWQ4NDlhZmE1N2Y1OTFiZjFkOGVkNDZiYWJlOTExMWJiMWUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9hc3luYy1pdGVyYXRvci5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJhOGM2MDIzNWNhMTMwZTlkMjA2OGI1YTk4ZDk3MWE4ODY2NjQwOGI3Y2QxNjAzNDdkMWMyYTUwZWUxNGViNDFlIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2lkZS1wcm90b2NvbC5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjQwMmI1MTUxNzc1OWZmOTIyODEzYzZjYTMxYTY0ZjFmMjczZjU5NTRiNGIzMzUwZjlhZDE3NzFiYjk5ZmM4M2QiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbWVzc2FnaW5nL2Vycm9yLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImQ0MzMyYjJlYzVjNDZjN2RmY2YyNWIyNzI3MjBiNTFhMjFlZTBkNGY4M2RkMTdhZDEzNGVjN2Y4Yzk2NWMwZDUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9qYWVnZXItY2xpZW50LXR5cGVzLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImRkNzFiMmMyYjgyODRmMjBlODhjNzIyNzA5NzliNjhlNWY4OTk4ZGY4MzZlODdjNzNjM2RjODI3YWU2ZTcwODAiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvcHJvdG9jb2wuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI0N2NmZGU0MGQzYTgwZmUzMjU0YzU3YTdhMjlmM2IwOTYzOGM4MWViMDUxZDVkODEwZGQwMGMxNDg0NTI4NGQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9zZW1hcGhvcmUuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlNTBjZWU3MGMzMWNhZTQzNjcyMmIxNDk3YTk1MWUwM2IyZDFmNGYzZjI3OWRmZWNmMGM4ZmMwZTkwZWI4Mzg0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcXVldWUuc3BlYy5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIxYjE5YmE1ZjZkOTkzZmNjZDQ3ZWM2YTY3ODgwNTUzMzZhNDJlNjkyMmZhNGNiZTg5YzJiNDc2NWYzMjIxYjBiIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3NuYXBzaG90LXVybC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNWFiOGQwOGEzN2I0NjI3NjgwYjkyNjZhY2IxOWE1NjhlZGUzODI2YWU0M2ZmZTEyNjQ4NGI2OWY3OGU2NzU3ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2xvZ2dpbmcuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzOWFkNGQ4OTljZTU4OGEwZWE1YTQxY2NiMTY5NDg0NTVhODNmMDQ1OWFmZjc0YjUyNmNmZmQ0NDQ0YTM2NWMwIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvc2tpcC1pZi5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTAzOTFkZGM5NjkxZTk5YmUzNWNlZGQ1MDdjZmI3MzdmZTUxNmIyZTBhZTA5NzRhZGI3MzIzNzQ5ZWZlOGQ0ZiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3RyYWNpbmcuc3BlYy5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjVkNDBhNTRiYWQyMzhhNjI3MzhhYTA0ZmU0ODY3Y2MwYzgxM2Q5YzFhYWIyMGExZTI4YWE5OGViNmIwNTExMGYiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvZW1haWwtcHJvdG9jb2wuZC50cyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIzYzI3Yzg5YTgxODQwMGUwMmEyNTVmMjk3ZjE3YWIzMGRlZGZkYTYzMjE2MDFhMzk0NTJlODI2ZjVkOTc2M2M2IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvbWFrZS1saW5rLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI4NjZlZDdmMTBiNjYyZGViZjc5MzY2NDAwMTJjZjJhMDI0NmY3OWY1NTgxMDhmM2NjNDc3YTQ4MzQzNzU5MWMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd29ya3NwYWNlLWluc3RhbmNlLmpzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlNjY1NDdlZDZhOTk2MzUwZDk2ZGY1ZGJmMDcxMzI3ZWIzYzkwNTIyYjg3NTk2ODc5YzE1N2Y3MDlkMTc2MTIxIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvcXVldWUuc3BlYy5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiZTJiNDI4Y2M2YTdlOWIyNTY1YzEyM2M4Yzc0NWQwOTRlMzA1MmE0MzY0MmVjZjliMjk3NDQ0YjBiZGJjMTU0NiIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9pZGUtZnJvbnRlbmQtc2VydmljZS5kLnRzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImI4MmYyNjhhMWY2YmRjNjI4YmM2MjkxNjkzZTQxNmU2NjgwNWRiMzY3NDNmMDhlNjFkNDI2MGJkYzA1YzYzMDgiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9zZW1hcGhvcmUuZC50cy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTRmNmQ5ZjcxYTk3OTljNzk3MTg1N2RhZGE5YzZkODNmNTg0ZTc0MDg5NGUwNTg5ZjZjYjZlOTZiY2YxODFmOSIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9wZXJtaXNzaW9uLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjMwZjYwZTI0NDdmNTgzYTZhYjhmNDkzZmVjZmE4ZTk5ZjgzYTEyYzNlMzg5ZGZkYTVkYzdiNDMwMThlMGRiZTUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvc25hcHNob3QtdXJsLmQudHMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImJhNDRhMjY1Y2U2MWQ2YTlkODg3NzMyN2NmMDMxNDAxMTk2ZTNmMmE1Nzk5ZjU1NTY1NzY2MDZjODBmZDJkOGMiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvb3NzLWFsbG93bGlzdC5kLnRzLm1hcCIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI3MjJmMzNhNzQ3NzU0MDE4NWE2MWVhZTY4N2YyOWYxZDNjYWFjZmE0NDJjOGE0ZGQxM2I2ZWY3NDVlMGZmOGFhIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3V0aWwvYW5hbHl0aWNzLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImJkMGRlNjY4ODVhMDAyODRjOWQxMDA0ZGRkYTBlYzhhZDVmMmM4YmU4ZDE5MDJkZjJjMjIwNjU1MDAxNTBkN2EiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvd29ya3NwYWNlLWluc3RhbmNlLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjUwYTY0M2UwYjIzNjdhNDljYTU1NDEwYjhkNDMxOWFlMjFlN2ZkZmZmZDQ4OTk0OWJmYTEyOWU2ODYwZTY2ZWUiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvbGljZW5zZS1wcm90b2NvbC5qcy5tYXAiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiOWE5ZGIzNjM1NmRmOTkxMzJlMjVmYjZmYWVkYzRhN2QzODc3ODExM2NhZTAzNDdlZjEyYzJkNWVjNzRkYWNiMyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi93b3Jrc3BhY2UtY2x1c3Rlci5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI2ZDRlOTNkMTBhNGRmNGY5YzRhNTY4YmRjYjU2ZTFiYzMxMTFmMjJmNTdjYTgzOWZmODBmMzEzN2M3ZDE2ZmU4IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL2VuY3J5cHRpb24va2V5LXByb3ZpZGVyLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiY2FlZWFlZTg4Y2Q3YjE2Mjk3Nzk0OGM1NGNhNzNiOTMxY2RmODNmMDA5ZjFiN2UwZTNiNjYzYTYxMjAyY2FjOCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL2dhcmJhZ2UtY29sbGVjdGVkLWNhY2hlLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImZkZjUyMjVhODZkZGVhYmM1NWQ0NjVhZWVlMmVjNGMyMzM4MTVhYTIxZDNkNmUxNWI3ZDU2Yjc4ZWJhODY5NDIiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvY29udGV4dC11cmwuc3BlYy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1Y2M5MDlhNTJhNTkzMjA2YzAzZDZhYzE1ZmQ5NjgyZDA1NzgxNGM3NGYzYjlmYTllNWIxYTg2MGU1YTM1YWI0IgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL3BsYW5zLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiMTkwMDJkOGVkNzIxZGRlNjI1ZWRkYmM0OWJlYTM3ZWY0ODYwZmE0N2U0OWU5NGNjMDk4ZWYxYmI3OTEzNWZkYyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvY2xpZW50LWNhbGwtbWV0cmljcy5qcyIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICJlYjkwNGUxMjI5MWRmMDg1ZmQ4Y2M5NjIwNzJmMGUyMGY3NTQzZjgwYWZhMmY1OGRmYTI3NDAyZThhNTY4NzdkIgogICAgICB9CiAgICB9LAogICAgewogICAgICAibmFtZSI6ICIvbGliL21lc3NhZ2luZy9icm93c2VyL3dpbmRvdy1jb25uZWN0aW9uLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiNzg2Nzg4ZGM4ZGM5YzAyZDRkNDQyN2E2ZjYyZjRjNzE4OTYyNWEwNzFhNGIwYzk1MmM4YzNiZWUwOGI1ODYxOCIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi9tZXNzYWdpbmcvYnJvd3Nlci9jb25uZWN0aW9uLmQudHMiLAogICAgICAiZGlnZXN0IjogewogICAgICAgICJzaGEyNTYiOiAiYTc1MGQ2ZTBkOWZmZWJmNDllODAyMGQwMDNjYzM1YjNkYTQ5MTVlNzY5MWU4ZjU1M2RhMDZkYTYyZjU1Y2UzYyIKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgIm5hbWUiOiAiL2xpYi91dGlsL3BhcnNlLXdvcmtzcGFjZS1pZC5zcGVjLmpzIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImNkYTk1YWIwZDJiZjI0ZDc0NDZmYTUzOGIxMWQyOWQ0OWQwOTU5MDljMTk4MWVmMjc4ZWI2YzczYTUxNjhjYTciCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9hbmFseXRpY3MuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogIjJhOTFhYjUyNDgwNTFkNWRjNDEyZDVjZmQ2OTVlNzQ2YjZjNzQ0MDZiMmVkNDFhOGZkODUwNjU0MjczODlmYWQiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgICJuYW1lIjogIi9saWIvdXRpbC9naXRwb2QtaG9zdC11cmwuanMubWFwIiwKICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAic2hhMjU2IjogImRkZDc2MmNiYzRiNTEwYjFlZTg0ODViYzI4ODg3Yjk3NjBkZGZlODk0YTVjM2UzOGQ3ZTg3ZGQwZmEyYjgzOTciCiAgICAgIH0KICAgIH0KICBdLAogICJwcmVkaWNhdGUiOiB7CiAgICAiYnVpbGRlciI6IHsKICAgICAgImlkIjogImdpdGh1Yi5jb20vZ2l0cG9kLWlvL2xlZXdheTowLjIuMTctM2ViZmIyYUBzaGEyNTY6Yjk2MjllMmQwNDMyYWRlYTFiZTdkZGRiMzYwM2UzNmQ5ZjY5YjA5ZDg5ODVmNzI1MjU3YWRhYWRlNTFkNGE0MCIKICAgIH0sCiAgICAicmVjaXBlIjogewogICAgICAidHlwZSI6ICJodHRwczovL2dpdGh1Yi5jb20vZ2l0cG9kLWlvL2xlZXdheS9idWlsZEB5YXJuOjciLAogICAgICAiZGVmaW5lZEluTWF0ZXJpYWwiOiAwLAogICAgICAiZW50cnlQb2ludCI6ICJjb21wb25lbnRzL2dpdHBvZC1wcm90b2NvbDpsaWIiLAogICAgICAiYXJndW1lbnRzIjogWwogICAgICAgICJsZWV3YXkiLAogICAgICAgICJidWlsZCIsCiAgICAgICAgIi0tZG9ja2VyLWJ1aWxkLW9wdGlvbnMiLAogICAgICAgICJuZXR3b3JrPWhvc3QiLAogICAgICAgICItLXdlcmZ0PXRydWUiLAogICAgICAgICItYyIsCiAgICAgICAgInJlbW90ZSIsCiAgICAgICAgIi0tZG9udC1yZXRhZyIsCiAgICAgICAgIi0tY292ZXJhZ2Utb3V0cHV0LXBhdGg9L3RtcC90bXAud2pHQ05LWUJBYiIsCiAgICAgICAgIi1EdmVyc2lvbj1wYXZlbC1wdmMtZmVhdC4wIiwKICAgICAgICAiLURyZW1vdmVTb3VyY2VzPWZhbHNlIiwKICAgICAgICAiLURpbWFnZVJlcG9CYXNlPWV1Lmdjci5pby9naXRwb2QtY29yZS1kZXYvYnVpbGQiLAogICAgICAgICItRGxvY2FsQXBwVmVyc2lvbj11bmtub3duIiwKICAgICAgICAiLURTRUdNRU5UX0lPX1RPS0VOPVgzYk5hdFlQdWRJSmNDejZrRmxUbjU0cHJ1bVFBcUdoIiwKICAgICAgICAiLURSRVBMSUNBVEVEX0FQSV9UT0tFTj04YWUwYzI3MzhkNGVlYTczMDhmZjVhOWE4YzU0NjUzN2MxYjVkOGM2ZGE2YTEyN2EyNmIxMjU4ODZiNTg3Nzg0IiwKICAgICAgICAiLURSRVBMSUNBVEVEX0FQUD1naXRwb2QiLAogICAgICAgICItRG5wbVB1Ymxpc2hUcmlnZ2VyPWZhbHNlIiwKICAgICAgICAiLURqYk1hcmtldHBsYWNlUHVibGlzaFRyaWdnZXI9ZmFsc2UiCiAgICAgIF0sCiAgICAgICJlbnZpcm9ubWVudCI6IHsKICAgICAgICAibWFuaWZlc3QiOiB7CiAgICAgICAgICAiYXJjaCI6ICJhbWQ2NCIsCiAgICAgICAgICAiZ28iOiAiZ28gdmVyc2lvbiBnbzEuMTcuNSBsaW51eC9hbWQ2NCIsCiAgICAgICAgICAibm9kZSI6ICJ2MTYuMTQuMCIsCiAgICAgICAgICAib3MiOiAibGludXgiLAogICAgICAgICAgInlhcm4iOiAiMS4yMi4xOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAibWV0YWRhdGEiOiB7CiAgICAgICJidWlsZFN0YXJ0ZWRPbiI6ICIyMDIyLTA0LTA0VDIzOjM2OjI5LjkwMzQ5NzkzMVoiLAogICAgICAiYnVpbGRGaW5pc2hlZE9uIjogIjIwMjItMDQtMDRUMjM6Mzc6MDUuOTc2NDI2MzkyWiIsCiAgICAgICJjb21wbGV0ZW5lc3MiOiB7CiAgICAgICAgImFyZ3VtZW50cyI6IHRydWUsCiAgICAgICAgImVudmlyb25tZW50IjogZmFsc2UsCiAgICAgICAgIm1hdGVyaWFscyI6IHRydWUKICAgICAgfSwKICAgICAgInJlcHJvZHVjaWJsZSI6IGZhbHNlCiAgICB9LAogICAgIm1hdGVyaWFscyI6IFsKICAgICAgewogICAgICAgICJ1cmkiOiAiZ2l0K2h0dHBzOi8vZ2l0aHViLmNvbS9naXRwb2QtaW8vZ2l0cG9kLmdpdCIsCiAgICAgICAgImRpZ2VzdCI6IHsKICAgICAgICAgICJzaGEyNTYiOiAiYWFhMmM4ODUyZDBiZTVkNTIzYzVkMWFhZDYxMzEyOTBlOGJiMmM3NCIKICAgICAgICB9CiAgICAgIH0KICAgIF0KICB9Cn0=","signatures":null}
2
+
@@ -0,0 +1,231 @@
1
+ /**
2
+ * Copyright (c) 2021 Gitpod GmbH. All rights reserved.
3
+ * Licensed under the GNU Affero General Public License (AGPL).
4
+ * See License-AGPL.txt in the project root for license information.
5
+ */
6
+
7
+ import { v4 as uuidv4 } from "uuid";
8
+ import { User } from "./protocol";
9
+ import { oneMonthLater } from "./util/timeutil";
10
+
11
+ /*
12
+ * Subscription and acocunting data
13
+ */
14
+ export interface AccountEntry {
15
+ uid: string;
16
+
17
+ userId: string;
18
+
19
+ /** [hours] */
20
+ amount: number;
21
+
22
+ /**
23
+ * credit: start of validity,
24
+ * session: end of (split-) session
25
+ */
26
+ date: string;
27
+
28
+ /**
29
+ * debits (session, expiry, loss): relation to credit
30
+ */
31
+ creditId?: string;
32
+
33
+ /**
34
+ * credit: end of validity
35
+ */
36
+ expiryDate?: string; // exclusive
37
+
38
+ kind: AccountEntryKind;
39
+
40
+ /**
41
+ * credit: amount - accounted debits
42
+ * [hours]
43
+ */
44
+ remainingAmount?: number;
45
+
46
+ description?: object;
47
+ }
48
+ export namespace AccountEntry {
49
+ export function create<T extends AccountEntry>(entry: Omit<T, "uid">): T {
50
+ const result = entry as T;
51
+ result.uid = uuidv4();
52
+ return result;
53
+ }
54
+ }
55
+
56
+ export type DebitAccountEntryKind = "session" | "expiry" | "loss";
57
+ export type AccountEntryKind = "credit" | DebitAccountEntryKind | "carry" | "open";
58
+
59
+ export interface Credit extends AccountEntry {
60
+ kind: "credit";
61
+ expiryDate: string;
62
+ }
63
+ export type Debit = LossDebit | ExpiryDebit | SessionDebit;
64
+ export interface LossDebit extends AccountEntry {
65
+ kind: "loss";
66
+ }
67
+ export interface ExpiryDebit extends AccountEntry {
68
+ kind: "expiry";
69
+ creditId: undefined;
70
+ }
71
+ export interface SessionDebit extends AccountEntry {
72
+ kind: DebitAccountEntryKind;
73
+ creditId: string;
74
+ }
75
+
76
+ export type AccountEntryDescription = SessionDescription | CreditDescription;
77
+ export interface CreditDescription {
78
+ subscriptionId: string;
79
+ planId: string;
80
+ }
81
+ export namespace CreditDescription {
82
+ export function is(obj: any): obj is CreditDescription {
83
+ return !!obj && obj.hasOwnProperty("subscriptionId") && obj.hasOwnProperty("planId");
84
+ }
85
+ }
86
+ export interface SessionDescription {
87
+ contextTitle: string;
88
+ contextUrl: string;
89
+ workspaceId: string;
90
+ workspaceInstanceId: string;
91
+ }
92
+ export namespace SessionDescription {
93
+ export function is(obj: any): obj is SessionDescription {
94
+ return (
95
+ !!obj &&
96
+ obj.hasOwnProperty("contextTitle") &&
97
+ obj.hasOwnProperty("contextUrl") &&
98
+ obj.hasOwnProperty("workspaceId") &&
99
+ obj.hasOwnProperty("workspaceInstanceId")
100
+ );
101
+ }
102
+ }
103
+
104
+ /**
105
+ * - The earliest subscription may start with User.creationDate
106
+ * - There may be multiple Gitpod subscriptions for a user at any given time
107
+ * - The dates form an interval of the form: [startDate, endDate)
108
+ * - Subscriptions that directly map to a Chargebee plan have their paymentReference set and MAY carry additional paymentData (UserPaidSubscription)
109
+ * - Subscriptions that are assigned to a user through a Team Subscription carry a teamSubscriptionSlotId (AssignedTeamSubscription)
110
+ */
111
+ export interface Subscription {
112
+ uid: string;
113
+ userId: string;
114
+ startDate: string; // inclusive
115
+ /** When the subscription will end (must be >= cancellationDate!) */
116
+ endDate?: string; // exclusive
117
+ /** When the subscription was cancelled */
118
+ cancellationDate?: string; // exclusive
119
+ /** Number of granted hours */
120
+ amount: number;
121
+ /** Number of granted hours for the first month: If this is set, use this value for the first month */
122
+ firstMonthAmount?: number;
123
+ planId?: string;
124
+ paymentReference?: string;
125
+ paymentData?: PaymentData;
126
+ teamSubscriptionSlotId?: string;
127
+ /** marks the subscription as deleted */
128
+ deleted?: boolean;
129
+ }
130
+
131
+ export interface SubscriptionAndUser extends Subscription {
132
+ user: User;
133
+ }
134
+
135
+ export interface PaymentData {
136
+ /** Marks the date as of which the _switch_ is effective. */
137
+ downgradeDate?: string;
138
+ /** Determines the new plan the dowgrade is targeted against (optional for backwards compatibility) */
139
+ newPlan?: string;
140
+ }
141
+
142
+ export interface UserPaidSubscription extends Subscription {
143
+ paymentReference: string;
144
+ paymentData?: PaymentData;
145
+ }
146
+ export namespace UserPaidSubscription {
147
+ export function is(data: any): data is UserPaidSubscription {
148
+ return !!data && data.hasOwnProperty("paymentReference");
149
+ }
150
+ }
151
+
152
+ export interface AssignedTeamSubscription extends Subscription {
153
+ teamSubscriptionSlotId: string;
154
+ }
155
+ export namespace AssignedTeamSubscription {
156
+ export function is(data: any): data is AssignedTeamSubscription {
157
+ return !!data && data.hasOwnProperty("teamSubscriptionSlotId");
158
+ }
159
+ }
160
+
161
+ export namespace Subscription {
162
+ export function create(newSubscription: Omit<Subscription, "uid">) {
163
+ const subscription = newSubscription as Subscription;
164
+ subscription.uid = uuidv4();
165
+ return subscription;
166
+ }
167
+ export function cancelSubscription(s: Subscription, cancellationDate: string, endDate?: string) {
168
+ s.endDate = endDate || cancellationDate;
169
+ s.cancellationDate = cancellationDate;
170
+ }
171
+ export function isSame(s1: Subscription | undefined, s2: Subscription | undefined): boolean {
172
+ return (
173
+ !!s1 &&
174
+ !!s2 &&
175
+ s1.userId === s2.userId &&
176
+ s1.planId === s2.planId &&
177
+ s1.startDate === s2.startDate &&
178
+ s1.endDate === s2.endDate &&
179
+ s1.amount === s2.amount &&
180
+ s1.cancellationDate === s2.cancellationDate &&
181
+ s1.deleted === s2.deleted &&
182
+ ((s1.paymentData === undefined && s2.paymentData === undefined) ||
183
+ (!!s1.paymentData &&
184
+ !!s2.paymentData &&
185
+ s1.paymentData.downgradeDate === s2.paymentData.downgradeDate &&
186
+ s1.paymentData.newPlan === s2.paymentData.newPlan))
187
+ );
188
+ }
189
+ export function isActive(s: Subscription, date: string): boolean {
190
+ return s.startDate <= date && (s.endDate === undefined || date < s.endDate);
191
+ }
192
+ export function isDowngraded(s: Subscription) {
193
+ return s.paymentData && s.paymentData.downgradeDate;
194
+ }
195
+ export function calculateCurrentPeriod(startDate: string, now: Date) {
196
+ let nextStartDate = startDate;
197
+ do {
198
+ startDate = nextStartDate;
199
+ nextStartDate = oneMonthLater(startDate, new Date(startDate).getDate());
200
+ } while (nextStartDate < now.toISOString());
201
+ return { startDate, endDate: nextStartDate };
202
+ }
203
+ }
204
+
205
+ export type MaybeSubscription = Subscription | undefined;
206
+
207
+ export interface Period {
208
+ startDate: string; // inclusive
209
+ endDate: string; // exclusive
210
+ }
211
+
212
+ export type MaybePeriod = Period | undefined;
213
+
214
+ export type AccountEntryFixedPeriod = Omit<AccountEntry, "uid"> & { expiryDate: string };
215
+ export interface AccountStatement extends Period {
216
+ userId: string;
217
+ /**
218
+ * The subscriptions that have not been cancelled yet at the end of the period
219
+ */
220
+ subscriptions: Subscription[];
221
+ credits: Credit[];
222
+ debits: Debit[];
223
+ /** Remaining valid hours (accumulated from credits) */
224
+ remainingHours: RemainingHours;
225
+ }
226
+ export type RemainingHours = number | "unlimited";
227
+
228
+ export interface CreditAlert {
229
+ userId: string;
230
+ remainingUsageHours: number;
231
+ }