terraconstructs 0.2.4 → 0.2.6

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 (412) hide show
  1. package/.jsii +3099 -2917
  2. package/CLAUDE.md +6 -6
  3. package/README.md +1 -1
  4. package/lib/asset-staging.js +3 -3
  5. package/lib/aws/arn.js +5 -5
  6. package/lib/aws/aws-asset-manager.js +9 -9
  7. package/lib/aws/aws-construct.js +1 -1
  8. package/lib/aws/aws-stack.d.ts +19 -4
  9. package/lib/aws/aws-stack.js +43 -18
  10. package/lib/aws/aws-tags.d.ts +1 -1
  11. package/lib/aws/aws-tags.js +5 -5
  12. package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
  13. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  14. package/lib/aws/cloudwatch/actions/lambda.js +2 -2
  15. package/lib/aws/cloudwatch/actions/sns.js +1 -1
  16. package/lib/aws/cloudwatch/actions/ssm.js +2 -2
  17. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  18. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  19. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  20. package/lib/aws/cloudwatch/alarm.d.ts +1 -1
  21. package/lib/aws/cloudwatch/alarm.js +10 -10
  22. package/lib/aws/cloudwatch/composite-alarm.d.ts +1 -1
  23. package/lib/aws/cloudwatch/composite-alarm.js +7 -7
  24. package/lib/aws/cloudwatch/dashboard.d.ts +1 -1
  25. package/lib/aws/cloudwatch/dashboard.js +7 -7
  26. package/lib/aws/cloudwatch/data-protection-policy.d.ts +1 -1
  27. package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
  28. package/lib/aws/cloudwatch/graph.js +8 -8
  29. package/lib/aws/cloudwatch/layout.js +3 -3
  30. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  31. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  32. package/lib/aws/cloudwatch/log-group.d.ts +1 -1
  33. package/lib/aws/cloudwatch/log-group.js +7 -7
  34. package/lib/aws/cloudwatch/log-query.js +1 -1
  35. package/lib/aws/cloudwatch/log-stream.d.ts +1 -1
  36. package/lib/aws/cloudwatch/log-stream.js +3 -3
  37. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/metric-filter.js +3 -3
  39. package/lib/aws/cloudwatch/metric.js +6 -6
  40. package/lib/aws/cloudwatch/pattern.js +3 -3
  41. package/lib/aws/cloudwatch/policy.d.ts +1 -1
  42. package/lib/aws/cloudwatch/policy.js +3 -3
  43. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +1 -1
  44. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +1 -1
  45. package/lib/aws/cloudwatch/private/env-tokens.js +6 -6
  46. package/lib/aws/cloudwatch/query-definition.d.ts +1 -1
  47. package/lib/aws/cloudwatch/query-definition.js +4 -4
  48. package/lib/aws/cloudwatch/stats.js +1 -1
  49. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  50. package/lib/aws/cloudwatch/subscription-filter.js +6 -6
  51. package/lib/aws/cloudwatch/text.js +1 -1
  52. package/lib/aws/cloudwatch/variable.js +3 -3
  53. package/lib/aws/cloudwatch/widget.js +1 -1
  54. package/lib/aws/compute/access-log.d.ts +1 -1
  55. package/lib/aws/compute/access-log.js +5 -5
  56. package/lib/aws/compute/activity.d.ts +1 -1
  57. package/lib/aws/compute/activity.js +5 -5
  58. package/lib/aws/compute/alb/application-listener-action.d.ts +1 -1
  59. package/lib/aws/compute/alb/application-listener-action.js +5 -5
  60. package/lib/aws/compute/alb/application-listener-certificate.js +3 -3
  61. package/lib/aws/compute/alb/application-listener-rule.js +9 -9
  62. package/lib/aws/compute/alb/application-listener.js +5 -5
  63. package/lib/aws/compute/alb/application-load-balancer.js +8 -8
  64. package/lib/aws/compute/alb/application-target-group.js +7 -7
  65. package/lib/aws/compute/alb/conditions.js +3 -3
  66. package/lib/aws/compute/alb/trust-store-revocation.js +3 -3
  67. package/lib/aws/compute/alb/trust-store.js +7 -7
  68. package/lib/aws/compute/api-definition.js +9 -9
  69. package/lib/aws/compute/api-key.js +6 -6
  70. package/lib/aws/compute/architecture.js +1 -1
  71. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +1 -1
  72. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +6 -6
  73. package/lib/aws/compute/authorizer.js +1 -1
  74. package/lib/aws/compute/authorizers/identity-source.js +1 -1
  75. package/lib/aws/compute/authorizers/lambda.d.ts +1 -1
  76. package/lib/aws/compute/authorizers/lambda.js +6 -6
  77. package/lib/aws/compute/base-path-mapping.js +5 -5
  78. package/lib/aws/compute/base-scalable-attribute.js +1 -1
  79. package/lib/aws/compute/bastion-host.js +4 -4
  80. package/lib/aws/compute/chain.js +1 -1
  81. package/lib/aws/compute/client-vpn-authorization-rule.js +3 -3
  82. package/lib/aws/compute/client-vpn-endpoint.d.ts +1 -1
  83. package/lib/aws/compute/client-vpn-endpoint.js +9 -9
  84. package/lib/aws/compute/client-vpn-route.d.ts +1 -1
  85. package/lib/aws/compute/client-vpn-route.js +4 -4
  86. package/lib/aws/compute/code.d.ts +3 -3
  87. package/lib/aws/compute/code.js +15 -15
  88. package/lib/aws/compute/condition.js +1 -1
  89. package/lib/aws/compute/connections.js +1 -1
  90. package/lib/aws/compute/cors.js +1 -1
  91. package/lib/aws/compute/deployment.js +5 -5
  92. package/lib/aws/compute/domain-name.js +5 -5
  93. package/lib/aws/compute/event-invoke-config.d.ts +1 -1
  94. package/lib/aws/compute/event-invoke-config.js +3 -3
  95. package/lib/aws/compute/event-source-filter.js +2 -2
  96. package/lib/aws/compute/event-source-mapping.js +7 -7
  97. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  98. package/lib/aws/compute/event-sources/s3.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  100. package/lib/aws/compute/event-sources/sqs.js +5 -5
  101. package/lib/aws/compute/fields.d.ts +1 -1
  102. package/lib/aws/compute/fields.js +12 -12
  103. package/lib/aws/compute/function-alias.d.ts +1 -1
  104. package/lib/aws/compute/function-alias.js +3 -3
  105. package/lib/aws/compute/function-base.d.ts +1 -1
  106. package/lib/aws/compute/function-base.js +10 -9
  107. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  108. package/lib/aws/compute/function-destinations/function.js +1 -1
  109. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  110. package/lib/aws/compute/function-nodejs/bundling.js +6 -6
  111. package/lib/aws/compute/function-nodejs/function.js +4 -4
  112. package/lib/aws/compute/function-url.d.ts +1 -1
  113. package/lib/aws/compute/function-url.js +3 -3
  114. package/lib/aws/compute/function-vpc-config.generated.d.ts +5 -5
  115. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  116. package/lib/aws/compute/function.d.ts +2 -2
  117. package/lib/aws/compute/function.js +9 -9
  118. package/lib/aws/compute/gateway-response.d.ts +1 -1
  119. package/lib/aws/compute/gateway-response.js +4 -4
  120. package/lib/aws/compute/handler.js +1 -1
  121. package/lib/aws/compute/instance-types.js +1 -1
  122. package/lib/aws/compute/instance.d.ts +1 -1
  123. package/lib/aws/compute/instance.js +9 -9
  124. package/lib/aws/compute/integration.js +4 -4
  125. package/lib/aws/compute/integrations/aws.js +3 -3
  126. package/lib/aws/compute/integrations/http.js +1 -1
  127. package/lib/aws/compute/integrations/lambda.js +5 -5
  128. package/lib/aws/compute/integrations/mock.js +1 -1
  129. package/lib/aws/compute/integrations/stepfunctions.js +4 -4
  130. package/lib/aws/compute/ip-addresses.d.ts +1 -1
  131. package/lib/aws/compute/ip-addresses.js +10 -10
  132. package/lib/aws/compute/ipam.d.ts +1 -1
  133. package/lib/aws/compute/ipam.js +5 -5
  134. package/lib/aws/compute/key-pair.d.ts +1 -1
  135. package/lib/aws/compute/key-pair.js +6 -6
  136. package/lib/aws/compute/lambda-api.js +1 -1
  137. package/lib/aws/compute/launch-template.d.ts +1 -1
  138. package/lib/aws/compute/launch-template.js +12 -12
  139. package/lib/aws/compute/lb-shared/base-listener.js +9 -9
  140. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +2 -2
  141. package/lib/aws/compute/lb-shared/base-load-balancer.js +12 -12
  142. package/lib/aws/compute/lb-shared/base-target-group.d.ts +1 -1
  143. package/lib/aws/compute/lb-shared/base-target-group.js +15 -15
  144. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +34 -34
  145. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
  146. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +11 -6
  147. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
  148. package/lib/aws/compute/lb-shared/listener-action.d.ts +1 -1
  149. package/lib/aws/compute/lb-shared/listener-action.js +1 -1
  150. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  151. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  152. package/lib/aws/compute/lb-shared/util.js +5 -5
  153. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  154. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  155. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  156. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  157. package/lib/aws/compute/load-balancer.d.ts +1 -1
  158. package/lib/aws/compute/load-balancer.js +8 -8
  159. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  160. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  161. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  162. package/lib/aws/compute/machine-image/common.js +1 -1
  163. package/lib/aws/compute/machine-image/machine-image.js +10 -10
  164. package/lib/aws/compute/method.js +6 -6
  165. package/lib/aws/compute/model.js +5 -5
  166. package/lib/aws/compute/nat.js +10 -10
  167. package/lib/aws/compute/network-acl-types.js +2 -2
  168. package/lib/aws/compute/network-acl.d.ts +1 -1
  169. package/lib/aws/compute/network-acl.js +5 -5
  170. package/lib/aws/compute/nlb/network-listener-action.d.ts +1 -1
  171. package/lib/aws/compute/nlb/network-listener-action.js +2 -2
  172. package/lib/aws/compute/nlb/network-listener-certificate.js +2 -2
  173. package/lib/aws/compute/nlb/network-listener.js +5 -5
  174. package/lib/aws/compute/nlb/network-load-balancer.js +6 -6
  175. package/lib/aws/compute/nlb/network-target-group.js +4 -4
  176. package/lib/aws/compute/peer.js +7 -7
  177. package/lib/aws/compute/placement-group.d.ts +1 -1
  178. package/lib/aws/compute/placement-group.js +3 -3
  179. package/lib/aws/compute/port.js +5 -5
  180. package/lib/aws/compute/prefix-list.d.ts +1 -1
  181. package/lib/aws/compute/prefix-list.js +5 -5
  182. package/lib/aws/compute/private/context-stub.js +7 -7
  183. package/lib/aws/compute/private/ebs-util.d.ts +1 -1
  184. package/lib/aws/compute/private/ebs-util.js +3 -3
  185. package/lib/aws/compute/private/json-path.d.ts +1 -1
  186. package/lib/aws/compute/private/json-path.js +8 -8
  187. package/lib/aws/compute/requestvalidator.js +3 -3
  188. package/lib/aws/compute/resource.js +5 -5
  189. package/lib/aws/compute/restapi.d.ts +1 -1
  190. package/lib/aws/compute/restapi.js +11 -11
  191. package/lib/aws/compute/route.d.ts +1 -1
  192. package/lib/aws/compute/route.js +12 -12
  193. package/lib/aws/compute/runtime.js +3 -3
  194. package/lib/aws/compute/scalable-target.d.ts +1 -1
  195. package/lib/aws/compute/scalable-target.js +3 -3
  196. package/lib/aws/compute/schedule.js +4 -4
  197. package/lib/aws/compute/security-group.js +12 -12
  198. package/lib/aws/compute/stage.d.ts +1 -1
  199. package/lib/aws/compute/stage.js +6 -6
  200. package/lib/aws/compute/state-graph.js +1 -1
  201. package/lib/aws/compute/state-machine-fragment.js +1 -1
  202. package/lib/aws/compute/state-machine.d.ts +2 -2
  203. package/lib/aws/compute/state-machine.js +8 -8
  204. package/lib/aws/compute/states/choice.js +1 -1
  205. package/lib/aws/compute/states/custom-state.js +5 -5
  206. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  207. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  208. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  209. package/lib/aws/compute/states/distributed-map.js +4 -4
  210. package/lib/aws/compute/states/fail.js +4 -4
  211. package/lib/aws/compute/states/map-base.js +4 -4
  212. package/lib/aws/compute/states/map.js +1 -1
  213. package/lib/aws/compute/states/parallel.js +1 -1
  214. package/lib/aws/compute/states/pass.js +2 -2
  215. package/lib/aws/compute/states/state.js +4 -4
  216. package/lib/aws/compute/states/succeed.js +1 -1
  217. package/lib/aws/compute/states/task-base.js +2 -2
  218. package/lib/aws/compute/states/task.js +1 -1
  219. package/lib/aws/compute/states/wait.js +2 -2
  220. package/lib/aws/compute/step-scaling-action.js +5 -5
  221. package/lib/aws/compute/step-scaling-policy.js +7 -7
  222. package/lib/aws/compute/stepfunctions-api.js +2 -2
  223. package/lib/aws/compute/subnet-v2.d.ts +1 -1
  224. package/lib/aws/compute/subnet-v2.js +5 -5
  225. package/lib/aws/compute/subnet.js +4 -4
  226. package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
  227. package/lib/aws/compute/task-credentials.js +1 -1
  228. package/lib/aws/compute/task-input.js +1 -1
  229. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +5 -5
  230. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  231. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  232. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  233. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  234. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  235. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  236. package/lib/aws/compute/types.js +1 -1
  237. package/lib/aws/compute/usage-plan.js +5 -5
  238. package/lib/aws/compute/user-data.d.ts +2 -2
  239. package/lib/aws/compute/user-data.js +10 -10
  240. package/lib/aws/compute/volume.d.ts +1 -1
  241. package/lib/aws/compute/volume.js +7 -7
  242. package/lib/aws/compute/vpc-endpoint-service.js +3 -3
  243. package/lib/aws/compute/vpc-endpoint.d.ts +1 -1
  244. package/lib/aws/compute/vpc-endpoint.js +13 -13
  245. package/lib/aws/compute/vpc-flow-logs.d.ts +1 -1
  246. package/lib/aws/compute/vpc-flow-logs.js +8 -8
  247. package/lib/aws/compute/vpc-link.js +5 -5
  248. package/lib/aws/compute/vpc-v2-base.js +6 -6
  249. package/lib/aws/compute/vpc-v2.d.ts +2 -2
  250. package/lib/aws/compute/vpc-v2.js +4 -4
  251. package/lib/aws/compute/vpc.d.ts +1 -1
  252. package/lib/aws/compute/vpc.js +24 -22
  253. package/lib/aws/compute/vpn.js +8 -8
  254. package/lib/aws/context-provider.js +4 -4
  255. package/lib/aws/edge/certificate.d.ts +1 -1
  256. package/lib/aws/edge/certificate.js +6 -6
  257. package/lib/aws/edge/distribution.d.ts +1 -1
  258. package/lib/aws/edge/distribution.js +9 -9
  259. package/lib/aws/edge/dns-alias-record-targets.d.ts +1 -1
  260. package/lib/aws/edge/dns-alias-record-targets.js +7 -7
  261. package/lib/aws/edge/dns-record.d.ts +1 -1
  262. package/lib/aws/edge/dns-record.js +19 -19
  263. package/lib/aws/edge/dns-zone.d.ts +2 -2
  264. package/lib/aws/edge/dns-zone.js +5 -5
  265. package/lib/aws/edge/function.d.ts +1 -1
  266. package/lib/aws/edge/function.js +4 -4
  267. package/lib/aws/edge/key-value-store.d.ts +1 -1
  268. package/lib/aws/edge/key-value-store.js +6 -6
  269. package/lib/aws/edge/origin.d.ts +1 -1
  270. package/lib/aws/edge/origin.js +6 -6
  271. package/lib/aws/edge/response-headers-policy.d.ts +1 -1
  272. package/lib/aws/edge/response-headers-policy.js +6 -6
  273. package/lib/aws/encryption/alias.d.ts +1 -1
  274. package/lib/aws/encryption/alias.js +8 -8
  275. package/lib/aws/encryption/key.d.ts +1 -1
  276. package/lib/aws/encryption/key.js +6 -6
  277. package/lib/aws/encryption/via-service-principal.js +1 -1
  278. package/lib/aws/iam/grant.js +3 -3
  279. package/lib/aws/iam/group.js +5 -5
  280. package/lib/aws/iam/instance-profile.d.ts +1 -1
  281. package/lib/aws/iam/instance-profile.js +3 -3
  282. package/lib/aws/iam/managed-policy.d.ts +1 -1
  283. package/lib/aws/iam/managed-policy.js +3 -3
  284. package/lib/aws/iam/oidc-provider.d.ts +1 -1
  285. package/lib/aws/iam/oidc-provider.js +3 -3
  286. package/lib/aws/iam/policy-document-config.generated.d.ts +9 -9
  287. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  288. package/lib/aws/iam/policy-document.d.ts +1 -1
  289. package/lib/aws/iam/policy-document.js +5 -5
  290. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  291. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  292. package/lib/aws/iam/policy-statement.d.ts +1 -1
  293. package/lib/aws/iam/policy-statement.js +8 -8
  294. package/lib/aws/iam/policy.js +3 -3
  295. package/lib/aws/iam/principals.js +25 -25
  296. package/lib/aws/iam/private/imported-role.js +3 -3
  297. package/lib/aws/iam/private/postprocess-policy-document.d.ts +1 -1
  298. package/lib/aws/iam/private/postprocess-policy-document.js +1 -1
  299. package/lib/aws/iam/private/util.d.ts +1 -1
  300. package/lib/aws/iam/private/util.js +5 -5
  301. package/lib/aws/iam/role.d.ts +1 -1
  302. package/lib/aws/iam/role.js +6 -6
  303. package/lib/aws/iam/saml-provider.d.ts +1 -1
  304. package/lib/aws/iam/saml-provider.js +6 -6
  305. package/lib/aws/iam/unknown-principal.js +4 -4
  306. package/lib/aws/iam/user.js +3 -3
  307. package/lib/aws/network/network.d.ts +1 -1
  308. package/lib/aws/network/network.js +1 -1
  309. package/lib/aws/network/simple-ipv4-vpc.js +12 -12
  310. package/lib/aws/network/subnet-group.d.ts +1 -1
  311. package/lib/aws/network/subnet-group.js +5 -5
  312. package/lib/aws/network/subnet.d.ts +1 -1
  313. package/lib/aws/network/subnet.js +6 -6
  314. package/lib/aws/notify/archive.d.ts +1 -1
  315. package/lib/aws/notify/archive.js +3 -3
  316. package/lib/aws/notify/connection.d.ts +1 -1
  317. package/lib/aws/notify/connection.js +5 -5
  318. package/lib/aws/notify/event-bus.d.ts +1 -1
  319. package/lib/aws/notify/event-bus.js +10 -10
  320. package/lib/aws/notify/event-pattern.d.ts +1 -1
  321. package/lib/aws/notify/event-pattern.js +5 -5
  322. package/lib/aws/notify/input.d.ts +1 -1
  323. package/lib/aws/notify/input.js +12 -12
  324. package/lib/aws/notify/kinesis-stream.d.ts +1 -1
  325. package/lib/aws/notify/kinesis-stream.js +7 -7
  326. package/lib/aws/notify/notification-rule.js +8 -8
  327. package/lib/aws/notify/policy.js +3 -3
  328. package/lib/aws/notify/queue-base.js +1 -1
  329. package/lib/aws/notify/queue-policy.js +3 -3
  330. package/lib/aws/notify/queue.d.ts +1 -1
  331. package/lib/aws/notify/queue.js +8 -8
  332. package/lib/aws/notify/resource-policy.js +3 -3
  333. package/lib/aws/notify/rule.d.ts +1 -1
  334. package/lib/aws/notify/rule.js +6 -6
  335. package/lib/aws/notify/schedule.js +4 -4
  336. package/lib/aws/notify/sns-grants.generated.js +1 -1
  337. package/lib/aws/notify/sqs-grants.generated.js +1 -1
  338. package/lib/aws/notify/subscription-filter.js +1 -1
  339. package/lib/aws/notify/subscription.js +6 -6
  340. package/lib/aws/notify/subscriptions/email.js +1 -1
  341. package/lib/aws/notify/subscriptions/lambda.js +4 -4
  342. package/lib/aws/notify/subscriptions/sms.js +1 -1
  343. package/lib/aws/notify/subscriptions/sqs.js +4 -4
  344. package/lib/aws/notify/subscriptions/url.js +4 -4
  345. package/lib/aws/notify/target.d.ts +1 -1
  346. package/lib/aws/notify/target.js +1 -1
  347. package/lib/aws/notify/targets/event-bus.js +1 -1
  348. package/lib/aws/notify/targets/function.js +1 -1
  349. package/lib/aws/notify/targets/log-group.js +2 -2
  350. package/lib/aws/notify/targets/sqs.js +1 -1
  351. package/lib/aws/notify/targets/state-machine.js +1 -1
  352. package/lib/aws/notify/targets/util.js +3 -3
  353. package/lib/aws/notify/topic-base.js +4 -4
  354. package/lib/aws/notify/topic.js +7 -7
  355. package/lib/aws/provider-config.generated.d.ts +42 -36
  356. package/lib/aws/provider-config.generated.js +1 -1
  357. package/lib/aws/region-lookup.js +4 -4
  358. package/lib/aws/storage/assets/image-asset.js +8 -8
  359. package/lib/aws/storage/assets/s3.js +1 -1
  360. package/lib/aws/storage/auth-token.js +2 -2
  361. package/lib/aws/storage/billing.js +1 -1
  362. package/lib/aws/storage/bucket-notifications.d.ts +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +8 -8
  364. package/lib/aws/storage/bucket-policy.d.ts +1 -1
  365. package/lib/aws/storage/bucket-policy.js +3 -3
  366. package/lib/aws/storage/bucket-source.d.ts +1 -1
  367. package/lib/aws/storage/bucket-source.js +7 -7
  368. package/lib/aws/storage/bucket.d.ts +1 -1
  369. package/lib/aws/storage/bucket.js +8 -8
  370. package/lib/aws/storage/capacity.js +1 -1
  371. package/lib/aws/storage/cors-config.generated.d.ts +5 -5
  372. package/lib/aws/storage/cors-config.generated.js +1 -1
  373. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  374. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  375. package/lib/aws/storage/ecr-repository.js +11 -11
  376. package/lib/aws/storage/encryption.d.ts +1 -1
  377. package/lib/aws/storage/encryption.js +5 -5
  378. package/lib/aws/storage/lifecycle-config.generated.d.ts +9 -9
  379. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  380. package/lib/aws/storage/notification-targets/function.js +2 -2
  381. package/lib/aws/storage/notification-targets/queue.js +4 -4
  382. package/lib/aws/storage/origin-access-identity.d.ts +2 -2
  383. package/lib/aws/storage/origin-access-identity.js +3 -3
  384. package/lib/aws/storage/parameter-util.js +5 -5
  385. package/lib/aws/storage/parameter.d.ts +2 -2
  386. package/lib/aws/storage/parameter.js +16 -16
  387. package/lib/aws/storage/stream-grants.js +1 -1
  388. package/lib/aws/storage/table-grants.js +1 -1
  389. package/lib/aws/storage/table.d.ts +1 -1
  390. package/lib/aws/storage/table.js +10 -10
  391. package/lib/aws/storage/website-config.generated.d.ts +8 -8
  392. package/lib/aws/storage/website-config.generated.js +1 -1
  393. package/lib/bundling.js +5 -5
  394. package/lib/construct-base.d.ts +1 -1
  395. package/lib/construct-base.js +10 -10
  396. package/lib/duration.js +9 -9
  397. package/lib/errors.js +1 -1
  398. package/lib/expiration.js +1 -1
  399. package/lib/fs/ignore.js +4 -4
  400. package/lib/fs/index.js +1 -1
  401. package/lib/private/terraform-dependables-aspect.d.ts +1 -1
  402. package/lib/private/terraform-dependables-aspect.js +6 -6
  403. package/lib/private/unique-resource-name.js +3 -3
  404. package/lib/size.js +6 -6
  405. package/lib/stack-base.d.ts +2 -2
  406. package/lib/stack-base.js +16 -16
  407. package/lib/terra-func.d.ts +1 -1
  408. package/lib/terra-func.js +18 -18
  409. package/lib/time-zone.js +1 -1
  410. package/lib/token.js +5 -5
  411. package/package.json +17 -17
  412. package/setup.js +2 -2
@@ -5,9 +5,9 @@ exports.AwsAssetManager = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const fs = require("node:fs");
7
7
  const path = require("node:path");
8
- const provider_aws_1 = require("@cdktf/provider-aws");
9
- const provider_docker_1 = require("@cdktf/provider-docker");
10
- const cdktf_1 = require("cdktf");
8
+ const provider_aws_1 = require("@cdktn/provider-aws");
9
+ const provider_docker_1 = require("@cdktn/provider-docker");
10
+ const cdktn_1 = require("cdktn");
11
11
  const mime = require("mime-types");
12
12
  const assets_1 = require("../assets");
13
13
  /**
@@ -54,10 +54,10 @@ class AwsAssetManager {
54
54
  id = `${id}_${i}`;
55
55
  }
56
56
  const assetStats = fs.statSync(asset.fileName);
57
- const tfAsset = new cdktf_1.TerraformAsset(this.scope, id, {
57
+ const tfAsset = new cdktn_1.TerraformAsset(this.scope, id, {
58
58
  path: asset.fileName,
59
59
  assetHash: asset.sourceHash,
60
- type: assetStats.isDirectory() ? cdktf_1.AssetType.ARCHIVE : cdktf_1.AssetType.FILE,
60
+ type: assetStats.isDirectory() ? cdktn_1.AssetType.ARCHIVE : cdktn_1.AssetType.FILE,
61
61
  });
62
62
  const s3Asset = new provider_aws_1.s3Object.S3Object(this.scope, `${id}_S3`, {
63
63
  key: objectKey,
@@ -108,10 +108,10 @@ class AwsAssetManager {
108
108
  for (let i = 0; this.scope.node.tryFindChild(id); i++) {
109
109
  id = `${id}_${i}`;
110
110
  }
111
- const tfAsset = new cdktf_1.TerraformAsset(this.scope, id, {
111
+ const tfAsset = new cdktn_1.TerraformAsset(this.scope, id, {
112
112
  path: asset.directoryName,
113
113
  assetHash: asset.sourceHash,
114
- type: cdktf_1.AssetType.DIRECTORY, // Error if not directory asset type?
114
+ type: cdktn_1.AssetType.DIRECTORY, // Error if not directory asset type?
115
115
  // auto infer type...
116
116
  // type: <auto-infer>,
117
117
  });
@@ -219,7 +219,7 @@ class AwsAssetManager {
219
219
  }
220
220
  exports.AwsAssetManager = AwsAssetManager;
221
221
  _a = JSII_RTTI_SYMBOL_1;
222
- AwsAssetManager[_a] = { fqn: "terraconstructs.aws.AwsAssetManager", version: "0.2.4" };
222
+ AwsAssetManager[_a] = { fqn: "terraconstructs.aws.AwsAssetManager", version: "0.2.6" };
223
223
  /**
224
224
  * Convert the Docker cache options to a format suitable for the buildx cacheFrom flag.
225
225
  */
@@ -241,4 +241,4 @@ function parseDockerCacheEntries(...cacheOption) {
241
241
  }
242
242
  return cacheFrom;
