@microsoft/terraform-cdk-constructs 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/.jsii +60999 -15780
  2. package/API.md +54947 -10610
  3. package/README.md +72 -36
  4. package/docs/monitoring-guide.md +206 -0
  5. package/docs/testing.md +84 -1
  6. package/lib/azure-actiongroup/index.d.ts +11 -0
  7. package/lib/azure-actiongroup/index.js +28 -0
  8. package/lib/azure-actiongroup/lib/action-group-schemas.d.ts +24 -0
  9. package/lib/azure-actiongroup/lib/action-group-schemas.js +201 -0
  10. package/lib/azure-actiongroup/lib/action-group.d.ts +312 -0
  11. package/lib/azure-actiongroup/lib/action-group.js +201 -0
  12. package/lib/azure-actiongroup/lib/index.d.ts +5 -0
  13. package/lib/azure-actiongroup/lib/index.js +22 -0
  14. package/lib/azure-actiongroup/test/action-group.integ.d.ts +9 -0
  15. package/lib/azure-actiongroup/test/action-group.integ.js +79 -0
  16. package/lib/azure-actiongroup/test/action-group.spec.d.ts +8 -0
  17. package/lib/azure-actiongroup/test/action-group.spec.js +602 -0
  18. package/lib/azure-activitylogalert/index.d.ts +11 -0
  19. package/lib/azure-activitylogalert/index.js +28 -0
  20. package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.d.ts +24 -0
  21. package/lib/azure-activitylogalert/lib/activity-log-alert-schemas.js +182 -0
  22. package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +236 -0
  23. package/lib/azure-activitylogalert/lib/activity-log-alert.js +212 -0
  24. package/lib/azure-activitylogalert/lib/index.d.ts +5 -0
  25. package/lib/azure-activitylogalert/lib/index.js +22 -0
  26. package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +9 -0
  27. package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +98 -0
  28. package/lib/azure-activitylogalert/test/activity-log-alert.spec.d.ts +9 -0
  29. package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +1101 -0
  30. package/lib/azure-aks/index.d.ts +9 -0
  31. package/lib/azure-aks/index.js +28 -0
  32. package/lib/azure-aks/lib/aks-cluster-schemas.d.ts +505 -0
  33. package/lib/azure-aks/lib/aks-cluster-schemas.js +572 -0
  34. package/lib/azure-aks/lib/aks-cluster.d.ts +395 -0
  35. package/lib/azure-aks/lib/aks-cluster.js +489 -0
  36. package/lib/azure-aks/lib/index.d.ts +11 -0
  37. package/lib/azure-aks/lib/index.js +38 -0
  38. package/lib/azure-aks/test/aks-cluster.integ.d.ts +9 -0
  39. package/lib/azure-aks/test/aks-cluster.integ.js +260 -0
  40. package/lib/azure-aks/test/aks-cluster.spec.d.ts +8 -0
  41. package/lib/azure-aks/test/aks-cluster.spec.js +1396 -0
  42. package/lib/azure-diagnosticsettings/index.d.ts +7 -0
  43. package/lib/azure-diagnosticsettings/index.js +24 -0
  44. package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.d.ts +50 -0
  45. package/lib/azure-diagnosticsettings/lib/diagnostic-settings-schemas.js +207 -0
  46. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +193 -0
  47. package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +200 -0
  48. package/lib/azure-diagnosticsettings/lib/index.d.ts +8 -0
  49. package/lib/azure-diagnosticsettings/lib/index.js +25 -0
  50. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.d.ts +8 -0
  51. package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +432 -0
  52. package/lib/azure-metricalert/index.d.ts +11 -0
  53. package/lib/azure-metricalert/index.js +28 -0
  54. package/lib/azure-metricalert/lib/index.d.ts +5 -0
  55. package/lib/azure-metricalert/lib/index.js +22 -0
  56. package/lib/azure-metricalert/lib/metric-alert-schemas.d.ts +24 -0
  57. package/lib/azure-metricalert/lib/metric-alert-schemas.js +242 -0
  58. package/lib/azure-metricalert/lib/metric-alert.d.ts +344 -0
  59. package/lib/azure-metricalert/lib/metric-alert.js +252 -0
  60. package/lib/azure-metricalert/test/metric-alert.integ.d.ts +9 -0
  61. package/lib/azure-metricalert/test/metric-alert.integ.js +123 -0
  62. package/lib/azure-metricalert/test/metric-alert.spec.d.ts +9 -0
  63. package/lib/azure-metricalert/test/metric-alert.spec.js +1266 -0
  64. package/lib/azure-networkinterface/index.d.ts +4 -0
  65. package/lib/azure-networkinterface/index.js +21 -0
  66. package/lib/azure-networkinterface/lib/index.d.ts +6 -0
  67. package/lib/azure-networkinterface/lib/index.js +22 -0
  68. package/lib/azure-networkinterface/lib/network-interface-schemas.d.ts +32 -0
  69. package/lib/azure-networkinterface/lib/network-interface-schemas.js +222 -0
  70. package/lib/azure-networkinterface/lib/network-interface.d.ts +265 -0
  71. package/lib/azure-networkinterface/lib/network-interface.js +228 -0
  72. package/lib/azure-networkinterface/test/network-interface.integ.d.ts +9 -0
  73. package/lib/azure-networkinterface/test/network-interface.integ.js +102 -0
  74. package/lib/azure-networkinterface/test/network-interface.spec.d.ts +8 -0
  75. package/lib/azure-networkinterface/test/network-interface.spec.js +655 -0
  76. package/lib/azure-networksecuritygroup/index.d.ts +6 -0
  77. package/lib/azure-networksecuritygroup/index.js +23 -0
  78. package/lib/azure-networksecuritygroup/lib/index.d.ts +5 -0
  79. package/lib/azure-networksecuritygroup/lib/index.js +16 -0
  80. package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.d.ts +32 -0
  81. package/lib/azure-networksecuritygroup/lib/network-security-group-schemas.js +198 -0
  82. package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +268 -0
  83. package/lib/azure-networksecuritygroup/lib/network-security-group.js +248 -0
  84. package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +9 -0
  85. package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +151 -0
  86. package/lib/azure-networksecuritygroup/test/network-security-group.spec.d.ts +8 -0
  87. package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +652 -0
  88. package/lib/azure-publicipaddress/index.d.ts +6 -0
  89. package/lib/azure-publicipaddress/index.js +23 -0
  90. package/lib/azure-publicipaddress/lib/index.d.ts +9 -0
  91. package/lib/azure-publicipaddress/lib/index.js +19 -0
  92. package/lib/azure-publicipaddress/lib/public-ip-address-schemas.d.ts +32 -0
  93. package/lib/azure-publicipaddress/lib/public-ip-address-schemas.js +227 -0
  94. package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +256 -0
  95. package/lib/azure-publicipaddress/lib/public-ip-address.js +267 -0
  96. package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +9 -0
  97. package/lib/azure-publicipaddress/test/public-ip-address.integ.js +75 -0
  98. package/lib/azure-publicipaddress/test/public-ip-address.spec.d.ts +15 -0
  99. package/lib/azure-publicipaddress/test/public-ip-address.spec.js +498 -0
  100. package/lib/azure-resourcegroup/lib/resource-group.js +1 -1
  101. package/lib/azure-resourcegroup/test/resource-group.integ.js +23 -11
  102. package/lib/azure-storageaccount/lib/storage-account-schemas.d.ts +98 -0
  103. package/lib/azure-storageaccount/lib/storage-account-schemas.js +1 -1
  104. package/lib/azure-storageaccount/lib/storage-account.d.ts +38 -1
  105. package/lib/azure-storageaccount/lib/storage-account.js +138 -2
  106. package/lib/azure-storageaccount/test/storage-account.integ.js +91 -12
  107. package/lib/azure-subnet/index.d.ts +4 -0
  108. package/lib/azure-subnet/index.js +21 -0
  109. package/lib/azure-subnet/lib/index.d.ts +5 -0
  110. package/lib/azure-subnet/lib/index.js +22 -0
  111. package/lib/azure-subnet/lib/subnet-schemas.d.ts +32 -0
  112. package/lib/azure-subnet/lib/subnet-schemas.js +237 -0
  113. package/lib/azure-subnet/lib/subnet.d.ts +285 -0
  114. package/lib/azure-subnet/lib/subnet.js +254 -0
  115. package/lib/azure-subnet/test/subnet.integ.d.ts +11 -0
  116. package/lib/azure-subnet/test/subnet.integ.js +80 -0
  117. package/lib/azure-subnet/test/subnet.spec.d.ts +8 -0
  118. package/lib/azure-subnet/test/subnet.spec.js +396 -0
  119. package/lib/azure-virtualmachine/index.d.ts +7 -0
  120. package/lib/azure-virtualmachine/index.js +24 -0
  121. package/lib/azure-virtualmachine/lib/index.d.ts +11 -0
  122. package/lib/azure-virtualmachine/lib/index.js +38 -0
  123. package/lib/azure-virtualmachine/lib/virtual-machine-schemas.d.ts +327 -0
  124. package/lib/azure-virtualmachine/lib/virtual-machine-schemas.js +544 -0
  125. package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +377 -0
  126. package/lib/azure-virtualmachine/lib/virtual-machine.js +462 -0
  127. package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +9 -0
  128. package/lib/azure-virtualmachine/test/virtual-machine.integ.js +220 -0
  129. package/lib/azure-virtualmachine/test/virtual-machine.spec.d.ts +9 -0
  130. package/lib/azure-virtualmachine/test/virtual-machine.spec.js +1032 -0
  131. package/lib/azure-virtualnetwork/index.d.ts +10 -0
  132. package/lib/azure-virtualnetwork/index.js +28 -0
  133. package/lib/azure-virtualnetwork/lib/index.d.ts +9 -0
  134. package/lib/azure-virtualnetwork/lib/index.js +22 -0
  135. package/lib/azure-virtualnetwork/lib/virtual-network-schemas.d.ts +32 -0
  136. package/lib/azure-virtualnetwork/lib/virtual-network-schemas.js +236 -0
  137. package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +213 -0
  138. package/lib/azure-virtualnetwork/lib/virtual-network.js +245 -0
  139. package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +9 -0
  140. package/lib/azure-virtualnetwork/test/virtual-network.integ.js +91 -0
  141. package/lib/azure-virtualnetwork/test/virtual-network.spec.d.ts +8 -0
  142. package/lib/azure-virtualnetwork/test/virtual-network.spec.js +398 -0
  143. package/lib/azure-vmss/index.d.ts +6 -0
  144. package/lib/azure-vmss/index.js +23 -0
  145. package/lib/azure-vmss/lib/index.d.ts +9 -0
  146. package/lib/azure-vmss/lib/index.js +39 -0
  147. package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +258 -0
  148. package/lib/azure-vmss/lib/virtual-machine-scale-set.js +503 -0
  149. package/lib/azure-vmss/lib/vmss-schemas.d.ts +472 -0
  150. package/lib/azure-vmss/lib/vmss-schemas.js +444 -0
  151. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +15 -0
  152. package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +261 -0
  153. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.d.ts +8 -0
  154. package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +997 -0
  155. package/lib/core-azure/lib/azapi/azapi-resource.d.ts +95 -27
  156. package/lib/core-azure/lib/azapi/azapi-resource.js +95 -58
  157. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.d.ts +33 -21
  158. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +69 -27
  159. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +134 -120
  160. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +209 -59
  161. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +141 -128
  162. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +183 -36
  163. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +55 -43
  164. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +94 -26
  165. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +129 -116
  166. package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +155 -32
  167. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +187 -174
  168. package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +267 -48
  169. package/lib/core-azure/lib/azapi/providers-azapi/index.d.ts +10 -10
  170. package/lib/core-azure/lib/azapi/providers-azapi/index.js +1 -1
  171. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.d.ts +0 -0
  172. package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +13 -0
  173. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +174 -162
  174. package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +274 -14
  175. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +239 -225
  176. package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +360 -76
  177. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +163 -150
  178. package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +221 -46
  179. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +162 -149
  180. package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +249 -50
  181. package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +4 -2
  182. package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
  183. package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
  184. package/lib/index.d.ts +37 -0
  185. package/lib/index.js +40 -2
  186. package/lib/testing/index.d.ts +92 -2
  187. package/lib/testing/index.js +258 -18
  188. package/lib/testing/lib/cleanup.d.ts +229 -0
  189. package/lib/testing/lib/cleanup.js +331 -0
  190. package/lib/testing/lib/metadata.d.ts +151 -0
  191. package/lib/testing/lib/metadata.js +180 -0
  192. package/lib/testing/lib/naming.d.ts +96 -0
  193. package/lib/testing/lib/naming.js +336 -0
  194. package/node_modules/uuid/LICENSE.md +9 -0
  195. package/node_modules/uuid/README.md +510 -0
  196. package/node_modules/uuid/dist/cjs/index.d.ts +15 -0
  197. package/node_modules/uuid/dist/cjs/index.js +31 -0
  198. package/node_modules/uuid/dist/cjs/max.d.ts +2 -0
  199. package/node_modules/uuid/dist/cjs/max.js +3 -0
  200. package/node_modules/uuid/dist/cjs/md5.d.ts +4 -0
  201. package/node_modules/uuid/dist/cjs/md5.js +13 -0
  202. package/node_modules/uuid/dist/cjs/native.d.ts +6 -0
  203. package/node_modules/uuid/dist/cjs/native.js +4 -0
  204. package/node_modules/uuid/dist/cjs/nil.d.ts +2 -0
  205. package/node_modules/uuid/dist/cjs/nil.js +3 -0
  206. package/node_modules/uuid/dist/cjs/package.json +1 -0
  207. package/node_modules/uuid/dist/cjs/parse.d.ts +2 -0
  208. package/node_modules/uuid/dist/cjs/parse.js +11 -0
  209. package/node_modules/uuid/dist/cjs/regex.d.ts +2 -0
  210. package/node_modules/uuid/dist/cjs/regex.js +3 -0
  211. package/node_modules/uuid/dist/cjs/rng.d.ts +1 -0
  212. package/node_modules/uuid/dist/cjs/rng.js +13 -0
  213. package/node_modules/uuid/dist/cjs/sha1.d.ts +4 -0
  214. package/node_modules/uuid/dist/cjs/sha1.js +13 -0
  215. package/node_modules/uuid/dist/cjs/stringify.d.ts +3 -0
  216. package/node_modules/uuid/dist/cjs/stringify.js +39 -0
  217. package/node_modules/uuid/dist/cjs/types.d.ts +21 -0
  218. package/node_modules/uuid/dist/cjs/types.js +2 -0
  219. package/node_modules/uuid/dist/cjs/uuid-bin.d.ts +1 -0
  220. package/node_modules/uuid/dist/cjs/uuid-bin.js +72 -0
  221. package/node_modules/uuid/dist/cjs/v1.d.ts +11 -0
  222. package/node_modules/uuid/dist/cjs/v1.js +87 -0
  223. package/node_modules/uuid/dist/cjs/v1ToV6.d.ts +2 -0
  224. package/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
  225. package/node_modules/uuid/dist/cjs/v3.d.ts +9 -0
  226. package/node_modules/uuid/dist/cjs/v3.js +14 -0
  227. package/node_modules/uuid/dist/cjs/v35.d.ts +7 -0
  228. package/node_modules/uuid/dist/cjs/v35.js +41 -0
  229. package/node_modules/uuid/dist/cjs/v4.d.ts +4 -0
  230. package/node_modules/uuid/dist/cjs/v4.js +29 -0
  231. package/node_modules/uuid/dist/cjs/v5.d.ts +9 -0
  232. package/node_modules/uuid/dist/cjs/v5.js +14 -0
  233. package/node_modules/uuid/dist/cjs/v6.d.ts +4 -0
  234. package/node_modules/uuid/dist/cjs/v6.js +19 -0
  235. package/node_modules/uuid/dist/cjs/v6ToV1.d.ts +2 -0
  236. package/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
  237. package/node_modules/uuid/dist/cjs/v7.d.ts +9 -0
  238. package/node_modules/uuid/dist/cjs/v7.js +69 -0
  239. package/node_modules/uuid/dist/cjs/validate.d.ts +2 -0
  240. package/node_modules/uuid/dist/cjs/validate.js +7 -0
  241. package/node_modules/uuid/dist/cjs/version.d.ts +2 -0
  242. package/node_modules/uuid/dist/cjs/version.js +10 -0
  243. package/node_modules/uuid/dist/cjs-browser/index.d.ts +15 -0
  244. package/node_modules/uuid/dist/cjs-browser/index.js +31 -0
  245. package/node_modules/uuid/dist/cjs-browser/max.d.ts +2 -0
  246. package/node_modules/uuid/dist/cjs-browser/max.js +3 -0
  247. package/node_modules/uuid/dist/cjs-browser/md5.d.ts +2 -0
  248. package/node_modules/uuid/dist/cjs-browser/md5.js +137 -0
  249. package/node_modules/uuid/dist/cjs-browser/native.d.ts +4 -0
  250. package/node_modules/uuid/dist/cjs-browser/native.js +4 -0
  251. package/node_modules/uuid/dist/cjs-browser/nil.d.ts +2 -0
  252. package/node_modules/uuid/dist/cjs-browser/nil.js +3 -0
  253. package/node_modules/uuid/dist/cjs-browser/package.json +1 -0
  254. package/node_modules/uuid/dist/cjs-browser/parse.d.ts +2 -0
  255. package/node_modules/uuid/dist/cjs-browser/parse.js +11 -0
  256. package/node_modules/uuid/dist/cjs-browser/regex.d.ts +2 -0
  257. package/node_modules/uuid/dist/cjs-browser/regex.js +3 -0
  258. package/node_modules/uuid/dist/cjs-browser/rng.d.ts +1 -0
  259. package/node_modules/uuid/dist/cjs-browser/rng.js +14 -0
  260. package/node_modules/uuid/dist/cjs-browser/sha1.d.ts +2 -0
  261. package/node_modules/uuid/dist/cjs-browser/sha1.js +72 -0
  262. package/node_modules/uuid/dist/cjs-browser/stringify.d.ts +3 -0
  263. package/node_modules/uuid/dist/cjs-browser/stringify.js +39 -0
  264. package/node_modules/uuid/dist/cjs-browser/types.d.ts +21 -0
  265. package/node_modules/uuid/dist/cjs-browser/types.js +2 -0
  266. package/node_modules/uuid/dist/cjs-browser/uuid-bin.d.ts +1 -0
  267. package/node_modules/uuid/dist/cjs-browser/uuid-bin.js +72 -0
  268. package/node_modules/uuid/dist/cjs-browser/v1.d.ts +11 -0
  269. package/node_modules/uuid/dist/cjs-browser/v1.js +87 -0
  270. package/node_modules/uuid/dist/cjs-browser/v1ToV6.d.ts +2 -0
  271. package/node_modules/uuid/dist/cjs-browser/v1ToV6.js +13 -0
  272. package/node_modules/uuid/dist/cjs-browser/v3.d.ts +9 -0
  273. package/node_modules/uuid/dist/cjs-browser/v3.js +14 -0
  274. package/node_modules/uuid/dist/cjs-browser/v35.d.ts +7 -0
  275. package/node_modules/uuid/dist/cjs-browser/v35.js +41 -0
  276. package/node_modules/uuid/dist/cjs-browser/v4.d.ts +4 -0
  277. package/node_modules/uuid/dist/cjs-browser/v4.js +29 -0
  278. package/node_modules/uuid/dist/cjs-browser/v5.d.ts +9 -0
  279. package/node_modules/uuid/dist/cjs-browser/v5.js +14 -0
  280. package/node_modules/uuid/dist/cjs-browser/v6.d.ts +4 -0
  281. package/node_modules/uuid/dist/cjs-browser/v6.js +19 -0
  282. package/node_modules/uuid/dist/cjs-browser/v6ToV1.d.ts +2 -0
  283. package/node_modules/uuid/dist/cjs-browser/v6ToV1.js +13 -0
  284. package/node_modules/uuid/dist/cjs-browser/v7.d.ts +9 -0
  285. package/node_modules/uuid/dist/cjs-browser/v7.js +69 -0
  286. package/node_modules/uuid/dist/cjs-browser/validate.d.ts +2 -0
  287. package/node_modules/uuid/dist/cjs-browser/validate.js +7 -0
  288. package/node_modules/uuid/dist/cjs-browser/version.d.ts +2 -0
  289. package/node_modules/uuid/dist/cjs-browser/version.js +10 -0
  290. package/node_modules/uuid/dist/esm/bin/uuid +2 -0
  291. package/node_modules/uuid/dist/esm/index.d.ts +15 -0
  292. package/node_modules/uuid/dist/esm/index.js +14 -0
  293. package/node_modules/uuid/dist/esm/max.d.ts +2 -0
  294. package/node_modules/uuid/dist/esm/max.js +1 -0
  295. package/node_modules/uuid/dist/esm/md5.d.ts +4 -0
  296. package/node_modules/uuid/dist/esm/md5.js +11 -0
  297. package/node_modules/uuid/dist/esm/native.d.ts +6 -0
  298. package/node_modules/uuid/dist/esm/native.js +2 -0
  299. package/node_modules/uuid/dist/esm/nil.d.ts +2 -0
  300. package/node_modules/uuid/dist/esm/nil.js +1 -0
  301. package/node_modules/uuid/dist/esm/parse.d.ts +2 -0
  302. package/node_modules/uuid/dist/esm/parse.js +9 -0
  303. package/node_modules/uuid/dist/esm/regex.d.ts +2 -0
  304. package/node_modules/uuid/dist/esm/regex.js +1 -0
  305. package/node_modules/uuid/dist/esm/rng.d.ts +1 -0
  306. package/node_modules/uuid/dist/esm/rng.js +10 -0
  307. package/node_modules/uuid/dist/esm/sha1.d.ts +4 -0
  308. package/node_modules/uuid/dist/esm/sha1.js +11 -0
  309. package/node_modules/uuid/dist/esm/stringify.d.ts +3 -0
  310. package/node_modules/uuid/dist/esm/stringify.js +35 -0
  311. package/node_modules/uuid/dist/esm/types.d.ts +21 -0
  312. package/node_modules/uuid/dist/esm/types.js +1 -0
  313. package/node_modules/uuid/dist/esm/uuid-bin.d.ts +1 -0
  314. package/node_modules/uuid/dist/esm/uuid-bin.js +70 -0
  315. package/node_modules/uuid/dist/esm/v1.d.ts +11 -0
  316. package/node_modules/uuid/dist/esm/v1.js +83 -0
  317. package/node_modules/uuid/dist/esm/v1ToV6.d.ts +2 -0
  318. package/node_modules/uuid/dist/esm/v1ToV6.js +10 -0
  319. package/node_modules/uuid/dist/esm/v3.d.ts +9 -0
  320. package/node_modules/uuid/dist/esm/v3.js +9 -0
  321. package/node_modules/uuid/dist/esm/v35.d.ts +7 -0
  322. package/node_modules/uuid/dist/esm/v35.js +36 -0
  323. package/node_modules/uuid/dist/esm/v4.d.ts +4 -0
  324. package/node_modules/uuid/dist/esm/v4.js +27 -0
  325. package/node_modules/uuid/dist/esm/v5.d.ts +9 -0
  326. package/node_modules/uuid/dist/esm/v5.js +9 -0
  327. package/node_modules/uuid/dist/esm/v6.d.ts +4 -0
  328. package/node_modules/uuid/dist/esm/v6.js +17 -0
  329. package/node_modules/uuid/dist/esm/v6ToV1.d.ts +2 -0
  330. package/node_modules/uuid/dist/esm/v6ToV1.js +10 -0
  331. package/node_modules/uuid/dist/esm/v7.d.ts +9 -0
  332. package/node_modules/uuid/dist/esm/v7.js +65 -0
  333. package/node_modules/uuid/dist/esm/validate.d.ts +2 -0
  334. package/node_modules/uuid/dist/esm/validate.js +5 -0
  335. package/node_modules/uuid/dist/esm/version.d.ts +2 -0
  336. package/node_modules/uuid/dist/esm/version.js +8 -0
  337. package/node_modules/uuid/dist/esm-browser/index.d.ts +15 -0
  338. package/node_modules/uuid/dist/esm-browser/index.js +14 -0
  339. package/node_modules/uuid/dist/esm-browser/max.d.ts +2 -0
  340. package/node_modules/uuid/dist/esm-browser/max.js +1 -0
  341. package/node_modules/uuid/dist/esm-browser/md5.d.ts +2 -0
  342. package/node_modules/uuid/dist/esm-browser/md5.js +135 -0
  343. package/node_modules/uuid/dist/esm-browser/native.d.ts +4 -0
  344. package/node_modules/uuid/dist/esm-browser/native.js +2 -0
  345. package/node_modules/uuid/dist/esm-browser/nil.d.ts +2 -0
  346. package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
  347. package/node_modules/uuid/dist/esm-browser/parse.d.ts +2 -0
  348. package/node_modules/uuid/dist/esm-browser/parse.js +9 -0
  349. package/node_modules/uuid/dist/esm-browser/regex.d.ts +2 -0
  350. package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
  351. package/node_modules/uuid/dist/esm-browser/rng.d.ts +1 -0
  352. package/node_modules/uuid/dist/esm-browser/rng.js +11 -0
  353. package/node_modules/uuid/dist/esm-browser/sha1.d.ts +2 -0
  354. package/node_modules/uuid/dist/esm-browser/sha1.js +70 -0
  355. package/node_modules/uuid/dist/esm-browser/stringify.d.ts +3 -0
  356. package/node_modules/uuid/dist/esm-browser/stringify.js +35 -0
  357. package/node_modules/uuid/dist/esm-browser/types.d.ts +21 -0
  358. package/node_modules/uuid/dist/esm-browser/types.js +1 -0
  359. package/node_modules/uuid/dist/esm-browser/uuid-bin.d.ts +1 -0
  360. package/node_modules/uuid/dist/esm-browser/uuid-bin.js +70 -0
  361. package/node_modules/uuid/dist/esm-browser/v1.d.ts +11 -0
  362. package/node_modules/uuid/dist/esm-browser/v1.js +83 -0
  363. package/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts +2 -0
  364. package/node_modules/uuid/dist/esm-browser/v1ToV6.js +10 -0
  365. package/node_modules/uuid/dist/esm-browser/v3.d.ts +9 -0
  366. package/node_modules/uuid/dist/esm-browser/v3.js +9 -0
  367. package/node_modules/uuid/dist/esm-browser/v35.d.ts +7 -0
  368. package/node_modules/uuid/dist/esm-browser/v35.js +36 -0
  369. package/node_modules/uuid/dist/esm-browser/v4.d.ts +4 -0
  370. package/node_modules/uuid/dist/esm-browser/v4.js +27 -0
  371. package/node_modules/uuid/dist/esm-browser/v5.d.ts +9 -0
  372. package/node_modules/uuid/dist/esm-browser/v5.js +9 -0
  373. package/node_modules/uuid/dist/esm-browser/v6.d.ts +4 -0
  374. package/node_modules/uuid/dist/esm-browser/v6.js +17 -0
  375. package/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts +2 -0
  376. package/node_modules/uuid/dist/esm-browser/v6ToV1.js +10 -0
  377. package/node_modules/uuid/dist/esm-browser/v7.d.ts +9 -0
  378. package/node_modules/uuid/dist/esm-browser/v7.js +65 -0
  379. package/node_modules/uuid/dist/esm-browser/validate.d.ts +2 -0
  380. package/node_modules/uuid/dist/esm-browser/validate.js +5 -0
  381. package/node_modules/uuid/dist/esm-browser/version.d.ts +2 -0
  382. package/node_modules/uuid/dist/esm-browser/version.js +8 -0
  383. package/node_modules/uuid/package.json +132 -0
  384. package/package.json +17 -12
  385. package/scripts/cleanup-test-resources.ts +369 -0
