terraconstructs 0.1.10 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/.jsii +1297 -629
  2. package/lib/asset-staging.js +1 -1
  3. package/lib/aws/arn.js +4 -3
  4. package/lib/aws/aws-asset-manager.js +1 -1
  5. package/lib/aws/aws-construct.js +1 -1
  6. package/lib/aws/aws-stack.js +1 -1
  7. package/lib/aws/aws-tags.js +2 -2
  8. package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/actions/sns.js +1 -1
  12. package/lib/aws/cloudwatch/actions/ssm.js +2 -2
  13. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  14. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  15. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  16. package/lib/aws/cloudwatch/alarm.js +1 -1
  17. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  18. package/lib/aws/cloudwatch/dashboard.js +1 -1
  19. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  20. package/lib/aws/cloudwatch/graph.js +8 -8
  21. package/lib/aws/cloudwatch/layout.js +3 -3
  22. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  23. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  24. package/lib/aws/cloudwatch/log-group.js +1 -1
  25. package/lib/aws/cloudwatch/log-query.js +1 -1
  26. package/lib/aws/cloudwatch/log-stream.js +1 -1
  27. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  28. package/lib/aws/cloudwatch/metric.js +2 -2
  29. package/lib/aws/cloudwatch/pattern.js +3 -3
  30. package/lib/aws/cloudwatch/policy.js +1 -1
  31. package/lib/aws/cloudwatch/query-definition.js +2 -2
  32. package/lib/aws/cloudwatch/stats.js +1 -1
  33. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  34. package/lib/aws/cloudwatch/text.js +1 -1
  35. package/lib/aws/cloudwatch/variable.js +3 -3
  36. package/lib/aws/cloudwatch/widget.js +1 -1
  37. package/lib/aws/compute/access-log.js +4 -4
  38. package/lib/aws/compute/activity.js +1 -1
  39. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  40. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  41. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  42. package/lib/aws/compute/alb/application-listener.js +1 -1
  43. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  44. package/lib/aws/compute/alb/application-target-group.js +1 -1
  45. package/lib/aws/compute/alb/conditions.js +1 -1
  46. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  47. package/lib/aws/compute/alb/trust-store.js +1 -1
  48. package/lib/aws/compute/api-definition.js +3 -3
  49. package/lib/aws/compute/api-key.js +2 -2
  50. package/lib/aws/compute/architecture.js +1 -1
  51. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  52. package/lib/aws/compute/authorizer.js +1 -1
  53. package/lib/aws/compute/authorizers/identity-source.js +1 -1
  54. package/lib/aws/compute/authorizers/lambda.js +2 -2
  55. package/lib/aws/compute/base-path-mapping.js +1 -1
  56. package/lib/aws/compute/base-scalable-attribute.js +1 -1
  57. package/lib/aws/compute/bastion-host.js +1 -1
  58. package/lib/aws/compute/chain.js +1 -1
  59. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  60. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  61. package/lib/aws/compute/client-vpn-route.js +2 -2
  62. package/lib/aws/compute/code.js +8 -8
  63. package/lib/aws/compute/condition.js +1 -1
  64. package/lib/aws/compute/connections.js +1 -1
  65. package/lib/aws/compute/cors.js +1 -1
  66. package/lib/aws/compute/deployment.js +1 -1
  67. package/lib/aws/compute/domain-name.js +1 -1
  68. package/lib/aws/compute/event-invoke-config.js +1 -1
  69. package/lib/aws/compute/event-source-filter.js +2 -2
  70. package/lib/aws/compute/event-source-mapping.d.ts +10 -0
  71. package/lib/aws/compute/event-source-mapping.js +20 -23
  72. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  73. package/lib/aws/compute/event-sources/s3.js +1 -1
  74. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  75. package/lib/aws/compute/event-sources/sqs.d.ts +10 -0
  76. package/lib/aws/compute/event-sources/sqs.js +3 -3
  77. package/lib/aws/compute/fields.js +4 -4
  78. package/lib/aws/compute/function-alias.js +1 -1
  79. package/lib/aws/compute/function-base.js +2 -2
  80. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  81. package/lib/aws/compute/function-destinations/function.js +1 -1
  82. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  83. package/lib/aws/compute/function-nodejs/function.js +1 -1
  84. package/lib/aws/compute/function-url.js +1 -1
  85. package/lib/aws/compute/function.js +3 -3
  86. package/lib/aws/compute/gateway-response.js +2 -2
  87. package/lib/aws/compute/handler.js +1 -1
  88. package/lib/aws/compute/instance-types.js +1 -1
  89. package/lib/aws/compute/instance.js +1 -1
  90. package/lib/aws/compute/integration.js +1 -1
  91. package/lib/aws/compute/integrations/aws.js +1 -1
  92. package/lib/aws/compute/integrations/http.js +1 -1
  93. package/lib/aws/compute/integrations/lambda.js +1 -1
  94. package/lib/aws/compute/integrations/mock.js +1 -1
  95. package/lib/aws/compute/integrations/stepfunctions.js +1 -1
  96. package/lib/aws/compute/ip-addresses.js +2 -2
  97. package/lib/aws/compute/ipam.js +1 -1
  98. package/lib/aws/compute/key-pair.js +1 -1
  99. package/lib/aws/compute/lambda-api.js +1 -1
  100. package/lib/aws/compute/launch-template.js +2 -2
  101. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  102. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  103. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  104. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  105. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  106. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  107. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  108. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  109. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  110. package/lib/aws/compute/load-balancer.js +3 -3
  111. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  112. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  113. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  114. package/lib/aws/compute/machine-image/common.js +1 -1
  115. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  116. package/lib/aws/compute/method.js +1 -1
  117. package/lib/aws/compute/model.js +3 -3
  118. package/lib/aws/compute/nat.js +5 -5
  119. package/lib/aws/compute/network-acl-types.js +2 -2
  120. package/lib/aws/compute/network-acl.js +3 -3
  121. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  122. package/lib/aws/compute/nlb/network-listener.js +1 -1
  123. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  124. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  125. package/lib/aws/compute/peer.js +1 -1
  126. package/lib/aws/compute/placement-group.js +1 -1
  127. package/lib/aws/compute/port.js +1 -1
  128. package/lib/aws/compute/prefix-list.js +1 -1
  129. package/lib/aws/compute/requestvalidator.js +1 -1
  130. package/lib/aws/compute/resource.js +3 -3
  131. package/lib/aws/compute/restapi.js +3 -3
  132. package/lib/aws/compute/route.js +8 -8
  133. package/lib/aws/compute/runtime.js +1 -1
  134. package/lib/aws/compute/scalable-target.js +1 -1
  135. package/lib/aws/compute/schedule.js +1 -1
  136. package/lib/aws/compute/security-group.js +1 -1
  137. package/lib/aws/compute/stage.js +2 -2
  138. package/lib/aws/compute/state-graph.js +1 -1
  139. package/lib/aws/compute/state-machine-fragment.js +1 -1
  140. package/lib/aws/compute/state-machine.js +4 -4
  141. package/lib/aws/compute/states/choice.js +1 -1
  142. package/lib/aws/compute/states/custom-state.js +1 -1
  143. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  144. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  145. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  146. package/lib/aws/compute/states/distributed-map.js +1 -1
  147. package/lib/aws/compute/states/fail.js +1 -1
  148. package/lib/aws/compute/states/map-base.js +1 -1
  149. package/lib/aws/compute/states/map.js +1 -1
  150. package/lib/aws/compute/states/parallel.js +1 -1
  151. package/lib/aws/compute/states/pass.js +2 -2
  152. package/lib/aws/compute/states/state.js +1 -1
  153. package/lib/aws/compute/states/succeed.js +1 -1
  154. package/lib/aws/compute/states/task-base.js +2 -2
  155. package/lib/aws/compute/states/task.js +1 -1
  156. package/lib/aws/compute/states/wait.js +2 -2
  157. package/lib/aws/compute/step-scaling-action.js +1 -1
  158. package/lib/aws/compute/step-scaling-policy.js +1 -1
  159. package/lib/aws/compute/stepfunctions-api.js +1 -1
  160. package/lib/aws/compute/subnet-v2.js +2 -2
  161. package/lib/aws/compute/subnet.js +1 -1
  162. package/lib/aws/compute/target-tracking-scaling-policy.js +1 -1
  163. package/lib/aws/compute/task-credentials.js +1 -1
  164. package/lib/aws/compute/task-input.js +1 -1
  165. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  166. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  167. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  168. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  169. package/lib/aws/compute/tasks/sqs/send-message.js +10 -13
  170. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  171. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  172. package/lib/aws/compute/types.js +1 -1
  173. package/lib/aws/compute/usage-plan.js +1 -1
  174. package/lib/aws/compute/user-data.js +3 -3
  175. package/lib/aws/compute/volume.js +2 -2
  176. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  177. package/lib/aws/compute/vpc-endpoint.js +6 -6
  178. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  179. package/lib/aws/compute/vpc-link.js +1 -1
  180. package/lib/aws/compute/vpc-v2-base.js +1 -1
  181. package/lib/aws/compute/vpc-v2.js +2 -2
  182. package/lib/aws/compute/vpc.js +4 -4
  183. package/lib/aws/compute/vpn.js +3 -3
  184. package/lib/aws/edge/certificate.js +1 -1
  185. package/lib/aws/edge/distribution.js +3 -3
  186. package/lib/aws/edge/dns-alias-record-targets.js +6 -6
  187. package/lib/aws/edge/dns-record.js +13 -13
  188. package/lib/aws/edge/dns-zone.js +1 -1
  189. package/lib/aws/edge/function.js +2 -2
  190. package/lib/aws/edge/key-value-store.js +4 -4
  191. package/lib/aws/edge/origin.js +3 -3
  192. package/lib/aws/edge/response-headers-policy.js +1 -1
  193. package/lib/aws/encryption/alias.js +1 -1
  194. package/lib/aws/encryption/key.js +1 -1
  195. package/lib/aws/encryption/via-service-principal.js +1 -1
  196. package/lib/aws/environment-aware.d.ts +41 -0
  197. package/lib/aws/environment-aware.js +3 -0
  198. package/lib/aws/iam/grant.d.ts +34 -0
  199. package/lib/aws/iam/grant.js +27 -6
  200. package/lib/aws/iam/group.js +1 -1
  201. package/lib/aws/iam/instance-profile.js +1 -1
  202. package/lib/aws/iam/managed-policy.js +1 -1
  203. package/lib/aws/iam/oidc-provider.js +1 -1
  204. package/lib/aws/iam/policy-document.js +1 -1
  205. package/lib/aws/iam/policy-statement.js +1 -1
  206. package/lib/aws/iam/policy.js +1 -1
  207. package/lib/aws/iam/principals.js +20 -20
  208. package/lib/aws/iam/role.js +1 -1
  209. package/lib/aws/iam/saml-provider.js +2 -2
  210. package/lib/aws/iam/unknown-principal.js +1 -1
  211. package/lib/aws/iam/user.js +1 -1
  212. package/lib/aws/index.d.ts +1 -0
  213. package/lib/aws/index.js +2 -1
  214. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  215. package/lib/aws/network/subnet-group.js +3 -3
  216. package/lib/aws/network/subnet.js +4 -4
  217. package/lib/aws/notify/archive.js +1 -1
  218. package/lib/aws/notify/connection.js +3 -3
  219. package/lib/aws/notify/event-bus.d.ts +1 -1
  220. package/lib/aws/notify/event-bus.js +4 -4
  221. package/lib/aws/notify/event-pattern.js +1 -1
  222. package/lib/aws/notify/index.d.ts +3 -1
  223. package/lib/aws/notify/index.js +5 -5
  224. package/lib/aws/notify/input.js +2 -2
  225. package/lib/aws/notify/kinesis-stream.js +1 -1
  226. package/lib/aws/notify/notification-rule.js +1 -1
  227. package/lib/aws/notify/policy.js +1 -1
  228. package/lib/aws/notify/queue-base.d.ts +241 -0
  229. package/lib/aws/notify/queue-base.js +161 -0
  230. package/lib/aws/notify/queue-policy.js +1 -1
  231. package/lib/aws/notify/queue.d.ts +157 -190
  232. package/lib/aws/notify/queue.js +239 -186
  233. package/lib/aws/notify/resource-policy.js +1 -1
  234. package/lib/aws/notify/rule.js +1 -1
  235. package/lib/aws/notify/schedule.js +1 -1
  236. package/lib/aws/notify/sqs-augmentations.generated.d.ts +3 -3
  237. package/lib/aws/notify/sqs-augmentations.generated.js +23 -26
  238. package/lib/aws/notify/sqs-grants.generated.d.ts +72 -0
  239. package/lib/aws/notify/sqs-grants.generated.js +139 -0
  240. package/lib/aws/notify/subscription-filter.js +1 -1
  241. package/lib/aws/notify/subscription.js +4 -4
  242. package/lib/aws/notify/subscriptions/email.js +1 -1
  243. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  244. package/lib/aws/notify/subscriptions/sms.js +1 -1
  245. package/lib/aws/notify/subscriptions/sqs.js +30 -27
  246. package/lib/aws/notify/subscriptions/subscription.d.ts +1 -1
  247. package/lib/aws/notify/subscriptions/subscription.js +1 -1
  248. package/lib/aws/notify/subscriptions/url.js +1 -1
  249. package/lib/aws/notify/targets/event-bus.d.ts +1 -1
  250. package/lib/aws/notify/targets/event-bus.js +2 -2
  251. package/lib/aws/notify/targets/function.js +1 -1
  252. package/lib/aws/notify/targets/log-group.js +2 -2
  253. package/lib/aws/notify/targets/sqs.js +12 -14
  254. package/lib/aws/notify/targets/state-machine.js +1 -1
  255. package/lib/aws/notify/topic-base.js +1 -1
  256. package/lib/aws/notify/topic.js +1 -1
  257. package/lib/aws/storage/assets/image-asset.js +3 -3
  258. package/lib/aws/storage/assets/s3.js +1 -1
  259. package/lib/aws/storage/auth-token.js +2 -2
  260. package/lib/aws/storage/billing.js +1 -1
  261. package/lib/aws/storage/bucket-notifications.js +1 -1
  262. package/lib/aws/storage/bucket-policy.js +1 -1
  263. package/lib/aws/storage/bucket-source.js +1 -1
  264. package/lib/aws/storage/bucket.js +2 -2
  265. package/lib/aws/storage/capacity.js +1 -1
  266. package/lib/aws/storage/ecr-repository.js +3 -3
  267. package/lib/aws/storage/encryption.js +1 -1
  268. package/lib/aws/storage/notification-targets/function.js +1 -1
  269. package/lib/aws/storage/notification-targets/queue.js +17 -21
  270. package/lib/aws/storage/origin-access-identity.js +1 -1
  271. package/lib/aws/storage/parameter.js +2 -2
  272. package/lib/aws/storage/table.js +3 -3
  273. package/lib/bundling.js +3 -3
  274. package/lib/construct-base.js +2 -2
  275. package/lib/duration.js +1 -1
  276. package/lib/errors.js +1 -1
  277. package/lib/expiration.js +1 -1
  278. package/lib/fs/ignore.js +4 -4
  279. package/lib/fs/index.js +1 -1
  280. package/lib/helpers-internal/index.d.ts +1 -0
  281. package/lib/helpers-internal/index.js +16 -1
  282. package/lib/helpers-internal/validate-all-props.d.ts +29 -0
  283. package/lib/helpers-internal/validate-all-props.js +23 -0
  284. package/lib/size.js +1 -1
  285. package/lib/stack-base.js +1 -1
  286. package/lib/terra-func.js +1 -1
  287. package/lib/time-zone.js +1 -1
  288. package/package.json +1 -1
  289. package/lib/aws/notify/queue-config.generated.d.ts +0 -98
  290. package/lib/aws/notify/queue-config.generated.js +0 -3
@@ -29,17 +29,14 @@ class SqsSendMessage extends compute.TaskStateBase {
29
29
  resources: [this.props.queue.queueArn],
30
30
  }),
31
31
  ];
32
- // // TODO: Re-Add encryption support
33
- // // sending to an encrypted queue requires
34
- // // permissions on the associated kms key
35
- // if (this.props.queue.encryptionMasterKey) {
36
- // this.taskPolicies.push(
37
- // new iam.PolicyStatement({
38
- // actions: ["kms:Decrypt", "kms:GenerateDataKey*"],
39
- // resources: [this.props.queue.encryptionMasterKey.keyArn],
40
- // }),
41
- // );
42
- // }
32
+ // sending to an encrypted queue requires
33
+ // permissions on the associated kms key
34
+ if (this.props.queue.encryptionMasterKey) {
35
+ this.taskPolicies.push(new iam.PolicyStatement({
36
+ actions: ["kms:Decrypt", "kms:GenerateDataKey*"],
37
+ resources: [this.props.queue.encryptionMasterKey.keyArn],
38
+ }));
39
+ }
43
40
  }