243
243
  }
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFzc2V0LW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXdzL2F3cy1hc3NldC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOEJBQThCO0FBQzlCLGtDQUFrQztBQUNsQyxzREFNNkI7QUFDN0IsNERBSWdDO0FBQ2hDLGlDQUllO0FBRWYsbUNBQW1DO0FBRW5DLHNDQU9tQjtBQStEbkI7Ozs7O0dBS0c7QUFDSCxNQUFhLGVBQWU7SUFXMUIsWUFDbUIsS0FBZ0IsRUFDaEIsS0FBMkI7UUFEM0IsVUFBSyxHQUFMLEtBQUssQ0FBVztRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFzQjtRQVA5Qzs7V0FFRztRQUNjLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztJQUkzRSxDQUFDO0lBRUo7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBc0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxrQ0FBa0M7UUFDbEMscUZBQXFGO1FBQ3JGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FDYixZQUFZO1lBQ1osS0FBSyxDQUFDLFVBQVU7WUFDaEIsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLDJCQUFrQixDQUFDLGFBQWE7Z0JBQ25ELENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxD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LENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQztJQUM3Qiw4RUFBOEU7SUFDOUUsS0FBSyxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztpQkFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDYixjQUFjLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7XG4gIHMzQnVja2V0LFxuICBzM09iamVjdCxcbiAgZWNyUmVwb3NpdG9yeSxcbiAgZGF0YUF3c0VjclJlcG9zaXRvcnksXG4gIGRhdGFBd3NTM0J1Y2tldCxcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIHByb3ZpZGVyIGFzIGRvY2tlclByb3ZpZGVyLFxuICBpbWFnZSBhcyBkb2NrZXJJbWFnZSxcbiAgcmVnaXN0cnlJbWFnZSBhcyBkb2NrZXJSZWdpc3RyeUltYWdlLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWRvY2tlclwiO1xuaW1wb3J0IHtcbiAgQXNzZXRUeXBlLFxuICBUZXJyYWZvcm1Bc3NldCxcbiAgLy8gcmVmLFxufSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBtaW1lIGZyb20gXCJtaW1lLXR5cGVzXCI7XG5pbXBvcnQgeyBJQXNzZXRNYW5hZ2VyIH0gZnJvbSBcIi4uL2Fzc2V0LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIERvY2tlckNhY2hlT3B0aW9uLFxuICBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24sXG4gIERvY2tlckltYWdlQXNzZXRTb3VyY2UsXG4gIEZpbGVBc3NldExvY2F0aW9uLFxuICBGaWxlQXNzZXRQYWNrYWdpbmcsXG4gIEZpbGVBc3NldFNvdXJjZSxcbn0gZnJvbSBcIi4uL2Fzc2V0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF3c0Fzc2V0TWFuYWdlck9wdGlvbnMge1xuICAvKipcbiAgICogRXhpc3RpbmcgYnVja2V0IG5hbWUgdG8gdXBsb2FkIGZpbGUgYXNzZXRzIHRvIFMzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgYnVja2V0IHdpbGwgYmUgY3JlYXRlZCBvbiBkZW1hbmQgdXNpbmcgdGhlIGdyaWRVVUlEXG4gICAqL1xuICByZWFkb25seSBidWNrZXROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogYnVja2V0UHJlZml4IHRvIHVzZSB3aGlsZSBzdG9yaW5nIFMzIEFzc2V0c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFwiXCIgKG5vIHByZWZpeClcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldFByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIFF1YWxpZmllciBmb3IgYXNzZXQgcmVzb3VyY2UgbmFtZXMgd2hlbiBjcmVhdGluZyB0aGVtIG9uIGRlbWFuZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFwiJHtHcmlkVVVJRH0tYXNzZXRzXCJcbiAgICovXG4gIHJlYWRvbmx5IHF1YWxpZmllcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFVzZSBleGlzdGluZyBFQ1IgUmVwb3NpdG9yeSBmb3IgY29udGFpbmVyIGltYWdlIGFzc2V0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIHJlcG9zaXRvcnkgd2lsbCBiZSBjcmVhdGVkIG9uIGRlbWFuZCB1c2luZyB0aGUgcHJvdmlkZWQgcXVhbGlmaWVyXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5TmFtZT86IHN0cmluZzsgLy8gVE9ETzogU3VwcG9ydCBVUkkgKyBVUkkgUGFyc2luZyBmb3IgY3Jvc3MgQWNjb3VudCB1c2FnZT9cbiAgLyoqXG4gICAqIEEgcHJlZml4IHRvIHVzZSB3aGlsZSB0YWdnaW5nIGFuZCB1cGxvYWRpbmcgRG9ja2VyIGltYWdlcyB0byBFQ1IuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgYWRkIGFueSBzZXBhcmF0b3JzIC0gdGhlIHNvdXJjZSBoYXNoIHdpbGwgYmUgYXBwZW5kZWQgdG9cbiAgICogdGhpcyBzdHJpbmcgZGlyZWN0bHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gXCJcIiAobm8gcHJlZml4KVxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyVGFnUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBBV1MgQXNzZXQgTWFuYWdlciBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IEFXUyBzdGFja3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzQXNzZXRNYW5hZ2VyUHJvcHMgZXh0ZW5kcyBBd3NBc3NldE1hbmFnZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gZm9yIGNyZWF0aW5nIEFXUyByZXNvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBJRCBmb3IgY3JlYXRpbmcgQVdTIHJlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydGl0aW9uIGZvciBjcmVhdGluZyBBV1MgcmVzb3VyY2VzXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBzdWZmaXggZm9yIHRoZSBwYXJ0aXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHVybFN1ZmZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFXUyBpbXBsZW1lbnRhdGlvbiBvZiBJQXNzZXRNYW5hZ2VyIHVzaW5nIHJhdyBUZXJyYWZvcm0gcHJvdmlkZXIgcmVzb3VyY2VzLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBieSB1c2luZyByYXcgVGVycmFmb3JtIHJlc291cmNlc1xuICogaW5zdGVhZCBvZiBMMiBjb25zdHJ1Y3RzIGxpa2UgQnVja2V0IGFuZCBSZXBvc2l0b3J5LlxuICovXG5leHBvcnQgY2xhc3MgQXdzQXNzZXRNYW5hZ2VyIGltcGxlbWVudHMgSUFzc2V0TWFuYWdlciB7XG4gIHByaXZhdGUgYnVja2V0PzogczNCdWNrZXQuUzNCdWNrZXQgfCBkYXRhQXdzUzNCdWNrZXQuRGF0YUF3c1MzQnVja2V0O1xuICBwcml2YXRlIHJlcG9zaXRvcnk/OlxuICAgIHwgZWNyUmVwb3NpdG9yeS5FY3JSZXBvc2l0b3J5XG4gICAgfCBkYXRhQXdzRWNyUmVwb3NpdG9yeS5EYXRhQXdzRWNyUmVwb3NpdG9yeTtcbiAgcHJpdmF0ZSBkb2NrZXJQcm92aWRlcj86IGRvY2tlclByb3ZpZGVyLkRvY2tlclByb3ZpZGVyO1xuICAvKipcbiAgICogTWFwIG9mIFRlcnJhZm9ybSBhc3NldHMgcmVnaXN0ZXJlZCBieSB0aGlzIG1hbmFnZXIuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVBc3NldE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBGaWxlQXNzZXRMb2NhdGlvbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2NrZXJBc3NldE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24+KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBd3NBc3NldE1hbmFnZXJQcm9wcyxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGZpbGUgYXNzZXQgYW5kIHJldHVybiBpdHMgbG9jYXRpb24gZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBhZGRGaWxlQXNzZXQoYXNzZXQ6IEZpbGVBc3NldFNvdXJjZSk6IEZpbGVBc3NldExvY2F0aW9uIHtcbiAgICBpZiAoIXRoaXMuYnVja2V0KSB7XG4gICAgICB0aGlzLmVuc3VyZUJ1Y2tldCgpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFN1cHBvcnQgZXhlY3V0YWJsZSBhc3NldCBwcm9wcz9cbiAgICAvLyB2YWxpZGF0ZUZpbGVBc3NldFNvdXJjZShhc3NldCk7XG4gICAgLy8gY29uc3QgZXh0ZW5zaW9uID0gYXNzZXQuZmlsZU5hbWUgIT0gdW5kZWZpbmVkID8gcGF0aC5leHRuYW1lKGFzc2V0LmZpbGVOYW1lKSA6IFwiXCI7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gcGF0aC5leHRuYW1lKGFzc2V0LmZpbGVOYW1lKTtcbiAgICBjb25zdCBidWNrZXRQcmVmaXggPSB0aGlzLnByb3BzLmJ1Y2tldFByZWZpeCA/PyBcIlwiO1xuICAgIGNvbnN0IG9iamVjdEtleSA9XG4gICAgICBidWNrZXRQcmVmaXggK1xuICAgICAgYXNzZXQuc291cmNlSGFzaCArXG4gICAgICAoYXNzZXQucGFja2FnaW5nID09PSBGaWxlQXNzZXRQYWNrYWdpbmcuWklQX0RJUkVDVE9SWVxuICAgICAgICA/IFwiLnppcFwiXG4gICAgICAgIDogZXh0ZW5zaW9uKTtcblxuICAgIGlmICh0aGlzLmZpbGVBc3NldE1hcC5oYXMob2JqZWN0S2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZUFzc2V0TWFwLmdldChvYmplY3RLZXkpITtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiBBV1NDREsgdXNlcyBzb3VyY2VIYXNoIGFzIHRoZSBDb25zdHJ1Y3QgSURcbiAgICAvLyBBdm9pZGVkIGhlcmUgYmVjYXVzZSBUZXJyYWZvcm1Bc3NldCBwYXRocyBhbHJlYWR5IGluY2x1ZGVzIHNvdXJjZUhhc2hcbiAgICAvLyBFbnN1cmUgdW5pcXVlIElEIGZvciB0aGUgYXNzZXQgaW4gdGhlIHNjb3BlXG4gICAgbGV0IGlkID0gXCJGaWxlQXNzZXRcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgdGhpcy5zY29wZS5ub2RlLnRyeUZpbmRDaGlsZChpZCk7IGkrKykge1xuICAgICAgaWQgPSBgJHtpZH1fJHtpfWA7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzZXRTdGF0cyA9IGZzLnN0YXRTeW5jKGFzc2V0LmZpbGVOYW1lKTtcbiAgICBjb25zdCB0ZkFzc2V0ID0gbmV3IFRlcnJhZm9ybUFzc2V0KHRoaXMuc2NvcGUsIGlkLCB7XG4gICAgICBwYXRoOiBhc3NldC5maWxlTmFtZSxcbiAgICAgIGFzc2V0SGFzaDogYXNzZXQuc291cmNlSGFzaCxcbiAgICAgIHR5cGU6IGFzc2V0U3RhdHMuaXNEaXJlY3RvcnkoKSA/IEFzc2V0VHlwZS5BUkNISVZFIDogQXNzZXRUeXBlLkZJTEUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzM0Fzc2V0ID0gbmV3IHMzT2JqZWN0LlMzT2JqZWN0KHRoaXMuc2NvcGUsIGAke2lkfV9TM2AsIHtcbiAgICAgIGtleTogb2JqZWN0S2V5LFxuICAgICAgYnVja2V0OiB0aGlzLmJ1Y2tldCEuYnVja2V0LFxuICAgICAgc291cmNlOiB0ZkFzc2V0LnBhdGgsXG4gICAgICBzb3VyY2VIYXNoOiBhc3NldC5zb3VyY2VIYXNoLFxuICAgICAgY29udGVudFR5cGU6IG1pbWUuY29udGVudFR5cGUoZXh0ZW5zaW9uKSB8fCB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBodHRwVXJsID0gdGhpcy5idWlsZFMzVXJsKHMzQXNzZXQua2V5KTtcbiAgICAvLyBTdG9yZSB0aGUgYXNzZXQgbG9jYXRpb24gZGV0YWlsc1xuICAgIGNvbnN0IGxvY2F0aW9uOiBGaWxlQXNzZXRMb2NhdGlvbiA9IHtcbiAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0IS5idWNrZXQsXG4gICAgICBvYmplY3RLZXk6IHMzQXNzZXQua2V5LFxuICAgICAgaHR0cFVybCxcbiAgICAgIHMzVXJsOiBodHRwVXJsLFxuICAgICAgczNPYmplY3RVcmw6IHRoaXMuYnVpbGRTM09iamVjdFVybChzM0Fzc2V0LmtleSksXG4gICAgfTtcbiAgICAvLyBTdG9yZSBpbiB0aGUgbWFwIGZvciBmdXR1cmUgbG9va3Vwc1xuICAgIHRoaXMuZmlsZUFzc2V0TWFwLnNldChvYmplY3RLZXksIGxvY2F0aW9uKTtcbiAgICAvLyBSZXR1cm4gdGhlIGFzc2V0IGxvY2F0aW9uIGRldGFpbHNcbiAgICByZXR1cm4gbG9jYXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBEb2NrZXIgaW1hZ2UgYXNzZXQgYW5kIHJldHVybiBpdHMgbG9jYXRpb24gZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBhZGREb2NrZXJJbWFnZUFzc2V0KFxuICAgIGFzc2V0OiBEb2NrZXJJbWFnZUFzc2V0U291cmNlLFxuICApOiBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24ge1xuICAgIC8vIHZhbGlkYXRlRG9ja2VySW1hZ2VBc3NldFNvdXJjZShhc3NldCk7XG4gICAgaWYgKCF0aGlzLmRvY2tlclByb3ZpZGVyKSB7XG4gICAgICB0aGlzLmVuc3VyZURvY2tlclByb3ZpZGVyKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5yZXBvc2l0b3J5KSB7XG4gICAgICB0aGlzLmVuc3VyZVJlcG9zaXRvcnkoKTtcbiAgICB9XG4gICAgLy8gRW5zdXJlIGRlcGVuZGVuY3kgb24gZWNyIHJlcG8gYnkgdXNpbmcgdG9rZW4gaW5zdGVhZCBvZiB0aGlzLmJ1aWxkUmVwb3NpdG9yeVVyaSgpO1xuICAgIGNvbnN0IHJlcG9zaXRvcnlVcmkgPSB0aGlzLnJlcG9zaXRvcnkhLnJlcG9zaXRvcnlVcmw7XG5cbiAgICBjb25zdCBkb2NrZXJUYWdQcmVmaXggPSB0aGlzLnByb3BzLmRvY2tlclRhZ1ByZWZpeCA/PyBcIlwiO1xuICAgIGNvbnN0IGltYWdlVGFnID0gYCR7ZG9ja2VyVGFnUHJlZml4fSR7YXNzZXQuc291cmNlSGFzaH1gO1xuICAgIGNvbnN0IGltYWdlVXJpID0gYCR7cmVwb3NpdG9yeVVyaX06JHtpbWFnZVRhZ31gO1xuXG4gICAgaWYgKHRoaXMuZG9ja2VyQXNzZXRNYXAuaGFzKGltYWdlVXJpKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9ja2VyQXNzZXRNYXAuZ2V0KGltYWdlVXJpKSE7XG4gICAgfVxuXG4gICAgLy8gTk9URTogQVdTQ0RLIHVzZXMgc291cmNlSGFzaCBhcyB0aGUgQ29uc3RydWN0IElEXG4gICAgLy8gY29uc3Qgc291cmNlSGFzaCA9IGFzc2V0LmFzc2V0TmFtZVxuICAgIC8vICAgPyBgJHthc3NldC5hc3NldE5hbWV9LSR7YXNzZXQuc291cmNlSGFzaH1gXG4gICAgLy8gICA6IGFzc2V0LnNvdXJjZUhhc2g7XG5cbiAgICAvLyBFbnN1cmUgdW5pcXVlIElEIGZvciB0aGUgYXNzZXQgaW4gdGhlIHNjb3BlXG4gICAgbGV0IGlkID0gXCJEb2NrZXJBc3NldFwiO1xuICAgIGZvciAobGV0IGkgPSAwOyB0aGlzLnNjb3BlLm5vZGUudHJ5RmluZENoaWxkKGlkKTsgaSsrKSB7XG4gICAgICBpZCA9IGAke2lkfV8ke2l9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0ZkFzc2V0ID0gbmV3IFRlcnJhZm9ybUFzc2V0KHRoaXMuc2NvcGUsIGlkLCB7XG4gICAgICBwYXRoOiBhc3NldC5kaXJlY3RvcnlOYW1lLFxuICAgICAgYXNzZXRIYXNoOiBhc3NldC5zb3VyY2VIYXNoLFxuICAgICAgdHlwZTogQXNzZXRUeXBlLkRJUkVDVE9SWSwgLy8gRXJyb3IgaWYgbm90IGRpcmVjdG9yeSBhc3NldCB0eXBlP1xuICAgICAgLy8gYXV0byBpbmZlciB0eXBlLi4uXG4gICAgICAvLyB0eXBlOiA8YXV0by1pbmZlcj4sXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbWFnZUFzc2V0ID0gbmV3IGRvY2tlckltYWdlLkltYWdlKHRoaXMuc2NvcGUsIGAke2lkfV9JbWFnZWAsIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmV1endlcmtlci90ZXJyYWZvcm0tcHJvdmlkZXItZG9ja2VyL2Jsb2IvdjMuNi4yL2ludGVybmFsL3Byb3ZpZGVyL2RvY2tlcl9idWlsZHhfYnVpbGQuZ28jTDIxNlxuICAgICAgbmFtZTogaW1hZ2VVcmksXG4gICAgICBidWlsZEF0dHJpYnV0ZToge1xuICAgICAgICBjb250ZXh0OiB0ZkFzc2V0LnBhdGgsIC8vIGFzc2V0LmRpcmVjdG9yeU5hbWUsIC8vIHJlcXVpcmVkXG4gICAgICAgIC8vIFRPRE86IFZlcmlmeSBpZiAke3BhdGguY3dkfSBpcyBuZWVkZWQgZ2l2ZW4gZGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZT9cbiAgICAgICAgLy8gcGF0aC5qb2luKFxuICAgICAgICAvLyAgIFRva2VuLmFzU3RyaW5nKHJlZihcInBhdGguY3dkXCIpKSxcbiAgICAgICAgLy8gICBhc3NldC5kaXJlY3RvcnlOYW1lLFxuICAgICAgICAvLyApLFxuICAgICAgICBkb2NrZXJmaWxlOiBhc3NldC5kb2NrZXJGaWxlLFxuICAgICAgICBidWlsZEFyZ3M6IGFzc2V0LmRvY2tlckJ1aWxkQXJncyxcbiAgICAgICAgc2VjcmV0czogYXNzZXQuZG9ja2VyQnVpbGRTZWNyZXRzXG4gICAgICAgICAgPyBPYmplY3QuZW50cmllcyhhc3NldC5kb2NrZXJCdWlsZFNlY3JldHMpLm1hcCgoW2ssIHZdKSA9PiAoe1xuICAgICAgICAgICAgICBpZDogayxcbiAgICAgICAgICAgICAgLy8gVE9ETzogZW52IHNlY3JldHM/XG4gICAgICAgICAgICAgIHNyYzogdixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBuZXR3b3JrTW9kZTogYXNzZXQubmV0d29ya01vZGUsXG4gICAgICAgIHBsYXRmb3JtOiBhc3NldC5wbGF0Zm9ybSxcbiAgICAgICAgdGFyZ2V0OiBhc3NldC5kb2NrZXJCdWlsZFRhcmdldCxcbiAgICAgICAgY2FjaGVGcm9tOiBhc3NldC5kb2NrZXJDYWNoZUZyb21cbiAgICAgICAgICA/IHBhcnNlRG9ja2VyQ2FjaGVFbnRyaWVzKC4uLmFzc2V0LmRvY2tlckNhY2hlRnJvbSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgbm9DYWNoZTogYXNzZXQuZG9ja2VyQ2FjaGVEaXNhYmxlZCxcbiAgICAgICAgLy8gRW5hYmxlIGJ1aWxkeCAoY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgdWxpbWl0cylcbiAgICAgICAgYnVpbGRlcjogXCJkZWZhdWx0XCIsXG4gICAgICAgIC8vIFRPRE86IG5vIFNTSCBTdXBwb3J0PyxcbiAgICAgICAgLy8gc3NoOiBhc3NldC5kb2NrZXJCdWlsZFNTSCxcbiAgICAgICAgLy8gVE9ETzogbm8gY2FjaGVUbyBzdXBwb3J0P1xuICAgICAgICAvLyBjYWNoZVRvOiBhc3NldC5kb2NrZXJDYWNoZVRvXG4gICAgICAgIC8vICAgPyBwYXJzZUNhY2hlRW50cmllcyhhc3NldC5kb2NrZXJDYWNoZVRvKVxuICAgICAgICAvLyAgIDogdW5kZWZpbmVkLFxuICAgICAgICAvLyBUT0RPOiBubyBkb2NrZXJPdXRwdXRzIHN1cHBvcnQ/XG4gICAgICAgIC8vIG91dHB1dHM6IGFzc2V0LmRvY2tlck91dHB1dHMsXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgZGlyX3NoYTE6IGFzc2V0LnNvdXJjZUhhc2gsIC8vIHVzZSBzb3VyY2VIYXNoIHRvIHRyaWdnZXIgcmVidWlsZHNcbiAgICAgIH0sXG4gICAgICAvLyBleGVjdXRhYmxlOiBhc3NldC5leGVjdXRhYmxlLCAvLyBUT0RPOiBTdXBwb3J0IGV4ZWN1dGFibGUgYXNzZXRzXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWdpc3RyeUltYWdlID0gbmV3IGRvY2tlclJlZ2lzdHJ5SW1hZ2UuUmVnaXN0cnlJbWFnZShcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBgJHtpZH1fUmVnaXN0cnlJbWFnZWAsXG4gICAgICB7XG4gICAgICAgIG5hbWU6IGltYWdlQXNzZXQubmFtZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGxvY2F0aW9uOiBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24gPSB7XG4gICAgICBpbWFnZVVyaTogcmVnaXN0cnlJbWFnZS5uYW1lLFxuICAgICAgcmVwb3NpdG9yeU5hbWU6IHRoaXMucmVwb3NpdG9yeSEubmFtZSxcbiAgICAgIGltYWdlVGFnLFxuICAgIH07XG4gICAgLy8gU3RvcmUgdGhlIGFzc2V0IGxvY2F0aW9uIGRldGFpbHNcbiAgICB0aGlzLmRvY2tlckFzc2V0TWFwLnNldChpbWFnZVVyaSwgbG9jYXRpb24pO1xuICAgIC8vIFJldHVybiB0aGUgYXNzZXQgbG9jYXRpb24gZGV0YWlsc1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlQnVja2V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmJ1Y2tldCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuYnVja2V0TmFtZSkge1xuICAgICAgLy8gVXNlIGV4aXN0aW5nIGJ1Y2tldCBpZiBwcm92aWRlZFxuICAgICAgdGhpcy5idWNrZXQgPSBuZXcgZGF0YUF3c1MzQnVja2V0LkRhdGFBd3NTM0J1Y2tldChcbiAgICAgICAgdGhpcy5zY29wZSxcbiAgICAgICAgXCJFeGlzdGluZ0Fzc2V0QnVja2V0XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBidWNrZXQ6IHRoaXMucHJvcHMuYnVja2V0TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucHJvcHMucXVhbGlmaWVyID8/IFwiYXNzZXRzXCJ9LSR7dGhpcy5wcm9wcy5hY2NvdW50fS0ke3RoaXMucHJvcHMucmVnaW9ufWA7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBzM0J1Y2tldC5TM0J1Y2tldCh0aGlzLnNjb3BlLCBcIkFzc2V0QnVja2V0XCIsIHtcbiAgICAgIGJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlUmVwb3NpdG9yeSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXBvc2l0b3J5KSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5wcm9wcy5yZXBvc2l0b3J5TmFtZSkge1xuICAgICAgLy8gVXNlIGV4aXN0aW5nIHJlcG9zaXRvcnkgaWYgcHJvdmlkZWRcbiAgICAgIHRoaXMucmVwb3NpdG9yeSA9IG5ldyBkYXRhQXdzRWNyUmVwb3NpdG9yeS5EYXRhQXdzRWNyUmVwb3NpdG9yeShcbiAgICAgICAgdGhpcy5zY29wZSxcbiAgICAgICAgXCJFeGlzdGluZ0Fzc2V0UmVwb3NpdG9yeVwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy5wcm9wcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVwb3NpdG9yeSA9IG5ldyBlY3JSZXBvc2l0b3J5LkVjclJlcG9zaXRvcnkoXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgXCJBc3NldFJlcG9zaXRvcnlcIixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogdGhpcy5wcm9wcy5xdWFsaWZpZXJcbiAgICAgICAgICA/IGAke3RoaXMucHJvcHMucXVhbGlmaWVyfS1hc3NldHNgXG4gICAgICAgICAgOiBcImFzc2V0c1wiLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEb2NrZXJQcm92aWRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb2NrZXJQcm92aWRlcikgcmV0dXJuO1xuXG4gICAgdGhpcy5kb2NrZXJQcm92aWRlciA9IG5ldyBkb2NrZXJQcm92aWRlci5Eb2NrZXJQcm92aWRlcihcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBcIkRvY2tlclwiLFxuICAgICAgLy8gVE9ETzogU3VwcG9ydCBjdXN0b20gRG9ja2VyIGhvc3Q/XG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFMzVXJsKG9iamVjdEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBidWNrZXROYW1lID0gdGhpcy5idWNrZXQhLmJ1Y2tldDtcbiAgICByZXR1cm4gYGh0dHBzOi8vJHtidWNrZXROYW1lfS5zMy4ke3RoaXMucHJvcHMucmVnaW9ufS4ke3RoaXMucHJvcHMudXJsU3VmZml4fS8ke29iamVjdEtleX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFMzT2JqZWN0VXJsKG9iamVjdEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBidWNrZXROYW1lID0gdGhpcy5idWNrZXQhLmJ1Y2tldDtcbiAgICByZXR1cm4gYHMzOi8vJHtidWNrZXROYW1lfS8ke29iamVjdEtleX1gO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBidWlsZFJlcG9zaXRvcnlVcmkoKTogc3RyaW5nIHtcbiAgLy8gICBjb25zdCByZXBvc2l0b3J5TmFtZSA9IHRoaXMucmVwb3NpdG9yeSEubmFtZTtcbiAgLy8gICByZXR1cm4gYCR7dGhpcy5wcm9wcy5hY2NvdW50fS5ka3IuZWNyLiR7dGhpcy5wcm9wcy5yZWdpb259LiR7dGhpcy5wcm9wcy51cmxTdWZmaXh9LyR7cmVwb3NpdG9yeU5hbWV9YDtcbiAgLy8gfVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIERvY2tlciBjYWNoZSBvcHRpb25zIHRvIGEgZm9ybWF0IHN1aXRhYmxlIGZvciB0aGUgYnVpbGR4IGNhY2hlRnJvbSBmbGFnLlxuICovXG5mdW5jdGlvbiBwYXJzZURvY2tlckNhY2hlRW50cmllcyhcbiAgLi4uY2FjaGVPcHRpb246IERvY2tlckNhY2hlT3B0aW9uW11cbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNhY2hlT3B0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGNhY2hlRnJvbTogc3RyaW5nW10gPSBbXTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9idWlsZHgvYmxvYi92MC4yNS4wL3V0aWwvYnVpbGRmbGFncy9jYWNoZS5nbyNMMTQwXG4gIGZvciAoY29uc3QgYyBvZiBjYWNoZU9wdGlvbikge1xuICAgIGxldCBjYWNoZUZyb21FbnRyeSA9IGB0eXBlPSR7Yy50eXBlfWA7XG4gICAgaWYgKGMucGFyYW1zKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuZW50cmllcyhjLnBhcmFtcylcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfT0ke3Z9YClcbiAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgY2FjaGVGcm9tRW50cnkgKz0gYCwke3BhcmFtc31gO1xuICAgIH1cbiAgICBjYWNoZUZyb20ucHVzaChjYWNoZUZyb21FbnRyeSk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlRnJvbTtcbn1cblxuLy8gLyoqXG4vLyAgKiBUaHJvdyBhbiBlcnJvciBtZXNzYWdlIGFib3V0IGJpbmRpbmcoKSBpZiB3ZSBkb24ndCBoYXZlIGEgdmFsdWUgZm9yIHguXG4vLyAgKlxuLy8gICogVGhpcyByZXBsYWNlcyB0aGUgISBhc3NlcnRpb25zIHdlIHdvdWxkIG5lZWQgZXZlcnl3aGVyZSBvdGhlcndpc2UuXG4vLyAgKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBhc3NlcnRCb3VuZDxBPih4OiBBIHwgdW5kZWZpbmVkKTogYXNzZXJ0cyB4IGlzIE5vbk51bGxhYmxlPEE+IHtcbi8vICAgaWYgKHggPT09IG51bGwgJiYgeCA9PT0gdW5kZWZpbmVkKSB7XG4vLyAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgY2FsbCBiaW5kU3RhY2soKSBmaXJzdFwiKTtcbi8vICAgfVxuLy8gfVxuXG4vLyBUT0RPOiBTdXBwb3J0IGV4ZWN1dGFibGUgYXJyYXkgcHJvZHVjaW5nIGxvY2F0aW9uIG9mIHppcCBmaWxlIG9uIHN0ZG91dFxuLy8gZnVuY3Rpb24gdmFsaWRhdGVGaWxlQXNzZXRTb3VyY2UoYXNzZXQ6IEZpbGVBc3NldFNvdXJjZSkge1xuLy8gICBpZiAoISFhc3NldC5leGVjdXRhYmxlID09PSAhIWFzc2V0LmZpbGVOYW1lKSB7XG4vLyAgICAgdGhyb3cgbmV3IEVycm9yKFxuLy8gICAgICAgYEV4YWN0bHkgb25lIG9mICdmaWxlTmFtZScgb3IgJ2V4ZWN1dGFibGUnIGlzIHJlcXVpcmVkLCBnb3Q6ICR7SlNPTi5zdHJpbmdpZnkoYXNzZXQpfWAsXG4vLyAgICAgKTtcbi8vICAgfVxuXG4vLyAgIGlmICghIWFzc2V0LnBhY2thZ2luZyAhPT0gISFhc3NldC5maWxlTmFtZSkge1xuLy8gICAgIHRocm93IG5ldyBFcnJvcihcbi8vICAgICAgIGAncGFja2FnaW5nJyBpcyBleHBlY3RlZCBpbiBjb21iaW5hdGlvbiB3aXRoICdmaWxlTmFtZScsIGdvdDogJHtKU09OLnN0cmluZ2lmeShhc3NldCl9YCxcbi8vICAgICApO1xuLy8gICB9XG4vLyB9XG5cbi8vIFRPRE86IFN1cHBvcnQgZXhlY3V0YWJsZSBhcnJheSBwcm9kdWNpbmcgdGhlIG5hbWUgb2YgYSBsb2NhbCBEb2NrZXIgaW1hZ2Ugb24gYHN0ZG91dGBcbi8vIGZ1bmN0aW9uIHZhbGlkYXRlRG9ja2VySW1hZ2VBc3NldFNvdXJjZShhc3NldDogRG9ja2VySW1hZ2VBc3NldFNvdXJjZSkge1xuLy8gICBpZiAoISFhc3NldC5leGVjdXRhYmxlID09PSAhIWFzc2V0LmRpcmVjdG9yeU5hbWUpIHtcbi8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4vLyAgICAgICBgRXhhY3RseSBvbmUgb2YgJ2RpcmVjdG9yeU5hbWUnIG9yICdleGVjdXRhYmxlJyBpcyByZXF1aXJlZCwgZ290OiAke0pTT04uc3RyaW5naWZ5KGFzc2V0KX1gLFxuLy8gICAgICk7XG4vLyAgIH1cblxuLy8gICBjaGVjayhcImRvY2tlckJ1aWxkQXJnc1wiKTtcbi8vICAgY2hlY2soXCJkb2NrZXJCdWlsZFRhcmdldFwiKTtcbi8vICAgY2hlY2soXCJkb2NrZXJPdXRwdXRzXCIpO1xuLy8gICBjaGVjayhcImRvY2tlckZpbGVcIik7XG5cbi8vICAgZnVuY3Rpb24gY2hlY2s8SyBleHRlbmRzIGtleW9mIERvY2tlckltYWdlQXNzZXRTb3VyY2U+KGtleTogSykge1xuLy8gICAgIGlmIChhc3NldFtrZXldICYmICFhc3NldC5kaXJlY3RvcnlOYW1lKSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4vLyAgICAgICAgIGAnJHtrZXl9JyBpcyBvbmx5IGFsbG93ZWQgaW4gY29tYmluYXRpb24gd2l0aCAnZGlyZWN0b3J5TmFtZScsIGdvdDogJHtKU09OLnN0cmluZ2lmeShhc3NldCl9YCxcbi8vICAgICAgICk7XG4vLyAgICAgfVxuLy8gICB9XG4vLyB9XG4iXX0=
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWFzc2V0LW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXdzL2F3cy1hc3NldC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOEJBQThCO0FBQzlCLGtDQUFrQztBQUNsQyxzREFNNkI7QUFDN0IsNERBSWdDO0FBQ2hDLGlDQUllO0FBRWYsbUNBQW1DO0FBRW5DLHNDQU9tQjtBQStEbkI7Ozs7O0dBS0c7QUFDSCxNQUFhLGVBQWU7SUFXMUIsWUFDbUIsS0FBZ0IsRUFDaEIsS0FBMkI7UUFEM0IsVUFBSyxHQUFMLEtBQUssQ0FBVztRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFzQjtRQVA5Qzs7V0FFRztRQUNjLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztJQUkzRSxDQUFDO0lBRUo7O09BRUc7SUFDSSxZQUFZLENBQUMsS0FBc0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxrQ0FBa0M7UUFDbEMscUZBQXFGO1FBQ3JGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FDYixZQUFZO1lBQ1osS0FBSyxDQUFDLFVBQVU7WUFDaEIsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLDJCQUFrQixDQUFDLGFBQWE7Z0JBQ25ELENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxD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LENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksU0FBUyxHQUFhLEVBQUUsQ0FBQztJQUM3Qiw4RUFBOEU7SUFDOUUsS0FBSyxNQUFNLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUM1QixJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNiLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztpQkFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDYixjQUFjLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7XG4gIHMzQnVja2V0LFxuICBzM09iamVjdCxcbiAgZWNyUmVwb3NpdG9yeSxcbiAgZGF0YUF3c0VjclJlcG9zaXRvcnksXG4gIGRhdGFBd3NTM0J1Y2tldCxcbn0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIHByb3ZpZGVyIGFzIGRvY2tlclByb3ZpZGVyLFxuICBpbWFnZSBhcyBkb2NrZXJJbWFnZSxcbiAgcmVnaXN0cnlJbWFnZSBhcyBkb2NrZXJSZWdpc3RyeUltYWdlLFxufSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWRvY2tlclwiO1xuaW1wb3J0IHtcbiAgQXNzZXRUeXBlLFxuICBUZXJyYWZvcm1Bc3NldCxcbiAgLy8gcmVmLFxufSBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBtaW1lIGZyb20gXCJtaW1lLXR5cGVzXCI7XG5pbXBvcnQgeyBJQXNzZXRNYW5hZ2VyIH0gZnJvbSBcIi4uL2Fzc2V0LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIERvY2tlckNhY2hlT3B0aW9uLFxuICBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24sXG4gIERvY2tlckltYWdlQXNzZXRTb3VyY2UsXG4gIEZpbGVBc3NldExvY2F0aW9uLFxuICBGaWxlQXNzZXRQYWNrYWdpbmcsXG4gIEZpbGVBc3NldFNvdXJjZSxcbn0gZnJvbSBcIi4uL2Fzc2V0c1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF3c0Fzc2V0TWFuYWdlck9wdGlvbnMge1xuICAvKipcbiAgICogRXhpc3RpbmcgYnVja2V0IG5hbWUgdG8gdXBsb2FkIGZpbGUgYXNzZXRzIHRvIFMzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgYnVja2V0IHdpbGwgYmUgY3JlYXRlZCBvbiBkZW1hbmQgdXNpbmcgdGhlIGdyaWRVVUlEXG4gICAqL1xuICByZWFkb25seSBidWNrZXROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogYnVja2V0UHJlZml4IHRvIHVzZSB3aGlsZSBzdG9yaW5nIFMzIEFzc2V0c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFwiXCIgKG5vIHByZWZpeClcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldFByZWZpeD86IHN0cmluZztcbiAgLyoqXG4gICAqIFF1YWxpZmllciBmb3IgYXNzZXQgcmVzb3VyY2UgbmFtZXMgd2hlbiBjcmVhdGluZyB0aGVtIG9uIGRlbWFuZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFwiJHtHcmlkVVVJRH0tYXNzZXRzXCJcbiAgICovXG4gIHJlYWRvbmx5IHF1YWxpZmllcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFVzZSBleGlzdGluZyBFQ1IgUmVwb3NpdG9yeSBmb3IgY29udGFpbmVyIGltYWdlIGFzc2V0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIHJlcG9zaXRvcnkgd2lsbCBiZSBjcmVhdGVkIG9uIGRlbWFuZCB1c2luZyB0aGUgcHJvdmlkZWQgcXVhbGlmaWVyXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5TmFtZT86IHN0cmluZzsgLy8gVE9ETzogU3VwcG9ydCBVUkkgKyBVUkkgUGFyc2luZyBmb3IgY3Jvc3MgQWNjb3VudCB1c2FnZT9cbiAgLyoqXG4gICAqIEEgcHJlZml4IHRvIHVzZSB3aGlsZSB0YWdnaW5nIGFuZCB1cGxvYWRpbmcgRG9ja2VyIGltYWdlcyB0byBFQ1IuXG4gICAqXG4gICAqIFRoaXMgZG9lcyBub3QgYWRkIGFueSBzZXBhcmF0b3JzIC0gdGhlIHNvdXJjZSBoYXNoIHdpbGwgYmUgYXBwZW5kZWQgdG9cbiAgICogdGhpcyBzdHJpbmcgZGlyZWN0bHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gXCJcIiAobm8gcHJlZml4KVxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyVGFnUHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSBBV1MgQXNzZXQgTWFuYWdlciBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5IEFXUyBzdGFja3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzQXNzZXRNYW5hZ2VyUHJvcHMgZXh0ZW5kcyBBd3NBc3NldE1hbmFnZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSByZWdpb24gZm9yIGNyZWF0aW5nIEFXUyByZXNvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBJRCBmb3IgY3JlYXRpbmcgQVdTIHJlc291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydGl0aW9uIGZvciBjcmVhdGluZyBBV1MgcmVzb3VyY2VzXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBzdWZmaXggZm9yIHRoZSBwYXJ0aXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHVybFN1ZmZpeDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFXUyBpbXBsZW1lbnRhdGlvbiBvZiBJQXNzZXRNYW5hZ2VyIHVzaW5nIHJhdyBUZXJyYWZvcm0gcHJvdmlkZXIgcmVzb3VyY2VzLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBieSB1c2luZyByYXcgVGVycmFmb3JtIHJlc291cmNlc1xuICogaW5zdGVhZCBvZiBMMiBjb25zdHJ1Y3RzIGxpa2UgQnVja2V0IGFuZCBSZXBvc2l0b3J5LlxuICovXG5leHBvcnQgY2xhc3MgQXdzQXNzZXRNYW5hZ2VyIGltcGxlbWVudHMgSUFzc2V0TWFuYWdlciB7XG4gIHByaXZhdGUgYnVja2V0PzogczNCdWNrZXQuUzNCdWNrZXQgfCBkYXRhQXdzUzNCdWNrZXQuRGF0YUF3c1MzQnVja2V0O1xuICBwcml2YXRlIHJlcG9zaXRvcnk/OlxuICAgIHwgZWNyUmVwb3NpdG9yeS5FY3JSZXBvc2l0b3J5XG4gICAgfCBkYXRhQXdzRWNyUmVwb3NpdG9yeS5EYXRhQXdzRWNyUmVwb3NpdG9yeTtcbiAgcHJpdmF0ZSBkb2NrZXJQcm92aWRlcj86IGRvY2tlclByb3ZpZGVyLkRvY2tlclByb3ZpZGVyO1xuICAvKipcbiAgICogTWFwIG9mIFRlcnJhZm9ybSBhc3NldHMgcmVnaXN0ZXJlZCBieSB0aGlzIG1hbmFnZXIuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVBc3NldE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBGaWxlQXNzZXRMb2NhdGlvbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2NrZXJBc3NldE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24+KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBd3NBc3NldE1hbmFnZXJQcm9wcyxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGZpbGUgYXNzZXQgYW5kIHJldHVybiBpdHMgbG9jYXRpb24gZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBhZGRGaWxlQXNzZXQoYXNzZXQ6IEZpbGVBc3NldFNvdXJjZSk6IEZpbGVBc3NldExvY2F0aW9uIHtcbiAgICBpZiAoIXRoaXMuYnVja2V0KSB7XG4gICAgICB0aGlzLmVuc3VyZUJ1Y2tldCgpO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFN1cHBvcnQgZXhlY3V0YWJsZSBhc3NldCBwcm9wcz9cbiAgICAvLyB2YWxpZGF0ZUZpbGVBc3NldFNvdXJjZShhc3NldCk7XG4gICAgLy8gY29uc3QgZXh0ZW5zaW9uID0gYXNzZXQuZmlsZU5hbWUgIT0gdW5kZWZpbmVkID8gcGF0aC5leHRuYW1lKGFzc2V0LmZpbGVOYW1lKSA6IFwiXCI7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gcGF0aC5leHRuYW1lKGFzc2V0LmZpbGVOYW1lKTtcbiAgICBjb25zdCBidWNrZXRQcmVmaXggPSB0aGlzLnByb3BzLmJ1Y2tldFByZWZpeCA/PyBcIlwiO1xuICAgIGNvbnN0IG9iamVjdEtleSA9XG4gICAgICBidWNrZXRQcmVmaXggK1xuICAgICAgYXNzZXQuc291cmNlSGFzaCArXG4gICAgICAoYXNzZXQucGFja2FnaW5nID09PSBGaWxlQXNzZXRQYWNrYWdpbmcuWklQX0RJUkVDVE9SWVxuICAgICAgICA/IFwiLnppcFwiXG4gICAgICAgIDogZXh0ZW5zaW9uKTtcblxuICAgIGlmICh0aGlzLmZpbGVBc3NldE1hcC5oYXMob2JqZWN0S2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZUFzc2V0TWFwLmdldChvYmplY3RLZXkpITtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiBBV1NDREsgdXNlcyBzb3VyY2VIYXNoIGFzIHRoZSBDb25zdHJ1Y3QgSURcbiAgICAvLyBBdm9pZGVkIGhlcmUgYmVjYXVzZSBUZXJyYWZvcm1Bc3NldCBwYXRocyBhbHJlYWR5IGluY2x1ZGVzIHNvdXJjZUhhc2hcbiAgICAvLyBFbnN1cmUgdW5pcXVlIElEIGZvciB0aGUgYXNzZXQgaW4gdGhlIHNjb3BlXG4gICAgbGV0IGlkID0gXCJGaWxlQXNzZXRcIjtcbiAgICBmb3IgKGxldCBpID0gMDsgdGhpcy5zY29wZS5ub2RlLnRyeUZpbmRDaGlsZChpZCk7IGkrKykge1xuICAgICAgaWQgPSBgJHtpZH1fJHtpfWA7XG4gICAgfVxuXG4gICAgY29uc3QgYXNzZXRTdGF0cyA9IGZzLnN0YXRTeW5jKGFzc2V0LmZpbGVOYW1lKTtcbiAgICBjb25zdCB0ZkFzc2V0ID0gbmV3IFRlcnJhZm9ybUFzc2V0KHRoaXMuc2NvcGUsIGlkLCB7XG4gICAgICBwYXRoOiBhc3NldC5maWxlTmFtZSxcbiAgICAgIGFzc2V0SGFzaDogYXNzZXQuc291cmNlSGFzaCxcbiAgICAgIHR5cGU6IGFzc2V0U3RhdHMuaXNEaXJlY3RvcnkoKSA/IEFzc2V0VHlwZS5BUkNISVZFIDogQXNzZXRUeXBlLkZJTEUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzM0Fzc2V0ID0gbmV3IHMzT2JqZWN0LlMzT2JqZWN0KHRoaXMuc2NvcGUsIGAke2lkfV9TM2AsIHtcbiAgICAgIGtleTogb2JqZWN0S2V5LFxuICAgICAgYnVja2V0OiB0aGlzLmJ1Y2tldCEuYnVja2V0LFxuICAgICAgc291cmNlOiB0ZkFzc2V0LnBhdGgsXG4gICAgICBzb3VyY2VIYXNoOiBhc3NldC5zb3VyY2VIYXNoLFxuICAgICAgY29udGVudFR5cGU6IG1pbWUuY29udGVudFR5cGUoZXh0ZW5zaW9uKSB8fCB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBodHRwVXJsID0gdGhpcy5idWlsZFMzVXJsKHMzQXNzZXQua2V5KTtcbiAgICAvLyBTdG9yZSB0aGUgYXNzZXQgbG9jYXRpb24gZGV0YWlsc1xuICAgIGNvbnN0IGxvY2F0aW9uOiBGaWxlQXNzZXRMb2NhdGlvbiA9IHtcbiAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0IS5idWNrZXQsXG4gICAgICBvYmplY3RLZXk6IHMzQXNzZXQua2V5LFxuICAgICAgaHR0cFVybCxcbiAgICAgIHMzVXJsOiBodHRwVXJsLFxuICAgICAgczNPYmplY3RVcmw6IHRoaXMuYnVpbGRTM09iamVjdFVybChzM0Fzc2V0LmtleSksXG4gICAgfTtcbiAgICAvLyBTdG9yZSBpbiB0aGUgbWFwIGZvciBmdXR1cmUgbG9va3Vwc1xuICAgIHRoaXMuZmlsZUFzc2V0TWFwLnNldChvYmplY3RLZXksIGxvY2F0aW9uKTtcbiAgICAvLyBSZXR1cm4gdGhlIGFzc2V0IGxvY2F0aW9uIGRldGFpbHNcbiAgICByZXR1cm4gbG9jYXRpb247XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBEb2NrZXIgaW1hZ2UgYXNzZXQgYW5kIHJldHVybiBpdHMgbG9jYXRpb24gZGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBhZGREb2NrZXJJbWFnZUFzc2V0KFxuICAgIGFzc2V0OiBEb2NrZXJJbWFnZUFzc2V0U291cmNlLFxuICApOiBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24ge1xuICAgIC8vIHZhbGlkYXRlRG9ja2VySW1hZ2VBc3NldFNvdXJjZShhc3NldCk7XG4gICAgaWYgKCF0aGlzLmRvY2tlclByb3ZpZGVyKSB7XG4gICAgICB0aGlzLmVuc3VyZURvY2tlclByb3ZpZGVyKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5yZXBvc2l0b3J5KSB7XG4gICAgICB0aGlzLmVuc3VyZVJlcG9zaXRvcnkoKTtcbiAgICB9XG4gICAgLy8gRW5zdXJlIGRlcGVuZGVuY3kgb24gZWNyIHJlcG8gYnkgdXNpbmcgdG9rZW4gaW5zdGVhZCBvZiB0aGlzLmJ1aWxkUmVwb3NpdG9yeVVyaSgpO1xuICAgIGNvbnN0IHJlcG9zaXRvcnlVcmkgPSB0aGlzLnJlcG9zaXRvcnkhLnJlcG9zaXRvcnlVcmw7XG5cbiAgICBjb25zdCBkb2NrZXJUYWdQcmVmaXggPSB0aGlzLnByb3BzLmRvY2tlclRhZ1ByZWZpeCA/PyBcIlwiO1xuICAgIGNvbnN0IGltYWdlVGFnID0gYCR7ZG9ja2VyVGFnUHJlZml4fSR7YXNzZXQuc291cmNlSGFzaH1gO1xuICAgIGNvbnN0IGltYWdlVXJpID0gYCR7cmVwb3NpdG9yeVVyaX06JHtpbWFnZVRhZ31gO1xuXG4gICAgaWYgKHRoaXMuZG9ja2VyQXNzZXRNYXAuaGFzKGltYWdlVXJpKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9ja2VyQXNzZXRNYXAuZ2V0KGltYWdlVXJpKSE7XG4gICAgfVxuXG4gICAgLy8gTk9URTogQVdTQ0RLIHVzZXMgc291cmNlSGFzaCBhcyB0aGUgQ29uc3RydWN0IElEXG4gICAgLy8gY29uc3Qgc291cmNlSGFzaCA9IGFzc2V0LmFzc2V0TmFtZVxuICAgIC8vICAgPyBgJHthc3NldC5hc3NldE5hbWV9LSR7YXNzZXQuc291cmNlSGFzaH1gXG4gICAgLy8gICA6IGFzc2V0LnNvdXJjZUhhc2g7XG5cbiAgICAvLyBFbnN1cmUgdW5pcXVlIElEIGZvciB0aGUgYXNzZXQgaW4gdGhlIHNjb3BlXG4gICAgbGV0IGlkID0gXCJEb2NrZXJBc3NldFwiO1xuICAgIGZvciAobGV0IGkgPSAwOyB0aGlzLnNjb3BlLm5vZGUudHJ5RmluZENoaWxkKGlkKTsgaSsrKSB7XG4gICAgICBpZCA9IGAke2lkfV8ke2l9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0ZkFzc2V0ID0gbmV3IFRlcnJhZm9ybUFzc2V0KHRoaXMuc2NvcGUsIGlkLCB7XG4gICAgICBwYXRoOiBhc3NldC5kaXJlY3RvcnlOYW1lLFxuICAgICAgYXNzZXRIYXNoOiBhc3NldC5zb3VyY2VIYXNoLFxuICAgICAgdHlwZTogQXNzZXRUeXBlLkRJUkVDVE9SWSwgLy8gRXJyb3IgaWYgbm90IGRpcmVjdG9yeSBhc3NldCB0eXBlP1xuICAgICAgLy8gYXV0byBpbmZlciB0eXBlLi4uXG4gICAgICAvLyB0eXBlOiA8YXV0by1pbmZlcj4sXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbWFnZUFzc2V0ID0gbmV3IGRvY2tlckltYWdlLkltYWdlKHRoaXMuc2NvcGUsIGAke2lkfV9JbWFnZWAsIHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmV1endlcmtlci90ZXJyYWZvcm0tcHJvdmlkZXItZG9ja2VyL2Jsb2IvdjMuNi4yL2ludGVybmFsL3Byb3ZpZGVyL2RvY2tlcl9idWlsZHhfYnVpbGQuZ28jTDIxNlxuICAgICAgbmFtZTogaW1hZ2VVcmksXG4gICAgICBidWlsZEF0dHJpYnV0ZToge1xuICAgICAgICBjb250ZXh0OiB0ZkFzc2V0LnBhdGgsIC8vIGFzc2V0LmRpcmVjdG9yeU5hbWUsIC8vIHJlcXVpcmVkXG4gICAgICAgIC8vIFRPRE86IFZlcmlmeSBpZiAke3BhdGguY3dkfSBpcyBuZWVkZWQgZ2l2ZW4gZGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZT9cbiAgICAgICAgLy8gcGF0aC5qb2luKFxuICAgICAgICAvLyAgIFRva2VuLmFzU3RyaW5nKHJlZihcInBhdGguY3dkXCIpKSxcbiAgICAgICAgLy8gICBhc3NldC5kaXJlY3RvcnlOYW1lLFxuICAgICAgICAvLyApLFxuICAgICAgICBkb2NrZXJmaWxlOiBhc3NldC5kb2NrZXJGaWxlLFxuICAgICAgICBidWlsZEFyZ3M6IGFzc2V0LmRvY2tlckJ1aWxkQXJncyxcbiAgICAgICAgc2VjcmV0czogYXNzZXQuZG9ja2VyQnVpbGRTZWNyZXRzXG4gICAgICAgICAgPyBPYmplY3QuZW50cmllcyhhc3NldC5kb2NrZXJCdWlsZFNlY3JldHMpLm1hcCgoW2ssIHZdKSA9PiAoe1xuICAgICAgICAgICAgICBpZDogayxcbiAgICAgICAgICAgICAgLy8gVE9ETzogZW52IHNlY3JldHM/XG4gICAgICAgICAgICAgIHNyYzogdixcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBuZXR3b3JrTW9kZTogYXNzZXQubmV0d29ya01vZGUsXG4gICAgICAgIHBsYXRmb3JtOiBhc3NldC5wbGF0Zm9ybSxcbiAgICAgICAgdGFyZ2V0OiBhc3NldC5kb2NrZXJCdWlsZFRhcmdldCxcbiAgICAgICAgY2FjaGVGcm9tOiBhc3NldC5kb2NrZXJDYWNoZUZyb21cbiAgICAgICAgICA/IHBhcnNlRG9ja2VyQ2FjaGVFbnRyaWVzKC4uLmFzc2V0LmRvY2tlckNhY2hlRnJvbSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgbm9DYWNoZTogYXNzZXQuZG9ja2VyQ2FjaGVEaXNhYmxlZCxcbiAgICAgICAgLy8gRW5hYmxlIGJ1aWxkeCAoY3VycmVudGx5IGRvZXMgbm90IHN1cHBvcnQgdWxpbWl0cylcbiAgICAgICAgYnVpbGRlcjogXCJkZWZhdWx0XCIsXG4gICAgICAgIC8vIFRPRE86IG5vIFNTSCBTdXBwb3J0PyxcbiAgICAgICAgLy8gc3NoOiBhc3NldC5kb2NrZXJCdWlsZFNTSCxcbiAgICAgICAgLy8gVE9ETzogbm8gY2FjaGVUbyBzdXBwb3J0P1xuICAgICAgICAvLyBjYWNoZVRvOiBhc3NldC5kb2NrZXJDYWNoZVRvXG4gICAgICAgIC8vICAgPyBwYXJzZUNhY2hlRW50cmllcyhhc3NldC5kb2NrZXJDYWNoZVRvKVxuICAgICAgICAvLyAgIDogdW5kZWZpbmVkLFxuICAgICAgICAvLyBUT0RPOiBubyBkb2NrZXJPdXRwdXRzIHN1cHBvcnQ/XG4gICAgICAgIC8vIG91dHB1dHM6IGFzc2V0LmRvY2tlck91dHB1dHMsXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgZGlyX3NoYTE6IGFzc2V0LnNvdXJjZUhhc2gsIC8vIHVzZSBzb3VyY2VIYXNoIHRvIHRyaWdnZXIgcmVidWlsZHNcbiAgICAgIH0sXG4gICAgICAvLyBleGVjdXRhYmxlOiBhc3NldC5leGVjdXRhYmxlLCAvLyBUT0RPOiBTdXBwb3J0IGV4ZWN1dGFibGUgYXNzZXRzXG4gICAgfSk7XG5cbiAgICBjb25zdCByZWdpc3RyeUltYWdlID0gbmV3IGRvY2tlclJlZ2lzdHJ5SW1hZ2UuUmVnaXN0cnlJbWFnZShcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBgJHtpZH1fUmVnaXN0cnlJbWFnZWAsXG4gICAgICB7XG4gICAgICAgIG5hbWU6IGltYWdlQXNzZXQubmFtZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGxvY2F0aW9uOiBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24gPSB7XG4gICAgICBpbWFnZVVyaTogcmVnaXN0cnlJbWFnZS5uYW1lLFxuICAgICAgcmVwb3NpdG9yeU5hbWU6IHRoaXMucmVwb3NpdG9yeSEubmFtZSxcbiAgICAgIGltYWdlVGFnLFxuICAgIH07XG4gICAgLy8gU3RvcmUgdGhlIGFzc2V0IGxvY2F0aW9uIGRldGFpbHNcbiAgICB0aGlzLmRvY2tlckFzc2V0TWFwLnNldChpbWFnZVVyaSwgbG9jYXRpb24pO1xuICAgIC8vIFJldHVybiB0aGUgYXNzZXQgbG9jYXRpb24gZGV0YWlsc1xuICAgIHJldHVybiBsb2NhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlQnVja2V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmJ1Y2tldCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuYnVja2V0TmFtZSkge1xuICAgICAgLy8gVXNlIGV4aXN0aW5nIGJ1Y2tldCBpZiBwcm92aWRlZFxuICAgICAgdGhpcy5idWNrZXQgPSBuZXcgZGF0YUF3c1MzQnVja2V0LkRhdGFBd3NTM0J1Y2tldChcbiAgICAgICAgdGhpcy5zY29wZSxcbiAgICAgICAgXCJFeGlzdGluZ0Fzc2V0QnVja2V0XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBidWNrZXQ6IHRoaXMucHJvcHMuYnVja2V0TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYnVja2V0TmFtZSA9IGAke3RoaXMucHJvcHMucXVhbGlmaWVyID8/IFwiYXNzZXRzXCJ9LSR7dGhpcy5wcm9wcy5hY2NvdW50fS0ke3RoaXMucHJvcHMucmVnaW9ufWA7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IG5ldyBzM0J1Y2tldC5TM0J1Y2tldCh0aGlzLnNjb3BlLCBcIkFzc2V0QnVja2V0XCIsIHtcbiAgICAgIGJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlUmVwb3NpdG9yeSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXBvc2l0b3J5KSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5wcm9wcy5yZXBvc2l0b3J5TmFtZSkge1xuICAgICAgLy8gVXNlIGV4aXN0aW5nIHJlcG9zaXRvcnkgaWYgcHJvdmlkZWRcbiAgICAgIHRoaXMucmVwb3NpdG9yeSA9IG5ldyBkYXRhQXdzRWNyUmVwb3NpdG9yeS5EYXRhQXdzRWNyUmVwb3NpdG9yeShcbiAgICAgICAgdGhpcy5zY29wZSxcbiAgICAgICAgXCJFeGlzdGluZ0Fzc2V0UmVwb3NpdG9yeVwiLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogdGhpcy5wcm9wcy5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVwb3NpdG9yeSA9IG5ldyBlY3JSZXBvc2l0b3J5LkVjclJlcG9zaXRvcnkoXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgXCJBc3NldFJlcG9zaXRvcnlcIixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogdGhpcy5wcm9wcy5xdWFsaWZpZXJcbiAgICAgICAgICA/IGAke3RoaXMucHJvcHMucXVhbGlmaWVyfS1hc3NldHNgXG4gICAgICAgICAgOiBcImFzc2V0c1wiLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEb2NrZXJQcm92aWRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kb2NrZXJQcm92aWRlcikgcmV0dXJuO1xuXG4gICAgdGhpcy5kb2NrZXJQcm92aWRlciA9IG5ldyBkb2NrZXJQcm92aWRlci5Eb2NrZXJQcm92aWRlcihcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBcIkRvY2tlclwiLFxuICAgICAgLy8gVE9ETzogU3VwcG9ydCBjdXN0b20gRG9ja2VyIGhvc3Q/XG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFMzVXJsKG9iamVjdEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBidWNrZXROYW1lID0gdGhpcy5idWNrZXQhLmJ1Y2tldDtcbiAgICByZXR1cm4gYGh0dHBzOi8vJHtidWNrZXROYW1lfS5zMy4ke3RoaXMucHJvcHMucmVnaW9ufS4ke3RoaXMucHJvcHMudXJsU3VmZml4fS8ke29iamVjdEtleX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFMzT2JqZWN0VXJsKG9iamVjdEtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBidWNrZXROYW1lID0gdGhpcy5idWNrZXQhLmJ1Y2tldDtcbiAgICByZXR1cm4gYHMzOi8vJHtidWNrZXROYW1lfS8ke29iamVjdEtleX1gO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBidWlsZFJlcG9zaXRvcnlVcmkoKTogc3RyaW5nIHtcbiAgLy8gICBjb25zdCByZXBvc2l0b3J5TmFtZSA9IHRoaXMucmVwb3NpdG9yeSEubmFtZTtcbiAgLy8gICByZXR1cm4gYCR7dGhpcy5wcm9wcy5hY2NvdW50fS5ka3IuZWNyLiR7dGhpcy5wcm9wcy5yZWdpb259LiR7dGhpcy5wcm9wcy51cmxTdWZmaXh9LyR7cmVwb3NpdG9yeU5hbWV9YDtcbiAgLy8gfVxufVxuXG4vKipcbiAqIENvbnZlcnQgdGhlIERvY2tlciBjYWNoZSBvcHRpb25zIHRvIGEgZm9ybWF0IHN1aXRhYmxlIGZvciB0aGUgYnVpbGR4IGNhY2hlRnJvbSBmbGFnLlxuICovXG5mdW5jdGlvbiBwYXJzZURvY2tlckNhY2hlRW50cmllcyhcbiAgLi4uY2FjaGVPcHRpb246IERvY2tlckNhY2hlT3B0aW9uW11cbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNhY2hlT3B0aW9uLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgbGV0IGNhY2hlRnJvbTogc3RyaW5nW10gPSBbXTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RvY2tlci9idWlsZHgvYmxvYi92MC4yNS4wL3V0aWwvYnVpbGRmbGFncy9jYWNoZS5nbyNMMTQwXG4gIGZvciAoY29uc3QgYyBvZiBjYWNoZU9wdGlvbikge1xuICAgIGxldCBjYWNoZUZyb21FbnRyeSA9IGB0eXBlPSR7Yy50eXBlfWA7XG4gICAgaWYgKGMucGFyYW1zKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBPYmplY3QuZW50cmllcyhjLnBhcmFtcylcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfT0ke3Z9YClcbiAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgY2FjaGVGcm9tRW50cnkgKz0gYCwke3BhcmFtc31gO1xuICAgIH1cbiAgICBjYWNoZUZyb20ucHVzaChjYWNoZUZyb21FbnRyeSk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlRnJvbTtcbn1cblxuLy8gLyoqXG4vLyAgKiBUaHJvdyBhbiBlcnJvciBtZXNzYWdlIGFib3V0IGJpbmRpbmcoKSBpZiB3ZSBkb24ndCBoYXZlIGEgdmFsdWUgZm9yIHguXG4vLyAgKlxuLy8gICogVGhpcyByZXBsYWNlcyB0aGUgISBhc3NlcnRpb25zIHdlIHdvdWxkIG5lZWQgZXZlcnl3aGVyZSBvdGhlcndpc2UuXG4vLyAgKi9cbi8vIGV4cG9ydCBmdW5jdGlvbiBhc3NlcnRCb3VuZDxBPih4OiBBIHwgdW5kZWZpbmVkKTogYXNzZXJ0cyB4IGlzIE5vbk51bGxhYmxlPEE+IHtcbi8vICAgaWYgKHggPT09IG51bGwgJiYgeCA9PT0gdW5kZWZpbmVkKSB7XG4vLyAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IG11c3QgY2FsbCBiaW5kU3RhY2soKSBmaXJzdFwiKTtcbi8vICAgfVxuLy8gfVxuXG4vLyBUT0RPOiBTdXBwb3J0IGV4ZWN1dGFibGUgYXJyYXkgcHJvZHVjaW5nIGxvY2F0aW9uIG9mIHppcCBmaWxlIG9uIHN0ZG91dFxuLy8gZnVuY3Rpb24gdmFsaWRhdGVGaWxlQXNzZXRTb3VyY2UoYXNzZXQ6IEZpbGVBc3NldFNvdXJjZSkge1xuLy8gICBpZiAoISFhc3NldC5leGVjdXRhYmxlID09PSAhIWFzc2V0LmZpbGVOYW1lKSB7XG4vLyAgICAgdGhyb3cgbmV3IEVycm9yKFxuLy8gICAgICAgYEV4YWN0bHkgb25lIG9mICdmaWxlTmFtZScgb3IgJ2V4ZWN1dGFibGUnIGlzIHJlcXVpcmVkLCBnb3Q6ICR7SlNPTi5zdHJpbmdpZnkoYXNzZXQpfWAsXG4vLyAgICAgKTtcbi8vICAgfVxuXG4vLyAgIGlmICghIWFzc2V0LnBhY2thZ2luZyAhPT0gISFhc3NldC5maWxlTmFtZSkge1xuLy8gICAgIHRocm93IG5ldyBFcnJvcihcbi8vICAgICAgIGAncGFja2FnaW5nJyBpcyBleHBlY3RlZCBpbiBjb21iaW5hdGlvbiB3aXRoICdmaWxlTmFtZScsIGdvdDogJHtKU09OLnN0cmluZ2lmeShhc3NldCl9YCxcbi8vICAgICApO1xuLy8gICB9XG4vLyB9XG5cbi8vIFRPRE86IFN1cHBvcnQgZXhlY3V0YWJsZSBhcnJheSBwcm9kdWNpbmcgdGhlIG5hbWUgb2YgYSBsb2NhbCBEb2NrZXIgaW1hZ2Ugb24gYHN0ZG91dGBcbi8vIGZ1bmN0aW9uIHZhbGlkYXRlRG9ja2VySW1hZ2VBc3NldFNvdXJjZShhc3NldDogRG9ja2VySW1hZ2VBc3NldFNvdXJjZSkge1xuLy8gICBpZiAoISFhc3NldC5leGVjdXRhYmxlID09PSAhIWFzc2V0LmRpcmVjdG9yeU5hbWUpIHtcbi8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4vLyAgICAgICBgRXhhY3RseSBvbmUgb2YgJ2RpcmVjdG9yeU5hbWUnIG9yICdleGVjdXRhYmxlJyBpcyByZXF1aXJlZCwgZ290OiAke0pTT04uc3RyaW5naWZ5KGFzc2V0KX1gLFxuLy8gICAgICk7XG4vLyAgIH1cblxuLy8gICBjaGVjayhcImRvY2tlckJ1aWxkQXJnc1wiKTtcbi8vICAgY2hlY2soXCJkb2NrZXJCdWlsZFRhcmdldFwiKTtcbi8vICAgY2hlY2soXCJkb2NrZXJPdXRwdXRzXCIpO1xuLy8gICBjaGVjayhcImRvY2tlckZpbGVcIik7XG5cbi8vICAgZnVuY3Rpb24gY2hlY2s8SyBleHRlbmRzIGtleW9mIERvY2tlckltYWdlQXNzZXRTb3VyY2U+KGtleTogSykge1xuLy8gICAgIGlmIChhc3NldFtrZXldICYmICFhc3NldC5kaXJlY3RvcnlOYW1lKSB7XG4vLyAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4vLyAgICAgICAgIGAnJHtrZXl9JyBpcyBvbmx5IGFsbG93ZWQgaW4gY29tYmluYXRpb24gd2l0aCAnZGlyZWN0b3J5TmFtZScsIGdvdDogJHtKU09OLnN0cmluZ2lmeShhc3NldCl9YCxcbi8vICAgICAgICk7XG4vLyAgICAgfVxuLy8gICB9XG4vLyB9XG4iXX0=
@@ -60,5 +60,5 @@ class AwsConstructBase extends construct_base_1.TerraConstructBase {
60
60
  }
