terraconstructs 0.0.8

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 (680) hide show
  1. package/.envrc +5 -0
  2. package/.jsii +79780 -0
  3. package/.mise.toml +8 -0
  4. package/.nvmrc +1 -0
  5. package/.terraform-version +1 -0
  6. package/.terraform.d/plugin-cache/.gitignore +5 -0
  7. package/LICENSE +674 -0
  8. package/NOTICE.txt +12 -0
  9. package/README.md +42 -0
  10. package/bun.lockb +0 -0
  11. package/go.mod +158 -0
  12. package/go.sum +1206 -0
  13. package/lib/aws/arn.d.ts +187 -0
  14. package/lib/aws/arn.js +383 -0
  15. package/lib/aws/aws-construct.d.ts +76 -0
  16. package/lib/aws/aws-construct.js +38 -0
  17. package/lib/aws/aws-stack.d.ts +201 -0
  18. package/lib/aws/aws-stack.js +303 -0
  19. package/lib/aws/cloudwatch/actions/ec2.d.ts +35 -0
  20. package/lib/aws/cloudwatch/actions/ec2.js +48 -0
  21. package/lib/aws/cloudwatch/actions/index.d.ts +2 -0
  22. package/lib/aws/cloudwatch/actions/index.js +24 -0
  23. package/lib/aws/cloudwatch/actions/lambda.d.ts +16 -0
  24. package/lib/aws/cloudwatch/actions/lambda.js +48 -0
  25. package/lib/aws/cloudwatch/alarm-action.d.ts +23 -0
  26. package/lib/aws/cloudwatch/alarm-action.js +4 -0
  27. package/lib/aws/cloudwatch/alarm-base.d.ts +84 -0
  28. package/lib/aws/cloudwatch/alarm-base.js +64 -0
  29. package/lib/aws/cloudwatch/alarm-rule.d.ts +61 -0
  30. package/lib/aws/cloudwatch/alarm-rule.js +116 -0
  31. package/lib/aws/cloudwatch/alarm-status-widget.d.ts +77 -0
  32. package/lib/aws/cloudwatch/alarm-status-widget.js +62 -0
  33. package/lib/aws/cloudwatch/alarm.d.ts +158 -0
  34. package/lib/aws/cloudwatch/alarm.js +410 -0
  35. package/lib/aws/cloudwatch/composite-alarm.d.ts +88 -0
  36. package/lib/aws/cloudwatch/composite-alarm.js +98 -0
  37. package/lib/aws/cloudwatch/dashboard.d.ts +137 -0
  38. package/lib/aws/cloudwatch/dashboard.js +141 -0
  39. package/lib/aws/cloudwatch/data-protection-policy.d.ts +184 -0
  40. package/lib/aws/cloudwatch/data-protection-policy.js +246 -0
  41. package/lib/aws/cloudwatch/graph.d.ts +792 -0
  42. package/lib/aws/cloudwatch/graph.js +537 -0
  43. package/lib/aws/cloudwatch/index.d.ts +26 -0
  44. package/lib/aws/cloudwatch/index.js +49 -0
  45. package/lib/aws/cloudwatch/layout.d.ts +89 -0
  46. package/lib/aws/cloudwatch/layout.js +147 -0
  47. package/lib/aws/cloudwatch/log-destinations/index.d.ts +2 -0
  48. package/lib/aws/cloudwatch/log-destinations/index.js +20 -0
  49. package/lib/aws/cloudwatch/log-destinations/kinesis.d.ts +29 -0
  50. package/lib/aws/cloudwatch/log-destinations/kinesis.js +52 -0
  51. package/lib/aws/cloudwatch/log-destinations/lambda.d.ts +22 -0
  52. package/lib/aws/cloudwatch/log-destinations/lambda.js +46 -0
  53. package/lib/aws/cloudwatch/log-group.d.ts +453 -0
  54. package/lib/aws/cloudwatch/log-group.js +350 -0
  55. package/lib/aws/cloudwatch/log-query.d.ts +91 -0
  56. package/lib/aws/cloudwatch/log-query.js +85 -0
  57. package/lib/aws/cloudwatch/log-stream.d.ts +57 -0
  58. package/lib/aws/cloudwatch/log-stream.js +57 -0
  59. package/lib/aws/cloudwatch/metric-filter.d.ts +30 -0
  60. package/lib/aws/cloudwatch/metric-filter.js +69 -0
  61. package/lib/aws/cloudwatch/metric-types.d.ts +407 -0
  62. package/lib/aws/cloudwatch/metric-types.js +151 -0
  63. package/lib/aws/cloudwatch/metric.d.ts +492 -0
  64. package/lib/aws/cloudwatch/metric.js +493 -0
  65. package/lib/aws/cloudwatch/pattern.d.ts +195 -0
  66. package/lib/aws/cloudwatch/pattern.js +412 -0
  67. package/lib/aws/cloudwatch/policy.d.ts +43 -0
  68. package/lib/aws/cloudwatch/policy.js +50 -0
  69. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +14 -0
  70. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +37 -0
  71. package/lib/aws/cloudwatch/private/env-tokens.d.ts +8 -0
  72. package/lib/aws/cloudwatch/private/env-tokens.js +48 -0
  73. package/lib/aws/cloudwatch/private/metric-util.d.ts +60 -0
  74. package/lib/aws/cloudwatch/private/metric-util.js +132 -0
  75. package/lib/aws/cloudwatch/private/object.d.ts +1 -0
  76. package/lib/aws/cloudwatch/private/object.js +18 -0
  77. package/lib/aws/cloudwatch/private/rendering.d.ts +60 -0
  78. package/lib/aws/cloudwatch/private/rendering.js +181 -0
  79. package/lib/aws/cloudwatch/private/statistic.d.ts +51 -0
  80. package/lib/aws/cloudwatch/private/statistic.js +176 -0
  81. package/lib/aws/cloudwatch/query-definition.d.ts +150 -0
  82. package/lib/aws/cloudwatch/query-definition.js +114 -0
  83. package/lib/aws/cloudwatch/stats.d.ts +150 -0
  84. package/lib/aws/cloudwatch/stats.js +207 -0
  85. package/lib/aws/cloudwatch/subscription-filter.d.ts +75 -0
  86. package/lib/aws/cloudwatch/subscription-filter.js +51 -0
  87. package/lib/aws/cloudwatch/text.d.ts +52 -0
  88. package/lib/aws/cloudwatch/text.js +53 -0
  89. package/lib/aws/cloudwatch/variable.d.ts +156 -0
  90. package/lib/aws/cloudwatch/variable.js +156 -0
  91. package/lib/aws/cloudwatch/widget.d.ts +62 -0
  92. package/lib/aws/cloudwatch/widget.js +45 -0
  93. package/lib/aws/compute/activity.d.ts +81 -0
  94. package/lib/aws/compute/activity.js +132 -0
  95. package/lib/aws/compute/architecture.d.ts +33 -0
  96. package/lib/aws/compute/architecture.js +42 -0
  97. package/lib/aws/compute/chain.d.ts +52 -0
  98. package/lib/aws/compute/chain.js +68 -0
  99. package/lib/aws/compute/condition.d.ts +202 -0
  100. package/lib/aws/compute/condition.js +409 -0
  101. package/lib/aws/compute/event-invoke-config.d.ts +74 -0
  102. package/lib/aws/compute/event-invoke-config.js +63 -0
  103. package/lib/aws/compute/event-source-filter.d.ts +64 -0
  104. package/lib/aws/compute/event-source-filter.js +86 -0
  105. package/lib/aws/compute/event-source-mapping.d.ts +310 -0
  106. package/lib/aws/compute/event-source-mapping.js +267 -0
  107. package/lib/aws/compute/event-sources/index.d.ts +4 -0
  108. package/lib/aws/compute/event-sources/index.js +28 -0
  109. package/lib/aws/compute/event-sources/s3-onfailure-destination.d.ts +13 -0
  110. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +26 -0
  111. package/lib/aws/compute/event-sources/s3.d.ts +24 -0
  112. package/lib/aws/compute/event-sources/s3.js +25 -0
  113. package/lib/aws/compute/event-sources/sqs-dlq.d.ts +13 -0
  114. package/lib/aws/compute/event-sources/sqs-dlq.js +26 -0
  115. package/lib/aws/compute/event-sources/sqs.d.ts +75 -0
  116. package/lib/aws/compute/event-sources/sqs.js +84 -0
  117. package/lib/aws/compute/fields.d.ts +367 -0
  118. package/lib/aws/compute/fields.js +546 -0
  119. package/lib/aws/compute/function-alias.d.ts +148 -0
  120. package/lib/aws/compute/function-alias.js +176 -0
  121. package/lib/aws/compute/function-base.d.ts +314 -0
  122. package/lib/aws/compute/function-base.js +421 -0
  123. package/lib/aws/compute/function-destination.d.ts +42 -0
  124. package/lib/aws/compute/function-destination.js +18 -0
  125. package/lib/aws/compute/function-destinations/event-bridge.d.ts +19 -0
  126. package/lib/aws/compute/function-destinations/event-bridge.js +46 -0
  127. package/lib/aws/compute/function-destinations/function.d.ts +34 -0
  128. package/lib/aws/compute/function-destinations/function.js +55 -0
  129. package/lib/aws/compute/function-destinations/index.d.ts +3 -0
  130. package/lib/aws/compute/function-destinations/index.js +22 -0
  131. package/lib/aws/compute/function-destinations/sqs.d.ts +14 -0
  132. package/lib/aws/compute/function-destinations/sqs.js +27 -0
  133. package/lib/aws/compute/function-nodejs.d.ts +55 -0
  134. package/lib/aws/compute/function-nodejs.js +70 -0
  135. package/lib/aws/compute/function-permission.d.ts +83 -0
  136. package/lib/aws/compute/function-permission.js +3 -0
  137. package/lib/aws/compute/function-url.d.ts +210 -0
  138. package/lib/aws/compute/function-url.js +148 -0
  139. package/lib/aws/compute/function-vpc-config.generated.d.ts +36 -0
  140. package/lib/aws/compute/function-vpc-config.generated.js +3 -0
  141. package/lib/aws/compute/function.d.ts +492 -0
  142. package/lib/aws/compute/function.js +692 -0
  143. package/lib/aws/compute/index.d.ts +42 -0
  144. package/lib/aws/compute/index.js +64 -0
  145. package/lib/aws/compute/private/intrinstics.d.ts +86 -0
  146. package/lib/aws/compute/private/intrinstics.js +220 -0
  147. package/lib/aws/compute/private/json-path.d.ts +57 -0
  148. package/lib/aws/compute/private/json-path.js +351 -0
  149. package/lib/aws/compute/private/util.d.ts +1 -0
  150. package/lib/aws/compute/private/util.js +38 -0
  151. package/lib/aws/compute/state-graph.d.ts +100 -0
  152. package/lib/aws/compute/state-graph.js +177 -0
  153. package/lib/aws/compute/state-machine-fragment.d.ts +61 -0
  154. package/lib/aws/compute/state-machine-fragment.js +56 -0
  155. package/lib/aws/compute/state-machine.d.ts +323 -0
  156. package/lib/aws/compute/state-machine.js +392 -0
  157. package/lib/aws/compute/states/choice.d.ts +94 -0
  158. package/lib/aws/compute/states/choice.js +81 -0
  159. package/lib/aws/compute/states/custom-state.d.ts +55 -0
  160. package/lib/aws/compute/states/custom-state.js +114 -0
  161. package/lib/aws/compute/states/distributed-map/item-batcher.d.ts +64 -0
  162. package/lib/aws/compute/states/distributed-map/item-batcher.js +58 -0
  163. package/lib/aws/compute/states/distributed-map/item-reader.d.ts +256 -0
  164. package/lib/aws/compute/states/distributed-map/item-reader.js +253 -0
  165. package/lib/aws/compute/states/distributed-map/result-writer.d.ts +41 -0
  166. package/lib/aws/compute/states/distributed-map/result-writer.js +66 -0
  167. package/lib/aws/compute/states/distributed-map.d.ts +153 -0
  168. package/lib/aws/compute/states/distributed-map.js +207 -0
  169. package/lib/aws/compute/states/fail.d.ts +74 -0
  170. package/lib/aws/compute/states/fail.js +83 -0
  171. package/lib/aws/compute/states/map-base.d.ts +145 -0
  172. package/lib/aws/compute/states/map-base.js +109 -0
  173. package/lib/aws/compute/states/map.d.ts +76 -0
  174. package/lib/aws/compute/states/map.js +110 -0
  175. package/lib/aws/compute/states/parallel.d.ts +113 -0
  176. package/lib/aws/compute/states/parallel.js +100 -0
  177. package/lib/aws/compute/states/pass.d.ts +122 -0
  178. package/lib/aws/compute/states/pass.js +99 -0
  179. package/lib/aws/compute/states/private/state-type.d.ts +13 -0
  180. package/lib/aws/compute/states/private/state-type.js +19 -0
  181. package/lib/aws/compute/states/state.d.ts +276 -0
  182. package/lib/aws/compute/states/state.js +482 -0
  183. package/lib/aws/compute/states/succeed.d.ts +51 -0
  184. package/lib/aws/compute/states/succeed.js +32 -0
  185. package/lib/aws/compute/states/task-base.d.ts +225 -0
  186. package/lib/aws/compute/states/task-base.js +160 -0
  187. package/lib/aws/compute/states/task.d.ts +127 -0
  188. package/lib/aws/compute/states/task.js +92 -0
  189. package/lib/aws/compute/states/wait.d.ts +78 -0
  190. package/lib/aws/compute/states/wait.js +90 -0
  191. package/lib/aws/compute/step-functions-task.d.ts +78 -0
  192. package/lib/aws/compute/step-functions-task.js +27 -0
  193. package/lib/aws/compute/task-credentials.d.ts +45 -0
  194. package/lib/aws/compute/task-credentials.js +52 -0
  195. package/lib/aws/compute/task-input.d.ts +86 -0
  196. package/lib/aws/compute/task-input.js +107 -0
  197. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.d.ts +73 -0
  198. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +69 -0
  199. package/lib/aws/compute/tasks/eventbridge/put-events.d.ts +74 -0
  200. package/lib/aws/compute/tasks/eventbridge/put-events.js +94 -0
  201. package/lib/aws/compute/tasks/http/invoke.d.ts +104 -0
  202. package/lib/aws/compute/tasks/http/invoke.js +117 -0
  203. package/lib/aws/compute/tasks/index.d.ts +7 -0
  204. package/lib/aws/compute/tasks/index.js +42 -0
  205. package/lib/aws/compute/tasks/lambda/invoke.d.ts +106 -0
  206. package/lib/aws/compute/tasks/lambda/invoke.js +125 -0
  207. package/lib/aws/compute/tasks/private/task-utils.d.ts +8 -0
  208. package/lib/aws/compute/tasks/private/task-utils.js +36 -0
  209. package/lib/aws/compute/tasks/resource-arn-suffix.d.ts +3 -0
  210. package/lib/aws/compute/tasks/resource-arn-suffix.js +25 -0
  211. package/lib/aws/compute/tasks/sqs/send-message.d.ts +62 -0
  212. package/lib/aws/compute/tasks/sqs/send-message.js +70 -0
  213. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.d.ts +36 -0
  214. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +45 -0
  215. package/lib/aws/compute/tasks/stepfunctions/start-execution.d.ts +63 -0
  216. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +123 -0
  217. package/lib/aws/compute/types.d.ts +214 -0
  218. package/lib/aws/compute/types.js +103 -0
  219. package/lib/aws/compute/util.d.ts +12 -0
  220. package/lib/aws/compute/util.js +29 -0
  221. package/lib/aws/edge/certificate.d.ts +144 -0
  222. package/lib/aws/edge/certificate.js +191 -0
  223. package/lib/aws/edge/distribution.d.ts +505 -0
  224. package/lib/aws/edge/distribution.js +444 -0
  225. package/lib/aws/edge/dns-alias-record-targets.d.ts +29 -0
  226. package/lib/aws/edge/dns-alias-record-targets.js +46 -0
  227. package/lib/aws/edge/dns-record.d.ts +536 -0
  228. package/lib/aws/edge/dns-record.js +532 -0
  229. package/lib/aws/edge/dns-zone.d.ts +169 -0
  230. package/lib/aws/edge/dns-zone.js +149 -0
  231. package/lib/aws/edge/function.d.ts +185 -0
  232. package/lib/aws/edge/function.js +141 -0
  233. package/lib/aws/edge/index.d.ts +8 -0
  234. package/lib/aws/edge/index.js +25 -0
  235. package/lib/aws/edge/key-value-store.d.ts +162 -0
  236. package/lib/aws/edge/key-value-store.js +163 -0
  237. package/lib/aws/edge/origin.d.ts +160 -0
  238. package/lib/aws/edge/origin.js +245 -0
  239. package/lib/aws/encryption/alias.d.ts +137 -0
  240. package/lib/aws/encryption/alias.js +216 -0
  241. package/lib/aws/encryption/index.d.ts +4 -0
  242. package/lib/aws/encryption/index.js +21 -0
  243. package/lib/aws/encryption/key-lookup.d.ts +11 -0
  244. package/lib/aws/encryption/key-lookup.js +4 -0
  245. package/lib/aws/encryption/key.d.ts +461 -0
  246. package/lib/aws/encryption/key.js +586 -0
  247. package/lib/aws/encryption/private/perms.d.ts +5 -0
  248. package/lib/aws/encryption/private/perms.js +30 -0
  249. package/lib/aws/encryption/via-service-principal.d.ts +11 -0
  250. package/lib/aws/encryption/via-service-principal.js +39 -0
  251. package/lib/aws/iam/grant.d.ts +221 -0
  252. package/lib/aws/iam/grant.js +239 -0
  253. package/lib/aws/iam/identity-base.d.ts +20 -0
  254. package/lib/aws/iam/identity-base.js +3 -0
  255. package/lib/aws/iam/index.d.ts +16 -0
  256. package/lib/aws/iam/index.js +34 -0
  257. package/lib/aws/iam/managed-policy.d.ts +227 -0
  258. package/lib/aws/iam/managed-policy.js +237 -0
  259. package/lib/aws/iam/oidc-provider.d.ts +120 -0
  260. package/lib/aws/iam/oidc-provider.js +82 -0
  261. package/lib/aws/iam/policy-document-config.generated.d.ts +78 -0
  262. package/lib/aws/iam/policy-document-config.generated.js +3 -0
  263. package/lib/aws/iam/policy-document.d.ts +150 -0
  264. package/lib/aws/iam/policy-document.js +172 -0
  265. package/lib/aws/iam/policy-statement-props.generated.d.ts +55 -0
  266. package/lib/aws/iam/policy-statement-props.generated.js +3 -0
  267. package/lib/aws/iam/policy-statement.d.ts +451 -0
  268. package/lib/aws/iam/policy-statement.js +947 -0
  269. package/lib/aws/iam/policy.d.ts +122 -0
  270. package/lib/aws/iam/policy.js +192 -0
  271. package/lib/aws/iam/principals.d.ts +668 -0
  272. package/lib/aws/iam/principals.js +1032 -0
  273. package/lib/aws/iam/private/adapter.d.ts +21 -0
  274. package/lib/aws/iam/private/adapter.js +51 -0
  275. package/lib/aws/iam/private/assume-role-policy.d.ts +8 -0
  276. package/lib/aws/iam/private/assume-role-policy.js +27 -0
  277. package/lib/aws/iam/private/comparable-principal.d.ts +6 -0
  278. package/lib/aws/iam/private/comparable-principal.js +20 -0
  279. package/lib/aws/iam/private/immutable-role.d.ts +43 -0
  280. package/lib/aws/iam/private/immutable-role.js +76 -0
  281. package/lib/aws/iam/private/imported-role.d.ts +49 -0
  282. package/lib/aws/iam/private/imported-role.js +103 -0
  283. package/lib/aws/iam/private/merge-statements.d.ts +44 -0
  284. package/lib/aws/iam/private/merge-statements.js +214 -0
  285. package/lib/aws/iam/private/postprocess-policy-document.d.ts +15 -0
  286. package/lib/aws/iam/private/postprocess-policy-document.js +102 -0
  287. package/lib/aws/iam/private/util.d.ts +37 -0
  288. package/lib/aws/iam/private/util.js +87 -0
  289. package/lib/aws/iam/role.d.ts +425 -0
  290. package/lib/aws/iam/role.js +407 -0
  291. package/lib/aws/iam/saml-provider.d.ts +79 -0
  292. package/lib/aws/iam/saml-provider.js +79 -0
  293. package/lib/aws/iam/unknown-principal.d.ts +32 -0
  294. package/lib/aws/iam/unknown-principal.js +45 -0
  295. package/lib/aws/iam/utils.d.ts +12 -0
  296. package/lib/aws/iam/utils.js +41 -0
  297. package/lib/aws/index.d.ts +13 -0
  298. package/lib/aws/index.js +34 -0
  299. package/lib/aws/log-retention.d.ts +97 -0
  300. package/lib/aws/log-retention.js +103 -0
  301. package/lib/aws/network/index.d.ts +4 -0
  302. package/lib/aws/network/index.js +21 -0
  303. package/lib/aws/network/network.d.ts +77 -0
  304. package/lib/aws/network/network.js +3 -0
  305. package/lib/aws/network/simple-ipv4-vpc.d.ts +84 -0
  306. package/lib/aws/network/simple-ipv4-vpc.js +236 -0
  307. package/lib/aws/network/subnet-group.d.ts +42 -0
  308. package/lib/aws/network/subnet-group.js +72 -0
  309. package/lib/aws/network/subnet.d.ts +95 -0
  310. package/lib/aws/network/subnet.js +123 -0
  311. package/lib/aws/notify/archive.d.ts +77 -0
  312. package/lib/aws/notify/archive.js +62 -0
  313. package/lib/aws/notify/connection.d.ts +276 -0
  314. package/lib/aws/notify/connection.js +261 -0
  315. package/lib/aws/notify/event-bus.d.ts +298 -0
  316. package/lib/aws/notify/event-bus.js +326 -0
  317. package/lib/aws/notify/event-pattern.d.ts +220 -0
  318. package/lib/aws/notify/event-pattern.js +197 -0
  319. package/lib/aws/notify/index.d.ts +15 -0
  320. package/lib/aws/notify/index.js +35 -0
  321. package/lib/aws/notify/input.d.ts +126 -0
  322. package/lib/aws/notify/input.js +282 -0
  323. package/lib/aws/notify/kinesis-canned-metrics.generated.d.ts +68 -0
  324. package/lib/aws/notify/kinesis-canned-metrics.generated.js +103 -0
  325. package/lib/aws/notify/kinesis-fixed-canned-metrics.d.ts +195 -0
  326. package/lib/aws/notify/kinesis-fixed-canned-metrics.js +155 -0
  327. package/lib/aws/notify/kinesis-stream.d.ts +705 -0
  328. package/lib/aws/notify/kinesis-stream.js +541 -0
  329. package/lib/aws/notify/on-event-options.d.ts +54 -0
  330. package/lib/aws/notify/on-event-options.js +3 -0
  331. package/lib/aws/notify/queue-config.generated.d.ts +85 -0
  332. package/lib/aws/notify/queue-config.generated.js +3 -0
  333. package/lib/aws/notify/queue-policy.d.ts +35 -0
  334. package/lib/aws/notify/queue-policy.js +39 -0
  335. package/lib/aws/notify/queue.d.ts +355 -0
  336. package/lib/aws/notify/queue.js +305 -0
  337. package/lib/aws/notify/resource-policy.d.ts +41 -0
  338. package/lib/aws/notify/resource-policy.js +43 -0
  339. package/lib/aws/notify/rule.d.ts +153 -0
  340. package/lib/aws/notify/rule.js +227 -0
  341. package/lib/aws/notify/schedule.d.ts +83 -0
  342. package/lib/aws/notify/schedule.js +116 -0
  343. package/lib/aws/notify/target.d.ts +102 -0
  344. package/lib/aws/notify/target.js +3 -0
  345. package/lib/aws/notify/targets/event-bus.d.ts +39 -0
  346. package/lib/aws/notify/targets/event-bus.js +40 -0
  347. package/lib/aws/notify/targets/function.d.ts +31 -0
  348. package/lib/aws/notify/targets/function.js +36 -0
  349. package/lib/aws/notify/targets/index.d.ts +6 -0
  350. package/lib/aws/notify/targets/index.js +37 -0
  351. package/lib/aws/notify/targets/log-group.d.ts +89 -0
  352. package/lib/aws/notify/targets/log-group.js +110 -0
  353. package/lib/aws/notify/targets/sqs.d.ts +45 -0
  354. package/lib/aws/notify/targets/sqs.js +73 -0
  355. package/lib/aws/notify/targets/state-machine.d.ts +36 -0
  356. package/lib/aws/notify/targets/state-machine.js +39 -0
  357. package/lib/aws/notify/targets/util.d.ts +71 -0
  358. package/lib/aws/notify/targets/util.js +130 -0
  359. package/lib/aws/notify/util.d.ts +13 -0
  360. package/lib/aws/notify/util.js +69 -0
  361. package/lib/aws/provider-config.generated.d.ts +220 -0
  362. package/lib/aws/provider-config.generated.js +3 -0
  363. package/lib/aws/storage/bucket-destination.d.ts +41 -0
  364. package/lib/aws/storage/bucket-destination.js +13 -0
  365. package/lib/aws/storage/bucket-notifications.d.ts +58 -0
  366. package/lib/aws/storage/bucket-notifications.js +169 -0
  367. package/lib/aws/storage/bucket-perms.d.ts +9 -0
  368. package/lib/aws/storage/bucket-perms.js +33 -0
  369. package/lib/aws/storage/bucket-policy.d.ts +51 -0
  370. package/lib/aws/storage/bucket-policy.js +53 -0
  371. package/lib/aws/storage/bucket-source.d.ts +41 -0
  372. package/lib/aws/storage/bucket-source.js +79 -0
  373. package/lib/aws/storage/bucket.d.ts +941 -0
  374. package/lib/aws/storage/bucket.js +869 -0
  375. package/lib/aws/storage/cors-config.generated.d.ts +57 -0
  376. package/lib/aws/storage/cors-config.generated.js +3 -0
  377. package/lib/aws/storage/cors-rule-config.generated.d.ts +38 -0
  378. package/lib/aws/storage/cors-rule-config.generated.js +3 -0
  379. package/lib/aws/storage/index.d.ts +12 -0
  380. package/lib/aws/storage/index.js +31 -0
  381. package/lib/aws/storage/lifecycle-config.generated.d.ts +55 -0
  382. package/lib/aws/storage/lifecycle-config.generated.js +3 -0
  383. package/lib/aws/storage/notification-targets/function.d.ts +11 -0
  384. package/lib/aws/storage/notification-targets/function.js +48 -0
  385. package/lib/aws/storage/notification-targets/index.d.ts +2 -0
  386. package/lib/aws/storage/notification-targets/index.js +21 -0
  387. package/lib/aws/storage/notification-targets/queue.d.ts +15 -0
  388. package/lib/aws/storage/notification-targets/queue.js +58 -0
  389. package/lib/aws/storage/origin-access-identity.d.ts +91 -0
  390. package/lib/aws/storage/origin-access-identity.js +76 -0
  391. package/lib/aws/storage/util.d.ts +40 -0
  392. package/lib/aws/storage/util.js +85 -0
  393. package/lib/aws/storage/website-config.generated.d.ts +73 -0
  394. package/lib/aws/storage/website-config.generated.js +3 -0
  395. package/lib/aws/util.d.ts +4 -0
  396. package/lib/aws/util.js +25 -0
  397. package/lib/construct-base.d.ts +69 -0
  398. package/lib/construct-base.js +89 -0
  399. package/lib/duration.d.ts +160 -0
  400. package/lib/duration.js +327 -0
  401. package/lib/index.d.ts +5 -0
  402. package/lib/index.js +24 -0
  403. package/lib/private/index.d.ts +2 -0
  404. package/lib/private/index.js +19 -0
  405. package/lib/private/terraform-dependables-aspect.d.ts +20 -0
  406. package/lib/private/terraform-dependables-aspect.js +95 -0
  407. package/lib/private/unique-resource-name.d.ts +9 -0
  408. package/lib/private/unique-resource-name.js +145 -0
  409. package/lib/size.d.ts +146 -0
  410. package/lib/size.js +220 -0
  411. package/lib/stack-base.d.ts +188 -0
  412. package/lib/stack-base.js +183 -0
  413. package/lib/token.d.ts +32 -0
  414. package/lib/token.js +54 -0
  415. package/node_modules/camel-case/LICENSE +21 -0
  416. package/node_modules/camel-case/README.md +47 -0
  417. package/node_modules/camel-case/dist/index.d.ts +5 -0
  418. package/node_modules/camel-case/dist/index.js +23 -0
  419. package/node_modules/camel-case/dist/index.js.map +1 -0
  420. package/node_modules/camel-case/dist/index.spec.d.ts +1 -0
  421. package/node_modules/camel-case/dist/index.spec.js +26 -0
  422. package/node_modules/camel-case/dist/index.spec.js.map +1 -0
  423. package/node_modules/camel-case/dist.es2015/index.d.ts +5 -0
  424. package/node_modules/camel-case/dist.es2015/index.js +17 -0
  425. package/node_modules/camel-case/dist.es2015/index.js.map +1 -0
  426. package/node_modules/camel-case/dist.es2015/index.spec.d.ts +1 -0
  427. package/node_modules/camel-case/dist.es2015/index.spec.js +24 -0
  428. package/node_modules/camel-case/dist.es2015/index.spec.js.map +1 -0
  429. package/node_modules/camel-case/package.json +89 -0
  430. package/node_modules/capital-case/LICENSE +21 -0
  431. package/node_modules/capital-case/README.md +37 -0
  432. package/node_modules/capital-case/dist/index.d.ts +4 -0
  433. package/node_modules/capital-case/dist/index.js +16 -0
  434. package/node_modules/capital-case/dist/index.js.map +1 -0
  435. package/node_modules/capital-case/dist/index.spec.d.ts +1 -0
  436. package/node_modules/capital-case/dist/index.spec.js +24 -0
  437. package/node_modules/capital-case/dist/index.spec.js.map +1 -0
  438. package/node_modules/capital-case/dist.es2015/index.d.ts +4 -0
  439. package/node_modules/capital-case/dist.es2015/index.js +11 -0
  440. package/node_modules/capital-case/dist.es2015/index.js.map +1 -0
  441. package/node_modules/capital-case/dist.es2015/index.spec.d.ts +1 -0
  442. package/node_modules/capital-case/dist.es2015/index.spec.js +22 -0
  443. package/node_modules/capital-case/dist.es2015/index.spec.js.map +1 -0
  444. package/node_modules/capital-case/package.json +90 -0
  445. package/node_modules/change-case/LICENSE +21 -0
  446. package/node_modules/change-case/README.md +44 -0
  447. package/node_modules/change-case/dist/index.d.ts +11 -0
  448. package/node_modules/change-case/dist/index.js +15 -0
  449. package/node_modules/change-case/dist/index.js.map +1 -0
  450. package/node_modules/change-case/dist/index.spec.d.ts +1 -0
  451. package/node_modules/change-case/dist/index.spec.js +9 -0
  452. package/node_modules/change-case/dist/index.spec.js.map +1 -0
  453. package/node_modules/change-case/dist.es2015/index.d.ts +11 -0
  454. package/node_modules/change-case/dist.es2015/index.js +12 -0
  455. package/node_modules/change-case/dist.es2015/index.js.map +1 -0
  456. package/node_modules/change-case/dist.es2015/index.spec.d.ts +1 -0
  457. package/node_modules/change-case/dist.es2015/index.spec.js +7 -0
  458. package/node_modules/change-case/dist.es2015/index.spec.js.map +1 -0
  459. package/node_modules/change-case/package.json +101 -0
  460. package/node_modules/constant-case/LICENSE +21 -0
  461. package/node_modules/constant-case/README.md +37 -0
  462. package/node_modules/constant-case/dist/index.d.ts +3 -0
  463. package/node_modules/constant-case/dist/index.js +12 -0
  464. package/node_modules/constant-case/dist/index.js.map +1 -0
  465. package/node_modules/constant-case/dist/index.spec.d.ts +1 -0
  466. package/node_modules/constant-case/dist/index.spec.js +26 -0
  467. package/node_modules/constant-case/dist/index.spec.js.map +1 -0
  468. package/node_modules/constant-case/dist.es2015/index.d.ts +3 -0
  469. package/node_modules/constant-case/dist.es2015/index.js +8 -0
  470. package/node_modules/constant-case/dist.es2015/index.js.map +1 -0
  471. package/node_modules/constant-case/dist.es2015/index.spec.d.ts +1 -0
  472. package/node_modules/constant-case/dist.es2015/index.spec.js +24 -0
  473. package/node_modules/constant-case/dist.es2015/index.spec.js.map +1 -0
  474. package/node_modules/constant-case/package.json +90 -0
  475. package/node_modules/dot-case/LICENSE +21 -0
  476. package/node_modules/dot-case/README.md +37 -0
  477. package/node_modules/dot-case/dist/index.d.ts +3 -0
  478. package/node_modules/dot-case/dist/index.js +11 -0
  479. package/node_modules/dot-case/dist/index.js.map +1 -0
  480. package/node_modules/dot-case/dist/index.spec.d.ts +1 -0
  481. package/node_modules/dot-case/dist/index.spec.js +26 -0
  482. package/node_modules/dot-case/dist/index.spec.js.map +1 -0
  483. package/node_modules/dot-case/dist.es2015/index.d.ts +3 -0
  484. package/node_modules/dot-case/dist.es2015/index.js +7 -0
  485. package/node_modules/dot-case/dist.es2015/index.js.map +1 -0
  486. package/node_modules/dot-case/dist.es2015/index.spec.d.ts +1 -0
  487. package/node_modules/dot-case/dist.es2015/index.spec.js +24 -0
  488. package/node_modules/dot-case/dist.es2015/index.spec.js.map +1 -0
  489. package/node_modules/dot-case/package.json +89 -0
  490. package/node_modules/esbuild-wasm/LICENSE.md +21 -0
  491. package/node_modules/esbuild-wasm/README.md +3 -0
  492. package/node_modules/esbuild-wasm/bin/esbuild +91 -0
  493. package/node_modules/esbuild-wasm/esbuild.wasm +0 -0
  494. package/node_modules/esbuild-wasm/esm/browser.d.ts +705 -0
  495. package/node_modules/esbuild-wasm/esm/browser.js +2370 -0
  496. package/node_modules/esbuild-wasm/esm/browser.min.js +20 -0
  497. package/node_modules/esbuild-wasm/lib/browser.d.ts +705 -0
  498. package/node_modules/esbuild-wasm/lib/browser.js +2415 -0
  499. package/node_modules/esbuild-wasm/lib/browser.min.js +22 -0
  500. package/node_modules/esbuild-wasm/lib/main.d.ts +705 -0
  501. package/node_modules/esbuild-wasm/lib/main.js +2051 -0
  502. package/node_modules/esbuild-wasm/package.json +19 -0
  503. package/node_modules/esbuild-wasm/wasm_exec.js +561 -0
  504. package/node_modules/esbuild-wasm/wasm_exec_node.js +39 -0
  505. package/node_modules/header-case/LICENSE +21 -0
  506. package/node_modules/header-case/README.md +37 -0
  507. package/node_modules/header-case/dist/index.d.ts +3 -0
  508. package/node_modules/header-case/dist/index.js +11 -0
  509. package/node_modules/header-case/dist/index.js.map +1 -0
  510. package/node_modules/header-case/dist/index.spec.d.ts +1 -0
  511. package/node_modules/header-case/dist/index.spec.js +24 -0
  512. package/node_modules/header-case/dist/index.spec.js.map +1 -0
  513. package/node_modules/header-case/dist.es2015/index.d.ts +3 -0
  514. package/node_modules/header-case/dist.es2015/index.js +7 -0
  515. package/node_modules/header-case/dist.es2015/index.js.map +1 -0
  516. package/node_modules/header-case/dist.es2015/index.spec.d.ts +1 -0
  517. package/node_modules/header-case/dist.es2015/index.spec.js +22 -0
  518. package/node_modules/header-case/dist.es2015/index.spec.js.map +1 -0
  519. package/node_modules/header-case/package.json +89 -0
  520. package/node_modules/lower-case/LICENSE +21 -0
  521. package/node_modules/lower-case/README.md +35 -0
  522. package/node_modules/lower-case/dist/index.d.ts +8 -0
  523. package/node_modules/lower-case/dist/index.js +53 -0
  524. package/node_modules/lower-case/dist/index.js.map +1 -0
  525. package/node_modules/lower-case/dist/index.spec.d.ts +1 -0
  526. package/node_modules/lower-case/dist/index.spec.js +36 -0
  527. package/node_modules/lower-case/dist/index.spec.js.map +1 -0
  528. package/node_modules/lower-case/dist.es2015/index.d.ts +8 -0
  529. package/node_modules/lower-case/dist.es2015/index.js +48 -0
  530. package/node_modules/lower-case/dist.es2015/index.js.map +1 -0
  531. package/node_modules/lower-case/dist.es2015/index.spec.d.ts +1 -0
  532. package/node_modules/lower-case/dist.es2015/index.spec.js +34 -0
  533. package/node_modules/lower-case/dist.es2015/index.spec.js.map +1 -0
  534. package/node_modules/lower-case/package.json +87 -0
  535. package/node_modules/mime-db/HISTORY.md +507 -0
  536. package/node_modules/mime-db/LICENSE +23 -0
  537. package/node_modules/mime-db/README.md +100 -0
  538. package/node_modules/mime-db/db.json +8519 -0
  539. package/node_modules/mime-db/index.js +12 -0
  540. package/node_modules/mime-db/package.json +60 -0
  541. package/node_modules/mime-types/HISTORY.md +397 -0
  542. package/node_modules/mime-types/LICENSE +23 -0
  543. package/node_modules/mime-types/README.md +113 -0
  544. package/node_modules/mime-types/index.js +188 -0
  545. package/node_modules/mime-types/package.json +44 -0
  546. package/node_modules/no-case/LICENSE +21 -0
  547. package/node_modules/no-case/README.md +37 -0
  548. package/node_modules/no-case/dist/index.d.ts +10 -0
  549. package/node_modules/no-case/dist/index.js +35 -0
  550. package/node_modules/no-case/dist/index.js.map +1 -0
  551. package/node_modules/no-case/dist/index.spec.d.ts +1 -0
  552. package/node_modules/no-case/dist/index.spec.js +59 -0
  553. package/node_modules/no-case/dist/index.spec.js.map +1 -0
  554. package/node_modules/no-case/dist.es2015/index.d.ts +10 -0
  555. package/node_modules/no-case/dist.es2015/index.js +31 -0
  556. package/node_modules/no-case/dist.es2015/index.js.map +1 -0
  557. package/node_modules/no-case/dist.es2015/index.spec.d.ts +1 -0
  558. package/node_modules/no-case/dist.es2015/index.spec.js +57 -0
  559. package/node_modules/no-case/dist.es2015/index.spec.js.map +1 -0
  560. package/node_modules/no-case/package.json +85 -0
  561. package/node_modules/param-case/LICENSE +21 -0
  562. package/node_modules/param-case/README.md +37 -0
  563. package/node_modules/param-case/dist/index.d.ts +3 -0
  564. package/node_modules/param-case/dist/index.js +11 -0
  565. package/node_modules/param-case/dist/index.js.map +1 -0
  566. package/node_modules/param-case/dist/index.spec.d.ts +1 -0
  567. package/node_modules/param-case/dist/index.spec.js +24 -0
  568. package/node_modules/param-case/dist/index.spec.js.map +1 -0
  569. package/node_modules/param-case/dist.es2015/index.d.ts +3 -0
  570. package/node_modules/param-case/dist.es2015/index.js +7 -0
  571. package/node_modules/param-case/dist.es2015/index.js.map +1 -0
  572. package/node_modules/param-case/dist.es2015/index.spec.d.ts +1 -0
  573. package/node_modules/param-case/dist.es2015/index.spec.js +22 -0
  574. package/node_modules/param-case/dist.es2015/index.spec.js.map +1 -0
  575. package/node_modules/param-case/package.json +91 -0
  576. package/node_modules/pascal-case/LICENSE +21 -0
  577. package/node_modules/pascal-case/README.md +47 -0
  578. package/node_modules/pascal-case/dist/index.d.ts +5 -0
  579. package/node_modules/pascal-case/dist/index.js +24 -0
  580. package/node_modules/pascal-case/dist/index.js.map +1 -0
  581. package/node_modules/pascal-case/dist/index.spec.d.ts +1 -0
  582. package/node_modules/pascal-case/dist/index.spec.js +25 -0
  583. package/node_modules/pascal-case/dist/index.spec.js.map +1 -0
  584. package/node_modules/pascal-case/dist.es2015/index.d.ts +5 -0
  585. package/node_modules/pascal-case/dist.es2015/index.js +18 -0
  586. package/node_modules/pascal-case/dist.es2015/index.js.map +1 -0
  587. package/node_modules/pascal-case/dist.es2015/index.spec.d.ts +1 -0
  588. package/node_modules/pascal-case/dist.es2015/index.spec.js +23 -0
  589. package/node_modules/pascal-case/dist.es2015/index.spec.js.map +1 -0
  590. package/node_modules/pascal-case/package.json +90 -0
  591. package/node_modules/path-case/LICENSE +21 -0
  592. package/node_modules/path-case/README.md +37 -0
  593. package/node_modules/path-case/dist/index.d.ts +3 -0
  594. package/node_modules/path-case/dist/index.js +11 -0
  595. package/node_modules/path-case/dist/index.js.map +1 -0
  596. package/node_modules/path-case/dist/index.spec.d.ts +1 -0
  597. package/node_modules/path-case/dist/index.spec.js +24 -0
  598. package/node_modules/path-case/dist/index.spec.js.map +1 -0
  599. package/node_modules/path-case/dist.es2015/index.d.ts +3 -0
  600. package/node_modules/path-case/dist.es2015/index.js +7 -0
  601. package/node_modules/path-case/dist.es2015/index.js.map +1 -0
  602. package/node_modules/path-case/dist.es2015/index.spec.d.ts +1 -0
  603. package/node_modules/path-case/dist.es2015/index.spec.js +22 -0
  604. package/node_modules/path-case/dist.es2015/index.spec.js.map +1 -0
  605. package/node_modules/path-case/package.json +88 -0
  606. package/node_modules/sentence-case/LICENSE +21 -0
  607. package/node_modules/sentence-case/README.md +37 -0
  608. package/node_modules/sentence-case/dist/index.d.ts +4 -0
  609. package/node_modules/sentence-case/dist/index.js +19 -0
  610. package/node_modules/sentence-case/dist/index.js.map +1 -0
  611. package/node_modules/sentence-case/dist/index.spec.d.ts +1 -0
  612. package/node_modules/sentence-case/dist/index.spec.js +24 -0
  613. package/node_modules/sentence-case/dist/index.spec.js.map +1 -0
  614. package/node_modules/sentence-case/dist.es2015/index.d.ts +4 -0
  615. package/node_modules/sentence-case/dist.es2015/index.js +14 -0
  616. package/node_modules/sentence-case/dist.es2015/index.js.map +1 -0
  617. package/node_modules/sentence-case/dist.es2015/index.spec.d.ts +1 -0
  618. package/node_modules/sentence-case/dist.es2015/index.spec.js +22 -0
  619. package/node_modules/sentence-case/dist.es2015/index.spec.js.map +1 -0
  620. package/node_modules/sentence-case/package.json +89 -0
  621. package/node_modules/snake-case/LICENSE +21 -0
  622. package/node_modules/snake-case/README.md +37 -0
  623. package/node_modules/snake-case/dist/index.d.ts +3 -0
  624. package/node_modules/snake-case/dist/index.js +11 -0
  625. package/node_modules/snake-case/dist/index.js.map +1 -0
  626. package/node_modules/snake-case/dist/index.spec.d.ts +1 -0
  627. package/node_modules/snake-case/dist/index.spec.js +25 -0
  628. package/node_modules/snake-case/dist/index.spec.js.map +1 -0
  629. package/node_modules/snake-case/dist.es2015/index.d.ts +3 -0
  630. package/node_modules/snake-case/dist.es2015/index.js +7 -0
  631. package/node_modules/snake-case/dist.es2015/index.js.map +1 -0
  632. package/node_modules/snake-case/dist.es2015/index.spec.d.ts +1 -0
  633. package/node_modules/snake-case/dist.es2015/index.spec.js +23 -0
  634. package/node_modules/snake-case/dist.es2015/index.spec.js.map +1 -0
  635. package/node_modules/snake-case/package.json +90 -0
  636. package/node_modules/tslib/CopyrightNotice.txt +15 -0
  637. package/node_modules/tslib/LICENSE.txt +12 -0
  638. package/node_modules/tslib/README.md +164 -0
  639. package/node_modules/tslib/SECURITY.md +41 -0
  640. package/node_modules/tslib/modules/index.d.ts +37 -0
  641. package/node_modules/tslib/modules/index.js +68 -0
  642. package/node_modules/tslib/modules/package.json +3 -0
  643. package/node_modules/tslib/package.json +47 -0
  644. package/node_modules/tslib/tslib.d.ts +453 -0
  645. package/node_modules/tslib/tslib.es6.html +1 -0
  646. package/node_modules/tslib/tslib.es6.js +374 -0
  647. package/node_modules/tslib/tslib.es6.mjs +373 -0
  648. package/node_modules/tslib/tslib.html +1 -0
  649. package/node_modules/tslib/tslib.js +424 -0
  650. package/node_modules/upper-case/README.md +34 -0
  651. package/node_modules/upper-case/dist/index.d.ts +8 -0
  652. package/node_modules/upper-case/dist/index.js +49 -0
  653. package/node_modules/upper-case/dist/index.js.map +1 -0
  654. package/node_modules/upper-case/dist/index.spec.d.ts +1 -0
  655. package/node_modules/upper-case/dist/index.spec.js +34 -0
  656. package/node_modules/upper-case/dist/index.spec.js.map +1 -0
  657. package/node_modules/upper-case/dist.es2015/index.d.ts +8 -0
  658. package/node_modules/upper-case/dist.es2015/index.js +44 -0
  659. package/node_modules/upper-case/dist.es2015/index.js.map +1 -0
  660. package/node_modules/upper-case/dist.es2015/index.spec.d.ts +1 -0
  661. package/node_modules/upper-case/dist.es2015/index.spec.js +32 -0
  662. package/node_modules/upper-case/dist.es2015/index.spec.js.map +1 -0
  663. package/node_modules/upper-case/package.json +86 -0
  664. package/node_modules/upper-case-first/LICENSE +21 -0
  665. package/node_modules/upper-case-first/README.md +32 -0
  666. package/node_modules/upper-case-first/dist/index.d.ts +4 -0
  667. package/node_modules/upper-case-first/dist/index.js +11 -0
  668. package/node_modules/upper-case-first/dist/index.js.map +1 -0
  669. package/node_modules/upper-case-first/dist/index.spec.d.ts +1 -0
  670. package/node_modules/upper-case-first/dist/index.spec.js +20 -0
  671. package/node_modules/upper-case-first/dist/index.spec.js.map +1 -0
  672. package/node_modules/upper-case-first/dist.es2015/index.d.ts +4 -0
  673. package/node_modules/upper-case-first/dist.es2015/index.js +7 -0
  674. package/node_modules/upper-case-first/dist.es2015/index.js.map +1 -0
  675. package/node_modules/upper-case-first/dist.es2015/index.spec.d.ts +1 -0
  676. package/node_modules/upper-case-first/dist.es2015/index.spec.js +18 -0
  677. package/node_modules/upper-case-first/dist.es2015/index.spec.js.map +1 -0
  678. package/node_modules/upper-case-first/package.json +87 -0
  679. package/package.json +152 -0
  680. package/setup.js +2 -0
