terraconstructs 0.0.25 → 0.1.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 (420) hide show
  1. package/.jsii +83665 -54911
  2. package/.mise.toml +1 -1
  3. package/.nvmrc +1 -1
  4. package/LICENSE +202 -674
  5. package/lib/asset-manager.d.ts +23 -0
  6. package/lib/asset-manager.js +3 -0
  7. package/lib/asset-staging.d.ts +178 -0
  8. package/lib/asset-staging.js +589 -0
  9. package/lib/assets.d.ts +359 -0
  10. package/lib/assets.js +55 -0
  11. package/lib/aws/arn.js +16 -15
  12. package/lib/aws/aws-asset-manager.d.ts +91 -0
  13. package/lib/aws/aws-asset-manager.js +244 -0
  14. package/lib/aws/aws-construct.js +1 -1
  15. package/lib/aws/aws-stack.d.ts +37 -0
  16. package/lib/aws/aws-stack.js +30 -9
  17. package/lib/aws/aws-tags.js +2 -2
  18. package/lib/aws/cloudwatch/actions/appscaling.d.ts +15 -0
  19. package/lib/aws/cloudwatch/actions/appscaling.js +24 -0
  20. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  21. package/lib/aws/cloudwatch/actions/index.d.ts +3 -0
  22. package/lib/aws/cloudwatch/actions/index.js +4 -4
  23. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  24. package/lib/aws/cloudwatch/actions/sns.d.ts +14 -0
  25. package/lib/aws/cloudwatch/actions/sns.js +23 -0
  26. package/lib/aws/cloudwatch/actions/ssm.d.ts +72 -0
  27. package/lib/aws/cloudwatch/actions/ssm.js +104 -0
  28. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  29. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  30. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  31. package/lib/aws/cloudwatch/alarm.js +1 -1
  32. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  33. package/lib/aws/cloudwatch/dashboard.js +1 -1
  34. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  35. package/lib/aws/cloudwatch/graph.js +8 -8
  36. package/lib/aws/cloudwatch/layout.js +3 -3
  37. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  38. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  39. package/lib/aws/cloudwatch/log-group.js +1 -1
  40. package/lib/aws/cloudwatch/log-query.js +1 -1
  41. package/lib/aws/cloudwatch/log-stream.js +1 -1
  42. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  43. package/lib/aws/cloudwatch/metric.js +2 -2
  44. package/lib/aws/cloudwatch/pattern.js +3 -3
  45. package/lib/aws/cloudwatch/policy.js +1 -1
  46. package/lib/aws/cloudwatch/query-definition.js +2 -2
  47. package/lib/aws/cloudwatch/stats.js +1 -1
  48. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  49. package/lib/aws/cloudwatch/text.js +1 -1
  50. package/lib/aws/cloudwatch/variable.js +3 -3
  51. package/lib/aws/cloudwatch/widget.js +1 -1
  52. package/lib/aws/compute/access-log.d.ts +478 -0
  53. package/lib/aws/compute/access-log.js +649 -0
  54. package/lib/aws/compute/activity.js +1 -1
  55. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  56. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  57. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  58. package/lib/aws/compute/alb/application-listener.js +1 -1
  59. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  60. package/lib/aws/compute/alb/application-target-group.js +1 -1
  61. package/lib/aws/compute/alb/conditions.js +1 -1
  62. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  63. package/lib/aws/compute/alb/trust-store.js +1 -1
  64. package/lib/aws/compute/api-definition.d.ts +106 -0
  65. package/lib/aws/compute/api-definition.js +200 -0
  66. package/lib/aws/compute/api-key.d.ts +184 -0
  67. package/lib/aws/compute/api-key.js +197 -0
  68. package/lib/aws/compute/apigateway-canned-metrics.generated.d.ts +169 -0
  69. package/lib/aws/compute/apigateway-canned-metrics.generated.js +63 -0
  70. package/lib/aws/compute/apigateway-util.d.ts +31 -0
  71. package/lib/aws/compute/apigateway-util.js +152 -0
  72. package/lib/aws/compute/architecture.js +1 -1
  73. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  74. package/lib/aws/compute/authorizer.d.ts +35 -0
  75. package/lib/aws/compute/authorizer.js +28 -0
  76. package/lib/aws/compute/authorizers/identity-source.d.ts +37 -0
  77. package/lib/aws/compute/authorizers/identity-source.js +61 -0
  78. package/lib/aws/compute/authorizers/index.d.ts +2 -0
  79. package/lib/aws/compute/authorizers/index.js +20 -0
  80. package/lib/aws/compute/authorizers/lambda.d.ts +140 -0
  81. package/lib/aws/compute/authorizers/lambda.js +208 -0
  82. package/lib/aws/compute/base-path-mapping.d.ts +49 -0
  83. package/lib/aws/compute/base-path-mapping.js +52 -0
  84. package/lib/aws/compute/base-scalable-attribute.js +3 -3
  85. package/lib/aws/compute/bastion-host.js +1 -1
  86. package/lib/aws/compute/chain.js +1 -1
  87. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  88. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  89. package/lib/aws/compute/client-vpn-route.js +2 -2
  90. package/lib/aws/compute/code.d.ts +415 -0
  91. package/lib/aws/compute/code.js +424 -0
  92. package/lib/aws/compute/condition.js +1 -1
  93. package/lib/aws/compute/connections.js +1 -1
  94. package/lib/aws/compute/cors.d.ts +102 -0
  95. package/lib/aws/compute/cors.js +33 -0
  96. package/lib/aws/compute/deployment.d.ts +83 -0
  97. package/lib/aws/compute/deployment.js +158 -0
  98. package/lib/aws/compute/domain-name.d.ts +153 -0
  99. package/lib/aws/compute/domain-name.js +158 -0
  100. package/lib/aws/compute/event-invoke-config.d.ts +2 -2
  101. package/lib/aws/compute/event-invoke-config.js +4 -4
  102. package/lib/aws/compute/event-source-filter.js +2 -2
  103. package/lib/aws/compute/event-source-mapping.d.ts +2 -2
  104. package/lib/aws/compute/event-source-mapping.js +9 -7
  105. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  106. package/lib/aws/compute/event-sources/s3.js +1 -1
  107. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  108. package/lib/aws/compute/event-sources/sqs.js +3 -2
  109. package/lib/aws/compute/fields.js +4 -4
  110. package/lib/aws/compute/function-alias.d.ts +1 -0
  111. package/lib/aws/compute/function-alias.js +8 -2
  112. package/lib/aws/compute/function-base.d.ts +15 -0
  113. package/lib/aws/compute/function-base.js +4 -4
  114. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  115. package/lib/aws/compute/function-destinations/function.js +1 -1
  116. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  117. package/lib/aws/compute/function-nodejs/bundling.d.ts +75 -0
  118. package/lib/aws/compute/function-nodejs/bundling.js +405 -0
  119. package/lib/aws/compute/function-nodejs/function.d.ts +99 -0
  120. package/lib/aws/compute/function-nodejs/function.js +175 -0
  121. package/lib/aws/compute/function-nodejs/index.d.ts +2 -0
  122. package/lib/aws/compute/function-nodejs/index.js +19 -0
  123. package/lib/aws/compute/function-nodejs/package-installation.d.ts +8 -0
  124. package/lib/aws/compute/function-nodejs/package-installation.js +36 -0
  125. package/lib/aws/compute/function-nodejs/package-manager.d.ts +33 -0
  126. package/lib/aws/compute/function-nodejs/package-manager.js +99 -0
  127. package/lib/aws/compute/function-nodejs/types.d.ts +410 -0
  128. package/lib/aws/compute/function-nodejs/types.js +81 -0
  129. package/lib/aws/compute/function-nodejs/util.d.ts +60 -0
  130. package/lib/aws/compute/function-nodejs/util.js +202 -0
  131. package/lib/aws/compute/function-url.d.ts +2 -2
  132. package/lib/aws/compute/function-url.js +4 -4
  133. package/lib/aws/compute/function.d.ts +34 -4
  134. package/lib/aws/compute/function.js +91 -17
  135. package/lib/aws/compute/gateway-response.d.ts +157 -0
  136. package/lib/aws/compute/gateway-response.js +156 -0
  137. package/lib/aws/compute/handler.d.ts +10 -0
  138. package/lib/aws/compute/handler.js +20 -0
  139. package/lib/aws/compute/index.d.ts +27 -0
  140. package/lib/aws/compute/index.js +29 -1
  141. package/lib/aws/compute/instance-types.js +1 -1
  142. package/lib/aws/compute/instance.js +1 -1
  143. package/lib/aws/compute/integration.d.ts +311 -0
  144. package/lib/aws/compute/integration.js +165 -0
  145. package/lib/aws/compute/integrations/aws.d.ts +72 -0
  146. package/lib/aws/compute/integrations/aws.js +55 -0
  147. package/lib/aws/compute/integrations/http.d.ts +37 -0
  148. package/lib/aws/compute/integrations/http.js +35 -0
  149. package/lib/aws/compute/integrations/index.d.ts +6 -0
  150. package/lib/aws/compute/integrations/index.js +24 -0
  151. package/lib/aws/compute/integrations/lambda.d.ts +40 -0
  152. package/lib/aws/compute/integrations/lambda.js +73 -0
  153. package/lib/aws/compute/integrations/mock.d.ts +16 -0
  154. package/lib/aws/compute/integrations/mock.js +30 -0
  155. package/lib/aws/compute/integrations/request-context.d.ts +144 -0
  156. package/lib/aws/compute/integrations/request-context.js +3 -0
  157. package/lib/aws/compute/integrations/stepfunctions.d.ts +102 -0
  158. package/lib/aws/compute/integrations/stepfunctions.js +268 -0
  159. package/lib/aws/compute/ip-addresses.js +2 -2
  160. package/lib/aws/compute/ipam.js +1 -1
  161. package/lib/aws/compute/json-schema.d.ts +75 -0
  162. package/lib/aws/compute/json-schema.js +23 -0
  163. package/lib/aws/compute/key-pair.js +1 -1
  164. package/lib/aws/compute/lambda-api.d.ts +46 -0
  165. package/lib/aws/compute/lambda-api.js +64 -0
  166. package/lib/aws/compute/launch-template.js +2 -2
  167. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  168. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  169. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  170. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  171. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  172. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  173. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  174. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  175. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  176. package/lib/aws/compute/load-balancer.js +3 -3
  177. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  178. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  179. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  180. package/lib/aws/compute/machine-image/common.js +1 -1
  181. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  182. package/lib/aws/compute/method.d.ts +219 -0
  183. package/lib/aws/compute/method.js +396 -0
  184. package/lib/aws/compute/methodresponse.d.ts +28 -0
  185. package/lib/aws/compute/methodresponse.js +3 -0
  186. package/lib/aws/compute/model.d.ts +143 -0
  187. package/lib/aws/compute/model.js +141 -0
  188. package/lib/aws/compute/nat.js +5 -5
  189. package/lib/aws/compute/network-acl-types.js +2 -2
  190. package/lib/aws/compute/network-acl.js +3 -3
  191. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  192. package/lib/aws/compute/nlb/network-listener.js +1 -1
  193. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  194. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  195. package/lib/aws/compute/peer.js +1 -1
  196. package/lib/aws/compute/placement-group.js +1 -1
  197. package/lib/aws/compute/port.js +1 -1
  198. package/lib/aws/compute/prefix-list.js +1 -1
  199. package/lib/aws/compute/requestvalidator.d.ts +50 -0
  200. package/lib/aws/compute/requestvalidator.js +59 -0
  201. package/lib/aws/compute/resource.d.ts +223 -0
  202. package/lib/aws/compute/resource.js +316 -0
  203. package/lib/aws/compute/restapi.d.ts +510 -0
  204. package/lib/aws/compute/restapi.js +626 -0
  205. package/lib/aws/compute/route.js +8 -8
  206. package/lib/aws/compute/runtime.d.ts +282 -0
  207. package/lib/aws/compute/runtime.js +337 -0
  208. package/lib/aws/compute/scalable-target.js +3 -3
  209. package/lib/aws/compute/schedule.js +3 -3
  210. package/lib/aws/compute/security-group.js +1 -1
  211. package/lib/aws/compute/stage.d.ts +350 -0
  212. package/lib/aws/compute/stage.js +304 -0
  213. package/lib/aws/compute/state-graph.js +1 -1
  214. package/lib/aws/compute/state-machine-fragment.js +1 -1
  215. package/lib/aws/compute/state-machine.js +4 -4
  216. package/lib/aws/compute/states/choice.js +1 -1
  217. package/lib/aws/compute/states/custom-state.js +1 -1
  218. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  219. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  220. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  221. package/lib/aws/compute/states/distributed-map.js +1 -1
  222. package/lib/aws/compute/states/fail.js +1 -1
  223. package/lib/aws/compute/states/map-base.js +1 -1
  224. package/lib/aws/compute/states/map.js +1 -1
  225. package/lib/aws/compute/states/parallel.js +1 -1
  226. package/lib/aws/compute/states/pass.js +2 -2
  227. package/lib/aws/compute/states/state.js +1 -1
  228. package/lib/aws/compute/states/succeed.js +1 -1
  229. package/lib/aws/compute/states/task-base.js +2 -2
  230. package/lib/aws/compute/states/task.js +1 -1
  231. package/lib/aws/compute/states/wait.js +2 -2
  232. package/lib/aws/compute/step-scaling-action.js +3 -3
  233. package/lib/aws/compute/step-scaling-policy.js +1 -1
  234. package/lib/aws/compute/stepfunctions-api.d.ts +103 -0
  235. package/lib/aws/compute/stepfunctions-api.js +39 -0
  236. package/lib/aws/compute/subnet-v2.js +2 -2
  237. package/lib/aws/compute/subnet.js +1 -1
  238. package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
  239. package/lib/aws/compute/task-credentials.js +1 -1
  240. package/lib/aws/compute/task-input.js +1 -1
  241. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  242. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  243. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  244. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  245. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  246. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  247. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  248. package/lib/aws/compute/types.js +1 -1
  249. package/lib/aws/compute/usage-plan.d.ts +194 -0
  250. package/lib/aws/compute/usage-plan.js +174 -0
  251. package/lib/aws/compute/user-data.js +3 -3
  252. package/lib/aws/compute/volume.js +2 -2
  253. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  254. package/lib/aws/compute/vpc-endpoint.js +6 -6
  255. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  256. package/lib/aws/compute/vpc-link.d.ts +104 -0
  257. package/lib/aws/compute/vpc-link.js +137 -0
  258. package/lib/aws/compute/vpc-v2-base.js +1 -1
  259. package/lib/aws/compute/vpc-v2.js +2 -2
  260. package/lib/aws/compute/vpc.js +4 -4
  261. package/lib/aws/compute/vpn.js +3 -3
  262. package/lib/aws/edge/certificate.js +1 -1
  263. package/lib/aws/edge/distribution.js +3 -3
  264. package/lib/aws/edge/dns-alias-record-targets.js +3 -3
  265. package/lib/aws/edge/dns-record.js +13 -13
  266. package/lib/aws/edge/dns-zone.js +1 -1
  267. package/lib/aws/edge/function.js +2 -2
  268. package/lib/aws/edge/key-value-store.js +4 -4
  269. package/lib/aws/edge/origin.js +3 -3
  270. package/lib/aws/edge/response-headers-policy.js +1 -1
  271. package/lib/aws/encryption/alias.js +1 -1
  272. package/lib/aws/encryption/key.js +1 -1
  273. package/lib/aws/encryption/via-service-principal.js +1 -1
  274. package/lib/aws/iam/grant.js +2 -2
  275. package/lib/aws/iam/group.js +1 -1
  276. package/lib/aws/iam/instance-profile.js +1 -1
  277. package/lib/aws/iam/managed-policy.js +1 -1
  278. package/lib/aws/iam/oidc-provider.js +1 -1
  279. package/lib/aws/iam/policy-document.js +1 -1
  280. package/lib/aws/iam/policy-statement.js +1 -1
  281. package/lib/aws/iam/policy.js +1 -1
  282. package/lib/aws/iam/principals.js +20 -20
  283. package/lib/aws/iam/role.js +1 -1
  284. package/lib/aws/iam/saml-provider.js +2 -2
  285. package/lib/aws/iam/unknown-principal.js +1 -1
  286. package/lib/aws/iam/user.js +5 -5
  287. package/lib/aws/index.d.ts +1 -0
  288. package/lib/aws/index.js +4 -1
  289. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  290. package/lib/aws/network/subnet-group.js +3 -3
  291. package/lib/aws/network/subnet.js +4 -4
  292. package/lib/aws/notify/archive.js +1 -1
  293. package/lib/aws/notify/connection.js +3 -3
  294. package/lib/aws/notify/event-bus.js +3 -3
  295. package/lib/aws/notify/event-pattern.js +1 -1
  296. package/lib/aws/notify/input.js +2 -2
  297. package/lib/aws/notify/kinesis-stream.js +1 -1
  298. package/lib/aws/notify/notification-rule.d.ts +1 -1
  299. package/lib/aws/notify/notification-rule.js +5 -5
  300. package/lib/aws/notify/policy.js +1 -1
  301. package/lib/aws/notify/queue-policy.js +1 -1
  302. package/lib/aws/notify/queue.js +1 -1
  303. package/lib/aws/notify/resource-policy.js +1 -1
  304. package/lib/aws/notify/rule.js +1 -1
  305. package/lib/aws/notify/schedule.js +1 -1
  306. package/lib/aws/notify/subscription-filter.js +1 -1
  307. package/lib/aws/notify/subscription.js +4 -4
  308. package/lib/aws/notify/subscriptions/email.js +1 -1
  309. package/lib/aws/notify/subscriptions/lambda.js +1 -1
  310. package/lib/aws/notify/subscriptions/sms.js +1 -1
  311. package/lib/aws/notify/subscriptions/sqs.js +1 -1
  312. package/lib/aws/notify/subscriptions/url.js +1 -1
  313. package/lib/aws/notify/targets/event-bus.js +1 -1
  314. package/lib/aws/notify/targets/function.js +1 -1
  315. package/lib/aws/notify/targets/log-group.js +2 -2
  316. package/lib/aws/notify/targets/sqs.js +1 -1
  317. package/lib/aws/notify/targets/state-machine.js +1 -1
  318. package/lib/aws/notify/topic-base.js +1 -1
  319. package/lib/aws/notify/topic.js +6 -5
  320. package/lib/aws/partition.d.ts +21 -0
  321. package/lib/aws/partition.js +42 -0
  322. package/lib/aws/storage/assets/image-asset.d.ts +379 -0
  323. package/lib/aws/storage/assets/image-asset.js +247 -0
  324. package/lib/aws/storage/assets/index.d.ts +2 -0
  325. package/lib/aws/storage/assets/index.js +21 -0
  326. package/lib/aws/storage/assets/s3.d.ts +125 -0
  327. package/lib/aws/storage/assets/s3.js +80 -0
  328. package/lib/aws/storage/auth-token.d.ts +25 -0
  329. package/lib/aws/storage/auth-token.js +54 -0
  330. package/lib/aws/storage/billing.js +1 -1
  331. package/lib/aws/storage/bucket-notifications.js +1 -1
  332. package/lib/aws/storage/bucket-policy.js +1 -1
  333. package/lib/aws/storage/bucket-source.d.ts +1 -1
  334. package/lib/aws/storage/bucket-source.js +4 -4
  335. package/lib/aws/storage/bucket.d.ts +14 -6
  336. package/lib/aws/storage/bucket.js +48 -40
  337. package/lib/aws/storage/capacity.js +1 -1
  338. package/lib/aws/storage/ecr-lifecycle.d.ts +88 -0
  339. package/lib/aws/storage/ecr-lifecycle.js +23 -0
  340. package/lib/aws/storage/ecr-repository.d.ts +446 -0
  341. package/lib/aws/storage/ecr-repository.js +685 -0
  342. package/lib/aws/storage/encryption.js +1 -1
  343. package/lib/aws/storage/index.d.ts +5 -0
  344. package/lib/aws/storage/index.js +10 -3
  345. package/lib/aws/storage/location.d.ts +17 -0
  346. package/lib/aws/storage/location.js +4 -0
  347. package/lib/aws/storage/notification-targets/function.js +1 -1
  348. package/lib/aws/storage/notification-targets/queue.js +1 -1
  349. package/lib/aws/storage/origin-access-identity.js +1 -1
  350. package/lib/aws/storage/parameter.js +2 -2
  351. package/lib/aws/storage/table.js +3 -3
  352. package/lib/aws/storage/util.d.ts +8 -20
  353. package/lib/aws/storage/util.js +56 -34
  354. package/lib/aws/util.d.ts +1 -0
  355. package/lib/aws/util.js +6 -1
  356. package/lib/bundling.d.ts +434 -0
  357. package/lib/bundling.js +368 -0
  358. package/lib/construct-base.js +2 -2
  359. package/lib/duration.js +1 -1
  360. package/lib/expiration.js +1 -1
  361. package/lib/fs/copy.d.ts +2 -0
  362. package/lib/fs/copy.js +57 -0
  363. package/lib/fs/fingerprint.d.ts +21 -0
  364. package/lib/fs/fingerprint.js +165 -0
  365. package/lib/fs/ignore.d.ts +107 -0
  366. package/lib/fs/ignore.js +190 -0
  367. package/lib/fs/index.d.ts +47 -0
  368. package/lib/fs/index.js +88 -0
  369. package/lib/fs/options.d.ts +110 -0
  370. package/lib/fs/options.js +60 -0
  371. package/lib/fs/utils.d.ts +11 -0
  372. package/lib/fs/utils.js +34 -0
  373. package/lib/index.d.ts +5 -0
  374. package/lib/index.js +7 -1
  375. package/lib/private/asset-staging.d.ts +83 -0
  376. package/lib/private/asset-staging.js +205 -0
  377. package/lib/private/cache.d.ts +17 -0
  378. package/lib/private/cache.js +35 -0
  379. package/lib/private/jsii-deprecated.d.ts +2 -0
  380. package/lib/private/jsii-deprecated.js +19 -0
  381. package/lib/private/unique-resource-name.js +3 -2
  382. package/lib/size.js +1 -1
  383. package/lib/stack-base.js +1 -1
  384. package/lib/terra-func.js +2 -2
  385. package/lib/time-zone.js +1 -1
  386. package/node_modules/@balena/dockerignore/CHANGELOG.md +31 -0
  387. package/node_modules/@balena/dockerignore/LICENSE.md +206 -0
  388. package/node_modules/@balena/dockerignore/README.md +261 -0
  389. package/node_modules/@balena/dockerignore/ignore.js +363 -0
  390. package/node_modules/@balena/dockerignore/index.d.ts +45 -0
  391. package/node_modules/@balena/dockerignore/package.json +49 -0
  392. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  393. package/node_modules/balanced-match/LICENSE.md +21 -0
  394. package/node_modules/balanced-match/README.md +97 -0
  395. package/node_modules/balanced-match/index.js +62 -0
  396. package/node_modules/balanced-match/package.json +48 -0
  397. package/node_modules/concat-map/.travis.yml +4 -0
  398. package/node_modules/concat-map/LICENSE +18 -0
  399. package/node_modules/concat-map/README.markdown +62 -0
  400. package/node_modules/concat-map/example/map.js +6 -0
  401. package/node_modules/concat-map/index.js +13 -0
  402. package/node_modules/concat-map/package.json +43 -0
  403. package/node_modules/concat-map/test/map.js +39 -0
  404. package/node_modules/ignore/LICENSE-MIT +21 -0
  405. package/node_modules/ignore/README.md +412 -0
  406. package/node_modules/ignore/index.d.ts +61 -0
  407. package/node_modules/ignore/index.js +636 -0
  408. package/node_modules/ignore/legacy.js +559 -0
  409. package/node_modules/ignore/package.json +74 -0
  410. package/node_modules/minimatch/LICENSE +15 -0
  411. package/node_modules/minimatch/README.md +230 -0
  412. package/node_modules/minimatch/minimatch.js +947 -0
  413. package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
  414. package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
  415. package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
  416. package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
  417. package/node_modules/minimatch/package.json +33 -0
  418. package/package.json +14 -5
  419. package/lib/aws/compute/function-nodejs.d.ts +0 -55
  420. package/lib/aws/compute/function-nodejs.js +0 -70