44
41
  /**
45
42
  * Provides the SQS SendMessage service integration task configuration
@@ -62,9 +59,9 @@ class SqsSendMessage extends compute.TaskStateBase {
62
59
  }
63
60
  exports.SqsSendMessage = SqsSendMessage;
64
61
  _a = JSII_RTTI_SYMBOL_1;
65
- SqsSendMessage[_a] = { fqn: "terraconstructs.aws.compute.tasks.SqsSendMessage", version: "0.1.10" };
62
+ SqsSendMessage[_a] = { fqn: "terraconstructs.aws.compute.tasks.SqsSendMessage", version: "0.2.0" };
66
63
  SqsSendMessage.SUPPORTED_INTEGRATION_PATTERNS = [
67
64
  compute.IntegrationPattern.REQUEST_RESPONSE,
68
65
  compute.IntegrationPattern.WAIT_FOR_TASK_TOKEN,
69
66
  ];
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1tZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3Rhc2tzL3Nxcy9zZW5kLW1lc3NhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxrQ0FBa0M7QUFFbEMsb0NBQW9DO0FBRXBDLHNEQUcrQjtBQThDL0I7OztHQUdHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsT0FBTyxDQUFDLGFBQWE7SUFZdkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ08sS0FBMEI7UUFFM0MsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFGUCxVQUFLLEdBQUwsS0FBSyxDQUFxQjtRQUczQyxJQUFJLENBQUMsa0JBQWtCO1lBQ3JCLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7UUFFMUUsSUFBQSxxQ0FBd0IsRUFDdEIsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixjQUFjLENBQUMsOEJBQThCLENBQzlDLENBQUM7UUFFRixJQUNFLEtBQUssQ0FBQyxrQkFBa0I7WUFDeEIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUM5QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sSUFBSSxLQUFLLENBQ2Isa0ZBQWtGLENBQ25GLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN0QixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDNUIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ3ZDLENBQUM7U0FDSCxDQUFDO1FBRUYscUNBQXFDO1FBQ3JDLDRDQUE0QztRQUM1QywyQ0FBMkM7UUFDM0MsOENBQThDO1FBQzlDLDRCQUE0QjtRQUM1QixnQ0FBZ0M7UUFDaEMsMERBQTBEO1FBQzFELGtFQUFrRTtRQUNsRSxVQUFVO1FBQ1YsT0FBTztRQUNQLElBQUk7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSDs7T0FFRztJQUNPLFdBQVc7UUFDbkIsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFBLG1DQUFzQixFQUM5QixJQUFJLEVBQ0osS0FBSyxFQUNMLGFBQWEsRUFDYixJQUFJLENBQUMsa0JBQWtCLENBQ3hCO1lBQ0QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO2dCQUMxQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTtnQkFDbkMsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUs7Z0JBQ3pDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQzNDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCO2dCQUN6RCxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjO2FBQzFDLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQzs7QUEvRUgsd0NBZ0ZDOzs7QUEvRXlCLDZDQUE4QixHQUNwRDtJQUNFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0I7SUFDM0MsT0FBTyxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQjtDQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGNvbXB1dGUgZnJvbSBcIi4uLy4uL1wiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vLi4vLi4vaWFtXCI7XG5pbXBvcnQgKiBhcyBub3RpZnkgZnJvbSBcIi4uLy4uLy4uL25vdGlmeVwiO1xuaW1wb3J0IHtcbiAgaW50ZWdyYXRpb25SZXNvdXJjZUFybixcbiAgdmFsaWRhdGVQYXR0ZXJuU3VwcG9ydGVkLFxufSBmcm9tIFwiLi4vcHJpdmF0ZS90YXNrLXV0aWxzXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3Igc2VuZGluZyBhIG1lc3NhZ2UgdG8gYW4gU1FTIHF1ZXVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3FzU2VuZE1lc3NhZ2VQcm9wcyBleHRlbmRzIGNvbXB1dGUuVGFza1N0YXRlQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBTUVMgcXVldWUgdGhhdCBtZXNzYWdlcyB3aWxsIGJlIHNlbnQgdG9cbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlOiBub3RpZnkuSVF1ZXVlO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCBtZXNzYWdlIHRvIHNlbmQgdG8gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZUJvZHk6IGNvbXB1dGUuVGFza0lucHV0O1xuXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRpbWUsIGZvciB3aGljaCB0byBkZWxheSBhIG1lc3NhZ2UuXG4gICAqIE1lc3NhZ2VzIHRoYXQgeW91IHNlbmQgdG8gdGhlIHF1ZXVlIHJlbWFpbiBpbnZpc2libGUgdG8gY29uc3VtZXJzIGZvciB0aGUgZHVyYXRpb25cbiAgICogb2YgdGhlIGRlbGF5IHBlcmlvZC4gVGhlIG1heGltdW0gYWxsb3dlZCBkZWxheSBpcyAxNSBtaW51dGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlbGF5IHNldCBvbiB0aGUgcXVldWUuIElmIGEgZGVsYXkgaXMgbm90IHNldCBvbiB0aGUgcXVldWUsXG4gICAqICAgbWVzc2FnZXMgYXJlIHNlbnQgaW1tZWRpYXRlbHkgKDAgc2Vjb25kcykuXG4gICAqL1xuICByZWFkb25seSBkZWxheT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9rZW4gdXNlZCBmb3IgZGVkdXBsaWNhdGlvbiBvZiBzZW50IG1lc3NhZ2VzLlxuICAgKiBBbnkgbWVzc2FnZXMgc2VudCB3aXRoIHRoZSBzYW1lIGRlZHVwbGljYXRpb24gSUQgYXJlIGFjY2VwdGVkIHN1Y2Nlc3NmdWxseSxcbiAgICogYnV0IGFyZW4ndCBkZWxpdmVyZWQgZHVyaW5nIHRoZSA1LW1pbnV0ZSBkZWR1cGxpY2F0aW9uIGludGVydmFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2VEZWR1cGxpY2F0aW9uSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWcgdGhhdCBzcGVjaWZpZXMgdGhhdCBhIG1lc3NhZ2UgYmVsb25ncyB0byBhIHNwZWNpZmljIG1lc3NhZ2UgZ3JvdXAuXG4gICAqXG4gICAqIE1lc3NhZ2VzIHRoYXQgYmVsb25nIHRvIHRoZSBzYW1lIG1lc3NhZ2UgZ3JvdXAgYXJlIHByb2Nlc3NlZCBpbiBhIEZJRk8gbWFubmVyLlxuICAgKiBNZXNzYWdlcyBpbiBkaWZmZXJlbnQgbWVzc2FnZSBncm91cHMgbWlnaHQgYmUgcHJvY2Vzc2VkIG91dCBvZiBvcmRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlR3JvdXBJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIFN0ZXBGdW5jdGlvbnMgVGFzayB0byBzZW5kIG1lc3NhZ2VzIHRvIFNRUyBxdWV1ZS5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTcXNTZW5kTWVzc2FnZSBleHRlbmRzIGNvbXB1dGUuVGFza1N0YXRlQmFzZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFNVUFBPUlRFRF9JTlRFR1JBVElPTl9QQVRURVJOUzogY29tcHV0ZS5JbnRlZ3JhdGlvblBhdHRlcm5bXSA9XG4gICAgW1xuICAgICAgY29tcHV0ZS5JbnRlZ3JhdGlvblBhdHRlcm4uUkVRVUVTVF9SRVNQT05TRSxcbiAgICAgIGNvbXB1dGUuSW50ZWdyYXRpb25QYXR0ZXJuLldBSVRfRk9SX1RBU0tfVE9LRU4sXG4gICAgXTtcblxuICAvLyBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFza01ldHJpY3M/OiBjb21wdXRlLlRhc2tNZXRyaWNzQ29uZmlnO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFza1BvbGljaWVzPzogaWFtLlBvbGljeVN0YXRlbWVudFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZWdyYXRpb25QYXR0ZXJuOiBjb21wdXRlLkludGVncmF0aW9uUGF0dGVybjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogU3FzU2VuZE1lc3NhZ2VQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5pbnRlZ3JhdGlvblBhdHRlcm4gPVxuICAgICAgcHJvcHMuaW50ZWdyYXRpb25QYXR0ZXJuID8/IGNvbXB1dGUuSW50ZWdyYXRpb25QYXR0ZXJuLlJFUVVFU1RfUkVTUE9OU0U7XG5cbiAgICB2YWxpZGF0ZVBhdHRlcm5TdXBwb3J0ZWQoXG4gICAgICB0aGlzLmludGVncmF0aW9uUGF0dGVybixcbiAgICAgIFNxc1NlbmRNZXNzYWdlLlNVUFBPUlRFRF9JTlRFR1JBVElPTl9QQVRURVJOUyxcbiAgICApO1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuaW50ZWdyYXRpb25QYXR0ZXJuID09PVxuICAgICAgY29tcHV0ZS5JbnRlZ3JhdGlvblBhdHRlcm4uV0FJVF9GT1JfVEFTS19UT0tFTlxuICAgICkge1xuICAgICAgaWYgKCFjb21wdXRlLkZpZWxkVXRpbHMuY29udGFpbnNUYXNrVG9rZW4ocHJvcHMubWVzc2FnZUJvZHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIlRhc2sgVG9rZW4gaXMgcmVxdWlyZWQgaW4gYG1lc3NhZ2VCb2R5YCBVc2UgSnNvblBhdGgudGFza1Rva2VuIHRvIHNldCB0aGUgdG9rZW4uXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy50YXNrUG9saWNpZXMgPSBbXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInNxczpTZW5kTWVzc2FnZVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5wcm9wcy5xdWV1ZS5xdWV1ZUFybl0sXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgLy8gLy8gVE9ETzogUmUtQWRkIGVuY3J5cHRpb24gc3VwcG9ydFxuICAgIC8vIC8vIHNlbmRpbmcgdG8gYW4gZW5jcnlwdGVkIHF1ZXVlIHJlcXVpcmVzXG4gICAgLy8gLy8gcGVybWlzc2lvbnMgb24gdGhlIGFzc29jaWF0ZWQga21zIGtleVxuICAgIC8vIGlmICh0aGlzLnByb3BzLnF1ZXVlLmVuY3J5cHRpb25NYXN0ZXJLZXkpIHtcbiAgICAvLyAgIHRoaXMudGFza1BvbGljaWVzLnB1c2goXG4gICAgLy8gICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAvLyAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiLCBcImttczpHZW5lcmF0ZURhdGFLZXkqXCJdLFxuICAgIC8vICAgICAgIHJlc291cmNlczogW3RoaXMucHJvcHMucXVldWUuZW5jcnlwdGlvbk1hc3RlcktleS5rZXlBcm5dLFxuICAgIC8vICAgICB9KSxcbiAgICAvLyAgICk7XG4gICAgLy8gfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBTUVMgU2VuZE1lc3NhZ2Ugc2VydmljZSBpbnRlZ3JhdGlvbiB0YXNrIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfcmVuZGVyVGFzaygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBSZXNvdXJjZTogaW50ZWdyYXRpb25SZXNvdXJjZUFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJzcXNcIixcbiAgICAgICAgXCJzZW5kTWVzc2FnZVwiLFxuICAgICAgICB0aGlzLmludGVncmF0aW9uUGF0dGVybixcbiAgICAgICksXG4gICAgICBQYXJhbWV0ZXJzOiBjb21wdXRlLkZpZWxkVXRpbHMucmVuZGVyT2JqZWN0KHtcbiAgICAgICAgUXVldWVVcmw6IHRoaXMucHJvcHMucXVldWUucXVldWVVcmwsXG4gICAgICAgIE1lc3NhZ2VCb2R5OiB0aGlzLnByb3BzLm1lc3NhZ2VCb2R5LnZhbHVlLFxuICAgICAgICBEZWxheVNlY29uZHM6IHRoaXMucHJvcHMuZGVsYXk/LnRvU2Vjb25kcygpLFxuICAgICAgICBNZXNzYWdlRGVkdXBsaWNhdGlvbklkOiB0aGlzLnByb3BzLm1lc3NhZ2VEZWR1cGxpY2F0aW9uSWQsXG4gICAgICAgIE1lc3NhZ2VHcm91cElkOiB0aGlzLnByb3BzLm1lc3NhZ2VHcm91cElkLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxufVxuIl19
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1tZXNzYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3Rhc2tzL3Nxcy9zZW5kLW1lc3NhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxrQ0FBa0M7QUFFbEMsb0NBQW9DO0FBRXBDLHNEQUcrQjtBQThDL0I7OztHQUdHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsT0FBTyxDQUFDLGFBQWE7SUFZdkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ08sS0FBMEI7UUFFM0MsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFGUCxVQUFLLEdBQUwsS0FBSyxDQUFxQjtRQUczQyxJQUFJLENBQUMsa0JBQWtCO1lBQ3JCLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUM7UUFFMUUsSUFBQSxxQ0FBd0IsRUFDdEIsSUFBSSxDQUFDLGtCQUFrQixFQUN2QixjQUFjLENBQUMsOEJBQThCLENBQzlDLENBQUM7UUFFRixJQUNFLEtBQUssQ0FBQyxrQkFBa0I7WUFDeEIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUM5QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sSUFBSSxLQUFLLENBQ2Isa0ZBQWtGLENBQ25GLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN0QixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDNUIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO2FBQ3ZDLENBQUM7U0FDSCxDQUFDO1FBRUYseUNBQXlDO1FBQ3pDLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3BCLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztnQkFDdEIsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLHNCQUFzQixDQUFDO2dCQUNoRCxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7YUFDekQsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0g7O09BRUc7SUFDTyxXQUFXO1FBQ25CLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBQSxtQ0FBc0IsRUFDOUIsSUFBSSxFQUNKLEtBQUssRUFDTCxhQUFhLEVBQ2IsSUFBSSxDQUFDLGtCQUFrQixDQUN4QjtZQUNELFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztnQkFDMUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVE7Z0JBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLO2dCQUN6QyxZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUMzQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQjtnQkFDekQsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYzthQUMxQyxDQUFDO1NBQ0gsQ0FBQztJQUNKLENBQUM7O0FBOUVILHdDQStFQzs7O0FBOUV5Qiw2Q0FBOEIsR0FDcEQ7SUFDRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCO0lBQzNDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUI7Q0FDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBjb21wdXRlIGZyb20gXCIuLi8uLi9cIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uLy4uLy4uL2lhbVwiO1xuaW1wb3J0ICogYXMgbm90aWZ5IGZyb20gXCIuLi8uLi8uLi9ub3RpZnlcIjtcbmltcG9ydCB7XG4gIGludGVncmF0aW9uUmVzb3VyY2VBcm4sXG4gIHZhbGlkYXRlUGF0dGVyblN1cHBvcnRlZCxcbn0gZnJvbSBcIi4uL3ByaXZhdGUvdGFzay11dGlsc1wiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHNlbmRpbmcgYSBtZXNzYWdlIHRvIGFuIFNRUyBxdWV1ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNxc1NlbmRNZXNzYWdlUHJvcHMgZXh0ZW5kcyBjb21wdXRlLlRhc2tTdGF0ZUJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgU1FTIHF1ZXVlIHRoYXQgbWVzc2FnZXMgd2lsbCBiZSBzZW50IHRvXG4gICAqL1xuICByZWFkb25seSBxdWV1ZTogbm90aWZ5LklRdWV1ZTtcblxuICAvKipcbiAgICogVGhlIHRleHQgbWVzc2FnZSB0byBzZW5kIHRvIHRoZSBxdWV1ZS5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2VCb2R5OiBjb21wdXRlLlRhc2tJbnB1dDtcblxuICAvKipcbiAgICogVGhlIGxlbmd0aCBvZiB0aW1lLCBmb3Igd2hpY2ggdG8gZGVsYXkgYSBtZXNzYWdlLlxuICAgKiBNZXNzYWdlcyB0aGF0IHlvdSBzZW5kIHRvIHRoZSBxdWV1ZSByZW1haW4gaW52aXNpYmxlIHRvIGNvbnN1bWVycyBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBkZWxheSBwZXJpb2QuIFRoZSBtYXhpbXVtIGFsbG93ZWQgZGVsYXkgaXMgMTUgbWludXRlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWxheSBzZXQgb24gdGhlIHF1ZXVlLiBJZiBhIGRlbGF5IGlzIG5vdCBzZXQgb24gdGhlIHF1ZXVlLFxuICAgKiAgIG1lc3NhZ2VzIGFyZSBzZW50IGltbWVkaWF0ZWx5ICgwIHNlY29uZHMpLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXk/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRva2VuIHVzZWQgZm9yIGRlZHVwbGljYXRpb24gb2Ygc2VudCBtZXNzYWdlcy5cbiAgICogQW55IG1lc3NhZ2VzIHNlbnQgd2l0aCB0aGUgc2FtZSBkZWR1cGxpY2F0aW9uIElEIGFyZSBhY2NlcHRlZCBzdWNjZXNzZnVsbHksXG4gICAqIGJ1dCBhcmVuJ3QgZGVsaXZlcmVkIGR1cmluZyB0aGUgNS1taW51dGUgZGVkdXBsaWNhdGlvbiBpbnRlcnZhbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlRGVkdXBsaWNhdGlvbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFnIHRoYXQgc3BlY2lmaWVzIHRoYXQgYSBtZXNzYWdlIGJlbG9uZ3MgdG8gYSBzcGVjaWZpYyBtZXNzYWdlIGdyb3VwLlxuICAgKlxuICAgKiBNZXNzYWdlcyB0aGF0IGJlbG9uZyB0byB0aGUgc2FtZSBtZXNzYWdlIGdyb3VwIGFyZSBwcm9jZXNzZWQgaW4gYSBGSUZPIG1hbm5lci5cbiAgICogTWVzc2FnZXMgaW4gZGlmZmVyZW50IG1lc3NhZ2UgZ3JvdXBzIG1pZ2h0IGJlIHByb2Nlc3NlZCBvdXQgb2Ygb3JkZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZUdyb3VwSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBTdGVwRnVuY3Rpb25zIFRhc2sgdG8gc2VuZCBtZXNzYWdlcyB0byBTUVMgcXVldWUuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgU3FzU2VuZE1lc3NhZ2UgZXh0ZW5kcyBjb21wdXRlLlRhc2tTdGF0ZUJhc2Uge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTVVBQT1JURURfSU5URUdSQVRJT05fUEFUVEVSTlM6IGNvbXB1dGUuSW50ZWdyYXRpb25QYXR0ZXJuW10gPVxuICAgIFtcbiAgICAgIGNvbXB1dGUuSW50ZWdyYXRpb25QYXR0ZXJuLlJFUVVFU1RfUkVTUE9OU0UsXG4gICAgICBjb21wdXRlLkludGVncmF0aW9uUGF0dGVybi5XQUlUX0ZPUl9UQVNLX1RPS0VOLFxuICAgIF07XG5cbiAgLy8gcHJvdGVjdGVkIHJlYWRvbmx5IHRhc2tNZXRyaWNzPzogY29tcHV0ZS5UYXNrTWV0cmljc0NvbmZpZztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhc2tQb2xpY2llcz86IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGludGVncmF0aW9uUGF0dGVybjogY29tcHV0ZS5JbnRlZ3JhdGlvblBhdHRlcm47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IFNxc1NlbmRNZXNzYWdlUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMuaW50ZWdyYXRpb25QYXR0ZXJuID1cbiAgICAgIHByb3BzLmludGVncmF0aW9uUGF0dGVybiA/PyBjb21wdXRlLkludGVncmF0aW9uUGF0dGVybi5SRVFVRVNUX1JFU1BPTlNFO1xuXG4gICAgdmFsaWRhdGVQYXR0ZXJuU3VwcG9ydGVkKFxuICAgICAgdGhpcy5pbnRlZ3JhdGlvblBhdHRlcm4sXG4gICAgICBTcXNTZW5kTWVzc2FnZS5TVVBQT1JURURfSU5URUdSQVRJT05fUEFUVEVSTlMsXG4gICAgKTtcblxuICAgIGlmIChcbiAgICAgIHByb3BzLmludGVncmF0aW9uUGF0dGVybiA9PT1cbiAgICAgIGNvbXB1dGUuSW50ZWdyYXRpb25QYXR0ZXJuLldBSVRfRk9SX1RBU0tfVE9LRU5cbiAgICApIHtcbiAgICAgIGlmICghY29tcHV0ZS5GaWVsZFV0aWxzLmNvbnRhaW5zVGFza1Rva2VuKHByb3BzLm1lc3NhZ2VCb2R5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJUYXNrIFRva2VuIGlzIHJlcXVpcmVkIGluIGBtZXNzYWdlQm9keWAgVXNlIEpzb25QYXRoLnRhc2tUb2tlbiB0byBzZXQgdGhlIHRva2VuLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGFza1BvbGljaWVzID0gW1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzcXM6U2VuZE1lc3NhZ2VcIl0sXG4gICAgICAgIHJlc291cmNlczogW3RoaXMucHJvcHMucXVldWUucXVldWVBcm5dLFxuICAgICAgfSksXG4gICAgXTtcblxuICAgIC8vIHNlbmRpbmcgdG8gYW4gZW5jcnlwdGVkIHF1ZXVlIHJlcXVpcmVzXG4gICAgLy8gcGVybWlzc2lvbnMgb24gdGhlIGFzc29jaWF0ZWQga21zIGtleVxuICAgIGlmICh0aGlzLnByb3BzLnF1ZXVlLmVuY3J5cHRpb25NYXN0ZXJLZXkpIHtcbiAgICAgIHRoaXMudGFza1BvbGljaWVzLnB1c2goXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiLCBcImttczpHZW5lcmF0ZURhdGFLZXkqXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW3RoaXMucHJvcHMucXVldWUuZW5jcnlwdGlvbk1hc3RlcktleS5rZXlBcm5dLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIHRoZSBTUVMgU2VuZE1lc3NhZ2Ugc2VydmljZSBpbnRlZ3JhdGlvbiB0YXNrIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfcmVuZGVyVGFzaygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBSZXNvdXJjZTogaW50ZWdyYXRpb25SZXNvdXJjZUFybihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJzcXNcIixcbiAgICAgICAgXCJzZW5kTWVzc2FnZVwiLFxuICAgICAgICB0aGlzLmludGVncmF0aW9uUGF0dGVybixcbiAgICAgICksXG4gICAgICBQYXJhbWV0ZXJzOiBjb21wdXRlLkZpZWxkVXRpbHMucmVuZGVyT2JqZWN0KHtcbiAgICAgICAgUXVldWVVcmw6IHRoaXMucHJvcHMucXVldWUucXVldWVVcmwsXG4gICAgICAgIE1lc3NhZ2VCb2R5OiB0aGlzLnByb3BzLm1lc3NhZ2VCb2R5LnZhbHVlLFxuICAgICAgICBEZWxheVNlY29uZHM6IHRoaXMucHJvcHMuZGVsYXk/LnRvU2Vjb25kcygpLFxuICAgICAgICBNZXNzYWdlRGVkdXBsaWNhdGlvbklkOiB0aGlzLnByb3BzLm1lc3NhZ2VEZWR1cGxpY2F0aW9uSWQsXG4gICAgICAgIE1lc3NhZ2VHcm91cElkOiB0aGlzLnByb3BzLm1lc3NhZ2VHcm91cElkLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -41,5 +41,5 @@ class StepFunctionsInvokeActivity extends compute.TaskStateBase {
41
41
  }
42
42
  exports.StepFunctionsInvokeActivity = StepFunctionsInvokeActivity;
43
43
  _a = JSII_RTTI_SYMBOL_1;
44
- StepFunctionsInvokeActivity[_a] = { fqn: "terraconstructs.aws.compute.tasks.StepFunctionsInvokeActivity", version: "0.1.10" };
44
+ StepFunctionsInvokeActivity[_a] = { fqn: "terraconstructs.aws.compute.tasks.StepFunctionsInvokeActivity", version: "0.2.0" };
45
45
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2tlLWFjdGl2aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3Rhc2tzL3N0ZXBmdW5jdGlvbnMvaW52b2tlLWFjdGl2aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esa0NBQWtDO0FBeUJsQzs7OztHQUlHO0FBQ0gsTUFBYSwyQkFBNEIsU0FBUSxPQUFPLENBQUMsYUFBYTtJQUtwRSxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDTyxLQUF1QztRQUV4RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUZQLFVBQUssR0FBTCxLQUFLLENBQWtDO1FBSXhELE9BQU87UUFDUCwyREFBMkQ7UUFDM0QsMkNBQTJDO1FBQzNDLE1BQU07UUFDTixxREFBcUQ7UUFDckQsMERBQTBEO1FBQzFELE9BQU87UUFDUCxJQUFJO1FBQ0osdUJBQXVCO1FBQ3ZCLHdFQUF3RTtRQUN4RSxzQ0FBc0M7UUFDdEMsc0NBQXNDO1FBQ3RDLEtBQUs7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxXQUFXO1FBQ25CLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVztZQUN6QyxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO2dCQUMvQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ3hELENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQztJQUNKLENBQUM7O0FBckNILGtFQXVEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBjb21wdXRlIGZyb20gXCIuLi8uLi9cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vLi4vLi4vaWFtXCI7XG4vLyBpbXBvcnQgeyBJS2V5IH0gZnJvbSBcIi4uLy4uLy4uL2VuY3J5cHRpb25cIjtcbi8vIGltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEVuY3J5cHRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbWVyLW1hbmFnZWQta2V5LWVuY3J5cHRpb24tY29uZmlndXJhdGlvblwiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGludm9raW5nIGFuIEFjdGl2aXR5IHdvcmtlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBGdW5jdGlvbnNJbnZva2VBY3Rpdml0eVByb3BzXG4gIGV4dGVuZHMgY29tcHV0ZS5UYXNrU3RhdGVCYXNlUHJvcHMge1xuICAvKipcbiAgICogU3RlcCBGdW5jdGlvbnMgQWN0aXZpdHkgdG8gaW52b2tlXG4gICAqL1xuICByZWFkb25seSBhY3Rpdml0eTogY29tcHV0ZS5JQWN0aXZpdHk7XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlcnMgcGFzcyBhIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzLCBlaXRoZXIgc3RhdGljIHZhbHVlcyBvciBKU09OUGF0aCBleHByZXNzaW9ucyB0aGF0IHNlbGVjdCBmcm9tIHRoZSBpbnB1dC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc3RlcC1mdW5jdGlvbnMvbGF0ZXN0L2RnL2lucHV0LW91dHB1dC1pbnB1dHBhdGgtcGFyYW1zLmh0bWwjaW5wdXQtb3V0cHV0LXBhcmFtZXRlcnNcbiAgICpcbiAgICogQGRlZmF1bHQgTm8gcGFyYW1ldGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVycz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKipcbiAqIEEgU3RlcCBGdW5jdGlvbnMgVGFzayB0byBpbnZva2UgYW4gQWN0aXZpdHkgd29ya2VyLlxuICpcbiAqIEFuIEFjdGl2aXR5IGNhbiBiZSB1c2VkIGRpcmVjdGx5IGFzIGEgUmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGVwRnVuY3Rpb25zSW52b2tlQWN0aXZpdHkgZXh0ZW5kcyBjb21wdXRlLlRhc2tTdGF0ZUJhc2Uge1xuICAvLyBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFza01ldHJpY3M/OiBjb21wdXRlLlRhc2tNZXRyaWNzQ29uZmlnO1xuICAvLyBObyBJQU0gcGVybWlzc2lvbnMgbmVjZXNzYXJ5IHVubGVzcyB0aGUgQWN0aXZpdHkgdXNlcyBhIGN1c3RvbWVyIG1hbmFnZWQgS01TIGtleVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGFza1BvbGljaWVzPzogaWFtLlBvbGljeVN0YXRlbWVudFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBTdGVwRnVuY3Rpb25zSW52b2tlQWN0aXZpdHlQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBpZiAoXG4gICAgLy8gICB0aGlzLnByb3BzLmFjdGl2aXR5LmVuY3J5cHRpb25Db25maWd1cmF0aW9uIGluc3RhbmNlb2ZcbiAgICAvLyAgIEN1c3RvbWVyTWFuYWdlZEVuY3J5cHRpb25Db25maWd1cmF0aW9uXG4gICAgLy8gKSB7XG4gICAgLy8gICB0aGlzLnRhc2tQb2xpY2llcyA9IHRoaXMuY3JlYXRlUG9saWN5U3RhdGVtZW50cyhcbiAgICAvLyAgICAgdGhpcy5wcm9wcy5hY3Rpdml0eS5lbmNyeXB0aW9uQ29uZmlndXJhdGlvbi5rbXNLZXksXG4gICAgLy8gICApO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLnRhc2tNZXRyaWNzID0ge1xuICAgIC8vICAgbWV0cmljRGltZW5zaW9uczogeyBBY3Rpdml0eUFybjogdGhpcy5wcm9wcy5hY3Rpdml0eS5hY3Rpdml0eUFybiB9LFxuICAgIC8vICAgbWV0cmljUHJlZml4U2luZ3VsYXI6IFwiQWN0aXZpdHlcIixcbiAgICAvLyAgIG1ldHJpY1ByZWZpeFBsdXJhbDogXCJBY3Rpdml0aWVzXCIsXG4gICAgLy8gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfcmVuZGVyVGFzaygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBSZXNvdXJjZTogdGhpcy5wcm9wcy5hY3Rpdml0eS5hY3Rpdml0eUFybixcbiAgICAgIFBhcmFtZXRlcnM6IHRoaXMucHJvcHMucGFyYW1ldGVyc1xuICAgICAgICA/IGNvbXB1dGUuRmllbGRVdGlscy5yZW5kZXJPYmplY3QodGhpcy5wcm9wcy5wYXJhbWV0ZXJzKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gLy8gSUFNIHBvbGljeSBmb3IgdGhlIFN0YXRlIE1hY2hpbmUgZXhlY3V0aW9uIHJvbGUgdG8gdXNlIHRoZSBBY3Rpdml0eSBLTVMga2V5IHdoZW4gZW5jcnlwdGluZyBpbnB1dHNcbiAgLy8gcHJpdmF0ZSBjcmVhdGVQb2xpY3lTdGF0ZW1lbnRzKGttc2tleTogSUtleSk6IGlhbS5Qb2xpY3lTdGF0ZW1lbnRbXSB7XG4gIC8vICAgcmV0dXJuIFtcbiAgLy8gICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgLy8gICAgICAgYWN0aW9uczogW1wia21zOkRlY3J5cHRcIiwgXCJrbXM6R2VuZXJhdGVEYXRhS2V5XCJdLFxuICAvLyAgICAgICByZXNvdXJjZXM6IFtgJHtrbXNrZXkua2V5QXJufWBdLFxuICAvLyAgICAgICBjb25kaXRpb246IFtcbiAgLy8gICAgICAgICB7XG4gIC8vICAgICAgICAgICB0ZXN0OiBcIlN0cmluZ0VxdWFsc1wiLFxuICAvLyAgICAgICAgICAgdmFyaWFibGU6IFwia21zOkVuY3J5cHRpb25Db250ZXh0OmF3czpzdGF0ZXM6YWN0aXZpdHlBcm5cIixcbiAgLy8gICAgICAgICAgIHZhbHVlczogW3RoaXMucHJvcHMuYWN0aXZpdHkuYWN0aXZpdHlBcm5dLFxuICAvLyAgICAgICAgIH0sXG4gIC8vICAgICAgIF0sXG4gIC8vICAgICB9KSxcbiAgLy8gICBdO1xuICAvLyB9XG59XG4iXX0=
@@ -114,7 +114,7 @@ class StepFunctionsStartExecution extends compute.TaskStateBase {
114
114
  }
115
115
  exports.StepFunctionsStartExecution = StepFunctionsStartExecution;
116
116
  _a = JSII_RTTI_SYMBOL_1;
117
- StepFunctionsStartExecution[_a] = { fqn: "terraconstructs.aws.compute.tasks.StepFunctionsStartExecution", version: "0.1.10" };
117
+ StepFunctionsStartExecution[_a] = { fqn: "terraconstructs.aws.compute.tasks.StepFunctionsStartExecution", version: "0.2.0" };
118
118
  StepFunctionsStartExecution.SUPPORTED_INTEGRATION_PATTERNS = [
119
119
  compute.IntegrationPattern.REQUEST_RESPONSE,
120
120
  compute.IntegrationPattern.RUN_JOB,
@@ -26,7 +26,7 @@ class Errors {
26
26
  }
27
27
  exports.Errors = Errors;
28
28
  _a = JSII_RTTI_SYMBOL_1;
29
- Errors[_a] = { fqn: "terraconstructs.aws.compute.Errors", version: "0.1.10" };
29
+ Errors[_a] = { fqn: "terraconstructs.aws.compute.Errors", version: "0.2.0" };
30
30
  /**
31
31
  * Matches any Error.
32
32
  */