61
61
  exports.AwsConstructBase = AwsConstructBase;
62
62
  _a = JSII_RTTI_SYMBOL_1;
63
- AwsConstructBase[_a] = { fqn: "terraconstructs.aws.AwsConstructBase", version: "0.2.4" };
63
+ AwsConstructBase[_a] = { fqn: "terraconstructs.aws.AwsConstructBase", version: "0.2.6" };
64
64
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3MvYXdzLWNvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLCtCQUFrQztBQUNsQywyQ0FBdUM7QUFDdkMsc0RBQXNEO0FBQ3RELHNEQUkyQjtBQUUzQixrR0FBa0c7QUFDbEcsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBc0YzRSx3QkFBd0I7QUFDeEIsUUFBUTtBQUNSLDBEQUEwRDtBQUMxRCxRQUFRO0FBQ1IsOEJBQThCO0FBQzlCLFFBQVE7QUFDUix3RUFBd0U7QUFDeEUsUUFBUTtBQUNSLCtDQUErQztBQUMvQyxRQUFRO0FBQ1IseURBQXlEO0FBQ3pELFFBQVE7QUFDUiwrQkFBK0I7QUFDL0IsUUFBUTtBQUNSLGtEQUFrRDtBQUNsRCxRQUFRO0FBQ1IsNEJBQTRCO0FBQzVCLGtDQUFrQztBQUNsQyxJQUFJO0FBRUosbUdBQW1HO0FBRW5HOztHQUVHO0FBQ0gsTUFBc0IsZ0JBQ3BCLFNBQVEsbUNBQWtCO0lBSzFCLDZDQUE2QztJQUU3QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQTJCLEVBQUU7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFDRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO1lBQzNELEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLEVBQ3RDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLDZDQUE2QyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLCtCQUErQixLQUFLLENBQUMsa0JBQWtCLEdBQUcsQ0FDckksQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUMsS0FBSyxHQUFHLG9CQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNDLHVDQUF1QztRQUN2QyxzQkFBc0I7UUFDdEIsb0JBQW9CO1FBQ3BCLGdCQUFnQjtRQUNoQixLQUFLO1FBQ0wsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGtCQUFrQjtZQUN4QyxDQUFDLENBQUMsNkVBQTZFO2dCQUM3RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsS0FBSyxDQUFDLGtCQUFrQixFQUN4QixlQUFTLENBQUMsZ0JBQWdCLENBQzNCO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNkLElBQUksQ0FBQyxHQUFHLEdBQUc7WUFDVCxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFDdkQsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87WUFDbEUsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksU0FBUyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDL0QsQ0FBQztJQUNKLENBQUM7O0FBekNILDRDQTBDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQgfSBmcm9tIFwiLi9hcm5cIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4vYXdzLXN0YWNrXCI7XG4vLyBpbXBvcnQgeyBUYWdNYW5hZ2VyLCBBd3NUYWcgfSBmcm9tIFwiLi90YWctbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgVGVycmFDb25zdHJ1Y3RCYXNlLFxuICBUZXJyYUNvbnN0cnVjdFByb3BzLFxuICBJVGVycmFDb25zdHJ1Y3QsXG59IGZyb20gXCIuLi9jb25zdHJ1Y3QtYmFzZVwiO1xuXG4vLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL3Jlc291cmNlLnRzI0wxNVxuY29uc3QgUkVTT1VSQ0VfU1lNQk9MID0gU3ltYm9sLmZvcihcInRlcnJhY29uc3RydWN0cy9saWIvYXdzLkF3c0NvbnN0cnVjdFwiKTtcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTAuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9jb3JlL2xpYi9yZXNvdXJjZS50cyNMMjFcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBlbnZpcm9ubWVudCBhIGdpdmVuIEF3c0NvbnN0cnVjdCBsaXZlcyBpbi5cbiAqIFVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBmb3IgdGhlIGBJUmVzb3VyY2UuZW52YCBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NFbnZpcm9ubWVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIHBhcnRpdGlvbiB0aGF0IHRoaXMgcmVzb3VyY2UgYmVsb25ncyB0by5cbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSUQgdGhhdCB0aGlzIHJlc291cmNlIGJlbG9uZ3MgdG8uXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcmVnaW9uIHRoYXQgdGhpcyByZXNvdXJjZSBiZWxvbmdzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTUwLjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvcmVzb3VyY2UudHMjTDQ0XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBBV1MgcmVzb3VyY2Ugc2ltaWxhciB0byB0aGUgQVdTIENESyBgUmVzb3VyY2VgIGNsYXNzIGJ1dCBiYWNrZWQgYnkgQ0RLVEYuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUF3c0NvbnN0cnVjdCBleHRlbmRzIElUZXJyYUNvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgaW50byB3aGljaCB0aGlzIHJlc291cmNlIGlzIGNvbnN0cnVjdGVkIGJ5IHRoZSBUZXJyYUNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrOiBBd3NTdGFjaztcblxuICAvKipcbiAgICogVGhlIGVudmlyb25tZW50IHRoaXMgcmVzb3VyY2UgYmVsb25ncyB0by5cbiAgICogRm9yIHJlc291cmNlcyB0aGF0IGFyZSBjcmVhdGVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBDREtURlxuICAgKiAoZ2VuZXJhbGx5LCB0aG9zZSBjcmVhdGVkIGJ5IGNyZWF0aW5nIG5ldyBjbGFzcyBpbnN0YW5jZXMgbGlrZSBFbnZpcm9ubWVudCwgRWNzRGVwbG95bWVudCwgZXRjLiksXG4gICAqIHRoaXMgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgc3RhY2sgdGhleSBiZWxvbmcgdG87XG4gICAqIGhvd2V2ZXIsIGZvciBpbXBvcnRlZCByZXNvdXJjZXNcbiAgICogKHRob3NlIG9idGFpbmVkIGZyb20gc3RhdGljIG1ldGhvZHMgbGlrZSBmcm9tUm9sZUFybiwgZnJvbUJ1Y2tldE5hbWUsIGV0Yy4pLFxuICAgKiB0aGF0IG1pZ2h0IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBzdGFjayB0aGV5IHdlcmUgaW1wb3J0ZWQgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IGVudjogQXdzRW52aXJvbm1lbnQ7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRhZyBNYW5hZ2VyIHdoaWNoIG1hbmFnZXMgdGhlIHRhZ3MgZm9yIHRoaXMgcmVzb3VyY2VcbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IGNka1RhZ01hbmFnZXI6IFRhZ01hbmFnZXI7XG59XG5cbi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTUwLjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvcmVzb3VyY2UudHMjTDc4XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIGBSZXNvdXJjZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzQ29uc3RydWN0UHJvcHMgZXh0ZW5kcyBUZXJyYUNvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCB0aGlzIHJlc291cmNlIGJlbG9uZ3MgdG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHJlc291cmNlIGlzIGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIHN0YWNrIGl0IGJlbG9uZ3MgdG9cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcmVnaW9uIHRoaXMgcmVzb3VyY2UgYmVsb25ncyB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgcmVzb3VyY2UgaXMgaW4gdGhlIHNhbWUgcmVnaW9uIGFzIHRoZSBzdGFjayBpdCBiZWxvbmdzIHRvXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFSTiB0byBkZWR1Y2UgcmVnaW9uIGFuZCBhY2NvdW50IGZyb21cbiAgICpcbiAgICogVGhlIEFSTiBpcyBwYXJzZWQgYW5kIHRoZSBhY2NvdW50IGFuZCByZWdpb24gYXJlIHRha2VuIGZyb20gdGhlIEFSTi5cbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBmb3IgaW1wb3J0ZWQgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBDYW5ub3QgYmUgc3VwcGxpZWQgdG9nZXRoZXIgd2l0aCBlaXRoZXIgYGFjY291bnRgIG9yIGByZWdpb25gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRha2UgZW52aXJvbm1lbnQgZnJvbSBgYWNjb3VudGAsIGByZWdpb25gIHBhcmFtZXRlcnMsIG9yIHVzZSBTdGFjayBlbnZpcm9ubWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50RnJvbUFybj86IHN0cmluZztcbn1cblxuLy8gZXhwb3J0IGVudW0gVGFnVHlwZSB7XG4vLyAgIC8qKlxuLy8gICAgKiBTdGFuZGFyZCB0YWdzIGFyZSBhIGxpc3Qgb2YgeyBrZXksIHZhbHVlIH0gb2JqZWN0c1xuLy8gICAgKi9cbi8vICAgU1RBTkRBUkQgPSBcIlN0YW5kYXJkVGFnXCIsXG4vLyAgIC8qKlxuLy8gICAgKiBBU0cgdGFncyBhcmUgYSBsaXN0IG9mIHsga2V5LCB2YWx1ZSwgcHJvcGFnYXRlQXRMYXVuY2ggfSBvYmplY3RzXG4vLyAgICAqL1xuLy8gICBBVVRPU0NBTElOR19HUk9VUCA9IFwiQXV0b1NjYWxpbmdHcm91cFRhZ1wiLFxuLy8gICAvKipcbi8vICAgICogU29tZSBjb25zdHJ1Y3RzIHVzZSBhIHsga2V5OiB2YWx1ZSB9IG1hcCBmb3IgdGFnc1xuLy8gICAgKi9cbi8vICAgTUFQID0gXCJTdHJpbmdUb1N0cmluZ01hcFwiLFxuLy8gICAvKipcbi8vICAgICogU3RhY2tUYWdzIGFyZSBvZiB0aGUgZm9ybWF0IHsga2V5OiB2YWx1ZSB9XG4vLyAgICAqL1xuLy8gICBLRVlfVkFMVUUgPSBcIktleVZhbHVlXCIsXG4vLyAgIE5PVF9UQUdHQUJMRSA9IFwiTm90VGFnZ2FibGVcIixcbi8vIH1cblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTAuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9jb3JlL2xpYi9yZXNvdXJjZS50cyNMMTIyXG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBBV1MgcmVzb3VyY2Ugc2ltaWxhciB0byB0aGUgQVdTIENESyBgUmVzb3VyY2VgIGNsYXNzIGJ1dCBiYWNrZWQgYnkgQ0RLVEYuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGV4dGVuZHMgVGVycmFDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSUF3c0NvbnN0cnVjdFxue1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2s6IEF3c1N0YWNrO1xuICBwdWJsaWMgcmVhZG9ubHkgZW52OiBBd3NFbnZpcm9ubWVudDtcbiAgLy8gcHVibGljIHJlYWRvbmx5IGNka1RhZ01hbmFnZXI6IFRhZ01hbmFnZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEF3c0NvbnN0cnVjdFByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGlmIChcbiAgICAgIChwcm9wcy5hY2NvdW50ICE9PSB1bmRlZmluZWQgfHwgcHJvcHMucmVnaW9uICE9PSB1bmRlZmluZWQpICYmXG4gICAgICBwcm9wcy5lbnZpcm9ubWVudEZyb21Bcm4gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3VwcGx5IGF0IG1vc3Qgb25lIG9mICdhY2NvdW50Jy8ncmVnaW9uJyAoJHtwcm9wcy5hY2NvdW50fS8ke3Byb3BzLnJlZ2lvbn0pIGFuZCAnZW52aXJvbm1lbnRGcm9tQXJuJyAoJHtwcm9wcy5lbnZpcm9ubWVudEZyb21Bcm59KWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBSRVNPVVJDRV9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnN0YWNrID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcyk7XG5cbiAgICAvLyB0aGlzLmNka1RhZ01hbmFnZXIgPSBuZXcgVGFnTWFuYWdlcihcbiAgICAvLyAgIFRhZ1R5cGUuU1RBTkRBUkQsXG4gICAgLy8gICBcIkF3c0NvbnN0cnVjdFwiLFxuICAgIC8vICAgcHJvcHMudGFncyxcbiAgICAvLyApO1xuICAgIGNvbnN0IHBhcnNlZEFybiA9IHByb3BzLmVudmlyb25tZW50RnJvbUFyblxuICAgICAgPyAvLyBTaW5jZSB3ZSBvbmx5IHdhbnQgdGhlIHJlZ2lvbiBhbmQgYWNjb3VudCwgTk9fUkVTT1VSQ0VfTkFNRSBpcyBnb29kIGVub3VnaFxuICAgICAgICB0aGlzLnN0YWNrLnNwbGl0QXJuKFxuICAgICAgICAgIHByb3BzLmVudmlyb25tZW50RnJvbUFybixcbiAgICAgICAgICBBcm5Gb3JtYXQuTk9fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbnYgPSB7XG4gICAgICBwYXJ0aXRpb246IHBhcnNlZEFybj8ucGFydGl0aW9uID8/IHRoaXMuc3RhY2sucGFydGl0aW9uLFxuICAgICAgYWNjb3VudDogcHJvcHMuYWNjb3VudCA/PyBwYXJzZWRBcm4/LmFjY291bnQgPz8gdGhpcy5zdGFjay5hY2NvdW50LFxuICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24gPz8gcGFyc2VkQXJuPy5yZWdpb24gPz8gdGhpcy5zdGFjay5yZWdpb24sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,6 +1,6 @@
1
1
  import * as cxschema from "@aws-cdk/cloud-assembly-schema";