@@ -56,6 +56,142 @@ const api_version_manager_1 = require("../../core-azure/lib/version-manager/api-
56
56
  * @stability stable
57
57
  */
58
58
  class StorageAccount extends azapi_resource_1.AzapiResource {
59
+ /**
60
+ * Returns a production-ready monitoring configuration for Storage Accounts
61
+ *
62
+ * This static factory method provides a complete MonitoringConfig with sensible defaults
63
+ * for storage account monitoring including availability, egress, transactions alerts, and deletion tracking.
64
+ *
65
+ * @param actionGroupId - The resource ID of the action group for alert notifications
66
+ * @param workspaceId - Optional Log Analytics workspace ID for diagnostic settings
67
+ * @param options - Optional configuration to customize thresholds and enable/disable specific alerts
68
+ * @returns A complete MonitoringConfig object ready to use in StorageAccount props
69
+ *
70
+ * @example
71
+ * // Basic usage with all defaults
72
+ * const storageAccount = new StorageAccount(this, "storage", {
73
+ * // ... other properties ...
74
+ * monitoring: StorageAccount.defaultMonitoring(actionGroup.id, workspace.id)
75
+ * });
76
+ *
77
+ * @example
78
+ * // Custom thresholds
79
+ * const storageAccount = new StorageAccount(this, "storage", {
80
+ * // ... other properties ...
81
+ * monitoring: StorageAccount.defaultMonitoring(
82
+ * actionGroup.id,
83
+ * workspace.id,
84
+ * {
85
+ * availabilityThreshold: 99.5,
86
+ * egressThreshold: 21474836480, // 20GB
87
+ * enableTransactionsAlert: false
88
+ * }
89
+ * )
90
+ * });
91
+ *
92
+ * @stability stable
93
+ */
94
+ static defaultMonitoring(actionGroupId, workspaceId, options) {
95
+ const metricAlerts = [];
96
+ // Low Availability Alert
97
+ if (options?.enableAvailabilityAlert !== false) {
98
+ metricAlerts.push({
99
+ name: "low-availability-alert",
100
+ description: "Alert when storage account availability drops below threshold",
101
+ severity: (options?.availabilityAlertSeverity ?? 1),
102
+ scopes: [], // Will be set automatically by base class
103
+ evaluationFrequency: "PT5M",
104
+ windowSize: "PT15M",
105
+ criteria: {
106
+ type: "StaticThreshold",
107
+ metricName: "Availability",
108
+ metricNamespace: "Microsoft.Storage/storageAccounts",
109
+ operator: "LessThan",
110
+ threshold: options?.availabilityThreshold ?? 99.9,
111
+ timeAggregation: "Average",
112
+ },
113
+ actions: [{ actionGroupId }],
114
+ });
115
+ }
116
+ // High Egress Alert
117
+ if (options?.enableEgressAlert !== false) {
118
+ metricAlerts.push({
119
+ name: "high-egress-alert",
120
+ description: "Alert when storage account egress exceeds threshold",
121
+ severity: (options?.egressAlertSeverity ?? 2),
122
+ scopes: [], // Will be set automatically by base class
123
+ evaluationFrequency: "PT5M",
124
+ windowSize: "PT1H",
125
+ criteria: {
126
+ type: "StaticThreshold",
127
+ metricName: "Egress",
128
+ metricNamespace: "Microsoft.Storage/storageAccounts",
129
+ operator: "GreaterThan",
130
+ threshold: options?.egressThreshold ?? 10737418240,
131
+ timeAggregation: "Total",
132
+ },
133
+ actions: [{ actionGroupId }],
134
+ });
135
+ }
136
+ // High Transactions Alert
137
+ if (options?.enableTransactionsAlert !== false) {
138
+ metricAlerts.push({
139
+ name: "high-transactions-alert",
140
+ description: "Alert when storage account transactions exceed threshold",
141
+ severity: (options?.transactionsAlertSeverity ?? 2),
142
+ scopes: [], // Will be set automatically by base class
143
+ evaluationFrequency: "PT5M",
144
+ windowSize: "PT15M",
145
+ criteria: {
146
+ type: "StaticThreshold",
147
+ metricName: "Transactions",
148
+ metricNamespace: "Microsoft.Storage/storageAccounts",
149
+ operator: "GreaterThan",
150
+ threshold: options?.transactionsThreshold ?? 100000,
151
+ timeAggregation: "Total",
152
+ },
153
+ actions: [{ actionGroupId }],
154
+ });
155
+ }
156
+ // Build diagnostic settings if workspace ID is provided
157
+ const diagnosticSettings = workspaceId
158
+ ? {
159
+ name: "storage-account-diagnostics",
160
+ targetResourceId: "", // Will be set automatically by base class
161
+ workspaceId: workspaceId,
162
+ logs: [{ categoryGroup: "allLogs", enabled: true }],
163
+ metrics: [{ category: "AllMetrics", enabled: true }],
164
+ }
165
+ : undefined;
166
+ // Build activity log alerts
167
+ const activityLogAlerts = options?.enableDeletionAlert !== false
168
+ ? [
169
+ {
170
+ name: "storage-account-deletion-alert",
171
+ description: "Alert when storage account is deleted",
172
+ scopes: [], // Will be set automatically by base class
173
+ condition: {
174
+ allOf: [
175
+ {
176
+ field: "operationName",
177
+ equalsValue: "Microsoft.Storage/storageAccounts/delete",
178
+ },
179
+ ],
180
+ },
181
+ actions: {
182
+ actionGroups: [{ actionGroupId }],
183
+ },
184
+ },
185
+ ]
186
+ : undefined;
187
+ // Return complete config object
188
+ return {
189
+ enabled: true,
190
+ diagnosticSettings: diagnosticSettings,
191
+ metricAlerts: metricAlerts,
192
+ activityLogAlerts: activityLogAlerts,
193
+ };
194
+ }
59
195
  /**
60
196
  * Ensures that Storage Account schemas are registered with the ApiVersionManager
61
197
  */
@@ -224,6 +360,6 @@ class StorageAccount extends azapi_resource_1.AzapiResource {
224
360
  }
225
361
  exports.StorageAccount = StorageAccount;
226
362
  _a = JSII_RTTI_SYMBOL_1;
227
- StorageAccount[_a] = { fqn: "@microsoft/terraform-cdk-constructs.StorageAccount", version: "1.0.0" };
363
+ StorageAccount[_a] = { fqn: "@microsoft/terraform-cdk-constructs.StorageAccount", version: "1.2.0" };
228
364
  StorageAccount.schemasRegistered = false;
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1hY2NvdW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXN0b3JhZ2VhY2NvdW50L2xpYi9zdG9yYWdlLWFjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsK0JBQStCO0FBRS9CLHVFQUdtQztBQUNuQyw4RUFHbUQ7QUFDbkQsa0dBQTZGO0FBME43Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILE1BQWEsY0FBZSxTQUFRLDhCQUFhO0lBRy9DOztPQUVHO0lBQ0ssTUFBTSxDQUFDLHVCQUF1QjtRQUNwQyxJQUFJLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3JDLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyx1Q0FBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUV2RCxJQUFJLENBQUM7WUFDSCxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FDcEMsOENBQW9CLEVBQ3BCLHNEQUE0QixDQUM3QixDQUFDO1lBRUYsY0FBYyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUV4QyxPQUFPLENBQUMsR0FBRyxDQUNULGNBQWMsc0RBQTRCLENBQUMsTUFBTSxxQkFBcUIsOENBQW9CLEVBQUUsQ0FDN0YsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FDViwrQ0FBK0MsS0FBSyxJQUFJO2dCQUN0RCx3RkFBd0YsQ0FDM0YsQ0FBQztZQUNGLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFlRDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLHFEQUFxRDtRQUNyRCxjQUFjLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUV6QyxL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QyxLQUFLLENBQUMsSUFBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUMsR0FBVztRQUMxQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELGdGQUFnRjtJQUNoRix5QkFBeUI7SUFDekIsZ0ZBQWdGO0lBRWhGOztPQUVHO0lBQ0ssbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUM5QztvQkFDRSxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2lCQUN6QzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOztBQTNOSCx3Q0E0TkM7OztBQTNOZ0IsZ0NBQWlCLEdBQUcsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFN0b3JhZ2UgQWNjb3VudCBpbXBsZW1lbnRhdGlvbiB1c2luZyBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICpcbiAqIFRoaXMgY2xhc3MgcmVwbGFjZXMgYWxsIHZlcnNpb24tc3BlY2lmaWMgU3RvcmFnZSBBY2NvdW50IGltcGxlbWVudGF0aW9ucyB3aXRoIGEgc2luZ2xlXG4gKiB1bmlmaWVkIGNsYXNzIHRoYXQgYXV0b21hdGljYWxseSBoYW5kbGVzIHZlcnNpb24gbWFuYWdlbWVudCwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZFxuICogcHJvcGVydHkgdHJhbnNmb3JtYXRpb24gYWNyb3NzIGFsbCBzdXBwb3J0ZWQgQVBJIHZlcnNpb25zLlxuICpcbiAqIFN1cHBvcnRlZCBBUEkgVmVyc2lvbnM6XG4gKiAtIDIwMjMtMDEtMDEgKEFjdGl2ZSlcbiAqIC0gMjAyMy0wNS0wMSAoQWN0aXZlKVxuICogLSAyMDI0LTAxLTAxIChBY3RpdmUsIExhdGVzdClcbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gQXV0b21hdGljIGxhdGVzdCB2ZXJzaW9uIHJlc29sdXRpb24gd2hlbiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZFxuICogLSBFeHBsaWNpdCB2ZXJzaW9uIHBpbm5pbmcgZm9yIHN0YWJpbGl0eSByZXF1aXJlbWVudHNcbiAqIC0gU2NoZW1hLWRyaXZlbiB2YWxpZGF0aW9uIGFuZCB0cmFuc2Zvcm1hdGlvblxuICogLSBGdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBTdG9yYWdlIEFjY291bnQgaW50ZXJmYWNlXG4gKiAtIEpTSUkgY29tcGxpYW5jZSBmb3IgbXVsdGktbGFuZ3VhZ2Ugc3VwcG9ydFxuICovXG5cbmltcG9ydCAqIGFzIGNka3RmIGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEFMTF9TVE9SQUdFX0FDQ09VTlRfVkVSU0lPTlMsXG4gIFNUT1JBR0VfQUNDT1VOVF9UWVBFLFxufSBmcm9tIFwiLi9zdG9yYWdlLWFjY291bnQtc2NoZW1hc1wiO1xuaW1wb3J0IHtcbiAgQXphcGlSZXNvdXJjZSxcbiAgQXphcGlSZXNvdXJjZVByb3BzLFxufSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvYXphcGktcmVzb3VyY2VcIjtcbmltcG9ydCB7IEFwaVZlcnNpb25NYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9hcGktdmVyc2lvbi1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8qKlxuICogU0tVIGNvbmZpZ3VyYXRpb24gZm9yIFN0b3JhZ2UgQWNjb3VudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50U2t1IHtcbiAgLyoqXG4gICAqIFRoZSBTS1UgbmFtZSAoU3RhbmRhcmRfTFJTLCBTdGFuZGFyZF9HUlMsIFN0YW5kYXJkX1JBR1JTLCBTdGFuZGFyZF9aUlMsIFByZW1pdW1fTFJTLCBQcmVtaXVtX1pSUylcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJUCBydWxlIGZvciBuZXR3b3JrIEFDTHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQWNjb3VudElwUnVsZSB7XG4gIC8qKlxuICAgKiBJUCBhZGRyZXNzIG9yIENJRFIgcmFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVmlydHVhbCBuZXR3b3JrIHJ1bGUgZm9yIG5ldHdvcmsgQUNMc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50VmlydHVhbE5ldHdvcmtSdWxlIHtcbiAgLyoqXG4gICAqIFZpcnR1YWwgbmV0d29yayByZXNvdXJjZSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBOZXR3b3JrIEFDTCBjb25maWd1cmF0aW9uIGZvciBTdG9yYWdlIEFjY291bnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQWNjb3VudE5ldHdvcmtBY2xzIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgYWN0aW9uIHdoZW4gbm8gcnVsZSBtYXRjaGVzIChBbGxvdyBvciBEZW55KVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFjdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSVAgcnVsZXMgZm9yIHRoZSBzdG9yYWdlIGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IGlwUnVsZXM/OiBTdG9yYWdlQWNjb3VudElwUnVsZVtdO1xuXG4gIC8qKlxuICAgKiBWaXJ0dWFsIG5ldHdvcmsgcnVsZXMgZm9yIHRoZSBzdG9yYWdlIGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IHZpcnR1YWxOZXR3b3JrUnVsZXM/OiBTdG9yYWdlQWNjb3VudFZpcnR1YWxOZXR3b3JrUnVsZVtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGJ5cGFzcyBuZXR3b3JrIHJ1bGVzIGZvciBBenVyZSBzZXJ2aWNlc1xuICAgKi9cbiAgcmVhZG9ubHkgYnlwYXNzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIElkZW50aXR5IGNvbmZpZ3VyYXRpb24gZm9yIFN0b3JhZ2UgQWNjb3VudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50SWRlbnRpdHkge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgaWRlbnRpdHkgKFN5c3RlbUFzc2lnbmVkLCBVc2VyQXNzaWduZWQsIFN5c3RlbUFzc2lnbmVkLFVzZXJBc3NpZ25lZClcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVXNlciBhc3NpZ25lZCBpZGVudGl0eSBJRHNcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJBc3NpZ25lZElkZW50aXRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKipcbiAqIEVuY3J5cHRpb24gc2VydmljZSBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUFjY291bnRFbmNyeXB0aW9uU2VydmljZSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGVuY3J5cHRpb24gaXMgZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5jcnlwdGlvbiBzZXJ2aWNlcyBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUFjY291bnRFbmNyeXB0aW9uU2VydmljZXMge1xuICAvKipcbiAgICogQmxvYiBzZXJ2aWNlIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGJsb2I/OiBTdG9yYWdlQWNjb3VudEVuY3J5cHRpb25TZXJ2aWNlO1xuXG4gIC8qKlxuICAgKiBGaWxlIHNlcnZpY2UgZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZT86IFN0b3JhZ2VBY2NvdW50RW5jcnlwdGlvblNlcnZpY2U7XG5cbiAgLyoqXG4gICAqIFRhYmxlIHNlcnZpY2UgZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGU/OiBTdG9yYWdlQWNjb3VudEVuY3J5cHRpb25TZXJ2aWNlO1xuXG4gIC8qKlxuICAgKiBRdWV1ZSBzZXJ2aWNlIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlPzogU3RvcmFnZUFjY291bnRFbmNyeXB0aW9uU2VydmljZTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIFN0b3JhZ2UgQWNjb3VudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50RW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIHNlcnZpY2VzIChibG9iLCBmaWxlLCB0YWJsZSwgcXVldWUpXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlcz86IFN0b3JhZ2VBY2NvdW50RW5jcnlwdGlvblNlcnZpY2VzO1xuXG4gIC8qKlxuICAgKiBLZXkgc291cmNlIChNaWNyb3NvZnQuU3RvcmFnZSBvciBNaWNyb3NvZnQuS2V5dmF1bHQpXG4gICAqL1xuICByZWFkb25seSBrZXlTb3VyY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIHVuaWZpZWQgQXp1cmUgU3RvcmFnZSBBY2NvdW50XG4gKlxuICogRXh0ZW5kcyBWZXJzaW9uZWRBemFwaVJlc291cmNlUHJvcHMgd2l0aCBTdG9yYWdlIEFjY291bnQgc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50UHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIFNLVSAocHJpY2luZyB0aWVyKSBmb3IgdGhlIFN0b3JhZ2UgQWNjb3VudFxuICAgKiBAZXhhbXBsZSB7IG5hbWU6IFwiU3RhbmRhcmRfTFJTXCIgfVxuICAgKi9cbiAgcmVhZG9ubHkgc2t1OiBTdG9yYWdlQWNjb3VudFNrdTtcblxuICAvKipcbiAgICogVGhlIGtpbmQgb2YgU3RvcmFnZSBBY2NvdW50XG4gICAqIEBkZWZhdWx0IFwiU3RvcmFnZVYyXCJcbiAgICogQGV4YW1wbGUgXCJTdG9yYWdlVjJcIiwgXCJCbG9iU3RvcmFnZVwiLCBcIkJsb2NrQmxvYlN0b3JhZ2VcIiwgXCJGaWxlU3RvcmFnZVwiXG4gICAqL1xuICByZWFkb25seSBraW5kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjZXNzIHRpZXIgZm9yIGJsb2Igc3RvcmFnZVxuICAgKiBAZGVmYXVsdCBcIkhvdFwiXG4gICAqIEBleGFtcGxlIFwiSG90XCIsIFwiQ29vbFwiXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NUaWVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IG9ubHkgSFRUUFMgdHJhZmZpY1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVIdHRwc1RyYWZmaWNPbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gVExTIHZlcnNpb24gcmVxdWlyZWRcbiAgICogQGRlZmF1bHQgXCJUTFMxXzJcIlxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVRsc1ZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgcHVibGljIGFjY2VzcyB0byBibG9ic1xuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dCbG9iUHVibGljQWNjZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTmV0d29yayBBQ0wgcnVsZXMgZm9yIHRoZSBzdG9yYWdlIGFjY291bnRcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtBY2xzPzogU3RvcmFnZUFjY291bnROZXR3b3JrQWNscztcblxuICAvKipcbiAgICogTWFuYWdlZCBpZGVudGl0eSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBpZGVudGl0eT86IFN0b3JhZ2VBY2NvdW50SWRlbnRpdHk7XG5cbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBTdG9yYWdlQWNjb3VudEVuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgcnVsZXMgdG8gaWdub3JlIGNoYW5nZXNcbiAgICogQGV4YW1wbGUgW1widGFnc1wiXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlQ2hhbmdlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBncm91cCBJRCB3aGVyZSB0aGUgc3RvcmFnZSBhY2NvdW50IHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VHcm91cElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0b3JhZ2UgQWNjb3VudCBwcm9wZXJ0aWVzIGZvciB0aGUgcmVxdWVzdCBib2R5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUFjY291bnRCb2R5UHJvcGVydGllcyB7XG4gIHJlYWRvbmx5IGFjY2Vzc1RpZXI/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN1cHBvcnRzSHR0cHNUcmFmZmljT25seT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1pbmltdW1UbHNWZXJzaW9uPzogc3RyaW5nO1xuICByZWFkb25seSBhbGxvd0Jsb2JQdWJsaWNBY2Nlc3M/OiBib29sZWFuO1xuICByZWFkb25seSBuZXR3b3JrQWNscz86IFN0b3JhZ2VBY2NvdW50TmV0d29ya0FjbHM7XG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBTdG9yYWdlQWNjb3VudEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogVGhlIHJlc291cmNlIGJvZHkgaW50ZXJmYWNlIGZvciBBenVyZSBTdG9yYWdlIEFjY291bnQgQVBJIGNhbGxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUFjY291bnRCb2R5IHtcbiAgcmVhZG9ubHkgbG9jYXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IHNrdTogU3RvcmFnZUFjY291bnRTa3U7XG4gIHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvcGVydGllcz86IFN0b3JhZ2VBY2NvdW50Qm9keVByb3BlcnRpZXM7XG4gIHJlYWRvbmx5IGlkZW50aXR5PzogU3RvcmFnZUFjY291bnRJZGVudGl0eTtcbn1cblxuLyoqXG4gKiBVbmlmaWVkIEF6dXJlIFN0b3JhZ2UgQWNjb3VudCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW5nbGUsIHZlcnNpb24tYXdhcmUgaW1wbGVtZW50YXRpb24gdGhhdCByZXBsYWNlcyBhbGxcbiAqIHZlcnNpb24tc3BlY2lmaWMgU3RvcmFnZSBBY2NvdW50IGNsYXNzZXMuIEl0IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uXG4gKiByZXNvbHV0aW9uLCBzY2hlbWEgdmFsaWRhdGlvbiwgYW5kIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uIHdoaWxlIG1haW50YWluaW5nXG4gKiBmdWxsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEJhc2ljIHVzYWdlIHdpdGggYXV0b21hdGljIHZlcnNpb24gcmVzb2x1dGlvbjpcbiAqIGNvbnN0IHN0b3JhZ2VBY2NvdW50ID0gbmV3IFN0b3JhZ2VBY2NvdW50KHRoaXMsIFwic3RvcmFnZVwiLCB7XG4gKiAgIG5hbWU6IFwibXlzdG9yYWdlYWNjb3VudFwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBza3U6IHsgbmFtZTogXCJTdGFuZGFyZF9MUlNcIiB9LFxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVzYWdlIHdpdGggZXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nOlxuICogY29uc3Qgc3RvcmFnZUFjY291bnQgPSBuZXcgU3RvcmFnZUFjY291bnQodGhpcywgXCJzdG9yYWdlXCIsIHtcbiAqICAgbmFtZTogXCJteXN0b3JhZ2VhY2NvdW50XCIsXG4gKiAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICogICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gKiAgIHNrdTogeyBuYW1lOiBcIlN0YW5kYXJkX0xSU1wiIH0sXG4gKiAgIGFwaVZlcnNpb246IFwiMjAyMy0wNS0wMVwiLFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JhZ2VBY2NvdW50IGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHByaXZhdGUgc3RhdGljIHNjaGVtYXNSZWdpc3RlcmVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhhdCBTdG9yYWdlIEFjY291bnQgc2NoZW1hcyBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBBcGlWZXJzaW9uTWFuYWdlclxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZW5zdXJlU2NoZW1hc1JlZ2lzdGVyZWQoKTogdm9pZCB7XG4gICAgaWYgKFN0b3JhZ2VBY2NvdW50LnNjaGVtYXNSZWdpc3RlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBpVmVyc2lvbk1hbmFnZXIgPSBBcGlWZXJzaW9uTWFuYWdlci5pbnN0YW5jZSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGFwaVZlcnNpb25NYW5hZ2VyLnJlZ2lzdGVyUmVzb3VyY2VUeXBlKFxuICAgICAgICBTVE9SQUdFX0FDQ09VTlRfVFlQRSxcbiAgICAgICAgQUxMX1NUT1JBR0VfQUNDT1VOVF9WRVJTSU9OUyxcbiAgICAgICk7XG5cbiAgICAgIFN0b3JhZ2VBY2NvdW50LnNjaGVtYXNSZWdpc3RlcmVkID0gdHJ1ZTtcblxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBSZWdpc3RlcmVkICR7QUxMX1NUT1JBR0VfQUNDT1VOVF9WRVJTSU9OUy5sZW5ndGh9IEFQSSB2ZXJzaW9ucyBmb3IgJHtTVE9SQUdFX0FDQ09VTlRfVFlQRX1gLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgRmFpbGVkIHRvIHJlZ2lzdGVyIFN0b3JhZ2UgQWNjb3VudCBzY2hlbWFzOiAke2Vycm9yfS4gYCArXG4gICAgICAgICAgYFRoaXMgbWF5IGluZGljYXRlIHRoZSBzY2hlbWFzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgb3IgdGhlcmUncyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUuYCxcbiAgICAgICk7XG4gICAgICBTdG9yYWdlQWNjb3VudC5zY2hlbWFzUmVnaXN0ZXJlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBTdG9yYWdlQWNjb3VudFByb3BzO1xuXG4gIC8vIE91dHB1dCBwcm9wZXJ0aWVzIGZvciBlYXN5IGFjY2VzcyBhbmQgcmVmZXJlbmNpbmdcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBsb2NhdGlvbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnc091dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpbWFyeUVuZHBvaW50c091dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIC8vIFB1YmxpYyBwcm9wZXJ0aWVzXG4gIHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBBenVyZSBTdG9yYWdlIEFjY291bnQgdXNpbmcgdGhlIFZlcnNpb25lZEF6YXBpUmVzb3VyY2UgZnJhbWV3b3JrXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBwYXJhbSBwcm9wcyAtIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIFN0b3JhZ2UgQWNjb3VudFxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0b3JhZ2VBY2NvdW50UHJvcHMpIHtcbiAgICAvLyBFbnN1cmUgc2NoZW1hcyBhcmUgcmVnaXN0ZXJlZCBiZWZvcmUgY2FsbGluZyBzdXBlclxuICAgIFN0b3JhZ2VBY2NvdW50LmVuc3VyZVNjaGVtYXNSZWdpc3RlcmVkKCk7XG5cbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIC8vIEV4dHJhY3QgcHJvcGVydGllcyBmcm9tIHRoZSBBWkFQSSByZXNvdXJjZSBvdXRwdXRzXG4gICAgdGhpcy5pZCA9IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0uaWR9YDtcbiAgICB0aGlzLnRhZ3MgPSBwcm9wcy50YWdzIHx8IHt9O1xuXG4gICAgLy8gQ3JlYXRlIFRlcnJhZm9ybSBvdXRwdXRzXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgU3RvcmFnZSBBY2NvdW50XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImxvY2F0aW9uXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LmxvY2F0aW9ufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbG9jYXRpb24gb2YgdGhlIFN0b3JhZ2UgQWNjb3VudFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFN0b3JhZ2UgQWNjb3VudFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy50YWdzT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcInRhZ3NcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0udGFnc31gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHRhZ3MgYXNzaWduZWQgdG8gdGhlIFN0b3JhZ2UgQWNjb3VudFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcmltYXJ5RW5kcG9pbnRzT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dChcbiAgICAgIHRoaXMsXG4gICAgICBcInByaW1hcnlfZW5kcG9pbnRzXCIsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnByaW1hcnlFbmRwb2ludHN9YCxcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHByaW1hcnkgZW5kcG9pbnRzIG9mIHRoZSBTdG9yYWdlIEFjY291bnRcIixcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIE92ZXJyaWRlIGxvZ2ljYWwgSURzXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubG9jYXRpb25PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJsb2NhdGlvblwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMudGFnc091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInRhZ3NcIik7XG4gICAgdGhpcy5wcmltYXJ5RW5kcG9pbnRzT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwicHJpbWFyeV9lbmRwb2ludHNcIik7XG5cbiAgICAvLyBBcHBseSBpZ25vcmUgY2hhbmdlcyBpZiBzcGVjaWZpZWRcbiAgICB0aGlzLl9hcHBseUlnbm9yZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFUVVJUkVEIEFCU1RSQUNUIE1FVEhPRFMgRlJPTSBWZXJzaW9uZWRBemFwaVJlc291cmNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGRlZmF1bHQgQVBJIHZlcnNpb24gdG8gdXNlIHdoZW4gbm8gZXhwbGljaXQgdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMjQtMDEtMDFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBenVyZSByZXNvdXJjZSB0eXBlIGZvciBTdG9yYWdlIEFjY291bnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFNUT1JBR0VfQUNDT1VOVF9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIEFQSSBzY2hlbWEgZm9yIHRoZSByZXNvbHZlZCB2ZXJzaW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHJlc291cmNlIGJvZHkgZm9yIHRoZSBBenVyZSBBUEkgY2FsbFxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgU3RvcmFnZUFjY291bnRQcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb246IHR5cGVkUHJvcHMubG9jYXRpb24gfHwgXCJlYXN0dXNcIixcbiAgICAgIHRhZ3M6IHR5cGVkUHJvcHMudGFncyB8fCB7fSxcbiAgICAgIHNrdTogdHlwZWRQcm9wcy5za3UsXG4gICAgICBraW5kOiB0eXBlZFByb3BzLmtpbmQgfHwgXCJTdG9yYWdlVjJcIixcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgYWNjZXNzVGllcjogdHlwZWRQcm9wcy5hY2Nlc3NUaWVyIHx8IFwiSG90XCIsXG4gICAgICAgIHN1cHBvcnRzSHR0cHNUcmFmZmljT25seTogdHlwZWRQcm9wcy5lbmFibGVIdHRwc1RyYWZmaWNPbmx5ICE9PSBmYWxzZSxcbiAgICAgICAgbWluaW11bVRsc1ZlcnNpb246IHR5cGVkUHJvcHMubWluaW11bVRsc1ZlcnNpb24gfHwgXCJUTFMxXzJcIixcbiAgICAgICAgYWxsb3dCbG9iUHVibGljQWNjZXNzOiB0eXBlZFByb3BzLmFsbG93QmxvYlB1YmxpY0FjY2VzcyB8fCBmYWxzZSxcbiAgICAgICAgbmV0d29ya0FjbHM6IHR5cGVkUHJvcHMubmV0d29ya0FjbHMsXG4gICAgICAgIGVuY3J5cHRpb246IHR5cGVkUHJvcHMuZW5jcnlwdGlvbixcbiAgICAgIH0sXG4gICAgICBpZGVudGl0eTogdHlwZWRQcm9wcy5pZGVudGl0eSxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFVCTElDIE1FVEhPRFMgRk9SIFNUT1JBR0UgQUNDT1VOVCBPUEVSQVRJT05TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWFyeSBibG9iIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHByaW1hcnlCbG9iRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5wcmltYXJ5RW5kcG9pbnRzLmJsb2J9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1hcnkgZmlsZSBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGdldCBwcmltYXJ5RmlsZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucHJpbWFyeUVuZHBvaW50cy5maWxlfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmltYXJ5IHF1ZXVlIGVuZHBvaW50XG4gICAqL1xuICBwdWJsaWMgZ2V0IHByaW1hcnlRdWV1ZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucHJpbWFyeUVuZHBvaW50cy5xdWV1ZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWFyeSB0YWJsZSBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGdldCBwcmltYXJ5VGFibGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnByaW1hcnlFbmRwb2ludHMudGFibGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSB0YWcgdG8gdGhlIFN0b3JhZ2UgQWNjb3VudFxuICAgKi9cbiAgcHVibGljIGFkZFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9wcy50YWdzKSB7XG4gICAgICAodGhpcy5wcm9wcyBhcyBhbnkpLnRhZ3MgPSB7fTtcbiAgICB9XG4gICAgdGhpcy5wcm9wcy50YWdzIVtrZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgdGFnIGZyb20gdGhlIFN0b3JhZ2UgQWNjb3VudFxuICAgKi9cbiAgcHVibGljIHJlbW92ZVRhZyhrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLnRhZ3MgJiYgdGhpcy5wcm9wcy50YWdzW2tleV0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnByb3BzLnRhZ3Nba2V5XTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgaWdub3JlIGNoYW5nZXMgbGlmZWN5Y2xlIHJ1bGVzIGlmIHNwZWNpZmllZCBpbiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBfYXBwbHlJZ25vcmVDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMgJiYgdGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGVycmFmb3JtUmVzb3VyY2UuYWRkT3ZlcnJpZGUoXCJsaWZlY3ljbGVcIiwgW1xuICAgICAgICB7XG4gICAgICAgICAgaWdub3JlX2NoYW5nZXM6IHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcyxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH1cbiAgfVxufVxuIl19
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1hY2NvdW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXN0b3JhZ2VhY2NvdW50L2xpYi9zdG9yYWdlLWFjY291bnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsK0JBQStCO0FBRS9CLHVFQUltQztBQUNuQyw4RUFJbUQ7QUFDbkQsa0dBQTZGO0FBME43Rjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUNILE1BQWEsY0FBZSxTQUFRLDhCQUFhO0lBQy9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0NHO0lBQ0ksTUFBTSxDQUFDLGlCQUFpQixDQUM3QixhQUFxQixFQUNyQixXQUFvQixFQUNwQixPQUF5QztRQUV6QyxNQUFNLFlBQVksR0FBVSxFQUFFLENBQUM7UUFFL0IseUJBQXlCO1FBQ3pCLElBQUksT0FBTyxFQUFFLHVCQUF1QixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9DLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLFdBQVcsRUFDVCwrREFBK0Q7Z0JBQ2pFLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsSUFBSSxDQUFDLENBSzdDO2dCQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsMENBQTBDO2dCQUN0RCxtQkFBbUIsRUFBRSxNQUFNO2dCQUMzQixVQUFVLEVBQUUsT0FBTztnQkFDbkIsUUFBUSxFQUFFO29CQUNSLElBQUksRUFBRSxpQkFBMEI7b0JBQ2hDLFVBQVUsRUFBRSxjQUFjO29CQUMxQixlQUFlLEVBQUUsbUNBQW1DO29CQUNwRCxRQUFRLEVBQUUsVUFBbUI7b0JBQzdCLFNBQVMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLElBQUksSUFBSTtvQkFDakQsZUFBZSxFQUFFLFNBQWtCO2lCQUNwQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQzdCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsSUFBSSxPQUFPLEVBQUUsaUJBQWlCLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDekMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDaEIsSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsV0FBVyxFQUFFLHFEQUFxRDtnQkFDbEUsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLG1CQUFtQixJQUFJLENBQUMsQ0FBc0I7Z0JBQ2xFLE1BQU0sRUFBRSxFQUFFLEVBQUUsMENBQTBDO2dCQUN0RCxtQkFBbUIsRUFBRSxNQUFNO2dCQUMzQixVQUFVLEVBQUUsTUFBTTtnQkFDbEIsUUFBUSxFQUFFO29CQUNSLElBQUksRUFBRSxpQkFBMEI7b0JBQ2hDLFVBQVUsRUFBRSxRQUFRO29CQUNwQixlQUFlLEVBQUUsbUNBQW1DO29CQUNwRCxRQUFRLEVBQUUsYUFBc0I7b0JBQ2hDLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxJQUFJLFdBQVc7b0JBQ2xELGVBQWUsRUFBRSxPQUFnQjtpQkFDbEM7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQzthQUM3QixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxFQUFFLHVCQUF1QixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQy9DLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLElBQUksRUFBRSx5QkFBeUI7Z0JBQy9CLFdBQVcsRUFBRSwwREFBMEQ7Z0JBQ3ZFLFFBQVEsRUFBRSxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsSUFBSSxDQUFDLENBSzdDO2dCQUNMLE1BQU0sRUFBRSxFQUFFLEVBQUUsMENBQTBDO2dCQUN0RCxtQkFBbUIsRUFBRSxNQUFNO2dCQUMzQixVQUFVLEVBQUUsT0FBTztnQkFDbkIsUUFBUSxFQUFFO29CQUNSLElBQUksRUFBRSxpQkFBMEI7b0JBQ2hDLFVBQVUsRUFBRSxjQUFjO29CQUMxQixlQUFlLEVBQUUsbUNBQW1DO29CQUNwRCxRQUFRLEVBQUUsYUFBc0I7b0JBQ2hDLFNBQVMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLElBQUksTUFBTTtvQkFDbkQsZUFBZSxFQUFFLE9BQWdCO2lCQUNsQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDO2FBQzdCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCx3REFBd0Q7UUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxXQUFXO1lBQ3BDLENBQUMsQ0FBQztnQkFDRSxJQUFJLEVBQUUsNkJBQTZCO2dCQUNuQyxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsMENBQTBDO2dCQUNoRSxXQUFXLEVBQUUsV0FBVztnQkFDeEIsSUFBSSxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDbkQsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNyRDtZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCw0QkFBNEI7UUFDNUIsTUFBTSxpQkFBaUIsR0FDckIsT0FBTyxFQUFFLG1CQUFtQixLQUFLLEtBQUs7WUFDcEMsQ0FBQyxDQUFDO2dCQUNFO29CQUNFLElBQUksRUFBRSxnQ0FBZ0M7b0JBQ3RDLFdBQVcsRUFBRSx1Q0FBdUM7b0JBQ3BELE1BQU0sRUFBRSxFQUFFLEVBQUUsMENBQTBDO29CQUN0RCxTQUFTLEVBQUU7d0JBQ1QsS0FBSyxFQUFFOzRCQUNMO2dDQUNFLEtBQUssRUFBRSxlQUFlO2dDQUN0QixXQUFXLEVBQUUsMENBQTBDOzZCQUN4RDt5QkFDRjtxQkFDRjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWSxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQztxQkFDbEM7aUJBQ0Y7YUFDRjtZQUNILENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFaEIsZ0NBQWdDO1FBQ2hDLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSTtZQUNiLGtCQUFrQixFQUFFLGtCQUFrQjtZQUN0QyxZQUFZLEVBQUUsWUFBWTtZQUMxQixpQkFBaUIsRUFBRSxpQkFBaUI7U0FDckMsQ0FBQztJQUNKLENBQUM7SUFJRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyx1QkFBdUI7UUFDcEMsSUFBSSxjQUFjLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUcsdUNBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFdkQsSUFBSSxDQUFDO1lBQ0gsaUJBQWlCLENBQUMsb0JBQW9CLENBQ3BDLDhDQUFvQixFQUNwQixzREFBNEIsQ0FDN0IsQ0FBQztZQUVGLGNBQWMsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFFeEMsT0FBTyxDQUFDLEdBQUcsQ0FDVCxjQUFjLHNEQUE0QixDQUFDLE1BQU0scUJBQXFCLDhDQUFvQixFQUFFLENBQzdGLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQ1YsK0NBQStDLEtBQUssSUFBSTtnQkFDdEQsd0ZBQXdGLENBQzNGLENBQUM7WUFDRixjQUFjLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBZUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtRQUNsRSxxREFBcUQ7UUFDckQsY0FBYyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFFekMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIscURBQXFEO1FBQ3JELElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUU3QiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNwRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxXQUFXLEVBQUUsK0JBQStCO1NBQzdDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDaEUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsWUFBWTtZQUNuRCxXQUFXLEVBQUUscUNBQXFDO1NBQ25ELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsUUFBUTtZQUMvQyxXQUFXLEVBQUUsaUNBQWlDO1NBQy9DLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsUUFBUTtZQUMvQyxXQUFXLEVBQUUsMENBQTBDO1NBQ3hELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQ3JELElBQUksRUFDSixtQkFBbUIsRUFDbkI7WUFDRSxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxzQ0FBc0M7WUFDN0UsV0FBVyxFQUFFLDhDQUE4QztTQUM1RCxDQUNGLENBQUM7UUFFRix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUVuRSxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGdGQUFnRjtJQUNoRix3REFBd0Q7SUFDeEQsZ0ZBQWdGO0lBRWhGOztPQUVHO0lBQ08sY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZO1FBQ3BCLE9BQU8sOENBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ08sU0FBUztRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQTRCLENBQUM7UUFDaEQsT0FBTztZQUNMLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxJQUFJLFFBQVE7WUFDekMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUMzQixHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUc7WUFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksV0FBVztZQUNwQyxVQUFVLEVBQUU7Z0JBQ1YsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVLElBQUksS0FBSztnQkFDMUMsd0JBQXdCLEVBQUUsVUFBVSxDQUFDLHNCQUFzQixLQUFLLEtBQUs7Z0JBQ3JFLGlCQUFpQixFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxRQUFRO2dCQUMzRCxxQkFBcUIsRUFBRSxVQUFVLENBQUMscUJBQXFCLElBQUksS0FBSztnQkFDaEUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7YUFDbEM7WUFDRCxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYsZ0RBQWdEO0lBQ2hELGdGQUFnRjtJQUVoRjs7T0FFRztJQUNILElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywyQ0FBMkMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsMkNBQTJDLENBQUM7SUFDckYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDRDQUE0QyxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsb0JBQW9CO1FBQzdCLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyw0Q0FBNEMsQ0FBQztJQUN0RixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLEtBQWEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLEdBQVc7UUFDMUIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxnRkFBZ0Y7SUFDaEYseUJBQXlCO0lBQ3pCLGdGQUFnRjtJQUVoRjs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDOUM7b0JBQ0UsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYTtpQkFDekM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUExWEgsd0NBMlhDOzs7QUEzTmdCLGdDQUFpQixHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBBenVyZSBTdG9yYWdlIEFjY291bnQgaW1wbGVtZW50YXRpb24gdXNpbmcgVmVyc2lvbmVkQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGNsYXNzIHJlcGxhY2VzIGFsbCB2ZXJzaW9uLXNwZWNpZmljIFN0b3JhZ2UgQWNjb3VudCBpbXBsZW1lbnRhdGlvbnMgd2l0aCBhIHNpbmdsZVxuICogdW5pZmllZCBjbGFzcyB0aGF0IGF1dG9tYXRpY2FsbHkgaGFuZGxlcyB2ZXJzaW9uIG1hbmFnZW1lbnQsIHNjaGVtYSB2YWxpZGF0aW9uLCBhbmRcbiAqIHByb3BlcnR5IHRyYW5zZm9ybWF0aW9uIGFjcm9zcyBhbGwgc3VwcG9ydGVkIEFQSSB2ZXJzaW9ucy5cbiAqXG4gKiBTdXBwb3J0ZWQgQVBJIFZlcnNpb25zOlxuICogLSAyMDIzLTAxLTAxIChBY3RpdmUpXG4gKiAtIDIwMjMtMDUtMDEgKEFjdGl2ZSlcbiAqIC0gMjAyNC0wMS0wMSAoQWN0aXZlLCBMYXRlc3QpXG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIEF1dG9tYXRpYyBsYXRlc3QgdmVyc2lvbiByZXNvbHV0aW9uIHdoZW4gbm8gdmVyc2lvbiBpcyBzcGVjaWZpZWRcbiAqIC0gRXhwbGljaXQgdmVyc2lvbiBwaW5uaW5nIGZvciBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzXG4gKiAtIFNjaGVtYS1kcml2ZW4gdmFsaWRhdGlvbiBhbmQgdHJhbnNmb3JtYXRpb25cbiAqIC0gRnVsbCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgU3RvcmFnZSBBY2NvdW50IGludGVyZmFjZVxuICogLSBKU0lJIGNvbXBsaWFuY2UgZm9yIG11bHRpLWxhbmd1YWdlIHN1cHBvcnRcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfU1RPUkFHRV9BQ0NPVU5UX1ZFUlNJT05TLFxuICBTVE9SQUdFX0FDQ09VTlRfVFlQRSxcbiAgU3RvcmFnZUFjY291bnRNb25pdG9yaW5nT3B0aW9ucyxcbn0gZnJvbSBcIi4vc3RvcmFnZS1hY2NvdW50LXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbiAgTW9uaXRvcmluZ0NvbmZpZyxcbn0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlWZXJzaW9uTWFuYWdlciB9IGZyb20gXCIuLi8uLi9jb3JlLWF6dXJlL2xpYi92ZXJzaW9uLW1hbmFnZXIvYXBpLXZlcnNpb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgQXBpU2NoZW1hIH0gZnJvbSBcIi4uLy4uL2NvcmUtYXp1cmUvbGliL3ZlcnNpb24tbWFuYWdlci9pbnRlcmZhY2VzL3ZlcnNpb24taW50ZXJmYWNlc1wiO1xuXG4vKipcbiAqIFNLVSBjb25maWd1cmF0aW9uIGZvciBTdG9yYWdlIEFjY291bnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQWNjb3VudFNrdSB7XG4gIC8qKlxuICAgKiBUaGUgU0tVIG5hbWUgKFN0YW5kYXJkX0xSUywgU3RhbmRhcmRfR1JTLCBTdGFuZGFyZF9SQUdSUywgU3RhbmRhcmRfWlJTLCBQcmVtaXVtX0xSUywgUHJlbWl1bV9aUlMpXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSVAgcnVsZSBmb3IgbmV0d29yayBBQ0xzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUFjY291bnRJcFJ1bGUge1xuICAvKipcbiAgICogSVAgYWRkcmVzcyBvciBDSURSIHJhbmdlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFZpcnR1YWwgbmV0d29yayBydWxlIGZvciBuZXR3b3JrIEFDTHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQWNjb3VudFZpcnR1YWxOZXR3b3JrUnVsZSB7XG4gIC8qKlxuICAgKiBWaXJ0dWFsIG5ldHdvcmsgcmVzb3VyY2UgSURcbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTmV0d29yayBBQ0wgY29uZmlndXJhdGlvbiBmb3IgU3RvcmFnZSBBY2NvdW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZUFjY291bnROZXR3b3JrQWNscyB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IGFjdGlvbiB3aGVuIG5vIHJ1bGUgbWF0Y2hlcyAoQWxsb3cgb3IgRGVueSlcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRBY3Rpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQIHJ1bGVzIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBpcFJ1bGVzPzogU3RvcmFnZUFjY291bnRJcFJ1bGVbXTtcblxuICAvKipcbiAgICogVmlydHVhbCBuZXR3b3JrIHJ1bGVzIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSB2aXJ0dWFsTmV0d29ya1J1bGVzPzogU3RvcmFnZUFjY291bnRWaXJ0dWFsTmV0d29ya1J1bGVbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBieXBhc3MgbmV0d29yayBydWxlcyBmb3IgQXp1cmUgc2VydmljZXNcbiAgICovXG4gIHJlYWRvbmx5IGJ5cGFzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJZGVudGl0eSBjb25maWd1cmF0aW9uIGZvciBTdG9yYWdlIEFjY291bnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQWNjb3VudElkZW50aXR5IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGlkZW50aXR5IChTeXN0ZW1Bc3NpZ25lZCwgVXNlckFzc2lnbmVkLCBTeXN0ZW1Bc3NpZ25lZCxVc2VyQXNzaWduZWQpXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXIgYXNzaWduZWQgaWRlbnRpdHkgSURzXG4gICAqL1xuICByZWFkb25seSB1c2VyQXNzaWduZWRJZGVudGl0aWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIHNlcnZpY2UgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50RW5jcnlwdGlvblNlcnZpY2Uge1xuICAvKipcbiAgICogV2hldGhlciBlbmNyeXB0aW9uIGlzIGVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEVuY3J5cHRpb24gc2VydmljZXMgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50RW5jcnlwdGlvblNlcnZpY2VzIHtcbiAgLyoqXG4gICAqIEJsb2Igc2VydmljZSBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBibG9iPzogU3RvcmFnZUFjY291bnRFbmNyeXB0aW9uU2VydmljZTtcblxuICAvKipcbiAgICogRmlsZSBzZXJ2aWNlIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGZpbGU/OiBTdG9yYWdlQWNjb3VudEVuY3J5cHRpb25TZXJ2aWNlO1xuXG4gIC8qKlxuICAgKiBUYWJsZSBzZXJ2aWNlIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlPzogU3RvcmFnZUFjY291bnRFbmNyeXB0aW9uU2VydmljZTtcblxuICAvKipcbiAgICogUXVldWUgc2VydmljZSBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBxdWV1ZT86IFN0b3JhZ2VBY2NvdW50RW5jcnlwdGlvblNlcnZpY2U7XG59XG5cbi8qKlxuICogRW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBTdG9yYWdlIEFjY291bnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQWNjb3VudEVuY3J5cHRpb24ge1xuICAvKipcbiAgICogRW5jcnlwdGlvbiBzZXJ2aWNlcyAoYmxvYiwgZmlsZSwgdGFibGUsIHF1ZXVlKVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZXM/OiBTdG9yYWdlQWNjb3VudEVuY3J5cHRpb25TZXJ2aWNlcztcblxuICAvKipcbiAgICogS2V5IHNvdXJjZSAoTWljcm9zb2Z0LlN0b3JhZ2Ugb3IgTWljcm9zb2Z0LktleXZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkga2V5U291cmNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHRoZSB1bmlmaWVkIEF6dXJlIFN0b3JhZ2UgQWNjb3VudFxuICpcbiAqIEV4dGVuZHMgVmVyc2lvbmVkQXphcGlSZXNvdXJjZVByb3BzIHdpdGggU3RvcmFnZSBBY2NvdW50IHNwZWNpZmljIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlQWNjb3VudFByb3BzIGV4dGVuZHMgQXphcGlSZXNvdXJjZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBTS1UgKHByaWNpbmcgdGllcikgZm9yIHRoZSBTdG9yYWdlIEFjY291bnRcbiAgICogQGV4YW1wbGUgeyBuYW1lOiBcIlN0YW5kYXJkX0xSU1wiIH1cbiAgICovXG4gIHJlYWRvbmx5IHNrdTogU3RvcmFnZUFjY291bnRTa3U7XG5cbiAgLyoqXG4gICAqIFRoZSBraW5kIG9mIFN0b3JhZ2UgQWNjb3VudFxuICAgKiBAZGVmYXVsdCBcIlN0b3JhZ2VWMlwiXG4gICAqIEBleGFtcGxlIFwiU3RvcmFnZVYyXCIsIFwiQmxvYlN0b3JhZ2VcIiwgXCJCbG9ja0Jsb2JTdG9yYWdlXCIsIFwiRmlsZVN0b3JhZ2VcIlxuICAgKi9cbiAgcmVhZG9ubHkga2luZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFjY2VzcyB0aWVyIGZvciBibG9iIHN0b3JhZ2VcbiAgICogQGRlZmF1bHQgXCJIb3RcIlxuICAgKiBAZXhhbXBsZSBcIkhvdFwiLCBcIkNvb2xcIlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzVGllcj86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyBvbmx5IEhUVFBTIHRyYWZmaWNcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSHR0cHNUcmFmZmljT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIFRMUyB2ZXJzaW9uIHJlcXVpcmVkXG4gICAqIEBkZWZhdWx0IFwiVExTMV8yXCJcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1UbHNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IHB1YmxpYyBhY2Nlc3MgdG8gYmxvYnNcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QmxvYlB1YmxpY0FjY2Vzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE5ldHdvcmsgQUNMIHJ1bGVzIGZvciB0aGUgc3RvcmFnZSBhY2NvdW50XG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQWNscz86IFN0b3JhZ2VBY2NvdW50TmV0d29ya0FjbHM7XG5cbiAgLyoqXG4gICAqIE1hbmFnZWQgaWRlbnRpdHkgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgaWRlbnRpdHk/OiBTdG9yYWdlQWNjb3VudElkZW50aXR5O1xuXG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIHNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogU3RvcmFnZUFjY291bnRFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHJ1bGVzIHRvIGlnbm9yZSBjaGFuZ2VzXG4gICAqIEBleGFtcGxlIFtcInRhZ3NcIl1cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUNoYW5nZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVzb3VyY2UgZ3JvdXAgSUQgd2hlcmUgdGhlIHN0b3JhZ2UgYWNjb3VudCB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlR3JvdXBJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdG9yYWdlIEFjY291bnQgcHJvcGVydGllcyBmb3IgdGhlIHJlcXVlc3QgYm9keVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50Qm9keVByb3BlcnRpZXMge1xuICByZWFkb25seSBhY2Nlc3NUaWVyPzogc3RyaW5nO1xuICByZWFkb25seSBzdXBwb3J0c0h0dHBzVHJhZmZpY09ubHk/OiBib29sZWFuO1xuICByZWFkb25seSBtaW5pbXVtVGxzVmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgYWxsb3dCbG9iUHVibGljQWNjZXNzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbmV0d29ya0FjbHM/OiBTdG9yYWdlQWNjb3VudE5ldHdvcmtBY2xzO1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogU3RvcmFnZUFjY291bnRFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIFRoZSByZXNvdXJjZSBib2R5IGludGVyZmFjZSBmb3IgQXp1cmUgU3RvcmFnZSBBY2NvdW50IEFQSSBjYWxsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VBY2NvdW50Qm9keSB7XG4gIHJlYWRvbmx5IGxvY2F0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICByZWFkb25seSBza3U6IFN0b3JhZ2VBY2NvdW50U2t1O1xuICByZWFkb25seSBraW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb3BlcnRpZXM/OiBTdG9yYWdlQWNjb3VudEJvZHlQcm9wZXJ0aWVzO1xuICByZWFkb25seSBpZGVudGl0eT86IFN0b3JhZ2VBY2NvdW50SWRlbnRpdHk7XG59XG5cbi8qKlxuICogVW5pZmllZCBBenVyZSBTdG9yYWdlIEFjY291bnQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgc2luZ2xlLCB2ZXJzaW9uLWF3YXJlIGltcGxlbWVudGF0aW9uIHRoYXQgcmVwbGFjZXMgYWxsXG4gKiB2ZXJzaW9uLXNwZWNpZmljIFN0b3JhZ2UgQWNjb3VudCBjbGFzc2VzLiBJdCBhdXRvbWF0aWNhbGx5IGhhbmRsZXMgdmVyc2lvblxuICogcmVzb2x1dGlvbiwgc2NoZW1hIHZhbGlkYXRpb24sIGFuZCBwcm9wZXJ0eSB0cmFuc2Zvcm1hdGlvbiB3aGlsZSBtYWludGFpbmluZ1xuICogZnVsbCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGF1dG9tYXRpYyB2ZXJzaW9uIHJlc29sdXRpb246XG4gKiBjb25zdCBzdG9yYWdlQWNjb3VudCA9IG5ldyBTdG9yYWdlQWNjb3VudCh0aGlzLCBcInN0b3JhZ2VcIiwge1xuICogICBuYW1lOiBcIm15c3RvcmFnZWFjY291bnRcIixcbiAqICAgbG9jYXRpb246IFwiZWFzdHVzXCIsXG4gKiAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAqICAgc2t1OiB7IG5hbWU6IFwiU3RhbmRhcmRfTFJTXCIgfSxcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBVc2FnZSB3aXRoIGV4cGxpY2l0IHZlcnNpb24gcGlubmluZzpcbiAqIGNvbnN0IHN0b3JhZ2VBY2NvdW50ID0gbmV3IFN0b3JhZ2VBY2NvdW50KHRoaXMsIFwic3RvcmFnZVwiLCB7XG4gKiAgIG5hbWU6IFwibXlzdG9yYWdlYWNjb3VudFwiLFxuICogICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAqICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICogICBza3U6IHsgbmFtZTogXCJTdGFuZGFyZF9MUlNcIiB9LFxuICogICBhcGlWZXJzaW9uOiBcIjIwMjMtMDUtMDFcIixcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBTdG9yYWdlQWNjb3VudCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICAvKipcbiAgICogUmV0dXJucyBhIHByb2R1Y3Rpb24tcmVhZHkgbW9uaXRvcmluZyBjb25maWd1cmF0aW9uIGZvciBTdG9yYWdlIEFjY291bnRzXG4gICAqXG4gICAqIFRoaXMgc3RhdGljIGZhY3RvcnkgbWV0aG9kIHByb3ZpZGVzIGEgY29tcGxldGUgTW9uaXRvcmluZ0NvbmZpZyB3aXRoIHNlbnNpYmxlIGRlZmF1bHRzXG4gICAqIGZvciBzdG9yYWdlIGFjY291bnQgbW9uaXRvcmluZyBpbmNsdWRpbmcgYXZhaWxhYmlsaXR5LCBlZ3Jlc3MsIHRyYW5zYWN0aW9ucyBhbGVydHMsIGFuZCBkZWxldGlvbiB0cmFja2luZy5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbkdyb3VwSWQgLSBUaGUgcmVzb3VyY2UgSUQgb2YgdGhlIGFjdGlvbiBncm91cCBmb3IgYWxlcnQgbm90aWZpY2F0aW9uc1xuICAgKiBAcGFyYW0gd29ya3NwYWNlSWQgLSBPcHRpb25hbCBMb2cgQW5hbHl0aWNzIHdvcmtzcGFjZSBJRCBmb3IgZGlhZ25vc3RpYyBzZXR0aW5nc1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdG8gY3VzdG9taXplIHRocmVzaG9sZHMgYW5kIGVuYWJsZS9kaXNhYmxlIHNwZWNpZmljIGFsZXJ0c1xuICAgKiBAcmV0dXJucyBBIGNvbXBsZXRlIE1vbml0b3JpbmdDb25maWcgb2JqZWN0IHJlYWR5IHRvIHVzZSBpbiBTdG9yYWdlQWNjb3VudCBwcm9wc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGFsbCBkZWZhdWx0c1xuICAgKiBjb25zdCBzdG9yYWdlQWNjb3VudCA9IG5ldyBTdG9yYWdlQWNjb3VudCh0aGlzLCBcInN0b3JhZ2VcIiwge1xuICAgKiAgIC8vIC4uLiBvdGhlciBwcm9wZXJ0aWVzIC4uLlxuICAgKiAgIG1vbml0b3Jpbmc6IFN0b3JhZ2VBY2NvdW50LmRlZmF1bHRNb25pdG9yaW5nKGFjdGlvbkdyb3VwLmlkLCB3b3Jrc3BhY2UuaWQpXG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDdXN0b20gdGhyZXNob2xkc1xuICAgKiBjb25zdCBzdG9yYWdlQWNjb3VudCA9IG5ldyBTdG9yYWdlQWNjb3VudCh0aGlzLCBcInN0b3JhZ2VcIiwge1xuICAgKiAgIC8vIC4uLiBvdGhlciBwcm9wZXJ0aWVzIC4uLlxuICAgKiAgIG1vbml0b3Jpbmc6IFN0b3JhZ2VBY2NvdW50LmRlZmF1bHRNb25pdG9yaW5nKFxuICAgKiAgICAgYWN0aW9uR3JvdXAuaWQsXG4gICAqICAgICB3b3Jrc3BhY2UuaWQsXG4gICAqICAgICB7XG4gICAqICAgICAgIGF2YWlsYWJpbGl0eVRocmVzaG9sZDogOTkuNSxcbiAgICogICAgICAgZWdyZXNzVGhyZXNob2xkOiAyMTQ3NDgzNjQ4MCwgLy8gMjBHQlxuICAgKiAgICAgICBlbmFibGVUcmFuc2FjdGlvbnNBbGVydDogZmFsc2VcbiAgICogICAgIH1cbiAgICogICApXG4gICAqIH0pO1xuICAgKlxuICAgKiBAc3RhYmlsaXR5IHN0YWJsZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkZWZhdWx0TW9uaXRvcmluZyhcbiAgICBhY3Rpb25Hcm91cElkOiBzdHJpbmcsXG4gICAgd29ya3NwYWNlSWQ/OiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFN0b3JhZ2VBY2NvdW50TW9uaXRvcmluZ09wdGlvbnMsXG4gICk6IE1vbml0b3JpbmdDb25maWcge1xuICAgIGNvbnN0IG1ldHJpY0FsZXJ0czogYW55W10gPSBbXTtcblxuICAgIC8vIExvdyBBdmFpbGFiaWxpdHkgQWxlcnRcbiAgICBpZiAob3B0aW9ucz8uZW5hYmxlQXZhaWxhYmlsaXR5QWxlcnQgIT09IGZhbHNlKSB7XG4gICAgICBtZXRyaWNBbGVydHMucHVzaCh7XG4gICAgICAgIG5hbWU6IFwibG93LWF2YWlsYWJpbGl0eS1hbGVydFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICBcIkFsZXJ0IHdoZW4gc3RvcmFnZSBhY2NvdW50IGF2YWlsYWJpbGl0eSBkcm9wcyBiZWxvdyB0aHJlc2hvbGRcIixcbiAgICAgICAgc2V2ZXJpdHk6IChvcHRpb25zPy5hdmFpbGFiaWxpdHlBbGVydFNldmVyaXR5ID8/IDEpIGFzXG4gICAgICAgICAgfCAwXG4gICAgICAgICAgfCAxXG4gICAgICAgICAgfCAyXG4gICAgICAgICAgfCAzXG4gICAgICAgICAgfCA0LFxuICAgICAgICBzY29wZXM6IFtdLCAvLyBXaWxsIGJlIHNldCBhdXRvbWF0aWNhbGx5IGJ5IGJhc2UgY2xhc3NcbiAgICAgICAgZXZhbHVhdGlvbkZyZXF1ZW5jeTogXCJQVDVNXCIsXG4gICAgICAgIHdpbmRvd1NpemU6IFwiUFQxNU1cIixcbiAgICAgICAgY3JpdGVyaWE6IHtcbiAgICAgICAgICB0eXBlOiBcIlN0YXRpY1RocmVzaG9sZFwiIGFzIGNvbnN0LFxuICAgICAgICAgIG1ldHJpY05hbWU6IFwiQXZhaWxhYmlsaXR5XCIsXG4gICAgICAgICAgbWV0cmljTmFtZXNwYWNlOiBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50c1wiLFxuICAgICAgICAgIG9wZXJhdG9yOiBcIkxlc3NUaGFuXCIgYXMgY29uc3QsXG4gICAgICAgICAgdGhyZXNob2xkOiBvcHRpb25zPy5hdmFpbGFiaWxpdHlUaHJlc2hvbGQgPz8gOTkuOSxcbiAgICAgICAgICB0aW1lQWdncmVnYXRpb246IFwiQXZlcmFnZVwiIGFzIGNvbnN0LFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25zOiBbeyBhY3Rpb25Hcm91cElkIH1dLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSGlnaCBFZ3Jlc3MgQWxlcnRcbiAgICBpZiAob3B0aW9ucz8uZW5hYmxlRWdyZXNzQWxlcnQgIT09IGZhbHNlKSB7XG4gICAgICBtZXRyaWNBbGVydHMucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiaGlnaC1lZ3Jlc3MtYWxlcnRcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQWxlcnQgd2hlbiBzdG9yYWdlIGFjY291bnQgZWdyZXNzIGV4Y2VlZHMgdGhyZXNob2xkXCIsXG4gICAgICAgIHNldmVyaXR5OiAob3B0aW9ucz8uZWdyZXNzQWxlcnRTZXZlcml0eSA/PyAyKSBhcyAwIHwgMSB8IDIgfCAzIHwgNCxcbiAgICAgICAgc2NvcGVzOiBbXSwgLy8gV2lsbCBiZSBzZXQgYXV0b21hdGljYWxseSBieSBiYXNlIGNsYXNzXG4gICAgICAgIGV2YWx1YXRpb25GcmVxdWVuY3k6IFwiUFQ1TVwiLFxuICAgICAgICB3aW5kb3dTaXplOiBcIlBUMUhcIixcbiAgICAgICAgY3JpdGVyaWE6IHtcbiAgICAgICAgICB0eXBlOiBcIlN0YXRpY1RocmVzaG9sZFwiIGFzIGNvbnN0LFxuICAgICAgICAgIG1ldHJpY05hbWU6IFwiRWdyZXNzXCIsXG4gICAgICAgICAgbWV0cmljTmFtZXNwYWNlOiBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50c1wiLFxuICAgICAgICAgIG9wZXJhdG9yOiBcIkdyZWF0ZXJUaGFuXCIgYXMgY29uc3QsXG4gICAgICAgICAgdGhyZXNob2xkOiBvcHRpb25zPy5lZ3Jlc3NUaHJlc2hvbGQgPz8gMTA3Mzc0MTgyNDAsXG4gICAgICAgICAgdGltZUFnZ3JlZ2F0aW9uOiBcIlRvdGFsXCIgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGlvbnM6IFt7IGFjdGlvbkdyb3VwSWQgfV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBIaWdoIFRyYW5zYWN0aW9ucyBBbGVydFxuICAgIGlmIChvcHRpb25zPy5lbmFibGVUcmFuc2FjdGlvbnNBbGVydCAhPT0gZmFsc2UpIHtcbiAgICAgIG1ldHJpY0FsZXJ0cy5wdXNoKHtcbiAgICAgICAgbmFtZTogXCJoaWdoLXRyYW5zYWN0aW9ucy1hbGVydFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJBbGVydCB3aGVuIHN0b3JhZ2UgYWNjb3VudCB0cmFuc2FjdGlvbnMgZXhjZWVkIHRocmVzaG9sZFwiLFxuICAgICAgICBzZXZlcml0eTogKG9wdGlvbnM/LnRyYW5zYWN0aW9uc0FsZXJ0U2V2ZXJpdHkgPz8gMikgYXNcbiAgICAgICAgICB8IDBcbiAgICAgICAgICB8IDFcbiAgICAgICAgICB8IDJcbiAgICAgICAgICB8IDNcbiAgICAgICAgICB8IDQsXG4gICAgICAgIHNjb3BlczogW10sIC8vIFdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYnkgYmFzZSBjbGFzc1xuICAgICAgICBldmFsdWF0aW9uRnJlcXVlbmN5OiBcIlBUNU1cIixcbiAgICAgICAgd2luZG93U2l6ZTogXCJQVDE1TVwiLFxuICAgICAgICBjcml0ZXJpYToge1xuICAgICAgICAgIHR5cGU6IFwiU3RhdGljVGhyZXNob2xkXCIgYXMgY29uc3QsXG4gICAgICAgICAgbWV0cmljTmFtZTogXCJUcmFuc2FjdGlvbnNcIixcbiAgICAgICAgICBtZXRyaWNOYW1lc3BhY2U6IFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzXCIsXG4gICAgICAgICAgb3BlcmF0b3I6IFwiR3JlYXRlclRoYW5cIiBhcyBjb25zdCxcbiAgICAgICAgICB0aHJlc2hvbGQ6IG9wdGlvbnM/LnRyYW5zYWN0aW9uc1RocmVzaG9sZCA/PyAxMDAwMDAsXG4gICAgICAgICAgdGltZUFnZ3JlZ2F0aW9uOiBcIlRvdGFsXCIgYXMgY29uc3QsXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGlvbnM6IFt7IGFjdGlvbkdyb3VwSWQgfV0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBkaWFnbm9zdGljIHNldHRpbmdzIGlmIHdvcmtzcGFjZSBJRCBpcyBwcm92aWRlZFxuICAgIGNvbnN0IGRpYWdub3N0aWNTZXR0aW5ncyA9IHdvcmtzcGFjZUlkXG4gICAgICA/IHtcbiAgICAgICAgICBuYW1lOiBcInN0b3JhZ2UtYWNjb3VudC1kaWFnbm9zdGljc1wiLFxuICAgICAgICAgIHRhcmdldFJlc291cmNlSWQ6IFwiXCIsIC8vIFdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYnkgYmFzZSBjbGFzc1xuICAgICAgICAgIHdvcmtzcGFjZUlkOiB3b3Jrc3BhY2VJZCxcbiAgICAgICAgICBsb2dzOiBbeyBjYXRlZ29yeUdyb3VwOiBcImFsbExvZ3NcIiwgZW5hYmxlZDogdHJ1ZSB9XSxcbiAgICAgICAgICBtZXRyaWNzOiBbeyBjYXRlZ29yeTogXCJBbGxNZXRyaWNzXCIsIGVuYWJsZWQ6IHRydWUgfV0sXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gQnVpbGQgYWN0aXZpdHkgbG9nIGFsZXJ0c1xuICAgIGNvbnN0IGFjdGl2aXR5TG9nQWxlcnRzID1cbiAgICAgIG9wdGlvbnM/LmVuYWJsZURlbGV0aW9uQWxlcnQgIT09IGZhbHNlXG4gICAgICAgID8gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInN0b3JhZ2UtYWNjb3VudC1kZWxldGlvbi1hbGVydFwiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJBbGVydCB3aGVuIHN0b3JhZ2UgYWNjb3VudCBpcyBkZWxldGVkXCIsXG4gICAgICAgICAgICAgIHNjb3BlczogW10sIC8vIFdpbGwgYmUgc2V0IGF1dG9tYXRpY2FsbHkgYnkgYmFzZSBjbGFzc1xuICAgICAgICAgICAgICBjb25kaXRpb246IHtcbiAgICAgICAgICAgICAgICBhbGxPZjogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDogXCJvcGVyYXRpb25OYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgIGVxdWFsc1ZhbHVlOiBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50cy9kZWxldGVcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAgIGFjdGlvbkdyb3VwczogW3sgYWN0aW9uR3JvdXBJZCB9XSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFJldHVybiBjb21wbGV0ZSBjb25maWcgb2JqZWN0XG4gICAgcmV0dXJuIHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBkaWFnbm9zdGljU2V0dGluZ3M6IGRpYWdub3N0aWNTZXR0aW5ncyxcbiAgICAgIG1ldHJpY0FsZXJ0czogbWV0cmljQWxlcnRzLFxuICAgICAgYWN0aXZpdHlMb2dBbGVydHM6IGFjdGl2aXR5TG9nQWxlcnRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzY2hlbWFzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoYXQgU3RvcmFnZSBBY2NvdW50IHNjaGVtYXMgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgQXBpVmVyc2lvbk1hbmFnZXJcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGVuc3VyZVNjaGVtYXNSZWdpc3RlcmVkKCk6IHZvaWQge1xuICAgIGlmIChTdG9yYWdlQWNjb3VudC5zY2hlbWFzUmVnaXN0ZXJlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFwaVZlcnNpb25NYW5hZ2VyID0gQXBpVmVyc2lvbk1hbmFnZXIuaW5zdGFuY2UoKTtcblxuICAgIHRyeSB7XG4gICAgICBhcGlWZXJzaW9uTWFuYWdlci5yZWdpc3RlclJlc291cmNlVHlwZShcbiAgICAgICAgU1RPUkFHRV9BQ0NPVU5UX1RZUEUsXG4gICAgICAgIEFMTF9TVE9SQUdFX0FDQ09VTlRfVkVSU0lPTlMsXG4gICAgICApO1xuXG4gICAgICBTdG9yYWdlQWNjb3VudC5zY2hlbWFzUmVnaXN0ZXJlZCA9IHRydWU7XG5cbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgUmVnaXN0ZXJlZCAke0FMTF9TVE9SQUdFX0FDQ09VTlRfVkVSU0lPTlMubGVuZ3RofSBBUEkgdmVyc2lvbnMgZm9yICR7U1RPUkFHRV9BQ0NPVU5UX1RZUEV9YCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEZhaWxlZCB0byByZWdpc3RlciBTdG9yYWdlIEFjY291bnQgc2NoZW1hczogJHtlcnJvcn0uIGAgK1xuICAgICAgICAgIGBUaGlzIG1heSBpbmRpY2F0ZSB0aGUgc2NoZW1hcyBhcmUgYWxyZWFkeSByZWdpc3RlcmVkIG9yIHRoZXJlJ3MgYSBjb25maWd1cmF0aW9uIGlzc3VlLmAsXG4gICAgICApO1xuICAgICAgU3RvcmFnZUFjY291bnQuc2NoZW1hc1JlZ2lzdGVyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogU3RvcmFnZUFjY291bnRQcm9wcztcblxuICAvLyBPdXRwdXQgcHJvcGVydGllcyBmb3IgZWFzeSBhY2Nlc3MgYW5kIHJlZmVyZW5jaW5nXG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbG9jYXRpb25PdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IHRhZ3NPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IHByaW1hcnlFbmRwb2ludHNPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICAvLyBQdWJsaWMgcHJvcGVydGllc1xuICBwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQXp1cmUgU3RvcmFnZSBBY2NvdW50IHVzaW5nIHRoZSBWZXJzaW9uZWRBemFwaVJlc291cmNlIGZyYW1ld29ya1xuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBpbnN0YW5jZVxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBTdG9yYWdlIEFjY291bnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdG9yYWdlQWNjb3VudFByb3BzKSB7XG4gICAgLy8gRW5zdXJlIHNjaGVtYXMgYXJlIHJlZ2lzdGVyZWQgYmVmb3JlIGNhbGxpbmcgc3VwZXJcbiAgICBTdG9yYWdlQWNjb3VudC5lbnN1cmVTY2hlbWFzUmVnaXN0ZXJlZCgpO1xuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICAvLyBFeHRyYWN0IHByb3BlcnRpZXMgZnJvbSB0aGUgQVpBUEkgcmVzb3VyY2Ugb3V0cHV0c1xuICAgIHRoaXMuaWQgPSBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LmlkfWA7XG4gICAgdGhpcy50YWdzID0gcHJvcHMudGFncyB8fCB7fTtcblxuICAgIC8vIENyZWF0ZSBUZXJyYWZvcm0gb3V0cHV0c1xuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFN0b3JhZ2UgQWNjb3VudFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2NhdGlvbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJsb2NhdGlvblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5sb2NhdGlvbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIGxvY2F0aW9uIG9mIHRoZSBTdG9yYWdlIEFjY291bnRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBTdG9yYWdlIEFjY291bnRcIixcbiAgICB9KTtcblxuICAgIHRoaXMudGFnc091dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJ0YWdzXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59LnRhZ3N9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSB0YWdzIGFzc2lnbmVkIHRvIHRoZSBTdG9yYWdlIEFjY291bnRcIixcbiAgICB9KTtcblxuICAgIHRoaXMucHJpbWFyeUVuZHBvaW50c091dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQoXG4gICAgICB0aGlzLFxuICAgICAgXCJwcmltYXJ5X2VuZHBvaW50c1wiLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5wcmltYXJ5RW5kcG9pbnRzfWAsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBwcmltYXJ5IGVuZHBvaW50cyBvZiB0aGUgU3RvcmFnZSBBY2NvdW50XCIsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBPdmVycmlkZSBsb2dpY2FsIElEc1xuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLmxvY2F0aW9uT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibG9jYXRpb25cIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLnRhZ3NPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJ0YWdzXCIpO1xuICAgIHRoaXMucHJpbWFyeUVuZHBvaW50c091dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcInByaW1hcnlfZW5kcG9pbnRzXCIpO1xuXG4gICAgLy8gQXBwbHkgaWdub3JlIGNoYW5nZXMgaWYgc3BlY2lmaWVkXG4gICAgdGhpcy5fYXBwbHlJZ25vcmVDaGFuZ2VzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSRVFVSVJFRCBBQlNUUkFDVCBNRVRIT0RTIEZST00gVmVyc2lvbmVkQXphcGlSZXNvdXJjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkZWZhdWx0IEFQSSB2ZXJzaW9uIHRvIHVzZSB3aGVuIG5vIGV4cGxpY2l0IHZlcnNpb24gaXMgc3BlY2lmaWVkXG4gICAqL1xuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDI0LTAxLTAxXCI7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgQXp1cmUgcmVzb3VyY2UgdHlwZSBmb3IgU3RvcmFnZSBBY2NvdW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTVE9SQUdFX0FDQ09VTlRfVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBBUEkgc2NoZW1hIGZvciB0aGUgcmVzb2x2ZWQgdmVyc2lvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByZXNvdXJjZSBib2R5IGZvciB0aGUgQXp1cmUgQVBJIGNhbGxcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIFN0b3JhZ2VBY2NvdW50UHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2F0aW9uOiB0eXBlZFByb3BzLmxvY2F0aW9uIHx8IFwiZWFzdHVzXCIsXG4gICAgICB0YWdzOiB0eXBlZFByb3BzLnRhZ3MgfHwge30sXG4gICAgICBza3U6IHR5cGVkUHJvcHMuc2t1LFxuICAgICAga2luZDogdHlwZWRQcm9wcy5raW5kIHx8IFwiU3RvcmFnZVYyXCIsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGFjY2Vzc1RpZXI6IHR5cGVkUHJvcHMuYWNjZXNzVGllciB8fCBcIkhvdFwiLFxuICAgICAgICBzdXBwb3J0c0h0dHBzVHJhZmZpY09ubHk6IHR5cGVkUHJvcHMuZW5hYmxlSHR0cHNUcmFmZmljT25seSAhPT0gZmFsc2UsXG4gICAgICAgIG1pbmltdW1UbHNWZXJzaW9uOiB0eXBlZFByb3BzLm1pbmltdW1UbHNWZXJzaW9uIHx8IFwiVExTMV8yXCIsXG4gICAgICAgIGFsbG93QmxvYlB1YmxpY0FjY2VzczogdHlwZWRQcm9wcy5hbGxvd0Jsb2JQdWJsaWNBY2Nlc3MgfHwgZmFsc2UsXG4gICAgICAgIG5ldHdvcmtBY2xzOiB0eXBlZFByb3BzLm5ldHdvcmtBY2xzLFxuICAgICAgICBlbmNyeXB0aW9uOiB0eXBlZFByb3BzLmVuY3J5cHRpb24sXG4gICAgICB9LFxuICAgICAgaWRlbnRpdHk6IHR5cGVkUHJvcHMuaWRlbnRpdHksXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBVQkxJQyBNRVRIT0RTIEZPUiBTVE9SQUdFIEFDQ09VTlQgT1BFUkFUSU9OU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1hcnkgYmxvYiBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGdldCBwcmltYXJ5QmxvYkVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMucHJpbWFyeUVuZHBvaW50cy5ibG9ifWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmltYXJ5IGZpbGUgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJpbWFyeUZpbGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnByaW1hcnlFbmRwb2ludHMuZmlsZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWFyeSBxdWV1ZSBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGdldCBwcmltYXJ5UXVldWVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLnByaW1hcnlFbmRwb2ludHMucXVldWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1hcnkgdGFibGUgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJpbWFyeVRhYmxlRW5kcG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5wcmltYXJ5RW5kcG9pbnRzLnRhYmxlfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgdGFnIHRvIHRoZSBTdG9yYWdlIEFjY291bnRcbiAgICovXG4gIHB1YmxpYyBhZGRUYWcoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMudGFncykge1xuICAgICAgKHRoaXMucHJvcHMgYXMgYW55KS50YWdzID0ge307XG4gICAgfVxuICAgIHRoaXMucHJvcHMudGFncyFba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHRhZyBmcm9tIHRoZSBTdG9yYWdlIEFjY291bnRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVUYWcoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy50YWdzICYmIHRoaXMucHJvcHMudGFnc1trZXldKSB7XG4gICAgICBkZWxldGUgdGhpcy5wcm9wcy50YWdzW2tleV07XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBIRUxQRVIgTUVUSE9EU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGlnbm9yZSBjaGFuZ2VzIGxpZmVjeWNsZSBydWxlcyBpZiBzcGVjaWZpZWQgaW4gcHJvcHNcbiAgICovXG4gIHByaXZhdGUgX2FwcGx5SWdub3JlQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wcm9wcy5pZ25vcmVDaGFuZ2VzICYmIHRoaXMucHJvcHMuaWdub3JlQ2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRlcnJhZm9ybVJlc291cmNlLmFkZE92ZXJyaWRlKFwibGlmZWN5Y2xlXCIsIFtcbiAgICAgICAge1xuICAgICAgICAgIGlnbm9yZV9jaGFuZ2VzOiB0aGlzLnByb3BzLmlnbm9yZUNoYW5nZXMsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -10,54 +10,133 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  const cdktf_1 = require("cdktf");
12
12
  require("cdktf/lib/testing/adapters/jest");
13
+ const azure_actiongroup_1 = require("../../azure-actiongroup");
13
14
  const azure_resourcegroup_1 = require("../../azure-resourcegroup");
14
15
  const provider_1 = require("../../core-azure/lib/azapi/providers-azapi/provider");
15
16
  const testing_1 = require("../../testing");
17
+ const metadata_1 = require("../../testing/lib/metadata");
16
18
  const storage_account_1 = require("../lib/storage-account");
19
+ // Generate unique test run metadata for this test suite
20
+ const testMetadata = new metadata_1.TestRunMetadata("storage-account-integration", {
21
+ maxAgeHours: 4,
22
+ });
17
23
  /**
18
24
  * Example stack demonstrating Storage Account usage
19
25
  */
20
- class StorageAccountExampleStack extends cdktf_1.TerraformStack {
26
+ class StorageAccountExampleStack extends testing_1.BaseTestStack {
21
27
  constructor(scope, id) {
22
- super(scope, id);
28
+ super(scope, id, {
29
+ testRunOptions: {
30
+ maxAgeHours: testMetadata.maxAgeHours,
31
+ autoCleanup: testMetadata.autoCleanup,
32
+ cleanupPolicy: testMetadata.cleanupPolicy,
33
+ },
34
+ });
23
35
  // Configure AZAPI provider
24
36
  new provider_1.AzapiProvider(this, "azapi", {});
37
+ // Generate unique names
38
+ const rgName = this.generateResourceName("Microsoft.Resources/resourceGroups", "storage");
25
39
  // Create a resource group
26
40
  const resourceGroup = new azure_resourcegroup_1.ResourceGroup(this, "example-rg", {
27
- name: "storage-example-rg",
41
+ name: rgName,
28
42
  location: "eastus",
29
43
  tags: {
30
- environment: "example",
31
- purpose: "integration-test",
44
+ ...this.systemTags(),
32
45
  },
33
46
  });
47
+ // Create an action group for monitoring alerts
48
+ const actionGroup = new azure_actiongroup_1.ActionGroup(this, "example-action-group", {
49
+ name: "storage-monitoring-ag",
50
+ location: "global",
51
+ resourceGroupId: resourceGroup.id,
52
+ groupShortName: "stralert",
53
+ emailReceivers: [
54
+ {
55
+ name: "admin-email",
56
+ emailAddress: "admin@example.com",
57
+ },
58
+ ],
59
+ });
60
+ // Generate unique storage account names (must be globally unique, lowercase, no hyphens)
61
+ const basicStorageName = this.generateResourceName("Microsoft.Storage/storageAccounts", "basic");
62
+ const versionedStorageName = this.generateResourceName("Microsoft.Storage/storageAccounts", "versioned");
63
+ const monitoredStorageName = this.generateResourceName("Microsoft.Storage/storageAccounts", "monitored");
64
+ const customMonitoredStorageName = this.generateResourceName("Microsoft.Storage/storageAccounts", "custmon");
65
+ const selectiveMonitoredStorageName = this.generateResourceName("Microsoft.Storage/storageAccounts", "selmon");
34
66
  // Example 1: Basic storage account
35
67
  new storage_account_1.StorageAccount(this, "basic-storage", {
36
- name: "basicstorageexample",
68
+ name: basicStorageName,
37
69
  location: resourceGroup.props.location,
38
70
  resourceGroupId: resourceGroup.id,
39
71
  sku: { name: "Standard_LRS" },
40
72
  tags: {
73
+ ...this.systemTags(),
41
74
  example: "basic",
42
75
  },
43
76
  });
44
77
  // Example 2: Storage account with specific version
45
78
  new storage_account_1.StorageAccount(this, "versioned-storage", {
46
- name: "versionedstorageex",
79
+ name: versionedStorageName,
47
80
  location: resourceGroup.props.location,
48
81
  resourceGroupId: resourceGroup.id,
49
82
  sku: { name: "Standard_GRS" },
50
83
  apiVersion: "2023-05-01",
51
84
  tags: {
85
+ ...this.systemTags(),
52
86
  example: "versioned",
53
87
  },
54
88
  });
89
+ // Example 3: Storage account with monitoring
90
+ new storage_account_1.StorageAccount(this, "monitored-storage", {
91
+ name: monitoredStorageName,
92
+ location: resourceGroup.props.location,
93
+ resourceGroupId: resourceGroup.id,
94
+ sku: { name: "Standard_LRS" },
95
+ monitoring: storage_account_1.StorageAccount.defaultMonitoring(actionGroup.id),
96
+ tags: {
97
+ ...this.systemTags(),
98
+ example: "monitored",
99
+ },
100
+ });
101
+ // Example 4: Storage account with custom monitoring thresholds
102
+ new storage_account_1.StorageAccount(this, "custom-monitored-storage", {
103
+ name: customMonitoredStorageName,
104
+ location: resourceGroup.props.location,
105
+ resourceGroupId: resourceGroup.id,
106
+ sku: { name: "Standard_GRS" },
107
+ monitoring: storage_account_1.StorageAccount.defaultMonitoring(actionGroup.id, undefined, {
108
+ availabilityThreshold: 99.5,
109
+ egressThreshold: 21474836480, // 20GB
110
+ transactionsThreshold: 200000,
111
+ availabilityAlertSeverity: 0, // Critical
112
+ egressAlertSeverity: 1, // Error
113
+ transactionsAlertSeverity: 2, // Warning
114
+ }),
115
+ tags: {
116
+ ...this.systemTags(),
117
+ example: "custom-monitored",
118
+ },
119
+ });
120
+ // Example 5: Storage account with selective monitoring
121
+ new storage_account_1.StorageAccount(this, "selective-monitored-storage", {
122
+ name: selectiveMonitoredStorageName,
123
+ location: resourceGroup.props.location,
124
+ resourceGroupId: resourceGroup.id,
125
+ sku: { name: "Standard_RAGRS" },
126
+ monitoring: storage_account_1.StorageAccount.defaultMonitoring(actionGroup.id, undefined, {
127
+ enableAvailabilityAlert: true,
128
+ enableEgressAlert: false, // Disable egress alert
129
+ enableTransactionsAlert: true,
130
+ enableDeletionAlert: false, // Disable deletion alert
131
+ }),
132
+ tags: {
133
+ ...this.systemTags(),
134
+ example: "selective-monitored",
135
+ },
136
+ });
55
137
  }
56
138
  }
57
139
  describe("Storage Account Integration Test", () => {
58
- afterAll(() => {
59
- (0, testing_1.cleanupCdkTfOutDirs)();
60
- });
61
140
  it("should deploy, validate idempotency, and cleanup storage account resources", () => {
62
141
  const app = cdktf_1.Testing.app();
63
142
  const stack = new StorageAccountExampleStack(app, "test-storage-account");
@@ -66,7 +145,7 @@ describe("Storage Account Integration Test", () => {
66
145
  // 1. Run terraform apply to deploy resources
67
146
  // 2. Run terraform plan to check idempotency (no changes expected)
68
147
  // 3. Run terraform destroy to cleanup resources
69
- (0, testing_1.TerraformApplyCheckAndDestroy)(synthesized);
148
+ (0, testing_1.TerraformApplyCheckAndDestroy)(synthesized, { verifyCleanup: true });
70
149
  }, 600000); // 10 minute timeout for deployment and cleanup
71
150
  });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1hY2NvdW50LmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXN0b3JhZ2VhY2NvdW50L3Rlc3Qvc3RvcmFnZS1hY2NvdW50LmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HOztBQUVILGlDQUFnRDtBQUVoRCwyQ0FBeUM7QUFDekMsbUVBQTBEO0FBQzFELGtGQUFvRjtBQUNwRiwyQ0FHdUI7QUFDdkIsNERBQXdEO0FBRXhEOztHQUVHO0FBQ0gsTUFBTSwwQkFBMkIsU0FBUSxzQkFBYztJQUNyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDJCQUEyQjtRQUMzQixJQUFJLHdCQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVyQywwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxtQ0FBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDMUQsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixRQUFRLEVBQUUsUUFBUTtZQUNsQixJQUFJLEVBQUU7Z0JBQ0osV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLE9BQU8sRUFBRSxrQkFBa0I7YUFDNUI7U0FDRixDQUFDLENBQUM7UUFFSCxtQ0FBbUM7UUFDbkMsSUFBSSxnQ0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDeEMsSUFBSSxFQUFFLHFCQUFxQjtZQUMzQixRQUFRLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFTO1lBQ3ZDLGVBQWUsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUNqQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQzdCLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQUUsT0FBTzthQUNqQjtTQUNGLENBQUMsQ0FBQztRQUVILG1EQUFtRDtRQUNuRCxJQUFJLGdDQUFjLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQzVDLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUztZQUN2QyxlQUFlLEVBQUUsYUFBYSxDQUFDLEVBQUU7WUFDakMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUM3QixVQUFVLEVBQUUsWUFBWTtZQUN4QixJQUFJLEVBQUU7Z0JBQ0osT0FBTyxFQUFFLFdBQVc7YUFDckI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsa0NBQWtDLEVBQUUsR0FBRyxFQUFFO0lBQ2hELFFBQVEsQ0FBQyxHQUFHLEVBQUU7UUFDWixJQUFBLDZCQUFtQixHQUFFLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsYUFBYTtRQUNiLDZDQUE2QztRQUM3QyxtRUFBbUU7UUFDbkUsZ0RBQWdEO1FBQ2hELElBQUEsdUNBQTZCLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0MsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0NBQStDO0FBQzdELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IGZvciBBenVyZSBTdG9yYWdlIEFjY291bnRcbiAqXG4gKiBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIGJhc2ljIHVzYWdlIG9mIHRoZSBTdG9yYWdlQWNjb3VudCBjb25zdHJ1Y3RcbiAqIGFuZCB2YWxpZGF0ZXMgZGVwbG95bWVudCwgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwLlxuICpcbiAqIFJ1biB3aXRoOiBucG0gcnVuIGludGVncmF0aW9uOm5vc3RyZWFtXG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZywgVGVycmFmb3JtU3RhY2sgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgXCJjZGt0Zi9saWIvdGVzdGluZy9hZGFwdGVycy9qZXN0XCI7XG5pbXBvcnQgeyBSZXNvdXJjZUdyb3VwIH0gZnJvbSBcIi4uLy4uL2F6dXJlLXJlc291cmNlZ3JvdXBcIjtcbmltcG9ydCB7IEF6YXBpUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyXCI7XG5pbXBvcnQge1xuICBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveSxcbiAgY2xlYW51cENka1RmT3V0RGlycyxcbn0gZnJvbSBcIi4uLy4uL3Rlc3RpbmdcIjtcbmltcG9ydCB7IFN0b3JhZ2VBY2NvdW50IH0gZnJvbSBcIi4uL2xpYi9zdG9yYWdlLWFjY291bnRcIjtcblxuLyoqXG4gKiBFeGFtcGxlIHN0YWNrIGRlbW9uc3RyYXRpbmcgU3RvcmFnZSBBY2NvdW50IHVzYWdlXG4gKi9cbmNsYXNzIFN0b3JhZ2VBY2NvdW50RXhhbXBsZVN0YWNrIGV4dGVuZHMgVGVycmFmb3JtU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIENvbmZpZ3VyZSBBWkFQSSBwcm92aWRlclxuICAgIG5ldyBBemFwaVByb3ZpZGVyKHRoaXMsIFwiYXphcGlcIiwge30pO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZ3JvdXBcbiAgICBjb25zdCByZXNvdXJjZUdyb3VwID0gbmV3IFJlc291cmNlR3JvdXAodGhpcywgXCJleGFtcGxlLXJnXCIsIHtcbiAgICAgIG5hbWU6IFwic3RvcmFnZS1leGFtcGxlLXJnXCIsXG4gICAgICBsb2NhdGlvbjogXCJlYXN0dXNcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IFwiZXhhbXBsZVwiLFxuICAgICAgICBwdXJwb3NlOiBcImludGVncmF0aW9uLXRlc3RcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFeGFtcGxlIDE6IEJhc2ljIHN0b3JhZ2UgYWNjb3VudFxuICAgIG5ldyBTdG9yYWdlQWNjb3VudCh0aGlzLCBcImJhc2ljLXN0b3JhZ2VcIiwge1xuICAgICAgbmFtZTogXCJiYXNpY3N0b3JhZ2VleGFtcGxlXCIsXG4gICAgICBsb2NhdGlvbjogcmVzb3VyY2VHcm91cC5wcm9wcy5sb2NhdGlvbiEsXG4gICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICBza3U6IHsgbmFtZTogXCJTdGFuZGFyZF9MUlNcIiB9LFxuICAgICAgdGFnczoge1xuICAgICAgICBleGFtcGxlOiBcImJhc2ljXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRXhhbXBsZSAyOiBTdG9yYWdlIGFjY291bnQgd2l0aCBzcGVjaWZpYyB2ZXJzaW9uXG4gICAgbmV3IFN0b3JhZ2VBY2NvdW50KHRoaXMsIFwidmVyc2lvbmVkLXN0b3JhZ2VcIiwge1xuICAgICAgbmFtZTogXCJ2ZXJzaW9uZWRzdG9yYWdlZXhcIixcbiAgICAgIGxvY2F0aW9uOiByZXNvdXJjZUdyb3VwLnByb3BzLmxvY2F0aW9uISxcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIHNrdTogeyBuYW1lOiBcIlN0YW5kYXJkX0dSU1wiIH0sXG4gICAgICBhcGlWZXJzaW9uOiBcIjIwMjMtMDUtMDFcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgZXhhbXBsZTogXCJ2ZXJzaW9uZWRcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuZGVzY3JpYmUoXCJTdG9yYWdlIEFjY291bnQgSW50ZWdyYXRpb24gVGVzdFwiLCAoKSA9PiB7XG4gIGFmdGVyQWxsKCgpID0+IHtcbiAgICBjbGVhbnVwQ2RrVGZPdXREaXJzKCk7XG4gIH0pO1xuXG4gIGl0KFwic2hvdWxkIGRlcGxveSwgdmFsaWRhdGUgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwIHN0b3JhZ2UgYWNjb3VudCByZXNvdXJjZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFwcCA9IFRlc3RpbmcuYXBwKCk7XG4gICAgY29uc3Qgc3RhY2sgPSBuZXcgU3RvcmFnZUFjY291bnRFeGFtcGxlU3RhY2soYXBwLCBcInRlc3Qtc3RvcmFnZS1hY2NvdW50XCIpO1xuICAgIGNvbnN0IHN5bnRoZXNpemVkID0gVGVzdGluZy5mdWxsU3ludGgoc3RhY2spO1xuXG4gICAgLy8gVGhpcyB3aWxsOlxuICAgIC8vIDEuIFJ1biB0ZXJyYWZvcm0gYXBwbHkgdG8gZGVwbG95IHJlc291cmNlc1xuICAgIC8vIDIuIFJ1biB0ZXJyYWZvcm0gcGxhbiB0byBjaGVjayBpZGVtcG90ZW5jeSAobm8gY2hhbmdlcyBleHBlY3RlZClcbiAgICAvLyAzLiBSdW4gdGVycmFmb3JtIGRlc3Ryb3kgdG8gY2xlYW51cCByZXNvdXJjZXNcbiAgICBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveShzeW50aGVzaXplZCk7XG4gIH0sIDYwMDAwMCk7IC8vIDEwIG1pbnV0ZSB0aW1lb3V0IGZvciBkZXBsb3ltZW50IGFuZCBjbGVhbnVwXG59KTtcbiJdfQ==
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1hY2NvdW50LmludGVnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F6dXJlLXN0b3JhZ2VhY2NvdW50L3Rlc3Qvc3RvcmFnZS1hY2NvdW50LmludGVnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7OztHQU9HOztBQUVILGlDQUFnQztBQUVoQywyQ0FBeUM7QUFDekMsK0RBQXNEO0FBQ3RELG1FQUEwRDtBQUMxRCxrRkFBb0Y7QUFDcEYsMkNBQTZFO0FBQzdFLHlEQUE2RDtBQUM3RCw0REFBd0Q7QUFFeEQsd0RBQXdEO0FBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUksMEJBQWUsQ0FBQyw2QkFBNkIsRUFBRTtJQUN0RSxXQUFXLEVBQUUsQ0FBQztDQUNmLENBQUMsQ0FBQztBQUVIOztHQUVHO0FBQ0gsTUFBTSwwQkFBMkIsU0FBUSx1QkFBYTtJQUNwRCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLGNBQWMsRUFBRTtnQkFDZCxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7Z0JBQ3JDLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztnQkFDckMsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhO2FBQzFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsMkJBQTJCO1FBQzNCLElBQUksd0JBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJDLHdCQUF3QjtRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQ3RDLG9DQUFvQyxFQUNwQyxTQUFTLENBQ1YsQ0FBQztRQUVGLDBCQUEwQjtRQUMxQixNQUFNLGFBQWEsR0FBRyxJQUFJLG1DQUFhLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUMxRCxJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLElBQUksRUFBRTtnQkFD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QUFFLENBQUMsNEVBQTRFLEVBQUUsR0FBRyxFQUFFO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLGVBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLDBCQUEwQixDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sV0FBVyxHQUFHLGVBQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0MsYUFBYTtRQUNiLDZDQUE2QztRQUM3QyxtRUFBbUU7UUFDbkUsZ0RBQWdEO1FBQ2hELElBQUEsdUNBQTZCLEVBQUMsV0FBVyxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsK0NBQStDO0FBQzdELENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnRlZ3JhdGlvbiB0ZXN0IGZvciBBenVyZSBTdG9yYWdlIEFjY291bnRcbiAqXG4gKiBUaGlzIHRlc3QgZGVtb25zdHJhdGVzIGJhc2ljIHVzYWdlIG9mIHRoZSBTdG9yYWdlQWNjb3VudCBjb25zdHJ1Y3RcbiAqIGFuZCB2YWxpZGF0ZXMgZGVwbG95bWVudCwgaWRlbXBvdGVuY3ksIGFuZCBjbGVhbnVwLlxuICpcbiAqIFJ1biB3aXRoOiBucG0gcnVuIGludGVncmF0aW9uOm5vc3RyZWFtXG4gKi9cblxuaW1wb3J0IHsgVGVzdGluZyB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCBcImNka3RmL2xpYi90ZXN0aW5nL2FkYXB0ZXJzL2plc3RcIjtcbmltcG9ydCB7IEFjdGlvbkdyb3VwIH0gZnJvbSBcIi4uLy4uL2F6dXJlLWFjdGlvbmdyb3VwXCI7XG5pbXBvcnQgeyBSZXNvdXJjZUdyb3VwIH0gZnJvbSBcIi4uLy4uL2F6dXJlLXJlc291cmNlZ3JvdXBcIjtcbmltcG9ydCB7IEF6YXBpUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vY29yZS1henVyZS9saWIvYXphcGkvcHJvdmlkZXJzLWF6YXBpL3Byb3ZpZGVyXCI7XG5pbXBvcnQgeyBCYXNlVGVzdFN0YWNrLCBUZXJyYWZvcm1BcHBseUNoZWNrQW5kRGVzdHJveSB9IGZyb20gXCIuLi8uLi90ZXN0aW5nXCI7XG5pbXBvcnQgeyBUZXN0UnVuTWV0YWRhdGEgfSBmcm9tIFwiLi4vLi4vdGVzdGluZy9saWIvbWV0YWRhdGFcIjtcbmltcG9ydCB7IFN0b3JhZ2VBY2NvdW50IH0gZnJvbSBcIi4uL2xpYi9zdG9yYWdlLWFjY291bnRcIjtcblxuLy8gR2VuZXJhdGUgdW5pcXVlIHRlc3QgcnVuIG1ldGFkYXRhIGZvciB0aGlzIHRlc3Qgc3VpdGVcbmNvbnN0IHRlc3RNZXRhZGF0YSA9IG5ldyBUZXN0UnVuTWV0YWRhdGEoXCJzdG9yYWdlLWFjY291bnQtaW50ZWdyYXRpb25cIiwge1xuICBtYXhBZ2VIb3VyczogNCxcbn0pO1xuXG4vKipcbiAqIEV4YW1wbGUgc3RhY2sgZGVtb25zdHJhdGluZyBTdG9yYWdlIEFjY291bnQgdXNhZ2VcbiAqL1xuY2xhc3MgU3RvcmFnZUFjY291bnRFeGFtcGxlU3RhY2sgZXh0ZW5kcyBCYXNlVGVzdFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdGVzdFJ1bk9wdGlvbnM6IHtcbiAgICAgICAgbWF4QWdlSG91cnM6IHRlc3RNZXRhZGF0YS5tYXhBZ2VIb3VycyxcbiAgICAgICAgYXV0b0NsZWFudXA6IHRlc3RNZXRhZGF0YS5hdXRvQ2xlYW51cCxcbiAgICAgICAgY2xlYW51cFBvbGljeTogdGVzdE1ldGFkYXRhLmNsZWFudXBQb2xpY3ksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQ29uZmlndXJlIEFaQVBJIHByb3ZpZGVyXG4gICAgbmV3IEF6YXBpUHJvdmlkZXIodGhpcywgXCJhemFwaVwiLCB7fSk7XG5cbiAgICAvLyBHZW5lcmF0ZSB1bmlxdWUgbmFtZXNcbiAgICBjb25zdCByZ05hbWUgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKFxuICAgICAgXCJNaWNyb3NvZnQuUmVzb3VyY2VzL3Jlc291cmNlR3JvdXBzXCIsXG4gICAgICBcInN0b3JhZ2VcIixcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGEgcmVzb3VyY2UgZ3JvdXBcbiAgICBjb25zdCByZXNvdXJjZUdyb3VwID0gbmV3IFJlc291cmNlR3JvdXAodGhpcywgXCJleGFtcGxlLXJnXCIsIHtcbiAgICAgIG5hbWU6IHJnTmFtZSxcbiAgICAgIGxvY2F0aW9uOiBcImVhc3R1c1wiLFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYW4gYWN0aW9uIGdyb3VwIGZvciBtb25pdG9yaW5nIGFsZXJ0c1xuICAgIGNvbnN0IGFjdGlvbkdyb3VwID0gbmV3IEFjdGlvbkdyb3VwKHRoaXMsIFwiZXhhbXBsZS1hY3Rpb24tZ3JvdXBcIiwge1xuICAgICAgbmFtZTogXCJzdG9yYWdlLW1vbml0b3JpbmctYWdcIixcbiAgICAgIGxvY2F0aW9uOiBcImdsb2JhbFwiLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgZ3JvdXBTaG9ydE5hbWU6IFwic3RyYWxlcnRcIixcbiAgICAgIGVtYWlsUmVjZWl2ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImFkbWluLWVtYWlsXCIsXG4gICAgICAgICAgZW1haWxBZGRyZXNzOiBcImFkbWluQGV4YW1wbGUuY29tXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gR2VuZXJhdGUgdW5pcXVlIHN0b3JhZ2UgYWNjb3VudCBuYW1lcyAobXVzdCBiZSBnbG9iYWxseSB1bmlxdWUsIGxvd2VyY2FzZSwgbm8gaHlwaGVucylcbiAgICBjb25zdCBiYXNpY1N0b3JhZ2VOYW1lID0gdGhpcy5nZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzXCIsXG4gICAgICBcImJhc2ljXCIsXG4gICAgKTtcbiAgICBjb25zdCB2ZXJzaW9uZWRTdG9yYWdlTmFtZSA9IHRoaXMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUoXG4gICAgICBcIk1pY3Jvc29mdC5TdG9yYWdlL3N0b3JhZ2VBY2NvdW50c1wiLFxuICAgICAgXCJ2ZXJzaW9uZWRcIixcbiAgICApO1xuICAgIGNvbnN0IG1vbml0b3JlZFN0b3JhZ2VOYW1lID0gdGhpcy5nZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgICAgIFwiTWljcm9zb2Z0LlN0b3JhZ2Uvc3RvcmFnZUFjY291bnRzXCIsXG4gICAgICBcIm1vbml0b3JlZFwiLFxuICAgICk7XG4gICAgY29uc3QgY3VzdG9tTW9uaXRvcmVkU3RvcmFnZU5hbWUgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKFxuICAgICAgXCJNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHNcIixcbiAgICAgIFwiY3VzdG1vblwiLFxuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0aXZlTW9uaXRvcmVkU3RvcmFnZU5hbWUgPSB0aGlzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKFxuICAgICAgXCJNaWNyb3NvZnQuU3RvcmFnZS9zdG9yYWdlQWNjb3VudHNcIixcbiAgICAgIFwic2VsbW9uXCIsXG4gICAgKTtcblxuICAgIC8vIEV4YW1wbGUgMTogQmFzaWMgc3RvcmFnZSBhY2NvdW50XG4gICAgbmV3IFN0b3JhZ2VBY2NvdW50KHRoaXMsIFwiYmFzaWMtc3RvcmFnZVwiLCB7XG4gICAgICBuYW1lOiBiYXNpY1N0b3JhZ2VOYW1lLFxuICAgICAgbG9jYXRpb246IHJlc291cmNlR3JvdXAucHJvcHMubG9jYXRpb24hLFxuICAgICAgcmVzb3VyY2VHcm91cElkOiByZXNvdXJjZUdyb3VwLmlkLFxuICAgICAgc2t1OiB7IG5hbWU6IFwiU3RhbmRhcmRfTFJTXCIgfSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgLi4udGhpcy5zeXN0ZW1UYWdzKCksXG4gICAgICAgIGV4YW1wbGU6IFwiYmFzaWNcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFeGFtcGxlIDI6IFN0b3JhZ2UgYWNjb3VudCB3aXRoIHNwZWNpZmljIHZlcnNpb25cbiAgICBuZXcgU3RvcmFnZUFjY291bnQodGhpcywgXCJ2ZXJzaW9uZWQtc3RvcmFnZVwiLCB7XG4gICAgICBuYW1lOiB2ZXJzaW9uZWRTdG9yYWdlTmFtZSxcbiAgICAgIGxvY2F0aW9uOiByZXNvdXJjZUdyb3VwLnByb3BzLmxvY2F0aW9uISxcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIHNrdTogeyBuYW1lOiBcIlN0YW5kYXJkX0dSU1wiIH0sXG4gICAgICBhcGlWZXJzaW9uOiBcIjIwMjMtMDUtMDFcIixcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgLi4udGhpcy5zeXN0ZW1UYWdzKCksXG4gICAgICAgIGV4YW1wbGU6IFwidmVyc2lvbmVkXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRXhhbXBsZSAzOiBTdG9yYWdlIGFjY291bnQgd2l0aCBtb25pdG9yaW5nXG4gICAgbmV3IFN0b3JhZ2VBY2NvdW50KHRoaXMsIFwibW9uaXRvcmVkLXN0b3JhZ2VcIiwge1xuICAgICAgbmFtZTogbW9uaXRvcmVkU3RvcmFnZU5hbWUsXG4gICAgICBsb2NhdGlvbjogcmVzb3VyY2VHcm91cC5wcm9wcy5sb2NhdGlvbiEsXG4gICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICBza3U6IHsgbmFtZTogXCJTdGFuZGFyZF9MUlNcIiB9LFxuICAgICAgbW9uaXRvcmluZzogU3RvcmFnZUFjY291bnQuZGVmYXVsdE1vbml0b3JpbmcoYWN0aW9uR3JvdXAuaWQpLFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgICAgZXhhbXBsZTogXCJtb25pdG9yZWRcIixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFeGFtcGxlIDQ6IFN0b3JhZ2UgYWNjb3VudCB3aXRoIGN1c3RvbSBtb25pdG9yaW5nIHRocmVzaG9sZHNcbiAgICBuZXcgU3RvcmFnZUFjY291bnQodGhpcywgXCJjdXN0b20tbW9uaXRvcmVkLXN0b3JhZ2VcIiwge1xuICAgICAgbmFtZTogY3VzdG9tTW9uaXRvcmVkU3RvcmFnZU5hbWUsXG4gICAgICBsb2NhdGlvbjogcmVzb3VyY2VHcm91cC5wcm9wcy5sb2NhdGlvbiEsXG4gICAgICByZXNvdXJjZUdyb3VwSWQ6IHJlc291cmNlR3JvdXAuaWQsXG4gICAgICBza3U6IHsgbmFtZTogXCJTdGFuZGFyZF9HUlNcIiB9LFxuICAgICAgbW9uaXRvcmluZzogU3RvcmFnZUFjY291bnQuZGVmYXVsdE1vbml0b3JpbmcoYWN0aW9uR3JvdXAuaWQsIHVuZGVmaW5lZCwge1xuICAgICAgICBhdmFpbGFiaWxpdHlUaHJlc2hvbGQ6IDk5LjUsXG4gICAgICAgIGVncmVzc1RocmVzaG9sZDogMjE0NzQ4MzY0ODAsIC8vIDIwR0JcbiAgICAgICAgdHJhbnNhY3Rpb25zVGhyZXNob2xkOiAyMDAwMDAsXG4gICAgICAgIGF2YWlsYWJpbGl0eUFsZXJ0U2V2ZXJpdHk6IDAsIC8vIENyaXRpY2FsXG4gICAgICAgIGVncmVzc0FsZXJ0U2V2ZXJpdHk6IDEsIC8vIEVycm9yXG4gICAgICAgIHRyYW5zYWN0aW9uc0FsZXJ0U2V2ZXJpdHk6IDIsIC8vIFdhcm5pbmdcbiAgICAgIH0pLFxuICAgICAgdGFnczoge1xuICAgICAgICAuLi50aGlzLnN5c3RlbVRhZ3MoKSxcbiAgICAgICAgZXhhbXBsZTogXCJjdXN0b20tbW9uaXRvcmVkXCIsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gRXhhbXBsZSA1OiBTdG9yYWdlIGFjY291bnQgd2l0aCBzZWxlY3RpdmUgbW9uaXRvcmluZ1xuICAgIG5ldyBTdG9yYWdlQWNjb3VudCh0aGlzLCBcInNlbGVjdGl2ZS1tb25pdG9yZWQtc3RvcmFnZVwiLCB7XG4gICAgICBuYW1lOiBzZWxlY3RpdmVNb25pdG9yZWRTdG9yYWdlTmFtZSxcbiAgICAgIGxvY2F0aW9uOiByZXNvdXJjZUdyb3VwLnByb3BzLmxvY2F0aW9uISxcbiAgICAgIHJlc291cmNlR3JvdXBJZDogcmVzb3VyY2VHcm91cC5pZCxcbiAgICAgIHNrdTogeyBuYW1lOiBcIlN0YW5kYXJkX1JBR1JTXCIgfSxcbiAgICAgIG1vbml0b3Jpbmc6IFN0b3JhZ2VBY2NvdW50LmRlZmF1bHRNb25pdG9yaW5nKGFjdGlvbkdyb3VwLmlkLCB1bmRlZmluZWQsIHtcbiAgICAgICAgZW5hYmxlQXZhaWxhYmlsaXR5QWxlcnQ6IHRydWUsXG4gICAgICAgIGVuYWJsZUVncmVzc0FsZXJ0OiBmYWxzZSwgLy8gRGlzYWJsZSBlZ3Jlc3MgYWxlcnRcbiAgICAgICAgZW5hYmxlVHJhbnNhY3Rpb25zQWxlcnQ6IHRydWUsXG4gICAgICAgIGVuYWJsZURlbGV0aW9uQWxlcnQ6IGZhbHNlLCAvLyBEaXNhYmxlIGRlbGV0aW9uIGFsZXJ0XG4gICAgICB9KSxcbiAgICAgIHRhZ3M6IHtcbiAgICAgICAgLi4udGhpcy5zeXN0ZW1UYWdzKCksXG4gICAgICAgIGV4YW1wbGU6IFwic2VsZWN0aXZlLW1vbml0b3JlZFwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5kZXNjcmliZShcIlN0b3JhZ2UgQWNjb3VudCBJbnRlZ3JhdGlvbiBUZXN0XCIsICgpID0+IHtcbiAgaXQoXCJzaG91bGQgZGVwbG95LCB2YWxpZGF0ZSBpZGVtcG90ZW5jeSwgYW5kIGNsZWFudXAgc3RvcmFnZSBhY2NvdW50IHJlc291cmNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYXBwID0gVGVzdGluZy5hcHAoKTtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBTdG9yYWdlQWNjb3VudEV4YW1wbGVTdGFjayhhcHAsIFwidGVzdC1zdG9yYWdlLWFjY291bnRcIik7XG4gICAgY29uc3Qgc3ludGhlc2l6ZWQgPSBUZXN0aW5nLmZ1bGxTeW50aChzdGFjayk7XG5cbiAgICAvLyBUaGlzIHdpbGw6XG4gICAgLy8gMS4gUnVuIHRlcnJhZm9ybSBhcHBseSB0byBkZXBsb3kgcmVzb3VyY2VzXG4gICAgLy8gMi4gUnVuIHRlcnJhZm9ybSBwbGFuIHRvIGNoZWNrIGlkZW1wb3RlbmN5IChubyBjaGFuZ2VzIGV4cGVjdGVkKVxuICAgIC8vIDMuIFJ1biB0ZXJyYWZvcm0gZGVzdHJveSB0byBjbGVhbnVwIHJlc291cmNlc1xuICAgIFRlcnJhZm9ybUFwcGx5Q2hlY2tBbmREZXN0cm95KHN5bnRoZXNpemVkLCB7IHZlcmlmeUNsZWFudXA6IHRydWUgfSk7XG4gIH0sIDYwMDAwMCk7IC8vIDEwIG1pbnV0ZSB0aW1lb3V0IGZvciBkZXBsb3ltZW50IGFuZCBjbGVhbnVwXG59KTtcbiJdfQ==
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Azure Subnet construct - Public API
3
+ */
4
+ export * from "./lib";
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ /**
3
+ * Azure Subnet construct - Public API
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./lib"), exports);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp1cmUtc3VibmV0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHdDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXp1cmUgU3VibmV0IGNvbnN0cnVjdCAtIFB1YmxpYyBBUElcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9saWJcIjtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Azure Subnet construct exports
3
+ */
4
+ export * from "./subnet";
5
+ export * from "./subnet-schemas";
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Azure Subnet construct exports
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ __exportStar(require("./subnet"), exports);
21
+ __exportStar(require("./subnet-schemas"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXp1cmUtc3VibmV0L2xpYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCwyQ0FBeUI7QUFDekIsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBenVyZSBTdWJuZXQgY29uc3RydWN0IGV4cG9ydHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9zdWJuZXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N1Ym5ldC1zY2hlbWFzXCI7XG4iXX0=
@@ -0,0 +1,32 @@
1
+ /**
2
+ * API schemas for Azure Subnet across all supported versions
3
+ *
4
+ * This file defines the complete API schemas for Microsoft.Network/virtualNetworks/subnets
5
+ * across all supported API versions. The schemas are used by the AzapiResource
6
+ * framework for validation, transformation, and version management.
7
+ */
8
+ import { ApiSchema, VersionConfig } from "../../core-azure/lib/version-manager/interfaces/version-interfaces";
9
+ /**
10
+ * API Schema for Subnet version 2024-07-01
11
+ */
12
+ export declare const SUBNET_SCHEMA_2024_07_01: ApiSchema;
13
+ /**
14
+ * API Schema for Subnet version 2024-10-01
15
+ */
16
+ export declare const SUBNET_SCHEMA_2024_10_01: ApiSchema;
17
+ /**
18
+ * Version configuration for Subnet 2024-07-01
19
+ */
20
+ export declare const SUBNET_VERSION_2024_07_01: VersionConfig;
21
+ /**
22
+ * Version configuration for Subnet 2024-10-01
23
+ */
24
+ export declare const SUBNET_VERSION_2024_10_01: VersionConfig;
25
+ /**
26
+ * All supported Subnet versions for registration
27
+ */
28
+ export declare const ALL_SUBNET_VERSIONS: VersionConfig[];
29
+ /**
30
+ * Resource type constant
31
+ */
32
+ export declare const SUBNET_TYPE = "Microsoft.Network/virtualNetworks/subnets";