@@ -170,5 +170,5 @@ class UsagePlan extends UsagePlanBase {
170
170
  }
171
171
  exports.UsagePlan = UsagePlan;
172
172
  _a = JSII_RTTI_SYMBOL_1;
173
- UsagePlan[_a] = { fqn: "terraconstructs.aws.compute.UsagePlan", version: "0.1.10" };
173
+ UsagePlan[_a] = { fqn: "terraconstructs.aws.compute.UsagePlan", version: "0.2.0" };
174
174
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2UtcGxhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS91c2FnZS1wbGFuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUdBQXFHO0FBRXJHLHNEQUc2QjtBQUM3QixpQ0FBNkI7QUFFN0IsdURBQW9FO0FBQ3BFLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUF3QnhDOztHQUVHO0FBQ0gsSUFBWSxNQUlYO0FBSkQsV0FBWSxNQUFNO0lBQ2hCLHFCQUFXLENBQUE7SUFDWCx1QkFBYSxDQUFBO0lBQ2IseUJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSlcsTUFBTSxzQkFBTixNQUFNLFFBSWpCO0FBd0NEOztHQUVHO0FBQ0gsSUFBSyxnQkFFSjtBQUZELFdBQUssZ0JBQWdCO0lBQ25CLHVDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFGSSxnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBRXBCO0FBcUdELE1BQWUsYUFBYyxTQUFRLGdDQUFnQjtJQU9uRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FBQyxNQUFlLEVBQUUsT0FBMEI7UUFDMUQsTUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUM7UUFDdEMsZ0RBQWdEO1FBQ2hELE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksb0JBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFWCxNQUFNLFFBQVEsR0FBRyxJQUFJLHFDQUFzQixD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QUVELE9BQU87WUFDTCxLQUFLLEVBQUUsU0FBUztZQUNoQixLQUFLLEVBQUUsU0FBUztZQUNoQixRQUFRLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7U0FDMUQsQ0FBQztJQUNKLENBQUM7SUFFTyxXQUFXLENBQ2pCLEtBQXFCO1FBRXJCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLElBQUEsaUNBQWUsRUFBQyxLQUFLLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztZQUN6RCxPQUFPO2dCQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztnQkFDbEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU87YUFDdEIsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sY0FBYyxDQUNwQixLQUF3QjtRQUV4QixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNwQyxJQUFBLGlDQUFlLEVBQUMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFBLGdDQUFjLEVBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFFakQsT0FBTztZQUNMLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7U0FDM0IsQ0FBQztJQUNKLENBQUM7O0FBbEtILDhCQW1LQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5L2xpYi91c2FnZS1wbGFuLnRzXG5cbmltcG9ydCB7XG4gIGFwaUdhdGV3YXlVc2FnZVBsYW4sXG4gIGFwaUdhdGV3YXlVc2FnZVBsYW5LZXksXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBMYXp5IH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVEb3VibGUsIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuL2FwaWdhdGV3YXktdXRpbFwiO1xuaW1wb3J0IHtcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG4gIElBd3NDb25zdHJ1Y3QsXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCB7IElBcGlLZXkgfSBmcm9tIFwiLi4vY29tcHV0ZS9hcGkta2V5XCI7XG5pbXBvcnQgeyBNZXRob2QgfSBmcm9tIFwiLi4vY29tcHV0ZS9tZXRob2RcIjtcbmltcG9ydCB7IElSZXN0QXBpIH0gZnJvbSBcIi4uL2NvbXB1dGUvcmVzdGFwaVwiO1xuaW1wb3J0IHsgU3RhZ2UgfSBmcm9tIFwiLi4vY29tcHV0ZS9zdGFnZVwiO1xuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgZGVmaW5pbmcgdGhyb3R0bGluZyBwYXJhbWV0ZXJzIHRvIEFQSSBzdGFnZXMgb3IgbWV0aG9kcy5cbiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1yZXF1ZXN0LXRocm90dGxpbmcuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRocm90dGxlU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIEFQSSByZXF1ZXN0IHN0ZWFkeS1zdGF0ZSByYXRlIGxpbWl0IChhdmVyYWdlIHJlcXVlc3RzIHBlciBzZWNvbmQgb3ZlciBhbiBleHRlbmRlZCBwZXJpb2Qgb2YgdGltZSlcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgcmF0ZUxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBBUEkgcmVxdWVzdCByYXRlIGxpbWl0IG92ZXIgYSB0aW1lIHJhbmdpbmcgZnJvbSBvbmUgdG8gYSBmZXcgc2Vjb25kcy5cbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYnVyc3RMaW1pdD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaW1lIHBlcmlvZCBmb3Igd2hpY2ggcXVvdGEgc2V0dGluZ3MgYXBwbHkuXG4gKi9cbmV4cG9ydCBlbnVtIFBlcmlvZCB7XG4gIERBWSA9IFwiREFZXCIsXG4gIFdFRUsgPSBcIldFRUtcIixcbiAgTU9OVEggPSBcIk1PTlRIXCIsXG59XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGNsaWVudHMgY2FuIG1ha2UgdG8gQVBJIEdhdGV3YXkgQVBJcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IHVzZXJzIGNhbiBtYWtlIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgcGVyaW9kLlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBsaW1pdD86IG51bWJlcjtcblxuICAvKipcbiAgICogRm9yIHRoZSBpbml0aWFsIHRpbWUgcGVyaW9kLCB0aGUgbnVtYmVyIG9mIHJlcXVlc3RzIHRvIHN1YnRyYWN0IGZyb20gdGhlIHNwZWNpZmllZCBsaW1pdC5cbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBwZXJpb2QgZm9yIHdoaWNoIHRoZSBtYXhpbXVtIGxpbWl0IG9mIHJlcXVlc3RzIGFwcGxpZXMuXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHBlcmlvZD86IFBlcmlvZDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHBlci1tZXRob2QgdGhyb3R0bGluZyBmb3IgYSByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaHJvdHRsaW5nUGVyTWV0aG9kIHtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgZm9yIHdoaWNoIHlvdSBzcGVjaWZ5IHRoZSB0aHJvdHRsaW5nIHNldHRpbmdzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kOiBNZXRob2Q7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgb3ZlcmFsbCByZXF1ZXN0IHJhdGUgKGF2ZXJhZ2UgcmVxdWVzdHMgcGVyIHNlY29uZCkgYW5kIGJ1cnN0IGNhcGFjaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3R0bGU6IFRocm90dGxlU2V0dGluZ3M7XG59XG5cbi8qKlxuICogVHlwZSBvZiBVc2FnZSBQbGFuIEtleS4gQ3VycmVudGx5IHRoZSBvbmx5IHN1cHBvcnRlZCB0eXBlIGlzICdBcGlLZXknXG4gKi9cbmVudW0gVXNhZ2VQbGFuS2V5VHlwZSB7XG4gIEFQSV9LRVkgPSBcIkFQSV9LRVlcIixcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBBUEkgc3RhZ2VzIHRoYXQgYSB1c2FnZSBwbGFuIGFwcGxpZXMgdG8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VQbGFuUGVyQXBpU3RhZ2Uge1xuICAvKipcbiAgICogVGhlIEFQSSB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHVzYWdlIHBsYW4gc3RhZ2UuXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFwaT86IElSZXN0QXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhZ2UgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyB1c2FnZSBwbGFuLlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBzdGFnZT86IFN0YWdlO1xuXG4gIC8qKlxuICAgKiBUaHJvdHRsZSBzZXR0aW5ncyBmb3Igc3BlY2lmaWMgbWV0aG9kcyBpbiB0aGlzIHN0YWdlLlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSB0aHJvdHRsZT86IFRocm90dGxpbmdQZXJNZXRob2RbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2FnZVBsYW5Qcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEFQSSBTdGFnZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2FnZSBwbGFuLlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBhcGlTdGFnZXM/OiBVc2FnZVBsYW5QZXJBcGlTdGFnZVtdO1xuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHVzYWdlIHBsYW4gcHVycG9zZS5cbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXF1ZXN0cyBjbGllbnRzIGNhbiBtYWtlIGluIGEgZ2l2ZW4gdGltZSBwZXJpb2QuXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHF1b3RhPzogUXVvdGFTZXR0aW5ncztcblxuICAvKipcbiAgICogT3ZlcmFsbCB0aHJvdHRsZSBzZXR0aW5ncyBmb3IgdGhlIEFQSS5cbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3R0bGU/OiBUaHJvdHRsZVNldHRpbmdzO1xuXG4gIC8qKlxuICAgKiBOYW1lIGZvciB0aGlzIHVzYWdlIHBsYW4uXG4gICAqIEBkZWZhdWx0IC0gQ0RLIGdlbmVyYXRlZCBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcGlLZXkgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2FnZSBwbGFuLlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgYWRkQXBpS2V5KClgXG4gICAqL1xuICByZWFkb25seSBhcGlLZXk/OiBJQXBpS2V5O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gdGhlIFVzYWdlUGxhbi5hZGRBcGlLZXkoKSBtZXRob2RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZGRBcGlLZXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3QgSUQgZm9yIHRoZSBVc2FnZVBsYW5LZXkgcmVzb3VyY2UuXG4gICAqIEBkZWZhdWx0IC0gYXV0b2dlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVMb2dpY2FsSWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNhZ2VQbGFuT3V0cHV0cyB7XG4gIHJlYWRvbmx5IHVzYWdlUGxhbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBVc2FnZVBsYW4sIGVpdGhlciBtYW5hZ2VkIGJ5IHRoaXMgQ0RLIGFwcCwgb3IgaW1wb3J0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVVzYWdlUGxhbiBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogT3V0cHV0cyBvZiB0aGUgdXNhZ2UgcGxhbi4gKi9cbiAgcmVhZG9ubHkgdXNhZ2VQbGFuT3V0cHV0czogVXNhZ2VQbGFuT3V0cHV0cztcblxuICAvKipcbiAgICogSWQgb2YgdGhlIHVzYWdlIHBsYW5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNhZ2VQbGFuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkcyBhbiBBcGlLZXkuXG4gICAqXG4gICAqIEBwYXJhbSBhcGlLZXkgdGhlIGFwaSBrZXkgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyB1c2FnZSBwbGFuXG4gICAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgdGhpcyBtZXRob2RcbiAgICovXG4gIGFkZEFwaUtleShhcGlLZXk6IElBcGlLZXksIG9wdGlvbnM/OiBBZGRBcGlLZXlPcHRpb25zKTogdm9pZDtcbn1cblxuYWJzdHJhY3QgY2xhc3MgVXNhZ2VQbGFuQmFzZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJVXNhZ2VQbGFuIHtcbiAgLyoqXG4gICAqIElkIG9mIHRoZSB1c2FnZSBwbGFuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB1c2FnZVBsYW5JZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBnZXQgdXNhZ2VQbGFuT3V0cHV0cygpOiBVc2FnZVBsYW5PdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXNhZ2VQbGFuSWQ6IHRoaXMudXNhZ2VQbGFuSWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy51c2FnZVBsYW5PdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gQXBpS2V5LlxuICAgKlxuICAgKiBAcGFyYW0gYXBpS2V5IHRoZSBhcGkga2V5IHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgdXNhZ2UgcGxhblxuICAgKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIHRoaXMgbWV0aG9kXG4gICAqL1xuICBwdWJsaWMgYWRkQXBpS2V5KGFwaUtleTogSUFwaUtleSwgb3B0aW9ucz86IEFkZEFwaUtleU9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVmaXggPSBcIlVzYWdlUGxhbktleVJlc291cmNlXCI7XG4gICAgLy8gUG9zdGZpeGluZyBhcGlrZXkgaWQgb25seSBmcm9tIHRoZSAybmQgY2hpbGQuXG4gICAgY29uc3QgaWQgPSB0aGlzLm5vZGUudHJ5RmluZENoaWxkKHByZWZpeClcbiAgICAgID8gYCR7cHJlZml4fToke0F3c1N0YWNrLnVuaXF1ZUlkKGFwaUtleS5ub2RlKX1gXG4gICAgICA6IHByZWZpeDtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IGFwaUdhdGV3YXlVc2FnZVBsYW5LZXkuQXBpR2F0ZXdheVVzYWdlUGxhbktleShcbiAgICAgIHRoaXMsXG4gICAgICBpZCxcbiAgICAgIHtcbiAgICAgICAga2V5SWQ6IGFwaUtleS5rZXlJZCxcbiAgICAgICAga2V5VHlwZTogVXNhZ2VQbGFuS2V5VHlwZS5BUElfS0VZLFxuICAgICAgICB1c2FnZVBsYW5JZDogdGhpcy51c2FnZVBsYW5JZCxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBpZiAob3B0aW9ucz8ub3ZlcnJpZGVMb2dpY2FsSWQpIHtcbiAgICAgIHJlc291cmNlLm92ZXJyaWRlTG9naWNhbElkKG9wdGlvbnMub3ZlcnJpZGVMb2dpY2FsSWQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXNhZ2VQbGFuIGV4dGVuZHMgVXNhZ2VQbGFuQmFzZSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXh0ZXJuYWxseSBkZWZpbmVkIHVzYWdlIHBsYW4gdXNpbmcgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgIHRoZSBjb25zdHJ1Y3QgdGhhdCB3aWxsIFwib3duXCIgdGhlIGltcG9ydGVkIHVzYWdlIHBsYW4uXG4gICAqIEBwYXJhbSBpZCAgICAgdGhlIGlkIG9mIHRoZSBpbXBvcnRlZCB1c2FnZSBwbGFuIGluIHRoZSBjb25zdHJ1Y3QgdHJlZS5cbiAgICogQHBhcmFtIHVzYWdlUGxhbklkIHRoZSBpZCBvZiBhbiBleGlzdGluZyB1c2FnZSBwbGFuLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVXNhZ2VQbGFuSWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHVzYWdlUGxhbklkOiBzdHJpbmcsXG4gICk6IElVc2FnZVBsYW4ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFVzYWdlUGxhbkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVzYWdlUGxhbklkID0gdXNhZ2VQbGFuSWQ7XG4gICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNhZ2VQbGFuSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfYXBpU3RhZ2VzID0gbmV3IEFycmF5PFVzYWdlUGxhblBlckFwaVN0YWdlPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlOiBhcGlHYXRld2F5VXNhZ2VQbGFuLkFwaUdhdGV3YXlVc2FnZVBsYW47XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFVzYWdlUGxhblByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGNvbnN0IG5hbWUgPSBwcm9wcy5uYW1lID8/IHRoaXMuc3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBhcGlHYXRld2F5VXNhZ2VQbGFuLkFwaUdhdGV3YXlVc2FnZVBsYW4oXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAge1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIHF1b3RhU2V0dGluZ3M6IHRoaXMucmVuZGVyUXVvdGEocHJvcHMucXVvdGEpLFxuICAgICAgICB0aHJvdHRsZVNldHRpbmdzOiB0aGlzLnJlbmRlclRocm90dGxlKHByb3BzLnRocm90dGxlKSxcbiAgICAgICAgYXBpU3RhZ2VzOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5yZW5kZXJBcGlTdGFnZXMoKT8ubWFwKChzdGFnZSkgPT5cbiAgICAgICAgICAgICAgYXBpR2F0ZXdheVVzYWdlUGxhbi5hcGlHYXRld2F5VXNhZ2VQbGFuQXBpU3RhZ2VzVG9UZXJyYWZvcm0oXG4gICAgICAgICAgICAgICAgc3RhZ2UsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGlmIChwcm9wcy5hcGlTdGFnZXMpIHtcbiAgICAgIHRoaXMuX2FwaVN0YWdlcy5wdXNoKC4uLnByb3BzLmFwaVN0YWdlcyk7XG4gICAgfVxuXG4gICAgdGhpcy51c2FnZVBsYW5JZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG5cbiAgICBpZiAocHJvcHMuYXBpS2V5KSB7XG4gICAgICB0aGlzLmFkZEFwaUtleShwcm9wcy5hcGlLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGFwaVN0YWdlLlxuICAgKi9cbiAgcHVibGljIGFkZEFwaVN0YWdlKGFwaVN0YWdlOiBVc2FnZVBsYW5QZXJBcGlTdGFnZSk6IHZvaWQge1xuICAgIHRoaXMuX2FwaVN0YWdlcy5wdXNoKGFwaVN0YWdlKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQXBpU3RhZ2VzKCk6XG4gICAgfCBhcGlHYXRld2F5VXNhZ2VQbGFuLkFwaUdhdGV3YXlVc2FnZVBsYW5BcGlTdGFnZXNbXVxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fYXBpU3RhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FwaVN0YWdlcy5tYXAoKGFwaVN0YWdlKSA9PiB0aGlzLmNyZWF0ZVN0YWdlKGFwaVN0YWdlKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBUaHJvdHRsZSBQZXIgTWV0aG9kIHRvIGZsYXQgYXJyYXkgb2YgQXBpR2F0ZXdheVVzYWdlUGxhbkFwaVN0YWdlc1Rocm90dGxlXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckFwaVN0YWdlVGhyb3R0bGVzKFxuICAgIHRocm90dGxlcz86IFRocm90dGxpbmdQZXJNZXRob2RbXSxcbiAgKTogYXBpR2F0ZXdheVVzYWdlUGxhbi5BcGlHYXRld2F5VXNhZ2VQbGFuQXBpU3RhZ2VzVGhyb3R0bGVbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aHJvdHRsZXMgfHwgdGhyb3R0bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gdW5saWtlIENGTiB3aGVyZSBBcGlTdGFnZVRocm90dGxlcy50aHJvdHRsZSBpcyBhIG1hcCAocGF0aCAtPiB0aHJvdHRsZSksIGluIFRGIGl0IGlzIGFuIGFycmF5XG4gICAgcmV0dXJuIHRocm90dGxlcy5tYXAoKHRwbSkgPT4ge1xuICAgICAgY29uc3QgcmVuZGVyZWRUaHJvdHRsZSA9IHRoaXMucmVuZGVyVGhyb3R0bGUodHBtLnRocm90dGxlKTtcbiAgICAgIGlmICghcmVuZGVyZWRUaHJvdHRsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRocm90dGxlIHNldHRpbmdzIGFyZSB1bmRlZmluZWQgZm9yIG1ldGhvZCAke3RwbS5tZXRob2QuaHR0cE1ldGhvZH0gb24gcGF0aCAke3RwbS5tZXRob2QucmVzb3VyY2UucGF0aH1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogYCR7dHBtLm1ldGhvZC5yZXNvdXJjZS5wYXRofS8ke3RwbS5tZXRob2QuaHR0cE1ldGhvZH1gLFxuICAgICAgICBidXJzdExpbWl0OiByZW5kZXJlZFRocm90dGxlLmJ1cnN0TGltaXQsXG4gICAgICAgIHJhdGVMaW1pdDogcmVuZGVyZWRUaHJvdHRsZS5yYXRlTGltaXQsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGFnZShcbiAgICBhcGlTdGFnZTogVXNhZ2VQbGFuUGVyQXBpU3RhZ2UsXG4gICk6IGFwaUdhdGV3YXlVc2FnZVBsYW4uQXBpR2F0ZXdheVVzYWdlUGxhbkFwaVN0YWdlcyB7XG4gICAgY29uc3Qgc3RhZ2VOYW1lID0gYXBpU3RhZ2Uuc3RhZ2U/LnN0YWdlTmFtZTtcbiAgICBjb25zdCByZXN0QXBpSWQgPVxuICAgICAgYXBpU3RhZ2UuYXBpPy5yZXN0QXBpSWQgPz8gYXBpU3RhZ2Uuc3RhZ2U/LnJlc3RBcGkucmVzdEFwaUlkO1xuXG4gICAgaWYgKCFyZXN0QXBpSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFaXRoZXIgYXBpIG9yIHN0YWdlICh3aXRoIGEgcmVzdEFwaSkgbXVzdCBiZSBwcm92aWRlZCBmb3IgYW4gYXBpU3RhZ2VcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghc3RhZ2VOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiU3RhZ2UgbXVzdCBiZSBwcm92aWRlZCBmb3IgYW4gYXBpU3RhZ2UgaWYgYXBpIGlzIG5vdCBzcGVjaWZpZWQsIG9yIGlmIHN0YWdlIGlzIHNwZWNpZmllZCBpdCBtdXN0IGhhdmUgYSBzdGFnZU5hbWVcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaUlkOiByZXN0QXBpSWQsXG4gICAgICBzdGFnZTogc3RhZ2VOYW1lLFxuICAgICAgdGhyb3R0bGU6IHRoaXMucmVuZGVyQXBpU3RhZ2VUaHJvdHRsZXMoYXBpU3RhZ2UudGhyb3R0bGUpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclF1b3RhKFxuICAgIHF1b3RhPzogUXVvdGFTZXR0aW5ncyxcbiAgKTogYXBpR2F0ZXdheVVzYWdlUGxhbi5BcGlHYXRld2F5VXNhZ2VQbGFuUXVvdGFTZXR0aW5ncyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHF1b3RhID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh2YWxpZGF0ZUludGVnZXIocXVvdGEubGltaXQsIFwiVGhyb3R0bGUgcXVvdGEgbGltaXRcIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxpbWl0OiBxdW90YS5saW1pdCxcbiAgICAgICAgb2Zmc2V0OiBxdW90YS5vZmZzZXQsXG4gICAgICAgIHBlcmlvZDogcXVvdGEucGVyaW9kISxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclRocm90dGxlKFxuICAgIHByb3BzPzogVGhyb3R0bGVTZXR0aW5ncyxcbiAgKTogYXBpR2F0ZXdheVVzYWdlUGxhbi5BcGlHYXRld2F5VXNhZ2VQbGFuVGhyb3R0bGVTZXR0aW5ncyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByb3BzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgYnVyc3RMaW1pdCA9IHByb3BzLmJ1cnN0TGltaXQ7XG4gICAgdmFsaWRhdGVJbnRlZ2VyKGJ1cnN0TGltaXQsIFwiVGhyb3R0bGUgYnVyc3QgbGltaXRcIik7XG4gICAgY29uc3QgcmF0ZUxpbWl0ID0gcHJvcHMucmF0ZUxpbWl0O1xuICAgIHZhbGlkYXRlRG91YmxlKHJhdGVMaW1pdCwgXCJUaHJvdHRsZSByYXRlIGxpbWl0XCIpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1cnN0TGltaXQ6IHByb3BzLmJ1cnN0TGltaXQsXG4gICAgICByYXRlTGltaXQ6IHByb3BzLnJhdGVMaW1pdCxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -59,7 +59,7 @@ class UserData {
59
59
  }
60
60
  exports.UserData = UserData;
61
61
  _a = JSII_RTTI_SYMBOL_1;
62
- UserData[_a] = { fqn: "terraconstructs.aws.compute.UserData", version: "0.1.10" };
62
+ UserData[_a] = { fqn: "terraconstructs.aws.compute.UserData", version: "0.2.0" };
63
63
  /**
64
64
  * Linux Instance User Data
65
65
  */
@@ -308,7 +308,7 @@ class MultipartBody {
308
308
  }
309
309
  exports.MultipartBody = MultipartBody;
310
310
  _b = JSII_RTTI_SYMBOL_1;
311
- MultipartBody[_b] = { fqn: "terraconstructs.aws.compute.MultipartBody", version: "0.1.10" };
311
+ MultipartBody[_b] = { fqn: "terraconstructs.aws.compute.MultipartBody", version: "0.2.0" };
312
312
  /**
313
313
  * Content type for shell scripts
314
314
  */
@@ -481,7 +481,7 @@ class MultipartUserData extends UserData {
481
481
  }
482
482
  exports.MultipartUserData = MultipartUserData;
483
483
  _c = JSII_RTTI_SYMBOL_1;
484
- MultipartUserData[_c] = { fqn: "terraconstructs.aws.compute.MultipartUserData", version: "0.1.10" };
484
+ MultipartUserData[_c] = { fqn: "terraconstructs.aws.compute.MultipartUserData", version: "0.2.0" };
485
485
  MultipartUserData.USE_PART_ERROR = "MultipartUserData only supports this operation if it has a default UserData. Call addUserDataPart with makeDefault=true.";
486
486
  MultipartUserData.BOUNDRY_PATTERN = "[^a-zA-Z0-9()+,-./:=?]";
