@decaf-ts/integrations 0.3.8 → 0.3.10

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 (1167) hide show
  1. package/dist/integrations.cjs +2 -1649
  2. package/dist/integrations.cjs.map +1 -0
  3. package/dist/integrations.js +2 -1885
  4. package/dist/integrations.js.map +1 -0
  5. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +2 -2
  6. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +1 -0
  7. package/lib/cjs/blob/azure/index.cjs +2 -2
  8. package/lib/cjs/blob/azure/index.cjs.map +1 -0
  9. package/lib/cjs/blob/core/BlobErrors.cjs +2 -2
  10. package/lib/cjs/blob/core/BlobErrors.cjs.map +1 -0
  11. package/lib/cjs/blob/core/BlobKey.cjs +2 -2
  12. package/lib/cjs/blob/core/BlobKey.cjs.map +1 -0
  13. package/lib/cjs/blob/core/BlobStoreFactory.cjs +2 -2
  14. package/lib/cjs/blob/core/BlobStoreFactory.cjs.map +1 -0
  15. package/lib/cjs/blob/core/BlobStoreService.cjs +2 -2
  16. package/lib/cjs/blob/core/BlobStoreService.cjs.map +1 -0
  17. package/lib/cjs/blob/core/BlobTypes.cjs +2 -2
  18. package/lib/cjs/blob/core/BlobTypes.cjs.map +1 -0
  19. package/lib/cjs/blob/core/BlobValue.cjs +2 -2
  20. package/lib/cjs/blob/core/BlobValue.cjs.map +1 -0
  21. package/lib/cjs/blob/core/index.cjs +2 -2
  22. package/lib/cjs/blob/core/index.cjs.map +1 -0
  23. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +2 -2
  24. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +1 -0
  25. package/lib/cjs/blob/gcp/index.cjs +2 -2
  26. package/lib/cjs/blob/gcp/index.cjs.map +1 -0
  27. package/lib/cjs/blob/index.cjs +2 -2
  28. package/lib/cjs/blob/index.cjs.map +1 -0
  29. package/lib/cjs/blob/ipfs/IpfsBlobStoreService.cjs +2 -2
  30. package/lib/cjs/blob/ipfs/IpfsBlobStoreService.cjs.map +1 -0
  31. package/lib/cjs/blob/ipfs/IpfsKeyIndex.cjs +2 -2
  32. package/lib/cjs/blob/ipfs/IpfsKeyIndex.cjs.map +1 -0
  33. package/lib/cjs/blob/ipfs/LocalJsonIpfsKeyIndex.cjs +2 -2
  34. package/lib/cjs/blob/ipfs/LocalJsonIpfsKeyIndex.cjs.map +1 -0
  35. package/lib/cjs/blob/ipfs/MemoryIpfsKeyIndex.cjs +2 -2
  36. package/lib/cjs/blob/ipfs/MemoryIpfsKeyIndex.cjs.map +1 -0
  37. package/lib/cjs/blob/ipfs/PostgresIpfsKeyIndex.cjs +2 -2
  38. package/lib/cjs/blob/ipfs/PostgresIpfsKeyIndex.cjs.map +1 -0
  39. package/lib/cjs/blob/ipfs/index.cjs +2 -2
  40. package/lib/cjs/blob/ipfs/index.cjs.map +1 -0
  41. package/lib/cjs/blob/local/LocalBlobStoreService.cjs +2 -2
  42. package/lib/cjs/blob/local/LocalBlobStoreService.cjs.map +1 -0
  43. package/lib/cjs/blob/local/index.cjs +2 -2
  44. package/lib/cjs/blob/local/index.cjs.map +1 -0
  45. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs +2 -2
  46. package/lib/cjs/blob/memory/MemoryBlobStoreService.cjs.map +1 -0
  47. package/lib/cjs/blob/memory/index.cjs +2 -2
  48. package/lib/cjs/blob/memory/index.cjs.map +1 -0
  49. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs +2 -2
  50. package/lib/cjs/blob/s3/MinioBlobStoreService.cjs.map +1 -0
  51. package/lib/cjs/blob/s3/R2BlobStoreService.cjs +2 -2
  52. package/lib/cjs/blob/s3/R2BlobStoreService.cjs.map +1 -0
  53. package/lib/cjs/blob/s3/S3BlobStoreService.cjs +2 -2
  54. package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +1 -0
  55. package/lib/cjs/blob/s3/index.cjs +2 -2
  56. package/lib/cjs/blob/s3/index.cjs.map +1 -0
  57. package/lib/cjs/docker/DockerComposeService.cjs +2 -2
  58. package/lib/cjs/docker/DockerComposeService.cjs.map +1 -0
  59. package/lib/cjs/docker/index.cjs +2 -2
  60. package/lib/cjs/docker/index.cjs.map +1 -0
  61. package/lib/cjs/graph/engine/constants.cjs +58 -0
  62. package/lib/cjs/graph/engine/constants.cjs.map +1 -0
  63. package/lib/cjs/graph/engine/decorators.cjs +4 -0
  64. package/lib/cjs/graph/engine/decorators.cjs.map +1 -0
  65. package/lib/cjs/graph/engine/errors/GraphCycleError.cjs +20 -0
  66. package/lib/cjs/graph/engine/errors/GraphCycleError.cjs.map +1 -0
  67. package/lib/cjs/graph/engine/errors/GraphExecutionError.cjs +27 -0
  68. package/lib/cjs/graph/engine/errors/GraphExecutionError.cjs.map +1 -0
  69. package/lib/cjs/graph/engine/errors/GraphInputError.cjs +20 -0
  70. package/lib/cjs/graph/engine/errors/GraphInputError.cjs.map +1 -0
  71. package/lib/cjs/graph/engine/errors/GraphLoopLimitError.cjs +20 -0
  72. package/lib/cjs/graph/engine/errors/GraphLoopLimitError.cjs.map +1 -0
  73. package/lib/cjs/graph/engine/errors/GraphPinningError.cjs +20 -0
  74. package/lib/cjs/graph/engine/errors/GraphPinningError.cjs.map +1 -0
  75. package/lib/cjs/graph/engine/errors/GraphPortError.cjs +20 -0
  76. package/lib/cjs/graph/engine/errors/GraphPortError.cjs.map +1 -0
  77. package/lib/cjs/graph/engine/errors/GraphStoreError.cjs +20 -0
  78. package/lib/cjs/graph/engine/errors/GraphStoreError.cjs.map +1 -0
  79. package/lib/cjs/graph/engine/errors/GraphTopologyError.cjs +20 -0
  80. package/lib/cjs/graph/engine/errors/GraphTopologyError.cjs.map +1 -0
  81. package/lib/cjs/graph/engine/errors/index.cjs +31 -0
  82. package/lib/cjs/graph/engine/errors/index.cjs.map +1 -0
  83. package/lib/cjs/graph/engine/events/GraphExecutionEvent.cjs +4 -0
  84. package/lib/cjs/graph/engine/events/GraphExecutionEvent.cjs.map +1 -0
  85. package/lib/cjs/graph/engine/events/GraphExecutionEventEmitter.cjs +40 -0
  86. package/lib/cjs/graph/engine/events/GraphExecutionEventEmitter.cjs.map +1 -0
  87. package/lib/cjs/graph/engine/events/GraphExecutionEventFactory.cjs +37 -0
  88. package/lib/cjs/graph/engine/events/GraphExecutionEventFactory.cjs.map +1 -0
  89. package/lib/cjs/graph/engine/events/GraphExecutionObserver.cjs +4 -0
  90. package/lib/cjs/graph/engine/events/GraphExecutionObserver.cjs.map +1 -0
  91. package/lib/cjs/graph/engine/events/index.cjs +27 -0
  92. package/lib/cjs/graph/engine/events/index.cjs.map +1 -0
  93. package/lib/cjs/graph/engine/execution/CodeSandboxEvaluator.cjs +4 -0
  94. package/lib/cjs/graph/engine/execution/CodeSandboxEvaluator.cjs.map +1 -0
  95. package/lib/cjs/graph/engine/execution/GraphExecutionContext.cjs +79 -0
  96. package/lib/cjs/graph/engine/execution/GraphExecutionContext.cjs.map +1 -0
  97. package/lib/cjs/graph/engine/execution/GraphExecutionEngine.cjs +413 -0
  98. package/lib/cjs/graph/engine/execution/GraphExecutionEngine.cjs.map +1 -0
  99. package/lib/cjs/graph/engine/execution/GraphExecutionFrame.cjs +32 -0
  100. package/lib/cjs/graph/engine/execution/GraphExecutionFrame.cjs.map +1 -0
  101. package/lib/cjs/graph/engine/execution/GraphExecutionResult.cjs +30 -0
  102. package/lib/cjs/graph/engine/execution/GraphExecutionResult.cjs.map +1 -0
  103. package/lib/cjs/graph/engine/execution/GraphNodeExecutor.cjs +4 -0
  104. package/lib/cjs/graph/engine/execution/GraphNodeExecutor.cjs.map +1 -0
  105. package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +103 -0
  106. package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs.map +1 -0
  107. package/lib/cjs/graph/engine/execution/index.cjs +30 -0
  108. package/lib/cjs/graph/engine/execution/index.cjs.map +1 -0
  109. package/lib/cjs/graph/engine/index.cjs +84 -0
  110. package/lib/cjs/graph/engine/index.cjs.map +1 -0
  111. package/lib/cjs/graph/engine/loops/ConditionExpressionEvaluator.cjs +87 -0
  112. package/lib/cjs/graph/engine/loops/ConditionExpressionEvaluator.cjs.map +1 -0
  113. package/lib/cjs/graph/engine/loops/ForeachGraphNodeExecutor.cjs +85 -0
  114. package/lib/cjs/graph/engine/loops/ForeachGraphNodeExecutor.cjs.map +1 -0
  115. package/lib/cjs/graph/engine/loops/GraphConditionEvaluator.cjs +85 -0
  116. package/lib/cjs/graph/engine/loops/GraphConditionEvaluator.cjs.map +1 -0
  117. package/lib/cjs/graph/engine/loops/GraphLoopExecutionContext.cjs +16 -0
  118. package/lib/cjs/graph/engine/loops/GraphLoopExecutionContext.cjs.map +1 -0
  119. package/lib/cjs/graph/engine/loops/UntilGraphNodeExecutor.cjs +77 -0
  120. package/lib/cjs/graph/engine/loops/UntilGraphNodeExecutor.cjs.map +1 -0
  121. package/lib/cjs/graph/engine/loops/WhileGraphNodeExecutor.cjs +78 -0
  122. package/lib/cjs/graph/engine/loops/WhileGraphNodeExecutor.cjs.map +1 -0
  123. package/lib/cjs/graph/engine/loops/index.cjs +29 -0
  124. package/lib/cjs/graph/engine/loops/index.cjs.map +1 -0
  125. package/lib/cjs/graph/engine/pinning/GraphPinningDependencyResolver.cjs +28 -0
  126. package/lib/cjs/graph/engine/pinning/GraphPinningDependencyResolver.cjs.map +1 -0
  127. package/lib/cjs/graph/engine/pinning/GraphPinningMetadata.cjs +20 -0
  128. package/lib/cjs/graph/engine/pinning/GraphPinningMetadata.cjs.map +1 -0
  129. package/lib/cjs/graph/engine/pinning/GraphPinningPolicy.cjs +34 -0
  130. package/lib/cjs/graph/engine/pinning/GraphPinningPolicy.cjs.map +1 -0
  131. package/lib/cjs/graph/engine/pinning/GraphPinningService.cjs +191 -0
  132. package/lib/cjs/graph/engine/pinning/GraphPinningService.cjs.map +1 -0
  133. package/lib/cjs/graph/engine/pinning/index.cjs +27 -0
  134. package/lib/cjs/graph/engine/pinning/index.cjs.map +1 -0
  135. package/lib/cjs/graph/engine/planning/GraphExecutionPlan.cjs +4 -0
  136. package/lib/cjs/graph/engine/planning/GraphExecutionPlan.cjs.map +1 -0
  137. package/lib/cjs/graph/engine/planning/GraphExecutionPlanEdge.cjs +4 -0
  138. package/lib/cjs/graph/engine/planning/GraphExecutionPlanEdge.cjs.map +1 -0
  139. package/lib/cjs/graph/engine/planning/GraphExecutionPlanLayer.cjs +4 -0
  140. package/lib/cjs/graph/engine/planning/GraphExecutionPlanLayer.cjs.map +1 -0
  141. package/lib/cjs/graph/engine/planning/GraphExecutionPlanNode.cjs +4 -0
  142. package/lib/cjs/graph/engine/planning/GraphExecutionPlanNode.cjs.map +1 -0
  143. package/lib/cjs/graph/engine/planning/GraphExecutionPlanner.cjs +197 -0
  144. package/lib/cjs/graph/engine/planning/GraphExecutionPlanner.cjs.map +1 -0
  145. package/lib/cjs/graph/engine/planning/GraphRelationResolver.cjs +172 -0
  146. package/lib/cjs/graph/engine/planning/GraphRelationResolver.cjs.map +1 -0
  147. package/lib/cjs/graph/engine/planning/GraphTopology.cjs +57 -0
  148. package/lib/cjs/graph/engine/planning/GraphTopology.cjs.map +1 -0
  149. package/lib/cjs/graph/engine/planning/index.cjs +30 -0
  150. package/lib/cjs/graph/engine/planning/index.cjs.map +1 -0
  151. package/lib/cjs/graph/engine/registry/GraphNodeExecutorRegistry.cjs +44 -0
  152. package/lib/cjs/graph/engine/registry/GraphNodeExecutorRegistry.cjs.map +1 -0
  153. package/lib/cjs/graph/engine/registry/GraphNodeExecutorResolver.cjs +27 -0
  154. package/lib/cjs/graph/engine/registry/GraphNodeExecutorResolver.cjs.map +1 -0
  155. package/lib/cjs/graph/engine/registry/index.cjs +25 -0
  156. package/lib/cjs/graph/engine/registry/index.cjs.map +1 -0
  157. package/lib/cjs/graph/engine/snapshots/GraphExecutionSnapshotMapper.cjs +53 -0
  158. package/lib/cjs/graph/engine/snapshots/GraphExecutionSnapshotMapper.cjs.map +1 -0
  159. package/lib/cjs/graph/engine/snapshots/index.cjs +24 -0
  160. package/lib/cjs/graph/engine/snapshots/index.cjs.map +1 -0
  161. package/lib/cjs/graph/engine/store/GraphCachedValue.cjs +4 -0
  162. package/lib/cjs/graph/engine/store/GraphCachedValue.cjs.map +1 -0
  163. package/lib/cjs/graph/engine/store/GraphValueKey.cjs +4 -0
  164. package/lib/cjs/graph/engine/store/GraphValueKey.cjs.map +1 -0
  165. package/lib/cjs/graph/engine/store/GraphValueStore.cjs +76 -0
  166. package/lib/cjs/graph/engine/store/GraphValueStore.cjs.map +1 -0
  167. package/lib/cjs/graph/engine/store/GraphValueStoreAdapter.cjs +4 -0
  168. package/lib/cjs/graph/engine/store/GraphValueStoreAdapter.cjs.map +1 -0
  169. package/lib/cjs/graph/engine/store/InMemoryGraphValueStoreAdapter.cjs +69 -0
  170. package/lib/cjs/graph/engine/store/InMemoryGraphValueStoreAdapter.cjs.map +1 -0
  171. package/lib/cjs/graph/engine/store/index.cjs +28 -0
  172. package/lib/cjs/graph/engine/store/index.cjs.map +1 -0
  173. package/lib/cjs/graph/engine/types.cjs +4 -0
  174. package/lib/cjs/graph/engine/types.cjs.map +1 -0
  175. package/lib/cjs/graph/engine/validation/GraphDefinitionValidator.cjs +33 -0
  176. package/lib/cjs/graph/engine/validation/GraphDefinitionValidator.cjs.map +1 -0
  177. package/lib/cjs/graph/engine/validation/GraphPortSchemaResolver.cjs +58 -0
  178. package/lib/cjs/graph/engine/validation/GraphPortSchemaResolver.cjs.map +1 -0
  179. package/lib/cjs/graph/engine/validation/GraphValueValidator.cjs +52 -0
  180. package/lib/cjs/graph/engine/validation/GraphValueValidator.cjs.map +1 -0
  181. package/lib/cjs/graph/engine/validation/index.cjs +26 -0
  182. package/lib/cjs/graph/engine/validation/index.cjs.map +1 -0
  183. package/lib/cjs/graph/index.cjs +10 -60
  184. package/lib/cjs/graph/index.cjs.map +1 -0
  185. package/lib/cjs/graph/shared/constants.cjs +44 -0
  186. package/lib/cjs/graph/shared/constants.cjs.map +1 -0
  187. package/lib/cjs/graph/shared/index.cjs +38 -0
  188. package/lib/cjs/graph/shared/index.cjs.map +1 -0
  189. package/lib/cjs/graph/shared/nodes/agent.cjs +110 -0
  190. package/lib/cjs/graph/shared/nodes/agent.cjs.map +1 -0
  191. package/lib/cjs/graph/shared/nodes/base.cjs +36 -0
  192. package/lib/cjs/graph/shared/nodes/base.cjs.map +1 -0
  193. package/lib/cjs/graph/shared/nodes/category-styles.cjs +38 -0
  194. package/lib/cjs/graph/shared/nodes/category-styles.cjs.map +1 -0
  195. package/lib/cjs/graph/shared/nodes/flow-control.cjs +464 -0
  196. package/lib/cjs/graph/shared/nodes/flow-control.cjs.map +1 -0
  197. package/lib/cjs/graph/shared/nodes/index.cjs +35 -0
  198. package/lib/cjs/graph/shared/nodes/index.cjs.map +1 -0
  199. package/lib/cjs/graph/shared/nodes/triggers.cjs +250 -0
  200. package/lib/cjs/graph/shared/nodes/triggers.cjs.map +1 -0
  201. package/lib/cjs/graph/shared/types.cjs +4 -0
  202. package/lib/cjs/graph/shared/types.cjs.map +1 -0
  203. package/lib/cjs/index.cjs +5 -5
  204. package/lib/cjs/index.cjs.map +1 -0
  205. package/lib/cjs/keycloak/index.cjs +2 -2
  206. package/lib/cjs/keycloak/index.cjs.map +1 -0
  207. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs +2 -2
  208. package/lib/cjs/keycloak/services/KeycloakAuthService.cjs.map +1 -0
  209. package/lib/cjs/keycloak/services/KeycloakClientService.cjs +2 -2
  210. package/lib/cjs/keycloak/services/KeycloakClientService.cjs.map +1 -0
  211. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs +2 -2
  212. package/lib/cjs/keycloak/services/KeycloakIdentityProviderService.cjs.map +1 -0
  213. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs +2 -2
  214. package/lib/cjs/keycloak/services/KeycloakRealmService.cjs.map +1 -0
  215. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +2 -2
  216. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +1 -0
  217. package/lib/cjs/keycloak/services/KeycloakService.cjs +2 -2
  218. package/lib/cjs/keycloak/services/KeycloakService.cjs.map +1 -0
  219. package/lib/cjs/keycloak/services/KeycloakUserService.cjs +2 -2
  220. package/lib/cjs/keycloak/services/KeycloakUserService.cjs.map +1 -0
  221. package/lib/cjs/keycloak/services/index.cjs +2 -2
  222. package/lib/cjs/keycloak/services/index.cjs.map +1 -0
  223. package/lib/cjs/keycloak/services/runtime.cjs +2 -2
  224. package/lib/cjs/keycloak/services/runtime.cjs.map +1 -0
  225. package/lib/cjs/keycloak/types.cjs +2 -2
  226. package/lib/cjs/keycloak/types.cjs.map +1 -0
  227. package/lib/cjs/kibana/helpers.cjs +2 -2
  228. package/lib/cjs/kibana/helpers.cjs.map +1 -0
  229. package/lib/cjs/kibana/index.cjs +2 -2
  230. package/lib/cjs/kibana/index.cjs.map +1 -0
  231. package/lib/cjs/kibana/services/KibanaAuthService.cjs +2 -2
  232. package/lib/cjs/kibana/services/KibanaAuthService.cjs.map +1 -0
  233. package/lib/cjs/kibana/services/KibanaDashboardService.cjs +2 -2
  234. package/lib/cjs/kibana/services/KibanaDashboardService.cjs.map +1 -0
  235. package/lib/cjs/kibana/services/KibanaDataViewService.cjs +2 -2
  236. package/lib/cjs/kibana/services/KibanaDataViewService.cjs.map +1 -0
  237. package/lib/cjs/kibana/services/KibanaRoleService.cjs +2 -2
  238. package/lib/cjs/kibana/services/KibanaRoleService.cjs.map +1 -0
  239. package/lib/cjs/kibana/services/KibanaService.cjs +2 -2
  240. package/lib/cjs/kibana/services/KibanaService.cjs.map +1 -0
  241. package/lib/cjs/kibana/services/KibanaSpaceService.cjs +2 -2
  242. package/lib/cjs/kibana/services/KibanaSpaceService.cjs.map +1 -0
  243. package/lib/cjs/kibana/services/KibanaUserService.cjs +2 -2
  244. package/lib/cjs/kibana/services/KibanaUserService.cjs.map +1 -0
  245. package/lib/cjs/kibana/services/index.cjs +2 -2
  246. package/lib/cjs/kibana/services/index.cjs.map +1 -0
  247. package/lib/cjs/kibana/services/runtime.cjs +2 -2
  248. package/lib/cjs/kibana/services/runtime.cjs.map +1 -0
  249. package/lib/cjs/kibana/types.cjs +2 -2
  250. package/lib/cjs/kibana/types.cjs.map +1 -0
  251. package/lib/cjs/namespaces/index.cjs +2 -2
  252. package/lib/cjs/namespaces/index.cjs.map +1 -0
  253. package/lib/cjs/namespaces/models/authorization-model.cjs +2 -2
  254. package/lib/cjs/namespaces/models/authorization-model.cjs.map +1 -0
  255. package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -2
  256. package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +1 -0
  257. package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -2
  258. package/lib/cjs/namespaces/models/group-membership.model.cjs.map +1 -0
  259. package/lib/cjs/namespaces/models/group.model.cjs +2 -2
  260. package/lib/cjs/namespaces/models/group.model.cjs.map +1 -0
  261. package/lib/cjs/namespaces/models/index.cjs +2 -2
  262. package/lib/cjs/namespaces/models/index.cjs.map +1 -0
  263. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -2
  264. package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +1 -0
  265. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -2
  266. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +1 -0
  267. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -2
  268. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +1 -0
  269. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -2
  270. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +1 -0
  271. package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -2
  272. package/lib/cjs/namespaces/models/org-unit.model.cjs.map +1 -0
  273. package/lib/cjs/namespaces/models/permission.model.cjs +2 -2
  274. package/lib/cjs/namespaces/models/permission.model.cjs.map +1 -0
  275. package/lib/cjs/namespaces/models/principal.model.cjs +2 -2
  276. package/lib/cjs/namespaces/models/principal.model.cjs.map +1 -0
  277. package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -2
  278. package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +1 -0
  279. package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -2
  280. package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +1 -0
  281. package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -2
  282. package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +1 -0
  283. package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -2
  284. package/lib/cjs/namespaces/models/role-permission.model.cjs.map +1 -0
  285. package/lib/cjs/namespaces/models/role.model.cjs +2 -2
  286. package/lib/cjs/namespaces/models/role.model.cjs.map +1 -0
  287. package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -2
  288. package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +1 -0
  289. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -2
  290. package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +1 -0
  291. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -2
  292. package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +1 -0
  293. package/lib/cjs/namespaces/models/tenant.model.cjs +2 -2
  294. package/lib/cjs/namespaces/models/tenant.model.cjs.map +1 -0
  295. package/lib/cjs/namespaces/models/user.model.cjs +2 -2
  296. package/lib/cjs/namespaces/models/user.model.cjs.map +1 -0
  297. package/lib/cjs/namespaces/org-based-authorization-system.cjs +10 -4
  298. package/lib/cjs/namespaces/org-based-authorization-system.cjs.map +1 -0
  299. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +2 -2
  300. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs.map +1 -0
  301. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +19 -10
  302. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs.map +1 -0
  303. package/lib/cjs/namespaces/services/authz.service.cjs +39 -13
  304. package/lib/cjs/namespaces/services/authz.service.cjs.map +1 -0
  305. package/lib/cjs/namespaces/services/bootstrap.service.cjs +2 -2
  306. package/lib/cjs/namespaces/services/bootstrap.service.cjs.map +1 -0
  307. package/lib/cjs/namespaces/services/effective-permission.service.cjs +2 -2
  308. package/lib/cjs/namespaces/services/effective-permission.service.cjs.map +1 -0
  309. package/lib/cjs/namespaces/services/group-membership.service.cjs +2 -2
  310. package/lib/cjs/namespaces/services/group-membership.service.cjs.map +1 -0
  311. package/lib/cjs/namespaces/services/group.service.cjs +2 -2
  312. package/lib/cjs/namespaces/services/group.service.cjs.map +1 -0
  313. package/lib/cjs/namespaces/services/index.cjs +2 -2
  314. package/lib/cjs/namespaces/services/index.cjs.map +1 -0
  315. package/lib/cjs/namespaces/services/inheritance-block.service.cjs +6 -4
  316. package/lib/cjs/namespaces/services/inheritance-block.service.cjs.map +1 -0
  317. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +16 -7
  318. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs.map +1 -0
  319. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +2 -2
  320. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs.map +1 -0
  321. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +2 -2
  322. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs.map +1 -0
  323. package/lib/cjs/namespaces/services/org-unit.service.cjs +2 -2
  324. package/lib/cjs/namespaces/services/org-unit.service.cjs.map +1 -0
  325. package/lib/cjs/namespaces/services/permission.service.cjs +2 -2
  326. package/lib/cjs/namespaces/services/permission.service.cjs.map +1 -0
  327. package/lib/cjs/namespaces/services/principal.service.cjs +2 -2
  328. package/lib/cjs/namespaces/services/principal.service.cjs.map +1 -0
  329. package/lib/cjs/namespaces/services/protected-resource.service.cjs +2 -2
  330. package/lib/cjs/namespaces/services/protected-resource.service.cjs.map +1 -0
  331. package/lib/cjs/namespaces/services/resource-grant.service.cjs +2 -2
  332. package/lib/cjs/namespaces/services/resource-grant.service.cjs.map +1 -0
  333. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +2 -2
  334. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs.map +1 -0
  335. package/lib/cjs/namespaces/services/role-assignment.service.cjs +4 -3
  336. package/lib/cjs/namespaces/services/role-assignment.service.cjs.map +1 -0
  337. package/lib/cjs/namespaces/services/role-permission.service.cjs +2 -2
  338. package/lib/cjs/namespaces/services/role-permission.service.cjs.map +1 -0
  339. package/lib/cjs/namespaces/services/role.service.cjs +2 -2
  340. package/lib/cjs/namespaces/services/role.service.cjs.map +1 -0
  341. package/lib/cjs/namespaces/services/storage-binding.service.cjs +2 -2
  342. package/lib/cjs/namespaces/services/storage-binding.service.cjs.map +1 -0
  343. package/lib/cjs/namespaces/services/system-management.service.cjs +2 -2
  344. package/lib/cjs/namespaces/services/system-management.service.cjs.map +1 -0
  345. package/lib/cjs/namespaces/services/tenant-membership.service.cjs +2 -2
  346. package/lib/cjs/namespaces/services/tenant-membership.service.cjs.map +1 -0
  347. package/lib/cjs/namespaces/services/tenant-profile.service.cjs +2 -2
  348. package/lib/cjs/namespaces/services/tenant-profile.service.cjs.map +1 -0
  349. package/lib/cjs/namespaces/services/tenant.service.cjs +2 -2
  350. package/lib/cjs/namespaces/services/tenant.service.cjs.map +1 -0
  351. package/lib/cjs/namespaces/services/user.service.cjs +2 -2
  352. package/lib/cjs/namespaces/services/user.service.cjs.map +1 -0
  353. package/lib/cjs/namespaces/types.cjs +2 -2
  354. package/lib/cjs/namespaces/types.cjs.map +1 -0
  355. package/lib/cjs/namespaces/utils.cjs +13 -5
  356. package/lib/cjs/namespaces/utils.cjs.map +1 -0
  357. package/lib/cjs/nest/authService.cjs +2 -2
  358. package/lib/cjs/nest/authService.cjs.map +1 -0
  359. package/lib/cjs/nest/graph/GraphExecutionController.cjs +2 -2
  360. package/lib/cjs/nest/graph/GraphExecutionController.cjs.map +1 -0
  361. package/lib/cjs/nest/graph/GraphExecutionModule.cjs +6 -4
  362. package/lib/cjs/nest/graph/GraphExecutionModule.cjs.map +1 -0
  363. package/lib/cjs/nest/graph/GraphExecutionResultModel.cjs +2 -2
  364. package/lib/cjs/nest/graph/GraphExecutionResultModel.cjs.map +1 -0
  365. package/lib/cjs/nest/graph/GraphExecutionResultRepository.cjs +2 -2
  366. package/lib/cjs/nest/graph/GraphExecutionResultRepository.cjs.map +1 -0
  367. package/lib/cjs/nest/graph/GraphExecutorRegistryFactory.cjs +97 -11
  368. package/lib/cjs/nest/graph/GraphExecutorRegistryFactory.cjs.map +1 -0
  369. package/lib/cjs/nest/graph/index.cjs +2 -2
  370. package/lib/cjs/nest/graph/index.cjs.map +1 -0
  371. package/lib/cjs/nest/graph/main.cjs +30 -0
  372. package/lib/cjs/nest/graph/main.cjs.map +1 -0
  373. package/lib/cjs/nest/index.cjs +2 -2
  374. package/lib/cjs/nest/index.cjs.map +1 -0
  375. package/lib/cjs/nest/keycloakAuthHandler.cjs +2 -2
  376. package/lib/cjs/nest/keycloakAuthHandler.cjs.map +1 -0
  377. package/lib/cjs/nest/keycloakModule.cjs +2 -2
  378. package/lib/cjs/nest/keycloakModule.cjs.map +1 -0
  379. package/lib/cjs/nest/logging.cjs +2 -2
  380. package/lib/cjs/nest/logging.cjs.map +1 -0
  381. package/lib/cjs/nest/types.cjs +2 -2
  382. package/lib/cjs/nest/types.cjs.map +1 -0
  383. package/lib/cjs/nest/utils.cjs +2 -2
  384. package/lib/cjs/nest/utils.cjs.map +1 -0
  385. package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -2
  386. package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +1 -0
  387. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs +2 -2
  388. package/lib/cjs/secrets/aws/AwsSecretServiceConfig.cjs.map +1 -0
  389. package/lib/cjs/secrets/aws/index.cjs +2 -2
  390. package/lib/cjs/secrets/aws/index.cjs.map +1 -0
  391. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -2
  392. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +1 -0
  393. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs +2 -2
  394. package/lib/cjs/secrets/azure/AzureKeyVaultSecretServiceConfig.cjs.map +1 -0
  395. package/lib/cjs/secrets/azure/index.cjs +2 -2
  396. package/lib/cjs/secrets/azure/index.cjs.map +1 -0
  397. package/lib/cjs/secrets/core/SecretErrors.cjs +2 -2
  398. package/lib/cjs/secrets/core/SecretErrors.cjs.map +1 -0
  399. package/lib/cjs/secrets/core/SecretName.cjs +2 -2
  400. package/lib/cjs/secrets/core/SecretName.cjs.map +1 -0
  401. package/lib/cjs/secrets/core/SecretReference.cjs +2 -2
  402. package/lib/cjs/secrets/core/SecretReference.cjs.map +1 -0
  403. package/lib/cjs/secrets/core/SecretSerialization.cjs +2 -2
  404. package/lib/cjs/secrets/core/SecretSerialization.cjs.map +1 -0
  405. package/lib/cjs/secrets/core/SecretService.cjs +2 -2
  406. package/lib/cjs/secrets/core/SecretService.cjs.map +1 -0
  407. package/lib/cjs/secrets/core/SecretTypes.cjs +2 -2
  408. package/lib/cjs/secrets/core/SecretTypes.cjs.map +1 -0
  409. package/lib/cjs/secrets/core/index.cjs +2 -2
  410. package/lib/cjs/secrets/core/index.cjs.map +1 -0
  411. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -2
  412. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +1 -0
  413. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs +2 -2
  414. package/lib/cjs/secrets/gcp/GcpSecretManagerServiceConfig.cjs.map +1 -0
  415. package/lib/cjs/secrets/gcp/index.cjs +2 -2
  416. package/lib/cjs/secrets/gcp/index.cjs.map +1 -0
  417. package/lib/cjs/secrets/index.cjs +2 -2
  418. package/lib/cjs/secrets/index.cjs.map +1 -0
  419. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs +2 -2
  420. package/lib/cjs/secrets/model/ModelSecretCrypto.cjs.map +1 -0
  421. package/lib/cjs/secrets/model/ModelSecretService.cjs +2 -2
  422. package/lib/cjs/secrets/model/ModelSecretService.cjs.map +1 -0
  423. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs +2 -2
  424. package/lib/cjs/secrets/model/ModelSecretServiceConfig.cjs.map +1 -0
  425. package/lib/cjs/secrets/model/Secret.cjs +2 -2
  426. package/lib/cjs/secrets/model/Secret.cjs.map +1 -0
  427. package/lib/cjs/secrets/model/index.cjs +2 -2
  428. package/lib/cjs/secrets/model/index.cjs.map +1 -0
  429. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -2
  430. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +1 -0
  431. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs +2 -2
  432. package/lib/cjs/secrets/onepassword/OnePasswordSecretServiceConfig.cjs.map +1 -0
  433. package/lib/cjs/secrets/onepassword/index.cjs +2 -2
  434. package/lib/cjs/secrets/onepassword/index.cjs.map +1 -0
  435. package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -2
  436. package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +1 -0
  437. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs +2 -2
  438. package/lib/cjs/secrets/vault/VaultSecretServiceConfig.cjs.map +1 -0
  439. package/lib/cjs/secrets/vault/index.cjs +2 -2
  440. package/lib/cjs/secrets/vault/index.cjs.map +1 -0
  441. package/lib/cjs/shared/runtime.cjs +2 -2
  442. package/lib/cjs/shared/runtime.cjs.map +1 -0
  443. package/lib/cjs/utils.cjs +2 -2
  444. package/lib/cjs/utils.cjs.map +1 -0
  445. package/lib/esm/blob/azure/AzureBlobStoreService.js +1 -1
  446. package/lib/esm/blob/azure/AzureBlobStoreService.js.map +1 -0
  447. package/lib/esm/blob/azure/index.js +1 -1
  448. package/lib/esm/blob/azure/index.js.map +1 -0
  449. package/lib/esm/blob/core/BlobErrors.js +1 -1
  450. package/lib/esm/blob/core/BlobErrors.js.map +1 -0
  451. package/lib/esm/blob/core/BlobKey.js +1 -1
  452. package/lib/esm/blob/core/BlobKey.js.map +1 -0
  453. package/lib/esm/blob/core/BlobStoreFactory.js +1 -1
  454. package/lib/esm/blob/core/BlobStoreFactory.js.map +1 -0
  455. package/lib/esm/blob/core/BlobStoreService.js +1 -1
  456. package/lib/esm/blob/core/BlobStoreService.js.map +1 -0
  457. package/lib/esm/blob/core/BlobTypes.js +1 -1
  458. package/lib/esm/blob/core/BlobTypes.js.map +1 -0
  459. package/lib/esm/blob/core/BlobValue.js +1 -1
  460. package/lib/esm/blob/core/BlobValue.js.map +1 -0
  461. package/lib/esm/blob/core/index.js +1 -1
  462. package/lib/esm/blob/core/index.js.map +1 -0
  463. package/lib/esm/blob/gcp/GcsBlobStoreService.js +1 -1
  464. package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +1 -0
  465. package/lib/esm/blob/gcp/index.js +1 -1
  466. package/lib/esm/blob/gcp/index.js.map +1 -0
  467. package/lib/esm/blob/index.js +1 -1
  468. package/lib/esm/blob/index.js.map +1 -0
  469. package/lib/esm/blob/ipfs/IpfsBlobStoreService.js +1 -1
  470. package/lib/esm/blob/ipfs/IpfsBlobStoreService.js.map +1 -0
  471. package/lib/esm/blob/ipfs/IpfsKeyIndex.js +1 -1
  472. package/lib/esm/blob/ipfs/IpfsKeyIndex.js.map +1 -0
  473. package/lib/esm/blob/ipfs/LocalJsonIpfsKeyIndex.js +1 -1
  474. package/lib/esm/blob/ipfs/LocalJsonIpfsKeyIndex.js.map +1 -0
  475. package/lib/esm/blob/ipfs/MemoryIpfsKeyIndex.js +1 -1
  476. package/lib/esm/blob/ipfs/MemoryIpfsKeyIndex.js.map +1 -0
  477. package/lib/esm/blob/ipfs/PostgresIpfsKeyIndex.js +1 -1
  478. package/lib/esm/blob/ipfs/PostgresIpfsKeyIndex.js.map +1 -0
  479. package/lib/esm/blob/ipfs/index.js +1 -1
  480. package/lib/esm/blob/ipfs/index.js.map +1 -0
  481. package/lib/esm/blob/local/LocalBlobStoreService.js +1 -1
  482. package/lib/esm/blob/local/LocalBlobStoreService.js.map +1 -0
  483. package/lib/esm/blob/local/index.js +1 -1
  484. package/lib/esm/blob/local/index.js.map +1 -0
  485. package/lib/esm/blob/memory/MemoryBlobStoreService.js +1 -1
  486. package/lib/esm/blob/memory/MemoryBlobStoreService.js.map +1 -0
  487. package/lib/esm/blob/memory/index.js +1 -1
  488. package/lib/esm/blob/memory/index.js.map +1 -0
  489. package/lib/esm/blob/s3/MinioBlobStoreService.js +1 -1
  490. package/lib/esm/blob/s3/MinioBlobStoreService.js.map +1 -0
  491. package/lib/esm/blob/s3/R2BlobStoreService.js +1 -1
  492. package/lib/esm/blob/s3/R2BlobStoreService.js.map +1 -0
  493. package/lib/esm/blob/s3/S3BlobStoreService.js +1 -1
  494. package/lib/esm/blob/s3/S3BlobStoreService.js.map +1 -0
  495. package/lib/esm/blob/s3/index.js +1 -1
  496. package/lib/esm/blob/s3/index.js.map +1 -0
  497. package/lib/esm/docker/DockerComposeService.js +1 -1
  498. package/lib/esm/docker/DockerComposeService.js.map +1 -0
  499. package/lib/esm/docker/index.js +1 -1
  500. package/lib/esm/docker/index.js.map +1 -0
  501. package/lib/esm/graph/engine/constants.js +62 -0
  502. package/lib/esm/graph/engine/constants.js.map +1 -0
  503. package/lib/esm/graph/engine/decorators.js +2 -0
  504. package/lib/esm/graph/engine/decorators.js.map +1 -0
  505. package/lib/esm/graph/engine/errors/GraphCycleError.js +15 -0
  506. package/lib/esm/graph/engine/errors/GraphCycleError.js.map +1 -0
  507. package/lib/esm/graph/engine/errors/GraphExecutionError.js +22 -0
  508. package/lib/esm/graph/engine/errors/GraphExecutionError.js.map +1 -0
  509. package/lib/esm/graph/engine/errors/GraphInputError.js +15 -0
  510. package/lib/esm/graph/engine/errors/GraphInputError.js.map +1 -0
  511. package/lib/esm/graph/engine/errors/GraphLoopLimitError.js +15 -0
  512. package/lib/esm/graph/engine/errors/GraphLoopLimitError.js.map +1 -0
  513. package/lib/esm/graph/engine/errors/GraphPinningError.js +15 -0
  514. package/lib/esm/graph/engine/errors/GraphPinningError.js.map +1 -0
  515. package/lib/esm/graph/engine/errors/GraphPortError.js +15 -0
  516. package/lib/esm/graph/engine/errors/GraphPortError.js.map +1 -0
  517. package/lib/esm/graph/engine/errors/GraphStoreError.js +15 -0
  518. package/lib/esm/graph/engine/errors/GraphStoreError.js.map +1 -0
  519. package/lib/esm/graph/engine/errors/GraphTopologyError.js +15 -0
  520. package/lib/esm/graph/engine/errors/GraphTopologyError.js.map +1 -0
  521. package/lib/esm/graph/engine/errors/index.js +14 -0
  522. package/lib/esm/graph/engine/errors/index.js.map +1 -0
  523. package/lib/esm/graph/engine/events/GraphExecutionEvent.js +2 -0
  524. package/lib/esm/graph/engine/events/GraphExecutionEvent.js.map +1 -0
  525. package/lib/esm/graph/engine/events/GraphExecutionEventEmitter.js +35 -0
  526. package/lib/esm/graph/engine/events/GraphExecutionEventEmitter.js.map +1 -0
  527. package/lib/esm/graph/engine/events/GraphExecutionEventFactory.js +32 -0
  528. package/lib/esm/graph/engine/events/GraphExecutionEventFactory.js.map +1 -0
  529. package/lib/esm/graph/engine/events/GraphExecutionObserver.js +2 -0
  530. package/lib/esm/graph/engine/events/GraphExecutionObserver.js.map +1 -0
  531. package/lib/esm/graph/engine/events/index.js +10 -0
  532. package/lib/esm/graph/engine/events/index.js.map +1 -0
  533. package/lib/esm/graph/engine/execution/CodeSandboxEvaluator.js +18 -0
  534. package/lib/esm/graph/engine/execution/CodeSandboxEvaluator.js.map +1 -0
  535. package/lib/esm/graph/engine/execution/GraphExecutionContext.js +74 -0
  536. package/lib/esm/graph/engine/execution/GraphExecutionContext.js.map +1 -0
  537. package/lib/esm/graph/engine/execution/GraphExecutionEngine.js +408 -0
  538. package/lib/esm/graph/engine/execution/GraphExecutionEngine.js.map +1 -0
  539. package/lib/esm/graph/engine/execution/GraphExecutionFrame.js +27 -0
  540. package/lib/esm/graph/engine/execution/GraphExecutionFrame.js.map +1 -0
  541. package/lib/esm/graph/engine/execution/GraphExecutionResult.js +26 -0
  542. package/lib/esm/graph/engine/execution/GraphExecutionResult.js.map +1 -0
  543. package/lib/esm/graph/engine/execution/GraphNodeExecutor.js +2 -0
  544. package/lib/esm/graph/engine/execution/GraphNodeExecutor.js.map +1 -0
  545. package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +98 -0
  546. package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js.map +1 -0
  547. package/lib/esm/graph/engine/execution/index.js +13 -0
  548. package/lib/esm/graph/engine/execution/index.js.map +1 -0
  549. package/lib/esm/graph/engine/index.js +67 -0
  550. package/lib/esm/graph/engine/index.js.map +1 -0
  551. package/lib/esm/graph/engine/loops/ConditionExpressionEvaluator.js +82 -0
  552. package/lib/esm/graph/engine/loops/ConditionExpressionEvaluator.js.map +1 -0
  553. package/lib/esm/graph/engine/loops/ForeachGraphNodeExecutor.js +80 -0
  554. package/lib/esm/graph/engine/loops/ForeachGraphNodeExecutor.js.map +1 -0
  555. package/lib/esm/graph/engine/loops/GraphConditionEvaluator.js +80 -0
  556. package/lib/esm/graph/engine/loops/GraphConditionEvaluator.js.map +1 -0
  557. package/lib/esm/graph/engine/loops/GraphLoopExecutionContext.js +11 -0
  558. package/lib/esm/graph/engine/loops/GraphLoopExecutionContext.js.map +1 -0
  559. package/lib/esm/graph/engine/loops/UntilGraphNodeExecutor.js +72 -0
  560. package/lib/esm/graph/engine/loops/UntilGraphNodeExecutor.js.map +1 -0
  561. package/lib/esm/graph/engine/loops/WhileGraphNodeExecutor.js +73 -0
  562. package/lib/esm/graph/engine/loops/WhileGraphNodeExecutor.js.map +1 -0
  563. package/lib/esm/graph/engine/loops/index.js +12 -0
  564. package/lib/esm/graph/engine/loops/index.js.map +1 -0
  565. package/lib/esm/graph/engine/pinning/GraphPinningDependencyResolver.js +23 -0
  566. package/lib/esm/graph/engine/pinning/GraphPinningDependencyResolver.js.map +1 -0
  567. package/lib/esm/graph/engine/pinning/GraphPinningMetadata.js +15 -0
  568. package/lib/esm/graph/engine/pinning/GraphPinningMetadata.js.map +1 -0
  569. package/lib/esm/graph/engine/pinning/GraphPinningPolicy.js +29 -0
  570. package/lib/esm/graph/engine/pinning/GraphPinningPolicy.js.map +1 -0
  571. package/lib/esm/graph/engine/pinning/GraphPinningService.js +186 -0
  572. package/lib/esm/graph/engine/pinning/GraphPinningService.js.map +1 -0
  573. package/lib/esm/graph/engine/pinning/index.js +10 -0
  574. package/lib/esm/graph/engine/pinning/index.js.map +1 -0
  575. package/lib/esm/graph/engine/planning/GraphExecutionPlan.js +2 -0
  576. package/lib/esm/graph/engine/planning/GraphExecutionPlan.js.map +1 -0
  577. package/lib/esm/graph/engine/planning/GraphExecutionPlanEdge.js +7 -0
  578. package/lib/esm/graph/engine/planning/GraphExecutionPlanEdge.js.map +1 -0
  579. package/lib/esm/graph/engine/planning/GraphExecutionPlanLayer.js +2 -0
  580. package/lib/esm/graph/engine/planning/GraphExecutionPlanLayer.js.map +1 -0
  581. package/lib/esm/graph/engine/planning/GraphExecutionPlanNode.js +2 -0
  582. package/lib/esm/graph/engine/planning/GraphExecutionPlanNode.js.map +1 -0
  583. package/lib/esm/graph/engine/planning/GraphExecutionPlanner.js +192 -0
  584. package/lib/esm/graph/engine/planning/GraphExecutionPlanner.js.map +1 -0
  585. package/lib/esm/graph/engine/planning/GraphRelationResolver.js +167 -0
  586. package/lib/esm/graph/engine/planning/GraphRelationResolver.js.map +1 -0
  587. package/lib/esm/graph/engine/planning/GraphTopology.js +52 -0
  588. package/lib/esm/graph/engine/planning/GraphTopology.js.map +1 -0
  589. package/lib/esm/graph/engine/planning/index.js +13 -0
  590. package/lib/esm/graph/engine/planning/index.js.map +1 -0
  591. package/lib/esm/graph/engine/registry/GraphNodeExecutorRegistry.js +39 -0
  592. package/lib/esm/graph/engine/registry/GraphNodeExecutorRegistry.js.map +1 -0
  593. package/lib/esm/graph/engine/registry/GraphNodeExecutorResolver.js +22 -0
  594. package/lib/esm/graph/engine/registry/GraphNodeExecutorResolver.js.map +1 -0
  595. package/lib/esm/graph/engine/registry/index.js +8 -0
  596. package/lib/esm/graph/engine/registry/index.js.map +1 -0
  597. package/lib/esm/graph/engine/snapshots/GraphExecutionSnapshotMapper.js +48 -0
  598. package/lib/esm/graph/engine/snapshots/GraphExecutionSnapshotMapper.js.map +1 -0
  599. package/lib/esm/graph/engine/snapshots/index.js +7 -0
  600. package/lib/esm/graph/engine/snapshots/index.js.map +1 -0
  601. package/lib/esm/graph/engine/store/GraphCachedValue.js +2 -0
  602. package/lib/esm/graph/engine/store/GraphCachedValue.js.map +1 -0
  603. package/lib/esm/graph/engine/store/GraphValueKey.js +7 -0
  604. package/lib/esm/graph/engine/store/GraphValueKey.js.map +1 -0
  605. package/lib/esm/graph/engine/store/GraphValueStore.js +71 -0
  606. package/lib/esm/graph/engine/store/GraphValueStore.js.map +1 -0
  607. package/lib/esm/graph/engine/store/GraphValueStoreAdapter.js +2 -0
  608. package/lib/esm/graph/engine/store/GraphValueStoreAdapter.js.map +1 -0
  609. package/lib/esm/graph/engine/store/InMemoryGraphValueStoreAdapter.js +64 -0
  610. package/lib/esm/graph/engine/store/InMemoryGraphValueStoreAdapter.js.map +1 -0
  611. package/lib/esm/graph/engine/store/index.js +11 -0
  612. package/lib/esm/graph/engine/store/index.js.map +1 -0
  613. package/lib/esm/graph/engine/types.js +2 -0
  614. package/lib/esm/graph/engine/types.js.map +1 -0
  615. package/lib/esm/graph/engine/validation/GraphDefinitionValidator.js +28 -0
  616. package/lib/esm/graph/engine/validation/GraphDefinitionValidator.js.map +1 -0
  617. package/lib/esm/graph/engine/validation/GraphPortSchemaResolver.js +53 -0
  618. package/lib/esm/graph/engine/validation/GraphPortSchemaResolver.js.map +1 -0
  619. package/lib/esm/graph/engine/validation/GraphValueValidator.js +47 -0
  620. package/lib/esm/graph/engine/validation/GraphValueValidator.js.map +1 -0
  621. package/lib/esm/graph/engine/validation/index.js +9 -0
  622. package/lib/esm/graph/engine/validation/index.js.map +1 -0
  623. package/lib/esm/graph/index.js +9 -59
  624. package/lib/esm/graph/index.js.map +1 -0
  625. package/lib/esm/graph/shared/constants.js +56 -0
  626. package/lib/esm/graph/shared/constants.js.map +1 -0
  627. package/lib/esm/graph/shared/index.js +19 -0
  628. package/lib/esm/graph/shared/index.js.map +1 -0
  629. package/lib/esm/graph/shared/nodes/agent.js +101 -0
  630. package/lib/esm/graph/shared/nodes/agent.js.map +1 -0
  631. package/lib/esm/graph/shared/nodes/base.js +31 -0
  632. package/lib/esm/graph/shared/nodes/base.js.map +1 -0
  633. package/lib/esm/graph/shared/nodes/category-styles.js +34 -0
  634. package/lib/esm/graph/shared/nodes/category-styles.js.map +1 -0
  635. package/lib/esm/graph/shared/nodes/flow-control.js +455 -0
  636. package/lib/esm/graph/shared/nodes/flow-control.js.map +1 -0
  637. package/lib/esm/graph/shared/nodes/index.js +18 -0
  638. package/lib/esm/graph/shared/nodes/index.js.map +1 -0
  639. package/lib/esm/graph/shared/nodes/triggers.js +241 -0
  640. package/lib/esm/graph/shared/nodes/triggers.js.map +1 -0
  641. package/lib/esm/graph/shared/types.js +2 -0
  642. package/lib/esm/graph/shared/types.js.map +1 -0
  643. package/lib/esm/index.js +4 -4
  644. package/lib/esm/index.js.map +1 -0
  645. package/lib/esm/keycloak/index.js +1 -1
  646. package/lib/esm/keycloak/index.js.map +1 -0
  647. package/lib/esm/keycloak/services/KeycloakAuthService.js +1 -1
  648. package/lib/esm/keycloak/services/KeycloakAuthService.js.map +1 -0
  649. package/lib/esm/keycloak/services/KeycloakClientService.js +1 -1
  650. package/lib/esm/keycloak/services/KeycloakClientService.js.map +1 -0
  651. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js +1 -1
  652. package/lib/esm/keycloak/services/KeycloakIdentityProviderService.js.map +1 -0
  653. package/lib/esm/keycloak/services/KeycloakRealmService.js +1 -1
  654. package/lib/esm/keycloak/services/KeycloakRealmService.js.map +1 -0
  655. package/lib/esm/keycloak/services/KeycloakRoleService.js +1 -1
  656. package/lib/esm/keycloak/services/KeycloakRoleService.js.map +1 -0
  657. package/lib/esm/keycloak/services/KeycloakService.js +1 -1
  658. package/lib/esm/keycloak/services/KeycloakService.js.map +1 -0
  659. package/lib/esm/keycloak/services/KeycloakUserService.js +1 -1
  660. package/lib/esm/keycloak/services/KeycloakUserService.js.map +1 -0
  661. package/lib/esm/keycloak/services/index.js +1 -1
  662. package/lib/esm/keycloak/services/index.js.map +1 -0
  663. package/lib/esm/keycloak/services/runtime.js +1 -1
  664. package/lib/esm/keycloak/services/runtime.js.map +1 -0
  665. package/lib/esm/keycloak/types.js +1 -1
  666. package/lib/esm/keycloak/types.js.map +1 -0
  667. package/lib/esm/kibana/helpers.js +1 -1
  668. package/lib/esm/kibana/helpers.js.map +1 -0
  669. package/lib/esm/kibana/index.js +1 -1
  670. package/lib/esm/kibana/index.js.map +1 -0
  671. package/lib/esm/kibana/services/KibanaAuthService.js +1 -1
  672. package/lib/esm/kibana/services/KibanaAuthService.js.map +1 -0
  673. package/lib/esm/kibana/services/KibanaDashboardService.js +1 -1
  674. package/lib/esm/kibana/services/KibanaDashboardService.js.map +1 -0
  675. package/lib/esm/kibana/services/KibanaDataViewService.js +1 -1
  676. package/lib/esm/kibana/services/KibanaDataViewService.js.map +1 -0
  677. package/lib/esm/kibana/services/KibanaRoleService.js +1 -1
  678. package/lib/esm/kibana/services/KibanaRoleService.js.map +1 -0
  679. package/lib/esm/kibana/services/KibanaService.js +1 -1
  680. package/lib/esm/kibana/services/KibanaService.js.map +1 -0
  681. package/lib/esm/kibana/services/KibanaSpaceService.js +1 -1
  682. package/lib/esm/kibana/services/KibanaSpaceService.js.map +1 -0
  683. package/lib/esm/kibana/services/KibanaUserService.js +1 -1
  684. package/lib/esm/kibana/services/KibanaUserService.js.map +1 -0
  685. package/lib/esm/kibana/services/index.js +1 -1
  686. package/lib/esm/kibana/services/index.js.map +1 -0
  687. package/lib/esm/kibana/services/runtime.js +1 -1
  688. package/lib/esm/kibana/services/runtime.js.map +1 -0
  689. package/lib/esm/kibana/types.js +1 -1
  690. package/lib/esm/kibana/types.js.map +1 -0
  691. package/lib/esm/namespaces/index.js +1 -1
  692. package/lib/esm/namespaces/index.js.map +1 -0
  693. package/lib/esm/namespaces/models/authorization-model.js +1 -1
  694. package/lib/esm/namespaces/models/authorization-model.js.map +1 -0
  695. package/lib/esm/namespaces/models/effective-permission.model.js +1 -1
  696. package/lib/esm/namespaces/models/effective-permission.model.js.map +1 -0
  697. package/lib/esm/namespaces/models/group-membership.model.js +1 -1
  698. package/lib/esm/namespaces/models/group-membership.model.js.map +1 -0
  699. package/lib/esm/namespaces/models/group.model.js +1 -1
  700. package/lib/esm/namespaces/models/group.model.js.map +1 -0
  701. package/lib/esm/namespaces/models/index.js +1 -1
  702. package/lib/esm/namespaces/models/index.js.map +1 -0
  703. package/lib/esm/namespaces/models/inheritance-block.model.js +1 -1
  704. package/lib/esm/namespaces/models/inheritance-block.model.js.map +1 -0
  705. package/lib/esm/namespaces/models/org-unit-closure.model.js +1 -1
  706. package/lib/esm/namespaces/models/org-unit-closure.model.js.map +1 -0
  707. package/lib/esm/namespaces/models/org-unit-membership.model.js +1 -1
  708. package/lib/esm/namespaces/models/org-unit-membership.model.js.map +1 -0
  709. package/lib/esm/namespaces/models/org-unit-profile.model.js +1 -1
  710. package/lib/esm/namespaces/models/org-unit-profile.model.js.map +1 -0
  711. package/lib/esm/namespaces/models/org-unit.model.js +1 -1
  712. package/lib/esm/namespaces/models/org-unit.model.js.map +1 -0
  713. package/lib/esm/namespaces/models/permission.model.js +1 -1
  714. package/lib/esm/namespaces/models/permission.model.js.map +1 -0
  715. package/lib/esm/namespaces/models/principal.model.js +1 -1
  716. package/lib/esm/namespaces/models/principal.model.js.map +1 -0
  717. package/lib/esm/namespaces/models/protected-resource.model.js +1 -1
  718. package/lib/esm/namespaces/models/protected-resource.model.js.map +1 -0
  719. package/lib/esm/namespaces/models/resource-grant.model.js +1 -1
  720. package/lib/esm/namespaces/models/resource-grant.model.js.map +1 -0
  721. package/lib/esm/namespaces/models/role-assignment.model.js +1 -1
  722. package/lib/esm/namespaces/models/role-assignment.model.js.map +1 -0
  723. package/lib/esm/namespaces/models/role-permission.model.js +1 -1
  724. package/lib/esm/namespaces/models/role-permission.model.js.map +1 -0
  725. package/lib/esm/namespaces/models/role.model.js +1 -1
  726. package/lib/esm/namespaces/models/role.model.js.map +1 -0
  727. package/lib/esm/namespaces/models/storage-binding.model.js +1 -1
  728. package/lib/esm/namespaces/models/storage-binding.model.js.map +1 -0
  729. package/lib/esm/namespaces/models/tenant-membership.model.js +1 -1
  730. package/lib/esm/namespaces/models/tenant-membership.model.js.map +1 -0
  731. package/lib/esm/namespaces/models/tenant-profile.model.js +1 -1
  732. package/lib/esm/namespaces/models/tenant-profile.model.js.map +1 -0
  733. package/lib/esm/namespaces/models/tenant.model.js +3 -3
  734. package/lib/esm/namespaces/models/tenant.model.js.map +1 -0
  735. package/lib/esm/namespaces/models/user.model.js +1 -1
  736. package/lib/esm/namespaces/models/user.model.js.map +1 -0
  737. package/lib/esm/namespaces/org-based-authorization-system.js +10 -4
  738. package/lib/esm/namespaces/org-based-authorization-system.js.map +1 -0
  739. package/lib/esm/namespaces/org-based-authorization-system.models.js +1 -1
  740. package/lib/esm/namespaces/org-based-authorization-system.models.js.map +1 -0
  741. package/lib/esm/namespaces/org-based-authorization-system.services.js +18 -9
  742. package/lib/esm/namespaces/org-based-authorization-system.services.js.map +1 -0
  743. package/lib/esm/namespaces/services/authz.service.js +40 -14
  744. package/lib/esm/namespaces/services/authz.service.js.map +1 -0
  745. package/lib/esm/namespaces/services/bootstrap.service.js +1 -1
  746. package/lib/esm/namespaces/services/bootstrap.service.js.map +1 -0
  747. package/lib/esm/namespaces/services/effective-permission.service.js +1 -1
  748. package/lib/esm/namespaces/services/effective-permission.service.js.map +1 -0
  749. package/lib/esm/namespaces/services/group-membership.service.js +1 -1
  750. package/lib/esm/namespaces/services/group-membership.service.js.map +1 -0
  751. package/lib/esm/namespaces/services/group.service.js +1 -1
  752. package/lib/esm/namespaces/services/group.service.js.map +1 -0
  753. package/lib/esm/namespaces/services/index.js +1 -1
  754. package/lib/esm/namespaces/services/index.js.map +1 -0
  755. package/lib/esm/namespaces/services/inheritance-block.service.js +5 -3
  756. package/lib/esm/namespaces/services/inheritance-block.service.js.map +1 -0
  757. package/lib/esm/namespaces/services/org-unit-closure.service.js +16 -7
  758. package/lib/esm/namespaces/services/org-unit-closure.service.js.map +1 -0
  759. package/lib/esm/namespaces/services/org-unit-membership.service.js +1 -1
  760. package/lib/esm/namespaces/services/org-unit-membership.service.js.map +1 -0
  761. package/lib/esm/namespaces/services/org-unit-profile.service.js +1 -1
  762. package/lib/esm/namespaces/services/org-unit-profile.service.js.map +1 -0
  763. package/lib/esm/namespaces/services/org-unit.service.js +1 -1
  764. package/lib/esm/namespaces/services/org-unit.service.js.map +1 -0
  765. package/lib/esm/namespaces/services/permission.service.js +1 -1
  766. package/lib/esm/namespaces/services/permission.service.js.map +1 -0
  767. package/lib/esm/namespaces/services/principal.service.js +1 -1
  768. package/lib/esm/namespaces/services/principal.service.js.map +1 -0
  769. package/lib/esm/namespaces/services/protected-resource.service.js +1 -1
  770. package/lib/esm/namespaces/services/protected-resource.service.js.map +1 -0
  771. package/lib/esm/namespaces/services/resource-grant.service.js +1 -1
  772. package/lib/esm/namespaces/services/resource-grant.service.js.map +1 -0
  773. package/lib/esm/namespaces/services/resource-lifecycle.service.js +1 -1
  774. package/lib/esm/namespaces/services/resource-lifecycle.service.js.map +1 -0
  775. package/lib/esm/namespaces/services/role-assignment.service.js +3 -2
  776. package/lib/esm/namespaces/services/role-assignment.service.js.map +1 -0
  777. package/lib/esm/namespaces/services/role-permission.service.js +1 -1
  778. package/lib/esm/namespaces/services/role-permission.service.js.map +1 -0
  779. package/lib/esm/namespaces/services/role.service.js +1 -1
  780. package/lib/esm/namespaces/services/role.service.js.map +1 -0
  781. package/lib/esm/namespaces/services/storage-binding.service.js +1 -1
  782. package/lib/esm/namespaces/services/storage-binding.service.js.map +1 -0
  783. package/lib/esm/namespaces/services/system-management.service.js +1 -1
  784. package/lib/esm/namespaces/services/system-management.service.js.map +1 -0
  785. package/lib/esm/namespaces/services/tenant-membership.service.js +1 -1
  786. package/lib/esm/namespaces/services/tenant-membership.service.js.map +1 -0
  787. package/lib/esm/namespaces/services/tenant-profile.service.js +1 -1
  788. package/lib/esm/namespaces/services/tenant-profile.service.js.map +1 -0
  789. package/lib/esm/namespaces/services/tenant.service.js +1 -1
  790. package/lib/esm/namespaces/services/tenant.service.js.map +1 -0
  791. package/lib/esm/namespaces/services/user.service.js +1 -1
  792. package/lib/esm/namespaces/services/user.service.js.map +1 -0
  793. package/lib/esm/namespaces/types.js +1 -1
  794. package/lib/esm/namespaces/types.js.map +1 -0
  795. package/lib/esm/namespaces/utils.js +12 -4
  796. package/lib/esm/namespaces/utils.js.map +1 -0
  797. package/lib/esm/nest/authService.js +1 -1
  798. package/lib/esm/nest/authService.js.map +1 -0
  799. package/lib/esm/nest/graph/GraphExecutionController.js +1 -1
  800. package/lib/esm/nest/graph/GraphExecutionController.js.map +1 -0
  801. package/lib/esm/nest/graph/GraphExecutionModule.js +6 -4
  802. package/lib/esm/nest/graph/GraphExecutionModule.js.map +1 -0
  803. package/lib/esm/nest/graph/GraphExecutionResultModel.js +1 -1
  804. package/lib/esm/nest/graph/GraphExecutionResultModel.js.map +1 -0
  805. package/lib/esm/nest/graph/GraphExecutionResultRepository.js +1 -1
  806. package/lib/esm/nest/graph/GraphExecutionResultRepository.js.map +1 -0
  807. package/lib/esm/nest/graph/GraphExecutorRegistryFactory.js +96 -11
  808. package/lib/esm/nest/graph/GraphExecutorRegistryFactory.js.map +1 -0
  809. package/lib/esm/nest/graph/index.js +1 -1
  810. package/lib/esm/nest/graph/index.js.map +1 -0
  811. package/lib/esm/nest/graph/main.js +27 -0
  812. package/lib/esm/nest/graph/main.js.map +1 -0
  813. package/lib/esm/nest/index.js +1 -1
  814. package/lib/esm/nest/index.js.map +1 -0
  815. package/lib/esm/nest/keycloakAuthHandler.js +1 -1
  816. package/lib/esm/nest/keycloakAuthHandler.js.map +1 -0
  817. package/lib/esm/nest/keycloakModule.js +1 -1
  818. package/lib/esm/nest/keycloakModule.js.map +1 -0
  819. package/lib/esm/nest/logging.js +1 -1
  820. package/lib/esm/nest/logging.js.map +1 -0
  821. package/lib/esm/nest/types.js +1 -1
  822. package/lib/esm/nest/types.js.map +1 -0
  823. package/lib/esm/nest/utils.js +1 -1
  824. package/lib/esm/nest/utils.js.map +1 -0
  825. package/lib/esm/secrets/aws/AwsSecretService.js +1 -1
  826. package/lib/esm/secrets/aws/AwsSecretService.js.map +1 -0
  827. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js +1 -1
  828. package/lib/esm/secrets/aws/AwsSecretServiceConfig.js.map +1 -0
  829. package/lib/esm/secrets/aws/index.js +1 -1
  830. package/lib/esm/secrets/aws/index.js.map +1 -0
  831. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +1 -1
  832. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +1 -0
  833. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js +1 -1
  834. package/lib/esm/secrets/azure/AzureKeyVaultSecretServiceConfig.js.map +1 -0
  835. package/lib/esm/secrets/azure/index.js +1 -1
  836. package/lib/esm/secrets/azure/index.js.map +1 -0
  837. package/lib/esm/secrets/core/SecretErrors.js +1 -1
  838. package/lib/esm/secrets/core/SecretErrors.js.map +1 -0
  839. package/lib/esm/secrets/core/SecretName.js +1 -1
  840. package/lib/esm/secrets/core/SecretName.js.map +1 -0
  841. package/lib/esm/secrets/core/SecretReference.js +1 -1
  842. package/lib/esm/secrets/core/SecretReference.js.map +1 -0
  843. package/lib/esm/secrets/core/SecretSerialization.js +1 -1
  844. package/lib/esm/secrets/core/SecretSerialization.js.map +1 -0
  845. package/lib/esm/secrets/core/SecretService.js +1 -1
  846. package/lib/esm/secrets/core/SecretService.js.map +1 -0
  847. package/lib/esm/secrets/core/SecretTypes.js +1 -1
  848. package/lib/esm/secrets/core/SecretTypes.js.map +1 -0
  849. package/lib/esm/secrets/core/index.js +1 -1
  850. package/lib/esm/secrets/core/index.js.map +1 -0
  851. package/lib/esm/secrets/gcp/GcpSecretManagerService.js +1 -1
  852. package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +1 -0
  853. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js +1 -1
  854. package/lib/esm/secrets/gcp/GcpSecretManagerServiceConfig.js.map +1 -0
  855. package/lib/esm/secrets/gcp/index.js +1 -1
  856. package/lib/esm/secrets/gcp/index.js.map +1 -0
  857. package/lib/esm/secrets/index.js +1 -1
  858. package/lib/esm/secrets/index.js.map +1 -0
  859. package/lib/esm/secrets/model/ModelSecretCrypto.js +1 -1
  860. package/lib/esm/secrets/model/ModelSecretCrypto.js.map +1 -0
  861. package/lib/esm/secrets/model/ModelSecretService.js +1 -1
  862. package/lib/esm/secrets/model/ModelSecretService.js.map +1 -0
  863. package/lib/esm/secrets/model/ModelSecretServiceConfig.js +1 -1
  864. package/lib/esm/secrets/model/ModelSecretServiceConfig.js.map +1 -0
  865. package/lib/esm/secrets/model/Secret.js +1 -1
  866. package/lib/esm/secrets/model/Secret.js.map +1 -0
  867. package/lib/esm/secrets/model/index.js +1 -1
  868. package/lib/esm/secrets/model/index.js.map +1 -0
  869. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +1 -1
  870. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +1 -0
  871. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js +1 -1
  872. package/lib/esm/secrets/onepassword/OnePasswordSecretServiceConfig.js.map +1 -0
  873. package/lib/esm/secrets/onepassword/index.js +1 -1
  874. package/lib/esm/secrets/onepassword/index.js.map +1 -0
  875. package/lib/esm/secrets/vault/VaultSecretService.js +1 -1
  876. package/lib/esm/secrets/vault/VaultSecretService.js.map +1 -0
  877. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js +1 -1
  878. package/lib/esm/secrets/vault/VaultSecretServiceConfig.js.map +1 -0
  879. package/lib/esm/secrets/vault/index.js +1 -1
  880. package/lib/esm/secrets/vault/index.js.map +1 -0
  881. package/lib/esm/shared/runtime.js +1 -1
  882. package/lib/esm/shared/runtime.js.map +1 -0
  883. package/lib/esm/utils.js +1 -1
  884. package/lib/esm/utils.js.map +1 -0
  885. package/lib/types/graph/engine/constants.d.cts +59 -0
  886. package/lib/types/graph/engine/constants.d.mts +59 -0
  887. package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.cts +1 -1
  888. package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.mts +1 -1
  889. package/lib/types/graph/engine/index.d.cts +61 -0
  890. package/lib/types/graph/engine/index.d.mts +61 -0
  891. package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.cts +1 -1
  892. package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.mts +1 -1
  893. package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.cts +2 -1
  894. package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.mts +2 -1
  895. package/lib/types/graph/{types.d.cts → engine/types.d.cts} +12 -148
  896. package/lib/types/graph/{types.d.mts → engine/types.d.mts} +12 -148
  897. package/lib/types/graph/index.d.cts +8 -53
  898. package/lib/types/graph/index.d.mts +8 -53
  899. package/lib/types/graph/shared/constants.d.cts +53 -0
  900. package/lib/types/graph/shared/constants.d.mts +53 -0
  901. package/lib/types/graph/shared/index.d.cts +18 -0
  902. package/lib/types/graph/shared/index.d.mts +18 -0
  903. package/lib/types/graph/shared/types.d.cts +162 -0
  904. package/lib/types/graph/shared/types.d.mts +162 -0
  905. package/lib/types/index.d.cts +2 -2
  906. package/lib/types/index.d.mts +2 -2
  907. package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.cts +33 -5
  908. package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.mts +33 -5
  909. package/lib/types/nest/graph/main.d.cts +1 -0
  910. package/lib/types/nest/graph/main.d.mts +1 -0
  911. package/package.json +19 -8
  912. package/lib/cjs/graph/constants.cjs +0 -94
  913. package/lib/cjs/graph/decorators.cjs +0 -4
  914. package/lib/cjs/graph/errors/GraphCycleError.cjs +0 -20
  915. package/lib/cjs/graph/errors/GraphExecutionError.cjs +0 -27
  916. package/lib/cjs/graph/errors/GraphInputError.cjs +0 -20
  917. package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +0 -20
  918. package/lib/cjs/graph/errors/GraphPinningError.cjs +0 -20
  919. package/lib/cjs/graph/errors/GraphPortError.cjs +0 -20
  920. package/lib/cjs/graph/errors/GraphStoreError.cjs +0 -20
  921. package/lib/cjs/graph/errors/GraphTopologyError.cjs +0 -20
  922. package/lib/cjs/graph/errors/index.cjs +0 -31
  923. package/lib/cjs/graph/events/GraphExecutionEvent.cjs +0 -4
  924. package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +0 -40
  925. package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +0 -37
  926. package/lib/cjs/graph/events/GraphExecutionObserver.cjs +0 -4
  927. package/lib/cjs/graph/events/index.cjs +0 -27
  928. package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +0 -4
  929. package/lib/cjs/graph/execution/GraphExecutionContext.cjs +0 -79
  930. package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +0 -407
  931. package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +0 -32
  932. package/lib/cjs/graph/execution/GraphExecutionResult.cjs +0 -30
  933. package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +0 -4
  934. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +0 -103
  935. package/lib/cjs/graph/execution/index.cjs +0 -30
  936. package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +0 -87
  937. package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +0 -84
  938. package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +0 -85
  939. package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +0 -16
  940. package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +0 -76
  941. package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +0 -77
  942. package/lib/cjs/graph/loops/index.cjs +0 -29
  943. package/lib/cjs/graph/nodes/agent.cjs +0 -110
  944. package/lib/cjs/graph/nodes/base.cjs +0 -35
  945. package/lib/cjs/graph/nodes/category-styles.cjs +0 -38
  946. package/lib/cjs/graph/nodes/flow-control.cjs +0 -464
  947. package/lib/cjs/graph/nodes/index.cjs +0 -35
  948. package/lib/cjs/graph/nodes/triggers.cjs +0 -250
  949. package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +0 -28
  950. package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +0 -20
  951. package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +0 -34
  952. package/lib/cjs/graph/pinning/GraphPinningService.cjs +0 -191
  953. package/lib/cjs/graph/pinning/index.cjs +0 -27
  954. package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +0 -4
  955. package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +0 -4
  956. package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +0 -4
  957. package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +0 -4
  958. package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +0 -197
  959. package/lib/cjs/graph/planning/GraphRelationResolver.cjs +0 -172
  960. package/lib/cjs/graph/planning/GraphTopology.cjs +0 -57
  961. package/lib/cjs/graph/planning/index.cjs +0 -30
  962. package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +0 -44
  963. package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +0 -27
  964. package/lib/cjs/graph/registry/index.cjs +0 -25
  965. package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +0 -53
  966. package/lib/cjs/graph/snapshots/index.cjs +0 -24
  967. package/lib/cjs/graph/store/GraphCachedValue.cjs +0 -4
  968. package/lib/cjs/graph/store/GraphValueKey.cjs +0 -4
  969. package/lib/cjs/graph/store/GraphValueStore.cjs +0 -76
  970. package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +0 -4
  971. package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +0 -69
  972. package/lib/cjs/graph/store/index.cjs +0 -28
  973. package/lib/cjs/graph/types.cjs +0 -4
  974. package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +0 -33
  975. package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +0 -58
  976. package/lib/cjs/graph/validation/GraphValueValidator.cjs +0 -52
  977. package/lib/cjs/graph/validation/index.cjs +0 -26
  978. package/lib/esm/graph/constants.js +0 -106
  979. package/lib/esm/graph/decorators.js +0 -2
  980. package/lib/esm/graph/errors/GraphCycleError.js +0 -15
  981. package/lib/esm/graph/errors/GraphExecutionError.js +0 -22
  982. package/lib/esm/graph/errors/GraphInputError.js +0 -15
  983. package/lib/esm/graph/errors/GraphLoopLimitError.js +0 -15
  984. package/lib/esm/graph/errors/GraphPinningError.js +0 -15
  985. package/lib/esm/graph/errors/GraphPortError.js +0 -15
  986. package/lib/esm/graph/errors/GraphStoreError.js +0 -15
  987. package/lib/esm/graph/errors/GraphTopologyError.js +0 -15
  988. package/lib/esm/graph/errors/index.js +0 -14
  989. package/lib/esm/graph/events/GraphExecutionEvent.js +0 -2
  990. package/lib/esm/graph/events/GraphExecutionEventEmitter.js +0 -35
  991. package/lib/esm/graph/events/GraphExecutionEventFactory.js +0 -32
  992. package/lib/esm/graph/events/GraphExecutionObserver.js +0 -2
  993. package/lib/esm/graph/events/index.js +0 -10
  994. package/lib/esm/graph/execution/CodeSandboxEvaluator.js +0 -18
  995. package/lib/esm/graph/execution/GraphExecutionContext.js +0 -74
  996. package/lib/esm/graph/execution/GraphExecutionEngine.js +0 -402
  997. package/lib/esm/graph/execution/GraphExecutionFrame.js +0 -27
  998. package/lib/esm/graph/execution/GraphExecutionResult.js +0 -26
  999. package/lib/esm/graph/execution/GraphNodeExecutor.js +0 -2
  1000. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +0 -98
  1001. package/lib/esm/graph/execution/index.js +0 -13
  1002. package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +0 -82
  1003. package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +0 -79
  1004. package/lib/esm/graph/loops/GraphConditionEvaluator.js +0 -80
  1005. package/lib/esm/graph/loops/GraphLoopExecutionContext.js +0 -11
  1006. package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +0 -71
  1007. package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +0 -72
  1008. package/lib/esm/graph/loops/index.js +0 -12
  1009. package/lib/esm/graph/nodes/agent.js +0 -101
  1010. package/lib/esm/graph/nodes/base.js +0 -30
  1011. package/lib/esm/graph/nodes/category-styles.js +0 -34
  1012. package/lib/esm/graph/nodes/flow-control.js +0 -455
  1013. package/lib/esm/graph/nodes/index.js +0 -18
  1014. package/lib/esm/graph/nodes/triggers.js +0 -241
  1015. package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +0 -23
  1016. package/lib/esm/graph/pinning/GraphPinningMetadata.js +0 -15
  1017. package/lib/esm/graph/pinning/GraphPinningPolicy.js +0 -29
  1018. package/lib/esm/graph/pinning/GraphPinningService.js +0 -186
  1019. package/lib/esm/graph/pinning/index.js +0 -10
  1020. package/lib/esm/graph/planning/GraphExecutionPlan.js +0 -2
  1021. package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +0 -7
  1022. package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +0 -2
  1023. package/lib/esm/graph/planning/GraphExecutionPlanNode.js +0 -2
  1024. package/lib/esm/graph/planning/GraphExecutionPlanner.js +0 -192
  1025. package/lib/esm/graph/planning/GraphRelationResolver.js +0 -167
  1026. package/lib/esm/graph/planning/GraphTopology.js +0 -52
  1027. package/lib/esm/graph/planning/index.js +0 -13
  1028. package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +0 -39
  1029. package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +0 -22
  1030. package/lib/esm/graph/registry/index.js +0 -8
  1031. package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +0 -48
  1032. package/lib/esm/graph/snapshots/index.js +0 -7
  1033. package/lib/esm/graph/store/GraphCachedValue.js +0 -2
  1034. package/lib/esm/graph/store/GraphValueKey.js +0 -7
  1035. package/lib/esm/graph/store/GraphValueStore.js +0 -71
  1036. package/lib/esm/graph/store/GraphValueStoreAdapter.js +0 -2
  1037. package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +0 -64
  1038. package/lib/esm/graph/store/index.js +0 -11
  1039. package/lib/esm/graph/types.js +0 -2
  1040. package/lib/esm/graph/validation/GraphDefinitionValidator.js +0 -28
  1041. package/lib/esm/graph/validation/GraphPortSchemaResolver.js +0 -53
  1042. package/lib/esm/graph/validation/GraphValueValidator.js +0 -47
  1043. package/lib/esm/graph/validation/index.js +0 -9
  1044. package/lib/types/graph/constants.d.cts +0 -101
  1045. package/lib/types/graph/constants.d.mts +0 -101
  1046. /package/lib/types/graph/{decorators.d.cts → engine/decorators.d.cts} +0 -0
  1047. /package/lib/types/graph/{decorators.d.mts → engine/decorators.d.mts} +0 -0
  1048. /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.cts +0 -0
  1049. /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.mts +0 -0
  1050. /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.cts +0 -0
  1051. /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.mts +0 -0
  1052. /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.cts +0 -0
  1053. /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.mts +0 -0
  1054. /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.cts +0 -0
  1055. /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.mts +0 -0
  1056. /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.cts +0 -0
  1057. /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.mts +0 -0
  1058. /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.cts +0 -0
  1059. /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.mts +0 -0
  1060. /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.cts +0 -0
  1061. /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.mts +0 -0
  1062. /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.cts +0 -0
  1063. /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.mts +0 -0
  1064. /package/lib/types/graph/{errors → engine/errors}/index.d.cts +0 -0
  1065. /package/lib/types/graph/{errors → engine/errors}/index.d.mts +0 -0
  1066. /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.cts +0 -0
  1067. /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.mts +0 -0
  1068. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.cts +0 -0
  1069. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.mts +0 -0
  1070. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.cts +0 -0
  1071. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.mts +0 -0
  1072. /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.cts +0 -0
  1073. /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.mts +0 -0
  1074. /package/lib/types/graph/{events → engine/events}/index.d.cts +0 -0
  1075. /package/lib/types/graph/{events → engine/events}/index.d.mts +0 -0
  1076. /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.cts +0 -0
  1077. /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.mts +0 -0
  1078. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.cts +0 -0
  1079. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.mts +0 -0
  1080. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.cts +0 -0
  1081. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.mts +0 -0
  1082. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.cts +0 -0
  1083. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.mts +0 -0
  1084. /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.cts +0 -0
  1085. /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.mts +0 -0
  1086. /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.cts +0 -0
  1087. /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.mts +0 -0
  1088. /package/lib/types/graph/{execution → engine/execution}/index.d.cts +0 -0
  1089. /package/lib/types/graph/{execution → engine/execution}/index.d.mts +0 -0
  1090. /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.cts +0 -0
  1091. /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.mts +0 -0
  1092. /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.cts +0 -0
  1093. /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.mts +0 -0
  1094. /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.cts +0 -0
  1095. /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.mts +0 -0
  1096. /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.cts +0 -0
  1097. /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.mts +0 -0
  1098. /package/lib/types/graph/{loops → engine/loops}/index.d.cts +0 -0
  1099. /package/lib/types/graph/{loops → engine/loops}/index.d.mts +0 -0
  1100. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.cts +0 -0
  1101. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.mts +0 -0
  1102. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.cts +0 -0
  1103. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.mts +0 -0
  1104. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.cts +0 -0
  1105. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.mts +0 -0
  1106. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.cts +0 -0
  1107. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.mts +0 -0
  1108. /package/lib/types/graph/{pinning → engine/pinning}/index.d.cts +0 -0
  1109. /package/lib/types/graph/{pinning → engine/pinning}/index.d.mts +0 -0
  1110. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.cts +0 -0
  1111. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.mts +0 -0
  1112. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.cts +0 -0
  1113. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.mts +0 -0
  1114. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.cts +0 -0
  1115. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.mts +0 -0
  1116. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.cts +0 -0
  1117. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.mts +0 -0
  1118. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.cts +0 -0
  1119. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.mts +0 -0
  1120. /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.cts +0 -0
  1121. /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.mts +0 -0
  1122. /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.cts +0 -0
  1123. /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.mts +0 -0
  1124. /package/lib/types/graph/{planning → engine/planning}/index.d.cts +0 -0
  1125. /package/lib/types/graph/{planning → engine/planning}/index.d.mts +0 -0
  1126. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.cts +0 -0
  1127. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.mts +0 -0
  1128. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.cts +0 -0
  1129. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.mts +0 -0
  1130. /package/lib/types/graph/{registry → engine/registry}/index.d.cts +0 -0
  1131. /package/lib/types/graph/{registry → engine/registry}/index.d.mts +0 -0
  1132. /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.cts +0 -0
  1133. /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.mts +0 -0
  1134. /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.cts +0 -0
  1135. /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.mts +0 -0
  1136. /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.cts +0 -0
  1137. /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.mts +0 -0
  1138. /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.cts +0 -0
  1139. /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.mts +0 -0
  1140. /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.cts +0 -0
  1141. /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.mts +0 -0
  1142. /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.cts +0 -0
  1143. /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.mts +0 -0
  1144. /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.cts +0 -0
  1145. /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.mts +0 -0
  1146. /package/lib/types/graph/{store → engine/store}/index.d.cts +0 -0
  1147. /package/lib/types/graph/{store → engine/store}/index.d.mts +0 -0
  1148. /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.cts +0 -0
  1149. /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.mts +0 -0
  1150. /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.cts +0 -0
  1151. /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.mts +0 -0
  1152. /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.cts +0 -0
  1153. /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.mts +0 -0
  1154. /package/lib/types/graph/{validation → engine/validation}/index.d.cts +0 -0
  1155. /package/lib/types/graph/{validation → engine/validation}/index.d.mts +0 -0
  1156. /package/lib/types/graph/{nodes → shared/nodes}/agent.d.cts +0 -0
  1157. /package/lib/types/graph/{nodes → shared/nodes}/agent.d.mts +0 -0
  1158. /package/lib/types/graph/{nodes → shared/nodes}/base.d.cts +0 -0
  1159. /package/lib/types/graph/{nodes → shared/nodes}/base.d.mts +0 -0
  1160. /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.cts +0 -0
  1161. /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.mts +0 -0
  1162. /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.cts +0 -0
  1163. /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.mts +0 -0
  1164. /package/lib/types/graph/{nodes → shared/nodes}/index.d.cts +0 -0
  1165. /package/lib/types/graph/{nodes → shared/nodes}/index.d.mts +0 -0
  1166. /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.cts +0 -0
  1167. /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.mts +0 -0