@@ -0,0 +1,444 @@
1
+ "use strict";
2
+ var _a, _b, _c;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ManagedResponseHeadersPolicy = exports.ManagedOriginRequestPolicy = exports.ManagedCachePolicy = exports.ViewerProtocolPolicy = exports.CachedMethods = exports.AllowedMethods = exports.SecurityPolicyProtocol = exports.SSLMethod = exports.PriceClass = exports.HttpVersion = exports.GeoRestrictionType = exports.Distribution = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const provider_aws_1 = require("@cdktf/provider-aws");
7
+ const cdktf_1 = require("cdktf");
8
+ const arn_1 = require("../arn");
9
+ const aws_construct_1 = require("../aws-construct");
10
+ const aws_stack_1 = require("../aws-stack");
11
+ /**
12
+ * Amazon Cloudfront Distribution
13
+ */
14
+ class Distribution extends aws_construct_1.AwsConstructBase {
15
+ get distributionOutputs() {
16
+ return this._outputs;
17
+ }
18
+ get outputs() {
19
+ return this.distributionOutputs;
20
+ }
21
+ get domainName() {
22
+ return this._domainName;
23
+ }
24
+ constructor(scope, name, props) {
25
+ super(scope, name, props);
26
+ this._origins = new Array();
27
+ this.additionalBehaviors = [];
28
+ if (props.certificate) {
29
+ const certificateRegion = aws_stack_1.AwsStack.ofAwsConstruct(this).splitArn(props.certificate.certificateArn, arn_1.ArnFormat.SLASH_RESOURCE_NAME).region;
30
+ if (!cdktf_1.Token.isUnresolved(certificateRegion) &&
31
+ certificateRegion !== "us-east-1") {
32
+ throw new Error(`Distribution certificates must be in the us-east-1 region and the certificate you provided is in ${certificateRegion}.`);
33
+ }
34
+ }
35
+ this.certificate = props.certificate;
36
+ this.errorResponses = props.errorResponses ?? [];
37
+ const defaultOriginId = this.addOrigin(props.defaultBehavior.origin);
38
+ if (props.additionalBehaviors) {
39
+ Object.entries(props.additionalBehaviors).forEach(([pathPattern, behaviorOptions]) => {
40
+ this.addBehavior(pathPattern, behaviorOptions.origin, behaviorOptions);
41
+ });
42
+ }
43
+ // Comments have an undocumented limit of 128 characters
44
+ const trimmedComment = props.comment && props.comment.length > 128
45
+ ? `${props.comment.slice(0, 128 - 3)}...`
46
+ : props.comment;
47
+ this.resource = new provider_aws_1.cloudfrontDistribution.CloudfrontDistribution(this, "Resource", {
48
+ enabled: props.enabled ?? true,
49
+ origin: cdktf_1.Lazy.anyValue({
50
+ produce: () => this._origins.map((o) =>
51
+ // Lazy producers need additional xxxToTerraform wrap
52
+ provider_aws_1.cloudfrontDistribution.cloudfrontDistributionOriginToTerraform(o.origin.render(o.id))),
53
+ }),
54
+ defaultCacheBehavior: this._renderDefaultCacheBehavior({
55
+ pathPattern: "*", // ignored for Default Cache Behavior
56
+ targetOriginId: defaultOriginId,
57
+ ...props.defaultBehavior,
58
+ }),
59
+ orderedCacheBehavior: cdktf_1.Lazy.anyValue({
60
+ produce: () => this.additionalBehaviors.map((b) =>
61
+ // Lazy producers need additional xxxToTerraform wrap
62
+ provider_aws_1.cloudfrontDistribution.cloudfrontDistributionOrderedCacheBehaviorToTerraform({
63
+ pathPattern: b.pathPattern,
64
+ ...this._renderDefaultCacheBehavior(b),
65
+ })),
66
+ }, { omitEmptyArray: true }),
67
+ aliases: props.aliases,
68
+ comment: trimmedComment,
69
+ customErrorResponse: this.renderErrorResponses(),
70
+ defaultRootObject: props.defaultRootObject,
71
+ httpVersion: props.httpVersion ?? HttpVersion.HTTP2,
72
+ priceClass: props.priceClass ?? undefined,
73
+ restrictions: this.renderRestrictions(props.geoRestriction),
74
+ viewerCertificate: this.renderViewerCertificate(this.certificate, props.minimumProtocolVersion, props.sslSupportMethod),
75
+ waitForDeployment: props.waitForDeployment,
76
+ });
77
+ this._domainName = this.resource.domainName;
78
+ this.hostedZoneId = this.resource.hostedZoneId;
79
+ this._outputs = {
80
+ id: this.resource.id,
81
+ hostedZoneId: this.resource.hostedZoneId,
82
+ status: this.resource.status,
83
+ arn: this.resource.arn,
84
+ domainName: this._domainName,
85
+ };
86
+ }
87
+ /**
88
+ * Add an Origin to this Distribution.
89
+ *
90
+ * @param origin The Origin to add.
91
+ * @param originId An optional id to use for the Origin or one will be generated.
92
+ */
93
+ addOrigin(origin, originId) {
94
+ const indexedOrigin = this._origins.find((originIndex) => originIndex.origin === origin);
95
+ if (indexedOrigin) {
96
+ if (originId && originId !== indexedOrigin.id) {
97
+ throw new Error(`Duplicate origin for ${indexedOrigin.id} and ${originId}.`);
98
+ }
99
+ return indexedOrigin.id;
100
+ }
101
+ const nextIndex = this._origins.length;
102
+ const id = originId ?? `origin-${nextIndex}`;
103
+ // ensure id (if provided) is unique within Distribution
104
+ if (this._origins.some((originIndex) => originIndex.id === id)) {
105
+ throw new Error(`Duplicate origin id ${id}. OriginIds must be unique within a distribution`);
106
+ }
107
+ this._origins.push({ origin, id });
108
+ return id;
109
+ }
110
+ renderErrorResponses() {
111
+ if (this.errorResponses.length === 0) {
112
+ return undefined;
113
+ }
114
+ return this.errorResponses.map((errorConfig) => {
115
+ if (!errorConfig.responseHttpStatus &&
116
+ !errorConfig.ttl &&
117
+ !errorConfig.responsePagePath) {
118
+ throw new Error("A custom error response without either a 'responseHttpStatus', 'ttl' or 'responsePagePath' is not valid.");
119
+ }
120
+ return {
121
+ errorCachingMinTtl: errorConfig.ttl?.toSeconds(),
122
+ errorCode: errorConfig.httpStatus,
123
+ responseCode: errorConfig.responsePagePath
124
+ ? (errorConfig.responseHttpStatus ?? errorConfig.httpStatus)
125
+ : errorConfig.responseHttpStatus,
126
+ responsePagePath: errorConfig.responsePagePath,
127
+ };
128
+ });
129
+ }
130
+ /**
131
+ * Adds a new behavior to this distribution for the given pathPattern.
132
+ *
133
+ * @param pathPattern the path pattern (e.g., 'images/*') that specifies which requests to apply the behavior to.
134
+ * @param origin the origin to use for this behavior
135
+ * @param behaviorOptions the options for the behavior at this path.
136
+ */
137
+ addBehavior(pathPattern, origin, behaviorOptions = {}) {
138
+ if (pathPattern === "*") {
139
+ throw new Error("Only the default behavior can have a path pattern of '*'");
140
+ }
141
+ const targetOriginId = this.addOrigin(origin);
142
+ this.additionalBehaviors.push({
143
+ pathPattern,
144
+ origin,
145
+ targetOriginId,
146
+ ...behaviorOptions,
147
+ });
148
+ }
149
+ /**
150
+ * Creates and returns the Terraform representation of this behavior.
151
+ * This renders as a "CloudfrontDistributionDefaultCacheBehavior"
152
+ * regardless if this is a default cache behavior or not, as the two
153
+ * are identical except the `pathPattern` is omitted for the default
154
+ * cache behavior.
155
+ *
156
+ * @internal
157
+ */
158
+ _renderDefaultCacheBehavior(props) {
159
+ // TODO: should it be possible to leave cachePolicy be undefined?
160
+ const managedCachePolicyName = props.cachePolicy ?? ManagedCachePolicy.CACHING_OPTIMIZED;
161
+ const cachePolicy = this.dataLookup(managedCachePolicyName, provider_aws_1.dataAwsCloudfrontCachePolicy.DataAwsCloudfrontCachePolicy, { name: managedCachePolicyName });
162
+ const originRequestPolicy = this.dataLookup(props.originRequestPolicy, provider_aws_1.dataAwsCloudfrontOriginRequestPolicy.DataAwsCloudfrontOriginRequestPolicy, { name: props.originRequestPolicy });
163
+ const responseHeadersPolicy = this.dataLookup(props.responseHeadersPolicy, provider_aws_1.dataAwsCloudfrontResponseHeadersPolicy.DataAwsCloudfrontResponseHeadersPolicy, { name: props.responseHeadersPolicy });
164
+ return {
165
+ targetOriginId: props.targetOriginId,
166
+ allowedMethods: props.allowedMethods?.methods ?? AllowedMethods.ALLOW_GET_HEAD.methods,
167
+ cachedMethods: props.cachedMethods?.methods ?? CachedMethods.CACHE_GET_HEAD.methods,
168
+ cachePolicyId: cachePolicy?.id,
169
+ compress: props.compress ?? true,
170
+ originRequestPolicyId: originRequestPolicy?.id,
171
+ responseHeadersPolicyId: responseHeadersPolicy?.id,
172
+ smoothStreaming: props.smoothStreaming,
173
+ viewerProtocolPolicy: props.viewerProtocolPolicy ?? ViewerProtocolPolicy.ALLOW_ALL,
174
+ };
175
+ }
176
+ renderRestrictions(geoRestriction) {
177
+ return geoRestriction
178
+ ? {
179
+ geoRestriction: {
180
+ restrictionType: geoRestriction.restrictionType,
181
+ locations: geoRestriction.restrictionType !== GeoRestrictionType.NONE
182
+ ? this.validateLocations(geoRestriction.locations)
183
+ : undefined,
184
+ },
185
+ }
186
+ : {
187
+ geoRestriction: {
188
+ restrictionType: GeoRestrictionType.NONE,
189
+ },
190
+ };
191
+ }
192
+ validateLocations(locations) {
193
+ const LOCATION_REGEX = /^[A-Z]{2}$/;
194
+ if (locations.length === 0) {
195
+ throw new Error("Should provide at least 1 location");
196
+ }
197
+ locations.forEach((location) => {
198
+ if (!LOCATION_REGEX.test(location)) {
199
+ // eslint-disable-next-line max-len
200
+ throw new Error(`Invalid location format for location: ${location}, location should be two-letter and uppercase country ISO 3166-1-alpha-2 code`);
201
+ }
202
+ });
203
+ return locations;
204
+ }
205
+ renderViewerCertificate(certificate, minimumProtocolVersionProp, sslSupportMethodProp) {
206
+ const minimumProtocolVersion = minimumProtocolVersionProp ?? SecurityPolicyProtocol.TLS_V1_2_2021;
207
+ const sslSupportMethod = sslSupportMethodProp ?? SSLMethod.SNI;
208
+ return {
209
+ ...(certificate
210
+ ? { acmCertificateArn: certificate.certificateArn }
211
+ : { cloudfrontDefaultCertificate: true }),
212
+ minimumProtocolVersion: minimumProtocolVersion,
213
+ sslSupportMethod: sslSupportMethod,
214
+ };
215
+ }
216
+ /**
217
+ * Conditionally lookup or create a child based on the id provided.
218
+ * If the id is undefined, it will return undefined.
219
+ *
220
+ * @param id the id of the child to lookup or create
221
+ * @param constructType the type of the child to create
222
+ * @param config the configuration to pass to the child
223
+ */
224
+ dataLookup(id, constructType, config) {
225
+ if (!id) {
226
+ return undefined;
227
+ }
228
+ let child = this.node.tryFindChild(id);
229
+ if (!child) {
230
+ child = new constructType(this, id, config);
231
+ }
232
+ return child;
233
+ }
234
+ }
235
+ exports.Distribution = Distribution;
236
+ _a = JSII_RTTI_SYMBOL_1;
237
+ Distribution[_a] = { fqn: "terraconstructs.aws.edge.Distribution", version: "0.0.8" };
238
+ var GeoRestrictionType;
239
+ (function (GeoRestrictionType) {
240
+ GeoRestrictionType["NONE"] = "none";
241
+ GeoRestrictionType["WHITELIST"] = "whitelist";
242
+ GeoRestrictionType["BLACKLIST"] = "blacklist";
243
+ })(GeoRestrictionType || (exports.GeoRestrictionType = GeoRestrictionType = {}));
244
+ // ref: https://github.com/aws/aws-cdk/blob/v2.156.0/packages/aws-cdk-lib/aws-cloudfront/lib/distribution.ts
245
+ /** Maximum HTTP version to support */
246
+ var HttpVersion;
247
+ (function (HttpVersion) {
248
+ /** HTTP 1.1 */
249
+ HttpVersion["HTTP1_1"] = "http1.1";
250
+ /** HTTP 2 */
251
+ HttpVersion["HTTP2"] = "http2";
252
+ /** HTTP 2 and HTTP 3 */
253
+ HttpVersion["HTTP2_AND_3"] = "http2and3";
254
+ /** HTTP 3 */
255
+ HttpVersion["HTTP3"] = "http3";
256
+ })(HttpVersion || (exports.HttpVersion = HttpVersion = {}));
257
+ /**
258
+ * The price class determines how many edge locations CloudFront will use for your distribution.
259
+ * See https://aws.amazon.com/cloudfront/pricing/ for full list of supported regions.
260
+ */
261
+ var PriceClass;
262
+ (function (PriceClass) {
263
+ /** USA, Canada, Europe, & Israel */
264
+ PriceClass["PRICE_CLASS_100"] = "PriceClass_100";
265
+ /** PRICE_CLASS_100 + South Africa, Kenya, Middle East, Japan, Singapore, South Korea, Taiwan, Hong Kong, & Philippines */
266
+ PriceClass["PRICE_CLASS_200"] = "PriceClass_200";
267
+ /** All locations */
268
+ PriceClass["PRICE_CLASS_ALL"] = "PriceClass_All";
269
+ })(PriceClass || (exports.PriceClass = PriceClass = {}));
270
+ /**
271
+ * The SSL method CloudFront will use for your distribution.
272
+ *
273
+ * Server Name Indication (SNI) - is an extension to the TLS computer networking protocol by which a client indicates
274
+ * which hostname it is attempting to connect to at the start of the handshaking process. This allows a server to present
275
+ * multiple certificates on the same IP address and TCP port number and hence allows multiple secure (HTTPS) websites
276
+ * (or any other service over TLS) to be served by the same IP address without requiring all those sites to use the same certificate.
277
+ *
278
+ * CloudFront can use SNI to host multiple distributions on the same IP - which a large majority of clients will support.
279
+ *
280
+ * If your clients cannot support SNI however - CloudFront can use dedicated IPs for your distribution - but there is a prorated monthly charge for
281
+ * using this feature. By default, we use SNI - but you can optionally enable dedicated IPs (VIP).
282
+ *
283
+ * See the CloudFront SSL for more details about pricing : https://aws.amazon.com/cloudfront/custom-ssl-domains/
284
+ *
285
+ */
286
+ var SSLMethod;
287
+ (function (SSLMethod) {
288
+ SSLMethod["SNI"] = "sni-only";
289
+ SSLMethod["VIP"] = "vip";
290
+ })(SSLMethod || (exports.SSLMethod = SSLMethod = {}));
291
+ /**
292
+ * The minimum version of the SSL protocol that you want CloudFront to use for HTTPS connections.
293
+ * CloudFront serves your objects only to browsers or devices that support at least the SSL version that you specify.
294
+ */
295
+ var SecurityPolicyProtocol;
296
+ (function (SecurityPolicyProtocol) {
297
+ SecurityPolicyProtocol["SSL_V3"] = "SSLv3";
298
+ SecurityPolicyProtocol["TLS_V1"] = "TLSv1";
299
+ SecurityPolicyProtocol["TLS_V1_2016"] = "TLSv1_2016";
300
+ SecurityPolicyProtocol["TLS_V1_1_2016"] = "TLSv1.1_2016";
301
+ SecurityPolicyProtocol["TLS_V1_2_2018"] = "TLSv1.2_2018";
302
+ SecurityPolicyProtocol["TLS_V1_2_2019"] = "TLSv1.2_2019";
303
+ SecurityPolicyProtocol["TLS_V1_2_2021"] = "TLSv1.2_2021";
304
+ })(SecurityPolicyProtocol || (exports.SecurityPolicyProtocol = SecurityPolicyProtocol = {}));
305
+ /**
306
+ * The HTTP methods that the Behavior will accept requests on.
307
+ */
308
+ class AllowedMethods {
309
+ constructor(methods) {
310
+ this.methods = methods;
311
+ }
312
+ }
313
+ exports.AllowedMethods = AllowedMethods;
314
+ _b = JSII_RTTI_SYMBOL_1;
315
+ AllowedMethods[_b] = { fqn: "terraconstructs.aws.edge.AllowedMethods", version: "0.0.8" };
316
+ /** HEAD and GET */
317
+ AllowedMethods.ALLOW_GET_HEAD = new AllowedMethods(["GET", "HEAD"]);
318
+ /** HEAD, GET, and OPTIONS */
319
+ AllowedMethods.ALLOW_GET_HEAD_OPTIONS = new AllowedMethods([
320
+ "GET",
321
+ "HEAD",
322
+ "OPTIONS",
323
+ ]);
324
+ /** All supported HTTP methods */
325
+ AllowedMethods.ALLOW_ALL = new AllowedMethods([
326
+ "GET",
327
+ "HEAD",
328
+ "OPTIONS",
329
+ "PUT",
330
+ "PATCH",
331
+ "POST",
332
+ "DELETE",
333
+ ]);
334
+ /**
335
+ * The HTTP methods that the Behavior will cache requests on.
336
+ */
337
+ class CachedMethods {
338
+ constructor(methods) {
339
+ this.methods = methods;
340
+ }
341
+ }
342
+ exports.CachedMethods = CachedMethods;
343
+ _c = JSII_RTTI_SYMBOL_1;
344
+ CachedMethods[_c] = { fqn: "terraconstructs.aws.edge.CachedMethods", version: "0.0.8" };
345
+ /** HEAD and GET */
346
+ CachedMethods.CACHE_GET_HEAD = new CachedMethods(["GET", "HEAD"]);
347
+ /** HEAD, GET, and OPTIONS */
348
+ CachedMethods.CACHE_GET_HEAD_OPTIONS = new CachedMethods([
349
+ "GET",
350
+ "HEAD",
351
+ "OPTIONS",
352
+ ]);
353
+ /**
354
+ * How HTTPs should be handled with your distribution.
355
+ */
356
+ var ViewerProtocolPolicy;
357
+ (function (ViewerProtocolPolicy) {
358
+ /** HTTPS only */
359
+ ViewerProtocolPolicy["HTTPS_ONLY"] = "https-only";
360
+ /** Will redirect HTTP requests to HTTPS */
361
+ ViewerProtocolPolicy["REDIRECT_TO_HTTPS"] = "redirect-to-https";
362
+ /** Both HTTP and HTTPS supported */
363
+ ViewerProtocolPolicy["ALLOW_ALL"] = "allow-all";
364
+ })(ViewerProtocolPolicy || (exports.ViewerProtocolPolicy = ViewerProtocolPolicy = {}));
365
+ /**
366
+ * CloudFront provides a set of managed cache policies that you can attach to any of your distribution's cache behaviors.
367
+ * With a managed cache policy, you don't need to write or maintain your own cache policy. The managed policies use settings that are optimized for specific use cases.
368
+ *
369
+ * @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-cache-policies.html
370
+ * @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/data-sources/cloudfront_cache_policy#aws-managed-policies
371
+ */
372
+ var ManagedCachePolicy;
373
+ (function (ManagedCachePolicy) {
374
+ /**
375
+ * This policy is designed for use with an origin that is an AWS Amplify web app.
376
+ */
377
+ ManagedCachePolicy["AMPLIFY"] = "Managed-Amplify";
378
+ /**
379
+ * Optimize cache efficiency by minimizing the values that CloudFront includes in the cache key.
380
+ * Query strings and cookies are not included in the cache key, and only the normalized 'Accept-Encoding' header is included.
381
+ */
382
+ ManagedCachePolicy["CACHING_OPTIMIZED"] = "Managed-CachingOptimized";
383
+ /**
384
+ * Optimize cache efficiency by minimizing the values that CloudFront includes in the cache key.
385
+ * Query strings and cookies are not included in the cache key, and only the normalized 'Accept-Encoding' header is included.
386
+ * Disables cache compression.
387
+ */
388
+ ManagedCachePolicy["CACHING_OPTIMIZED_FOR_UNCOMPRESSED_OBJECTS"] = "Managed-CachingOptimizedForUncompressedObjects";
389
+ /** Disables caching. This policy is useful for dynamic content and for requests that are not cacheable. */
390
+ ManagedCachePolicy["CACHING_DISABLED"] = "Managed-CachingDisabled";
391
+ /** Designed for use with an origin that is an AWS Elemental MediaPackage endpoint. */
392
+ ManagedCachePolicy["ELEMENTAL_MEDIA_PACKAGE"] = "Managed-Elemental-MediaPackage";
393
+ /**
394
+ * Designed for use with an origin that returns Cache-Control HTTP response headers and does not serve different content based on values present in the query string.
395
+ */
396
+ ManagedCachePolicy["USE_ORIGIN_CACHE_CONTROL_HEADERS"] = "Managed-UseOriginCacheControlHeaders";
397
+ /**
398
+ * Designed for use with an origin that returns Cache-Control HTTP response headers and serves different content based on values present in the query string.
399
+ */
400
+ ManagedCachePolicy["USE_ORIGIN_CACHE_CONTROL_HEADERS_QUERY_STRINGS"] = "Managed-UseOriginCacheControlHeaders-QueryStrings";
401
+ })(ManagedCachePolicy || (exports.ManagedCachePolicy = ManagedCachePolicy = {}));
402
+ /**
403
+ * Origin Request Policy configuration.
404
+ *
405
+ * @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-origin-request-policies.html
406
+ * @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/data-sources/cloudfront_origin_request_policy#aws-managed-policies
407
+ */
408
+ var ManagedOriginRequestPolicy;
409
+ (function (ManagedOriginRequestPolicy) {
410
+ /** This policy includes only the User-Agent and Referer headers. It doesn’t include any query strings or cookies. */
411
+ ManagedOriginRequestPolicy["USER_AGENT_REFERER_HEADERS"] = "Managed-UserAgentRefererHeaders";
412
+ /** This policy includes the header that enables cross-origin resource sharing (CORS) requests when the origin is a custom origin. */
413
+ ManagedOriginRequestPolicy["CORS_CUSTOM_ORIGIN"] = "Managed-CORS-CustomOrigin";
414
+ /** This policy includes the headers that enable cross-origin resource sharing (CORS) requests when the origin is an Amazon S3 bucket. */
415
+ ManagedOriginRequestPolicy["CORS_S3_ORIGIN"] = "Managed-CORS-S3Origin";
416
+ /** This policy includes all values (query strings, headers, and cookies) in the viewer request. */
417
+ ManagedOriginRequestPolicy["ALL_VIEWER"] = "Managed-AllViewer";
418
+ /** This policy is designed for use with an origin that is an AWS Elemental MediaTailor endpoint. */
419
+ ManagedOriginRequestPolicy["ELEMENTAL_MEDIA_TAILOR"] = "Managed-Elemental-MediaTailor-PersonalizedManifests";
420
+ /** This policy includes all values (headers, cookies, and query strings) in the viewer request, and all CloudFront headers that were released through June 2022 (CloudFront headers released after June 2022 are not included). */
421
+ ManagedOriginRequestPolicy["ALL_VIEWER_AND_CLOUDFRONT_2022"] = "Managed-AllViewerAndCloudFrontHeaders-2022-06";
422
+ /** This policy includes all values (query strings, and cookies) except the header in the viewer request. */
423
+ ManagedOriginRequestPolicy["ALL_VIEWER_EXCEPT_HOST_HEADER"] = "Managed-AllViewerExceptHostHeader";
424
+ })(ManagedOriginRequestPolicy || (exports.ManagedOriginRequestPolicy = ManagedOriginRequestPolicy = {}));
425
+ /**
426
+ * A Response Headers Policy configuration
427
+ *
428
+ * @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html
429
+ * @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/data-sources/cloudfront_response_headers_policy#aws-managed-policies
430
+ */
431
+ var ManagedResponseHeadersPolicy;
432
+ (function (ManagedResponseHeadersPolicy) {
433
+ /** Use this managed policy to allow simple CORS requests from any origin. */
434
+ ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS"] = "Managed-SimpleCORS";
435
+ /** Use this managed policy to allow CORS requests from any origin, including preflight requests. */
436
+ ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT"] = "Managed-CORS-With-Preflight";
437
+ /** Use this managed policy to add a set of security headers to all responses that CloudFront sends to viewers. */
438
+ ManagedResponseHeadersPolicy["SECURITY_HEADERS"] = "Managed-SecurityHeadersPolicy";
439
+ /** Use this managed policy to allow simple CORS requests from any origin and add a set of security headers to all responses that CloudFront sends to viewers. */
440
+ ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS"] = "Managed-CORS-and-SecurityHeadersPolicy";
441
+ /** Use this managed policy to allow CORS requests from any origin, including preflight requests, and add a set of security headers to all responses that CloudFront sends to viewers. */
442
+ ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS"] = "Managed-CORS-with-preflight-and-SecurityHeadersPolicy";
443
+ })(ManagedResponseHeadersPolicy || (exports.ManagedResponseHeadersPolicy = ManagedResponseHeadersPolicy = {}));
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL2Rpc3RyaWJ1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUs2QjtBQUM3QixpQ0FBaUQ7QUFJakQsZ0NBQW1DO0FBQ25DLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFtTXhDOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsZ0NBQWdCO0lBS2hELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFVRCxZQUFZLEtBQWdCLEVBQUUsSUFBWSxFQUFFLEtBQXdCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBUlgsYUFBUSxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFFcEMsd0JBQW1CLEdBQW9CLEVBQUUsQ0FBQztRQVF6RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLGlCQUFpQixHQUFHLG9CQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDOUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQ2hDLGVBQVMsQ0FBQyxtQkFBbUIsQ0FDOUIsQ0FBQyxNQUFNLENBQUM7WUFDVCxJQUNFLENBQUMsYUFBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEMsaUJBQWlCLEtBQUssV0FBVyxFQUNqQyxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isb0dBQW9HLGlCQUFpQixHQUFHLENBQ3pILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztR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O09BSUc7SUFDSCxtSEFBNkYsQ0FBQTtJQUM3RiwyR0FBMkc7SUFDM0csa0VBQTRDLENBQUE7SUFDNUMsc0ZBQXNGO0lBQ3RGLGdGQUEwRCxDQUFBO0lBQzFEOztPQUVHO0lBQ0gsK0ZBQXlFLENBQUE7SUFDekU7O09BRUc7SUFDSCwwSEFBb0csQ0FBQTtBQUN0RyxDQUFDLEVBNUJXLGtCQUFrQixrQ0FBbEIsa0JBQWtCLFFBNEI3QjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSwwQkFlWDtBQWZELFdBQVksMEJBQTBCO0lBQ3BDLHFIQUFxSDtJQUNySCw0RkFBOEQsQ0FBQTtJQUM5RCxxSUFBcUk7SUFDckksOEVBQWdELENBQUE7SUFDaEQseUlBQXlJO0lBQ3pJLHNFQUF3QyxDQUFBO0lBQ3hDLG1HQUFtRztJQUNuRyw4REFBZ0MsQ0FBQTtJQUNoQyxvR0FBb0c7SUFDcEcsNEdBQThFLENBQUE7SUFDOUUsbU9BQW1PO0lBQ25PLDhHQUFnRixDQUFBO0lBQ2hGLDRHQUE0RztJQUM1RyxpR0FBbUUsQ0FBQTtBQUNyRSxDQUFDLEVBZlcsMEJBQTBCLDBDQUExQiwwQkFBMEIsUUFlckM7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksNEJBV1g7QUFYRCxXQUFZLDRCQUE0QjtJQUN0Qyw2RUFBNkU7SUFDN0UsNkVBQTZDLENBQUE7SUFDN0Msb0dBQW9HO0lBQ3BHLHFHQUFxRSxDQUFBO0lBQ3JFLGtIQUFrSDtJQUNsSCxrRkFBa0QsQ0FBQTtJQUNsRCxpS0FBaUs7SUFDakssc0hBQXNGLENBQUE7SUFDdEYseUxBQXlMO0lBQ3pMLG9KQUFvSCxDQUFBO0FBQ3RILENBQUMsRUFYVyw0QkFBNEIsNENBQTVCLDRCQUE0QixRQVd2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNsb3VkZnJvbnREaXN0cmlidXRpb24sXG4gIGRhdGFBd3NDbG91ZGZyb250Q2FjaGVQb2xpY3ksXG4gIGRhdGFBd3NDbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgZGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBJUmVzb2x2YWJsZSwgVG9rZW4sIExhenkgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJQ2VydGlmaWNhdGUsIElPcmlnaW4sIEZ1bmN0aW9uQXNzb2NpYXRpb24gfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCB7IEFybkZvcm1hdCB9IGZyb20gXCIuLi9hcm5cIjtcbmltcG9ydCB7XG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5cbi8vIFRPRE86IFJlLWFkZCBpbnZhbGlkYXRpb24gc3VwcG9ydFxuLy8gVE9ETzogUmUtYWRkIG9yaWdpbiBncm91cCAoZmFpbG92ZXIpIHN1cHBvcnRcbi8vIFRPRE86IFJlLWFkZCBrZXkgZ3JvdXAgc3VwcG9ydFxuLy8gVE9ETzogUmUtYWRkIFdBRiBzdXBwb3J0XG4vLyBUT0RPOiBSZS1hZGQgbG9nZ2luZyBzdXBwb3J0XG4vLyBUT0RPOiBSZS1hZGQgY3VzdG9tIGNhY2hlLCBvcmlnaW5SZXF1ZXN0LCBSZXNwb25zZUhlYWRlciBwb2xpY3kgc3VwcG9ydD9cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbk91dHB1dHMge1xuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgdGhlIGRpc3RyaWJ1dGlvbi4gRm9yIGV4YW1wbGU6IGBFREZEVkJENjMyQkhEUzVgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ2xvdWRGcm9udCBSb3V0ZSA1MyB6b25lIElEIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgICogcm91dGUgYW4gQWxpYXMgUmVzb3VyY2UgUmVjb3JkIFNldCB0by5cbiAgICpcbiAgICogVGhpcyBhdHRyaWJ1dGUgaXMgc2ltcGx5IGFuIGFsaWFzIGZvciB0aGUgem9uZSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc3RhdHVzIG9mIHRoZSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIGBEZXBsb3llZGAgaWYgdGhlIGRpc3RyaWJ1dGlvbidzIGluZm9ybWF0aW9uIGlzIGZ1bGx5IHByb3BhZ2F0ZWRcbiAgICogdGhyb3VnaG91dCB0aGUgQW1hem9uIENsb3VkRnJvbnQgc3lzdGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFSTiBmb3IgdGhlIGRpc3RyaWJ1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6IGBkNjA0NzIxZnhhYXF5OS5jbG91ZGZyb250Lm5ldGBcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbXBvcnRlZCBvciBjcmVhdGVkIEROUyB6b25lIGF0dHJpYnV0ZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGlzdHJpYnV0aW9uIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbk91dHB1dHM6IERpc3RyaWJ1dGlvbk91dHB1dHM7XG5cbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBGb3IgZXhhbXBsZTogYGQ2MDQ3MjFmeGFhcXk5LmNsb3VkZnJvbnQubmV0YFxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDbG91ZEZyb250IFJvdXRlIDUzIHpvbmUgSUQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuICAgKiByb3V0ZSBhbiBBbGlhcyBSZXNvdXJjZSBSZWNvcmQgU2V0IHRvLlxuICAgKlxuICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyBzaW1wbHkgYW4gYWxpYXMgZm9yIHRoZSB6b25lIElEXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25Qcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEV4dHJhIENOQU1FcyAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyksIGlmIGFueSwgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXN0cmlidXRpb24gaXMgZW5hYmxlZCB0byBhY2NlcHQgZW5kIHVzZXIgcmVxdWVzdHMgZm9yIGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuIHwgSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIHRoZSByZXNvdXJjZSB3aWxsIHdhaXQgZm9yIHRoZSBkaXN0cmlidXRpb24gc3RhdHVzIHRvIGNoYW5nZVxuICAgKiBmcm9tIEluUHJvZ3Jlc3MgdG8gRGVwbG95ZWQuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyB0b2ZhbHNlIHdpbGwgc2tpcCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHRydWUuXG4gICAqL1xuICByZWFkb25seSB3YWl0Rm9yRGVwbG95bWVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJlaGF2aW9yOiBCZWhhdmlvck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYmVoYXZpb3JzIGZvciB0aGUgZGlzdHJpYnV0aW9uLCBtYXBwZWQgYnkgdGhlIHBhdGhQYXR0ZXJuIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlcXVlc3RzIHRvIGFwcGx5IHRoZSBiZWhhdmlvciB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGJlaGF2aW9ycyBhcmUgYWRkZWQuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmVoYXZpb3JzPzogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPjtcblxuICAvKipcbiAgICogQSBjZXJ0aWZpY2F0ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgY2VydGlmaWNhdGUgbXVzdCBiZSBsb2NhdGVkIGluIE4uIFZpcmdpbmlhICh1cy1lYXN0LTEpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBDbG91ZEZyb250IHdpbGRjYXJkIGNlcnRpZmljYXRlICgqLmNsb3VkZnJvbnQubmV0KSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZTtcblxuICAvKipcbiAgICogQW55IGNvbW1lbnRzIHlvdSB3YW50IHRvIGluY2x1ZGUgYWJvdXQgdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tZW50XG4gICAqL1xuICByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXF1ZXN0IGZyb20geW91ciBvcmlnaW4gKGZvciBleGFtcGxlLCBpbmRleC5odG1sKVxuICAgKiB3aGVuIGEgdmlld2VyIHJlcXVlc3RzIHRoZSByb290IFVSTCBmb3IgeW91ciBkaXN0cmlidXRpb24uIElmIG5vIGRlZmF1bHQgb2JqZWN0IGlzIHNldCwgdGhlXG4gICAqIHJlcXVlc3QgZ29lcyB0byB0aGUgb3JpZ2luJ3Mgcm9vdCAoZS5nLiwgZXhhbXBsZS5jb20vKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZWZhdWx0IHJvb3Qgb2JqZWN0XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGNvdW50cmllcyBpbiB3aGljaCB5b3VyIGNvbnRlbnQgaXMgZGlzdHJpYnV0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZ2VvZ3JhcGhpYyByZXN0cmljdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGdlb1Jlc3RyaWN0aW9uPzogR2VvUmVzdHJpY3Rpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIG1heGltdW0gSFRUUCB2ZXJzaW9uIHRoYXQgeW91IHdhbnQgdmlld2VycyB0byB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCBDbG91ZEZyb250LlxuICAgKlxuICAgKiBGb3Igdmlld2VycyBhbmQgQ2xvdWRGcm9udCB0byB1c2UgSFRUUC8yLCB2aWV3ZXJzIG11c3Qgc3VwcG9ydCBUTFMgMS4yIG9yIGxhdGVyLCBhbmQgbXVzdCBzdXBwb3J0IHNlcnZlciBuYW1lIGlkZW50aWZpY2F0aW9uIChTTkkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBIdHRwVmVyc2lvbi5IVFRQMlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFZlcnNpb24/OiBIdHRwVmVyc2lvbjtcblxuICAvKipcbiAgICogVGhlIHByaWNlIGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWF4aW11bSBwcmljZSB0aGF0IHlvdSB3YW50IHRvIHBheSBmb3IgQ2xvdWRGcm9udCBzZXJ2aWNlLlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBQcmljZUNsYXNzX0FsbCwgQ2xvdWRGcm9udCByZXNwb25kcyB0byByZXF1ZXN0cyBmb3IgeW91ciBvYmplY3RzIGZyb20gYWxsIENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvbnMuXG4gICAqIElmIHlvdSBzcGVjaWZ5IGEgcHJpY2UgY2xhc3Mgb3RoZXIgdGhhbiBQcmljZUNsYXNzX0FsbCwgQ2xvdWRGcm9udCBzZXJ2ZXMgeW91ciBvYmplY3RzIGZyb20gdGhlIENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvblxuICAgKiB0aGF0IGhhcyB0aGUgbG93ZXN0IGxhdGVuY3kgYW1vbmcgdGhlIGVkZ2UgbG9jYXRpb25zIGluIHlvdXIgcHJpY2UgY2xhc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfQUxMXG4gICAqL1xuICByZWFkb25seSBwcmljZUNsYXNzPzogUHJpY2VDbGFzcztcblxuICAvKipcbiAgICogSG93IENsb3VkRnJvbnQgc2hvdWxkIGhhbmRsZSByZXF1ZXN0cyB0aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bCAoZS5nLiwgUGFnZU5vdEZvdW5kKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JSZXNwb25zZXM/OiBFcnJvclJlc3BvbnNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZlcnNpb24gb2YgdGhlIFNTTCBwcm90b2NvbCB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBIVFRQUyBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQ2xvdWRGcm9udCBzZXJ2ZXMgeW91ciBvYmplY3RzIG9ubHkgdG8gYnJvd3NlcnMgb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgYXRcbiAgICogbGVhc3QgdGhlIFNTTCB2ZXJzaW9uIHRoYXQgeW91IHNwZWNpZnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDIxLlxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVByb3RvY29sVmVyc2lvbj86IFNlY3VyaXR5UG9saWN5UHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0wgbWV0aG9kIENsb3VkRnJvbnQgd2lsbCB1c2UgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpIC0gaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBUTFMgY29tcHV0ZXIgbmV0d29ya2luZyBwcm90b2NvbCBieSB3aGljaCBhIGNsaWVudCBpbmRpY2F0ZXNcbiAgICogd2hpY2ggaG9zdG5hbWUgaXQgaXMgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGF0IHRoZSBzdGFydCBvZiB0aGUgaGFuZHNoYWtpbmcgcHJvY2Vzcy4gVGhpcyBhbGxvd3MgYSBzZXJ2ZXIgdG8gcHJlc2VudFxuICAgKiBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcyBhbmQgVENQIHBvcnQgbnVtYmVyIGFuZCBoZW5jZSBhbGxvd3MgbXVsdGlwbGUgc2VjdXJlIChIVFRQUykgd2Vic2l0ZXNcbiAgICogKG9yIGFueSBvdGhlciBzZXJ2aWNlIG92ZXIgVExTKSB0byBiZSBzZXJ2ZWQgYnkgdGhlIHNhbWUgSVAgYWRkcmVzcyB3aXRob3V0IHJlcXVpcmluZyBhbGwgdGhvc2Ugc2l0ZXMgdG8gdXNlIHRoZSBzYW1lIGNlcnRpZmljYXRlLlxuICAgKlxuICAgKiBDbG91ZEZyb250IGNhbiB1c2UgU05JIHRvIGhvc3QgbXVsdGlwbGUgZGlzdHJpYnV0aW9ucyBvbiB0aGUgc2FtZSBJUCAtIHdoaWNoIGEgbGFyZ2UgbWFqb3JpdHkgb2YgY2xpZW50cyB3aWxsIHN1cHBvcnQuXG4gICAqXG4gICAqIElmIHlvdXIgY2xpZW50cyBjYW5ub3Qgc3VwcG9ydCBTTkkgaG93ZXZlciAtIENsb3VkRnJvbnQgY2FuIHVzZSBkZWRpY2F0ZWQgSVBzIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiAtIGJ1dCB0aGVyZSBpcyBhIHByb3JhdGVkIG1vbnRobHkgY2hhcmdlIGZvclxuICAgKiB1c2luZyB0aGlzIGZlYXR1cmUuIEJ5IGRlZmF1bHQsIHdlIHVzZSBTTkkgLSBidXQgeW91IGNhbiBvcHRpb25hbGx5IGVuYWJsZSBkZWRpY2F0ZWQgSVBzIChWSVApLlxuICAgKlxuICAgKiBTZWUgdGhlIENsb3VkRnJvbnQgU1NMIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgcHJpY2luZyA6IGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9jdXN0b20tc3NsLWRvbWFpbnMvXG4gICAqXG4gICAqIEBkZWZhdWx0IFNTTE1ldGhvZC5TTklcbiAgICovXG4gIHJlYWRvbmx5IHNzbFN1cHBvcnRNZXRob2Q/OiBTU0xNZXRob2Q7XG59XG5cbi8qKlxuICogQW1hem9uIENsb3VkZnJvbnQgRGlzdHJpYnV0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXN0cmlidXRpb24gZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSURpc3RyaWJ1dGlvbiB7XG4gIC8vIFRPRE86IEFkZCBzdGF0aWMgZnJvbUxvb2t1cD9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX291dHB1dHM6IERpc3RyaWJ1dGlvbk91dHB1dHM7XG4gIHB1YmxpYyBnZXQgZGlzdHJpYnV0aW9uT3V0cHV0cygpOiBEaXN0cmlidXRpb25PdXRwdXRzIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cztcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdHJpYnV0aW9uT3V0cHV0cztcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9kb21haW5OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgZG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kb21haW5OYW1lO1xuICB9XG4gIHB1YmxpYyByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcmlnaW5zID0gbmV3IEFycmF5PE9yaWdpbkluZGV4PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWRkaXRpb25hbEJlaGF2aW9yczogQ2FjaGVCZWhhdmlvcltdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvclJlc3BvbnNlczogRXJyb3JSZXNwb25zZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogSUNlcnRpZmljYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IERpc3RyaWJ1dGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIG5hbWUsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jZXJ0aWZpY2F0ZSkge1xuICAgICAgY29uc3QgY2VydGlmaWNhdGVSZWdpb24gPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5zcGxpdEFybihcbiAgICAgICAgcHJvcHMuY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgKS5yZWdpb247XG4gICAgICBpZiAoXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQoY2VydGlmaWNhdGVSZWdpb24pICYmXG4gICAgICAgIGNlcnRpZmljYXRlUmVnaW9uICE9PSBcInVzLWVhc3QtMVwiXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEaXN0cmlidXRpb24gY2VydGlmaWNhdGVzIG11c3QgYmUgaW4gdGhlIHVzLWVhc3QtMSByZWdpb24gYW5kIHRoZSBjZXJ0aWZpY2F0ZSB5b3UgcHJvdmlkZWQgaXMgaW4gJHtjZXJ0aWZpY2F0ZVJlZ2lvbn0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IHByb3BzLmNlcnRpZmljYXRlO1xuICAgIHRoaXMuZXJyb3JSZXNwb25zZXMgPSBwcm9wcy5lcnJvclJlc3BvbnNlcyA/PyBbXTtcblxuICAgIGNvbnN0IGRlZmF1bHRPcmlnaW5JZCA9IHRoaXMuYWRkT3JpZ2luKHByb3BzLmRlZmF1bHRCZWhhdmlvci5vcmlnaW4pO1xuICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKS5mb3JFYWNoKFxuICAgICAgICAoW3BhdGhQYXR0ZXJuLCBiZWhhdmlvck9wdGlvbnNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRCZWhhdmlvcihcbiAgICAgICAgICAgIHBhdGhQYXR0ZXJuLFxuICAgICAgICAgICAgYmVoYXZpb3JPcHRpb25zLm9yaWdpbixcbiAgICAgICAgICAgIGJlaGF2aW9yT3B0aW9ucyxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tZW50cyBoYXZlIGFuIHVuZG9jdW1lbnRlZCBsaW1pdCBvZiAxMjggY2hhcmFjdGVyc1xuICAgIGNvbnN0IHRyaW1tZWRDb21tZW50ID1cbiAgICAgIHByb3BzLmNvbW1lbnQgJiYgcHJvcHMuY29tbWVudC5sZW5ndGggPiAxMjhcbiAgICAgICAgPyBgJHtwcm9wcy5jb21tZW50LnNsaWNlKDAsIDEyOCAtIDMpfS4uLmBcbiAgICAgICAgOiBwcm9wcy5jb21tZW50O1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAge1xuICAgICAgICBlbmFibGVkOiBwcm9wcy5lbmFibGVkID8/IHRydWUsXG4gICAgICAgIG9yaWdpbjogTGF6eS5hbnlWYWx1ZSh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuX29yaWdpbnMubWFwKChvKSA9PlxuICAgICAgICAgICAgICAvLyBMYXp5IHByb2R1Y2VycyBuZWVkIGFkZGl0aW9uYWwgeHh4VG9UZXJyYWZvcm0gd3JhcFxuICAgICAgICAgICAgICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLmNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5Ub1RlcnJhZm9ybShcbiAgICAgICAgICAgICAgICBvLm9yaWdpbi5yZW5kZXIoby5pZCksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICB9KSxcbiAgICAgICAgZGVmYXVsdENhY2hlQmVoYXZpb3I6IHRoaXMuX3JlbmRlckRlZmF1bHRDYWNoZUJlaGF2aW9yKHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogXCIqXCIsIC8vIGlnbm9yZWQgZm9yIERlZmF1bHQgQ2FjaGUgQmVoYXZpb3JcbiAgICAgICAgICB0YXJnZXRPcmlnaW5JZDogZGVmYXVsdE9yaWdpbklkLFxuICAgICAgICAgIC4uLnByb3BzLmRlZmF1bHRCZWhhdmlvcixcbiAgICAgICAgfSksXG4gICAgICAgIG9yZGVyZWRDYWNoZUJlaGF2aW9yOiBMYXp5LmFueVZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEJlaGF2aW9ycy5tYXAoKGIpID0+XG4gICAgICAgICAgICAgICAgLy8gTGF6eSBwcm9kdWNlcnMgbmVlZCBhZGRpdGlvbmFsIHh4eFRvVGVycmFmb3JtIHdyYXBcbiAgICAgICAgICAgICAgICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLmNsb3VkZnJvbnREaXN0cmlidXRpb25PcmRlcmVkQ2FjaGVCZWhhdmlvclRvVGVycmFmb3JtKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYXRoUGF0dGVybjogYi5wYXRoUGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fcmVuZGVyRGVmYXVsdENhY2hlQmVoYXZpb3IoYiksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICAgICksXG4gICAgICAgIGFsaWFzZXM6IHByb3BzLmFsaWFzZXMsXG4gICAgICAgIGNvbW1lbnQ6IHRyaW1tZWRDb21tZW50LFxuICAgICAgICBjdXN0b21FcnJvclJlc3BvbnNlOiB0aGlzLnJlbmRlckVycm9yUmVzcG9uc2VzKCksXG4gICAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCxcbiAgICAgICAgaHR0cFZlcnNpb246IHByb3BzLmh0dHBWZXJzaW9uID8/IEh0dHBWZXJzaW9uLkhUVFAyLFxuICAgICAgICBwcmljZUNsYXNzOiBwcm9wcy5wcmljZUNsYXNzID8/IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzdHJpY3Rpb25zOiB0aGlzLnJlbmRlclJlc3RyaWN0aW9ucyhwcm9wcy5nZW9SZXN0cmljdGlvbiksXG4gICAgICAgIHZpZXdlckNlcnRpZmljYXRlOiB0aGlzLnJlbmRlclZpZXdlckNlcnRpZmljYXRlKFxuICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGUsXG4gICAgICAgICAgcHJvcHMubWluaW11bVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgICBwcm9wcy5zc2xTdXBwb3J0TWV0aG9kLFxuICAgICAgICApLFxuICAgICAgICB3YWl0Rm9yRGVwbG95bWVudDogcHJvcHMud2FpdEZvckRlcGxveW1lbnQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLl9kb21haW5OYW1lID0gdGhpcy5yZXNvdXJjZS5kb21haW5OYW1lO1xuICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gdGhpcy5yZXNvdXJjZS5ob3N0ZWRab25lSWQ7XG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIGlkOiB0aGlzLnJlc291cmNlLmlkLFxuICAgICAgaG9zdGVkWm9uZUlkOiB0aGlzLnJlc291cmNlLmhvc3RlZFpvbmVJZCxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNvdXJjZS5zdGF0dXMsXG4gICAgICBhcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgZG9tYWluTmFtZTogdGhpcy5fZG9tYWluTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBPcmlnaW4gdG8gdGhpcyBEaXN0cmlidXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW4gVGhlIE9yaWdpbiB0byBhZGQuXG4gICAqIEBwYXJhbSBvcmlnaW5JZCBBbiBvcHRpb25hbCBpZCB0byB1c2UgZm9yIHRoZSBPcmlnaW4gb3Igb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKi9cbiAgcHVibGljIGFkZE9yaWdpbihvcmlnaW46IElPcmlnaW4sIG9yaWdpbklkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbmRleGVkT3JpZ2luID0gdGhpcy5fb3JpZ2lucy5maW5kKFxuICAgICAgKG9yaWdpbkluZGV4KSA9PiBvcmlnaW5JbmRleC5vcmlnaW4gPT09IG9yaWdpbixcbiAgICApO1xuICAgIGlmIChpbmRleGVkT3JpZ2luKSB7XG4gICAgICBpZiAob3JpZ2luSWQgJiYgb3JpZ2luSWQgIT09IGluZGV4ZWRPcmlnaW4uaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgb3JpZ2luIGZvciAke2luZGV4ZWRPcmlnaW4uaWR9IGFuZCAke29yaWdpbklkfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4ZWRPcmlnaW4uaWQ7XG4gICAgfVxuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuX29yaWdpbnMubGVuZ3RoO1xuICAgIGNvbnN0IGlkID0gb3JpZ2luSWQgPz8gYG9yaWdpbi0ke25leHRJbmRleH1gO1xuICAgIC8vIGVuc3VyZSBpZCAoaWYgcHJvdmlkZWQpIGlzIHVuaXF1ZSB3aXRoaW4gRGlzdHJpYnV0aW9uXG4gICAgaWYgKHRoaXMuX29yaWdpbnMuc29tZSgob3JpZ2luSW5kZXgpID0+IG9yaWdpbkluZGV4LmlkID09PSBpZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYER1cGxpY2F0ZSBvcmlnaW4gaWQgJHtpZH0uIE9yaWdpbklkcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBkaXN0cmlidXRpb25gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fb3JpZ2lucy5wdXNoKHsgb3JpZ2luLCBpZCB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckVycm9yUmVzcG9uc2VzKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25DdXN0b21FcnJvclJlc3BvbnNlW11cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuZXJyb3JSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2VzLm1hcCgoZXJyb3JDb25maWcpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWVycm9yQ29uZmlnLnJlc3BvbnNlSHR0cFN0YXR1cyAmJlxuICAgICAgICAhZXJyb3JDb25maWcudHRsICYmXG4gICAgICAgICFlcnJvckNvbmZpZy5yZXNwb25zZVBhZ2VQYXRoXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQSBjdXN0b20gZXJyb3IgcmVzcG9uc2Ugd2l0aG91dCBlaXRoZXIgYSAncmVzcG9uc2VIdHRwU3RhdHVzJywgJ3R0bCcgb3IgJ3Jlc3BvbnNlUGFnZVBhdGgnIGlzIG5vdCB2YWxpZC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3JDYWNoaW5nTWluVHRsOiBlcnJvckNvbmZpZy50dGw/LnRvU2Vjb25kcygpLFxuICAgICAgICBlcnJvckNvZGU6IGVycm9yQ29uZmlnLmh0dHBTdGF0dXMsXG4gICAgICAgIHJlc3BvbnNlQ29kZTogZXJyb3JDb25maWcucmVzcG9uc2VQYWdlUGF0aFxuICAgICAgICAgID8gKGVycm9yQ29uZmlnLnJlc3BvbnNlSHR0cFN0YXR1cyA/PyBlcnJvckNvbmZpZy5odHRwU3RhdHVzKVxuICAgICAgICAgIDogZXJyb3JDb25maWcucmVzcG9uc2VIdHRwU3RhdHVzLFxuICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBlcnJvckNvbmZpZy5yZXNwb25zZVBhZ2VQYXRoLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGJlaGF2aW9yIHRvIHRoaXMgZGlzdHJpYnV0aW9uIGZvciB0aGUgZ2l2ZW4gcGF0aFBhdHRlcm4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoUGF0dGVybiB0aGUgcGF0aCBwYXR0ZXJuIChlLmcuLCAnaW1hZ2VzLyonKSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXF1ZXN0cyB0byBhcHBseSB0aGUgYmVoYXZpb3IgdG8uXG4gICAqIEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiB0byB1c2UgZm9yIHRoaXMgYmVoYXZpb3JcbiAgICogQHBhcmFtIGJlaGF2aW9yT3B0aW9ucyB0aGUgb3B0aW9ucyBmb3IgdGhlIGJlaGF2aW9yIGF0IHRoaXMgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBhZGRCZWhhdmlvcihcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogSU9yaWdpbixcbiAgICBiZWhhdmlvck9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBpZiAocGF0aFBhdHRlcm4gPT09IFwiKlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT25seSB0aGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gaGF2ZSBhIHBhdGggcGF0dGVybiBvZiAnKidcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldE9yaWdpbklkID0gdGhpcy5hZGRPcmlnaW4ob3JpZ2luKTtcbiAgICB0aGlzLmFkZGl0aW9uYWxCZWhhdmlvcnMucHVzaCh7XG4gICAgICBwYXRoUGF0dGVybixcbiAgICAgIG9yaWdpbixcbiAgICAgIHRhcmdldE9yaWdpbklkLFxuICAgICAgLi4uYmVoYXZpb3JPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIFRlcnJhZm9ybSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGJlaGF2aW9yLlxuICAgKiBUaGlzIHJlbmRlcnMgYXMgYSBcIkNsb3VkZnJvbnREaXN0cmlidXRpb25EZWZhdWx0Q2FjaGVCZWhhdmlvclwiXG4gICAqIHJlZ2FyZGxlc3MgaWYgdGhpcyBpcyBhIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3Igb3Igbm90LCBhcyB0aGUgdHdvXG4gICAqIGFyZSBpZGVudGljYWwgZXhjZXB0IHRoZSBgcGF0aFBhdHRlcm5gIGlzIG9taXR0ZWQgZm9yIHRoZSBkZWZhdWx0XG4gICAqIGNhY2hlIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlckRlZmF1bHRDYWNoZUJlaGF2aW9yKFxuICAgIHByb3BzOiBDYWNoZUJlaGF2aW9yLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25EZWZhdWx0Q2FjaGVCZWhhdmlvciB7XG4gICAgLy8gVE9ETzogc2hvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGxlYXZlIGNhY2hlUG9saWN5IGJlIHVuZGVmaW5lZD9cbiAgICBjb25zdCBtYW5hZ2VkQ2FjaGVQb2xpY3lOYW1lID1cbiAgICAgIHByb3BzLmNhY2hlUG9saWN5ID8/IE1hbmFnZWRDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRDtcbiAgICBjb25zdCBjYWNoZVBvbGljeSA9IHRoaXMuZGF0YUxvb2t1cChcbiAgICAgIG1hbmFnZWRDYWNoZVBvbGljeU5hbWUsXG4gICAgICBkYXRhQXdzQ2xvdWRmcm9udENhY2hlUG9saWN5LkRhdGFBd3NDbG91ZGZyb250Q2FjaGVQb2xpY3ksXG4gICAgICB7IG5hbWU6IG1hbmFnZWRDYWNoZVBvbGljeU5hbWUgfSxcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpblJlcXVlc3RQb2xpY3kgPSB0aGlzLmRhdGFMb29rdXAoXG4gICAgICBwcm9wcy5vcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgICAgZGF0YUF3c0Nsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5LkRhdGFBd3NDbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgICAgIHsgbmFtZTogcHJvcHMub3JpZ2luUmVxdWVzdFBvbGljeSB9LFxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gdGhpcy5kYXRhTG9va3VwKFxuICAgICAgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5LFxuICAgICAgZGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3kuRGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gICAgICB7IG5hbWU6IHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldE9yaWdpbklkOiBwcm9wcy50YXJnZXRPcmlnaW5JZCxcbiAgICAgIGFsbG93ZWRNZXRob2RzOlxuICAgICAgICBwcm9wcy5hbGxvd2VkTWV0aG9kcz8ubWV0aG9kcyA/PyBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRC5tZXRob2RzLFxuICAgICAgY2FjaGVkTWV0aG9kczpcbiAgICAgICAgcHJvcHMuY2FjaGVkTWV0aG9kcz8ubWV0aG9kcyA/PyBDYWNoZWRNZXRob2RzLkNBQ0hFX0dFVF9IRUFELm1ldGhvZHMsXG4gICAgICBjYWNoZVBvbGljeUlkOiBjYWNoZVBvbGljeT8uaWQsXG4gICAgICBjb21wcmVzczogcHJvcHMuY29tcHJlc3MgPz8gdHJ1ZSxcbiAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3lJZDogb3JpZ2luUmVxdWVzdFBvbGljeT8uaWQsXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lJZDogcmVzcG9uc2VIZWFkZXJzUG9saWN5Py5pZCxcbiAgICAgIHNtb290aFN0cmVhbWluZzogcHJvcHMuc21vb3RoU3RyZWFtaW5nLFxuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6XG4gICAgICAgIHByb3BzLnZpZXdlclByb3RvY29sUG9saWN5ID8/IFZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXN0cmljdGlvbnMoZ2VvUmVzdHJpY3Rpb24/OiBHZW9SZXN0cmljdGlvbikge1xuICAgIHJldHVybiBnZW9SZXN0cmljdGlvblxuICAgICAgPyB7XG4gICAgICAgICAgZ2VvUmVzdHJpY3Rpb246IHtcbiAgICAgICAgICAgIHJlc3RyaWN0aW9uVHlwZTogZ2VvUmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UeXBlLFxuICAgICAgICAgICAgbG9jYXRpb25zOlxuICAgICAgICAgICAgICBnZW9SZXN0cmljdGlvbi5yZXN0cmljdGlvblR5cGUgIT09IEdlb1Jlc3RyaWN0aW9uVHlwZS5OT05FXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZhbGlkYXRlTG9jYXRpb25zKGdlb1Jlc3RyaWN0aW9uLmxvY2F0aW9ucylcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBnZW9SZXN0cmljdGlvbjoge1xuICAgICAgICAgICAgcmVzdHJpY3Rpb25UeXBlOiBHZW9SZXN0cmljdGlvblR5cGUuTk9ORSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxvY2F0aW9ucyhsb2NhdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgTE9DQVRJT05fUkVHRVggPSAvXltBLVpdezJ9JC87XG4gICAgaWYgKGxvY2F0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZCBwcm92aWRlIGF0IGxlYXN0IDEgbG9jYXRpb25cIik7XG4gICAgfVxuICAgIGxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKCFMT0NBVElPTl9SRUdFWC50ZXN0KGxvY2F0aW9uKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgbG9jYXRpb24gZm9ybWF0IGZvciBsb2NhdGlvbjogJHtsb2NhdGlvbn0sIGxvY2F0aW9uIHNob3VsZCBiZSB0d28tbGV0dGVyIGFuZCB1cHBlcmNhc2UgY291bnRyeSBJU08gMzE2Ni0xLWFscGhhLTIgY29kZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2F0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVmlld2VyQ2VydGlmaWNhdGUoXG4gICAgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGUsXG4gICAgbWluaW11bVByb3RvY29sVmVyc2lvblByb3A/OiBTZWN1cml0eVBvbGljeVByb3RvY29sLFxuICAgIHNzbFN1cHBvcnRNZXRob2RQcm9wPzogU1NMTWV0aG9kLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25WaWV3ZXJDZXJ0aWZpY2F0ZSB7XG4gICAgY29uc3QgbWluaW11bVByb3RvY29sVmVyc2lvbiA9XG4gICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uUHJvcCA/PyBTZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjE7XG4gICAgY29uc3Qgc3NsU3VwcG9ydE1ldGhvZCA9IHNzbFN1cHBvcnRNZXRob2RQcm9wID8/IFNTTE1ldGhvZC5TTkk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGNlcnRpZmljYXRlXG4gICAgICAgID8geyBhY21DZXJ0aWZpY2F0ZUFybjogY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4gfVxuICAgICAgICA6IHsgY2xvdWRmcm9udERlZmF1bHRDZXJ0aWZpY2F0ZTogdHJ1ZSB9KSxcbiAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IG1pbmltdW1Qcm90b2NvbFZlcnNpb24sXG4gICAgICBzc2xTdXBwb3J0TWV0aG9kOiBzc2xTdXBwb3J0TWV0aG9kLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZGl0aW9uYWxseSBsb29rdXAgb3IgY3JlYXRlIGEgY2hpbGQgYmFzZWQgb24gdGhlIGlkIHByb3ZpZGVkLlxuICAgKiBJZiB0aGUgaWQgaXMgdW5kZWZpbmVkLCBpdCB3aWxsIHJldHVybiB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCB0aGUgaWQgb2YgdGhlIGNoaWxkIHRvIGxvb2t1cCBvciBjcmVhdGVcbiAgICogQHBhcmFtIGNvbnN0cnVjdFR5cGUgdGhlIHR5cGUgb2YgdGhlIGNoaWxkIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gY29uZmlnIHRoZSBjb25maWd1cmF0aW9uIHRvIHBhc3MgdG8gdGhlIGNoaWxkXG4gICAqL1xuICBwcml2YXRlIGRhdGFMb29rdXA8VENvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdD4oXG4gICAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjb25zdHJ1Y3RUeXBlOiBuZXcgKFxuICAgICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICAgIGlkSW5wdXQ6IHN0cmluZyxcbiAgICAgIGNvbmZpZzogYW55LFxuICAgICkgPT4gVENvbnN0cnVjdCxcbiAgICBjb25maWc/OiBhbnksXG4gICk6IFRDb25zdHJ1Y3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBjaGlsZCA9IHRoaXMubm9kZS50cnlGaW5kQ2hpbGQoaWQpIGFzIFRDb25zdHJ1Y3QgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgY2hpbGQgPSBuZXcgY29uc3RydWN0VHlwZSh0aGlzLCBpZCwgY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvUmVzdHJpY3Rpb24ge1xuICByZWFkb25seSBsb2NhdGlvbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZXN0cmljdGlvblR5cGU6IEdlb1Jlc3RyaWN0aW9uVHlwZTtcbn1cblxuZXhwb3J0IGVudW0gR2VvUmVzdHJpY3Rpb25UeXBlIHtcbiAgTk9ORSA9IFwibm9uZVwiLFxuICBXSElURUxJU1QgPSBcIndoaXRlbGlzdFwiLFxuICBCTEFDS0xJU1QgPSBcImJsYWNrbGlzdFwiLFxufVxuXG4vLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250L2xpYi9kaXN0cmlidXRpb24udHNcblxuLyoqIE1heGltdW0gSFRUUCB2ZXJzaW9uIHRvIHN1cHBvcnQgKi9cbmV4cG9ydCBlbnVtIEh0dHBWZXJzaW9uIHtcbiAgLyoqIEhUVFAgMS4xICovXG4gIEhUVFAxXzEgPSBcImh0dHAxLjFcIixcbiAgLyoqIEhUVFAgMiAqL1xuICBIVFRQMiA9IFwiaHR0cDJcIixcbiAgLyoqIEhUVFAgMiBhbmQgSFRUUCAzICovXG4gIEhUVFAyX0FORF8zID0gXCJodHRwMmFuZDNcIixcbiAgLyoqIEhUVFAgMyAqL1xuICBIVFRQMyA9IFwiaHR0cDNcIixcbn1cblxuLyoqXG4gKiBUaGUgcHJpY2UgY2xhc3MgZGV0ZXJtaW5lcyBob3cgbWFueSBlZGdlIGxvY2F0aW9ucyBDbG91ZEZyb250IHdpbGwgdXNlIGZvciB5b3VyIGRpc3RyaWJ1dGlvbi5cbiAqIFNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvcHJpY2luZy8gZm9yIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgcmVnaW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gUHJpY2VDbGFzcyB7XG4gIC8qKiBVU0EsIENhbmFkYSwgRXVyb3BlLCAmIElzcmFlbCAqL1xuICBQUklDRV9DTEFTU18xMDAgPSBcIlByaWNlQ2xhc3NfMTAwXCIsXG4gIC8qKiBQUklDRV9DTEFTU18xMDAgKyBTb3V0aCBBZnJpY2EsIEtlbnlhLCBNaWRkbGUgRWFzdCwgSmFwYW4sIFNpbmdhcG9yZSwgU291dGggS29yZWEsIFRhaXdhbiwgSG9uZyBLb25nLCAmIFBoaWxpcHBpbmVzICovXG4gIFBSSUNFX0NMQVNTXzIwMCA9IFwiUHJpY2VDbGFzc18yMDBcIixcbiAgLyoqIEFsbCBsb2NhdGlvbnMgKi9cbiAgUFJJQ0VfQ0xBU1NfQUxMID0gXCJQcmljZUNsYXNzX0FsbFwiLFxufVxuXG4vKipcbiAqIFRoZSBTU0wgbWV0aG9kIENsb3VkRnJvbnQgd2lsbCB1c2UgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFNlcnZlciBOYW1lIEluZGljYXRpb24gKFNOSSkgLSBpcyBhbiBleHRlbnNpb24gdG8gdGhlIFRMUyBjb21wdXRlciBuZXR3b3JraW5nIHByb3RvY29sIGJ5IHdoaWNoIGEgY2xpZW50IGluZGljYXRlc1xuICogIHdoaWNoIGhvc3RuYW1lIGl0IGlzIGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byBhdCB0aGUgc3RhcnQgb2YgdGhlIGhhbmRzaGFraW5nIHByb2Nlc3MuIFRoaXMgYWxsb3dzIGEgc2VydmVyIHRvIHByZXNlbnRcbiAqICBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcyBhbmQgVENQIHBvcnQgbnVtYmVyIGFuZCBoZW5jZSBhbGxvd3MgbXVsdGlwbGUgc2VjdXJlIChIVFRQUykgd2Vic2l0ZXNcbiAqIChvciBhbnkgb3RoZXIgc2VydmljZSBvdmVyIFRMUykgdG8gYmUgc2VydmVkIGJ5IHRoZSBzYW1lIElQIGFkZHJlc3Mgd2l0aG91dCByZXF1aXJpbmcgYWxsIHRob3NlIHNpdGVzIHRvIHVzZSB0aGUgc2FtZSBjZXJ0aWZpY2F0ZS5cbiAqXG4gKiBDbG91ZEZyb250IGNhbiB1c2UgU05JIHRvIGhvc3QgbXVsdGlwbGUgZGlzdHJpYnV0aW9ucyBvbiB0aGUgc2FtZSBJUCAtIHdoaWNoIGEgbGFyZ2UgbWFqb3JpdHkgb2YgY2xpZW50cyB3aWxsIHN1cHBvcnQuXG4gKlxuICogSWYgeW91ciBjbGllbnRzIGNhbm5vdCBzdXBwb3J0IFNOSSBob3dldmVyIC0gQ2xvdWRGcm9udCBjYW4gdXNlIGRlZGljYXRlZCBJUHMgZm9yIHlvdXIgZGlzdHJpYnV0aW9uIC0gYnV0IHRoZXJlIGlzIGEgcHJvcmF0ZWQgbW9udGhseSBjaGFyZ2UgZm9yXG4gKiB1c2luZyB0aGlzIGZlYXR1cmUuIEJ5IGRlZmF1bHQsIHdlIHVzZSBTTkkgLSBidXQgeW91IGNhbiBvcHRpb25hbGx5IGVuYWJsZSBkZWRpY2F0ZWQgSVBzIChWSVApLlxuICpcbiAqIFNlZSB0aGUgQ2xvdWRGcm9udCBTU0wgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBwcmljaW5nIDogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9jbG91ZGZyb250L2N1c3RvbS1zc2wtZG9tYWlucy9cbiAqXG4gKi9cbmV4cG9ydCBlbnVtIFNTTE1ldGhvZCB7XG4gIFNOSSA9IFwic25pLW9ubHlcIixcbiAgVklQID0gXCJ2aXBcIixcbn1cblxuLyoqXG4gKiBUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMuXG4gKiBDbG91ZEZyb250IHNlcnZlcyB5b3VyIG9iamVjdHMgb25seSB0byBicm93c2VycyBvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBhdCBsZWFzdCB0aGUgU1NMIHZlcnNpb24gdGhhdCB5b3Ugc3BlY2lmeS5cbiAqL1xuZXhwb3J0IGVudW0gU2VjdXJpdHlQb2xpY3lQcm90b2NvbCB7XG4gIFNTTF9WMyA9IFwiU1NMdjNcIixcbiAgVExTX1YxID0gXCJUTFN2MVwiLFxuICBUTFNfVjFfMjAxNiA9IFwiVExTdjFfMjAxNlwiLFxuICBUTFNfVjFfMV8yMDE2ID0gXCJUTFN2MS4xXzIwMTZcIixcbiAgVExTX1YxXzJfMjAxOCA9IFwiVExTdjEuMl8yMDE4XCIsXG4gIFRMU19WMV8yXzIwMTkgPSBcIlRMU3YxLjJfMjAxOVwiLFxuICBUTFNfVjFfMl8yMDIxID0gXCJUTFN2MS4yXzIwMjFcIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yUmVzcG9uc2Uge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBjYWNoZSB0aGUgSFRUUCBzdGF0dXMgY29kZSBzcGVjaWZpZWQgaW4gRXJyb3JDb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IGNhY2hpbmcgVFRMIGJlaGF2aW9yIGFwcGxpZXNcbiAgICovXG4gIHJlYWRvbmx5IHR0bD86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNwZWNpZnkgYSBjdXN0b20gZXJyb3IgcGFnZSBhbmQvb3IgYSBjYWNoaW5nIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFN0YXR1czogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJldHVybiB0byB0aGUgdmlld2VyIGFsb25nIHdpdGggdGhlIGN1c3RvbSBlcnJvciBwYWdlLlxuICAgKlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgcmVzcG9uc2VIdHRwU3RhdHVzYCwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgdmFsdWUgZm9yIGByZXNwb25zZVBhZ2VQYXRoYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZXJyb3IgY29kZSB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSByZXNwb25zZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VIdHRwU3RhdHVzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIGN1c3RvbSBlcnJvciBwYWdlIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gdG8gYSB2aWV3ZXIgd2hlbiB5b3VyIG9yaWdpbiByZXR1cm5zIHRoZVxuICAgKiBgaHR0cFN0YXR1c2AsIGZvciBleGFtcGxlLCAvNHh4LWVycm9ycy80MDMtZm9yYmlkZGVuLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZGVmYXVsdCBDbG91ZEZyb250IHJlc3BvbnNlIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VQYWdlUGF0aD86IHN0cmluZztcbn1cblxuLy8gcHJpdmF0ZSBpbnRlcmZhY2UgdG8ga2VlcCB0cmFjayBvZiBDYWNoZUJlaGF2aW9yc1xuaW50ZXJmYWNlIENhY2hlQmVoYXZpb3IgZXh0ZW5kcyBCZWhhdmlvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBhdHRlcm4gKGUuZy4sIGBpbWFnZXMvKi5qcGdgKSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXF1ZXN0cyB0byBhcHBseSB0aGUgYmVoYXZpb3IgdG8uXG4gICAqIFRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgYmVoYXZpb3IgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYERpc3RyaWJ1dGlvbmAgdGhhdCBoYXMgYSBwYXRoIHBhdHRlcm5cbiAgICogb2YgJyonLCB3aGljaCBhY3RzIGFzIHRoZSBjYXRjaC1hbGwgZGVmYXVsdCBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhQYXR0ZXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIElEIGZvciB0aGUgb3JpZ2luIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByb3V0ZSByZXF1ZXN0cyB0byB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzXG4gICAqIHRoZSBwYXRoIHBhdHRlcm4gZWl0aGVyIGZvciBhIGNhY2hlIGJlaGF2aW9yIG9yIGZvciB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldE9yaWdpbklkOiBzdHJpbmc7XG59XG5cbi8vIHByaXZhdGUgaW50ZXJmYWNlIHRvIGluZGV4IG9yaWdpbnMgYnkgaWRcbmludGVyZmFjZSBPcmlnaW5JbmRleCB7XG4gIG9yaWdpbjogSU9yaWdpbjtcbiAgaWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIG5ldyBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCZWhhdmlvck9wdGlvbnMgZXh0ZW5kcyBBZGRCZWhhdmlvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG9yaWdpbiB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcm91dGUgcmVxdWVzdHMgdG8gd2hlbiB0aGV5IG1hdGNoIHRoaXMgYmVoYXZpb3IuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW46IElPcmlnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGEgbmV3IGJlaGF2aW9yIHRvIGEgRGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEJlaGF2aW9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gYWxsb3cgZm9yIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kcz86IEFsbG93ZWRNZXRob2RzO1xuXG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gY2FjaGUgZm9yIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlZE1ldGhvZHM/OiBDYWNoZWRNZXRob2RzO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgcG9saWN5IGZvciB0aGlzIGJlaGF2aW9yLiBUaGUgY2FjaGUgcG9saWN5IGRldGVybWluZXMgd2hhdCB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBjYWNoZSBrZXksXG4gICAqIGFuZCB0aGUgdGltZS10by1saXZlIChUVEwpIHZhbHVlcyBmb3IgdGhlIGNhY2hlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwuXG4gICAqIEBkZWZhdWx0IE1hbmFnZWRDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRFxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVQb2xpY3k/OiBNYW5hZ2VkQ2FjaGVQb2xpY3k7IC8vVE9ETzogc3VwcG9ydCBjdXN0b20gY2FjaGUgcG9saWNpZXNcblxuICAvKipcbiAgICogV2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGF1dG9tYXRpY2FsbHkgY29tcHJlc3MgY2VydGFpbiBmaWxlcyBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvci5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9TZXJ2aW5nQ29tcHJlc3NlZEZpbGVzLmh0bWwjY29tcHJlc3NlZC1jb250ZW50LWNsb3VkZnJvbnQtZmlsZS10eXBlc1xuICAgKiBmb3IgZmlsZSB0eXBlcyBDbG91ZEZyb250IHdpbGwgY29tcHJlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXByZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBmb3IgdGhpcyBiZWhhdmlvci4gVGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIHZhbHVlcyAoZS5nLiwgaGVhZGVycywgY29va2llcylcbiAgICogYXJlIGluY2x1ZGVkIGluIHJlcXVlc3RzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblJlcXVlc3RQb2xpY3k/OiBNYW5hZ2VkT3JpZ2luUmVxdWVzdFBvbGljeTsgLy9UT0RPOiBzdXBwb3J0IGN1c3RvbSBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgaGVhZGVycyBwb2xpY3kgZm9yIHRoaXMgYmVoYXZpb3IuIFRoZSByZXNwb25zZSBoZWFkZXJzIHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIGhlYWRlcnMgYXJlIGluY2x1ZGVkIGluIHJlc3BvbnNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3BvbnNlSGVhZGVyc1BvbGljeT86IE1hbmFnZWRSZXNwb25zZUhlYWRlcnNQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gaW5kaWNhdGUgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSBtZWRpYSBmaWxlcyBpbiB0aGUgTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcgZm9ybWF0IHVzaW5nIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzbW9vdGhTdHJlYW1pbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgdGhhdCB2aWV3ZXJzIGNhbiB1c2UgdG8gYWNjZXNzIHRoZSBmaWxlcyBjb250cm9sbGVkIGJ5IHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IFZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTFxuICAgKi9cbiAgcmVhZG9ubHkgdmlld2VyUHJvdG9jb2xQb2xpY3k/OiBWaWV3ZXJQcm90b2NvbFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIENsb3VkRnJvbnQgZnVuY3Rpb25zIHRvIGludm9rZSBiZWZvcmUgc2VydmluZyB0aGUgY29udGVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZnVuY3Rpb25zIHdpbGwgYmUgaW52b2tlZFxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBGdW5jdGlvbkFzc29jaWF0aW9uW107XG59XG5cbi8qKlxuICogVGhlIEhUVFAgbWV0aG9kcyB0aGF0IHRoZSBCZWhhdmlvciB3aWxsIGFjY2VwdCByZXF1ZXN0cyBvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFsbG93ZWRNZXRob2RzIHtcbiAgLyoqIEhFQUQgYW5kIEdFVCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTE9XX0dFVF9IRUFEID0gbmV3IEFsbG93ZWRNZXRob2RzKFtcIkdFVFwiLCBcIkhFQURcIl0pO1xuICAvKiogSEVBRCwgR0VULCBhbmQgT1BUSU9OUyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTE9XX0dFVF9IRUFEX09QVElPTlMgPSBuZXcgQWxsb3dlZE1ldGhvZHMoW1xuICAgIFwiR0VUXCIsXG4gICAgXCJIRUFEXCIsXG4gICAgXCJPUFRJT05TXCIsXG4gIF0pO1xuICAvKiogQWxsIHN1cHBvcnRlZCBIVFRQIG1ldGhvZHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTExPV19BTEwgPSBuZXcgQWxsb3dlZE1ldGhvZHMoW1xuICAgIFwiR0VUXCIsXG4gICAgXCJIRUFEXCIsXG4gICAgXCJPUFRJT05TXCIsXG4gICAgXCJQVVRcIixcbiAgICBcIlBBVENIXCIsXG4gICAgXCJQT1NUXCIsXG4gICAgXCJERUxFVEVcIixcbiAgXSk7XG5cbiAgLyoqIEhUVFAgbWV0aG9kcyBzdXBwb3J0ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobWV0aG9kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzO1xuICB9XG59XG5cbi8qKlxuICogVGhlIEhUVFAgbWV0aG9kcyB0aGF0IHRoZSBCZWhhdmlvciB3aWxsIGNhY2hlIHJlcXVlc3RzIG9uLlxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVkTWV0aG9kcyB7XG4gIC8qKiBIRUFEIGFuZCBHRVQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQUNIRV9HRVRfSEVBRCA9IG5ldyBDYWNoZWRNZXRob2RzKFtcIkdFVFwiLCBcIkhFQURcIl0pO1xuICAvKiogSEVBRCwgR0VULCBhbmQgT1BUSU9OUyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENBQ0hFX0dFVF9IRUFEX09QVElPTlMgPSBuZXcgQ2FjaGVkTWV0aG9kcyhbXG4gICAgXCJHRVRcIixcbiAgICBcIkhFQURcIixcbiAgICBcIk9QVElPTlNcIixcbiAgXSk7XG5cbiAgLyoqIEhUVFAgbWV0aG9kcyBzdXBwb3J0ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobWV0aG9kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzO1xuICB9XG59XG5cbi8qKlxuICogSG93IEhUVFBzIHNob3VsZCBiZSBoYW5kbGVkIHdpdGggeW91ciBkaXN0cmlidXRpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFZpZXdlclByb3RvY29sUG9saWN5IHtcbiAgLyoqIEhUVFBTIG9ubHkgKi9cbiAgSFRUUFNfT05MWSA9IFwiaHR0cHMtb25seVwiLFxuICAvKiogV2lsbCByZWRpcmVjdCBIVFRQIHJlcXVlc3RzIHRvIEhUVFBTICovXG4gIFJFRElSRUNUX1RPX0hUVFBTID0gXCJyZWRpcmVjdC10by1odHRwc1wiLFxuICAvKiogQm90aCBIVFRQIGFuZCBIVFRQUyBzdXBwb3J0ZWQgKi9cbiAgQUxMT1dfQUxMID0gXCJhbGxvdy1hbGxcIixcbn1cblxuLyoqXG4gKiBDbG91ZEZyb250IHByb3ZpZGVzIGEgc2V0IG9mIG1hbmFnZWQgY2FjaGUgcG9saWNpZXMgdGhhdCB5b3UgY2FuIGF0dGFjaCB0byBhbnkgb2YgeW91ciBkaXN0cmlidXRpb24ncyBjYWNoZSBiZWhhdmlvcnMuXG4gKiBXaXRoIGEgbWFuYWdlZCBjYWNoZSBwb2xpY3ksIHlvdSBkb24ndCBuZWVkIHRvIHdyaXRlIG9yIG1haW50YWluIHlvdXIgb3duIGNhY2hlIHBvbGljeS4gVGhlIG1hbmFnZWQgcG9saWNpZXMgdXNlIHNldHRpbmdzIHRoYXQgYXJlIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWxcbiAqIEBsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL2RhdGEtc291cmNlcy9jbG91ZGZyb250X2NhY2hlX3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkQ2FjaGVQb2xpY3kge1xuICAvKipcbiAgICogVGhpcyBwb2xpY3kgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGFuIG9yaWdpbiB0aGF0IGlzIGFuIEFXUyBBbXBsaWZ5IHdlYiBhcHAuXG4gICAqL1xuICBBTVBMSUZZID0gXCJNYW5hZ2VkLUFtcGxpZnlcIixcbiAgLyoqXG4gICAqIE9wdGltaXplIGNhY2hlIGVmZmljaWVuY3kgYnkgbWluaW1pemluZyB0aGUgdmFsdWVzIHRoYXQgQ2xvdWRGcm9udCBpbmNsdWRlcyBpbiB0aGUgY2FjaGUga2V5LlxuICAgKiBRdWVyeSBzdHJpbmdzIGFuZCBjb29raWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGNhY2hlIGtleSwgYW5kIG9ubHkgdGhlIG5vcm1hbGl6ZWQgJ0FjY2VwdC1FbmNvZGluZycgaGVhZGVyIGlzIGluY2x1ZGVkLlxuICAgKi9cbiAgQ0FDSElOR19PUFRJTUlaRUQgPSBcIk1hbmFnZWQtQ2FjaGluZ09wdGltaXplZFwiLFxuICAvKipcbiAgICogT3B0aW1pemUgY2FjaGUgZWZmaWNpZW5jeSBieSBtaW5pbWl6aW5nIHRoZSB2YWx1ZXMgdGhhdCBDbG91ZEZyb250IGluY2x1ZGVzIGluIHRoZSBjYWNoZSBrZXkuXG4gICAqIFF1ZXJ5IHN0cmluZ3MgYW5kIGNvb2tpZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5LCBhbmQgb25seSB0aGUgbm9ybWFsaXplZCAnQWNjZXB0LUVuY29kaW5nJyBoZWFkZXIgaXMgaW5jbHVkZWQuXG4gICAqIERpc2FibGVzIGNhY2hlIGNvbXByZXNzaW9uLlxuICAgKi9cbiAgQ0FDSElOR19PUFRJTUlaRURfRk9SX1VOQ09NUFJFU1NFRF9PQkpFQ1RTID0gXCJNYW5hZ2VkLUNhY2hpbmdPcHRpbWl6ZWRGb3JVbmNvbXByZXNzZWRPYmplY3RzXCIsXG4gIC8qKiBEaXNhYmxlcyBjYWNoaW5nLiBUaGlzIHBvbGljeSBpcyB1c2VmdWwgZm9yIGR5bmFtaWMgY29udGVudCBhbmQgZm9yIHJlcXVlc3RzIHRoYXQgYXJlIG5vdCBjYWNoZWFibGUuICovXG4gIENBQ0hJTkdfRElTQUJMRUQgPSBcIk1hbmFnZWQtQ2FjaGluZ0Rpc2FibGVkXCIsXG4gIC8qKiBEZXNpZ25lZCBmb3IgdXNlIHdpdGggYW4gb3JpZ2luIHRoYXQgaXMgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgZW5kcG9pbnQuICovXG4gIEVMRU1FTlRBTF9NRURJQV9QQUNLQUdFID0gXCJNYW5hZ2VkLUVsZW1lbnRhbC1NZWRpYVBhY2thZ2VcIixcbiAgLyoqXG4gICAqIERlc2lnbmVkIGZvciB1c2Ugd2l0aCBhbiBvcmlnaW4gdGhhdCByZXR1cm5zIENhY2hlLUNvbnRyb2wgSFRUUCByZXNwb25zZSBoZWFkZXJzIGFuZCBkb2VzIG5vdCBzZXJ2ZSBkaWZmZXJlbnQgY29udGVudCBiYXNlZCBvbiB2YWx1ZXMgcHJlc2VudCBpbiB0aGUgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgVVNFX09SSUdJTl9DQUNIRV9DT05UUk9MX0hFQURFUlMgPSBcIk1hbmFnZWQtVXNlT3JpZ2luQ2FjaGVDb250cm9sSGVhZGVyc1wiLFxuICAvKipcbiAgICogRGVzaWduZWQgZm9yIHVzZSB3aXRoIGFuIG9yaWdpbiB0aGF0IHJldHVybnMgQ2FjaGUtQ29udHJvbCBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgYW5kIHNlcnZlcyBkaWZmZXJlbnQgY29udGVudCBiYXNlZCBvbiB2YWx1ZXMgcHJlc2VudCBpbiB0aGUgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgVVNFX09SSUdJTl9DQUNIRV9DT05UUk9MX0hFQURFUlNfUVVFUllfU1RSSU5HUyA9IFwiTWFuYWdlZC1Vc2VPcmlnaW5DYWNoZUNvbnRyb2xIZWFkZXJzLVF1ZXJ5U3RyaW5nc1wiLFxufVxuXG4vKipcbiAqIE9yaWdpbiBSZXF1ZXN0IFBvbGljeSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLW9yaWdpbi1yZXF1ZXN0LXBvbGljaWVzLmh0bWxcbiAqIEBsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL2RhdGEtc291cmNlcy9jbG91ZGZyb250X29yaWdpbl9yZXF1ZXN0X3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkT3JpZ2luUmVxdWVzdFBvbGljeSB7XG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBvbmx5IHRoZSBVc2VyLUFnZW50IGFuZCBSZWZlcmVyIGhlYWRlcnMuIEl0IGRvZXNu4oCZdCBpbmNsdWRlIGFueSBxdWVyeSBzdHJpbmdzIG9yIGNvb2tpZXMuICovXG4gIFVTRVJfQUdFTlRfUkVGRVJFUl9IRUFERVJTID0gXCJNYW5hZ2VkLVVzZXJBZ2VudFJlZmVyZXJIZWFkZXJzXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyB0aGUgaGVhZGVyIHRoYXQgZW5hYmxlcyBjcm9zcy1vcmlnaW4gcmVzb3VyY2Ugc2hhcmluZyAoQ09SUykgcmVxdWVzdHMgd2hlbiB0aGUgb3JpZ2luIGlzIGEgY3VzdG9tIG9yaWdpbi4gKi9cbiAgQ09SU19DVVNUT01fT1JJR0lOID0gXCJNYW5hZ2VkLUNPUlMtQ3VzdG9tT3JpZ2luXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyB0aGUgaGVhZGVycyB0aGF0IGVuYWJsZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2Ugc2hhcmluZyAoQ09SUykgcmVxdWVzdHMgd2hlbiB0aGUgb3JpZ2luIGlzIGFuIEFtYXpvbiBTMyBidWNrZXQuICovXG4gIENPUlNfUzNfT1JJR0lOID0gXCJNYW5hZ2VkLUNPUlMtUzNPcmlnaW5cIixcbiAgLyoqIFRoaXMgcG9saWN5IGluY2x1ZGVzIGFsbCB2YWx1ZXMgKHF1ZXJ5IHN0cmluZ3MsIGhlYWRlcnMsIGFuZCBjb29raWVzKSBpbiB0aGUgdmlld2VyIHJlcXVlc3QuICovXG4gIEFMTF9WSUVXRVIgPSBcIk1hbmFnZWQtQWxsVmlld2VyXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYW4gb3JpZ2luIHRoYXQgaXMgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciBlbmRwb2ludC4gKi9cbiAgRUxFTUVOVEFMX01FRElBX1RBSUxPUiA9IFwiTWFuYWdlZC1FbGVtZW50YWwtTWVkaWFUYWlsb3ItUGVyc29uYWxpemVkTWFuaWZlc3RzXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBhbGwgdmFsdWVzIChoZWFkZXJzLCBjb29raWVzLCBhbmQgcXVlcnkgc3RyaW5ncykgaW4gdGhlIHZpZXdlciByZXF1ZXN0LCBhbmQgYWxsIENsb3VkRnJvbnQgaGVhZGVycyB0aGF0IHdlcmUgcmVsZWFzZWQgdGhyb3VnaCBKdW5lIDIwMjIgKENsb3VkRnJvbnQgaGVhZGVycyByZWxlYXNlZCBhZnRlciBKdW5lIDIwMjIgYXJlIG5vdCBpbmNsdWRlZCkuICovXG4gIEFMTF9WSUVXRVJfQU5EX0NMT1VERlJPTlRfMjAyMiA9IFwiTWFuYWdlZC1BbGxWaWV3ZXJBbmRDbG91ZEZyb250SGVhZGVycy0yMDIyLTA2XCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBhbGwgdmFsdWVzIChxdWVyeSBzdHJpbmdzLCBhbmQgY29va2llcykgZXhjZXB0IHRoZSBoZWFkZXIgaW4gdGhlIHZpZXdlciByZXF1ZXN0LiAqL1xuICBBTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUiA9IFwiTWFuYWdlZC1BbGxWaWV3ZXJFeGNlcHRIb3N0SGVhZGVyXCIsXG59XG5cbi8qKlxuICogQSBSZXNwb25zZSBIZWFkZXJzIFBvbGljeSBjb25maWd1cmF0aW9uXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtcmVzcG9uc2UtaGVhZGVycy1wb2xpY2llcy5odG1sXG4gKiBAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjYwLjAvZG9jcy9kYXRhLXNvdXJjZXMvY2xvdWRmcm9udF9yZXNwb25zZV9oZWFkZXJzX3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkUmVzcG9uc2VIZWFkZXJzUG9saWN5IHtcbiAgLyoqIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IHNpbXBsZSBDT1JTIHJlcXVlc3RzIGZyb20gYW55IG9yaWdpbi4gKi9cbiAgQ09SU19BTExPV19BTExfT1JJR0lOUyA9IFwiTWFuYWdlZC1TaW1wbGVDT1JTXCIsIC8vNjA2Njk2NTItNDU1Yi00YWU5LTg1YTQtYzRjMDIzOTNmODZjXG4gIC8qKiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSB0byBhbGxvdyBDT1JTIHJlcXVlc3RzIGZyb20gYW55IG9yaWdpbiwgaW5jbHVkaW5nIHByZWZsaWdodCByZXF1ZXN0cy4gKi9cbiAgQ09SU19BTExPV19BTExfT1JJR0lOU19XSVRIX1BSRUZMSUdIVCA9IFwiTWFuYWdlZC1DT1JTLVdpdGgtUHJlZmxpZ2h0XCIsIC8vNWNjM2I5MDgtZTYxOS00Yjk5LTg4ZTUtMmNmN2Y0NTk2NWJkXG4gIC8qKiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSB0byBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBTRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvLzY3Zjc3MjVjLTZmOTctNDIxMC04MmQ3LTU1MTJiMzFlOWQwM1xuICAvKiogVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgc2ltcGxlIENPUlMgcmVxdWVzdHMgZnJvbSBhbnkgb3JpZ2luIGFuZCBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBDT1JTX0FMTE9XX0FMTF9PUklHSU5TX0FORF9TRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLUNPUlMtYW5kLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvL2U2MWViNjBjLTljMzUtNGQyMC1hOTI4LTJiODRlMDJhZjg5Y1xuICAvKiogVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgQ09SUyByZXF1ZXN0cyBmcm9tIGFueSBvcmlnaW4sIGluY2x1ZGluZyBwcmVmbGlnaHQgcmVxdWVzdHMsIGFuZCBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBDT1JTX0FMTE9XX0FMTF9PUklHSU5TX1dJVEhfUFJFRkxJR0hUX0FORF9TRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLUNPUlMtd2l0aC1wcmVmbGlnaHQtYW5kLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvL2VhYWI0MzgxLWVkMzMtNGE4Ni04OGNhLWQ5NTU4ZGM2Y2Q2M1xufVxuIl19
@@ -0,0 +1,29 @@
1
+ import { route53Record } from "@cdktf/provider-aws";
2
+ import { IRecordSet, IDnsZone, IDistribution } from ".";
3
+ import { IBucket } from "../storage";
4
+ /**
5
+ * Classes that are valid alias record targets, like CloudFront distributions and load
6
+ * balancers, should implement this interface.
7
+ */
8
+ export interface IAliasRecordTarget {
9
+ /**
10
+ * Return hosted zone ID and DNS name, usable for Route53 alias targets
11
+ */
12
+ bind(record: IRecordSet, zone?: IDnsZone): route53Record.Route53RecordAlias;
13
+ }
14
+ /**
15
+ * Use a CloudFront Distribution as an alias record target
16
+ */
17
+ export declare class DistributionTarget implements IAliasRecordTarget {
18
+ private readonly distribution;
19
+ constructor(distribution: IDistribution);
20
+ bind(_record: IRecordSet, _zone?: IDnsZone): route53Record.Route53RecordAlias;
21
+ }
22
+ /**
23
+ * Use Bucket as an alias record target
24
+ */
25
+ export declare class BucketWebsiteTarget implements IAliasRecordTarget {
26
+ private readonly bucket;
27
+ constructor(bucket: IBucket);
28
+ bind(_record: IRecordSet, _zone?: IDnsZone): route53Record.Route53RecordAlias;
29
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BucketWebsiteTarget = exports.DistributionTarget = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * Use a CloudFront Distribution as an alias record target
8
+ */
9
+ class DistributionTarget {
10
+ constructor(distribution) {
11
+ this.distribution = distribution;
12
+ }
13
+ bind(_record, _zone) {
14
+ return {
15
+ zoneId: this.distribution.hostedZoneId,
16
+ name: this.distribution.domainName,
17
+ evaluateTargetHealth: false,
18
+ };
19
+ }
20
+ }
21
+ exports.DistributionTarget = DistributionTarget;
22
+ _a = JSII_RTTI_SYMBOL_1;
23
+ DistributionTarget[_a] = { fqn: "terraconstructs.aws.edge.DistributionTarget", version: "0.0.8" };
24
+ /**
25
+ * Use Bucket as an alias record target
26
+ */
27
+ class BucketWebsiteTarget {
28
+ constructor(bucket) {
29
+ this.bucket = bucket;
30
+ }
31
+ bind(_record, _zone) {
32
+ if (!this.bucket.isWebsite()) {
33
+ throw new Error("Cannot use a non-website bucket as an alias record target");
34
+ }
35
+ this.bucket.bucketOutputs.websiteDomainName;
36
+ return {
37
+ zoneId: this.bucket.hostedZoneId,
38
+ name: this.bucket.websiteDomainName,
39
+ evaluateTargetHealth: true,
40
+ };
41
+ }
42
+ }
43
+ exports.BucketWebsiteTarget = BucketWebsiteTarget;
44
+ _b = JSII_RTTI_SYMBOL_1;
45
+ BucketWebsiteTarget[_b] = { fqn: "terraconstructs.aws.edge.BucketWebsiteTarget", version: "0.0.8" };
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLWFsaWFzLXJlY29yZC10YXJnZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL2Rucy1hbGlhcy1yZWNvcmQtdGFyZ2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWVBOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0IsWUFBNkIsWUFBMkI7UUFBM0IsaUJBQVksR0FBWixZQUFZLENBQWU7SUFBRyxDQUFDO0lBRXJELElBQUksQ0FDVCxPQUFtQixFQUNuQixLQUFnQjtRQUVoQixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUN0QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQ2xDLG9CQUFvQixFQUFFLEtBQUs7U0FDNUIsQ0FBQztJQUNKLENBQUM7O0FBWkgsZ0RBYUM7OztBQUVEOztHQUVHO0FBQ0gsTUFBYSxtQkFBbUI7SUFDOUIsWUFBNkIsTUFBZTtRQUFmLFdBQU0sR0FBTixNQUFNLENBQVM7SUFBRyxDQUFDO0lBRXpDLElBQUksQ0FDVCxPQUFtQixFQUNuQixLQUFnQjtRQUVoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUM7UUFFNUMsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCO1lBQ25DLG9CQUFvQixFQUFFLElBQUk7U0FDM0IsQ0FBQztJQUNKLENBQUM7O0FBbkJILGtEQW9CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJvdXRlNTNSZWNvcmQgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgSVJlY29yZFNldCwgSURuc1pvbmUsIElEaXN0cmlidXRpb24gfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCIuLi9zdG9yYWdlXCI7XG5cbi8qKlxuICogQ2xhc3NlcyB0aGF0IGFyZSB2YWxpZCBhbGlhcyByZWNvcmQgdGFyZ2V0cywgbGlrZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbnMgYW5kIGxvYWRcbiAqIGJhbGFuY2Vycywgc2hvdWxkIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICAvKipcbiAgICogUmV0dXJuIGhvc3RlZCB6b25lIElEIGFuZCBETlMgbmFtZSwgdXNhYmxlIGZvciBSb3V0ZTUzIGFsaWFzIHRhcmdldHNcbiAgICovXG4gIGJpbmQocmVjb3JkOiBJUmVjb3JkU2V0LCB6b25lPzogSURuc1pvbmUpOiByb3V0ZTUzUmVjb3JkLlJvdXRlNTNSZWNvcmRBbGlhcztcbn1cblxuLyoqXG4gKiBVc2UgYSBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiBhcyBhbiBhbGlhcyByZWNvcmQgdGFyZ2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBEaXN0cmlidXRpb25UYXJnZXQgaW1wbGVtZW50cyBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogSURpc3RyaWJ1dGlvbikge31cblxuICBwdWJsaWMgYmluZChcbiAgICBfcmVjb3JkOiBJUmVjb3JkU2V0LFxuICAgIF96b25lPzogSURuc1pvbmUsXG4gICk6IHJvdXRlNTNSZWNvcmQuUm91dGU1M1JlY29yZEFsaWFzIHtcbiAgICByZXR1cm4ge1xuICAgICAgem9uZUlkOiB0aGlzLmRpc3RyaWJ1dGlvbi5ob3N0ZWRab25lSWQsXG4gICAgICBuYW1lOiB0aGlzLmRpc3RyaWJ1dGlvbi5kb21haW5OYW1lLFxuICAgICAgZXZhbHVhdGVUYXJnZXRIZWFsdGg6IGZhbHNlLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBVc2UgQnVja2V0IGFzIGFuIGFsaWFzIHJlY29yZCB0YXJnZXRcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Y2tldFdlYnNpdGVUYXJnZXQgaW1wbGVtZW50cyBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldCkge31cblxuICBwdWJsaWMgYmluZChcbiAgICBfcmVjb3JkOiBJUmVjb3JkU2V0LFxuICAgIF96b25lPzogSURuc1pvbmUsXG4gICk6IHJvdXRlNTNSZWNvcmQuUm91dGU1M1JlY29yZEFsaWFzIHtcbiAgICBpZiAoIXRoaXMuYnVja2V0LmlzV2Vic2l0ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVzZSBhIG5vbi13ZWJzaXRlIGJ1Y2tldCBhcyBhbiBhbGlhcyByZWNvcmQgdGFyZ2V0XCIsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmJ1Y2tldC5idWNrZXRPdXRwdXRzLndlYnNpdGVEb21haW5OYW1lO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHpvbmVJZDogdGhpcy5idWNrZXQuaG9zdGVkWm9uZUlkLFxuICAgICAgbmFtZTogdGhpcy5idWNrZXQud2Vic2l0ZURvbWFpbk5hbWUsXG4gICAgICBldmFsdWF0ZVRhcmdldEhlYWx0aDogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=