2
- import { provider } from "@cdktf/provider-aws";
3
- import { ResourceTerraformIterator } from "cdktf";
2
+ import { provider } from "@cdktn/provider-aws";
3
+ import { ResourceTerraformIterator } from "cdktn";
4
4
  import { Construct, IConstruct } from "constructs";
5
5
  import { ArnComponents, ArnFormat } from "./arn";
6
6
  import { AwsProviderConfig } from "./provider-config.generated";
@@ -110,7 +110,16 @@ export declare class AwsStack extends StackBase implements IAwsStack {
110
110
  */
111
111
  get region(): string;
112
112
  private get dataAwsCallerIdentity();
113
- private get dataAwsAvailabilityZones();
113
+ /**
114
+ * Get (or lazily create) the `aws_availability_zones` data source for a
115
+ * region.
116
+ *
117
+ * When `region` is omitted the data source resolves against the stack's
118
+ * default provider region. When `region` is provided the AWS provider v6
119
+ * per-resource `region` argument is used to query that region directly,
120
+ * without requiring a separate provider alias.
121
+ */
122
+ private getDataAwsAvailabilityZones;
114
123
  private get dataAwsPartition();
115
124
  private getRegionalAwsProvider;
116
125
  /**
@@ -233,9 +242,15 @@ export declare class AwsStack extends StackBase implements IAwsStack {
233
242
  *
234
243
  * The list length is `maxCount` which defaults to 2.
235
244
  *
245
+ * When `region` is provided, the AZs are resolved for that region using the
246
+ * AWS provider v6 per-resource `region` argument (no provider alias is
247
+ * required). This is primarily useful for cross-region lookups such as
248
+ * `Vpc.fromLookup({ region })`.
249
+ *
236
250
  * @param maxCount the maximum number of AZs to return
251
+ * @param region the region to resolve AZs for (defaults to the stack region)
237
252
  */
238
- availabilityZones(maxCount?: number): string[];
253
+ availabilityZones(maxCount?: number, region?: string): string[];
239
254
  /**
240
255
  * Register a file asset on this Stack
241
256
  */
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.AwsStack = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const region_info_1 = require("@aws-cdk/region-info");
7
- const provider_aws_1 = require("@cdktf/provider-aws");
8
- const cdktf_1 = require("cdktf");
7
+ const provider_aws_1 = require("@cdktn/provider-aws");
8
+ const cdktn_1 = require("cdktn");
9
9
  const arn_1 = require("./arn");
10
10
  const cxapi = require("./cx-api");
11
11
  const stack_base_1 = require("../stack-base");
@@ -17,6 +17,11 @@ const terraform_dependables_aspect_1 = require("../private/terraform-dependables
17
17
  // import { TagType } from "./aws-construct";
18
18
  // import { TagManager, ITaggableV2 } from "./tag-manager";
19
19
  const AWS_STACK_SYMBOL = Symbol.for("terraconstructs/lib/aws.AwsStack");
20
+ /**
21
+ * Cache key used for region-scoped lookups that target the stack's own
22
+ * provider region (i.e. no explicit region was requested).
23
+ */
24
+ const DEFAULT_REGION_KEY = "default_region";
20
25
  /**
21
26
  * A Terraform stack constrained to a single AWS Account/Region to simulate CFN behavior.
22
27
  */
@@ -36,7 +41,7 @@ class AwsStack extends stack_base_1.StackBase {
36
41
  * @param construct The construct to start the search from.
37
42
  */
38
43
  static ofAwsConstruct(construct) {
39
- const s = cdktf_1.TerraformStack.of(construct);
44
+ const s = cdktn_1.TerraformStack.of(construct);
40
45
  if (AwsStack.isAwsStack(s)) {
41
46
  return s;
42
47
  }
@@ -64,6 +69,7 @@ class AwsStack extends stack_base_1.StackBase {
64
69
  // defaultTags: this.cdkTagManager.renderedTags,
65
70
  ...(this._providerConfig ?? {}),
66
71
  }),
72
+ dataAwsAvailabilityZones: {},
67
73
  dataAwsServicePrincipals: {},
68
74
  });
69
75
  return this._lookup;
@@ -115,16 +121,30 @@ class AwsStack extends stack_base_1.StackBase {
115
121
  }
116
122
  return this.lookup.dataAwsCallerIdentity;
117
123
  }