@@ -1,464 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GRAPH_FLOW_CONTROL_NODES = exports.CodeFlowNode = exports.ReturnFlowNode = exports.HumanApprovalFlowNode = exports.ErrorBoundaryFlowNode = exports.DelayFlowNode = exports.MapFlowNode = exports.MergeFlowNode = exports.ParallelFlowNode = exports.SwitchFlowNode = exports.IfFlowNode = void 0;
4
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
7
- r = Reflect.decorate(decorators, target, key, desc);
8
- else
9
- for (var i = decorators.length - 1; i >= 0; i--)
10
- if (d = decorators[i])
11
- r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
- return c > 3 && r && Object.defineProperty(target, key, r), r;
13
- };
14
- var __metadata = (this && this.__metadata) || function (k, v) {
15
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
16
- return Reflect.metadata(k, v);
17
- };
18
- /**
19
- * @module integrations/graph/nodes/flow-control
20
- * @summary Production flow-control node kind declarations (DECAF-32 §22.2.2).
21
- * @description Canonical `@node`-decorated classes for the ten ALFRED-5
22
- * flow-control kinds. These are graph-level macros: the engine's planner
23
- * recognises them as ordinary executable nodes (§5.7) but they have no
24
- * built-in executors — downstream projects (e.g. ALFRED) register custom
25
- * executors or compile them into Mastra composition APIs (§22.2.2).
26
- *
27
- * The three loop kinds (`core.loop.foreach/while/until`) already have built-in
28
- * executors (§5.9) and are NOT redeclared here.
29
- */
30
- const decorator_validation_1 = require("@decaf-ts/decorator-validation");
31
- const ui_decorators_1 = require("@decaf-ts/ui-decorators");
32
- const graph_1 = require("@decaf-ts/ui-decorators/graph");
33
- const base_js_1 = require("./base.cjs");
34
- /**
35
- * If — conditional branch. Evaluates a `ConditionExpression` (§22.3) and
36
- * routes the input to the `then` or `else` output.
37
- */
38
- let IfFlowNode = class IfFlowNode extends decorator_validation_1.Model {
39
- };
40
- exports.IfFlowNode = IfFlowNode;
41
- __decorate([
42
- (0, decorator_validation_1.required)(),
43
- (0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to evaluate" }),
44
- (0, graph_1.input)({ handle: "value" }),
45
- __metadata("design:type", Object)
46
- ], IfFlowNode.prototype, "value", void 0);
47
- __decorate([
48
- (0, decorator_validation_1.required)(),
49
- (0, ui_decorators_1.uielement)("input", { label: "Then", placeholder: "Output when condition is true" }),
50
- (0, graph_1.output)({ handle: "then" }),
51
- __metadata("design:type", Object)
52
- ], IfFlowNode.prototype, "then", void 0);
53
- __decorate([
54
- (0, decorator_validation_1.required)(),
55
- (0, ui_decorators_1.uielement)("input", { label: "Else", placeholder: "Output when condition is false" }),
56
- (0, graph_1.output)({ handle: "else" }),
57
- __metadata("design:type", Object)
58
- ], IfFlowNode.prototype, "else", void 0);
59
- exports.IfFlowNode = IfFlowNode = __decorate([
60
- (0, graph_1.node)("core.flow.if", {
61
- kind: "core.flow.if",
62
- category: "Flow Control",
63
- color: "#f59e0b",
64
- icon: "ti-arrows-split-2",
65
- width: 96,
66
- height: 96,
67
- labels: ["flow", "conditional", "branch"],
68
- metadata: {
69
- title: "If",
70
- description: "Conditional branch. Evaluates the configured condition and routes the input to the matching output.",
71
- condition: { op: "eq", left: { const: true }, right: { const: true } },
72
- },
73
- }),
74
- (0, decorator_validation_1.model)()
75
- ], IfFlowNode);
76
- /**
77
- * Switch — multi-branch. Routes the input to one of the case output ports
78
- * or `default` based on matching conditions. Each case defines a
79
- * {@link SwitchCaseCondition} (graphical or code mode) and a dedicated
80
- * output port. Cases are stored in `metadata.switch.cases` and the
81
- * renderer creates dynamic output ports from them (DECAF-32 §22.2.2).
82
- *
83
- * The node grows in height as cases are added. Each case gets its own
84
- * output port on the right side, labeled with the case label.
85
- */
86
- let SwitchFlowNode = class SwitchFlowNode extends base_js_1.GraphNode {
87
- /**
88
- * Computes the node's ports, size, and data patch from the given switch
89
- * metadata. Each case gets its own output port on the right side; the
90
- * node grows in height as cases are added.
91
- */
92
- static applyMetadata(meta) {
93
- const definition = (0, graph_1.graphDefinitionOf)(this);
94
- const basePorts = definition.ports.filter((p) => !meta.cases.some((c) => c.outputPort === p.property));
95
- const casePorts = meta.cases.map((c) => ({
96
- property: c.outputPort,
97
- name: c.label,
98
- direction: graph_1.PortDirection.OUTPUT,
99
- label: c.label,
100
- required: false,
101
- hidden: false,
102
- path: c.outputPort,
103
- }));
104
- const caseCount = meta.cases.length;
105
- return {
106
- ports: [...basePorts, ...casePorts],
107
- size: {
108
- width: definition.width ?? 120,
109
- height: caseCount > 0 ? 140 + caseCount * 24 : definition.height ?? 140,
110
- },
111
- dataPatch: { switchMetadata: meta },
112
- };
113
- }
114
- };
115
- exports.SwitchFlowNode = SwitchFlowNode;
116
- __decorate([
117
- (0, decorator_validation_1.required)(),
118
- (0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to switch on" }),
119
- (0, graph_1.input)({ handle: "value" }),
120
- __metadata("design:type", Object)
121
- ], SwitchFlowNode.prototype, "value", void 0);
122
- __decorate([
123
- (0, decorator_validation_1.required)(),
124
- (0, ui_decorators_1.uielement)("input", { label: "Default", placeholder: "Default output when no case matches" }),
125
- (0, graph_1.output)({ handle: "default" }),
126
- __metadata("design:type", Object)
127
- ], SwitchFlowNode.prototype, "default", void 0);
128
- exports.SwitchFlowNode = SwitchFlowNode = __decorate([
129
- (0, graph_1.node)("core.flow.switch", {
130
- kind: "core.flow.switch",
131
- category: "Flow Control",
132
- color: "#f97316",
133
- icon: "ti-arrows-shuffle",
134
- width: 120,
135
- height: 140,
136
- labels: ["flow", "switch", "multi-branch"],
137
- metadata: {
138
- title: "Switch",
139
- description: "Multi-branch switch. Routes the input to the first matching case output, or the default output.",
140
- switch: {
141
- cases: [],
142
- defaultPort: "default",
143
- },
144
- },
145
- }),
146
- (0, decorator_validation_1.model)()
147
- ], SwitchFlowNode);
148
- /**
149
- * Parallel — splits execution into concurrent branches.
150
- */
151
- let ParallelFlowNode = class ParallelFlowNode extends decorator_validation_1.Model {
152
- };
153
- exports.ParallelFlowNode = ParallelFlowNode;
154
- __decorate([
155
- (0, decorator_validation_1.required)(),
156
- (0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to fan out" }),
157
- (0, graph_1.input)({ handle: "value" }),
158
- __metadata("design:type", Object)
159
- ], ParallelFlowNode.prototype, "value", void 0);
160
- __decorate([
161
- (0, decorator_validation_1.required)(),
162
- (0, ui_decorators_1.uielement)("input", { label: "Branches", placeholder: "Collected branch outputs" }),
163
- (0, graph_1.output)({ handle: "branches" }),
164
- __metadata("design:type", Array)
165
- ], ParallelFlowNode.prototype, "branches", void 0);
166
- exports.ParallelFlowNode = ParallelFlowNode = __decorate([
167
- (0, graph_1.node)("core.flow.parallel", {
168
- kind: "core.flow.parallel",
169
- category: "Flow Control",
170
- color: "#06b6d4",
171
- icon: "ti-arrows-vertical",
172
- width: 96,
173
- height: 96,
174
- labels: ["flow", "parallel", "concurrent"],
175
- metadata: {
176
- title: "Parallel",
177
- description: "Splits execution into concurrent branches. All branches run in parallel and outputs are collected.",
178
- branchCount: 2,
179
- },
180
- }),
181
- (0, decorator_validation_1.model)()
182
- ], ParallelFlowNode);
183
- /**
184
- * Merge — normalises branch/parallel outputs into a single output.
185
- */
186
- let MergeFlowNode = class MergeFlowNode extends decorator_validation_1.Model {
187
- };
188
- exports.MergeFlowNode = MergeFlowNode;
189
- __decorate([
190
- (0, decorator_validation_1.required)(),
191
- (0, ui_decorators_1.uielement)("textarea", { label: "Branch outputs", placeholder: "Outputs to merge" }),
192
- (0, graph_1.input)({ handle: "values" }),
193
- __metadata("design:type", Array)
194
- ], MergeFlowNode.prototype, "values", void 0);
195
- __decorate([
196
- (0, decorator_validation_1.required)(),
197
- (0, ui_decorators_1.uielement)("input", { label: "Merged output", placeholder: "Merged result" }),
198
- (0, graph_1.output)({ handle: "merged" }),
199
- __metadata("design:type", Object)
200
- ], MergeFlowNode.prototype, "merged", void 0);
201
- exports.MergeFlowNode = MergeFlowNode = __decorate([
202
- (0, graph_1.node)("core.flow.merge", {
203
- kind: "core.flow.merge",
204
- category: "Utility",
205
- color: "#0d9488",
206
- icon: "ti-arrows-merge",
207
- width: 96,
208
- height: 96,
209
- labels: ["flow", "merge", "join"],
210
- metadata: {
211
- title: "Merge",
212
- description: "Merges multiple branch outputs into a single normalised output object.",
213
- strategy: "concat",
214
- },
215
- }),
216
- (0, decorator_validation_1.model)()
217
- ], MergeFlowNode);
218
- /**
219
- * Map — transforms the current input into a new output object.
220
- */
221
- let MapFlowNode = class MapFlowNode extends decorator_validation_1.Model {
222
- };
223
- exports.MapFlowNode = MapFlowNode;
224
- __decorate([
225
- (0, decorator_validation_1.required)(),
226
- (0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to transform" }),
227
- (0, graph_1.input)({ handle: "value" }),
228
- __metadata("design:type", Object)
229
- ], MapFlowNode.prototype, "value", void 0);
230
- __decorate([
231
- (0, decorator_validation_1.required)(),
232
- (0, ui_decorators_1.uielement)("input", { label: "Transformed output", placeholder: "Mapped result" }),
233
- (0, graph_1.output)({ handle: "result" }),
234
- __metadata("design:type", Object)
235
- ], MapFlowNode.prototype, "result", void 0);
236
- exports.MapFlowNode = MapFlowNode = __decorate([
237
- (0, graph_1.node)("core.flow.map", {
238
- kind: "core.flow.map",
239
- category: "Utility",
240
- color: "#84cc16",
241
- icon: "ti-arrows-right-left",
242
- width: 96,
243
- height: 96,
244
- labels: ["flow", "map", "transform"],
245
- metadata: {
246
- title: "Map",
247
- description: "Transforms the current input into a new output object using the configured mapper.",
248
- mapper: {},
249
- },
250
- }),
251
- (0, decorator_validation_1.model)()
252
- ], MapFlowNode);
253
- /**
254
- * Delay — pauses execution for a configured duration.
255
- */
256
- let DelayFlowNode = class DelayFlowNode extends decorator_validation_1.Model {
257
- };
258
- exports.DelayFlowNode = DelayFlowNode;
259
- __decorate([
260
- (0, decorator_validation_1.required)(),
261
- (0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to forward after delay" }),
262
- (0, graph_1.input)({ handle: "value" }),
263
- __metadata("design:type", Object)
264
- ], DelayFlowNode.prototype, "value", void 0);
265
- __decorate([
266
- (0, decorator_validation_1.required)(),
267
- (0, ui_decorators_1.uielement)("input", { label: "Output value", placeholder: "Forwarded value" }),
268
- (0, graph_1.output)({ handle: "value" }),
269
- __metadata("design:type", Object)
270
- ], DelayFlowNode.prototype, "valueOut", void 0);
271
- exports.DelayFlowNode = DelayFlowNode = __decorate([
272
- (0, graph_1.node)("core.flow.delay", {
273
- kind: "core.flow.delay",
274
- category: "Utility",
275
- color: "#a3a3a3",
276
- icon: "ti-clock-hour-4",
277
- width: 96,
278
- height: 96,
279
- labels: ["flow", "delay", "wait"],
280
- metadata: {
281
- title: "Delay",
282
- description: "Pauses execution for the configured duration (in milliseconds), then forwards the input unchanged.",
283
- durationMs: 1000,
284
- },
285
- }),
286
- (0, decorator_validation_1.model)()
287
- ], DelayFlowNode);
288
- /**
289
- * Error boundary — try/catch/finally workflow behaviour.
290
- */
291
- let ErrorBoundaryFlowNode = class ErrorBoundaryFlowNode extends decorator_validation_1.Model {
292
- };
293
- exports.ErrorBoundaryFlowNode = ErrorBoundaryFlowNode;
294
- __decorate([
295
- (0, decorator_validation_1.required)(),
296
- (0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to guard" }),
297
- (0, graph_1.input)({ handle: "value" }),
298
- __metadata("design:type", Object)
299
- ], ErrorBoundaryFlowNode.prototype, "value", void 0);
300
- __decorate([
301
- (0, decorator_validation_1.required)(),
302
- (0, ui_decorators_1.uielement)("input", { label: "Result", placeholder: "Output on success" }),
303
- (0, graph_1.output)({ handle: "result" }),
304
- __metadata("design:type", Object)
305
- ], ErrorBoundaryFlowNode.prototype, "result", void 0);
306
- __decorate([
307
- (0, decorator_validation_1.required)(),
308
- (0, ui_decorators_1.uielement)("input", { label: "Error", placeholder: "Output on failure" }),
309
- (0, graph_1.output)({ handle: "error" }),
310
- __metadata("design:type", Object)
311
- ], ErrorBoundaryFlowNode.prototype, "error", void 0);
312
- exports.ErrorBoundaryFlowNode = ErrorBoundaryFlowNode = __decorate([
313
- (0, graph_1.node)("core.flow.errorBoundary", {
314
- kind: "core.flow.errorBoundary",
315
- category: "Flow Control",
316
- color: "#ef4444",
317
- icon: "ti-shield-check",
318
- width: 96,
319
- height: 96,
320
- labels: ["flow", "error", "try-catch"],
321
- metadata: {
322
- title: "Error boundary",
323
- description: "Wraps the input in a try/catch/finally. Emits the result on success, or the error on failure.",
324
- finally: false,
325
- },
326
- }),
327
- (0, decorator_validation_1.model)()
328
- ], ErrorBoundaryFlowNode);
329
- /**
330
- * Human approval — suspends execution until a human approves or rejects.
331
- */
332
- let HumanApprovalFlowNode = class HumanApprovalFlowNode extends decorator_validation_1.Model {
333
- };
334
- exports.HumanApprovalFlowNode = HumanApprovalFlowNode;
335
- __decorate([
336
- (0, decorator_validation_1.required)(),
337
- (0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value pending approval" }),
338
- (0, graph_1.input)({ handle: "value" }),
339
- __metadata("design:type", Object)
340
- ], HumanApprovalFlowNode.prototype, "value", void 0);
341
- __decorate([
342
- (0, decorator_validation_1.required)(),
343
- (0, ui_decorators_1.uielement)("input", { label: "Approved", placeholder: "Output when approved" }),
344
- (0, graph_1.output)({ handle: "approved" }),
345
- __metadata("design:type", Object)
346
- ], HumanApprovalFlowNode.prototype, "approved", void 0);
347
- __decorate([
348
- (0, decorator_validation_1.required)(),
349
- (0, ui_decorators_1.uielement)("input", { label: "Rejected", placeholder: "Output when rejected" }),
350
- (0, graph_1.output)({ handle: "rejected" }),
351
- __metadata("design:type", Object)
352
- ], HumanApprovalFlowNode.prototype, "rejected", void 0);
353
- exports.HumanApprovalFlowNode = HumanApprovalFlowNode = __decorate([
354
- (0, graph_1.node)("core.flow.humanApproval", {
355
- kind: "core.flow.humanApproval",
356
- category: "Flow Control",
357
- color: "#d946ef",
358
- icon: "ti-user-check",
359
- width: 96,
360
- height: 96,
361
- labels: ["flow", "approval", "suspend"],
362
- metadata: {
363
- title: "Human approval",
364
- description: "Suspends execution until a human approves or rejects. Emits the approved value or a rejection.",
365
- approvers: [],
366
- timeoutMs: 86400000,
367
- },
368
- }),
369
- (0, decorator_validation_1.model)()
370
- ], HumanApprovalFlowNode);
371
- /**
372
- * Return — defines and normalises the final workflow output.
373
- */
374
- let ReturnFlowNode = class ReturnFlowNode extends decorator_validation_1.Model {
375
- };
376
- exports.ReturnFlowNode = ReturnFlowNode;
377
- __decorate([
378
- (0, decorator_validation_1.required)(),
379
- (0, ui_decorators_1.uielement)("textarea", { label: "Input value", placeholder: "Value to normalise" }),
380
- (0, graph_1.input)({ handle: "value" }),
381
- __metadata("design:type", Object)
382
- ], ReturnFlowNode.prototype, "value", void 0);
383
- __decorate([
384
- (0, decorator_validation_1.required)(),
385
- (0, ui_decorators_1.uielement)("input", { label: "Returned output", placeholder: "Normalised output" }),
386
- (0, graph_1.output)({ handle: "result" }),
387
- __metadata("design:type", Object)
388
- ], ReturnFlowNode.prototype, "result", void 0);
389
- exports.ReturnFlowNode = ReturnFlowNode = __decorate([
390
- (0, graph_1.node)("core.flow.return", {
391
- kind: "core.flow.return",
392
- category: "Utility",
393
- color: "#22c55e",
394
- icon: "ti-arrow-back-up",
395
- width: 96,
396
- height: 96,
397
- labels: ["flow", "return", "output"],
398
- metadata: {
399
- title: "Return",
400
- description: "Normalises the input into the final workflow output object.",
401
- outputSchema: {},
402
- },
403
- }),
404
- (0, decorator_validation_1.model)()
405
- ], ReturnFlowNode);
406
- /**
407
- * Code — sandboxed JS/TS code execution (ALFRED-5 §7).
408
- *
409
- * The engine does not implement the sandbox directly (§22.4). A future
410
- * executor may wrap the `CodeSandbox` contract (ALFRED-5 §7.17) as a
411
- * pluggable executor. The placeholder syntax (`{{ $input }}`, `{{ $item }}`,
412
- * `{{ $index }}`, `{{ $vars }}`, `{{ $node["Name"].output }}`) is Mastra-
413
- * agnostic and lives in the downstream project's `modules/core` (ALFRED-6).
414
- */
415
- let CodeFlowNode = class CodeFlowNode extends decorator_validation_1.Model {
416
- };
417
- exports.CodeFlowNode = CodeFlowNode;
418
- __decorate([
419
- (0, decorator_validation_1.required)(),
420
- (0, ui_decorators_1.uielement)("textarea", { label: "Input", placeholder: "Input object (accessible as $input)" }),
421
- (0, graph_1.input)({ handle: "input" }),
422
- __metadata("design:type", Object)
423
- ], CodeFlowNode.prototype, "input", void 0);
424
- __decorate([
425
- (0, decorator_validation_1.required)(),
426
- (0, ui_decorators_1.uielement)("input", { label: "Result", placeholder: "Code execution result" }),
427
- (0, graph_1.output)({ handle: "result" }),
428
- __metadata("design:type", Object)
429
- ], CodeFlowNode.prototype, "result", void 0);
430
- exports.CodeFlowNode = CodeFlowNode = __decorate([
431
- (0, graph_1.node)("core.flow.code", {
432
- kind: "core.flow.code",
433
- category: "Utility",
434
- color: "#7c3aed",
435
- icon: "ti-code",
436
- width: 96,
437
- height: 96,
438
- labels: ["flow", "code", "sandbox", "transform"],
439
- metadata: {
440
- title: "Code",
441
- description: "Runs user-authored JS/TS in a restricted VM sandbox. Supports placeholder syntax for workflow data references.",
442
- code: "",
443
- language: "javascript",
444
- },
445
- }),
446
- (0, decorator_validation_1.model)()
447
- ], CodeFlowNode);
448
- /**
449
- * All built-in flow-control node constructors.
450
- */
451
- exports.GRAPH_FLOW_CONTROL_NODES = [
452
- IfFlowNode,
453
- SwitchFlowNode,
454
- ParallelFlowNode,
455
- MergeFlowNode,
456
- MapFlowNode,
457
- DelayFlowNode,
458
- ErrorBoundaryFlowNode,
459
- HumanApprovalFlowNode,
460
- ReturnFlowNode,
461
- CodeFlowNode,
462
- ];
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dyYXBoL25vZGVzL2Zsb3ctY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxJQUFJLEVBQ0osTUFBTSxFQUNOLGFBQWEsR0FFZCxNQUFNLCtCQUErQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWU7QUFFbkM7OztHQUdHO0FBZ0JJLElBQU0sVUFBVSxHQUFoQixNQUFNLFVBQVcsU0FBUSxLQUFLO0NBZXBDLENBQUE7QUFYQztJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxDQUFDO0lBQ2pGLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQzs7eUNBQ1g7QUFLaEI7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsK0JBQStCLEVBQUUsQ0FBQztJQUNuRixNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7O3dDQUNaO0FBS2Y7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQztJQUNwRixNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7O3dDQUNaO0FBZEosVUFBVTtJQWZ0QixJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ3BCLElBQUksRUFBRSxjQUFjO1FBQ3BCLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxtQkFBbUI7UUFDekIsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDO1FBQ3pDLFFBQVEsRUFBRTtZQUNSLEtBQUssRUFBRSxJQUFJO1lBQ1gsV0FBVyxFQUFFLHFHQUFxRztZQUNsSCxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7U0FDdkU7S0FDRixDQUFDO0lBQ0QsS0FBSyxFQUFFO0dBQ0ssVUFBVSxDQWV0Qjs7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFtQkksSUFBTSxjQUFjLEdBQXBCLE1BQU0sY0FBZSxTQUFRLFNBQVM7SUFXM0M7Ozs7T0FJRztJQUNILE1BQU0sQ0FBVSxhQUFhLENBQUMsSUFBd0I7UUFDcEQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBYSxDQUFDLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3ZDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FDNUQsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUEwQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5RCxRQUFRLEVBQUUsQ0FBQyxDQUFDLFVBQVU7WUFDdEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLO1lBQ2IsU0FBUyxFQUFFLGFBQWEsQ0FBQyxNQUFNO1lBQy9CLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSztZQUNkLFFBQVEsRUFBRSxLQUFLO1lBQ2YsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVU7U0FDbkIsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNwQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFDbkMsSUFBSSxFQUFFO2dCQUNKLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSyxJQUFJLEdBQUc7Z0JBQzlCLE1BQU0sRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxHQUFHO2FBQ3hFO1lBQ0QsU0FBUyxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRTtTQUNwQyxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUE7QUFwQ0M7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNsRixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7OzZDQUNYO0FBS2hCO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLHFDQUFxQyxFQUFFLENBQUM7SUFDNUYsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDOzsrQ0FDWjtBQVRQLGNBQWM7SUFsQjFCLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUN4QixJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLFFBQVEsRUFBRSxjQUFjO1FBQ3hCLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxtQkFBbUI7UUFDekIsS0FBSyxFQUFFLEdBQUc7UUFDVixNQUFNLEVBQUUsR0FBRztRQUNYLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDO1FBQzFDLFFBQVEsRUFBRTtZQUNSLEtBQUssRUFBRSxRQUFRO1lBQ2YsV0FBVyxFQUFFLGlHQUFpRztZQUM5RyxNQUFNLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsV0FBVyxFQUFFLFNBQVM7YUFDdkI7U0FDRjtLQUNGLENBQUM7SUFDRCxLQUFLLEVBQUU7R0FDSyxjQUFjLENBd0MxQjs7QUFFRDs7R0FFRztBQWdCSSxJQUFNLGdCQUFnQixHQUF0QixNQUFNLGdCQUFpQixTQUFRLEtBQUs7Q0FVMUMsQ0FBQTtBQU5DO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUM7SUFDaEYsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOzsrQ0FDWDtBQUtoQjtJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSwwQkFBMEIsRUFBRSxDQUFDO0lBQ2xGLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQzs7a0RBQ1Y7QUFUVixnQkFBZ0I7SUFmNUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1FBQzFCLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsUUFBUSxFQUFFLGNBQWM7UUFDeEIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUM7UUFDMUMsUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLFVBQVU7WUFDakIsV0FBVyxFQUFFLG9HQUFvRztZQUNqSCxXQUFXLEVBQUUsQ0FBQztTQUNmO0tBQ0YsQ0FBQztJQUNELEtBQUssRUFBRTtHQUNLLGdCQUFnQixDQVU1Qjs7QUFFRDs7R0FFRztBQWdCSSxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsS0FBSztDQVV2QyxDQUFBO0FBTkM7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0lBQ25GLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQzs7NkNBQ1Q7QUFLbkI7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDNUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDOzs2Q0FDWjtBQVROLGFBQWE7SUFmekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1FBQ3ZCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFDakMsUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLE9BQU87WUFDZCxXQUFXLEVBQUUsd0VBQXdFO1lBQ3JGLFFBQVEsRUFBRSxRQUFRO1NBQ25CO0tBQ0YsQ0FBQztJQUNELEtBQUssRUFBRTtHQUNLLGFBQWEsQ0FVekI7O0FBRUQ7O0dBRUc7QUFnQkksSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBWSxTQUFRLEtBQUs7Q0FVckMsQ0FBQTtBQU5DO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUM7SUFDbEYsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOzswQ0FDWDtBQUtoQjtJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQ2pGLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQzs7MkNBQ1o7QUFUTixXQUFXO0lBZnZCLElBQUksQ0FBQyxlQUFlLEVBQUU7UUFDckIsSUFBSSxFQUFFLGVBQWU7UUFDckIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUM7UUFDcEMsUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUs7WUFDWixXQUFXLEVBQUUsb0ZBQW9GO1lBQ2pHLE1BQU0sRUFBRSxFQUFFO1NBQ1g7S0FDRixDQUFDO0lBQ0QsS0FBSyxFQUFFO0dBQ0ssV0FBVyxDQVV2Qjs7QUFFRDs7R0FFRztBQWdCSSxJQUFNLGFBQWEsR0FBbkIsTUFBTSxhQUFjLFNBQVEsS0FBSztDQVV2QyxDQUFBO0FBTkM7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsOEJBQThCLEVBQUUsQ0FBQztJQUM1RixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7OzRDQUNYO0FBS2hCO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLENBQUM7SUFDN0UsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOzsrQ0FDVDtBQVRSLGFBQWE7SUFmekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1FBQ3ZCLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFDakMsUUFBUSxFQUFFO1lBQ1IsS0FBSyxFQUFFLE9BQU87WUFDZCxXQUFXLEVBQUUsb0dBQW9HO1lBQ2pILFVBQVUsRUFBRSxJQUFJO1NBQ2pCO0tBQ0YsQ0FBQztJQUNELEtBQUssRUFBRTtHQUNLLGFBQWEsQ0FVekI7O0FBRUQ7O0dBRUc7QUFnQkksSUFBTSxxQkFBcUIsR0FBM0IsTUFBTSxxQkFBc0IsU0FBUSxLQUFLO0NBZS9DLENBQUE7QUFYQztJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzlFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQzs7b0RBQ1g7QUFLaEI7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUN6RSxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7O3FEQUNaO0FBS2pCO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUM7SUFDeEUsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOztvREFDWjtBQWRMLHFCQUFxQjtJQWZqQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7UUFDL0IsSUFBSSxFQUFFLHlCQUF5QjtRQUMvQixRQUFRLEVBQUUsY0FBYztRQUN4QixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQztRQUN0QyxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLFdBQVcsRUFBRSwrRkFBK0Y7WUFDNUcsT0FBTyxFQUFFLEtBQUs7U0FDZjtLQUNGLENBQUM7SUFDRCxLQUFLLEVBQUU7R0FDSyxxQkFBcUIsQ0FlakM7O0FBRUQ7O0dBRUc7QUFpQkksSUFBTSxxQkFBcUIsR0FBM0IsTUFBTSxxQkFBc0IsU0FBUSxLQUFLO0NBZS9DLENBQUE7QUFYQztJQUhDLFFBQVEsRUFBRTtJQUNWLFNBQVMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxDQUFDO0lBQ3RGLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQzs7b0RBQ1g7QUFLaEI7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztJQUM5RSxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7O3VEQUNaO0FBS25CO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFLENBQUM7SUFDOUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDOzt1REFDWjtBQWRSLHFCQUFxQjtJQWhCakMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1FBQy9CLElBQUksRUFBRSx5QkFBeUI7UUFDL0IsUUFBUSxFQUFFLGNBQWM7UUFDeEIsS0FBSyxFQUFFLFNBQVM7UUFDaEIsSUFBSSxFQUFFLGVBQWU7UUFDckIsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDO1FBQ3ZDLFFBQVEsRUFBRTtZQUNSLEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsV0FBVyxFQUFFLGdHQUFnRztZQUM3RyxTQUFTLEVBQUUsRUFBRTtZQUNiLFNBQVMsRUFBRSxRQUFRO1NBQ3BCO0tBQ0YsQ0FBQztJQUNELEtBQUssRUFBRTtHQUNLLHFCQUFxQixDQWVqQzs7QUFFRDs7R0FFRztBQWdCSSxJQUFNLGNBQWMsR0FBcEIsTUFBTSxjQUFlLFNBQVEsS0FBSztDQVV4QyxDQUFBO0FBTkM7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNsRixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7OzZDQUNYO0FBS2hCO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztJQUNsRixNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7OzhDQUNaO0FBVE4sY0FBYztJQWYxQixJQUFJLENBQUMsa0JBQWtCLEVBQUU7UUFDeEIsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixRQUFRLEVBQUUsU0FBUztRQUNuQixLQUFLLEVBQUUsU0FBUztRQUNoQixJQUFJLEVBQUUsa0JBQWtCO1FBQ3hCLEtBQUssRUFBRSxFQUFFO1FBQ1QsTUFBTSxFQUFFLEVBQUU7UUFDVixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUNwQyxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsUUFBUTtZQUNmLFdBQVcsRUFBRSw2REFBNkQ7WUFDMUUsWUFBWSxFQUFFLEVBQUU7U0FDakI7S0FDRixDQUFDO0lBQ0QsS0FBSyxFQUFFO0dBQ0ssY0FBYyxDQVUxQjs7QUFFRDs7Ozs7Ozs7R0FRRztBQWlCSSxJQUFNLFlBQVksR0FBbEIsTUFBTSxZQUFhLFNBQVEsS0FBSztDQVV0QyxDQUFBO0FBTkM7SUFIQyxRQUFRLEVBQUU7SUFDVixTQUFTLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUscUNBQXFDLEVBQUUsQ0FBQztJQUM3RixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7OzJDQUNYO0FBS2hCO0lBSEMsUUFBUSxFQUFFO0lBQ1YsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLENBQUM7SUFDN0UsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDOzs0Q0FDWjtBQVROLFlBQVk7SUFoQnhCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtRQUN0QixJQUFJLEVBQUUsZ0JBQWdCO1FBQ3RCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLEtBQUssRUFBRSxTQUFTO1FBQ2hCLElBQUksRUFBRSxTQUFTO1FBQ2YsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQztRQUNoRCxRQUFRLEVBQUU7WUFDUixLQUFLLEVBQUUsTUFBTTtZQUNiLFdBQVcsRUFBRSxnSEFBZ0g7WUFDN0gsSUFBSSxFQUFFLEVBQUU7WUFDUixRQUFRLEVBQUUsWUFBWTtTQUN2QjtLQUNGLENBQUM7SUFDRCxLQUFLLEVBQUU7R0FDSyxZQUFZLENBVXhCOztBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUc7SUFDdEMsVUFBVTtJQUNWLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLFdBQVc7SUFDWCxhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQixjQUFjO0lBQ2QsWUFBWTtDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL25vZGVzL2Zsb3ctY29udHJvbFxuICogQHN1bW1hcnkgUHJvZHVjdGlvbiBmbG93LWNvbnRyb2wgbm9kZSBraW5kIGRlY2xhcmF0aW9ucyAoREVDQUYtMzIgwqcyMi4yLjIpLlxuICogQGRlc2NyaXB0aW9uIENhbm9uaWNhbCBgQG5vZGVgLWRlY29yYXRlZCBjbGFzc2VzIGZvciB0aGUgdGVuIEFMRlJFRC01XG4gKiBmbG93LWNvbnRyb2wga2luZHMuIFRoZXNlIGFyZSBncmFwaC1sZXZlbCBtYWNyb3M6IHRoZSBlbmdpbmUncyBwbGFubmVyXG4gKiByZWNvZ25pc2VzIHRoZW0gYXMgb3JkaW5hcnkgZXhlY3V0YWJsZSBub2RlcyAowqc1LjcpIGJ1dCB0aGV5IGhhdmUgbm9cbiAqIGJ1aWx0LWluIGV4ZWN1dG9ycyDigJQgZG93bnN0cmVhbSBwcm9qZWN0cyAoZS5nLiBBTEZSRUQpIHJlZ2lzdGVyIGN1c3RvbVxuICogZXhlY3V0b3JzIG9yIGNvbXBpbGUgdGhlbSBpbnRvIE1hc3RyYSBjb21wb3NpdGlvbiBBUElzICjCpzIyLjIuMikuXG4gKlxuICogVGhlIHRocmVlIGxvb3Aga2luZHMgKGBjb3JlLmxvb3AuZm9yZWFjaC93aGlsZS91bnRpbGApIGFscmVhZHkgaGF2ZSBidWlsdC1pblxuICogZXhlY3V0b3JzICjCpzUuOSkgYW5kIGFyZSBOT1QgcmVkZWNsYXJlZCBoZXJlLlxuICovXG5pbXBvcnQgeyBNb2RlbCwgbW9kZWwsIHJlcXVpcmVkIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgdWllbGVtZW50IH0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQge1xuICBncmFwaERlZmluaXRpb25PZixcbiAgaW5wdXQsXG4gIG5vZGUsXG4gIG91dHB1dCxcbiAgUG9ydERpcmVjdGlvbixcbiAgdHlwZSBHcmFwaFBvcnREZWZpbml0aW9uLFxufSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcbmltcG9ydCB0eXBlIHsgTm9kZU1ldGFkYXRhQ2hhbmdlLCBTd2l0Y2hOb2RlTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IEdyYXBoTm9kZSB9IGZyb20gXCIuL2Jhc2VcIjtcblxuLyoqXG4gKiBJZiDigJQgY29uZGl0aW9uYWwgYnJhbmNoLiBFdmFsdWF0ZXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKMKnMjIuMykgYW5kXG4gKiByb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBgdGhlbmAgb3IgYGVsc2VgIG91dHB1dC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuaWZcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5pZlwiLFxuICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgY29sb3I6IFwiI2Y1OWUwYlwiLFxuICBpY29uOiBcInRpLWFycm93cy1zcGxpdC0yXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiY29uZGl0aW9uYWxcIiwgXCJicmFuY2hcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiSWZcIixcbiAgICBkZXNjcmlwdGlvbjogXCJDb25kaXRpb25hbCBicmFuY2guIEV2YWx1YXRlcyB0aGUgY29uZmlndXJlZCBjb25kaXRpb24gYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlIG1hdGNoaW5nIG91dHB1dC5cIixcbiAgICBjb25kaXRpb246IHsgb3A6IFwiZXFcIiwgbGVmdDogeyBjb25zdDogdHJ1ZSB9LCByaWdodDogeyBjb25zdDogdHJ1ZSB9IH0sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBJZkZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBldmFsdWF0ZVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJUaGVuXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCB3aGVuIGNvbmRpdGlvbiBpcyB0cnVlXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJ0aGVuXCIgfSlcbiAgdGhlbiE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRWxzZVwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBjb25kaXRpb24gaXMgZmFsc2VcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImVsc2VcIiB9KVxuICBlbHNlITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTd2l0Y2gg4oCUIG11bHRpLWJyYW5jaC4gUm91dGVzIHRoZSBpbnB1dCB0byBvbmUgb2YgdGhlIGNhc2Ugb3V0cHV0IHBvcnRzXG4gKiBvciBgZGVmYXVsdGAgYmFzZWQgb24gbWF0Y2hpbmcgY29uZGl0aW9ucy4gRWFjaCBjYXNlIGRlZmluZXMgYVxuICoge0BsaW5rIFN3aXRjaENhc2VDb25kaXRpb259IChncmFwaGljYWwgb3IgY29kZSBtb2RlKSBhbmQgYSBkZWRpY2F0ZWRcbiAqIG91dHB1dCBwb3J0LiBDYXNlcyBhcmUgc3RvcmVkIGluIGBtZXRhZGF0YS5zd2l0Y2guY2FzZXNgIGFuZCB0aGVcbiAqIHJlbmRlcmVyIGNyZWF0ZXMgZHluYW1pYyBvdXRwdXQgcG9ydHMgZnJvbSB0aGVtIChERUNBRi0zMiDCpzIyLjIuMikuXG4gKlxuICogVGhlIG5vZGUgZ3Jvd3MgaW4gaGVpZ2h0IGFzIGNhc2VzIGFyZSBhZGRlZC4gRWFjaCBjYXNlIGdldHMgaXRzIG93blxuICogb3V0cHV0IHBvcnQgb24gdGhlIHJpZ2h0IHNpZGUsIGxhYmVsZWQgd2l0aCB0aGUgY2FzZSBsYWJlbC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuc3dpdGNoXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuc3dpdGNoXCIsXG4gIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICBjb2xvcjogXCIjZjk3MzE2XCIsXG4gIGljb246IFwidGktYXJyb3dzLXNodWZmbGVcIixcbiAgd2lkdGg6IDEyMCxcbiAgaGVpZ2h0OiAxNDAsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcInN3aXRjaFwiLCBcIm11bHRpLWJyYW5jaFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJTd2l0Y2hcIixcbiAgICBkZXNjcmlwdGlvbjogXCJNdWx0aS1icmFuY2ggc3dpdGNoLiBSb3V0ZXMgdGhlIGlucHV0IHRvIHRoZSBmaXJzdCBtYXRjaGluZyBjYXNlIG91dHB1dCwgb3IgdGhlIGRlZmF1bHQgb3V0cHV0LlwiLFxuICAgIHN3aXRjaDoge1xuICAgICAgY2FzZXM6IFtdLFxuICAgICAgZGVmYXVsdFBvcnQ6IFwiZGVmYXVsdFwiLFxuICAgIH0sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBTd2l0Y2hGbG93Tm9kZSBleHRlbmRzIEdyYXBoTm9kZSB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIHN3aXRjaCBvblwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJEZWZhdWx0XCIsIHBsYWNlaG9sZGVyOiBcIkRlZmF1bHQgb3V0cHV0IHdoZW4gbm8gY2FzZSBtYXRjaGVzXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJkZWZhdWx0XCIgfSlcbiAgZGVmYXVsdCE6IHVua25vd247XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBub2RlJ3MgcG9ydHMsIHNpemUsIGFuZCBkYXRhIHBhdGNoIGZyb20gdGhlIGdpdmVuIHN3aXRjaFxuICAgKiBtZXRhZGF0YS4gRWFjaCBjYXNlIGdldHMgaXRzIG93biBvdXRwdXQgcG9ydCBvbiB0aGUgcmlnaHQgc2lkZTsgdGhlXG4gICAqIG5vZGUgZ3Jvd3MgaW4gaGVpZ2h0IGFzIGNhc2VzIGFyZSBhZGRlZC5cbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZSBhcHBseU1ldGFkYXRhKG1ldGE6IFN3aXRjaE5vZGVNZXRhZGF0YSk6IE5vZGVNZXRhZGF0YUNoYW5nZSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGdyYXBoRGVmaW5pdGlvbk9mKHRoaXMgYXMgbmV2ZXIpO1xuICAgIGNvbnN0IGJhc2VQb3J0cyA9IGRlZmluaXRpb24ucG9ydHMuZmlsdGVyKFxuICAgICAgKHApID0+ICFtZXRhLmNhc2VzLnNvbWUoKGMpID0+IGMub3V0cHV0UG9ydCA9PT0gcC5wcm9wZXJ0eSlcbiAgICApO1xuICAgIGNvbnN0IGNhc2VQb3J0czogR3JhcGhQb3J0RGVmaW5pdGlvbltdID0gbWV0YS5jYXNlcy5tYXAoKGMpID0+ICh7XG4gICAgICBwcm9wZXJ0eTogYy5vdXRwdXRQb3J0LFxuICAgICAgbmFtZTogYy5sYWJlbCxcbiAgICAgIGRpcmVjdGlvbjogUG9ydERpcmVjdGlvbi5PVVRQVVQsXG4gICAgICBsYWJlbDogYy5sYWJlbCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICBwYXRoOiBjLm91dHB1dFBvcnQsXG4gICAgfSkpO1xuICAgIGNvbnN0IGNhc2VDb3VudCA9IG1ldGEuY2FzZXMubGVuZ3RoO1xuICAgIHJldHVybiB7XG4gICAgICBwb3J0czogWy4uLmJhc2VQb3J0cywgLi4uY2FzZVBvcnRzXSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgd2lkdGg6IGRlZmluaXRpb24ud2lkdGggPz8gMTIwLFxuICAgICAgICBoZWlnaHQ6IGNhc2VDb3VudCA+IDAgPyAxNDAgKyBjYXNlQ291bnQgKiAyNCA6IGRlZmluaXRpb24uaGVpZ2h0ID8/IDE0MCxcbiAgICAgIH0sXG4gICAgICBkYXRhUGF0Y2g6IHsgc3dpdGNoTWV0YWRhdGE6IG1ldGEgfSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUGFyYWxsZWwg4oCUIHNwbGl0cyBleGVjdXRpb24gaW50byBjb25jdXJyZW50IGJyYW5jaGVzLlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5wYXJhbGxlbFwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93LnBhcmFsbGVsXCIsXG4gIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICBjb2xvcjogXCIjMDZiNmQ0XCIsXG4gIGljb246IFwidGktYXJyb3dzLXZlcnRpY2FsXCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwicGFyYWxsZWxcIiwgXCJjb25jdXJyZW50XCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIlBhcmFsbGVsXCIsXG4gICAgZGVzY3JpcHRpb246IFwiU3BsaXRzIGV4ZWN1dGlvbiBpbnRvIGNvbmN1cnJlbnQgYnJhbmNoZXMuIEFsbCBicmFuY2hlcyBydW4gaW4gcGFyYWxsZWwgYW5kIG91dHB1dHMgYXJlIGNvbGxlY3RlZC5cIixcbiAgICBicmFuY2hDb3VudDogMixcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIFBhcmFsbGVsRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIGZhbiBvdXRcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiQnJhbmNoZXNcIiwgcGxhY2Vob2xkZXI6IFwiQ29sbGVjdGVkIGJyYW5jaCBvdXRwdXRzXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJicmFuY2hlc1wiIH0pXG4gIGJyYW5jaGVzITogdW5rbm93bltdO1xufVxuXG4vKipcbiAqIE1lcmdlIOKAlCBub3JtYWxpc2VzIGJyYW5jaC9wYXJhbGxlbCBvdXRwdXRzIGludG8gYSBzaW5nbGUgb3V0cHV0LlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5tZXJnZVwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93Lm1lcmdlXCIsXG4gIGNhdGVnb3J5OiBcIlV0aWxpdHlcIixcbiAgY29sb3I6IFwiIzBkOTQ4OFwiLFxuICBpY29uOiBcInRpLWFycm93cy1tZXJnZVwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcIm1lcmdlXCIsIFwiam9pblwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJNZXJnZVwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIk1lcmdlcyBtdWx0aXBsZSBicmFuY2ggb3V0cHV0cyBpbnRvIGEgc2luZ2xlIG5vcm1hbGlzZWQgb3V0cHV0IG9iamVjdC5cIixcbiAgICBzdHJhdGVneTogXCJjb25jYXRcIixcbiAgfSxcbn0pXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIE1lcmdlRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIkJyYW5jaCBvdXRwdXRzXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dHMgdG8gbWVyZ2VcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVzXCIgfSlcbiAgdmFsdWVzITogdW5rbm93bltdO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIk1lcmdlZCBvdXRwdXRcIiwgcGxhY2Vob2xkZXI6IFwiTWVyZ2VkIHJlc3VsdFwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwibWVyZ2VkXCIgfSlcbiAgbWVyZ2VkITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBNYXAg4oCUIHRyYW5zZm9ybXMgdGhlIGN1cnJlbnQgaW5wdXQgaW50byBhIG5ldyBvdXRwdXQgb2JqZWN0LlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5tYXBcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5tYXBcIixcbiAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICBjb2xvcjogXCIjODRjYzE2XCIsXG4gIGljb246IFwidGktYXJyb3dzLXJpZ2h0LWxlZnRcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJtYXBcIiwgXCJ0cmFuc2Zvcm1cIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiTWFwXCIsXG4gICAgZGVzY3JpcHRpb246IFwiVHJhbnNmb3JtcyB0aGUgY3VycmVudCBpbnB1dCBpbnRvIGEgbmV3IG91dHB1dCBvYmplY3QgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgbWFwcGVyLlwiLFxuICAgIG1hcHBlcjoge30sXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBNYXBGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gdHJhbnNmb3JtXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlRyYW5zZm9ybWVkIG91dHB1dFwiLCBwbGFjZWhvbGRlcjogXCJNYXBwZWQgcmVzdWx0XCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KVxuICByZXN1bHQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIERlbGF5IOKAlCBwYXVzZXMgZXhlY3V0aW9uIGZvciBhIGNvbmZpZ3VyZWQgZHVyYXRpb24uXG4gKi9cbkBub2RlKFwiY29yZS5mbG93LmRlbGF5XCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuZGVsYXlcIixcbiAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICBjb2xvcjogXCIjYTNhM2EzXCIsXG4gIGljb246IFwidGktY2xvY2staG91ci00XCIsXG4gIHdpZHRoOiA5NixcbiAgaGVpZ2h0OiA5NixcbiAgbGFiZWxzOiBbXCJmbG93XCIsIFwiZGVsYXlcIiwgXCJ3YWl0XCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIkRlbGF5XCIsXG4gICAgZGVzY3JpcHRpb246IFwiUGF1c2VzIGV4ZWN1dGlvbiBmb3IgdGhlIGNvbmZpZ3VyZWQgZHVyYXRpb24gKGluIG1pbGxpc2Vjb25kcyksIHRoZW4gZm9yd2FyZHMgdGhlIGlucHV0IHVuY2hhbmdlZC5cIixcbiAgICBkdXJhdGlvbk1zOiAxMDAwLFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgRGVsYXlGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZm9yd2FyZCBhZnRlciBkZWxheVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJPdXRwdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiRm9yd2FyZGVkIHZhbHVlXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlT3V0ITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBFcnJvciBib3VuZGFyeSDigJQgdHJ5L2NhdGNoL2ZpbmFsbHkgd29ya2Zsb3cgYmVoYXZpb3VyLlxuICovXG5Abm9kZShcImNvcmUuZmxvdy5lcnJvckJvdW5kYXJ5XCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cuZXJyb3JCb3VuZGFyeVwiLFxuICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgY29sb3I6IFwiI2VmNDQ0NFwiLFxuICBpY29uOiBcInRpLXNoaWVsZC1jaGVja1wiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcImVycm9yXCIsIFwidHJ5LWNhdGNoXCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIkVycm9yIGJvdW5kYXJ5XCIsXG4gICAgZGVzY3JpcHRpb246IFwiV3JhcHMgdGhlIGlucHV0IGluIGEgdHJ5L2NhdGNoL2ZpbmFsbHkuIEVtaXRzIHRoZSByZXN1bHQgb24gc3VjY2Vzcywgb3IgdGhlIGVycm9yIG9uIGZhaWx1cmUuXCIsXG4gICAgZmluYWxseTogZmFsc2UsXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBFcnJvckJvdW5kYXJ5Rmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIGd1YXJkXCIgfSlcbiAgQGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSlcbiAgdmFsdWUhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJlc3VsdFwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgb24gc3VjY2Vzc1wiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSlcbiAgcmVzdWx0ITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJFcnJvclwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgb24gZmFpbHVyZVwiIH0pXG4gIEBvdXRwdXQoeyBoYW5kbGU6IFwiZXJyb3JcIiB9KVxuICBlcnJvciE6IHVua25vd247XG59XG5cbi8qKlxuICogSHVtYW4gYXBwcm92YWwg4oCUIHN1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBhIGh1bWFuIGFwcHJvdmVzIG9yIHJlamVjdHMuXG4gKi9cbkBub2RlKFwiY29yZS5mbG93Lmh1bWFuQXBwcm92YWxcIiwge1xuICBraW5kOiBcImNvcmUuZmxvdy5odW1hbkFwcHJvdmFsXCIsXG4gIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICBjb2xvcjogXCIjZDk0NmVmXCIsXG4gIGljb246IFwidGktdXNlci1jaGVja1wiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcImFwcHJvdmFsXCIsIFwic3VzcGVuZFwiXSxcbiAgbWV0YWRhdGE6IHtcbiAgICB0aXRsZTogXCJIdW1hbiBhcHByb3ZhbFwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIlN1c3BlbmRzIGV4ZWN1dGlvbiB1bnRpbCBhIGh1bWFuIGFwcHJvdmVzIG9yIHJlamVjdHMuIEVtaXRzIHRoZSBhcHByb3ZlZCB2YWx1ZSBvciBhIHJlamVjdGlvbi5cIixcbiAgICBhcHByb3ZlcnM6IFtdLFxuICAgIHRpbWVvdXRNczogODY0MDAwMDAsXG4gIH0sXG59KVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBIdW1hbkFwcHJvdmFsRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHBlbmRpbmcgYXBwcm92YWxcIiB9KVxuICBAaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KVxuICB2YWx1ZSE6IHVua25vd247XG5cbiAgQHJlcXVpcmVkKClcbiAgQHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiQXBwcm92ZWRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gYXBwcm92ZWRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcImFwcHJvdmVkXCIgfSlcbiAgYXBwcm92ZWQhOiB1bmtub3duO1xuXG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJlamVjdGVkXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dCB3aGVuIHJlamVjdGVkXCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJyZWplY3RlZFwiIH0pXG4gIHJlamVjdGVkITogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSZXR1cm4g4oCUIGRlZmluZXMgYW5kIG5vcm1hbGlzZXMgdGhlIGZpbmFsIHdvcmtmbG93IG91dHB1dC5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cucmV0dXJuXCIsIHtcbiAga2luZDogXCJjb3JlLmZsb3cucmV0dXJuXCIsXG4gIGNhdGVnb3J5OiBcIlV0aWxpdHlcIixcbiAgY29sb3I6IFwiIzIyYzU1ZVwiLFxuICBpY29uOiBcInRpLWFycm93LWJhY2stdXBcIixcbiAgd2lkdGg6IDk2LFxuICBoZWlnaHQ6IDk2LFxuICBsYWJlbHM6IFtcImZsb3dcIiwgXCJyZXR1cm5cIiwgXCJvdXRwdXRcIl0sXG4gIG1ldGFkYXRhOiB7XG4gICAgdGl0bGU6IFwiUmV0dXJuXCIsXG4gICAgZGVzY3JpcHRpb246IFwiTm9ybWFsaXNlcyB0aGUgaW5wdXQgaW50byB0aGUgZmluYWwgd29ya2Zsb3cgb3V0cHV0IG9iamVjdC5cIixcbiAgICBvdXRwdXRTY2hlbWE6IHt9LFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgUmV0dXJuRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG4gIEByZXF1aXJlZCgpXG4gIEB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIG5vcm1hbGlzZVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pXG4gIHZhbHVlITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZXR1cm5lZCBvdXRwdXRcIiwgcGxhY2Vob2xkZXI6IFwiTm9ybWFsaXNlZCBvdXRwdXRcIiB9KVxuICBAb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pXG4gIHJlc3VsdCE6IHVua25vd247XG59XG5cbi8qKlxuICogQ29kZSDigJQgc2FuZGJveGVkIEpTL1RTIGNvZGUgZXhlY3V0aW9uIChBTEZSRUQtNSDCpzcpLlxuICpcbiAqIFRoZSBlbmdpbmUgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBzYW5kYm94IGRpcmVjdGx5ICjCpzIyLjQpLiBBIGZ1dHVyZVxuICogZXhlY3V0b3IgbWF5IHdyYXAgdGhlIGBDb2RlU2FuZGJveGAgY29udHJhY3QgKEFMRlJFRC01IMKnNy4xNykgYXMgYVxuICogcGx1Z2dhYmxlIGV4ZWN1dG9yLiBUaGUgcGxhY2Vob2xkZXIgc3ludGF4IChge3sgJGlucHV0IH19YCwgYHt7ICRpdGVtIH19YCxcbiAqIGB7eyAkaW5kZXggfX1gLCBge3sgJHZhcnMgfX1gLCBge3sgJG5vZGVbXCJOYW1lXCJdLm91dHB1dCB9fWApIGlzIE1hc3RyYS1cbiAqIGFnbm9zdGljIGFuZCBsaXZlcyBpbiB0aGUgZG93bnN0cmVhbSBwcm9qZWN0J3MgYG1vZHVsZXMvY29yZWAgKEFMRlJFRC02KS5cbiAqL1xuQG5vZGUoXCJjb3JlLmZsb3cuY29kZVwiLCB7XG4gIGtpbmQ6IFwiY29yZS5mbG93LmNvZGVcIixcbiAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICBjb2xvcjogXCIjN2MzYWVkXCIsXG4gIGljb246IFwidGktY29kZVwiLFxuICB3aWR0aDogOTYsXG4gIGhlaWdodDogOTYsXG4gIGxhYmVsczogW1wiZmxvd1wiLCBcImNvZGVcIiwgXCJzYW5kYm94XCIsIFwidHJhbnNmb3JtXCJdLFxuICBtZXRhZGF0YToge1xuICAgIHRpdGxlOiBcIkNvZGVcIixcbiAgICBkZXNjcmlwdGlvbjogXCJSdW5zIHVzZXItYXV0aG9yZWQgSlMvVFMgaW4gYSByZXN0cmljdGVkIFZNIHNhbmRib3guIFN1cHBvcnRzIHBsYWNlaG9sZGVyIHN5bnRheCBmb3Igd29ya2Zsb3cgZGF0YSByZWZlcmVuY2VzLlwiLFxuICAgIGNvZGU6IFwiXCIsXG4gICAgbGFuZ3VhZ2U6IFwiamF2YXNjcmlwdFwiLFxuICB9LFxufSlcbkBtb2RlbCgpXG5leHBvcnQgY2xhc3MgQ29kZUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJJbnB1dCBvYmplY3QgKGFjY2Vzc2libGUgYXMgJGlucHV0KVwiIH0pXG4gIEBpbnB1dCh7IGhhbmRsZTogXCJpbnB1dFwiIH0pXG4gIGlucHV0ITogdW5rbm93bjtcblxuICBAcmVxdWlyZWQoKVxuICBAdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZXN1bHRcIiwgcGxhY2Vob2xkZXI6IFwiQ29kZSBleGVjdXRpb24gcmVzdWx0XCIgfSlcbiAgQG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KVxuICByZXN1bHQhOiB1bmtub3duO1xufVxuXG4vKipcbiAqIEFsbCBidWlsdC1pbiBmbG93LWNvbnRyb2wgbm9kZSBjb25zdHJ1Y3RvcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBHUkFQSF9GTE9XX0NPTlRST0xfTk9ERVMgPSBbXG4gIElmRmxvd05vZGUsXG4gIFN3aXRjaEZsb3dOb2RlLFxuICBQYXJhbGxlbEZsb3dOb2RlLFxuICBNZXJnZUZsb3dOb2RlLFxuICBNYXBGbG93Tm9kZSxcbiAgRGVsYXlGbG93Tm9kZSxcbiAgRXJyb3JCb3VuZGFyeUZsb3dOb2RlLFxuICBIdW1hbkFwcHJvdmFsRmxvd05vZGUsXG4gIFJldHVybkZsb3dOb2RlLFxuICBDb2RlRmxvd05vZGUsXG5dIGFzIGNvbnN0O1xuIl19
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmxvdy1jb250cm9sLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDakYsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3SCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVTtRQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOztRQUMxSCxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FB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dGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG4vKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL25vZGVzL2Zsb3ctY29udHJvbFxuICogQHN1bW1hcnkgUHJvZHVjdGlvbiBmbG93LWNvbnRyb2wgbm9kZSBraW5kIGRlY2xhcmF0aW9ucyAoREVDQUYtMzIgwqcyMi4yLjIpLlxuICogQGRlc2NyaXB0aW9uIENhbm9uaWNhbCBgQG5vZGVgLWRlY29yYXRlZCBjbGFzc2VzIGZvciB0aGUgdGVuIEFMRlJFRC01XG4gKiBmbG93LWNvbnRyb2wga2luZHMuIFRoZXNlIGFyZSBncmFwaC1sZXZlbCBtYWNyb3M6IHRoZSBlbmdpbmUncyBwbGFubmVyXG4gKiByZWNvZ25pc2VzIHRoZW0gYXMgb3JkaW5hcnkgZXhlY3V0YWJsZSBub2RlcyAowqc1LjcpIGJ1dCB0aGV5IGhhdmUgbm9cbiAqIGJ1aWx0LWluIGV4ZWN1dG9ycyDigJQgZG93bnN0cmVhbSBwcm9qZWN0cyAoZS5nLiBBTEZSRUQpIHJlZ2lzdGVyIGN1c3RvbVxuICogZXhlY3V0b3JzIG9yIGNvbXBpbGUgdGhlbSBpbnRvIE1hc3RyYSBjb21wb3NpdGlvbiBBUElzICjCpzIyLjIuMikuXG4gKlxuICogVGhlIHRocmVlIGxvb3Aga2luZHMgKGBjb3JlLmxvb3AuZm9yZWFjaC93aGlsZS91bnRpbGApIGFscmVhZHkgaGF2ZSBidWlsdC1pblxuICogZXhlY3V0b3JzICjCpzUuOSkgYW5kIGFyZSBOT1QgcmVkZWNsYXJlZCBoZXJlLlxuICovXG5pbXBvcnQgeyBNb2RlbCwgbW9kZWwsIHJlcXVpcmVkIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgdWllbGVtZW50IH0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBncmFwaERlZmluaXRpb25PZiwgaW5wdXQsIG5vZGUsIG91dHB1dCwgUG9ydERpcmVjdGlvbiwgfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcbmltcG9ydCB7IEdyYXBoTm9kZSB9IGZyb20gXCIuL2Jhc2UuanNcIjtcbi8qKlxuICogSWYg4oCUIGNvbmRpdGlvbmFsIGJyYW5jaC4gRXZhbHVhdGVzIGEgYENvbmRpdGlvbkV4cHJlc3Npb25gICjCpzIyLjMpIGFuZFxuICogcm91dGVzIHRoZSBpbnB1dCB0byB0aGUgYHRoZW5gIG9yIGBlbHNlYCBvdXRwdXQuXG4gKi9cbmxldCBJZkZsb3dOb2RlID0gY2xhc3MgSWZGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gZXZhbHVhdGVcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBJZkZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlRoZW5cIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gY29uZGl0aW9uIGlzIHRydWVcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwidGhlblwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBJZkZsb3dOb2RlLnByb3RvdHlwZSwgXCJ0aGVuXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRWxzZVwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBjb25kaXRpb24gaXMgZmFsc2VcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwiZWxzZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBJZkZsb3dOb2RlLnByb3RvdHlwZSwgXCJlbHNlXCIsIHZvaWQgMCk7XG5JZkZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5pZlwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93LmlmXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICAgICAgICBjb2xvcjogXCIjZjU5ZTBiXCIsXG4gICAgICAgIGljb246IFwidGktYXJyb3dzLXNwbGl0LTJcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJjb25kaXRpb25hbFwiLCBcImJyYW5jaFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIklmXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJDb25kaXRpb25hbCBicmFuY2guIEV2YWx1YXRlcyB0aGUgY29uZmlndXJlZCBjb25kaXRpb24gYW5kIHJvdXRlcyB0aGUgaW5wdXQgdG8gdGhlIG1hdGNoaW5nIG91dHB1dC5cIixcbiAgICAgICAgICAgIGNvbmRpdGlvbjogeyBvcDogXCJlcVwiLCBsZWZ0OiB7IGNvbnN0OiB0cnVlIH0sIHJpZ2h0OiB7IGNvbnN0OiB0cnVlIH0gfSxcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBJZkZsb3dOb2RlKTtcbmV4cG9ydCB7IElmRmxvd05vZGUgfTtcbi8qKlxuICogU3dpdGNoIOKAlCBtdWx0aS1icmFuY2guIFJvdXRlcyB0aGUgaW5wdXQgdG8gb25lIG9mIHRoZSBjYXNlIG91dHB1dCBwb3J0c1xuICogb3IgYGRlZmF1bHRgIGJhc2VkIG9uIG1hdGNoaW5nIGNvbmRpdGlvbnMuIEVhY2ggY2FzZSBkZWZpbmVzIGFcbiAqIHtAbGluayBTd2l0Y2hDYXNlQ29uZGl0aW9ufSAoZ3JhcGhpY2FsIG9yIGNvZGUgbW9kZSkgYW5kIGEgZGVkaWNhdGVkXG4gKiBvdXRwdXQgcG9ydC4gQ2FzZXMgYXJlIHN0b3JlZCBpbiBgbWV0YWRhdGEuc3dpdGNoLmNhc2VzYCBhbmQgdGhlXG4gKiByZW5kZXJlciBjcmVhdGVzIGR5bmFtaWMgb3V0cHV0IHBvcnRzIGZyb20gdGhlbSAoREVDQUYtMzIgwqcyMi4yLjIpLlxuICpcbiAqIFRoZSBub2RlIGdyb3dzIGluIGhlaWdodCBhcyBjYXNlcyBhcmUgYWRkZWQuIEVhY2ggY2FzZSBnZXRzIGl0cyBvd25cbiAqIG91dHB1dCBwb3J0IG9uIHRoZSByaWdodCBzaWRlLCBsYWJlbGVkIHdpdGggdGhlIGNhc2UgbGFiZWwuXG4gKi9cbmxldCBTd2l0Y2hGbG93Tm9kZSA9IGNsYXNzIFN3aXRjaEZsb3dOb2RlIGV4dGVuZHMgR3JhcGhOb2RlIHtcbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbm9kZSdzIHBvcnRzLCBzaXplLCBhbmQgZGF0YSBwYXRjaCBmcm9tIHRoZSBnaXZlbiBzd2l0Y2hcbiAgICAgKiBtZXRhZGF0YS4gRWFjaCBjYXNlIGdldHMgaXRzIG93biBvdXRwdXQgcG9ydCBvbiB0aGUgcmlnaHQgc2lkZTsgdGhlXG4gICAgICogbm9kZSBncm93cyBpbiBoZWlnaHQgYXMgY2FzZXMgYXJlIGFkZGVkLlxuICAgICAqL1xuICAgIHN0YXRpYyBhcHBseU1ldGFkYXRhKG1ldGEpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IGdyYXBoRGVmaW5pdGlvbk9mKHRoaXMpO1xuICAgICAgICBjb25zdCBiYXNlUG9ydHMgPSBkZWZpbml0aW9uLnBvcnRzLmZpbHRlcigocCkgPT4gIW1ldGEuY2FzZXMuc29tZSgoYykgPT4gYy5vdXRwdXRQb3J0ID09PSBwLnByb3BlcnR5KSk7XG4gICAgICAgIGNvbnN0IGNhc2VQb3J0cyA9IG1ldGEuY2FzZXMubWFwKChjKSA9PiAoe1xuICAgICAgICAgICAgcHJvcGVydHk6IGMub3V0cHV0UG9ydCxcbiAgICAgICAgICAgIG5hbWU6IGMubGFiZWwsXG4gICAgICAgICAgICBkaXJlY3Rpb246IFBvcnREaXJlY3Rpb24uT1VUUFVULFxuICAgICAgICAgICAgbGFiZWw6IGMubGFiZWwsXG4gICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICBoaWRkZW46IGZhbHNlLFxuICAgICAgICAgICAgcGF0aDogYy5vdXRwdXRQb3J0LFxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGNhc2VDb3VudCA9IG1ldGEuY2FzZXMubGVuZ3RoO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcG9ydHM6IFsuLi5iYXNlUG9ydHMsIC4uLmNhc2VQb3J0c10sXG4gICAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGRlZmluaXRpb24ud2lkdGggPz8gMTIwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogY2FzZUNvdW50ID4gMCA/IDE0MCArIGNhc2VDb3VudCAqIDI0IDogZGVmaW5pdGlvbi5oZWlnaHQgPz8gMTQwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRhdGFQYXRjaDogeyBzd2l0Y2hNZXRhZGF0YTogbWV0YSB9LFxuICAgICAgICB9O1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgdG8gc3dpdGNoIG9uXCIgfSksXG4gICAgaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgU3dpdGNoRmxvd05vZGUucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRGVmYXVsdFwiLCBwbGFjZWhvbGRlcjogXCJEZWZhdWx0IG91dHB1dCB3aGVuIG5vIGNhc2UgbWF0Y2hlc1wiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJkZWZhdWx0XCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIFN3aXRjaEZsb3dOb2RlLnByb3RvdHlwZSwgXCJkZWZhdWx0XCIsIHZvaWQgMCk7XG5Td2l0Y2hGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cuc3dpdGNoXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuc3dpdGNoXCIsXG4gICAgICAgIGNhdGVnb3J5OiBcIkZsb3cgQ29udHJvbFwiLFxuICAgICAgICBjb2xvcjogXCIjZjk3MzE2XCIsXG4gICAgICAgIGljb246IFwidGktYXJyb3dzLXNodWZmbGVcIixcbiAgICAgICAgd2lkdGg6IDEyMCxcbiAgICAgICAgaGVpZ2h0OiAxNDAsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcInN3aXRjaFwiLCBcIm11bHRpLWJyYW5jaFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIlN3aXRjaFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTXVsdGktYnJhbmNoIHN3aXRjaC4gUm91dGVzIHRoZSBpbnB1dCB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgY2FzZSBvdXRwdXQsIG9yIHRoZSBkZWZhdWx0IG91dHB1dC5cIixcbiAgICAgICAgICAgIHN3aXRjaDoge1xuICAgICAgICAgICAgICAgIGNhc2VzOiBbXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0UG9ydDogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIFN3aXRjaEZsb3dOb2RlKTtcbmV4cG9ydCB7IFN3aXRjaEZsb3dOb2RlIH07XG4vKipcbiAqIFBhcmFsbGVsIOKAlCBzcGxpdHMgZXhlY3V0aW9uIGludG8gY29uY3VycmVudCBicmFuY2hlcy5cbiAqL1xubGV0IFBhcmFsbGVsRmxvd05vZGUgPSBjbGFzcyBQYXJhbGxlbEZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBmYW4gb3V0XCIgfSksXG4gICAgaW5wdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgUGFyYWxsZWxGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJCcmFuY2hlc1wiLCBwbGFjZWhvbGRlcjogXCJDb2xsZWN0ZWQgYnJhbmNoIG91dHB1dHNcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwiYnJhbmNoZXNcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQXJyYXkpXG5dLCBQYXJhbGxlbEZsb3dOb2RlLnByb3RvdHlwZSwgXCJicmFuY2hlc1wiLCB2b2lkIDApO1xuUGFyYWxsZWxGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cucGFyYWxsZWxcIiwge1xuICAgICAgICBraW5kOiBcImNvcmUuZmxvdy5wYXJhbGxlbFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgICAgICAgY29sb3I6IFwiIzA2YjZkNFwiLFxuICAgICAgICBpY29uOiBcInRpLWFycm93cy12ZXJ0aWNhbFwiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcInBhcmFsbGVsXCIsIFwiY29uY3VycmVudFwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIlBhcmFsbGVsXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJTcGxpdHMgZXhlY3V0aW9uIGludG8gY29uY3VycmVudCBicmFuY2hlcy4gQWxsIGJyYW5jaGVzIHJ1biBpbiBwYXJhbGxlbCBhbmQgb3V0cHV0cyBhcmUgY29sbGVjdGVkLlwiLFxuICAgICAgICAgICAgYnJhbmNoQ291bnQ6IDIsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgUGFyYWxsZWxGbG93Tm9kZSk7XG5leHBvcnQgeyBQYXJhbGxlbEZsb3dOb2RlIH07XG4vKipcbiAqIE1lcmdlIOKAlCBub3JtYWxpc2VzIGJyYW5jaC9wYXJhbGxlbCBvdXRwdXRzIGludG8gYSBzaW5nbGUgb3V0cHV0LlxuICovXG5sZXQgTWVyZ2VGbG93Tm9kZSA9IGNsYXNzIE1lcmdlRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIkJyYW5jaCBvdXRwdXRzXCIsIHBsYWNlaG9sZGVyOiBcIk91dHB1dHMgdG8gbWVyZ2VcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZXNcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQXJyYXkpXG5dLCBNZXJnZUZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZXNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJNZXJnZWQgb3V0cHV0XCIsIHBsYWNlaG9sZGVyOiBcIk1lcmdlZCByZXN1bHRcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwibWVyZ2VkXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIE1lcmdlRmxvd05vZGUucHJvdG90eXBlLCBcIm1lcmdlZFwiLCB2b2lkIDApO1xuTWVyZ2VGbG93Tm9kZSA9IF9fZGVjb3JhdGUoW1xuICAgIG5vZGUoXCJjb3JlLmZsb3cubWVyZ2VcIiwge1xuICAgICAgICBraW5kOiBcImNvcmUuZmxvdy5tZXJnZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gICAgICAgIGNvbG9yOiBcIiMwZDk0ODhcIixcbiAgICAgICAgaWNvbjogXCJ0aS1hcnJvd3MtbWVyZ2VcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJtZXJnZVwiLCBcImpvaW5cIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJNZXJnZVwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTWVyZ2VzIG11bHRpcGxlIGJyYW5jaCBvdXRwdXRzIGludG8gYSBzaW5nbGUgbm9ybWFsaXNlZCBvdXRwdXQgb2JqZWN0LlwiLFxuICAgICAgICAgICAgc3RyYXRlZ3k6IFwiY29uY2F0XCIsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgTWVyZ2VGbG93Tm9kZSk7XG5leHBvcnQgeyBNZXJnZUZsb3dOb2RlIH07XG4vKipcbiAqIE1hcCDigJQgdHJhbnNmb3JtcyB0aGUgY3VycmVudCBpbnB1dCBpbnRvIGEgbmV3IG91dHB1dCBvYmplY3QuXG4gKi9cbmxldCBNYXBGbG93Tm9kZSA9IGNsYXNzIE1hcEZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byB0cmFuc2Zvcm1cIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBNYXBGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJUcmFuc2Zvcm1lZCBvdXRwdXRcIiwgcGxhY2Vob2xkZXI6IFwiTWFwcGVkIHJlc3VsdFwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgTWFwRmxvd05vZGUucHJvdG90eXBlLCBcInJlc3VsdFwiLCB2b2lkIDApO1xuTWFwRmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93Lm1hcFwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93Lm1hcFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gICAgICAgIGNvbG9yOiBcIiM4NGNjMTZcIixcbiAgICAgICAgaWNvbjogXCJ0aS1hcnJvd3MtcmlnaHQtbGVmdFwiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcIm1hcFwiLCBcInRyYW5zZm9ybVwiXSxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHRpdGxlOiBcIk1hcFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVHJhbnNmb3JtcyB0aGUgY3VycmVudCBpbnB1dCBpbnRvIGEgbmV3IG91dHB1dCBvYmplY3QgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgbWFwcGVyLlwiLFxuICAgICAgICAgICAgbWFwcGVyOiB7fSxcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBNYXBGbG93Tm9kZSk7XG5leHBvcnQgeyBNYXBGbG93Tm9kZSB9O1xuLyoqXG4gKiBEZWxheSDigJQgcGF1c2VzIGV4ZWN1dGlvbiBmb3IgYSBjb25maWd1cmVkIGR1cmF0aW9uLlxuICovXG5sZXQgRGVsYXlGbG93Tm9kZSA9IGNsYXNzIERlbGF5Rmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIGZvcndhcmQgYWZ0ZXIgZGVsYXlcIiB9KSxcbiAgICBpbnB1dCh7IGhhbmRsZTogXCJ2YWx1ZVwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBEZWxheUZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIk91dHB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJGb3J3YXJkZWQgdmFsdWVcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwidmFsdWVcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgRGVsYXlGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVPdXRcIiwgdm9pZCAwKTtcbkRlbGF5Rmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93LmRlbGF5XCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuZGVsYXlcIixcbiAgICAgICAgY2F0ZWdvcnk6IFwiVXRpbGl0eVwiLFxuICAgICAgICBjb2xvcjogXCIjYTNhM2EzXCIsXG4gICAgICAgIGljb246IFwidGktY2xvY2staG91ci00XCIsXG4gICAgICAgIHdpZHRoOiA5NixcbiAgICAgICAgaGVpZ2h0OiA5NixcbiAgICAgICAgbGFiZWxzOiBbXCJmbG93XCIsIFwiZGVsYXlcIiwgXCJ3YWl0XCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiRGVsYXlcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlBhdXNlcyBleGVjdXRpb24gZm9yIHRoZSBjb25maWd1cmVkIGR1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpLCB0aGVuIGZvcndhcmRzIHRoZSBpbnB1dCB1bmNoYW5nZWQuXCIsXG4gICAgICAgICAgICBkdXJhdGlvbk1zOiAxMDAwLFxuICAgICAgICB9LFxuICAgIH0pLFxuICAgIG1vZGVsKClcbl0sIERlbGF5Rmxvd05vZGUpO1xuZXhwb3J0IHsgRGVsYXlGbG93Tm9kZSB9O1xuLyoqXG4gKiBFcnJvciBib3VuZGFyeSDigJQgdHJ5L2NhdGNoL2ZpbmFsbHkgd29ya2Zsb3cgYmVoYXZpb3VyLlxuICovXG5sZXQgRXJyb3JCb3VuZGFyeUZsb3dOb2RlID0gY2xhc3MgRXJyb3JCb3VuZGFyeUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dCB2YWx1ZVwiLCBwbGFjZWhvbGRlcjogXCJWYWx1ZSB0byBndWFyZFwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIEVycm9yQm91bmRhcnlGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZXN1bHRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IG9uIHN1Y2Nlc3NcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwicmVzdWx0XCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIEVycm9yQm91bmRhcnlGbG93Tm9kZS5wcm90b3R5cGUsIFwicmVzdWx0XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiRXJyb3JcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IG9uIGZhaWx1cmVcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwiZXJyb3JcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgRXJyb3JCb3VuZGFyeUZsb3dOb2RlLnByb3RvdHlwZSwgXCJlcnJvclwiLCB2b2lkIDApO1xuRXJyb3JCb3VuZGFyeUZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5lcnJvckJvdW5kYXJ5XCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuZXJyb3JCb3VuZGFyeVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgICAgICAgY29sb3I6IFwiI2VmNDQ0NFwiLFxuICAgICAgICBpY29uOiBcInRpLXNoaWVsZC1jaGVja1wiLFxuICAgICAgICB3aWR0aDogOTYsXG4gICAgICAgIGhlaWdodDogOTYsXG4gICAgICAgIGxhYmVsczogW1wiZmxvd1wiLCBcImVycm9yXCIsIFwidHJ5LWNhdGNoXCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiRXJyb3IgYm91bmRhcnlcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIldyYXBzIHRoZSBpbnB1dCBpbiBhIHRyeS9jYXRjaC9maW5hbGx5LiBFbWl0cyB0aGUgcmVzdWx0IG9uIHN1Y2Nlc3MsIG9yIHRoZSBlcnJvciBvbiBmYWlsdXJlLlwiLFxuICAgICAgICAgICAgZmluYWxseTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgRXJyb3JCb3VuZGFyeUZsb3dOb2RlKTtcbmV4cG9ydCB7IEVycm9yQm91bmRhcnlGbG93Tm9kZSB9O1xuLyoqXG4gKiBIdW1hbiBhcHByb3ZhbCDigJQgc3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIGEgaHVtYW4gYXBwcm92ZXMgb3IgcmVqZWN0cy5cbiAqL1xubGV0IEh1bWFuQXBwcm92YWxGbG93Tm9kZSA9IGNsYXNzIEh1bWFuQXBwcm92YWxGbG93Tm9kZSBleHRlbmRzIE1vZGVsIHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcInRleHRhcmVhXCIsIHsgbGFiZWw6IFwiSW5wdXQgdmFsdWVcIiwgcGxhY2Vob2xkZXI6IFwiVmFsdWUgcGVuZGluZyBhcHByb3ZhbFwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIEh1bWFuQXBwcm92YWxGbG93Tm9kZS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJBcHByb3ZlZFwiLCBwbGFjZWhvbGRlcjogXCJPdXRwdXQgd2hlbiBhcHByb3ZlZFwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJhcHByb3ZlZFwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBIdW1hbkFwcHJvdmFsRmxvd05vZGUucHJvdG90eXBlLCBcImFwcHJvdmVkXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICByZXF1aXJlZCgpLFxuICAgIHVpZWxlbWVudChcImlucHV0XCIsIHsgbGFiZWw6IFwiUmVqZWN0ZWRcIiwgcGxhY2Vob2xkZXI6IFwiT3V0cHV0IHdoZW4gcmVqZWN0ZWRcIiB9KSxcbiAgICBvdXRwdXQoeyBoYW5kbGU6IFwicmVqZWN0ZWRcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgSHVtYW5BcHByb3ZhbEZsb3dOb2RlLnByb3RvdHlwZSwgXCJyZWplY3RlZFwiLCB2b2lkIDApO1xuSHVtYW5BcHByb3ZhbEZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5odW1hbkFwcHJvdmFsXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuaHVtYW5BcHByb3ZhbFwiLFxuICAgICAgICBjYXRlZ29yeTogXCJGbG93IENvbnRyb2xcIixcbiAgICAgICAgY29sb3I6IFwiI2Q5NDZlZlwiLFxuICAgICAgICBpY29uOiBcInRpLXVzZXItY2hlY2tcIixcbiAgICAgICAgd2lkdGg6IDk2LFxuICAgICAgICBoZWlnaHQ6IDk2LFxuICAgICAgICBsYWJlbHM6IFtcImZsb3dcIiwgXCJhcHByb3ZhbFwiLCBcInN1c3BlbmRcIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJIdW1hbiBhcHByb3ZhbFwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiU3VzcGVuZHMgZXhlY3V0aW9uIHVudGlsIGEgaHVtYW4gYXBwcm92ZXMgb3IgcmVqZWN0cy4gRW1pdHMgdGhlIGFwcHJvdmVkIHZhbHVlIG9yIGEgcmVqZWN0aW9uLlwiLFxuICAgICAgICAgICAgYXBwcm92ZXJzOiBbXSxcbiAgICAgICAgICAgIHRpbWVvdXRNczogODY0MDAwMDAsXG4gICAgICAgIH0sXG4gICAgfSksXG4gICAgbW9kZWwoKVxuXSwgSHVtYW5BcHByb3ZhbEZsb3dOb2RlKTtcbmV4cG9ydCB7IEh1bWFuQXBwcm92YWxGbG93Tm9kZSB9O1xuLyoqXG4gKiBSZXR1cm4g4oCUIGRlZmluZXMgYW5kIG5vcm1hbGlzZXMgdGhlIGZpbmFsIHdvcmtmbG93IG91dHB1dC5cbiAqL1xubGV0IFJldHVybkZsb3dOb2RlID0gY2xhc3MgUmV0dXJuRmxvd05vZGUgZXh0ZW5kcyBNb2RlbCB7XG59O1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IGxhYmVsOiBcIklucHV0IHZhbHVlXCIsIHBsYWNlaG9sZGVyOiBcIlZhbHVlIHRvIG5vcm1hbGlzZVwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcInZhbHVlXCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIFJldHVybkZsb3dOb2RlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgcmVxdWlyZWQoKSxcbiAgICB1aWVsZW1lbnQoXCJpbnB1dFwiLCB7IGxhYmVsOiBcIlJldHVybmVkIG91dHB1dFwiLCBwbGFjZWhvbGRlcjogXCJOb3JtYWxpc2VkIG91dHB1dFwiIH0pLFxuICAgIG91dHB1dCh7IGhhbmRsZTogXCJyZXN1bHRcIiB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgUmV0dXJuRmxvd05vZGUucHJvdG90eXBlLCBcInJlc3VsdFwiLCB2b2lkIDApO1xuUmV0dXJuRmxvd05vZGUgPSBfX2RlY29yYXRlKFtcbiAgICBub2RlKFwiY29yZS5mbG93LnJldHVyblwiLCB7XG4gICAgICAgIGtpbmQ6IFwiY29yZS5mbG93LnJldHVyblwiLFxuICAgICAgICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gICAgICAgIGNvbG9yOiBcIiMyMmM1NWVcIixcbiAgICAgICAgaWNvbjogXCJ0aS1hcnJvdy1iYWNrLXVwXCIsXG4gICAgICAgIHdpZHRoOiA5NixcbiAgICAgICAgaGVpZ2h0OiA5NixcbiAgICAgICAgbGFiZWxzOiBbXCJmbG93XCIsIFwicmV0dXJuXCIsIFwib3V0cHV0XCJdLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgdGl0bGU6IFwiUmV0dXJuXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJOb3JtYWxpc2VzIHRoZSBpbnB1dCBpbnRvIHRoZSBmaW5hbCB3b3JrZmxvdyBvdXRwdXQgb2JqZWN0LlwiLFxuICAgICAgICAgICAgb3V0cHV0U2NoZW1hOiB7fSxcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBSZXR1cm5GbG93Tm9kZSk7XG5leHBvcnQgeyBSZXR1cm5GbG93Tm9kZSB9O1xuLyoqXG4gKiBDb2RlIOKAlCBzYW5kYm94ZWQgSlMvVFMgY29kZSBleGVjdXRpb24gKEFMRlJFRC01IMKnNykuXG4gKlxuICogVGhlIGVuZ2luZSBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHNhbmRib3ggZGlyZWN0bHkgKMKnMjIuNCkuIEEgZnV0dXJlXG4gKiBleGVjdXRvciBtYXkgd3JhcCB0aGUgYENvZGVTYW5kYm94YCBjb250cmFjdCAoQUxGUkVELTUgwqc3LjE3KSBhcyBhXG4gKiBwbHVnZ2FibGUgZXhlY3V0b3IuIFRoZSBwbGFjZWhvbGRlciBzeW50YXggKGB7eyAkaW5wdXQgfX1gLCBge3sgJGl0ZW0gfX1gLFxuICogYHt7ICRpbmRleCB9fWAsIGB7eyAkdmFycyB9fWAsIGB7eyAkbm9kZVtcIk5hbWVcIl0ub3V0cHV0IH19YCkgaXMgTWFzdHJhLVxuICogYWdub3N0aWMgYW5kIGxpdmVzIGluIHRoZSBkb3duc3RyZWFtIHByb2plY3QncyBgbW9kdWxlcy9jb3JlYCAoQUxGUkVELTYpLlxuICovXG5sZXQgQ29kZUZsb3dOb2RlID0gY2xhc3MgQ29kZUZsb3dOb2RlIGV4dGVuZHMgTW9kZWwge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwidGV4dGFyZWFcIiwgeyBsYWJlbDogXCJJbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJJbnB1dCBvYmplY3QgKGFjY2Vzc2libGUgYXMgJGlucHV0KVwiIH0pLFxuICAgIGlucHV0KHsgaGFuZGxlOiBcImlucHV0XCIgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIENvZGVGbG93Tm9kZS5wcm90b3R5cGUsIFwiaW5wdXRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIHJlcXVpcmVkKCksXG4gICAgdWllbGVtZW50KFwiaW5wdXRcIiwgeyBsYWJlbDogXCJSZXN1bHRcIiwgcGxhY2Vob2xkZXI6IFwiQ29kZSBleGVjdXRpb24gcmVzdWx0XCIgfSksXG4gICAgb3V0cHV0KHsgaGFuZGxlOiBcInJlc3VsdFwiIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBDb2RlRmxvd05vZGUucHJvdG90eXBlLCBcInJlc3VsdFwiLCB2b2lkIDApO1xuQ29kZUZsb3dOb2RlID0gX19kZWNvcmF0ZShbXG4gICAgbm9kZShcImNvcmUuZmxvdy5jb2RlXCIsIHtcbiAgICAgICAga2luZDogXCJjb3JlLmZsb3cuY29kZVwiLFxuICAgICAgICBjYXRlZ29yeTogXCJVdGlsaXR5XCIsXG4gICAgICAgIGNvbG9yOiBcIiM3YzNhZWRcIixcbiAgICAgICAgaWNvbjogXCJ0aS1jb2RlXCIsXG4gICAgICAgIHdpZHRoOiA5NixcbiAgICAgICAgaGVpZ2h0OiA5NixcbiAgICAgICAgbGFiZWxzOiBbXCJmbG93XCIsIFwiY29kZVwiLCBcInNhbmRib3hcIiwgXCJ0cmFuc2Zvcm1cIl0sXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICB0aXRsZTogXCJDb2RlXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJSdW5zIHVzZXItYXV0aG9yZWQgSlMvVFMgaW4gYSByZXN0cmljdGVkIFZNIHNhbmRib3guIFN1cHBvcnRzIHBsYWNlaG9sZGVyIHN5bnRheCBmb3Igd29ya2Zsb3cgZGF0YSByZWZlcmVuY2VzLlwiLFxuICAgICAgICAgICAgY29kZTogXCJcIixcbiAgICAgICAgICAgIGxhbmd1YWdlOiBcImphdmFzY3JpcHRcIixcbiAgICAgICAgfSxcbiAgICB9KSxcbiAgICBtb2RlbCgpXG5dLCBDb2RlRmxvd05vZGUpO1xuZXhwb3J0IHsgQ29kZUZsb3dOb2RlIH07XG4vKipcbiAqIEFsbCBidWlsdC1pbiBmbG93LWNvbnRyb2wgbm9kZSBjb25zdHJ1Y3RvcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBHUkFQSF9GTE9XX0NPTlRST0xfTk9ERVMgPSBbXG4gICAgSWZGbG93Tm9kZSxcbiAgICBTd2l0Y2hGbG93Tm9kZSxcbiAgICBQYXJhbGxlbEZsb3dOb2RlLFxuICAgIE1lcmdlRmxvd05vZGUsXG4gICAgTWFwRmxvd05vZGUsXG4gICAgRGVsYXlGbG93Tm9kZSxcbiAgICBFcnJvckJvdW5kYXJ5Rmxvd05vZGUsXG4gICAgSHVtYW5BcHByb3ZhbEZsb3dOb2RlLFxuICAgIFJldHVybkZsb3dOb2RlLFxuICAgIENvZGVGbG93Tm9kZSxcbl07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2labXh2ZHkxamIyNTBjbTlzTG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dkxpNHZMaTR2YzNKakwyZHlZWEJvTDI1dlpHVnpMMlpzYjNjdFkyOXVkSEp2YkM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN1FVRkJRVHM3T3pzN096czdPenM3UjBGWFJ6dEJRVU5JTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRkxGRkJRVkVzUlVGQlJTeE5RVUZOTEdkRFFVRm5ReXhEUVVGRE8wRkJRM2hGTEU5QlFVOHNSVUZCUlN4VFFVRlRMRVZCUVVVc1RVRkJUU3g1UWtGQmVVSXNRMEZCUXp0QlFVTndSQ3hQUVVGUExFVkJRMHdzYVVKQlFXbENMRVZCUTJwQ0xFdEJRVXNzUlVGRFRDeEpRVUZKTEVWQlEwb3NUVUZCVFN4RlFVTk9MR0ZCUVdFc1IwRkZaQ3hOUVVGTkxDdENRVUVyUWl4RFFVRkRPMEZCUlhaRExFOUJRVThzUlVGQlJTeFRRVUZUTEVWQlFVVXNhMEpCUVdVN1FVRkZia003T3p0SFFVZEhPMEZCWjBKSkxFbEJRVTBzVlVGQlZTeEhRVUZvUWl4TlFVRk5MRlZCUVZjc1UwRkJVU3hMUVVGTE8wTkJaWEJETEVOQlFVRTdRVUZZUXp0SlFVaERMRkZCUVZFc1JVRkJSVHRKUVVOV0xGTkJRVk1zUTBGQlF5eFZRVUZWTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1lVRkJZU3hGUVVGRkxGZEJRVmNzUlVGQlJTeHRRa0ZCYlVJc1JVRkJSU3hEUVVGRE8wbEJRMnBHTEV0QlFVc3NRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzUTBGQlF6czdlVU5CUTFnN1FVRkxhRUk3U1VGSVF5eFJRVUZSTEVWQlFVVTdTVUZEVml4VFFVRlRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEUxQlFVMHNSVUZCUlN4WFFVRlhMRVZCUVVVc0swSkJRU3RDTEVWQlFVVXNRMEZCUXp0SlFVTnVSaXhOUVVGTkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNN08zZERRVU5hTzBGQlMyWTdTVUZJUXl4UlFVRlJMRVZCUVVVN1NVRkRWaXhUUVVGVExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZMRTFCUVUwc1JVRkJSU3hYUVVGWExFVkJRVVVzWjBOQlFXZERMRVZCUVVVc1EwRkJRenRKUVVOd1JpeE5RVUZOTEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFTkJRVU03TzNkRFFVTmFPMEZCWkVvc1ZVRkJWVHRKUVdaMFFpeEpRVUZKTEVOQlFVTXNZMEZCWXl4RlFVRkZPMUZCUTNCQ0xFbEJRVWtzUlVGQlJTeGpRVUZqTzFGQlEzQkNMRkZCUVZFc1JVRkJSU3hqUVVGak8xRkJRM2hDTEV0QlFVc3NSVUZCUlN4VFFVRlRPMUZCUTJoQ0xFbEJRVWtzUlVGQlJTeHRRa0ZCYlVJN1VVRkRla0lzUzBGQlN5eEZRVUZGTEVWQlFVVTdVVUZEVkN4TlFVRk5MRVZCUVVVc1JVRkJSVHRSUVVOV0xFMUJRVTBzUlVGQlJTeERRVUZETEUxQlFVMHNSVUZCUlN4aFFVRmhMRVZCUVVVc1VVRkJVU3hEUVVGRE8xRkJRM3BETEZGQlFWRXNSVUZCUlR0WlFVTlNMRXRCUVVzc1JVRkJSU3hKUVVGSk8xbEJRMWdzVjBGQlZ5eEZRVUZGTEhGSFFVRnhSenRaUVVOc1NDeFRRVUZUTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4SlFVRkpMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNTVUZCU1N4RlFVRkZMRVZCUVVVN1UwRkRka1U3UzBGRFJpeERRVUZETzBsQlEwUXNTMEZCU3l4RlFVRkZPMGRCUTBzc1ZVRkJWU3hEUVdWMFFqczdRVUZGUkRzN096czdPenM3TzBkQlUwYzdRVUZ0UWtrc1NVRkJUU3hqUVVGakxFZEJRWEJDTEUxQlFVMHNZMEZCWlN4VFFVRlJMRk5CUVZNN1NVRlhNME03T3pzN1QwRkpSenRKUVVOSUxFMUJRVTBzUTBGQlZTeGhRVUZoTEVOQlFVTXNTVUZCZDBJN1VVRkRjRVFzVFVGQlRTeFZRVUZWTEVkQlFVY3NhVUpCUVdsQ0xFTkJRVU1zU1VGQllTeERRVUZETEVOQlFVTTdVVUZEY0VRc1RVRkJUU3hUUVVGVExFZEJRVWNzVlVGQlZTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUTNaRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeExRVUZMTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkROVVFzUTBGQlF6dFJRVU5HTEUxQlFVMHNVMEZCVXl4SFFVRXdRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFpRVU01UkN4UlFVRlJMRVZCUVVVc1EwRkJReXhEUVVGRExGVkJRVlU3V1VGRGRFSXNTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJReXhMUVVGTE8xbEJRMklzVTBGQlV5eEZRVUZGTEdGQlFXRXNRMEZCUXl4TlFVRk5PMWxCUXk5Q0xFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNTMEZCU3p0WlFVTmtMRkZCUVZFc1JVRkJSU3hMUVVGTE8xbEJRMllzVFVGQlRTeEZRVUZGTEV0QlFVczdXVUZEWWl4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRExGVkJRVlU3VTBGRGJrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTaXhOUVVGTkxGTkJRVk1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRSUVVOd1F5eFBRVUZQTzFsQlEwd3NTMEZCU3l4RlFVRkZMRU5CUVVNc1IwRkJSeXhUUVVGVExFVkJRVVVzUjBGQlJ5eFRRVUZUTEVOQlFVTTdXVUZEYmtNc1NVRkJTU3hGUVVGRk8yZENRVU5LTEV0QlFVc3NSVUZCUlN4VlFVRlZMRU5CUVVNc1MwRkJTeXhKUVVGSkxFZEJRVWM3WjBKQlF6bENMRTFCUVUwc1JVRkJSU3hUUVVGVExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWRCUVVjc1UwRkJVeXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRMRTFCUVUwc1NVRkJTU3hIUVVGSE8yRkJRM2hGTzFsQlEwUXNVMEZCVXl4RlFVRkZMRVZCUVVVc1kwRkJZeXhGUVVGRkxFbEJRVWtzUlVGQlJUdFRRVU53UXl4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOR0xFTkJRVUU3UVVGd1EwTTdTVUZJUXl4UlFVRlJMRVZCUVVVN1NVRkRWaXhUUVVGVExFTkJRVU1zVlVGQlZTeEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZMR0ZCUVdFc1JVRkJSU3hYUVVGWExFVkJRVVVzYjBKQlFXOUNMRVZCUVVVc1EwRkJRenRKUVVOc1JpeExRVUZMTEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1QwRkJUeXhGUVVGRkxFTkJRVU03T3paRFFVTllPMEZCUzJoQ08wbEJTRU1zVVVGQlVTeEZRVUZGTzBsQlExWXNVMEZCVXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFRRVUZUTEVWQlFVVXNWMEZCVnl4RlFVRkZMSEZEUVVGeFF5eEZRVUZGTEVOQlFVTTdTVUZETlVZc1RVRkJUU3hEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4RFFVRkRPenNyUTBGRFdqdEJRVlJRTEdOQlFXTTdTVUZzUWpGQ0xFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1JVRkJSVHRSUVVONFFpeEpRVUZKTEVWQlFVVXNhMEpCUVd0Q08xRkJRM2hDTEZGQlFWRXNSVUZCUlN4alFVRmpPMUZCUTNoQ0xFdEJRVXNzUlVGQlJTeFRRVUZUTzFGQlEyaENMRWxCUVVrc1JVRkJSU3h0UWtGQmJVSTdVVUZEZWtJc1MwRkJTeXhGUVVGRkxFZEJRVWM3VVVGRFZpeE5RVUZOTEVWQlFVVXNSMEZCUnp0UlFVTllMRTFCUVUwc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeFJRVUZSTEVWQlFVVXNZMEZCWXl4RFFVRkRPMUZCUXpGRExGRkJRVkVzUlVGQlJUdFpRVU5TTEV0QlFVc3NSVUZCUlN4UlFVRlJPMWxCUTJZc1YwRkJWeXhGUVVGRkxHbEhRVUZwUnp0WlFVTTVSeXhOUVVGTkxFVkJRVVU3WjBKQlEwNHNTMEZCU3l4RlFVRkZMRVZCUVVVN1owSkJRMVFzVjBGQlZ5eEZRVUZGTEZOQlFWTTdZVUZEZGtJN1UwRkRSanRMUVVOR0xFTkJRVU03U1VGRFJDeExRVUZMTEVWQlFVVTdSMEZEU3l4alFVRmpMRU5CZDBNeFFqczdRVUZGUkRzN1IwRkZSenRCUVdkQ1NTeEpRVUZOTEdkQ1FVRm5RaXhIUVVGMFFpeE5RVUZOTEdkQ1FVRnBRaXhUUVVGUkxFdEJRVXM3UTBGVk1VTXNRMEZCUVR0QlFVNURPMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEZWQlFWVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hoUVVGaExFVkJRVVVzVjBGQlZ5eEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxFTkJRVU03U1VGRGFFWXNTMEZCU3l4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZET3pzclEwRkRXRHRCUVV0b1FqdEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNWVUZCVlN4RlFVRkZMRmRCUVZjc1JVRkJSU3d3UWtGQk1FSXNSVUZCUlN4RFFVRkRPMGxCUTJ4R0xFMUJRVTBzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4VlFVRlZMRVZCUVVVc1EwRkJRenM3YTBSQlExWTdRVUZVVml4blFrRkJaMEk3U1VGbU5VSXNTVUZCU1N4RFFVRkRMRzlDUVVGdlFpeEZRVUZGTzFGQlF6RkNMRWxCUVVrc1JVRkJSU3h2UWtGQmIwSTdVVUZETVVJc1VVRkJVU3hGUVVGRkxHTkJRV003VVVGRGVFSXNTMEZCU3l4RlFVRkZMRk5CUVZNN1VVRkRhRUlzU1VGQlNTeEZRVUZGTEc5Q1FVRnZRanRSUVVNeFFpeExRVUZMTEVWQlFVVXNSVUZCUlR0UlFVTlVMRTFCUVUwc1JVRkJSU3hGUVVGRk8xRkJRMVlzVFVGQlRTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRlZCUVZVc1JVRkJSU3haUVVGWkxFTkJRVU03VVVGRE1VTXNVVUZCVVN4RlFVRkZPMWxCUTFJc1MwRkJTeXhGUVVGRkxGVkJRVlU3V1VGRGFrSXNWMEZCVnl4RlFVRkZMRzlIUVVGdlJ6dFpRVU5xU0N4WFFVRlhMRVZCUVVVc1EwRkJRenRUUVVObU8wdEJRMFlzUTBGQlF6dEpRVU5FTEV0QlFVc3NSVUZCUlR0SFFVTkxMR2RDUVVGblFpeERRVlUxUWpzN1FVRkZSRHM3UjBGRlJ6dEJRV2RDU1N4SlFVRk5MR0ZCUVdFc1IwRkJia0lzVFVGQlRTeGhRVUZqTEZOQlFWRXNTMEZCU3p0RFFWVjJReXhEUVVGQk8wRkJUa003U1VGSVF5eFJRVUZSTEVWQlFVVTdTVUZEVml4VFFVRlRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxGZEJRVmNzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3hEUVVGRE8wbEJRMjVHTEV0QlFVc3NRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hSUVVGUkxFVkJRVVVzUTBGQlF6czdOa05CUTFRN1FVRkxia0k3U1VGSVF5eFJRVUZSTEVWQlFVVTdTVUZEVml4VFFVRlRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEdWQlFXVXNSVUZCUlN4WFFVRlhMRVZCUVVVc1pVRkJaU3hGUVVGRkxFTkJRVU03U1VGRE5VVXNUVUZCVFN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxGRkJRVkVzUlVGQlJTeERRVUZET3pzMlEwRkRXanRCUVZST0xHRkJRV0U3U1VGbWVrSXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTzFGQlEzWkNMRWxCUVVrc1JVRkJSU3hwUWtGQmFVSTdVVUZEZGtJc1VVRkJVU3hGUVVGRkxGTkJRVk03VVVGRGJrSXNTMEZCU3l4RlFVRkZMRk5CUVZNN1VVRkRhRUlzU1VGQlNTeEZRVUZGTEdsQ1FVRnBRanRSUVVOMlFpeExRVUZMTEVWQlFVVXNSVUZCUlR0UlFVTlVMRTFCUVUwc1JVRkJSU3hGUVVGRk8xRkJRMVlzVFVGQlRTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hOUVVGTkxFTkJRVU03VVVGRGFrTXNVVUZCVVN4RlFVRkZPMWxCUTFJc1MwRkJTeXhGUVVGRkxFOUJRVTg3V1VGRFpDeFhRVUZYTEVWQlFVVXNkMFZCUVhkRk8xbEJRM0pHTEZGQlFWRXNSVUZCUlN4UlFVRlJPMU5CUTI1Q08wdEJRMFlzUTBGQlF6dEpRVU5FTEV0QlFVc3NSVUZCUlR0SFFVTkxMR0ZCUVdFc1EwRlZla0k3TzBGQlJVUTdPMGRCUlVjN1FVRm5Ra2tzU1VGQlRTeFhRVUZYTEVkQlFXcENMRTFCUVUwc1YwRkJXU3hUUVVGUkxFdEJRVXM3UTBGVmNrTXNRMEZCUVR0QlFVNURPMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEZWQlFWVXNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hoUVVGaExFVkJRVVVzVjBGQlZ5eEZRVUZGTEc5Q1FVRnZRaXhGUVVGRkxFTkJRVU03U1VGRGJFWXNTMEZCU3l4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZET3pzd1EwRkRXRHRCUVV0b1FqdEpRVWhETEZGQlFWRXNSVUZCUlR0SlFVTldMRk5CUVZNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNiMEpCUVc5Q0xFVkJRVVVzVjBGQlZ5eEZRVUZGTEdWQlFXVXNSVUZCUlN4RFFVRkRPMGxCUTJwR0xFMUJRVTBzUTBGQlF5eEZRVUZGTEUxQlFVMHNSVUZCUlN4UlFVRlJMRVZCUVVVc1EwRkJRenM3TWtOQlExbzdRVUZVVGl4WFFVRlhPMGxCWm5aQ0xFbEJRVWtzUTBGQlF5eGxRVUZsTEVWQlFVVTdVVUZEY2tJc1NVRkJTU3hGUVVGRkxHVkJRV1U3VVVGRGNrSXNVVUZCVVN4RlFVRkZMRk5CUVZNN1VVRkRia0lzUzBGQlN5eEZRVUZGTEZOQlFWTTdVVUZEYUVJc1NVRkJTU3hGUVVGRkxITkNRVUZ6UWp0UlFVTTFRaXhMUVVGTExFVkJRVVVzUlVGQlJUdFJRVU5VTEUxQlFVMHNSVUZCUlN4RlFVRkZPMUZCUTFZc1RVRkJUU3hGUVVGRkxFTkJRVU1zVFVGQlRTeEZRVUZGTEV0QlFVc3NSVUZCUlN4WFFVRlhMRU5CUVVNN1VVRkRjRU1zVVVGQlVTeEZRVUZGTzFsQlExSXNTMEZCU3l4RlFVRkZMRXRCUVVzN1dVRkRXaXhYUVVGWExFVkJRVVVzYjBaQlFXOUdPMWxCUTJwSExFMUJRVTBzUlVGQlJTeEZRVUZGTzFOQlExZzdTMEZEUml4RFFVRkRPMGxCUTBRc1MwRkJTeXhGUVVGRk8wZEJRMHNzVjBGQlZ5eERRVlYyUWpzN1FVRkZSRHM3UjBGRlJ6dEJRV2RDU1N4SlFVRk5MR0ZCUVdFc1IwRkJia0lzVFVGQlRTeGhRVUZqTEZOQlFWRXNTMEZCU3p0RFFWVjJReXhEUVVGQk8wRkJUa003U1VGSVF5eFJRVUZSTEVWQlFVVTdTVUZEVml4VFFVRlRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEdGQlFXRXNSVUZCUlN4WFFVRlhMRVZCUVVVc09FSkJRVGhDTEVWQlFVVXNRMEZCUXp0SlFVTTFSaXhMUVVGTExFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNUMEZCVHl4RlFVRkZMRU5CUVVNN096UkRRVU5ZTzBGQlMyaENPMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hqUVVGakxFVkJRVVVzVjBGQlZ5eEZRVUZGTEdsQ1FVRnBRaXhGUVVGRkxFTkJRVU03U1VGRE4wVXNUVUZCVFN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZET3pzclEwRkRWRHRCUVZSU0xHRkJRV0U3U1VGbWVrSXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTzFGQlEzWkNMRWxCUVVrc1JVRkJSU3hwUWtGQmFVSTdVVUZEZGtJc1VVRkJVU3hGUVVGRkxGTkJRVk03VVVGRGJrSXNTMEZCU3l4RlFVRkZMRk5CUVZNN1VVRkRhRUlzU1VGQlNTeEZRVUZGTEdsQ1FVRnBRanRSUVVOMlFpeExRVUZMTEVWQlFVVXNSVUZCUlR0UlFVTlVMRTFCUVUwc1JVRkJSU3hGUVVGRk8xRkJRMVlzVFVGQlRTeEZRVUZGTEVOQlFVTXNUVUZCVFN4RlFVRkZMRTlCUVU4c1JVRkJSU3hOUVVGTkxFTkJRVU03VVVGRGFrTXNVVUZCVVN4RlFVRkZPMWxCUTFJc1MwRkJTeXhGUVVGRkxFOUJRVTg3V1VGRFpDeFhRVUZYTEVWQlFVVXNiMGRCUVc5SE8xbEJRMnBJTEZWQlFWVXNSVUZCUlN4SlFVRkpPMU5CUTJwQ08wdEJRMFlzUTBGQlF6dEpRVU5FTEV0QlFVc3NSVUZCUlR0SFFVTkxMR0ZCUVdFc1EwRlZla0k3TzBGQlJVUTdPMGRCUlVjN1FVRm5Ra2tzU1VGQlRTeHhRa0ZCY1VJc1IwRkJNMElzVFVGQlRTeHhRa0ZCYzBJc1UwRkJVU3hMUVVGTE8wTkJaUzlETEVOQlFVRTdRVUZZUXp0SlFVaERMRkZCUVZFc1JVRkJSVHRKUVVOV0xGTkJRVk1zUTBGQlF5eFZRVUZWTEVWQlFVVXNSVUZCUlN4TFFVRkxMRVZCUVVVc1lVRkJZU3hGUVVGRkxGZEJRVmNzUlVGQlJTeG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRE8wbEJRemxGTEV0QlFVc3NRMEZCUXl4RlFVRkZMRTFCUVUwc1JVRkJSU3hQUVVGUExFVkJRVVVzUTBGQlF6czdiMFJCUTFnN1FVRkxhRUk3U1VGSVF5eFJRVUZSTEVWQlFVVTdTVUZEVml4VFFVRlRMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEZGQlFWRXNSVUZCUlN4WFFVRlhMRVZCUVVVc2JVSkJRVzFDTEVWQlFVVXNRMEZCUXp0SlFVTjZSU3hOUVVGTkxFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMRU5CUVVNN08zRkVRVU5hTzBGQlMycENPMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hQUVVGUExFVkJRVVVzVjBGQlZ5eEZRVUZGTEcxQ1FVRnRRaXhGUVVGRkxFTkJRVU03U1VGRGVFVXNUVUZCVFN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeERRVUZET3p0dlJFRkRXanRCUVdSTUxIRkNRVUZ4UWp0SlFXWnFReXhKUVVGSkxFTkJRVU1zZVVKQlFYbENMRVZCUVVVN1VVRkRMMElzU1VGQlNTeEZRVUZGTEhsQ1FVRjVRanRSUVVNdlFpeFJRVUZSTEVWQlFVVXNZMEZCWXp0UlFVTjRRaXhMUVVGTExFVkJRVVVzVTBGQlV6dFJRVU5vUWl4SlFVRkpMRVZCUVVVc2FVSkJRV2xDTzFGQlEzWkNMRXRCUVVzc1JVRkJSU3hGUVVGRk8xRkJRMVFzVFVGQlRTeEZRVUZGTEVWQlFVVTdVVUZEVml4TlFVRk5MRVZCUVVVc1EwRkJReXhOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEZkQlFWY3NRMEZCUXp0UlFVTjBReXhSUVVGUkxFVkJRVVU3V1VGRFVpeExRVUZMTEVWQlFVVXNaMEpCUVdkQ08xbEJRM1pDTEZkQlFWY3NSVUZCUlN3clJrRkJLMFk3V1VGRE5VY3NUMEZCVHl4RlFVRkZMRXRCUVVzN1UwRkRaanRMUVVOR0xFTkJRVU03U1VGRFJDeExRVUZMTEVWQlFVVTdSMEZEU3l4eFFrRkJjVUlzUTBGbGFrTTdPMEZCUlVRN08wZEJSVWM3UVVGcFFra3NTVUZCVFN4eFFrRkJjVUlzUjBGQk0wSXNUVUZCVFN4eFFrRkJjMElzVTBGQlVTeExRVUZMTzBOQlpTOURMRU5CUVVFN1FVRllRenRKUVVoRExGRkJRVkVzUlVGQlJUdEpRVU5XTEZOQlFWTXNRMEZCUXl4VlFVRlZMRVZCUVVVc1JVRkJSU3hMUVVGTExFVkJRVVVzWVVGQllTeEZRVUZGTEZkQlFWY3NSVUZCUlN4M1FrRkJkMElzUlVGQlJTeERRVUZETzBsQlEzUkdMRXRCUVVzc1EwRkJReXhGUVVGRkxFMUJRVTBzUlVGQlJTeFBRVUZQTEVWQlFVVXNRMEZCUXpzN2IwUkJRMWc3UVVGTGFFSTdTVUZJUXl4UlFVRlJMRVZCUVVVN1NVRkRWaXhUUVVGVExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVXNTMEZCU3l4RlFVRkZMRlZCUVZVc1JVRkJSU3hYUVVGWExFVkJRVVVzYzBKQlFYTkNMRVZCUVVVc1EwRkJRenRKUVVNNVJTeE5RVUZOTEVOQlFVTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1ZVRkJWU3hGUVVGRkxFTkJRVU03TzNWRVFVTmFPMEZCUzI1Q08wbEJTRU1zVVVGQlVTeEZRVUZGTzBsQlExWXNVMEZCVXl4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFZRVUZWTEVWQlFVVXNWMEZCVnl4RlFVRkZMSE5DUVVGelFpeEZRVUZGTEVOQlFVTTdTVUZET1VVc1RVRkJUU3hEUVVGRExFVkJRVVVzVFVGQlRTeEZRVUZGTEZWQlFWVXNSVUZCUlN4RFFVRkRPenQxUkVGRFdqdEJRV1JTTEhGQ1FVRnhRanRKUVdoQ2FrTXNTVUZCU1N4RFFVRkRMSGxDUVVGNVFpeEZRVUZGTzFGQlF5OUNMRWxCUVVrc1JVRkJSU3g1UWtGQmVVSTdVVUZETDBJc1VVRkJVU3hGUVVGRkxHTkJRV003VVVGRGVFSXNTMEZCU3l4RlFVRkZMRk5CUVZNN1VVRkRhRUlzU1VGQlNTeEZRVUZGTEdWQlFXVTdVVUZEY2tJc1MwRkJTeXhGUVVGRkxFVkJRVVU3VVVGRFZDeE5RVUZOTEVWQlFVVXNSVUZCUlR0UlFVTldMRTFCUVUwc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeFZRVUZWTEVWQlFVVXNVMEZCVXl4RFFVRkRPMUZCUTNaRExGRkJRVkVzUlVGQlJUdFpRVU5TTEV0QlFVc3NSVUZCUlN4blFrRkJaMEk3V1VGRGRrSXNWMEZCVnl4RlFVRkZMR2RIUVVGblJ6dFpRVU0zUnl4VFFVRlRMRVZCUVVVc1JVRkJSVHRaUVVOaUxGTkJRVk1zUlVGQlJTeFJRVUZSTzFOQlEzQkNPMHRCUTBZc1EwRkJRenRKUVVORUxFdEJRVXNzUlVGQlJUdEhRVU5MTEhGQ1FVRnhRaXhEUVdWcVF6czdRVUZGUkRzN1IwRkZSenRCUVdkQ1NTeEpRVUZOTEdOQlFXTXNSMEZCY0VJc1RVRkJUU3hqUVVGbExGTkJRVkVzUzBGQlN6dERRVlY0UXl4RFFVRkJPMEZCVGtNN1NVRklReXhSUVVGUkxFVkJRVVU3U1VGRFZpeFRRVUZUTEVOQlFVTXNWVUZCVlN4RlFVRkZMRVZCUVVVc1MwRkJTeXhGUVVGRkxHRkJRV0VzUlVGQlJTeFhRVUZYTEVWQlFVVXNiMEpCUVc5Q0xFVkJRVVVzUTBGQlF6dEpRVU5zUml4TFFVRkxMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTTdPelpEUVVOWU8wRkJTMmhDTzBsQlNFTXNVVUZCVVN4RlFVRkZPMGxCUTFZc1UwRkJVeXhEUVVGRExFOUJRVThzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4cFFrRkJhVUlzUlVGQlJTeFhRVUZYTEVWQlFVVXNiVUpCUVcxQ0xFVkJRVVVzUTBGQlF6dEpRVU5zUml4TlFVRk5MRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEVOQlFVTTdPemhEUVVOYU8wRkJWRTRzWTBGQll6dEpRV1l4UWl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVTdVVUZEZUVJc1NVRkJTU3hGUVVGRkxHdENRVUZyUWp0UlFVTjRRaXhSUVVGUkxFVkJRVVVzVTBGQlV6dFJRVU51UWl4TFFVRkxMRVZCUVVVc1UwRkJVenRSUVVOb1FpeEpRVUZKTEVWQlFVVXNhMEpCUVd0Q08xRkJRM2hDTEV0QlFVc3NSVUZCUlN4RlFVRkZPMUZCUTFRc1RVRkJUU3hGUVVGRkxFVkJRVVU3VVVGRFZpeE5RVUZOTEVWQlFVVXNRMEZCUXl4TlFVRk5MRVZCUVVVc1VVRkJVU3hGUVVGRkxGRkJRVkVzUTBGQlF6dFJRVU53UXl4UlFVRlJMRVZCUVVVN1dVRkRVaXhMUVVGTExFVkJRVVVzVVVGQlVUdFpRVU5tTEZkQlFWY3NSVUZCUlN3MlJFRkJOa1E3V1VGRE1VVXNXVUZCV1N4RlFVRkZMRVZCUVVVN1UwRkRha0k3UzBGRFJpeERRVUZETzBsQlEwUXNTMEZCU3l4RlFVRkZPMGRCUTBzc1kwRkJZeXhEUVZVeFFqczdRVUZGUkRzN096czdPenM3UjBGUlJ6dEJRV2xDU1N4SlFVRk5MRmxCUVZrc1IwRkJiRUlzVFVGQlRTeFpRVUZoTEZOQlFWRXNTMEZCU3p0RFFWVjBReXhEUVVGQk8wRkJUa003U1VGSVF5eFJRVUZSTEVWQlFVVTdTVUZEVml4VFFVRlRMRU5CUVVNc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEU5QlFVOHNSVUZCUlN4WFFVRlhMRVZCUVVVc2NVTkJRWEZETEVWQlFVVXNRMEZCUXp0SlFVTTNSaXhMUVVGTExFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNUMEZCVHl4RlFVRkZMRU5CUVVNN096SkRRVU5ZTzBGQlMyaENPMGxCU0VNc1VVRkJVU3hGUVVGRk8wbEJRMVlzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRXRCUVVzc1JVRkJSU3hSUVVGUkxFVkJRVVVzVjBGQlZ5eEZRVUZGTEhWQ1FVRjFRaXhGUVVGRkxFTkJRVU03U1VGRE4wVXNUVUZCVFN4RFFVRkRMRVZCUVVVc1RVRkJUU3hGUVVGRkxGRkJRVkVzUlVGQlJTeERRVUZET3pzMFEwRkRXanRCUVZST0xGbEJRVms3U1VGb1FuaENMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNSVUZCUlR0UlFVTjBRaXhKUVVGSkxFVkJRVVVzWjBKQlFXZENPMUZCUTNSQ0xGRkJRVkVzUlVGQlJTeFRRVUZUTzFGQlEyNUNMRXRCUVVzc1JVRkJSU3hUUVVGVE8xRkJRMmhDTEVsQlFVa3NSVUZCUlN4VFFVRlRPMUZCUTJZc1MwRkJTeXhGUVVGRkxFVkJRVVU3VVVGRFZDeE5RVUZOTEVWQlFVVXNSVUZCUlR0UlFVTldMRTFCUVUwc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeE5RVUZOTEVWQlFVVXNVMEZCVXl4RlFVRkZMRmRCUVZjc1EwRkJRenRSUVVOb1JDeFJRVUZSTEVWQlFVVTdXVUZEVWl4TFFVRkxMRVZCUVVVc1RVRkJUVHRaUVVOaUxGZEJRVmNzUlVGQlJTeG5TRUZCWjBnN1dVRkROMGdzU1VGQlNTeEZRVUZGTEVWQlFVVTdXVUZEVWl4UlFVRlJMRVZCUVVVc1dVRkJXVHRUUVVOMlFqdExRVU5HTEVOQlFVTTdTVUZEUkN4TFFVRkxMRVZCUVVVN1IwRkRTeXhaUVVGWkxFTkJWWGhDT3p0QlFVVkVPenRIUVVWSE8wRkJRMGdzVFVGQlRTeERRVUZETEUxQlFVMHNkMEpCUVhkQ0xFZEJRVWM3U1VGRGRFTXNWVUZCVlR0SlFVTldMR05CUVdNN1NVRkRaQ3huUWtGQlowSTdTVUZEYUVJc1lVRkJZVHRKUVVOaUxGZEJRVmM3U1VGRFdDeGhRVUZoTzBsQlEySXNjVUpCUVhGQ08wbEJRM0pDTEhGQ1FVRnhRanRKUVVOeVFpeGpRVUZqTzBsQlEyUXNXVUZCV1R0RFFVTktMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SXZLaXBjYmlBcUlFQnRiMlIxYkdVZ2FXNTBaV2R5WVhScGIyNXpMMmR5WVhCb0wyNXZaR1Z6TDJac2IzY3RZMjl1ZEhKdmJGeHVJQ29nUUhOMWJXMWhjbmtnVUhKdlpIVmpkR2x2YmlCbWJHOTNMV052Ym5SeWIyd2dibTlrWlNCcmFXNWtJR1JsWTJ4aGNtRjBhVzl1Y3lBb1JFVkRRVVl0TXpJZ3dxY3lNaTR5TGpJcExseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTmhibTl1YVdOaGJDQmdRRzV2WkdWZ0xXUmxZMjl5WVhSbFpDQmpiR0Z6YzJWeklHWnZjaUIwYUdVZ2RHVnVJRUZNUmxKRlJDMDFYRzRnS2lCbWJHOTNMV052Ym5SeWIyd2dhMmx1WkhNdUlGUm9aWE5sSUdGeVpTQm5jbUZ3YUMxc1pYWmxiQ0J0WVdOeWIzTTZJSFJvWlNCbGJtZHBibVVuY3lCd2JHRnVibVZ5WEc0Z0tpQnlaV052WjI1cGMyVnpJSFJvWlcwZ1lYTWdiM0prYVc1aGNua2daWGhsWTNWMFlXSnNaU0J1YjJSbGN5QW93cWMxTGpjcElHSjFkQ0IwYUdWNUlHaGhkbVVnYm05Y2JpQXFJR0oxYVd4MExXbHVJR1Y0WldOMWRHOXljeURpZ0pRZ1pHOTNibk4wY21WaGJTQndjbTlxWldOMGN5QW9aUzVuTGlCQlRFWlNSVVFwSUhKbFoybHpkR1Z5SUdOMWMzUnZiVnh1SUNvZ1pYaGxZM1YwYjNKeklHOXlJR052YlhCcGJHVWdkR2hsYlNCcGJuUnZJRTFoYzNSeVlTQmpiMjF3YjNOcGRHbHZiaUJCVUVseklDakNwekl5TGpJdU1pa3VYRzRnS2x4dUlDb2dWR2hsSUhSb2NtVmxJR3h2YjNBZ2EybHVaSE1nS0dCamIzSmxMbXh2YjNBdVptOXlaV0ZqYUM5M2FHbHNaUzkxYm5ScGJHQXBJR0ZzY21WaFpIa2dhR0YyWlNCaWRXbHNkQzFwYmx4dUlDb2daWGhsWTNWMGIzSnpJQ2pDcHpVdU9Ta2dZVzVrSUdGeVpTQk9UMVFnY21Wa1pXTnNZWEpsWkNCb1pYSmxMbHh1SUNvdlhHNXBiWEJ2Y25RZ2V5Qk5iMlJsYkN3Z2JXOWtaV3dzSUhKbGNYVnBjbVZrSUgwZ1puSnZiU0JjSWtCa1pXTmhaaTEwY3k5a1pXTnZjbUYwYjNJdGRtRnNhV1JoZEdsdmJsd2lPMXh1YVcxd2IzSjBJSHNnZFdsbGJHVnRaVzUwSUgwZ1puSnZiU0JjSWtCa1pXTmhaaTEwY3k5MWFTMWtaV052Y21GMGIzSnpYQ0k3WEc1cGJYQnZjblFnZTF4dUlDQm5jbUZ3YUVSbFptbHVhWFJwYjI1UFppeGNiaUFnYVc1d2RYUXNYRzRnSUc1dlpHVXNYRzRnSUc5MWRIQjFkQ3hjYmlBZ1VHOXlkRVJwY21WamRHbHZiaXhjYmlBZ2RIbHdaU0JIY21Gd2FGQnZjblJFWldacGJtbDBhVzl1TEZ4dWZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwzVnBMV1JsWTI5eVlYUnZjbk12WjNKaGNHaGNJanRjYm1sdGNHOXlkQ0IwZVhCbElIc2dUbTlrWlUxbGRHRmtZWFJoUTJoaGJtZGxMQ0JUZDJsMFkyaE9iMlJsVFdWMFlXUmhkR0VnZlNCbWNtOXRJRndpTGk0dmRIbHdaWE5jSWp0Y2JtbHRjRzl5ZENCN0lFZHlZWEJvVG05a1pTQjlJR1p5YjIwZ1hDSXVMMkpoYzJWY0lqdGNibHh1THlvcVhHNGdLaUJKWmlEaWdKUWdZMjl1WkdsMGFXOXVZV3dnWW5KaGJtTm9MaUJGZG1Gc2RXRjBaWE1nWVNCZ1EyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJtQWdLTUtuTWpJdU15a2dZVzVrWEc0Z0tpQnliM1YwWlhNZ2RHaGxJR2x1Y0hWMElIUnZJSFJvWlNCZ2RHaGxibUFnYjNJZ1lHVnNjMlZnSUc5MWRIQjFkQzVjYmlBcUwxeHVRRzV2WkdVb1hDSmpiM0psTG1ac2IzY3VhV1pjSWl3Z2UxeHVJQ0JyYVc1a09pQmNJbU52Y21VdVpteHZkeTVwWmx3aUxGeHVJQ0JqWVhSbFoyOXllVG9nWENKR2JHOTNJRU52Ym5SeWIyeGNJaXhjYmlBZ1kyOXNiM0k2SUZ3aUkyWTFPV1V3WWx3aUxGeHVJQ0JwWTI5dU9pQmNJblJwTFdGeWNtOTNjeTF6Y0d4cGRDMHlYQ0lzWEc0Z0lIZHBaSFJvT2lBNU5peGNiaUFnYUdWcFoyaDBPaUE1Tml4Y2JpQWdiR0ZpWld4ek9pQmJYQ0ptYkc5M1hDSXNJRndpWTI5dVpHbDBhVzl1WVd4Y0lpd2dYQ0ppY21GdVkyaGNJbDBzWEc0Z0lHMWxkR0ZrWVhSaE9pQjdYRzRnSUNBZ2RHbDBiR1U2SUZ3aVNXWmNJaXhjYmlBZ0lDQmtaWE5qY21sd2RHbHZiam9nWENKRGIyNWthWFJwYjI1aGJDQmljbUZ1WTJndUlFVjJZV3gxWVhSbGN5QjBhR1VnWTI5dVptbG5kWEpsWkNCamIyNWthWFJwYjI0Z1lXNWtJSEp2ZFhSbGN5QjBhR1VnYVc1d2RYUWdkRzhnZEdobElHMWhkR05vYVc1bklHOTFkSEIxZEM1Y0lpeGNiaUFnSUNCamIyNWthWFJwYjI0NklIc2diM0E2SUZ3aVpYRmNJaXdnYkdWbWREb2dleUJqYjI1emREb2dkSEoxWlNCOUxDQnlhV2RvZERvZ2V5QmpiMjV6ZERvZ2RISjFaU0I5SUgwc1hHNGdJSDBzWEc1OUtWeHVRRzF2WkdWc0tDbGNibVY0Y0c5eWRDQmpiR0Z6Y3lCSlprWnNiM2RPYjJSbElHVjRkR1Z1WkhNZ1RXOWtaV3dnZTF4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lkR1Y0ZEdGeVpXRmNJaXdnZXlCc1lXSmxiRG9nWENKSmJuQjFkQ0IyWVd4MVpWd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSldZV3gxWlNCMGJ5QmxkbUZzZFdGMFpWd2lJSDBwWEc0Z0lFQnBibkIxZENoN0lHaGhibVJzWlRvZ1hDSjJZV3gxWlZ3aUlIMHBYRzRnSUhaaGJIVmxJVG9nZFc1cmJtOTNianRjYmx4dUlDQkFjbVZ4ZFdseVpXUW9LVnh1SUNCQWRXbGxiR1Z0Wlc1MEtGd2lhVzV3ZFhSY0lpd2dleUJzWVdKbGJEb2dYQ0pVYUdWdVhDSXNJSEJzWVdObGFHOXNaR1Z5T2lCY0lrOTFkSEIxZENCM2FHVnVJR052Ym1ScGRHbHZiaUJwY3lCMGNuVmxYQ0lnZlNsY2JpQWdRRzkxZEhCMWRDaDdJR2hoYm1Sc1pUb2dYQ0owYUdWdVhDSWdmU2xjYmlBZ2RHaGxiaUU2SUhWdWEyNXZkMjQ3WEc1Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJbWx1Y0hWMFhDSXNJSHNnYkdGaVpXdzZJRndpUld4elpWd2lMQ0J3YkdGalpXaHZiR1JsY2pvZ1hDSlBkWFJ3ZFhRZ2QyaGxiaUJqYjI1a2FYUnBiMjRnYVhNZ1ptRnNjMlZjSWlCOUtWeHVJQ0JBYjNWMGNIVjBLSHNnYUdGdVpHeGxPaUJjSW1Wc2MyVmNJaUI5S1Z4dUlDQmxiSE5sSVRvZ2RXNXJibTkzYmp0Y2JuMWNibHh1THlvcVhHNGdLaUJUZDJsMFkyZ2c0b0NVSUcxMWJIUnBMV0p5WVc1amFDNGdVbTkxZEdWeklIUm9aU0JwYm5CMWRDQjBieUJ2Ym1VZ2IyWWdkR2hsSUdOaGMyVWdiM1YwY0hWMElIQnZjblJ6WEc0Z0tpQnZjaUJnWkdWbVlYVnNkR0FnWW1GelpXUWdiMjRnYldGMFkyaHBibWNnWTI5dVpHbDBhVzl1Y3k0Z1JXRmphQ0JqWVhObElHUmxabWx1WlhNZ1lWeHVJQ29nZTBCc2FXNXJJRk4zYVhSamFFTmhjMlZEYjI1a2FYUnBiMjU5SUNobmNtRndhR2xqWVd3Z2IzSWdZMjlrWlNCdGIyUmxLU0JoYm1RZ1lTQmtaV1JwWTJGMFpXUmNiaUFxSUc5MWRIQjFkQ0J3YjNKMExpQkRZWE5sY3lCaGNtVWdjM1J2Y21Wa0lHbHVJR0J0WlhSaFpHRjBZUzV6ZDJsMFkyZ3VZMkZ6WlhOZ0lHRnVaQ0IwYUdWY2JpQXFJSEpsYm1SbGNtVnlJR055WldGMFpYTWdaSGx1WVcxcFl5QnZkWFJ3ZFhRZ2NHOXlkSE1nWm5KdmJTQjBhR1Z0SUNoRVJVTkJSaTB6TWlEQ3B6SXlMakl1TWlrdVhHNGdLbHh1SUNvZ1ZHaGxJRzV2WkdVZ1ozSnZkM01nYVc0Z2FHVnBaMmgwSUdGeklHTmhjMlZ6SUdGeVpTQmhaR1JsWkM0Z1JXRmphQ0JqWVhObElHZGxkSE1nYVhSeklHOTNibHh1SUNvZ2IzVjBjSFYwSUhCdmNuUWdiMjRnZEdobElISnBaMmgwSUhOcFpHVXNJR3hoWW1Wc1pXUWdkMmwwYUNCMGFHVWdZMkZ6WlNCc1lXSmxiQzVjYmlBcUwxeHVRRzV2WkdVb1hDSmpiM0psTG1ac2IzY3VjM2RwZEdOb1hDSXNJSHRjYmlBZ2EybHVaRG9nWENKamIzSmxMbVpzYjNjdWMzZHBkR05vWENJc1hHNGdJR05oZEdWbmIzSjVPaUJjSWtac2IzY2dRMjl1ZEhKdmJGd2lMRnh1SUNCamIyeHZjam9nWENJalpqazNNekUyWENJc1hHNGdJR2xqYjI0NklGd2lkR2t0WVhKeWIzZHpMWE5vZFdabWJHVmNJaXhjYmlBZ2QybGtkR2c2SURFeU1DeGNiaUFnYUdWcFoyaDBPaUF4TkRBc1hHNGdJR3hoWW1Wc2N6b2dXMXdpWm14dmQxd2lMQ0JjSW5OM2FYUmphRndpTENCY0ltMTFiSFJwTFdKeVlXNWphRndpWFN4Y2JpQWdiV1YwWVdSaGRHRTZJSHRjYmlBZ0lDQjBhWFJzWlRvZ1hDSlRkMmwwWTJoY0lpeGNiaUFnSUNCa1pYTmpjbWx3ZEdsdmJqb2dYQ0pOZFd4MGFTMWljbUZ1WTJnZ2MzZHBkR05vTGlCU2IzVjBaWE1nZEdobElHbHVjSFYwSUhSdklIUm9aU0JtYVhKemRDQnRZWFJqYUdsdVp5QmpZWE5sSUc5MWRIQjFkQ3dnYjNJZ2RHaGxJR1JsWm1GMWJIUWdiM1YwY0hWMExsd2lMRnh1SUNBZ0lITjNhWFJqYURvZ2UxeHVJQ0FnSUNBZ1kyRnpaWE02SUZ0ZExGeHVJQ0FnSUNBZ1pHVm1ZWFZzZEZCdmNuUTZJRndpWkdWbVlYVnNkRndpTEZ4dUlDQWdJSDBzWEc0Z0lIMHNYRzU5S1Z4dVFHMXZaR1ZzS0NsY2JtVjRjRzl5ZENCamJHRnpjeUJUZDJsMFkyaEdiRzkzVG05a1pTQmxlSFJsYm1SeklFZHlZWEJvVG05a1pTQjdYRzRnSUVCeVpYRjFhWEpsWkNncFhHNGdJRUIxYVdWc1pXMWxiblFvWENKMFpYaDBZWEpsWVZ3aUxDQjdJR3hoWW1Wc09pQmNJa2x1Y0hWMElIWmhiSFZsWENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWxaaGJIVmxJSFJ2SUhOM2FYUmphQ0J2Ymx3aUlIMHBYRzRnSUVCcGJuQjFkQ2g3SUdoaGJtUnNaVG9nWENKMllXeDFaVndpSUgwcFhHNGdJSFpoYkhWbElUb2dkVzVyYm05M2JqdGNibHh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWFXNXdkWFJjSWl3Z2V5QnNZV0psYkRvZ1hDSkVaV1poZFd4MFhDSXNJSEJzWVdObGFHOXNaR1Z5T2lCY0lrUmxabUYxYkhRZ2IzVjBjSFYwSUhkb1pXNGdibThnWTJGelpTQnRZWFJqYUdWelhDSWdmU2xjYmlBZ1FHOTFkSEIxZENoN0lHaGhibVJzWlRvZ1hDSmtaV1poZFd4MFhDSWdmU2xjYmlBZ1pHVm1ZWFZzZENFNklIVnVhMjV2ZDI0N1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVOdmJYQjFkR1Z6SUhSb1pTQnViMlJsSjNNZ2NHOXlkSE1zSUhOcGVtVXNJR0Z1WkNCa1lYUmhJSEJoZEdOb0lHWnliMjBnZEdobElHZHBkbVZ1SUhOM2FYUmphRnh1SUNBZ0tpQnRaWFJoWkdGMFlTNGdSV0ZqYUNCallYTmxJR2RsZEhNZ2FYUnpJRzkzYmlCdmRYUndkWFFnY0c5eWRDQnZiaUIwYUdVZ2NtbG5hSFFnYzJsa1pUc2dkR2hsWEc0Z0lDQXFJRzV2WkdVZ1ozSnZkM01nYVc0Z2FHVnBaMmgwSUdGeklHTmhjMlZ6SUdGeVpTQmhaR1JsWkM1Y2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCdmRtVnljbWxrWlNCaGNIQnNlVTFsZEdGa1lYUmhLRzFsZEdFNklGTjNhWFJqYUU1dlpHVk5aWFJoWkdGMFlTazZJRTV2WkdWTlpYUmhaR0YwWVVOb1lXNW5aU0I3WEc0Z0lDQWdZMjl1YzNRZ1pHVm1hVzVwZEdsdmJpQTlJR2R5WVhCb1JHVm1hVzVwZEdsdmJrOW1LSFJvYVhNZ1lYTWdibVYyWlhJcE8xeHVJQ0FnSUdOdmJuTjBJR0poYzJWUWIzSjBjeUE5SUdSbFptbHVhWFJwYjI0dWNHOXlkSE11Wm1sc2RHVnlLRnh1SUNBZ0lDQWdLSEFwSUQwK0lDRnRaWFJoTG1OaGMyVnpMbk52YldVb0tHTXBJRDArSUdNdWIzVjBjSFYwVUc5eWRDQTlQVDBnY0M1d2NtOXdaWEowZVNsY2JpQWdJQ0FwTzF4dUlDQWdJR052Ym5OMElHTmhjMlZRYjNKMGN6b2dSM0poY0doUWIzSjBSR1ZtYVc1cGRHbHZibHRkSUQwZ2JXVjBZUzVqWVhObGN5NXRZWEFvS0dNcElEMCtJQ2g3WEc0Z0lDQWdJQ0J3Y205d1pYSjBlVG9nWXk1dmRYUndkWFJRYjNKMExGeHVJQ0FnSUNBZ2JtRnRaVG9nWXk1c1lXSmxiQ3hjYmlBZ0lDQWdJR1JwY21WamRHbHZiam9nVUc5eWRFUnBjbVZqZEdsdmJpNVBWVlJRVlZRc1hHNGdJQ0FnSUNCc1lXSmxiRG9nWXk1c1lXSmxiQ3hjYmlBZ0lDQWdJSEpsY1hWcGNtVmtPaUJtWVd4elpTeGNiaUFnSUNBZ0lHaHBaR1JsYmpvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0J3WVhSb09pQmpMbTkxZEhCMWRGQnZjblFzWEc0Z0lDQWdmU2twTzF4dUlDQWdJR052Ym5OMElHTmhjMlZEYjNWdWRDQTlJRzFsZEdFdVkyRnpaWE11YkdWdVozUm9PMXh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNCd2IzSjBjem9nV3k0dUxtSmhjMlZRYjNKMGN5d2dMaTR1WTJGelpWQnZjblJ6WFN4Y2JpQWdJQ0FnSUhOcGVtVTZJSHRjYmlBZ0lDQWdJQ0FnZDJsa2RHZzZJR1JsWm1sdWFYUnBiMjR1ZDJsa2RHZ2dQejhnTVRJd0xGeHVJQ0FnSUNBZ0lDQm9aV2xuYUhRNklHTmhjMlZEYjNWdWRDQStJREFnUHlBeE5EQWdLeUJqWVhObFEyOTFiblFnS2lBeU5DQTZJR1JsWm1sdWFYUnBiMjR1YUdWcFoyaDBJRDgvSURFME1DeGNiaUFnSUNBZ0lIMHNYRzRnSUNBZ0lDQmtZWFJoVUdGMFkyZzZJSHNnYzNkcGRHTm9UV1YwWVdSaGRHRTZJRzFsZEdFZ2ZTeGNiaUFnSUNCOU8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dVR0Z5WVd4c1pXd2c0b0NVSUhOd2JHbDBjeUJsZUdWamRYUnBiMjRnYVc1MGJ5QmpiMjVqZFhKeVpXNTBJR0p5WVc1amFHVnpMbHh1SUNvdlhHNUFibTlrWlNoY0ltTnZjbVV1Wm14dmR5NXdZWEpoYkd4bGJGd2lMQ0I3WEc0Z0lHdHBibVE2SUZ3aVkyOXlaUzVtYkc5M0xuQmhjbUZzYkdWc1hDSXNYRzRnSUdOaGRHVm5iM0o1T2lCY0lrWnNiM2NnUTI5dWRISnZiRndpTEZ4dUlDQmpiMnh2Y2pvZ1hDSWpNRFppTm1RMFhDSXNYRzRnSUdsamIyNDZJRndpZEdrdFlYSnliM2R6TFhabGNuUnBZMkZzWENJc1hHNGdJSGRwWkhSb09pQTVOaXhjYmlBZ2FHVnBaMmgwT2lBNU5peGNiaUFnYkdGaVpXeHpPaUJiWENKbWJHOTNYQ0lzSUZ3aWNHRnlZV3hzWld4Y0lpd2dYQ0pqYjI1amRYSnlaVzUwWENKZExGeHVJQ0J0WlhSaFpHRjBZVG9nZTF4dUlDQWdJSFJwZEd4bE9pQmNJbEJoY21Gc2JHVnNYQ0lzWEc0Z0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUZ3aVUzQnNhWFJ6SUdWNFpXTjFkR2x2YmlCcGJuUnZJR052Ym1OMWNuSmxiblFnWW5KaGJtTm9aWE11SUVGc2JDQmljbUZ1WTJobGN5QnlkVzRnYVc0Z2NHRnlZV3hzWld3Z1lXNWtJRzkxZEhCMWRITWdZWEpsSUdOdmJHeGxZM1JsWkM1Y0lpeGNiaUFnSUNCaWNtRnVZMmhEYjNWdWREb2dNaXhjYmlBZ2ZTeGNibjBwWEc1QWJXOWtaV3dvS1Z4dVpYaHdiM0owSUdOc1lYTnpJRkJoY21Gc2JHVnNSbXh2ZDA1dlpHVWdaWGgwWlc1a2N5Qk5iMlJsYkNCN1hHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0owWlhoMFlYSmxZVndpTENCN0lHeGhZbVZzT2lCY0lrbHVjSFYwSUhaaGJIVmxYQ0lzSUhCc1lXTmxhRzlzWkdWeU9pQmNJbFpoYkhWbElIUnZJR1poYmlCdmRYUmNJaUI5S1Z4dUlDQkFhVzV3ZFhRb2V5Qm9ZVzVrYkdVNklGd2lkbUZzZFdWY0lpQjlLVnh1SUNCMllXeDFaU0U2SUhWdWEyNXZkMjQ3WEc1Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJbWx1Y0hWMFhDSXNJSHNnYkdGaVpXdzZJRndpUW5KaGJtTm9aWE5jSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpUTI5c2JHVmpkR1ZrSUdKeVlXNWphQ0J2ZFhSd2RYUnpYQ0lnZlNsY2JpQWdRRzkxZEhCMWRDaDdJR2hoYm1Sc1pUb2dYQ0ppY21GdVkyaGxjMXdpSUgwcFhHNGdJR0p5WVc1amFHVnpJVG9nZFc1cmJtOTNibHRkTzF4dWZWeHVYRzR2S2lwY2JpQXFJRTFsY21kbElPS0FsQ0J1YjNKdFlXeHBjMlZ6SUdKeVlXNWphQzl3WVhKaGJHeGxiQ0J2ZFhSd2RYUnpJR2x1ZEc4Z1lTQnphVzVuYkdVZ2IzVjBjSFYwTGx4dUlDb3ZYRzVBYm05a1pTaGNJbU52Y21VdVpteHZkeTV0WlhKblpWd2lMQ0I3WEc0Z0lHdHBibVE2SUZ3aVkyOXlaUzVtYkc5M0xtMWxjbWRsWENJc1hHNGdJR05oZEdWbmIzSjVPaUJjSWxWMGFXeHBkSGxjSWl4Y2JpQWdZMjlzYjNJNklGd2lJekJrT1RRNE9Gd2lMRnh1SUNCcFkyOXVPaUJjSW5ScExXRnljbTkzY3kxdFpYSm5aVndpTEZ4dUlDQjNhV1IwYURvZ09UWXNYRzRnSUdobGFXZG9kRG9nT1RZc1hHNGdJR3hoWW1Wc2N6b2dXMXdpWm14dmQxd2lMQ0JjSW0xbGNtZGxYQ0lzSUZ3aWFtOXBibHdpWFN4Y2JpQWdiV1YwWVdSaGRHRTZJSHRjYmlBZ0lDQjBhWFJzWlRvZ1hDSk5aWEpuWlZ3aUxGeHVJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmNJazFsY21kbGN5QnRkV3gwYVhCc1pTQmljbUZ1WTJnZ2IzVjBjSFYwY3lCcGJuUnZJR0VnYzJsdVoyeGxJRzV2Y20xaGJHbHpaV1FnYjNWMGNIVjBJRzlpYW1WamRDNWNJaXhjYmlBZ0lDQnpkSEpoZEdWbmVUb2dYQ0pqYjI1allYUmNJaXhjYmlBZ2ZTeGNibjBwWEc1QWJXOWtaV3dvS1Z4dVpYaHdiM0owSUdOc1lYTnpJRTFsY21kbFJteHZkMDV2WkdVZ1pYaDBaVzVrY3lCTmIyUmxiQ0I3WEc0Z0lFQnlaWEYxYVhKbFpDZ3BYRzRnSUVCMWFXVnNaVzFsYm5Rb1hDSjBaWGgwWVhKbFlWd2lMQ0I3SUd4aFltVnNPaUJjSWtKeVlXNWphQ0J2ZFhSd2RYUnpYQ0lzSUhCc1lXTmxhRzlzWkdWeU9pQmNJazkxZEhCMWRITWdkRzhnYldWeVoyVmNJaUI5S1Z4dUlDQkFhVzV3ZFhRb2V5Qm9ZVzVrYkdVNklGd2lkbUZzZFdWelhDSWdmU2xjYmlBZ2RtRnNkV1Z6SVRvZ2RXNXJibTkzYmx0ZE8xeHVYRzRnSUVCeVpYRjFhWEpsWkNncFhHNGdJRUIxYVdWc1pXMWxiblFvWENKcGJuQjFkRndpTENCN0lHeGhZbVZzT2lCY0lrMWxjbWRsWkNCdmRYUndkWFJjSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpVFdWeVoyVmtJSEpsYzNWc2RGd2lJSDBwWEc0Z0lFQnZkWFJ3ZFhRb2V5Qm9ZVzVrYkdVNklGd2liV1Z5WjJWa1hDSWdmU2xjYmlBZ2JXVnlaMlZrSVRvZ2RXNXJibTkzYmp0Y2JuMWNibHh1THlvcVhHNGdLaUJOWVhBZzRvQ1VJSFJ5WVc1elptOXliWE1nZEdobElHTjFjbkpsYm5RZ2FXNXdkWFFnYVc1MGJ5QmhJRzVsZHlCdmRYUndkWFFnYjJKcVpXTjBMbHh1SUNvdlhHNUFibTlrWlNoY0ltTnZjbVV1Wm14dmR5NXRZWEJjSWl3Z2UxeHVJQ0JyYVc1a09pQmNJbU52Y21VdVpteHZkeTV0WVhCY0lpeGNiaUFnWTJGMFpXZHZjbms2SUZ3aVZYUnBiR2wwZVZ3aUxGeHVJQ0JqYjJ4dmNqb2dYQ0lqT0RSall6RTJYQ0lzWEc0Z0lHbGpiMjQ2SUZ3aWRHa3RZWEp5YjNkekxYSnBaMmgwTFd4bFpuUmNJaXhjYmlBZ2QybGtkR2c2SURrMkxGeHVJQ0JvWldsbmFIUTZJRGsyTEZ4dUlDQnNZV0psYkhNNklGdGNJbVpzYjNkY0lpd2dYQ0p0WVhCY0lpd2dYQ0owY21GdWMyWnZjbTFjSWwwc1hHNGdJRzFsZEdGa1lYUmhPaUI3WEc0Z0lDQWdkR2wwYkdVNklGd2lUV0Z3WENJc1hHNGdJQ0FnWkdWelkzSnBjSFJwYjI0NklGd2lWSEpoYm5ObWIzSnRjeUIwYUdVZ1kzVnljbVZ1ZENCcGJuQjFkQ0JwYm5SdklHRWdibVYzSUc5MWRIQjFkQ0J2WW1wbFkzUWdkWE5wYm1jZ2RHaGxJR052Ym1acFozVnlaV1FnYldGd2NHVnlMbHdpTEZ4dUlDQWdJRzFoY0hCbGNqb2dlMzBzWEc0Z0lIMHNYRzU5S1Z4dVFHMXZaR1ZzS0NsY2JtVjRjRzl5ZENCamJHRnpjeUJOWVhCR2JHOTNUbTlrWlNCbGVIUmxibVJ6SUUxdlpHVnNJSHRjYmlBZ1FISmxjWFZwY21Wa0tDbGNiaUFnUUhWcFpXeGxiV1Z1ZENoY0luUmxlSFJoY21WaFhDSXNJSHNnYkdGaVpXdzZJRndpU1c1d2RYUWdkbUZzZFdWY0lpd2djR3hoWTJWb2IyeGtaWEk2SUZ3aVZtRnNkV1VnZEc4Z2RISmhibk5tYjNKdFhDSWdmU2xjYmlBZ1FHbHVjSFYwS0hzZ2FHRnVaR3hsT2lCY0luWmhiSFZsWENJZ2ZTbGNiaUFnZG1Gc2RXVWhPaUIxYm10dWIzZHVPMXh1WEc0Z0lFQnlaWEYxYVhKbFpDZ3BYRzRnSUVCMWFXVnNaVzFsYm5Rb1hDSnBibkIxZEZ3aUxDQjdJR3hoWW1Wc09pQmNJbFJ5WVc1elptOXliV1ZrSUc5MWRIQjFkRndpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pOWVhCd1pXUWdjbVZ6ZFd4MFhDSWdmU2xjYmlBZ1FHOTFkSEIxZENoN0lHaGhibVJzWlRvZ1hDSnlaWE4xYkhSY0lpQjlLVnh1SUNCeVpYTjFiSFFoT2lCMWJtdHViM2R1TzF4dWZWeHVYRzR2S2lwY2JpQXFJRVJsYkdGNUlPS0FsQ0J3WVhWelpYTWdaWGhsWTNWMGFXOXVJR1p2Y2lCaElHTnZibVpwWjNWeVpXUWdaSFZ5WVhScGIyNHVYRzRnS2k5Y2JrQnViMlJsS0Z3aVkyOXlaUzVtYkc5M0xtUmxiR0Y1WENJc0lIdGNiaUFnYTJsdVpEb2dYQ0pqYjNKbExtWnNiM2N1WkdWc1lYbGNJaXhjYmlBZ1kyRjBaV2R2Y25rNklGd2lWWFJwYkdsMGVWd2lMRnh1SUNCamIyeHZjam9nWENJallUTmhNMkV6WENJc1hHNGdJR2xqYjI0NklGd2lkR2t0WTJ4dlkyc3RhRzkxY2kwMFhDSXNYRzRnSUhkcFpIUm9PaUE1Tml4Y2JpQWdhR1ZwWjJoME9pQTVOaXhjYmlBZ2JHRmlaV3h6T2lCYlhDSm1iRzkzWENJc0lGd2laR1ZzWVhsY0lpd2dYQ0ozWVdsMFhDSmRMRnh1SUNCdFpYUmhaR0YwWVRvZ2UxeHVJQ0FnSUhScGRHeGxPaUJjSWtSbGJHRjVYQ0lzWEc0Z0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUZ3aVVHRjFjMlZ6SUdWNFpXTjFkR2x2YmlCbWIzSWdkR2hsSUdOdmJtWnBaM1Z5WldRZ1pIVnlZWFJwYjI0Z0tHbHVJRzFwYkd4cGMyVmpiMjVrY3lrc0lIUm9aVzRnWm05eWQyRnlaSE1nZEdobElHbHVjSFYwSUhWdVkyaGhibWRsWkM1Y0lpeGNiaUFnSUNCa2RYSmhkR2x2Ymsxek9pQXhNREF3TEZ4dUlDQjlMRnh1ZlNsY2JrQnRiMlJsYkNncFhHNWxlSEJ2Y25RZ1kyeGhjM01nUkdWc1lYbEdiRzkzVG05a1pTQmxlSFJsYm1SeklFMXZaR1ZzSUh0Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJblJsZUhSaGNtVmhYQ0lzSUhzZ2JHRmlaV3c2SUZ3aVNXNXdkWFFnZG1Gc2RXVmNJaXdnY0d4aFkyVm9iMnhrWlhJNklGd2lWbUZzZFdVZ2RHOGdabTl5ZDJGeVpDQmhablJsY2lCa1pXeGhlVndpSUgwcFhHNGdJRUJwYm5CMWRDaDdJR2hoYm1Sc1pUb2dYQ0oyWVd4MVpWd2lJSDBwWEc0Z0lIWmhiSFZsSVRvZ2RXNXJibTkzYmp0Y2JseHVJQ0JBY21WeGRXbHlaV1FvS1Z4dUlDQkFkV2xsYkdWdFpXNTBLRndpYVc1d2RYUmNJaXdnZXlCc1lXSmxiRG9nWENKUGRYUndkWFFnZG1Gc2RXVmNJaXdnY0d4aFkyVm9iMnhrWlhJNklGd2lSbTl5ZDJGeVpHVmtJSFpoYkhWbFhDSWdmU2xjYmlBZ1FHOTFkSEIxZENoN0lHaGhibVJzWlRvZ1hDSjJZV3gxWlZ3aUlIMHBYRzRnSUhaaGJIVmxUM1YwSVRvZ2RXNXJibTkzYmp0Y2JuMWNibHh1THlvcVhHNGdLaUJGY25KdmNpQmliM1Z1WkdGeWVTRGlnSlFnZEhKNUwyTmhkR05vTDJacGJtRnNiSGtnZDI5eWEyWnNiM2NnWW1Wb1lYWnBiM1Z5TGx4dUlDb3ZYRzVBYm05a1pTaGNJbU52Y21VdVpteHZkeTVsY25KdmNrSnZkVzVrWVhKNVhDSXNJSHRjYmlBZ2EybHVaRG9nWENKamIzSmxMbVpzYjNjdVpYSnliM0pDYjNWdVpHRnllVndpTEZ4dUlDQmpZWFJsWjI5eWVUb2dYQ0pHYkc5M0lFTnZiblJ5YjJ4Y0lpeGNiaUFnWTI5c2IzSTZJRndpSTJWbU5EUTBORndpTEZ4dUlDQnBZMjl1T2lCY0luUnBMWE5vYVdWc1pDMWphR1ZqYTF3aUxGeHVJQ0IzYVdSMGFEb2dPVFlzWEc0Z0lHaGxhV2RvZERvZ09UWXNYRzRnSUd4aFltVnNjem9nVzF3aVpteHZkMXdpTENCY0ltVnljbTl5WENJc0lGd2lkSEo1TFdOaGRHTm9YQ0pkTEZ4dUlDQnRaWFJoWkdGMFlUb2dlMXh1SUNBZ0lIUnBkR3hsT2lCY0lrVnljbTl5SUdKdmRXNWtZWEo1WENJc1hHNGdJQ0FnWkdWelkzSnBjSFJwYjI0NklGd2lWM0poY0hNZ2RHaGxJR2x1Y0hWMElHbHVJR0VnZEhKNUwyTmhkR05vTDJacGJtRnNiSGt1SUVWdGFYUnpJSFJvWlNCeVpYTjFiSFFnYjI0Z2MzVmpZMlZ6Y3l3Z2IzSWdkR2hsSUdWeWNtOXlJRzl1SUdaaGFXeDFjbVV1WENJc1hHNGdJQ0FnWm1sdVlXeHNlVG9nWm1Gc2MyVXNYRzRnSUgwc1hHNTlLVnh1UUcxdlpHVnNLQ2xjYm1WNGNHOXlkQ0JqYkdGemN5QkZjbkp2Y2tKdmRXNWtZWEo1Um14dmQwNXZaR1VnWlhoMFpXNWtjeUJOYjJSbGJDQjdYRzRnSUVCeVpYRjFhWEpsWkNncFhHNGdJRUIxYVdWc1pXMWxiblFvWENKMFpYaDBZWEpsWVZ3aUxDQjdJR3hoWW1Wc09pQmNJa2x1Y0hWMElIWmhiSFZsWENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWxaaGJIVmxJSFJ2SUdkMVlYSmtYQ0lnZlNsY2JpQWdRR2x1Y0hWMEtIc2dhR0Z1Wkd4bE9pQmNJblpoYkhWbFhDSWdmU2xjYmlBZ2RtRnNkV1VoT2lCMWJtdHViM2R1TzF4dVhHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0pwYm5CMWRGd2lMQ0I3SUd4aFltVnNPaUJjSWxKbGMzVnNkRndpTENCd2JHRmpaV2h2YkdSbGNqb2dYQ0pQZFhSd2RYUWdiMjRnYzNWalkyVnpjMXdpSUgwcFhHNGdJRUJ2ZFhSd2RYUW9leUJvWVc1a2JHVTZJRndpY21WemRXeDBYQ0lnZlNsY2JpQWdjbVZ6ZFd4MElUb2dkVzVyYm05M2JqdGNibHh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWFXNXdkWFJjSWl3Z2V5QnNZV0psYkRvZ1hDSkZjbkp2Y2x3aUxDQndiR0ZqWldodmJHUmxjam9nWENKUGRYUndkWFFnYjI0Z1ptRnBiSFZ5WlZ3aUlIMHBYRzRnSUVCdmRYUndkWFFvZXlCb1lXNWtiR1U2SUZ3aVpYSnliM0pjSWlCOUtWeHVJQ0JsY25KdmNpRTZJSFZ1YTI1dmQyNDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1NIVnRZVzRnWVhCd2NtOTJZV3dnNG9DVUlITjFjM0JsYm1SeklHVjRaV04xZEdsdmJpQjFiblJwYkNCaElHaDFiV0Z1SUdGd2NISnZkbVZ6SUc5eUlISmxhbVZqZEhNdVhHNGdLaTljYmtCdWIyUmxLRndpWTI5eVpTNW1iRzkzTG1oMWJXRnVRWEJ3Y205MllXeGNJaXdnZTF4dUlDQnJhVzVrT2lCY0ltTnZjbVV1Wm14dmR5NW9kVzFoYmtGd2NISnZkbUZzWENJc1hHNGdJR05oZEdWbmIzSjVPaUJjSWtac2IzY2dRMjl1ZEhKdmJGd2lMRnh1SUNCamIyeHZjam9nWENJalpEazBObVZtWENJc1hHNGdJR2xqYjI0NklGd2lkR2t0ZFhObGNpMWphR1ZqYTF3aUxGeHVJQ0IzYVdSMGFEb2dPVFlzWEc0Z0lHaGxhV2RvZERvZ09UWXNYRzRnSUd4aFltVnNjem9nVzF3aVpteHZkMXdpTENCY0ltRndjSEp2ZG1Gc1hDSXNJRndpYzNWemNHVnVaRndpWFN4Y2JpQWdiV1YwWVdSaGRHRTZJSHRjYmlBZ0lDQjBhWFJzWlRvZ1hDSklkVzFoYmlCaGNIQnliM1poYkZ3aUxGeHVJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmNJbE4xYzNCbGJtUnpJR1Y0WldOMWRHbHZiaUIxYm5ScGJDQmhJR2gxYldGdUlHRndjSEp2ZG1WeklHOXlJSEpsYW1WamRITXVJRVZ0YVhSeklIUm9aU0JoY0hCeWIzWmxaQ0IyWVd4MVpTQnZjaUJoSUhKbGFtVmpkR2x2Ymk1Y0lpeGNiaUFnSUNCaGNIQnliM1psY25NNklGdGRMRnh1SUNBZ0lIUnBiV1Z2ZFhSTmN6b2dPRFkwTURBd01EQXNYRzRnSUgwc1hHNTlLVnh1UUcxdlpHVnNLQ2xjYm1WNGNHOXlkQ0JqYkdGemN5QklkVzFoYmtGd2NISnZkbUZzUm14dmQwNXZaR1VnWlhoMFpXNWtjeUJOYjJSbGJDQjdYRzRnSUVCeVpYRjFhWEpsWkNncFhHNGdJRUIxYVdWc1pXMWxiblFvWENKMFpYaDBZWEpsWVZ3aUxDQjdJR3hoWW1Wc09pQmNJa2x1Y0hWMElIWmhiSFZsWENJc0lIQnNZV05sYUc5c1pHVnlPaUJjSWxaaGJIVmxJSEJsYm1ScGJtY2dZWEJ3Y205MllXeGNJaUI5S1Z4dUlDQkFhVzV3ZFhRb2V5Qm9ZVzVrYkdVNklGd2lkbUZzZFdWY0lpQjlLVnh1SUNCMllXeDFaU0U2SUhWdWEyNXZkMjQ3WEc1Y2JpQWdRSEpsY1hWcGNtVmtLQ2xjYmlBZ1FIVnBaV3hsYldWdWRDaGNJbWx1Y0hWMFhDSXNJSHNnYkdGaVpXdzZJRndpUVhCd2NtOTJaV1JjSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpVDNWMGNIVjBJSGRvWlc0Z1lYQndjbTkyWldSY0lpQjlLVnh1SUNCQWIzVjBjSFYwS0hzZ2FHRnVaR3hsT2lCY0ltRndjSEp2ZG1Wa1hDSWdmU2xjYmlBZ1lYQndjbTkyWldRaE9pQjFibXR1YjNkdU8xeHVYRzRnSUVCeVpYRjFhWEpsWkNncFhHNGdJRUIxYVdWc1pXMWxiblFvWENKcGJuQjFkRndpTENCN0lHeGhZbVZzT2lCY0lsSmxhbVZqZEdWa1hDSXNJSEJzWVdObGFHOXNaR1Z5T2lCY0lrOTFkSEIxZENCM2FHVnVJSEpsYW1WamRHVmtYQ0lnZlNsY2JpQWdRRzkxZEhCMWRDaDdJR2hoYm1Sc1pUb2dYQ0p5WldwbFkzUmxaRndpSUgwcFhHNGdJSEpsYW1WamRHVmtJVG9nZFc1cmJtOTNianRjYm4xY2JseHVMeW9xWEc0Z0tpQlNaWFIxY200ZzRvQ1VJR1JsWm1sdVpYTWdZVzVrSUc1dmNtMWhiR2x6WlhNZ2RHaGxJR1pwYm1Gc0lIZHZjbXRtYkc5M0lHOTFkSEIxZEM1Y2JpQXFMMXh1UUc1dlpHVW9YQ0pqYjNKbExtWnNiM2N1Y21WMGRYSnVYQ0lzSUh0Y2JpQWdhMmx1WkRvZ1hDSmpiM0psTG1ac2IzY3VjbVYwZFhKdVhDSXNYRzRnSUdOaGRHVm5iM0o1T2lCY0lsVjBhV3hwZEhsY0lpeGNiaUFnWTI5c2IzSTZJRndpSXpJeVl6VTFaVndpTEZ4dUlDQnBZMjl1T2lCY0luUnBMV0Z5Y205M0xXSmhZMnN0ZFhCY0lpeGNiaUFnZDJsa2RHZzZJRGsyTEZ4dUlDQm9aV2xuYUhRNklEazJMRnh1SUNCc1lXSmxiSE02SUZ0Y0ltWnNiM2RjSWl3Z1hDSnlaWFIxY201Y0lpd2dYQ0p2ZFhSd2RYUmNJbDBzWEc0Z0lHMWxkR0ZrWVhSaE9pQjdYRzRnSUNBZ2RHbDBiR1U2SUZ3aVVtVjBkWEp1WENJc1hHNGdJQ0FnWkdWelkzSnBjSFJwYjI0NklGd2lUbTl5YldGc2FYTmxjeUIwYUdVZ2FXNXdkWFFnYVc1MGJ5QjBhR1VnWm1sdVlXd2dkMjl5YTJac2IzY2diM1YwY0hWMElHOWlhbVZqZEM1Y0lpeGNiaUFnSUNCdmRYUndkWFJUWTJobGJXRTZJSHQ5TEZ4dUlDQjlMRnh1ZlNsY2JrQnRiMlJsYkNncFhHNWxlSEJ2Y25RZ1kyeGhjM01nVW1WMGRYSnVSbXh2ZDA1dlpHVWdaWGgwWlc1a2N5Qk5iMlJsYkNCN1hHNGdJRUJ5WlhGMWFYSmxaQ2dwWEc0Z0lFQjFhV1ZzWlcxbGJuUW9YQ0owWlhoMFlYSmxZVndpTENCN0lHeGhZbVZzT2lCY0lrbHVjSFYwSUhaaGJIVmxYQ0lzSUhCc1lXTmxhRzlzWkdWeU9pQmNJbFpoYkhWbElIUnZJRzV2Y20xaGJHbHpaVndpSUgwcFhHNGdJRUJwYm5CMWRDaDdJR2hoYm1Sc1pUb2dYQ0oyWVd4MVpWd2lJSDBwWEc0Z0lIWmhiSFZsSVRvZ2RXNXJibTkzYmp0Y2JseHVJQ0JBY21WeGRXbHlaV1FvS1Z4dUlDQkFkV2xsYkdWdFpXNTBLRndpYVc1d2RYUmNJaXdnZXlCc1lXSmxiRG9nWENKU1pYUjFjbTVsWkNCdmRYUndkWFJjSWl3Z2NHeGhZMlZvYjJ4a1pYSTZJRndpVG05eWJXRnNhWE5sWkNCdmRYUndkWFJjSWlCOUtWeHVJQ0JBYjNWMGNIVjBLSHNnYUdGdVpHeGxPaUJjSW5KbGMzVnNkRndpSUgwcFhHNGdJSEpsYzNWc2RDRTZJSFZ1YTI1dmQyNDdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyOWtaU0RpZ0pRZ2MyRnVaR0p2ZUdWa0lFcFRMMVJUSUdOdlpHVWdaWGhsWTNWMGFXOXVJQ2hCVEVaU1JVUXROU0RDcHpjcExseHVJQ3BjYmlBcUlGUm9aU0JsYm1kcGJtVWdaRzlsY3lCdWIzUWdhVzF3YkdWdFpXNTBJSFJvWlNCellXNWtZbTk0SUdScGNtVmpkR3g1SUNqQ3B6SXlMalFwTGlCQklHWjFkSFZ5WlZ4dUlDb2daWGhsWTNWMGIzSWdiV0Y1SUhkeVlYQWdkR2hsSUdCRGIyUmxVMkZ1WkdKdmVHQWdZMjl1ZEhKaFkzUWdLRUZNUmxKRlJDMDFJTUtuTnk0eE55a2dZWE1nWVZ4dUlDb2djR3gxWjJkaFlteGxJR1Y0WldOMWRHOXlMaUJVYUdVZ2NHeGhZMlZvYjJ4a1pYSWdjM2x1ZEdGNElDaGdlM3NnSkdsdWNIVjBJSDE5WUN3Z1lIdDdJQ1JwZEdWdElIMTlZQ3hjYmlBcUlHQjdleUFrYVc1a1pYZ2dmWDFnTENCZ2Uzc2dKSFpoY25NZ2ZYMWdMQ0JnZTNzZ0pHNXZaR1ZiWENKT1lXMWxYQ0pkTG05MWRIQjFkQ0I5ZldBcElHbHpJRTFoYzNSeVlTMWNiaUFxSUdGbmJtOXpkR2xqSUdGdVpDQnNhWFpsY3lCcGJpQjBhR1VnWkc5M2JuTjBjbVZoYlNCd2NtOXFaV04wSjNNZ1lHMXZaSFZzWlhNdlkyOXlaV0FnS0VGTVJsSkZSQzAyS1M1Y2JpQXFMMXh1UUc1dlpHVW9YQ0pqYjNKbExtWnNiM2N1WTI5a1pWd2lMQ0I3WEc0Z0lHdHBibVE2SUZ3aVkyOXlaUzVtYkc5M0xtTnZaR1ZjSWl4Y2JpQWdZMkYwWldkdmNuazZJRndpVlhScGJHbDBlVndpTEZ4dUlDQmpiMnh2Y2pvZ1hDSWpOMk16WVdWa1hDSXNYRzRnSUdsamIyNDZJRndpZEdrdFkyOWtaVndpTEZ4dUlDQjNhV1IwYURvZ09UWXNYRzRnSUdobGFXZG9kRG9nT1RZc1hHNGdJR3hoWW1Wc2N6b2dXMXdpWm14dmQxd2lMQ0JjSW1OdlpHVmNJaXdnWENKellXNWtZbTk0WENJc0lGd2lkSEpoYm5ObWIzSnRYQ0pkTEZ4dUlDQnRaWFJoWkdGMFlUb2dlMXh1SUNBZ0lIUnBkR3hsT2lCY0lrTnZaR1ZjSWl4Y2JpQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1hDSlNkVzV6SUhWelpYSXRZWFYwYUc5eVpXUWdTbE12VkZNZ2FXNGdZU0J5WlhOMGNtbGpkR1ZrSUZaTklITmhibVJpYjNndUlGTjFjSEJ2Y25SeklIQnNZV05sYUc5c1pHVnlJSE41Ym5SaGVDQm1iM0lnZDI5eWEyWnNiM2NnWkdGMFlTQnlaV1psY21WdVkyVnpMbHdpTEZ4dUlDQWdJR052WkdVNklGd2lYQ0lzWEc0Z0lDQWdiR0Z1WjNWaFoyVTZJRndpYW1GMllYTmpjbWx3ZEZ3aUxGeHVJQ0I5TEZ4dWZTbGNia0J0YjJSbGJDZ3BYRzVsZUhCdmNuUWdZMnhoYzNNZ1EyOWtaVVpzYjNkT2IyUmxJR1Y0ZEdWdVpITWdUVzlrWld3Z2UxeHVJQ0JBY21WeGRXbHlaV1FvS1Z4dUlDQkFkV2xsYkdWdFpXNTBLRndpZEdWNGRHRnlaV0ZjSWl3Z2V5QnNZV0psYkRvZ1hDSkpibkIxZEZ3aUxDQndiR0ZqWldodmJHUmxjam9nWENKSmJuQjFkQ0J2WW1wbFkzUWdLR0ZqWTJWemMybGliR1VnWVhNZ0pHbHVjSFYwS1Z3aUlIMHBYRzRnSUVCcGJuQjFkQ2g3SUdoaGJtUnNaVG9nWENKcGJuQjFkRndpSUgwcFhHNGdJR2x1Y0hWMElUb2dkVzVyYm05M2JqdGNibHh1SUNCQWNtVnhkV2x5WldRb0tWeHVJQ0JBZFdsbGJHVnRaVzUwS0Z3aWFXNXdkWFJjSWl3Z2V5QnNZV0psYkRvZ1hDSlNaWE4xYkhSY0lpd2djR3hoWTJWb2IyeGtaWEk2SUZ3aVEyOWtaU0JsZUdWamRYUnBiMjRnY21WemRXeDBYQ0lnZlNsY2JpQWdRRzkxZEhCMWRDaDdJR2hoYm1Sc1pUb2dYQ0p5WlhOMWJIUmNJaUI5S1Z4dUlDQnlaWE4xYkhRaE9pQjFibXR1YjNkdU8xeHVmVnh1WEc0dktpcGNiaUFxSUVGc2JDQmlkV2xzZEMxcGJpQm1iRzkzTFdOdmJuUnliMndnYm05a1pTQmpiMjV6ZEhKMVkzUnZjbk11WEc0Z0tpOWNibVY0Y0c5eWRDQmpiMjV6ZENCSFVrRlFTRjlHVEU5WFgwTlBUbFJTVDB4ZlRrOUVSVk1nUFNCYlhHNGdJRWxtUm14dmQwNXZaR1VzWEc0Z0lGTjNhWFJqYUVac2IzZE9iMlJsTEZ4dUlDQlFZWEpoYkd4bGJFWnNiM2RPYjJSbExGeHVJQ0JOWlhKblpVWnNiM2RPYjJSbExGeHVJQ0JOWVhCR2JHOTNUbTlrWlN4Y2JpQWdSR1ZzWVhsR2JHOTNUbTlrWlN4Y2JpQWdSWEp5YjNKQ2IzVnVaR0Z5ZVVac2IzZE9iMlJsTEZ4dUlDQklkVzFoYmtGd2NISnZkbUZzUm14dmQwNXZaR1VzWEc0Z0lGSmxkSFZ5Ymtac2IzZE9iMlJsTEZ4dUlDQkRiMlJsUm14dmQwNXZaR1VzWEc1ZElHRnpJR052Ym5OME8xeHVJbDE5Il19