@spinnaker/azure 2026.2.2 → 2026.3.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 (215) hide show
  1. package/dist/azure.module.d.ts +3 -1
  2. package/dist/image/image.reader.d.ts +4 -2
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/instance/azureInstanceType.service.d.ts +6 -2
  6. package/dist/instance/details/AzureInstanceDetails.d.ts +67 -0
  7. package/dist/loadBalancer/configure/AzureLoadBalancerChoiceModal.d.ts +10 -5
  8. package/dist/loadBalancer/configure/AzureLoadBalancerModal.d.ts +102 -0
  9. package/dist/loadBalancer/details/azureLoadBalancerDetails.d.ts +26 -0
  10. package/dist/loadBalancer/loadBalancer.transformer.d.ts +45 -2
  11. package/dist/pipeline/stages/AzureAccountRegionClusterSelector.d.ts +32 -0
  12. package/dist/pipeline/stages/bake/azureBakeStage.d.ts +46 -2
  13. package/dist/pipeline/stages/destroyAsg/azureDestroyAsgStage.d.ts +14 -2
  14. package/dist/pipeline/stages/disableAsg/azureDisableAsgStage.d.ts +4 -2
  15. package/dist/pipeline/stages/enableAsg/azureEnableAsgStage.d.ts +4 -2
  16. package/dist/securityGroup/configure/AzureSecurityGroupModal.d.ts +70 -0
  17. package/dist/securityGroup/details/AzureSecurityGroupDetails.d.ts +51 -0
  18. package/dist/securityGroup/securityGroup.reader.d.ts +3 -2
  19. package/dist/securityGroup/securityGroup.transformer.d.ts +3 -2
  20. package/dist/securityGroup/securityGroup.write.service.d.ts +9 -2
  21. package/dist/serverGroup/configure/serverGroupCommandBuilder.service.d.ts +88 -2
  22. package/dist/serverGroup/configure/serverGroupConfiguration.service.d.ts +30 -2
  23. package/dist/serverGroup/configure/wizard/AzureCloneServerGroupModal.d.ts +44 -0
  24. package/dist/serverGroup/configure/wizard/pages/ServerGroupAdvancedSettings.d.ts +8 -0
  25. package/dist/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.d.ts +12 -0
  26. package/dist/serverGroup/configure/wizard/pages/ServerGroupCapacityAndZones.d.ts +11 -0
  27. package/dist/serverGroup/configure/wizard/pages/ServerGroupHealthSettings.d.ts +10 -0
  28. package/dist/serverGroup/configure/wizard/pages/ServerGroupImageSettings.d.ts +12 -0
  29. package/dist/serverGroup/configure/wizard/pages/ServerGroupInstanceType.d.ts +9 -0
  30. package/dist/serverGroup/configure/wizard/pages/ServerGroupLoadBalancers.d.ts +14 -0
  31. package/dist/serverGroup/configure/wizard/pages/ServerGroupNetworkSettings.d.ts +10 -0
  32. package/dist/serverGroup/configure/wizard/pages/ServerGroupSecurityGroups.d.ts +6 -0
  33. package/dist/serverGroup/configure/wizard/pages/ServerGroupTags.d.ts +9 -0
  34. package/dist/serverGroup/configure/wizard/pages/common.d.ts +14 -0
  35. package/dist/serverGroup/configure/wizard/pages/index.d.ts +10 -0
  36. package/dist/serverGroup/details/azureServerGroupDetails.d.ts +13 -0
  37. package/dist/serverGroup/details/rollback/RollbackServerGroupModal.d.ts +6 -4
  38. package/dist/serverGroup/serverGroup.transformer.d.ts +61 -2
  39. package/dist/validation/applicationName.validator.d.ts +6 -2
  40. package/package.json +5 -8
  41. package/src/azure.module.spec.ts +921 -0
  42. package/src/azure.module.ts +56 -68
  43. package/src/image/image.reader.js +4 -15
  44. package/src/image/image.reader.spec.js +4 -7
  45. package/src/instance/azureInstanceType.service.js +8 -16
  46. package/src/instance/azureInstanceType.service.spec.js +5 -13
  47. package/src/instance/details/AzureInstanceDetails.spec.tsx +364 -0
  48. package/src/instance/details/AzureInstanceDetails.tsx +533 -0
  49. package/src/loadBalancer/configure/AzureLoadBalancerChoiceModal.spec.tsx +125 -0
  50. package/src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx +46 -26
  51. package/src/loadBalancer/configure/AzureLoadBalancerModal.spec.tsx +658 -0
  52. package/src/loadBalancer/configure/AzureLoadBalancerModal.tsx +960 -0
  53. package/src/loadBalancer/details/azureLoadBalancerDetails.spec.tsx +470 -0
  54. package/src/loadBalancer/details/azureLoadBalancerDetails.tsx +412 -0
  55. package/src/loadBalancer/loadBalancer.transformer.js +83 -93
  56. package/src/pipeline/stages/AzureAccountRegionClusterSelector.tsx +238 -0
  57. package/src/pipeline/stages/bake/azureBakeStage.tsx +723 -0
  58. package/src/pipeline/stages/destroyAsg/azureDestroyAsgStage.tsx +128 -0
  59. package/src/pipeline/stages/disableAsg/azureDisableAsgStage.tsx +92 -0
  60. package/src/pipeline/stages/enableAsg/azureEnableAsgStage.tsx +87 -0
  61. package/src/routerConsumers.spec.tsx +69 -0
  62. package/src/securityGroup/configure/AzureSecurityGroupModal.spec.tsx +558 -0
  63. package/src/securityGroup/configure/AzureSecurityGroupModal.tsx +782 -0
  64. package/src/securityGroup/details/AzureSecurityGroupDetails.spec.tsx +291 -0
  65. package/src/securityGroup/details/AzureSecurityGroupDetails.tsx +354 -0
  66. package/src/securityGroup/securityGroup.reader.js +3 -13
  67. package/src/securityGroup/securityGroup.transformer.js +3 -13
  68. package/src/securityGroup/securityGroup.write.service.spec.ts +105 -0
  69. package/src/securityGroup/securityGroup.write.service.ts +73 -0
  70. package/src/serverGroup/configure/serverGroupCommandBuilder.service.js +167 -166
  71. package/src/serverGroup/configure/serverGroupCommandBuilder.service.spec.js +63 -0
  72. package/src/serverGroup/configure/serverGroupConfiguration.service.js +325 -309
  73. package/src/serverGroup/configure/serverGroupConfiguration.service.spec.js +57 -53
  74. package/src/serverGroup/configure/wizard/AzureCloneServerGroupModal.spec.tsx +758 -0
  75. package/src/serverGroup/configure/wizard/AzureCloneServerGroupModal.tsx +349 -0
  76. package/src/serverGroup/configure/wizard/pages/ServerGroupAdvancedSettings.tsx +208 -0
  77. package/src/serverGroup/configure/wizard/pages/ServerGroupBasicSettings.tsx +122 -0
  78. package/src/serverGroup/configure/wizard/pages/ServerGroupCapacityAndZones.tsx +80 -0
  79. package/src/serverGroup/configure/wizard/pages/ServerGroupHealthSettings.tsx +97 -0
  80. package/src/serverGroup/configure/wizard/pages/ServerGroupImageSettings.tsx +151 -0
  81. package/src/serverGroup/configure/wizard/pages/ServerGroupInstanceType.tsx +41 -0
  82. package/src/serverGroup/configure/wizard/pages/ServerGroupLoadBalancers.tsx +214 -0
  83. package/src/serverGroup/configure/wizard/pages/ServerGroupNetworkSettings.tsx +119 -0
  84. package/src/serverGroup/configure/wizard/pages/ServerGroupSecurityGroups.tsx +54 -0
  85. package/src/serverGroup/configure/wizard/pages/ServerGroupTags.tsx +40 -0
  86. package/src/serverGroup/configure/wizard/pages/common.tsx +72 -0
  87. package/src/serverGroup/configure/wizard/pages/index.ts +10 -0
  88. package/src/serverGroup/details/azureServerGroupDetails.spec.tsx +263 -0
  89. package/src/serverGroup/details/azureServerGroupDetails.tsx +318 -0
  90. package/src/serverGroup/details/rollback/RollbackServerGroupModal.tsx +24 -30
  91. package/src/serverGroup/serverGroup.transformer.js +11 -19
  92. package/src/serverGroup/serverGroup.transformer.spec.js +2 -6
  93. package/src/validation/applicationName.validator.js +14 -29
  94. package/dist/instance/details/instance.details.controller.d.ts +0 -2
  95. package/dist/loadBalancer/configure/createLoadBalancer.controller.d.ts +0 -2
  96. package/dist/loadBalancer/details/loadBalancerDetail.controller.d.ts +0 -2
  97. package/dist/pipeline/stages/bake/bakeExecutionDetails.controller.d.ts +0 -2
  98. package/dist/securityGroup/clone/cloneSecurityGroup.controller.d.ts +0 -2
  99. package/dist/securityGroup/configure/CreateSecurityGroupCtrl.d.ts +0 -2
  100. package/dist/securityGroup/configure/EditSecurityGroupCtrl.d.ts +0 -2
  101. package/dist/securityGroup/details/securityGroupDetail.controller.d.ts +0 -2
  102. package/dist/serverGroup/configure/serverGroup.configure.azure.module.d.ts +0 -2
  103. package/dist/serverGroup/configure/wizard/CloneServerGroup.azure.controller.d.ts +0 -2
  104. package/dist/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.d.ts +0 -2
  105. package/dist/serverGroup/configure/wizard/ServerGroupInstanceType.controller.d.ts +0 -2
  106. package/dist/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.d.ts +0 -2
  107. package/dist/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.d.ts +0 -2
  108. package/dist/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.d.ts +0 -2
  109. package/dist/serverGroup/configure/wizard/basicSettings/image.regional.filter.d.ts +0 -2
  110. package/dist/serverGroup/configure/wizard/capacity/capacitySelector.directive.d.ts +0 -2
  111. package/dist/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.d.ts +0 -2
  112. package/dist/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.d.ts +0 -2
  113. package/dist/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.d.ts +0 -2
  114. package/dist/serverGroup/configure/wizard/image/imageSettingsSelector.directive.d.ts +0 -2
  115. package/dist/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.d.ts +0 -2
  116. package/dist/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.d.ts +0 -2
  117. package/dist/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.d.ts +0 -2
  118. package/dist/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.d.ts +0 -2
  119. package/dist/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.d.ts +0 -2
  120. package/dist/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.d.ts +0 -2
  121. package/dist/serverGroup/configure/wizard/tags/tagsSelector.directive.d.ts +0 -2
  122. package/dist/serverGroup/configure/wizard/zones/zoneSelector.directive.d.ts +0 -2
  123. package/dist/serverGroup/details/serverGroup.details.module.d.ts +0 -2
  124. package/dist/serverGroup/details/serverGroupDetails.azure.controller.d.ts +0 -2
  125. package/src/instance/details/instance.details.controller.js +0 -371
  126. package/src/instance/details/instance.details.controller.spec.js +0 -129
  127. package/src/instance/details/instanceDetails.html +0 -43
  128. package/src/loadBalancer/configure/advancedSettings.html +0 -95
  129. package/src/loadBalancer/configure/createLoadBalancer.controller.js +0 -275
  130. package/src/loadBalancer/configure/createLoadBalancer.controller.spec.js +0 -39
  131. package/src/loadBalancer/configure/createLoadBalancer.html +0 -25
  132. package/src/loadBalancer/configure/createLoadBalancerProperties.html +0 -128
  133. package/src/loadBalancer/configure/editLoadBalancer.html +0 -26
  134. package/src/loadBalancer/configure/healthCheck.html +0 -74
  135. package/src/loadBalancer/configure/listeners.html +0 -50
  136. package/src/loadBalancer/details/loadBalancerDetail.controller.js +0 -181
  137. package/src/loadBalancer/details/loadBalancerDetail.controller.spec.js +0 -39
  138. package/src/loadBalancer/details/loadBalancerDetail.html +0 -128
  139. package/src/pipeline/stages/bake/azureBakeStage.js +0 -276
  140. package/src/pipeline/stages/bake/bakeExecutionDetails.controller.js +0 -40
  141. package/src/pipeline/stages/bake/bakeExecutionDetails.html +0 -50
  142. package/src/pipeline/stages/bake/bakeStage.html +0 -187
  143. package/src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js +0 -73
  144. package/src/pipeline/stages/destroyAsg/destroyAsgStage.html +0 -9
  145. package/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html +0 -1
  146. package/src/pipeline/stages/disableAsg/azureDisableAsgStage.js +0 -65
  147. package/src/pipeline/stages/disableAsg/disableAsgStage.html +0 -11
  148. package/src/pipeline/stages/disableAsg/disableAsgStepLabel.html +0 -1
  149. package/src/pipeline/stages/enableAsg/azureEnableAsgStage.js +0 -70
  150. package/src/pipeline/stages/enableAsg/enableAsgStage.html +0 -11
  151. package/src/pipeline/stages/enableAsg/enableAsgStepLabel.html +0 -1
  152. package/src/securityGroup/clone/cloneSecurityGroup.controller.js +0 -162
  153. package/src/securityGroup/clone/cloneSecurityGroup.html +0 -8
  154. package/src/securityGroup/configure/CreateSecurityGroup.controller.spec.js +0 -78
  155. package/src/securityGroup/configure/CreateSecurityGroupCtrl.js +0 -265
  156. package/src/securityGroup/configure/EditSecurityGroupCtrl.js +0 -222
  157. package/src/securityGroup/configure/configSecurityGroup.mixin.controller.js +0 -262
  158. package/src/securityGroup/configure/createSecurityGroup.html +0 -20
  159. package/src/securityGroup/configure/createSecurityGroupIngress.html +0 -75
  160. package/src/securityGroup/configure/createSecurityGroupProperties.html +0 -88
  161. package/src/securityGroup/configure/editSecurityGroup.html +0 -19
  162. package/src/securityGroup/details/securityGroupDetail.controller.js +0 -142
  163. package/src/securityGroup/details/securityGroupDetail.html +0 -78
  164. package/src/securityGroup/securityGroup.write.service.js +0 -57
  165. package/src/serverGroup/configure/serverGroup.configure.azure.module.js +0 -47
  166. package/src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js +0 -247
  167. package/src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js +0 -35
  168. package/src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js +0 -15
  169. package/src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js +0 -25
  170. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html +0 -5
  171. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html +0 -138
  172. package/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js +0 -43
  173. package/src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js +0 -71
  174. package/src/serverGroup/configure/wizard/basicSettings/basicSettings.html +0 -131
  175. package/src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js +0 -15
  176. package/src/serverGroup/configure/wizard/basicSettings/image.regional.filter.spec.js +0 -42
  177. package/src/serverGroup/configure/wizard/capacity/capacity.html +0 -5
  178. package/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.html +0 -20
  179. package/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js +0 -21
  180. package/src/serverGroup/configure/wizard/capacity/zones.html +0 -5
  181. package/src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js +0 -38
  182. package/src/serverGroup/configure/wizard/healthSettings/healthSettings.html +0 -5
  183. package/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.html +0 -32
  184. package/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js +0 -22
  185. package/src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js +0 -34
  186. package/src/serverGroup/configure/wizard/image/imageSettings.html +0 -5
  187. package/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.html +0 -33
  188. package/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js +0 -22
  189. package/src/serverGroup/configure/wizard/instanceArchetype.html +0 -33
  190. package/src/serverGroup/configure/wizard/instanceType/instanceType.html +0 -10
  191. package/src/serverGroup/configure/wizard/instanceType.html +0 -33
  192. package/src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js +0 -137
  193. package/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html +0 -3
  194. package/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.html +0 -41
  195. package/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js +0 -22
  196. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js +0 -44
  197. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.html +0 -54
  198. package/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js +0 -19
  199. package/src/serverGroup/configure/wizard/networkSettings/networkSettings.html +0 -3
  200. package/src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js +0 -28
  201. package/src/serverGroup/configure/wizard/securityGroup/securityGroups.html +0 -3
  202. package/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.html +0 -40
  203. package/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js +0 -38
  204. package/src/serverGroup/configure/wizard/serverGroupWizard.html +0 -61
  205. package/src/serverGroup/configure/wizard/tags/tags.html +0 -5
  206. package/src/serverGroup/configure/wizard/tags/tagsSelector.directive.html +0 -16
  207. package/src/serverGroup/configure/wizard/tags/tagsSelector.directive.js +0 -30
  208. package/src/serverGroup/configure/wizard/templateSelection.html +0 -9
  209. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.html +0 -21
  210. package/src/serverGroup/configure/wizard/zones/zoneSelector.directive.js +0 -28
  211. package/src/serverGroup/details/serverGroup.details.module.js +0 -11
  212. package/src/serverGroup/details/serverGroupDetails.azure.controller.js +0 -260
  213. package/src/serverGroup/details/serverGroupDetails.html +0 -98
  214. package/src/subnet/subnetSelectField.directive.html +0 -28
  215. package/src/subnet/subnetSelectField.directive.js +0 -35
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import*as e from"angular";import{module as n}from"angular";import{HelpContentsRegistry as t,REST as a,CloudProviderRegistry as r,ConfirmationModalService as l,InstanceWriter as i,RecentHistoryService as s,InstanceReader as o,ModalInjector as c,ReactModal as d,ModalClose as u,noop as p,SETTINGS as g,TaskMonitor as m,AccountService as f,NetworkReader as v,LoadBalancerWriter as h,NameUtils as B,SECURITY_GROUP_READER as A,LOAD_BALANCER_READ_SERVICE as y,FirewallLabels as b,Registry as S,BakeExecutionLabel as D,AuthenticationService as w,PipelineTemplates as C,BakeryReader as z,StageConstants as k,TaskExecutor as G,InfrastructureCaches as I,CACHE_INITIALIZER_SERVICE as F,IMAGE_READER as T,ModalWizard as E,SERVER_GROUP_WRITER as x,UserVerification as N,ReactInjector as P,TaskMonitorWrapper as R,TaskReason as L,ServerGroupWarningMessageService as M,ServerGroupReader as U,ApplicationNameValidator as V,DeploymentStrategyRegistry as H}from"@spinnaker/core";import _ from"lodash";import O from"@uirouter/angularjs";import Q from"angular-ui-bootstrap";import q from"react";import{Modal as X,Button as W}from"react-bootstrap";import j from"react-select";const Y=[{type:"Azure Load Balancer",description:""},{type:"Azure Application Gateway",description:""}],Z=class e{static checkTags(n){if(!n)return{isValid:!1,error:5,errorMessage:"instanceTags is not defined"};const t=Object.keys(n).length;if(!(t>=0&&t<=e.TAG_LIMITATION))return{isValid:!1,error:0,errorMessage:`Number of tags exceeds the limit: ${e.TAG_LIMITATION}`};for(const[t,a]of Object.entries(n)){if(t.length>e.TAG_KEY_LENGTH_LIMITATION)return{isValid:!1,error:1,errorMessage:`Length of Tag key: ${t} exceeds the limit: ${e.TAG_KEY_LENGTH_LIMITATION}`};if(a.length>e.TAG_VALUE_LENGTH_LIMITATION)return{isValid:!1,error:2,errorMessage:`Length of Tag value: ${a} exceeds the limit: ${e.TAG_VALUE_LENGTH_LIMITATION}`};if(e.TAG_INVALID_CHAR_REG_EXR.test(t))return{isValid:!1,error:3,errorMessage:`Invalid characters in Tag key: ${t}`};if(e.TAG_INVALID_CHAR_REG_EXR.test(a))return{isValid:!1,error:4,errorMessage:`Invalid characters in Tag value: ${a}`}}return{isValid:!0,error:null}}static getLoadBalancerType(e){return e=e.toLowerCase().split("_").join(" "),Y.find(n=>n.type.toLowerCase()===e)||null}};Z.TAG_LIMITATION=8,Z.TAG_KEY_LENGTH_LIMITATION=512,Z.TAG_VALUE_LENGTH_LIMITATION=256,Z.TAG_INVALID_CHAR_REG_EXR=/[<>%&\\?/]/;let $=Z;const J={"azure.securityGroup.ingress.description":"Friendly description of the rule you want to enable (limit 80 chars.)","azure.securityGroup.ingress.priority":"Rules are processed in priority order; the lower the number, the higher the priority. We recommend leaving gaps between rules - 100, 200, 300, etc. - so that it's easier to add new rules without having to edit existing rules. There are several default rules that can be overridden with priority (65000, 65001 and 65500). For more information visit http://portal.azure.com.","azure.securityGroup.ingress.source":"The source filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the incoming traffic from a specific source IP address range (CIDR format) that will be allowed or denied by this rule.","azure.securityGroup.ingress.sourcePortRange":"The source port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which ports incoming traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.","azure.securityGroup.ingress.destination":"The destination filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the outgoing traffic from a specific destination IP address range (CIDR format) that will be allowed or denied by this rule.","azure.securityGroup.ingress.destinationPortRange":"The destination port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which destination ports traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.","azure.securityGroup.ingress.direction":"Specifies whether the rule is for inbound or outbound traffic.","azure.securityGroup.ingress.actions":"To adjust the priority of a rule, move it up or down in the list of rules. Rules at the top of the list have the highest priority.","azure.securityGroup.ingress.destPortRanges":"Provide a single port, such as 80; a port range, such as 1024-65535; or a comma-separated list of single ports and/or port ranges, such as 80,1024-65535. Provide an asterisk (*) to allow traffic on any port.","azure.securityGroup.ingress.sourceIPCIDRRanges":"Provide an address range using CIDR notation, such as 192.168.99.0/24; an IP address, such as 192.168.99.0; or a comma-separated list of address ranges or IP addresses, such as 10.0.0.0/24,44.66.0.0/24","azure.serverGroup.imageName":"(Required) <b>Image</b> is the deployable Azure Machine Image.","azure.serverGroup.stack":"(Required) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","azure.serverGroup.detail":"(Required) <b>Detail</b> is a naming component to help distinguish specifics of the server group.","azure.serverGroup.scriptLocation":"The location of custom scripts separated by comma or semicolon to be downloaded on to each instance. A single script should be like: fileUri. Multiple scripts should be like fileUri1,fileUri2 or fileUri1;fileUri2","azure.serverGroup.commandToExecute":"Command(s) to execute custom scripts provided during provisioning of an instance.","azure.serverGroup.customData":"Script or metadata to be injected into each instances.","azure.serverGroup.customTags":`Custom tags on Virtual Machine Scale Set. Allow ${$.TAG_LIMITATION} tags at most.`,"azure.serverGroup.enableInboundNAT":"An Azure load balancer of the basic sku will be created with adding inbound NAT port-forwarding rules to facilitate loggin on VM instances. There is no charge for creating an Azure load balancer of the basic sku. This option is disabled if Availability Zones are set which require Standard Azure Load Balancer and an extra Network Security Group with correct inbound and outbound rules configured.","azure.serverGroup.lun":"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.","azure.serverGroup.diskSizeGB":"Specifies the size of an empty data disk in gigabytes. This value cannot be larger than 1023 GB","azure.serverGroup.managedDisk.storageAccountType":"You can choose between Azure managed disks types to support your workload or scenario.","azure.serverGroup.caching":"Changing the default host caching policy can adversely impact the performance of your application. You should run performance tests to measure its impact. To improve the total IOPS/throughput, we recommend striping across multiple disks and using premium (SSD) disks.","azure.serverGroup.userAssignedIdentities":"Allows your server to access Azure resources. Learn more here: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview","azure.loadBalancer.dnsName":'If there is no custom DNS label specified, a default DNS name will be created. The default value will be "GeneratedText.cloudapp.net" for Azure Application Gateway or "GeneratedText.[region].cloudapp.azure.com" for Azure Load Balancer.',"azure.loadBalancer.probes.probeInterval":"Probe interval in seconds. This value is the time interval between two consecutive probes.","azure.loadBalancer.probes.timeout":"Probe time-out in seconds. If a valid response is not received within this time-out period, the probe is marked as failed. Note that the time-out value should not be more than the Interval value.","azure.loadBalancer.probes.unhealthyThreshold":"Probe retry count. The back-end server is marked down after the consecutive probe failure count reaches the unhealthy threshold.","azure.loadBalancer.loadBalancingRules.idleTimeout":"Keep a TCP or HTTP connection open without relying on clients to send keep-alive messages.","azure.loadBalancer.loadBalancingRules.sessionPersistence":'Session persistence specifies that traffic from a client should be handled by the same virtual machine in the backend pool for the duration of a session. "None" specifies that successive requests from the same client may be handled by any virtual machine. "Client IP" specifies that successive requests from the same client IP address will be handled by the same virtual machine. "Client IP and protocol" specifies that successive requests from the same client IP address and protocol combination will be handled by the same virtual machine.'};Object.keys(J).forEach(e=>t.register(e,J[e]));const K="spinnaker.azure.image.reader";n(K,[]).factory("azureImageReader",function(){return{findImages:function(e){return a("/images/find").query(e).get().then(function(e){return e},function(){return[]})},getImage:function(e,n,t){return a("/images").path(t,n,e).query({provider:"azure"}).get().then(function(e){return e&&e.length?e[0]:null},function(){return null})}}});const ee="spinnaker.azure.instanceType.service";n(ee,[]).factory("azureInstanceTypeService",["$q",function(e){const n=[{type:"general",label:"General Purpose",description:"Balanced CPU-to-memory ratio. Ideal for testing and development, small to medium databases, and low to medium traffic web servers.",families:[{type:"B-series",description:"The B-series burstable VMs are ideal for workloads that do not need the full performance of the CPU continuously, like web servers, small databases and development and test environments.",instanceTypes:[{name:"Standard_B1ms",label:"Standard_B1ms",cpu:1,memory:2,storage:{type:"SSD",count:2,size:4}},{name:"Standard_B1s",label:"Standard_B1s",cpu:1,memory:1,storage:{type:"SSD",count:2,size:2}},{name:"Standard_B2ms",label:"Standard_B2ms",cpu:2,memory:8,storage:{type:"SSD",count:4,size:16}},{name:"Standard_B2s",label:"Standard_B2s",cpu:2,memory:4,storage:{type:"SSD",count:4,size:8}},{name:"Standard_B4ms",label:"Standard_B4ms",cpu:4,memory:16,storage:{type:"SSD",count:8,size:32}},{name:"Standard_B8ms",label:"Standard_B8ms",cpu:8,memory:32,storage:{type:"SSD",count:16,size:64}},{name:"Standard_B1ls",label:"Standard_B1ls",cpu:1,memory:.5,storage:{type:"SSD",count:2,size:1}}]},{type:"Dsv3-series",description:"The Dsv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.",instanceTypes:[{name:"Standard_D2s_v3",label:"Standard_D2s_v3",cpu:2,memory:8,storage:{type:"SSD",count:4,size:16}},{name:"Standard_D4s_v3",label:"Standard_D4s_v3",cpu:4,memory:16,storage:{type:"SSD",count:8,size:32}},{name:"Standard_D8s_v3",label:"Standard_D8s_v3",cpu:8,memory:32,storage:{type:"SSD",count:16,size:64}},{name:"Standard_D16s_v3",label:"Standard_D16s_v3",cpu:16,memory:64,storage:{type:"SSD",count:32,size:128}},{name:"Standard_D32s_v3",label:"Standard_D32s_v3",cpu:32,memory:128,storage:{type:"SSD",count:32,size:256}},{name:"Standard_D64s_v3",label:"Standard_D64s_v3",cpu:64,memory:256,storage:{type:"SSD",count:32,size:512}}]},{type:"Dv3-series",description:"The Dv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.",instanceTypes:[{name:"Standard_D2_v3",label:"Standard_D2_v3",cpu:2,memory:8,storage:{type:"SSD",count:4,size:50}},{name:"Standard_D4_v3",label:"Standard_D4_v3",cpu:4,memory:16,storage:{type:"SSD",count:8,size:100}},{name:"Standard_D8_v3",label:"Standard_D8_v3",cpu:8,memory:32,storage:{type:"SSD",count:16,size:200}},{name:"Standard_D16_v3",label:"Standard_D16_v3",cpu:16,memory:64,storage:{type:"SSD",count:32,size:400}},{name:"Standard_D32_v3",label:"Standard_D32_v3",cpu:32,memory:128,storage:{type:"SSD",count:32,size:800}},{name:"Standard_D64_v3",label:"Standard_D64_v3",cpu:64,memory:256,storage:{type:"SSD",count:32,size:1600}}]},{type:"DSv2-series",description:"",instanceTypes:[{name:"Standard_DS1_v2",label:"Standard_DS1_v2",cpu:1,memory:3.5,storage:{type:"SSD",count:4,size:7}},{name:"Standard_DS2_v2",label:"Standard_DS2_v2",cpu:2,memory:7,storage:{type:"SSD",count:8,size:14}},{name:"Standard_DS3_v2",label:"Standard_DS3_v2",cpu:4,memory:14,storage:{type:"SSD",count:16,size:28}},{name:"Standard_DS4_v2",label:"Standard_DS4_v2",cpu:8,memory:28,storage:{type:"SSD",count:32,size:56}},{name:"Standard_DS5_v2",label:"Standard_DS5_v2",cpu:16,memory:56,storage:{type:"SSD",count:64,size:112}},{name:"Standard_DS11_v2",label:"Standard_DS11_v2",cpu:2,memory:14,storage:{type:"SSD",count:8,size:28}},{name:"Standard_DS12_v2",label:"Standard_DS12_v2",cpu:4,memory:28,storage:{type:"SSD",count:16,size:56}},{name:"Standard_DS13_v2",label:"Standard_DS13_v2",cpu:8,memory:56,storage:{type:"SSD",count:32,size:112}},{name:"Standard_DS14_v2",label:"Standard_DS14_v2",cpu:16,memory:112,storage:{type:"SSD",count:64,size:224}},{name:"Standard_DS15_v2",label:"Standard_DS15_v2",cpu:20,memory:140,storage:{type:"SSD",count:64,size:280}}]},{type:"Dv2-series",description:"",instanceTypes:[{name:"Standard_D1_v2",label:"Standard_D1_v2",cpu:1,memory:3.5,storage:{type:"SSD",count:4,size:50}},{name:"Standard_D2_v2",label:"Standard_D2_v2",cpu:2,memory:7,storage:{type:"SSD",count:8,size:100}},{name:"Standard_D3_v2",label:"Standard_D3_v2",cpu:4,memory:14,storage:{type:"SSD",count:16,size:200}},{name:"Standard_D4_v2",label:"Standard_D4_v2",cpu:8,memory:28,storage:{type:"SSD",count:32,size:400}},{name:"Standard_D5_v2",label:"Standard_D5_v2",cpu:16,memory:56,storage:{type:"SSD",count:64,size:800}},{name:"Standard_D11_v2",label:"Standard_D11_v2",cpu:2,memory:14,storage:{type:"SSD",count:8,size:100}},{name:"Standard_D12_v2",label:"Standard_D12_v2",cpu:4,memory:28,storage:{type:"SSD",count:16,size:200}},{name:"Standard_D13_v2",label:"Standard_D13_v2",cpu:8,memory:56,storage:{type:"SSD",count:32,size:400}},{name:"Standard_D14_v2",label:"Standard_D14_v2",cpu:16,memory:112,storage:{type:"SSD",count:64,size:800}},{name:"Standard_D15_v2",label:"Standard_D15_v2",cpu:20,memory:140,storage:{type:"SSD",count:64,size:280}}]},{type:"Av2-series",description:"",instanceTypes:[{name:"Standard_A1_v2",label:"Standard_A1_v2",cpu:1,memory:2,storage:{type:"SSD",count:2,size:10}},{name:"Standard_A2m_v2",label:"Standard_A2m_v2",cpu:2,memory:16,storage:{type:"SSD",count:4,size:20}},{name:"Standard_A2_v2",label:"Standard_A2_v2",cpu:2,memory:4,storage:{type:"SSD",count:4,size:20}},{name:"Standard_A4m_v2",label:"Standard_A4m_v2",cpu:4,memory:32,storage:{type:"SSD",count:8,size:40}},{name:"Standard_A4_v2",label:"Standard_A4_v2",cpu:4,memory:8,storage:{type:"SSD",count:8,size:40}},{name:"Standard_A8m_v2",label:"Standard_A8m_v2",cpu:8,memory:64,storage:{type:"SSD",count:16,size:80}},{name:"Standard_A8_v2",label:"Standard_A8_v2",cpu:8,memory:16,storage:{type:"SSD",count:16,size:80}}]},{type:"DC-series",description:"",instanceTypes:[{name:"Standard_DC2s",label:"Standard_DC2s",cpu:2,memory:8,storage:{type:"SSD",count:2,size:100}},{name:"Standard_DC4s",label:"Standard_DC4s",cpu:4,memory:16,storage:{type:"SSD",count:4,size:200}}]}],icon:"hdd"},{type:"compute",label:"Compute Optimized",description:"High CPU-to-memory ratio. Good for medium traffic web servers, network appliances, batch processes, and application servers.",families:[{type:"Fsv2-series",description:"",instanceTypes:[{name:"Standard_F2s_v2",label:"Standard_F2s_v2",cpu:2,memory:4,storage:{type:"SSD",count:4,size:16}},{name:"Standard_F4s_v2",label:"Standard_F4s_v2",cpu:4,memory:8,storage:{type:"SSD",count:8,size:32}},{name:"Standard_F8s_v2",label:"Standard_F8s_v2",cpu:8,memory:16,storage:{type:"SSD",count:16,size:64}},{name:"Standard_F16s_v2",label:"Standard_F16s_v2",cpu:16,memory:32,storage:{type:"SSD",count:32,size:128}},{name:"Standard_F32s_v2",label:"Standard_F32s_v2",cpu:32,memory:64,storage:{type:"SSD",count:32,size:256}},{name:"Standard_F64s_v2",label:"Standard_F64s_v2",cpu:64,memory:128,storage:{type:"SSD",count:32,size:512}},{name:"Standard_F72s_v2",label:"Standard_F72s_v2",cpu:72,memory:144,storage:{type:"SSD",count:32,size:576}}]},{type:"Fs-series",description:"",instanceTypes:[{name:"Standard_F1s",label:"Standard_F1s",cpu:1,memory:2,storage:{type:"SSD",count:4,size:4}},{name:"Standard_F2s",label:"Standard_F2s",cpu:2,memory:4,storage:{type:"SSD",count:8,size:8}},{name:"Standard_F4s",label:"Standard_F4s",cpu:4,memory:8,storage:{type:"SSD",count:16,size:16}},{name:"Standard_F8s",label:"Standard_F8s",cpu:8,memory:16,storage:{type:"SSD",count:32,size:32}},{name:"Standard_F16s",label:"Standard_F16s",cpu:16,memory:32,storage:{type:"SSD",count:64,size:64}}]},{type:"F-series",description:"",instanceTypes:[{name:"Standard_F1",label:"Standard_F1",cpu:1,memory:2,storage:{type:"SSD",count:4,size:16}},{name:"Standard_F2",label:"Standard_F2",cpu:2,memory:4,storage:{type:"SSD",count:8,size:32}},{name:"Standard_F4",label:"Standard_F4",cpu:4,memory:8,storage:{type:"SSD",count:16,size:64}},{name:"Standard_F8",label:"Standard_F8",cpu:8,memory:16,storage:{type:"SSD",count:32,size:128}},{name:"Standard_F16",label:"Standard_F16",cpu:16,memory:32,storage:{type:"SSD",count:64,size:256}}]}],icon:"hdd"},{type:"custom",label:"Custom Type",description:"Select the instance type below.",families:[],icon:"asterisk"}];function t(e){return e&&e.storage?e.storage.count*e.storage.size:0}function a(){return n.map(function(e){for(const n of e.families)for(const e of n.instanceTypes)null==e.costFactor&&(e.costFactor=0);e.stats=function(e){const n={cpu:{min:Number.MAX_VALUE,max:-Number.MAX_VALUE},memory:{min:Number.MAX_VALUE,max:-Number.MAX_VALUE},storage:{min:Number.MAX_VALUE,max:-Number.MAX_VALUE},families:[]};return e.families&&e.families.length&&e.families.forEach(function(e){n.families.push(e.type);const a=_.minBy(e.instanceTypes,"cpu").cpu||Number.MAX_VALUE,r=_.maxBy(e.instanceTypes,"cpu").cpu||-Number.MAX_VALUE,l=_.minBy(e.instanceTypes,"memory").memory||Number.MAX_VALUE,i=_.maxBy(e.instanceTypes,"memory").memory||-Number.MAX_VALUE,s=t(_.minBy(e.instanceTypes,t))||Number.MAX_VALUE,o=t(_.maxBy(e.instanceTypes,t))||-Number.MAX_VALUE;n.cpu.min=Math.min(n.cpu.min,a),n.cpu.max=Math.max(n.cpu.max,r),n.memory.min=Math.min(n.memory.min,l),n.memory.max=Math.max(n.memory.max,i),n.storage.min=Math.min(n.storage.min,s),n.storage.max=Math.max(n.storage.max,o)}),n}(e)}),e.when(n)}return{getCategories:a,getAvailableTypesForRegions:function(e,n){const[t]=n;return e[t]},getAllTypesByRegion:function(){return a()}}}]);const ne="spinnaker.azure.instance.detail.controller";n(ne,[O,Q]).controller("azureInstanceDetailsCtrl",["$scope","$state","$uibModal","instance","app","$q",function(e,n,t,a,c,d){function u(){const t={};let r,l,i,u,p;return c.serverGroups?(c.serverGroups.data.some(function(e){return e.instances.some(function(n){if(n.id===a.instanceId)return r=n,l=e.loadBalancers,i=e.account,u=e.region,p=e.vpcId,t.serverGroup=e.name,t.vpcId=e.vpcId,!0})}),r||(c.loadBalancers.data.some(function(e){return e.instances.some(function(n){if(n.id===a.instanceId)return r=n,l=[e.name],i=e.account,u=e.region,p=e.vpcId,!0})}),r||c.loadBalancers.data.some(function(e){return e.serverGroups.some(function(n){return!!n.isDisabled&&n.instances.some(function(n){if(n.id===a.instanceId)return r=n,l=[e.name],i=e.account,u=e.region,p=e.vpcId,!0})})}))):(r={},l=[],i=a.account,u=a.region),r&&i&&u?(t.account=i,t.region=u,s.addExtraDataToLatest("instances",t),o.getInstanceDetails(i,u,a.instanceId).then(function(n){e.state.loading=!1,function(n,t){c.isStandalone&&(n.health=t.health),n.health=n.health||[];const a=n.health.filter(function(e){return"Azure"!==e.type||"Unknown"!==e.state});t.health&&a.forEach(function(e){const n=t.health.filter(function(n){return n.type===e.type});n.length&&_.defaults(e,n[0])}),e.healthMetrics=a}(r,n),e.instance=_.defaults(n,r),e.instance.account=i,e.instance.region=u,e.instance.vpcId=p,e.instance.loadBalancers=l;const t=_.find(e.healthMetrics,function(e){return"Discovery"===e.type});if(t&&t.vipAddress){const n=t.vipAddress;e.instance.vipAddress=n.includes(",")?n.split(","):[n]}e.baseIpAddress=n.publicDnsName||n.privateIpAddress},function(){e.state.loading=!1,n.go("^")})):(r||(e.instanceIdNotFound=a.instanceId,e.state.loading=!1),d.when(null))}e.detailsTemplateUrl=r.getValue("azure","instance.detailsTemplateUrl"),e.state={loading:!0,standalone:c.isStandalone},this.canDeregisterFromLoadBalancer=function(){return e.instance.health.some(function(e){return"LoadBalancer"===e.type})},this.canRegisterWithLoadBalancer=function(){const n=e.instance;if(!n.loadBalancers||!n.loadBalancers.length)return!1;const t=n.health.some(function(e){return"LoadBalancer"===e.type&&"OutOfService"===e.state}),a=n.health.some(function(e){return"LoadBalancer"===e.type});return t||!a},this.canRegisterWithDiscovery=function(){const n=e.instance.health.filter(function(e){return"Discovery"===e.type});return!!n.length&&"OutOfService"===n[0].state},this.terminateInstance=function(){const t=e.instance,a={application:c,title:"Terminating "+t.instanceId,onTaskComplete:function(){n.includes("**.instanceDetails",{instanceId:t.instanceId})&&n.go("^")}};l.confirm({header:"Really terminate "+t.instanceId+"?",buttonText:"Terminate "+t.instanceId,account:t.account,taskMonitorConfig:a,submitMethod:function(){return i.terminateInstance(t,c)}})},this.terminateInstanceAndShrinkServerGroup=function(){const t=e.instance,a={application:c,title:"Terminating "+t.instanceId+" and shrinking server group",onTaskComplete:function(){n.includes("**.instanceDetails",{instanceId:t.instanceId})&&n.go("^")}};l.confirm({header:"Really terminate "+t.instanceId+" and shrink "+t.serverGroup+"?",buttonText:"Terminate "+t.instanceId+" and shrink "+t.serverGroup,account:t.account,taskMonitorConfig:a,submitMethod:function(){return i.terminateInstanceAndShrinkServerGroup(t,c)}})},this.rebootInstance=function(){const n=e.instance,t={application:c,title:"Rebooting "+n.instanceId};l.confirm({header:"Really reboot "+n.instanceId+"?",buttonText:"Reboot "+n.instanceId,account:n.account,taskMonitorConfig:t,submitMethod:function(){return i.rebootInstance(n,c)}})},this.registerInstanceWithLoadBalancer=function(){const n=e.instance,t=n.loadBalancers.join(" and "),a={application:c,title:"Registering "+n.instanceId+" with "+t};l.confirm({header:"Really register "+n.instanceId+" with "+t+"?",buttonText:"Register "+n.instanceId,account:n.account,taskMonitorConfig:a,submitMethod:function(){return i.registerInstanceWithLoadBalancer(n,c)}})},this.deregisterInstanceFromLoadBalancer=function(){const n=e.instance,t=n.loadBalancers.join(" and "),a={application:c,title:"Deregistering "+n.instanceId+" from "+t};l.confirm({header:"Really deregister "+n.instanceId+" from "+t+"?",buttonText:"Deregister "+n.instanceId,account:n.account,taskMonitorConfig:a,submitMethod:function(){return i.deregisterInstanceFromLoadBalancer(n,c)}})},this.enableInstanceInDiscovery=function(){const n=e.instance,t={application:c,title:"Enabling "+n.instanceId+" in discovery"};l.confirm({header:"Really enable "+n.instanceId+" in discovery?",buttonText:"Enable "+n.instanceId,account:n.account,taskMonitorConfig:t,submitMethod:function(){return i.enableInstanceInDiscovery(n,c)}})},this.disableInstanceInDiscovery=function(){const n=e.instance,t={application:c,title:"Disabling "+n.instanceId+" in discovery"};l.confirm({header:"Really disable "+n.instanceId+" in discovery?",buttonText:"Disable "+n.instanceId,account:n.account,taskMonitorConfig:t,submitMethod:function(){return i.disableInstanceInDiscovery(n,c)}})},this.hasHealthState=function(n,t){return e.instance.health.some(function(e){return e.type===n&&e.state===t})};(c.isStandalone?u():d.all([c.serverGroups.ready(),c.loadBalancers.ready()]).then(u)).then(()=>{e.$$destroyed||c.isStandalone||c.serverGroups.onRefresh(e,u)}),e.account=a.account}]);const te=class e extends q.Component{constructor(e){super(e),this.choose=()=>{this.close();const e=r.getValue("azure","loadBalancer");c.modalService.open({templateUrl:e.createLoadBalancerTemplateUrl,windowClass:"modal-z-index",controller:`${e.createLoadBalancerController} as ctrl`,size:"lg",resolve:{application:()=>this.props.app,loadBalancer:()=>null,isNew:()=>!0,forPipelineConfig:()=>!1,loadBalancerType:()=>this.state.selectedChoice}}).result.catch(()=>{})},this.close=e=>{this.props.dismissModal(e)},this.state={choices:Y,selectedChoice:Y[0]}}static show(n){return d.show(e,{...n,className:"create-pipeline-modal-overflow-visible"})}choiceSelected(e){this.setState({selectedChoice:e})}render(){const{choices:e,selectedChoice:n}=this.state;return q.createElement(q.Fragment,null,q.createElement(u,{dismiss:this.close}),q.createElement(X.Header,null,q.createElement(X.Title,null,"Select Type of Load Balancer")),q.createElement(X.Body,null,q.createElement("div",{className:"modal-body"},q.createElement("div",{className:"card-choices"},e.map(e=>q.createElement("div",{key:e.type,className:"card "+(n===e?"active":""),onClick:()=>this.choiceSelected(e)},q.createElement("h3",{className:"load-balancer-label"},e.type),q.createElement("div",null,e.description)))),q.createElement("div",{className:"load-balancer-description"}))),q.createElement(X.Footer,null,q.createElement(W,{onClick:this.choose},"Configure Load Balancer ",q.createElement("span",{className:"glyphicon glyphicon-chevron-right"}))))}};te.defaultProps={closeModal:p,dismissModal:p};let ae=te;const re=g.providers.azure||{defaults:{}};re&&(re.resetToOriginal=g.resetProvider("azure"));const le="spinnaker.azure.loadBalancer.transformer";n(le,[]).factory("azureLoadBalancerTransformer",["$q",function(e){return{normalizeLoadBalancer:function(n){n.serverGroups.forEach(function(e){e.account=n.account,e.region=n.region,e.detachedInstances?(e.detachedInstances=e.detachedInstances.map(function(e){return{id:e}}),e.instances=e.instances.concat(e.detachedInstances)):e.detachedInstances=[]});const t=_.filter(n.serverGroups,{isDisabled:!1});return n.provider=n.type,n.instances=_.chain(t).map("instances").flatten().value(),n.detachedInstances=_.chain(t).map("detachedInstances").flatten().value(),e.resolve(n)},convertLoadBalancerForEditing:function(e){const n={region:e.region,credentials:e.account,name:e.name,stack:e.stack,detail:e.detail,vnet:e.vnet,subnet:e.subnet,probes:[],loadBalancingRules:[]};if(e.elb){const t=e.elb;n.securityGroups=t.securityGroups,n.vnet=t.vnet,t.loadBalancingRules&&(n.loadBalancingRules=t.loadBalancingRules),n.probes=t.probes,t.dnsName&&"dns-not-found"!==t.dnsName&&(n.dnsName=t.dnsName.split(".")[0])}return n},constructNewLoadBalancerTemplate:function(e){return{stack:"",detail:"frontend",credentials:e.defaultCredentials.azure||re.defaults.account,region:e.defaultRegions.azure||re.defaults.region,cloudProvider:"azure",vnet:null,subnet:null,probes:[{probeName:"",probeProtocol:"HTTP",probePort:"80",probePath:"/",probeInterval:30,unhealthyThreshold:8,timeout:120}],securityGroups:[],loadBalancingRules:[{ruleName:"",protocol:"HTTP",externalPort:80,backendPort:80,probeName:"",persistence:"None",idleTimeout:4}],sku:"Standard_v2"}}}}]);const ie="spinnaker.azure.loadBalancer.create.controller";n(ie,[O,le]).controller("azureCreateLoadBalancerCtrl",["$scope","$uibModalInstance","$state","azureLoadBalancerTransformer","application","loadBalancer","isNew","loadBalancerType",function(e,n,t,a,r,l,i,s){const o=this;function c(){if(e.$$destroyed)return;n.close();const a={name:e.loadBalancer.name,accountId:e.loadBalancer.credentials,region:e.loadBalancer.region,provider:"azure"};t.includes("**.loadBalancerDetails")?t.go("^.loadBalancerDetails",a):t.go(".loadBalancerDetails",a)}function d(){const n=e.loadBalancer.credentials,t=e.loadBalancer.region,a={};r.getDataSource("loadBalancers").refresh(!0).then(()=>{r.getDataSource("loadBalancers").data.forEach(e=>{e.account===n&&(a[e.region]=a[e.region]||[],a[e.region].push(e.name))}),e.existingLoadBalancerNames=a[t]||[]})}e.regions=[],e.pages={location:"azure/src/loadBalancer/configure/createLoadBalancerProperties.html",listeners:"azure/src/loadBalancer/configure/listeners.html",healthCheck:"azure/src/loadBalancer/configure/healthCheck.html",advancedSettings:"azure/src/loadBalancer/configure/advancedSettings.html"},e.isNew=i,e.loadBalancerType=s.type,e.isALB="Azure Load Balancer"===s.type,e.state={accountsLoaded:!1,submitting:!1},e.validSkus=["Standard_v2","Standard_Small"],e.taskMonitor=new m({application:r,title:(i?"Creating ":"Updating ")+"your load balancer",modalInstance:n,onTaskComplete:function(){r.loadBalancers.refresh(),r.loadBalancers.onNextRefresh(e,c)}}),function(){if(l){if(e.loadBalancer=a.convertLoadBalancerForEditing(l),i){const n=B.parseLoadBalancerName(e.loadBalancer.name);e.loadBalancer.stack=n.stack,e.loadBalancer.detail=n.freeFormDetails,delete e.loadBalancer.name}}else e.loadBalancer=a.constructNewLoadBalancerTemplate(r);i&&(d(),f.listAccounts("azure").then(function(n){e.accounts=n,e.state.accountsLoaded=!0,o.accountUpdated()}))}(),this.requiresHealthCheckPath=function(){return e.loadBalancer.probes[0].probeProtocol&&0===e.loadBalancer.probes[0].probeProtocol.indexOf("HTTP")},this.updateName=function(){e.loadBalancer.name=this.getName()},this.getName=function(){const n=e.loadBalancer,t=[r.name,n.stack||"",n.detail||""].join("-");return _.trimEnd(t,"-")},this.accountUpdated=function(){f.getRegionsForAccount(e.loadBalancer.credentials).then(function(n){e.regions=n,o.regionUpdated()})},this.regionUpdated=function(){d(),o.updateName(),o.vnetUpdated()},this.vnetUpdated=function(){const n=e.loadBalancer.credentials,t=e.loadBalancer.region;e.loadBalancer.selectedVnet=null,e.loadBalancer.vnet=null,e.loadBalancer.vnetResourceGroup=null,o.selectedVnets=[],v.listNetworks().then(function(e){e.azure&&e.azure.forEach(e=>{e.account===n&&e.region===t&&o.selectedVnets.push(e)})}),o.subnetUpdated()},this.subnetUpdated=function(){e.loadBalancer.selectedSubnet=null,e.loadBalancer.subnet=null,o.selectedSubnets=[]},this.selectedVnetChanged=function(n){e.loadBalancer.vnet=n.name,e.loadBalancer.vnetResourceGroup=n.resourceGroup,e.loadBalancer.selectedSubnet=null,e.loadBalancer.subnet=null,o.selectedSubnets=[],n.subnets&&n.subnets.map(function(e){let n=!0;e.devices&&e.devices.map(function(e){e&&"applicationGateways"!==e.type&&(n=!1)}),n&&o.selectedSubnets.push(e)})},this.removeListener=function(n){e.loadBalancer.loadBalancingRules.splice(n,1)},this.addListener=function(){e.loadBalancer.loadBalancingRules.push({protocol:"HTTP"})},this.submit=function(){const n=i?"Create":"Update";e.taskMonitor.submit(function(){const t={cloudProvider:"azure",appName:r.name,clusterName:e.loadBalancer.clusterName,resourceGroupName:e.loadBalancer.clusterName,loadBalancerName:e.loadBalancer.name};e.loadBalancer.selectedVnet&&(e.loadBalancer.vnet=e.loadBalancer.selectedVnet.name,e.loadBalancer.vnetResourceGroup=e.loadBalancer.selectedVnet.resourceGroup),e.loadBalancer.selectedSubnet&&(e.loadBalancer.subnet=e.loadBalancer.selectedSubnet.name);const a=e.loadBalancer.clusterName||e.loadBalancer.name,l=a+"-probe",i=a+"-rule";return e.loadBalancer.type="upsertLoadBalancer",e.loadBalancer.loadBalancerType=e.loadBalancerType,e.loadBalancer.vnet||e.loadBalancer.subnetType||(e.loadBalancer.securityGroups=null),e.loadBalancer.probes[0].probeName=l,e.loadBalancer.loadBalancingRules.forEach((e,n)=>{e.ruleName=i+n,e.probeName=l}),"TCP"===e.loadBalancer.probes[0].probeProtocol&&(e.loadBalancer.probes[0].probePath=void 0),h.upsertLoadBalancer(e.loadBalancer,r,n,t)})},this.cancel=function(){n.dismiss()}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/loadBalancer/configure/createLoadBalancerProperties.html",'<div>\n <div ng-if="!state.accountsLoaded" style="height: 200px" class="horizontal center middle">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n <div class="modal-body" ng-if="state.accountsLoaded">\n <div class="form-group">\n <div\n class="col-md-12 well"\n ng-class="{\'alert-danger\': form.loadBalancerName.$error.validateUnique, \'alert-info\': !form.loadBalancerName.$error.validateUnique}"\n >\n <strong>Your {{loadBalancerType}} will be named:</strong>\n <span>{{ctrl.getName()}}</span>\n \x3c!-- Angular does not seem to run length validation on hidden inputs, hence the text + display:none --\x3e\n <input\n type="text"\n style="display: none"\n ng-maxlength="32"\n class="form-control input-sm"\n ng-model="loadBalancer.name"\n validate-unique="existingLoadBalancerNames"\n validate-ignore-case="true"\n name="loadBalancerName"\n />\n <validation-error\n ng-if="form.loadBalancerName.$error.validateUnique"\n message="There is already a load balancer in {{loadBalancer.credentials}}:{{loadBalancer.region}} with that name."\n ></validation-error>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-3 sm-label-right">Account</div>\n <div class="col-md-7">\n <account-select-field\n required\n component="loadBalancer"\n field="credentials"\n accounts="accounts"\n provider="\'azure\'"\n on-change="ctrl.accountUpdated()"\n ></account-select-field>\n </div>\n </div>\n <region-select-field\n required\n label-columns="3"\n component="loadBalancer"\n field="region"\n account="loadBalancer.credentials"\n provider="\'azure\'"\n on-change="ctrl.regionUpdated()"\n regions="regions"\n ></region-select-field>\n\n <div class="form-group" ng-if="!isALB">\n <div class="col-md-3 sm-label-right">Virtual Network</div>\n <div class="col-md-7">\n <ui-select\n class="form-control input-sm"\n required\n ng-model="loadBalancer.selectedVnet"\n on-select="ctrl.selectedVnetChanged($item)"\n >\n <ui-select-match placeholder="Select from existing virtual networks"\n >{{$select.selected.name}}</ui-select-match\n >\n <ui-select-choices repeat="selectVnet in ctrl.selectedVnets | filter: $select.search">\n <span ng-bind-html="selectVnet.name | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n\n <div class="form-group" ng-if="!isALB">\n <div class="col-md-3 sm-label-right">Subnet</div>\n <div class="col-md-7">\n <ui-select\n class="form-control input-sm"\n required\n ng-model="loadBalancer.selectedSubnet"\n on-select="ctrl.selectedSubnetChanged($item)"\n >\n <ui-select-match placeholder="Select from existing subnets">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="selectSubnet in ctrl.selectedSubnets | filter: $select.search">\n <span ng-bind-html="selectSubnet.name | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n\n <div class="form-group">\n <div class="col-md-3 sm-label-right">Stack <help-field key="azure.loadBalancer.stack"></help-field></div>\n <div class="col-md-3">\n <input\n required\n type="text"\n class="form-control input-sm"\n ng-model="loadBalancer.stack"\n name="stackName"\n ng-change="ctrl.updateName()"\n ng-pattern="/^[a-zA-Z0-9]*$/"\n />\n </div>\n <div class="col-md-6 form-inline">\n <label class="sm-label-right"> Detail <help-field key="azure.loadBalancer.detail"></help-field> </label>\n <input\n required\n type="text"\n class="form-control input-sm"\n ng-model="loadBalancer.detail"\n name="detailName"\n ng-change="ctrl.updateName()"\n ng-pattern="/^[a-zA-Z0-9-]*$/"\n />\n </div>\n <div class="col-md-7 col-md-offset-3" ng-if="form.stackName.$error.pattern">\n <validation-error message="Stack can only contain letters and numbers."></validation-error>\n </div>\n <div class="col-md-7 col-md-offset-3" ng-if="form.detailName.$error.pattern">\n <validation-error message="Detail can only contain letters, numbers, and dashes."></validation-error>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-9 col-md-offset-3" ng-if="form.loadBalancerName.$error.maxlength">\n <validation-error message="Load Balancer name can only be 32 characters."></validation-error>\n </div>\n </div>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/loadBalancer/configure/listeners.html",'<div class="container-fluid form-horizontal">\n <div class="form-group">\n <div class="col-md-12">\n <table class="table table-condensed packed">\n <thead>\n <tr>\n <th>Protocol</th>\n <th>External Port</th>\n <th></th>\n <th>Internal Port</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="rule in loadBalancer.loadBalancingRules">\n <td>\n <select\n class="form-control input-sm"\n ng-model="rule.protocol"\n ng-init="rule.protocol = (isALB ? \'TCP\' : \'HTTP\')"\n ng-options="protocol for protocol in (isALB ? [\'TCP\', \'UDP\'] : [\'HTTP\'])"\n ></select>\n </td>\n <td>\n <input class="form-control input-sm" type="number" min="0" ng-model="rule.externalPort" required />\n </td>\n <td class="small" style="padding-top: 10px">&rarr;</td>\n <td>\n <input class="form-control input-sm" type="number" min="0" ng-model="rule.backendPort" required />\n </td>\n <td>\n <a href class="sm-label" ng-click="ctrl.removeListener($index)"\n ><span class="glyphicon glyphicon-trash"></span\n ></a>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan="5">\n <button class="add-new col-md-12" ng-click="ctrl.addListener()">\n <span class="glyphicon glyphicon-plus-sign"></span> Add new port mapping\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/loadBalancer/configure/healthCheck.html",'<div class="container-fluid form-horizontal">\n <div class="form-group">\n <div class="col-md-12">\n <table class="table table-condensed packed" ng-if="!isALB">\n <thead>\n <tr>\n <th width="35%">Protocol</th>\n <th width="30%">Host</th>\n <th><span ng-if="ctrl.requiresHealthCheckPath()">Path</span></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>\n <select\n class="form-control input-sm"\n ng-model="loadBalancer.probes[0].probeProtocol"\n required\n ng-options="protocol for protocol in [\'HTTP\']"\n ></select>\n </td>\n <td>\n <input class="form-control input-sm" type="text" ng-model="loadBalancer.probes[0].probePort" />\n </td>\n <td>\n <input\n ng-if="ctrl.requiresHealthCheckPath()"\n class="form-control input-sm"\n type="text"\n ng-model="loadBalancer.probes[0].probePath"\n required\n />\n </td>\n </tr>\n </tbody>\n </table>\n\n <table class="table table-condensed packed" ng-if="isALB">\n <thead>\n <tr>\n <th width="35%">Protocol</th>\n <th width="30%">Port</th>\n <th><span ng-if="ctrl.requiresHealthCheckPath()">Path</span></th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>\n <select\n class="form-control input-sm"\n ng-model="loadBalancer.probes[0].probeProtocol"\n ng-init="loadBalancer.probes[0].probeProtocol = \'TCP\'"\n required\n ng-options="protocol for protocol in [\'TCP\', \'HTTP\']"\n ></select>\n </td>\n <td>\n <input class="form-control input-sm" type="text" ng-model="loadBalancer.probes[0].probePort" />\n </td>\n <td>\n <input\n ng-if="ctrl.requiresHealthCheckPath()"\n class="form-control input-sm"\n type="text"\n ng-model="loadBalancer.probes[0].probePath"\n required\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/loadBalancer/configure/advancedSettings.html",'<div class="container-fluid form-horizontal">\n <div class="form-group">\n <div class="col-md-12">\n <div class="form-group">\n <div class="col-md-3">\n <b>Custom DNS Label</b>\n <help-field key="azure.loadBalancer.dnsName"></help-field>\n </div>\n <div class="col-md-6">\n <input class="form-control input-sm" type="text" ng-model="loadBalancer.dnsName" />\n <span>.{{loadBalancer.region}}.cloudapp.azure.com</span>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-3">\n <b>Health Check</b>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">\n <b>Interval</b>\n <help-field key="azure.loadBalancer.probes.probeInterval"></help-field>\n </div>\n <div class="col-md-4">\n <input class="form-control input-sm" type="number" min="0" ng-model="loadBalancer.probes[0].probeInterval" />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">\n <b>Unhealthy Threshold</b>\n <help-field key="azure.loadBalancer.probes.unhealthyThreshold"></help-field>\n </div>\n <div class="col-md-4">\n <input\n class="form-control input-sm"\n type="number"\n min="0"\n ng-model="loadBalancer.probes[0].unhealthyThreshold"\n />\n </div>\n </div>\n <div class="form-group" ng-if="isALB">\n <div class="col-md-4 sm-label-right">\n <b>Idle Timeout</b>\n <help-field key="azure.loadBalancer.loadBalancingRules.idleTimeout"></help-field>\n </div>\n <div class="col-md-4">\n <input\n class="form-control input-sm"\n type="number"\n min="0"\n ng-model="loadBalancer.loadBalancingRules[0].idleTimeout"\n />\n </div>\n </div>\n <div class="form-group" ng-if="!isALB">\n <div class="col-md-4 sm-label-right">\n <b>Timeout</b>\n <help-field key="azure.loadBalancer.probes.timeout"></help-field>\n </div>\n <div class="col-md-4">\n <input class="form-control input-sm" type="number" min="0" ng-model="loadBalancer.probes[0].timeout" />\n </div>\n </div>\n <div class="form-group" ng-if="isNew && !isALB">\n <div class="col-md-4 sm-label-right">\n <b>SKU</b>\n <help-field key="azure.loadBalancer.sku"></help-field>\n </div>\n <div class="col-md-4">\n <select\n class="form-control input-sm"\n ng-model="loadBalancer.sku"\n ng-options="sku for sku in validSkus"\n ></select>\n </div>\n </div>\n <div class="form-group" ng-if="isALB">\n <div class="col-md-4 sm-label-right">\n <b>Session persistence</b>\n <help-field key="azure.loadBalancer.loadBalancingRules.sessionPersistence"></help-field>\n </div>\n <div class="col-md-4">\n <select\n class="form-control input-sm"\n ng-model="loadBalancer.sessionPersistence"\n ng-init="loadBalancer.sessionPersistence = \'None\'"\n required\n ng-options="p for p in [\'None\', \'Client IP\', \'Client IP and protocol\']"\n ></select>\n </div>\n </div>\n </div>\n </div>\n</div>\n')}]);const se="spinnaker.azure.loadBalancer.details.controller";e.module(se,[Q,O,A,y]).controller("azureLoadBalancerDetailsCtrl",["$scope","$state","$exceptionHandler","$uibModal","loadBalancer","app","securityGroupReader","loadBalancerReader","$q",function(n,t,a,r,i,s,o,c,d){function u(){if(n.loadBalancer=s.loadBalancers.data.filter(function(e){return e.name===i.name&&e.region===i.region&&e.account===i.accountId})[0],n.loadBalancer){return c.getLoadBalancerDetails(n.loadBalancer.provider,i.accountId,i.region,i.name).then(function(e){n.state.loading=!1;const t=[],a=e.filter(function(e){return e.name===i.name});if(a.length&&(n.loadBalancer.elb=a[0],n.loadBalancer.account=i.accountId,n.loadBalancer.elb.securityGroups&&(n.loadBalancer.elb.securityGroups.forEach(function(e){const n=o.getApplicationSecurityGroup(s,i.accountId,i.region,e);n&&t.push(n)}),n.securityGroups=_.sortBy(t,"name")),n.loadBalancer.loadBalancerType&&n.loadBalancer.loadBalancerType.includes("_"))){const e=n.loadBalancer.loadBalancerType;n.loadBalancer.loadBalancerType=e.split("_").map(e=>{const n=e.toLowerCase();return n.substring(0,1).toUpperCase()+n.substring(1)}).join(" ")}})}return n.loadBalancer||t.go("^"),d.when(null)}n.state={loading:!0},n.firewallsLabel=b.get("Firewalls"),s.ready().then(u).then(()=>{n.$$destroyed||s.onRefresh(n,u)}),this.editLoadBalancer=function(){r.open({templateUrl:"azure/src/loadBalancer/configure/editLoadBalancer.html",controller:"azureCreateLoadBalancerCtrl as ctrl",size:"lg",resolve:{application:function(){return s},loadBalancer:function(){return e.copy(n.loadBalancer)},isNew:function(){return!1},loadBalancerType:function(){return{type:n.loadBalancer.loadBalancerType}}}})},this.deleteLoadBalancer=function(){if(n.loadBalancer.instances&&n.loadBalancer.instances.length)return;const e={application:s,title:"Deleting "+i.name},t={cloudProvider:"azure",loadBalancerName:n.loadBalancer.name,loadBalancerType:n.loadBalancer.loadBalancerType,credentials:n.loadBalancer.account,region:i.region,appName:s.name};l.confirm({header:"Really delete "+i.name+"?",buttonText:"Delete "+i.name,account:i.accountId,taskMonitorConfig:e,submitMethod:()=>h.deleteLoadBalancer(t,s)})}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/loadBalancer/configure/editLoadBalancer.html",'<form name="form" novalidate validate-on-submit>\n <v2-modal-wizard\n heading="Edit {{loadBalancerType}} {{loadBalancer.name}}"\n task-monitor="taskMonitor"\n dismiss="$dismiss()"\n >\n <v2-wizard-page key="Listeners" label="Listeners" done="true">\n <ng-include src="pages.listeners"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="Health Check" label="Health Check" done="true" hide-subheading="true">\n <ng-include src="pages.healthCheck"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="Advanced Settings" label="Advanced Settings" done="true">\n <ng-include src="pages.advancedSettings"></ng-include>\n </v2-wizard-page>\n </v2-modal-wizard>\n <div class="modal-footer">\n <button ng-disabled="taskMonitor.submitting" class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <submit-button\n is-disabled="taskMonitor.submitting"\n submitting="taskMonitor.submitting"\n on-click="form.$valid && ctrl.submit()"\n is-new="isNew"\n ></submit-button>\n </div>\n</form>\n')}]);const oe="spinnaker.azure.pipeline.stage.bake.executionDetails.controller";n(oe,[O]).controller("azureBakeExecutionDetailsCtrl",["$scope","$stateParams","executionDetailsSectionService","$interpolate",function(e,n,t,a){e.configSections=["bakeConfig","taskStatus"];const r=()=>{e.detailsSection=n.details,e.provider=e.stage.context.cloudProviderType||"azure",e.roscoMode=g.feature.roscoMode||"function"==typeof g.feature.roscoSelector&&g.feature.roscoSelector(e.stage.context),e.bakeryDetailUrl=a(e.roscoMode&&g.roscoDetailUrl?g.roscoDetailUrl:g.bakeryDetailUrl)},l=()=>t.synchronizeSection(e.configSections,r);l(),e.$on("$stateChangeSuccess",l)}]);const ce="spinnaker.azure.serverGroup.transformer";n(ce,[]).factory("azureServerGroupTransformer",function(){function e(e,n){if(Array.isArray(e.customScriptsSettings.fileUris))n.customScriptsSettings.fileUris=e.customScriptsSettings.fileUris;else{const t=e.customScriptsSettings.fileUris;t.includes(",")?n.customScriptsSettings.fileUris=t.split(","):t.includes(";")?n.customScriptsSettings.fileUris=t.split(";"):n.customScriptsSettings.fileUris=[t],n.customScriptsSettings.fileUris.forEach(function(e,t){n.customScriptsSettings.fileUris[t]=e.trim()})}}return{convertServerGroupCommandToDeployConfiguration:function(n){let t;t="editPipeline"===n.viewState.mode||"createPipeline"===n.viewState.mode?{imageName:"",isCustom:"true",publisher:"",offer:"",sku:"",version:"",region:n.region,uri:"",ostype:""}:n.selectedImage;const a={name:n.application,cloudProvider:n.selectedProvider,application:n.application,stack:n.stack,strategy:n.strategy,rollback:{onFailure:n.rollback?n.rollback.onFailure:null},scaleDown:n.scaleDown,maxRemainingAsgs:n.maxRemainingAsgs,delayBeforeDisableSec:n.delayBeforeDisableSec,delayBeforeScaleDownSec:n.delayBeforeScaleDownSec,allowDeleteActive:"redblack"===n.strategy||null,allowScaleDownActive:"redblack"===n.strategy||null,detail:n.freeFormDetails,freeFormDetails:n.freeFormDetails,healthSettings:n.healthSettings,image:n.image,account:n.credentials,selectedProvider:"azure",vnet:n.vnet,vnetResourceGroup:n.selectedVnet.resourceGroup,subnet:n.subnet,useSourceCapacity:!1,capacity:{min:n.sku.capacity,max:n.sku.capacity},credentials:n.credentials,region:n.region,securityGroupName:n.securityGroupName,loadBalancerName:n.loadBalancerName,loadBalancerType:n.loadBalancerType,user:"[anonymous]",upgradePolicy:"Manual",type:"createServerGroup",sku:{name:"Standard_DS1_v2",tier:"Standard",capacity:n.sku.capacity},instanceTags:n.instanceTags,dataDisks:n.dataDisks,userAssignedIdentities:n.userAssignedIdentities,viewState:n.viewState,osConfig:{customData:n.osConfig?n.osConfig.customData:null},customScriptsSettings:{fileUris:null,commandToExecute:""},zonesEnabled:n.zonesEnabled,zones:n.zonesEnabled?n.zones:[],enableInboundNAT:n.enableInboundNAT};if(null!=n.image&&0!=n.image.isCustom||(a.image=t),void 0!==n.stack&&(a.name=a.name+"-"+n.stack),void 0!==n.freeFormDetails&&(a.name=a.name+"-"+n.freeFormDetails),void 0!==n.customScriptsSettings&&(a.customScriptsSettings.commandToExecute=n.customScriptsSettings.commandToExecute,_.isEmpty(n.customScriptsSettings.fileUris)||e(n,a)),n.instanceType){const e=n.instanceType;a.instanceType=n.instanceType,a.sku.name=e,a.sku.tier=e.substring(0,e.indexOf("_"))}return a.interestingHealthProviderNames=[],a},normalizeServerGroup:function(e){return e},parseCustomScriptsSettings:e}});const de="spinnaker.azure.serverGroupCommandBuilder.service";e.module(de,[K,ce]).factory("azureServerGroupCommandBuilder",["$q","azureImageReader","azureServerGroupTransformer",function(n,t,a){function r(e,n){const a=(n=n||{}).account||e.defaultCredentials.azure,r=n.region||e.defaultRegions.azure;return t.findImages({provider:"azure"}).then(function(t){return{application:e.name,credentials:a,region:r,images:t,loadBalancers:[],selectedVnetSubnets:[],strategy:"",sku:{capacity:1},zonesEnabled:!1,zones:[],instanceTags:{},dataDisks:[],selectedProvider:"azure",viewState:{instanceProfile:"custom",allImageSelection:null,useAllImageSelection:!1,useSimpleCapacity:!0,usePreferredZones:!0,mode:n.mode||"create",disableStrategySelection:!0,loadBalancersConfigured:!1,networkSettingsConfigured:!1,securityGroupsConfigured:!1},enableInboundNAT:!1}})}return{buildNewServerGroupCommand:r,buildNewServerGroupCommandForPipeline:function(){return n.when({viewState:{requiresTemplateSelection:!0}})},buildServerGroupCommandFromExisting:function(e,t,r){r=r||"clone";const l=B.parseServerGroupName(t.name),i={application:e.name,strategy:"",stack:l.stack,freeFormDetails:l.freeFormDetails,credentials:t.account,loadBalancers:t.loadBalancers,selectedSubnets:t.selectedVnetSubnets,selectedVnet:t.selectedVnet,securityGroups:t.securityGroups,loadBalancerName:t.loadBalancerName,loadBalancerType:t.loadBalancerType,securityGroupName:t.securityGroupName,region:t.region,vnet:t.vnet,vnetResourceGroup:t.vnetResourceGroup,subnet:t.subnet,zones:t.zones,zonesEnabled:t.zones&&t.zones.length>0,instanceTags:{},dataDisks:t.dataDisks,sku:t.sku,capacity:{min:t.capacity.min,max:t.capacity.max,desired:t.capacity.desired},tags:[],instanceType:t.sku.name,selectedProvider:"azure",source:{account:t.account,region:t.region,serverGroupName:t.name,asgName:t.name},viewState:{allImageSelection:null,useAllImageSelection:!1,useSimpleCapacity:!0,usePreferredZones:!1,listImplicitSecurityGroups:!1,mode:r,disableStrategySelection:!0},enableInboundNAT:t.enableInboundNAT};return void 0!==t.customScriptsSettings&&(i.customScriptsSettings={},i.customScriptsSettings.commandToExecute=t.customScriptsSettings.commandToExecute,_.isEmpty(t.customScriptsSettings.fileUris)||a.parseCustomScriptsSettings(t,i)),n.when(i)},buildServerGroupCommandFromPipeline:function(n,t){const a=_.cloneDeep(t),l=a.region;return r(n,{account:a.account,region:l}).then(function(n){const r={disableImageSelection:!0,useSimpleCapacity:!0,mode:"editPipeline",submitButtonLabel:"Done",instanceProfile:t.viewState.instanceProfile,instanceTypeDetails:t.viewState.instanceTypeDetails},i={region:l,credentials:a.account,viewState:r};t.viewState.instanceTypeDetails&&(i.instanceType=t.viewState.instanceTypeDetails.name),a.strategy=a.strategy||"";return e.extend({},n,a,i)})}}}]);const ue="spinnaker.azure.pipeline.stage.bakeStage";n(ue,[de,K,oe]).config(function(){S.pipeline.registerStage({provides:"bake",cloudProvider:"azure",label:"Bake",description:"Bakes an image",templateUrl:"azure/src/pipeline/stages/bake/bakeStage.html",executionDetailsUrl:"azure/src/pipeline/stages/bake/bakeExecutionDetails.html",executionLabelComponent:D,extraLabelLines:e=>e.masterStage.context.allPreviouslyBaked||e.masterStage.context.somePreviouslyBaked?1:0,supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"package"},{type:"requiredField",fieldName:"regions"},{type:"upstreamVersionProvided",checkParentTriggers:!0,getMessage:e=>"Bake stages should always have a stage or trigger preceding them that provides version information: <ul>"+e.map(e=>`<li>${e}</li>`).join("")+"</ul>Otherwise, Spinnaker will bake and deploy the most-recently built package."}],restartable:!0})}).controller("azureBakeStageCtrl",["$scope","$q","azureImageReader","$uibModal",function(e,n,t,a){function r(){t.findImages({provider:"azure",managedImages:!0,account:e.stage.account}).then(function(n){let t=[];for(let e in n){let a=n[e],r={id:a.imageName,osType:a.ostype,name:a.imageName};t.push(r)}e.managedImageOptions=t}).catch(()=>{})}e.stage.extendedAttributes=e.stage.extendedAttributes||{},e.stage.regions=e.stage.regions||[],e.stage.user||(e.stage.user=w.getAuthenticatedUser().name),e.viewState={loading:!0},this.addExtendedAttribute=function(){e.stage.extendedAttributes||(e.stage.extendedAttributes={}),a.open({templateUrl:C.addExtendedAttributes,controller:"bakeStageAddExtendedAttributeController",controllerAs:"addExtendedAttribute",resolve:{extendedAttribute:function(){return{key:"",value:""}}}}).result.then(function(n){e.stage.extendedAttributes[n.key]=n.value}).catch(()=>{})},this.removeExtendedAttribute=function(n){delete e.stage.extendedAttributes[n]},this.showTemplateFileName=function(){return e.viewState.roscoMode||e.stage.templateFileName},this.showExtendedAttributes=function(){return e.viewState.roscoMode||e.stage.extendedAttributes&&_.size(e.stage.extendedAttributes)>0},this.showVarFileName=function(){return e.viewState.roscoMode||e.stage.varFileName},this.showDefaultImages=function(){e.managedImagesWasChosen=!1,e.defaultImagesWasChosen=!0,e.customImagesWasChosen=!1,e.stage.managedImage=null,e.stage.publisher=null,e.stage.offer=null,e.stage.sku=null,e.stage.osType=null,e.stage.packageType=null},this.showManagedImages=function(){r(),e.managedImagesWasChosen=!0,e.defaultImagesWasChosen=!1,e.customImagesWasChosen=!1,e.stage.osType=null,e.stage.baseOs=null,e.stage.publisher=null,e.stage.offer=null,e.stage.sku=null,e.stage.packageType=null},this.showCustomImages=function(){e.managedImagesWasChosen=!1,e.defaultImagesWasChosen=!1,e.customImagesWasChosen=!0,e.stage.baseOs=null,e.stage.managedImage=null,e.stage.osType=null,e.stage.packageType=null},this.onChangeAccount=()=>{e.stage.osType=null,e.stage.packageType=null,e.stage.managedImage=null,e.stage.account&&f.getRegionsForAccount(e.stage.account).then(function(n){e.regions=n.map(e=>e.name)}).catch(()=>{}),e.managedImagesWasChosen&&r()},e.onChangeManagedImage=()=>{e.stage.packageType=null;const n=_.find(e.managedImageOptions,{id:e.stage.managedImage});e.stage.osType=n.osType.toLowerCase()},this.onChangeOsType=function(n){e.stage.packageType=null},e.$watch("stage",function(){_.forOwn(e.stage,function(n,t){""===n&&delete e.stage[t]}),"function"==typeof g.feature.roscoSelector&&(e.viewState.roscoMode=g.feature.roscoSelector(e.stage))},!0),n.all([f.getCredentialsKeyedByAccount("azure"),z.getRegions("azure"),z.getBaseOsOptions("azure"),z.getBaseLabelOptions()]).then(function([n,t,a,l]){e.accounts=Object.keys(n),e.regions=t,1===e.regions.length?e.stage.region=e.regions[0]:e.regions.includes(e.stage.region)||delete e.stage.region,!e.stage.regions.length&&e.application.defaultRegions.azure&&e.stage.regions.push(e.application.defaultRegions.azure),!e.stage.regions.length&&e.application.defaultRegions.azure&&e.stage.regions.push(e.application.defaultRegions.azure),e.baseOsOptions=a.baseImages,e.baseLabelOptions=l,e.osTypeOptions=["linux","windows"],e.packageTypeOptions=["DEB","RPM"],e.viewState.roscoMode=g.feature.roscoMode||"function"==typeof g.feature.roscoSelector&&g.feature.roscoSelector(e.stage),e.showAdvancedOptions=function(){const n=e.stage;return!!(n.templateFileName||n.extendedAttributes&&_.size(n.extendedAttributes)>0||n.varFileName)}(),e.viewState.loading=!1,null!=e.stage.managedImage&&(e.managedImagesWasChosen=!0,r()),e.defaultImagesWasChosen=null!=e.stage.baseOs,e.customImagesWasChosen=null!=e.stage.publisher})}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/pipeline/stages/bake/bakeStage.html",'<div ng-controller="azureBakeStageCtrl as bakeStageCtrl">\n <div ng-if="viewState.loading" class="horizontal center middle">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n <div ng-if="!viewState.loading">\n <stage-config-field label="Account">\n <account-select-field\n component="stage"\n field="account"\n accounts="accounts"\n provider="\'azure\'"\n on-change="bakeStageCtrl.onChangeAccount()"\n />\n </stage-config-field>\n\n <stage-config-field label="Regions">\n <checklist items="regions" model="stage.regions" inline="true" include-select-all-button="true"></checklist>\n </stage-config-field>\n\n <div class="panel panel-default">\n <div class="panel-heading">\n <label class="col-md-3 sm-label-right"></label>\n <div class="btn-group btn-group-xs" role="group" aria-label="Source Image">\n <button\n class="btn btn-default"\n aria-pressed="true"\n ng-click="bakeStageCtrl.showDefaultImages()"\n ng-class="{active: defaultImagesWasChosen}"\n >\n Default Images\n </button>\n <button\n class="btn btn-default"\n aria-pressed="true"\n ng-click="bakeStageCtrl.showManagedImages()"\n ng-class="{active: managedImagesWasChosen}"\n >\n Managed Images\n </button>\n <button\n class="btn btn-default"\n aria-pressed="true"\n ng-click="bakeStageCtrl.showCustomImages()"\n ng-class="{active: customImagesWasChosen}"\n >\n Custom Image\n </button>\n </div>\n </div>\n\n <div class="panel-body">\n <stage-config-field label="Base OS" ng-show="defaultImagesWasChosen">\n <bake-stage-choose-os model="stage.baseOs" base-os-options="baseOsOptions"></bake-stage-choose-os>\n </stage-config-field>\n\n <stage-config-field label="Managed Image" ng-show="managedImagesWasChosen">\n <bake-stage-choose-managed-image\n model="stage.managedImage"\n managed-image-options="managedImageOptions"\n on-change="onChangeManagedImage"\n ></bake-stage-choose-managed-image>\n </stage-config-field>\n\n <stage-config-field label="Publisher" ng-show="customImagesWasChosen">\n <input type="text" class="form-control input-sm" ng-model="stage.publisher" />\n </stage-config-field>\n <stage-config-field label="Offer" ng-show="customImagesWasChosen">\n <input type="text" class="form-control input-sm" ng-model="stage.offer" />\n </stage-config-field>\n <stage-config-field label="SKU" ng-show="customImagesWasChosen">\n <input type="text" class="form-control input-sm" ng-model="stage.sku" />\n </stage-config-field>\n\n <stage-config-field label="OS Type" ng-show="customImagesWasChosen">\n <label class="radio-inline" ng-repeat="osType in osTypeOptions">\n <input\n type="radio"\n ng-model="stage.osType"\n ng-value="osType"\n name="osType"\n ng-change="bakeStageCtrl.onChangeOsType(value)"\n />\n {{osType}}\n </label>\n </stage-config-field>\n\n <stage-config-field label="Package Type" ng-show="stage.osType === \'linux\'">\n <label class="radio-inline" ng-repeat="packageType in packageTypeOptions">\n <input type="radio" ng-model="stage.packageType" ng-value="packageType" name="packageType" />\n {{packageType}}\n </label>\n </stage-config-field>\n </div>\n </div>\n\n <stage-config-field label="Package" help-key="pipeline.config.bake.package">\n <input type="text" class="form-control input-sm" ng-model="stage.package" />\n </stage-config-field>\n\n <stage-config-field label="Base Label">\n <label class="radio-inline" ng-repeat="baseLabel in baseLabelOptions">\n <input type="radio" ng-model="stage.baseLabel" ng-value="baseLabel" />\n {{baseLabel}}\n </label>\n </stage-config-field>\n \x3c!-- Even if the roscoMode flag is false, we should show the control if rebake is set. --\x3e\n <stage-config-field label="Rebake" ng-if="viewState.roscoMode || stage.rebake">\n <div class="checkbox" style="margin-bottom: 0">\n <label>\n <input type="checkbox" ng-model="stage.rebake" />\n Rebake image without regard to the status of any existing bake\n </label>\n </div>\n </stage-config-field>\n <stage-config-field label="Base Name">\n <input type="text" class="form-control input-sm" ng-model="stage.baseName" />\n </stage-config-field>\n <div class="form-group">\n <div class="col-md-9 col-md-offset-1">\n <div class="checkbox">\n <label>\n <input type="checkbox" ng-model="showAdvancedOptions" />\n <strong>Show Advanced Options</strong>\n </label>\n </div>\n </div>\n </div>\n <div ng-class="{collapse: showAdvancedOptions !== true, \'collapse.in\': showAdvancedOptions === true}">\n <stage-config-field\n label="Template File Name"\n help-key="pipeline.config.bake.templateFileName"\n ng-if="bakeStageCtrl.showTemplateFileName()"\n >\n <input type="text" class="form-control input-sm" ng-model="stage.templateFileName" />\n </stage-config-field>\n <stage-config-field\n label="Extended Attributes"\n help-key="pipeline.config.bake.extendedAttributes"\n ng-if="bakeStageCtrl.showExtendedAttributes()"\n >\n <table class="table table-condensed packed">\n <thead>\n <tr>\n <th style="width: 40%">Key</th>\n <th style="width: 60%">Value</th>\n <th class="text-right">Actions</th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="(key,value) in stage.extendedAttributes">\n <td>\n <strong class="small">{{key}}</strong>\n </td>\n <td>\n <input\n type="text"\n ng-model="stage.extendedAttributes[key]"\n value="{{value}}"\n class="form-control input-sm"\n />\n </td>\n <td class="text-right">\n <a class="small" href ng-click="bakeStageCtrl.removeExtendedAttribute(key)">Remove</a>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan="7">\n <button class="btn btn-block btn-sm add-new" ng-click="bakeStageCtrl.addExtendedAttribute()">\n <span class="glyphicon glyphicon-plus-sign"></span> Add Extended Attribute\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </stage-config-field>\n <stage-config-field\n label="Var File Name"\n help-key="pipeline.config.bake.varFileName"\n ng-if="bakeStageCtrl.showVarFileName()"\n >\n <input type="text" class="form-control input-sm" ng-model="stage.varFileName" />\n </stage-config-field>\n </div>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/pipeline/stages/bake/bakeExecutionDetails.html",'<div ng-controller="azureBakeExecutionDetailsCtrl">\n <execution-details-section-nav sections="configSections"></execution-details-section-nav>\n <div class="step-section-details" ng-if="detailsSection === \'bakeConfig\'">\n <div class="row">\n <div class="col-md-6">\n <dl class="dl-narrow dl-horizontal">\n <dt if-multiple-providers>Provider</dt>\n <dd if-multiple-providers>Azure</dd>\n <dt>Image</dt>\n <dd>{{stage.context.ami}}</dd>\n <dt>Region</dt>\n <dd>{{stage.context.region}}</dd>\n <dt>Package</dt>\n <dd>{{stage.context.package}}</dd>\n </dl>\n </div>\n <div class="col-md-6">\n <dl class="dl-narrow dl-horizontal">\n <dt>Base OS</dt>\n <dd>{{stage.context.baseOs}}</dd>\n <dt>Label</dt>\n <dd>{{stage.context.baseLabel}}</dd>\n <dt ng-if="roscoMode || execution.trigger.rebake || stage.context.rebake">Rebake</dt>\n <dd ng-if="roscoMode || execution.trigger.rebake || stage.context.rebake">\n {{execution.trigger.rebake || stage.context.rebake || false}}\n </dd>\n <dt ng-if="stage.context.templateFileName">Template</dt>\n <dd ng-if="stage.context.templateFileName">{{stage.context.templateFileName}}</dd>\n <dt ng-if="stage.context.varFileName">Var File</dt>\n <dd ng-if="stage.context.varFileName">{{stage.context.varFileName}}</dd>\n </dl>\n </div>\n </div>\n <stage-failure-message stage="stage" message="stage.failureMessage"></stage-failure-message>\n\n <div class="row" ng-if="stage.context.region && stage.context.status.resourceId">\n <div class="col-md-12">\n <div class="alert alert-{{stage.isFailed ? \'danger\' : \'info\'}}">\n <div ng-if="stage.context.previouslyBaked">No changes detected; reused existing bake</div>\n <a target="_blank" href="{{ bakeryDetailUrl(stage) }}"> View Bakery Details </a>\n </div>\n </div>\n </div>\n </div>\n <div class="step-section-details" ng-if="detailsSection === \'taskStatus\'">\n <div class="row">\n <execution-step-details item="stage"></execution-step-details>\n </div>\n </div>\n</div>\n')}]);const pe="spinnaker.azure.pipeline.stage.destroyAsgStage";n(pe,[]).config(function(){S.pipeline.registerStage({provides:"destroyServerGroup",cloudProvider:"azure",templateUrl:"azure/src/pipeline/stages/destroyAsg/destroyAsgStage.html",executionStepLabelUrl:"azure/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html",accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"targetImpedance",message:"This pipeline will attempt to destroy a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}).controller("azureDestroyAsgStageCtrl",["$scope",function(e){const n=this,t=e.stage;e.state={accounts:!1,regionsLoaded:!1},f.listAccounts("azure").then(function(n){e.accounts=n,e.state.accounts=!0}),n.accountUpdated=function(){f.getAccountDetails(t.credentials).then(function(e){t.regions=[e.org]})},e.targets=k.TARGET_LIST,t.regions=t.regions||[],t.cloudProvider="azure",t.interestingHealthProviderNames=[],!t.credentials&&e.application.defaultCredentials.azure&&(t.credentials=e.application.defaultCredentials.azure),t.credentials&&n.accountUpdated(),t.target||(t.target=e.targets[0].val)}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/pipeline/stages/destroyAsg/destroyAsgStage.html",'<div ng-controller="azureDestroyAsgStageCtrl as destroyAsgStageCtrl" class="form-horizontal">\n <div ng-if="!pipeline.strategy">\n <account-region-cluster-selector application="application" component="stage" accounts="accounts">\n </account-region-cluster-selector>\n </div>\n <stage-config-field label="Target">\n <target-select model="stage" options="targets"></target-select>\n </stage-config-field>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/pipeline/stages/destroyAsg/destroyAsgStepLabel.html",'<span class="task-label"> Destroy Server Group: {{step.context.serverGroupName}} ({{step.context.region}}) </span>\n')}]);const ge="spinnaker.azure.pipeline.stage.disableAsgStage";n(ge,[]).config(function(){S.pipeline.registerStage({provides:"disableServerGroup",alias:"disableAsg",cloudProvider:"azure",templateUrl:"azure/src/pipeline/stages/disableAsg/disableAsgStage.html",executionStepLabelUrl:"azure/src/pipeline/stages/disableAsg/disableAsgStepLabel.html",validators:[{type:"targetImpedance",message:"This pipeline will attempt to disable a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}).controller("azureDisableAsgStageCtrl",["$scope",function(e){const n=e.stage;e.state={accounts:!1,regionsLoaded:!1},f.listAccounts("azure").then(function(n){e.accounts=n,e.state.accounts=!0}),e.targets=k.TARGET_LIST,n.regions=n.regions||[],n.cloudProvider="azure",n.isNew&&e.application.attributes.platformHealthOnly&&(n.interestingHealthProviderNames=[]),!n.credentials&&e.application.defaultCredentials.azure&&(n.credentials=e.application.defaultCredentials.azure),!n.regions.length&&e.application.defaultRegions.azure&&n.regions.push(e.application.defaultRegions.azure),n.target||(n.target=e.targets[0].val)}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/pipeline/stages/disableAsg/disableAsgStage.html",'<div ng-controller="azureDisableAsgStageCtrl as disableAsgStageCtrl" class="form-horizontal">\n <div ng-if="!pipeline.strategy">\n <account-region-cluster-selector application="application" component="stage" accounts="accounts">\n </account-region-cluster-selector>\n </div>\n <stage-config-field label="Target">\n <target-select model="stage" options="targets"></target-select>\n </stage-config-field>\n <stage-platform-health-override application="application" stage="stage" platform-health-type="\'azureService\'">\n </stage-platform-health-override>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/pipeline/stages/disableAsg/disableAsgStepLabel.html",'<span class="task-label"> Disable Server Group: {{step.context.serverGroupName}} ({{step.context.region}}) </span>\n')}]);const me="spinnaker.azure.pipeline.stage.enableAsgStage";n(me,[]).config(function(){S.pipeline.registerStage({provides:"enableServerGroup",alias:"enableAsg",cloudProvider:"azure",templateUrl:"azure/src/pipeline/stages/enableAsg/enableAsgStage.html",executionStepLabelUrl:"azure/src/pipeline/stages/enableAsg/enableAsgStepLabel.html",validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]})}).controller("azureEnableAsgStageCtrl",["$scope",function(e){const n=this,t=e.stage;e.state={accounts:!1,regionsLoaded:!1},f.listAccounts("azure").then(function(n){e.accounts=n,e.state.accounts=!0}),n.reset=()=>{n.accountUpdated(),n.resetSelectedCluster()},e.targets=k.TARGET_LIST,t.regions=t.regions||[],t.cloudProvider="azure",t.isNew&&(t.interestingHealthProviderNames=[]),!t.credentials&&e.application.defaultCredentials.azure&&(t.credentials=e.application.defaultCredentials.azure),!t.regions.length&&e.application.defaultRegions.azure&&t.regions.push(e.application.defaultRegions.azure),t.target||(t.target=e.targets[0].val),e.$watch("stage.credentials",e.accountUpdated)}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/pipeline/stages/enableAsg/enableAsgStage.html",'<div ng-controller="azureEnableAsgStageCtrl as enableAsgStageCtrl" class="form-horizontal">\n <div ng-if="!pipeline.strategy">\n <account-region-cluster-selector application="application" component="stage" accounts="accounts">\n </account-region-cluster-selector>\n </div>\n <stage-config-field label="Target">\n <target-select model="stage" options="targets"></target-select>\n </stage-config-field>\n <stage-platform-health-override application="application" stage="stage" platform-health-type="\'azureService\'">\n </stage-platform-health-override>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/pipeline/stages/enableAsg/enableAsgStepLabel.html",'<span class="task-label"> Enable Server Group: {{step.context.serverGroupName}} ({{step.context.region}}) </span>\n')}]);const fe="spinnaker.azure.securityGroup.write.service",ve=fe;n(fe,[O]).factory("azureSecurityGroupWriter",function(){return{deleteSecurityGroup:function(e,n,t={}){t.type="deleteSecurityGroup",t.securityGroupName=e.name,t.regions=[e.region],t.credentials=e.accountId,t.appName=n.name;const a=G.executeTask({job:[t],application:n,description:`Delete ${b.get("Firewalls")}: ${e.name}`});return I.clearCache("securityGroup"),a},upsertSecurityGroup:function(e,n,t,a={}){a.securityGroupName=e.name,_.assignWith(a,e,function(e,n){return _.isUndefined(e)?n:e});const r=G.executeTask({job:[a],application:n,description:`${t} ${b.get("Firewall")}: ${ve}`});return I.clearCache("securityGroup"),r}}});const he="spinnaker.azure.securityGroup.create.controller";n(he,[O,fe]).controller("azureCreateSecurityGroupCtrl",["$scope","$uibModalInstance","$state","$controller","application","securityGroup","azureSecurityGroupWriter",function(e,n,t,a,r,l,i){e.pages={location:"azure/src/securityGroup/configure/createSecurityGroupProperties.html",ingress:"azure/src/securityGroup/configure/createSecurityGroupIngress.html"},e.regions=[],e.firewallLabel=b.get("Firewall");const s=this;function o(){if(e.$$destroyed)return;n.close();const a={name:e.securityGroup.name,accountId:e.securityGroup.credentials||e.securityGroup.accountName,region:e.securityGroup.regions[0],provider:"azure"};t.includes("**.firewallDetails")?t.go("^.firewallDetails",a):t.go(".firewallDetails",a)}function c(e,n,t){const a=e[t],r=e[n].priority,l=e[t].priority;e[t]=e[n],e[n]=a,e[n].priority=r,e[t].priority=l}e.isNew=!0,e.state={submitting:!1,infiniteScroll:{numToAdd:20,currentItems:20}},f.listAccounts("azure").then(function(n){e.accounts=n,s.accountUpdated()}),s.addMoreItems=function(){e.state.infiniteScroll.currentItems+=e.state.infiniteScroll.numToAdd},e.taskMonitor=new m({application:r,title:`Creating your ${b.get("firewall")}`,modalInstance:n,onTaskComplete:function(){r.securityGroups.refresh(),r.securityGroups.onNextRefresh(e,o)}}),e.securityGroup=l,s.accountUpdated=function(){f.getRegionsForAccount(e.securityGroup.credentials).then(function(n){e.regions=n,e.securityGroup.regions=n,s.updateName(),s.regionUpdated()})},this.regionUpdated=function(){s.vnetUpdated()},this.vnetUpdated=function(){const n=e.securityGroup.credentials,t=e.securityGroup.region;e.securityGroup.selectedVnet=null,e.securityGroup.vnet=null,e.securityGroup.vnetResourceGroup=null,s.selectedVnets=[],v.listNetworks().then(function(e){e.azure&&e.azure.forEach(e=>{e.account===n&&e.region===t&&s.selectedVnets.push(e)})}),s.subnetUpdated()},this.subnetUpdated=function(){e.securityGroup.selectedSubnet=null,e.securityGroup.subnet=null,s.selectedSubnets=[]},this.selectedVnetChanged=function(n){e.securityGroup.vnet=n.name,e.securityGroup.vnetResourceGroup=n.resourceGroup,e.securityGroup.selectedSubnet=null,e.securityGroup.subnet=null,s.selectedSubnets=[],n.subnets&&n.subnets.map(function(e){s.selectedSubnets.push(e)})},s.cancel=function(){n.dismiss()},s.updateName=function(){const n=e.securityGroup;let t=r.name;n.detail&&(t+="-"+n.detail),n.name=t,e.namePreview=t},s.upsert=function(){e.taskMonitor.submit(function(){const n={cloudProvider:"azure",appName:r.name,region:e.securityGroup.region,vpcId:"null"};return e.securityGroup.selectedVnet&&(e.securityGroup.vnet=e.securityGroup.selectedVnet.name,e.securityGroup.vnetResourceGroup=e.securityGroup.selectedVnet.resourceGroup),e.securityGroup.selectedSubnet&&(e.securityGroup.subnet=e.securityGroup.selectedSubnet.name),e.securityGroup.type="upsertSecurityGroup",i.upsertSecurityGroup(e.securityGroup,r,"Create",n)})},s.addRule=function(n){n.push({name:e.securityGroup.name+"-Rule"+n.length,priority:0==n.length?100:100*(n.length+1),protocolUI:"tcp",protocol:"tcp",access:"Allow",direction:"InBound",sourceAddressPrefix:"*",sourceAddressPrefixes:[],sourcePortRange:"*",destinationAddressPrefix:"*",destinationPortRange:"*",destinationPortRanges:[],destPortRanges:"*",sourceIPCIDRRanges:"*"})},s.portUpdated=function(e,n){if(!_.isEmpty(e[n].destPortRanges)){const t=e[n].destPortRanges.split(",");t.length>1?(e[n].destinationPortRanges=[],t.forEach(t=>e[n].destinationPortRanges.push(t)),e[n].destinationPortRange=null):(e[n].destinationPortRange=e[n].destPortRanges,e[n].destinationPortRanges=[])}},s.sourceIPCIDRUpdated=function(e,n){if(!_.isEmpty(e[n].destPortRanges)){const t=e[n].sourceIPCIDRRanges.split(",");t.length>1?(e[n].sourceAddressPrefixes=[],t.forEach(t=>e[n].sourceAddressPrefixes.push(t)),e[n].sourceAddressPrefix=null):(e[n].sourceAddressPrefix=e[n].sourceIPCIDRRanges,e[n].sourceAddressPrefixes=[])}},s.protocolUpdated=function(e,n){e[n].protocol=e[n].protocolUI},s.removeRule=function(e,n){e.splice(n,1)},s.moveUp=function(e,n){0!==n&&c(e,n,n-1)},s.moveDown=function(e,n){n!==e.length-1&&c(e,n,n+1)},e.securityGroup.securityRules=[]}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/configure/createSecurityGroupProperties.html",'<div class="modal-body">\n <div class="form-group">\n <div\n class="col-md-12 well"\n ng-class="{\'alert-danger\': form.securityGroupName.$error.validateUnique, \'alert-info\': !form.securityGroupName.$error.validateUnique}"\n >\n <strong>Your <firewall-label label="firewall"></firewall-label> will be named:</strong>\n <span ng-bind="namePreview"></span>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Detail</div>\n <div class="col-md-4">\n <input\n type="text"\n class="form-control input-sm"\n required\n ng-model="securityGroup.detail"\n ng-change="ctrl.updateName()"\n />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Description</div>\n <div class="col-md-8">\n <input type="text" class="form-control input-sm" ng-model="securityGroup.description" />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Account</div>\n <div class="col-md-8">\n <account-select-field\n required\n component="securityGroup"\n field="credentials"\n accounts="accounts"\n provider="\'azure\'"\n on-change="ctrl.accountUpdated()"\n ></account-select-field>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-12">\n <region-select-field\n label-columns="4"\n component="securityGroup"\n field="region"\n field-columns="8"\n account="securityGroup.credentials"\n provider="\'azure\'"\n on-change="ctrl.regionUpdated()"\n regions="regions"\n ></region-select-field>\n </div>\n </div>\n\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Virtual Network</div>\n <div class="col-md-7">\n <ui-select\n class="form-control input-sm"\n ng-model="securityGroup.selectedVnet"\n on-select="ctrl.selectedVnetChanged($item)"\n >\n <ui-select-match placeholder="Select from existing virtual networks">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="selectVnet in ctrl.selectedVnets | filter: $select.search">\n <span ng-bind-html="selectVnet.name | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Subnet</div>\n <div class="col-md-7">\n <ui-select\n class="form-control input-sm"\n ng-model="securityGroup.selectedSubnet"\n on-select="ctrl.selectedSubnetChanged($item)"\n >\n <ui-select-match placeholder="Select from existing subnets">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="selectSubnet in ctrl.selectedSubnets | filter: $select.search">\n <span ng-bind-html="selectSubnet.name | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/configure/createSecurityGroupIngress.html",'<div class="modal-body">\n <div class="row"></div>\n <div class="form-group">\n <div class="form-group">\n <div class="col-md-12">\n <table class="table table-condensed packed">\n <thead>\n <tr>\n <th style="width: 21%">Protocol</th>\n <th style="width: 32%">\n Source IP/CIDR ranges<help-field key="azure.securityGroup.ingress.sourceIPCIDRRanges"></help-field>\n </th>\n <th style="width: 32%">\n Destination port ranges<help-field key="azure.securityGroup.ingress.destPortRanges"></help-field>\n </th>\n <th style width="15%">Actions<help-field key="azure.securityGroup.ingress.actions"></help-field></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="rule in securityGroup.securityRules">\n <td>\n <select class="form-control input-sm" ng-model="rule.protocolUI">\n <option value="tcp">TCP</option>\n <option value="udp">UDP</option>\n <option value="*">ANY</option>\n </select>\n </td>\n <td>\n <input\n class="form-control input-sm"\n type="text"\n value="*"\n pattern="^*$|^((25[0-5]|2[0-4]d|[01]?dd?)[.]){3}(25[0-5]|2[0-4]d|[01]?dd?)(/([1-9]|[1-2]d|3[0-2]))?(,((25[0-5]|2[0-4]d|[01]?dd?)[.]){3}(25[0-5]|2[0-4]d|[01]?dd?)(/([1-9]|[1-2]d|3[0-2]))?)*$"\n ng-model="rule.sourceIPCIDRRanges"\n ng-change="ctrl.sourceIPCIDRUpdated(securityGroup.securityRules, $index)"\n required\n />\n </td>\n <td>\n <input\n class="form-control input-sm"\n type="text"\n value="80"\n pattern="^*$|^((d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])|(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])-(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5]))(,((d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])|(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])-(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])))*$"\n ng-model="rule.destPortRanges"\n ng-change="ctrl.portUpdated(securityGroup.securityRules, $index)"\n required\n />\n </td>\n <td>\n <a class="btn-link sm-label" ng-click="ctrl.moveUp(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-arrow-up"></span>\n </a>\n <a class="btn-link sm-label" ng-click="ctrl.moveDown(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-arrow-down"></span>\n </a>\n <a class="btn-link sm-label" ng-click="ctrl.removeRule(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-trash"></span>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class="form-group small" style="margin-top: 20px">\n <div class="col-md-12">\n <button class="add-new col-md-12" ng-click="ctrl.addRule(securityGroup.securityRules)">\n <span class="glyphicon glyphicon-plus-sign"></span> Add new\n <firewall-label label="Firewall"></firewall-label> Rule\n </button>\n </div>\n </div>\n </div>\n</div>\n')}]);const Be="spinnaker.azure.securityGroup.azure.edit.controller";n(Be,[O,F,A,fe]).controller("azureEditSecurityGroupCtrl",["$scope","$uibModalInstance","$exceptionHandler","$state","securityGroupReader","cacheInitializer","application","securityGroup","azureSecurityGroupWriter",function(e,n,t,a,r,l,i,s,o){function c(){if(e.$$destroyed)return;n.close();const t={name:e.securityGroup.name,accountId:e.securityGroup.credentials||e.securityGroup.accountName,region:e.securityGroup.region,provider:"azure"};a.includes("**.firewallDetails")?a.go("^.firewallDetails",t):a.go(".firewallDetails",t)}function d(e,n,t){const a=e[t],r=e[n].priority,l=e[t].priority;e[t]=e[n],e[n]=a,e[n].priority=r,e[t].priority=l}e.pages={ingress:"azure/src/securityGroup/configure/createSecurityGroupIngress.html"},s.securityRules=_.map(s.securityRules,function(e){return _.isEmpty(e.protocol)||(e.protocolUI=e.protocol.toLowerCase()),e.destPortRanges=e.destinationPortRangeModel,e.sourceIPCIDRRanges=e.sourceAddressPrefixModel,e}),e.securityGroup=s,e.state={refreshingSecurityGroups:!1},e.taskMonitor=new m({application:i,title:`Updating your ${b.get("firewall")}`,modalInstance:n,onTaskComplete:function(){i.securityGroups.refresh(),i.securityGroups.onNextRefresh(e,c)}}),this.getSecurityGroupRefreshTime=function(){return I.get("securityGroups").getStats().ageMax},this.refreshSecurityGroups=function(){return e.state.refreshingSecurityGroups=!0,l.refreshCache("securityGroups").then(function(){r.getAllSecurityGroups().then(function(n){const t=s.accountName,a=s.region,r=_.filter(n[t].azure[a],{});e.availableSecurityGroups=_.map(r,"name")}).then(function(){e.state.refreshingSecurityGroups=!1})})},this.addRule=function(n){n.push({name:e.securityGroup.name+"-Rule"+n.length,priority:0===n.length?100:100*(n.length+1),protocolUI:"tcp",access:"Allow",direction:"InBound",sourceAddressPrefix:"*",sourceAddressPrefixes:[],sourcePortRange:"*",destinationAddressPrefix:"*",destinationPortRange:"*",destinationPortRanges:[],destPortRanges:"*",sourceIPCIDRRanges:"*"})},this.portUpdated=function(e,n){if(!_.isEmpty(e[n].sourceIPCIDRRanges)){const t=e[n].destPortRanges.split(",");t.length>1?(e[n].destinationPortRanges=[],t.forEach(t=>e[n].destinationPortRanges.push(t)),e[n].destinationPortRange=null):(e[n].destinationPortRange=e[n].destPortRanges,e[n].destinationPortRanges=[])}},this.sourceIPCIDRUpdated=function(e,n){if(!_.isEmpty(e[n].sourceIPCIDRRanges)){const t=e[n].sourceIPCIDRRanges.split(",");t.length>1?(e[n].sourceAddressPrefixes=[],t.forEach(t=>e[n].sourceAddressPrefixes.push(t)),e[n].sourceAddressPrefix=null):(e[n].sourceAddressPrefix=e[n].sourceIPCIDRRanges,e[n].sourceAddressPrefixes=[])}},this.removeRule=function(e,n){e.splice(n,1)},this.moveUp=function(e,n){0!==n&&d(e,n,n-1)},this.moveDown=function(e,n){n!==e.length-1&&d(e,n,n+1)},e.taskMonitor.onTaskComplete=n.dismiss,this.upsert=function(){e.taskMonitor.submit(function(){const n={cloudProvider:"azure",appName:i.name,region:e.securityGroup.region,subnet:null,vpcId:"null"};return e.securityGroup.type="upsertSecurityGroup",o.upsertSecurityGroup(e.securityGroup,i,"Update",n)})},this.cancel=function(){n.dismiss()}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/configure/createSecurityGroupIngress.html",'<div class="modal-body">\n <div class="row"></div>\n <div class="form-group">\n <div class="form-group">\n <div class="col-md-12">\n <table class="table table-condensed packed">\n <thead>\n <tr>\n <th style="width: 21%">Protocol</th>\n <th style="width: 32%">\n Source IP/CIDR ranges<help-field key="azure.securityGroup.ingress.sourceIPCIDRRanges"></help-field>\n </th>\n <th style="width: 32%">\n Destination port ranges<help-field key="azure.securityGroup.ingress.destPortRanges"></help-field>\n </th>\n <th style width="15%">Actions<help-field key="azure.securityGroup.ingress.actions"></help-field></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="rule in securityGroup.securityRules">\n <td>\n <select class="form-control input-sm" ng-model="rule.protocolUI">\n <option value="tcp">TCP</option>\n <option value="udp">UDP</option>\n <option value="*">ANY</option>\n </select>\n </td>\n <td>\n <input\n class="form-control input-sm"\n type="text"\n value="*"\n pattern="^*$|^((25[0-5]|2[0-4]d|[01]?dd?)[.]){3}(25[0-5]|2[0-4]d|[01]?dd?)(/([1-9]|[1-2]d|3[0-2]))?(,((25[0-5]|2[0-4]d|[01]?dd?)[.]){3}(25[0-5]|2[0-4]d|[01]?dd?)(/([1-9]|[1-2]d|3[0-2]))?)*$"\n ng-model="rule.sourceIPCIDRRanges"\n ng-change="ctrl.sourceIPCIDRUpdated(securityGroup.securityRules, $index)"\n required\n />\n </td>\n <td>\n <input\n class="form-control input-sm"\n type="text"\n value="80"\n pattern="^*$|^((d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])|(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])-(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5]))(,((d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])|(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])-(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])))*$"\n ng-model="rule.destPortRanges"\n ng-change="ctrl.portUpdated(securityGroup.securityRules, $index)"\n required\n />\n </td>\n <td>\n <a class="btn-link sm-label" ng-click="ctrl.moveUp(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-arrow-up"></span>\n </a>\n <a class="btn-link sm-label" ng-click="ctrl.moveDown(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-arrow-down"></span>\n </a>\n <a class="btn-link sm-label" ng-click="ctrl.removeRule(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-trash"></span>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class="form-group small" style="margin-top: 20px">\n <div class="col-md-12">\n <button class="add-new col-md-12" ng-click="ctrl.addRule(securityGroup.securityRules)">\n <span class="glyphicon glyphicon-plus-sign"></span> Add new\n <firewall-label label="Firewall"></firewall-label> Rule\n </button>\n </div>\n </div>\n </div>\n</div>\n')}]);const Ae="spinnaker.azure.securityGroup.clone.controller";n(Ae,[fe,he]).controller("azureCloneSecurityGroupController",["$scope","$uibModalInstance","$controller","$state","azureSecurityGroupWriter","securityGroup","application",function(e,n,t,a,r,l,i){const s=this;function o(){if(e.$$destroyed)return;n.close();const t={name:e.securityGroup.name,accountId:e.securityGroup.credentials||e.securityGroup.accountName,region:e.securityGroup.region,provider:"azure"};a.includes("**.firewallDetails")?a.go("^.firewallDetails",t):a.go(".firewallDetails",t)}function c(e,n,t){const a=e[t],r=e[n].priority,l=e[t].priority;e[t]=e[n],e[n]=a,e[n].priority=r,e[t].priority=l}e.firewallLabel=b.get("Firewall"),e.pages={location:"azure/src/securityGroup/configure/createSecurityGroupProperties.html",ingress:"azure/src/securityGroup/configure/createSecurityGroupIngress.html"},l.securityRules=_.map(l.securityRules,function(e){const n=e.destinationPortRange.split("-");return e.startPort=Number(n[0]),e.endPort=Number(n[1]),e}),s.accountUpdated=function(){f.getRegionsForAccount(e.securityGroup.credentials).then(function(n){e.regions=n,e.securityGroup.regions=n,s.updateName()})},s.cancel=function(){n.dismiss()},s.updateName=function(){const n=e.securityGroup;let t=i.name;n.detail&&(t+="-"+n.detail),n.name=t,e.namePreview=t},e.securityGroup=l,e.state={refreshingSecurityGroups:!1},e.taskMonitor=new m({application:i,title:`Updating your ${b.get("firewall")}`,modalInstance:n,onTaskComplete:function(){i.securityGroups.refresh(),i.securityGroups.onNextRefresh(e,o)}}),f.listAccounts("azure").then(function(n){e.accounts=n,s.accountUpdated()}),s.addRule=function(n){n.push({name:e.securityGroup.name+"-Rule"+n.length,priority:0===n.length?100:100*(n.length+1),protocol:"tcp",access:"Allow",direction:"InBound",sourceAddressPrefix:"*",sourcePortRange:"*",destinationAddressPrefix:"*",destinationPortRange:"7001-7001",startPort:7001,endPort:7001})},s.portUpdated=function(e,n){e[n].destinationPortRange=e[n].startPort+"-"+e[n].endPort},s.removeRule=function(e,n){e.splice(n,1)},s.moveUp=function(e,n){0!==n&&c(e,n,n-1)},s.moveDown=function(e,n){n!==e.length-1&&c(e,n,n+1)},s.upsert=function(){e.taskMonitor.submit(function(){const n={cloudProvider:"azure",appName:i.name,region:e.securityGroup.region,subnet:"none",vpcId:"null"};return e.securityGroup.type="upsertSecurityGroup",r.upsertSecurityGroup(e.securityGroup,i,"Clone",n)})}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/configure/createSecurityGroupProperties.html",'<div class="modal-body">\n <div class="form-group">\n <div\n class="col-md-12 well"\n ng-class="{\'alert-danger\': form.securityGroupName.$error.validateUnique, \'alert-info\': !form.securityGroupName.$error.validateUnique}"\n >\n <strong>Your <firewall-label label="firewall"></firewall-label> will be named:</strong>\n <span ng-bind="namePreview"></span>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Detail</div>\n <div class="col-md-4">\n <input\n type="text"\n class="form-control input-sm"\n required\n ng-model="securityGroup.detail"\n ng-change="ctrl.updateName()"\n />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Description</div>\n <div class="col-md-8">\n <input type="text" class="form-control input-sm" ng-model="securityGroup.description" />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Account</div>\n <div class="col-md-8">\n <account-select-field\n required\n component="securityGroup"\n field="credentials"\n accounts="accounts"\n provider="\'azure\'"\n on-change="ctrl.accountUpdated()"\n ></account-select-field>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-12">\n <region-select-field\n label-columns="4"\n component="securityGroup"\n field="region"\n field-columns="8"\n account="securityGroup.credentials"\n provider="\'azure\'"\n on-change="ctrl.regionUpdated()"\n regions="regions"\n ></region-select-field>\n </div>\n </div>\n\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Virtual Network</div>\n <div class="col-md-7">\n <ui-select\n class="form-control input-sm"\n ng-model="securityGroup.selectedVnet"\n on-select="ctrl.selectedVnetChanged($item)"\n >\n <ui-select-match placeholder="Select from existing virtual networks">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="selectVnet in ctrl.selectedVnets | filter: $select.search">\n <span ng-bind-html="selectVnet.name | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Subnet</div>\n <div class="col-md-7">\n <ui-select\n class="form-control input-sm"\n ng-model="securityGroup.selectedSubnet"\n on-select="ctrl.selectedSubnetChanged($item)"\n >\n <ui-select-match placeholder="Select from existing subnets">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="selectSubnet in ctrl.selectedSubnets | filter: $select.search">\n <span ng-bind-html="selectSubnet.name | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/configure/createSecurityGroupIngress.html",'<div class="modal-body">\n <div class="row"></div>\n <div class="form-group">\n <div class="form-group">\n <div class="col-md-12">\n <table class="table table-condensed packed">\n <thead>\n <tr>\n <th style="width: 21%">Protocol</th>\n <th style="width: 32%">\n Source IP/CIDR ranges<help-field key="azure.securityGroup.ingress.sourceIPCIDRRanges"></help-field>\n </th>\n <th style="width: 32%">\n Destination port ranges<help-field key="azure.securityGroup.ingress.destPortRanges"></help-field>\n </th>\n <th style width="15%">Actions<help-field key="azure.securityGroup.ingress.actions"></help-field></th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="rule in securityGroup.securityRules">\n <td>\n <select class="form-control input-sm" ng-model="rule.protocolUI">\n <option value="tcp">TCP</option>\n <option value="udp">UDP</option>\n <option value="*">ANY</option>\n </select>\n </td>\n <td>\n <input\n class="form-control input-sm"\n type="text"\n value="*"\n pattern="^*$|^((25[0-5]|2[0-4]d|[01]?dd?)[.]){3}(25[0-5]|2[0-4]d|[01]?dd?)(/([1-9]|[1-2]d|3[0-2]))?(,((25[0-5]|2[0-4]d|[01]?dd?)[.]){3}(25[0-5]|2[0-4]d|[01]?dd?)(/([1-9]|[1-2]d|3[0-2]))?)*$"\n ng-model="rule.sourceIPCIDRRanges"\n ng-change="ctrl.sourceIPCIDRUpdated(securityGroup.securityRules, $index)"\n required\n />\n </td>\n <td>\n <input\n class="form-control input-sm"\n type="text"\n value="80"\n pattern="^*$|^((d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])|(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])-(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5]))(,((d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])|(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])-(d|[1-9]d{1,3}|[1-5]d{4}|6[0-4]d{3}|65[0-4]d{2}|655[0-2]d|6553[0-5])))*$"\n ng-model="rule.destPortRanges"\n ng-change="ctrl.portUpdated(securityGroup.securityRules, $index)"\n required\n />\n </td>\n <td>\n <a class="btn-link sm-label" ng-click="ctrl.moveUp(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-arrow-up"></span>\n </a>\n <a class="btn-link sm-label" ng-click="ctrl.moveDown(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-arrow-down"></span>\n </a>\n <a class="btn-link sm-label" ng-click="ctrl.removeRule(securityGroup.securityRules, $index)"\n ><span class="glyphicon glyphicon-trash"></span>\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <div class="form-group small" style="margin-top: 20px">\n <div class="col-md-12">\n <button class="add-new col-md-12" ng-click="ctrl.addRule(securityGroup.securityRules)">\n <span class="glyphicon glyphicon-plus-sign"></span> Add new\n <firewall-label label="Firewall"></firewall-label> Rule\n </button>\n </div>\n </div>\n </div>\n</div>\n')}]);const ye="spinnaker.azure.securityGroup.azure.details.controller";e.module(ye,[O,A,fe,Ae]).controller("azureSecurityGroupDetailsCtrl",["$scope","$state","resolvedSecurityGroup","app","azureSecurityGroupWriter","securityGroupReader","$uibModal",function(n,t,a,r,i,s,o){const c=r,d=a;function u(){return s.getSecurityGroupDetails(c,d.accountId,d.provider,d.region,d.vpcId,d.name).then(function(e){n.state.loading=!1,!e||_.isEmpty(e)?p():n.securityGroup=e},function(){p()})}function p(){t.go("^")}n.state={loading:!0},n.firewallLabel=b.get("Firewall"),u().then(()=>{n.$$destroyed||r.securityGroups.onRefresh(n,u)}),this.editInboundRules=function(){o.open({templateUrl:"azure/src/securityGroup/configure/editSecurityGroup.html",controller:"azureEditSecurityGroupCtrl as ctrl",resolve:{securityGroup:function(){return e.copy(n.securityGroup)},application:function(){return c}}})},this.cloneSecurityGroup=function(){o.open({templateUrl:"azure/src/securityGroup/clone/cloneSecurityGroup.html",controller:"azureCloneSecurityGroupController as ctrl",resolve:{securityGroup:function(){const t=e.copy(n.securityGroup);return t.region&&(t.regions=[t.region]),t},application:function(){return c}}})},this.deleteSecurityGroup=function(){const e={application:c,title:"Deleting "+d.name};l.confirm({header:"Really delete "+d.name+"?",buttonText:"Delete "+d.name,account:d.accountId,taskMonitorConfig:e,submitMethod:function(){return n.securityGroup.type="deleteSecurityGroup",i.deleteSecurityGroup(d,c,{cloudProvider:"azure",vpcId:n.securityGroup.vpcId})}})},r.isStandalone&&(r.securityGroups={refresh:u})}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/configure/editSecurityGroup.html",'<form name="form" novalidate validate-on-submit>\n <v2-modal-wizard\n heading="Edit {{securityGroup.name}}: {{securityGroup.region}}: {{securityGroup.credentials}}"\n task-monitor="taskMonitor"\n dismiss="$dismiss()"\n >\n <v2-wizard-page key="Ingress" label="Ingress" done="true">\n <ng-include src="pages.ingress"></ng-include>\n </v2-wizard-page>\n </v2-modal-wizard>\n <div class="modal-footer">\n <button ng-disabled="taskMonitor.submitting" class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <submit-button\n is-disabled="taskMonitor.submitting"\n submitting="taskMonitor.submitting"\n on-click="form.$valid && ctrl.upsert()"\n ></submit-button>\n </div>\n</form>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/clone/cloneSecurityGroup.html",'<v2-modal-wizard heading="Clone {{firewallLabel}}">\n <v2-wizard-page key="Location" label="Location">\n <ng-include src="pages.location"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="Ingress" label="Ingress" done="true">\n <ng-include src="pages.ingress"></ng-include>\n </v2-wizard-page>\n</v2-modal-wizard>\n')}]);const be="spinnaker.azure.securityGroup.reader";n(be,[]).factory("azureSecurityGroupReader",function(){return{resolveIndexedSecurityGroup:function(e,n,t){const a=t.split("/");return e[n.account][n.region][a[a.length-1]]}}});const Se="spinnaker.azure.securityGroup.transformer";n(Se,[]).factory("azureSecurityGroupTransformer",function(){return{normalizeSecurityGroup:function(){}}});const De="spinnaker.azure.serverGroup.configure.instanceArchetype.controller";n(De,[]).controller("azureInstanceArchetypeCtrl",["$scope","instanceTypeService","modalWizardService",function(e,n,t){const a=t.getWizard();e.$watch("command.viewState.instanceProfile",function(){e.command.viewState.instanceProfile&&"custom"!==e.command.viewState.instanceProfile?(a.includePage("instance-type"),a.markClean("instance-profile"),a.markComplete("instance-profile")):a.excludePage("instance-type")}),e.$watch("command.viewState.instanceType",function(e){e&&(a.markClean("instance-profile"),a.markComplete("instance-profile"))})}]);const we="spinnaker.azure.serverGroup.configure.instanceType.controller";n(we,[]).controller("azureInstanceTypeCtrl",["$scope","modalWizardService",function(e,n){n.getWizard().markComplete("instance-type"),n.getWizard().markClean("instance-type")}]);const Ce="spinnaker.azure.serverGroup.configure.advancedSetting.controller";n(Ce,[]).controller("azureServerGroupAdvancedSettingsCtrl",["$scope","modalWizardService",function(e,n){n.getWizard().markComplete("advanced"),e.$watch("form.$valid",function(e){e?n.getWizard().markClean("advanced"):n.getWizard().markDirty("advanced")})}]);const ze="spinnaker.azure.serverGroup.configure.wizard.advancedSettings.selector.directive";e.module(ze,[]).directive("azureServerGroupAdvancedSettingsSelector",function(){return{restrict:"E",templateUrl:"azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html",scope:{},bindToController:{command:"="},controllerAs:"adv",controller:"azureServerGroupAdvancedSettingsSelectorCtrl"}}).controller("azureServerGroupAdvancedSettingsSelectorCtrl",function(){this.addDataDisk=()=>{const n=e.copy(this.command.dataDisks);this.command.dataDisks=n.concat([{lun:0,managedDisk:{storageAccountType:"Standard_LRS"},diskSizeGB:1,caching:"None",createOption:"Empty"}])},this.removeDataDisk=n=>{const t=e.copy(this.command.dataDisks);t.splice(n,1),this.command.dataDisks=t}}),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.html",'<div class="container-fluid form-horizontal">\n <div class="form-group">\n <div class="form-group">\n <div class="col-md-4 sm-label-right">Number of Instances</div>\n <div class="col-md-2">\n <input\n type="number"\n class="form-control input-sm"\n ng-model="adv.command.sku.capacity"\n min="0"\n max="100"\n required\n />\n </div>\n </div>\n <div></div>\n <div class="form-group">\n <div class="col-xs-4 sm-label-right">\n <b>Custom Data</b>\n <help-field key="azure.serverGroup.customData"></help-field>\n </div>\n <div class="col-md-7">\n <input type="text" class="form-control input-sm" ng-model="adv.command.osConfig.customData" />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">\n <b>Custom Script</b>\n <help-field key="azure.serverGroup.scriptLocation"></help-field>\n </div>\n <div class="col-md-7">\n <input type="text" class="form-control input-sm" ng-model="adv.command.customScriptsSettings.fileUris" />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">\n <b>Command To Execute</b>\n <help-field key="azure.serverGroup.commandToExecute"></help-field>\n </div>\n <div class="col-md-7">\n <input\n type="text"\n class="form-control input-sm"\n ng-model="adv.command.customScriptsSettings.commandToExecute"\n />\n </div>\n </div>\n <div class="form-group" ng-if="adv.command.loadBalancerType === \'Azure Application Gateway\'">\n <div class="col-md-4 sm-label-right">\n <input type="checkbox" ng-model="adv.command.enableInboundNAT" ng-disabled="adv.command.zonesEnabled" />\n </div>\n <div class="col-md-7">\n <b>Enable inbound NAT port-forwarding rules to connect to VM instances</b>\n <help-field key="azure.serverGroup.enableInboundNAT"></help-field>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-right">\n <b>User-Assigned Identities</b>\n <help-field key="azure.serverGroup.userAssignedIdentities"></help-field>\n </div>\n <div class="col-md-7">\n <input type="text" class="form-control input-sm" ng-model="adv.command.userAssignedIdentities" />\n </div>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-4 sm-label-left">Data Disks</div>\n <div class="col-md-11">\n <table class="table table-condensed packed tags">\n <thead>\n <tr>\n <th>\n LUN\n <help-field key="azure.serverGroup.lun"></help-field>\n </th>\n <th>\n Size (GB)\n <help-field key="azure.serverGroup.diskSizeGB"></help-field>\n </th>\n <th>\n Type\n <help-field key="azure.serverGroup.managedDisk.storageAccountType"></help-field>\n </th>\n <th>\n Caching\n <help-field key="azure.serverGroup.caching"></help-field>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr ng-repeat="disk in adv.command.dataDisks">\n <td>\n <input type="number" class="form-control input-sm" ng-model="disk.lun" required min="0" />\n </td>\n <td>\n <input type="number" class="form-control input-sm" ng-model="disk.diskSizeGB" required min="1" />\n </td>\n <td>\n <ui-select ng-model="disk.managedDisk.storageAccountType" class="form-control input-sm" required>\n <ui-select-match placeholder="Select...">{{$select.selected}}</ui-select-match>\n <ui-select-choices\n repeat="dataDiskType in adv.command.backingData.dataDiskTypes | filter: $select.search"\n >\n <span ng-bind-html="dataDiskType | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </td>\n <td>\n <ui-select ng-model="disk.caching" class="form-control input-sm" required>\n <ui-select-match placeholder="Select...">{{$select.selected}}</ui-select-match>\n <ui-select-choices\n repeat="dataDiskCachingType in adv.command.backingData.dataDiskCachingTypes | filter: $select.search"\n >\n <span ng-bind-html="dataDiskCachingType | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </td>\n <td>\n <a class="btn btn-link sm-label" style="margin-top: 0" ng-click="adv.removeDataDisk($index)">\n <span class="glyphicon glyphicon-trash"></span>\n </a>\n </td>\n </tr>\n </tbody>\n <tfoot>\n <tr>\n <td colspan="4">\n <button class="btn btn-block btn-sm add-new" ng-click="adv.addDataDisk()">\n <span class="glyphicon glyphicon-plus-sign"></span> Add New Data Disk\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n</div>\n')}]);const ke="spinnaker.azure.serverGroup.configure.basicSettings.image.filter";n(ke,[]).filter("regional",function(){return function(e,n){return _.filter(e,function(e){return e.region===n||null===e.region})}});const Ge="spinnaker.azure.serverGroup.configure.basicSettings";e.module(Ge,[O,Q,ke,T]).controller("azureServerGroupBasicSettingsCtrl",["$scope","$controller","$uibModalStack","$state","imageReader",function(n,t,a,r,l){n.$watch("form.$valid",function(e){e?(E.markClean("basic-settings"),E.markComplete("basic-settings")):E.markIncomplete("basic-settings")}),this.imageChanged=e=>{n.command.imageName=e.imageName,n.command.selectedImage=e,E.markClean("basic-settings")},e.extend(this,t("BasicSettingsMixin",{$scope:n,imageReader:l,$uibModalStack:a,$state:r})),this.stackPattern={test:function(e){return(n.command.viewState.templatingEnabled?/^([a-zA-Z0-9]*(\${.+})*)*$/:/^[a-zA-Z0-9]*$/).test(e)}},this.detailPattern={test:function(e){return(n.command.viewState.templatingEnabled?/^([a-zA-Z0-9-]*(\${.+})*)*$/:/^[a-zA-Z0-9-]*$/).test(e)}}}]);const Ie="spinnaker.azure.serverGroup.configure.wizard.capacity.selector.directive";n(Ie,[]).directive("azureServerGroupCapacitySelector",function(){return{restrict:"E",templateUrl:"azure/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.html",scope:{},bindToController:{command:"="},controllerAs:"cap",controller:"azureServerGroupCapacitySelectorCtrl"}}).controller("azureServerGroupCapacitySelectorCtrl",function(){}),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/capacity/capacitySelector.directive.html",'<div>\n <div class="form-group">\n <div class="col-md-12">\n <p>Sets desired instance count.</p>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-3 sm-label-right">Number of Instances</div>\n <div class="col-md-2">\n <input\n type="number"\n class="form-control input-sm"\n ng-model="cap.command.sku.capacity"\n min="0"\n max="100"\n required\n />\n </div>\n </div>\n</div>\n')}]);const Fe="spinnaker.azure.serverGroup.configure.healthSetting.controller";n(Fe,[]).controller("azureServerGroupHealthSettingsCtrl",["$scope",function(e){void 0===e.command.healthSettings&&(e.command.healthSettings={}),this.healthCheckProtocols=[{displayName:"N/A",name:null},{displayName:"HTTP",name:"http"},{displayName:"TCP",name:"tcp"}],this.requiresHealthCheckPath=function(){return"http"===e.command.healthSettings.protocol},this.changeHealthCheckProtocol=function(n){null==n?(e.command.healthSettings.protocol=null,e.command.healthSettings.port=null,e.command.healthSettings.requestPath=null):this.requiresHealthCheckPath()||(e.command.healthSettings.requestPath=null)}}]);const Te="spinnaker.azure.serverGroup.configure.wizard.healthSettings.selector.directive";n(Te,[]).directive("azureServerGroupHealthSettingsSelector",["azureServerGroupConfigurationService",function(){return{restrict:"E",templateUrl:"azure/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.html",scope:{command:"="}}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.html",'<div class="container-fluid form-horizontal" ng-controller="azureServerGroupHealthSettingsCtrl as healthCtrl">\n <div class="form-group">\n <div class="form-group">\n <div class="col-md-3 sm-label-right">Protocol</div>\n <div class="col-md-7">\n <select\n class="form-control input-sm"\n ng-model="command.healthSettings.protocol"\n ng-options="protocol.name as protocol.displayName for protocol in healthCtrl.healthCheckProtocols"\n ng-change="healthCtrl.changeHealthCheckProtocol(command.healthSettings.protocol)"\n ></select>\n </div>\n </div>\n <div class="form-group" ng-if="command.healthSettings.protocol">\n <div class="col-md-3 sm-label-right">Port</div>\n <div class="col-md-7">\n <input class="form-control input-sm" type="text" ng-model="command.healthSettings.port" required />\n </div>\n </div>\n <div class="form-group" ng-if="healthCtrl.requiresHealthCheckPath()">\n <div class="col-md-3 sm-label-right">Path</div>\n <div class="col-md-7">\n <input class="form-control input-sm" type="text" ng-model="command.healthSettings.requestPath" required />\n </div>\n </div>\n </div>\n <div class="form-group small" style="margin-top: 20px">\n <div class="col-md-9 col-md-offset-3">\n <p>Health settings here will be applied directly to the VM Scale Set.</p>\n </div>\n </div>\n</div>\n')}]);const Ee="spinnaker.azure.serverGroup.configure.imageSettings.controller";n(Ee,[]).controller("azureServerGroupImageSettingsCtrl",["$scope",function(e){this.clearImage=function(){0==e.command.image.isCustom?e.command.image={isCustom:!1}:e.command.image.region=e.command.region},E.markComplete("image-settings"),e.$watch("form.$valid",function(e){e?E.markClean("image-settings"):E.markDirty("image-settings")})}]);const xe="spinnaker.azure.serverGroup.configure.wizard.imageSettingsSelector.directive";n(xe,[]).directive("azureServerGroupImageSettingsSelector",["azureServerGroupConfigurationService",function(){return{restrict:"E",templateUrl:"azure/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.html",scope:{command:"="}}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.html",'<div class="container-fluid form-horizontal" ng-controller="azureServerGroupImageSettingsCtrl as imageCtrl">\n <div class="form-group">\n <div class="col-md-3 sm-label-right">Use custom image?</div>\n <input type="checkbox" ng-model="command.image.isCustom" ng-change="imageCtrl.clearImage()" />\n </div>\n\n <div class="form-group" ng-if="command.image.isCustom === true">\n <div class="form-group">\n <div class="col-md-3 sm-label-right">Region</div>\n <div class="col-md-6">\n <span>{{command.image.region}}</span>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-3 sm-label-right">Image Name</div>\n <div class="col-md-6">\n <input type="text" class="input-sm" ng-model="command.image.imageName" required />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-3 sm-label-right">OS Type</div>\n <div class="col-md-6">\n <input type="text" class="input-sm" ng-model="command.image.ostype" required />\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-3 sm-label-right">URI</div>\n <div class="col-md-6">\n <input type="text" class="input-sm" ng-model="command.image.uri" required />\n </div>\n </div>\n </div>\n</div>\n')}]);const Ne="spinnaker.azure.serverGroup.configure.loadBalancer.controller";n(Ne,[y]).controller("azureServerGroupLoadBalancersCtrl",["$scope","loadBalancerReader",function(e,n){function t(t,a){n.getLoadBalancerDetails("azure",e.command.credentials,e.command.region,t).then(function(n){if(n&&0!==n.length){if(n&&1===n.length){const t=n[0],r=e.command.selectedVnet;e.command.selectedVnet=null,e.command.selectedVnetSubnets=[],e.command.allVnets=[],v.listNetworks().then(function(n){n.azure&&n.azure.forEach(n=>{n.account===e.command.credentials&&n.region===e.command.region&&e.command.allVnets.push(n),n.account===e.command.credentials&&n.region===e.command.region&&("Azure Application Gateway"===a&&n.name==t.vnet||"Azure Load Balancer"===a&&n.name===r.name)&&(e.command.selectedVnet=n,n.subnets.map(function(n){let t=!0;n.devices&&n.devices.map(function(e){e&&"applicationGateways"===e.type&&(t=!1)}),t&&e.command.selectedVnetSubnets.push(n.name)}))})})}}else{e.command.selectedVnet;const n=e.command.selectedSubnet;e.command.selectedVnetSubnets=[],e.command.allVnets=[],v.listNetworks().then(function(t){t.azure&&t.azure.forEach(t=>{t.account===e.command.credentials&&t.region===e.command.region&&(e.command.allVnets.push(t),t.subnets.map(function(t){let a=!0;t.devices&&t.devices.map(function(e){e&&"applicationGateways"===e.type&&(a=!1)}),a&&(e.command.selectedVnetSubnets.push(t.name),t.name===n&&(e.command.selectedSubnet=n))}))})})}})}E.markClean("load-balancers"),e.command.credentials&&e.command.region&&(e.command.viewState.networkSettingsConfigured=!0,e.command.selectedVnetSubnets=[],null!==e.command.loadBalancerName&&void 0!==e.command.loadBalancerName&&(e.useLoadBalancer=!0),t(e.command.loadBalancerName,e.command.loadBalancerType)),this.loadBalancerChanged=function(n){e.command.viewState.networkSettingsConfigured=!0,E.markComplete("load-balancers");const a=e.command.backingData.loadBalancers;let r=null;if(a){const e=a.find(e=>e.name===n);e&&(r=$.getLoadBalancerType(e.loadBalancerType).type)}null===n&&(e.command.loadBalancerName=null),e.command.selectedVnetSubnets=[],e.command.loadBalancerType=r,I.clearCache("networks"),t(n,r)}}]);const Pe="spinnaker.azure.serverGroup.configure.loadBalancer.directive";n(Pe,[]).directive("azureServerGroupLoadBalancersSelector",["azureServerGroupConfigurationService",function(){return{restrict:"E",scope:{command:"="},templateUrl:"azure/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.html"}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.html",'<h5 class="text-center" ng-if="!command.viewState.loadBalancersConfigured">Please select an account and region.</h5>\n<div\n ng-if="command.viewState.loadBalancersConfigured"\n ng-controller="azureServerGroupLoadBalancersCtrl as loadBalancerCtrl"\n>\n <div class="form-group">\n <div class="col-md-3 sm-label-right"><b>Load Balancers</b></div>\n <div class="col-md-7">\n <label for="useLoadBalancerCheckbox">\n <input\n type="checkbox"\n ng-model="useLoadBalancer"\n id="useLoadBalancerCheckbox"\n ng-change="loadBalancerCtrl.loadBalancerChanged(null)"\n />\n Use load balancer\n </label>\n <ui-select\n ng-model="command.loadBalancerName"\n class="form-control input-sm"\n ng-change="loadBalancerCtrl.loadBalancerChanged($select.selected)"\n ng-show="useLoadBalancer"\n >\n <ui-select-match placeholder="select a loadBalancer">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="loadBalancer in command.loadBalancers | filter: $select.search">\n <span ng-bind-html="loadBalancer | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n\n <div class="form-group" ng-show="command.loadBalancerName">\n <div class="col-md-12">\n <div class="well-compact" ng-class="well">\n <h5 class="text-center">\n <p>The load balancer {{command.loadBalancerName}} is an {{command.loadBalancerType}}</p>\n </h5>\n </div>\n </div>\n </div>\n</div>\n')}]);const Re="spinnaker.azure.serverGroup.configure.networkSettings.controller";n(Re,[]).controller("azureServerGroupNetworkSettingsCtrl",["$scope",function(e){E.markClean("network-settings"),e.command.selectedVnet={name:e.command.vnet},e.command.selectedSubnet=e.command.subnet,this.vnetChanged=function(n){e.command.vnet=n,e.command.subnet=e.command.selectedSubnet=null,e.command.selectedVnetSubnets=n.subnets.map(e=>e.name)},this.networkSettingsChanged=function(n){e.command.vnet=e.command.selectedVnet.name,e.command.subnet=n,E.markComplete("network-settings")},this.getVnetName=function(){return e.command.selectedVnet?e.command.selectedVnet.name:"Virtual network was not selected"}}]);const Le="spinnaker.azure.serverGroup.configure.networkSettings.directive";n(Le,[]).directive("azureServerGroupNetworkSettingsSelector",function(){return{restrict:"E",scope:{command:"="},templateUrl:"azure/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.html"}}),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.html",'<h5 class="text-center" ng-if="!command.viewState.networkSettingsConfigured">\n Please select an account, a region and a load balancer first.\n</h5>\n<div\n ng-if="command.viewState.networkSettingsConfigured"\n ng-controller="azureServerGroupNetworkSettingsCtrl as networkSettingCtrl"\n>\n <div class="form-group" ng-if="command.loadBalancerType === \'Azure Load Balancer\' || !command.loadBalancerType">\n <div class="col-md-3 sm-label-right">Virtual Network</div>\n <div class="col-md-7">\n <ui-select\n required\n class="form-control input-sm"\n ng-model="command.selectedVnet"\n on-select="networkSettingCtrl.vnetChanged($item)"\n >\n <ui-select-match placeholder="Select from existing virtual networks">{{$select.selected.name}}</ui-select-match>\n <ui-select-choices repeat="selectVnet in command.allVnets">\n <span ng-bind-html="selectVnet.name"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n\n <div class="form-group">\n <div class="col-md-3 sm-label-right"><b>Subnets</b></div>\n <div class="col-md-7">\n <ui-select\n required\n ng-model="command.selectedSubnet"\n class="form-control input-sm"\n on-select="networkSettingCtrl.networkSettingsChanged($item)"\n >\n <ui-select-match placeholder="Select from an existing subnet">{{$select.selected}}</ui-select-match>\n <ui-select-choices repeat="subnet in command.selectedVnetSubnets | filter: $select.search">\n <span ng-bind-html="subnet | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n\n <div class="form-group" ng-if="!command.viewState.hideClusterNamePreview">\n <div class="col-md-12">\n <div class="well-compact" ng-class="well">\n <h5 class="text-center">\n <p>Your server group will be using a subnet in virtual network:</p>\n <p>\n <strong> {{networkSettingCtrl.getVnetName()}} </strong>\n </p>\n </h5>\n </div>\n </div>\n </div>\n</div>\n')}]);const Me="spinnaker.azure.serverGroup.configure.securityGroups.controller";n(Me,[]).controller("azureServerGroupSecurityGroupsCtrl",["$scope",function(e){E.markClean("security-groups"),E.markComplete("security-groups"),e.command.selectedSecurityGroup={id:e.command.securityGroupName},this.securityGroupChanged=function(n){e.command.securityGroupName=n.id,E.markComplete("security-groups")}}]);const Ue="spinnaker.azure.serverGroup.configure.securityGroupSelector.directive";n(Ue,[]).directive("azureServerGroupSecurityGroupsSelector",["azureServerGroupConfigurationService",function(e){return{restrict:"E",scope:{command:"="},templateUrl:"azure/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.html",link:function(n){n.firewallLabel=b.get("firewall"),n.getSecurityGroupRefreshTime=function(){return I.get("securityGroups").getStats().ageMax},n.refreshSecurityGroups=function(){n.refreshing=!0,e.refreshSecurityGroups(n.command).then(function(){n.refreshing=!1})}}}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.html",'<h5 class="text-center" ng-if="!command.viewState.securityGroupsConfigured">Please select an account and region.</h5>\n<div\n ng-if="command.viewState.securityGroupsConfigured"\n ng-controller="azureServerGroupSecurityGroupsCtrl as securityGroupCtrl"\n>\n <div class="form-group">\n <div class="col-md-3 sm-label-right">\n <b><firewall-label label="Firewalls"></firewall-label></b>\n </div>\n <div class="col-md-7">\n <ui-select\n ng-model="command.selectedSecurityGroup"\n class="form-control input-sm"\n on-select="securityGroupCtrl.securityGroupChanged($item)"\n >\n <ui-select-match placeholder="select a {{firewallLabel}}">{{$select.selected.id}}</ui-select-match>\n <ui-select-choices\n repeat="securityGroup in command.backingData.filtered.securityGroups | anyFieldFilter: {name: $select.search, id: $select.search}"\n >\n <span ng-bind-html="securityGroup.id | highlight: $select.search"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n\n <div class="form-group small" style="margin-top: 20px">\n <div class="col-md-9 col-md-offset-3">\n <p>\n <span ng-if="refreshing"><span class="fa fa-sync-alt fa-spin"></span></span>\n <firewall-label label="Firewalls"></firewall-label>\n <span ng-if="!refreshing">last refreshed {{ getSecurityGroupRefreshTime() | timestamp }}</span>\n <span ng-if="refreshing"> refreshing...</span>\n </p>\n <p>\n If you\'re not finding a <firewall-label label="firewall"></firewall-label> that was recently added,\n <a href ng-click="refreshSecurityGroups()">click here</a> to refresh the list.\n </p>\n </div>\n </div>\n</div>\n')}]);const Ve="spinnaker.azure.serverGroup.configure.wizard.tags.directive";n(Ve,[]).directive("azureTagsSelector",function(){return{restrict:"E",templateUrl:"azure/src/serverGroup/configure/wizard/tags/tagsSelector.directive.html",scope:{},bindToController:{command:"="},controllerAs:"tagsSelectorCtrl",controller:"TagsSelectorCtrl"}}).controller("TagsSelectorCtrl",["$scope",function(){this.getTagResult=function(){return $.checkTags(this.command.instanceTags)}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/tags/tagsSelector.directive.html",'<div class="form-group">\n <div class="col-md-12" style="color: red" ng-if="!tagsSelectorCtrl.getTagResult().isValid">\n {{ tagsSelectorCtrl.getTagResult().errorMessage }}\n </div>\n <div class="col-md-4 sm-label-left">\n <b>Custom Tags</b>\n <help-field key="azure.serverGroup.customTags"></help-field>\n </div>\n <div class="col-md-12">\n <map-editor\n model="tagsSelectorCtrl.command.instanceTags"\n add-button-label="Add New Tags"\n allow-empty="true"\n ></map-editor>\n </div>\n</div>\n')}]);const He="spinnaker.azure.serverGroup.configure.wizard.capacity.zone.directive";n(He,[]).directive("azureZoneSelector",function(){return{restrict:"E",templateUrl:"azure/src/serverGroup/configure/wizard/zones/zoneSelector.directive.html",scope:{},bindToController:{command:"="},controllerAs:"vm",controller:["$scope",function(e){this.updateEnableInboundNAT=()=>{e.vm.command.zonesEnabled&&(e.vm.command.enableInboundNAT=!1)}}]}}),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/zones/zoneSelector.directive.html",'<div class="form-group" ng-if="vm.command.region">\n <div class="col-md-10">\n <label ng-if="vm.command.backingData.filtered.zones && vm.command.backingData.filtered.zones.length !== 0">\n <input type="checkbox" ng-model="vm.command.zonesEnabled" ng-change="vm.updateEnableInboundNAT()" />\n Set availability zones\n </label>\n <ui-select multiple ng-if="vm.command.zonesEnabled" ng-model="vm.command.zones" class="form-control input-sm">\n <ui-select-match>{{ $item }}</ui-select-match>\n <ui-select-choices repeat="zone as zone in vm.command.backingData.filtered.zones">\n <span>{{ zone }}</span>\n </ui-select-choices>\n </ui-select>\n </div>\n</div>\n<h5 class="text-center" ng-if="!vm.command.region">Please select a region.</h5>\n<h5\n class="text-center"\n ng-if="vm.command.region && !(vm.command.backingData.filtered.zones && vm.command.backingData.filtered.zones.length !== 0)"\n>\n Current region does not support availability zones\n</h5>\n')}]);const _e="spinnaker.azure.serverGroup.configure";n(_e,[Ge,Ne,De,we,Me,Ce,Te,xe,Ee,Fe,Pe,Ie,Ue,ce,ze,Re,Le,He,Ve]);const Oe="spinnaker.azure.serverGroup.configure.service";e.module(Oe,[K,y,A,F,ee]).factory("azureServerGroupConfigurationService",["$q","azureImageReader","securityGroupReader","cacheInitializer","loadBalancerReader","azureInstanceTypeService",function(n,t,a,r,l,i){const s=["Standard_LRS","StandardSSD_LRS","Premium_LRS"],o=["None","ReadOnly","ReadWrite"],c=["EC2","ELB"],d=["OldestInstance","NewestInstance","OldestLaunchConfiguration","ClosestToNextInstanceHour","Default"];function u(n){const t={dirty:{}};if(n.region){const a=[t.dirty];a.push(function(e){const n=e,t={dirty:{}},a=[n.region],{credentialsKeyedByAccount:r}=n.backingData,{locationToInstanceTypesMap:l}=r[n.credentials];if(a.every(e=>!e))return t;const s=i.getAvailableTypesForRegions(l,a).map(e=>e.name),o=n.instanceType;_.every([o,!_.startsWith(o,"custom"),!_.includes(s,o)])&&(t.dirty.instanceType=n.instanceType,n.instanceType=null);return n.backingData.filtered.instanceTypes=s,t}(n).dirty),e.extend(...a)}else n.backingData.filtered.instanceTypes=[];return t}function p(e){const n={dirty:{}},t=e.backingData.filtered;if(!e.region)return n;let{regionsSupportZones:a,availabilityZones:r}=e.backingData.credentialsKeyedByAccount[e.credentials];return a=a||[],r=r||[],t.zones=a.includes(e.region)?r:[],n}function g(e){const n=e.backingData.securityGroups[e.credentials]||{azure:{}};return _.chain(n[e.region]).sortBy("name").value()}function m(e){const n={dirty:{}};let t;e.backingData.filtered.securityGroups&&(t=e.backingData.filtered.securityGroups);const a=g(e);return e.selectedSecurityGroup&&(e.selectedSecurityGroup=null,n.dirty.securityGroups=!0),t!=a&&(e.backingData.filtered.securityGroups=a,n.dirty.securityGroups=!0),0===e.backingData.filtered.securityGroups.length?e.viewState.securityGroupsConfigured=!1:e.viewState.securityGroupsConfigured=!0,n}function v(e){return _.chain(e).map("name").uniq().value().sort()}function h(e){const n={dirty:{}},t=e.loadBalancers,a=v(e.backingData.loadBalancers);if(t&&e.loadBalancers){const r=_.intersection(a,e.loadBalancers),l=_.xor(r,t);e.loadBalancers=r,l.length&&(n.dirty.loadBalancers=l)}return e.backingData.filtered.loadBalancers=a,n}function B(e){const n=e.backingData.loadBalancers,t=_.filter(n,function(n){return n.account===e.credentials&&n.region===e.region});return e.loadBalancers=v(t),e.viewState.loadBalancersConfigured=!0,{dirty:{}}}return{configureUpdateCommand:function(n){n.backingData={healthCheckTypes:e.copy(c),terminationPolicies:e.copy(d)}},configureCommand:function(t,r){return n.all([f.getCredentialsKeyedByAccount("azure"),a.loadSecurityGroups(),l.loadLoadBalancers(t.name)]).then(function([n,t,a]){var l;r.backingData={credentialsKeyedByAccount:n,securityGroups:t,loadBalancers:a,dataDiskTypes:e.copy(s),dataDiskCachingTypes:e.copy(o),accounts:_.keys(n),filtered:{}},(l=r).regionChanged=function(n,t=!1){const a={dirty:{}};return n.region&&n.credentials&&(e.extend(a.dirty,B(n).dirty),e.extend(a.dirty,m(n).dirty),e.extend(a.dirty,u(n).dirty),e.extend(a.dirty,p(n).dirty)),t||(n.loadBalancerName=null,n.loadBalancerType=null,n.vnet=null,n.vnetResourceGroup=null,n.subnet=null,n.selectedSubnet=null,n.selectedVnet=null,n.selectedVnetSubnets=[],n.viewState.networkSettingsConfigured=!1,n.selectedSecurityGroup=null,n.securityGroupName=null,n.zonesEnabled=!1,n.zones=[]),a},l.credentialsChanged=function(n,t){const a={dirty:{}},r=n.backingData;if(n.credentials){const l=r.credentialsKeyedByAccount[n.credentials]||{regions:[]};r.filtered.regions=l.regions,_.chain(r.filtered.regions).some({name:n.region}).value()?e.extend(a.dirty,n.regionChanged(n,t).dirty):(n.region=null,a.dirty.region=!0),n.region&&e.extend(a.dirty,B(n).dirty),e.extend(a.dirty,u(n).dirty)}else n.region=null;return a}})},configureImages:function(e){const n={dirty:{}};let t=null;return e.viewState.disableImageSelection||(e.region?(t=e.backingData.packageImages.filter(function(n){return n.amis&&n.amis[e.region]}).map(function(n){return{imageName:n.imageName,ami:n.amis?n.amis[e.region][0]:null}}),e.amiName&&!t.some(function(n){return n.imageName===e.amiName})&&(n.dirty.amiName=!0,e.amiName=null)):e.amiName=null,e.backingData.filtered.images=t),n},configureSecurityGroupOptions:m,configureLoadBalancerOptions:h,refreshLoadBalancers:function(e,n){return l.listLoadBalancers("azure").then(function(t){e.backingData.loadBalancers=t,n||h(e)})},refreshSecurityGroups:function(e,n){return r.refreshCache("securityGroups").then(function(){return a.getAllSecurityGroups().then(function(t){e.backingData.securityGroups=t,n||m(e)})})},getRegionalSecurityGroups:g,refreshInstanceTypes:function(e){return r.refreshCache("instanceTypes").then(function(){return i.getAllTypesByRegion().then(function(n){e.backingData.instanceTypes=n,u(e)})})},configureZones:p}}]);const Qe="spinnaker.azure.cloneServerGroup.controller";n(Qe,[O,Oe,ce,x]).controller("azureCloneServerGroupCtrl",["$scope","$uibModalInstance","$q","$state","serverGroupWriter","azureServerGroupConfigurationService","serverGroupCommand","application","title",function(e,n,t,a,r,l,i,s,o){function c(){if(e.$$destroyed)return;const n=e.taskMonitor.task.execution.stages.find(e=>"cloneServerGroup"===e.type);if(n&&n.context["deploy.server.groups"]){const t=n.context["deploy.server.groups"][e.command.region];if(t){const n={serverGroup:t,accountId:e.command.credentials,region:e.command.region,provider:"azure"};let r="^.^.^.clusters.serverGroup";a.includes("**.clusters.serverGroup")&&(r="^.serverGroup"),a.includes("**.clusters.cluster.serverGroup")&&(r="^.^.serverGroup"),a.includes("**.clusters")&&(r=".serverGroup"),a.go(r,n)}}}function d(){l.configureCommand(s,i).then(function(){const n=i.viewState.mode;"clone"!==n&&"create"!==n||(i.viewState.useAllImageSelection=!0),e.state.loaded=!0,function(){const e=i.viewState.mode;"clone"!==e&&"editPipeline"!==e||(E.markComplete("basic-settings"),E.markComplete("load-balancers"),E.markComplete("network-settings"),E.markComplete("security-groups"),E.markComplete("instance-type"),E.markComplete("zones"))}(),p(e.command.credentialsChanged(e.command,!0)),p(e.command.regionChanged(e.command,!0)),e.$watch("command.credentials",u(e.command.credentialsChanged)),e.$watch("command.region",u(e.command.regionChanged))})}function u(n){return function(t,a){t!==a&&p(n(e.command))}}function p(e){e.dirty.loadBalancers&&(E.markDirty("load-balancers"),E.markDirty("network-settings")),e.dirty.securityGroups&&E.markDirty("security-groups"),e.dirty.instanceType&&E.markDirty("instance-type"),(e.dirty.zoneEnabled||e.dirty.zones)&&E.markDirty("zones")}e.pages={templateSelection:"azure/src/serverGroup/configure/wizard/templateSelection.html",basicSettings:"azure/src/serverGroup/configure/wizard/basicSettings/basicSettings.html",imageSettings:"azure/src/serverGroup/configure/wizard/image/imageSettings.html",healthSettings:"azure/src/serverGroup/configure/wizard/healthSettings/healthSettings.html",loadBalancers:"azure/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html",networkSettings:"azure/src/serverGroup/configure/wizard/networkSettings/networkSettings.html",securityGroups:"azure/src/serverGroup/configure/wizard/securityGroup/securityGroups.html",instanceType:"azure/src/serverGroup/configure/wizard/instanceType/instanceType.html",zones:"azure/src/serverGroup/configure/wizard/capacity/zones.html",tags:"azure/src/serverGroup/configure/wizard/tags/tags.html",advancedSettings:"azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html"},e.firewallsLabel=b.get("Firewalls"),e.title=o,e.applicationName=s.name,e.application=s,e.command=i,e.command.backingData=e.command.backingData||{},e.command.backingData.filtered=e.command.backingData.filtered||{},e.command.backingData.filtered.regions=e.command.backingData.filtered.regions||[],e.state={loaded:!1,requiresTemplateSelection:!!i.viewState.requiresTemplateSelection},this.templateSelectionText={copied:["account, region, subnet, cluster name (stack, details)","load balancers",b.get("firewalls"),"instance type","all fields on the Advanced Settings page"],notCopied:[],additionalCopyText:"If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group."},e.command.viewState.disableStrategySelection||this.templateSelectionText.notCopied.push("the deployment strategy (if any) used to deploy the most recent server group"),e.taskMonitor=new m({application:s,title:"Creating your server group",modalInstance:n,onTaskComplete:function(){s.serverGroups.refresh(),s.serverGroups.onNextRefresh(e,c)}}),this.submit=function(){if("editPipeline"===e.command.viewState.mode||"createPipeline"===e.command.viewState.mode)return n.close(e.command);e.taskMonitor.submit(function(){return r.cloneServerGroup(e.command,s)})},this.cancel=function(){n.dismiss()},this.toggleSuspendedProcess=function(n){e.command.suspendedProcesses=e.command.suspendedProcesses||[];const t=e.command.suspendedProcesses.indexOf(n);-1===t?e.command.suspendedProcesses.push(n):e.command.suspendedProcesses.splice(t,1)},this.processIsSuspended=function(n){return e.command.suspendedProcesses.includes(n)},e.state.requiresTemplateSelection?e.state.loaded=!0:d(),this.templateSelected=()=>{e.state.requiresTemplateSelection=!1,d()},this.isValid=function(){return e.command&&e.command.application&&e.command.credentials&&e.command.instanceType&&e.command.region&&(!e.command.zonesEnabled||0!==e.command.zones.length)&&$.checkTags(e.command.instanceTags).isValid}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/templateSelection.html",'<deploy-initializer\n cloud-provider="azure"\n command="command"\n application="application"\n parent-state="state"\n dismiss="ctrl.cancel()"\n template-selection-text="ctrl.templateSelectionText"\n on-template-selected="ctrl.templateSelected()"\n></deploy-initializer>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/basicSettings/basicSettings.html",'<div class="container-fluid form-horizontal" ng-controller="azureServerGroupBasicSettingsCtrl as basicSettingsCtrl">\n <div class="modal-body">\n <ng-form name="basicSettings">\n <div class="form-group">\n <div class="col-md-3 sm-label-right">Account</div>\n <div class="col-md-7">\n <account-select-field\n required\n read-only="command.viewState.readOnlyFields.credentials"\n component="command"\n field="credentials"\n accounts="command.backingData.accounts"\n provider="\'azure\'"\n ></account-select-field>\n </div>\n </div>\n <region-select-field\n required\n read-only="command.viewState.readOnlyFields.region"\n label-columns="3"\n component="command"\n field="region"\n account="command.credentials"\n provider="\'azure\'"\n regions="command.backingData.filtered.regions"\n ></region-select-field>\n <div class="form-group">\n <div class="col-md-3 sm-label-right">\n Stack\n <help-field key="azure.serverGroup.stack"></help-field>\n </div>\n <div class="col-md-7">\n <input\n required\n type="text"\n class="form-control input-sm"\n ng-pattern="basicSettingsCtrl.stackPattern"\n name="stack"\n ng-model="command.stack"\n />\n </div>\n </div>\n <div class="form-group row slide-in" ng-if="basicSettings.stack.$error.pattern">\n <div class="col-sm-9 col-sm-offset-2 error-message">\n <span>Stack can only contain letters and numbers.</span>\n </div>\n </div>\n <div class="form-group">\n <div class="col-md-3 sm-label-right">\n Detail\n <help-field key="azure.serverGroup.detail"></help-field>\n </div>\n <div class="col-md-7">\n <input\n required\n type="text"\n class="form-control input-sm"\n ng-pattern="basicSettingsCtrl.detailPattern"\n name="details"\n ng-model="command.freeFormDetails"\n />\n </div>\n </div>\n <div class="form-group row slide-in" ng-if="basicSettings.details.$error.pattern">\n <div class="col-sm-9 col-sm-offset-2 error-message">\n <span>Detail can only contain letters, numbers, and dashes(-).</span>\n </div>\n </div>\n <div class="form-group" ng-if="!command.viewState.disableImageSelection">\n <div class="col-md-3 sm-label-right">\n Image\n <help-field key="azure.serverGroup.imageName"></help-field>\n </div>\n <div class="col-md-9">\n <ui-select\n class="form-control input-sm"\n required\n ng-model="command.selectedImage"\n on-select="basicSettingsCtrl.imageChanged($item)"\n >\n <ui-select-match placeholder="Pick an image">{{$select.selected.imageName}}</ui-select-match>\n <ui-select-choices repeat="image in command.images | regional:command.region | filter:$select.search">\n <span ng-bind-html="image.imageName"></span>\n </ui-select-choices>\n </ui-select>\n </div>\n </div>\n <deployment-strategy-selector\n ng-if="!command.viewState.disableStrategySelection && command.selectedProvider"\n command="command"\n ></deployment-strategy-selector>\n <div class="form-group" ng-if="!command.viewState.hideClusterNamePreview">\n <div class="col-md-12">\n <div\n class="well-compact"\n ng-class="basicSettingsCtrl.showPreviewAsWarning() ? \'alert alert-warning\' : \'well\'"\n >\n <h5 class="text-center">\n <p>Your server group will be in the cluster:</p>\n <p>\n <strong>\n {{basicSettingsCtrl.getNamePreview()}}\n <span ng-if="basicSettingsCtrl.createsNewCluster()"> (new cluster)</span>\n </strong>\n </p>\n <div\n class="text-left"\n ng-if="!basicSettingsCtrl.createsNewCluster() && command.viewState.mode === \'create\' && latestServerGroup"\n >\n <p>There is already a server group in this cluster. Do you want to clone it?</p>\n <p>\n Cloning copies the entire configuration from the selected server group, allowing you to modify\n whichever fields (e.g. image) you need to change in the new server group.\n </p>\n <p>\n To clone a server group, select "Clone" from the "Server Group Actions" menu in the details view of\n the server group.\n </p>\n <p>\n <a href ng-click="basicSettingsCtrl.navigateToLatestServerGroup()">\n Go to details for {{latestServerGroup.name}}\n </a>\n </p>\n </div>\n </h5>\n </div>\n </div>\n </div>\n </ng-form>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/image/imageSettings.html",'<div class="row">\n <div class="col-md-12">\n <azure-server-group-image-settings-selector command="command"></azure-server-group-image-settings-selector>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/healthSettings/healthSettings.html",'<div class="row">\n <div class="col-md-12">\n <azure-server-group-health-settings-selector command="command"></azure-server-group-health-settings-selector>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/loadBalancers/loadBalancers.html",'<div class="row">\n <azure-server-group-load-balancers-selector command="command"></azure-server-group-load-balancers-selector>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/networkSettings/networkSettings.html",'<div class="row">\n <azure-server-group-network-settings-selector command="command"></azure-server-group-network-settings-selector>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/securityGroup/securityGroups.html",'<div class="row">\n <azure-server-group-security-groups-selector command="command"></azure-server-group-security-groups-selector>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/instanceType/instanceType.html",'<div ng-show="!!(command.region)">\n <v2-instance-archetype-selector ng-if="command.region" command="command"></v2-instance-archetype-selector>\n <div style="padding: 0 15px">\n <v2-instance-type-selector\n ng-if="command.viewState.instanceProfile && !(command.viewState.instanceProfile === \'custom\' || command.viewState.instanceProfile === \'buildCustom\' )"\n command="command"\n ></v2-instance-type-selector>\n </div>\n</div>\n<h5 class="text-center" ng-if="!command.region">Please select a region.</h5>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/capacity/zones.html",'<ng-form name="zonesSubForm">\n <div class="container-fluid form-horizontal">\n <azure-zone-selector command="command"></azure-zone-selector>\n </div>\n</ng-form>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/tags/tags.html",'<ng-form name="zonesSubForm">\n <div class="container-fluid form-horizontal">\n <azure-tags-selector command="command"></azure-tags-selector>\n </div>\n</ng-form>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/advancedSettings/advancedSettings.html",'<div class="row">\n <div class="col-md-12">\n <azure-server-group-advanced-settings-selector command="command"></azure-server-group-advanced-settings-selector>\n </div>\n</div>\n')}]);class qe extends q.Component{constructor(e){super(e),this.state={verified:!1},this.handleVerification=e=>{this.setState({verified:e})}}render(){const{onSubmit:e,onCancel:n,isValid:t,account:a}=this.props,{verified:r}=this.state;return q.createElement("div",{className:"modal-footer"},q.createElement(N,{expectedValue:a,onValidChange:this.handleVerification}),q.createElement("button",{className:"btn btn-default",onClick:n},"Cancel"),q.createElement("button",{type:"submit",className:"btn btn-primary",onClick:e,disabled:!t||!r},"Submit"))}}const Xe=class e extends q.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=()=>{const{command:e,taskMonitor:n}=this.state,{serverGroup:t,application:a}=this.props;n.submit(()=>P.serverGroupWriter.rollbackServerGroup(t,a,e))},this.filterServerGroups=e=>e.filter(e=>0!==e.instanceCounts.total).sort((e,n)=>n.name.localeCompare(e.name)),this.isValid=()=>void 0!==this.state.command.rollbackContext.restoreServerGroupName,this.handleServerGroupChange=e=>{const{disabledServerGroups:n}=this.props,t={...this.state.command};t.rollbackContext.restoreServerGroupName=e.value;const a=this.filterServerGroups(n).find(function(n){return n.name===e.value});t.targetSize=a.capacity.max,this.setState({command:t})},this.handleTaskReasonChange=e=>{const n={...this.state.command};n.reason=e,this.setState({command:n})};const{application:n,serverGroup:t}=e;this.state={taskMonitor:new m({application:n,title:"Rolling back your server group",modalInstance:m.modalInstanceEmulation(()=>this.props.dismissModal())}),submitting:!0,command:{interestingHealthProviderNames:[],rollbackType:"EXPLICIT",rollbackContext:{rollbackServerGroupName:t.name,enableAndDisableOnly:!0}}}}static show(n){return d.show(e,n,{})}render(){const{command:e,taskMonitor:n,submitting:t}=this.state,{serverGroup:a,disabledServerGroups:r}=this.props,l=this.isValid(),i=this.filterServerGroups(r).map(e=>({label:e.name,value:e.name}));return q.createElement(X,{onHide:this.close},q.createElement(R,{monitor:n}),t&&q.createElement("form",{role:"form"},q.createElement(u,{dismiss:this.close}),q.createElement(X.Header,null,q.createElement(X.Title,null,"Rollback ",a.name)),q.createElement(X.Body,null,q.createElement("div",{className:"row"},q.createElement("div",{className:"col-sm-3 sm-label-right"},"Restore to"),q.createElement("div",{className:"col-sm-6"},q.createElement(j,{value:e.rollbackContext.restoreServerGroupName,onChange:this.handleServerGroupChange,options:i}))),q.createElement(L,{reason:e.taskReason,onChange:this.handleTaskReasonChange})),q.createElement(qe,{onSubmit:this.submit,onCancel:this.close,isValid:l,account:a.account})))}};Xe.defaultProps={closeModal:p,dismissModal:p};let We=Xe;const je="spinnaker.azure.serverGroup.details.controller";e.module(je,[O,de,x]).controller("azureServerGroupDetailsCtrl",["$scope","$state","$templateCache","app","serverGroup","azureServerGroupCommandBuilder","$uibModal","serverGroupWriter",function(n,t,a,r,i,s,o,c){function d(){const a=function(){let e=_.find(r.serverGroups.data,function(e){return e.name===i.name&&e.account===i.accountId&&e.region===i.region});return e||r.loadBalancers.data.some(function(n){if(n.account===i.accountId&&n.region===i.region)return n.serverGroups.some(function(n){if(n.name===i.name)return e=n,!0})}),e||t.go("^"),e}();return U.getServerGroup(r.name,i.accountId,i.region,i.name).then(function(l){if(n.state.loading=!1,e.extend(l,a),l.account=i.accountId,n.serverGroup=l,_.isEmpty(n.serverGroup))t.go("^");else{if(n.image=l.image?l.image:void 0,l.image&&l.image.description){l.image.description.split(", ").forEach(function(e){const n=e.split("=");2===n.length&&"ancestor_name"===n[0]&&(l.image.baseImage=n[1])})}l.launchConfig&&l.launchConfig.securityGroups&&(n.securityGroups=_.chain(l.launchConfig.securityGroups).map(function(e){return _.find(r.securityGroups.data,{accountName:i.accountId,region:i.region,id:e})||_.find(r.securityGroups.data,{accountName:i.accountId,region:i.region,name:e})}).compact().value())}})}n.state={loading:!0},n.firewallsLabel=b.get("Firewalls"),this.application=r,d().then(()=>{n.$$destroyed||r.serverGroups.onRefresh(n,d)}),this.destroyServerGroup=function(){const e=n.serverGroup,a={name:e.name,accountId:e.account,region:e.region},i={application:r,title:"Destroying "+e.name,onTaskComplete:function(){t.includes("**.serverGroup",a)&&t.go("^")}},s={header:"Really destroy "+e.name+"?",buttonText:"Destroy "+e.name,account:e.account,taskMonitorConfig:i,submitMethod:function(){return c.destroyServerGroup(e,r)}};M.addDestroyWarningMessage(r,e,s),l.confirm(s)},this.disableServerGroup=function(){const e=n.serverGroup,t={application:r,title:"Disabling "+e.name},a={header:"Really disable "+e.name+"?",buttonText:"Disable "+e.name,account:e.account,taskMonitorConfig:t,submitMethod:()=>c.disableServerGroup(e,r)};M.addDisableWarningMessage(r,e,a),l.confirm(a)},this.enableServerGroup=function(){const t=n.serverGroup,a={application:r,title:"Enabling "+t.name};l.confirm({header:"Really enable "+t.name+"?",buttonText:"Enable "+t.name,account:t.account,taskMonitorConfig:a,submitMethod:n=>c.enableServerGroup(t,r,e.extend(n,{interestingHealthProviderNames:[]}))})},this.rollbackServerGroup=()=>{const e=n.serverGroup,t=_.find(r.clusters,{name:e.cluster,account:e.account}),a=_.filter(t.serverGroups,{isDisabled:!0,region:e.region});We.show({application:r,serverGroup:e,disabledServerGroups:a})},this.cloneServerGroup=e=>{o.open({templateUrl:"azure/src/serverGroup/configure/wizard/serverGroupWizard.html",controller:"azureCloneServerGroupCtrl as ctrl",size:"lg",resolve:{title:()=>"Clone "+e.name,application:()=>r,serverGroupCommand:()=>s.buildServerGroupCommandFromExisting(r,e)}})},this.truncateCommitHash=function(){return n.serverGroup&&n.serverGroup.buildInfo&&n.serverGroup.buildInfo.commit?n.serverGroup.buildInfo.commit.substring(0,8):null}}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/serverGroupWizard.html",'<div>\n <div ng-if="state.requiresTemplateSelection">\n <ng-include src="pages.templateSelection"></ng-include>\n </div>\n <div ng-if="!state.loaded" style="height: 200px" class="horizontal center middle">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n <div>\n <form name="serverGroupWizardForm" class="form-horizontal" novalidate validate-on-submit>\n <v2-modal-wizard\n ng-show="state.loaded && !state.requiresTemplateSelection"\n heading="{{title}}"\n task-monitor="taskMonitor"\n dismiss="$dismiss()"\n >\n <v2-wizard-page key="basic-settings" label="Basic Settings" hide-subheading="true">\n <ng-include src="pages.basicSettings"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="image-settings" label="Image">\n <ng-include src="pages.imageSettings"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="load-balancers" label="Load Balancers" mark-complete-on-view="false">\n <ng-include src="pages.loadBalancers"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="network-settings" label="Network Settings" mark-complete-on-view="false">\n <ng-include src="pages.networkSettings"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="health-settings" label="Health" mark-complete-on-view="false">\n <ng-include src="pages.healthSettings"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="security-groups" label="{{firewallsLabel}}" mark-complete-on-view="false" done="true">\n <ng-include src="pages.securityGroups"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="instance-type" label="Instance Type" mark-complete-on-view="false" done="false">\n <ng-include src="pages.instanceType"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="zones" label="Zones" mark-complete-on-view="false" done="false">\n <ng-include src="pages.zones"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="tags" label="Tags" mark-complete-on-view="false" done="true">\n <ng-include src="pages.tags"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="advanced-settings" label="Advanced Settings" mark-complete-on-view="false" done="true">\n <ng-include src="pages.advancedSettings"></ng-include>\n </v2-wizard-page>\n </v2-modal-wizard>\n <div class="modal-footer" ng-if="state.loaded">\n <button ng-disabled="taskMonitor.submitting" class="btn btn-default btn-cancel" ng-click="ctrl.cancel()">\n Cancel\n </button>\n <submit-button\n is-disabled="taskMonitor.submitting || !ctrl.isValid()"\n label="command.viewState.submitButtonLabel"\n submitting="taskMonitor.submitting"\n on-click="serverGroupWizardForm.$valid && ctrl.submit()"\n is-new="true"\n ></submit-button>\n </div>\n </form>\n </div>\n</div>\n')}]);const Ye="spinnaker.azure.serverGroup.details.azure";n(Ye,[je]);const Ze="spinnaker.azure.validation.applicationName";n(Ze,[]).factory("azureApplicationNameValidator",function(){return{validate:function(e){const n=[];return e&&e.length&&function(e,n){/^([a-zA-Z][a-zA-Z0-9]*)?$/.test(e)||n.push("The application name must begin with a letter and must contain only letters or digits. No special characters are allowed.")}(e,n),{warnings:[],errors:n}}}}).run(["azureApplicationNameValidator",function(e){V.registerValidator("azure",e)}]);!function(e,n){void 0===n&&(n={});var t=n.insertAt;if("undefined"!=typeof document){var a=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===t&&a.firstChild?a.insertBefore(r,a.firstChild):a.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}('.cloud-provider-logo .icon-azure {\n -webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 22.1.0%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg version%3D%221.1%22 id%3D%22Layer_1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%09 viewBox%3D%220 0 48 48%22 style%3D%22enable-background%3Anew 0 0 48 48%3B%22 xml%3Aspace%3D%22preserve%22%3E%3Cstyle type%3D%22text%2Fcss%22%3E%09.st0%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2300A2D8%3B%7D%09.st1%7Bfill%3A%23F79E1C%3B%7D%09.st2%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%232ABAEC%3B%7D%09.st3%7Bfill%3A%23F7B218%3B%7D%09.st4%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3Anone%3B%7D%09.st5%7Bfill%3A%2300A2D8%3B%7D%09.st6%7Bfill%3A%232ABAEC%3B%7D%09.st7%7Bfill%3A%23323A45%3B%7D%09.st8%7Bfill%3A%2388909B%3B%7D%09.st9%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st10%7Bfill%3A%23A3BF3A%3B%7D%09.st11%7Bfill%3A%2380A23E%3B%7D%09.st12%7Bfill%3A%237B4D87%3B%7D%09.st13%7Bfill%3A%232F75BB%3B%7D%09.st14%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2385C9D5%3B%7D%09.st15%7Bopacity%3A0.15%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st16%7Bfill%3A%23A5D9E2%3B%7D%09.st17%7Bfill%3A%2385C9D5%3B%7D%09.st18%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23323A45%3B%7D%09.st19%7Bfill%3A%23FFFFFF%3B%7D%09.st20%7Bfill%3A%23DAEFF3%3B%7D%09.st21%7Bfill%3A%232A65AF%3B%7D%09.st22%7Bfill%3A%23F6ECF4%3B%7D%09.st23%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%232F75BB%3B%7D%09.st24%7Bfill%3Anone%3B%7D%09.st25%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F9BA19%3B%7D%09.st26%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23A3BF3A%3B%7D%09.st27%7Bfill%3A%23F6931D%3B%7D%09.st28%7Bfill%3A%235E6D80%3B%7D%09.st29%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3B%7D%09.st30%7Bfill%3A%2300B8E2%3B%7D%09.st31%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%235E6D80%3B%7D%09.st32%7Bfill%3Anone%3Bstroke%3A%2385C9D5%3Bstroke-width%3A0%3Bstroke-linecap%3Around%3Bstroke-linejoin%3Around%3B%7D%09.st33%7Bfill%3A%232A89CA%3B%7D%09.st34%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%237B4D87%3B%7D%09.st35%7Bopacity%3A0.3%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st36%7Bopacity%3A0.3%3Bfill%3A%23FFFFFF%3B%7D%09.st37%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2378B843%3B%7D%09.st38%7Bfill%3A%2378B843%3B%7D%09.st39%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23EDF0F4%3B%7D%09.st40%7Bfill%3A%23005BA3%3B%7D%09.st41%7Bfill%3A%230F80B0%3B%7D%09.st42%7Bfill%3A%23005F87%3B%7D%09.st43%7Bfill%3A%23B7D332%3B%7D%09.st44%7Bfill%3A%237FB900%3B%7D%09.st45%7Bopacity%3A0.6%3Bfill%3A%23FFFFFF%3B%7D%09.st46%7Bopacity%3A0.4%3Bfill%3A%23FFFFFF%3B%7D%09.st47%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_13_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st48%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_64_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st49%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_65_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st50%7Bfill%3A%2373BDCD%3B%7D%09.st51%7Bopacity%3A0.6%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st52%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2380A23E%3Bstroke%3A%23FFFFFF%3Bstroke-width%3A4%3Bstroke-miterlimit%3A10%3B%7D%09.st53%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2380A23E%3B%7D%09.st54%7Bclip-path%3Aurl(%23XMLID_67_)%3Bfill%3Anone%3B%7D%09.st55%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F7B218%3B%7D%09.st56%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_69_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st57%7Bopacity%3A0.8%3Bfill%3A%23FFFFFF%3B%7D%09.st58%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_79_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st59%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23DB5B26%3B%7D%09.st60%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F58B1F%3B%7D%09.st61%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_84_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st62%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23404B59%3B%7D%09.st63%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_118_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st64%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23D1B0D3%3B%7D%09.st65%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_119_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st66%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2315B2E7%3B%7D%09.st67%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23E1F3F8%3B%7D%09.st68%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_120_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st69%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_124_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st70%7Bopacity%3A0.3%3Bclip-path%3Aurl(%23XMLID_125_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st71%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_126_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st72%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%237C8737%3B%7D%09.st73%7Bopacity%3A0.3%3Bclip-path%3Aurl(%23XMLID_127_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st74%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_130_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st75%7Bfill%3A%23CCCBCB%3B%7D%09.st76%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2388909B%3B%7D%09.st77%7Bopacity%3A0.1%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st78%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_131_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st79%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_133_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st80%7Bdisplay%3Anone%3B%7D%09.st81%7Bfill%3A%2345B6F4%3B%7D%09.st82%7Bfill%3A%2389919C%3B%7D%09.st83%7Bfill%3A%2361ADD1%3B%7D%09.st84%7Bfill%3A%233899C6%3B%7D%09.st85%7Bfill%3A%23F78F08%3B%7D%09.st86%7Bfill%3A%23C1BFBC%3B%7D%09.st87%7Bfill%3A%237A7A7A%3B%7D%09.st88%7Bfill%3A%23B3B4B5%3B%7D%09.st89%7Bopacity%3A0.48%3B%7D%09.st90%7Bfill%3A%23A0A1A2%3B%7D%09.st91%7Bfill%3A%23A1DEF0%3B%7D%09.st92%7Bfill%3A%23804998%3B%7D%09.st93%7Bfill%3A%230072C6%3B%7D%09.st94%7Bfill%3A%2359B4D9%3B%7D%09.st95%7Bfill%3A%233999C6%3B%7D%09.st96%7Bfill%3A%230078D7%3B%7D%09.st97%7Bfill%3A%23D1B972%3B%7D%09.st98%7Bfill%3A%23FEE087%3B%7D%09.st99%7Bfill%3A%23B1CE2D%3B%7D%09.st100%7Bfill%3A%237FBA00%3B%7D%09.st101%7Bfill%3A%23FCD116%3B%7D%09.st102%7Bfill%3A%23719904%3B%7D%09.st103%7Bfill%3A%23B8D432%3B%7D%09.st104%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23804898%3B%7D%09.st105%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%236B2980%3B%7D%09.st106%7Bfill%3A%236B2980%3B%7D%09.st107%7Bopacity%3A0.3%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st108%7Bopacity%3A0.2%3Bfill%3A%231E1E1E%3Benable-background%3Anew %3B%7D%09.st109%7Bfill%3A%2333BCF0%3B%7D%09.st110%7Bopacity%3A0.2%3Bfill%3A%23636363%3B%7D%09.st111%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_134_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st112%7Bfill%3A%238B77B6%3B%7D%09.st113%7Bfill%3A%239B6CAC%3B%7D%09.st114%7Bfill%3A%23874B94%3B%7D%09.st115%7Bopacity%3A0.4%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st116%7Bopacity%3A0.8%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st117%7Bopacity%3A0.6%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st118%7Bopacity%3A0.25%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st119%7Bfill%3A%23DD5900%3B%7D%09.st120%7Bfill%3A%23FF8C00%3B%7D%09.st121%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%233E3E3E%3B%7D%09.st122%7Bfill%3Aurl(%23path3060_1_)%3B%7D%09.st123%7Bfill%3A%231870C5%3B%7D%09.st124%7Bfill%3A%2372BFDF%3B%7D%09.st125%7Bfill%3A%233C3938%3B%7D%09.st126%7Bfill%3A%230072AC%3B%7D%09.st127%7Bfill%3A%230079B6%3B%7D%09.st128%7Bfill%3A%2300A2D9%3B%7D%09.st129%7Bfill%3A%23BFDC34%3B%7D%09.st130%7Bfill%3A%23898989%3B%7D%09.st131%7Bfill%3A%23EDF0F5%3B%7D%09.st132%7Bfill%3A%23A3A4A7%3B%7D%09.st133%7Bfill%3A%23353535%3B%7D%09.st134%7Bfill%3A%23FF8C02%3B%7D%09.st135%7Bfill%3A%2300AC8C%3B%7D%09.st136%7Bfill%3A%236EC2E9%3B%7D%09.st137%7Bfill%3A%23442359%3B%7D%09.st138%7Bfill%3A%236DC0E6%3B%7D%09.st139%7Bfill%3A%23432056%3B%7D%09.st140%7Bfill%3A%2386CAD7%3B%7D%09.st141%7Bfill%3A%23009E48%3B%7D%09.st142%7Bopacity%3A0.2%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st143%7Bfill%3A%2368217A%3B%7D%09.st144%7Bfill%3A%23E5E5E5%3B%7D%09.st145%7Bopacity%3A0.15%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st146%7Bfill%3A%233898C6%3B%7D%09.st147%7Bfill%3A%2380BA42%3B%7D%09.st148%7Bfill%3A%23B3D234%3B%7D%09.st149%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F9F9F9%3B%7D%09.st150%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23008EBE%3B%7D%09.st151%7Bopacity%3A0.1%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F1F1F2%3B%7D%09.st152%7Bfill%3A%23BAD80A%3B%7D%09.st153%7Bclip-path%3Aurl(%23SVGID_2_)%3B%7D%09.st154%7Bfill%3A%2300BCF2%3B%7D%09.st155%7Bfill%3A%235AB4DA%3B%7D%09.st156%7Bfill%3Anone%3Bstroke%3A%235AB4DA%3Bstroke-width%3A0.75%3Bstroke-miterlimit%3A10%3B%7D%09.st157%7Bfill%3A%233898C5%3B%7D%09.st158%7Bfill%3A%237A7B7B%3B%7D%09.st159%7Bfill%3A%23545555%3B%7D%09.st160%7Bfill%3A%23D6EAF3%3B%7D%09.st161%7Bfill%3A%23009580%3B%7D%09.st162%7Bfill%3A%23BA141A%3B%7D%09.st163%7Bfill%3A%237AC3E1%3B%7D%09.st164%7Bfill%3A%23E27226%3B%7D%09.st165%7Bfill%3A%23FF9D26%3B%7D%09.st166%7Bopacity%3A0.12%3Bfill%3A%23BA141A%3B%7D%09.st167%7Bfill%3A%233C98C5%3B%7D%09.st168%7Bfill%3A%235AB3D8%3B%7D%09.st169%7Bfill%3A%23AAD8EB%3B%7D%09.st170%7Bfill%3A%23797979%3B%7D%09.st171%7Bfill%3A%23959595%3B%7D%09.st172%7Bfill%3A%23D1D1D1%3B%7D%09.st173%7Bclip-path%3Aurl(%23SVGID_4_)%3B%7D%09.st174%7Bfill%3A%2333A2E5%3B%7D%09.st175%7Bfill%3A%2371C2EA%3B%7D%09.st176%7Bfill%3A%23005091%3B%7D%09.st177%7Bclip-path%3Aurl(%23SVGID_6_)%3B%7D%09.st178%7Bfill%3A%23ACD64D%3B%7D%3C%2Fstyle%3E%3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cg%3E%09%09%09%09%3Cpolygon class%3D%22st93%22 points%3D%2226.5%2C4.5 12.5%2C15.5 1.5%2C35.5 11.5%2C35.5 %09%09%09%09%22%2F%3E%09%09%09%09%3Cpolygon class%3D%22st93%22 points%3D%2227.5%2C7.5 21.5%2C22.5 32.5%2C35.5 11.5%2C40.5 46.5%2C40.5 %09%09%09%09%22%2F%3E%09%09%09%3C%2Fg%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E");\n mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 22.1.0%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg version%3D%221.1%22 id%3D%22Layer_1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%09 viewBox%3D%220 0 48 48%22 style%3D%22enable-background%3Anew 0 0 48 48%3B%22 xml%3Aspace%3D%22preserve%22%3E%3Cstyle type%3D%22text%2Fcss%22%3E%09.st0%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2300A2D8%3B%7D%09.st1%7Bfill%3A%23F79E1C%3B%7D%09.st2%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%232ABAEC%3B%7D%09.st3%7Bfill%3A%23F7B218%3B%7D%09.st4%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3Anone%3B%7D%09.st5%7Bfill%3A%2300A2D8%3B%7D%09.st6%7Bfill%3A%232ABAEC%3B%7D%09.st7%7Bfill%3A%23323A45%3B%7D%09.st8%7Bfill%3A%2388909B%3B%7D%09.st9%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st10%7Bfill%3A%23A3BF3A%3B%7D%09.st11%7Bfill%3A%2380A23E%3B%7D%09.st12%7Bfill%3A%237B4D87%3B%7D%09.st13%7Bfill%3A%232F75BB%3B%7D%09.st14%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2385C9D5%3B%7D%09.st15%7Bopacity%3A0.15%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st16%7Bfill%3A%23A5D9E2%3B%7D%09.st17%7Bfill%3A%2385C9D5%3B%7D%09.st18%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23323A45%3B%7D%09.st19%7Bfill%3A%23FFFFFF%3B%7D%09.st20%7Bfill%3A%23DAEFF3%3B%7D%09.st21%7Bfill%3A%232A65AF%3B%7D%09.st22%7Bfill%3A%23F6ECF4%3B%7D%09.st23%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%232F75BB%3B%7D%09.st24%7Bfill%3Anone%3B%7D%09.st25%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F9BA19%3B%7D%09.st26%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23A3BF3A%3B%7D%09.st27%7Bfill%3A%23F6931D%3B%7D%09.st28%7Bfill%3A%235E6D80%3B%7D%09.st29%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3B%7D%09.st30%7Bfill%3A%2300B8E2%3B%7D%09.st31%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%235E6D80%3B%7D%09.st32%7Bfill%3Anone%3Bstroke%3A%2385C9D5%3Bstroke-width%3A0%3Bstroke-linecap%3Around%3Bstroke-linejoin%3Around%3B%7D%09.st33%7Bfill%3A%232A89CA%3B%7D%09.st34%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%237B4D87%3B%7D%09.st35%7Bopacity%3A0.3%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st36%7Bopacity%3A0.3%3Bfill%3A%23FFFFFF%3B%7D%09.st37%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2378B843%3B%7D%09.st38%7Bfill%3A%2378B843%3B%7D%09.st39%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23EDF0F4%3B%7D%09.st40%7Bfill%3A%23005BA3%3B%7D%09.st41%7Bfill%3A%230F80B0%3B%7D%09.st42%7Bfill%3A%23005F87%3B%7D%09.st43%7Bfill%3A%23B7D332%3B%7D%09.st44%7Bfill%3A%237FB900%3B%7D%09.st45%7Bopacity%3A0.6%3Bfill%3A%23FFFFFF%3B%7D%09.st46%7Bopacity%3A0.4%3Bfill%3A%23FFFFFF%3B%7D%09.st47%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_13_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st48%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_64_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st49%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_65_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st50%7Bfill%3A%2373BDCD%3B%7D%09.st51%7Bopacity%3A0.6%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st52%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2380A23E%3Bstroke%3A%23FFFFFF%3Bstroke-width%3A4%3Bstroke-miterlimit%3A10%3B%7D%09.st53%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2380A23E%3B%7D%09.st54%7Bclip-path%3Aurl(%23XMLID_67_)%3Bfill%3Anone%3B%7D%09.st55%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F7B218%3B%7D%09.st56%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_69_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st57%7Bopacity%3A0.8%3Bfill%3A%23FFFFFF%3B%7D%09.st58%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_79_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st59%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23DB5B26%3B%7D%09.st60%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F58B1F%3B%7D%09.st61%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_84_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st62%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23404B59%3B%7D%09.st63%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_118_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st64%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23D1B0D3%3B%7D%09.st65%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_119_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st66%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2315B2E7%3B%7D%09.st67%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23E1F3F8%3B%7D%09.st68%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_120_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st69%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_124_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st70%7Bopacity%3A0.3%3Bclip-path%3Aurl(%23XMLID_125_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st71%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_126_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st72%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%237C8737%3B%7D%09.st73%7Bopacity%3A0.3%3Bclip-path%3Aurl(%23XMLID_127_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st74%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_130_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st75%7Bfill%3A%23CCCBCB%3B%7D%09.st76%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2388909B%3B%7D%09.st77%7Bopacity%3A0.1%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st78%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_131_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st79%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_133_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st80%7Bdisplay%3Anone%3B%7D%09.st81%7Bfill%3A%2345B6F4%3B%7D%09.st82%7Bfill%3A%2389919C%3B%7D%09.st83%7Bfill%3A%2361ADD1%3B%7D%09.st84%7Bfill%3A%233899C6%3B%7D%09.st85%7Bfill%3A%23F78F08%3B%7D%09.st86%7Bfill%3A%23C1BFBC%3B%7D%09.st87%7Bfill%3A%237A7A7A%3B%7D%09.st88%7Bfill%3A%23B3B4B5%3B%7D%09.st89%7Bopacity%3A0.48%3B%7D%09.st90%7Bfill%3A%23A0A1A2%3B%7D%09.st91%7Bfill%3A%23A1DEF0%3B%7D%09.st92%7Bfill%3A%23804998%3B%7D%09.st93%7Bfill%3A%230072C6%3B%7D%09.st94%7Bfill%3A%2359B4D9%3B%7D%09.st95%7Bfill%3A%233999C6%3B%7D%09.st96%7Bfill%3A%230078D7%3B%7D%09.st97%7Bfill%3A%23D1B972%3B%7D%09.st98%7Bfill%3A%23FEE087%3B%7D%09.st99%7Bfill%3A%23B1CE2D%3B%7D%09.st100%7Bfill%3A%237FBA00%3B%7D%09.st101%7Bfill%3A%23FCD116%3B%7D%09.st102%7Bfill%3A%23719904%3B%7D%09.st103%7Bfill%3A%23B8D432%3B%7D%09.st104%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23804898%3B%7D%09.st105%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%236B2980%3B%7D%09.st106%7Bfill%3A%236B2980%3B%7D%09.st107%7Bopacity%3A0.3%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st108%7Bopacity%3A0.2%3Bfill%3A%231E1E1E%3Benable-background%3Anew %3B%7D%09.st109%7Bfill%3A%2333BCF0%3B%7D%09.st110%7Bopacity%3A0.2%3Bfill%3A%23636363%3B%7D%09.st111%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_134_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st112%7Bfill%3A%238B77B6%3B%7D%09.st113%7Bfill%3A%239B6CAC%3B%7D%09.st114%7Bfill%3A%23874B94%3B%7D%09.st115%7Bopacity%3A0.4%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st116%7Bopacity%3A0.8%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st117%7Bopacity%3A0.6%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st118%7Bopacity%3A0.25%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st119%7Bfill%3A%23DD5900%3B%7D%09.st120%7Bfill%3A%23FF8C00%3B%7D%09.st121%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%233E3E3E%3B%7D%09.st122%7Bfill%3Aurl(%23path3060_1_)%3B%7D%09.st123%7Bfill%3A%231870C5%3B%7D%09.st124%7Bfill%3A%2372BFDF%3B%7D%09.st125%7Bfill%3A%233C3938%3B%7D%09.st126%7Bfill%3A%230072AC%3B%7D%09.st127%7Bfill%3A%230079B6%3B%7D%09.st128%7Bfill%3A%2300A2D9%3B%7D%09.st129%7Bfill%3A%23BFDC34%3B%7D%09.st130%7Bfill%3A%23898989%3B%7D%09.st131%7Bfill%3A%23EDF0F5%3B%7D%09.st132%7Bfill%3A%23A3A4A7%3B%7D%09.st133%7Bfill%3A%23353535%3B%7D%09.st134%7Bfill%3A%23FF8C02%3B%7D%09.st135%7Bfill%3A%2300AC8C%3B%7D%09.st136%7Bfill%3A%236EC2E9%3B%7D%09.st137%7Bfill%3A%23442359%3B%7D%09.st138%7Bfill%3A%236DC0E6%3B%7D%09.st139%7Bfill%3A%23432056%3B%7D%09.st140%7Bfill%3A%2386CAD7%3B%7D%09.st141%7Bfill%3A%23009E48%3B%7D%09.st142%7Bopacity%3A0.2%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st143%7Bfill%3A%2368217A%3B%7D%09.st144%7Bfill%3A%23E5E5E5%3B%7D%09.st145%7Bopacity%3A0.15%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st146%7Bfill%3A%233898C6%3B%7D%09.st147%7Bfill%3A%2380BA42%3B%7D%09.st148%7Bfill%3A%23B3D234%3B%7D%09.st149%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F9F9F9%3B%7D%09.st150%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23008EBE%3B%7D%09.st151%7Bopacity%3A0.1%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F1F1F2%3B%7D%09.st152%7Bfill%3A%23BAD80A%3B%7D%09.st153%7Bclip-path%3Aurl(%23SVGID_2_)%3B%7D%09.st154%7Bfill%3A%2300BCF2%3B%7D%09.st155%7Bfill%3A%235AB4DA%3B%7D%09.st156%7Bfill%3Anone%3Bstroke%3A%235AB4DA%3Bstroke-width%3A0.75%3Bstroke-miterlimit%3A10%3B%7D%09.st157%7Bfill%3A%233898C5%3B%7D%09.st158%7Bfill%3A%237A7B7B%3B%7D%09.st159%7Bfill%3A%23545555%3B%7D%09.st160%7Bfill%3A%23D6EAF3%3B%7D%09.st161%7Bfill%3A%23009580%3B%7D%09.st162%7Bfill%3A%23BA141A%3B%7D%09.st163%7Bfill%3A%237AC3E1%3B%7D%09.st164%7Bfill%3A%23E27226%3B%7D%09.st165%7Bfill%3A%23FF9D26%3B%7D%09.st166%7Bopacity%3A0.12%3Bfill%3A%23BA141A%3B%7D%09.st167%7Bfill%3A%233C98C5%3B%7D%09.st168%7Bfill%3A%235AB3D8%3B%7D%09.st169%7Bfill%3A%23AAD8EB%3B%7D%09.st170%7Bfill%3A%23797979%3B%7D%09.st171%7Bfill%3A%23959595%3B%7D%09.st172%7Bfill%3A%23D1D1D1%3B%7D%09.st173%7Bclip-path%3Aurl(%23SVGID_4_)%3B%7D%09.st174%7Bfill%3A%2333A2E5%3B%7D%09.st175%7Bfill%3A%2371C2EA%3B%7D%09.st176%7Bfill%3A%23005091%3B%7D%09.st177%7Bclip-path%3Aurl(%23SVGID_6_)%3B%7D%09.st178%7Bfill%3A%23ACD64D%3B%7D%3C%2Fstyle%3E%3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cg%3E%09%09%09%09%3Cpolygon class%3D%22st93%22 points%3D%2226.5%2C4.5 12.5%2C15.5 1.5%2C35.5 11.5%2C35.5 %09%09%09%09%22%2F%3E%09%09%09%09%3Cpolygon class%3D%22st93%22 points%3D%2227.5%2C7.5 21.5%2C22.5 32.5%2C35.5 11.5%2C40.5 46.5%2C40.5 %09%09%09%09%22%2F%3E%09%09%09%3C%2Fg%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E");\n background-color: #0078d4;\n}\n');const $e="spinnaker.azure";n($e,[pe,me,ge,ue,Ye,ce,Qe,_e,ee,le,se,ie,ne,ye,he,Be,Se,be,K,Ze]).config(function(){r.registerProvider("azure",{name:"Azure",logo:{path:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQYAAACrCAYAAACEwDK4AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABCZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI2MjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTcxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOS0wNS0wNlQxMjowNTozMTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjguMzwveG1wOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K8Qjg7wAAM9JJREFUeAHtnQeAFdX1/8/MvLa9L1tgF5Zl6UUUggoIggVLrCQYY42a/jPlb4rxr9EkvxhNIz9bEjUmllhRRFCxIKII0hVY2jaWLbC9vf5mft9z571lwd1lWfWXRM+FeW/ezJ07937uveeee+6ZWbIsazG2EpIgBITA554AywKWCSRC4XPfFgSAEDiCgMiEI3DIDyEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEh8B9DQPuPyWk0o+2WlRnyhYorW8O5++pb0irq2pIqu6y46uaAtau6tv6+L89Yf9akzF3/aeWS/AqBfycCjk8jM5ZljUa6FrZyTdPCvd0DcZJwvAhbLrZkbN158RMZXaGIsbcx4Cira3ej8ydWtoeza1u9haf8atXItkBkeER3pkYiRDpEm6FppBkaBci9zxHv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"},image:{reader:"azureImageReader"},serverGroup:{transformer:"azureServerGroupTransformer",detailsTemplateUrl:"azure/src/serverGroup/details/serverGroupDetails.html",detailsController:"azureServerGroupDetailsCtrl",cloneServerGroupTemplateUrl:"azure/src/serverGroup/configure/wizard/serverGroupWizard.html",cloneServerGroupController:"azureCloneServerGroupCtrl",commandBuilder:"azureServerGroupCommandBuilder",configurationService:"azureServerGroupConfigurationService"},instance:{instanceTypeService:"azureInstanceTypeService",detailsTemplateUrl:"azure/src/instance/details/instanceDetails.html",detailsController:"azureInstanceDetailsCtrl"},loadBalancer:{transformer:"azureLoadBalancerTransformer",detailsTemplateUrl:"azure/src/loadBalancer/details/loadBalancerDetail.html",detailsController:"azureLoadBalancerDetailsCtrl",createLoadBalancerTemplateUrl:"azure/src/loadBalancer/configure/createLoadBalancer.html",createLoadBalancerController:"azureCreateLoadBalancerCtrl",CreateLoadBalancerModal:ae},securityGroup:{transformer:"azureSecurityGroupTransformer",reader:"azureSecurityGroupReader",detailsTemplateUrl:"azure/src/securityGroup/details/securityGroupDetail.html",detailsController:"azureSecurityGroupDetailsCtrl",createSecurityGroupTemplateUrl:"azure/src/securityGroup/configure/createSecurityGroup.html",createSecurityGroupController:"azureCreateSecurityGroupCtrl"}})}),H.registerProvider("azure",["redblack"]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/details/serverGroupDetails.html",'<div class="details-panel" ng-class="{ disabled: serverGroup.isDisabled }">\n <div class="header" ng-if="state.loading">\n <div class="close-button">\n <a class="btn btn-link" ui-sref="^">\n <span class="glyphicon glyphicon-remove"></span>\n </a>\n </div>\n <div class="horizontal center middle">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n </div>\n\n <div class="header" ng-if="!state.loading">\n <div class="close-button">\n <a class="btn btn-link" ui-sref="^">\n <span class="glyphicon glyphicon-remove"></span>\n </a>\n </div>\n <div class="header-text horizontal middle">\n <span class="glyphicon glyphicon-th"></span>\n <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>{{serverGroup.name}}</h3>\n </div>\n <div class="actions" ng-class="{ insights: serverGroup.insightActions.length > 0 }">\n <div class="dropdown" uib-dropdown dropdown-append-to-body>\n <button type="button" class="btn btn-sm btn-primary dropdown-toggle" uib-dropdown-toggle>\n Server Group Actions <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu">\n <li><a href ng-if="!serverGroup.isDisabled" ng-click="ctrl.rollbackServerGroup()">Rollback</a></li>\n <div ng-if="false">\n <li><a href ng-click="ctrl.resizeServerGroup()">Resize</a></li>\n </div>\n <li><a href ng-click="ctrl.disableServerGroup()">Disable</a></li>\n <li><a href ng-click="ctrl.enableServerGroup()">Enable</a></li>\n <li><a href ng-click="ctrl.destroyServerGroup()">Destroy</a></li>\n <li><a href ng-click="ctrl.cloneServerGroup(serverGroup)">Clone</a></li>\n </ul>\n </div>\n <div class="dropdown" ng-if="serverGroup.insightActions.length > 0" uib-dropdown dropdown-append-to-body>\n <button type="button" class="btn btn-sm btn-default dropdown-toggle" uib-dropdown-toggle>\n Insight <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu">\n <li ng-repeat="action in serverGroup.insightActions">\n <a target="_blank" href="{{action.url}}">{{action.label}}</a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="content" ng-if="!state.loading">\n <h4 class="text-center" ng-if="serverGroup.isDisabled">[SERVER GROUP IS DISABLED]</h4>\n\n <server-group-running-tasks-details\n server-group="serverGroup"\n application="ctrl.application"\n ></server-group-running-tasks-details>\n\n <collapsible-section heading="Server Group Information" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Created</dt>\n <dd>{{serverGroup.createdTime | timestamp}}</dd>\n <dt>Region</dt>\n <dd>\n <account-tag account="serverGroup.account" provider="serverGroup.type" pad="right"></account-tag>\n {{serverGroup.region}}\n </dd>\n <dt>Image</dt>\n <dd>{{serverGroup.image.imageName}}</dd>\n <dt>SKU</dt>\n <dd>{{serverGroup.sku.name}}</dd>\n </dl>\n </collapsible-section>\n\n <collapsible-section heading="Size" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Current</dt>\n <dd>{{serverGroup.instances.length}}</dd>\n </dl>\n </collapsible-section>\n\n <collapsible-section heading="Health" expanded="true">\n <dl class="dl-horizontal dl-narrow" ng-if="serverGroup">\n <dt>Instances</dt>\n <dd>\n <health-counts container="serverGroup.instanceCounts" class="pull-left"></health-counts>\n </dd>\n </dl>\n </collapsible-section>\n\n <collapsible-section heading="{{firewallsLabel}}">\n <dl class="dl-horizontal dl-narrow">\n <dt>Name</dt>\n <dd>{{serverGroup.securityGroupName}}</dd>\n </dl>\n </collapsible-section>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/serverGroup/configure/wizard/serverGroupWizard.html",'<div>\n <div ng-if="state.requiresTemplateSelection">\n <ng-include src="pages.templateSelection"></ng-include>\n </div>\n <div ng-if="!state.loaded" style="height: 200px" class="horizontal center middle">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n <div>\n <form name="serverGroupWizardForm" class="form-horizontal" novalidate validate-on-submit>\n <v2-modal-wizard\n ng-show="state.loaded && !state.requiresTemplateSelection"\n heading="{{title}}"\n task-monitor="taskMonitor"\n dismiss="$dismiss()"\n >\n <v2-wizard-page key="basic-settings" label="Basic Settings" hide-subheading="true">\n <ng-include src="pages.basicSettings"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="image-settings" label="Image">\n <ng-include src="pages.imageSettings"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="load-balancers" label="Load Balancers" mark-complete-on-view="false">\n <ng-include src="pages.loadBalancers"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="network-settings" label="Network Settings" mark-complete-on-view="false">\n <ng-include src="pages.networkSettings"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="health-settings" label="Health" mark-complete-on-view="false">\n <ng-include src="pages.healthSettings"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="security-groups" label="{{firewallsLabel}}" mark-complete-on-view="false" done="true">\n <ng-include src="pages.securityGroups"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="instance-type" label="Instance Type" mark-complete-on-view="false" done="false">\n <ng-include src="pages.instanceType"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="zones" label="Zones" mark-complete-on-view="false" done="false">\n <ng-include src="pages.zones"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="tags" label="Tags" mark-complete-on-view="false" done="true">\n <ng-include src="pages.tags"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="advanced-settings" label="Advanced Settings" mark-complete-on-view="false" done="true">\n <ng-include src="pages.advancedSettings"></ng-include>\n </v2-wizard-page>\n </v2-modal-wizard>\n <div class="modal-footer" ng-if="state.loaded">\n <button ng-disabled="taskMonitor.submitting" class="btn btn-default btn-cancel" ng-click="ctrl.cancel()">\n Cancel\n </button>\n <submit-button\n is-disabled="taskMonitor.submitting || !ctrl.isValid()"\n label="command.viewState.submitButtonLabel"\n submitting="taskMonitor.submitting"\n on-click="serverGroupWizardForm.$valid && ctrl.submit()"\n is-new="true"\n ></submit-button>\n </div>\n </form>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/instance/details/instanceDetails.html",'<div class="details-panel">\n <div class="header">\n <instance-details-header\n health-state="instance.healthState"\n instance-id="instance ? instance.instanceId : instanceIdNotFound"\n loading="state.loading"\n standalone="state.standalone"\n ></instance-details-header>\n </div>\n <div class="content" ng-if="!state.loading && instance">\n <collapsible-section heading="Instance Information" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Launched</dt>\n <dd ng-if="instance.launchTime">{{instance.launchTime | timestamp}}</dd>\n <dd ng-if="!instance.launchTime">(Unknown)</dd>\n <dt>In</dt>\n <dd>\n <account-tag account="instance.account" provider="instance.provider" pad="right"></account-tag>\n {{instance.region || \'(Unknown)\'}}\n </dd>\n <dt>Type</dt>\n <dd>{{instance.instanceType || \'(Unknown)\'}}</dd>\n <dt ng-if="instance.serverGroup">Server Group</dt>\n <dd ng-if="instance.serverGroup">\n <a\n ui-sref="^.serverGroup({region: instance.region,\n accountId: instance.account,\n serverGroup: instance.serverGroup,\n provider: instance.provider})"\n >{{instance.serverGroup}}</a\n >\n </dd>\n </dl>\n </collapsible-section>\n </div>\n <div class="content" ng-if="!state.loading && !instance">\n <div class="content-section">\n <div class="content-body text-center">\n <h3>Instance not found.</h3>\n </div>\n </div>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/loadBalancer/details/loadBalancerDetail.html",'<div class="details-panel">\n <div ng-if="state.loading" class="header">\n <div class="close-button">\n <a class="btn btn-link" ui-sref="^">\n <span class="glyphicon glyphicon-remove"></span>\n </a>\n </div>\n <div class="horizontal center middle">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n </div>\n\n <div ng-if="!state.loading" class="header">\n <div class="close-button">\n <a class="btn btn-link" ui-sref="^">\n <span class="glyphicon glyphicon-remove"></span>\n </a>\n </div>\n <div class="header-text horizontal middle">\n <i class="fa icon-sitemap"></i>\n <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>{{loadBalancer.name}}</h3>\n </div>\n <div>\n <div class="actions">\n <div class="dropdown" uib-dropdown dropdown-append-to-body>\n <button type="button" class="btn btn-sm btn-primary dropdown-toggle" uib-dropdown-toggle>\n Load Balancer Actions <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu">\n <li><a href ng-click="ctrl.editLoadBalancer()">Edit Load Balancer</a></li>\n <li ng-if="!loadBalancer.serverGroups.length">\n <a href ng-click="ctrl.deleteLoadBalancer()">Delete Load Balancer</a>\n </li>\n <li\n ng-if="loadBalancer.serverGroups.length"\n class="disabled"\n tooltip="You must detach all server groups before you can delete this load balancer."\n >\n <a href>Delete Load Balancer</a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <div ng-if="!state.loading" class="content">\n <collapsible-section heading="Load Balancer Details" expanded="true">\n <dl class="dl-horizontal dl-narrow">\n <dt>Type</dt>\n <dd>{{loadBalancer.loadBalancerType}}</dd>\n <dt>Created</dt>\n <dd>{{loadBalancer.elb.createdTime | timestamp}}</dd>\n <dt>In</dt>\n <dd>\n <account-tag account="loadBalancer.account" pad="right" provider="loadBalancer.type"></account-tag>\n {{loadBalancer.region}}\n </dd>\n <dt ng-if="loadBalancer.loadBalancerType === \'Azure Application Gateway\'">VNet</dt>\n <dd ng-if="loadBalancer.loadBalancerType === \'Azure Application Gateway\'">{{loadBalancer.elb.vnet}}</dd>\n <dt ng-if="loadBalancer.loadBalancerType === \'Azure Application Gateway\'">Subnet</dt>\n <dd ng-if="loadBalancer.loadBalancerType === \'Azure Application Gateway\'">{{loadBalancer.elb.subnet}}</dd>\n </dl>\n <dl class="horizontal-when-filters-collapsed">\n <dt ng-if="loadBalancer.serverGroups">Server Groups</dt>\n <dd ng-if="loadBalancer.serverGroups">\n <ul class="collapse-margin-on-filter-collapse">\n <li ng-repeat="serverGroup in loadBalancer.serverGroups | orderBy: [\'isDisabled\', \'-name\']">\n <a\n ui-sref="^.serverGroup({region: serverGroup.region,\n accountId: serverGroup.account,\n serverGroup: serverGroup.name,\n provider: \'azure\'})"\n >\n {{serverGroup.name}}\n </a>\n </li>\n </ul>\n </dd>\n </dl>\n <dl class="horizontal-when-filters-collapsed">\n <dt ng-if="loadBalancer.elb.dnsName">DNS Name:</dt>\n <dd>\n <a target="_blank" href="//{{loadBalancer.elb.dnsName}}">{{loadBalancer.elb.dnsName}}</a>\n <copy-to-clipboard\n class="copy-to-clipboard copy-to-clipboard-sm"\n text="loadBalancer.elb.dnsName"\n tool-tip="\'Copy DNS Name to clipboard\'"\n >\n </copy-to-clipboard>\n </dd>\n </dl>\n </collapsible-section>\n <collapsible-section heading="Status" expanded="true">\n <health-counts class="pull-left" container="loadBalancer.instanceCounts"></health-counts>\n </collapsible-section>\n <collapsible-section heading="Listeners">\n <dl>\n <dt>Load Balancer &rarr; Instance</dt>\n <dd ng-repeat="loadBalancingRule in loadBalancer.elb.loadBalancingRules">\n {{loadBalancingRule.protocol}}:{{loadBalancingRule.externalPort}} &rarr; {{loadBalancingRule.backendPort}}\n </dd>\n </dl>\n </collapsible-section>\n <collapsible-section heading="{{firewallsLabel}}">\n <ul>\n <li ng-repeat="securityGroup in securityGroups | orderBy:\'name\'">\n <a\n ui-sref="^.firewallDetails({name:securityGroup.name, accountId: loadBalancer.account, region: loadBalancer.region, vpcId: loadBalancer.vpcId, provider: loadBalancer.provider})"\n >\n {{securityGroup.name}} ({{securityGroup.id}})\n </a>\n </li>\n </ul>\n </collapsible-section>\n <collapsible-section heading="Health Checks">\n <dl class="horizontal-when-filters-collapsed">\n <dt>Target</dt>\n <dd>{{loadBalancer.elb.probes[0].probeProtocol}}</dd>\n <dt>Interval</dt>\n <dd>{{loadBalancer.elb.probes[0].probeInterval}} seconds</dd>\n <dt>Unhealthy Threshold</dt>\n <dd>{{loadBalancer.elb.probes[0].unhealthyThreshold}}</dd>\n <dt>Timeout</dt>\n <dd>{{loadBalancer.elb.probes[0].timeout}} seconds</dd>\n </dl>\n </collapsible-section>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/loadBalancer/configure/createLoadBalancer.html",'<form name="form" class="form-horizontal" novalidate validate-on-submit>\n <v2-modal-wizard heading="Create New {{loadBalancerType}}" task-monitor="taskMonitor" dismiss="$dismiss()">\n <v2-wizard-page key="Location" label="Location">\n <ng-include src="pages.location"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="Listeners" label="Listeners" done="true">\n <ng-include src="pages.listeners"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="Health Check" label="Health Check" done="true" hide-subheading="true">\n <ng-include src="pages.healthCheck"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="Advanced Settings" label="Advanced Settings" done="true">\n <ng-include src="pages.advancedSettings"></ng-include>\n </v2-wizard-page>\n </v2-modal-wizard>\n <div class="modal-footer">\n <button ng-disabled="taskMonitor.submitting" class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <submit-button\n is-disabled="!state.accountsLoaded || taskMonitor.submitting"\n submitting="taskMonitor.submitting"\n on-click="form.$valid && ctrl.submit()"\n is-new="isNew"\n ></submit-button>\n </div>\n</form>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/details/securityGroupDetail.html",'<div class="details-panel">\n <div class="header">\n <div class="close-button">\n <a class="btn btn-link" ui-sref="^">\n <span class="glyphicon glyphicon-remove"></span>\n </a>\n </div>\n <div ng-if="state.loading" class="horizontal center middle">\n <loading-spinner size="\'small\'"></loading-spinner>\n </div>\n <div class="header-text horizontal middle" ng-if="!state.loading">\n <span class="glyphicon glyphicon-transfer"></span>\n <h3 class="horizontal middle space-between flex-1" select-on-dbl-click>\n {{securityGroup.name || \'(not found)\'}}\n </h3>\n </div>\n <div class="actions">\n <div class="dropdown" uib-dropdown dropdown-append-to-body>\n <button type="button" class="btn btn-sm btn-primary dropdown-toggle" ng-disabled="disabled" uib-dropdown-toggle>\n <firewall-label label="Firewall"></firewall-label> Actions <span class="caret"></span>\n </button>\n <ul class="dropdown-menu" uib-dropdown-menu role="menu">\n <li>\n <a href ng-click="ctrl.deleteSecurityGroup()">Delete <firewall-label label="Firewall"></firewall-label></a>\n </li>\n <li><a href ng-click="ctrl.editInboundRules()">Edit Inbound Rules</a></li>\n <li>\n <a href ng-click="ctrl.cloneSecurityGroup()">Clone <firewall-label label="Firewall"></firewall-label></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class="content" ng-if="!state.loading">\n <collapsible-section heading="{{firewallLabel}} Details" expanded="true">\n <dl class="dl-horizontal dl-medium">\n <dt>ID</dt>\n <dd>{{securityGroup.id}}</dd>\n <dt>Account</dt>\n <dd><account-tag account="securityGroup.accountName"></account-tag></dd>\n <dt>Region</dt>\n <dd>{{securityGroup.region}}</dd>\n <dt>Description:</dt>\n <dd>{{securityGroup.description}}</dd>\n </dl>\n </collapsible-section>\n <collapsible-section\n heading="Security Rules ({{securityGroup.securityRules.length || 0}})"\n expanded="{{!!(securityGroup.securityRules && securityGroup.securityRules.length)}}"\n >\n <div ng-if="!securityGroup.securityRules.length">None</div>\n <dl\n ng-class="insightCtrl.vm.filtersExpanded ? \'\' : \'dl-horizontal dl-medium\'"\n ng-repeat="rule in securityGroup.securityRules | orderBy: \'rule.priority\'"\n >\n <dt>Name</dt>\n <dd>{{rule.name}}</dd>\n <dt>Priority</dt>\n <dd>{{rule.priority}}</dd>\n <dt>Direction</dt>\n <dd>{{rule.direction}}</dd>\n <dt>Access</dt>\n <dd>{{rule.access}}</dd>\n <dt>Protocol</dt>\n <dd>{{rule.protocol}}</dd>\n <dt>Src Addr Prefix</dt>\n <dd>{{rule.sourceAddressPrefixModel}}</dd>\n <dt>Src Port Range</dt>\n <dd>{{rule.sourcePortRange}}</dd>\n <dt>Dest Addr Prefix</dt>\n <dd>{{rule.destinationAddressPrefix}}</dd>\n <dt>Dest Port Range</dt>\n <dd>{{rule.destinationPortRangeModel}}</dd>\n <hr />\n </dl>\n </collapsible-section>\n </div>\n</div>\n')}]),window.angular.module("ng").run(["$templateCache",function(e){e.put("azure/src/securityGroup/configure/createSecurityGroup.html",'<form name="form" class="form-horizontal" novalidate validate-on-submit>\n <v2-modal-wizard heading="Create New {{firewallLabel}}" task-monitor="taskMonitor" dismiss="$dismiss()">\n <v2-wizard-page key="Location" label="Location">\n <ng-include src="pages.location"></ng-include>\n </v2-wizard-page>\n <v2-wizard-page key="Ingress" label="Ingress" done="true">\n <ng-include src="pages.ingress"></ng-include>\n </v2-wizard-page>\n </v2-modal-wizard>\n <div class="modal-footer">\n <button class="btn btn-default" ng-click="ctrl.cancel()">Cancel</button>\n <submit-button\n is-disabled="state.submitting"\n submitting="state.submitting"\n on-click="form.$valid && ctrl.upsert()"\n is-new="isNew"\n >\n </submit-button>\n </div>\n</form>\n')}]);export{$e as AZURE_MODULE};
1
+ import{HelpContentsRegistry as e,REST as t,InstanceDetailsHeader as a,withRouter as n,CollapsibleSection as l,timestamp as r,AccountTag as s,RecentHistoryService as i,InstanceReader as o,ConfirmationModalService as c,InstanceWriter as d,SETTINGS as u,nativePromiseService as m,AccountService as p,NetworkReader as g,LoadBalancerWriter as h,TaskMonitor as v,ReactModal as f,NameUtils as B,TaskMonitorWrapper as A,ModalClose as b,SubmitButton as y,noop as E,CopyToClipboard as D,HealthCounts as S,FirewallLabels as F,useDataSource as C,useDeckRuntimeServices as N,BakeryReader as I,AuthenticationService as k,StageConfigField as G,Spinner as w,Registry as T,BakeExecutionLabel as z,ExecutionDetailsTasks as R,ExecutionDetailsSection as P,StageFailureMessage as x,StageConstants as L,PlatformHealthOverride as V,TaskExecutor as M,InfrastructureCaches as O,DeckRuntimeContext as U,DeploymentStrategySelector as _,MapEditor as H,DeployInitializer as j,WizardModal as Q,WizardPage as X,UserVerification as q,TaskReason as W,ServerGroupWarningMessageService as Y,CloudProviderRegistry as Z,ServerGroupReader as K,ApplicationNameValidator as J,DeploymentStrategyRegistry as $}from"@spinnaker/core";import ee,{cloneDeep as te}from"lodash";import{UISref as ae}from"@uirouter/react";import ne from"react";import{Dropdown as le,MenuItem as re,Modal as se,Button as ie}from"react-bootstrap";import{Observable as oe}from"rxjs";import ce from"react-select";const de=[{type:"Azure Load Balancer",description:""},{type:"Azure Application Gateway",description:""}],ue=class e{static checkTags(t){if(!t)return{isValid:!1,error:5,errorMessage:"instanceTags is not defined"};const a=Object.keys(t).length;if(!(a>=0&&a<=e.TAG_LIMITATION))return{isValid:!1,error:0,errorMessage:`Number of tags exceeds the limit: ${e.TAG_LIMITATION}`};for(const[a,n]of Object.entries(t)){if(a.length>e.TAG_KEY_LENGTH_LIMITATION)return{isValid:!1,error:1,errorMessage:`Length of Tag key: ${a} exceeds the limit: ${e.TAG_KEY_LENGTH_LIMITATION}`};if(n.length>e.TAG_VALUE_LENGTH_LIMITATION)return{isValid:!1,error:2,errorMessage:`Length of Tag value: ${n} exceeds the limit: ${e.TAG_VALUE_LENGTH_LIMITATION}`};if(e.TAG_INVALID_CHAR_REG_EXR.test(a))return{isValid:!1,error:3,errorMessage:`Invalid characters in Tag key: ${a}`};if(e.TAG_INVALID_CHAR_REG_EXR.test(n))return{isValid:!1,error:4,errorMessage:`Invalid characters in Tag value: ${n}`}}return{isValid:!0,error:null}}static getLoadBalancerType(e){return e=e.toLowerCase().split("_").join(" "),de.find(t=>t.type.toLowerCase()===e)||null}};ue.TAG_LIMITATION=8,ue.TAG_KEY_LENGTH_LIMITATION=512,ue.TAG_VALUE_LENGTH_LIMITATION=256,ue.TAG_INVALID_CHAR_REG_EXR=/[<>%&\\?/]/;let me=ue;const pe={"azure.securityGroup.ingress.description":"Friendly description of the rule you want to enable (limit 80 chars.)","azure.securityGroup.ingress.priority":"Rules are processed in priority order; the lower the number, the higher the priority. We recommend leaving gaps between rules - 100, 200, 300, etc. - so that it's easier to add new rules without having to edit existing rules. There are several default rules that can be overridden with priority (65000, 65001 and 65500). For more information visit http://portal.azure.com.","azure.securityGroup.ingress.source":"The source filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the incoming traffic from a specific source IP address range (CIDR format) that will be allowed or denied by this rule.","azure.securityGroup.ingress.sourcePortRange":"The source port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which ports incoming traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.","azure.securityGroup.ingress.destination":"The destination filter can be Any, an IP address range or a default tag('Internet', 'VirtualNetwork', AzureLoadBalancer'). It specifies the outgoing traffic from a specific destination IP address range (CIDR format) that will be allowed or denied by this rule.","azure.securityGroup.ingress.destinationPortRange":"The destination port range can be a single port, such as 80, or a port range, such as 1024-65535. This specifies from which destination ports traffic will be allowed or denied by this rule. Provide an asterisk (*) to allow traffic from clients connecting from any port.","azure.securityGroup.ingress.direction":"Specifies whether the rule is for inbound or outbound traffic.","azure.securityGroup.ingress.actions":"To adjust the priority of a rule, move it up or down in the list of rules. Rules at the top of the list have the highest priority.","azure.securityGroup.ingress.destPortRanges":"Provide a single port, such as 80; a port range, such as 1024-65535; or a comma-separated list of single ports and/or port ranges, such as 80,1024-65535. Provide an asterisk (*) to allow traffic on any port.","azure.securityGroup.ingress.sourceIPCIDRRanges":"Provide an address range using CIDR notation, such as 192.168.99.0/24; an IP address, such as 192.168.99.0; or a comma-separated list of address ranges or IP addresses, such as 10.0.0.0/24,44.66.0.0/24","azure.serverGroup.imageName":"(Required) <b>Image</b> is the deployable Azure Machine Image.","azure.serverGroup.stack":"(Required) <b>Stack</b> is one of the core naming components of a cluster, used to create vertical stacks of dependent services for integration testing.","azure.serverGroup.detail":"(Required) <b>Detail</b> is a naming component to help distinguish specifics of the server group.","azure.serverGroup.scriptLocation":"The location of custom scripts separated by comma or semicolon to be downloaded on to each instance. A single script should be like: fileUri. Multiple scripts should be like fileUri1,fileUri2 or fileUri1;fileUri2","azure.serverGroup.commandToExecute":"Command(s) to execute custom scripts provided during provisioning of an instance.","azure.serverGroup.customData":"Script or metadata to be injected into each instances.","azure.serverGroup.customTags":`Custom tags on Virtual Machine Scale Set. Allow ${me.TAG_LIMITATION} tags at most.`,"azure.serverGroup.enableInboundNAT":"An Azure load balancer of the basic sku will be created with adding inbound NAT port-forwarding rules to facilitate loggin on VM instances. There is no charge for creating an Azure load balancer of the basic sku. This option is disabled if Availability Zones are set which require Standard Azure Load Balancer and an extra Network Security Group with correct inbound and outbound rules configured.","azure.serverGroup.lun":"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.","azure.serverGroup.diskSizeGB":"Specifies the size of an empty data disk in gigabytes. This value cannot be larger than 1023 GB","azure.serverGroup.managedDisk.storageAccountType":"You can choose between Azure managed disks types to support your workload or scenario.","azure.serverGroup.caching":"Changing the default host caching policy can adversely impact the performance of your application. You should run performance tests to measure its impact. To improve the total IOPS/throughput, we recommend striping across multiple disks and using premium (SSD) disks.","azure.serverGroup.userAssignedIdentities":"Allows your server to access Azure resources. Learn more here: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview","azure.loadBalancer.dnsName":'If there is no custom DNS label specified, a default DNS name will be created. The default value will be "GeneratedText.cloudapp.net" for Azure Application Gateway or "GeneratedText.[region].cloudapp.azure.com" for Azure Load Balancer.',"azure.loadBalancer.probes.probeInterval":"Probe interval in seconds. This value is the time interval between two consecutive probes.","azure.loadBalancer.probes.timeout":"Probe time-out in seconds. If a valid response is not received within this time-out period, the probe is marked as failed. Note that the time-out value should not be more than the Interval value.","azure.loadBalancer.probes.unhealthyThreshold":"Probe retry count. The back-end server is marked down after the consecutive probe failure count reaches the unhealthy threshold.","azure.loadBalancer.loadBalancingRules.idleTimeout":"Keep a TCP or HTTP connection open without relying on clients to send keep-alive messages.","azure.loadBalancer.loadBalancingRules.sessionPersistence":'Session persistence specifies that traffic from a client should be handled by the same virtual machine in the backend pool for the duration of a session. "None" specifies that successive requests from the same client may be handled by any virtual machine. "Client IP" specifies that successive requests from the same client IP address will be handled by the same virtual machine. "Client IP and protocol" specifies that successive requests from the same client IP address and protocol combination will be handled by the same virtual machine.'};Object.keys(pe).forEach(t=>e.register(t,pe[t]));class ge{findImages(e){return t("/images/find").query(e).get().then(function(e){return e},function(){return[]})}getImage(e,a,n){return t("/images").path(n,a,e).query({provider:"azure"}).get().then(function(e){return e&&e.length?e[0]:null},function(){return null})}}class he{constructor(e){const t=[{type:"general",label:"General Purpose",description:"Balanced CPU-to-memory ratio. Ideal for testing and development, small to medium databases, and low to medium traffic web servers.",families:[{type:"B-series",description:"The B-series burstable VMs are ideal for workloads that do not need the full performance of the CPU continuously, like web servers, small databases and development and test environments.",instanceTypes:[{name:"Standard_B1ms",label:"Standard_B1ms",cpu:1,memory:2,storage:{type:"SSD",count:2,size:4}},{name:"Standard_B1s",label:"Standard_B1s",cpu:1,memory:1,storage:{type:"SSD",count:2,size:2}},{name:"Standard_B2ms",label:"Standard_B2ms",cpu:2,memory:8,storage:{type:"SSD",count:4,size:16}},{name:"Standard_B2s",label:"Standard_B2s",cpu:2,memory:4,storage:{type:"SSD",count:4,size:8}},{name:"Standard_B4ms",label:"Standard_B4ms",cpu:4,memory:16,storage:{type:"SSD",count:8,size:32}},{name:"Standard_B8ms",label:"Standard_B8ms",cpu:8,memory:32,storage:{type:"SSD",count:16,size:64}},{name:"Standard_B1ls",label:"Standard_B1ls",cpu:1,memory:.5,storage:{type:"SSD",count:2,size:1}}]},{type:"Dsv3-series",description:"The Dsv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.",instanceTypes:[{name:"Standard_D2s_v3",label:"Standard_D2s_v3",cpu:2,memory:8,storage:{type:"SSD",count:4,size:16}},{name:"Standard_D4s_v3",label:"Standard_D4s_v3",cpu:4,memory:16,storage:{type:"SSD",count:8,size:32}},{name:"Standard_D8s_v3",label:"Standard_D8s_v3",cpu:8,memory:32,storage:{type:"SSD",count:16,size:64}},{name:"Standard_D16s_v3",label:"Standard_D16s_v3",cpu:16,memory:64,storage:{type:"SSD",count:32,size:128}},{name:"Standard_D32s_v3",label:"Standard_D32s_v3",cpu:32,memory:128,storage:{type:"SSD",count:32,size:256}},{name:"Standard_D64s_v3",label:"Standard_D64s_v3",cpu:64,memory:256,storage:{type:"SSD",count:32,size:512}}]},{type:"Dv3-series",description:"The Dv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.",instanceTypes:[{name:"Standard_D2_v3",label:"Standard_D2_v3",cpu:2,memory:8,storage:{type:"SSD",count:4,size:50}},{name:"Standard_D4_v3",label:"Standard_D4_v3",cpu:4,memory:16,storage:{type:"SSD",count:8,size:100}},{name:"Standard_D8_v3",label:"Standard_D8_v3",cpu:8,memory:32,storage:{type:"SSD",count:16,size:200}},{name:"Standard_D16_v3",label:"Standard_D16_v3",cpu:16,memory:64,storage:{type:"SSD",count:32,size:400}},{name:"Standard_D32_v3",label:"Standard_D32_v3",cpu:32,memory:128,storage:{type:"SSD",count:32,size:800}},{name:"Standard_D64_v3",label:"Standard_D64_v3",cpu:64,memory:256,storage:{type:"SSD",count:32,size:1600}}]},{type:"DSv2-series",description:"",instanceTypes:[{name:"Standard_DS1_v2",label:"Standard_DS1_v2",cpu:1,memory:3.5,storage:{type:"SSD",count:4,size:7}},{name:"Standard_DS2_v2",label:"Standard_DS2_v2",cpu:2,memory:7,storage:{type:"SSD",count:8,size:14}},{name:"Standard_DS3_v2",label:"Standard_DS3_v2",cpu:4,memory:14,storage:{type:"SSD",count:16,size:28}},{name:"Standard_DS4_v2",label:"Standard_DS4_v2",cpu:8,memory:28,storage:{type:"SSD",count:32,size:56}},{name:"Standard_DS5_v2",label:"Standard_DS5_v2",cpu:16,memory:56,storage:{type:"SSD",count:64,size:112}},{name:"Standard_DS11_v2",label:"Standard_DS11_v2",cpu:2,memory:14,storage:{type:"SSD",count:8,size:28}},{name:"Standard_DS12_v2",label:"Standard_DS12_v2",cpu:4,memory:28,storage:{type:"SSD",count:16,size:56}},{name:"Standard_DS13_v2",label:"Standard_DS13_v2",cpu:8,memory:56,storage:{type:"SSD",count:32,size:112}},{name:"Standard_DS14_v2",label:"Standard_DS14_v2",cpu:16,memory:112,storage:{type:"SSD",count:64,size:224}},{name:"Standard_DS15_v2",label:"Standard_DS15_v2",cpu:20,memory:140,storage:{type:"SSD",count:64,size:280}}]},{type:"Dv2-series",description:"",instanceTypes:[{name:"Standard_D1_v2",label:"Standard_D1_v2",cpu:1,memory:3.5,storage:{type:"SSD",count:4,size:50}},{name:"Standard_D2_v2",label:"Standard_D2_v2",cpu:2,memory:7,storage:{type:"SSD",count:8,size:100}},{name:"Standard_D3_v2",label:"Standard_D3_v2",cpu:4,memory:14,storage:{type:"SSD",count:16,size:200}},{name:"Standard_D4_v2",label:"Standard_D4_v2",cpu:8,memory:28,storage:{type:"SSD",count:32,size:400}},{name:"Standard_D5_v2",label:"Standard_D5_v2",cpu:16,memory:56,storage:{type:"SSD",count:64,size:800}},{name:"Standard_D11_v2",label:"Standard_D11_v2",cpu:2,memory:14,storage:{type:"SSD",count:8,size:100}},{name:"Standard_D12_v2",label:"Standard_D12_v2",cpu:4,memory:28,storage:{type:"SSD",count:16,size:200}},{name:"Standard_D13_v2",label:"Standard_D13_v2",cpu:8,memory:56,storage:{type:"SSD",count:32,size:400}},{name:"Standard_D14_v2",label:"Standard_D14_v2",cpu:16,memory:112,storage:{type:"SSD",count:64,size:800}},{name:"Standard_D15_v2",label:"Standard_D15_v2",cpu:20,memory:140,storage:{type:"SSD",count:64,size:280}}]},{type:"Av2-series",description:"",instanceTypes:[{name:"Standard_A1_v2",label:"Standard_A1_v2",cpu:1,memory:2,storage:{type:"SSD",count:2,size:10}},{name:"Standard_A2m_v2",label:"Standard_A2m_v2",cpu:2,memory:16,storage:{type:"SSD",count:4,size:20}},{name:"Standard_A2_v2",label:"Standard_A2_v2",cpu:2,memory:4,storage:{type:"SSD",count:4,size:20}},{name:"Standard_A4m_v2",label:"Standard_A4m_v2",cpu:4,memory:32,storage:{type:"SSD",count:8,size:40}},{name:"Standard_A4_v2",label:"Standard_A4_v2",cpu:4,memory:8,storage:{type:"SSD",count:8,size:40}},{name:"Standard_A8m_v2",label:"Standard_A8m_v2",cpu:8,memory:64,storage:{type:"SSD",count:16,size:80}},{name:"Standard_A8_v2",label:"Standard_A8_v2",cpu:8,memory:16,storage:{type:"SSD",count:16,size:80}}]},{type:"DC-series",description:"",instanceTypes:[{name:"Standard_DC2s",label:"Standard_DC2s",cpu:2,memory:8,storage:{type:"SSD",count:2,size:100}},{name:"Standard_DC4s",label:"Standard_DC4s",cpu:4,memory:16,storage:{type:"SSD",count:4,size:200}}]}],icon:"hdd"},{type:"compute",label:"Compute Optimized",description:"High CPU-to-memory ratio. Good for medium traffic web servers, network appliances, batch processes, and application servers.",families:[{type:"Fsv2-series",description:"",instanceTypes:[{name:"Standard_F2s_v2",label:"Standard_F2s_v2",cpu:2,memory:4,storage:{type:"SSD",count:4,size:16}},{name:"Standard_F4s_v2",label:"Standard_F4s_v2",cpu:4,memory:8,storage:{type:"SSD",count:8,size:32}},{name:"Standard_F8s_v2",label:"Standard_F8s_v2",cpu:8,memory:16,storage:{type:"SSD",count:16,size:64}},{name:"Standard_F16s_v2",label:"Standard_F16s_v2",cpu:16,memory:32,storage:{type:"SSD",count:32,size:128}},{name:"Standard_F32s_v2",label:"Standard_F32s_v2",cpu:32,memory:64,storage:{type:"SSD",count:32,size:256}},{name:"Standard_F64s_v2",label:"Standard_F64s_v2",cpu:64,memory:128,storage:{type:"SSD",count:32,size:512}},{name:"Standard_F72s_v2",label:"Standard_F72s_v2",cpu:72,memory:144,storage:{type:"SSD",count:32,size:576}}]},{type:"Fs-series",description:"",instanceTypes:[{name:"Standard_F1s",label:"Standard_F1s",cpu:1,memory:2,storage:{type:"SSD",count:4,size:4}},{name:"Standard_F2s",label:"Standard_F2s",cpu:2,memory:4,storage:{type:"SSD",count:8,size:8}},{name:"Standard_F4s",label:"Standard_F4s",cpu:4,memory:8,storage:{type:"SSD",count:16,size:16}},{name:"Standard_F8s",label:"Standard_F8s",cpu:8,memory:16,storage:{type:"SSD",count:32,size:32}},{name:"Standard_F16s",label:"Standard_F16s",cpu:16,memory:32,storage:{type:"SSD",count:64,size:64}}]},{type:"F-series",description:"",instanceTypes:[{name:"Standard_F1",label:"Standard_F1",cpu:1,memory:2,storage:{type:"SSD",count:4,size:16}},{name:"Standard_F2",label:"Standard_F2",cpu:2,memory:4,storage:{type:"SSD",count:8,size:32}},{name:"Standard_F4",label:"Standard_F4",cpu:4,memory:8,storage:{type:"SSD",count:16,size:64}},{name:"Standard_F8",label:"Standard_F8",cpu:8,memory:16,storage:{type:"SSD",count:32,size:128}},{name:"Standard_F16",label:"Standard_F16",cpu:16,memory:32,storage:{type:"SSD",count:64,size:256}}]}],icon:"hdd"},{type:"custom",label:"Custom Type",description:"Select the instance type below.",families:[],icon:"asterisk"}];function a(e){return e&&e.storage?e.storage.count*e.storage.size:0}function n(){return t.map(function(e){for(const t of e.families)for(const e of t.instanceTypes)null==e.costFactor&&(e.costFactor=0);e.stats=function(e){const t={cpu:{min:Number.MAX_VALUE,max:-Number.MAX_VALUE},memory:{min:Number.MAX_VALUE,max:-Number.MAX_VALUE},storage:{min:Number.MAX_VALUE,max:-Number.MAX_VALUE},families:[]};return e.families&&e.families.length&&e.families.forEach(function(e){t.families.push(e.type);const n=ee.minBy(e.instanceTypes,"cpu").cpu||Number.MAX_VALUE,l=ee.maxBy(e.instanceTypes,"cpu").cpu||-Number.MAX_VALUE,r=ee.minBy(e.instanceTypes,"memory").memory||Number.MAX_VALUE,s=ee.maxBy(e.instanceTypes,"memory").memory||-Number.MAX_VALUE,i=a(ee.minBy(e.instanceTypes,a))||Number.MAX_VALUE,o=a(ee.maxBy(e.instanceTypes,a))||-Number.MAX_VALUE;t.cpu.min=Math.min(t.cpu.min,n),t.cpu.max=Math.max(t.cpu.max,l),t.memory.min=Math.min(t.memory.min,r),t.memory.max=Math.max(t.memory.max,s),t.storage.min=Math.min(t.storage.min,i),t.storage.max=Math.max(t.storage.max,o)}),t}(e)}),e.resolve(t)}this.getCategories=n,this.getAvailableTypesForRegions=function(e,t){const[a]=t;return e[a]},this.getAllTypesByRegion=function(){return n()}}}class ve extends ne.Component{constructor(){super(...arguments),this.state={instance:this.props.initialInstance,loading:!this.props.initialInstance},this.activeRequestId=0,this.isUnmounted=!1,this.retrieveInstance=(e=!1)=>{const t=++this.activeRequestId,a=this.getInstanceParams();this.setState(e?{instance:void 0,loading:!0}:{loading:!0}),async function({app:e,instance:t}){var a;const n=function(e,t){return e.serverGroups?function(e,t){var a,n;const l=(null==(a=e.serverGroups)?void 0:a.data)||[];for(const e of l){const a=null==(n=e.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,extraData:{serverGroup:e.name,vpcId:e.vpcId},loadBalancers:e.loadBalancers,region:e.region,summary:a,vpcId:e.vpcId}}}(e,t.instanceId)||function(e,t){var a,n;const l=(null==(a=e.loadBalancers)?void 0:a.data)||[];for(const e of l){const a=null==(n=e.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId}}}(e,t.instanceId)||function(e,t){var a,n;const l=(null==(a=e.loadBalancers)?void 0:a.data)||[];for(const e of l){const a=(e.serverGroups||[]).filter(e=>!e.isDisabled);for(const l of a){const a=null==(n=l.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId}}}}(e,t.instanceId)||function(e,t){var a,n;const l=(null==(a=e.loadBalancers)?void 0:a.data)||[];for(const e of l){const a=(e.serverGroups||[]).filter(e=>e.isDisabled);for(const l of a){const a=null==(n=l.instances)?void 0:n.find(e=>e.id===t);if(a)return{account:e.account,loadBalancers:[e.name],region:e.region,summary:a,vpcId:e.vpcId}}}}(e,t.instanceId):{account:t.account,loadBalancers:[],region:t.region,summary:{}}}(e,t);if(!(null==n?void 0:n.summary))return{instanceIdNotFound:t.instanceId};const{account:l,region:r}=n;if(!l||!r)return{instanceIdNotFound:t.instanceId};i.addExtraDataToLatest("instances",{...n.extraData,account:l,region:r});const s=await o.getInstanceDetails(l,r,t.instanceId),c=function(e,t,a){const n=((a?t.health:e.health)||[]).filter(e=>"Azure"!==e.type||"Unknown"!==e.state),l=t.health||[];return n.map(e=>{const t=l.find(t=>t.type===e.type);return t?{...t,...e}:e})}(n.summary,s,e.isStandalone),d=c.find(e=>"Discovery"===e.type),u={...n.summary,...s,account:l,baseIpAddress:s.publicDnsName||s.privateIpAddress,healthMetrics:c,instanceId:s.instanceId||n.summary.instanceId||n.summary.id||t.instanceId,loadBalancers:n.loadBalancers,region:r,vpcId:n.vpcId};return(null==(a=n.extraData)?void 0:a.serverGroup)&&(u.serverGroup=n.extraData.serverGroup),(null==d?void 0:d.vipAddress)&&(u.vipAddress=d.vipAddress.includes(",")?d.vipAddress.split(","):[d.vipAddress]),u}({app:this.props.app,instance:a}).then(e=>{this.isUnmounted||t!==this.activeRequestId||this.setState({instance:e,loading:!1})},()=>{this.isUnmounted||t!==this.activeRequestId||(this.setState({loading:!1}),this.props.stateService.go("^"))})}}componentDidMount(){if(this.props.initialInstance)return;const{app:e}=this.props;(e.isStandalone||!e.serverGroups?Promise.resolve():Promise.all([e.serverGroups.ready(),e.loadBalancers.ready()])).then(()=>{var t;this.isUnmounted||(this.retrieveInstance(),!e.isStandalone&&(null==(t=e.serverGroups)?void 0:t.onRefresh)&&(this.unsubscribeFromRefresh=e.serverGroups.onRefresh(this.retrieveInstance)))})}componentDidUpdate(e){const t=this.getInstanceParams(e),a=this.getInstanceParams();t.account===a.account&&t.instanceId===a.instanceId&&t.region===a.region||this.retrieveInstance(!0)}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}getInstanceParams(e=this.props){const t=e.instance||e.$stateParams||e.stateParams;return{account:null==t?void 0:t.account,instanceId:null==t?void 0:t.instanceId,provider:null==t?void 0:t.provider,region:null==t?void 0:t.region}}render(){const{app:e}=this.props,{instance:t,loading:n}=this.state,l=(null==t?void 0:t.instanceId)||(null==t?void 0:t.instanceIdNotFound)||this.getInstanceParams().instanceId;return ne.createElement("div",{className:"details-panel"},ne.createElement("div",{className:"header"},ne.createElement(a,{healthState:null==t?void 0:t.healthState,instanceId:l,loading:n,standalone:e.isStandalone}),!n&&t&&!t.instanceIdNotFound&&ne.createElement("div",{className:"actions"},ne.createElement(Be,{app:e,instance:t,router:this.props.router,stateParams:this.props.stateParams,stateService:this.props.stateService}))),!n&&t&&!t.instanceIdNotFound&&ne.createElement("div",{className:"content"},ne.createElement(be,{instance:t})),!n&&(null==t?void 0:t.instanceIdNotFound)&&ne.createElement("div",{className:"content"},ne.createElement("div",{className:"content-section"},ne.createElement("div",{className:"content-body text-center"},ne.createElement("h3",null,"Instance not found.")))))}}function fe(e,t,a){return(e.health||[]).some(e=>e.type===t&&e.state===a)}function Be({app:e,instance:t,stateService:a}){const n=(t.loadBalancers||[]).join(" and "),l=()=>{a.includes("**.instanceDetails",{instanceId:t.instanceId})&&a.go("^")},r=(a,n,r,s,i=!1)=>{c.confirm({header:a,buttonText:n,account:t.account,taskMonitorConfig:{application:e,title:r,onTaskComplete:i?l:void 0},submitMethod:s})};return ne.createElement(le,{className:"dropdown",id:"azure-instance-actions-dropdown"},ne.createElement(le.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Instance Actions"),ne.createElement(le.Menu,null,ne.createElement(re,{onClick:()=>r(`Really terminate ${t.instanceId}?`,`Terminate ${t.instanceId}`,`Terminating ${t.instanceId}`,()=>d.terminateInstance(t,e),!0)},"Terminate"),t.serverGroup&&ne.createElement(re,{onClick:()=>r(`Really terminate ${t.instanceId} and shrink ${t.serverGroup}?`,`Terminate ${t.instanceId} and shrink ${t.serverGroup}`,`Terminating ${t.instanceId} and shrinking server group`,()=>d.terminateInstanceAndShrinkServerGroup(t,e),!0)},"Terminate and Shrink Server Group"),ne.createElement(re,{onClick:()=>r(`Really reboot ${t.instanceId}?`,`Reboot ${t.instanceId}`,`Rebooting ${t.instanceId}`,()=>d.rebootInstance(t,e))},"Reboot"),function(e){var t;return!!(null==(t=e.loadBalancers)?void 0:t.length)&&(fe(e,"LoadBalancer","OutOfService")||!(e.health||[]).some(e=>"LoadBalancer"===e.type))}(t)&&ne.createElement(re,{onClick:()=>r(`Really register ${t.instanceId} with ${n}?`,`Register ${t.instanceId}`,`Registering ${t.instanceId} with ${n}`,()=>d.registerInstanceWithLoadBalancer(t,e))},"Register with Load Balancer"),(t.health||[]).some(e=>"LoadBalancer"===e.type)&&ne.createElement(re,{onClick:()=>r(`Really deregister ${t.instanceId} from ${n}?`,`Deregister ${t.instanceId}`,`Deregistering ${t.instanceId} from ${n}`,()=>d.deregisterInstanceFromLoadBalancer(t,e))},"Deregister from Load Balancer"),function(e){return fe(e,"Discovery","OutOfService")}(t)&&ne.createElement(re,{onClick:()=>r(`Really enable ${t.instanceId} in discovery?`,`Enable ${t.instanceId}`,`Enabling ${t.instanceId} in discovery`,()=>d.enableInstanceInDiscovery(t,e))},"Enable in Discovery"),(t.health||[]).some(e=>"Discovery"===e.type)&&ne.createElement(re,{onClick:()=>r(`Really disable ${t.instanceId} in discovery?`,`Disable ${t.instanceId}`,`Disabling ${t.instanceId} in discovery`,()=>d.disableInstanceInDiscovery(t,e))},"Disable in Discovery")))}n(Be);const Ae=n(ve);function be({instance:e}){return ne.createElement(l,{heading:"Instance Information",defaultExpanded:!0},ne.createElement("dl",{className:"dl-horizontal dl-narrow"},ne.createElement("dt",null,"Launched"),ne.createElement("dd",null,e.launchTime?r(e.launchTime):"(Unknown)"),ne.createElement("dt",null,"In"),ne.createElement("dd",null,ne.createElement(s,{account:e.account})," ",e.region||"(Unknown)"),ne.createElement("dt",null,"Type"),ne.createElement("dd",null,e.instanceType||"(Unknown)"),e.serverGroup&&ne.createElement("dt",null,"Server Group"),e.serverGroup&&ne.createElement("dd",null,ne.createElement(ae,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.serverGroup,provider:e.provider}},ne.createElement("a",null,e.serverGroup)))))}const ye=u.providers.azure||{defaults:{}};ye&&(ye.resetToOriginal=u.resetProvider("azure"));class Ee{constructor(e){this.promiseService=e}normalizeLoadBalancer(e){e.serverGroups.forEach(function(t){t.account=e.account,t.region=e.region,t.detachedInstances?(t.detachedInstances=t.detachedInstances.map(function(e){return{id:e}}),t.instances=t.instances.concat(t.detachedInstances)):t.detachedInstances=[]});const t=ee.filter(e.serverGroups,{isDisabled:!1});return e.provider=e.type,e.instances=ee.chain(t).map("instances").flatten().value(),e.detachedInstances=ee.chain(t).map("detachedInstances").flatten().value(),this.promiseService.resolve(e)}convertLoadBalancerForEditing(e){const t={region:e.region,credentials:e.account,name:e.name,stack:e.stack,detail:e.detail,vnet:e.vnet,subnet:e.subnet,probes:[],loadBalancingRules:[]};if(e.elb){const a=e.elb;t.securityGroups=a.securityGroups,t.vnet=a.vnet,a.loadBalancingRules&&(t.loadBalancingRules=a.loadBalancingRules),t.probes=a.probes,a.dnsName&&"dns-not-found"!==a.dnsName&&(t.dnsName=a.dnsName.split(".")[0])}return t}constructNewLoadBalancerTemplate(e){return{stack:"",detail:"frontend",credentials:e.defaultCredentials.azure||ye.defaults.account,region:e.defaultRegions.azure||ye.defaults.region,cloudProvider:"azure",vnet:null,subnet:null,probes:[{probeName:"",probeProtocol:"HTTP",probePort:"80",probePath:"/",probeInterval:30,unhealthyThreshold:8,timeout:120}],securityGroups:[],loadBalancingRules:[{ruleName:"",protocol:"HTTP",externalPort:80,backendPort:80,probeName:"",persistence:"None",idleTimeout:4}],sku:"Standard_v2"}}}const De=["Standard_v2","Standard_Small"];function Se(e,t){var a;const n=function(e){const t=String(e||"").toLowerCase().split("_").join(" ");return"application gateway"===t?"azure application gateway":"load balancer"===t?"azure load balancer":t}(("string"==typeof t?t:null==t?void 0:t.type)||(null==e?void 0:e.loadBalancerType)||(null==(a=null==e?void 0:e.elb)?void 0:a.loadBalancerType));return de.find(e=>e.type.toLowerCase()===n)||de[0]}function Fe(e){return null!=e?e:""}function Ce(e){return`${e.name}|${e.resourceGroup||""}`}function Ne(e){return e.resourceGroup?`${e.name} (${e.resourceGroup})`:e.name}function Ie(e){return"Azure Load Balancer"===e}function ke(e){return Ie(e)?["TCP","UDP"]:["HTTP"]}function Ge(e){return Ie(e)?["TCP","HTTP"]:["HTTP"]}function we(e){if(""===e||null==e)return;const t=Number(e);return Number.isFinite(t)?t:void 0}function Te(e,t){const a=ke(t),n=Ge(t);return{...e,sessionPersistence:Ie(t)?e.sessionPersistence||"None":e.sessionPersistence,probes:(e.probes||[{}]).map(e=>({...e,probeProtocol:n.includes(e.probeProtocol)?e.probeProtocol:n[0]})),loadBalancingRules:(e.loadBalancingRules||[{}]).map(e=>({...e,protocol:a.includes(e.protocol)?e.protocol:a[0]}))}}function ze(e){return""!==e&&null!=e}function Re(e,t,a){(function(e){if(!ze(e))return!1;const t=Number(e);return Number.isFinite(t)&&t<0})(t)&&e.push(a)}function Pe(e,t,a={}){var n,l;const r=[],s=(null==(n=e.probes)?void 0:n[0])||{},i=e.loadBalancingRules||[];var o;return e.name?e.name.length>32&&r.push("Name must be 32 characters or fewer."):r.push("Name is required."),a.isNew&&(e.credentials||r.push("Account is required."),e.region||r.push("Region is required."),e.stack?(o=e.stack,/^[a-zA-Z0-9]+$/.test(o||"")||r.push("Stack may only contain letters and numbers.")):r.push("Stack is required."),e.detail?function(e){return/^[a-zA-Z0-9-]+$/.test(e||"")}(e.detail)||r.push("Detail may only contain letters, numbers, and hyphens."):r.push("Detail is required."),(a.existingLoadBalancerNames||[]).some(t=>t.toLowerCase()===e.name.toLowerCase())&&r.push(`A load balancer named ${e.name} already exists in this account and region.`),Ie(t)||(e.selectedVnet||e.vnet||r.push("VNet is required."),e.selectedSubnet||e.subnet||r.push("Subnet is required."))),i.length||r.push("At least one listener is required."),i.forEach((e,a)=>{ke(t).includes(e.protocol)||r.push(`Listener ${a+1} protocol is invalid.`),ze(e.externalPort)?Re(r,e.externalPort,`Listener ${a+1} external port must be 0 or greater.`):r.push(`Listener ${a+1} external port is required.`),ze(e.backendPort)?Re(r,e.backendPort,`Listener ${a+1} backend port must be 0 or greater.`):r.push(`Listener ${a+1} backend port is required.`),Re(r,e.idleTimeout,`Listener ${a+1} idle timeout must be 0 or greater.`)}),Ge(t).includes(s.probeProtocol)||r.push("Health check protocol is invalid."),ze(s.probePort)?Re(r,s.probePort,"Health check port must be 0 or greater."):r.push("Health check port is required."),0!==(null==(l=s.probeProtocol)?void 0:l.indexOf("HTTP"))||s.probePath||r.push("Health check path is required."),Re(r,s.probeInterval,"Health check interval must be 0 or greater."),Re(r,s.unhealthyThreshold,"Unhealthy threshold must be 0 or greater."),Re(r,s.timeout,"Health check timeout must be 0 or greater."),r}class xe extends ne.Component{constructor(e){super(e),this.mounted=!1,this.transformer=new Ee(m),this.onTaskComplete=()=>{var e;const t=this.getApplication();null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0,this.applicationRefreshUnsubscribe=t.loadBalancers.onNextRefresh(this.onApplicationRefresh),t.loadBalancers.refresh()},this.onApplicationRefresh=()=>{var e;if(null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0,!this.mounted)return;const{loadBalancer:t}=this.state;this.props.closeModal();const a={name:t.name,accountId:t.credentials,region:t.region,provider:"azure"};this.props.stateService.includes("**.loadBalancerDetails")?this.props.stateService.go("^.loadBalancerDetails",a):this.props.stateService.go(".loadBalancerDetails",a)},this.updateName=()=>{this.props.isNew&&this.updateLoadBalancer({name:this.getName()})},this.accountUpdated=()=>{p.getRegionsForAccount(this.state.loadBalancer.credentials).then(e=>{this.mounted&&this.setState({regions:e},this.regionUpdated)})},this.regionUpdated=()=>{this.updateName(),this.updateLoadBalancerNames(),this.vnetUpdated()},this.updateLoadBalancerNames=()=>{var e,t;const a=null==(t=(e=this.getApplication()).getDataSource)?void 0:t.call(e,"loadBalancers");if(!a||!this.props.isNew)return;const{credentials:n,region:l}=this.state.loadBalancer;a.refresh(!0).then(()=>{if(!this.mounted)return;const e=(a.data||[]).filter(e=>e.account===n&&e.region===l).map(e=>e.name);this.setState({existingLoadBalancerNames:e})})},this.vnetUpdated=()=>{const{credentials:e,region:t}=this.state.loadBalancer;this.setState(e=>({loadBalancer:{...e.loadBalancer,selectedVnet:null,vnet:null,vnetResourceGroup:null},selectedVnets:[]})),g.listNetworks().then(a=>{if(!this.mounted)return;const n=(Array.isArray(a)?a:a.azure||[]).filter(a=>a.account===e&&a.region===t);this.setState({selectedVnets:n})}),this.subnetUpdated()},this.subnetUpdated=()=>{this.setState(e=>({loadBalancer:{...e.loadBalancer,selectedSubnet:null,subnet:null},selectedSubnets:[]}))},this.selectedVnetChanged=e=>{const t=(a=this.state.selectedVnets,n=e,a.find(e=>Ce(e)===n)||null);var a,n;const l=((null==t?void 0:t.subnets)||[]).filter(e=>(e.devices||[]).every(e=>!e||"applicationGateways"===e.type));this.setState(e=>({loadBalancer:{...e.loadBalancer,selectedVnet:t,vnet:(null==t?void 0:t.name)||null,vnetResourceGroup:(null==t?void 0:t.resourceGroup)||null,selectedSubnet:null,subnet:null},selectedSubnets:l}))},this.selectedSubnetChanged=e=>{const t=this.state.selectedSubnets.find(t=>t.name===e)||null;this.updateLoadBalancer({selectedSubnet:t,subnet:(null==t?void 0:t.name)||null})},this.updateField=(e,t)=>{this.updateLoadBalancer({[e]:t},"credentials"===e?this.accountUpdated:"region"===e?this.regionUpdated:void 0)},this.updateNamePart=(e,t)=>{this.updateLoadBalancer({[e]:t},this.updateName)},this.updateProbe=(e,t)=>{var a;const n=[{...(null==(a=this.state.loadBalancer.probes)?void 0:a[0])||{},[e]:t}];this.updateLoadBalancer({probes:n})},this.updateRule=(e,t,a)=>{const n=[...this.state.loadBalancer.loadBalancingRules||[]];n[e]={...n[e],[t]:a},this.updateLoadBalancer({loadBalancingRules:n})},this.updateFirstRule=(e,t)=>{this.updateRule(0,e,t)},this.addListener=()=>{const e=[...this.state.loadBalancer.loadBalancingRules||[],{protocol:ke(this.getLoadBalancerType())[0]}];this.updateLoadBalancer({loadBalancingRules:e})},this.removeListener=e=>{const t=[...this.state.loadBalancer.loadBalancingRules||[]];t.splice(e,1),this.updateLoadBalancer({loadBalancingRules:t})},this.submit=()=>{const e=this.getApplication(),t=this.props.isNew?"Create":"Update";if(Pe(this.state.loadBalancer,this.getLoadBalancerType(),{existingLoadBalancerNames:this.state.existingLoadBalancerNames,isNew:this.props.isNew}).length)return;const a=function(e,t){const a={...e,probes:(e.probes||[]).map(e=>({...e})),loadBalancingRules:(e.loadBalancingRules||[]).map(e=>({...e}))};!Ie(t)&&a.selectedVnet&&(a.vnet=a.selectedVnet.name,a.vnetResourceGroup=a.selectedVnet.resourceGroup),!Ie(t)&&a.selectedSubnet&&(a.subnet=a.selectedSubnet.name);const n=a.clusterName||a.name,l=`${n}-probe`,r=`${n}-rule`;return a.type="upsertLoadBalancer",a.loadBalancerType=t,a.vnet||a.subnetType||(a.securityGroups=null),a.probes[0]&&(a.probes[0].probeName=l,"TCP"===a.probes[0].probeProtocol&&(a.probes[0].probePath=void 0)),a.loadBalancingRules.forEach((e,t)=>{delete e.persistence,delete e.sessionPersistence,e.ruleName=`${r}${t}`,e.probeName=l}),a}(this.state.loadBalancer,this.getLoadBalancerType());if(this.props.forPipelineConfig)return void this.props.closeModal(a);const n={cloudProvider:"azure",appName:e.name,clusterName:a.clusterName,resourceGroupName:a.clusterName,loadBalancerName:a.name};this.setState({loadBalancer:a}),this.state.taskMonitor.submit(()=>h.upsertLoadBalancer(a,e,t,n))};const t=this.getApplication(),a=new v({application:t,title:(e.isNew?"Creating":"Updating")+" your load balancer",onDismiss:()=>this.props.dismissModal(),onTaskComplete:this.onTaskComplete});this.state={accounts:[],accountsLoaded:!e.isNew,existingLoadBalancerNames:[],loadBalancer:this.initializeLoadBalancer(),regions:[],selectedSubnets:[],selectedVnets:[],taskMonitor:a}}static show(e){return f.show(Le,e,{dialogClassName:"modal-lg"})}componentDidMount(){this.mounted=!0,this.props.isNew&&(this.updateName(),this.initializeCreateMode())}componentWillUnmount(){var e;this.mounted=!1,null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0}getApplication(){return this.props.app||this.props.application}getLoadBalancerType(){return Se(this.props.loadBalancer,this.props.loadBalancerType).type}initializeLoadBalancer(){if(this.props.loadBalancer){const e=this.props.loadBalancer;let t=this.props.forPipelineConfig&&!e.elb?{...e}:this.transformer.convertLoadBalancerForEditing(e);if(t=function(e,t,a=e){var n,l,r,s,i;if(!Ie(t))return e;const o=(null==(l=null==(n=a.elb)?void 0:n.loadBalancingRules)?void 0:l[0])||(null==(r=a.loadBalancingRules)?void 0:r[0])||{},c=(null==(s=e.loadBalancingRules)?void 0:s[0])||{};return{...e,sessionPersistence:e.sessionPersistence||(null==(i=a.elb)?void 0:i.sessionPersistence)||o.persistence||o.sessionPersistence||c.persistence||c.sessionPersistence}}(t,this.getLoadBalancerType(),e),this.props.isNew){const e=B.parseLoadBalancerName(t.name);t.stack=e.stack,t.detail=e.freeFormDetails,delete t.name}return Te(t,this.getLoadBalancerType())}return Te(this.transformer.constructNewLoadBalancerTemplate(this.getApplication()),this.getLoadBalancerType())}initializeCreateMode(){p.listAccounts("azure").then(e=>{this.mounted&&this.setState({accounts:e,accountsLoaded:!0},this.accountUpdated)})}getName(){const{loadBalancer:e}=this.state;return[this.getApplication().name,e.stack||"",e.detail||""].join("-").replace(/-+$/,"")}updateLoadBalancer(e,t){this.setState(t=>({loadBalancer:{...t.loadBalancer,...e}}),t)}renderInput(e,t,a="text",n=this.updateField){const l=Fe(this.state.loadBalancer[t]);return ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},e),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",type:a,value:l,onChange:e=>n(t,e.target.value)})))}renderSelect(e,t,a,n,l=e=>e.name||e,r=l){return ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},e),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",value:t||"",onChange:e=>n(e.target.value)},ne.createElement("option",{value:""},"Select..."),a.map(e=>ne.createElement("option",{key:r(e),value:r(e)},l(e))))))}renderSkuSelect(){return this.renderSelect("SKU",this.state.loadBalancer.sku,De,e=>this.updateField("sku",e),e=>e)}renderProbeInput(e,t,a="text"){var n;const l=Fe(((null==(n=this.state.loadBalancer.probes)?void 0:n[0])||{})[t]);return ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},e),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",min:"number"===a?0:void 0,type:a,value:l,onChange:e=>this.updateProbe(t,"number"===a?we(e.target.value):e.target.value)})))}renderFirstRuleInput(e,t,a="text"){var n;const l=Fe(((null==(n=this.state.loadBalancer.loadBalancingRules)?void 0:n[0])||{})[t]);return ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},e),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",min:"number"===a?0:void 0,type:a,value:l,onChange:e=>this.updateFirstRule(t,"number"===a?we(e.target.value):e.target.value)})))}render(){var e,t;const{dismissModal:a,isNew:n}=this.props,{accounts:l,accountsLoaded:r,existingLoadBalancerNames:s,loadBalancer:i,regions:o,selectedSubnets:c,selectedVnets:d,taskMonitor:u}=this.state,m=(null==(e=i.probes)?void 0:e[0])||{},p=u.submitting,g=this.getLoadBalancerType(),h=Pe(i,g,{existingLoadBalancerNames:s,isNew:n}),v=ke(g),f=Ge(g),B=n,E=function(e,t){return e&&!Ie(t)}(n,g),D=function(e,t){return e&&!Ie(t)}(n,g);return ne.createElement(ne.Fragment,null,ne.createElement(A,{monitor:u}),ne.createElement(b,{dismiss:a}),ne.createElement(se.Header,null,ne.createElement(se.Title,null,n?`Create New ${g}`:`Edit ${g} ${i.name}`)),ne.createElement(se.Body,null,ne.createElement("form",{className:"form-horizontal",onSubmit:e=>e.preventDefault()},B&&this.renderInput("Stack","stack","text",this.updateNamePart),B&&this.renderInput("Detail","detail","text",this.updateNamePart),B&&this.renderInput("Name","name"),B&&this.renderSelect("Account",i.credentials,l,e=>this.updateField("credentials",e)),B&&this.renderSelect("Region",i.region,o,e=>this.updateField("region",e)),E&&this.renderSelect("VNet",i.selectedVnet?Ce(i.selectedVnet):"",d,this.selectedVnetChanged,Ne,Ce),E&&this.renderSelect("Subnet",(null==(t=i.selectedSubnet)?void 0:t.name)||i.subnet,c,this.selectedSubnetChanged),this.renderInput("DNS Name","dnsName"),D&&this.renderSkuSelect(),ne.createElement("h4",null,"Listeners"),(i.loadBalancingRules||[]).map((e,t)=>ne.createElement("div",{className:"well",key:t},ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Protocol"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",value:e.protocol||v[0],onChange:e=>this.updateRule(t,"protocol",e.target.value)},v.map(e=>ne.createElement("option",{key:e,value:e},e))))),ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"External Port"),ne.createElement("div",{className:"col-md-3"},ne.createElement("input",{className:"form-control input-sm",min:0,type:"number",value:Fe(e.externalPort),onChange:e=>this.updateRule(t,"externalPort",we(e.target.value))})),ne.createElement("label",{className:"col-md-2 control-label"},"Backend Port"),ne.createElement("div",{className:"col-md-3"},ne.createElement("input",{className:"form-control input-sm",min:0,type:"number",value:Fe(e.backendPort),onChange:e=>this.updateRule(t,"backendPort",we(e.target.value))}))),ne.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>this.removeListener(t)},"Remove Listener"))),ne.createElement("button",{className:"btn btn-default",type:"button",onClick:this.addListener},"Add Listener"),ne.createElement("h4",null,"Health Check"),ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Probe Protocol"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",value:m.probeProtocol||f[0],onChange:e=>this.updateProbe("probeProtocol",e.target.value)},f.map(e=>ne.createElement("option",{key:e,value:e},e))))),ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Probe Port"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",min:0,type:"number",value:Fe(m.probePort),onChange:e=>this.updateProbe("probePort",we(e.target.value))}))),"TCP"!==m.probeProtocol&&ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Probe Path"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",value:m.probePath||"",onChange:e=>this.updateProbe("probePath",e.target.value)}))),ne.createElement("h4",null,"Advanced Settings"),this.renderProbeInput("Probe Interval","probeInterval","number"),this.renderProbeInput("Unhealthy Threshold","unhealthyThreshold","number"),Ie(g)&&this.renderFirstRuleInput("Idle Timeout","idleTimeout","number"),Ie(g)&&ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Session Persistence"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",value:i.sessionPersistence||"None",onChange:e=>this.updateField("sessionPersistence",e.target.value)},ne.createElement("option",{value:"None"},"None"),ne.createElement("option",{value:"Client IP"},"Client IP"),ne.createElement("option",{value:"Client IP and protocol"},"Client IP and protocol")))),!Ie(g)&&this.renderProbeInput("Probe Timeout","timeout","number")),!!h.length&&ne.createElement("div",{className:"alert alert-danger"},h.map(e=>ne.createElement("div",{key:e},e)))),ne.createElement(se.Footer,null,ne.createElement("button",{className:"btn btn-default",disabled:p,onClick:a,type:"button"},"Cancel"),ne.createElement(y,{isDisabled:n&&!r||p||!!h.length,isNew:n,label:n?"Create":"Update",onClick:this.submit,submitting:p})))}}xe.defaultProps={closeModal:E,dismissModal:E,isNew:!0};const Le=Object.assign(n(xe),{show:xe.show}),Ve=class e extends ne.Component{constructor(e){super(e),this.choose=()=>{const e=this.props.app||this.props.application,t=Le.show({...this.props,app:e,application:e,loadBalancer:this.props.loadBalancer||null,isNew:!1!==this.props.isNew,forPipelineConfig:this.props.forPipelineConfig||!1,loadBalancerType:this.state.selectedChoice});this.props.closeModal(t)},this.close=e=>{this.props.dismissModal(e)},this.state={choices:de,selectedChoice:Se(e.loadBalancer,e.loadBalancerType)}}static show(t){if(!1===t.isNew){const e=t.app||t.application;return Le.show({...t,app:e,application:e,loadBalancer:t.loadBalancer,isNew:!1,forPipelineConfig:t.forPipelineConfig||!1})}const a={...t,className:"create-pipeline-modal-overflow-visible"};return f.show(e,a)}choiceSelected(e){this.setState({selectedChoice:e})}render(){const{choices:e,selectedChoice:t}=this.state;return ne.createElement(ne.Fragment,null,ne.createElement(b,{dismiss:this.close}),ne.createElement(se.Header,null,ne.createElement(se.Title,null,"Select Type of Load Balancer")),ne.createElement(se.Body,null,ne.createElement("div",{className:"modal-body"},ne.createElement("div",{className:"card-choices"},e.map(e=>ne.createElement("div",{key:e.type,className:"card "+(t===e?"active":""),onClick:()=>this.choiceSelected(e)},ne.createElement("h3",{className:"load-balancer-label"},e.type),ne.createElement("div",null,e.description)))),ne.createElement("div",{className:"load-balancer-description"}))),ne.createElement(se.Footer,null,ne.createElement(ie,{onClick:this.choose},"Configure Load Balancer ",ne.createElement("span",{className:"glyphicon glyphicon-chevron-right"}))))}};Ve.defaultProps={closeModal:E,dismissModal:E},Ve.supportsPipelineConfig=!0;let Me=Ve;async function Oe({app:e,autoClose:t,loadBalancers:a,loadBalancerParams:n,loadBalancerReader:l,securityGroupReader:r}){const{accountId:s,name:i,region:o}=n,c=(a||e.loadBalancers.data).find(e=>e.name===i&&e.region===o&&e.account===s);if(!c)return void t();const d=(await l.getLoadBalancerDetails(c.provider||c.cloudProvider,s,o,i)).find(e=>e.name===i);var u;return d&&(c.elb=d,c.account=s,c.securityGroups=function(e,t,a,n){var l;const r=(null==(l=t.elb)?void 0:l.securityGroups)||t.securityGroups||[];return r.length?r.map(t=>n.getApplicationSecurityGroup(e,a.accountId,a.region,t)).filter(Boolean).sort((e,t)=>e.name.localeCompare(t.name)):[]}(e,c,n,r),c.loadBalancerType=(null==(u=c.loadBalancerType)?void 0:u.includes("_"))?u.split("_").map(e=>{const t=e.toLowerCase();return`${t.substring(0,1).toUpperCase()}${t.substring(1)}`}).join(" "):u),c}function Ue({app:e,loadBalancerParams:t,autoClose:a}){const n=t,l=e.getDataSource("loadBalancers"),{data:r,loaded:s,refresh:i,error:o}=C(l),{loadBalancerReader:c,securityGroupReader:d}=N(),[u,m]=ne.useState(),[p,g]=ne.useState(!1),[h,v]=ne.useState(null),f=ne.useRef(a),B=ne.useRef(!0),A=ne.useRef(0),{accountId:b,name:y,provider:E,region:D}=n;ne.useEffect(()=>()=>{B.current=!1},[]),ne.useEffect(()=>{f.current=a},[a]);const S=ne.useCallback(async()=>{const t=++A.current;if(s&&!o){g(!0),v(null);try{const a=await Oe({app:e,loadBalancerParams:{accountId:b,name:y,provider:E,region:D},loadBalancers:r,autoClose:()=>f.current(),loadBalancerReader:c,securityGroupReader:d});B.current&&t===A.current&&m(a)}catch(e){B.current&&t===A.current&&v((null==e?void 0:e.message)||String(e))}finally{B.current&&t===A.current&&g(!1)}}else B.current&&g(!1)},[b,e,o,c,r,s,y,E,D,d]);return ne.useEffect(()=>{S()},[S]),{data:u,loading:!s||p,error:o||h,refetch:async()=>{i()}}}function _e({app:e,loadBalancer:t}){var a;const n=!(null==(a=t.serverGroups)?void 0:a.length);return ne.createElement(le,{className:"dropdown",id:"azure-load-balancer-actions-dropdown"},ne.createElement(le.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Load Balancer Actions"),ne.createElement(le.Menu,null,ne.createElement(re,{onClick:()=>{Le.show({app:e,loadBalancer:{...t},isNew:!1,loadBalancerType:t.loadBalancerType})}},"Edit Load Balancer"),ne.createElement(re,{disabled:!n,onClick:()=>{if(!n)return;const a={cloudProvider:"azure",loadBalancerName:t.name,loadBalancerType:t.loadBalancerType,credentials:t.account,region:t.region,appName:e.name};c.confirm({header:`Really delete ${t.name}?`,buttonText:`Delete ${t.name}`,account:t.account,taskMonitorConfig:{application:e,title:`Deleting ${t.name}`},submitMethod:()=>h.deleteLoadBalancer(a,e)})},title:n?void 0:"You must detach all server groups before you can delete this load balancer."},"Delete Load Balancer")))}function He(e,t){return e.isDisabled!==t.isDisabled?e.isDisabled?1:-1:t.name.localeCompare(e.name)}const je=[function({loadBalancer:e}){const t=e.elb||{},a=e.serverGroups||[],n="Azure Application Gateway"===e.loadBalancerType;return ne.createElement(l,{heading:"Load Balancer Details",defaultExpanded:!0},ne.createElement("dl",{className:"dl-horizontal dl-narrow"},ne.createElement("dt",null,"Type"),ne.createElement("dd",null,e.loadBalancerType||"-"),ne.createElement("dt",null,"Created"),ne.createElement("dd",null,t.createdTime?r(t.createdTime):"-"),ne.createElement("dt",null,"In"),ne.createElement("dd",null,ne.createElement(s,{account:e.account})," ",e.region),n&&ne.createElement("dt",null,"VNet"),n&&ne.createElement("dd",null,t.vnet||"-"),n&&ne.createElement("dt",null,"Subnet"),n&&ne.createElement("dd",null,t.subnet||"-")),!!a.length&&ne.createElement("dl",{className:"horizontal-when-filters-collapsed"},ne.createElement("dt",null,"Server Groups"),ne.createElement("dd",null,ne.createElement("ul",{className:"collapse-margin-on-filter-collapse"},a.slice().sort(He).map(e=>ne.createElement("li",{key:e.name},ne.createElement(ae,{to:"^.serverGroup",params:{region:e.region,accountId:e.account,serverGroup:e.name,provider:"azure"}},ne.createElement("a",null,e.name))))))),t.dnsName&&ne.createElement("dl",{className:"horizontal-when-filters-collapsed"},ne.createElement("dt",null,"DNS Name:"),ne.createElement("dd",null,ne.createElement("a",{target:"_blank",href:`//${t.dnsName}`},t.dnsName)," ",ne.createElement(D,{text:t.dnsName,toolTip:"Copy DNS Name to clipboard"}))))},function({loadBalancer:e}){return ne.createElement(l,{heading:"Status",defaultExpanded:!0},ne.createElement(S,{className:"pull-left",container:e.instanceCounts}))},function({loadBalancer:e}){var t;const a=(null==(t=e.elb)?void 0:t.loadBalancingRules)||[];return ne.createElement(l,{heading:"Listeners"},ne.createElement("dl",null,ne.createElement("dt",null,"Load Balancer -> Instance"),a.length?a.map((e,t)=>ne.createElement("dd",{key:e.ruleName||t},e.protocol,":",e.externalPort," -> ",e.backendPort)):ne.createElement("dd",null,"-")))},function({loadBalancer:e}){const t=e.securityGroups||[];return ne.createElement(l,{heading:F.get("Firewalls")},ne.createElement("ul",null,t.map(t=>ne.createElement("li",{key:t.id||t.name},ne.createElement(ae,{to:"^.firewallDetails",params:{name:t.name,accountId:e.account,region:e.region,vpcId:e.vpcId,provider:e.provider}},ne.createElement("a",null,t.name," (",t.id,")"))))))},function({loadBalancer:e}){var t,a;const n=null==(a=null==(t=e.elb)?void 0:t.probes)?void 0:a[0];return ne.createElement(l,{heading:"Health Checks"},ne.createElement("dl",{className:"horizontal-when-filters-collapsed"},ne.createElement("dt",null,"Target"),ne.createElement("dd",null,(null==n?void 0:n.probeProtocol)||"-"),ne.createElement("dt",null,"Interval"),ne.createElement("dd",null,(null==n?void 0:n.probeInterval)?`${n.probeInterval} seconds`:"-"),ne.createElement("dt",null,"Unhealthy Threshold"),ne.createElement("dd",null,(null==n?void 0:n.unhealthyThreshold)||"-"),ne.createElement("dt",null,"Timeout"),ne.createElement("dd",null,(null==n?void 0:n.timeout)?`${n.timeout} seconds`:"-")))}];const Qe=["linux","windows"],Xe=["DEB","RPM"];function qe(e){return Object.keys(e).reduce((t,a)=>(""!==e[a]&&(t[a]=e[a]),t),{})}function We(e){return null!=e.managedImage?"managed":null!=e.publisher?"custom":"default"}class Ye extends ne.Component{constructor(){super(...arguments),this.azureImageReader=new ge,this.mounted=!1,this.state={accounts:[],baseLabelOptions:[],baseOsOptions:[],extendedAttributeKey:"",extendedAttributeValue:"",loading:!0,loadError:!1,managedImageOptions:[],regions:[],roscoMode:!1,showAdvancedOptions:!1,sourceImageMode:We(this.props.stage)}}componentDidMount(){this.mounted=!0,this.initialize()}componentWillUnmount(){this.mounted=!1}initialize(){const e=this.props.stage;e.extendedAttributes=e.extendedAttributes||{},e.regions=e.regions||[],Promise.all([p.getCredentialsKeyedByAccount("azure"),I.getRegions("azure"),I.getBaseOsOptions("azure"),I.getBaseLabelOptions()]).then(([t,a,n,l])=>{if(!this.mounted)return;const r=this.applyDefaults(e,a,n.baseImages||[],l);this.replaceStage(r);const s={accounts:Object.keys(t),baseLabelOptions:l,baseOsOptions:n.baseImages||[],loading:!1,loadError:!1,regions:a,roscoMode:this.roscoMode(r),showAdvancedOptions:this.showAdvanced(r),sourceImageMode:We(r)};this.setState(s),"managed"===s.sourceImageMode&&this.loadManagedImages(r.account)}).catch(()=>{this.mounted&&this.setState({loading:!1,loadError:!0})})}applyDefaults(e,t,a,n){var l;const r=qe({...e});return r.extendedAttributes=r.extendedAttributes||{},r.regions=r.regions||[],r.user||(r.user=null==(l=k.getAuthenticatedUser())?void 0:l.name),1===t.length?r.region=t[0]:r.region&&!t.includes(r.region)&&delete r.region,!r.regions.length&&this.props.application.defaultRegions.azure&&(r.regions=[this.props.application.defaultRegions.azure]),!r.baseLabel&&n.length&&(r.baseLabel=n[0]),!r.baseOs&&a.length&&"default"===We(r)&&(r.baseOs=a[0].id),r}replaceStage(e){Object.keys(this.props.stage).forEach(t=>{Object.prototype.hasOwnProperty.call(e,t)||delete this.props.stage[t]}),Object.assign(this.props.stage,e),this.props.updateStage?this.props.updateStage(e):this.props.updateStageField&&this.props.updateStageField(e)}updateStage(e){const t=qe({...this.props.stage,...e});this.replaceStage(t),"function"==typeof u.feature.roscoSelector&&this.setState({roscoMode:this.roscoMode(t)})}updateExtendedAttribute(e,t){this.updateStage({extendedAttributes:{...this.props.stage.extendedAttributes||{},[e]:t}})}removeExtendedAttribute(e){const t={...this.props.stage.extendedAttributes||{}};delete t[e],this.updateStage({extendedAttributes:t})}addExtendedAttribute(){const e=this.state.extendedAttributeKey.trim();e&&(this.updateExtendedAttribute(e,this.state.extendedAttributeValue),this.setState({extendedAttributeKey:"",extendedAttributeValue:"",showAdvancedOptions:!0}))}roscoMode(e){return u.feature.roscoMode||"function"==typeof u.feature.roscoSelector&&u.feature.roscoSelector(e)}showAdvanced(e){return!!(e.templateFileName||e.extendedAttributes&&Object.keys(e.extendedAttributes).length>0||e.varFileName)}loadManagedImages(e){this.azureImageReader.findImages({provider:"azure",managedImages:!0,account:e}).then(t=>{this.mounted&&this.props.stage.account===e&&this.setState({managedImageOptions:t.map(e=>({id:e.imageName,name:e.imageName,osType:e.ostype}))})}).catch(()=>{})}loadAccountRegions(e){p.getRegionsForAccount(e).then(t=>{this.mounted&&this.props.stage.account===e&&this.setState({regions:t.map(e=>e.name)})}).catch(()=>{})}setSourceImageMode(e){if(this.setState({sourceImageMode:e}),"default"!==e)return"managed"===e?(this.setState({managedImageOptions:[]}),this.loadManagedImages(this.props.stage.account),void this.updateStage({baseOs:null,offer:null,osType:null,packageType:null,publisher:null,sku:null})):void this.updateStage({baseOs:null,managedImage:null,osType:null,packageType:null});this.updateStage({managedImage:null,offer:null,osType:null,packageType:null,publisher:null,sku:null})}onAccountChange(e){this.updateStage({account:e,managedImage:null,osType:null,packageType:null}),e&&this.loadAccountRegions(e),"managed"===this.state.sourceImageMode&&(this.setState({managedImageOptions:[]}),this.loadManagedImages(e))}onManagedImageChange(e){var t;const a=this.state.managedImageOptions.find(t=>t.id===e);this.updateStage({managedImage:e,osType:null==(t=null==a?void 0:a.osType)?void 0:t.toLowerCase(),packageType:null})}renderSourceImageFields(){const e=this.props.stage;return"managed"===this.state.sourceImageMode?ne.createElement(G,{label:"Managed Image"},ne.createElement("select",{className:"form-control input-sm",name:"managedImage",value:e.managedImage||"",onChange:e=>this.onManagedImageChange(e.target.value)},ne.createElement("option",{value:""}),this.state.managedImageOptions.map(e=>ne.createElement("option",{key:e.id,value:e.id},e.name)))):"custom"===this.state.sourceImageMode?ne.createElement(ne.Fragment,null,ne.createElement(G,{label:"Publisher"},ne.createElement("input",{className:"form-control input-sm",value:e.publisher||"",onChange:e=>this.updateStage({publisher:e.target.value})})),ne.createElement(G,{label:"Offer"},ne.createElement("input",{className:"form-control input-sm",value:e.offer||"",onChange:e=>this.updateStage({offer:e.target.value})})),ne.createElement(G,{label:"SKU"},ne.createElement("input",{className:"form-control input-sm",value:e.sku||"",onChange:e=>this.updateStage({sku:e.target.value})})),ne.createElement(G,{label:"OS Type"},Qe.map(t=>ne.createElement("label",{className:"radio-inline",key:t},ne.createElement("input",{checked:e.osType===t,name:"osType",type:"radio",value:t,onChange:()=>this.updateStage({osType:t,packageType:null})}),t)))):ne.createElement(G,{label:"Base OS"},ne.createElement("select",{className:"form-control input-sm",value:e.baseOs||"",onChange:e=>this.updateStage({baseOs:e.target.value})},this.state.baseOsOptions.map(e=>ne.createElement("option",{key:e.id,value:e.id},function(e){const t=(null==e?void 0:e.displayName)||(null==e?void 0:e.id)||"";return(null==e?void 0:e.shortDescription)?`${t} (${e.shortDescription})`:t}(e)))))}render(){if(this.state.loading)return ne.createElement(w,null);if(this.state.loadError)return ne.createElement("div",{className:"alert alert-danger"},"Unable to load Azure bake options.");const e=this.props.stage,t=e.extendedAttributes||{},a=this.state.showAdvancedOptions||this.state.roscoMode;return ne.createElement("div",{className:"form-horizontal"},ne.createElement(G,{label:"Account"},ne.createElement("select",{className:"form-control input-sm",name:"account",value:e.account||"",onChange:e=>this.onAccountChange(e.target.value)},ne.createElement("option",{value:""}),this.state.accounts.map(e=>ne.createElement("option",{key:e,value:e},e)))),ne.createElement(G,{label:"Regions"},this.state.regions.map(t=>ne.createElement("label",{className:"checkbox-inline",key:t},ne.createElement("input",{checked:(e.regions||[]).includes(t),type:"checkbox",onChange:a=>{const n=new Set(e.regions||[]);a.target.checked?n.add(t):n.delete(t);const l=a.target.checked?t:e.region===t?void 0:e.region;this.updateStage({region:l,regions:Array.from(n)})}}),t))),ne.createElement("div",{className:"panel panel-default"},ne.createElement("div",{className:"panel-heading"},ne.createElement("label",{className:"col-md-3 sm-label-right"}),ne.createElement("div",{className:"btn-group btn-group-xs",role:"group","aria-label":"Source Image"},ne.createElement("button",{className:"btn btn-default "+("default"===this.state.sourceImageMode?"active":""),onClick:()=>this.setSourceImageMode("default"),type:"button"},"Default Images"),ne.createElement("button",{className:"btn btn-default "+("managed"===this.state.sourceImageMode?"active":""),onClick:()=>this.setSourceImageMode("managed"),type:"button"},"Managed Images"),ne.createElement("button",{className:"btn btn-default "+("custom"===this.state.sourceImageMode?"active":""),onClick:()=>this.setSourceImageMode("custom"),type:"button"},"Custom Image"))),ne.createElement("div",{className:"panel-body"},this.renderSourceImageFields(),"linux"===e.osType&&ne.createElement(G,{label:"Package Type"},Xe.map(t=>ne.createElement("label",{className:"radio-inline",key:t},ne.createElement("input",{checked:e.packageType===t,name:"packageType",type:"radio",value:t,onChange:()=>this.updateStage({packageType:t})}),t))))),ne.createElement(G,{label:"Package",helpKey:"pipeline.config.bake.package"},ne.createElement("input",{className:"form-control input-sm",value:e.package||"",onChange:e=>this.updateStage({package:e.target.value})})),ne.createElement(G,{label:"Base Label"},this.state.baseLabelOptions.map(t=>ne.createElement("label",{className:"radio-inline",key:t},ne.createElement("input",{checked:e.baseLabel===t,name:"baseLabel",type:"radio",value:t,onChange:()=>this.updateStage({baseLabel:t})}),t))),(this.state.roscoMode||e.rebake)&&ne.createElement(G,{label:"Rebake"},ne.createElement("div",{className:"checkbox",style:{marginBottom:0}},ne.createElement("label",null,ne.createElement("input",{checked:!!e.rebake,type:"checkbox",onChange:e=>this.updateStage({rebake:e.target.checked})}),"Rebake image without regard to the status of any existing bake"))),ne.createElement(G,{label:"Base Name"},ne.createElement("input",{className:"form-control input-sm",value:e.baseName||"",onChange:e=>this.updateStage({baseName:e.target.value})})),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-9 col-md-offset-1"},ne.createElement("div",{className:"checkbox"},ne.createElement("label",null,ne.createElement("input",{checked:this.state.showAdvancedOptions,type:"checkbox",onChange:e=>this.setState({showAdvancedOptions:e.target.checked})}),ne.createElement("strong",null,"Show Advanced Options"))))),a&&ne.createElement(ne.Fragment,null,ne.createElement(G,{label:"Template File Name",helpKey:"pipeline.config.bake.templateFileName"},ne.createElement("input",{className:"form-control input-sm",value:e.templateFileName||"",onChange:e=>this.updateStage({templateFileName:e.target.value})})),ne.createElement(G,{label:"Extended Attributes",helpKey:"pipeline.config.bake.extendedAttributes"},ne.createElement("table",{className:"table table-condensed packed"},ne.createElement("tbody",null,Object.keys(t).map(e=>ne.createElement("tr",{key:e},ne.createElement("td",null,ne.createElement("strong",{className:"small"},e)),ne.createElement("td",null,ne.createElement("input",{className:"form-control input-sm",value:t[e],onChange:t=>this.updateExtendedAttribute(e,t.target.value)})),ne.createElement("td",{className:"text-right"},ne.createElement("button",{className:"btn btn-link btn-sm",onClick:()=>this.removeExtendedAttribute(e),type:"button"},"Remove")))),ne.createElement("tr",null,ne.createElement("td",null,ne.createElement("input",{className:"form-control input-sm",placeholder:"Key",value:this.state.extendedAttributeKey,onChange:e=>this.setState({extendedAttributeKey:e.target.value})})),ne.createElement("td",null,ne.createElement("input",{className:"form-control input-sm",placeholder:"Value",value:this.state.extendedAttributeValue,onChange:e=>this.setState({extendedAttributeValue:e.target.value})})),ne.createElement("td",{className:"text-right"},ne.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:()=>this.addExtendedAttribute(),type:"button"},"Add Extended Attribute")))))),ne.createElement(G,{label:"Var File Name",helpKey:"pipeline.config.bake.varFileName"},ne.createElement("input",{className:"form-control input-sm",value:e.varFileName||"",onChange:e=>this.updateStage({varFileName:e.target.value})}))))}}function Ze(e){const t=e.context||{},a=((u.feature.roscoMode||"function"==typeof u.feature.roscoSelector&&u.feature.roscoSelector(t))&&u.roscoDetailUrl?u.roscoDetailUrl:u.bakeryDetailUrl)||"",n={context:t};return a.replace(/\{\{\s*([^}]+?)\s*\}\}/g,(e,t)=>function(e,t){const a=t.split(".").reduce((e,t)=>null==e?void 0:e[t],e);return null==a?"":String(a)}(n,t))}function Ke({current:e,execution:t,name:a,stage:n}){var l,r,s;const i=n.context||{},o=null==(l=i.status)?void 0:l.resourceId,c=u.feature.roscoMode||"function"==typeof u.feature.roscoSelector&&u.feature.roscoSelector(i)||(null==(r=null==t?void 0:t.trigger)?void 0:r.rebake)||i.rebake;return ne.createElement(P,{name:a,current:e},ne.createElement("div",{className:"row"},ne.createElement("div",{className:"col-md-6"},ne.createElement("dl",{className:"dl-narrow dl-horizontal"},ne.createElement("dt",null,"Provider"),ne.createElement("dd",null,"Azure"),ne.createElement("dt",null,"Image"),ne.createElement("dd",null,i.ami),ne.createElement("dt",null,"Region"),ne.createElement("dd",null,i.region),ne.createElement("dt",null,"Package"),ne.createElement("dd",null,i.package))),ne.createElement("div",{className:"col-md-6"},ne.createElement("dl",{className:"dl-narrow dl-horizontal"},ne.createElement("dt",null,"Base OS"),ne.createElement("dd",null,i.baseOs),ne.createElement("dt",null,"Label"),ne.createElement("dd",null,i.baseLabel),c&&ne.createElement(ne.Fragment,null,ne.createElement("dt",null,"Rebake"),ne.createElement("dd",null,String((null==(s=null==t?void 0:t.trigger)?void 0:s.rebake)||i.rebake||!1))),i.templateFileName&&ne.createElement(ne.Fragment,null,ne.createElement("dt",null,"Template"),ne.createElement("dd",null,i.templateFileName)),i.varFileName&&ne.createElement(ne.Fragment,null,ne.createElement("dt",null,"Var File"),ne.createElement("dd",null,i.varFileName))))),ne.createElement(x,{stage:n,message:n.failureMessage}),i.region&&o&&ne.createElement("div",{className:"row"},ne.createElement("div",{className:"col-md-12"},ne.createElement("div",{className:"alert alert-"+(n.isFailed?"danger":"info")},i.previouslyBaked&&ne.createElement("div",null,"No changes detected; reused existing bake"),ne.createElement("a",{target:"_blank",rel:"noopener noreferrer",href:Ze(n)},"View Bakery Details")))))}function Je(e){return Array.from(new Set(e.filter(Boolean))).sort()}function $e(e){if("string"==typeof e)return e;if(null==e?void 0:e.name)return e.name;const t=Object.keys(e||{});return t.length?t[0]:""}Ke.title="bakeConfig";class et extends ne.Component{constructor(){super(...arguments),this.mounted=!1,this.state={accounts:[],freeFormClusterField:!1,regions:[]}}componentDidMount(){this.mounted=!0,Promise.all([p.listAccounts("azure"),p.getUniqueAttributeForAllAccounts("azure","regions")]).then(([e,t])=>{this.mounted&&this.setState({accounts:e,freeFormClusterField:this.selectedClusterIsCustom(),regions:Je((t||[]).map($e))})}).catch(()=>{})}componentWillUnmount(){this.mounted=!1}serverGroups(){try{return this.props.application.getDataSource("serverGroups").data||[]}catch(e){return[]}}accountOptions(){return Je([...this.state.accounts.map(e=>e.name||e).filter(Boolean),this.props.stage.credentials])}regionOptions(){const{credentials:e,regions:t=[]}=this.props.stage,a=this.serverGroups().filter(t=>!e||t.account===e).map(e=>e.region);return Je([...this.state.freeFormClusterField?this.state.regions:a.length?a:this.state.regions,...t])}clusterOptions(e=this.props.stage.regions||[]){const{credentials:t}=this.props.stage;return Je(this.serverGroups().filter(e=>!t||e.account===t).filter(t=>!e.length||e.includes(t.region)).map(e=>{var t;return e.cluster||(null==(t=e.moniker)?void 0:t.cluster)}))}selectedClusterIsCustom(){const e=this.props.stage.cluster;return!!e&&!this.clusterOptions().includes(e)}monikerForCluster(e){const t=this.serverGroups().find(t=>{var a;return t.cluster===e||(null==(a=t.moniker)?void 0:a.cluster)===e});return(null==t?void 0:t.moniker)?{...t.moniker,sequence:null}:void 0}updateStageField(e){Object.assign(this.props.stage,e),this.props.updateStageField(e)}updateAccount(e){var t,a;this.setState({freeFormClusterField:!1}),this.updateStageField({credentials:e,regions:[],cluster:void 0,moniker:void 0}),null==(a=(t=this.props).onAccountUpdate)||a.call(t,e)}updateRegion(e,t){const a=new Set(this.props.stage.regions||[]);t?a.add(e):a.delete(e);const n=Array.from(a),l=this.props.stage.cluster,r=!l||!!n.length&&this.clusterOptions(n).includes(l);this.state.freeFormClusterField||r?this.updateStageField({regions:n}):this.updateStageField({regions:n,cluster:void 0,moniker:void 0})}updateCluster(e){this.setState({freeFormClusterField:!1}),this.updateStageField({cluster:e||void 0,moniker:e?this.monikerForCluster(e):void 0})}updateFreeFormCluster(e){this.updateStageField({cluster:e||void 0,moniker:void 0})}toggleFreeFormClusterField(e){e.preventDefault();const t=!this.state.freeFormClusterField;this.setState({freeFormClusterField:t}),t||this.updateStageField({cluster:void 0,moniker:void 0})}render(){const e=this.props.stage,t=e.regions||[];return ne.createElement(ne.Fragment,null,ne.createElement(G,{label:"Account"},ne.createElement("select",{className:"form-control input-sm",name:"credentials",value:e.credentials||"",onChange:e=>this.updateAccount(e.target.value)},ne.createElement("option",{value:""}),this.accountOptions().map(e=>ne.createElement("option",{key:e,value:e},e)))),ne.createElement(G,{label:"Regions"},!e.credentials&&ne.createElement("p",{className:"form-control-static"},"(Select an Account)"),e.credentials&&this.regionOptions().map(e=>ne.createElement("label",{className:"checkbox-inline",key:e},ne.createElement("input",{checked:t.includes(e),name:"regions",type:"checkbox",value:e,onChange:t=>this.updateRegion(e,t.target.checked)}),e))),ne.createElement(G,{label:"Cluster",helpKey:"pipeline.config.findAmi.cluster"},this.state.freeFormClusterField?ne.createElement("input",{className:"form-control input-sm",name:"cluster",type:"text",value:e.cluster||"",onChange:e=>this.updateFreeFormCluster(e.target.value)}):ne.createElement("select",{className:"form-control input-sm",name:"cluster",value:e.cluster||"",onChange:e=>this.updateCluster(e.target.value)},ne.createElement("option",{value:""}),this.clusterOptions().map(e=>ne.createElement("option",{key:e,value:e},e))),ne.createElement("div",{className:"pull-right"},ne.createElement("a",{href:"",onClick:e=>this.toggleFreeFormClusterField(e)},this.state.freeFormClusterField?"Toggle for list of existing clusters":"Toggle for text input"))))}}function tt({stage:e}){var t;const a=(null==(t=e.masterStage)?void 0:t.context)||e.context||{};return ne.createElement("span",{className:"task-label"}," ","Destroy Server Group: ",a.serverGroupName," (",a.region,")"," ")}class at extends ne.Component{constructor(){super(...arguments),this.mounted=!1,this.updateStageField=e=>{Object.assign(this.props.stage,e),this.props.updateStageField(e)},this.accountUpdated=e=>{this.loadRegionForAccount(e)}}componentDidMount(){this.mounted=!0,this.applyDefaults(),this.loadRegionForAccount(this.props.stage.credentials)}componentDidUpdate(e){e.stage.credentials!==this.props.stage.credentials&&(this.updateStageField({regions:[]}),this.loadRegionForAccount(this.props.stage.credentials))}componentWillUnmount(){this.mounted=!1}applyDefaults(){const{application:e,stage:t}=this.props;t.regions=t.regions||[],t.cloudProvider="azure",t.interestingHealthProviderNames=t.interestingHealthProviderNames||[],!t.credentials&&e.defaultCredentials.azure&&(t.credentials=e.defaultCredentials.azure),t.target||(t.target=L.TARGET_LIST[0].val)}loadRegionForAccount(e){e&&p.getAccountDetails(e).then(t=>{this.mounted&&this.props.stage.credentials===e&&(null==t?void 0:t.org)&&this.updateStageField({regions:[t.org]})}).catch(()=>{})}render(){this.applyDefaults();const{application:e,pipeline:t,stage:a}=this.props;return ne.createElement("div",{className:"form-horizontal"},!(null==t?void 0:t.strategy)&&ne.createElement(et,{application:e,stage:a,updateStageField:this.updateStageField,onAccountUpdate:this.accountUpdated}),ne.createElement(G,{label:"Target"},ne.createElement("select",{className:"form-control input-sm",value:a.target,onChange:e=>this.updateStageField({target:e.target.value})},L.TARGET_LIST.map(e=>ne.createElement("option",{key:e.val,value:e.val},e.label)))))}}function nt({stage:e}){var t;const a=(null==(t=e.masterStage)?void 0:t.context)||e.context||{};return ne.createElement("span",{className:"task-label"}," ","Disable Server Group: ",a.serverGroupName," (",a.region,")"," ")}function lt({application:e,pipeline:t,stage:a,updateStageField:n}){const l=e=>{Object.assign(a,e),n(e)};return a.regions=a.regions||[],a.cloudProvider="azure",a.isNew&&e.attributes.platformHealthOnlyShowOverride&&void 0===a.interestingHealthProviderNames&&(a.interestingHealthProviderNames=[]),!a.credentials&&e.defaultCredentials.azure&&(a.credentials=e.defaultCredentials.azure),!a.regions.length&&e.defaultRegions.azure&&a.regions.push(e.defaultRegions.azure),a.target||(a.target=L.TARGET_LIST[0].val),ne.createElement("div",{className:"form-horizontal"},!(null==t?void 0:t.strategy)&&ne.createElement(et,{application:e,stage:a,updateStageField:l}),ne.createElement(G,{label:"Target"},ne.createElement("select",{className:"form-control input-sm",value:a.target,onChange:e=>l({target:e.target.value})},L.TARGET_LIST.map(e=>ne.createElement("option",{key:e.val,value:e.val},e.label)))),e.attributes.platformHealthOnlyShowOverride&&ne.createElement(V,{interestingHealthProviderNames:a.interestingHealthProviderNames||[],platformHealthType:"azureService",onChange:e=>l({interestingHealthProviderNames:e})}))}function rt({stage:e}){var t;const a=(null==(t=e.masterStage)?void 0:t.context)||e.context||{};return ne.createElement("span",{className:"task-label"}," ","Enable Server Group: ",a.serverGroupName," (",a.region,")"," ")}function st({application:e,pipeline:t,stage:a,updateStageField:n}){const l=e=>{Object.assign(a,e),n(e)};return a.regions=a.regions||[],a.cloudProvider="azure",a.isNew&&e.attributes.platformHealthOnlyShowOverride&&void 0===a.interestingHealthProviderNames&&(a.interestingHealthProviderNames=[]),!a.credentials&&e.defaultCredentials.azure&&(a.credentials=e.defaultCredentials.azure),!a.regions.length&&e.defaultRegions.azure&&a.regions.push(e.defaultRegions.azure),a.target||(a.target=L.TARGET_LIST[0].val),ne.createElement("div",{className:"form-horizontal"},!(null==t?void 0:t.strategy)&&ne.createElement(et,{application:e,stage:a,updateStageField:l}),ne.createElement(G,{label:"Target"},ne.createElement("select",{className:"form-control input-sm",value:a.target,onChange:e=>l({target:e.target.value})},L.TARGET_LIST.map(e=>ne.createElement("option",{key:e.val,value:e.val},e.label)))),e.attributes.platformHealthOnlyShowOverride&&ne.createElement(V,{interestingHealthProviderNames:a.interestingHealthProviderNames||[],platformHealthType:"azureService",onChange:e=>l({interestingHealthProviderNames:e})}))}function it(e){return e.accountId||e.account||e.accountName||e.credentials}const ot={upsertSecurityGroup(e,t,a,n={}){const l=function(e,t={}){return{...e,...t,securityGroupName:e.name}}(e,n),r=M.executeTask({job:[l],application:t,description:`${a} ${F.get("Firewall")}: ${e.name}`});return O.clearCache("securityGroups"),r},deleteSecurityGroup(e,t,a={}){const n=function(e,t,a={}){return{...a,type:"deleteSecurityGroup",securityGroupName:e.name,regions:[e.region],credentials:it(e),appName:t.name}}(e,t,a),l=M.executeTask({job:[n],application:t,description:`Delete ${F.get("Firewalls")}: ${e.name}`});return O.clearCache("securityGroups"),l}},ct={access:"Allow",destinationAddressPrefix:"*",destinationPortRange:"*",destinationPortRanges:[],destinationPorts:["*"],destPortRanges:"*",direction:"Inbound",protocol:"Tcp",sourceAddressPrefix:"*",sourceAddressPrefixes:[],sourceCidrs:["*"],sourceIPCIDRRanges:"*",sourcePortRange:"*"};function dt(e){return Array.isArray(e)?e.map(e=>String(e).trim()).filter(Boolean):null==e||""===e?[]:String(e).split(/[\n,]+/).map(e=>e.trim()).filter(Boolean)}function ut(e,t=[]){for(const t of e){const e=dt(t);if(e.length)return e}return t}function mt(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function pt(e,t=[]){return mt(e,"destinationPorts")?dt(e.destinationPorts):ut([e.destPortRanges,e.destinationPortRanges,e.destinationPortRange,e.destinationPortRangeModel],t)}function gt(e,t=[]){return mt(e,"sourceCidrs")?dt(e.sourceCidrs):ut([e.sourceIPCIDRRanges,e.sourceAddressPrefixes,e.sourceAddressPrefix,e.sourceAddressPrefixModel],t)}function ht(e){if("*"===e)return!0;const t=e.split("-");if(t.length>2)return!1;const a=t.map(e=>{if(!/^\d+$/.test(e))return null;const t=Number(e);return t>=0&&t<=65535?t:null});return!a.some(e=>null===e)&&(1===t.length||a[0]<=a[1])}function vt(e){if("*"===e)return!0;const t=e.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(?:\/(\d{1,2}))?$/);if(!t)return!1;const a=t.slice(1,5).map(Number),n=t[5]?Number(t[5]):null;return a.every(e=>e>=0&&e<=255)&&(null===n||n>=0&&n<=32)}function ft(e,t){const a=String(t||"").trim();return a?`${e}-${a}`:e}function Bt(e){return String(e.accountId||e.account||e.accountName||e.credentials||"")}function At(e,t){return!e||!t||String(e).toLowerCase()===String(t).toLowerCase()}function bt(e,t){const a=String(e.name||"").toLowerCase(),n=Bt(e),l=e.region;return!(!a||!n)&&function(e){var t,a,n;const l=(null==(t=null==e?void 0:e.securityGroups)?void 0:t.data)||(null==(n=null==(a=null==e?void 0:e.getDataSource)?void 0:a.call(e,"securityGroups"))?void 0:n.data);return Array.isArray(l)?l:[]}(t).some(e=>String(e.name||"").toLowerCase()===a&&At(Bt(e),n)&&At(e.region,l))}function yt(e,t="edit",a){if(!e.name||!e.accountId||!e.region)return!1;if("edit"!==t){if(!String(e.detail||"").trim())return!1;if(bt(e,a))return!1}return(e.securityRules||[]).every(e=>{const t=pt(e),a=gt(e);return t.length>0&&a.length>0&&t.every(ht)&&a.every(vt)})}function Et(e){const t=pt(e,ct.destinationPorts),a=gt(e,ct.sourceCidrs);return{...ct,...e,destinationPortRangeModel:e.destinationPortRangeModel||t.join(","),destinationPorts:t,destPortRanges:e.destPortRanges||t.join(","),sourceAddressPrefixModel:e.sourceAddressPrefixModel||a.join(","),sourceCidrs:a,sourceIPCIDRRanges:e.sourceIPCIDRRanges||a.join(",")}}function Dt(e){return e.map((e,t)=>({...e,priority:100+t}))}function St(e,t){return Dt(e.filter((e,a)=>a!==t))}function Ft(e,t,a){const n=[...e],[l]=n.splice(t,1);return n.splice(a,0,l),Dt(n)}function Ct(e){return`${e.name}|${e.resourceGroup||""}`}function Nt(e){return e.resourceGroup?`${e.name} (${e.resourceGroup})`:e.name}function It(e,t){var a;const n=e.securityGroup||{},l=n.selectedVnet||null,r=n.selectedSubnet||null,s=n.accountId||n.account||n.accountName||n.credentials||e.credentials||"",i=n.region||e.region||(null==(a=n.regions)?void 0:a[0])||"",o=n.detail||function(e,t){const a=`${t}-`;return(null==e?void 0:e.startsWith(a))?e.slice(a.length):""}(n.name,t),c={...n,accountId:s,credentials:n.credentials||s,detail:o,name:"edit"===e.mode&&n.name||ft(t,o),region:i,securityRules:(n.securityRules||n.inboundRules||[]).map(Et),selectedSubnet:r,selectedVnet:l,subnet:n.subnet||(null==r?void 0:r.name)||"",vnet:n.vnet||(null==l?void 0:l.name)||"",vnetResourceGroup:n.vnetResourceGroup||(null==l?void 0:l.resourceGroup)||"",vpcId:n.vpcId||""};return"clone"===e.mode&&delete c.id,c}class kt extends ne.Component{constructor(e){var t,a,n;super(e),this.mounted=!1,this.onTaskComplete=()=>{var e,t,a,n,l,r,s;const i=this.getApplication();if("edit"===this.props.mode)return null==(t=null==(e=i.securityGroups)?void 0:e.refresh)||t.call(e),void this.props.closeModal();const o=()=>{if(this.clearApplicationRefreshSubscription(),!this.mounted)return;const{securityGroup:e}=this.state;this.props.closeModal(),this.props.stateService.go(this.props.stateService.includes("**.firewallDetails")?"^.firewallDetails":".firewallDetails",{accountId:e.credentials||e.accountId||e.accountName,name:e.name,provider:"azure",region:e.region,vpcId:e.vpcId})};(null==(a=i.securityGroups)?void 0:a.onNextRefresh)?(this.clearApplicationRefreshSubscription(),this.applicationRefreshUnsubscribe=i.securityGroups.onNextRefresh(o),null==(l=(n=i.securityGroups).refresh)||l.call(n)):(null==(s=null==(r=i.securityGroups)?void 0:r.refresh)||s.call(r),o())},this.clearApplicationRefreshSubscription=()=>{var e;null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0},this.updateField=(e,t)=>{"detail"!==e?this.updateSecurityGroup({[e]:t},"accountId"===e?this.accountUpdated:"region"===e?this.vnetUpdated:void 0):this.updateSecurityGroup({detail:t,name:ft(this.getApplication().name,t)})},this.accountUpdated=(e=!0)=>{const t=this.state.securityGroup.accountId||this.state.securityGroup.credentials;t&&p.getRegionsForAccount(t).then(a=>{var n;const l=this.state.securityGroup.region||(null==(n=a[0])?void 0:n.name)||a[0]||"";this.setState(e=>({regions:a,securityGroup:{...e.securityGroup,accountId:t,credentials:t,region:l}}),()=>this.vnetUpdated(e))})},this.vnetUpdated=(e=!0)=>{const t=this.state.securityGroup.accountId||this.state.securityGroup.credentials,a=this.state.securityGroup.region;e&&this.setState(e=>({securityGroup:{...e.securityGroup,selectedSubnet:null,selectedVnet:null,subnet:null,vnet:null,vnetResourceGroup:null,vpcId:null},selectedSubnets:[],selectedVnets:[]})),t&&a&&g.listNetworks().then(e=>{const n=Array.isArray(e)?e:e.azure||[];this.setState({selectedVnets:n.filter(e=>e.account===t&&e.region===a)})})},this.selectedVnetChanged=e=>{const t=(a=this.state.selectedVnets,n=e,a.find(e=>Ct(e)===n)||null);var a,n;this.setState(e=>({securityGroup:{...e.securityGroup,selectedSubnet:null,selectedVnet:t,subnet:"",vnet:(null==t?void 0:t.name)||"",vnetResourceGroup:(null==t?void 0:t.resourceGroup)||"",vpcId:(null==t?void 0:t.name)||""},selectedSubnets:(null==t?void 0:t.subnets)||[]}))},this.selectedSubnetChanged=e=>{const t=this.state.selectedSubnets.find(t=>t.name===e)||null;this.updateSecurityGroup({selectedSubnet:t,subnet:(null==t?void 0:t.name)||""})},this.updateRule=(e,t,a)=>{const n=[...this.state.securityGroup.securityRules||[]];n[e]={...n[e],[t]:a},this.updateSecurityGroup({securityRules:n})},this.addRule=()=>{var e;this.updateSecurityGroup({securityRules:(e=this.state.securityGroup.securityRules||[],Dt([...e,{...ct,name:`rule-${e.length+1}`}]))})},this.removeRule=e=>{this.updateSecurityGroup({securityRules:St(this.state.securityGroup.securityRules||[],e)})},this.moveRule=(e,t)=>{this.updateSecurityGroup({securityRules:Ft(this.state.securityGroup.securityRules||[],e,e+t)})};const l=this.getApplication(e);this.state={accounts:[],regions:[],securityGroup:It(e,l.name),selectedSubnets:(null==(a=null==(t=e.securityGroup)?void 0:t.selectedVnet)?void 0:a.subnets)||[],selectedVnets:(null==(n=e.securityGroup)?void 0:n.selectedVnet)?[e.securityGroup.selectedVnet]:[],taskMonitor:new v({application:l,title:("edit"===e.mode?"Updating":"Creating")+" your security group",onDismiss:()=>e.dismissModal(),onTaskComplete:this.onTaskComplete})}}static show(e){return f.show(Gt,e,{dialogClassName:"modal-lg"})}componentDidMount(){this.mounted=!0,p.listAccounts("azure").then(e=>this.setState({accounts:e})),this.state.securityGroup.accountId||this.state.securityGroup.credentials?this.accountUpdated(!1):this.state.securityGroup.region&&this.vnetUpdated()}componentWillUnmount(){this.mounted=!1,this.clearApplicationRefreshSubscription()}getApplication(e=this.props){return e.app||e.application}updateSecurityGroup(e,t){this.setState(t=>({securityGroup:{...t.securityGroup,...e}}),t)}submit(){const e=this.getApplication(),t=function(e){return{...e,type:"upsertSecurityGroup",securityRules:(e.securityRules||[]).map((e,t)=>{var a;const n={...e,priority:null!=(a=e.priority)?a:100+t},l=pt(e),r=gt(e);return delete n.destinationPorts,delete n.destPortRanges,delete n.sourceCidrs,delete n.sourceIPCIDRRanges,delete n.destinationPortRange,delete n.destinationPortRanges,delete n.destinationPortRangeModel,delete n.sourceAddressPrefix,delete n.sourceAddressPrefixes,delete n.sourceAddressPrefixModel,l.length>1?n.destinationPortRanges=l:1===l.length&&(n.destinationPortRange=l[0]),r.length>1?n.sourceAddressPrefixes=r:1===r.length&&(n.sourceAddressPrefix=r[0]),n})}}(this.state.securityGroup),a="edit"===this.props.mode?"Update":"clone"===this.props.mode?"Clone":"Create",n={appName:e.name,cloudProvider:"azure",credentials:t.accountId,region:t.region,regions:[t.region],securityGroupName:t.name,subnet:t.subnet||null,vpcId:t.vpcId||"null"};this.state.taskMonitor.submit(()=>ot.upsertSecurityGroup(t,e,a,n))}renderInput(e,t){return ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},e),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",value:this.state.securityGroup[t]||"",onChange:e=>this.updateField(t,e.target.value)})))}renderSelect(e,t,a,n,l=e=>e.name||e,r=l){return ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},e),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",value:t||"",onChange:e=>n(e.target.value)},ne.createElement("option",{value:""},"Select..."),a.map(e=>ne.createElement("option",{key:r(e),value:r(e)},l(e))))))}renderNamePreview(e){return ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-12 well "+(e?"alert-danger":"alert-info")},ne.createElement("strong",null,"Your security group will be named:")," ",ne.createElement("span",null,this.state.securityGroup.name),e&&ne.createElement("div",null,"There is already a security group with that name in this account and region.")))}render(){var e;const{dismissModal:t,mode:a}=this.props,{accounts:n,regions:l,securityGroup:r,selectedSubnets:s,selectedVnets:i,taskMonitor:o}=this.state,c=o.submitting,d="edit"===a?`Edit ${r.name}`:"clone"===a?`Clone ${r.name}`:"Create Security Group",u="edit"!==a,m=u&&bt(r,this.getApplication());return ne.createElement(ne.Fragment,null,ne.createElement(A,{monitor:o}),ne.createElement(b,{dismiss:t}),ne.createElement(se.Header,null,ne.createElement(se.Title,null,d)),ne.createElement(se.Body,null,ne.createElement("form",{className:"form-horizontal",onSubmit:e=>e.preventDefault()},u&&ne.createElement(ne.Fragment,null,this.renderNamePreview(m),this.renderInput("Detail","detail"),this.renderInput("Description","description"),this.renderSelect("Account",r.accountId,n,e=>this.updateField("accountId",e),e=>e.name||e),this.renderSelect("Region",r.region,l,e=>this.updateField("region",e),e=>e.name||e),this.renderSelect("VNet",r.selectedVnet?Ct(r.selectedVnet):"",i,this.selectedVnetChanged,Nt,Ct),this.renderSelect("Subnet",(null==(e=r.selectedSubnet)?void 0:e.name)||r.subnet,s,this.selectedSubnetChanged)),ne.createElement("h4",null,"Inbound Rules"),(r.securityRules||[]).map((e,t)=>ne.createElement("div",{className:"well",key:t},ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Name"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",value:e.name||"",onChange:e=>this.updateRule(t,"name",e.target.value)}))),ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Source CIDRs"),ne.createElement("div",{className:"col-md-7"},ne.createElement("textarea",{className:"form-control input-sm",value:(e.sourceCidrs||[]).join(", "),onChange:e=>this.updateRule(t,"sourceCidrs",dt(e.target.value))}))),ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Destination Ports"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",value:(e.destinationPorts||[]).join(", "),onChange:e=>this.updateRule(t,"destinationPorts",dt(e.target.value))}))),ne.createElement("div",{className:"form-group"},ne.createElement("label",{className:"col-md-3 control-label"},"Protocol"),ne.createElement("div",{className:"col-md-3"},ne.createElement("select",{className:"form-control input-sm",value:e.protocol||"Tcp",onChange:e=>this.updateRule(t,"protocol",e.target.value)},ne.createElement("option",{value:"Tcp"},"Tcp"),ne.createElement("option",{value:"Udp"},"Udp"),ne.createElement("option",{value:"*"},"Any")))),ne.createElement("button",{className:"btn btn-link",disabled:0===t,type:"button",onClick:()=>this.moveRule(t,-1)},"Move Up"),ne.createElement("button",{className:"btn btn-link",disabled:t===r.securityRules.length-1,type:"button",onClick:()=>this.moveRule(t,1)},"Move Down"),ne.createElement("button",{className:"btn btn-link",type:"button",onClick:()=>this.removeRule(t)},"Remove Rule"))),ne.createElement("button",{className:"btn btn-default",type:"button",onClick:this.addRule},"Add Rule"))),ne.createElement(se.Footer,null,ne.createElement("button",{className:"btn btn-default",disabled:c,onClick:t,type:"button"},"Cancel"),ne.createElement(y,{isDisabled:c||!yt(r,a,this.getApplication()),isNew:"edit"!==a,label:"edit"===a?"Update":"clone"===a?"Clone":"Create",onClick:()=>this.submit(),submitting:c})))}}kt.defaultProps={closeModal:E,dismissModal:E,mode:"create"};const Gt=Object.assign(n(kt),{show:kt.show});class wt extends ne.Component{constructor(){super(...arguments),this.state={loading:!0},this.isUnmounted=!1,this.loadRequestId=0,this.loadSecurityGroup=()=>{const{app:e,resolvedSecurityGroup:t}=this.props,a=++this.loadRequestId;this.setState({loading:!0}),this.getSecurityGroupReader().getSecurityGroupDetails(e,t.accountId,"azure",t.region,t.vpcId||"",t.name).then(e=>{this.isUnmounted||a!==this.loadRequestId||(e&&0!==Object.keys(e).length?this.setState({loading:!1,securityGroup:e}):this.autoClose())}).catch(()=>{a===this.loadRequestId&&this.autoClose()})},this.autoClose=()=>{this.isUnmounted||(this.props.autoClose?this.props.autoClose():this.props.stateService.go("^"))},this.closeDetails=()=>{this.props.stateService.go("^")}}componentDidMount(){var e,t;const a=null==(t=(e=this.props.app).getDataSource)?void 0:t.call(e,"securityGroups");a?a.ready().then(()=>{this.isUnmounted||(this.loadSecurityGroup(),this.unsubscribeFromRefresh=a.onRefresh(this.loadSecurityGroup))}):this.loadSecurityGroup()}componentWillUnmount(){this.isUnmounted=!0,this.unsubscribeFromRefresh&&this.unsubscribeFromRefresh()}componentDidUpdate(e){this.getCoordinatesKey(e)!==this.getCoordinatesKey(this.props)&&this.loadSecurityGroup()}getCoordinatesKey(e){const{accountId:t,name:a,region:n,vpcId:l}=e.resolvedSecurityGroup;return[t,n,l||"",a].join(":")}getSecurityGroupReader(){return this.props.securityGroupReader||this.context.services.securityGroupReader}render(){const{app:e}=this.props,{loading:t,securityGroup:a}=this.state;return t||!a?ne.createElement("div",{className:"details-panel"},ne.createElement("div",{className:"header"},ne.createElement("div",{className:"close-button"},ne.createElement("a",{className:"btn btn-link",onClick:this.closeDetails},ne.createElement("span",{className:"glyphicon glyphicon-remove"}))),ne.createElement("h4",{className:"text-center"},"Loading..."))):ne.createElement("div",{className:"details-panel"},ne.createElement("div",{className:"header"},ne.createElement("div",{className:"close-button"},ne.createElement("a",{className:"btn btn-link",onClick:this.closeDetails},ne.createElement("span",{className:"glyphicon glyphicon-remove"}))),ne.createElement("div",{className:"header-text horizontal middle"},ne.createElement("h3",null,a.name)),ne.createElement("div",{className:"actions"},ne.createElement(zt,{app:e,resolvedSecurityGroup:this.props.resolvedSecurityGroup,securityGroup:a}))),ne.createElement("div",{className:"content"},ne.createElement(Rt,{securityGroup:a}),ne.createElement(xt,{securityGroup:a})))}}wt.contextType=U;const Tt=n(wt);function zt({app:e,resolvedSecurityGroup:t,securityGroup:a}){const n=function(e,t){if(!t)return e;const a=e.accountId||e.account||e.accountName||e.credentials||t.accountId,n=e.name||t.name,l=e.region||t.region,r=e.vpcId||t.vpcId;return a===e.accountId&&n===e.name&&l===e.region&&r===e.vpcId?e:{...e,accountId:a,name:n,region:l,vpcId:r}}(a,t);return ne.createElement(le,{className:"dropdown",id:"azure-security-group-actions-dropdown"},ne.createElement(le.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Security Group Actions"),ne.createElement(le.Menu,null,ne.createElement(re,{onClick:()=>{Gt.show({app:e,mode:"edit",securityGroup:n})}},"Edit Inbound Rules"),ne.createElement(re,{onClick:()=>{Gt.show({app:e,mode:"clone",securityGroup:n})}},"Clone Security Group"),ne.createElement(re,{onClick:()=>{c.confirm({header:`Really delete ${n.name}?`,buttonText:`Delete ${n.name}`,account:n.accountId||n.account,taskMonitorConfig:{application:e,title:`Deleting ${n.name}`},submitMethod:()=>ot.deleteSecurityGroup(n,e,{cloudProvider:"azure",vpcId:n.vpcId})})}},"Delete Security Group")))}function Rt({securityGroup:e}){return ne.createElement(l,{heading:"Information",defaultExpanded:!0},ne.createElement("dl",{className:"dl-horizontal dl-narrow"},ne.createElement("dt",null,"ID"),ne.createElement("dd",null,e.id||"-"),ne.createElement("dt",null,"Account"),ne.createElement("dd",null,ne.createElement(s,{account:e.accountId||e.accountName||e.account})),ne.createElement("dt",null,"Region"),ne.createElement("dd",null,e.region),ne.createElement("dt",null,"Description:"),ne.createElement("dd",null,e.description||"-"),ne.createElement("dt",null,"VNet"),ne.createElement("dd",null,e.vpcId||"-")))}function Pt(...e){for(const t of e){if(Array.isArray(t)&&t.length)return t.join(", ");if("string"==typeof t&&t.trim())return t.trim()}return"-"}function xt({securityGroup:e}){const t=(e.securityRules||e.inboundRules||[]).slice().sort((e,t)=>{var a,n;return(null!=(a=e.priority)?a:Number.MAX_SAFE_INTEGER)-(null!=(n=t.priority)?n:Number.MAX_SAFE_INTEGER)});return ne.createElement(l,{heading:"Inbound Rules",defaultExpanded:!0},ne.createElement("table",{className:"table table-condensed"},ne.createElement("thead",null,ne.createElement("tr",null,ne.createElement("th",null,"Priority"),ne.createElement("th",null,"Name"),ne.createElement("th",null,"Source"),ne.createElement("th",null,"Source Port"),ne.createElement("th",null,"Destination"),ne.createElement("th",null,"Ports"),ne.createElement("th",null,"Protocol"),ne.createElement("th",null,"Access"),ne.createElement("th",null,"Direction"))),ne.createElement("tbody",null,t.map((e,t)=>ne.createElement("tr",{key:e.name||t},ne.createElement("td",null,e.priority||"-"),ne.createElement("td",null,e.name||"-"),ne.createElement("td",null,function(e){return Pt(e.sourceAddressPrefixModel,e.sourceAddressPrefixes,e.sourceAddressPrefix,e.sourceIPCIDRRanges,e.sourceCidrs)}(e)),ne.createElement("td",null,e.sourcePortRange||"-"),ne.createElement("td",null,e.destinationAddressPrefix||"-"),ne.createElement("td",null,function(e){return Pt(e.destinationPortRangeModel,e.destinationPortRanges,e.destinationPortRange,e.destPortRanges,e.destinationPorts)}(e)),ne.createElement("td",null,e.protocol||"-"),ne.createElement("td",null,e.access||"-"),ne.createElement("td",null,e.direction||"-"))))))}class Lt{resolveIndexedSecurityGroup(e,t,a){const n=a.split("/");return e[t.account][t.region][n[n.length-1]]}}class Vt{normalizeSecurityGroup(){}}class Mt{normalizeServerGroup(e){return e}parseCustomScriptsSettings(e,t){if(Array.isArray(e.customScriptsSettings.fileUris))t.customScriptsSettings.fileUris=e.customScriptsSettings.fileUris;else{const a=e.customScriptsSettings.fileUris;a.includes(",")?t.customScriptsSettings.fileUris=a.split(","):a.includes(";")?t.customScriptsSettings.fileUris=a.split(";"):t.customScriptsSettings.fileUris=[a],t.customScriptsSettings.fileUris.forEach(function(e,a){t.customScriptsSettings.fileUris[a]=e.trim()})}}convertServerGroupCommandToDeployConfiguration(e){let t;t="editPipeline"===e.viewState.mode||"createPipeline"===e.viewState.mode?{imageName:"",isCustom:"true",publisher:"",offer:"",sku:"",version:"",region:e.region,uri:"",ostype:""}:e.selectedImage;const a={name:e.application,cloudProvider:e.selectedProvider,application:e.application,stack:e.stack,strategy:e.strategy,rollback:{onFailure:e.rollback?e.rollback.onFailure:null},scaleDown:e.scaleDown,maxRemainingAsgs:e.maxRemainingAsgs,delayBeforeDisableSec:e.delayBeforeDisableSec,delayBeforeScaleDownSec:e.delayBeforeScaleDownSec,allowDeleteActive:"redblack"===e.strategy||null,allowScaleDownActive:"redblack"===e.strategy||null,detail:e.freeFormDetails,freeFormDetails:e.freeFormDetails,healthSettings:e.healthSettings,image:e.image,account:e.credentials,selectedProvider:"azure",vnet:e.selectedVnet&&e.selectedVnet.name?e.selectedVnet.name:e.vnet,vnetResourceGroup:e.selectedVnet&&e.selectedVnet.resourceGroup?e.selectedVnet.resourceGroup:e.vnetResourceGroup,subnet:e.subnet,useSourceCapacity:!1,capacity:{min:e.sku.capacity,max:e.sku.capacity},credentials:e.credentials,region:e.region,securityGroupName:e.securityGroupName,loadBalancerName:e.loadBalancerName,loadBalancerType:e.loadBalancerType,user:"[anonymous]",upgradePolicy:"Manual",type:"createServerGroup",sku:{name:"Standard_DS1_v2",tier:"Standard",capacity:e.sku.capacity},instanceTags:e.instanceTags,dataDisks:e.dataDisks,userAssignedIdentities:e.userAssignedIdentities,viewState:e.viewState,osConfig:{customData:e.osConfig?e.osConfig.customData:null},customScriptsSettings:{fileUris:null,commandToExecute:""},zonesEnabled:e.zonesEnabled,zones:e.zonesEnabled?e.zones:[],enableInboundNAT:e.enableInboundNAT};if(null!=e.image&&0!=e.image.isCustom||(a.image=t),void 0!==e.stack&&(a.name=a.name+"-"+e.stack),void 0!==e.freeFormDetails&&(a.name=a.name+"-"+e.freeFormDetails),void 0!==e.customScriptsSettings&&(a.customScriptsSettings.commandToExecute=e.customScriptsSettings.commandToExecute,ee.isEmpty(e.customScriptsSettings.fileUris)||this.parseCustomScriptsSettings(e,a)),e.instanceType){const t=e.instanceType;a.instanceType=e.instanceType,a.sku.name=t,a.sku.tier=t.substring(0,t.indexOf("_"))}return a.interestingHealthProviderNames=[],a}}class Ot{constructor(e){this.promiseService=e,this.azureImageReader=new ge,this.azureServerGroupTransformer=new Mt}resolve(e){return this.promiseService.resolve(e)}buildNewServerGroupCommand(e,t){const a=(t=t||{}).account||e.defaultCredentials.azure,n=t.region||e.defaultRegions.azure;return this.azureImageReader.findImages({provider:"azure"}).then(function(l){return{application:e.name,credentials:a,region:n,images:l,loadBalancers:[],selectedVnetSubnets:[],strategy:"",sku:{capacity:1},zonesEnabled:!1,zones:[],instanceTags:{},dataDisks:[],selectedProvider:"azure",viewState:{instanceProfile:"custom",allImageSelection:null,useAllImageSelection:!1,useSimpleCapacity:!0,usePreferredZones:!0,mode:t.mode||"create",disableStrategySelection:!0,loadBalancersConfigured:!1,networkSettingsConfigured:!1,securityGroupsConfigured:!1},enableInboundNAT:!1}})}buildNewServerGroupCommandForPipeline(){return this.resolve({viewState:{requiresTemplateSelection:!0}})}buildServerGroupCommandFromExisting(e,t,a){a=a||"clone";const n=B.parseServerGroupName(t.name),l={application:e.name,strategy:"",stack:n.stack,freeFormDetails:n.freeFormDetails,credentials:t.account,loadBalancers:t.loadBalancers,selectedSubnets:t.selectedVnetSubnets,selectedVnet:t.selectedVnet,securityGroups:t.securityGroups,loadBalancerName:t.loadBalancerName,loadBalancerType:t.loadBalancerType,securityGroupName:t.securityGroupName,region:t.region,vnet:t.vnet,vnetResourceGroup:t.vnetResourceGroup,subnet:t.subnet,zones:t.zones,zonesEnabled:t.zones&&t.zones.length>0,instanceTags:{},dataDisks:t.dataDisks,sku:t.sku,capacity:{min:t.capacity.min,max:t.capacity.max,desired:t.capacity.desired},tags:[],instanceType:t.sku.name,selectedProvider:"azure",source:{account:t.account,region:t.region,serverGroupName:t.name,asgName:t.name},viewState:{allImageSelection:null,useAllImageSelection:!1,useSimpleCapacity:!0,usePreferredZones:!1,listImplicitSecurityGroups:!1,mode:a,disableStrategySelection:!0},enableInboundNAT:t.enableInboundNAT};return void 0!==t.customScriptsSettings&&(l.customScriptsSettings={},l.customScriptsSettings.commandToExecute=t.customScriptsSettings.commandToExecute,ee.isEmpty(t.customScriptsSettings.fileUris)||this.azureServerGroupTransformer.parseCustomScriptsSettings(t,l)),this.azureImageReader.findImages({provider:"azure"}).then(e=>{const a=t.image||{},n=a.imageName||t.imageName||t.amiName,r=e.find(e=>e.imageName===n);return l.images=e,a.isCustom||a.uri?l.image={...a,isCustom:!0,region:a.region||t.region}:n&&(l.imageName=n,l.selectedImage=r||a),l})}buildServerGroupCommandFromPipeline(e,t){const a=ee.cloneDeep(t),n=a.region,l={account:a.account,region:n};return this.buildNewServerGroupCommand(e,l).then(function(e){const l={disableImageSelection:!0,useSimpleCapacity:!0,mode:"editPipeline",submitButtonLabel:"Done",instanceProfile:t.viewState.instanceProfile,instanceTypeDetails:t.viewState.instanceTypeDetails},r={region:n,credentials:a.account,viewState:l};t.viewState.instanceTypeDetails&&(r.instanceType=t.viewState.instanceTypeDetails.name),a.strategy=a.strategy||"";return ee.extend({},e,a,r)})}}var Ut=Object.defineProperty;class _t{constructor(e,t){this.promiseService=e,this.azureInstanceTypeService=new he(e),this.cacheInitializer=t.cacheInitializer,this.loadBalancerReader=t.loadBalancerReader,this.securityGroupReader=t.securityGroupReader}createDelegate(){const e=e=>this.promiseService.all(e),t=this.azureInstanceTypeService,a=this.cacheInitializer,n=this.loadBalancerReader,l=this.securityGroupReader,r=["Standard_LRS","StandardSSD_LRS","Premium_LRS"],s=["None","ReadOnly","ReadWrite"],i=["EC2","ELB"],o=["OldestInstance","NewestInstance","OldestLaunchConfiguration","ClosestToNextInstanceHour","Default"];function c(e){const a={dirty:{}};if(e.region){const n=[a.dirty];n.push(function(e){const a=e,n={dirty:{}},l=[a.region],{credentialsKeyedByAccount:r}=a.backingData,{locationToInstanceTypesMap:s}=r[a.credentials];if(l.every(e=>!e))return n;const i=t.getAvailableTypesForRegions(s,l).map(e=>e.name),o=a.instanceType;ee.every([o,!ee.startsWith(o,"custom"),!ee.includes(i,o)])&&(n.dirty.instanceType=a.instanceType,a.instanceType=null);return a.backingData.filtered.instanceTypes=i,n}(e).dirty),ee.extend(...n)}else e.backingData.filtered.instanceTypes=[];return a}function d(e){const t={dirty:{}},a=e.backingData.filtered;if(!e.region)return t;let{regionsSupportZones:n,availabilityZones:l}=e.backingData.credentialsKeyedByAccount[e.credentials];return n=n||[],l=l||[],a.zones=n.includes(e.region)?l:[],t}function u(e){const t=e.backingData.securityGroups[e.credentials]||{azure:{}};return ee.chain(t[e.region]).sortBy("name").value()}function m(e){const t={dirty:{}};let a;e.backingData.filtered.securityGroups&&(a=e.backingData.filtered.securityGroups);const n=u(e);return e.selectedSecurityGroup&&(e.selectedSecurityGroup=null,t.dirty.securityGroups=!0),a!=n&&(e.backingData.filtered.securityGroups=n,t.dirty.securityGroups=!0),0===e.backingData.filtered.securityGroups.length?e.viewState.securityGroupsConfigured=!1:e.viewState.securityGroupsConfigured=!0,t}function g(e){return ee.chain(e).map("name").uniq().value().sort()}function h(e){const t={dirty:{}},a=e.loadBalancers,n=g(e.backingData.loadBalancers);if(a&&e.loadBalancers){const l=ee.intersection(n,e.loadBalancers),r=ee.xor(l,a);e.loadBalancers=l,r.length&&(t.dirty.loadBalancers=r)}return e.backingData.filtered.loadBalancers=n,t}function v(e){const t=e.backingData.loadBalancers,a=ee.filter(t,function(t){return t.account===e.credentials&&t.region===e.region});return e.loadBalancers=g(a),e.viewState.loadBalancersConfigured=!0,{dirty:{}}}return{configureUpdateCommand:function(e){e.backingData={healthCheckTypes:ee.cloneDeep(i),terminationPolicies:ee.cloneDeep(o)}},configureCommand:function(t,a){return e([p.getCredentialsKeyedByAccount("azure"),l.loadSecurityGroups(),n.loadLoadBalancers(t.name)]).then(function([e,t,n]){var l;a.backingData={credentialsKeyedByAccount:e,securityGroups:t,loadBalancers:n,dataDiskTypes:ee.cloneDeep(r),dataDiskCachingTypes:ee.cloneDeep(s),accounts:ee.keys(e),filtered:{}},(l=a).regionChanged=function(e,t=!1){const a={dirty:{}};return e.region&&e.credentials&&(ee.extend(a.dirty,v(e).dirty),ee.extend(a.dirty,m(e).dirty),ee.extend(a.dirty,c(e).dirty),ee.extend(a.dirty,d(e).dirty)),t||(e.loadBalancerName=null,e.loadBalancerType=null,e.vnet=null,e.vnetResourceGroup=null,e.subnet=null,e.selectedSubnet=null,e.selectedVnet=null,e.selectedVnetSubnets=[],e.viewState.networkSettingsConfigured=!1,e.selectedSecurityGroup=null,e.securityGroupName=null,e.zonesEnabled=!1,e.zones=[]),a},l.credentialsChanged=function(e,t){const a={dirty:{}},n=e.backingData;if(e.credentials){const l=n.credentialsKeyedByAccount[e.credentials]||{regions:[]};n.filtered.regions=l.regions,ee.chain(n.filtered.regions).some({name:e.region}).value()?ee.extend(a.dirty,e.regionChanged(e,t).dirty):(e.region=null,a.dirty.region=!0),e.region&&ee.extend(a.dirty,v(e).dirty),ee.extend(a.dirty,c(e).dirty)}else e.region=null;return a}})},configureImages:function(e){var t;const a={dirty:{}};let n=null;const l=function(){e.amiName&&(a.dirty.amiName=!0,e.amiName=null),e.imageName&&(a.dirty.imageName=!0,e.imageName=null),e.selectedImage&&(a.dirty.selectedImage=!0,e.selectedImage=null)};if(e.viewState.disableImageSelection)return a;if(e.region){n=(e.backingData.packageImages||e.images||[]).filter(function(t){return t.amis&&t.amis[e.region]}).map(function(t){return{imageName:t.imageName,ami:t.amis?t.amis[e.region][0]:null}});const a=e.imageName||e.selectedImage&&e.selectedImage.imageName||e.amiName,r=n.find(function(e){return e.imageName===a});a&&!r?l():r&&!(null==(t=e.image)?void 0:t.isCustom)&&(e.imageName=r.imageName,e.selectedImage=r)}else l();return e.backingData.filtered.images=n,a},configureSecurityGroupOptions:m,configureLoadBalancerOptions:h,refreshLoadBalancers:function(e,t){return n.listLoadBalancers("azure").then(function(a){e.backingData.loadBalancers=a,t||h(e)})},refreshSecurityGroups:function(e,t){return a.refreshCache("securityGroups").then(function(){return l.getAllSecurityGroups().then(function(a){e.backingData.securityGroups=a,t||m(e)})})},getRegionalSecurityGroups:u,refreshInstanceTypes:function(e){return a.refreshCache("instanceTypes").then(function(){return t.getAllTypesByRegion().then(function(t){e.backingData.instanceTypes=t,c(e)})})},configureZones:d}}}((e,t,a)=>{t in e?Ut(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a})(_t,"requiresDeckRuntimeServices"+"",!0),["configureUpdateCommand","configureCommand","configureImages","configureSecurityGroupOptions","configureLoadBalancerOptions","refreshLoadBalancers","refreshSecurityGroups","getRegionalSecurityGroups","refreshInstanceTypes","configureZones"].forEach(e=>{_t.prototype[e]=function(...t){return this.delegate||(this.delegate=this.createDelegate()),this.delegate[e](...t)}});class Ht extends ne.Component{constructor(){super(...arguments),this.setField=(e,t)=>{const a=e.split("."),n=a.pop(),l=a.reduce((e,t)=>(e[t]=e[t]||{},e[t]),this.props.formik.values);l[n]=t,this.props.formik.setFieldValue(e,t)}}validate(e){return{}}textField(e,t,a="text"){var n;const l=null!=(n=this.props.formik.values[t])?n:"";return ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},e),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",name:t,onChange:e=>this.setField(t,e.target.value),type:a,value:l})))}selectField(e,t,a,n=String){var l;const r=null!=(l=this.props.formik.values[t])?l:"";return ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},e),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",name:t,onChange:e=>this.setField(t,e.target.value),value:r},ne.createElement("option",{value:""},"Select..."),(a||[]).map(e=>{const t="string"==typeof e?e:e.name;return ne.createElement("option",{key:t,value:t},n(e))}))))}}class jt extends Ht{constructor(){super(...arguments),this.addDataDisk=()=>{const e=[...this.props.formik.values.dataDisks||[],{lun:0,managedDisk:{storageAccountType:"Standard_LRS"},diskSizeGB:1,caching:"None",createOption:"Empty"}];this.props.formik.values.dataDisks=e,this.props.formik.setFieldValue("dataDisks",e)},this.removeDataDisk=e=>{const t=[...this.props.formik.values.dataDisks||[]];t.splice(e,1),this.props.formik.values.dataDisks=t,this.props.formik.setFieldValue("dataDisks",t)},this.updateDataDisk=(e,t,a)=>{const n=[...this.props.formik.values.dataDisks||[]],l={...n[e]||{}};"storageAccountType"===t?l.managedDisk={...l.managedDisk||{},storageAccountType:a}:l[t]=a,n[e]=l,this.props.formik.values.dataDisks=n,this.props.formik.setFieldValue("dataDisks",n)}}render(){var e,t,a,n;const{values:l}=this.props.formik;l.osConfig=l.osConfig||{},l.customScriptsSettings=l.customScriptsSettings||{},l.dataDisks=l.dataDisks||[];const r=(null==(e=l.backingData)?void 0:e.dataDiskTypes)||["Standard_LRS","StandardSSD_LRS","Premium_LRS"],s=(null==(t=l.backingData)?void 0:t.dataDiskCachingTypes)||["None","ReadOnly","ReadWrite"];return ne.createElement("div",{className:"container-fluid form-horizontal"},ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-4 sm-label-right"},"Number of Instances"),ne.createElement("div",{className:"col-md-2"},ne.createElement("input",{className:"form-control input-sm",max:"100",min:"0",onChange:e=>this.setField("sku.capacity",Number(e.target.value)),type:"number",value:null!=(n=null==(a=l.sku)?void 0:a.capacity)?n:0}))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-4 sm-label-right"},"Custom Data"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.setField("osConfig.customData",e.target.value),value:l.osConfig.customData||""}))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-4 sm-label-right"},"Custom Script"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.setField("customScriptsSettings.fileUris",e.target.value),value:l.customScriptsSettings.fileUris||""}))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-4 sm-label-right"},"Command To Execute"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.setField("customScriptsSettings.commandToExecute",e.target.value),value:l.customScriptsSettings.commandToExecute||""}))),"Azure Application Gateway"===l.loadBalancerType&&ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-4 sm-label-right"},ne.createElement("input",{checked:!!l.enableInboundNAT,disabled:!!l.zonesEnabled,onChange:e=>this.setField("enableInboundNAT",e.target.checked),type:"checkbox"})),ne.createElement("div",{className:"col-md-7"},ne.createElement("b",null,"Enable inbound NAT port-forwarding rules to connect to VM instances"))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-4 sm-label-right"},"User-Assigned Identities"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.setField("userAssignedIdentities",e.target.value),value:l.userAssignedIdentities||""}))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-4 sm-label-left"},"Data Disks"),ne.createElement("div",{className:"col-md-11"},ne.createElement("table",{className:"table table-condensed packed tags"},ne.createElement("thead",null,ne.createElement("tr",null,ne.createElement("th",null,"LUN"),ne.createElement("th",null,"Size (GB)"),ne.createElement("th",null,"Type"),ne.createElement("th",null,"Caching"),ne.createElement("th",null))),ne.createElement("tbody",null,l.dataDisks.map((e,t)=>{var a,n,l;return ne.createElement("tr",{key:t},ne.createElement("td",null,ne.createElement("input",{className:"form-control input-sm",min:"0",onChange:e=>this.updateDataDisk(t,"lun",Number(e.target.value)),type:"number",value:null!=(a=e.lun)?a:0})),ne.createElement("td",null,ne.createElement("input",{className:"form-control input-sm",min:"1",onChange:e=>this.updateDataDisk(t,"diskSizeGB",Number(e.target.value)),type:"number",value:null!=(n=e.diskSizeGB)?n:1})),ne.createElement("td",null,ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.updateDataDisk(t,"storageAccountType",e.target.value),value:(null==(l=e.managedDisk)?void 0:l.storageAccountType)||""},r.map(e=>ne.createElement("option",{key:e,value:e},e)))),ne.createElement("td",null,ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.updateDataDisk(t,"caching",e.target.value),value:e.caching||""},s.map(e=>ne.createElement("option",{key:e,value:e},e)))),ne.createElement("td",null,ne.createElement("button",{className:"btn btn-link sm-label",onClick:()=>this.removeDataDisk(t),type:"button"},ne.createElement("span",{className:"glyphicon glyphicon-trash"}))))})),ne.createElement("tfoot",null,ne.createElement("tr",null,ne.createElement("td",{colSpan:5},ne.createElement("button",{className:"btn btn-block btn-sm add-new",onClick:this.addDataDisk,type:"button"},ne.createElement("span",{className:"glyphicon glyphicon-plus-sign"})," Add New Data Disk"))))))))}}class Qt extends Ht{constructor(){super(...arguments),this.accountChanged=e=>{var t,a;const{values:n}=this.props.formik;n.credentials=e;const l=null==(t=n.credentialsChanged)?void 0:t.call(n,n);this.props.formik.setFieldValue("credentials",e),this.props.formik.setFieldValue("region",n.region),null==(a=n.processCommandUpdateResult)||a.call(n,l)},this.regionChanged=e=>{var t,a;const{values:n}=this.props.formik;n.region=e;const l=null==(t=n.regionChanged)?void 0:t.call(n,n);this.props.formik.setFieldValue("region",e),null==(a=n.processCommandUpdateResult)||a.call(n,l)},this.strategyChanged=(e,t)=>{this.props.formik.setFieldValue("strategy",t.key)},this.onStrategyFieldChange=(e,t)=>{this.props.formik.setFieldValue(e,t)}}validate(e){var t,a;const n={},l=(null==(t=e.viewState)?void 0:t.templatingEnabled)?/^([a-zA-Z0-9]*(\${.+})*)*$/:/^[a-zA-Z0-9]*$/,r=(null==(a=e.viewState)?void 0:a.templatingEnabled)?/^([a-zA-Z0-9-]*(\${.+})*)*$/:/^[a-zA-Z0-9-]*$/;return e.credentials||(n.credentials="Account required."),e.region||(n.region="Region required."),e.stack||(n.stack="Stack required."),e.freeFormDetails||(n.freeFormDetails="Detail required."),l.test(e.stack||"")||(n.stack="Stack can only contain letters and numbers."),r.test(e.freeFormDetails||"")||(n.freeFormDetails="Detail can only contain letters, numbers, and dashes."),n}render(){var e,t,a,n,l;const{app:r,formik:s}=this.props,{values:i}=s,o=B.getClusterName((null==r?void 0:r.name)||i.application,i.stack,i.freeFormDetails),c=(null==(e=i.backingData)?void 0:e.accounts)||[],d=(null==(a=null==(t=i.backingData)?void 0:t.filtered)?void 0:a.regions)||[];return ne.createElement("div",{className:"container-fluid form-horizontal"},ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Account"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.accountChanged(e.target.value),value:i.credentials||""},ne.createElement("option",{value:""},"Select..."),c.map(e=>ne.createElement("option",{key:e,value:e},e))))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Region"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.regionChanged(e.target.value),value:i.region||""},ne.createElement("option",{value:""},"Select..."),d.map(e=>{const t="string"==typeof e?e:e.name;return ne.createElement("option",{key:t,value:t},t)})))),this.textField("Stack","stack"),this.textField("Detail","freeFormDetails"),!(null==(n=i.viewState)?void 0:n.disableStrategySelection)&&i.selectedProvider&&ne.createElement(_,{command:i,onFieldChange:this.onStrategyFieldChange,onStrategyChange:this.strategyChanged}),!(null==(l=i.viewState)?void 0:l.hideClusterNamePreview)&&ne.createElement("div",{className:"well text-center"},"Your server group will be in the cluster: ",ne.createElement("strong",null,o)))}}class Xt extends Ht{constructor(){super(...arguments),this.capacityChanged=e=>{const t=Number(e);this.props.formik.values.sku={...this.props.formik.values.sku||{},capacity:t},this.props.formik.setFieldValue("sku.capacity",t)},this.zoneToggled=(e,t)=>{const a=this.props.formik.values.zones||[],n=t?a.concat(e):a.filter(t=>t!==e);this.props.formik.values.zones=n,this.props.formik.setFieldValue("zones",n)},this.zonesEnabledChanged=e=>{this.setField("zonesEnabled",e),e&&this.setField("enableInboundNAT",!1)}}validate(e){return!e.zonesEnabled||e.zones&&0!==e.zones.length?{}:{zones:"At least one zone is required when zones are enabled."}}render(){var e,t,a,n;const{values:l}=this.props.formik,r=(null==(t=null==(e=l.backingData)?void 0:e.filtered)?void 0:t.zones)||[];return ne.createElement("div",{className:"container-fluid form-horizontal"},ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Capacity"),ne.createElement("div",{className:"col-md-3"},ne.createElement("input",{className:"form-control input-sm",min:"0",onChange:e=>this.capacityChanged(e.target.value),type:"number",value:null!=(n=null==(a=l.sku)?void 0:a.capacity)?n:0}))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Use Zones"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{checked:!!l.zonesEnabled,onChange:e=>this.zonesEnabledChanged(e.target.checked),type:"checkbox"}))),l.zonesEnabled&&ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Zones"),ne.createElement("div",{className:"col-md-7"},r.map(e=>ne.createElement("label",{className:"checkbox-inline",key:e},ne.createElement("input",{checked:(l.zones||[]).includes(e),onChange:t=>this.zoneToggled(e,t.target.checked),type:"checkbox"}),e)))))}}const qt=[{displayName:"N/A",name:""},{displayName:"HTTP",name:"http"},{displayName:"TCP",name:"tcp"}];class Wt extends Ht{constructor(){super(...arguments),this.updateHealthSettings=e=>{const t={...this.props.formik.values.healthSettings||{},...e};this.props.formik.values.healthSettings=t,this.props.formik.setFieldValue("healthSettings",t)},this.protocolChanged=e=>{var t;e?this.updateHealthSettings({protocol:e,requestPath:"http"===e?null==(t=this.props.formik.values.healthSettings)?void 0:t.requestPath:null}):this.updateHealthSettings({protocol:null,port:null,requestPath:null})}}validate(e){var t;if(!(null==(t=e.healthSettings)?void 0:t.protocol))return{};const a={};return e.healthSettings.port||(a.port="Port required."),"http"!==e.healthSettings.protocol||e.healthSettings.requestPath||(a.requestPath="Path required."),a}render(){const e=this.props.formik.values.healthSettings||{};return ne.createElement("div",{className:"container-fluid form-horizontal"},ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Protocol"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.protocolChanged(e.target.value),value:e.protocol||""},qt.map(e=>ne.createElement("option",{key:e.displayName,value:e.name},e.displayName))))),e.protocol&&ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Port"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.updateHealthSettings({port:e.target.value}),type:"text",value:e.port||""}))),"http"===e.protocol&&ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Path"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.updateHealthSettings({requestPath:e.target.value}),type:"text",value:e.requestPath||""}))),ne.createElement("div",{className:"form-group small",style:{marginTop:"20px"}},ne.createElement("div",{className:"col-md-9 col-md-offset-3"},ne.createElement("p",null,"Health settings here will be applied directly to the VM Scale Set."))))}}class Yt extends Ht{constructor(){super(...arguments),this.imageChanged=e=>{var t,a;const n=((null==(a=null==(t=this.props.formik.values.backingData)?void 0:t.filtered)?void 0:a.images)||this.props.formik.values.images||[]).find(t=>t.imageName===e)||null;this.props.formik.values.imageName=e,this.props.formik.values.selectedImage=n,this.props.formik.setFieldValue("imageName",e),this.props.formik.setFieldValue("selectedImage",n)},this.customImageChanged=e=>{const t=e?{...this.props.formik.values.image||{},isCustom:e,region:this.props.formik.values.region}:{isCustom:e};this.props.formik.values.image=t,this.props.formik.setFieldValue("image",t)},this.customImageFieldChanged=(e,t)=>{const a={...this.props.formik.values.image||{},isCustom:!0,region:this.props.formik.values.region,[e]:t};this.props.formik.values.image=a,this.props.formik.setFieldValue("image",a)}}validate(e){var t,a;if(null==(t=e.viewState)?void 0:t.disableImageSelection)return{};if(null==(a=e.image)?void 0:a.isCustom){const t={};return e.image.imageName||(t.imageName="Image name required."),e.image.ostype||(t.ostype="OS type required."),e.image.uri||(t.uri="URI required."),t}return e.selectedImage?{}:{selectedImage:"Image required."}}isRegionalImage(e,t){return!t||(e.amis?!!e.amis[t]:e.region===t||null==e.region)}render(){var e,t,a,n;const{values:l}=this.props.formik,r=(null==(t=null==(e=l.backingData)?void 0:e.filtered)?void 0:t.images)||l.images||[],s=l.region?r.filter(e=>this.isRegionalImage(e,l.region)):r,i=l.image||{};return(null==(a=l.viewState)?void 0:a.disableImageSelection)?ne.createElement("div",{className:"container-fluid form-horizontal"},"Image selection is disabled for this command."):ne.createElement("div",{className:"container-fluid form-horizontal"},ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Use custom image?"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{checked:!!i.isCustom,onChange:e=>this.customImageChanged(e.target.checked),type:"checkbox"}))),i.isCustom&&ne.createElement(ne.Fragment,null,ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Region"),ne.createElement("div",{className:"col-md-7"},l.region)),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Image Name"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.customImageFieldChanged("imageName",e.target.value),value:i.imageName||""}))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"OS Type"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.customImageFieldChanged("ostype",e.target.value),value:i.ostype||""}))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"URI"),ne.createElement("div",{className:"col-md-7"},ne.createElement("input",{className:"form-control input-sm",onChange:e=>this.customImageFieldChanged("uri",e.target.value),value:i.uri||""})))),!i.isCustom&&ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Image"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.imageChanged(e.target.value),value:l.imageName||(null==(n=l.selectedImage)?void 0:n.imageName)||""},ne.createElement("option",{value:""},"Select..."),s.map(e=>ne.createElement("option",{key:e.imageName,value:e.imageName},e.imageName))))))}}class Zt extends Ht{constructor(){super(...arguments),this.instanceTypeChanged=e=>{this.props.formik.values.instanceType=e,this.props.formik.setFieldValue("instanceType",e),this.props.formik.setFieldValue("sku.name",e)}}validate(e){return e.instanceType?{}:{instanceType:"Instance Type required."}}render(){var e,t;const{values:a}=this.props.formik,n=(null==(t=null==(e=a.backingData)?void 0:e.filtered)?void 0:t.instanceTypes)||[];return ne.createElement("div",{className:"container-fluid form-horizontal"},ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Instance Type"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.instanceTypeChanged(e.target.value),value:a.instanceType||""},ne.createElement("option",{value:""},"Select..."),n.map(e=>ne.createElement("option",{key:e,value:e},e))))))}}function Kt(e){return((null==e?void 0:e.subnets)||[]).filter(e=>(e.devices||[]).every(e=>!e||"applicationGateways"!==e.type)).map(e=>e.name||e)}function Jt(e,t){return e.name===t.name&&(!t.resourceGroup||e.resourceGroup===t.resourceGroup)}class $t extends Ht{constructor(){super(...arguments),this.loadVnetSubnetsRequestId=0,this.loadBalancerChanged=async(e,t=!1)=>{const{values:a}=this.props.formik,n=++this.loadVnetSubnetsRequestId,l=this.getCommandLoadBalancer(e),r=function(e){var t;const a=String(e||"").toLowerCase().split("_").join(" ");return"application gateway"===a?"Azure Application Gateway":"load balancer"===a?"Azure Load Balancer":(null==(t=me.getLoadBalancerType(e))?void 0:t.type)||e||null}(null==l?void 0:l.loadBalancerType);a.loadBalancerName=e||null,a.loadBalancerType=r,a.selectedVnetSubnets=[],t&&(a.selectedVnet=null,a.vnet=null,a.vnetResourceGroup=null,a.selectedSubnet=null,a.subnet=null),a.viewState=a.viewState||{},a.viewState.networkSettingsConfigured=!0,this.props.formik.setFieldValue("loadBalancerName",a.loadBalancerName),this.props.formik.setFieldValue("loadBalancerType",a.loadBalancerType),this.props.formik.setFieldValue("selectedVnetSubnets",[]),t&&(this.props.formik.setFieldValue("selectedVnet",null),this.props.formik.setFieldValue("vnet",null),this.props.formik.setFieldValue("vnetResourceGroup",null),this.props.formik.setFieldValue("selectedSubnet",null),this.props.formik.setFieldValue("subnet",null)),O.clearCache("networks"),await this.loadVnetSubnets(a.loadBalancerName,r,n)},this.loadVnetSubnets=async(e,t,a)=>{const{values:n}=this.props.formik,l=n.credentials,r=n.region;if(!l||!r)return;let s,i;try{[s,i]=await Promise.all([e?this.context.services.loadBalancerReader.getLoadBalancerDetails("azure",l,r,e):Promise.resolve([]),g.listNetworks()])}catch(e){return}if(a!==this.loadVnetSubnetsRequestId||n.loadBalancerName!==e||n.credentials!==l||n.region!==r)return;const o=(Array.isArray(i)?i:i.azure||[]).filter(e=>e.account===l&&e.region===r),c=n.selectedVnet,d=1===(null==s?void 0:s.length)?s[0]:null;let u=!d&&c&&o.find(e=>Jt(e,c))||null;d&&(u=o.find(e=>"Azure Application Gateway"===t?e.name===d.vnet:!("Azure Load Balancer"!==t||!c)&&Jt(e,c)));const m=u?Kt(u):o.reduce((e,t)=>e.concat(Kt(t)),[]);n.allVnets=o,n.selectedVnet=u||null,n.vnet=(null==u?void 0:u.name)||null,n.vnetResourceGroup=(null==u?void 0:u.resourceGroup)||null,n.selectedVnetSubnets=m,n.selectedSubnet=u&&m.includes(n.subnet)?n.subnet:null,n.subnet=n.selectedSubnet,this.props.formik.setFieldValue("allVnets",o),this.props.formik.setFieldValue("selectedVnet",n.selectedVnet),this.props.formik.setFieldValue("vnet",n.vnet),this.props.formik.setFieldValue("vnetResourceGroup",n.vnetResourceGroup),this.props.formik.setFieldValue("selectedVnetSubnets",m),this.props.formik.setFieldValue("selectedSubnet",n.selectedSubnet),this.props.formik.setFieldValue("subnet",n.subnet)}}getCommandLoadBalancer(e){var t;const{values:a}=this.props.formik,n=(null==(t=a.backingData)?void 0:t.loadBalancers)||[];return n.find(t=>t.name===e&&t.account===a.credentials&&t.region===a.region)||n.find(t=>t.name===e)}componentDidMount(){const{values:e}=this.props.formik;e.credentials&&e.region&&(e.viewState.networkSettingsConfigured=!0,e.selectedVnetSubnets=e.selectedVnetSubnets||[],e.loadBalancerName?this.loadBalancerChanged(e.loadBalancerName):this.loadVnetSubnets(null,e.loadBalancerType||null,++this.loadVnetSubnetsRequestId))}componentWillUnmount(){this.loadVnetSubnetsRequestId+=1}render(){var e,t;const a=this.props.formik.values.loadBalancers||(null==(t=null==(e=this.props.formik.values.backingData)?void 0:e.filtered)?void 0:t.loadBalancers)||[];return ne.createElement("div",{className:"container-fluid form-horizontal"},ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Load Balancer"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.loadBalancerChanged(e.target.value,!0),value:this.props.formik.values.loadBalancerName||""},ne.createElement("option",{value:""},"None"),a.map(e=>ne.createElement("option",{key:e,value:e},e))))),this.props.formik.values.loadBalancerName&&ne.createElement("div",{className:"well-compact text-center"},"The load balancer ",this.props.formik.values.loadBalancerName," is an"," ",this.props.formik.values.loadBalancerType))}}function ea(e){return`${e.name}|${e.resourceGroup||""}`}$t.contextType=U;class ta extends Ht{constructor(){super(...arguments),this.selectedVnetChanged=e=>{var t,a;const n=(this.props.formik.values.allVnets||(null==(a=null==(t=this.props.formik.values.backingData)?void 0:t.filtered)?void 0:a.vnets)||[]).find(t=>ea(t)===e),l=((null==n?void 0:n.subnets)||[]).filter(e=>(e.devices||[]).every(e=>!e||"applicationGateways"!==e.type)).map(e=>e.name||e);this.props.formik.values.selectedVnet=n||null,this.props.formik.values.vnet=(null==n?void 0:n.name)||null,this.props.formik.values.vnetResourceGroup=(null==n?void 0:n.resourceGroup)||null,this.props.formik.values.selectedSubnet=null,this.props.formik.values.subnet=null,this.props.formik.values.selectedVnetSubnets=l,this.props.formik.setFieldValue("selectedVnet",n||null),this.props.formik.setFieldValue("vnet",(null==n?void 0:n.name)||null),this.props.formik.setFieldValue("vnetResourceGroup",(null==n?void 0:n.resourceGroup)||null),this.props.formik.setFieldValue("selectedSubnet",null),this.props.formik.setFieldValue("subnet",null),this.props.formik.setFieldValue("selectedVnetSubnets",l)},this.selectedSubnetChanged=e=>{this.props.formik.values.selectedSubnet=e||null,this.props.formik.values.subnet=e||null,this.props.formik.setFieldValue("selectedSubnet",e||null),this.props.formik.setFieldValue("subnet",e||null)}}validate(e){var t;const a={};return(null==(t=e.viewState)?void 0:t.networkSettingsConfigured)?(e.selectedVnet||(a.selectedVnet="Virtual network required."),e.subnet||(a.selectedSubnet="Subnet required."),a):a}render(){var e,t,a,n,l,r;const{values:s}=this.props.formik,i=s.allVnets||(null==(t=null==(e=s.backingData)?void 0:e.filtered)?void 0:t.vnets)||[],o=s.selectedVnetSubnets||((null==(a=s.selectedVnet)?void 0:a.subnets)||[]).map(e=>e.name||e),c="Azure Load Balancer"===s.loadBalancerType||!s.loadBalancerType;return(null==(n=s.viewState)?void 0:n.networkSettingsConfigured)?ne.createElement("div",{className:"container-fluid form-horizontal"},c&&ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Virtual Network"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.selectedVnetChanged(e.target.value),value:s.selectedVnet?ea(s.selectedVnet):""},ne.createElement("option",{value:""},"Select..."),i.map(e=>ne.createElement("option",{key:ea(e),value:ea(e)},function(e){return e.resourceGroup?`${e.name} (${e.resourceGroup})`:e.name}(e)))))),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Subnets"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.selectedSubnetChanged(e.target.value),value:s.subnet||""},ne.createElement("option",{value:""},"Select..."),o.map(e=>ne.createElement("option",{key:e,value:e},e))))),!(null==(l=s.viewState)?void 0:l.hideClusterNamePreview)&&ne.createElement("div",{className:"well-compact text-center"},ne.createElement("p",null,"Your server group will be using a subnet in virtual network:"),ne.createElement("strong",null,(null==(r=s.selectedVnet)?void 0:r.name)||"Virtual network was not selected"))):ne.createElement("h5",{className:"text-center"},"Please select an account, a region and a load balancer first.")}}class aa extends Ht{constructor(){super(...arguments),this.securityGroupChanged=e=>{var t,a;const n=((null==(a=null==(t=this.props.formik.values.backingData)?void 0:t.filtered)?void 0:a.securityGroups)||[]).find(t=>(t.id||t.name)===e);this.props.formik.values.selectedSecurityGroup=n||null,this.props.formik.values.securityGroupName=e||null,this.props.formik.setFieldValue("selectedSecurityGroup",n||null),this.props.formik.setFieldValue("securityGroupName",e||null)}}render(){var e,t,a,n;const{values:l}=this.props.formik,r=(null==(t=null==(e=l.backingData)?void 0:e.filtered)?void 0:t.securityGroups)||[];return(null==(a=l.viewState)?void 0:a.securityGroupsConfigured)?ne.createElement("div",{className:"container-fluid form-horizontal"},ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-3 sm-label-right"},"Firewall"),ne.createElement("div",{className:"col-md-7"},ne.createElement("select",{className:"form-control input-sm",onChange:e=>this.securityGroupChanged(e.target.value),value:(null==(n=l.selectedSecurityGroup)?void 0:n.id)||l.securityGroupName||""},ne.createElement("option",{value:""},"Select..."),r.map(e=>{const t=e.id||e.name||e;return ne.createElement("option",{key:t,value:t},t)})))),ne.createElement("div",{className:"form-group small",style:{marginTop:"20px"}},ne.createElement("div",{className:"col-md-9 col-md-offset-3"},ne.createElement("p",null,"If you're not finding a firewall that was recently added, refresh the list and reopen this dialog.")))):ne.createElement("h5",{className:"text-center"},"Please select an account and region.")}}class na extends Ht{constructor(){super(...arguments),this.tagsChanged=e=>{this.props.formik.values.instanceTags=e,this.props.formik.setFieldValue("instanceTags",e)}}validate(e){const t=me.checkTags(e.instanceTags);return t.isValid?{}:{instanceTags:t.errorMessage}}render(){const e=me.checkTags(this.props.formik.values.instanceTags);return ne.createElement("div",{className:"container-fluid form-horizontal"},!e.isValid&&ne.createElement("div",{className:"col-md-12 text-danger"},e.errorMessage),ne.createElement("div",{className:"form-group"},ne.createElement("div",{className:"col-md-4 sm-label-left"},ne.createElement("b",null,"Custom Tags")),ne.createElement("div",{className:"col-md-12"},ne.createElement(H,{addButtonLabel:"Add New Tags",allowEmpty:!0,model:this.props.formik.values.instanceTags||{},onChange:this.tagsChanged}))))}}class la extends ne.Component{constructor(e){var t,a,n,l;super(e),this._isUnmounted=!1,this.templateSelected=()=>{this.setState({loaded:!1,requiresTemplateSelection:!1}),this.prepareCommand()},this.onTaskComplete=()=>{this.clearApplicationRefreshSubscription(),this.applicationRefreshUnsubscribe=this.props.application.serverGroups.onNextRefresh(this.onApplicationRefresh),this.props.application.serverGroups.refresh()},this.onApplicationRefresh=()=>{if(this.clearApplicationRefreshSubscription(),this._isUnmounted)return;const{command:e}=this.state,t=this.state.taskMonitor.task.execution.stages.find(e=>"cloneServerGroup"===e.type);if(t&&t.context["deploy.server.groups"]){const a=t.context["deploy.server.groups"][e.region];if(a){let t="^.^.^.clusters.serverGroup";this.props.stateService.includes("**.clusters.serverGroup")&&(t="^.serverGroup"),this.props.stateService.includes("**.clusters.cluster.serverGroup")&&(t="^.^.serverGroup"),this.props.stateService.includes("**.clusters")&&(t=".serverGroup"),this.props.stateService.go(t,{accountId:e.credentials,provider:"azure",region:e.region,serverGroup:a})}}},this.clearApplicationRefreshSubscription=()=>{var e;null==(e=this.applicationRefreshUnsubscribe)||e.call(this),this.applicationRefreshUnsubscribe=void 0},this.prepareCommand=()=>{var e,t;const{application:a}=this.props,{command:n}=this.state;n.viewState=n.viewState||{},n.processCommandUpdateResult=this.processCommandUpdateResult;const l=(null==(e=n.backingData)?void 0:e.accounts)&&(null==(t=n.backingData)?void 0:t.filtered)?null:this.configurationService.configureCommand(a,n),r=()=>{this.completeConfiguration(n),this._isUnmounted||this.setState({loaded:!0,requiresTemplateSelection:!1})};l?l.then(r):r()},this.processCommandUpdateResult=(e={dirty:{}})=>{const t=e.dirty||{};if(!Object.keys(t).length)return;const a=this.state.command.viewState=this.state.command.viewState||{};a.dirty={...a.dirty||{},...t}},this.submit=e=>{var t;const a=null==(t=e.viewState)?void 0:t.mode;return"editPipeline"===a||"createPipeline"===a?this.props.closeModal(e):this.state.taskMonitor.submit(()=>this.context.services.serverGroupWriter.cloneServerGroup(e,this.props.application))};const r=!!(null==(t=e.command.viewState)?void 0:t.requiresTemplateSelection),s=te(e.command),i=!r&&(null==(a=s.backingData)?void 0:a.accounts)&&(null==(n=s.backingData)?void 0:n.filtered),o={copied:["account, region, subnet, cluster name (stack, details)","load balancers",F.get("firewalls"),"instance type","all fields on the Advanced Settings page"],notCopied:[],additionalCopyText:"If a server group exists in this cluster at the time of deployment, its scaling policies will be copied over to the new server group."};(null==(l=e.command.viewState)?void 0:l.disableStrategySelection)||o.notCopied.push("the deployment strategy (if any) used to deploy the most recent server group"),this.state={command:s,loaded:!!i,requiresTemplateSelection:r,taskMonitor:new v({application:e.application,title:"Creating your server group",onDismiss:()=>this.props.dismissModal(),onTaskComplete:this.onTaskComplete}),templateSelectionText:o}}static show(e,t){return f.show(ra,e,{dialogClassName:"wizard-modal modal-lg"},t)}componentDidMount(){this.state.loaded?this.completeConfiguration(this.state.command):this.state.requiresTemplateSelection||this.prepareCommand()}get configurationService(){return this.context.services.providerServiceDelegate.getDelegate("azure","serverGroup.configurationService")}componentWillUnmount(){this._isUnmounted=!0,this.clearApplicationRefreshSubscription()}completeConfiguration(e){var t,a;e.backingData=e.backingData||{},e.backingData.filtered=e.backingData.filtered||{},e.backingData.filtered.regions=e.backingData.filtered.regions||[],e.backingData.packageImages=e.backingData.packageImages||e.images||[],e.processCommandUpdateResult=this.processCommandUpdateResult,this.attachCommandHandlers(e),this.processCommandUpdateResult(null==(t=e.credentialsChanged)?void 0:t.call(e,e,!0)),this.processCommandUpdateResult(null==(a=e.regionChanged)?void 0:a.call(e,e,!0))}attachCommandHandlers(e){if(e.viewState.azureReactHandlersAttached)return;const t=e.credentialsChanged,a=e.regionChanged;e.credentialsChanged=(e,a=!1)=>this.withImageConfiguration(e,null==t?void 0:t(e,a)),e.regionChanged=(e,t=!1)=>this.withImageConfiguration(e,null==a?void 0:a(e,t)),e.viewState.azureReactHandlersAttached=!0}withImageConfiguration(e,t={dirty:{}}){const a=this.configurationService.configureImages(e)||{dirty:{}};return{dirty:{...t.dirty||{},...a.dirty||{}}}}render(){var e;const{application:t,dismissModal:a,title:n}=this.props,{command:l}=this.state;return this.state.requiresTemplateSelection?ne.createElement(j,{application:t,cloudProvider:"azure",command:l,onDismiss:a,onTemplateSelected:this.templateSelected,templateSelectionText:this.state.templateSelectionText}):ne.createElement(Q,{closeModal:this.submit,dismissModal:a,heading:n,initialValues:l,loading:!this.state.loaded,submitButtonLabel:null==(e=l.viewState)?void 0:e.submitButtonLabel,taskMonitor:this.state.taskMonitor,render:({formik:e,nextIdx:a,wizard:n})=>ne.createElement(ne.Fragment,null,ne.createElement(X,{label:"Basic Settings",order:a(),render:({innerRef:a})=>ne.createElement(Qt,{ref:a,app:t,formik:e}),wizard:n}),ne.createElement(X,{label:"Image",order:a(),render:({innerRef:t})=>ne.createElement(Yt,{ref:t,formik:e}),wizard:n}),ne.createElement(X,{label:"Instance Type",order:a(),render:({innerRef:t})=>ne.createElement(Zt,{ref:t,formik:e}),wizard:n}),ne.createElement(X,{label:"Capacity and Zones",order:a(),render:({innerRef:t})=>ne.createElement(Xt,{ref:t,formik:e}),wizard:n}),ne.createElement(X,{label:"Load Balancers",order:a(),render:({innerRef:t})=>ne.createElement($t,{ref:t,formik:e}),wizard:n}),ne.createElement(X,{label:"Network Settings",order:a(),render:({innerRef:t})=>ne.createElement(ta,{ref:t,formik:e}),wizard:n}),ne.createElement(X,{label:F.get("Firewalls"),order:a(),render:({innerRef:t})=>ne.createElement(aa,{ref:t,formik:e}),wizard:n}),ne.createElement(X,{label:"Health",order:a(),render:({innerRef:t})=>ne.createElement(Wt,{ref:t,formik:e}),wizard:n}),ne.createElement(X,{label:"Advanced Settings",order:a(),render:({innerRef:t})=>ne.createElement(jt,{ref:t,formik:e}),wizard:n}),ne.createElement(X,{label:"Tags",order:a(),render:({innerRef:t})=>ne.createElement(na,{ref:t,formik:e}),wizard:n}))})}}la.contextType=U,la.defaultProps={closeModal:E,dismissModal:E};const ra=Object.assign(n(la),{show:la.show});class sa extends ne.Component{constructor(e){super(e),this.state={verified:!1},this.handleVerification=e=>{this.setState({verified:e})}}render(){const{onSubmit:e,onCancel:t,isValid:a,account:n}=this.props,{verified:l}=this.state;return ne.createElement("div",{className:"modal-footer"},ne.createElement(q,{expectedValue:n,onValidChange:this.handleVerification}),ne.createElement("button",{className:"btn btn-default",onClick:t},"Cancel"),ne.createElement("button",{type:"submit",className:"btn btn-primary",onClick:e,disabled:!a||!l},"Submit"))}}const ia=class e extends ne.Component{constructor(e){super(e),this.close=e=>{this.props.dismissModal.apply(null,e)},this.submit=()=>{const{command:e,taskMonitor:t}=this.state,{serverGroup:a,application:n}=this.props;t.submit(()=>this.context.services.serverGroupWriter.rollbackServerGroup(a,n,e))},this.filterServerGroups=e=>e.filter(e=>0!==e.instanceCounts.total).sort((e,t)=>t.name.localeCompare(e.name)),this.isValid=()=>void 0!==this.state.command.rollbackContext.restoreServerGroupName,this.handleServerGroupChange=e=>{const{disabledServerGroups:t}=this.props,a={...this.state.command};a.rollbackContext.restoreServerGroupName=e.value;const n=this.filterServerGroups(t).find(t=>t.name===e.value);a.targetSize=n.capacity.max,this.setState({command:a})},this.handleTaskReasonChange=e=>{const t={...this.state.command,reason:e};this.setState({command:t})};const{application:t,serverGroup:a}=e;this.state={taskMonitor:new v({application:t,title:"Rolling back your server group",onDismiss:()=>this.props.dismissModal()}),submitting:!0,command:{interestingHealthProviderNames:[],rollbackType:"EXPLICIT",rollbackContext:{rollbackServerGroupName:a.name,enableAndDisableOnly:!0}}}}static show(t,a){return f.show(e,t,{},a)}render(){const{command:e,taskMonitor:t,submitting:a}=this.state,{serverGroup:n,disabledServerGroups:l}=this.props,r=this.filterServerGroups(l).map(e=>({label:e.name,value:e.name}));return ne.createElement(se,{onHide:this.close},ne.createElement(A,{monitor:t}),a&&ne.createElement("form",{role:"form"},ne.createElement(b,{dismiss:this.close}),ne.createElement(se.Header,null,ne.createElement(se.Title,null,"Rollback ",n.name)),ne.createElement(se.Body,null,ne.createElement("div",{className:"row"},ne.createElement("div",{className:"col-sm-3 sm-label-right"},"Restore to"),ne.createElement("div",{className:"col-sm-6"},ne.createElement(ce,{value:e.rollbackContext.restoreServerGroupName,onChange:this.handleServerGroupChange,options:r}))),ne.createElement(W,{reason:e.taskReason,onChange:this.handleTaskReasonChange})),ne.createElement(sa,{onSubmit:this.submit,onCancel:this.close,isValid:this.isValid(),account:n.account})))}};ia.contextType=U,ia.defaultProps={closeModal:E,dismissModal:E};let oa=ia;function ca(e,t){const{app:a,serverGroup:n}=e;return new oe(l=>{(function(e){const{app:t,serverGroup:a}=e,n=()=>{let e=t.serverGroups.data.find(e=>e.name===a.name&&e.account===a.accountId&&e.region===a.region);return e||t.loadBalancers.data.some(t=>t.account===a.accountId&&t.region===a.region&&(t.serverGroups||[]).some(t=>t.name===a.name&&(e=t,!0))),e};return t.ready?t.ready().then(n):Promise.resolve(n())})(e).then(e=>{if(!e)return t(),void l.complete();K.getServerGroup(a.name,n.accountId,n.region,n.name).then(r=>{if(!r||0===Object.keys(r).length)return t(),void l.complete();const s=function(e,t,a,n){var l,r;(null==(l=e.image)?void 0:l.description)&&e.image.description.split(", ").forEach(t=>{const[a,n]=t.split("=");"ancestor_name"===a&&n&&(e.image.baseImage=n)});const s=(null==(r=e.launchConfig)?void 0:r.securityGroups)||[];return s.length&&(e.securityGroups=s.map(e=>t.securityGroups.data.find(t=>t.accountName===a&&t.region===n&&(t.id===e||t.name===e))).filter(Boolean)),e}(Object.assign(r,e,{account:n.accountId}),a,n.accountId,n.region);l.next(s)},()=>{t(),l.complete()})},()=>{t(),l.complete()})})}const da=n(function({app:e,serverGroup:t,stateService:a}){const n=N(),{serverGroupCommandBuilder:l,serverGroupWriter:r}=n;return ne.createElement(le,{className:"dropdown",id:"azure-server-group-actions-dropdown"},ne.createElement(le.Toggle,{className:"btn btn-sm btn-primary dropdown-toggle"},"Server Group Actions"),ne.createElement(le.Menu,{className:"dropdown-menu"},!t.isDisabled&&ne.createElement("li",null,ne.createElement("a",{className:"clickable",onClick:()=>{const a=(e.clusters||[]).find(e=>e.name===t.cluster&&e.account===t.account),l=((null==a?void 0:a.serverGroups)||[]).filter(e=>e.isDisabled&&e.region===t.region);oa.show({application:e,serverGroup:t,disabledServerGroups:l},n)}},"Rollback")),ne.createElement("li",null,ne.createElement("a",{className:"clickable",onClick:()=>{const a={header:`Really disable ${t.name}?`,buttonText:`Disable ${t.name}`,account:t.account,taskMonitorConfig:{application:e,title:`Disabling ${t.name}`},submitMethod:a=>r.disableServerGroup(t,e.name,a)};Y.addDisableWarningMessage(e,t,a),c.confirm(a)}},"Disable")),ne.createElement("li",null,ne.createElement("a",{className:"clickable",onClick:()=>{c.confirm({header:`Really enable ${t.name}?`,buttonText:`Enable ${t.name}`,account:t.account,taskMonitorConfig:{application:e,title:`Enabling ${t.name}`},submitMethod:a=>r.enableServerGroup(t,e,{...a,interestingHealthProviderNames:[]})})}},"Enable")),ne.createElement("li",null,ne.createElement("a",{className:"clickable",onClick:()=>{const n={name:t.name,accountId:t.account,region:t.region},l={header:`Really destroy ${t.name}?`,buttonText:`Destroy ${t.name}`,account:t.account,taskMonitorConfig:{application:e,title:`Destroying ${t.name}`,onTaskComplete:()=>{a.includes("**.serverGroup",n)&&a.go("^")}},submitMethod:a=>r.destroyServerGroup(t,e,a)};Y.addDestroyWarningMessage(e,t,l),c.confirm(l)}},"Destroy")),ne.createElement("li",null,ne.createElement("a",{className:"clickable",onClick:()=>{const a=Z.getValue("azure","serverGroup.CloneServerGroupModal");(null==a?void 0:a.show)&&l.buildServerGroupCommandFromExisting(e,t).then(l=>{a.show({application:e,command:l,title:`Clone ${t.name}`},n)})}},"Clone"))))});const ua=[function({serverGroup:e}){var t,a;return ne.createElement(l,{heading:"Server Group Information",defaultExpanded:!0},ne.createElement("dl",{className:"dl-horizontal dl-narrow"},ne.createElement("dt",null,"Created"),ne.createElement("dd",null,r(e.createdTime)),ne.createElement("dt",null,"Region"),ne.createElement("dd",null,ne.createElement(s,{account:e.account}),e.region),ne.createElement("dt",null,"Image"),ne.createElement("dd",null,(null==(t=e.image)?void 0:t.imageName)||"-"),ne.createElement("dt",null,"SKU"),ne.createElement("dd",null,(null==(a=e.sku)?void 0:a.name)||"-")))},function({serverGroup:e}){var t,a;return ne.createElement(l,{heading:"Size",defaultExpanded:!0},ne.createElement("dl",{className:"dl-horizontal dl-narrow"},ne.createElement("dt",null,"Current"),ne.createElement("dd",null,null!=(a=null==(t=e.instances)?void 0:t.length)?a:0)))},function({serverGroup:e}){return ne.createElement(l,{heading:"Health",defaultExpanded:!0},ne.createElement("dl",{className:"dl-horizontal dl-narrow"},ne.createElement("dt",null,"Instances"),ne.createElement("dd",null,ne.createElement(S,{container:e.instanceCounts,className:"pull-left"}))))},function({serverGroup:e}){return ne.createElement(l,{heading:F.get("Firewalls")},ne.createElement("dl",{className:"dl-horizontal dl-narrow"},ne.createElement("dt",null,"Name"),ne.createElement("dd",null,e.securityGroupName||"-")))}],ma={validate(e){const t=[];return e&&e.length&&function(e,t){/^([a-zA-Z][a-zA-Z0-9]*)?$/.test(e)||t.push("The application name must begin with a letter and must contain only letters or digits. No special characters are allowed.")}(e,t),{warnings:[],errors:t}}};J.registerValidator("azure",ma);function pa(){Z.registerProvider("azure",{name:"Azure",logo:{path:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQYAAACrCAYAAACEwDK4AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABCZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjI2MjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTcxPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6QmFnLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxOS0wNS0wNlQxMjowNTozMTwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjguMzwveG1wOkNyZWF0b3JUb29sPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4K8Qjg7wAAM9JJREFUeAHtnQeAFdX1/8/MvLa9L1tgF5Zl6UUUggoIggVLrCQYY42a/jPlb4rxr9EkvxhNIz9bEjUmllhRRFCxIKII0hVY2jaWLbC9vf5mft9z571lwd1lWfWXRM+FeW/ezJ07937uveeee+6ZWbIsazG2EpIgBITA554AywKWCSRC4XPfFgSAEDiCgMiEI3DIDyEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEh8B9DQPuPyWk0o+2WlRnyhYorW8O5++pb0irq2pIqu6y46uaAtau6tv6+L89Yf9akzF3/aeWS/AqBfycCjk8jM5ZljUa6FrZyTdPCvd0DcZJwvAhbLrZkbN158RMZXaGIsbcx4Cira3ej8ydWtoeza1u9haf8atXItkBkeER3pkYiRDpEm6FppBkaBci9zxHv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"},image:{reader:ge},serverGroup:{transformer:Mt,commandBuilder:Ot,configurationService:_t,CloneServerGroupModal:ra,detailsGetter:ca,detailsActions:da,detailsSections:ua},instance:{details:Ae,instanceTypeService:he},loadBalancer:{transformer:Ee,CreateLoadBalancerModal:Me,useDetailsHook:Ue,detailsActions:_e,detailsSections:je},securityGroup:{transformer:Vt,reader:Lt,CreateSecurityGroupModal:Gt,details:Tt}})}function ga(){T.pipeline.registerStage({key:"destroyServerGroup",provides:"destroyServerGroup",cloudProvider:"azure",component:at,executionLabelComponent:tt,accountExtractor:e=>[e.context.credentials],configAccountExtractor:e=>[e.credentials],validators:[{type:"targetImpedance",message:"This pipeline will attempt to destroy a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]}),T.pipeline.registerStage({key:"enableServerGroup",provides:"enableServerGroup",alias:"enableAsg",cloudProvider:"azure",component:st,executionLabelComponent:rt,validators:[{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]}),T.pipeline.registerStage({key:"disableServerGroup",provides:"disableServerGroup",alias:"disableAsg",cloudProvider:"azure",component:lt,executionLabelComponent:nt,validators:[{type:"targetImpedance",message:"This pipeline will attempt to disable a server group without deploying a new version into the same cluster."},{type:"requiredField",fieldName:"cluster"},{type:"requiredField",fieldName:"target"},{type:"requiredField",fieldName:"regions"},{type:"requiredField",fieldName:"credentials",fieldLabel:"account"}]}),T.pipeline.registerStage({key:"bake",provides:"bake",cloudProvider:"azure",label:"Bake",description:"Bakes an image",component:Ye,executionDetailsSections:[Ke,R],executionLabelComponent:z,extraLabelLines:e=>e.masterStage.context.allPreviouslyBaked||e.masterStage.context.somePreviouslyBaked?1:0,supportsCustomTimeout:!0,validators:[{type:"requiredField",fieldName:"package"},{type:"requiredField",fieldName:"regions"},{type:"upstreamVersionProvided",checkParentTriggers:!0,getMessage:e=>"Bake stages should always have a stage or trigger preceding them that provides version information: <ul>"+e.map(e=>`<li>${e}</li>`).join("")+"</ul>Otherwise, Spinnaker will bake and deploy the most-recently built package."}],restartable:!0})}!function(e,t){void 0===t&&(t={});var a=t.insertAt;if("undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],l=document.createElement("style");l.type="text/css","top"===a&&n.firstChild?n.insertBefore(l,n.firstChild):n.appendChild(l),l.styleSheet?l.styleSheet.cssText=e:l.appendChild(document.createTextNode(e))}}('.cloud-provider-logo .icon-azure {\n -webkit-mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 22.1.0%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg version%3D%221.1%22 id%3D%22Layer_1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%09 viewBox%3D%220 0 48 48%22 style%3D%22enable-background%3Anew 0 0 48 48%3B%22 xml%3Aspace%3D%22preserve%22%3E%3Cstyle type%3D%22text%2Fcss%22%3E%09.st0%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2300A2D8%3B%7D%09.st1%7Bfill%3A%23F79E1C%3B%7D%09.st2%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%232ABAEC%3B%7D%09.st3%7Bfill%3A%23F7B218%3B%7D%09.st4%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3Anone%3B%7D%09.st5%7Bfill%3A%2300A2D8%3B%7D%09.st6%7Bfill%3A%232ABAEC%3B%7D%09.st7%7Bfill%3A%23323A45%3B%7D%09.st8%7Bfill%3A%2388909B%3B%7D%09.st9%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st10%7Bfill%3A%23A3BF3A%3B%7D%09.st11%7Bfill%3A%2380A23E%3B%7D%09.st12%7Bfill%3A%237B4D87%3B%7D%09.st13%7Bfill%3A%232F75BB%3B%7D%09.st14%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2385C9D5%3B%7D%09.st15%7Bopacity%3A0.15%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st16%7Bfill%3A%23A5D9E2%3B%7D%09.st17%7Bfill%3A%2385C9D5%3B%7D%09.st18%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23323A45%3B%7D%09.st19%7Bfill%3A%23FFFFFF%3B%7D%09.st20%7Bfill%3A%23DAEFF3%3B%7D%09.st21%7Bfill%3A%232A65AF%3B%7D%09.st22%7Bfill%3A%23F6ECF4%3B%7D%09.st23%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%232F75BB%3B%7D%09.st24%7Bfill%3Anone%3B%7D%09.st25%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F9BA19%3B%7D%09.st26%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23A3BF3A%3B%7D%09.st27%7Bfill%3A%23F6931D%3B%7D%09.st28%7Bfill%3A%235E6D80%3B%7D%09.st29%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3B%7D%09.st30%7Bfill%3A%2300B8E2%3B%7D%09.st31%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%235E6D80%3B%7D%09.st32%7Bfill%3Anone%3Bstroke%3A%2385C9D5%3Bstroke-width%3A0%3Bstroke-linecap%3Around%3Bstroke-linejoin%3Around%3B%7D%09.st33%7Bfill%3A%232A89CA%3B%7D%09.st34%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%237B4D87%3B%7D%09.st35%7Bopacity%3A0.3%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st36%7Bopacity%3A0.3%3Bfill%3A%23FFFFFF%3B%7D%09.st37%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2378B843%3B%7D%09.st38%7Bfill%3A%2378B843%3B%7D%09.st39%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23EDF0F4%3B%7D%09.st40%7Bfill%3A%23005BA3%3B%7D%09.st41%7Bfill%3A%230F80B0%3B%7D%09.st42%7Bfill%3A%23005F87%3B%7D%09.st43%7Bfill%3A%23B7D332%3B%7D%09.st44%7Bfill%3A%237FB900%3B%7D%09.st45%7Bopacity%3A0.6%3Bfill%3A%23FFFFFF%3B%7D%09.st46%7Bopacity%3A0.4%3Bfill%3A%23FFFFFF%3B%7D%09.st47%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_13_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st48%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_64_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st49%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_65_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st50%7Bfill%3A%2373BDCD%3B%7D%09.st51%7Bopacity%3A0.6%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st52%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2380A23E%3Bstroke%3A%23FFFFFF%3Bstroke-width%3A4%3Bstroke-miterlimit%3A10%3B%7D%09.st53%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2380A23E%3B%7D%09.st54%7Bclip-path%3Aurl(%23XMLID_67_)%3Bfill%3Anone%3B%7D%09.st55%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F7B218%3B%7D%09.st56%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_69_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st57%7Bopacity%3A0.8%3Bfill%3A%23FFFFFF%3B%7D%09.st58%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_79_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st59%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23DB5B26%3B%7D%09.st60%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F58B1F%3B%7D%09.st61%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_84_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st62%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23404B59%3B%7D%09.st63%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_118_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st64%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23D1B0D3%3B%7D%09.st65%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_119_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st66%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2315B2E7%3B%7D%09.st67%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23E1F3F8%3B%7D%09.st68%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_120_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st69%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_124_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st70%7Bopacity%3A0.3%3Bclip-path%3Aurl(%23XMLID_125_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st71%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_126_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st72%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%237C8737%3B%7D%09.st73%7Bopacity%3A0.3%3Bclip-path%3Aurl(%23XMLID_127_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st74%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_130_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st75%7Bfill%3A%23CCCBCB%3B%7D%09.st76%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2388909B%3B%7D%09.st77%7Bopacity%3A0.1%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st78%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_131_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st79%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_133_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st80%7Bdisplay%3Anone%3B%7D%09.st81%7Bfill%3A%2345B6F4%3B%7D%09.st82%7Bfill%3A%2389919C%3B%7D%09.st83%7Bfill%3A%2361ADD1%3B%7D%09.st84%7Bfill%3A%233899C6%3B%7D%09.st85%7Bfill%3A%23F78F08%3B%7D%09.st86%7Bfill%3A%23C1BFBC%3B%7D%09.st87%7Bfill%3A%237A7A7A%3B%7D%09.st88%7Bfill%3A%23B3B4B5%3B%7D%09.st89%7Bopacity%3A0.48%3B%7D%09.st90%7Bfill%3A%23A0A1A2%3B%7D%09.st91%7Bfill%3A%23A1DEF0%3B%7D%09.st92%7Bfill%3A%23804998%3B%7D%09.st93%7Bfill%3A%230072C6%3B%7D%09.st94%7Bfill%3A%2359B4D9%3B%7D%09.st95%7Bfill%3A%233999C6%3B%7D%09.st96%7Bfill%3A%230078D7%3B%7D%09.st97%7Bfill%3A%23D1B972%3B%7D%09.st98%7Bfill%3A%23FEE087%3B%7D%09.st99%7Bfill%3A%23B1CE2D%3B%7D%09.st100%7Bfill%3A%237FBA00%3B%7D%09.st101%7Bfill%3A%23FCD116%3B%7D%09.st102%7Bfill%3A%23719904%3B%7D%09.st103%7Bfill%3A%23B8D432%3B%7D%09.st104%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23804898%3B%7D%09.st105%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%236B2980%3B%7D%09.st106%7Bfill%3A%236B2980%3B%7D%09.st107%7Bopacity%3A0.3%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st108%7Bopacity%3A0.2%3Bfill%3A%231E1E1E%3Benable-background%3Anew %3B%7D%09.st109%7Bfill%3A%2333BCF0%3B%7D%09.st110%7Bopacity%3A0.2%3Bfill%3A%23636363%3B%7D%09.st111%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_134_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st112%7Bfill%3A%238B77B6%3B%7D%09.st113%7Bfill%3A%239B6CAC%3B%7D%09.st114%7Bfill%3A%23874B94%3B%7D%09.st115%7Bopacity%3A0.4%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st116%7Bopacity%3A0.8%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st117%7Bopacity%3A0.6%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st118%7Bopacity%3A0.25%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st119%7Bfill%3A%23DD5900%3B%7D%09.st120%7Bfill%3A%23FF8C00%3B%7D%09.st121%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%233E3E3E%3B%7D%09.st122%7Bfill%3Aurl(%23path3060_1_)%3B%7D%09.st123%7Bfill%3A%231870C5%3B%7D%09.st124%7Bfill%3A%2372BFDF%3B%7D%09.st125%7Bfill%3A%233C3938%3B%7D%09.st126%7Bfill%3A%230072AC%3B%7D%09.st127%7Bfill%3A%230079B6%3B%7D%09.st128%7Bfill%3A%2300A2D9%3B%7D%09.st129%7Bfill%3A%23BFDC34%3B%7D%09.st130%7Bfill%3A%23898989%3B%7D%09.st131%7Bfill%3A%23EDF0F5%3B%7D%09.st132%7Bfill%3A%23A3A4A7%3B%7D%09.st133%7Bfill%3A%23353535%3B%7D%09.st134%7Bfill%3A%23FF8C02%3B%7D%09.st135%7Bfill%3A%2300AC8C%3B%7D%09.st136%7Bfill%3A%236EC2E9%3B%7D%09.st137%7Bfill%3A%23442359%3B%7D%09.st138%7Bfill%3A%236DC0E6%3B%7D%09.st139%7Bfill%3A%23432056%3B%7D%09.st140%7Bfill%3A%2386CAD7%3B%7D%09.st141%7Bfill%3A%23009E48%3B%7D%09.st142%7Bopacity%3A0.2%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st143%7Bfill%3A%2368217A%3B%7D%09.st144%7Bfill%3A%23E5E5E5%3B%7D%09.st145%7Bopacity%3A0.15%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st146%7Bfill%3A%233898C6%3B%7D%09.st147%7Bfill%3A%2380BA42%3B%7D%09.st148%7Bfill%3A%23B3D234%3B%7D%09.st149%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F9F9F9%3B%7D%09.st150%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23008EBE%3B%7D%09.st151%7Bopacity%3A0.1%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F1F1F2%3B%7D%09.st152%7Bfill%3A%23BAD80A%3B%7D%09.st153%7Bclip-path%3Aurl(%23SVGID_2_)%3B%7D%09.st154%7Bfill%3A%2300BCF2%3B%7D%09.st155%7Bfill%3A%235AB4DA%3B%7D%09.st156%7Bfill%3Anone%3Bstroke%3A%235AB4DA%3Bstroke-width%3A0.75%3Bstroke-miterlimit%3A10%3B%7D%09.st157%7Bfill%3A%233898C5%3B%7D%09.st158%7Bfill%3A%237A7B7B%3B%7D%09.st159%7Bfill%3A%23545555%3B%7D%09.st160%7Bfill%3A%23D6EAF3%3B%7D%09.st161%7Bfill%3A%23009580%3B%7D%09.st162%7Bfill%3A%23BA141A%3B%7D%09.st163%7Bfill%3A%237AC3E1%3B%7D%09.st164%7Bfill%3A%23E27226%3B%7D%09.st165%7Bfill%3A%23FF9D26%3B%7D%09.st166%7Bopacity%3A0.12%3Bfill%3A%23BA141A%3B%7D%09.st167%7Bfill%3A%233C98C5%3B%7D%09.st168%7Bfill%3A%235AB3D8%3B%7D%09.st169%7Bfill%3A%23AAD8EB%3B%7D%09.st170%7Bfill%3A%23797979%3B%7D%09.st171%7Bfill%3A%23959595%3B%7D%09.st172%7Bfill%3A%23D1D1D1%3B%7D%09.st173%7Bclip-path%3Aurl(%23SVGID_4_)%3B%7D%09.st174%7Bfill%3A%2333A2E5%3B%7D%09.st175%7Bfill%3A%2371C2EA%3B%7D%09.st176%7Bfill%3A%23005091%3B%7D%09.st177%7Bclip-path%3Aurl(%23SVGID_6_)%3B%7D%09.st178%7Bfill%3A%23ACD64D%3B%7D%3C%2Fstyle%3E%3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cg%3E%09%09%09%09%3Cpolygon class%3D%22st93%22 points%3D%2226.5%2C4.5 12.5%2C15.5 1.5%2C35.5 11.5%2C35.5 %09%09%09%09%22%2F%3E%09%09%09%09%3Cpolygon class%3D%22st93%22 points%3D%2227.5%2C7.5 21.5%2C22.5 32.5%2C35.5 11.5%2C40.5 46.5%2C40.5 %09%09%09%09%22%2F%3E%09%09%09%3C%2Fg%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E");\n mask-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%3C!-- Generator%3A Adobe Illustrator 22.1.0%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%3Csvg version%3D%221.1%22 id%3D%22Layer_1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%09 viewBox%3D%220 0 48 48%22 style%3D%22enable-background%3Anew 0 0 48 48%3B%22 xml%3Aspace%3D%22preserve%22%3E%3Cstyle type%3D%22text%2Fcss%22%3E%09.st0%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2300A2D8%3B%7D%09.st1%7Bfill%3A%23F79E1C%3B%7D%09.st2%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%232ABAEC%3B%7D%09.st3%7Bfill%3A%23F7B218%3B%7D%09.st4%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3Anone%3B%7D%09.st5%7Bfill%3A%2300A2D8%3B%7D%09.st6%7Bfill%3A%232ABAEC%3B%7D%09.st7%7Bfill%3A%23323A45%3B%7D%09.st8%7Bfill%3A%2388909B%3B%7D%09.st9%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st10%7Bfill%3A%23A3BF3A%3B%7D%09.st11%7Bfill%3A%2380A23E%3B%7D%09.st12%7Bfill%3A%237B4D87%3B%7D%09.st13%7Bfill%3A%232F75BB%3B%7D%09.st14%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2385C9D5%3B%7D%09.st15%7Bopacity%3A0.15%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st16%7Bfill%3A%23A5D9E2%3B%7D%09.st17%7Bfill%3A%2385C9D5%3B%7D%09.st18%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23323A45%3B%7D%09.st19%7Bfill%3A%23FFFFFF%3B%7D%09.st20%7Bfill%3A%23DAEFF3%3B%7D%09.st21%7Bfill%3A%232A65AF%3B%7D%09.st22%7Bfill%3A%23F6ECF4%3B%7D%09.st23%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%232F75BB%3B%7D%09.st24%7Bfill%3Anone%3B%7D%09.st25%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F9BA19%3B%7D%09.st26%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23A3BF3A%3B%7D%09.st27%7Bfill%3A%23F6931D%3B%7D%09.st28%7Bfill%3A%235E6D80%3B%7D%09.st29%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3B%7D%09.st30%7Bfill%3A%2300B8E2%3B%7D%09.st31%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%235E6D80%3B%7D%09.st32%7Bfill%3Anone%3Bstroke%3A%2385C9D5%3Bstroke-width%3A0%3Bstroke-linecap%3Around%3Bstroke-linejoin%3Around%3B%7D%09.st33%7Bfill%3A%232A89CA%3B%7D%09.st34%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%237B4D87%3B%7D%09.st35%7Bopacity%3A0.3%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st36%7Bopacity%3A0.3%3Bfill%3A%23FFFFFF%3B%7D%09.st37%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2378B843%3B%7D%09.st38%7Bfill%3A%2378B843%3B%7D%09.st39%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23EDF0F4%3B%7D%09.st40%7Bfill%3A%23005BA3%3B%7D%09.st41%7Bfill%3A%230F80B0%3B%7D%09.st42%7Bfill%3A%23005F87%3B%7D%09.st43%7Bfill%3A%23B7D332%3B%7D%09.st44%7Bfill%3A%237FB900%3B%7D%09.st45%7Bopacity%3A0.6%3Bfill%3A%23FFFFFF%3B%7D%09.st46%7Bopacity%3A0.4%3Bfill%3A%23FFFFFF%3B%7D%09.st47%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_13_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st48%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_64_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st49%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_65_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st50%7Bfill%3A%2373BDCD%3B%7D%09.st51%7Bopacity%3A0.6%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st52%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2380A23E%3Bstroke%3A%23FFFFFF%3Bstroke-width%3A4%3Bstroke-miterlimit%3A10%3B%7D%09.st53%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2380A23E%3B%7D%09.st54%7Bclip-path%3Aurl(%23XMLID_67_)%3Bfill%3Anone%3B%7D%09.st55%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F7B218%3B%7D%09.st56%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_69_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st57%7Bopacity%3A0.8%3Bfill%3A%23FFFFFF%3B%7D%09.st58%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_79_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st59%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23DB5B26%3B%7D%09.st60%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F58B1F%3B%7D%09.st61%7Bopacity%3A0.35%3Bclip-path%3Aurl(%23XMLID_84_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st62%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23404B59%3B%7D%09.st63%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_118_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st64%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23D1B0D3%3B%7D%09.st65%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_119_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st66%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2315B2E7%3B%7D%09.st67%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23E1F3F8%3B%7D%09.st68%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_120_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st69%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_124_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st70%7Bopacity%3A0.3%3Bclip-path%3Aurl(%23XMLID_125_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st71%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_126_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st72%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%237C8737%3B%7D%09.st73%7Bopacity%3A0.3%3Bclip-path%3Aurl(%23XMLID_127_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st74%7Bopacity%3A0.15%3Bclip-path%3Aurl(%23XMLID_130_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st75%7Bfill%3A%23CCCBCB%3B%7D%09.st76%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%2388909B%3B%7D%09.st77%7Bopacity%3A0.1%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st78%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_131_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st79%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_133_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st80%7Bdisplay%3Anone%3B%7D%09.st81%7Bfill%3A%2345B6F4%3B%7D%09.st82%7Bfill%3A%2389919C%3B%7D%09.st83%7Bfill%3A%2361ADD1%3B%7D%09.st84%7Bfill%3A%233899C6%3B%7D%09.st85%7Bfill%3A%23F78F08%3B%7D%09.st86%7Bfill%3A%23C1BFBC%3B%7D%09.st87%7Bfill%3A%237A7A7A%3B%7D%09.st88%7Bfill%3A%23B3B4B5%3B%7D%09.st89%7Bopacity%3A0.48%3B%7D%09.st90%7Bfill%3A%23A0A1A2%3B%7D%09.st91%7Bfill%3A%23A1DEF0%3B%7D%09.st92%7Bfill%3A%23804998%3B%7D%09.st93%7Bfill%3A%230072C6%3B%7D%09.st94%7Bfill%3A%2359B4D9%3B%7D%09.st95%7Bfill%3A%233999C6%3B%7D%09.st96%7Bfill%3A%230078D7%3B%7D%09.st97%7Bfill%3A%23D1B972%3B%7D%09.st98%7Bfill%3A%23FEE087%3B%7D%09.st99%7Bfill%3A%23B1CE2D%3B%7D%09.st100%7Bfill%3A%237FBA00%3B%7D%09.st101%7Bfill%3A%23FCD116%3B%7D%09.st102%7Bfill%3A%23719904%3B%7D%09.st103%7Bfill%3A%23B8D432%3B%7D%09.st104%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23804898%3B%7D%09.st105%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%236B2980%3B%7D%09.st106%7Bfill%3A%236B2980%3B%7D%09.st107%7Bopacity%3A0.3%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st108%7Bopacity%3A0.2%3Bfill%3A%231E1E1E%3Benable-background%3Anew %3B%7D%09.st109%7Bfill%3A%2333BCF0%3B%7D%09.st110%7Bopacity%3A0.2%3Bfill%3A%23636363%3B%7D%09.st111%7Bopacity%3A0.1%3Bclip-path%3Aurl(%23XMLID_134_)%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23FFFFFF%3B%7D%09.st112%7Bfill%3A%238B77B6%3B%7D%09.st113%7Bfill%3A%239B6CAC%3B%7D%09.st114%7Bfill%3A%23874B94%3B%7D%09.st115%7Bopacity%3A0.4%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st116%7Bopacity%3A0.8%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st117%7Bopacity%3A0.6%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st118%7Bopacity%3A0.25%3Bfill%3A%237FBA00%3Benable-background%3Anew %3B%7D%09.st119%7Bfill%3A%23DD5900%3B%7D%09.st120%7Bfill%3A%23FF8C00%3B%7D%09.st121%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%233E3E3E%3B%7D%09.st122%7Bfill%3Aurl(%23path3060_1_)%3B%7D%09.st123%7Bfill%3A%231870C5%3B%7D%09.st124%7Bfill%3A%2372BFDF%3B%7D%09.st125%7Bfill%3A%233C3938%3B%7D%09.st126%7Bfill%3A%230072AC%3B%7D%09.st127%7Bfill%3A%230079B6%3B%7D%09.st128%7Bfill%3A%2300A2D9%3B%7D%09.st129%7Bfill%3A%23BFDC34%3B%7D%09.st130%7Bfill%3A%23898989%3B%7D%09.st131%7Bfill%3A%23EDF0F5%3B%7D%09.st132%7Bfill%3A%23A3A4A7%3B%7D%09.st133%7Bfill%3A%23353535%3B%7D%09.st134%7Bfill%3A%23FF8C02%3B%7D%09.st135%7Bfill%3A%2300AC8C%3B%7D%09.st136%7Bfill%3A%236EC2E9%3B%7D%09.st137%7Bfill%3A%23442359%3B%7D%09.st138%7Bfill%3A%236DC0E6%3B%7D%09.st139%7Bfill%3A%23432056%3B%7D%09.st140%7Bfill%3A%2386CAD7%3B%7D%09.st141%7Bfill%3A%23009E48%3B%7D%09.st142%7Bopacity%3A0.2%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st143%7Bfill%3A%2368217A%3B%7D%09.st144%7Bfill%3A%23E5E5E5%3B%7D%09.st145%7Bopacity%3A0.15%3Bfill%3A%23FFFFFF%3Benable-background%3Anew %3B%7D%09.st146%7Bfill%3A%233898C6%3B%7D%09.st147%7Bfill%3A%2380BA42%3B%7D%09.st148%7Bfill%3A%23B3D234%3B%7D%09.st149%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F9F9F9%3B%7D%09.st150%7Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23008EBE%3B%7D%09.st151%7Bopacity%3A0.1%3Bfill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bfill%3A%23F1F1F2%3B%7D%09.st152%7Bfill%3A%23BAD80A%3B%7D%09.st153%7Bclip-path%3Aurl(%23SVGID_2_)%3B%7D%09.st154%7Bfill%3A%2300BCF2%3B%7D%09.st155%7Bfill%3A%235AB4DA%3B%7D%09.st156%7Bfill%3Anone%3Bstroke%3A%235AB4DA%3Bstroke-width%3A0.75%3Bstroke-miterlimit%3A10%3B%7D%09.st157%7Bfill%3A%233898C5%3B%7D%09.st158%7Bfill%3A%237A7B7B%3B%7D%09.st159%7Bfill%3A%23545555%3B%7D%09.st160%7Bfill%3A%23D6EAF3%3B%7D%09.st161%7Bfill%3A%23009580%3B%7D%09.st162%7Bfill%3A%23BA141A%3B%7D%09.st163%7Bfill%3A%237AC3E1%3B%7D%09.st164%7Bfill%3A%23E27226%3B%7D%09.st165%7Bfill%3A%23FF9D26%3B%7D%09.st166%7Bopacity%3A0.12%3Bfill%3A%23BA141A%3B%7D%09.st167%7Bfill%3A%233C98C5%3B%7D%09.st168%7Bfill%3A%235AB3D8%3B%7D%09.st169%7Bfill%3A%23AAD8EB%3B%7D%09.st170%7Bfill%3A%23797979%3B%7D%09.st171%7Bfill%3A%23959595%3B%7D%09.st172%7Bfill%3A%23D1D1D1%3B%7D%09.st173%7Bclip-path%3Aurl(%23SVGID_4_)%3B%7D%09.st174%7Bfill%3A%2333A2E5%3B%7D%09.st175%7Bfill%3A%2371C2EA%3B%7D%09.st176%7Bfill%3A%23005091%3B%7D%09.st177%7Bclip-path%3Aurl(%23SVGID_6_)%3B%7D%09.st178%7Bfill%3A%23ACD64D%3B%7D%3C%2Fstyle%3E%3Cg%3E%09%3Cg%3E%09%09%3Cg%3E%09%09%09%3Cg%3E%09%09%09%09%3Cpolygon class%3D%22st93%22 points%3D%2226.5%2C4.5 12.5%2C15.5 1.5%2C35.5 11.5%2C35.5 %09%09%09%09%22%2F%3E%09%09%09%09%3Cpolygon class%3D%22st93%22 points%3D%2227.5%2C7.5 21.5%2C22.5 32.5%2C35.5 11.5%2C40.5 46.5%2C40.5 %09%09%09%09%22%2F%3E%09%09%09%3C%2Fg%3E%09%09%3C%2Fg%3E%09%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E");\n background-color: #0078d4;\n}\n'),pa(),ga(),$.registerProvider("azure",["redblack"]);export{ga as registerAzurePipelineStages,pa as registerAzureProvider};
2
2
  //# sourceMappingURL=index.js.map