118
- get dataAwsAvailabilityZones() {
119
- if (!this.lookup.dataAwsAvailabilityZones) {
120
- const azs = new provider_aws_1.dataAwsAvailabilityZones.DataAwsAvailabilityZones(this, "AvailabilityZones", {
124
+ /**
125
+ * Get (or lazily create) the `aws_availability_zones` data source for a
126
+ * region.
127
+ *
128
+ * When `region` is omitted the data source resolves against the stack's
129
+ * default provider region. When `region` is provided the AWS provider v6
130
+ * per-resource `region` argument is used to query that region directly,
131
+ * without requiring a separate provider alias.
132
+ */
133
+ getDataAwsAvailabilityZones(region) {
134
+ const key = region ?? DEFAULT_REGION_KEY;
135
+ if (!this.lookup.dataAwsAvailabilityZones[key]) {
136
+ const azs = new provider_aws_1.dataAwsAvailabilityZones.DataAwsAvailabilityZones(this, region
137
+ ? `AvailabilityZones_${(0, util_1.toTerraformIdentifier)(region)}`
138
+ : "AvailabilityZones", {
121
139
  provider: this.lookup.awsProvider,
140
+ // undefined for the default region -> omitted from synthesized output
141
+ region,
122
142
  });
123
143
  // these should never depend on anything (HACK to avoid cycles)
124
144
  Object.defineProperty(azs, terraform_dependables_aspect_1.SKIP_DEPENDENCY_PROPAGATION, { value: true });
125
- this.lookup.dataAwsAvailabilityZones = azs;
145
+ this.lookup.dataAwsAvailabilityZones[key] = azs;
126
146
  }
127
- return this.lookup.dataAwsAvailabilityZones;
147
+ return this.lookup.dataAwsAvailabilityZones[key];
128
148
  }
129
149
  get dataAwsPartition() {
130
150
  if (!this.lookup.dataAwsPartition) {
@@ -196,11 +216,10 @@ class AwsStack extends stack_base_1.StackBase {
196
216
  * @param region The region to get the service principal ID for
197
217
  */
198
218
  servicePrincipalName(service, region) {
199
- const DEFAULT_REGION_KEY = "default_region";
200
219
  if (!region) {
201
220
  region = DEFAULT_REGION_KEY;
202
221
  }
203
- if (cdktf_1.Token.isUnresolved(region)) {
222
+ if (cdktn_1.Token.isUnresolved(region)) {
204
223
  throw new errors_1.ValidationError("Cannot determine the service principal ID because the region is a token. " +
205
224
  "You must specify the region explicitly.", this);
206
225
  }
@@ -311,8 +330,8 @@ class AwsStack extends stack_base_1.StackBase {
311
330
  * To specify a different strategy for selecting availability zones override this method.
312
331
  */
313
332
  get availabilityZoneIterator() {
314
- const azs = this.dataAwsAvailabilityZones;
315
- return cdktf_1.TerraformIterator.fromDataSources(azs);
333
+ const azs = this.getDataAwsAvailabilityZones();
334
+ return cdktn_1.TerraformIterator.fromDataSources(azs);
316
335
  }
317
336
  /**
318
337
  * Returns a List of Tokens for AZ names available in the stack's
@@ -320,14 +339,20 @@ class AwsStack extends stack_base_1.StackBase {
320
339
  *
321
340
  * The list length is `maxCount` which defaults to 2.
322
341
  *
342
+ * When `region` is provided, the AZs are resolved for that region using the
343
+ * AWS provider v6 per-resource `region` argument (no provider alias is
344
+ * required). This is primarily useful for cross-region lookups such as
345
+ * `Vpc.fromLookup({ region })`.
346
+ *
323
347
  * @param maxCount the maximum number of AZs to return
348
+ * @param region the region to resolve AZs for (defaults to the stack region)
324
349
  */
325
- availabilityZones(maxCount = 2) {
350
+ availabilityZones(maxCount = 2, region) {
326
351
  // TODO: Implement ContextProvider
327
- const azs = this.dataAwsAvailabilityZones;
352
+ const azs = this.getDataAwsAvailabilityZones(region);
328
353
  const azLookups = [];
329
354
  for (let i = 0; i < maxCount; i++) {
330
- azLookups.push(cdktf_1.Fn.element(azs.names, i));
355
+ azLookups.push(cdktn_1.Fn.element(azs.names, i));
331
356
  }
332
357
  return azLookups;
333
358
  }
@@ -382,7 +407,7 @@ class AwsStack extends stack_base_1.StackBase {
382
407
  * the given region.
383
408
  */
384
409
  regionalFact(factName, defaultValue) {
385
- if (!cdktf_1.Token.isUnresolved(this.region)) {
410
+ if (!cdktn_1.Token.isUnresolved(this.region)) {
386
411
  const ret = region_info_1.Fact.find(this.region, factName) ?? defaultValue;
387
412
  if (ret === undefined) {
388
413
  throw new errors_1.ValidationError(`region-info: don't know ${factName} for region ${this.region}. Use 'Fact.register' to provide this value.`, this);
@@ -403,5 +428,5 @@ class AwsStack extends stack_base_1.StackBase {
403
428
  }
404
429
  exports.AwsStack = AwsStack;
405
430
  _a = JSII_RTTI_SYMBOL_1;
406
- AwsStack[_a] = { fqn: "terraconstructs.aws.AwsStack", version: "0.2.4" };
407
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3cy9hd3Mtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxzREFBd0Q7QUFDeEQsc0RBTzZCO0FBQzdCLGlDQU1lO0FBRWYsK0JBQXNEO0FBQ3RELGtDQUFrQztBQVNsQyw4Q0FBa0U7QUFDbEUsMkRBQThFO0FBQzlFLGlDQUErQztBQUMvQyxzQ0FBNEM7QUFDNUMsbURBQW1EO0FBQ25ELDBGQUFzRjtBQUN0Riw2Q0FBNkM7QUFDN0MsMkRBQTJEO0FBRTNELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBNEV4RTs7R0FFRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFTO0lBQ3JDLGdHQUFnRztJQUVoRzs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFNO1FBQzdCLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksZ0JBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxnR0FBZ0c7SUFFaEc7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFxQjtRQUNoRCxNQUFNLENBQUMsR0FBRyxzQkFBYyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUM7UUFDRCxNQUFNLElBQUksd0JBQWUsQ0FDdkIsYUFBYSxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksU0FBUyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksd0VBQXdFLEVBQzVJLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQXdDRCxZQUFZLEtBQWlCLEVBQUUsRUFBVyxFQUFFLFFBQXVCLEVBQUU7UUFDbkUs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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSBcIkBhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYVwiO1xuaW1wb3J0IHsgRmFjdCwgUmVnaW9uSW5mbyB9IGZyb20gXCJAYXdzLWNkay9yZWdpb24taW5mb1wiO1xuaW1wb3J0IHtcbiAgZGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzLFxuICBkYXRhQXdzQ2FsbGVySWRlbnRpdHksXG4gIGRhdGFBd3NQYXJ0aXRpb24sXG4gIGRhdGFBd3NSZWdpb24sXG4gIGRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsLFxuICBwcm92aWRlcixcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybVN0YWNrLFxuICBUZXJyYWZvcm1JdGVyYXRvcixcbiAgVG9rZW4sXG4gIEZuLFxuICBSZXNvdXJjZVRlcnJhZm9ybUl0ZXJhdG9yLFxufSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBcm4sIEFybkNvbXBvbmVudHMsIEFybkZvcm1hdCB9IGZyb20gXCIuL2FyblwiO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSBcIi4vY3gtYXBpXCI7XG5pbXBvcnQgeyBBd3NQcm92aWRlckNvbmZpZyB9IGZyb20gXCIuL3Byb3ZpZGVyLWNvbmZpZy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IElBc3NldE1hbmFnZXIgfSBmcm9tIFwiLi4vYXNzZXQtbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgRG9ja2VySW1hZ2VBc3NldExvY2F0aW9uLFxuICBEb2NrZXJJbWFnZUFzc2V0U291cmNlLFxuICBGaWxlQXNzZXRMb2NhdGlvbixcbiAgRmlsZUFzc2V0U291cmNlLFxufSBmcm9tIFwiLi4vYXNzZXRzXCI7XG5pbXBvcnQgeyBTdGFja0Jhc2VQcm9wcywgU3RhY2tCYXNlLCBJU3RhY2sgfSBmcm9tIFwiLi4vc3RhY2stYmFzZVwiO1xuaW1wb3J0IHsgQXdzQXNzZXRNYW5hZ2VyT3B0aW9ucywgQXdzQXNzZXRNYW5hZ2VyIH0gZnJvbSBcIi4vYXdzLWFzc2V0LW1hbmFnZXJcIjtcbmltcG9ydCB7IHRvVGVycmFmb3JtSWRlbnRpZmllciB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB7IGRlcGxveVRpbWVMb29rdXAgfSBmcm9tIFwiLi9yZWdpb24tbG9va3VwXCI7XG5pbXBvcnQgeyBTS0lQX0RFUEVOREVOQ1lfUFJPUEFHQVRJT04gfSBmcm9tIFwiLi4vcHJpdmF0ZS90ZXJyYWZvcm0tZGVwZW5kYWJsZXMtYXNwZWN0XCI7XG4vLyBpbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4vYXdzLWNvbnN0cnVjdFwiO1xuLy8gaW1wb3J0IHsgVGFnTWFuYWdlciwgSVRhZ2dhYmxlVjIgfSBmcm9tIFwiLi90YWctbWFuYWdlclwiO1xuXG5jb25zdCBBV1NfU1RBQ0tfU1lNQk9MID0gU3ltYm9sLmZvcihcInRlcnJhY29uc3RydWN0cy9saWIvYXdzLkF3c1N0YWNrXCIpO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF3c1N0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja0Jhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIFByb3ZpZGVyIGNvbmZpZ3VyYXRpb24gKHdpdGhvdXQgdGhlIGFsaWFzIGZpZWxkKVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXJDb25maWc/OiBBd3NQcm92aWRlckNvbmZpZztcblxuICAvKipcbiAgICogQXNzZXQgbWFuYWdlciBmb3IgaGFuZGxpbmcgZmlsZSBhbmQgRG9ja2VyIGltYWdlIGFzc2V0c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF3c0Fzc2V0TWFuYWdlciB3aXRoIGRlZmF1bHQgc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TWFuYWdlcj86IElBc3NldE1hbmFnZXI7XG5cbiAgLyoqXG4gICAqIEFzc2V0IE1hbmFnZW1lbnQgb3B0aW9uc1xuICAgKlxuICAgKiBVc2UgdGhpcyB0byByZWZlcmVuY2UgZXhpc3RpbmcgUzMgQnVja2V0IGFuZCBFQ1IgUmVwb3NpdG9yeSBmb3IgYXNzZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFN0YWNrIGNyZWF0ZXMgQnVja2V0IGFuZCBSZXBvc2l0b3J5IG9uIGRlbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRPcHRpb25zPzogQXdzQXNzZXRNYW5hZ2VyT3B0aW9ucztcbn1cblxuLy8gVE9ETzogUmUtYWRkIElUYWdnYWJsZVYyXG5leHBvcnQgaW50ZXJmYWNlIElBd3NTdGFjayBleHRlbmRzIElTdGFjayB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIFJlZ2lvbiBmb3IgdGhlIFRlcnJhQ29uc3RydWN0XG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBV1MgQWNjb3VudCBmb3IgdGhlIFRlcnJhQ29uc3RydWN0XG4gICAqL1xuICByZWFkb25seSBhY2NvdW50OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQVdTIFBhcnRpdGlvbiBmb3IgdGhlIFRlcnJhQ29uc3RydWN0XG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2UgUHJpbmNpcGFsIElkIGZvciBhIHNwZWNpZmljIHNlcnZpY2VcbiAgICpcbiAgICogQHBhcmFtIHNlcnZpY2VOYW1lIFRoZSBzZXJ2aWNlIG5hbWUgdG8gZ2V0IHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBJRCBmb3JcbiAgICogQHBhcmFtIHJlZ2lvbiBUaGUgcmVnaW9uIHRvIGdldCB0aGUgc2VydmljZSBwcmluY2lwYWwgSUQgZm9yXG4gICAqL1xuICBzZXJ2aWNlUHJpbmNpcGFsTmFtZShzZXJ2aWNlTmFtZTogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcpOiBzdHJpbmc7XG4gIC8vIC8qKlxuICAvLyAgKiBQcm9kdWNlIHRoZSBUb2tlbidzIHZhbHVlIGF0IHJlc29sdXRpb24gdGltZVxuICAvLyAgKi9cbiAgLy8gcmVzb2x2ZTxUPihvYmo6IFQpOiBUO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGZpbGUgYXNzZXQgb24gdGhpcyBTdGFja1xuICAgKi9cbiAgYWRkRmlsZUFzc2V0KGFzc2V0OiBGaWxlQXNzZXRTb3VyY2UpOiBGaWxlQXNzZXRMb2NhdGlvbjtcblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBkb2NrZXIgaW1hZ2UgYXNzZXQgb24gdGhpcyBTdGFja1xuICAgKi9cbiAgYWRkRG9ja2VySW1hZ2VBc3NldChhc3NldDogRG9ja2VySW1hZ2VBc3NldFNvdXJjZSk6IERvY2tlckltYWdlQXNzZXRMb2NhdGlvbjtcbn1cblxuaW50ZXJmYWNlIEF3c0xvb2t1cCB7XG4gIGF3c1Byb3ZpZGVyOiBwcm92aWRlci5Bd3NQcm92aWRlcjtcbiAgZGF0YUF3c1JlZ2lvbj86IGRhdGFBd3NSZWdpb24uRGF0YUF3c1JlZ2lvbjtcbiAgZGF0YUF3c0NhbGxlcklkZW50aXR5PzogZGF0YUF3c0NhbGxlcklkZW50aXR5LkRhdGFBd3NDYWxsZXJJZGVudGl0eTtcbiAgZGF0YUF3c1BhcnRpdGlvbj86IGRhdGFBd3NQYXJ0aXRpb24uRGF0YUF3c1BhcnRpdGlvbjtcbiAgZGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzPzogZGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzLkRhdGFBd3NBdmFpbGFiaWxpdHlab25lcztcbiAgLy8gQVdTIFNlcnZpY2UgUHJpbmNpcGFscyBieSByZWdpb24gYW5kIGJ5IHNlcnZpY2VcbiAgZGF0YUF3c1NlcnZpY2VQcmluY2lwYWxzOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxzdHJpbmcsIGRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsLkRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsPlxuICA+O1xufVxuXG4vKipcbiAqIEEgVGVycmFmb3JtIHN0YWNrIGNvbnN0cmFpbmVkIHRvIGEgc2luZ2xlIEFXUyBBY2NvdW50L1JlZ2lvbiB0byBzaW11bGF0ZSBDRk4gYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NTdGFjayBleHRlbmRzIFN0YWNrQmFzZSBpbXBsZW1lbnRzIElBd3NTdGFjayB7XG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTUwLjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvc3RhY2sudHMjTDIwNFxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgU3RhY2suXG4gICAqXG4gICAqIGF0dHJpYnV0ZSBkZXRlY3Rpb24gc2luY2UgYXMgJ2luc3RhbmNlb2YnIHBvdGVudGlhbGx5IGZhaWxzIGFjcm9zcyBMaWJyYXJ5IHJlbGVhc2VzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0F3c1N0YWNrKHg6IGFueSk6IHggaXMgQXdzU3RhY2sge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiICYmIEFXU19TVEFDS19TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTUwLjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvc3RhY2sudHMjTDIxMlxuXG4gIC8qKlxuICAgKiBMb29rcyB1cCB0aGUgZmlyc3Qgc3RhY2sgc2NvcGUgaW4gd2hpY2ggYGNvbnN0cnVjdGAgaXMgZGVmaW5lZC4gRmFpbHMgaWYgdGhlcmUgaXMgbm8gc3RhY2sgdXAgdGhlIHRyZWUgb3IgdGhlIHN0YWNrIGlzIG5vdCBhbiBBd3NTdGFjay5cbiAgICogQHBhcmFtIGNvbnN0cnVjdCBUaGUgY29uc3RydWN0IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2ZBd3NDb25zdHJ1Y3QoY29uc3RydWN0OiBJQ29uc3RydWN0KTogQXdzU3RhY2sge1xuICAgIGNvbnN0IHMgPSBUZXJyYWZvcm1TdGFjay5vZihjb25zdHJ1Y3QpO1xuICAgIGlmIChBd3NTdGFjay5pc0F3c1N0YWNrKHMpKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgIGBSZXNvdXJjZSAnJHtjb25zdHJ1Y3QuY29uc3RydWN0b3I/Lm5hbWV9JyBhdCAnJHtjb25zdHJ1Y3Qubm9kZS5wYXRofScgc2hvdWxkIGJlIGNyZWF0ZWQgaW4gdGhlIHNjb3BlIG9mIGFuIEF3c1N0YWNrLCBidXQgbm8gQXdzU3RhY2sgZm91bmRgLFxuICAgICAgY29uc3RydWN0LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQXNzZXQgbWFuYWdlciBmb3IgaGFuZGxpbmcgZmlsZSBhbmQgRG9ja2VyIGltYWdlIGFzc2V0c1xuICAgKi9cbiAgcHJpdmF0ZSBfYXNzZXRNYW5hZ2VyPzogSUFzc2V0TWFuYWdlcjtcblxuICAvLyAvKipcbiAgLy8gICogVGFncyB0byBiZSBhcHBsaWVkIHRvIHRoZSBzdGFjay5cbiAgLy8gICovXG4gIC8vIHB1YmxpYyByZWFkb25seSBjZGtUYWdNYW5hZ2VyOiBUYWdNYW5hZ2VyO1xuXG4gIHByaXZhdGUgX2xvb2t1cD86IEF3c0xvb2t1cDtcbiAgcHJpdmF0ZSByZWdpb25hbEF3c1Byb3ZpZGVyczogeyBbcmVnaW9uOiBzdHJpbmddOiBwcm92aWRlci5Bd3NQcm92aWRlciB9ID0ge307XG5cbiAgLyoqXG4gICAqIExpc3RzIGFsbCBtaXNzaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uXG4gICAqIFRoaXMgaXMgcmV0dXJuZWQgd2hlbiB0aGUgc3RhY2sgaXMgc3ludGhlc2l6ZWQgdW5kZXIgdGhlICdtaXNzaW5nJyBhdHRyaWJ1dGVcbiAgICogYW5kIGFsbG93cyB0b29saW5nIHRvIG9idGFpbiB0aGUgY29udGV4dCBhbmQgcmUtc3ludGhlc2l6ZS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX21pc3NpbmdDb250ZXh0OiBjeHNjaGVtYS5NaXNzaW5nQ29udGV4dFtdO1xuXG4gIC8qKlxuICAgKiBDYWNoZSB0aGVzZSB0b2tlbnMgZm9yIHJlbGlhYmxlIGNvbXBhcmlzb25zLlxuICAgKlxuICAgKiBFdmVyeSBjYWxsIGZvciB0aGUgc2FtZSBUb2tlbiB3aWxsIHByb2R1Y2UgYSBuZXcgdW5pcXVlIHN0cmluZywgbm9cbiAgICogYXR0ZW1wdCBpcyBtYWRlIHRvIGRlZHVwbGljYXRlLiBUb2tlbiBvYmplY3RzIHNob3VsZCBjYWNoZSB0aGVcbiAgICogdmFsdWUgdGhlbXNlbHZlcywgaWYgcmVxdWlyZWQuXG4gICAqXG4gICAqIGRhdGFTb3VyY2UuZ2V0U1RyaW5nYXR0cmlidXRlIC0+IFRva2VuLmFzU3RyaW5nIC0+IHRva2VuTWFwLnJlZ2lzdGVyU3RyaW5nXG4gICAqIHJlZjpcbiAgICogLSBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvYmxvYi92MC4yMC4xMC9wYWNrYWdlcy9jZGt0Zi9saWIvdGVycmFmb3JtLWRhdGEtc291cmNlLnRzI0w2OFxuICAgKiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9ibG9iL3YwLjIwLjEwL3BhY2thZ2VzL2Nka3RmL2xpYi90b2tlbnMvcHJpdmF0ZS90b2tlbi1tYXAudHMjTDUwLUw2NlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvdmlkZXJDb25maWc6IEF3c1Byb3ZpZGVyQ29uZmlnIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hc3NldE9wdGlvbnM6IEF3c0Fzc2V0TWFuYWdlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2FjY291bnRJZFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3Bhcml0aW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfdXJsU3VmZml4VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZT86IENvbnN0cnVjdCwgaWQ/OiBzdHJpbmcsIHByb3BzOiBBd3NTdGFja1Byb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICAvLyB0aGlzLmNka1RhZ01hbmFnZXIgPSBuZXcgVGFnTWFuYWdlcihcbiAgICAvLyAgIFRhZ1R5cGUuS0VZX1ZBTFVFLFxuICAgIC8vICAgXCJjZGt0ZjpzdGFja1wiLFxuICAgIC8vICAgcHJvcHMucHJvdmlkZXJDb25maWcuZGVmYXVsdFRhZ3MsXG4gICAgLy8gKTtcbiAgICB0aGlzLl9taXNzaW5nQ29udGV4dCA9IG5ldyBBcnJheTxjeHNjaGVtYS5NaXNzaW5nQ29udGV4dD4oKTtcbiAgICB0aGlzLl9wcm92aWRlckNvbmZpZyA9IHByb3BzLnByb3ZpZGVyQ29uZmlnO1xuICAgIHRoaXMuX2Fzc2V0T3B0aW9ucyA9IHByb3BzLmFzc2V0T3B0aW9ucztcbiAgICB0aGlzLl9hc3NldE1hbmFnZXIgPSBwcm9wcy5hc3NldE1hbmFnZXI7XG5cbiAgICAvLyB0aGVzZSBzaG91bGQgbmV2ZXIgZGVwZW5kIG9uIGFueXRoaW5nIChIQUNLIHRvIGF2b2lkIGN5Y2xlcylcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgQVdTX1NUQUNLX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGxvb2t1cCgpOiBBd3NMb29rdXAge1xuICAgIC8vIEluaXRpYWxpemUgZGVmYXVsdCBBV1MgcHJvdmlkZXJcbiAgICB0aGlzLl9sb29rdXAgPz89IHtcbiAgICAgIGF3c1Byb3ZpZGVyOiBuZXcgcHJvdmlkZXIuQXdzUHJvdmlkZXIodGhpcywgXCJkZWZhdWx0QXdzUHJvdmlkZXJcIiwge1xuICAgICAgICAvLyBkZWZhdWx0VGFnczogdGhpcy5jZGtUYWdNYW5hZ2VyLnJlbmRlcmVkVGFncyxcbiAgICAgICAgLi4uKHRoaXMuX3Byb3ZpZGVyQ29uZmlnID8/IHt9KSxcbiAgICAgIH0pLFxuICAgICAgZGF0YUF3c1NlcnZpY2VQcmluY2lwYWxzOiB7fSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLl9sb29rdXA7XG4gIH1cblxuICBwcml2YXRlIGdldCBhc3NldE1hbmFnZXIoKTogSUFzc2V0TWFuYWdlciB7XG4gICAgLy8gSW5pdGlhbGl6ZSBhc3NldCBtYW5hZ2VyXG4gICAgdGhpcy5fYXNzZXRNYW5hZ2VyID8/PSBuZXcgQXdzQXNzZXRNYW5hZ2VyKHRoaXMsIHtcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICBwYXJ0aXRpb246IHRoaXMucGFydGl0aW9uLFxuICAgICAgdXJsU3VmZml4OiB0aGlzLnVybFN1ZmZpeCxcbiAgICAgIHF1YWxpZmllcjogdGhpcy5ncmlkVVVJRCxcbiAgICAgIC4uLih0aGlzLl9hc3NldE9wdGlvbnMgfHwge30pLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9hc3NldE1hbmFnZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb3ZpZGVyKCk6IHByb3ZpZGVyLkF3c1Byb3ZpZGVyIHtcbiAgICByZXR1cm4gdGhpcy5sb29rdXAuYXdzUHJvdmlkZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBSZWdpb24gb2YgdGhlIEFXUyBTdGFja1xuICAgKi9cbiAgcHVibGljIGdldCByZWdpb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5sb29rdXAuYXdzUHJvdmlkZXIucmVnaW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb29rdXAuYXdzUHJvdmlkZXIucmVnaW9uO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubG9va3VwLmRhdGFBd3NSZWdpb24pIHtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IG5ldyBkYXRhQXdzUmVnaW9uLkRhdGFBd3NSZWdpb24odGhpcywgXCJSZWdpb25cIiwge1xuICAgICAgICBwcm92aWRlcjogdGhpcy5sb29rdXAuYXdzUHJvdmlkZXIsXG4gICAgICB9KTtcbiAgICAgIC8vIHRoZXNlIHNob3VsZCBuZXZlciBkZXBlbmQgb24gYW55dGhpbmcgKEhBQ0sgdG8gYXZvaWQgY3ljbGVzKVxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlZ2lvbiwgU0tJUF9ERVBFTkRFTkNZX1BST1BBR0FUSU9OLCB7XG4gICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmxvb2t1cC5kYXRhQXdzUmVnaW9uID0gcmVnaW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb29rdXAuZGF0YUF3c1JlZ2lvbi5uYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGF0YUF3c0NhbGxlcklkZW50aXR5KCk6IGRhdGFBd3NDYWxsZXJJZGVudGl0eS5EYXRhQXdzQ2FsbGVySWRlbnRpdHkge1xuICAgIGlmICghdGhpcy5sb29rdXAuZGF0YUF3c0NhbGxlcklkZW50aXR5KSB7XG4gICAgICBjb25zdCBpZGVudGl0eSA9IG5ldyBkYXRhQXdzQ2FsbGVySWRlbnRpdHkuRGF0YUF3c0NhbGxlcklkZW50aXR5KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkNhbGxlcklkZW50aXR5XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5sb29rdXAuYXdzUHJvdmlkZXIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgLy8gdGhlc2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyAoSEFDSyB0byBhdm9pZCBjeWNsZXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaWRlbnRpdHksIFNLSVBfREVQRU5ERU5DWV9QUk9QQUdBVElPTiwge1xuICAgICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb29rdXAuZGF0YUF3c0NhbGxlcklkZW50aXR5ID0gaWRlbnRpdHk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvb2t1cC5kYXRhQXdzQ2FsbGVySWRlbnRpdHk7XG4gIH1cblxuICBwcml2YXRlIGdldCBkYXRhQXdzQXZhaWxhYmlsaXR5Wm9uZXMoKTogZGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzLkRhdGFBd3NBdmFpbGFiaWxpdHlab25lcyB7XG4gICAgaWYgKCF0aGlzLmxvb2t1cC5kYXRhQXdzQXZhaWxhYmlsaXR5Wm9uZXMpIHtcbiAgICAgIGNvbnN0IGF6cyA9IG5ldyBkYXRhQXdzQXZhaWxhYmlsaXR5Wm9uZXMuRGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkF2YWlsYWJpbGl0eVpvbmVzXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5sb29rdXAuYXdzUHJvdmlkZXIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgLy8gdGhlc2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyAoSEFDSyB0byBhdm9pZCBjeWNsZXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXpzLCBTS0lQX0RFUEVOREVOQ1lfUFJPUEFHQVRJT04sIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgICB0aGlzLmxvb2t1cC5kYXRhQXdzQXZhaWxhYmlsaXR5Wm9uZXMgPSBhenM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvb2t1cC5kYXRhQXdzQXZhaWxhYmlsaXR5Wm9uZXM7XG4gIH1cblxuICBwcml2YXRlIGdldCBkYXRhQXdzUGFydGl0aW9uKCk6IGRhdGFBd3NQYXJ0aXRpb24uRGF0YUF3c1BhcnRpdGlvbiB7XG4gICAgaWYgKCF0aGlzLmxvb2t1cC5kYXRhQXdzUGFydGl0aW9uKSB7XG4gICAgICBjb25zdCBwYXJ0aXRpb24gPSBuZXcgZGF0YUF3c1BhcnRpdGlvbi5EYXRhQXdzUGFydGl0aW9uKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlBhcnRpdGl0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5sb29rdXAuYXdzUHJvdmlkZXIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgLy8gdGhlc2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyAoSEFDSyB0byBhdm9pZCBjeWNsZXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydGl0aW9uLCBTS0lQX0RFUEVOREVOQ1lfUFJPUEFHQVRJT04sIHtcbiAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9va3VwLmRhdGFBd3NQYXJ0aXRpb24gPSBwYXJ0aXRpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvb2t1cC5kYXRhQXdzUGFydGl0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWdpb25hbEF3c1Byb3ZpZGVyKHJlZ2lvbjogc3RyaW5nKTogcHJvdmlkZXIuQXdzUHJvdmlkZXIge1xuICAgIGlmICghdGhpcy5yZWdpb25hbEF3c1Byb3ZpZGVyc1tyZWdpb25dKSB7XG4gICAgICB0aGlzLnJlZ2lvbmFsQXdzUHJvdmlkZXJzW3JlZ2lvbl0gPSBuZXcgcHJvdmlkZXIuQXdzUHJvdmlkZXIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGBhd3NfJHt0b1RlcnJhZm9ybUlkZW50aWZpZXIocmVnaW9uKX1gLFxuICAgICAgICB7XG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgIGFsaWFzOiB0b1RlcnJhZm9ybUlkZW50aWZpZXIocmVnaW9uKSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlZ2lvbmFsQXdzUHJvdmlkZXJzW3JlZ2lvbl07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBBY2NvdW50IG9mIHRoZSBBV1MgU3RhY2tcbiAgICovXG4gIHB1YmxpYyBnZXQgYWNjb3VudCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fYWNjb3VudElkVG9rZW4pIHtcbiAgICAgIHRoaXMuX2FjY291bnRJZFRva2VuID0gdGhpcy5kYXRhQXdzQ2FsbGVySWRlbnRpdHkuYWNjb3VudElkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWNjb3VudElkVG9rZW47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBTdGFja1xuICAgKi9cbiAgcHVibGljIGdldCBwYXJ0aXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJpdGlvblRva2VuKSB7XG4gICAgICB0aGlzLl9wYXJpdGlvblRva2VuID0gdGhpcy5kYXRhQXdzUGFydGl0aW9uLnBhcnRpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Bhcml0aW9uVG9rZW47XG4gIH1cblxuICAvKipcbiAgICogQmFzZSBETlMgZG9tYWluIG5hbWUgZm9yIHRoZSBjdXJyZW50IHBhcnRpdGlvbiAoZS5nLiwgYW1hem9uYXdzLmNvbSBpbiBBV1MgQ29tbWVyY2lhbCwgYW1hem9uYXdzLmNvbS5jbiBpbiBBV1MgQ2hpbmEpLlxuICAgKi9cbiAgcHVibGljIGdldCB1cmxTdWZmaXgoKSB7XG4gICAgaWYgKCF0aGlzLl91cmxTdWZmaXhUb2tlbikge1xuICAgICAgdGhpcy5fdXJsU3VmZml4VG9rZW4gPSB0aGlzLmRhdGFBd3NQYXJ0aXRpb24uZG5zU3VmZml4O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdXJsU3VmZml4VG9rZW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBuYW1lIGJhc2VkIG9uIHRoZSByZWdpb24gaXQncyB1c2VkIGluLlxuICAgKlxuICAgKiBTb21lIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWVzIHVzZWQgdG8gYmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgcGFydGl0aW9ucyxcbiAgICogYW5kIHNvbWUgd2VyZSBub3QuXG4gICAqXG4gICAqIFRoZXNlIGRheXMgYWxsIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWVzIGFyZSBzdGFuZGFyZGl6ZWQsIGFuZCB0aGV5IGFyZSBhbGxcbiAgICogb2YgdGhlIGZvcm0gYDxzZXJ2aWNlbmFtZT4uYW1hem9uYXdzLmNvbWAuXG4gICAqXG4gICAqIFRvIGF2b2lkIGJyZWFraW5nIGNoYW5nZXMsIGhhbmRsaW5nIGlzIHByb3ZpZGVkIGZvciBzZXJ2aWNlcyBhZGRlZCB3aXRoIHRoZSBmb3JtYXRzIGJlbG93LFxuICAgKiBob3dldmVyLCBubyBhZGRpdGlvbmFsIGhhbmRsaW5nIHdpbGwgYmUgYWRkZWQgZm9yIG5ldyByZWdpb25zIG9yIHBhcnRpdGlvbnMuXG4gICAqICAgLSBzM1xuICAgKiAgIC0gczMuYW1hem9uYXdzLmNvbVxuICAgKiAgIC0gczMuYW1hem9uYXdzLmNvbS5jblxuICAgKiAgIC0gczMuYzJzLmljLmdvdlxuICAgKiAgIC0gczMuc2Mycy5zZ292LmdvdlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZSBUaGUgc2VydmljZSBuYW1lIHRvIGdldCB0aGUgc2VydmljZSBwcmluY2lwYWwgSUQgZm9yXG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvbiB0byBnZXQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIElEIGZvclxuICAgKi9cbiAgcHVibGljIHNlcnZpY2VQcmluY2lwYWxOYW1lKHNlcnZpY2U6IHN0cmluZywgcmVnaW9uPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBERUZBVUxUX1JFR0lPTl9LRVkgPSBcImRlZmF1bHRfcmVnaW9uXCI7XG4gICAgaWYgKCFyZWdpb24pIHtcbiAgICAgIHJlZ2lvbiA9IERFRkFVTFRfUkVHSU9OX0tFWTtcbiAgICB9XG5cbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHJlZ2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGRldGVybWluZSB0aGUgc2VydmljZSBwcmluY2lwYWwgSUQgYmVjYXVzZSB0aGUgcmVnaW9uIGlzIGEgdG9rZW4uIFwiICtcbiAgICAgICAgICBcIllvdSBtdXN0IHNwZWNpZnkgdGhlIHJlZ2lvbiBleHBsaWNpdGx5LlwiLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBpZiBmdWxsIHNlcnZpY2UgbmFtZSBpcyBwcm92aWRlZCwgZXh0cmFjdCBqdXN0IHRoZSBzZXJ2aWNlIG5hbWVcbiAgICAvLyBmb3Igc3VwcG9ydGVkIGNhc2VzIChhcyByZXF1aXJlZCBieSBUZXJyYWZvcm0gYXdzX3NlcnZpY2VfcHJpbmNpcGFsIERhdGEgU291cmNlKVxuICAgIGNvbnN0IG1hdGNoID0gc2VydmljZS5tYXRjaChcbiAgICAgIC9eKFteLl0rKSg/Oig/OlxcLmFtYXpvbmF3c1xcLmNvbSg/OlxcLmNuKT8pfCg/OlxcLmMyc1xcLmljXFwuZ292KXwoPzpcXC5zYzJzXFwuc2dvdlxcLmdvdikpPyQvLFxuICAgICk7XG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSBtYXRjaCA/IG1hdGNoWzFdIDogc2VydmljZTtcbiAgICBpZiAoIXRoaXMubG9va3VwLmRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsc1tyZWdpb25dKSB7XG4gICAgICB0aGlzLmxvb2t1cC5kYXRhQXdzU2VydmljZVByaW5jaXBhbHNbcmVnaW9uXSA9IHt9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMubG9va3VwLmRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsc1tyZWdpb25dW3NlcnZpY2VOYW1lXSkge1xuICAgICAgY29uc3Qgc3ZjcCA9IG5ldyBkYXRhQXdzU2VydmljZVByaW5jaXBhbC5EYXRhQXdzU2VydmljZVByaW5jaXBhbChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYGF3c19zdmNwXyR7dG9UZXJyYWZvcm1JZGVudGlmaWVyKHJlZ2lvbil9XyR7c2VydmljZU5hbWV9fWAsXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICBwcm92aWRlcjpcbiAgICAgICAgICAgIHJlZ2lvbiA9PT0gREVGQVVMVF9SRUdJT05fS0VZXG4gICAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIDogdGhpcy5nZXRSZWdpb25hbEF3c1Byb3ZpZGVyKHJlZ2lvbiksXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgLy8gdGhlc2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyAoSEFDSyB0byBhdm9pZCBjeWNsZXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ZjcCwgU0tJUF9ERVBFTkRFTkNZX1BST1BBR0FUSU9OLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgdGhpcy5sb29rdXAuZGF0YUF3c1NlcnZpY2VQcmluY2lwYWxzW3JlZ2lvbl1bc2VydmljZU5hbWVdID0gc3ZjcDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9va3VwLmRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsc1tyZWdpb25dW3NlcnZpY2VOYW1lXS5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gQVJOIGZyb20gY29tcG9uZW50cy5cbiAgICpcbiAgICogSWYgYHBhcnRpdGlvbmAsIGByZWdpb25gIG9yIGBhY2NvdW50YCBhcmUgbm90IHNwZWNpZmllZCwgdGhlIHN0YWNrJ3NcbiAgICogcGFydGl0aW9uLCByZWdpb24gYW5kIGFjY291bnQgd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBJZiBhbnkgY29tcG9uZW50IGlzIHRoZSBlbXB0eSBzdHJpbmcsIGFuIGVtcHR5IHN0cmluZyB3aWxsIGJlIGluc2VydGVkXG4gICAqIGludG8gdGhlIGdlbmVyYXRlZCBBUk4gYXQgdGhlIGxvY2F0aW9uIHRoYXQgY29tcG9uZW50IGNvcnJlc3BvbmRzIHRvLlxuICAgKlxuICAgKiBUaGUgQVJOIHdpbGwgYmUgZm9ybWF0dGVkIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqICAgYXJuOntwYXJ0aXRpb259OntzZXJ2aWNlfTp7cmVnaW9ufTp7YWNjb3VudH06e3Jlc291cmNlfXtzZXB9e3Jlc291cmNlLW5hbWV9XG4gICAqXG4gICAqIFRoZSByZXF1aXJlZCBBUk4gcGllY2VzIHRoYXQgYXJlIG9taXR0ZWQgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBzdGFjayB0aGF0XG4gICAqIHRoZSAnc2NvcGUnIGlzIGF0dGFjaGVkIHRvLiBJZiBhbGwgQVJOIHBpZWNlcyBhcmUgc3VwcGxpZWQsIHRoZSBzdXBwbGllZCBzY29wZVxuICAgKiBjYW4gYmUgJ3VuZGVmaW5lZCcuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0QXJuKGNvbXBvbmVudHM6IEFybkNvbXBvbmVudHMpOiBzdHJpbmcge1xuICAgIHJldHVybiBBcm4uZm9ybWF0KGNvbXBvbmVudHMsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGFuIEFSTiwgcGFyc2VzIGl0IGFuZCByZXR1cm5zIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIElGIFRIRSBBUk4gSVMgQSBDT05DUkVURSBTVFJJTkcuLi5cbiAgICpcbiAgICogLi4uaXQgd2lsbCBiZSBwYXJzZWQgYW5kIHZhbGlkYXRlZC4gVGhlIHNlcGFyYXRvciAoYHNlcGApIHdpbGwgYmUgc2V0IHRvICcvJ1xuICAgKiBpZiB0aGUgNnRoIGNvbXBvbmVudCBpbmNsdWRlcyBhICcvJywgaW4gd2hpY2ggY2FzZSwgYHJlc291cmNlYCB3aWxsIGJlIHNldFxuICAgKiB0byB0aGUgdmFsdWUgYmVmb3JlIHRoZSAnLycgYW5kIGByZXNvdXJjZU5hbWVgIHdpbGwgYmUgdGhlIHJlc3QuIEluIGNhc2VcbiAgICogdGhlcmUgaXMgbm8gJy8nLCBgcmVzb3VyY2VgIHdpbGwgYmUgc2V0IHRvIHRoZSA2dGggY29tcG9uZW50cyBhbmRcbiAgICogYHJlc291cmNlTmFtZWAgd2lsbCBiZSBzZXQgdG8gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZy5cbiAgICpcbiAgICogSUYgVEhFIEFSTiBJUyBBIFRPS0VOLi4uXG4gICAqXG4gICAqIC4uLml0IGNhbm5vdCBiZSB2YWxpZGF0ZWQsIHNpbmNlIHdlIGRvbid0IGhhdmUgdGhlIGFjdHVhbCB2YWx1ZSB5ZXQgYXQgdGhlXG4gICAqIHRpbWUgb2YgdGhpcyBmdW5jdGlvbiBjYWxsLiBZb3Ugd2lsbCBoYXZlIHRvIHN1cHBseSBgc2VwSWZUb2tlbmAgYW5kXG4gICAqIHdoZXRoZXIgb3Igbm90IEFSTnMgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCB1c3VhbGx5IGhhdmUgcmVzb3VyY2UgbmFtZXNcbiAgICogaW4gb3JkZXIgdG8gcGFyc2UgaXQgcHJvcGVybHkuIFRoZSByZXN1bHRpbmcgYEFybkNvbXBvbmVudHNgIG9iamVjdCB3aWxsXG4gICAqIGNvbnRhaW4gdG9rZW5zIGZvciB0aGUgc3ViZXhwcmVzc2lvbnMgb2YgdGhlIEFSTiwgbm90IHN0cmluZyBsaXRlcmFscy5cbiAgICpcbiAgICogSWYgdGhlIHJlc291cmNlIG5hbWUgY291bGQgcG9zc2libHkgY29udGFpbiB0aGUgc2VwYXJhdG9yIGNoYXIsIHRoZSBhY3R1YWxcbiAgICogcmVzb3VyY2UgbmFtZSBjYW5ub3QgYmUgcHJvcGVybHkgcGFyc2VkLiBUaGlzIG9ubHkgb2NjdXJzIGlmIHRoZSBzZXBhcmF0b3JcbiAgICogY2hhciBpcyAnLycsIGFuZCBoYXBwZW5zIGZvciBleGFtcGxlIGZvciBTMyBvYmplY3QgQVJOcywgSUFNIFJvbGUgQVJOcyxcbiAgICogSUFNIE9JREMgUHJvdmlkZXIgQVJOcywgZXRjLiBUbyBwcm9wZXJseSBleHRyYWN0IHRoZSByZXNvdXJjZSBuYW1lIGZyb20gYVxuICAgKiBUb2tlbml6ZWQgQVJOLCB5b3UgbXVzdCBrbm93IHRoZSByZXNvdXJjZSB0eXBlIGFuZCBjYWxsXG4gICAqIGBBcm4uZXh0cmFjdFJlc291cmNlTmFtZWAuXG4gICAqXG4gICAqIEBwYXJhbSBhcm4gVGhlIEFSTiBzdHJpbmcgdG8gcGFyc2VcbiAgICogQHBhcmFtIHNlcElmVG9rZW4gVGhlIHNlcGFyYXRvciB1c2VkIHRvIHNlcGFyYXRlIHJlc291cmNlIGZyb20gcmVzb3VyY2VOYW1lXG4gICAqIEBwYXJhbSBoYXNOYW1lIFdoZXRoZXIgdGhlcmUgaXMgYSBuYW1lIGNvbXBvbmVudCBpbiB0aGUgQVJOIGF0IGFsbC4gRm9yXG4gICAqIGV4YW1wbGUsIFNOUyBUb3BpY3MgQVJOcyBoYXZlIHRoZSAncmVzb3VyY2UnIGNvbXBvbmVudCBjb250YWluIHRoZSB0b3BpY1xuICAgKiBuYW1lLCBhbmQgbm8gJ3Jlc291cmNlTmFtZScgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBBcm5Db21wb25lbnRzIG9iamVjdCB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHRoZSB2YXJpb3VzXG4gICAqIGNvbXBvbmVudHMgb2YgdGhlIEFSTi5cbiAgICpcbiAgICogQHJldHVybnMgYW4gQXJuQ29tcG9uZW50cyBvYmplY3Qgd2hpY2ggYWxsb3dzIGFjY2VzcyB0byB0aGUgdmFyaW91c1xuICAgKiAgICAgIGNvbXBvbmVudHMgb2YgdGhlIEFSTi5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNwbGl0QXJuIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBwYXJzZUFybihcbiAgICBhcm46IHN0cmluZyxcbiAgICBzZXBJZlRva2VuOiBzdHJpbmcgPSBcIi9cIixcbiAgICBoYXNOYW1lOiBib29sZWFuID0gdHJ1ZSxcbiAgKTogQXJuQ29tcG9uZW50cyB7XG4gICAgcmV0dXJuIEFybi5wYXJzZShhcm4sIHNlcElmVG9rZW4sIGhhc05hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyB0aGUgcHJvdmlkZWQgQVJOIGludG8gaXRzIGNvbXBvbmVudHMuXG4gICAqIFdvcmtzIGJvdGggaWYgJ2FybicgaXMgYSBzdHJpbmcgbGlrZSAnYXJuOmF3czpzMzo6OmJ1Y2tldCcsXG4gICAqIGFuZCBhIFRva2VuIHJlcHJlc2VudGluZyBhIGR5bmFtaWMgQ2xvdWRGb3JtYXRpb24gZXhwcmVzc2lvblxuICAgKiAoaW4gd2hpY2ggY2FzZSB0aGUgcmV0dXJuZWQgY29tcG9uZW50cyB3aWxsIGFsc28gYmUgZHluYW1pYyBDbG91ZEZvcm1hdGlvbiBleHByZXNzaW9ucyxcbiAgICogZW5jb2RlZCBhcyBUb2tlbnMpLlxuICAgKlxuICAgKiBAcGFyYW0gYXJuIHRoZSBBUk4gdG8gc3BsaXQgaW50byBpdHMgY29tcG9uZW50c1xuICAgKiBAcGFyYW0gYXJuRm9ybWF0IHRoZSBleHBlY3RlZCBmb3JtYXQgb2YgJ2FybicgLSBkZXBlbmRzIG9uIHdoYXQgZm9ybWF0IHRoZSBzZXJ2aWNlICdhcm4nIHJlcHJlc2VudHMgdXNlc1xuICAgKi9cbiAgcHVibGljIHNwbGl0QXJuKGFybjogc3RyaW5nLCBhcm5Gb3JtYXQ6IEFybkZvcm1hdCk6IEFybkNvbXBvbmVudHMge1xuICAgIHJldHVybiBBcm4uc3BsaXQoYXJuLCBhcm5Gb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaXRlcmF0b3IgZm9yIGFsbCBBWnMgdGhhdCBhcmUgYXZhaWxhYmxlIGluIHRoZSBBV1MgZW52aXJvbm1lbnRcbiAgICogKGFjY291bnQvcmVnaW9uKSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdGFjayAoZGVmYXVsdCBvciBhbGlhc2VkIHByb3ZpZGVyKS5cbiAgICpcbiAgICogdGhpcyB3aWxsIHJldHVybiBhIGNka3RmIGl0ZXJhdG9yXG4gICAqXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2Nka3RmL2NvbmNlcHRzL2l0ZXJhdG9ycyNkZWZpbmUtaXRlcmF0b3JzXG4gICAqXG4gICAqIFRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgc3RyYXRlZ3kgZm9yIHNlbGVjdGluZyBhdmFpbGFiaWxpdHkgem9uZXMgb3ZlcnJpZGUgdGhpcyBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGF2YWlsYWJpbGl0eVpvbmVJdGVyYXRvcigpOiBSZXNvdXJjZVRlcnJhZm9ybUl0ZXJhdG9yIHtcbiAgICBjb25zdCBhenMgPSB0aGlzLmRhdGFBd3NBdmFpbGFiaWxpdHlab25lcztcbiAgICByZXR1cm4gVGVycmFmb3JtSXRlcmF0b3IuZnJvbURhdGFTb3VyY2VzKGF6cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIExpc3Qgb2YgVG9rZW5zIGZvciBBWiBuYW1lcyBhdmFpbGFibGUgaW4gdGhlIHN0YWNrJ3NcbiAgICogQVdTIGVudmlyb25tZW50IChhY2NvdW50L3JlZ2lvbikuXG4gICAqXG4gICAqIFRoZSBsaXN0IGxlbmd0aCBpcyBgbWF4Q291bnRgIHdoaWNoIGRlZmF1bHRzIHRvIDIuXG4gICAqXG4gICAqIEBwYXJhbSBtYXhDb3VudCB0aGUgbWF4aW11bSBudW1iZXIgb2YgQVpzIHRvIHJldHVyblxuICAgKi9cbiAgcHVibGljIGF2YWlsYWJpbGl0eVpvbmVzKG1heENvdW50OiBudW1iZXIgPSAyKTogc3RyaW5nW10ge1xuICAgIC8vIFRPRE86IEltcGxlbWVudCBDb250ZXh0UHJvdmlkZXJcbiAgICBjb25zdCBhenMgPSB0aGlzLmRhdGFBd3NBdmFpbGFiaWxpdHlab25lcztcbiAgICBjb25zdCBhekxvb2t1cHM6IGFueVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhDb3VudDsgaSsrKSB7XG4gICAgICBhekxvb2t1cHMucHVzaChGbi5lbGVtZW50KGF6cy5uYW1lcywgaSkpO1xuICAgIH1cbiAgICByZXR1cm4gYXpMb29rdXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZmlsZSBhc3NldCBvbiB0aGlzIFN0YWNrXG4gICAqL1xuICBwdWJsaWMgYWRkRmlsZUFzc2V0KGFzc2V0OiBGaWxlQXNzZXRTb3VyY2UpOiBGaWxlQXNzZXRMb2NhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuYXNzZXRNYW5hZ2VyLmFkZEZpbGVBc3NldChhc3NldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBkb2NrZXIgaW1hZ2UgYXNzZXQgb24gdGhpcyBTdGFja1xuICAgKi9cbiAgcHVibGljIGFkZERvY2tlckltYWdlQXNzZXQoXG4gICAgYXNzZXQ6IERvY2tlckltYWdlQXNzZXRTb3VyY2UsXG4gICk6IERvY2tlckltYWdlQXNzZXRMb2NhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuYXNzZXRNYW5hZ2VyLmFkZERvY2tlckltYWdlQXNzZXQoYXNzZXQpO1xuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIFJlc29sdmUgYSB0b2tlbml6ZWQgdmFsdWUgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgc3RhY2suXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgcmVzb2x2ZTxUPihvYmo6IFQpOiBUIHtcbiAgLy8gICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLWNkay9ibG9iL3YwLjIwLjcvcGFja2FnZXMvY2RrdGYvbGliL3RlcnJhZm9ybS1zdGFjay50cyNMMTUxXG4gIC8vICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTAuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9jb3JlL2xpYi9zdGFjay50cyNMNTcyXG4gIC8vICAgcmV0dXJuIHJlc29sdmUodGhpcywgb2JqKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB0aGF0IGEgY29udGV4dCBrZXkgd2FzIGV4cGVjdGVkXG4gICAqXG4gICAqIENvbnRhaW5zIGluc3RydWN0aW9ucyB3aGljaCB3aWxsIGJlIGVtaXR0ZWQgaW50byB0aGUgY2xvdWQgYXNzZW1ibHkgb24gaG93XG4gICAqIHRoZSBrZXkgc2hvdWxkIGJlIHN1cHBsaWVkLlxuICAgKlxuICAgKiBAcGFyYW0gcmVwb3J0IFRoZSBzZXQgb2YgcGFyYW1ldGVycyBuZWVkZWQgdG8gb2J0YWluIHRoZSBjb250ZXh0XG4gICAqL1xuICBwdWJsaWMgcmVwb3J0TWlzc2luZ0NvbnRleHRLZXkocmVwb3J0OiBjeHNjaGVtYS5NaXNzaW5nQ29udGV4dCkge1xuICAgIHRoaXMuX21pc3NpbmdDb250ZXh0LnB1c2gocmVwb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIGEgZmFjdCB2YWx1ZSBmb3IgdGhlIGdpdmVuIGZhY3QgZm9yIHRoZSByZWdpb24gb2YgdGhpcyBzdGFja1xuICAgKlxuICAgKiBXaWxsIHJldHVybiBhIGRlZmluaXRlIHZhbHVlIG9ubHkgaWYgdGhlIHJlZ2lvbiBvZiB0aGUgY3VycmVudCBzdGFjayBpcyByZXNvbHZlZC5cbiAgICogSWYgbm90LCBhIGxvb2t1cCBtYXAgd2lsbCBiZSBhZGRlZCB0byB0aGUgc3RhY2sgYW5kIHRoZSBsb29rdXAgd2lsbCBiZSBkb25lIGF0XG4gICAqIENESyBkZXBsb3ltZW50IHRpbWUuXG4gICAqXG4gICAqIFdoYXQgcmVnaW9ucyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBsb29rdXAgbWFwIGlzIGNvbnRyb2xsZWQgYnkgdGhlXG4gICAqIGB0ZXJyYWNvbnN0cnVjdHMvY29yZTp0YXJnZXQtcGFydGl0aW9uc2AgY29udGV4dCB2YWx1ZTogaXQgbXVzdCBiZSBzZXQgdG8gYSBsaXN0XG4gICAqIG9mIHBhcnRpdGlvbnMsIGFuZCBvbmx5IHJlZ2lvbnMgZnJvbSB0aGUgZ2l2ZW4gcGFydGl0aW9ucyB3aWxsIGJlIGluY2x1ZGVkLlxuICAgKiBJZiBubyBzdWNoIGNvbnRleHQga2V5IGlzIHNldCwgYWxsIHJlZ2lvbnMgd2lsbCBiZSBpbmNsdWRlZC5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGNvbnN0cnVjdCBsaWJyYXJ5IGF1dGhvcnMuIEFwcGxpY2F0aW9uXG4gICAqIGJ1aWxkZXJzIGNhbiByZWx5IG9uIHRoZSBhYnN0cmFjdGlvbnMgb2ZmZXJlZCBieSBjb25zdHJ1Y3QgbGlicmFyaWVzIGFuZCBkb1xuICAgKiBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCByZWdpb25hbCBmYWN0cy5cbiAgICpcbiAgICogSWYgYGRlZmF1bHRWYWx1ZWAgaXMgbm90IGdpdmVuLCBpdCBpcyBhbiBlcnJvciBpZiB0aGUgZmFjdCBpcyB1bmtub3duIGZvclxuICAgKiB0aGUgZ2l2ZW4gcmVnaW9uLlxuICAgKi9cbiAgcHVibGljIHJlZ2lvbmFsRmFjdChmYWN0TmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucmVnaW9uKSkge1xuICAgICAgY29uc3QgcmV0ID0gRmFjdC5maW5kKHRoaXMucmVnaW9uLCBmYWN0TmFtZSkgPz8gZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKHJldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYHJlZ2lvbi1pbmZvOiBkb24ndCBrbm93ICR7ZmFjdE5hbWV9IGZvciByZWdpb24gJHt0aGlzLnJlZ2lvbn0uIFVzZSAnRmFjdC5yZWdpc3RlcicgdG8gcHJvdmlkZSB0aGlzIHZhbHVlLmAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydGl0aW9ucyA9IHRoaXMubm9kZS50cnlHZXRDb250ZXh0KGN4YXBpLlRBUkdFVF9QQVJUSVRJT05TKTtcbiAgICBpZiAoXG4gICAgICBwYXJ0aXRpb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHBhcnRpdGlvbnMgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHBhcnRpdGlvbnMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgQ29udGV4dCB2YWx1ZSAnJHtjeGFwaS5UQVJHRVRfUEFSVElUSU9OU30nIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3RyaW5ncywgZ290OiAke0pTT04uc3RyaW5naWZ5KHBhcnRpdGlvbnMpfWAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvb2t1cE1hcCA9XG4gICAgICBwYXJ0aXRpb25zICE9PSB1bmRlZmluZWQgJiYgcGFydGl0aW9ucyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IFJlZ2lvbkluZm8ubGltaXRlZFJlZ2lvbk1hcChmYWN0TmFtZSwgcGFydGl0aW9ucylcbiAgICAgICAgOiBSZWdpb25JbmZvLnJlZ2lvbk1hcChmYWN0TmFtZSk7XG5cbiAgICByZXR1cm4gZGVwbG95VGltZUxvb2t1cCh0aGlzLCBmYWN0TmFtZSwgbG9va3VwTWFwLCBkZWZhdWx0VmFsdWUpO1xuICB9XG59XG4iXX0=
431
+ AwsStack[_a] = { fqn: "terraconstructs.aws.AwsStack", version: "0.2.6" };
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3cy9hd3Mtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxzREFBd0Q7QUFDeEQsc0RBTzZCO0FBQzdCLGlDQU1lO0FBRWYsK0JBQXNEO0FBQ3RELGtDQUFrQztBQVNsQyw4Q0FBa0U7QUFDbEUsMkRBQThFO0FBQzlFLGlDQUErQztBQUMvQyxzQ0FBNEM7QUFDNUMsbURBQW1EO0FBQ25ELDBGQUFzRjtBQUN0Riw2Q0FBNkM7QUFDN0MsMkRBQTJEO0FBRTNELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBRXhFOzs7R0FHRztBQUNILE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQUM7QUFpRjVDOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsc0JBQVM7SUFDckMsZ0dBQWdHO0lBRWhHOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQU07UUFDN0IsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELGdHQUFnRztJQUVoRzs7O09BR0c7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQXFCO1FBQ2hELE1BQU0sQ0FBQyxHQUFHLHNCQUFjLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUNELE1BQU0sSUFBSSx3QkFBZSxDQUN2QixhQUFhLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSx3RUFBd0UsRUFDNUksU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lB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TCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUNiLFVBQVUsS0FBSyxTQUFTLElBQUksVUFBVSxLQUFLLFdBQVc7WUFDcEQsQ0FBQyxDQUFDLHdCQUFVLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQztZQUNuRCxDQUFDLENBQUMsd0JBQVUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFckMsT0FBTyxJQUFBLGdDQUFnQixFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ25FLENBQUM7O0FBbGdCSCw0QkFtZ0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSBcIkBhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYVwiO1xuaW1wb3J0IHsgRmFjdCwgUmVnaW9uSW5mbyB9IGZyb20gXCJAYXdzLWNkay9yZWdpb24taW5mb1wiO1xuaW1wb3J0IHtcbiAgZGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzLFxuICBkYXRhQXdzQ2FsbGVySWRlbnRpdHksXG4gIGRhdGFBd3NQYXJ0aXRpb24sXG4gIGRhdGFBd3NSZWdpb24sXG4gIGRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsLFxuICBwcm92aWRlcixcbn0gZnJvbSBcIkBjZGt0bi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIFRlcnJhZm9ybVN0YWNrLFxuICBUZXJyYWZvcm1JdGVyYXRvcixcbiAgVG9rZW4sXG4gIEZuLFxuICBSZXNvdXJjZVRlcnJhZm9ybUl0ZXJhdG9yLFxufSBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBBcm4sIEFybkNvbXBvbmVudHMsIEFybkZvcm1hdCB9IGZyb20gXCIuL2FyblwiO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSBcIi4vY3gtYXBpXCI7XG5pbXBvcnQgeyBBd3NQcm92aWRlckNvbmZpZyB9IGZyb20gXCIuL3Byb3ZpZGVyLWNvbmZpZy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IElBc3NldE1hbmFnZXIgfSBmcm9tIFwiLi4vYXNzZXQtbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgRG9ja2VySW1hZ2VBc3NldExvY2F0aW9uLFxuICBEb2NrZXJJbWFnZUFzc2V0U291cmNlLFxuICBGaWxlQXNzZXRMb2NhdGlvbixcbiAgRmlsZUFzc2V0U291cmNlLFxufSBmcm9tIFwiLi4vYXNzZXRzXCI7XG5pbXBvcnQgeyBTdGFja0Jhc2VQcm9wcywgU3RhY2tCYXNlLCBJU3RhY2sgfSBmcm9tIFwiLi4vc3RhY2stYmFzZVwiO1xuaW1wb3J0IHsgQXdzQXNzZXRNYW5hZ2VyT3B0aW9ucywgQXdzQXNzZXRNYW5hZ2VyIH0gZnJvbSBcIi4vYXdzLWFzc2V0LW1hbmFnZXJcIjtcbmltcG9ydCB7IHRvVGVycmFmb3JtSWRlbnRpZmllciB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnNcIjtcbmltcG9ydCB7IGRlcGxveVRpbWVMb29rdXAgfSBmcm9tIFwiLi9yZWdpb24tbG9va3VwXCI7XG5pbXBvcnQgeyBTS0lQX0RFUEVOREVOQ1lfUFJPUEFHQVRJT04gfSBmcm9tIFwiLi4vcHJpdmF0ZS90ZXJyYWZvcm0tZGVwZW5kYWJsZXMtYXNwZWN0XCI7XG4vLyBpbXBvcnQgeyBUYWdUeXBlIH0gZnJvbSBcIi4vYXdzLWNvbnN0cnVjdFwiO1xuLy8gaW1wb3J0IHsgVGFnTWFuYWdlciwgSVRhZ2dhYmxlVjIgfSBmcm9tIFwiLi90YWctbWFuYWdlclwiO1xuXG5jb25zdCBBV1NfU1RBQ0tfU1lNQk9MID0gU3ltYm9sLmZvcihcInRlcnJhY29uc3RydWN0cy9saWIvYXdzLkF3c1N0YWNrXCIpO1xuXG4vKipcbiAqIENhY2hlIGtleSB1c2VkIGZvciByZWdpb24tc2NvcGVkIGxvb2t1cHMgdGhhdCB0YXJnZXQgdGhlIHN0YWNrJ3Mgb3duXG4gKiBwcm92aWRlciByZWdpb24gKGkuZS4gbm8gZXhwbGljaXQgcmVnaW9uIHdhcyByZXF1ZXN0ZWQpLlxuICovXG5jb25zdCBERUZBVUxUX1JFR0lPTl9LRVkgPSBcImRlZmF1bHRfcmVnaW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzU3RhY2tQcm9wcyBleHRlbmRzIFN0YWNrQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgUHJvdmlkZXIgY29uZmlndXJhdGlvbiAod2l0aG91dCB0aGUgYWxpYXMgZmllbGQpXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlckNvbmZpZz86IEF3c1Byb3ZpZGVyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBBc3NldCBtYW5hZ2VyIGZvciBoYW5kbGluZyBmaWxlIGFuZCBEb2NrZXIgaW1hZ2UgYXNzZXRzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXdzQXNzZXRNYW5hZ2VyIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgYXNzZXRNYW5hZ2VyPzogSUFzc2V0TWFuYWdlcjtcblxuICAvKipcbiAgICogQXNzZXQgTWFuYWdlbWVudCBvcHRpb25zXG4gICAqXG4gICAqIFVzZSB0aGlzIHRvIHJlZmVyZW5jZSBleGlzdGluZyBTMyBCdWNrZXQgYW5kIEVDUiBSZXBvc2l0b3J5IGZvciBhc3NldHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU3RhY2sgY3JlYXRlcyBCdWNrZXQgYW5kIFJlcG9zaXRvcnkgb24gZGVtYW5kXG4gICAqL1xuICByZWFkb25seSBhc3NldE9wdGlvbnM/OiBBd3NBc3NldE1hbmFnZXJPcHRpb25zO1xufVxuXG4vLyBUT0RPOiBSZS1hZGQgSVRhZ2dhYmxlVjJcbmV4cG9ydCBpbnRlcmZhY2UgSUF3c1N0YWNrIGV4dGVuZHMgSVN0YWNrIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgUmVnaW9uIGZvciB0aGUgVGVycmFDb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFXUyBBY2NvdW50IGZvciB0aGUgVGVycmFDb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBV1MgUGFydGl0aW9uIGZvciB0aGUgVGVycmFDb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSBQcmluY2lwYWwgSWQgZm9yIGEgc3BlY2lmaWMgc2VydmljZVxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZU5hbWUgVGhlIHNlcnZpY2UgbmFtZSB0byBnZXQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIElEIGZvclxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb24gdG8gZ2V0IHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBJRCBmb3JcbiAgICovXG4gIHNlcnZpY2VQcmluY2lwYWxOYW1lKHNlcnZpY2VOYW1lOiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZyk6IHN0cmluZztcbiAgLy8gLyoqXG4gIC8vICAqIFByb2R1Y2UgdGhlIFRva2VuJ3MgdmFsdWUgYXQgcmVzb2x1dGlvbiB0aW1lXG4gIC8vICAqL1xuICAvLyByZXNvbHZlPFQ+KG9iajogVCk6IFQ7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZmlsZSBhc3NldCBvbiB0aGlzIFN0YWNrXG4gICAqL1xuICBhZGRGaWxlQXNzZXQoYXNzZXQ6IEZpbGVBc3NldFNvdXJjZSk6IEZpbGVBc3NldExvY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGRvY2tlciBpbWFnZSBhc3NldCBvbiB0aGlzIFN0YWNrXG4gICAqL1xuICBhZGREb2NrZXJJbWFnZUFzc2V0KGFzc2V0OiBEb2NrZXJJbWFnZUFzc2V0U291cmNlKTogRG9ja2VySW1hZ2VBc3NldExvY2F0aW9uO1xufVxuXG5pbnRlcmZhY2UgQXdzTG9va3VwIHtcbiAgYXdzUHJvdmlkZXI6IHByb3ZpZGVyLkF3c1Byb3ZpZGVyO1xuICBkYXRhQXdzUmVnaW9uPzogZGF0YUF3c1JlZ2lvbi5EYXRhQXdzUmVnaW9uO1xuICBkYXRhQXdzQ2FsbGVySWRlbnRpdHk/OiBkYXRhQXdzQ2FsbGVySWRlbnRpdHkuRGF0YUF3c0NhbGxlcklkZW50aXR5O1xuICBkYXRhQXdzUGFydGl0aW9uPzogZGF0YUF3c1BhcnRpdGlvbi5EYXRhQXdzUGFydGl0aW9uO1xuICAvLyBBV1MgQXZhaWxhYmlsaXR5IFpvbmVzIGRhdGEgc291cmNlcyBrZXllZCBieSByZWdpb24gKERFRkFVTFRfUkVHSU9OX0tFWSBmb3JcbiAgLy8gdGhlIHN0YWNrJ3Mgb3duIHByb3ZpZGVyIHJlZ2lvbikuXG4gIGRhdGFBd3NBdmFpbGFiaWxpdHlab25lczogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICBkYXRhQXdzQXZhaWxhYmlsaXR5Wm9uZXMuRGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzXG4gID47XG4gIC8vIEFXUyBTZXJ2aWNlIFByaW5jaXBhbHMgYnkgcmVnaW9uIGFuZCBieSBzZXJ2aWNlXG4gIGRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsczogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICBSZWNvcmQ8c3RyaW5nLCBkYXRhQXdzU2VydmljZVByaW5jaXBhbC5EYXRhQXdzU2VydmljZVByaW5jaXBhbD5cbiAgPjtcbn1cblxuLyoqXG4gKiBBIFRlcnJhZm9ybSBzdGFjayBjb25zdHJhaW5lZCB0byBhIHNpbmdsZSBBV1MgQWNjb3VudC9SZWdpb24gdG8gc2ltdWxhdGUgQ0ZOIGJlaGF2aW9yLlxuICovXG5leHBvcnQgY2xhc3MgQXdzU3RhY2sgZXh0ZW5kcyBTdGFja0Jhc2UgaW1wbGVtZW50cyBJQXdzU3RhY2sge1xuICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL3N0YWNrLnRzI0wyMDRcblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhIFN0YWNrLlxuICAgKlxuICAgKiBhdHRyaWJ1dGUgZGV0ZWN0aW9uIHNpbmNlIGFzICdpbnN0YW5jZW9mJyBwb3RlbnRpYWxseSBmYWlscyBhY3Jvc3MgTGlicmFyeSByZWxlYXNlcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNBd3NTdGFjayh4OiBhbnkpOiB4IGlzIEF3c1N0YWNrIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBBV1NfU1RBQ0tfU1lNQk9MIGluIHg7XG4gIH1cblxuICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL3N0YWNrLnRzI0wyMTJcblxuICAvKipcbiAgICogTG9va3MgdXAgdGhlIGZpcnN0IHN0YWNrIHNjb3BlIGluIHdoaWNoIGBjb25zdHJ1Y3RgIGlzIGRlZmluZWQuIEZhaWxzIGlmIHRoZXJlIGlzIG5vIHN0YWNrIHVwIHRoZSB0cmVlIG9yIHRoZSBzdGFjayBpcyBub3QgYW4gQXdzU3RhY2suXG4gICAqIEBwYXJhbSBjb25zdHJ1Y3QgVGhlIGNvbnN0cnVjdCB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mQXdzQ29uc3RydWN0KGNvbnN0cnVjdDogSUNvbnN0cnVjdCk6IEF3c1N0YWNrIHtcbiAgICBjb25zdCBzID0gVGVycmFmb3JtU3RhY2sub2YoY29uc3RydWN0KTtcbiAgICBpZiAoQXdzU3RhY2suaXNBd3NTdGFjayhzKSkge1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgUmVzb3VyY2UgJyR7Y29uc3RydWN0LmNvbnN0cnVjdG9yPy5uYW1lfScgYXQgJyR7Y29uc3RydWN0Lm5vZGUucGF0aH0nIHNob3VsZCBiZSBjcmVhdGVkIGluIHRoZSBzY29wZSBvZiBhbiBBd3NTdGFjaywgYnV0IG5vIEF3c1N0YWNrIGZvdW5kYCxcbiAgICAgIGNvbnN0cnVjdCxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2V0IG1hbmFnZXIgZm9yIGhhbmRsaW5nIGZpbGUgYW5kIERvY2tlciBpbWFnZSBhc3NldHNcbiAgICovXG4gIHByaXZhdGUgX2Fzc2V0TWFuYWdlcj86IElBc3NldE1hbmFnZXI7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRhZ3MgdG8gYmUgYXBwbGllZCB0byB0aGUgc3RhY2suXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgcmVhZG9ubHkgY2RrVGFnTWFuYWdlcjogVGFnTWFuYWdlcjtcblxuICBwcml2YXRlIF9sb29rdXA/OiBBd3NMb29rdXA7XG4gIHByaXZhdGUgcmVnaW9uYWxBd3NQcm92aWRlcnM6IHsgW3JlZ2lvbjogc3RyaW5nXTogcHJvdmlkZXIuQXdzUHJvdmlkZXIgfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBMaXN0cyBhbGwgbWlzc2luZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uLlxuICAgKiBUaGlzIGlzIHJldHVybmVkIHdoZW4gdGhlIHN0YWNrIGlzIHN5bnRoZXNpemVkIHVuZGVyIHRoZSAnbWlzc2luZycgYXR0cmlidXRlXG4gICAqIGFuZCBhbGxvd3MgdG9vbGluZyB0byBvYnRhaW4gdGhlIGNvbnRleHQgYW5kIHJlLXN5bnRoZXNpemUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9taXNzaW5nQ29udGV4dDogY3hzY2hlbWEuTWlzc2luZ0NvbnRleHRbXTtcblxuICAvKipcbiAgICogQ2FjaGUgdGhlc2UgdG9rZW5zIGZvciByZWxpYWJsZSBjb21wYXJpc29ucy5cbiAgICpcbiAgICogRXZlcnkgY2FsbCBmb3IgdGhlIHNhbWUgVG9rZW4gd2lsbCBwcm9kdWNlIGEgbmV3IHVuaXF1ZSBzdHJpbmcsIG5vXG4gICAqIGF0dGVtcHQgaXMgbWFkZSB0byBkZWR1cGxpY2F0ZS4gVG9rZW4gb2JqZWN0cyBzaG91bGQgY2FjaGUgdGhlXG4gICAqIHZhbHVlIHRoZW1zZWx2ZXMsIGlmIHJlcXVpcmVkLlxuICAgKlxuICAgKiBkYXRhU291cmNlLmdldFNUcmluZ2F0dHJpYnV0ZSAtPiBUb2tlbi5hc1N0cmluZyAtPiB0b2tlbk1hcC5yZWdpc3RlclN0cmluZ1xuICAgKiByZWY6XG4gICAqIC0gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tY2RrL2Jsb2IvdjAuMjAuMTAvcGFja2FnZXMvY2RrdGYvbGliL3RlcnJhZm9ybS1kYXRhLXNvdXJjZS50cyNMNjhcbiAgICogLSBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvYmxvYi92MC4yMC4xMC9wYWNrYWdlcy9jZGt0Zi9saWIvdG9rZW5zL3ByaXZhdGUvdG9rZW4tbWFwLnRzI0w1MC1MNjZcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3ZpZGVyQ29uZmlnOiBBd3NQcm92aWRlckNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfYXNzZXRPcHRpb25zOiBBd3NBc3NldE1hbmFnZXJPcHRpb25zIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9hY2NvdW50SWRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9wYXJpdGlvblRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3VybFN1ZmZpeFRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU/OiBDb25zdHJ1Y3QsIGlkPzogc3RyaW5nLCBwcm9wczogQXdzU3RhY2tQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgLy8gdGhpcy5jZGtUYWdNYW5hZ2VyID0gbmV3IFRhZ01hbmFnZXIoXG4gICAgLy8gICBUYWdUeXBlLktFWV9WQUxVRSxcbiAgICAvLyAgIFwiY2RrdGY6c3RhY2tcIixcbiAgICAvLyAgIHByb3BzLnByb3ZpZGVyQ29uZmlnLmRlZmF1bHRUYWdzLFxuICAgIC8vICk7XG4gICAgdGhpcy5fbWlzc2luZ0NvbnRleHQgPSBuZXcgQXJyYXk8Y3hzY2hlbWEuTWlzc2luZ0NvbnRleHQ+KCk7XG4gICAgdGhpcy5fcHJvdmlkZXJDb25maWcgPSBwcm9wcy5wcm92aWRlckNvbmZpZztcbiAgICB0aGlzLl9hc3NldE9wdGlvbnMgPSBwcm9wcy5hc3NldE9wdGlvbnM7XG4gICAgdGhpcy5fYXNzZXRNYW5hZ2VyID0gcHJvcHMuYXNzZXRNYW5hZ2VyO1xuXG4gICAgLy8gdGhlc2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyAoSEFDSyB0byBhdm9pZCBjeWNsZXMpXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIEFXU19TVEFDS19TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBsb29rdXAoKTogQXdzTG9va3VwIHtcbiAgICAvLyBJbml0aWFsaXplIGRlZmF1bHQgQVdTIHByb3ZpZGVyXG4gICAgdGhpcy5fbG9va3VwID8/PSB7XG4gICAgICBhd3NQcm92aWRlcjogbmV3IHByb3ZpZGVyLkF3c1Byb3ZpZGVyKHRoaXMsIFwiZGVmYXVsdEF3c1Byb3ZpZGVyXCIsIHtcbiAgICAgICAgLy8gZGVmYXVsdFRhZ3M6IHRoaXMuY2RrVGFnTWFuYWdlci5yZW5kZXJlZFRhZ3MsXG4gICAgICAgIC4uLih0aGlzLl9wcm92aWRlckNvbmZpZyA/PyB7fSksXG4gICAgICB9KSxcbiAgICAgIGRhdGFBd3NBdmFpbGFiaWxpdHlab25lczoge30sXG4gICAgICBkYXRhQXdzU2VydmljZVByaW5jaXBhbHM6IHt9LFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuX2xvb2t1cDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGFzc2V0TWFuYWdlcigpOiBJQXNzZXRNYW5hZ2VyIHtcbiAgICAvLyBJbml0aWFsaXplIGFzc2V0IG1hbmFnZXJcbiAgICB0aGlzLl9hc3NldE1hbmFnZXIgPz89IG5ldyBBd3NBc3NldE1hbmFnZXIodGhpcywge1xuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIHBhcnRpdGlvbjogdGhpcy5wYXJ0aXRpb24sXG4gICAgICB1cmxTdWZmaXg6IHRoaXMudXJsU3VmZml4LFxuICAgICAgcXVhbGlmaWVyOiB0aGlzLmdyaWRVVUlELFxuICAgICAgLi4uKHRoaXMuX2Fzc2V0T3B0aW9ucyB8fCB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2V0TWFuYWdlcjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJvdmlkZXIoKTogcHJvdmlkZXIuQXdzUHJvdmlkZXIge1xuICAgIHJldHVybiB0aGlzLmxvb2t1cC5hd3NQcm92aWRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFJlZ2lvbiBvZiB0aGUgQVdTIFN0YWNrXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlZ2lvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmxvb2t1cC5hd3NQcm92aWRlci5yZWdpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmxvb2t1cC5hd3NQcm92aWRlci5yZWdpb247XG4gICAgfVxuICAgIGlmICghdGhpcy5sb29rdXAuZGF0YUF3c1JlZ2lvbikge1xuICAgICAgY29uc3QgcmVnaW9uID0gbmV3IGRhdGFBd3NSZWdpb24uRGF0YUF3c1JlZ2lvbih0aGlzLCBcIlJlZ2lvblwiLCB7XG4gICAgICAgIHByb3ZpZGVyOiB0aGlzLmxvb2t1cC5hd3NQcm92aWRlcixcbiAgICAgIH0pO1xuICAgICAgLy8gdGhlc2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyAoSEFDSyB0byBhdm9pZCBjeWNsZXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVnaW9uLCBTS0lQX0RFUEVOREVOQ1lfUFJPUEFHQVRJT04sIHtcbiAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9va3VwLmRhdGFBd3NSZWdpb24gPSByZWdpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvb2t1cC5kYXRhQXdzUmVnaW9uLm5hbWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkYXRhQXdzQ2FsbGVySWRlbnRpdHkoKTogZGF0YUF3c0NhbGxlcklkZW50aXR5LkRhdGFBd3NDYWxsZXJJZGVudGl0eSB7XG4gICAgaWYgKCF0aGlzLmxvb2t1cC5kYXRhQXdzQ2FsbGVySWRlbnRpdHkpIHtcbiAgICAgIGNvbnN0IGlkZW50aXR5ID0gbmV3IGRhdGFBd3NDYWxsZXJJZGVudGl0eS5EYXRhQXdzQ2FsbGVySWRlbnRpdHkoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiQ2FsbGVySWRlbnRpdHlcIixcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLmxvb2t1cC5hd3NQcm92aWRlcixcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyB0aGVzZSBzaG91bGQgbmV2ZXIgZGVwZW5kIG9uIGFueXRoaW5nIChIQUNLIHRvIGF2b2lkIGN5Y2xlcylcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZGVudGl0eSwgU0tJUF9ERVBFTkRFTkNZX1BST1BBR0FUSU9OLCB7XG4gICAgICAgIHZhbHVlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmxvb2t1cC5kYXRhQXdzQ2FsbGVySWRlbnRpdHkgPSBpZGVudGl0eTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubG9va3VwLmRhdGFBd3NDYWxsZXJJZGVudGl0eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgKG9yIGxhemlseSBjcmVhdGUpIHRoZSBgYXdzX2F2YWlsYWJpbGl0eV96b25lc2AgZGF0YSBzb3VyY2UgZm9yIGFcbiAgICogcmVnaW9uLlxuICAgKlxuICAgKiBXaGVuIGByZWdpb25gIGlzIG9taXR0ZWQgdGhlIGRhdGEgc291cmNlIHJlc29sdmVzIGFnYWluc3QgdGhlIHN0YWNrJ3NcbiAgICogZGVmYXVsdCBwcm92aWRlciByZWdpb24uIFdoZW4gYHJlZ2lvbmAgaXMgcHJvdmlkZWQgdGhlIEFXUyBwcm92aWRlciB2NlxuICAgKiBwZXItcmVzb3VyY2UgYHJlZ2lvbmAgYXJndW1lbnQgaXMgdXNlZCB0byBxdWVyeSB0aGF0IHJlZ2lvbiBkaXJlY3RseSxcbiAgICogd2l0aG91dCByZXF1aXJpbmcgYSBzZXBhcmF0ZSBwcm92aWRlciBhbGlhcy5cbiAgICovXG4gIHByaXZhdGUgZ2V0RGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzKFxuICAgIHJlZ2lvbj86IHN0cmluZyxcbiAgKTogZGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzLkRhdGFBd3NBdmFpbGFiaWxpdHlab25lcyB7XG4gICAgY29uc3Qga2V5ID0gcmVnaW9uID8/IERFRkFVTFRfUkVHSU9OX0tFWTtcbiAgICBpZiAoIXRoaXMubG9va3VwLmRhdGFBd3NBdmFpbGFiaWxpdHlab25lc1trZXldKSB7XG4gICAgICBjb25zdCBhenMgPSBuZXcgZGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzLkRhdGFBd3NBdmFpbGFiaWxpdHlab25lcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgcmVnaW9uXG4gICAgICAgICAgPyBgQXZhaWxhYmlsaXR5Wm9uZXNfJHt0b1RlcnJhZm9ybUlkZW50aWZpZXIocmVnaW9uKX1gXG4gICAgICAgICAgOiBcIkF2YWlsYWJpbGl0eVpvbmVzXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5sb29rdXAuYXdzUHJvdmlkZXIsXG4gICAgICAgICAgLy8gdW5kZWZpbmVkIGZvciB0aGUgZGVmYXVsdCByZWdpb24gLT4gb21pdHRlZCBmcm9tIHN5bnRoZXNpemVkIG91dHB1dFxuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyB0aGVzZSBzaG91bGQgbmV2ZXIgZGVwZW5kIG9uIGFueXRoaW5nIChIQUNLIHRvIGF2b2lkIGN5Y2xlcylcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhenMsIFNLSVBfREVQRU5ERU5DWV9QUk9QQUdBVElPTiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMubG9va3VwLmRhdGFBd3NBdmFpbGFiaWxpdHlab25lc1trZXldID0gYXpzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb29rdXAuZGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzW2tleV07XG4gIH1cblxuICBwcml2YXRlIGdldCBkYXRhQXdzUGFydGl0aW9uKCk6IGRhdGFBd3NQYXJ0aXRpb24uRGF0YUF3c1BhcnRpdGlvbiB7XG4gICAgaWYgKCF0aGlzLmxvb2t1cC5kYXRhQXdzUGFydGl0aW9uKSB7XG4gICAgICBjb25zdCBwYXJ0aXRpb24gPSBuZXcgZGF0YUF3c1BhcnRpdGlvbi5EYXRhQXdzUGFydGl0aW9uKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlBhcnRpdGl0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlcjogdGhpcy5sb29rdXAuYXdzUHJvdmlkZXIsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgLy8gdGhlc2Ugc2hvdWxkIG5ldmVyIGRlcGVuZCBvbiBhbnl0aGluZyAoSEFDSyB0byBhdm9pZCBjeWNsZXMpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocGFydGl0aW9uLCBTS0lQX0RFUEVOREVOQ1lfUFJPUEFHQVRJT04sIHtcbiAgICAgICAgdmFsdWU6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9va3VwLmRhdGFBd3NQYXJ0aXRpb24gPSBwYXJ0aXRpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvb2t1cC5kYXRhQXdzUGFydGl0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWdpb25hbEF3c1Byb3ZpZGVyKHJlZ2lvbjogc3RyaW5nKTogcHJvdmlkZXIuQXdzUHJvdmlkZXIge1xuICAgIGlmICghdGhpcy5yZWdpb25hbEF3c1Byb3ZpZGVyc1tyZWdpb25dKSB7XG4gICAgICB0aGlzLnJlZ2lvbmFsQXdzUHJvdmlkZXJzW3JlZ2lvbl0gPSBuZXcgcHJvdmlkZXIuQXdzUHJvdmlkZXIoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGBhd3NfJHt0b1RlcnJhZm9ybUlkZW50aWZpZXIocmVnaW9uKX1gLFxuICAgICAgICB7XG4gICAgICAgICAgcmVnaW9uLFxuICAgICAgICAgIGFsaWFzOiB0b1RlcnJhZm9ybUlkZW50aWZpZXIocmVnaW9uKSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlZ2lvbmFsQXdzUHJvdmlkZXJzW3JlZ2lvbl07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBBY2NvdW50IG9mIHRoZSBBV1MgU3RhY2tcbiAgICovXG4gIHB1YmxpYyBnZXQgYWNjb3VudCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fYWNjb3VudElkVG9rZW4pIHtcbiAgICAgIHRoaXMuX2FjY291bnRJZFRva2VuID0gdGhpcy5kYXRhQXdzQ2FsbGVySWRlbnRpdHkuYWNjb3VudElkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fYWNjb3VudElkVG9rZW47XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBTdGFja1xuICAgKi9cbiAgcHVibGljIGdldCBwYXJ0aXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJpdGlvblRva2VuKSB7XG4gICAgICB0aGlzLl9wYXJpdGlvblRva2VuID0gdGhpcy5kYXRhQXdzUGFydGl0aW9uLnBhcnRpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Bhcml0aW9uVG9rZW47XG4gIH1cblxuICAvKipcbiAgICogQmFzZSBETlMgZG9tYWluIG5hbWUgZm9yIHRoZSBjdXJyZW50IHBhcnRpdGlvbiAoZS5nLiwgYW1hem9uYXdzLmNvbSBpbiBBV1MgQ29tbWVyY2lhbCwgYW1hem9uYXdzLmNvbS5jbiBpbiBBV1MgQ2hpbmEpLlxuICAgKi9cbiAgcHVibGljIGdldCB1cmxTdWZmaXgoKSB7XG4gICAgaWYgKCF0aGlzLl91cmxTdWZmaXhUb2tlbikge1xuICAgICAgdGhpcy5fdXJsU3VmZml4VG9rZW4gPSB0aGlzLmRhdGFBd3NQYXJ0aXRpb24uZG5zU3VmZml4O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdXJsU3VmZml4VG9rZW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBuYW1lIGJhc2VkIG9uIHRoZSByZWdpb24gaXQncyB1c2VkIGluLlxuICAgKlxuICAgKiBTb21lIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWVzIHVzZWQgdG8gYmUgZGlmZmVyZW50IGZvciBkaWZmZXJlbnQgcGFydGl0aW9ucyxcbiAgICogYW5kIHNvbWUgd2VyZSBub3QuXG4gICAqXG4gICAqIFRoZXNlIGRheXMgYWxsIHNlcnZpY2UgcHJpbmNpcGFsIG5hbWVzIGFyZSBzdGFuZGFyZGl6ZWQsIGFuZCB0aGV5IGFyZSBhbGxcbiAgICogb2YgdGhlIGZvcm0gYDxzZXJ2aWNlbmFtZT4uYW1hem9uYXdzLmNvbWAuXG4gICAqXG4gICAqIFRvIGF2b2lkIGJyZWFraW5nIGNoYW5nZXMsIGhhbmRsaW5nIGlzIHByb3ZpZGVkIGZvciBzZXJ2aWNlcyBhZGRlZCB3aXRoIHRoZSBmb3JtYXRzIGJlbG93LFxuICAgKiBob3dldmVyLCBubyBhZGRpdGlvbmFsIGhhbmRsaW5nIHdpbGwgYmUgYWRkZWQgZm9yIG5ldyByZWdpb25zIG9yIHBhcnRpdGlvbnMuXG4gICAqICAgLSBzM1xuICAgKiAgIC0gczMuYW1hem9uYXdzLmNvbVxuICAgKiAgIC0gczMuYW1hem9uYXdzLmNvbS5jblxuICAgKiAgIC0gczMuYzJzLmljLmdvdlxuICAgKiAgIC0gczMuc2Mycy5zZ292LmdvdlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZSBUaGUgc2VydmljZSBuYW1lIHRvIGdldCB0aGUgc2VydmljZSBwcmluY2lwYWwgSUQgZm9yXG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvbiB0byBnZXQgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIElEIGZvclxuICAgKi9cbiAgcHVibGljIHNlcnZpY2VQcmluY2lwYWxOYW1lKHNlcnZpY2U6IHN0cmluZywgcmVnaW9uPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXJlZ2lvbikge1xuICAgICAgcmVnaW9uID0gREVGQVVMVF9SRUdJT05fS0VZO1xuICAgIH1cblxuICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQocmVnaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCJDYW5ub3QgZGV0ZXJtaW5lIHRoZSBzZXJ2aWNlIHByaW5jaXBhbCBJRCBiZWNhdXNlIHRoZSByZWdpb24gaXMgYSB0b2tlbi4gXCIgK1xuICAgICAgICAgIFwiWW91IG11c3Qgc3BlY2lmeSB0aGUgcmVnaW9uIGV4cGxpY2l0bHkuXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGlmIGZ1bGwgc2VydmljZSBuYW1lIGlzIHByb3ZpZGVkLCBleHRyYWN0IGp1c3QgdGhlIHNlcnZpY2UgbmFtZVxuICAgIC8vIGZvciBzdXBwb3J0ZWQgY2FzZXMgKGFzIHJlcXVpcmVkIGJ5IFRlcnJhZm9ybSBhd3Nfc2VydmljZV9wcmluY2lwYWwgRGF0YSBTb3VyY2UpXG4gICAgY29uc3QgbWF0Y2ggPSBzZXJ2aWNlLm1hdGNoKFxuICAgICAgL14oW14uXSspKD86KD86XFwuYW1hem9uYXdzXFwuY29tKD86XFwuY24pPyl8KD86XFwuYzJzXFwuaWNcXC5nb3YpfCg/OlxcLnNjMnNcXC5zZ292XFwuZ292KSk/JC8sXG4gICAgKTtcbiAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IG1hdGNoID8gbWF0Y2hbMV0gOiBzZXJ2aWNlO1xuICAgIGlmICghdGhpcy5sb29rdXAuZGF0YUF3c1NlcnZpY2VQcmluY2lwYWxzW3JlZ2lvbl0pIHtcbiAgICAgIHRoaXMubG9va3VwLmRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsc1tyZWdpb25dID0ge307XG4gICAgfVxuICAgIGlmICghdGhpcy5sb29rdXAuZGF0YUF3c1NlcnZpY2VQcmluY2lwYWxzW3JlZ2lvbl1bc2VydmljZU5hbWVdKSB7XG4gICAgICBjb25zdCBzdmNwID0gbmV3IGRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsLkRhdGFBd3NTZXJ2aWNlUHJpbmNpcGFsKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgYXdzX3N2Y3BfJHt0b1RlcnJhZm9ybUlkZW50aWZpZXIocmVnaW9uKX1fJHtzZXJ2aWNlTmFtZX19YCxcbiAgICAgICAge1xuICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgIHByb3ZpZGVyOlxuICAgICAgICAgICAgcmVnaW9uID09PSBERUZBVUxUX1JFR0lPTl9LRVlcbiAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmdldFJlZ2lvbmFsQXdzUHJvdmlkZXIocmVnaW9uKSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyB0aGVzZSBzaG91bGQgbmV2ZXIgZGVwZW5kIG9uIGFueXRoaW5nIChIQUNLIHRvIGF2b2lkIGN5Y2xlcylcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdmNwLCBTS0lQX0RFUEVOREVOQ1lfUFJPUEFHQVRJT04sIHsgdmFsdWU6IHRydWUgfSk7XG4gICAgICB0aGlzLmxvb2t1cC5kYXRhQXdzU2VydmljZVByaW5jaXBhbHNbcmVnaW9uXVtzZXJ2aWNlTmFtZV0gPSBzdmNwO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sb29rdXAuZGF0YUF3c1NlcnZpY2VQcmluY2lwYWxzW3JlZ2lvbl1bc2VydmljZU5hbWVdLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBBUk4gZnJvbSBjb21wb25lbnRzLlxuICAgKlxuICAgKiBJZiBgcGFydGl0aW9uYCwgYHJlZ2lvbmAgb3IgYGFjY291bnRgIGFyZSBub3Qgc3BlY2lmaWVkLCB0aGUgc3RhY2snc1xuICAgKiBwYXJ0aXRpb24sIHJlZ2lvbiBhbmQgYWNjb3VudCB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIElmIGFueSBjb21wb25lbnQgaXMgdGhlIGVtcHR5IHN0cmluZywgYW4gZW1wdHkgc3RyaW5nIHdpbGwgYmUgaW5zZXJ0ZWRcbiAgICogaW50byB0aGUgZ2VuZXJhdGVkIEFSTiBhdCB0aGUgbG9jYXRpb24gdGhhdCBjb21wb25lbnQgY29ycmVzcG9uZHMgdG8uXG4gICAqXG4gICAqIFRoZSBBUk4gd2lsbCBiZSBmb3JtYXR0ZWQgYXMgZm9sbG93czpcbiAgICpcbiAgICogICBhcm46e3BhcnRpdGlvbn06e3NlcnZpY2V9OntyZWdpb259OnthY2NvdW50fTp7cmVzb3VyY2V9e3NlcH17cmVzb3VyY2UtbmFtZX1cbiAgICpcbiAgICogVGhlIHJlcXVpcmVkIEFSTiBwaWVjZXMgdGhhdCBhcmUgb21pdHRlZCB3aWxsIGJlIHRha2VuIGZyb20gdGhlIHN0YWNrIHRoYXRcbiAgICogdGhlICdzY29wZScgaXMgYXR0YWNoZWQgdG8uIElmIGFsbCBBUk4gcGllY2VzIGFyZSBzdXBwbGllZCwgdGhlIHN1cHBsaWVkIHNjb3BlXG4gICAqIGNhbiBiZSAndW5kZWZpbmVkJy5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRBcm4oY29tcG9uZW50czogQXJuQ29tcG9uZW50cyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFybi5mb3JtYXQoY29tcG9uZW50cywgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogR2l2ZW4gYW4gQVJOLCBwYXJzZXMgaXQgYW5kIHJldHVybnMgY29tcG9uZW50cy5cbiAgICpcbiAgICogSUYgVEhFIEFSTiBJUyBBIENPTkNSRVRFIFNUUklORy4uLlxuICAgKlxuICAgKiAuLi5pdCB3aWxsIGJlIHBhcnNlZCBhbmQgdmFsaWRhdGVkLiBUaGUgc2VwYXJhdG9yIChgc2VwYCkgd2lsbCBiZSBzZXQgdG8gJy8nXG4gICAqIGlmIHRoZSA2dGggY29tcG9uZW50IGluY2x1ZGVzIGEgJy8nLCBpbiB3aGljaCBjYXNlLCBgcmVzb3VyY2VgIHdpbGwgYmUgc2V0XG4gICAqIHRvIHRoZSB2YWx1ZSBiZWZvcmUgdGhlICcvJyBhbmQgYHJlc291cmNlTmFtZWAgd2lsbCBiZSB0aGUgcmVzdC4gSW4gY2FzZVxuICAgKiB0aGVyZSBpcyBubyAnLycsIGByZXNvdXJjZWAgd2lsbCBiZSBzZXQgdG8gdGhlIDZ0aCBjb21wb25lbnRzIGFuZFxuICAgKiBgcmVzb3VyY2VOYW1lYCB3aWxsIGJlIHNldCB0byB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nLlxuICAgKlxuICAgKiBJRiBUSEUgQVJOIElTIEEgVE9LRU4uLi5cbiAgICpcbiAgICogLi4uaXQgY2Fubm90IGJlIHZhbGlkYXRlZCwgc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYWN0dWFsIHZhbHVlIHlldCBhdCB0aGVcbiAgICogdGltZSBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuIFlvdSB3aWxsIGhhdmUgdG8gc3VwcGx5IGBzZXBJZlRva2VuYCBhbmRcbiAgICogd2hldGhlciBvciBub3QgQVJOcyBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHVzdWFsbHkgaGF2ZSByZXNvdXJjZSBuYW1lc1xuICAgKiBpbiBvcmRlciB0byBwYXJzZSBpdCBwcm9wZXJseS4gVGhlIHJlc3VsdGluZyBgQXJuQ29tcG9uZW50c2Agb2JqZWN0IHdpbGxcbiAgICogY29udGFpbiB0b2tlbnMgZm9yIHRoZSBzdWJleHByZXNzaW9ucyBvZiB0aGUgQVJOLCBub3Qgc3RyaW5nIGxpdGVyYWxzLlxuICAgKlxuICAgKiBJZiB0aGUgcmVzb3VyY2UgbmFtZSBjb3VsZCBwb3NzaWJseSBjb250YWluIHRoZSBzZXBhcmF0b3IgY2hhciwgdGhlIGFjdHVhbFxuICAgKiByZXNvdXJjZSBuYW1lIGNhbm5vdCBiZSBwcm9wZXJseSBwYXJzZWQuIFRoaXMgb25seSBvY2N1cnMgaWYgdGhlIHNlcGFyYXRvclxuICAgKiBjaGFyIGlzICcvJywgYW5kIGhhcHBlbnMgZm9yIGV4YW1wbGUgZm9yIFMzIG9iamVjdCBBUk5zLCBJQU0gUm9sZSBBUk5zLFxuICAgKiBJQU0gT0lEQyBQcm92aWRlciBBUk5zLCBldGMuIFRvIHByb3Blcmx5IGV4dHJhY3QgdGhlIHJlc291cmNlIG5hbWUgZnJvbSBhXG4gICAqIFRva2VuaXplZCBBUk4sIHlvdSBtdXN0IGtub3cgdGhlIHJlc291cmNlIHR5cGUgYW5kIGNhbGxcbiAgICogYEFybi5leHRyYWN0UmVzb3VyY2VOYW1lYC5cbiAgICpcbiAgICogQHBhcmFtIGFybiBUaGUgQVJOIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0gc2VwSWZUb2tlbiBUaGUgc2VwYXJhdG9yIHVzZWQgdG8gc2VwYXJhdGUgcmVzb3VyY2UgZnJvbSByZXNvdXJjZU5hbWVcbiAgICogQHBhcmFtIGhhc05hbWUgV2hldGhlciB0aGVyZSBpcyBhIG5hbWUgY29tcG9uZW50IGluIHRoZSBBUk4gYXQgYWxsLiBGb3JcbiAgICogZXhhbXBsZSwgU05TIFRvcGljcyBBUk5zIGhhdmUgdGhlICdyZXNvdXJjZScgY29tcG9uZW50IGNvbnRhaW4gdGhlIHRvcGljXG4gICAqIG5hbWUsIGFuZCBubyAncmVzb3VyY2VOYW1lJyBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIEFybkNvbXBvbmVudHMgb2JqZWN0IHdoaWNoIGFsbG93cyBhY2Nlc3MgdG8gdGhlIHZhcmlvdXNcbiAgICogY29tcG9uZW50cyBvZiB0aGUgQVJOLlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBBcm5Db21wb25lbnRzIG9iamVjdCB3aGljaCBhbGxvd3MgYWNjZXNzIHRvIHRoZSB2YXJpb3VzXG4gICAqICAgICAgY29tcG9uZW50cyBvZiB0aGUgQVJOLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc3BsaXRBcm4gaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIHBhcnNlQXJuKFxuICAgIGFybjogc3RyaW5nLFxuICAgIHNlcElmVG9rZW46IHN0cmluZyA9IFwiL1wiLFxuICAgIGhhc05hbWU6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBBcm5Db21wb25lbnRzIHtcbiAgICByZXR1cm4gQXJuLnBhcnNlKGFybiwgc2VwSWZUb2tlbiwgaGFzTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU3BsaXRzIHRoZSBwcm92aWRlZCBBUk4gaW50byBpdHMgY29tcG9uZW50cy5cbiAgICogV29ya3MgYm90aCBpZiAnYXJuJyBpcyBhIHN0cmluZyBsaWtlICdhcm46YXdzOnMzOjo6YnVja2V0JyxcbiAgICogYW5kIGEgVG9rZW4gcmVwcmVzZW50aW5nIGEgZHluYW1pYyBDbG91ZEZvcm1hdGlvbiBleHByZXNzaW9uXG4gICAqIChpbiB3aGljaCBjYXNlIHRoZSByZXR1cm5lZCBjb21wb25lbnRzIHdpbGwgYWxzbyBiZSBkeW5hbWljIENsb3VkRm9ybWF0aW9uIGV4cHJlc3Npb25zLFxuICAgKiBlbmNvZGVkIGFzIFRva2VucykuXG4gICAqXG4gICAqIEBwYXJhbSBhcm4gdGhlIEFSTiB0byBzcGxpdCBpbnRvIGl0cyBjb21wb25lbnRzXG4gICAqIEBwYXJhbSBhcm5Gb3JtYXQgdGhlIGV4cGVjdGVkIGZvcm1hdCBvZiAnYXJuJyAtIGRlcGVuZHMgb24gd2hhdCBmb3JtYXQgdGhlIHNlcnZpY2UgJ2FybicgcmVwcmVzZW50cyB1c2VzXG4gICAqL1xuICBwdWJsaWMgc3BsaXRBcm4oYXJuOiBzdHJpbmcsIGFybkZvcm1hdDogQXJuRm9ybWF0KTogQXJuQ29tcG9uZW50cyB7XG4gICAgcmV0dXJuIEFybi5zcGxpdChhcm4sIGFybkZvcm1hdCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpdGVyYXRvciBmb3IgYWxsIEFacyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gdGhlIEFXUyBlbnZpcm9ubWVudFxuICAgKiAoYWNjb3VudC9yZWdpb24pIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN0YWNrIChkZWZhdWx0IG9yIGFsaWFzZWQgcHJvdmlkZXIpLlxuICAgKlxuICAgKiB0aGlzIHdpbGwgcmV0dXJuIGEgY2RrdGYgaXRlcmF0b3JcbiAgICpcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vY2RrdGYvY29uY2VwdHMvaXRlcmF0b3JzI2RlZmluZS1pdGVyYXRvcnNcbiAgICpcbiAgICogVG8gc3BlY2lmeSBhIGRpZmZlcmVudCBzdHJhdGVneSBmb3Igc2VsZWN0aW5nIGF2YWlsYWJpbGl0eSB6b25lcyBvdmVycmlkZSB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgYXZhaWxhYmlsaXR5Wm9uZUl0ZXJhdG9yKCk6IFJlc291cmNlVGVycmFmb3JtSXRlcmF0b3Ige1xuICAgIGNvbnN0IGF6cyA9IHRoaXMuZ2V0RGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzKCk7XG4gICAgcmV0dXJuIFRlcnJhZm9ybUl0ZXJhdG9yLmZyb21EYXRhU291cmNlcyhhenMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBMaXN0IG9mIFRva2VucyBmb3IgQVogbmFtZXMgYXZhaWxhYmxlIGluIHRoZSBzdGFjaydzXG4gICAqIEFXUyBlbnZpcm9ubWVudCAoYWNjb3VudC9yZWdpb24pLlxuICAgKlxuICAgKiBUaGUgbGlzdCBsZW5ndGggaXMgYG1heENvdW50YCB3aGljaCBkZWZhdWx0cyB0byAyLlxuICAgKlxuICAgKiBXaGVuIGByZWdpb25gIGlzIHByb3ZpZGVkLCB0aGUgQVpzIGFyZSByZXNvbHZlZCBmb3IgdGhhdCByZWdpb24gdXNpbmcgdGhlXG4gICAqIEFXUyBwcm92aWRlciB2NiBwZXItcmVzb3VyY2UgYHJlZ2lvbmAgYXJndW1lbnQgKG5vIHByb3ZpZGVyIGFsaWFzIGlzXG4gICAqIHJlcXVpcmVkKS4gVGhpcyBpcyBwcmltYXJpbHkgdXNlZnVsIGZvciBjcm9zcy1yZWdpb24gbG9va3VwcyBzdWNoIGFzXG4gICAqIGBWcGMuZnJvbUxvb2t1cCh7IHJlZ2lvbiB9KWAuXG4gICAqXG4gICAqIEBwYXJhbSBtYXhDb3VudCB0aGUgbWF4aW11bSBudW1iZXIgb2YgQVpzIHRvIHJldHVyblxuICAgKiBAcGFyYW0gcmVnaW9uIHRoZSByZWdpb24gdG8gcmVzb2x2ZSBBWnMgZm9yIChkZWZhdWx0cyB0byB0aGUgc3RhY2sgcmVnaW9uKVxuICAgKi9cbiAgcHVibGljIGF2YWlsYWJpbGl0eVpvbmVzKG1heENvdW50OiBudW1iZXIgPSAyLCByZWdpb24/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50IENvbnRleHRQcm92aWRlclxuICAgIGNvbnN0IGF6cyA9IHRoaXMuZ2V0RGF0YUF3c0F2YWlsYWJpbGl0eVpvbmVzKHJlZ2lvbik7XG4gICAgY29uc3QgYXpMb29rdXBzOiBhbnlbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4Q291bnQ7IGkrKykge1xuICAgICAgYXpMb29rdXBzLnB1c2goRm4uZWxlbWVudChhenMubmFtZXMsIGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGF6TG9va3VwcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGZpbGUgYXNzZXQgb24gdGhpcyBTdGFja1xuICAgKi9cbiAgcHVibGljIGFkZEZpbGVBc3NldChhc3NldDogRmlsZUFzc2V0U291cmNlKTogRmlsZUFzc2V0TG9jYXRpb24ge1xuICAgIHJldHVybiB0aGlzLmFzc2V0TWFuYWdlci5hZGRGaWxlQXNzZXQoYXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgZG9ja2VyIGltYWdlIGFzc2V0IG9uIHRoaXMgU3RhY2tcbiAgICovXG4gIHB1YmxpYyBhZGREb2NrZXJJbWFnZUFzc2V0KFxuICAgIGFzc2V0OiBEb2NrZXJJbWFnZUFzc2V0U291cmNlLFxuICApOiBEb2NrZXJJbWFnZUFzc2V0TG9jYXRpb24ge1xuICAgIHJldHVybiB0aGlzLmFzc2V0TWFuYWdlci5hZGREb2NrZXJJbWFnZUFzc2V0KGFzc2V0KTtcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKiBSZXNvbHZlIGEgdG9rZW5pemVkIHZhbHVlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHN0YWNrLlxuICAvLyAgKi9cbiAgLy8gcHVibGljIHJlc29sdmU8VD4ob2JqOiBUKTogVCB7XG4gIC8vICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1jZGsvYmxvYi92MC4yMC43L3BhY2thZ2VzL2Nka3RmL2xpYi90ZXJyYWZvcm0tc3RhY2sudHMjTDE1MVxuICAvLyAgIC8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTUwLjAvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvc3RhY2sudHMjTDU3MlxuICAvLyAgIHJldHVybiByZXNvbHZlKHRoaXMsIG9iaik7XG4gIC8vIH1cblxuICAvKipcbiAgICogSW5kaWNhdGUgdGhhdCBhIGNvbnRleHQga2V5IHdhcyBleHBlY3RlZFxuICAgKlxuICAgKiBDb250YWlucyBpbnN0cnVjdGlvbnMgd2hpY2ggd2lsbCBiZSBlbWl0dGVkIGludG8gdGhlIGNsb3VkIGFzc2VtYmx5IG9uIGhvd1xuICAgKiB0aGUga2V5IHNob3VsZCBiZSBzdXBwbGllZC5cbiAgICpcbiAgICogQHBhcmFtIHJlcG9ydCBUaGUgc2V0IG9mIHBhcmFtZXRlcnMgbmVlZGVkIHRvIG9idGFpbiB0aGUgY29udGV4dFxuICAgKi9cbiAgcHVibGljIHJlcG9ydE1pc3NpbmdDb250ZXh0S2V5KHJlcG9ydDogY3hzY2hlbWEuTWlzc2luZ0NvbnRleHQpIHtcbiAgICB0aGlzLl9taXNzaW5nQ29udGV4dC5wdXNoKHJlcG9ydCk7XG4gIH1cblxuICAvKipcbiAgICogTG9vayB1cCBhIGZhY3QgdmFsdWUgZm9yIHRoZSBnaXZlbiBmYWN0IGZvciB0aGUgcmVnaW9uIG9mIHRoaXMgc3RhY2tcbiAgICpcbiAgICogV2lsbCByZXR1cm4gYSBkZWZpbml0ZSB2YWx1ZSBvbmx5IGlmIHRoZSByZWdpb24gb2YgdGhlIGN1cnJlbnQgc3RhY2sgaXMgcmVzb2x2ZWQuXG4gICAqIElmIG5vdCwgYSBsb29rdXAgbWFwIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHN0YWNrIGFuZCB0aGUgbG9va3VwIHdpbGwgYmUgZG9uZSBhdFxuICAgKiBDREsgZGVwbG95bWVudCB0aW1lLlxuICAgKlxuICAgKiBXaGF0IHJlZ2lvbnMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbG9va3VwIG1hcCBpcyBjb250cm9sbGVkIGJ5IHRoZVxuICAgKiBgdGVycmFjb25zdHJ1Y3RzL2NvcmU6dGFyZ2V0LXBhcnRpdGlvbnNgIGNvbnRleHQgdmFsdWU6IGl0IG11c3QgYmUgc2V0IHRvIGEgbGlzdFxuICAgKiBvZiBwYXJ0aXRpb25zLCBhbmQgb25seSByZWdpb25zIGZyb20gdGhlIGdpdmVuIHBhcnRpdGlvbnMgd2lsbCBiZSBpbmNsdWRlZC5cbiAgICogSWYgbm8gc3VjaCBjb250ZXh0IGtleSBpcyBzZXQsIGFsbCByZWdpb25zIHdpbGwgYmUgaW5jbHVkZWQuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBjb25zdHJ1Y3QgbGlicmFyeSBhdXRob3JzLiBBcHBsaWNhdGlvblxuICAgKiBidWlsZGVycyBjYW4gcmVseSBvbiB0aGUgYWJzdHJhY3Rpb25zIG9mZmVyZWQgYnkgY29uc3RydWN0IGxpYnJhcmllcyBhbmQgZG9cbiAgICogbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgcmVnaW9uYWwgZmFjdHMuXG4gICAqXG4gICAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIG5vdCBnaXZlbiwgaXQgaXMgYW4gZXJyb3IgaWYgdGhlIGZhY3QgaXMgdW5rbm93biBmb3JcbiAgICogdGhlIGdpdmVuIHJlZ2lvbi5cbiAgICovXG4gIHB1YmxpYyByZWdpb25hbEZhY3QoZmFjdE5hbWU6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh0aGlzLnJlZ2lvbikpIHtcbiAgICAgIGNvbnN0IHJldCA9IEZhY3QuZmluZCh0aGlzLnJlZ2lvbiwgZmFjdE5hbWUpID8/IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChyZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGByZWdpb24taW5mbzogZG9uJ3Qga25vdyAke2ZhY3ROYW1lfSBmb3IgcmVnaW9uICR7dGhpcy5yZWdpb259LiBVc2UgJ0ZhY3QucmVnaXN0ZXInIHRvIHByb3ZpZGUgdGhpcyB2YWx1ZS5gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRpdGlvbnMgPSB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChjeGFwaS5UQVJHRVRfUEFSVElUSU9OUyk7XG4gICAgaWYgKFxuICAgICAgcGFydGl0aW9ucyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJ0aXRpb25zICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShwYXJ0aXRpb25zKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYENvbnRleHQgdmFsdWUgJyR7Y3hhcGkuVEFSR0VUX1BBUlRJVElPTlN9JyBzaG91bGQgYmUgYSBsaXN0IG9mIHN0cmluZ3MsIGdvdDogJHtKU09OLnN0cmluZ2lmeShwYXJ0aXRpb25zKX1gLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb29rdXBNYXAgPVxuICAgICAgcGFydGl0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHBhcnRpdGlvbnMgIT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgPyBSZWdpb25JbmZvLmxpbWl0ZWRSZWdpb25NYXAoZmFjdE5hbWUsIHBhcnRpdGlvbnMpXG4gICAgICAgIDogUmVnaW9uSW5mby5yZWdpb25NYXAoZmFjdE5hbWUpO1xuXG4gICAgcmV0dXJuIGRlcGxveVRpbWVMb29rdXAodGhpcywgZmFjdE5hbWUsIGxvb2t1cE1hcCwgZGVmYXVsdFZhbHVlKTtcbiAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { IAspect } from "cdktf";
1
+ import { IAspect } from "cdktn";
2
2
  import { IConstruct } from "constructs";
3
3
  import { TaggableConstruct } from "../construct-base";
4
4
  /**