487
487
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3VzZXItZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZGQUE2RjtBQUU3RixrRUFBZ0U7QUFDaEUsaUNBSWU7QUFNZixtREFBNkQ7QUF3SDdELDBDQUEwQztBQUMxQyx1RkFBdUY7QUFFdkY7Ozs7Ozs7R0FPRztBQUNILE1BQXNCLFFBQVE7SUFDNUI7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQWdDLEVBQUU7UUFDdkQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQWtDLEVBQUU7UUFDM0QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQWU7UUFDbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUN0QyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTSxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFBdUI7UUFDdEQsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNYLEtBQUssNEJBQW1CLENBQUMsS0FBSztnQkFDNUIsT0FBTyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0IsS0FBSyw0QkFBbUIsQ0FBQyxPQUFPO2dCQUM5QixPQUFPLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixLQUFLLDRCQUFtQixDQUFDLE9BQU87Z0JBQzlCLE1BQU0sSUFBSSxLQUFLLENBQ2IsNkRBQTZELENBQzlELENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQVVELFlBQVksa0JBQWtDLEVBQUU7UUFD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SSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQzs7QUFoSkgsOENBaUpDOzs7QUFoSnlCLGdDQUFjLEdBQ3BDLDBIQUEwSCxBQUR0RixDQUN1RjtBQUNyRyxpQ0FBZSxHQUFHLHdCQUF3QixBQUEzQixDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lYzIvbGliL3VzZXItZGF0YS50c1xuXG5pbXBvcnQgeyBkYXRhQ2xvdWRpbml0Q29uZmlnIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1jbG91ZGluaXRcIjtcbmltcG9ydCB7XG4gIC8vIFRlcnJhZm9ybVJlc291cmNlXG4gIElSZXNvbHZhYmxlLFxuICBMYXp5LFxufSBmcm9tIFwiY2RrdGZcIjtcbi8vIGltcG9ydCB7IEF3c0NvbnN0cnVjdEJhc2UgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuLy8gaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbi8vIGltcG9ydCB7IEZuIH0gZnJvbSBcIi4uLy4uL3RlcnJhLWZ1bmNcIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiLi4vc3RvcmFnZVwiO1xuaW1wb3J0IHsgT3BlcmF0aW5nU3lzdGVtVHlwZSB9IGZyb20gXCIuL21hY2hpbmUtaW1hZ2UvY29tbW9uXCI7XG5cbi8qKlxuICogQ29tbW9uIFVzZXJEYXRhIE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGF0YUNvbW1vbiB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHRvIGJhc2U2NCBlbmNvZGUgdGhlIGByZW5kZXJlZGAgb3V0cHV0LiBDYW5ub3QgYmUgZGlzYWJsZWQgaWYgZ3ppcCBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIE5PVEU6IEluc3RhbmNlIGFuZCBMYXVuY2hUZW1wbGF0ZSBleHBlY3QgYmFzZTY0IGVuY29kZWQgdXNlciBkYXRhXG4gICAqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9jbG91ZGluaXQvMi4zLjYvZG9jcy9kYXRhLXNvdXJjZXMvY29uZmlnI2Jhc2U2NF9lbmNvZGUgRGF0YUNsb3VkaW5pdENvbmZpZyNiYXNlNjRfZW5jb2RlfVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBiYXNlNjRFbmNvZGU/OiBib29sZWFuIHwgSVJlc29sdmFibGU7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHRvIGd6aXAgdGhlIGByZW5kZXJlZGAgb3V0cHV0LlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvY2xvdWRpbml0LzIuMy42L2RvY3MvZGF0YS1zb3VyY2VzL2NvbmZpZyNnemlwIERhdGFDbG91ZGluaXRDb25maWcjZ3ppcH1cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ3ppcD86IGJvb2xlYW4gfCBJUmVzb2x2YWJsZTtcbiAgLyoqXG4gICAqIGBDb250ZW50LVR5cGVgIGhlYWRlciBvZiB0aGlzIHBhcnQuXG4gICAqXG4gICAqIFNvbWUgZXhhbXBsZXMgb2YgY29udGVudCB0eXBlczpcbiAgICogKiBgdGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PVwidXRmLThcImAgKHNoZWxsIHNjcmlwdClcbiAgICogKiBgdGV4dC9jbG91ZC1ib290aG9vazsgY2hhcnNldD1cInV0Zi04XCJgIChzaGVsbCBzY3JpcHQgZXhlY3V0ZWQgZHVyaW5nIGJvb3QgcGhhc2UpXG4gICAqXG4gICAqIEZvciBMaW51eCBzaGVsbCBzY3JpcHRzIHVzZSBgdGV4dC94LXNoZWxsc2NyaXB0YC5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2Nsb3VkaW5pdC8yLjMuNi9kb2NzL2RhdGEtc291cmNlcy9jb25maWcjY29udGVudF90eXBlIERhdGFDbG91ZGluaXRDb25maWcjY29udGVudF90eXBlfVxuICAgKlxuICAgKiBAZGVmYXVsdHMgdG8gYHRleHQvcGxhaW5gXG4gICAqL1xuICByZWFkb25seSBjb250ZW50VHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgZmlsZW5hbWUgdG8gcmVwb3J0IGluIHRoZSBoZWFkZXIgZm9yIHRoZSBwYXJ0LlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvY2xvdWRpbml0LzIuMy42L2RvY3MvZGF0YS1zb3VyY2VzL2NvbmZpZyNmaWxlbmFtZSBEYXRhQ2xvdWRpbml0Q29uZmlnI2ZpbGVuYW1lfVxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyB3aGVuIGNvbnN0cnVjdGluZyBVc2VyRGF0YSBmb3IgTGludXhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaW51eFVzZXJEYXRhT3B0aW9ucyBleHRlbmRzIFVzZXJEYXRhQ29tbW9uIHtcbiAgLyoqXG4gICAqIFNoZWJhbmcgZm9yIHRoZSBVc2VyRGF0YSBzY3JpcHRcbiAgICpcbiAgICogQGRlZmF1bHQgXCIjIS9iaW4vYmFzaFwiXG4gICAqL1xuICByZWFkb25seSBzaGViYW5nPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgd2hlbiBjb25zdHJ1Y3RpbmcgVXNlckRhdGEgZm9yIFdpbmRvd3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaW5kb3dzVXNlckRhdGFPcHRpb25zIGV4dGVuZHMgVXNlckRhdGFDb21tb24ge1xuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gc2V0IHRoaXMgdXNlcmRhdGEgdG8gcGVyc2lzdCB0aHJvdWdoIGFuIGluc3RhbmNlIHJlYm9vdDsgYWxsb3dpbmdcbiAgICogaXQgdG8gcnVuIG9uIGV2ZXJ5IGluc3RhbmNlIHN0YXJ0LlxuICAgKiBCeSBkZWZhdWx0LCBVc2VyRGF0YSBpcyBydW4gb25seSBvbmNlIGR1cmluZyB0aGUgZmlyc3QgaW5zdGFuY2UgbGF1bmNoLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlOlxuICAgKiBodHRwczovL2F3cy5hbWF6b24uY29tL3ByZW1pdW1zdXBwb3J0L2tub3dsZWRnZS1jZW50ZXIvZXhlY3V0ZS11c2VyLWRhdGEtZWMyL1xuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9XaW5kb3dzR3VpZGUvZWMyLXdpbmRvd3MtdXNlci1kYXRhLmh0bWwjdXNlci1kYXRhLXNjcmlwdHNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHBlcnNpc3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgd2hlbiBkb3dubG9hZGluZyBmaWxlcyBmcm9tIFMzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUzNEb3dubG9hZE9wdGlvbnMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgUzMgYnVja2V0IHRvIGRvd25sb2FkIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldDtcblxuICAvKipcbiAgICogVGhlIGtleSBvZiB0aGUgZmlsZSB0byBkb3dubG9hZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0S2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBsb2NhbCBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBMaW51eCAgIC0gL3RtcC9idWNrZXRLZXlcbiAgICogICAgICAgICAgV2luZG93cyAtICVURU1QJS9idWNrZXRLZXlcbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsRmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlZ2lvbiBvZiB0aGUgUzMgQnVja2V0IChuZWVkZWQgZm9yIGFjY2VzcyB2aWEgVlBDIEdhdGV3YXkpXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHdoZW4gZXhlY3V0aW5nIGEgZmlsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlRmlsZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIGZpbGUuXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIGZpbGUuXG4gICAqL1xuICByZWFkb25seSBhcmd1bWVudHM/OiBzdHJpbmc7XG59XG5cbi8vIFRPRE86IFN1cHBvcnQgQ29udGVudCBUcmFuc2ZlciBFbmNvZGluZ1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjU3MTA1OTkvY29udGVudC10cmFuc2Zlci1lbmNvZGluZy03Yml0LW9yLTgtYml0XG5cbi8qKlxuICogSW5zdGFuY2UgVXNlciBEYXRhXG4gKlxuICogcmVzb3VyY2U6IGRhdGFfY2xvdWRpbml0X2NvbmZpZ1xuICpcbiAqIFRoaXMgaXMgbGltaXRlZCB0byA3Yml0IGVuY29kaW5nXG4gKiByZWYgb3BlbiBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItY2xvdWRpbml0L3B1bGwvMTcwXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBVc2VyRGF0YSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSB1c2VyZGF0YSBvYmplY3QgZm9yIExpbnV4IGhvc3RzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZvckxpbnV4KG9wdGlvbnM6IExpbnV4VXNlckRhdGFPcHRpb25zID0ge30pOiBVc2VyRGF0YSB7XG4gICAgcmV0dXJuIG5ldyBMaW51eFVzZXJEYXRhKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHVzZXJkYXRhIG9iamVjdCBmb3IgV2luZG93cyBob3N0c1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3JXaW5kb3dzKG9wdGlvbnM6IFdpbmRvd3NVc2VyRGF0YU9wdGlvbnMgPSB7fSk6IFVzZXJEYXRhIHtcbiAgICByZXR1cm4gbmV3IFdpbmRvd3NVc2VyRGF0YShvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB1c2VyZGF0YSBvYmplY3Qgd2l0aCBjdXN0b20gY29udGVudFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjdXN0b20oY29udGVudDogc3RyaW5nKTogVXNlckRhdGEge1xuICAgIGNvbnN0IHVzZXJEYXRhID0gbmV3IEN1c3RvbVVzZXJEYXRhKCk7XG4gICAgdXNlckRhdGEuYWRkQ29tbWFuZHMoY29udGVudCk7XG4gICAgcmV0dXJuIHVzZXJEYXRhO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JPcGVyYXRpbmdTeXN0ZW0ob3M6IE9wZXJhdGluZ1N5c3RlbVR5cGUpOiBVc2VyRGF0YSB7XG4gICAgc3dpdGNoIChvcykge1xuICAgICAgY2FzZSBPcGVyYXRpbmdTeXN0ZW1UeXBlLkxJTlVYOlxuICAgICAgICByZXR1cm4gVXNlckRhdGEuZm9yTGludXgoKTtcbiAgICAgIGNhc2UgT3BlcmF0aW5nU3lzdGVtVHlwZS5XSU5ET1dTOlxuICAgICAgICByZXR1cm4gVXNlckRhdGEuZm9yV2luZG93cygpO1xuICAgICAgY2FzZSBPcGVyYXRpbmdTeXN0ZW1UeXBlLlVOS05PV046XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBkZXRlcm1pbmUgVXNlckRhdGEgZm9yIHVua25vd24gb3BlcmF0aW5nIHN5c3RlbSB0eXBlXCIsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRoZSBVc2VyRGF0YSBDb250ZW50ICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjb250ZW50VHlwZT86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGZpbGVuYW1lPzogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBiYXNlNjRFbmNvZGU6IGJvb2xlYW4gfCBJUmVzb2x2YWJsZTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGd6aXA6IGJvb2xlYW4gfCBJUmVzb2x2YWJsZTtcblxuICBjb25zdHJ1Y3Rvcih1c2VyZGF0YU9wdGlvbnM6IFVzZXJEYXRhQ29tbW9uID0ge30pIHtcbiAgICBpZiAoXG4gICAgICB1c2VyZGF0YU9wdGlvbnMuYmFzZTY0RW5jb2RlID09PSBmYWxzZSAmJlxuICAgICAgdXNlcmRhdGFPcHRpb25zLmd6aXAgPT09IHRydWVcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBkaXNhYmxlIGJhc2U2NCBlbmNvZGluZyBpZiBnemlwIGlzIGVuYWJsZWRcIik7XG4gICAgfVxuICAgIHRoaXMuYmFzZTY0RW5jb2RlID0gdXNlcmRhdGFPcHRpb25zLmJhc2U2NEVuY29kZSA/PyB0cnVlO1xuICAgIHRoaXMuZ3ppcCA9IHVzZXJkYXRhT3B0aW9ucy5nemlwID8/IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG9uZSBvciBtb3JlIGNvbW1hbmRzIHRvIHRoZSB1c2VyIGRhdGFcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGRDb21tYW5kcyguLi5jb21tYW5kczogc3RyaW5nW10pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGQgb25lIG9yIG1vcmUgY29tbWFuZHMgdG8gdGhlIHVzZXIgZGF0YSB0aGF0IHdpbGwgcnVuIHdoZW4gdGhlIHNjcmlwdCBleGl0cy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGRPbkV4aXRDb21tYW5kcyguLi5jb21tYW5kczogc3RyaW5nW10pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIFVzZXJEYXRhIGZvciB1c2UgaW4gYSBjb25zdHJ1Y3RcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZW5kZXIoc2NvcGU6IElDb25zdHJ1Y3QpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZHMgY29tbWFuZHMgdG8gZG93bmxvYWQgYSBmaWxlIGZyb20gUzNcbiAgICpcbiAgICogQHJldHVybnM6IFRoZSBsb2NhbCBwYXRoIHRoYXQgdGhlIGZpbGUgd2lsbCBiZSBkb3dubG9hZGVkIHRvXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYWRkUzNEb3dubG9hZENvbW1hbmQocGFyYW1zOiBTM0Rvd25sb2FkT3B0aW9ucyk6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkcyBjb21tYW5kcyB0byBleGVjdXRlIGEgZmlsZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IGFkZEV4ZWN1dGVGaWxlQ29tbWFuZChwYXJhbXM6IEV4ZWN1dGVGaWxlT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLy8gLyoqXG4gIC8vICAqIEFkZHMgYSBjb21tYW5kIHdoaWNoIHdpbGwgc2VuZCBhIGNmbi1zaWduYWwgd2hlbiB0aGUgdXNlciBkYXRhIHNjcmlwdCBlbmRzXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgYWJzdHJhY3QgYWRkU2lnbmFsT25FeGl0Q29tbWFuZChyZXNvdXJjZTogQXdzQ29uc3RydWN0QmFzZSk6IHZvaWQ7XG59XG5cbi8qKlxuICogTGludXggSW5zdGFuY2UgVXNlciBEYXRhXG4gKi9cbmNsYXNzIExpbnV4VXNlckRhdGEgZXh0ZW5kcyBVc2VyRGF0YSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgb25FeGl0TGluZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hlYmFuZzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGVudFR5cGU/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBmaWxlbmFtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTGludXhVc2VyRGF0YU9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zaGViYW5nID0gcHJvcHMuc2hlYmFuZyA/PyBcIiMhL2Jpbi9iYXNoXCI7XG4gICAgdGhpcy5jb250ZW50VHlwZSA9IHByb3BzLmNvbnRlbnRUeXBlO1xuICAgIHRoaXMuZmlsZW5hbWUgPSBwcm9wcy5maWxlbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRDb21tYW5kcyguLi5jb21tYW5kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmxpbmVzLnB1c2goLi4uY29tbWFuZHMpO1xuICB9XG5cbiAgcHVibGljIGFkZE9uRXhpdENvbW1hbmRzKC4uLmNvbW1hbmRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMub25FeGl0TGluZXMucHVzaCguLi5jb21tYW5kcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW3RoaXMuc2hlYmFuZywgLi4udGhpcy5yZW5kZXJPbkV4aXRMaW5lcygpLCAuLi50aGlzLmxpbmVzXS5qb2luKFxuICAgICAgXCJcXG5cIixcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcihzY29wZTogSUNvbnN0cnVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBkYXRhQ2xvdWRpbml0Q29uZmlnLkRhdGFDbG91ZGluaXRDb25maWcoc2NvcGUsIFwiVXNlckRhdGFcIiwge1xuICAgICAgYmFzZTY0RW5jb2RlOiB0aGlzLmJhc2U2NEVuY29kZSxcbiAgICAgIGd6aXA6IHRoaXMuZ3ppcCxcbiAgICAgIC8vIFBhc3Mgb3VyIHNjcmlwdCBhcyBhIHNpbmdsZSBwYXJ0IHdpdGggcHJvcGVyIGNvbnRlbnQgdHlwZS5cbiAgICAgIHBhcnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbnRlbnQ6IExhenkuc3RyaW5nVmFsdWUoe1xuICAgICAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5jb250ZW50LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxuICAgICAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KS5yZW5kZXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRTM0Rvd25sb2FkQ29tbWFuZChwYXJhbXM6IFMzRG93bmxvYWRPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBzM1BhdGggPSBgczM6Ly8ke3BhcmFtcy5idWNrZXQuYnVja2V0TmFtZX0vJHtwYXJhbXMuYnVja2V0S2V5fWA7XG4gICAgY29uc3QgbG9jYWxQYXRoID1cbiAgICAgIHBhcmFtcy5sb2NhbEZpbGUgJiYgcGFyYW1zLmxvY2FsRmlsZS5sZW5ndGggIT09IDBcbiAgICAgICAgPyBwYXJhbXMubG9jYWxGaWxlXG4gICAgICAgIDogYC90bXAvJHtwYXJhbXMuYnVja2V0S2V5fWA7XG4gICAgdGhpcy5hZGRDb21tYW5kcyhcbiAgICAgIGBta2RpciAtcCAkKGRpcm5hbWUgJyR7bG9jYWxQYXRofScpYCxcbiAgICAgIGBhd3MgczMgY3AgJyR7czNQYXRofScgJyR7bG9jYWxQYXRofSdgICtcbiAgICAgICAgKHBhcmFtcy5yZWdpb24gIT09IHVuZGVmaW5lZCA/IGAgLS1yZWdpb24gJHtwYXJhbXMucmVnaW9ufWAgOiBcIlwiKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGxvY2FsUGF0aDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFeGVjdXRlRmlsZUNvbW1hbmQocGFyYW1zOiBFeGVjdXRlRmlsZU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENvbW1hbmRzKFxuICAgICAgXCJzZXQgLWVcIixcbiAgICAgIGBjaG1vZCAreCAnJHtwYXJhbXMuZmlsZVBhdGh9J2AsXG4gICAgICBgJyR7cGFyYW1zLmZpbGVQYXRofScgJHtwYXJhbXMuYXJndW1lbnRzID8/IFwiXCJ9YC50cmltKCksXG4gICAgKTtcbiAgfVxuXG4gIC8vIC8vIFRPRE86IEFkZCBHcmlkIFNpZ25hbHMgLSBjb3B5IGdyaWQtc2lnbmFsIGJpbmFyeSBpbiBwcm92aXNpb25lclxuICAvLyBwdWJsaWMgYWRkU2lnbmFsT25FeGl0Q29tbWFuZChyZXNvdXJjZTogQXdzQ29uc3RydWN0QmFzZSk6IHZvaWQge1xuICAvLyAgIGNvbnN0IHN0YWNrID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QocmVzb3VyY2UpO1xuICAvLyAgIGNvbnN0IHJlc291cmNlSUQgPSAocmVzb3VyY2Uubm9kZS5kZWZhdWx0Q2hpbGQgYXMgVGVycmFmb3JtUmVzb3VyY2UpLmZxbjtcbiAgLy8gICB0aGlzLmFkZE9uRXhpdENvbW1hbmRzKFxuICAvLyAgICAgYC9vcHQvYXdzL2Jpbi9ncmlkLXNpZ25hbCAtLXN0YWNrICR7c3RhY2suZ3JpZFVVSUR9IC0tcmVzb3VyY2UgJHtyZXNvdXJjZUlEfSAtLXJlZ2lvbiAke3N0YWNrLnJlZ2lvbn0gLWUgJGV4aXRDb2RlIHx8IGVjaG8gJ0ZhaWxlZCB0byBzZW5kIENsb3VkZm9ybWF0aW9uIFNpZ25hbCdgLFxuICAvLyAgICk7XG4gIC8vIH1cblxuICBwcml2YXRlIHJlbmRlck9uRXhpdExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5vbkV4aXRMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcImZ1bmN0aW9uIGV4aXRUcmFwKCl7XCIsXG4gICAgICAgIFwiZXhpdENvZGU9JD9cIixcbiAgICAgICAgLi4udGhpcy5vbkV4aXRMaW5lcyxcbiAgICAgICAgXCJ9XCIsXG4gICAgICAgIFwidHJhcCBleGl0VHJhcCBFWElUXCIsXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqXG4gKiBXaW5kb3dzIEluc3RhbmNlIFVzZXIgRGF0YVxuICovXG5jbGFzcyBXaW5kb3dzVXNlckRhdGEgZXh0ZW5kcyBVc2VyRGF0YSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgb25FeGl0TGluZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyByZWFkb25seSBjb250ZW50VHlwZT86IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGZpbGVuYW1lPzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcnNpc3Q6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFdpbmRvd3NVc2VyRGF0YU9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5wZXJzaXN0ID0gcHJvcHMucGVyc2lzdCA/PyBmYWxzZTtcbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gcHJvcHMuY29udGVudFR5cGU7XG4gICAgdGhpcy5maWxlbmFtZSA9IHByb3BzLmZpbGVuYW1lO1xuICB9XG5cbiAgcHVibGljIGFkZENvbW1hbmRzKC4uLmNvbW1hbmRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubGluZXMucHVzaCguLi5jb21tYW5kcyk7XG4gIH1cblxuICBwdWJsaWMgYWRkT25FeGl0Q29tbWFuZHMoLi4uY29tbWFuZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5vbkV4aXRMaW5lcy5wdXNoKC4uLmNvbW1hbmRzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgPHBvd2Vyc2hlbGw+JHtbXG4gICAgICAuLi50aGlzLnJlbmRlck9uRXhpdExpbmVzKCksXG4gICAgICAuLi50aGlzLmxpbmVzLFxuICAgICAgLi4uKHRoaXMub25FeGl0TGluZXMubGVuZ3RoID4gMCA/IFsndGhyb3cgXCJTdWNjZXNzXCInXSA6IFtdKSxcbiAgICBdLmpvaW4oXG4gICAgICBcIlxcblwiLFxuICAgICl9PC9wb3dlcnNoZWxsPiR7KHRoaXMucGVyc2lzdCA/PyBmYWxzZSkgPyBcIjxwZXJzaXN0PnRydWU8L3BlcnNpc3Q+XCIgOiBcIlwifWA7XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKHNjb3BlOiBJQ29uc3RydWN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IGRhdGFDbG91ZGluaXRDb25maWcuRGF0YUNsb3VkaW5pdENvbmZpZyhzY29wZSwgXCJVc2VyRGF0YVwiLCB7XG4gICAgICBiYXNlNjRFbmNvZGU6IHRoaXMuYmFzZTY0RW5jb2RlLFxuICAgICAgZ3ppcDogdGhpcy5nemlwLFxuICAgICAgLy8gUGFzcyBvdXIgc2NyaXB0IGFzIGEgc2luZ2xlIHBhcnQgd2l0aCBwcm9wZXIgY29udGVudCB0eXBlLlxuICAgICAgcGFydDogW1xuICAgICAgICB7XG4gICAgICAgICAgY29udGVudDogTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLmNvbnRlbnQsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUsXG4gICAgICAgICAgZmlsZW5hbWU6IHRoaXMuZmlsZW5hbWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pLnJlbmRlcmVkO1xuICB9XG5cbiAgcHVibGljIGFkZFMzRG93bmxvYWRDb21tYW5kKHBhcmFtczogUzNEb3dubG9hZE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2FsUGF0aCA9XG4gICAgICBwYXJhbXMubG9jYWxGaWxlICYmIHBhcmFtcy5sb2NhbEZpbGUubGVuZ3RoICE9PSAwXG4gICAgICAgID8gcGFyYW1zLmxvY2FsRmlsZVxuICAgICAgICA6IGBDOi90ZW1wLyR7cGFyYW1zLmJ1Y2tldEtleX1gO1xuICAgIHRoaXMuYWRkQ29tbWFuZHMoXG4gICAgICBgbWtkaXIgKFNwbGl0LVBhdGggLVBhdGggJyR7bG9jYWxQYXRofScgKSAtZWEgMGAsXG4gICAgICBgUmVhZC1TM09iamVjdCAtQnVja2V0TmFtZSAnJHtwYXJhbXMuYnVja2V0LmJ1Y2tldE5hbWV9JyAta2V5ICcke3BhcmFtcy5idWNrZXRLZXl9JyAtZmlsZSAnJHtsb2NhbFBhdGh9JyAtRXJyb3JBY3Rpb24gU3RvcGAgK1xuICAgICAgICAocGFyYW1zLnJlZ2lvbiAhPT0gdW5kZWZpbmVkID8gYCAtUmVnaW9uICR7cGFyYW1zLnJlZ2lvbn1gIDogXCJcIiksXG4gICAgKTtcbiAgICByZXR1cm4gbG9jYWxQYXRoO1xuICB9XG5cbiAgcHVibGljIGFkZEV4ZWN1dGVGaWxlQ29tbWFuZChwYXJhbXM6IEV4ZWN1dGVGaWxlT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ29tbWFuZHMoXG4gICAgICBgJicke3BhcmFtcy5maWxlUGF0aH0nICR7cGFyYW1zLmFyZ3VtZW50cyA/PyBcIlwifWAudHJpbSgpLFxuICAgICAgYGlmICghJD8pIHsgV3JpdGUtRXJyb3IgJ0ZhaWxlZCB0byBleGVjdXRlIHRoZSBmaWxlIFwiJHtwYXJhbXMuZmlsZVBhdGh9XCInIC1FcnJvckFjdGlvbiBTdG9wIH1gLFxuICAgICk7XG4gIH1cblxuICAvLyAvLyBUT0RPOiBBZGQgR3JpZCBTaWduYWxzXG4gIC8vIHB1YmxpYyBhZGRTaWduYWxPbkV4aXRDb21tYW5kKHJlc291cmNlOiBBd3NDb25zdHJ1Y3RCYXNlKTogdm9pZCB7XG4gIC8vICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChyZXNvdXJjZSk7XG4gIC8vICAgY29uc3QgcmVzb3VyY2VJRCA9IChyZXNvdXJjZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBUZXJyYWZvcm1SZXNvdXJjZSkuZnFuO1xuXG4gIC8vICAgdGhpcy5hZGRPbkV4aXRDb21tYW5kcyhcbiAgLy8gICAgIGBncmlkLXNpZ25hbCAtLXN0YWNrICR7c3RhY2suZ3JpZFVVSUR9IC0tcmVzb3VyY2UgJHtyZXNvdXJjZUlEfSAtLXJlZ2lvbiAke3N0YWNrLnJlZ2lvbn0gLS1zdWNjZXNzICgkc3VjY2Vzcy5Ub1N0cmluZygpLlRvTG93ZXIoKSlgLFxuICAvLyAgICk7XG4gIC8vIH1cblxuICBwcml2YXRlIHJlbmRlck9uRXhpdExpbmVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5vbkV4aXRMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBcInRyYXAge1wiLFxuICAgICAgICAnJHN1Y2Nlc3M9KCRQU0l0ZW0uRXhjZXB0aW9uLk1lc3NhZ2UgLWVxIFwiU3VjY2Vzc1wiKScsXG4gICAgICAgIC4uLnRoaXMub25FeGl0TGluZXMsXG4gICAgICAgIFwiYnJlYWtcIixcbiAgICAgICAgXCJ9XCIsXG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqXG4gKiBDdXN0b20gSW5zdGFuY2UgVXNlciBEYXRhXG4gKi9cbmNsYXNzIEN1c3RvbVVzZXJEYXRhIGV4dGVuZHMgVXNlckRhdGEge1xuICBwcml2YXRlIHJlYWRvbmx5IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGVudFR5cGU/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBmaWxlbmFtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGFkZENvbW1hbmRzKC4uLmNvbW1hbmRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubGluZXMucHVzaCguLi5jb21tYW5kcyk7XG4gIH1cblxuICBwdWJsaWMgYWRkT25FeGl0Q29tbWFuZHMoKTogdm9pZCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJDdXN0b21Vc2VyRGF0YSBkb2VzIG5vdCBzdXBwb3J0IGFkZE9uRXhpdENvbW1hbmRzLCB1c2UgVXNlckRhdGEuZm9yTGludXgoKSBvciBVc2VyRGF0YS5mb3JXaW5kb3dzKCkgaW5zdGVhZC5cIixcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBjb250ZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubGluZXMuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoc2NvcGU6IElDb25zdHJ1Y3QpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgZGF0YUNsb3VkaW5pdENvbmZpZy5EYXRhQ2xvdWRpbml0Q29uZmlnKHNjb3BlLCBcIlVzZXJEYXRhXCIsIHtcbiAgICAgIGJhc2U2NEVuY29kZTogdGhpcy5iYXNlNjRFbmNvZGUsXG4gICAgICBnemlwOiB0aGlzLmd6aXAsXG4gICAgICAvLyBQYXNzIG91ciBzY3JpcHQgYXMgYSBzaW5nbGUgcGFydCB3aXRoIHByb3BlciBjb250ZW50IHR5cGUuXG4gICAgICBwYXJ0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjb250ZW50OiBMYXp5LnN0cmluZ1ZhbHVlKHtcbiAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuY29udGVudCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjb250ZW50VHlwZTogdGhpcy5jb250ZW50VHlwZSxcbiAgICAgICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSkucmVuZGVyZWQ7XG4gIH1cblxuICBwdWJsaWMgYWRkUzNEb3dubG9hZENvbW1hbmQoKTogc3RyaW5nIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkN1c3RvbVVzZXJEYXRhIGRvZXMgbm90IHN1cHBvcnQgYWRkUzNEb3dubG9hZENvbW1hbmQsIHVzZSBVc2VyRGF0YS5mb3JMaW51eCgpIG9yIFVzZXJEYXRhLmZvcldpbmRvd3MoKSBpbnN0ZWFkLlwiLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkRXhlY3V0ZUZpbGVDb21tYW5kKCk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQ3VzdG9tVXNlckRhdGEgZG9lcyBub3Qgc3VwcG9ydCBhZGRFeGVjdXRlRmlsZUNvbW1hbmQsIHVzZSBVc2VyRGF0YS5mb3JMaW51eCgpIG9yIFVzZXJEYXRhLmZvcldpbmRvd3MoKSBpbnN0ZWFkLlwiLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkU2lnbmFsT25FeGl0Q29tbWFuZCgpOiB2b2lkIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkN1c3RvbVVzZXJEYXRhIGRvZXMgbm90IHN1cHBvcnQgYWRkU2lnbmFsT25FeGl0Q29tbWFuZCwgdXNlIFVzZXJEYXRhLmZvckxpbnV4KCkgb3IgVXNlckRhdGEuZm9yV2luZG93cygpIGluc3RlYWQuXCIsXG4gICAgKTtcbiAgfVxufVxuXG4vLyAvKipcbi8vICAqIE9wdGlvbnMgd2hlbiBjcmVhdGluZyBgTXVsdGlwYXJ0Qm9keWAuXG4vLyAgKi9cbi8vIGV4cG9ydCBpbnRlcmZhY2UgTXVsdGlwYXJ0Qm9keU9wdGlvbnMge1xuLy8gICAvKipcbi8vICAgICogYENvbnRlbnQtVHlwZWAgaGVhZGVyIG9mIHRoaXMgcGFydC5cbi8vICAgICpcbi8vICAgICogU29tZSBleGFtcGxlcyBvZiBjb250ZW50IHR5cGVzOlxuLy8gICAgKiAqIGB0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9XCJ1dGYtOFwiYCAoc2hlbGwgc2NyaXB0KVxuLy8gICAgKiAqIGB0ZXh0L2Nsb3VkLWJvb3Rob29rOyBjaGFyc2V0PVwidXRmLThcImAgKHNoZWxsIHNjcmlwdCBleGVjdXRlZCBkdXJpbmcgYm9vdCBwaGFzZSlcbi8vICAgICpcbi8vICAgICogRm9yIExpbnV4IHNoZWxsIHNjcmlwdHMgdXNlIGB0ZXh0L3gtc2hlbGxzY3JpcHRgLlxuLy8gICAgKi9cbi8vICAgcmVhZG9ubHkgY29udGVudFR5cGU6IHN0cmluZztcblxuLy8gICAvLyB0ZXJyYWZvcm0gcHJvdmlkZXIgaGFzIHRoaXMgaGFyZGNvZGVkXG4vLyAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLXByb3ZpZGVyLWNsb3VkaW5pdC9ibG9iL3YyLjMuNi9pbnRlcm5hbC9wcm92aWRlci9jbG91ZGluaXRfY29uZmlnLmdvI0wxODBcblxuLy8gICAvLyAvKipcbi8vICAgLy8gICogYENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciBzcGVjaWZ5aW5nIHBhcnQgZW5jb2RpbmcuXG4vLyAgIC8vICAqXG4vLyAgIC8vICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIGJvZHkgaXMgbm90IGVuY29kZWRcbi8vICAgLy8gICovXG4vLyAgIC8vIHJlYWRvbmx5IHRyYW5zZmVyRW5jb2Rpbmc/OiBzdHJpbmc7XG5cbi8vICAgLyoqXG4vLyAgICAqIFRoZSBib2R5IG9mIG1lc3NhZ2UuXG4vLyAgICAqXG4vLyAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIGJvZHkgd2lsbCBub3QgYmUgYWRkZWQgdG8gcGFydFxuLy8gICAgKi9cbi8vICAgcmVhZG9ubHkgYm9keT86IHN0cmluZztcbi8vIH1cblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIGNsYXNzZXMgd2hpY2ggY2FuIGJlIHVzZWQgYXMgYE11bHRpcGFydFVzZXJEYXRhYC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE11bHRpcGFydEJvZHkge1xuICAvKipcbiAgICogQ29udGVudCB0eXBlIGZvciBzaGVsbCBzY3JpcHRzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNIRUxMX1NDUklQVCA9ICd0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9XCJ1dGYtOFwiJztcblxuICAvKipcbiAgICogQ29udGVudCB0eXBlIGZvciBib290IGhvb2tzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENMT1VEX0JPT1RIT09LID1cbiAgICAndGV4dC9jbG91ZC1ib290aG9vazsgY2hhcnNldD1cInV0Zi04XCInO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBuZXcgYE11bHRpcGFydEJvZHlgIHdyYXBwaW5nIGV4aXN0aW5nIGBVc2VyRGF0YWAuIE1vZGlmaWNhdGlvbiB0byBgVXNlckRhdGFgIGFyZSByZWZsZWN0ZWRcbiAgICogaW4gc3Vic2VxdWVudCByZW5kZXJzIG9mIHRoZSBwYXJ0LlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb250ZW50IHR5cGVzIHNlZSBgTXVsdGlwYXJ0Qm9keU9wdGlvbnMuY29udGVudFR5cGVgLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlckRhdGEgdXNlciBkYXRhIHRvIHdyYXAgaW50byBib2R5IHBhcnRcbiAgICogQHBhcmFtIGNvbnRlbnRUeXBlIG9wdGlvbmFsIGNvbnRlbnQgdHlwZSwgaWYgZGVmYXVsdCBvbmUgc2hvdWxkIG5vdCBiZSB1c2VkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Vc2VyRGF0YShcbiAgICB1c2VyRGF0YTogVXNlckRhdGEsXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmcsXG4gICk6IE11bHRpcGFydEJvZHkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwYXJ0Qm9keVVzZXJEYXRhV3JhcHBlcih1c2VyRGF0YSwgY29udGVudFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICogV2hlbiB0cmFuc2ZlciBlbmNvZGluZyBpcyBzcGVjaWZpZWQgKHR5cGljYWxseSBhcyBCYXNlNjQpLCBpdCdzIGNhbGxlciByZXNwb25zaWJpbGl0eSB0byBjb252ZXJ0IGJvZHkgdG9cbiAgKiBCYXNlNjQgZWl0aGVyIGJ5IHdyYXBwaW5nIHdpdGggYEZuLmJhc2U2NGAgb3IgYnkgY29udmVydGluZyBpdCBieSBvdGhlciBjb252ZXJ0ZXJzLlxuICAqXG4gICogTm90ZTogaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItY2xvdWRpbml0L3B1bGwvMTcwXG4gICogL1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSByYXcgYE11bHRpcGFydEJvZHlgIHVzaW5nIHNwZWNpZmllZCBib2R5LCBjb250ZW50IHR5cGUsIGZpbGVuYW1lIGFuZCBtZXJnZSB0eXBlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21SYXdCb2R5KFxuICAgIG9wdHM6IGRhdGFDbG91ZGluaXRDb25maWcuRGF0YUNsb3VkaW5pdENvbmZpZ1BhcnQsXG4gICk6IE11bHRpcGFydEJvZHkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwYXJ0Qm9keVJhdyhvcHRzKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBib2R5IHBhcnRcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZW5kZXJCb2R5UGFydCgpOiBkYXRhQ2xvdWRpbml0Q29uZmlnLkRhdGFDbG91ZGluaXRDb25maWdQYXJ0O1xufVxuXG4vKipcbiAqIFRoZSByYXcgcGFydCBvZiBtdWx0aS1wYXJ0IHVzZXIgZGF0YSwgd2hpY2ggY2FuIGJlIGFkZGVkIHRvIGBNdWx0aXBhcnRVc2VyRGF0YWAuXG4gKi9cbmNsYXNzIE11bHRpcGFydEJvZHlSYXcgZXh0ZW5kcyBNdWx0aXBhcnRCb2R5IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IGRhdGFDbG91ZGluaXRDb25maWcuRGF0YUNsb3VkaW5pdENvbmZpZ1BhcnQsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmF3IHJldHVybiBwYXJ0XG4gICAqL1xuICBwdWJsaWMgcmVuZGVyQm9keVBhcnQoKTogZGF0YUNsb3VkaW5pdENvbmZpZy5EYXRhQ2xvdWRpbml0Q29uZmlnUGFydCB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcGVyIGZvciBgVXNlckRhdGFgLlxuICovXG5jbGFzcyBNdWx0aXBhcnRCb2R5VXNlckRhdGFXcmFwcGVyIGV4dGVuZHMgTXVsdGlwYXJ0Qm9keSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGVudFR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyRGF0YTogVXNlckRhdGEsXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmcsXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGUgfHwgTXVsdGlwYXJ0Qm9keS5TSEVMTF9TQ1JJUFQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIGJvZHkgcGFydHNcbiAgICovXG4gIHB1YmxpYyByZW5kZXJCb2R5UGFydCgpOiBkYXRhQ2xvdWRpbml0Q29uZmlnLkRhdGFDbG91ZGluaXRDb25maWdQYXJ0IHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogdGhpcy51c2VyRGF0YS5jb250ZW50LFxuICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUgPz8gdGhpcy51c2VyRGF0YS5jb250ZW50VHlwZSxcbiAgICAgIGZpbGVuYW1lOiB0aGlzLnVzZXJEYXRhLmZpbGVuYW1lLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBgTXVsdGlwYXJ0VXNlckRhdGFgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlwYXJ0VXNlckRhdGFPcHRpb25zIGV4dGVuZHMgVXNlckRhdGFDb21tb24ge1xuICAvKipcbiAgICogVGhlIHN0cmluZyB1c2VkIHRvIHNlcGFyYXRlIHBhcnRzIGluIG11bHRpcGFydCB1c2VyIGRhdGEgYXJjaGl2ZSAoaXQncyBsaWtlIE1JTUUgYm91bmRhcnkpLlxuICAgKlxuICAgKiBUaGlzIHN0cmluZyBzaG91bGQgY29udGFpbiBbYS16QS1aMC05KCkrLC0uLzo9P10gY2hhcmFjdGVycyBvbmx5LCBhbmQgc2hvdWxkIG5vdCBiZSBwcmVzZW50IGluIGFueSBwYXJ0LCBvciBpbiB0ZXh0IGNvbnRlbnQgb2YgYXJjaGl2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYCtBV1MrQ0RLK1VzZXIrRGF0YStTZXBhcmF0b3I9PWBcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRzU2VwYXJhdG9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1pbWUgbXVsdGlwYXJ0IHVzZXIgZGF0YS5cbiAqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgTUlNRSBtdWx0aXBhcnQgdXNlciBkYXRhLCBhcyBkZXNjcmliZWQgaW4uXG4gKiBbU3BlY2lmeWluZyBNdWx0aXBsZSBVc2VyIERhdGEgQmxvY2tzIFVzaW5nIGEgTUlNRSBNdWx0aSBQYXJ0IEFyY2hpdmVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2Jvb3RzdHJhcF9jb250YWluZXJfaW5zdGFuY2UuaHRtbCNtdWx0aS1wYXJ0X3VzZXJfZGF0YSlcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBNdWx0aXBhcnRVc2VyRGF0YSBleHRlbmRzIFVzZXJEYXRhIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVVNFX1BBUlRfRVJST1IgPVxuICAgIFwiTXVsdGlwYXJ0VXNlckRhdGEgb25seSBzdXBwb3J0cyB0aGlzIG9wZXJhdGlvbiBpZiBpdCBoYXMgYSBkZWZhdWx0IFVzZXJEYXRhLiBDYWxsIGFkZFVzZXJEYXRhUGFydCB3aXRoIG1ha2VEZWZhdWx0PXRydWUuXCI7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEJPVU5EUllfUEFUVEVSTiA9IFwiW15hLXpBLVowLTkoKSssLS4vOj0/XVwiO1xuXG4gIHByaXZhdGUgcGFydHM6IE11bHRpcGFydEJvZHlbXSA9IFtdO1xuXG4gIHByaXZhdGUgb3B0czogTXVsdGlwYXJ0VXNlckRhdGFPcHRpb25zO1xuXG4gIHByaXZhdGUgZGVmYXVsdFVzZXJEYXRhPzogVXNlckRhdGE7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRlbnRUeXBlPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBmaWxlbmFtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRzPzogTXVsdGlwYXJ0VXNlckRhdGFPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5jb250ZW50VHlwZSA9IG9wdHM/LmNvbnRlbnRUeXBlO1xuICAgIHRoaXMuZmlsZW5hbWUgPSBvcHRzPy5maWxlbmFtZTtcblxuICAgIGxldCBwYXJ0c1NlcGFyYXRvcjogc3RyaW5nO1xuXG4gICAgLy8gVmFsaWRhdGUgc2VwYXJhdG9yXG4gICAgaWYgKG9wdHM/LnBhcnRzU2VwYXJhdG9yICE9IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbmV3IFJlZ0V4cChNdWx0aXBhcnRVc2VyRGF0YS5CT1VORFJZX1BBVFRFUk4pLnRlc3Qob3B0cyEucGFydHNTZXBhcmF0b3IpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIGNoYXJhY3RlcnMgaW4gc2VwYXJhdG9yLiBTZXBhcmF0b3IgaGFzIHRvIG1hdGNoIHBhdHRlcm4gJHtNdWx0aXBhcnRVc2VyRGF0YS5CT1VORFJZX1BBVFRFUk59YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzU2VwYXJhdG9yID0gb3B0cyEucGFydHNTZXBhcmF0b3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRzU2VwYXJhdG9yID0gXCIrQVdTK0NESytVc2VyK0RhdGErU2VwYXJhdG9yPT1cIjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdHMgPSB7XG4gICAgICBwYXJ0c1NlcGFyYXRvcjogcGFydHNTZXBhcmF0b3IsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcGFydCB0byB0aGUgbGlzdCBvZiBwYXJ0cy5cbiAgICovXG4gIHB1YmxpYyBhZGRQYXJ0KHBhcnQ6IE11bHRpcGFydEJvZHkpIHtcbiAgICB0aGlzLnBhcnRzLnB1c2gocGFydCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG11bHRpcGFydCBwYXJ0IGJhc2VkIG9uIGEgVXNlckRhdGEgb2JqZWN0LlxuICAgKlxuICAgKiBJZiBgbWFrZURlZmF1bHRgIGlzIHRydWUsIHRoZW4gdGhlIFVzZXJEYXRhIGFkZGVkIGJ5IHRoaXMgbWV0aG9kXG4gICAqIHdpbGwgYWxzbyBiZSB0aGUgdGFyZ2V0IG9mIGNhbGxzIHRvIHRoZSBgYWRkKkNvbW1hbmRgIG1ldGhvZHMgb25cbiAgICogdGhpcyBNdWx0aXBhcnRVc2VyRGF0YSBvYmplY3QuXG4gICAqXG4gICAqIElmIGBtYWtlRGVmYXVsdGAgaXMgZmFsc2UsIHRoZW4gdGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBkZWNsYXJlIGNvbnN0IG11bHRpUGFydDogY29tcHV0ZS5NdWx0aXBhcnRVc2VyRGF0YTtcbiAgICogZGVjbGFyZSBjb25zdCB1c2VyRGF0YTogY29tcHV0ZS5Vc2VyRGF0YTtcbiAgICogZGVjbGFyZSBjb25zdCBjb250ZW50VHlwZTogc3RyaW5nO1xuICAgKlxuICAgKiBtdWx0aVBhcnQuYWRkUGFydChjb21wdXRlLk11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKHVzZXJEYXRhLCBjb250ZW50VHlwZSkpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQW4gdW5kZWZpbmVkIGBtYWtlRGVmYXVsdGAgZGVmYXVsdHMgdG8gZWl0aGVyOlxuICAgKiAtIGB0cnVlYCBpZiBubyBkZWZhdWx0IFVzZXJEYXRhIGhhcyBiZWVuIHNldCB5ZXQ7IG9yXG4gICAqIC0gYGZhbHNlYCBpZiB0aGVyZSBpcyBubyBkZWZhdWx0IFVzZXJEYXRhIHNldC5cbiAgICovXG4gIHB1YmxpYyBhZGRVc2VyRGF0YVBhcnQoXG4gICAgdXNlckRhdGE6IFVzZXJEYXRhLFxuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nLFxuICAgIG1ha2VEZWZhdWx0PzogYm9vbGVhbixcbiAgKSB7XG4gICAgdGhpcy5hZGRQYXJ0KE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKHVzZXJEYXRhLCBjb250ZW50VHlwZSkpO1xuICAgIG1ha2VEZWZhdWx0ID1cbiAgICAgIG1ha2VEZWZhdWx0ID8/ICh0aGlzLmRlZmF1bHRVc2VyRGF0YSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICBpZiAobWFrZURlZmF1bHQpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFVzZXJEYXRhID0gdXNlckRhdGE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBkZWZhdWx0IFVzZXJEYXRhLlxuICAgKi9cbiAgcHVibGljIGdldCBjb250ZW50KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFVzZXJEYXRhKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0VXNlckRhdGEuY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKE11bHRpcGFydFVzZXJEYXRhLlVTRV9QQVJUX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKHNjb3BlOiBJQ29uc3RydWN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IGRhdGFDbG91ZGluaXRDb25maWcuRGF0YUNsb3VkaW5pdENvbmZpZyhzY29wZSwgXCJVc2VyRGF0YVwiLCB7XG4gICAgICBib3VuZGFyeTogdGhpcy5vcHRzLnBhcnRzU2VwYXJhdG9yLFxuICAgICAgYmFzZTY0RW5jb2RlOiB0aGlzLmJhc2U2NEVuY29kZSxcbiAgICAgIGd6aXA6IHRoaXMuZ3ppcCxcbiAgICAgIHBhcnQ6IExhenkuYW55VmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLnBhcnRzLm1hcCgocCkgPT4gcC5yZW5kZXJCb2R5UGFydCgpKSxcbiAgICAgIH0pLFxuICAgIH0pLnJlbmRlcmVkO1xuICB9XG5cbiAgcHVibGljIGFkZFMzRG93bmxvYWRDb21tYW5kKHBhcmFtczogUzNEb3dubG9hZE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmRlZmF1bHRVc2VyRGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFVzZXJEYXRhLmFkZFMzRG93bmxvYWRDb21tYW5kKHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihNdWx0aXBhcnRVc2VyRGF0YS5VU0VfUEFSVF9FUlJPUik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZEV4ZWN1dGVGaWxlQ29tbWFuZChwYXJhbXM6IEV4ZWN1dGVGaWxlT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlZmF1bHRVc2VyRGF0YSkge1xuICAgICAgdGhpcy5kZWZhdWx0VXNlckRhdGEuYWRkRXhlY3V0ZUZpbGVDb21tYW5kKHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihNdWx0aXBhcnRVc2VyRGF0YS5VU0VfUEFSVF9FUlJPUik7XG4gICAgfVxuICB9XG5cbiAgLy8gLy8gVE9ETzogQWRkIEdyaWQgU2lnbmFsc1xuICAvLyBwdWJsaWMgYWRkU2lnbmFsT25FeGl0Q29tbWFuZChyZXNvdXJjZTogQXdzQ29uc3RydWN0QmFzZSk6IHZvaWQge1xuICAvLyAgIGlmICh0aGlzLmRlZmF1bHRVc2VyRGF0YSkge1xuICAvLyAgICAgdGhpcy5kZWZhdWx0VXNlckRhdGEuYWRkU2lnbmFsT25FeGl0Q29tbWFuZChyZXNvdXJjZSk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRocm93IG5ldyBFcnJvcihNdWx0aXBhcnRVc2VyRGF0YS5VU0VfUEFSVF9FUlJPUik7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHVibGljIGFkZENvbW1hbmRzKC4uLmNvbW1hbmRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlZmF1bHRVc2VyRGF0YSkge1xuICAgICAgdGhpcy5kZWZhdWx0VXNlckRhdGEuYWRkQ29tbWFuZHMoLi4uY29tbWFuZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoTXVsdGlwYXJ0VXNlckRhdGEuVVNFX1BBUlRfRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRPbkV4aXRDb21tYW5kcyguLi5jb21tYW5kczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0VXNlckRhdGEpIHtcbiAgICAgIHRoaXMuZGVmYXVsdFVzZXJEYXRhLmFkZE9uRXhpdENvbW1hbmRzKC4uLmNvbW1hbmRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKE11bHRpcGFydFVzZXJEYXRhLlVTRV9QQVJUX0VSUk9SKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -63,7 +63,7 @@ class BlockDeviceVolume {
63
63
  }