@@ -0,0 +1,649 @@
1
+ "use strict";
2
+ var _a, _b, _c, _d;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AccessLogFormat = exports.AccessLogField = exports.FirehoseLogDestination = exports.LogGroupLogDestination = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Use CloudWatch Logs as a custom access log destination for API Gateway.
8
+ */
9
+ class LogGroupLogDestination {
10
+ constructor(logGroup) {
11
+ this.logGroup = logGroup;
12
+ }
13
+ /**
14
+ * Binds this destination to the CloudWatch Logs.
15
+ */
16
+ bind(_stage) {
17
+ return {
18
+ destinationArn: this.logGroup.logGroupArn,
19
+ };
20
+ }
21
+ }
22
+ exports.LogGroupLogDestination = LogGroupLogDestination;
23
+ _a = JSII_RTTI_SYMBOL_1;
24
+ LogGroupLogDestination[_a] = { fqn: "terraconstructs.aws.compute.LogGroupLogDestination", version: "0.1.0" };
25
+ /**
26
+ * Use a Firehose delivery stream as a custom access log destination for API Gateway.
27
+ */
28
+ class FirehoseLogDestination {
29
+ constructor(stream) {
30
+ this.stream = stream;
31
+ }
32
+ /**
33
+ * Binds this destination to the Firehose delivery stream.
34
+ */
35
+ bind(_stage) {
36
+ if (!this.stream.nameInput?.startsWith("amazon-apigateway-")) {
37
+ // throw new ValidationError(
38
+ throw new Error(`Firehose delivery stream name for access log destination must begin with 'amazon-apigateway-', got '${this.stream.nameInput}'`);
39
+ }
40
+ return {
41
+ destinationArn: this.stream.arn,
42
+ };
43
+ }
44
+ }
45
+ exports.FirehoseLogDestination = FirehoseLogDestination;
46
+ _b = JSII_RTTI_SYMBOL_1;
47
+ FirehoseLogDestination[_b] = { fqn: "terraconstructs.aws.compute.FirehoseLogDestination", version: "0.1.0" };
48
+ /**
49
+ * $context variables that can be used to customize access log pattern.
50
+ */
51
+ class AccessLogField {
52
+ /**
53
+ * The API callers AWS account ID.
54
+ * @deprecated Use `contextCallerAccountId` or `contextOwnerAccountId` instead
55
+ */
56
+ static contextAccountId() {
57
+ return "$context.identity.accountId";
58
+ }
59
+ /**
60
+ * The API callers AWS account ID.
61
+ */
62
+ static contextCallerAccountId() {
63
+ return "$context.identity.accountId";
64
+ }
65
+ /**
66
+ * The API owner's AWS account ID.
67
+ */
68
+ static contextOwnerAccountId() {
69
+ return "$context.accountId";
70
+ }
71
+ /**
72
+ * The identifier API Gateway assigns to your API.
73
+ */
74
+ static contextApiId() {
75
+ return "$context.apiId";
76
+ }
77
+ /**
78
+ * A property of the claims returned from the Amazon Cognito user pool after the method caller is successfully authenticated.
79
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html
80
+ *
81
+ * @param property A property key of the claims.
82
+ */
83
+ static contextAuthorizerClaims(property) {
84
+ return `$context.authorizer.claims.${property}`;
85
+ }
86
+ /**
87
+ * The principal user identification associated with the token sent by the client and returned
88
+ * from an API Gateway Lambda authorizer (formerly known as a custom authorizer).
89
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html
90
+ */
91
+ static contextAuthorizerPrincipalId() {
92
+ return "$context.authorizer.principalId";
93
+ }
94
+ /**
95
+ * The stringified value of the specified key-value pair of the `context` map returned from an API Gateway Lambda authorizer function.
96
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html
97
+ * @param property key of the context map.
98
+ */
99
+ static contextAuthorizer(property) {
100
+ return `$context.authorizer.${property}`;
101
+ }
102
+ /**
103
+ * The AWS endpoint's request ID.
104
+ */
105
+ static contextAwsEndpointRequestId() {
106
+ return "$context.awsEndpointRequestId";
107
+ }
108
+ /**
109
+ * The full domain name used to invoke the API. This should be the same as the incoming `Host` header.
110
+ */
111
+ static contextDomainName() {
112
+ return "$context.domainName";
113
+ }
114
+ /**
115
+ * The first label of the `$context.domainName`. This is often used as a caller/customer identifier.
116
+ */
117
+ static contextDomainPrefix() {
118
+ return "$context.domainPrefix";
119
+ }
120
+ /**
121
+ * A string containing an API Gateway error message.
122
+ */
123
+ static contextErrorMessage() {
124
+ return "$context.error.message";
125
+ }
126
+ /**
127
+ * The quoted value of $context.error.message, namely "$context.error.message".
128
+ */
129
+ static contextErrorMessageString() {
130
+ return "$context.error.messageString";
131
+ }
132
+ /**
133
+ * A type of GatewayResponse. This variable can only be used for simple variable substitution in a GatewayResponse body-mapping template,
134
+ * which is not processed by the Velocity Template Language engine, and in access logging.
135
+ *
136
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-logging.html
137
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/customize-gateway-responses.html
138
+ */
139
+ static contextErrorResponseType() {
140
+ return "$context.error.responseType";
141
+ }
142
+ /**
143
+ * A string containing a detailed validation error message.
144
+ */
145
+ static contextErrorValidationErrorString() {
146
+ return "$context.error.validationErrorString";
147
+ }
148
+ /**
149
+ * The extended ID that API Gateway assigns to the API request, which contains more useful information for debugging/troubleshooting.
150
+ */
151
+ static contextExtendedRequestId() {
152
+ return "$context.extendedRequestId";
153
+ }
154
+ /**
155
+ * The HTTP method used. Valid values include: `DELETE`, `GET`, `HEAD`, `OPTIONS`, `PATCH`, `POST`, and `PUT`.
156
+ */
157
+ static contextHttpMethod() {
158
+ return "$context.httpMethod";
159
+ }
160
+ /**
161
+ * The AWS account ID associated with the request.
162
+ */
163
+ static contextIdentityAccountId() {
164
+ return "$context.identity.accountId";
165
+ }
166
+ /**
167
+ * For API methods that require an API key, this variable is the API key associated with the method request.
168
+ * For methods that don't require an API key, this variable is
169
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-api-usage-plans.html
170
+ */
171
+ static contextIdentityApiKey() {
172
+ return "$context.identity.apiKey";
173
+ }
174
+ /**
175
+ * The API key ID associated with an API request that requires an API key.
176
+ */
177
+ static contextIdentityApiKeyId() {
178
+ return "$context.identity.apiKeyId";
179
+ }
180
+ /**
181
+ * The principal identifier of the caller making the request.
182
+ */
183
+ static contextIdentityCaller() {
184
+ return "$context.identity.caller";
185
+ }
186
+ /**
187
+ * The Amazon Cognito authentication provider used by the caller making the request.
188
+ * Available only if the request was signed with Amazon Cognito credentials.
189
+ * @see https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html
190
+ */
191
+ static contextIdentityCognitoAuthenticationProvider() {
192
+ return "$context.identity.cognitoAuthenticationProvider";
193
+ }
194
+ /**
195
+ * The Amazon Cognito authentication type of the caller making the request.
196
+ * Available only if the request was signed with Amazon Cognito credentials.
197
+ */
198
+ static contextIdentityCognitoAuthenticationType() {
199
+ return "$context.identity.cognitoAuthenticationType";
200
+ }
201
+ /**
202
+ * The Amazon Cognito identity ID of the caller making the request. Available only if the request was signed with Amazon Cognito credentials.
203
+ */
204
+ static contextIdentityCognitoIdentityId() {
205
+ return "$context.identity.cognitoIdentityId";
206
+ }
207
+ /**
208
+ * The Amazon Cognito identity pool ID of the caller making the request.
209
+ * Available only if the request was signed with Amazon Cognito credentials.
210
+ */
211
+ static contextIdentityCognitoIdentityPoolId() {
212
+ return "$context.identity.cognitoIdentityPoolId";
213
+ }
214
+ /**
215
+ * The AWS organization ID.
216
+ */
217
+ static contextIdentityPrincipalOrgId() {
218
+ return "$context.identity.principalOrgId";
219
+ }
220
+ /**
221
+ * The source IP address of the TCP connection making the request to API Gateway.
222
+ * Warning: You should not trust this value if there is any chance that the `X-Forwarded-For` header could be forged.
223
+ */
224
+ static contextIdentitySourceIp() {
225
+ return "$context.identity.sourceIp";
226
+ }
227
+ /**
228
+ * The PEM-encoded client certificate that the client presented during mutual TLS authentication.
229
+ * Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
230
+ * Present only in access logs if mutual TLS authentication fails.
231
+ */
232
+ static contextIdentityClientCertPem() {
233
+ return "$context.identity.clientCert.clientCertPem";
234
+ }
235
+ /**
236
+ * The distinguished name of the subject of the certificate that a client presents.
237
+ * Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
238
+ * Present only in access logs if mutual TLS authentication fails.
239
+ */
240
+ static contextIdentityClientCertSubjectDN() {
241
+ return "$context.identity.clientCert.subjectDN";
242
+ }
243
+ /**
244
+ * The distinguished name of the issuer of the certificate that a client presents.
245
+ * Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
246
+ * Present only in access logs if mutual TLS authentication fails.
247
+ */
248
+ static contextIdentityClientCertIssunerDN() {
249
+ return "$context.identity.clientCert.issuerDN";
250
+ }
251
+ /**
252
+ * The serial number of the certificate.
253
+ * Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
254
+ * Present only in access logs if mutual TLS authentication fails.
255
+ */
256
+ static contextIdentityClientCertSerialNumber() {
257
+ return "$context.identity.clientCert.serialNumber";
258
+ }
259
+ /**
260
+ * The date before which the certificate is invalid.
261
+ * Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
262
+ * Present only in access logs if mutual TLS authentication fails.
263
+ */
264
+ static contextIdentityClientCertValidityNotBefore() {
265
+ return "$context.identity.clientCert.validity.notBefore";
266
+ }
267
+ /**
268
+ * The date after which the certificate is invalid.
269
+ * Present when a client accesses an API by using a custom domain name that has mutual TLS enabled.
270
+ * Present only in access logs if mutual TLS authentication fails.
271
+ */
272
+ static contextIdentityClientCertValidityNotAfter() {
273
+ return "$context.identity.clientCert.validity.notAfter";
274
+ }
275
+ /**
276
+ * The principal identifier of the user making the request. Used in Lambda authorizers.
277
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html
278
+ */
279
+ static contextIdentityUser() {
280
+ return "$context.identity.user";
281
+ }
282
+ /**
283
+ * The User-Agent header of the API caller.
284
+ */
285
+ static contextIdentityUserAgent() {
286
+ return "$context.identity.userAgent";
287
+ }
288
+ /**
289
+ * The Amazon Resource Name (ARN) of the effective user identified after authentication.
290
+ * @see https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html
291
+ */
292
+ static contextIdentityUserArn() {
293
+ return "$context.identity.userArn";
294
+ }
295
+ /**
296
+ * The request path.
297
+ * For example, for a non-proxy request URL of https://{rest-api-id.execute-api.{region}.amazonaws.com/{stage}/root/child,
298
+ * this value is /{stage}/root/child.
299
+ */
300
+ static contextPath() {
301
+ return "$context.path";
302
+ }
303
+ /**
304
+ * The request protocol, for example, HTTP/1.1.
305
+ */
306
+ static contextProtocol() {
307
+ return "$context.protocol";
308
+ }
309
+ /**
310
+ * The ID that API Gateway assigns to the API request.
311
+ */
312
+ static contextRequestId() {
313
+ return "$context.requestId";
314
+ }
315
+ /**
316
+ * The request header override.
317
+ * If this parameter is defined, it contains the headers to be used instead of the HTTP Headers that are defined in the Integration Request pane.
318
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
319
+ */
320
+ static contextRequestOverrideHeader(headerName) {
321
+ return `$context.requestOverride.header.${headerName}`;
322
+ }
323
+ /**
324
+ * The request path override. If this parameter is defined,
325
+ * it contains the request path to be used instead of the URL Path Parameters that are defined in the Integration Request pane.
326
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
327
+ */
328
+ static contextRequestOverridePath(pathName) {
329
+ return `$context.requestOverride.path.${pathName}`;
330
+ }
331
+ /**
332
+ * The request query string override.
333
+ * If this parameter is defined, it contains the request query strings to be used instead
334
+ * of the URL Query String Parameters that are defined in the Integration Request pane.
335
+ */
336
+ static contextRequestOverrideQuerystring(querystringName) {
337
+ return `$context.requestOverride.querystring.${querystringName}`;
338
+ }
339
+ /**
340
+ * The response header override.
341
+ * If this parameter is defined, it contains the header to be returned instead of the Response header
342
+ * that is defined as the Default mapping in the Integration Response pane.
343
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
344
+ */
345
+ static contextResponseOverrideHeader(headerName) {
346
+ return `$context.responseOverride.header.${headerName}`;
347
+ }
348
+ /**
349
+ * The response status code override.
350
+ * If this parameter is defined, it contains the status code to be returned instead of the Method response status
351
+ * that is defined as the Default mapping in the Integration Response pane.
352
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html
353
+ */
354
+ static contextResponseOverrideStatus() {
355
+ return "$context.responseOverride.status";
356
+ }
357
+ /**
358
+ * The CLF-formatted request time (dd/MMM/yyyy:HH:mm:ss +-hhmm).
359
+ */
360
+ static contextRequestTime() {
361
+ return "$context.requestTime";
362
+ }
363
+ /**
364
+ * The Epoch-formatted request time.
365
+ */
366
+ static contextRequestTimeEpoch() {
367
+ return "$context.requestTimeEpoch";
368
+ }
369
+ /**
370
+ * The identifier that API Gateway assigns to your resource.
371
+ */
372
+ static contextResourceId() {
373
+ return "$context.resourceId";
374
+ }
375
+ /**
376
+ * The path to your resource.
377
+ * For example, for the non-proxy request URI of `https://{rest-api-id.execute-api.{region}.amazonaws.com/{stage}/root/child`,
378
+ * The $context.resourcePath value is `/root/child`.
379
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-step-by-step.html
380
+ */
381
+ static contextResourcePath() {
382
+ return "$context.resourcePath";
383
+ }
384
+ /**
385
+ * The deployment stage of the API request (for example, `Beta` or `Prod`).
386
+ */
387
+ static contextStage() {
388
+ return "$context.stage";
389
+ }
390
+ /**
391
+ * The response received from AWS WAF: `WAF_ALLOW` or `WAF_BLOCK`. Will not be set if the stage is not associated with a web ACL.
392
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html
393
+ */
394
+ static contextWafResponseCode() {
395
+ return "$context.wafResponseCode";
396
+ }
397
+ /**
398
+ * The complete ARN of the web ACL that is used to decide whether to allow or block the request.
399
+ * Will not be set if the stage is not associated with a web ACL.
400
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html
401
+ */
402
+ static contextWebaclArn() {
403
+ return "$context.webaclArn";
404
+ }
405
+ /**
406
+ * The trace ID for the X-Ray trace.
407
+ * @see https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-enabling-xray.html
408
+ */
409
+ static contextXrayTraceId() {
410
+ return "$context.xrayTraceId";
411
+ }
412
+ /**
413
+ * The authorizer latency in ms.
414
+ */
415
+ static contextAuthorizerIntegrationLatency() {
416
+ return "$context.authorizer.integrationLatency";
417
+ }
418
+ /**
419
+ * The integration latency in ms.
420
+ */
421
+ static contextIntegrationLatency() {
422
+ return "$context.integrationLatency";
423
+ }
424
+ /**
425
+ * For Lambda proxy integration, this parameter represents the status code returned from AWS Lambda,
426
+ * not from the backend Lambda function.
427
+ */
428
+ static contextIntegrationStatus() {
429
+ return "$context.integrationStatus";
430
+ }
431
+ /**
432
+ * The response latency in ms.
433
+ */
434
+ static contextResponseLatency() {
435
+ return "$context.responseLatency";
436
+ }
437
+ /**
438
+ * The response payload length.
439
+ */
440
+ static contextResponseLength() {
441
+ return "$context.responseLength";
442
+ }
443
+ /**
444
+ * The method response status.
445
+ */
446
+ static contextStatus() {
447
+ return "$context.status";
448
+ }
449
+ /**
450
+ * The authorization error message.
451
+ */
452
+ static contextAuthorizeError() {
453
+ return "$context.authorize.error";
454
+ }
455
+ /**
456
+ * The authorization latency in ms.
457
+ */
458
+ static contextAuthorizeLatency() {
459
+ return "$context.authorize.latency";
460
+ }
461
+ /**
462
+ * The status code returned from an authorization attempt.
463
+ */
464
+ static contextAuthorizeStatus() {
465
+ return "$context.authorize.status";
466
+ }
467
+ /**
468
+ * The error message returned from an authorizer.
469
+ */
470
+ static contextAuthorizerError() {
471
+ return "$context.authorizer.error";
472
+ }
473
+ /**
474
+ * The status code returned from a Lambda authorizer.
475
+ */
476
+ static contextAuthorizerIntegrationStatus() {
477
+ return "$context.authorizer.integrationStatus";
478
+ }
479
+ /**
480
+ * The authorizer latency in ms.
481
+ */
482
+ static contextAuthorizerLatency() {
483
+ return "$context.authorizer.latency";
484
+ }
485
+ /**
486
+ * The AWS endpoint's request ID.
487
+ */
488
+ static contextAuthorizerRequestId() {
489
+ return "$context.authorizer.requestId";
490
+ }
491
+ /**
492
+ * The status code returned from an authorizer.
493
+ */
494
+ static contextAuthorizerStatus() {
495
+ return "$context.authorizer.status";
496
+ }
497
+ /**
498
+ * The error message returned from an authentication attempt.
499
+ */
500
+ static contextAuthenticateError() {
501
+ return "$context.authenticate.error";
502
+ }
503
+ /**
504
+ * The authentication latency in ms.
505
+ */
506
+ static contextAuthenticateLatency() {
507
+ return "$context.authenticate.latency";
508
+ }
509
+ /**
510
+ * The status code returned from an authentication attempt.
511
+ */
512
+ static contextAuthenticateStatus() {
513
+ return "$context.authenticate.status";
514
+ }
515
+ /**
516
+ * The path for an API mapping that an incoming request matched.
517
+ * Applicable when a client uses a custom domain name to access an API. For example if a client sends a request to
518
+ * https://api.example.com/v1/orders/1234, and the request matches the API mapping with the path v1/orders, the value is v1/orders.
519
+ * @see https://docs.aws.amazon.com/en_jp/apigateway/latest/developerguide/rest-api-mappings.html
520
+ */
521
+ static contextCustomDomainBasePathMatched() {
522
+ return "$context.customDomain.basePathMatched";
523
+ }
524
+ /**
525
+ * A string that contains an integration error message.
526
+ */
527
+ static contextIntegrationErrorMessage() {
528
+ return "$context.integrationErrorMessage";
529
+ }
530
+ /**
531
+ * The error message returned from AWS WAF.
532
+ */
533
+ static contextWafError() {
534
+ return "$context.waf.error";
535
+ }
536
+ /**
537
+ * The AWS WAF latency in ms.
538
+ */
539
+ static contextWafLatency() {
540
+ return "$context.waf.latency";
541
+ }
542
+ /**
543
+ * The status code returned from AWS WAF.
544
+ */
545
+ static contextWafStatus() {
546
+ return "$context.waf.status";
547
+ }
548
+ }
549
+ exports.AccessLogField = AccessLogField;
550
+ _c = JSII_RTTI_SYMBOL_1;
551
+ AccessLogField[_c] = { fqn: "terraconstructs.aws.compute.AccessLogField", version: "0.1.0" };
552
+ /**
553
+ * factory methods for access log format.
554
+ */
555
+ class AccessLogFormat {
556
+ /**
557
+ * Custom log format.
558
+ * You can create any log format string. You can easily get the $ context variable by using the methods of AccessLogField.
559
+ * @example
560
+ *
561
+ * apigateway.AccessLogFormat.custom(JSON.stringify({
562
+ * requestId: apigateway.AccessLogField.contextRequestId(),
563
+ * sourceIp: apigateway.AccessLogField.contextIdentitySourceIp(),
564
+ * method: apigateway.AccessLogField.contextHttpMethod(),
565
+ * userContext: {
566
+ * sub: apigateway.AccessLogField.contextAuthorizerClaims('sub'),
567
+ * email: apigateway.AccessLogField.contextAuthorizerClaims('email')
568
+ * }
569
+ * }))
570
+ */
571
+ static custom(format) {
572
+ return new AccessLogFormat(format);
573
+ }
574
+ /**
575
+ * Generate Common Log Format.
576
+ */
577
+ static clf() {
578
+ const requester = [
579
+ AccessLogField.contextIdentitySourceIp(),
580
+ AccessLogField.contextIdentityCaller(),
581
+ AccessLogField.contextIdentityUser(),
582
+ ].join(" ");
583
+ const requestTime = AccessLogField.contextRequestTime();
584
+ const request = [
585
+ AccessLogField.contextHttpMethod(),
586
+ AccessLogField.contextResourcePath(),
587
+ AccessLogField.contextProtocol(),
588
+ ].join(" ");
589
+ const status = [
590
+ AccessLogField.contextStatus(),
591
+ AccessLogField.contextResponseLength(),
592
+ AccessLogField.contextRequestId(),
593
+ ].join(" ");
594
+ return new AccessLogFormat(`${requester} [${requestTime}] "${request}" ${status}`);
595
+ }
596
+ /**
597
+ * Access log will be produced in the JSON format with a set of fields most useful in the access log. All fields are turned on by default with the
598
+ * option to turn off specific fields.
599
+ */
600
+ static jsonWithStandardFields(fields = {
601
+ ip: true,
602
+ user: true,
603
+ caller: true,
604
+ requestTime: true,
605
+ httpMethod: true,
606
+ resourcePath: true,
607
+ status: true,
608
+ protocol: true,
609
+ responseLength: true,
610
+ }) {
611
+ return this.custom(JSON.stringify({
612
+ requestId: AccessLogField.contextRequestId(),
613
+ ip: fields.ip ? AccessLogField.contextIdentitySourceIp() : undefined,
614
+ user: fields.user ? AccessLogField.contextIdentityUser() : undefined,
615
+ caller: fields.caller
616
+ ? AccessLogField.contextIdentityCaller()
617
+ : undefined,
618
+ requestTime: fields.requestTime
619
+ ? AccessLogField.contextRequestTime()
620
+ : undefined,
621
+ httpMethod: fields.httpMethod
622
+ ? AccessLogField.contextHttpMethod()
623
+ : undefined,
624
+ resourcePath: fields.resourcePath
625
+ ? AccessLogField.contextResourcePath()
626
+ : undefined,
627
+ status: fields.status ? AccessLogField.contextStatus() : undefined,
628
+ protocol: fields.protocol
629
+ ? AccessLogField.contextProtocol()
630
+ : undefined,
631
+ responseLength: fields.responseLength
632
+ ? AccessLogField.contextResponseLength()
633
+ : undefined,
634
+ }));
635
+ }
636
+ constructor(format) {
637
+ this.format = format;
638
+ }
639
+ /**
640
+ * Output a format string to be used with CloudFormation.
641
+ */
642
+ toString() {
643
+ return this.format;
644
+ }
645
+ }
646
+ exports.AccessLogFormat = AccessLogFormat;
647
+ _d = JSII_RTTI_SYMBOL_1;
648
+ AccessLogFormat[_d] = { fqn: "terraconstructs.aws.compute.AccessLogFormat", version: "0.1.0" };
649
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9hY2Nlc3MtbG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBK0JBOztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFDakMsWUFBNkIsUUFBbUI7UUFBbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztJQUFHLENBQUM7SUFFcEQ7O09BRUc7SUFDSSxJQUFJLENBQUMsTUFBYztRQUN4QixPQUFPO1lBQ0wsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztTQUMxQyxDQUFDO0lBQ0osQ0FBQzs7QUFWSCx3REFXQzs7O0FBRUQ7O0dBRUc7QUFDSCxNQUFhLHNCQUFzQjtJQUNqQyxZQUNtQixNQUFtRTtRQUFuRSxXQUFNLEdBQU4sTUFBTSxDQUE2RDtJQUNuRixDQUFDO0lBRUo7O09BRUc7SUFDSSxJQUFJLENBQUMsTUFBYztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztZQUM3RCw2QkFBNkI7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FDYix1R0FBdUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsQ0FFaEksQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPO1lBQ0wsY0FBYyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztTQUNoQyxDQUFDO0lBQ0osQ0FBQzs7QUFuQkgsd0RBb0JDOzs7QUFFRDs7R0FFRztBQUNILE1BQWEsY0FBYztJQUN6Qjs7O09BR0c7SUFDSSxNQUFNLENBQUMsZ0JBQWdCO1FBQzVCLE9BQU8sNkJBQTZCLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLHNCQUFzQjtRQUNsQyxPQUFPLDZCQUE2QixDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxx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ckMsQ0FBQyxDQUFDLFNBQVM7WUFDYixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzNCLENBQUMsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3BDLENBQUMsQ0FBQyxTQUFTO1lBQ2IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUMvQixDQUFDLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFO2dCQUN0QyxDQUFDLENBQUMsU0FBUztZQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDbEUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2dCQUN2QixDQUFDLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRTtnQkFDbEMsQ0FBQyxDQUFDLFNBQVM7WUFDYixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7Z0JBQ25DLENBQUMsQ0FBQyxjQUFjLENBQUMscUJBQXFCLEVBQUU7Z0JBQ3hDLENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBT0QsWUFBb0IsTUFBYztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7O0FBekdILDBDQTBHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGtpbmVzaXNGaXJlaG9zZURlbGl2ZXJ5U3RyZWFtIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IElTdGFnZSB9IGZyb20gXCIuL3N0YWdlXCI7XG4vLyBpbXBvcnQgKiBhcyBmaXJlaG9zZSBmcm9tIFwiLi4vLi4vYXdzLWtpbmVzaXNmaXJlaG9zZVwiO1xuLy8gaW1wb3J0ICogYXMgZmlyZWhvc2UgZnJvbSBcIi4uL25vdGlmeS9maXJlaG9zZVwiO1xuaW1wb3J0IHsgSUxvZ0dyb3VwIH0gZnJvbSBcIi4uL2Nsb3Vkd2F0Y2hcIjtcblxuLy8gVE9ETzogQWRvcHQgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3Jcbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMzMzODIvXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzMzMDQ1XG4vLyBpbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi8uLi9jb3JlL2xpYi9lcnJvcnMnO1xuXG4vKipcbiAqIEFjY2VzcyBsb2cgZGVzdGluYXRpb24gZm9yIGEgUmVzdEFwaSBTdGFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWNjZXNzTG9nRGVzdGluYXRpb24ge1xuICAvKipcbiAgICogQmluZHMgdGhpcyBkZXN0aW5hdGlvbiB0byB0aGUgUmVzdEFwaSBTdGFnZS5cbiAgICovXG4gIGJpbmQoc3RhZ2U6IElTdGFnZSk6IEFjY2Vzc0xvZ0Rlc3RpbmF0aW9uQ29uZmlnO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgd2hlbiBiaW5kaW5nIGEgbG9nIGRlc3RpbmF0aW9uIHRvIGEgUmVzdEFwaSBTdGFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NMb2dEZXN0aW5hdGlvbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGRlc3RpbmF0aW9uIHJlc291cmNlXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbkFybjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzZSBDbG91ZFdhdGNoIExvZ3MgYXMgYSBjdXN0b20gYWNjZXNzIGxvZyBkZXN0aW5hdGlvbiBmb3IgQVBJIEdhdGV3YXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dHcm91cExvZ0Rlc3RpbmF0aW9uIGltcGxlbWVudHMgSUFjY2Vzc0xvZ0Rlc3RpbmF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsb2dHcm91cDogSUxvZ0dyb3VwKSB7fVxuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGlzIGRlc3RpbmF0aW9uIHRvIHRoZSBDbG91ZFdhdGNoIExvZ3MuXG4gICAqL1xuICBwdWJsaWMgYmluZChfc3RhZ2U6IElTdGFnZSk6IEFjY2Vzc0xvZ0Rlc3RpbmF0aW9uQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVzdGluYXRpb25Bcm46IHRoaXMubG9nR3JvdXAubG9nR3JvdXBBcm4sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFVzZSBhIEZpcmVob3NlIGRlbGl2ZXJ5IHN0cmVhbSBhcyBhIGN1c3RvbSBhY2Nlc3MgbG9nIGRlc3RpbmF0aW9uIGZvciBBUEkgR2F0ZXdheS5cbiAqL1xuZXhwb3J0IGNsYXNzIEZpcmVob3NlTG9nRGVzdGluYXRpb24gaW1wbGVtZW50cyBJQWNjZXNzTG9nRGVzdGluYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmVhbToga2luZXNpc0ZpcmVob3NlRGVsaXZlcnlTdHJlYW0uS2luZXNpc0ZpcmVob3NlRGVsaXZlcnlTdHJlYW0sXG4gICkge31cblxuICAvKipcbiAgICogQmluZHMgdGhpcyBkZXN0aW5hdGlvbiB0byB0aGUgRmlyZWhvc2UgZGVsaXZlcnkgc3RyZWFtLlxuICAgKi9cbiAgcHVibGljIGJpbmQoX3N0YWdlOiBJU3RhZ2UpOiBBY2Nlc3NMb2dEZXN0aW5hdGlvbkNvbmZpZyB7XG4gICAgaWYgKCF0aGlzLnN0cmVhbS5uYW1lSW5wdXQ/LnN0YXJ0c1dpdGgoXCJhbWF6b24tYXBpZ2F0ZXdheS1cIikpIHtcbiAgICAgIC8vIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGaXJlaG9zZSBkZWxpdmVyeSBzdHJlYW0gbmFtZSBmb3IgYWNjZXNzIGxvZyBkZXN0aW5hdGlvbiBtdXN0IGJlZ2luIHdpdGggJ2FtYXpvbi1hcGlnYXRld2F5LScsIGdvdCAnJHt0aGlzLnN0cmVhbS5uYW1lSW5wdXR9J2AsXG4gICAgICAgIC8vIF9zdGFnZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXN0aW5hdGlvbkFybjogdGhpcy5zdHJlYW0uYXJuLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiAkY29udGV4dCB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgYWNjZXNzIGxvZyBwYXR0ZXJuLlxuICovXG5leHBvcnQgY2xhc3MgQWNjZXNzTG9nRmllbGQge1xuICAvKipcbiAgICogVGhlIEFQSSBjYWxsZXJzIEFXUyBhY2NvdW50IElELlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGNvbnRleHRDYWxsZXJBY2NvdW50SWRgIG9yIGBjb250ZXh0T3duZXJBY2NvdW50SWRgIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEFjY291bnRJZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5hY2NvdW50SWRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVBJIGNhbGxlcnMgQVdTIGFjY291bnQgSUQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRDYWxsZXJBY2NvdW50SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaWRlbnRpdHkuYWNjb3VudElkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFQSSBvd25lcidzIEFXUyBhY2NvdW50IElELlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0T3duZXJBY2NvdW50SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYWNjb3VudElkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgQVBJIEdhdGV3YXkgYXNzaWducyB0byB5b3VyIEFQSS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEFwaUlkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmFwaUlkXCI7XG4gIH1cblxuICAvKipcbiAgICogQSBwcm9wZXJ0eSBvZiB0aGUgY2xhaW1zIHJldHVybmVkIGZyb20gdGhlIEFtYXpvbiBDb2duaXRvIHVzZXIgcG9vbCBhZnRlciB0aGUgbWV0aG9kIGNhbGxlciBpcyBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpZ2F0ZXdheS1pbnRlZ3JhdGUtd2l0aC1jb2duaXRvLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHByb3BlcnR5IEEgcHJvcGVydHkga2V5IG9mIHRoZSBjbGFpbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyQ2xhaW1zKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LmF1dGhvcml6ZXIuY2xhaW1zLiR7cHJvcGVydHl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHVzZXIgaWRlbnRpZmljYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSB0b2tlbiBzZW50IGJ5IHRoZSBjbGllbnQgYW5kIHJldHVybmVkXG4gICAqIGZyb20gYW4gQVBJIEdhdGV3YXkgTGFtYmRhIGF1dGhvcml6ZXIgKGZvcm1lcmx5IGtub3duIGFzIGEgY3VzdG9tIGF1dGhvcml6ZXIpLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGlnYXRld2F5LXVzZS1sYW1iZGEtYXV0aG9yaXplci5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyUHJpbmNpcGFsSWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aG9yaXplci5wcmluY2lwYWxJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJpbmdpZmllZCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGtleS12YWx1ZSBwYWlyIG9mIHRoZSBgY29udGV4dGAgbWFwIHJldHVybmVkIGZyb20gYW4gQVBJIEdhdGV3YXkgTGFtYmRhIGF1dGhvcml6ZXIgZnVuY3Rpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktdXNlLWxhbWJkYS1hdXRob3JpemVyLmh0bWxcbiAgICogQHBhcmFtIHByb3BlcnR5IGtleSBvZiB0aGUgY29udGV4dCBtYXAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyKHByb3BlcnR5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LmF1dGhvcml6ZXIuJHtwcm9wZXJ0eX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgZW5kcG9pbnQncyByZXF1ZXN0IElELlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0QXdzRW5kcG9pbnRSZXF1ZXN0SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXdzRW5kcG9pbnRSZXF1ZXN0SWRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVsbCBkb21haW4gbmFtZSB1c2VkIHRvIGludm9rZSB0aGUgQVBJLiBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgaW5jb21pbmcgYEhvc3RgIGhlYWRlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dERvbWFpbk5hbWUoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuZG9tYWluTmFtZVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBsYWJlbCBvZiB0aGUgYCRjb250ZXh0LmRvbWFpbk5hbWVgLiBUaGlzIGlzIG9mdGVuIHVzZWQgYXMgYSBjYWxsZXIvY3VzdG9tZXIgaWRlbnRpZmllci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dERvbWFpblByZWZpeCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5kb21haW5QcmVmaXhcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHN0cmluZyBjb250YWluaW5nIGFuIEFQSSBHYXRld2F5IGVycm9yIG1lc3NhZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuZXJyb3IubWVzc2FnZVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBxdW90ZWQgdmFsdWUgb2YgJGNvbnRleHQuZXJyb3IubWVzc2FnZSwgbmFtZWx5IFwiJGNvbnRleHQuZXJyb3IubWVzc2FnZVwiLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0RXJyb3JNZXNzYWdlU3RyaW5nKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmVycm9yLm1lc3NhZ2VTdHJpbmdcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHR5cGUgb2YgR2F0ZXdheVJlc3BvbnNlLiBUaGlzIHZhcmlhYmxlIGNhbiBvbmx5IGJlIHVzZWQgZm9yIHNpbXBsZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24gaW4gYSBHYXRld2F5UmVzcG9uc2UgYm9keS1tYXBwaW5nIHRlbXBsYXRlLFxuICAgKiB3aGljaCBpcyBub3QgcHJvY2Vzc2VkIGJ5IHRoZSBWZWxvY2l0eSBUZW1wbGF0ZSBMYW5ndWFnZSBlbmdpbmUsIGFuZCBpbiBhY2Nlc3MgbG9nZ2luZy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpZ2F0ZXdheS13ZWJzb2NrZXQtYXBpLWxvZ2dpbmcuaHRtbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9jdXN0b21pemUtZ2F0ZXdheS1yZXNwb25zZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0RXJyb3JSZXNwb25zZVR5cGUoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuZXJyb3IucmVzcG9uc2VUeXBlXCI7XG4gIH1cblxuICAvKipcbiAgICogQSBzdHJpbmcgY29udGFpbmluZyBhIGRldGFpbGVkIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEVycm9yVmFsaWRhdGlvbkVycm9yU3RyaW5nKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmVycm9yLnZhbGlkYXRpb25FcnJvclN0cmluZ1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlbmRlZCBJRCB0aGF0IEFQSSBHYXRld2F5IGFzc2lnbnMgdG8gdGhlIEFQSSByZXF1ZXN0LCB3aGljaCBjb250YWlucyBtb3JlIHVzZWZ1bCBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nL3Ryb3VibGVzaG9vdGluZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEV4dGVuZGVkUmVxdWVzdElkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmV4dGVuZGVkUmVxdWVzdElkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEhUVFAgbWV0aG9kIHVzZWQuIFZhbGlkIHZhbHVlcyBpbmNsdWRlOiBgREVMRVRFYCwgYEdFVGAsIGBIRUFEYCwgYE9QVElPTlNgLCBgUEFUQ0hgLCBgUE9TVGAsIGFuZCBgUFVUYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEh0dHBNZXRob2QoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaHR0cE1ldGhvZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUFjY291bnRJZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5hY2NvdW50SWRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgQVBJIG1ldGhvZHMgdGhhdCByZXF1aXJlIGFuIEFQSSBrZXksIHRoaXMgdmFyaWFibGUgaXMgdGhlIEFQSSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXRob2QgcmVxdWVzdC5cbiAgICogRm9yIG1ldGhvZHMgdGhhdCBkb24ndCByZXF1aXJlIGFuIEFQSSBrZXksIHRoaXMgdmFyaWFibGUgaXNcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXktYXBpLXVzYWdlLXBsYW5zLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5QXBpS2V5KCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmFwaUtleVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUEkga2V5IElEIGFzc29jaWF0ZWQgd2l0aCBhbiBBUEkgcmVxdWVzdCB0aGF0IHJlcXVpcmVzIGFuIEFQSSBrZXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUFwaUtleUlkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmFwaUtleUlkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCBpZGVudGlmaWVyIG9mIHRoZSBjYWxsZXIgbWFraW5nIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlDYWxsZXIoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaWRlbnRpdHkuY2FsbGVyXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBDb2duaXRvIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHVzZWQgYnkgdGhlIGNhbGxlciBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gICAqIEF2YWlsYWJsZSBvbmx5IGlmIHRoZSByZXF1ZXN0IHdhcyBzaWduZWQgd2l0aCBBbWF6b24gQ29nbml0byBjcmVkZW50aWFscy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY29nbml0by9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvY29nbml0by1pZGVudGl0eS5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUNvZ25pdG9BdXRoZW50aWNhdGlvblByb3ZpZGVyKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNvZ25pdG9BdXRoZW50aWNhdGlvblByb3ZpZGVyXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBDb2duaXRvIGF1dGhlbnRpY2F0aW9uIHR5cGUgb2YgdGhlIGNhbGxlciBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gICAqIEF2YWlsYWJsZSBvbmx5IGlmIHRoZSByZXF1ZXN0IHdhcyBzaWduZWQgd2l0aCBBbWF6b24gQ29nbml0byBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q29nbml0b0F1dGhlbnRpY2F0aW9uVHlwZSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5jb2duaXRvQXV0aGVudGljYXRpb25UeXBlXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBDb2duaXRvIGlkZW50aXR5IElEIG9mIHRoZSBjYWxsZXIgbWFraW5nIHRoZSByZXF1ZXN0LiBBdmFpbGFibGUgb25seSBpZiB0aGUgcmVxdWVzdCB3YXMgc2lnbmVkIHdpdGggQW1hem9uIENvZ25pdG8gY3JlZGVudGlhbHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUNvZ25pdG9JZGVudGl0eUlkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNvZ25pdG9JZGVudGl0eUlkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFtYXpvbiBDb2duaXRvIGlkZW50aXR5IHBvb2wgSUQgb2YgdGhlIGNhbGxlciBtYWtpbmcgdGhlIHJlcXVlc3QuXG4gICAqIEF2YWlsYWJsZSBvbmx5IGlmIHRoZSByZXF1ZXN0IHdhcyBzaWduZWQgd2l0aCBBbWF6b24gQ29nbml0byBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q29nbml0b0lkZW50aXR5UG9vbElkKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNvZ25pdG9JZGVudGl0eVBvb2xJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBV1Mgb3JnYW5pemF0aW9uIElELlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlQcmluY2lwYWxPcmdJZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5wcmluY2lwYWxPcmdJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgSVAgYWRkcmVzcyBvZiB0aGUgVENQIGNvbm5lY3Rpb24gbWFraW5nIHRoZSByZXF1ZXN0IHRvIEFQSSBHYXRld2F5LlxuICAgKiBXYXJuaW5nOiBZb3Ugc2hvdWxkIG5vdCB0cnVzdCB0aGlzIHZhbHVlIGlmIHRoZXJlIGlzIGFueSBjaGFuY2UgdGhhdCB0aGUgYFgtRm9yd2FyZGVkLUZvcmAgaGVhZGVyIGNvdWxkIGJlIGZvcmdlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5U291cmNlSXAoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaWRlbnRpdHkuc291cmNlSXBcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgUEVNLWVuY29kZWQgY2xpZW50IGNlcnRpZmljYXRlIHRoYXQgdGhlIGNsaWVudCBwcmVzZW50ZWQgZHVyaW5nIG11dHVhbCBUTFMgYXV0aGVudGljYXRpb24uXG4gICAqIFByZXNlbnQgd2hlbiBhIGNsaWVudCBhY2Nlc3NlcyBhbiBBUEkgYnkgdXNpbmcgYSBjdXN0b20gZG9tYWluIG5hbWUgdGhhdCBoYXMgbXV0dWFsIFRMUyBlbmFibGVkLlxuICAgKiBQcmVzZW50IG9ubHkgaW4gYWNjZXNzIGxvZ3MgaWYgbXV0dWFsIFRMUyBhdXRoZW50aWNhdGlvbiBmYWlscy5cbiAgICovXG5cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlDbGllbnRDZXJ0UGVtKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNsaWVudENlcnQuY2xpZW50Q2VydFBlbVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkaXN0aW5ndWlzaGVkIG5hbWUgb2YgdGhlIHN1YmplY3Qgb2YgdGhlIGNlcnRpZmljYXRlIHRoYXQgYSBjbGllbnQgcHJlc2VudHMuXG4gICAqIFByZXNlbnQgd2hlbiBhIGNsaWVudCBhY2Nlc3NlcyBhbiBBUEkgYnkgdXNpbmcgYSBjdXN0b20gZG9tYWluIG5hbWUgdGhhdCBoYXMgbXV0dWFsIFRMUyBlbmFibGVkLlxuICAgKiBQcmVzZW50IG9ubHkgaW4gYWNjZXNzIGxvZ3MgaWYgbXV0dWFsIFRMUyBhdXRoZW50aWNhdGlvbiBmYWlscy5cbiAgICovXG5cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlDbGllbnRDZXJ0U3ViamVjdEROKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LmNsaWVudENlcnQuc3ViamVjdEROXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSBvZiB0aGUgaXNzdWVyIG9mIHRoZSBjZXJ0aWZpY2F0ZSB0aGF0IGEgY2xpZW50IHByZXNlbnRzLlxuICAgKiBQcmVzZW50IHdoZW4gYSBjbGllbnQgYWNjZXNzZXMgYW4gQVBJIGJ5IHVzaW5nIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHRoYXQgaGFzIG11dHVhbCBUTFMgZW5hYmxlZC5cbiAgICogUHJlc2VudCBvbmx5IGluIGFjY2VzcyBsb2dzIGlmIG11dHVhbCBUTFMgYXV0aGVudGljYXRpb24gZmFpbHMuXG4gICAqL1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q2xpZW50Q2VydElzc3VuZXJETigpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5jbGllbnRDZXJ0Lmlzc3VlckROXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHNlcmlhbCBudW1iZXIgb2YgdGhlIGNlcnRpZmljYXRlLlxuICAgKiBQcmVzZW50IHdoZW4gYSBjbGllbnQgYWNjZXNzZXMgYW4gQVBJIGJ5IHVzaW5nIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHRoYXQgaGFzIG11dHVhbCBUTFMgZW5hYmxlZC5cbiAgICogUHJlc2VudCBvbmx5IGluIGFjY2VzcyBsb2dzIGlmIG11dHVhbCBUTFMgYXV0aGVudGljYXRpb24gZmFpbHMuXG4gICAqL1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q2xpZW50Q2VydFNlcmlhbE51bWJlcigpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5jbGllbnRDZXJ0LnNlcmlhbE51bWJlclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGJlZm9yZSB3aGljaCB0aGUgY2VydGlmaWNhdGUgaXMgaW52YWxpZC5cbiAgICogUHJlc2VudCB3aGVuIGEgY2xpZW50IGFjY2Vzc2VzIGFuIEFQSSBieSB1c2luZyBhIGN1c3RvbSBkb21haW4gbmFtZSB0aGF0IGhhcyBtdXR1YWwgVExTIGVuYWJsZWQuXG4gICAqIFByZXNlbnQgb25seSBpbiBhY2Nlc3MgbG9ncyBpZiBtdXR1YWwgVExTIGF1dGhlbnRpY2F0aW9uIGZhaWxzLlxuICAgKi9cblxuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eUNsaWVudENlcnRWYWxpZGl0eU5vdEJlZm9yZSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS5jbGllbnRDZXJ0LnZhbGlkaXR5Lm5vdEJlZm9yZVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGFmdGVyIHdoaWNoIHRoZSBjZXJ0aWZpY2F0ZSBpcyBpbnZhbGlkLlxuICAgKiBQcmVzZW50IHdoZW4gYSBjbGllbnQgYWNjZXNzZXMgYW4gQVBJIGJ5IHVzaW5nIGEgY3VzdG9tIGRvbWFpbiBuYW1lIHRoYXQgaGFzIG11dHVhbCBUTFMgZW5hYmxlZC5cbiAgICogUHJlc2VudCBvbmx5IGluIGFjY2VzcyBsb2dzIGlmIG11dHVhbCBUTFMgYXV0aGVudGljYXRpb24gZmFpbHMuXG4gICAqL1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5Q2xpZW50Q2VydFZhbGlkaXR5Tm90QWZ0ZXIoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaWRlbnRpdHkuY2xpZW50Q2VydC52YWxpZGl0eS5ub3RBZnRlclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgaWRlbnRpZmllciBvZiB0aGUgdXNlciBtYWtpbmcgdGhlIHJlcXVlc3QuIFVzZWQgaW4gTGFtYmRhIGF1dGhvcml6ZXJzLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1sYW1iZGEtYXV0aG9yaXplci1vdXRwdXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SWRlbnRpdHlVc2VyKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmlkZW50aXR5LnVzZXJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgVXNlci1BZ2VudCBoZWFkZXIgb2YgdGhlIEFQSSBjYWxsZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJZGVudGl0eVVzZXJBZ2VudCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS51c2VyQWdlbnRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIGVmZmVjdGl2ZSB1c2VyIGlkZW50aWZpZWQgYWZ0ZXIgYXV0aGVudGljYXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL2lkX3VzZXJzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dElkZW50aXR5VXNlckFybigpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pZGVudGl0eS51c2VyQXJuXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgcGF0aC5cbiAgICogRm9yIGV4YW1wbGUsIGZvciBhIG5vbi1wcm94eSByZXF1ZXN0IFVSTCBvZiBodHRwczovL3tyZXN0LWFwaS1pZC5leGVjdXRlLWFwaS57cmVnaW9ufS5hbWF6b25hd3MuY29tL3tzdGFnZX0vcm9vdC9jaGlsZCxcbiAgICogdGhpcyB2YWx1ZSBpcyAve3N0YWdlfS9yb290L2NoaWxkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0UGF0aCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5wYXRoXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgcHJvdG9jb2wsIGZvciBleGFtcGxlLCBIVFRQLzEuMS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFByb3RvY29sKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnByb3RvY29sXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElEIHRoYXQgQVBJIEdhdGV3YXkgYXNzaWducyB0byB0aGUgQVBJIHJlcXVlc3QuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRSZXF1ZXN0SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQucmVxdWVzdElkXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgaGVhZGVyIG92ZXJyaWRlLlxuICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBkZWZpbmVkLCBpdCBjb250YWlucyB0aGUgaGVhZGVycyB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIEhUVFAgSGVhZGVycyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZSBJbnRlZ3JhdGlvbiBSZXF1ZXN0IHBhbmUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktb3ZlcnJpZGUtcmVxdWVzdC1yZXNwb25zZS1wYXJhbWV0ZXJzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlcXVlc3RPdmVycmlkZUhlYWRlcihoZWFkZXJOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5oZWFkZXIuJHtoZWFkZXJOYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlcXVlc3QgcGF0aCBvdmVycmlkZS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgZGVmaW5lZCxcbiAgICogaXQgY29udGFpbnMgdGhlIHJlcXVlc3QgcGF0aCB0byBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIFVSTCBQYXRoIFBhcmFtZXRlcnMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgSW50ZWdyYXRpb24gUmVxdWVzdCBwYW5lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGlnYXRld2F5LW92ZXJyaWRlLXJlcXVlc3QtcmVzcG9uc2UtcGFyYW1ldGVycy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRSZXF1ZXN0T3ZlcnJpZGVQYXRoKHBhdGhOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5wYXRoLiR7cGF0aE5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBxdWVyeSBzdHJpbmcgb3ZlcnJpZGUuXG4gICAqIElmIHRoaXMgcGFyYW1ldGVyIGlzIGRlZmluZWQsIGl0IGNvbnRhaW5zIHRoZSByZXF1ZXN0IHF1ZXJ5IHN0cmluZ3MgdG8gYmUgdXNlZCBpbnN0ZWFkXG4gICAqIG9mIHRoZSBVUkwgUXVlcnkgU3RyaW5nIFBhcmFtZXRlcnMgdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgSW50ZWdyYXRpb24gUmVxdWVzdCBwYW5lLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0UmVxdWVzdE92ZXJyaWRlUXVlcnlzdHJpbmcocXVlcnlzdHJpbmdOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCRjb250ZXh0LnJlcXVlc3RPdmVycmlkZS5xdWVyeXN0cmluZy4ke3F1ZXJ5c3RyaW5nTmFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBoZWFkZXIgb3ZlcnJpZGUuXG4gICAqIElmIHRoaXMgcGFyYW1ldGVyIGlzIGRlZmluZWQsIGl0IGNvbnRhaW5zIHRoZSBoZWFkZXIgdG8gYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgUmVzcG9uc2UgaGVhZGVyXG4gICAqIHRoYXQgaXMgZGVmaW5lZCBhcyB0aGUgRGVmYXVsdCBtYXBwaW5nIGluIHRoZSBJbnRlZ3JhdGlvbiBSZXNwb25zZSBwYW5lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGlnYXRld2F5LW92ZXJyaWRlLXJlcXVlc3QtcmVzcG9uc2UtcGFyYW1ldGVycy5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRSZXNwb25zZU92ZXJyaWRlSGVhZGVyKGhlYWRlck5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgJGNvbnRleHQucmVzcG9uc2VPdmVycmlkZS5oZWFkZXIuJHtoZWFkZXJOYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIHN0YXR1cyBjb2RlIG92ZXJyaWRlLlxuICAgKiBJZiB0aGlzIHBhcmFtZXRlciBpcyBkZWZpbmVkLCBpdCBjb250YWlucyB0aGUgc3RhdHVzIGNvZGUgdG8gYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgTWV0aG9kIHJlc3BvbnNlIHN0YXR1c1xuICAgKiB0aGF0IGlzIGRlZmluZWQgYXMgdGhlIERlZmF1bHQgbWFwcGluZyBpbiB0aGUgSW50ZWdyYXRpb24gUmVzcG9uc2UgcGFuZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpZ2F0ZXdheS1vdmVycmlkZS1yZXF1ZXN0LXJlc3BvbnNlLXBhcmFtZXRlcnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0UmVzcG9uc2VPdmVycmlkZVN0YXR1cygpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5yZXNwb25zZU92ZXJyaWRlLnN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBDTEYtZm9ybWF0dGVkIHJlcXVlc3QgdGltZSAoZGQvTU1NL3l5eXk6SEg6bW06c3MgKy1oaG1tKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlcXVlc3RUaW1lKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnJlcXVlc3RUaW1lXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEVwb2NoLWZvcm1hdHRlZCByZXF1ZXN0IHRpbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRSZXF1ZXN0VGltZUVwb2NoKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnJlcXVlc3RUaW1lRXBvY2hcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciB0aGF0IEFQSSBHYXRld2F5IGFzc2lnbnMgdG8geW91ciByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlc291cmNlSWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQucmVzb3VyY2VJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHlvdXIgcmVzb3VyY2UuXG4gICAqIEZvciBleGFtcGxlLCBmb3IgdGhlIG5vbi1wcm94eSByZXF1ZXN0IFVSSSBvZiBgaHR0cHM6Ly97cmVzdC1hcGktaWQuZXhlY3V0ZS1hcGkue3JlZ2lvbn0uYW1hem9uYXdzLmNvbS97c3RhZ2V9L3Jvb3QvY2hpbGRgLFxuICAgKiBUaGUgJGNvbnRleHQucmVzb3VyY2VQYXRoIHZhbHVlIGlzIGAvcm9vdC9jaGlsZGAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaS1nYXRld2F5LWNyZWF0ZS1hcGktc3RlcC1ieS1zdGVwLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlc291cmNlUGF0aCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5yZXNvdXJjZVBhdGhcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVwbG95bWVudCBzdGFnZSBvZiB0aGUgQVBJIHJlcXVlc3QgKGZvciBleGFtcGxlLCBgQmV0YWAgb3IgYFByb2RgKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFN0YWdlKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnN0YWdlXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIHJlY2VpdmVkIGZyb20gQVdTIFdBRjogYFdBRl9BTExPV2Agb3IgYFdBRl9CTE9DS2AuIFdpbGwgbm90IGJlIHNldCBpZiB0aGUgc3RhZ2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdlYiBBQ0wuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktY29udHJvbC1hY2Nlc3MtYXdzLXdhZi5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRXYWZSZXNwb25zZUNvZGUoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQud2FmUmVzcG9uc2VDb2RlXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbXBsZXRlIEFSTiBvZiB0aGUgd2ViIEFDTCB0aGF0IGlzIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYWxsb3cgb3IgYmxvY2sgdGhlIHJlcXVlc3QuXG4gICAqIFdpbGwgbm90IGJlIHNldCBpZiB0aGUgc3RhZ2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIHdlYiBBQ0wuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktY29udHJvbC1hY2Nlc3MtYXdzLXdhZi5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRXZWJhY2xBcm4oKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQud2ViYWNsQXJuXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRyYWNlIElEIGZvciB0aGUgWC1SYXkgdHJhY2UuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2FwaWdhdGV3YXktZW5hYmxpbmcteHJheS5odG1sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRYcmF5VHJhY2VJZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC54cmF5VHJhY2VJZFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIGxhdGVuY3kgaW4gbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVySW50ZWdyYXRpb25MYXRlbmN5KCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhvcml6ZXIuaW50ZWdyYXRpb25MYXRlbmN5XCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIGxhdGVuY3kgaW4gbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJbnRlZ3JhdGlvbkxhdGVuY3koKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaW50ZWdyYXRpb25MYXRlbmN5XCI7XG4gIH1cblxuICAvKipcbiAgICogRm9yIExhbWJkYSBwcm94eSBpbnRlZ3JhdGlvbiwgdGhpcyBwYXJhbWV0ZXIgcmVwcmVzZW50cyB0aGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgZnJvbSBBV1MgTGFtYmRhLFxuICAgKiBub3QgZnJvbSB0aGUgYmFja2VuZCBMYW1iZGEgZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRJbnRlZ3JhdGlvblN0YXR1cygpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5pbnRlZ3JhdGlvblN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBsYXRlbmN5IGluIG1zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0UmVzcG9uc2VMYXRlbmN5KCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnJlc3BvbnNlTGF0ZW5jeVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNwb25zZSBwYXlsb2FkIGxlbmd0aC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dFJlc3BvbnNlTGVuZ3RoKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LnJlc3BvbnNlTGVuZ3RoXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldGhvZCByZXNwb25zZSBzdGF0dXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuc3RhdHVzXCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGF1dGhvcml6YXRpb24gZXJyb3IgbWVzc2FnZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEF1dGhvcml6ZUVycm9yKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhvcml6ZS5lcnJvclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemF0aW9uIGxhdGVuY3kgaW4gbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVMYXRlbmN5KCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhvcml6ZS5sYXRlbmN5XCI7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0YXR1cyBjb2RlIHJldHVybmVkIGZyb20gYW4gYXV0aG9yaXphdGlvbiBhdHRlbXB0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0QXV0aG9yaXplU3RhdHVzKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhvcml6ZS5zdGF0dXNcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBmcm9tIGFuIGF1dGhvcml6ZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyRXJyb3IoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aG9yaXplci5lcnJvclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBmcm9tIGEgTGFtYmRhIGF1dGhvcml6ZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVySW50ZWdyYXRpb25TdGF0dXMoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aG9yaXplci5pbnRlZ3JhdGlvblN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIGxhdGVuY3kgaW4gbXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRob3JpemVyTGF0ZW5jeSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5hdXRob3JpemVyLmxhdGVuY3lcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGVuZHBvaW50J3MgcmVxdWVzdCBJRC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEF1dGhvcml6ZXJSZXF1ZXN0SWQoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aG9yaXplci5yZXF1ZXN0SWRcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc3RhdHVzIGNvZGUgcmV0dXJuZWQgZnJvbSBhbiBhdXRob3JpemVyLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0QXV0aG9yaXplclN0YXR1cygpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5hdXRob3JpemVyLnN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlcnJvciBtZXNzYWdlIHJldHVybmVkIGZyb20gYW4gYXV0aGVudGljYXRpb24gYXR0ZW1wdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEF1dGhlbnRpY2F0ZUVycm9yKCkge1xuICAgIHJldHVybiBcIiRjb250ZXh0LmF1dGhlbnRpY2F0ZS5lcnJvclwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRoZW50aWNhdGlvbiBsYXRlbmN5IGluIG1zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0QXV0aGVudGljYXRlTGF0ZW5jeSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5hdXRoZW50aWNhdGUubGF0ZW5jeVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBmcm9tIGFuIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRBdXRoZW50aWNhdGVTdGF0dXMoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuYXV0aGVudGljYXRlLnN0YXR1c1wiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIGZvciBhbiBBUEkgbWFwcGluZyB0aGF0IGFuIGluY29taW5nIHJlcXVlc3QgbWF0Y2hlZC5cbiAgICogQXBwbGljYWJsZSB3aGVuIGEgY2xpZW50IHVzZXMgYSBjdXN0b20gZG9tYWluIG5hbWUgdG8gYWNjZXNzIGFuIEFQSS4gRm9yIGV4YW1wbGUgaWYgYSBjbGllbnQgc2VuZHMgYSByZXF1ZXN0IHRvXG4gICAqIGh0dHBzOi8vYXBpLmV4YW1wbGUuY29tL3YxL29yZGVycy8xMjM0LCBhbmQgdGhlIHJlcXVlc3QgbWF0Y2hlcyB0aGUgQVBJIG1hcHBpbmcgd2l0aCB0aGUgcGF0aCB2MS9vcmRlcnMsIHRoZSB2YWx1ZSBpcyB2MS9vcmRlcnMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VuX2pwL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3Jlc3QtYXBpLW1hcHBpbmdzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY29udGV4dEN1c3RvbURvbWFpbkJhc2VQYXRoTWF0Y2hlZCgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC5jdXN0b21Eb21haW4uYmFzZVBhdGhNYXRjaGVkXCI7XG4gIH1cblxuICAvKipcbiAgICogQSBzdHJpbmcgdGhhdCBjb250YWlucyBhbiBpbnRlZ3JhdGlvbiBlcnJvciBtZXNzYWdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0SW50ZWdyYXRpb25FcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQuaW50ZWdyYXRpb25FcnJvck1lc3NhZ2VcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBmcm9tIEFXUyBXQUYuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRXYWZFcnJvcigpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC53YWYuZXJyb3JcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVdTIFdBRiBsYXRlbmN5IGluIG1zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250ZXh0V2FmTGF0ZW5jeSgpIHtcbiAgICByZXR1cm4gXCIkY29udGV4dC53YWYubGF0ZW5jeVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgY29kZSByZXR1cm5lZCBmcm9tIEFXUyBXQUYuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbnRleHRXYWZTdGF0dXMoKSB7XG4gICAgcmV0dXJuIFwiJGNvbnRleHQud2FmLnN0YXR1c1wiO1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY29udHJvbGxpbmcgaXRlbXMgb3V0cHV0IGluIEpTT04gc3RhbmRhcmQgZm9ybWF0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSnNvbldpdGhTdGFuZGFyZEZpZWxkUHJvcHMge1xuICAvKipcbiAgICogSWYgdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBzb3VyY2UgSVAgb2YgcmVxdWVzdCB3aWxsIGJlIG91dHB1dCB0byB0aGUgbG9nXG4gICAqL1xuICByZWFkb25seSBpcDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgcHJpbmNpcGFsIGlkZW50aWZpZXIgb2YgdGhlIGNhbGxlciB3aWxsIGJlIG91dHB1dCB0byB0aGUgbG9nXG4gICAqL1xuICByZWFkb25seSBjYWxsZXI6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIHByaW5jaXBhbCBpZGVudGlmaWVyIG9mIHRoZSB1c2VyIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBsb2dcbiAgICovXG4gIHJlYWRvbmx5IHVzZXI6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIENMRi1mb3JtYXR0ZWQgcmVxdWVzdCB0aW1lKChkZC9NTU0veXl5eTpISDptbTpzcyArLWhobW0pIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBsb2dcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RUaW1lOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBodHRwIG1ldGhvZCB3aWxsIGJlIG91dHB1dCB0byB0aGUgbG9nXG4gICAqL1xuICByZWFkb25seSBodHRwTWV0aG9kOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBwYXRoIHRvIHlvdXIgcmVzb3VyY2Ugd2lsbCBiZSBvdXRwdXQgdG8gdGhlIGxvZ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VQYXRoOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBtZXRob2QgcmVzcG9uc2Ugc3RhdHVzIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSBsb2dcbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgcmVxdWVzdCBwcm90b2NvbCB3aWxsIGJlIG91dHB1dCB0byB0aGUgbG9nXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgcmVzcG9uc2UgcGF5bG9hZCBsZW5ndGggd2lsbCBiZSBvdXRwdXQgdG8gdGhlIGxvZ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VMZW5ndGg6IGJvb2xlYW47XG59XG5cbi8qKlxuICogZmFjdG9yeSBtZXRob2RzIGZvciBhY2Nlc3MgbG9nIGZvcm1hdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjY2Vzc0xvZ0Zvcm1hdCB7XG4gIC8qKlxuICAgKiBDdXN0b20gbG9nIGZvcm1hdC5cbiAgICogWW91IGNhbiBjcmVhdGUgYW55IGxvZyBmb3JtYXQgc3RyaW5nLiBZb3UgY2FuIGVhc2lseSBnZXQgdGhlICQgY29udGV4dCB2YXJpYWJsZSBieSB1c2luZyB0aGUgbWV0aG9kcyBvZiBBY2Nlc3NMb2dGaWVsZC5cbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogIGFwaWdhdGV3YXkuQWNjZXNzTG9nRm9ybWF0LmN1c3RvbShKU09OLnN0cmluZ2lmeSh7XG4gICAqICAgICAgcmVxdWVzdElkOiBhcGlnYXRld2F5LkFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRSZXF1ZXN0SWQoKSxcbiAgICogICAgICBzb3VyY2VJcDogYXBpZ2F0ZXdheS5BY2Nlc3NMb2dGaWVsZC5jb250ZXh0SWRlbnRpdHlTb3VyY2VJcCgpLFxuICAgKiAgICAgIG1ldGhvZDogYXBpZ2F0ZXdheS5BY2Nlc3NMb2dGaWVsZC5jb250ZXh0SHR0cE1ldGhvZCgpLFxuICAgKiAgICAgIHVzZXJDb250ZXh0OiB7XG4gICAqICAgICAgICBzdWI6IGFwaWdhdGV3YXkuQWNjZXNzTG9nRmllbGQuY29udGV4dEF1dGhvcml6ZXJDbGFpbXMoJ3N1YicpLFxuICAgKiAgICAgICAgZW1haWw6IGFwaWdhdGV3YXkuQWNjZXNzTG9nRmllbGQuY29udGV4dEF1dGhvcml6ZXJDbGFpbXMoJ2VtYWlsJylcbiAgICogICAgICB9XG4gICAqICAgfSkpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGN1c3RvbShmb3JtYXQ6IHN0cmluZyk6IEFjY2Vzc0xvZ0Zvcm1hdCB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3NMb2dGb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBDb21tb24gTG9nIEZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2xmKCk6IEFjY2Vzc0xvZ0Zvcm1hdCB7XG4gICAgY29uc3QgcmVxdWVzdGVyID0gW1xuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dElkZW50aXR5U291cmNlSXAoKSxcbiAgICAgIEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRJZGVudGl0eUNhbGxlcigpLFxuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dElkZW50aXR5VXNlcigpLFxuICAgIF0uam9pbihcIiBcIik7XG4gICAgY29uc3QgcmVxdWVzdFRpbWUgPSBBY2Nlc3NMb2dGaWVsZC5jb250ZXh0UmVxdWVzdFRpbWUoKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gW1xuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dEh0dHBNZXRob2QoKSxcbiAgICAgIEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRSZXNvdXJjZVBhdGgoKSxcbiAgICAgIEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRQcm90b2NvbCgpLFxuICAgIF0uam9pbihcIiBcIik7XG4gICAgY29uc3Qgc3RhdHVzID0gW1xuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dFN0YXR1cygpLFxuICAgICAgQWNjZXNzTG9nRmllbGQuY29udGV4dFJlc3BvbnNlTGVuZ3RoKCksXG4gICAgICBBY2Nlc3NMb2dGaWVsZC5jb250ZXh0UmVxdWVzdElkKCksXG4gICAgXS5qb2luKFwiIFwiKTtcblxuICAgIHJldHVybiBuZXcgQWNjZXNzTG9nRm9ybWF0KFxuICAgICAgYCR7cmVxdWVzdGVyfSBbJHtyZXF1ZXN0VGltZX1dIFwiJHtyZXF1ZXN0fVwiICR7c3RhdHVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3MgbG9nIHdpbGwgYmUgcHJvZHVjZWQgaW4gdGhlIEpTT04gZm9ybWF0IHdpdGggYSBzZXQgb2YgZmllbGRzIG1vc3QgdXNlZnVsIGluIHRoZSBhY2Nlc3MgbG9nLiBBbGwgZmllbGRzIGFyZSB0dXJuZWQgb24gYnkgZGVmYXVsdCB3aXRoIHRoZVxuICAgKiBvcHRpb24gdG8gdHVybiBvZmYgc3BlY2lmaWMgZmllbGRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBqc29uV2l0aFN0YW5kYXJkRmllbGRzKFxuICAgIGZpZWxkczogSnNvbldpdGhTdGFuZGFyZEZpZWxkUHJvcHMgPSB7XG4gICAgICBpcDogdHJ1ZSxcbiAgICAgIHVzZXI6IHRydWUsXG4gICAgICBjYWxsZXI6IHRydWUsXG4gICAgICByZXF1ZXN0VGltZTogdHJ1ZSxcbiAgICAgIGh0dHBNZXRob2Q6IHRydWUsXG4gICAgICByZXNvdXJjZVBhdGg6IHRydWUsXG4gICAgICBzdGF0dXM6IHRydWUsXG4gICAgICBwcm90b2NvbDogdHJ1ZSxcbiAgICAgIHJlc3BvbnNlTGVuZ3RoOiB0cnVlLFxuICAgIH0sXG4gICk6IEFjY2Vzc0xvZ0Zvcm1hdCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICByZXF1ZXN0SWQ6IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRSZXF1ZXN0SWQoKSxcbiAgICAgICAgaXA6IGZpZWxkcy5pcCA/IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRJZGVudGl0eVNvdXJjZUlwKCkgOiB1bmRlZmluZWQsXG4gICAgICAgIHVzZXI6IGZpZWxkcy51c2VyID8gQWNjZXNzTG9nRmllbGQuY29udGV4dElkZW50aXR5VXNlcigpIDogdW5kZWZpbmVkLFxuICAgICAgICBjYWxsZXI6IGZpZWxkcy5jYWxsZXJcbiAgICAgICAgICA/IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRJZGVudGl0eUNhbGxlcigpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlcXVlc3RUaW1lOiBmaWVsZHMucmVxdWVzdFRpbWVcbiAgICAgICAgICA/IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRSZXF1ZXN0VGltZSgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGh0dHBNZXRob2Q6IGZpZWxkcy5odHRwTWV0aG9kXG4gICAgICAgICAgPyBBY2Nlc3NMb2dGaWVsZC5jb250ZXh0SHR0cE1ldGhvZCgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlc291cmNlUGF0aDogZmllbGRzLnJlc291cmNlUGF0aFxuICAgICAgICAgID8gQWNjZXNzTG9nRmllbGQuY29udGV4dFJlc291cmNlUGF0aCgpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1czogZmllbGRzLnN0YXR1cyA/IEFjY2Vzc0xvZ0ZpZWxkLmNvbnRleHRTdGF0dXMoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJvdG9jb2w6IGZpZWxkcy5wcm90b2NvbFxuICAgICAgICAgID8gQWNjZXNzTG9nRmllbGQuY29udGV4dFByb3RvY29sKClcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzcG9uc2VMZW5ndGg6IGZpZWxkcy5yZXNwb25zZUxlbmd0aFxuICAgICAgICAgID8gQWNjZXNzTG9nRmllbGQuY29udGV4dFJlc3BvbnNlTGVuZ3RoKClcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQSBBUEkgR2F0ZXdheSBjdXN0b20gYWNjZXNzIGxvZyBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybWF0OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihmb3JtYXQ6IHN0cmluZykge1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBhIGZvcm1hdCBzdHJpbmcgdG8gYmUgdXNlZCB3aXRoIENsb3VkRm9ybWF0aW9uLlxuICAgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0O1xuICB9XG59XG4iXX0=