64
64
  exports.BlockDeviceVolume = BlockDeviceVolume;
65
65
  _a = JSII_RTTI_SYMBOL_1;
66
- BlockDeviceVolume[_a] = { fqn: "terraconstructs.aws.compute.BlockDeviceVolume", version: "0.1.10" };
66
+ BlockDeviceVolume[_a] = { fqn: "terraconstructs.aws.compute.BlockDeviceVolume", version: "0.2.0" };
67
67
  /**
68
68
  * Supported EBS volume types for blockDevices
69
69
  */
@@ -422,5 +422,5 @@ class Volume extends VolumeBase {
422
422
  }
423
423
  exports.Volume = Volume;
424
424
  _b = JSII_RTTI_SYMBOL_1;
425
- Volume[_b] = { fqn: "terraconstructs.aws.compute.Volume", version: "0.1.10" };
425
+ Volume[_b] = { fqn: "terraconstructs.aws.compute.Volume", version: "0.2.0" };
426
426
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9sdW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3ZvbHVtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBGQUEwRjtBQUUxRixzREFBZ0Q7QUFDaEQsaUNBQThCO0FBRTlCLGdDQUFpRTtBQUVqRSw2REFBaUQ7QUFDakQscUNBQXdEO0FBQ3hELG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFDeEMsOENBQThDO0FBQzlDLDBDQUFtQztBQUNuQyx3Q0FBd0M7QUFDeEMsOENBQTBEO0FBeUkxRDs7R0FFRztBQUNILE1BQWEsaUJBQWlCO0lBQzVCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FDZixVQUFrQixFQUNsQixVQUE0QixFQUFFO1FBRTlCLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxlQUFlLENBQzNCLFVBQWtCLEVBQ2xCLFVBQW9DLEVBQUU7UUFFdEMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFtQjtRQUN6QyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUNiLHNEQUFzRCxXQUFXLEdBQUcsQ0FDckUsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQ2tCLFNBQTBCLEVBQzFCLFdBQW9CO1FBRHBCLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFT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RUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNoRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLGVBQWUsQ0FBQztZQUNyQyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFLENBQ25FLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUNiLDBDQUEwQyxHQUFHLHFCQUFxQixHQUFHLEVBQUUsQ0FDeEUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs7QUFqUUgsd0JBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvdm9sdW1lLnRzXG5cbmltcG9ydCB7IGVic1ZvbHVtZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IEFjY291bnRSb290UHJpbmNpcGFsLCBHcmFudCwgSUdyYW50YWJsZSB9IGZyb20gXCIuLi9pYW1cIjtcbmltcG9ydCB7IElJbnN0YW5jZSB9IGZyb20gXCIuL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBtZDVoYXNoIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMtaW50ZXJuYWxcIjtcbmltcG9ydCB7IFNpemUsIFNpemVSb3VuZGluZ0JlaGF2aW9yIH0gZnJvbSBcIi4uLy4uL3NpemVcIjtcbmltcG9ydCB7XG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG4vLyBUT0RPOiBVc2UgVGFnTWFuYWdlciBhbmQgdGFnLWFzcGVjdCBpbnN0ZWFkXG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL2F3cy10YWdzXCI7XG4vLyBpbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL3RhZy1hc3BlY3RcIjtcbmltcG9ydCB7IElLZXksIFZpYVNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiLi4vZW5jcnlwdGlvblwiO1xuXG4vKipcbiAqIEJsb2NrIGRldmljZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJsb2NrRGV2aWNlIHtcbiAgLyoqXG4gICAqIFRoZSBkZXZpY2UgbmFtZSBleHBvc2VkIHRvIHRoZSBFQzIgaW5zdGFuY2VcbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGEgdmFsdWUgbGlrZSBgL2Rldi9zZGhgLCBgeHZkaGAuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2RldmljZV9uYW1pbmcuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBibG9jayBkZXZpY2Ugdm9sdW1lLCB0byBiZSBlaXRoZXIgYW4gQW1hem9uIEVCUyB2b2x1bWUgb3IgYW4gZXBoZW1lcmFsIGluc3RhbmNlIHN0b3JlIHZvbHVtZVxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgYSB2YWx1ZSBsaWtlIGBCbG9ja0RldmljZVZvbHVtZS5lYnMoMTUpYCwgYEJsb2NrRGV2aWNlVm9sdW1lLmVwaGVtZXJhbCgwKWAuXG4gICAqL1xuICByZWFkb25seSB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lO1xuXG4gIC8qKlxuICAgKiBJZiBmYWxzZSwgdGhlIGRldmljZSBtYXBwaW5nIHdpbGwgYmUgc3VwcHJlc3NlZC5cbiAgICogSWYgc2V0IHRvIGZhbHNlIGZvciB0aGUgcm9vdCBkZXZpY2UsIHRoZSBpbnN0YW5jZSBtaWdodCBmYWlsIHRoZSBBbWF6b24gRUMyIGhlYWx0aCBjaGVjay5cbiAgICogQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcgbGF1bmNoZXMgYSByZXBsYWNlbWVudCBpbnN0YW5jZSBpZiB0aGUgaW5zdGFuY2UgZmFpbHMgdGhlIGhlYWx0aCBjaGVjay5cbiAgICpcbiAgICogTk9URTogVGVycmFmb3JtIFByb3ZpZGVyIEFXUyBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgZm9yIGF3c19pbnN0YW5jZSBub24tZXBoZW1lcmFsIEJsb2NrIERldmljZXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZSAtIGRldmljZSBtYXBwaW5nIGlzIGxlZnQgdW50b3VjaGVkXG4gICAqL1xuICByZWFkb25seSBtYXBwaW5nRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQmFzZSBibG9jayBkZXZpY2Ugb3B0aW9ucyBmb3IgYW4gRUJTIHZvbHVtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVic0RldmljZU9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGRlbGV0ZSB0aGUgdm9sdW1lIHdoZW4gdGhlIGluc3RhbmNlIGlzIHRlcm1pbmF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBmb3IgQW1hem9uIEVDMiBBdXRvIFNjYWxpbmcsIGZhbHNlIG90aGVyd2lzZSAoZS5nLiBFQlMpXG4gICAqL1xuICByZWFkb25seSBkZWxldGVPblRlcm1pbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBJL08gb3BlcmF0aW9ucyBwZXIgc2Vjb25kIChJT1BTKSB0byBwcm92aXNpb24gZm9yIHRoZSB2b2x1bWUuXG4gICAqXG4gICAqIE11c3Qgb25seSBiZSBzZXQgZm9yIGB2b2x1bWVUeXBlYDogYEVic0RldmljZVZvbHVtZVR5cGUuSU8xYFxuICAgKlxuICAgKiBUaGUgbWF4aW11bSByYXRpbyBvZiBJT1BTIHRvIHZvbHVtZSBzaXplIChpbiBHaUIpIGlzIDUwOjEsIHNvIGZvciA1LDAwMCBwcm92aXNpb25lZCBJT1BTLFxuICAgKiB5b3UgbmVlZCBhdCBsZWFzdCAxMDAgR2lCIHN0b3JhZ2Ugb24gdGhlIHZvbHVtZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvRUJTVm9sdW1lVHlwZXMuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUsIHJlcXVpcmVkIGZvciBgRWJzRGV2aWNlVm9sdW1lVHlwZS5JTzFgXG4gICAqL1xuICByZWFkb25seSBpb3BzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgRUJTIHZvbHVtZSB0eXBlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0VCU1ZvbHVtZVR5cGVzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgYEVic0RldmljZVZvbHVtZVR5cGUuR0VORVJBTF9QVVJQT1NFX1NTRGAgb3IgYEVic0RldmljZVZvbHVtZVR5cGUuR0VORVJBTF9QVVJQT1NFX1NTRF9HUDNgIGlmXG4gICAqIGBAYXdzLWNkay9hd3MtZWMyOmVic0RlZmF1bHRHcDNWb2x1bWVgIGlzIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVUeXBlPzogRWJzRGV2aWNlVm9sdW1lVHlwZTtcblxuICAvKipcbiAgICogVGhlIHRocm91Z2hwdXQgdG8gcHJvdmlzaW9uIGZvciBhIGBncDNgIHZvbHVtZS5cbiAgICpcbiAgICogVmFsaWQgUmFuZ2U6IE1pbmltdW0gdmFsdWUgb2YgMTI1LiBNYXhpbXVtIHZhbHVlIG9mIDEwMDAuXG4gICAqXG4gICAqIGBncDNgIHZvbHVtZXMgZGVsaXZlciBhIGNvbnNpc3RlbnQgYmFzZWxpbmUgdGhyb3VnaHB1dCBwZXJmb3JtYW5jZSBvZiAxMjUgTWlCL3MuXG4gICAqIFlvdSBjYW4gcHJvdmlzaW9uIGFkZGl0aW9uYWwgdGhyb3VnaHB1dCBmb3IgYW4gYWRkaXRpb25hbCBjb3N0IGF0IGEgcmF0aW8gb2YgMC4yNSBNaUIvcyBwZXIgcHJvdmlzaW9uZWQgSU9QUy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWJzL2xhdGVzdC91c2VyZ3VpZGUvZ2VuZXJhbC1wdXJwb3NlLmh0bWwjZ3AzLXBlcmZvcm1hbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gMTI1IE1pQi9zLlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3VnaHB1dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBCbG9jayBkZXZpY2Ugb3B0aW9ucyBmb3IgYW4gRUJTIHZvbHVtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVic0RldmljZU9wdGlvbnMgZXh0ZW5kcyBFYnNEZXZpY2VPcHRpb25zQmFzZSB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgRUJTIHZvbHVtZSBpcyBlbmNyeXB0ZWQuXG4gICAqIEVuY3J5cHRlZCBFQlMgdm9sdW1lcyBjYW4gb25seSBiZSBhdHRhY2hlZCB0byBpbnN0YW5jZXMgdGhhdCBzdXBwb3J0IEFtYXpvbiBFQlMgZW5jcnlwdGlvblxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9FQlNFbmNyeXB0aW9uLmh0bWwjRUJTRW5jcnlwdGlvbl9zdXBwb3J0ZWRfaW5zdGFuY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBBV1MgS2V5IE1hbmFnZW1lbnQgU2VydmljZSAoQVdTIEtNUykgQ01LIHVzZWQgZm9yIGVuY3J5cHRpb24uXG4gICAqXG4gICAqIFlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSBLTVMgQ01LIGhhcyB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucyB0byBiZSB1c2VkIGJ5IHRoZSBzZXJ2aWNlIGxhdW5jaGluZyB0aGUgZWMyIGluc3RhbmNlcy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvRUJTRW5jcnlwdGlvbi5odG1sI2Vicy1lbmNyeXB0aW9uLXJlcXVpcmVtZW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIGVuY3J5cHRlZCBpcyB0cnVlLCB0aGUgZGVmYXVsdCBhd3MvZWJzIEtNUyBrZXkgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5PzogSUtleTtcbn1cblxuLyoqXG4gKiBCbG9jayBkZXZpY2Ugb3B0aW9ucyBmb3IgYW4gRUJTIHZvbHVtZSBjcmVhdGVkIGZyb20gYSBzbmFwc2hvdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVic0RldmljZVNuYXBzaG90T3B0aW9ucyBleHRlbmRzIEVic0RldmljZU9wdGlvbnNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSB2b2x1bWUgc2l6ZSwgaW4gR2liaWJ5dGVzIChHaUIpXG4gICAqXG4gICAqIElmIHlvdSBzcGVjaWZ5IHZvbHVtZVNpemUsIGl0IG11c3QgYmUgZXF1YWwgb3IgZ3JlYXRlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBzbmFwc2hvdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgc25hcHNob3Qgc2l6ZVxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lU2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIG9mIGFuIEVCUyBibG9jayBkZXZpY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFYnNEZXZpY2VQcm9wc1xuICBleHRlbmRzIEVic0RldmljZVNuYXBzaG90T3B0aW9ucyxcbiAgICBFYnNEZXZpY2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzbmFwc2hvdCBJRCBvZiB0aGUgdm9sdW1lIHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNuYXBzaG90IHdpbGwgYmUgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSBibG9jayBkZXZpY2UgbWFwcGluZyBmb3IgYW4gRUMyIGluc3RhbmNlIG9yIEF1dG8gU2NhbGluZyBncm91cC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJsb2NrRGV2aWNlVm9sdW1lIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRWxhc3RpYyBCbG9jayBTdG9yYWdlIGRldmljZVxuICAgKlxuICAgKiBAcGFyYW0gdm9sdW1lU2l6ZSBUaGUgdm9sdW1lIHNpemUsIGluIEdpYmlieXRlcyAoR2lCKVxuICAgKiBAcGFyYW0gb3B0aW9ucyBhZGRpdGlvbmFsIGRldmljZSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGVicyhcbiAgICB2b2x1bWVTaXplOiBudW1iZXIsXG4gICAgb3B0aW9uczogRWJzRGV2aWNlT3B0aW9ucyA9IHt9LFxuICApOiBCbG9ja0RldmljZVZvbHVtZSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHsgLi4ub3B0aW9ucywgdm9sdW1lU2l6ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEVsYXN0aWMgQmxvY2sgU3RvcmFnZSBkZXZpY2UgZnJvbSBhbiBleGlzdGluZyBzbmFwc2hvdFxuICAgKlxuICAgKiBAcGFyYW0gc25hcHNob3RJZCBUaGUgc25hcHNob3QgSUQgb2YgdGhlIHZvbHVtZSB0byB1c2VcbiAgICogQHBhcmFtIG9wdGlvbnMgYWRkaXRpb25hbCBkZXZpY2Ugb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBlYnNGcm9tU25hcHNob3QoXG4gICAgc25hcHNob3RJZDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEVic0RldmljZVNuYXBzaG90T3B0aW9ucyA9IHt9LFxuICApOiBCbG9ja0RldmljZVZvbHVtZSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHsgLi4ub3B0aW9ucywgc25hcHNob3RJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdmlydHVhbCwgZXBoZW1lcmFsIGRldmljZS5cbiAgICogVGhlIG5hbWUgd2lsbCBiZSBpbiB0aGUgZm9ybSBlcGhlbWVyYWx7dm9sdW1lSW5kZXh9LlxuICAgKlxuICAgKiBAcGFyYW0gdm9sdW1lSW5kZXggdGhlIHZvbHVtZSBpbmRleC4gTXVzdCBiZSBlcXVhbCBvciBncmVhdGVyIHRoYW4gMFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBlcGhlbWVyYWwodm9sdW1lSW5kZXg6IG51bWJlcikge1xuICAgIGlmICh2b2x1bWVJbmRleCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZvbHVtZUluZGV4IG11c3QgYmUgYSBudW1iZXIgc3RhcnRpbmcgZnJvbSAwLCBnb3QgXCIke3ZvbHVtZUluZGV4fVwiYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyB0aGlzKHVuZGVmaW5lZCwgYGVwaGVtZXJhbCR7dm9sdW1lSW5kZXh9YCk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGVic0RldmljZSBFQlMgZGV2aWNlIGluZm9cbiAgICogQHBhcmFtIHZpcnR1YWxOYW1lIFZpcnR1YWwgZGV2aWNlIG5hbWVcbiAgICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWJzRGV2aWNlPzogRWJzRGV2aWNlUHJvcHMsXG4gICAgcHVibGljIHJlYWRvbmx5IHZpcnR1YWxOYW1lPzogc3RyaW5nLFxuICApIHt9XG5cbiAgcHVibGljIGlzRXBoZW1lcmFsKCk6IHRoaXMgaXMgQmxvY2tEZXZpY2VWb2x1bWUgJiB7IHZpcnR1YWxOYW1lOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMudmlydHVhbE5hbWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFN1cHBvcnRlZCBFQlMgdm9sdW1lIHR5cGVzIGZvciBibG9ja0RldmljZXNcbiAqL1xuZXhwb3J0IGVudW0gRWJzRGV2aWNlVm9sdW1lVHlwZSB7XG4gIC8qKlxuICAgKiBNYWduZXRpY1xuICAgKi9cbiAgU1RBTkRBUkQgPSBcInN0YW5kYXJkXCIsXG5cbiAgLyoqXG4gICAqICBQcm92aXNpb25lZCBJT1BTIFNTRCAtIElPMVxuICAgKi9cbiAgSU8xID0gXCJpbzFcIixcblxuICAvKipcbiAgICogIFByb3Zpc2lvbmVkIElPUFMgU1NEIC0gSU8yXG4gICAqL1xuICBJTzIgPSBcImlvMlwiLFxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIFB1cnBvc2UgU1NEIC0gR1AyXG4gICAqL1xuICBHUDIgPSBcImdwMlwiLFxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIFB1cnBvc2UgU1NEIC0gR1AzXG4gICAqL1xuICBHUDMgPSBcImdwM1wiLFxuXG4gIC8qKlxuICAgKiBUaHJvdWdocHV0IE9wdGltaXplZCBIRERcbiAgICovXG4gIFNUMSA9IFwic3QxXCIsXG5cbiAgLyoqXG4gICAqIENvbGQgSEREXG4gICAqL1xuICBTQzEgPSBcInNjMVwiLFxuXG4gIC8qKlxuICAgKiBHZW5lcmFsIHB1cnBvc2UgU1NEIHZvbHVtZSAoR1AyKSB0aGF0IGJhbGFuY2VzIHByaWNlIGFuZCBwZXJmb3JtYW5jZSBmb3IgYSB3aWRlIHZhcmlldHkgb2Ygd29ya2xvYWRzLlxuICAgKi9cbiAgR0VORVJBTF9QVVJQT1NFX1NTRCA9IEdQMixcblxuICAvKipcbiAgICogR2VuZXJhbCBwdXJwb3NlIFNTRCB2b2x1bWUgKEdQMykgdGhhdCBiYWxhbmNlcyBwcmljZSBhbmQgcGVyZm9ybWFuY2UgZm9yIGEgd2lkZSB2YXJpZXR5IG9mIHdvcmtsb2Fkcy5cbiAgICovXG4gIEdFTkVSQUxfUFVSUE9TRV9TU0RfR1AzID0gR1AzLFxuXG4gIC8qKlxuICAgKiBIaWdoZXN0LXBlcmZvcm1hbmNlIFNTRCB2b2x1bWUgKElPMSkgZm9yIG1pc3Npb24tY3JpdGljYWwgbG93LWxhdGVuY3kgb3IgaGlnaC10aHJvdWdocHV0IHdvcmtsb2Fkcy5cbiAgICovXG4gIFBST1ZJU0lPTkVEX0lPUFNfU1NEID0gSU8xLFxuXG4gIC8qKlxuICAgKiBIaWdoZXN0LXBlcmZvcm1hbmNlIFNTRCB2b2x1bWUgKElPMikgZm9yIG1pc3Npb24tY3JpdGljYWwgbG93LWxhdGVuY3kgb3IgaGlnaC10aHJvdWdocHV0IHdvcmtsb2Fkcy5cbiAgICovXG4gIFBST1ZJU0lPTkVEX0lPUFNfU1NEX0lPMiA9IElPMixcblxuICAvKipcbiAgICogTG93LWNvc3QgSEREIHZvbHVtZSBkZXNpZ25lZCBmb3IgZnJlcXVlbnRseSBhY2Nlc3NlZCwgdGhyb3VnaHB1dC1pbnRlbnNpdmUgd29ya2xvYWRzLlxuICAgKi9cbiAgVEhST1VHSFBVVF9PUFRJTUlaRURfSEREID0gU1QxLFxuXG4gIC8qKlxuICAgKiBMb3dlc3QgY29zdCBIREQgdm9sdW1lIGRlc2lnbmVkIGZvciBsZXNzIGZyZXF1ZW50bHkgYWNjZXNzZWQgd29ya2xvYWRzLlxuICAgKi9cbiAgQ09MRF9IREQgPSBTQzEsXG5cbiAgLyoqXG4gICAqIE1hZ25ldGljIHZvbHVtZXMgYXJlIGJhY2tlZCBieSBtYWduZXRpYyBkcml2ZXMgYW5kIGFyZSBzdWl0ZWQgZm9yIHdvcmtsb2FkcyB3aGVyZSBkYXRhIGlzIGFjY2Vzc2VkIGluZnJlcXVlbnRseSwgYW5kIHNjZW5hcmlvcyB3aGVyZSBsb3ctY29zdFxuICAgKiBzdG9yYWdlIGZvciBzbWFsbCB2b2x1bWUgc2l6ZXMgaXMgaW1wb3J0YW50LlxuICAgKi9cbiAgTUFHTkVUSUMgPSBTVEFOREFSRCxcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIEVCUyBWb2x1bWUncyBJRFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXZhaWxhYmlsaXR5IHpvbmUgdGhhdCB0aGUgRUJTIFZvbHVtZSBpcyBjb250YWluZWQgd2l0aGluIChleDogdXMtd2VzdC0yYSlcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgZW5jcnlwdGlvbiBrZXkgdGhhdCBpcyB1c2VkIHRvIGVuY3J5cHQgdGhlIFZvbHVtZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIEVCUyBWb2x1bWUgaW4gQVdTIEVDMi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVm9sdW1lIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IHZvbHVtZU91dHB1dHM6IFZvbHVtZU91dHB1dHM7XG4gIC8qKlxuICAgKiBUaGUgRUJTIFZvbHVtZSdzIElEXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgem9uZSB0aGF0IHRoZSBFQlMgVm9sdW1lIGlzIGNvbnRhaW5lZCB3aXRoaW4gKGV4OiB1cy13ZXN0LTJhKVxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY3VzdG9tZXItbWFuYWdlZCBlbmNyeXB0aW9uIGtleSB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGUgVm9sdW1lLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogSUtleTtcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXR0YWNoIHRoaXMgVm9sdW1lIHRvIGFuIGluc3RhbmNlLlxuICAgKiBDQVVUSU9OOiBHcmFudGluZyBhbiBpbnN0YW5jZSBwZXJtaXNzaW9uIHRvIGF0dGFjaCB0byBpdHNlbGYgdXNpbmcgdGhpcyBtZXRob2Qgd2lsbCBsZWFkIHRvXG4gICAqIGFuIHVucmVzb2x2YWJsZSBjaXJjdWxhciByZWZlcmVuY2UgYmV0d2VlbiB0aGUgaW5zdGFuY2Ugcm9sZSBhbmQgdGhlIGluc3RhbmNlLlxuICAgKiBVc2UgYElWb2x1bWUuZ3JhbnRBdHRhY2hWb2x1bWVUb1NlbGZgIHRvIGdyYW50IGFuIGluc3RhbmNlIHBlcm1pc3Npb24gdG8gYXR0YWNoIHRoaXNcbiAgICogdm9sdW1lIHRvIGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgIHRoZSBwcmluY2lwYWwgYmVpbmcgZ3JhbnRlZCBwZXJtaXNzaW9uLlxuICAgKiBAcGFyYW0gaW5zdGFuY2VzIHRoZSBpbnN0YW5jZXMgdG8gd2hpY2ggcGVybWlzc2lvbiBpcyBiZWluZyBncmFudGVkIHRvIGF0dGFjaCB0aGlzXG4gICAqICAgICAgICAgICAgICAgICB2b2x1bWUgdG8uIElmIG5vdCBzcGVjaWZpZWQsIHRoZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGF0dGFjaFxuICAgKiAgICAgICAgICAgICAgICAgdG8gYWxsIGluc3RhbmNlcyBpbiB0aGlzIGFjY291bnQuXG4gICAqL1xuICBncmFudEF0dGFjaFZvbHVtZShncmFudGVlOiBJR3JhbnRhYmxlLCBpbnN0YW5jZXM/OiBJSW5zdGFuY2VbXSk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhdHRhY2ggdGhlIFZvbHVtZSBieSBhIFJlc291cmNlVGFnIGNvbmRpdGlvbi4gSWYgeW91IGFyZSBsb29raW5nIHRvXG4gICAqIGdyYW50IGFuIEluc3RhbmNlLCBBdXRvU2NhbGluZ0dyb3VwLCBFQzItRmxlZXQsIFNwb3RGbGVldCwgRUNTIGhvc3QsIGV0YyB0aGUgYWJpbGl0eSB0byBhdHRhY2hcbiAgICogdGhpcyB2b2x1bWUgdG8gKippdHNlbGYqKiB0aGVuIHRoaXMgaXMgdGhlIG1ldGhvZCB5b3Ugd2FudCB0byB1c2UuXG4gICAqXG4gICAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgYWRkaW5nIGEgVGFnIHdpdGgga2V5IGBWb2x1bWVHcmFudEF0dGFjaC08c3VmZml4PmAgdG8gdGhlIGdpdmVuXG4gICAqIGNvbnN0cnVjdHMgYW5kIHRoaXMgVm9sdW1lLCBhbmQgdGhlbiBjb25kaXRpb25pbmcgdGhlIEdyYW50IHN1Y2ggdGhhdCB0aGUgZ3JhbnRlZSBpcyBvbmx5XG4gICAqIGdpdmVuIHRoZSBhYmlsaXR5IHRvIEF0dGFjaFZvbHVtZSBpZiBib3RoIHRoZSBWb2x1bWUgYW5kIHRoZSBkZXN0aW5hdGlvbiBJbnN0YW5jZSBoYXZlIHRoYXRcbiAgICogdGFnIGFwcGxpZWQgdG8gdGhlbS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgICAgdGhlIHByaW5jaXBhbCBiZWluZyBncmFudGVkIHBlcm1pc3Npb24uXG4gICAqIEBwYXJhbSBjb25zdHJ1Y3RzIFRoZSBsaXN0IG9mIGNvbnN0cnVjdHMgdGhhdCB3aWxsIGhhdmUgdGhlIGdlbmVyYXRlZCByZXNvdXJjZSB0YWcgYXBwbGllZCB0byB0aGVtLlxuICAgKiBAcGFyYW0gdGFnS2V5U3VmZml4IEEgc3VmZml4IHRvIHVzZSBvbiB0aGUgZ2VuZXJhdGVkIFRhZyBrZXkgaW4gcGxhY2Ugb2YgdGhlIGdlbmVyYXRlZCBoYXNoIHZhbHVlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGEgaGFzaCBjYWxjdWxhdGVkIGZyb20gdGhpcyB2b2x1bWUgYW5kIGxpc3Qgb2YgY29uc3RydWN0cy4gKERFUFJFQ0FURUQpXG4gICAqL1xuICBncmFudEF0dGFjaFZvbHVtZUJ5UmVzb3VyY2VUYWcoXG4gICAgZ3JhbnRlZTogSUdyYW50YWJsZSxcbiAgICBjb25zdHJ1Y3RzOiBDb25zdHJ1Y3RbXSxcbiAgICB0YWdLZXlTdWZmaXg/OiBzdHJpbmcsXG4gICk6IEdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZXRhY2ggdGhpcyBWb2x1bWUgZnJvbSBhbiBpbnN0YW5jZVxuICAgKiBDQVVUSU9OOiBHcmFudGluZyBhbiBpbnN0YW5jZSBwZXJtaXNzaW9uIHRvIGRldGFjaCBmcm9tIGl0c2VsZiB1c2luZyB0aGlzIG1ldGhvZCB3aWxsIGxlYWQgdG9cbiAgICogYW4gdW5yZXNvbHZhYmxlIGNpcmN1bGFyIHJlZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbnN0YW5jZSByb2xlIGFuZCB0aGUgaW5zdGFuY2UuXG4gICAqIFVzZSBgSVZvbHVtZS5ncmFudERldGFjaFZvbHVtZUZyb21TZWxmYCB0byBncmFudCBhbiBpbnN0YW5jZSBwZXJtaXNzaW9uIHRvIGRldGFjaCB0aGlzXG4gICAqIHZvbHVtZSBmcm9tIGl0c2VsZi5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgIHRoZSBwcmluY2lwYWwgYmVpbmcgZ3JhbnRlZCBwZXJtaXNzaW9uLlxuICAgKiBAcGFyYW0gaW5zdGFuY2VzIHRoZSBpbnN0YW5jZXMgdG8gd2hpY2ggcGVybWlzc2lvbiBpcyBiZWluZyBncmFudGVkIHRvIGRldGFjaCB0aGlzXG4gICAqICAgICAgICAgICAgICAgICB2b2x1bWUgZnJvbS4gSWYgbm90IHNwZWNpZmllZCwgdGhlbiBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gZGV0YWNoXG4gICAqICAgICAgICAgICAgICAgICBmcm9tIGFsbCBpbnN0YW5jZXMgaW4gdGhpcyBhY2NvdW50LlxuICAgKi9cbiAgZ3JhbnREZXRhY2hWb2x1bWUoZ3JhbnRlZTogSUdyYW50YWJsZSwgaW5zdGFuY2VzPzogSUluc3RhbmNlW10pOiBHcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGV0YWNoIHRoZSBWb2x1bWUgYnkgYSBSZXNvdXJjZVRhZyBjb25kaXRpb24uXG4gICAqXG4gICAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgdmlhIHRoZSBzYW1lIG1lY2hhbmlzbSBhcyBgSVZvbHVtZS5ncmFudEF0dGFjaFZvbHVtZUJ5UmVzb3VyY2VUYWdgLFxuICAgKiBhbmQgaXMgc3ViamVjdCB0byB0aGUgc2FtZSBjb25kaXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSAgICB0aGUgcHJpbmNpcGFsIGJlaW5nIGdyYW50ZWQgcGVybWlzc2lvbi5cbiAgICogQHBhcmFtIGNvbnN0cnVjdHMgVGhlIGxpc3Qgb2YgY29uc3RydWN0cyB0aGF0IHdpbGwgaGF2ZSB0aGUgZ2VuZXJhdGVkIHJlc291cmNlIHRhZyBhcHBsaWVkIHRvIHRoZW0uXG4gICAqIEBwYXJhbSB0YWdLZXlTdWZmaXggQSBzdWZmaXggdG8gdXNlIG9uIHRoZSBnZW5lcmF0ZWQgVGFnIGtleSBpbiBwbGFjZSBvZiB0aGUgZ2VuZXJhdGVkIGhhc2ggdmFsdWUuXG4gICAqICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gYSBoYXNoIGNhbGN1bGF0ZWQgZnJvbSB0aGlzIHZvbHVtZSBhbmQgbGlzdCBvZiBjb25zdHJ1Y3RzLiAoREVQUkVDQVRFRClcbiAgICovXG4gIGdyYW50RGV0YWNoVm9sdW1lQnlSZXNvdXJjZVRhZyhcbiAgICBncmFudGVlOiBJR3JhbnRhYmxlLFxuICAgIGNvbnN0cnVjdHM6IENvbnN0cnVjdFtdLFxuICAgIHRhZ0tleVN1ZmZpeD86IHN0cmluZyxcbiAgKTogR3JhbnQ7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhbiBFQlMgVm9sdW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVm9sdW1lUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHBoeXNpY2FsTmFtZSBwcm9wZXJ0eSBvZiB0aGlzIHJlc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgcGh5c2ljYWwgbmFtZSB3aWxsIGJlIGFsbG9jYXRlZCBieSBDbG91ZEZvcm1hdGlvbiBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBdmFpbGFiaWxpdHkgWm9uZSBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHZvbHVtZS5cbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIHZvbHVtZSwgaW4gR2lCcy4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12b2x1bWUuaHRtbFxuICAgKiBmb3IgZGV0YWlscyBvbiB0aGUgYWxsb3dhYmxlIHNpemUgZm9yIGVhY2ggdHlwZSBvZiB2b2x1bWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IElmIHlvdSdyZSBjcmVhdGluZyB0aGUgdm9sdW1lIGZyb20gYSBzbmFwc2hvdCBhbmQgZG9uJ3Qgc3BlY2lmeSBhIHZvbHVtZSBzaXplLCB0aGUgZGVmYXVsdCBpcyB0aGUgc25hcHNob3Qgc2l6ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU/OiBTaXplO1xuXG4gIC8qKlxuICAgKiBUaGUgc25hcHNob3QgZnJvbSB3aGljaCB0byBjcmVhdGUgdGhlIHZvbHVtZS4gWW91IG11c3Qgc3BlY2lmeSBlaXRoZXIgYSBzbmFwc2hvdCBJRCBvciBhIHZvbHVtZSBzaXplLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgRUJTIHZvbHVtZSBpcyBub3QgY3JlYXRlZCBmcm9tIGEgc25hcHNob3QuXG4gICAqL1xuICByZWFkb25seSBzbmFwc2hvdElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBBbWF6b24gRUJTIE11bHRpLUF0dGFjaCBpcyBlbmFibGVkLlxuICAgKiBTZWUgW0NvbnNpZGVyYXRpb25zIGFuZCBsaW1pdGF0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Vicy12b2x1bWVzLW11bHRpLmh0bWwjY29uc2lkZXJhdGlvbnMpXG4gICAqIGZvciB0aGUgY29uc3RyYWludHMgb2YgbXVsdGktYXR0YWNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlTXVsdGlBdHRhY2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgdm9sdW1lIHNob3VsZCBiZSBlbmNyeXB0ZWQuIFRoZSBlZmZlY3Qgb2Ygc2V0dGluZyB0aGUgZW5jcnlwdGlvbiBzdGF0ZSB0byB0cnVlIGRlcGVuZHMgb24gdGhlIHZvbHVtZSBvcmlnaW5cbiAgICogKG5ldyBvciBmcm9tIGEgc25hcHNob3QpLCBzdGFydGluZyBlbmNyeXB0aW9uIHN0YXRlLCBvd25lcnNoaXAsIGFuZCB3aGV0aGVyIGVuY3J5cHRpb24gYnkgZGVmYXVsdCBpcyBlbmFibGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbixcbiAgICogc2VlIFtFbmNyeXB0aW9uIGJ5IERlZmF1bHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9FQlNFbmNyeXB0aW9uLmh0bWwjZW5jcnlwdGlvbi1ieS1kZWZhdWx0KVxuICAgKiBpbiB0aGUgQW1hem9uIEVsYXN0aWMgQ29tcHV0ZSBDbG91ZCBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBFbmNyeXB0ZWQgQW1hem9uIEVCUyB2b2x1bWVzIG11c3QgYmUgYXR0YWNoZWQgdG8gaW5zdGFuY2VzIHRoYXQgc3VwcG9ydCBBbWF6b24gRUJTIGVuY3J5cHRpb24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbiAgICogW1N1cHBvcnRlZCBJbnN0YW5jZSBUeXBlc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0VCU0VuY3J5cHRpb24uaHRtbCNFQlNFbmNyeXB0aW9uX3N1cHBvcnRlZF9pbnN0YW5jZXMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgZW5jcnlwdGlvbiBrZXkgdGhhdCBpcyB1c2VkIHRvIGVuY3J5cHQgdGhlIFZvbHVtZS4gVGhlIGVuY3J5cHRlZCBwcm9wZXJ0eSBtdXN0XG4gICAqIGJlIHRydWUgaWYgdGhpcyBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogTm90ZTogSWYgdXNpbmcgYW4gYGF3cy1rbXMuSUtleWAgY3JlYXRlZCBmcm9tIGEgYGF3cy1rbXMuS2V5LmZyb21LZXlBcm4oKWAgaGVyZSxcbiAgICogdGhlbiB0aGUgS01TIGtleSAqKm11c3QqKiBoYXZlIHRoZSBmb2xsb3dpbmcgaW4gaXRzIEtleSBwb2xpY3k7IG90aGVyd2lzZSwgdGhlIFZvbHVtZVxuICAgKiB3aWxsIGZhaWwgdG8gY3JlYXRlLlxuICAgKlxuICAgKiAgICAge1xuICAgKiAgICAgICBcIkVmZmVjdFwiOiBcIkFsbG93XCIsXG4gICAqICAgICAgIFwiUHJpbmNpcGFsXCI6IHsgXCJBV1NcIjogXCI8YXJuIGZvciB5b3VyIGFjY291bnQtdXNlcj4gZXg6IGFybjphd3M6aWFtOjowMDAwMDAwMDAwMDpyb290XCIgfSxcbiAgICogICAgICAgXCJSZXNvdXJjZVwiOiBcIipcIixcbiAgICogICAgICAgXCJBY3Rpb25cIjogW1xuICAgKiAgICAgICAgIFwia21zOkRlc2NyaWJlS2V5XCIsXG4gICAqICAgICAgICAgXCJrbXM6R2VuZXJhdGVEYXRhS2V5V2l0aG91dFBsYWluVGV4dFwiLFxuICAgKiAgICAgICBdLFxuICAgKiAgICAgICBcIkNvbmRpdGlvblwiOiB7XG4gICAqICAgICAgICAgXCJTdHJpbmdFcXVhbHNcIjoge1xuICAgKiAgICAgICAgICAgXCJrbXM6VmlhU2VydmljZVwiOiBcImVjMi48UmVnaW9uPi5hbWF6b25hd3MuY29tXCIsIChlZzogZWMyLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tKVxuICAgKiAgICAgICAgICAgXCJrbXM6Q2FsbGVyQWNjb3VudFwiOiBcIjAwMDAwMDAwMDBcIiAoeW91ciBhY2NvdW50IElEKVxuICAgKiAgICAgICAgIH1cbiAgICogICAgICAgfVxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgZGVmYXVsdCBLTVMga2V5IGZvciB0aGUgYWNjb3VudCwgcmVnaW9uLCBhbmQgRUMyIHNlcnZpY2UgaXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBJS2V5O1xuXG4gIC8vIFRPRE86IFN1cHBvcnQgZm9yIGF1dG9FbmFibGVJb1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vaGFzaGljb3JwL3RlcnJhZm9ybS1wcm92aWRlci1hd3MvaXNzdWVzLzM0MTEwXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdm9sdW1lLmh0bWwjY2ZuLWVjMi12b2x1bWUtYXV0b2VuYWJsZWlvXG4gIC8vIC8qKlxuICAvLyAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdm9sdW1lIGlzIGF1dG8tZW5hYmxlZCBmb3IgSS9PIG9wZXJhdGlvbnMuIEJ5IGRlZmF1bHQsIEFtYXpvbiBFQlMgZGlzYWJsZXMgSS9PIHRvIHRoZSB2b2x1bWUgZnJvbSBhdHRhY2hlZCBFQzJcbiAgLy8gICogaW5zdGFuY2VzIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGF0IGEgdm9sdW1lJ3MgZGF0YSBpcyBwb3RlbnRpYWxseSBpbmNvbnNpc3RlbnQuIElmIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgdm9sdW1lIGlzIG5vdCBhIGNvbmNlcm4sIGFuZFxuICAvLyAgKiB5b3UgcHJlZmVyIHRoYXQgdGhlIHZvbHVtZSBiZSBtYWRlIGF2YWlsYWJsZSBpbW1lZGlhdGVseSBpZiBpdCdzIGltcGFpcmVkLCB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUgdm9sdW1lIHRvIGF1dG9tYXRpY2FsbHkgZW5hYmxlIEkvTy5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgZmFsc2VcbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IGF1dG9FbmFibGVJbz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSB2b2x1bWU7IHdoYXQgdHlwZSBvZiBzdG9yYWdlIHRvIHVzZSB0byBmb3JtIHRoZSBFQlMgVm9sdW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQM2BcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVR5cGU/OiBFYnNEZXZpY2VWb2x1bWVUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIEkvTyBvcGVyYXRpb25zIHBlciBzZWNvbmQgKElPUFMpIHRvIHByb3Zpc2lvbiBmb3IgdGhlIHZvbHVtZS4gVGhlIG1heGltdW0gcmF0aW8gaXMgNTAgSU9QUy9HaUIgZm9yIFBST1ZJU0lPTkVEX0lPUFNfU1NELFxuICAgKiBhbmQgNTAwIElPUFMvR2lCIGZvciBib3RoIFBST1ZJU0lPTkVEX0lPUFNfU1NEX0lPMiBhbmQgR0VORVJBTF9QVVJQT1NFX1NTRF9HUDMuXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZvbHVtZS5odG1sXG4gICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBUaGlzIHBhcmFtZXRlciBpcyB2YWxpZCBvbmx5IGZvciBQUk9WSVNJT05FRF9JT1BTX1NTRCwgUFJPVklTSU9ORURfSU9QU19TU0RfSU8yIGFuZCBHRU5FUkFMX1BVUlBPU0VfU1NEX0dQMyB2b2x1bWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lIC0tIFJlcXVpcmVkIGZvciBpbzEgYW5kIGlvMiB2b2x1bWVzLiBUaGUgZGVmYXVsdCBmb3IgZ3AzIHZvbHVtZXMgaXMgMywwMDAgSU9QUyBpZiBvbWl0dGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW9wcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRocm91Z2hwdXQgdGhhdCB0aGUgdm9sdW1lIHN1cHBvcnRzLCBpbiBNaUIvc1xuICAgKiBUYWtlcyBhIG1pbmltdW0gb2YgMTI1IGFuZCBtYXhpbXVtIG9mIDEwMDAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12b2x1bWUuaHRtbCNjZm4tZWMyLXZvbHVtZS10aHJvdWdocHV0XG4gICAqIEBkZWZhdWx0IC0gMTI1IE1pQi9zLiBPbmx5IHZhbGlkIG9uIGdwMyB2b2x1bWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGhyb3VnaHB1dD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIHJlcXVpcmVkIHRvIGltcG9ydCBhbiBleGlzdGluZyBFQlMgVm9sdW1lIGludG8gdGhlIFN0YWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZvbHVtZUF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEVCUyBWb2x1bWUncyBJRFxuICAgKi9cbiAgcmVhZG9ubHkgdm9sdW1lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF2YWlsYWJpbGl0eSB6b25lIHRoYXQgdGhlIEVCUyBWb2x1bWUgaXMgY29udGFpbmVkIHdpdGhpbiAoZXg6IHVzLXdlc3QtMmEpXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b21lci1tYW5hZ2VkIGVuY3J5cHRpb24ga2V5IHRoYXQgaXMgdXNlZCB0byBlbmNyeXB0IHRoZSBWb2x1bWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmUgLS0gVGhlIEVCUyBWb2x1bWUgaXMgbm90IHVzaW5nIGEgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5IGZvciBlbmNyeXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IElLZXk7XG59XG5cbi8qKlxuICogQ29tbW9uIGJlaGF2aW9yIG9mIFZvbHVtZXMuIFVzZXJzIHNob3VsZCBub3QgdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHksIGFuZCBpbnN0ZWFkIHVzZSBgYFZvbHVtZWBgLlxuICovXG5hYnN0cmFjdCBjbGFzcyBWb2x1bWVCYXNlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElWb2x1bWUge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdm9sdW1lSWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBJS2V5O1xuICBwdWJsaWMgZ2V0IHZvbHVtZU91dHB1dHMoKTogVm9sdW1lT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZvbHVtZUlkOiB0aGlzLnZvbHVtZUlkLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdGhpcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgZW5jcnlwdGlvbktleUlkOiB0aGlzLmVuY3J5cHRpb25LZXk/LmtleUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZvbHVtZU91dHB1dHM7XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRBdHRhY2hWb2x1bWUoXG4gICAgZ3JhbnRlZTogSUdyYW50YWJsZSxcbiAgICBpbnN0YW5jZXM/OiBJSW5zdGFuY2VbXSxcbiAgKTogR3JhbnQge1xuICAgIGNvbnN0IHJlc3VsdCA9IEdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zOiBbXCJlYzI6QXR0YWNoVm9sdW1lXCJdLFxuICAgICAgcmVzb3VyY2VBcm5zOiB0aGlzLmNvbGxlY3RHcmFudFJlc291cmNlQXJucyhpbnN0YW5jZXMpLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZW5jcnlwdGlvbktleSkge1xuICAgICAgLy8gV2hlbiBhdHRhY2hpbmcgYSB2b2x1bWUsIHRoZSBFQzIgU2VydmljZSB3aWxsIG5lZWQgdG8gZ3JhbnQgdG8gaXRzZWxmIHBlcm1pc3Npb25cbiAgICAgIC8vIHRvIGJlIGFibGUgdG8gZGVjcnlwdCB0aGUgZW5jcnlwdGlvbiBrZXkuIFdlIHJlc3RyaWN0IHRoZSBDcmVhdGVHcmFudCBmb3IgcHJpbmNpcGxlXG4gICAgICAvLyBvZiBsZWFzdCBwcml2aWxlZ2UsIGluIGFjY29yZGFuY2Ugd2l0aCBiZXN0IHByYWN0aWNlcy5cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL0VCU0VuY3J5cHRpb24uaHRtbCNlYnMtZW5jcnlwdGlvbi1wZXJtaXNzaW9uc1xuICAgICAgY29uc3Qga21zR3JhbnQ6IEdyYW50ID0gdGhpcy5lbmNyeXB0aW9uS2V5LmdyYW50KFxuICAgICAgICBncmFudGVlLFxuICAgICAgICBcImttczpDcmVhdGVHcmFudFwiLFxuICAgICAgKTtcbiAgICAgIGttc0dyYW50LnByaW5jaXBhbFN0YXRlbWVudCEuYWRkQ29uZGl0aW9ucyhcbiAgICAgICAge1xuICAgICAgICAgIHRlc3Q6IFwiQm9vbFwiLFxuICAgICAgICAgIHZhcmlhYmxlOiBcImttczpHcmFudElzRm9yQVdTUmVzb3VyY2VcIixcbiAgICAgICAgICB2YWx1ZXM6IFtcInRydWVcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXN0OiBcIlN0cmluZ0VxdWFsc1wiLFxuICAgICAgICAgIHZhcmlhYmxlOiBcImttczpWaWFTZXJ2aWNlXCIsXG4gICAgICAgICAgdmFsdWVzOiBbYGVjMi4ke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGVzdDogXCJTdHJpbmdFcXVhbHNcIixcbiAgICAgICAgICB2YXJpYWJsZTogXCJrbXM6R3JhbnRDb25zdHJhaW50VHlwZVwiLFxuICAgICAgICAgIHZhbHVlczogW1wiRW5jcnlwdGlvbkNvbnRleHRTdWJzZXRcIl0sXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRBdHRhY2hWb2x1bWVCeVJlc291cmNlVGFnKFxuICAgIGdyYW50ZWU6IElHcmFudGFibGUsXG4gICAgY29uc3RydWN0czogQ29uc3RydWN0W10sXG4gICAgdGFnS2V5U3VmZml4Pzogc3RyaW5nLFxuICApOiBHcmFudCB7XG4gICAgY29uc3QgdGFnVmFsdWUgPSB0aGlzLmNhbGN1bGF0ZVJlc291cmNlVGFnVmFsdWUoW3RoaXMsIC4uLmNvbnN0cnVjdHNdKTtcbiAgICBjb25zdCB0YWdLZXkgPSBgVm9sdW1lR3JhbnRBdHRhY2gtJHt0YWdLZXlTdWZmaXggPz8gdGFnVmFsdWUuc2xpY2UoMCwgMTApLnRvVXBwZXJDYXNlKCl9YDtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdyYW50QXR0YWNoVm9sdW1lKGdyYW50ZWUpO1xuICAgIHJlc3VsdC5wcmluY2lwYWxTdGF0ZW1lbnQhLmFkZENvbmRpdGlvbih7XG4gICAgICB0ZXN0OiBcIkZvckFueVZhbHVlOlN0cmluZ0VxdWFsc1wiLFxuICAgICAgdmFyaWFibGU6IGBlYzI6UmVzb3VyY2VUYWcvJHt0YWdLZXl9YCxcbiAgICAgIHZhbHVlczogW3RhZ1ZhbHVlXSxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBSZXNvdXJjZVRhZyBjb25kaXRpb24gcmVxdWlyZXMgdGhhdCBhbGwgcmVzb3VyY2VzIGludm9sdmVkIGluIHRoZSBvcGVyYXRpb24gaGF2ZVxuICAgIC8vIHRoZSBnaXZlbiB0YWcsIHNvIHdlIHRhZyB0aGlzIGFuZCBhbGwgY29uc3RydWN0cyBnaXZlbi5cbiAgICBUYWdzLm9mKHRoaXMpLmFkZCh0YWdLZXksIHRhZ1ZhbHVlKTtcbiAgICBjb25zdHJ1Y3RzLmZvckVhY2goKGNvbnN0cnVjdCkgPT4gVGFncy5vZihjb25zdHJ1Y3QpLmFkZCh0YWdLZXksIHRhZ1ZhbHVlKSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdyYW50RGV0YWNoVm9sdW1lKFxuICAgIGdyYW50ZWU6IElHcmFudGFibGUsXG4gICAgaW5zdGFuY2VzPzogSUluc3RhbmNlW10sXG4gICk6IEdyYW50IHtcbiAgICBjb25zdCByZXN1bHQgPSBHcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogW1wiZWMyOkRldGFjaFZvbHVtZVwiXSxcbiAgICAgIHJlc291cmNlQXJuczogdGhpcy5jb2xsZWN0R3JhbnRSZXNvdXJjZUFybnMoaW5zdGFuY2VzKSxcbiAgICB9KTtcbiAgICAvLyBOb3RlOiBObyBlbmNyeXB0aW9uIGtleSBwZXJtaXNzaW9ucyBhcmUgcmVxdWlyZWQgdG8gZGV0YWNoIGFuIGVuY3J5cHRlZCB2b2x1bWUuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBncmFudERldGFjaFZvbHVtZUJ5UmVzb3VyY2VUYWcoXG4gICAgZ3JhbnRlZTogSUdyYW50YWJsZSxcbiAgICBjb25zdHJ1Y3RzOiBDb25zdHJ1Y3RbXSxcbiAgICB0YWdLZXlTdWZmaXg/OiBzdHJpbmcsXG4gICk6IEdyYW50IHtcbiAgICBjb25zdCB0YWdWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlUmVzb3VyY2VUYWdWYWx1ZShbdGhpcywgLi4uY29uc3RydWN0c10pO1xuICAgIGNvbnN0IHRhZ0tleSA9IGBWb2x1bWVHcmFudERldGFjaC0ke3RhZ0tleVN1ZmZpeCA/PyB0YWdWYWx1ZS5zbGljZSgwLCAxMCkudG9VcHBlckNhc2UoKX1gO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ3JhbnREZXRhY2hWb2x1bWUoZ3JhbnRlZSk7XG4gICAgcmVzdWx0LnByaW5jaXBhbFN0YXRlbWVudCEuYWRkQ29uZGl0aW9uKHtcbiAgICAgIHRlc3Q6IFwiRm9yQW55VmFsdWU6U3RyaW5nRXF1YWxzXCIsXG4gICAgICB2YXJpYWJsZTogYGVjMjpSZXNvdXJjZVRhZy8ke3RhZ0tleX1gLFxuICAgICAgdmFsdWVzOiBbdGFnVmFsdWVdLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIFJlc291cmNlVGFnIGNvbmRpdGlvbiByZXF1aXJlcyB0aGF0IGFsbCByZXNvdXJjZXMgaW52b2x2ZWQgaW4gdGhlIG9wZXJhdGlvbiBoYXZlXG4gICAgLy8gdGhlIGdpdmVuIHRhZywgc28gd2UgdGFnIHRoaXMgYW5kIGFsbCBjb25zdHJ1Y3RzIGdpdmVuLlxuICAgIFRhZ3Mub2YodGhpcykuYWRkKHRhZ0tleSwgdGFnVmFsdWUpO1xuICAgIGNvbnN0cnVjdHMuZm9yRWFjaCgoY29uc3RydWN0KSA9PiBUYWdzLm9mKGNvbnN0cnVjdCkuYWRkKHRhZ0tleSwgdGFnVmFsdWUpKTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RHcmFudFJlc291cmNlQXJucyhpbnN0YW5jZXM/OiBJSW5zdGFuY2VbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGFjayA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpO1xuICAgIGNvbnN0IHJlc291cmNlQXJuczogc3RyaW5nW10gPSBbXG4gICAgICBgYXJuOiR7c3RhY2sucGFydGl0aW9ufTplYzI6JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06dm9sdW1lLyR7dGhpcy52b2x1bWVJZH1gLFxuICAgIF07XG4gICAgY29uc3QgaW5zdGFuY2VBcm5QcmVmaXggPSBgYXJuOiR7c3RhY2sucGFydGl0aW9ufTplYzI6JHtzdGFjay5yZWdpb259OiR7c3RhY2suYWNjb3VudH06aW5zdGFuY2VgO1xuICAgIGlmIChpbnN0YW5jZXMpIHtcbiAgICAgIGluc3RhbmNlcy5mb3JFYWNoKChpbnN0YW5jZSkgPT5cbiAgICAgICAgcmVzb3VyY2VBcm5zLnB1c2goYCR7aW5zdGFuY2VBcm5QcmVmaXh9LyR7aW5zdGFuY2U/Lmluc3RhbmNlSWR9YCksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvdXJjZUFybnMucHVzaChgJHtpbnN0YW5jZUFyblByZWZpeH0vKmApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VBcm5zO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVSZXNvdXJjZVRhZ1ZhbHVlKGNvbnN0cnVjdHM6IENvbnN0cnVjdFtdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbWQ1aGFzaChjb25zdHJ1Y3RzLm1hcCgoYykgPT4gQXdzU3RhY2sudW5pcXVlSWQoYykpLmpvaW4oXCJcIikpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBFQlMgVm9sdW1lIGluIEFXUyBFQzIuXG4gKi9cbmV4cG9ydCBjbGFzcyBWb2x1bWUgZXh0ZW5kcyBWb2x1bWVCYXNlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBFQlMgVm9sdW1lIGludG8gdGhlIFN0YWNrLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgdGhlIHNjb3BlIG9mIHRoZSBpbXBvcnQuXG4gICAqIEBwYXJhbSBpZCAgICB0aGUgSUQgb2YgdGhlIGltcG9ydGVkIFZvbHVtZSBpbiB0aGUgY29uc3RydWN0IHRyZWUuXG4gICAqIEBwYXJhbSBhdHRycyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgaW1wb3J0ZWQgVm9sdW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Wb2x1bWVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVm9sdW1lQXR0cmlidXRlcyxcbiAgKTogSVZvbHVtZSB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgVm9sdW1lQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdm9sdW1lSWQgPSBhdHRycy52b2x1bWVJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBhdmFpbGFiaWxpdHlab25lID0gYXR0cnMuYXZhaWxhYmlsaXR5Wm9uZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uS2V5ID0gYXR0cnMuZW5jcnlwdGlvbktleTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgdGhhdCB0aGUgcHJvdmlkZWQgdm9sdW1lSWQgbG9va3MgbGlrZSBpdCBjb3VsZCBiZSB2YWxpZC5cbiAgICBpZiAoXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKGF0dHJzLnZvbHVtZUlkKSAmJlxuICAgICAgIS9edm9sLVswLTlhLWZBLUZdKyQvLnRlc3QoYXR0cnMudm9sdW1lSWQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYHZvbHVtZUlkYCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBwYXR0ZXJuLiBFeHBlY3RlZCBgdm9sLTxoZXhhZGVjbWlhbCB2YWx1ZT5gIChleDogYHZvbC0wNWFiZTI0NmFmYCkgb3IgYSBUb2tlblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSB2b2x1bWVJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IElLZXk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBlYnNWb2x1bWUuRWJzVm9sdW1lO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWb2x1bWVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIGNvbnN0IHZvbHVtZU5hbWUgPVxuICAgICAgcHJvcHMudm9sdW1lTmFtZSB8fFxuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICBwcmVmaXg6IHRoaXMuZ3JpZFVVSUQsXG4gICAgICB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVQcm9wcyhwcm9wcyk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGVic1ZvbHVtZS5FYnNWb2x1bWUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBhdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgLy8gYXV0b0VuYWJsZUlvOiBwcm9wcy5hdXRvRW5hYmxlSW8sXG4gICAgICBlbmNyeXB0ZWQ6IHByb3BzLmVuY3J5cHRlZCxcbiAgICAgIGttc0tleUlkOiBwcm9wcy5lbmNyeXB0aW9uS2V5Py5rZXlBcm4sXG4gICAgICBpb3BzOiBwcm9wcy5pb3BzLFxuICAgICAgbXVsdGlBdHRhY2hFbmFibGVkOiBwcm9wcy5lbmFibGVNdWx0aUF0dGFjaCA/PyBmYWxzZSxcbiAgICAgIHNpemU6IHByb3BzLnNpemU/LnRvR2liaWJ5dGVzKHsgcm91bmRpbmc6IFNpemVSb3VuZGluZ0JlaGF2aW9yLkZBSUwgfSksXG4gICAgICBzbmFwc2hvdElkOiBwcm9wcy5zbmFwc2hvdElkLFxuICAgICAgdGhyb3VnaHB1dDogcHJvcHMudGhyb3VnaHB1dCxcbiAgICAgIHR5cGU6IHByb3BzLnZvbHVtZVR5cGUgPz8gRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQMyxcbiAgICB9KTtcblxuICAgIGlmIChwcm9wcy52b2x1bWVOYW1lKSBUYWdzLm9mKHRoaXMucmVzb3VyY2UpLmFkZChcIk5hbWVcIiwgdm9sdW1lTmFtZSk7XG5cbiAgICB0aGlzLnZvbHVtZUlkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmUgPSBwcm9wcy5hdmFpbGFiaWxpdHlab25lO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXk7XG5cbiAgICBpZiAodGhpcy5lbmNyeXB0aW9uS2V5KSB7XG4gICAgICAvLyBQZXI6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9FQlNFbmNyeXB0aW9uLmh0bWwjZWJzLWVuY3J5cHRpb24tcmVxdWlyZW1lbnRzXG4gICAgICBjb25zdCBwcmluY2lwYWwgPSBuZXcgVmlhU2VydmljZVByaW5jaXBhbChcbiAgICAgICAgYGVjMi4ke0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnJlZ2lvbn0uYW1hem9uYXdzLmNvbWAsXG4gICAgICAgIG5ldyBBY2NvdW50Um9vdFByaW5jaXBhbCgpLFxuICAgICAgKS53aXRoQ29uZGl0aW9ucyh7XG4gICAgICAgIHRlc3Q6IFwiU3RyaW5nRXF1YWxzXCIsXG4gICAgICAgIHZhcmlhYmxlOiBcImttczpDYWxsZXJBY2NvdW50XCIsXG4gICAgICAgIHZhbHVlczogW0F3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLmFjY291bnRdLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBncmFudCA9IHRoaXMuZW5jcnlwdGlvbktleS5ncmFudChcbiAgICAgICAgcHJpbmNpcGFsLFxuICAgICAgICAvLyBEZXNjcmliZSAmIEdlbmVyYXRlIGFyZSByZXF1aXJlZCB0byBiZSBhYmxlIHRvIGNyZWF0ZSB0aGUgQ01LLWVuY3J5cHRlZCBWb2x1bWUuXG4gICAgICAgIFwia21zOkRlc2NyaWJlS2V5XCIsXG4gICAgICAgIFwia21zOkdlbmVyYXRlRGF0YUtleVdpdGhvdXRQbGFpblRleHRcIixcbiAgICAgICk7XG4gICAgICBpZiAocHJvcHMuc25hcHNob3RJZCkge1xuICAgICAgICAvLyBSZUVuY3J5cHQgaXMgcmVxdWlyZWQgZm9yIHdoZW4gcmUtZW5jcnlwdGluZyBmcm9tIGFuIGVuY3J5cHRlZCBzbmFwc2hvdC5cbiAgICAgICAgZ3JhbnQucHJpbmNpcGFsU3RhdGVtZW50Py5hZGRBY3Rpb25zKFwia21zOlJlRW5jcnlwdCpcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlUHJvcHMocHJvcHM6IFZvbHVtZVByb3BzKSB7XG4gICAgaWYgKCEocHJvcHMuc2l6ZSB8fCBwcm9wcy5zbmFwc2hvdElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBwcm92aWRlIGF0IGxlYXN0IG9uZSBvZiBgc2l6ZWAgb3IgYHNuYXBzaG90SWRgXCIpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLnNuYXBzaG90SWQgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuc25hcHNob3RJZCkgJiZcbiAgICAgICEvXnNuYXAtWzAtOWEtZkEtRl0rJC8udGVzdChwcm9wcy5zbmFwc2hvdElkKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcImBzbmFwc2hvdElkYCBkb2VzIG1hdGNoIGV4cGVjdGVkIHBhdHRlcm4uIEV4cGVjdGVkIGBzbmFwLTxoZXhhZGVjbWlhbCB2YWx1ZT5gIChleDogYHNuYXAtMDVhYmUyNDZhZmApIG9yIFRva2VuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbmNyeXB0aW9uS2V5ICYmICFwcm9wcy5lbmNyeXB0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJgZW5jcnlwdGVkYCBtdXN0IGJlIHRydWUgd2hlbiBwcm92aWRpbmcgYW4gYGVuY3J5cHRpb25LZXlgLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy52b2x1bWVUeXBlICYmXG4gICAgICBbXG4gICAgICAgIEVic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0QsXG4gICAgICAgIEVic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RfSU8yLFxuICAgICAgXS5pbmNsdWRlcyhwcm9wcy52b2x1bWVUeXBlKSAmJlxuICAgICAgIXByb3BzLmlvcHNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJgaW9wc2AgbXVzdCBiZSBzcGVjaWZpZWQgaWYgdGhlIGB2b2x1bWVUeXBlYCBpcyBgUFJPVklTSU9ORURfSU9QU19TU0RgIG9yIGBQUk9WSVNJT05FRF9JT1BTX1NTRF9JTzJgLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuaW9wcykge1xuICAgICAgY29uc3Qgdm9sdW1lVHlwZSA9XG4gICAgICAgIHByb3BzLnZvbHVtZVR5cGUgPz8gRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEO1xuICAgICAgaWYgKFxuICAgICAgICAhW1xuICAgICAgICAgIEVic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0QsXG4gICAgICAgICAgRWJzRGV2aWNlVm9sdW1lVHlwZS5QUk9WSVNJT05FRF9JT1BTX1NTRF9JTzIsXG4gICAgICAgICAgRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQMyxcbiAgICAgICAgXS5pbmNsdWRlcyh2b2x1bWVUeXBlKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBcImBpb3BzYCBtYXkgb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlIGB2b2x1bWVUeXBlYCBpcyBgUFJPVklTSU9ORURfSU9QU19TU0RgLCBgUFJPVklTSU9ORURfSU9QU19TU0RfSU8yYCBvciBgR0VORVJBTF9QVVJQT1NFX1NTRF9HUDNgLlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgLy8gRW5mb3JjZSBtaW5pbXVtICYgbWF4aW11bSBJT1BTOlxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12b2x1bWUuaHRtbFxuICAgICAgY29uc3QgaW9wc1JhbmdlczogeyBba2V5OiBzdHJpbmddOiB7IE1pbjogbnVtYmVyOyBNYXg6IG51bWJlciB9IH0gPSB7fTtcbiAgICAgIGlvcHNSYW5nZXNbRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQM10gPSB7XG4gICAgICAgIE1pbjogMzAwMCxcbiAgICAgICAgTWF4OiAxNjAwMCxcbiAgICAgIH07XG4gICAgICBpb3BzUmFuZ2VzW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RdID0ge1xuICAgICAgICBNaW46IDEwMCxcbiAgICAgICAgTWF4OiA2NDAwMCxcbiAgICAgIH07XG4gICAgICBpb3BzUmFuZ2VzW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RfSU8yXSA9IHtcbiAgICAgICAgTWluOiAxMDAsXG4gICAgICAgIE1heDogMjU2MDAwLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHsgTWluLCBNYXggfSA9IGlvcHNSYW5nZXNbdm9sdW1lVHlwZV07XG4gICAgICBpZiAocHJvcHMuaW9wcyA8IE1pbiB8fCBwcm9wcy5pb3BzID4gTWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXFxgJHt2b2x1bWVUeXBlfVxcYCB2b2x1bWVzIGlvcHMgbXVzdCBiZSBiZXR3ZWVuICR7TWlufSBhbmQgJHtNYXh9LmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEVuZm9yY2UgbWF4aW11bSByYXRpbyBvZiBJT1BTL0dpQjpcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9lYnMtdm9sdW1lLXR5cGVzLmh0bWxcbiAgICAgIGNvbnN0IG1heGltdW1SYXRpb3M6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICAgIG1heGltdW1SYXRpb3NbRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEX0dQM10gPSA1MDA7XG4gICAgICBtYXhpbXVtUmF0aW9zW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RdID0gNTA7XG4gICAgICBtYXhpbXVtUmF0aW9zW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RfSU8yXSA9IDUwMDtcbiAgICAgIGNvbnN0IG1heGltdW1SYXRpbyA9IG1heGltdW1SYXRpb3Nbdm9sdW1lVHlwZV07XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnNpemUgJiZcbiAgICAgICAgcHJvcHMuaW9wcyA+XG4gICAgICAgICAgbWF4aW11bVJhdGlvICpcbiAgICAgICAgICAgIHByb3BzLnNpemUudG9HaWJpYnl0ZXMoeyByb3VuZGluZzogU2l6ZVJvdW5kaW5nQmVoYXZpb3IuRkFJTCB9KVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXFxgJHt2b2x1bWVUeXBlfVxcYCB2b2x1bWVzIGlvcHMgaGFzIGEgbWF4aW11bSByYXRpbyBvZiAke21heGltdW1SYXRpb30gSU9QUy9HaUIuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF4aW11bVRocm91Z2hwdXRSYXRpb3M6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICAgIG1heGltdW1UaHJvdWdocHV0UmF0aW9zW0Vic0RldmljZVZvbHVtZVR5cGUuR1AzXSA9IDAuMjU7XG4gICAgICBjb25zdCBtYXhpbXVtVGhyb3VnaHB1dFJhdGlvID0gbWF4aW11bVRocm91Z2hwdXRSYXRpb3Nbdm9sdW1lVHlwZV07XG4gICAgICBpZiAocHJvcHMudGhyb3VnaHB1dCAmJiBwcm9wcy5pb3BzKSB7XG4gICAgICAgIGNvbnN0IGlvcHNSYXRpbyA9IHByb3BzLnRocm91Z2hwdXQgLyBwcm9wcy5pb3BzO1xuICAgICAgICBpZiAoaW9wc1JhdGlvID4gbWF4aW11bVRocm91Z2hwdXRSYXRpbykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaHJvdWdocHV0IChNaUJwcykgdG8gaW9wcyByYXRpbyBvZiAke2lvcHNSYXRpb30gaXMgdG9vIGhpZ2g7IG1heGltdW0gaXMgJHttYXhpbXVtVGhyb3VnaHB1dFJhdGlvfSBNaUJwcyBwZXIgaW9wc2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5lbmFibGVNdWx0aUF0dGFjaCkge1xuICAgICAgY29uc3Qgdm9sdW1lVHlwZSA9XG4gICAgICAgIHByb3BzLnZvbHVtZVR5cGUgPz8gRWJzRGV2aWNlVm9sdW1lVHlwZS5HRU5FUkFMX1BVUlBPU0VfU1NEO1xuICAgICAgaWYgKFxuICAgICAgICAhW1xuICAgICAgICAgIEVic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0QsXG4gICAgICAgICAgRWJzRGV2aWNlVm9sdW1lVHlwZS5QUk9WSVNJT05FRF9JT1BTX1NTRF9JTzIsXG4gICAgICAgIF0uaW5jbHVkZXModm9sdW1lVHlwZSlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJtdWx0aS1hdHRhY2ggaXMgc3VwcG9ydGVkIGV4Y2x1c2l2ZWx5IG9uIGBQUk9WSVNJT05FRF9JT1BTX1NTRGAgYW5kIGBQUk9WSVNJT05FRF9JT1BTX1NTRF9JTzJgIHZvbHVtZXMuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnNpemUpIHtcbiAgICAgIGNvbnN0IHNpemUgPSBwcm9wcy5zaXplLnRvR2liaWJ5dGVzKHtcbiAgICAgICAgcm91bmRpbmc6IFNpemVSb3VuZGluZ0JlaGF2aW9yLkZBSUwsXG4gICAgICB9KTtcbiAgICAgIC8vIEVuZm9yY2UgbWluaW11bSAmIG1heGltdW0gdm9sdW1lIHNpemU6XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZvbHVtZS5odG1sXG4gICAgICBjb25zdCBzaXplUmFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IHsgTWluOiBudW1iZXI7IE1heDogbnVtYmVyIH0gfSA9IHt9O1xuICAgICAgc2l6ZVJhbmdlc1tFYnNEZXZpY2VWb2x1bWVUeXBlLkdFTkVSQUxfUFVSUE9TRV9TU0RdID0ge1xuICAgICAgICBNaW46IDEsXG4gICAgICAgIE1heDogMTYzODQsXG4gICAgICB9O1xuICAgICAgc2l6ZVJhbmdlc1tFYnNEZXZpY2VWb2x1bWVUeXBlLkdFTkVSQUxfUFVSUE9TRV9TU0RfR1AzXSA9IHtcbiAgICAgICAgTWluOiAxLFxuICAgICAgICBNYXg6IDE2Mzg0LFxuICAgICAgfTtcbiAgICAgIHNpemVSYW5nZXNbRWJzRGV2aWNlVm9sdW1lVHlwZS5QUk9WSVNJT05FRF9JT1BTX1NTRF0gPSB7XG4gICAgICAgIE1pbjogNCxcbiAgICAgICAgTWF4OiAxNjM4NCxcbiAgICAgIH07XG4gICAgICBzaXplUmFuZ2VzW0Vic0RldmljZVZvbHVtZVR5cGUuUFJPVklTSU9ORURfSU9QU19TU0RfSU8yXSA9IHtcbiAgICAgICAgTWluOiA0LFxuICAgICAgICBNYXg6IDE2Mzg0LFxuICAgICAgfTtcbiAgICAgIHNpemVSYW5nZXNbRWJzRGV2aWNlVm9sdW1lVHlwZS5USFJPVUdIUFVUX09QVElNSVpFRF9IRERdID0ge1xuICAgICAgICBNaW46IDEyNSxcbiAgICAgICAgTWF4OiAxNjM4NCxcbiAgICAgIH07XG4gICAgICBzaXplUmFuZ2VzW0Vic0RldmljZVZvbHVtZVR5cGUuQ09MRF9IRERdID0geyBNaW46IDEyNSwgTWF4OiAxNjM4NCB9O1xuICAgICAgc2l6ZVJhbmdlc1tFYnNEZXZpY2VWb2x1bWVUeXBlLk1BR05FVElDXSA9IHsgTWluOiAxLCBNYXg6IDEwMjQgfTtcbiAgICAgIGNvbnN0IHZvbHVtZVR5cGUgPVxuICAgICAgICBwcm9wcy52b2x1bWVUeXBlID8/IEVic0RldmljZVZvbHVtZVR5cGUuR0VORVJBTF9QVVJQT1NFX1NTRDtcbiAgICAgIGNvbnN0IHsgTWluLCBNYXggfSA9IHNpemVSYW5nZXNbdm9sdW1lVHlwZV07XG4gICAgICBpZiAoc2l6ZSA8IE1pbiB8fCBzaXplID4gTWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgXFxgJHt2b2x1bWVUeXBlfVxcYCB2b2x1bWVzIG11c3QgYmUgYmV0d2VlbiAke01pbn0gR2lCIGFuZCAke01heH0gR2lCIGluIHNpemUuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcHMudGhyb3VnaHB1dCkge1xuICAgICAgY29uc3QgdGhyb3VnaHB1dFJhbmdlID0geyBNaW46IDEyNSwgTWF4OiAxMDAwIH07XG4gICAgICBjb25zdCB7IE1pbiwgTWF4IH0gPSB0aHJvdWdocHV0UmFuZ2U7XG4gICAgICBpZiAocHJvcHMudm9sdW1lVHlwZSAhPSBFYnNEZXZpY2VWb2x1bWVUeXBlLkdQMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJ0aHJvdWdocHV0IHByb3BlcnR5IHJlcXVpcmVzIHZvbHVtZVR5cGU6IEVic0RldmljZVZvbHVtZVR5cGUuR1AzXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMudGhyb3VnaHB1dCA8IE1pbiB8fCBwcm9wcy50aHJvdWdocHV0ID4gTWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgdGhyb3VnaHB1dCBwcm9wZXJ0eSB0YWtlcyBhIG1pbmltdW0gb2YgJHtNaW59IGFuZCBhIG1heGltdW0gb2YgJHtNYXh9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -81,7 +81,7 @@ class VpcEndpointService extends aws_construct_1.AwsConstructBase {
81
81
  }
82
82
  exports.VpcEndpointService = VpcEndpointService;
83
83
  _a = JSII_RTTI_SYMBOL_1;
84
- VpcEndpointService[_a] = { fqn: "terraconstructs.aws.compute.VpcEndpointService", version: "0.1.10" };
84
+ VpcEndpointService[_a] = { fqn: "terraconstructs.aws.compute.VpcEndpointService", version: "0.2.0" };
85
85
  /**
86
86
  * The default value for a VPC Endpoint Service name prefix, useful if you do
87
87
  * not have a synthesize-time region literal available.