@spinnaker/azure 2025.0.5 → 2025.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utility.ts","../src/help/azure.help.ts","../src/image/image.reader.js","../src/instance/azureInstanceType.service.js","../src/instance/details/instance.details.controller.js","../src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx","../src/azure.settings.ts","../src/loadBalancer/loadBalancer.transformer.js","../src/loadBalancer/configure/createLoadBalancer.controller.js","../src/loadBalancer/details/loadBalancerDetail.controller.js","../src/logo/logo_azure.png","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/serverGroup/serverGroup.transformer.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/pipeline/stages/bake/azureBakeStage.js","../src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js","../src/pipeline/stages/disableAsg/azureDisableAsgStage.js","../src/pipeline/stages/enableAsg/azureEnableAsgStage.js","../src/securityGroup/securityGroup.write.service.js","../src/securityGroup/configure/CreateSecurityGroupCtrl.js","../src/securityGroup/configure/EditSecurityGroupCtrl.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js","../src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js","../src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js","../src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js","../src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js","../src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js","../src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js","../src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js","../src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js","../src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js","../src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js","../src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js","../src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js","../src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js","../src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js","../src/serverGroup/configure/wizard/tags/tagsSelector.directive.js","../src/serverGroup/configure/wizard/zones/zoneSelector.directive.js","../src/serverGroup/configure/serverGroup.configure.azure.module.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js","../src/common/AzureModalFooter.tsx","../src/serverGroup/details/rollback/RollbackServerGroupModal.tsx","../src/serverGroup/details/serverGroupDetails.azure.controller.js","../src/serverGroup/details/serverGroup.details.module.js","../src/validation/applicationName.validator.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/azure.module.ts"],"sourcesContent":["export interface ITagResult {\n isValid: boolean;\n error: TagError | null;\n errorMessage?: string;\n}\n\nexport enum TagError {\n TAG_NUMBER_EXCEED,\n TAG_KEY_LENGTH_EXCEED,\n TAG_VALUE_LENGTH_EXCEED,\n TAG_KEY_INVALID_CHARACTER,\n TAG_VALUE_INVALID_CHARACTER,\n TAG_OBJECT_UNDEFINED,\n}\n\nexport interface IAzureLoadBalancer {\n type: string;\n description: string;\n}\n\nexport const AzureLoadBalancerTypes: IAzureLoadBalancer[] = [\n {\n type: 'Azure Load Balancer',\n description: '',\n },\n {\n type: 'Azure Application Gateway',\n description: '',\n },\n];\n\nexport default class Utility {\n public static readonly TAG_LIMITATION: number = 8;\n public static readonly TAG_KEY_LENGTH_LIMITATION: number = 512;\n public static readonly TAG_VALUE_LENGTH_LIMITATION: number = 256;\n public static readonly TAG_INVALID_CHAR_REG_EXR: RegExp = /[<>%&\\\\?/]/;\n\n public static checkTags(tagsObject: { [s: string]: string }): ITagResult {\n if (!tagsObject) {\n return {\n isValid: false,\n error: TagError.TAG_OBJECT_UNDEFINED,\n errorMessage: 'instanceTags is not defined',\n };\n }\n const length: number = Object.keys(tagsObject).length;\n if (!(length >= 0 && length <= Utility.TAG_LIMITATION)) {\n return {\n isValid: false,\n error: TagError.TAG_NUMBER_EXCEED,\n errorMessage: `Number of tags exceeds the limit: ${Utility.TAG_LIMITATION}`,\n };\n }\n\n for (const [k, v] of Object.entries(tagsObject)) {\n if (k.length > Utility.TAG_KEY_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_LENGTH_EXCEED,\n errorMessage: `Length of Tag key: ${k} exceeds the limit: ${Utility.TAG_KEY_LENGTH_LIMITATION}`,\n };\n }\n if (v.length > Utility.TAG_VALUE_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_LENGTH_EXCEED,\n errorMessage: `Length of Tag value: ${v} exceeds the limit: ${Utility.TAG_VALUE_LENGTH_LIMITATION}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(k)) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag key: ${k}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(v)) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag value: ${v}`,\n };\n }\n }\n return {\n isValid: true,\n error: null,\n };\n }\n\n public static getLoadBalancerType(typeString: string): IAzureLoadBalancer | null {\n typeString = typeString.toLowerCase().split('_').join(' ');\n return AzureLoadBalancerTypes.find((lb: IAzureLoadBalancer) => lb.type.toLowerCase() === typeString) || null;\n }\n}\n","import { HelpContentsRegistry } from '@spinnaker/core';\nimport Utility from '../utility';\n\nconst helpContents: { [key: string]: string } = {\n 'azure.securityGroup.ingress.description': 'Friendly description of the rule you want to enable (limit 80 chars.)',\n 'azure.securityGroup.ingress.priority':\n \"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.\",\n 'azure.securityGroup.ingress.source':\n \"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.\",\n 'azure.securityGroup.ingress.sourcePortRange':\n '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.',\n 'azure.securityGroup.ingress.destination':\n \"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.\",\n 'azure.securityGroup.ingress.destinationPortRange':\n '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.',\n 'azure.securityGroup.ingress.direction': 'Specifies whether the rule is for inbound or outbound traffic.',\n 'azure.securityGroup.ingress.actions':\n '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.',\n 'azure.securityGroup.ingress.destPortRanges':\n '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.',\n 'azure.securityGroup.ingress.sourceIPCIDRRanges':\n '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',\n 'azure.serverGroup.imageName': '(Required) <b>Image</b> is the deployable Azure Machine Image.',\n 'azure.serverGroup.stack':\n '(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.',\n 'azure.serverGroup.detail':\n '(Required) <b>Detail</b> is a naming component to help distinguish specifics of the server group.',\n 'azure.serverGroup.scriptLocation':\n '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',\n 'azure.serverGroup.commandToExecute':\n 'Command(s) to execute custom scripts provided during provisioning of an instance.',\n 'azure.serverGroup.customData': 'Script or metadata to be injected into each instances.',\n 'azure.serverGroup.customTags': `Custom tags on Virtual Machine Scale Set. Allow ${Utility.TAG_LIMITATION} tags at most.`,\n 'azure.serverGroup.enableInboundNAT':\n '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.',\n 'azure.serverGroup.lun':\n '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.',\n 'azure.serverGroup.diskSizeGB':\n 'Specifies the size of an empty data disk in gigabytes. This value cannot be larger than 1023 GB',\n 'azure.serverGroup.managedDisk.storageAccountType':\n 'You can choose between Azure managed disks types to support your workload or scenario.',\n 'azure.serverGroup.caching':\n '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.',\n 'azure.serverGroup.userAssignedIdentities':\n 'Allows your server to access Azure resources. Learn more here: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview',\n 'azure.loadBalancer.dnsName':\n '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.',\n 'azure.loadBalancer.probes.probeInterval':\n 'Probe interval in seconds. This value is the time interval between two consecutive probes.',\n 'azure.loadBalancer.probes.timeout':\n '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.',\n 'azure.loadBalancer.probes.unhealthyThreshold':\n 'Probe retry count. The back-end server is marked down after the consecutive probe failure count reaches the unhealthy threshold.',\n 'azure.loadBalancer.loadBalancingRules.idleTimeout':\n 'Keep a TCP or HTTP connection open without relying on clients to send keep-alive messages.',\n 'azure.loadBalancer.loadBalancingRules.sessionPersistence':\n '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.',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nexport const AZURE_IMAGE_IMAGE_READER = 'spinnaker.azure.image.reader';\nexport const name = AZURE_IMAGE_IMAGE_READER; // for backwards compatibility\nmodule(AZURE_IMAGE_IMAGE_READER, []).factory('azureImageReader', function () {\n function findImages(params) {\n return REST('/images/find')\n .query(params)\n .get()\n .then(\n function (results) {\n return results;\n },\n function () {\n return [];\n },\n );\n }\n\n function getImage(amiName, region, credentials) {\n return REST('/images')\n .path(credentials, region, amiName)\n .query({ provider: 'azure' })\n .get()\n .then(\n function (results) {\n return results && results.length ? results[0] : null;\n },\n function () {\n return null;\n },\n );\n }\n\n return {\n findImages: findImages,\n getImage: getImage,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE = 'spinnaker.azure.instanceType.service';\nexport const name = AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE; // for backwards compatibility\nmodule(AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE, []).factory('azureInstanceTypeService', [\n '$q',\n function ($q) {\n const B = {\n type: 'B-series',\n description:\n '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.',\n instanceTypes: [\n {\n name: 'Standard_B1ms',\n label: 'Standard_B1ms',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 4,\n },\n },\n {\n name: 'Standard_B1s',\n label: 'Standard_B1s',\n cpu: 1,\n memory: 1,\n storage: {\n type: 'SSD',\n count: 2,\n size: 2,\n },\n },\n {\n name: 'Standard_B2ms',\n label: 'Standard_B2ms',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_B2s',\n label: 'Standard_B2s',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 8,\n },\n },\n {\n name: 'Standard_B4ms',\n label: 'Standard_B4ms',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_B8ms',\n label: 'Standard_B8ms',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_B1ls',\n label: 'Standard_B1ls',\n cpu: 1,\n memory: 0.5,\n storage: {\n type: 'SSD',\n count: 2,\n size: 1,\n },\n },\n ],\n };\n\n const DSV3 = {\n type: 'Dsv3-series',\n description:\n 'The Dsv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2s_v3',\n label: 'Standard_D2s_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_D4s_v3',\n label: 'Standard_D4s_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_D8s_v3',\n label: 'Standard_D8s_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_D16s_v3',\n label: 'Standard_D16s_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 128,\n },\n },\n {\n name: 'Standard_D32s_v3',\n label: 'Standard_D32s_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 256,\n },\n },\n {\n name: 'Standard_D64s_v3',\n label: 'Standard_D64s_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 512,\n },\n },\n ],\n };\n\n const DV3 = {\n type: 'Dv3-series',\n description:\n 'The Dv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2_v3',\n label: 'Standard_D2_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D4_v3',\n label: 'Standard_D4_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D8_v3',\n label: 'Standard_D8_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D16_v3',\n label: 'Standard_D16_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D32_v3',\n label: 'Standard_D32_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 800,\n },\n },\n {\n name: 'Standard_D64_v3',\n label: 'Standard_D64_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 1600,\n },\n },\n ],\n };\n\n const DSV2 = {\n type: 'DSv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DS1_v2',\n label: 'Standard_DS1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 7,\n },\n },\n {\n name: 'Standard_DS2_v2',\n label: 'Standard_DS2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 14,\n },\n },\n {\n name: 'Standard_DS3_v2',\n label: 'Standard_DS3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 28,\n },\n },\n {\n name: 'Standard_DS4_v2',\n label: 'Standard_DS4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 56,\n },\n },\n {\n name: 'Standard_DS5_v2',\n label: 'Standard_DS5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 112,\n },\n },\n {\n name: 'Standard_DS11_v2',\n label: 'Standard_DS11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 28,\n },\n },\n {\n name: 'Standard_DS12_v2',\n label: 'Standard_DS12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 56,\n },\n },\n {\n name: 'Standard_DS13_v2',\n label: 'Standard_DS13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 112,\n },\n },\n {\n name: 'Standard_DS14_v2',\n label: 'Standard_DS14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 224,\n },\n },\n {\n name: 'Standard_DS15_v2',\n label: 'Standard_DS15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const DV2 = {\n type: 'Dv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_D1_v2',\n label: 'Standard_D1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D2_v2',\n label: 'Standard_D2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D3_v2',\n label: 'Standard_D3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D4_v2',\n label: 'Standard_D4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D5_v2',\n label: 'Standard_D5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D11_v2',\n label: 'Standard_D11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D12_v2',\n label: 'Standard_D12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D13_v2',\n label: 'Standard_D13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D14_v2',\n label: 'Standard_D14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D15_v2',\n label: 'Standard_D15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const AV2 = {\n type: 'Av2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_A1_v2',\n label: 'Standard_A1_v2',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 10,\n },\n },\n {\n name: 'Standard_A2m_v2',\n label: 'Standard_A2m_v2',\n cpu: 2,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A2_v2',\n label: 'Standard_A2_v2',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A4m_v2',\n label: 'Standard_A4m_v2',\n cpu: 4,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A4_v2',\n label: 'Standard_A4_v2',\n cpu: 4,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A8m_v2',\n label: 'Standard_A8m_v2',\n cpu: 8,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n {\n name: 'Standard_A8_v2',\n label: 'Standard_A8_v2',\n cpu: 8,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n ],\n };\n\n const DC = {\n type: 'DC-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DC2s',\n label: 'Standard_DC2s',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 2,\n size: 100,\n },\n },\n {\n name: 'Standard_DC4s',\n label: 'Standard_DC4s',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 200,\n },\n },\n ],\n };\n\n const FSV2 = {\n type: 'Fsv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F2s_v2',\n label: 'Standard_F2s_v2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F4s_v2',\n label: 'Standard_F4s_v2',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F8s_v2',\n label: 'Standard_F8s_v2',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F16s_v2',\n label: 'Standard_F16s_v2',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F32s_v2',\n label: 'Standard_F32s_v2',\n cpu: 32,\n memory: 64,\n storage: { type: 'SSD', count: 32, size: 256 },\n },\n {\n name: 'Standard_F64s_v2',\n label: 'Standard_F64s_v2',\n cpu: 64,\n memory: 128,\n storage: { type: 'SSD', count: 32, size: 512 },\n },\n {\n name: 'Standard_F72s_v2',\n label: 'Standard_F72s_v2',\n cpu: 72,\n memory: 144,\n storage: { type: 'SSD', count: 32, size: 576 },\n },\n ],\n };\n\n const FS = {\n type: 'Fs-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1s',\n label: 'Standard_F1s',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 4 },\n },\n {\n name: 'Standard_F2s',\n label: 'Standard_F2s',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 8 },\n },\n {\n name: 'Standard_F4s',\n label: 'Standard_F4s',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 16 },\n },\n {\n name: 'Standard_F8s',\n label: 'Standard_F8s',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 32 },\n },\n {\n name: 'Standard_F16s',\n label: 'Standard_F16s',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 64 },\n },\n ],\n };\n\n const F = {\n type: 'F-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1',\n label: 'Standard_F1',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F2',\n label: 'Standard_F2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F4',\n label: 'Standard_F4',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F8',\n label: 'Standard_F8',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F16',\n label: 'Standard_F16',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 256 },\n },\n ],\n };\n\n const categories = [\n {\n type: 'general',\n label: 'General Purpose',\n description:\n 'Balanced CPU-to-memory ratio. Ideal for testing and development, small to medium databases, and low to medium traffic web servers.',\n families: [B, DSV3, DV3, DSV2, DV2, AV2, DC],\n icon: 'hdd',\n },\n {\n type: 'compute',\n label: 'Compute Optimized',\n description:\n 'High CPU-to-memory ratio. Good for medium traffic web servers, network appliances, batch processes, and application servers.',\n families: [FSV2, FS, F],\n icon: 'hdd',\n },\n {\n type: 'custom',\n label: 'Custom Type',\n description: 'Select the instance type below.',\n families: [],\n icon: 'asterisk',\n },\n ];\n\n function calculateStorage(type) {\n if (!type || !type.storage) {\n return 0;\n }\n return type.storage.count * type.storage.size;\n }\n\n function buildStats(category) {\n const stats = {\n cpu: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n memory: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n storage: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n families: [],\n };\n\n if (category.families && category.families.length) {\n category.families.forEach(function (family) {\n stats.families.push(family.type);\n const cpuMin = _.minBy(family.instanceTypes, 'cpu').cpu || Number.MAX_VALUE;\n const cpuMax = _.maxBy(family.instanceTypes, 'cpu').cpu || -Number.MAX_VALUE;\n const memoryMin = _.minBy(family.instanceTypes, 'memory').memory || Number.MAX_VALUE;\n const memoryMax = _.maxBy(family.instanceTypes, 'memory').memory || -Number.MAX_VALUE;\n const storageMin = calculateStorage(_.minBy(family.instanceTypes, calculateStorage)) || Number.MAX_VALUE;\n const storageMax = calculateStorage(_.maxBy(family.instanceTypes, calculateStorage)) || -Number.MAX_VALUE;\n\n stats.cpu.min = Math.min(stats.cpu.min, cpuMin);\n stats.cpu.max = Math.max(stats.cpu.max, cpuMax);\n stats.memory.min = Math.min(stats.memory.min, memoryMin);\n stats.memory.max = Math.max(stats.memory.max, memoryMax);\n stats.storage.min = Math.min(stats.storage.min, storageMin);\n stats.storage.max = Math.max(stats.storage.max, storageMax);\n });\n }\n\n return stats;\n }\n\n function getCategories() {\n categories.map(function (category) {\n for (const family of category.families) {\n for (const inst of family.instanceTypes) {\n if (inst.costFactor == undefined) inst.costFactor = 0;\n }\n }\n category.stats = buildStats(category);\n });\n return $q.when(categories);\n }\n\n const getAllTypesByRegion = function getAllTypesByRegion() {\n return getCategories();\n };\n\n function getAvailableTypesForRegions(locationToInstanceTypesMap, selectedLocations) {\n // This function is only ever called with one location.\n const [location] = selectedLocations;\n return locationToInstanceTypesMap[location];\n }\n\n return {\n getCategories: getCategories,\n getAvailableTypesForRegions: getAvailableTypesForRegions,\n getAllTypesByRegion: getAllTypesByRegion,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n} from '@spinnaker/core';\n\nexport const AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.azure.instance.detail.controller';\nexport const name = AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'azureInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n '$q',\n function ($scope, $state, $uibModal, instance, app, $q) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('azure', 'instance.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n function extractHealthMetrics(instance, latest) {\n // do not backfill on standalone instances\n if (app.isStandalone) {\n instance.health = latest.health;\n }\n\n instance.health = instance.health || [];\n const displayableMetrics = instance.health.filter(function (metric) {\n return metric.type !== 'Azure' || metric.state !== 'Unknown';\n });\n // backfill details where applicable\n if (latest.health) {\n displayableMetrics.forEach(function (metric) {\n const detailsMatch = latest.health.filter(function (latestHealth) {\n return latestHealth.type === metric.type;\n });\n if (detailsMatch.length) {\n _.defaults(metric, detailsMatch[0]);\n }\n });\n }\n $scope.healthMetrics = displayableMetrics;\n }\n\n function retrieveInstance() {\n const extraData = {};\n let instanceSummary, loadBalancers, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n account = instance.account;\n region = instance.region;\n } else {\n app.serverGroups.data.some(function (serverGroup) {\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = serverGroup.loadBalancers;\n account = serverGroup.account;\n region = serverGroup.region;\n vpcId = serverGroup.vpcId;\n extraData.serverGroup = serverGroup.name;\n extraData.vpcId = serverGroup.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another app\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a disabled server group via a load balancer\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then(\n function (details) {\n $scope.state.loading = false;\n extractHealthMetrics(instanceSummary, details);\n $scope.instance = _.defaults(details, instanceSummary);\n $scope.instance.account = account;\n $scope.instance.region = region;\n $scope.instance.vpcId = vpcId;\n $scope.instance.loadBalancers = loadBalancers;\n const discoveryMetric = _.find($scope.healthMetrics, function (metric) {\n return metric.type === 'Discovery';\n });\n if (discoveryMetric && discoveryMetric.vipAddress) {\n const vipList = discoveryMetric.vipAddress;\n $scope.instance.vipAddress = vipList.includes(',') ? vipList.split(',') : [vipList];\n }\n $scope.baseIpAddress = details.publicDnsName || details.privateIpAddress;\n },\n function () {\n // When an instance is first starting up, we may not have the details cached in oort yet, but we still\n // want to let the user see what details we have\n $scope.state.loading = false;\n $state.go('^');\n },\n );\n }\n\n if (!instanceSummary) {\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.loading = false;\n }\n\n return $q.when(null);\n }\n\n this.canDeregisterFromLoadBalancer = function () {\n return $scope.instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n };\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n if (!instance.loadBalancers || !instance.loadBalancers.length) {\n return false;\n }\n const outOfService = instance.health.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const discoveryHealth = instance.health.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.terminateInstance = function terminateInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId,\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup + '?',\n buttonText: 'Terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rebootInstance = function rebootInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Rebooting ' + instance.instanceId,\n };\n\n const submitMethod = function () {\n return InstanceWriter.rebootInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithLoadBalancer = function registerInstanceWithLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.registerInstanceWithLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + loadBalancerNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromLoadBalancer = function deregisterInstanceFromLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.deregisterInstanceFromLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + loadBalancerNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really disable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Disable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.hasHealthState = function hasHealthState(healthProviderType, state) {\n const instance = $scope.instance;\n return instance.health.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n ],\n);\n","import React from 'react';\nimport { Button, Modal } from 'react-bootstrap';\n\nimport type { ILoadBalancerModalProps } from '@spinnaker/core';\nimport { CloudProviderRegistry, ModalClose, ModalInjector, noop, ReactModal } from '@spinnaker/core';\n\nimport type { IAzureLoadBalancer } from '../../utility';\nimport { AzureLoadBalancerTypes } from '../../utility';\n\nexport interface IAzureLoadBalancerChoiceModalState {\n choices: IAzureLoadBalancer[];\n selectedChoice: IAzureLoadBalancer;\n}\n\nexport class AzureLoadBalancerChoiceModal extends React.Component<\n ILoadBalancerModalProps,\n IAzureLoadBalancerChoiceModalState\n> {\n public static defaultProps: Partial<ILoadBalancerModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: ILoadBalancerModalProps): Promise<void> {\n return ReactModal.show(AzureLoadBalancerChoiceModal, {\n ...props,\n className: 'create-pipeline-modal-overflow-visible',\n });\n }\n\n constructor(props: ILoadBalancerModalProps) {\n super(props);\n this.state = {\n choices: AzureLoadBalancerTypes,\n selectedChoice: AzureLoadBalancerTypes[0],\n };\n }\n\n public choiceSelected(choice: IAzureLoadBalancer): void {\n this.setState({ selectedChoice: choice });\n }\n\n private choose = (): void => {\n this.close();\n const provider: any = CloudProviderRegistry.getValue('azure', 'loadBalancer');\n ModalInjector.modalService\n .open({\n templateUrl: provider.createLoadBalancerTemplateUrl,\n windowClass: 'modal-z-index',\n controller: `${provider.createLoadBalancerController} as ctrl`,\n size: 'lg',\n resolve: {\n application: () => this.props.app,\n loadBalancer: (): any => null,\n isNew: () => true,\n forPipelineConfig: () => false,\n loadBalancerType: () => this.state.selectedChoice,\n },\n })\n .result.catch(() => {});\n };\n\n public close = (reason?: any): void => {\n this.props.dismissModal(reason);\n };\n\n public render() {\n const { choices, selectedChoice } = this.state;\n\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Select Type of Load Balancer</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"modal-body\">\n <div className=\"card-choices\">\n {choices.map((choice) => (\n <div\n key={choice.type}\n className={`card ${selectedChoice === choice ? 'active' : ''}`}\n onClick={() => this.choiceSelected(choice)}\n >\n <h3 className=\"load-balancer-label\">{choice.type}</h3>\n <div>{choice.description}</div>\n </div>\n ))}\n </div>\n <div className=\"load-balancer-description\" />\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={this.choose}>\n Configure Load Balancer <span className=\"glyphicon glyphicon-chevron-right\" />\n </Button>\n </Modal.Footer>\n </>\n );\n }\n}\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IAzureProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n };\n}\n\nexport const AzureProviderSettings: IAzureProviderSettings = (SETTINGS.providers.azure as IAzureProviderSettings) || {\n defaults: {},\n};\nif (AzureProviderSettings) {\n AzureProviderSettings.resetToOriginal = SETTINGS.resetProvider('azure');\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AzureProviderSettings } from '../azure.settings';\n\nexport const AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER = 'spinnaker.azure.loadBalancer.transformer';\nexport const name = AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER, []).factory('azureLoadBalancerTransformer', [\n '$q',\n function ($q) {\n function normalizeLoadBalancer(loadBalancer) {\n loadBalancer.serverGroups.forEach(function (serverGroup) {\n serverGroup.account = loadBalancer.account;\n serverGroup.region = loadBalancer.region;\n\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = serverGroup.detachedInstances.map(function (instanceId) {\n return { id: instanceId };\n });\n serverGroup.instances = serverGroup.instances.concat(serverGroup.detachedInstances);\n } else {\n serverGroup.detachedInstances = [];\n }\n });\n const activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups).map('instances').flatten().value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups).map('detachedInstances').flatten().value();\n return $q.resolve(loadBalancer);\n }\n\n function convertLoadBalancerForEditing(loadBalancer) {\n const toEdit = {\n region: loadBalancer.region,\n credentials: loadBalancer.account,\n name: loadBalancer.name,\n stack: loadBalancer.stack,\n detail: loadBalancer.detail,\n vnet: loadBalancer.vnet,\n subnet: loadBalancer.subnet,\n probes: [],\n loadBalancingRules: [],\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb;\n\n toEdit.securityGroups = elb.securityGroups;\n toEdit.vnet = elb.vnet;\n\n if (elb.loadBalancingRules) {\n toEdit.loadBalancingRules = elb.loadBalancingRules;\n }\n\n toEdit.probes = elb.probes;\n if (elb.dnsName && elb.dnsName !== 'dns-not-found') {\n toEdit.dnsName = elb.dnsName.split('.')[0];\n }\n }\n return toEdit;\n }\n\n function constructNewLoadBalancerTemplate(application) {\n const defaultCredentials = application.defaultCredentials.azure || AzureProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.azure || AzureProviderSettings.defaults.region;\n return {\n stack: '',\n detail: 'frontend',\n credentials: defaultCredentials,\n region: defaultRegion,\n cloudProvider: 'azure',\n vnet: null,\n subnet: null,\n probes: [\n {\n probeName: '',\n probeProtocol: 'HTTP',\n probePort: '80',\n probePath: '/',\n probeInterval: 30,\n unhealthyThreshold: 8,\n timeout: 120,\n },\n ],\n securityGroups: [],\n loadBalancingRules: [\n {\n ruleName: '',\n protocol: 'HTTP',\n externalPort: 80,\n backendPort: 80,\n probeName: '',\n persistence: 'None',\n idleTimeout: 4,\n },\n ],\n sku: 'Standard_v2',\n };\n }\n\n return {\n normalizeLoadBalancer: normalizeLoadBalancer,\n convertLoadBalancerForEditing: convertLoadBalancerForEditing,\n constructNewLoadBalancerTemplate: constructNewLoadBalancerTemplate,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LoadBalancerWriter, NameUtils, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from '../loadBalancer.transformer';\n\nexport const AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER =\n 'spinnaker.azure.loadBalancer.create.controller';\nexport const name = AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n]).controller('azureCreateLoadBalancerCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'azureLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n 'loadBalancerType',\n function (\n $scope,\n $uibModalInstance,\n $state,\n azureLoadBalancerTransformer,\n application,\n loadBalancer,\n isNew,\n loadBalancerType,\n ) {\n const ctrl = this;\n\n $scope.regions = [];\n\n $scope.pages = {\n location: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n healthCheck: require('./healthCheck.html'),\n advancedSettings: require('./advancedSettings.html'),\n };\n\n $scope.isNew = isNew;\n $scope.loadBalancerType = loadBalancerType.type;\n $scope.isALB = loadBalancerType.type === 'Azure Load Balancer';\n\n $scope.state = {\n accountsLoaded: false,\n submitting: false,\n };\n\n $scope.validSkus = ['Standard_v2', 'Standard_Small'];\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.loadBalancer.name,\n accountId: $scope.loadBalancer.credentials,\n region: $scope.loadBalancer.region,\n provider: 'azure',\n };\n\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: (isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function initializeCreateMode() {\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accountsLoaded = true;\n ctrl.accountUpdated();\n });\n }\n\n function initializeController() {\n if (loadBalancer) {\n $scope.loadBalancer = azureLoadBalancerTransformer.convertLoadBalancerForEditing(loadBalancer);\n if (isNew) {\n const nameParts = NameUtils.parseLoadBalancerName($scope.loadBalancer.name);\n $scope.loadBalancer.stack = nameParts.stack;\n $scope.loadBalancer.detail = nameParts.freeFormDetails;\n delete $scope.loadBalancer.name;\n }\n } else {\n $scope.loadBalancer = azureLoadBalancerTransformer.constructNewLoadBalancerTemplate(application);\n }\n if (isNew) {\n updateLoadBalancerNames();\n initializeCreateMode();\n }\n }\n\n function updateLoadBalancerNames() {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n\n const accountLoadBalancersByRegion = {};\n application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n application.getDataSource('loadBalancers').data.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancersByRegion[loadBalancer.region] =\n accountLoadBalancersByRegion[loadBalancer.region] || [];\n accountLoadBalancersByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n $scope.existingLoadBalancerNames = accountLoadBalancersByRegion[region] || [];\n });\n }\n\n initializeController();\n\n this.requiresHealthCheckPath = function () {\n return (\n $scope.loadBalancer.probes[0].probeProtocol && $scope.loadBalancer.probes[0].probeProtocol.indexOf('HTTP') === 0\n );\n };\n\n this.updateName = function () {\n $scope.loadBalancer.name = this.getName();\n };\n\n this.getName = function () {\n const elb = $scope.loadBalancer;\n const elbName = [application.name, elb.stack || '', elb.detail || ''].join('-');\n return _.trimEnd(elbName, '-');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.loadBalancer.credentials).then(function (regions) {\n $scope.regions = regions;\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n updateLoadBalancerNames();\n ctrl.updateName();\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n $scope.loadBalancer.selectedVnet = null;\n $scope.loadBalancer.vnet = null;\n $scope.loadBalancer.vnetResourceGroup = null;\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.loadBalancer.vnet = item.name;\n $scope.loadBalancer.vnetResourceGroup = item.resourceGroup;\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n if (device && device.type !== 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n ctrl.selectedSubnets.push(subnet);\n }\n });\n }\n };\n\n this.removeListener = function (index) {\n $scope.loadBalancer.loadBalancingRules.splice(index, 1);\n };\n\n this.addListener = function () {\n $scope.loadBalancer.loadBalancingRules.push({ protocol: 'HTTP' });\n };\n\n this.submit = function () {\n const descriptor = isNew ? 'Create' : 'Update';\n\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n clusterName: $scope.loadBalancer.clusterName,\n resourceGroupName: $scope.loadBalancer.clusterName,\n loadBalancerName: $scope.loadBalancer.name,\n };\n\n if ($scope.loadBalancer.selectedVnet) {\n $scope.loadBalancer.vnet = $scope.loadBalancer.selectedVnet.name;\n $scope.loadBalancer.vnetResourceGroup = $scope.loadBalancer.selectedVnet.resourceGroup;\n }\n\n if ($scope.loadBalancer.selectedSubnet) {\n $scope.loadBalancer.subnet = $scope.loadBalancer.selectedSubnet.name;\n }\n\n const name = $scope.loadBalancer.clusterName || $scope.loadBalancer.name;\n const probeName = name + '-probe';\n const ruleNameBase = name + '-rule';\n $scope.loadBalancer.type = 'upsertLoadBalancer';\n $scope.loadBalancer.loadBalancerType = $scope.loadBalancerType;\n if (!$scope.loadBalancer.vnet && !$scope.loadBalancer.subnetType) {\n $scope.loadBalancer.securityGroups = null;\n }\n\n $scope.loadBalancer.probes[0].probeName = probeName;\n\n $scope.loadBalancer.loadBalancingRules.forEach((rule, index) => {\n rule.ruleName = ruleNameBase + index;\n rule.probeName = probeName;\n });\n\n if ($scope.loadBalancer.probes[0].probeProtocol === 'TCP') {\n $scope.loadBalancer.probes[0].probePath = undefined;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer($scope.loadBalancer, application, descriptor, params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n LOAD_BALANCER_READ_SERVICE,\n LoadBalancerWriter,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\n\nexport const AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER =\n 'spinnaker.azure.loadBalancer.details.controller';\nexport const name = AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP,\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n LOAD_BALANCER_READ_SERVICE,\n ])\n .controller('azureLoadBalancerDetailsCtrl', [\n '$scope',\n '$state',\n '$exceptionHandler',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'securityGroupReader',\n 'loadBalancerReader',\n '$q',\n function (\n $scope,\n $state,\n $exceptionHandler,\n $uibModal,\n loadBalancer,\n app,\n securityGroupReader,\n loadBalancerReader,\n $q,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n function extractLoadBalancer() {\n $scope.loadBalancer = app.loadBalancers.data.filter(function (test) {\n return (\n test.name === loadBalancer.name &&\n test.region === loadBalancer.region &&\n test.account === loadBalancer.accountId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n const detailsLoader = loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n loadBalancer.region,\n loadBalancer.name,\n );\n\n return detailsLoader.then(function (details) {\n $scope.state.loading = false;\n const securityGroups = [];\n\n const filtered = details.filter(function (test) {\n return test.name === loadBalancer.name;\n });\n\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n if ($scope.loadBalancer.elb.securityGroups) {\n $scope.loadBalancer.elb.securityGroups.forEach(function (securityGroupId) {\n const match = securityGroupReader.getApplicationSecurityGroup(\n app,\n loadBalancer.accountId,\n loadBalancer.region,\n securityGroupId,\n );\n if (match) {\n securityGroups.push(match);\n }\n });\n $scope.securityGroups = _.sortBy(securityGroups, 'name');\n }\n\n if ($scope.loadBalancer.loadBalancerType && $scope.loadBalancer.loadBalancerType.includes('_')) {\n const type = $scope.loadBalancer.loadBalancerType;\n $scope.loadBalancer.loadBalancerType = type\n .split('_')\n .map((s) => {\n const ss = s.toLowerCase();\n return ss.substring(0, 1).toUpperCase() + ss.substring(1);\n })\n .join(' ');\n }\n }\n });\n }\n if (!$scope.loadBalancer) {\n $state.go('^');\n }\n\n return $q.when(null);\n }\n\n app\n .ready()\n .then(extractLoadBalancer)\n .then(() => {\n // If the user navigates away from the view before the initial extractLoadBalancer call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.onRefresh($scope, extractLoadBalancer);\n }\n });\n\n this.editLoadBalancer = function editLoadBalancer() {\n $uibModal.open({\n templateUrl: require('../configure/editLoadBalancer.html'),\n controller: 'azureCreateLoadBalancerCtrl as ctrl',\n size: 'lg',\n resolve: {\n application: function () {\n return app;\n },\n loadBalancer: function () {\n return angular.copy($scope.loadBalancer);\n },\n isNew: function () {\n return false;\n },\n loadBalancerType: function () {\n return { type: $scope.loadBalancer.loadBalancerType };\n },\n },\n });\n };\n\n this.deleteLoadBalancer = function deleteLoadBalancer() {\n if ($scope.loadBalancer.instances && $scope.loadBalancer.instances.length) {\n return;\n }\n\n const taskMonitor = {\n application: app,\n title: 'Deleting ' + loadBalancer.name,\n };\n\n const command = {\n cloudProvider: 'azure',\n loadBalancerName: $scope.loadBalancer.name,\n loadBalancerType: $scope.loadBalancer.loadBalancerType,\n credentials: $scope.loadBalancer.account,\n region: loadBalancer.region,\n appName: app.name,\n };\n\n const submitMethod = () => LoadBalancerWriter.deleteLoadBalancer(command, app);\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + loadBalancer.name + '?',\n buttonText: 'Delete ' + loadBalancer.name,\n account: loadBalancer.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n },\n ]);\n","export default \"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/AqBfycCjk8jM5ZljUa6FrZyTdPCvd0DcZJwvAhbLrZkbN158RMZXaGIsbcx4Cira3ej8ydWtoeza1u9haf8atXItkBkeER3pkYiRDpEm6FppBkaBci9zxHvWIq0/4L77kGaEoSAEBgEge7OOIhre73ECocvJNOcTDrFIUIzOmk1vuuxdWBDV6YEfOWGTXN0kzcyrilIRftq27JK6xoT9jX43Adawp6qVr+npQ3RHU6yDGRR18mhWfgyIARc5HATuSzIHadGOosfyCCLNIroWrGl6V/AgdXYRDAwGglCYBAEPjHBAAGQhftfgO10bOOwpbeHKNLQ6e/E1nqwxd9Seqi91QgFQjctmJi2bEd1ybef2D4+pDnIgY6vYTOw6djQ3ykxBUoEOr2lIyULGgG+SDPx3+Q97PN/UwkE+4BFYc1gDSITgsdlH5NPISAEBkPgYwuG+s7AxENdwZNfKj00c3+Td3ppTevo6uZOagsa1OoNUZs/SN6QhpHfSUH06Wm5cQ03YayPmGZq2IijFI/T7vTR3LMAsDA1YKnAn5qFi5RWgF+QEmpXncUHYmjQJKIRyLAiiB8xMLkI8FkJQkAIDI7AgAQDtAEnkXlNiPRJD6yujNta7w9X1tW7mvyUc8rv3h3lDVkjIzAR8HzfaWDk5x6NWYPOI7gzjpJwNXfeAPq420WsWaDzQzvgjs0CQAkCPsqxoh0dX0pAsMqg0rPPq12c4+s4duyovcdHWZIQzBQShIAQGCyBAQkGJH45th8GwlTywDtV1Bh0kstwK5VfwyQ/0W1CCNhqPXdQ7pmq07MdINbpY30Y5zion6qX9+j1OB6dNBwWBkeeVtfaguKoE9H0IRiOOmFfIp9CQAgMnMCABAOm9SfABlDiQJeLdxuUGAmRg9UC1Qd1CAKNQuQiQ+2Z5MCgzRMB1gr66qV9HR941nuPCcHCVglMJyQIASEwWAIDEgy6HoIl0EkmrwyYsP7DYKhGdjW/t9V6BxYLWU/gEMEUgk99Wp1f3aSvD00JhgGVq68k5LgQ+LwTGGAHMnxqgsDGP/R2HVME3g4HFgGHk1Li4V8iFZANS61j2BLqcAb73IP9JA8n07CxloFyUjVsHgO2UeD6DKJgHjQmmFepFdc34vpOfEsYAAHwwyoShcCsLRYdx9gOBa5qpDmIc02xc5/kN+7DjVZH+sFPMt3PQlqHe3O/pdFRMeyCwLYBexZvrxz0fdGx5MKxzved8jHPcNLHTN6yvMMo7L4WgmQmSjQUJXPDS6rdotAOywo/pWmOF/u6ExpUPs6dBn+NU4DlBNKcwxy6CZZmB6ZQTaZlNcDkUg/1qgztrhRx92FrxsbOXh3SEFl+W2diivoV8GBnOG1nZU1HY8AMpHtc7P+SYVlmKtjxMlNlwAq9Ce+V+8GNGX6sgPtehEo41UHhQopEkskIhSKRyD7d1J/TnNqaj5X4Z+jiAQoGaoj1tVivO2bPOwYkNlD+K0OE4s4yHOFF0HTGdBs8kSGLnJNNM6KhAb2Fhth+dB6tUGh2hCJfM0z9HDhd8GiHwCkwESuXTAOrqmx1YaVFJy+ZH1LE2hBvGLtwAI5egXqkvb63tHH+cxEsq+sEDDM/NXRrzqGGDjrj58/RIZ+bgtBCg1jmPn3yEFr6o7lcGZC1VhGEwkSTTNbCFn8cQCHLOg2JXo+J8AKl4bKOCAVT11CjDj0f9bIf9VL1ce7xWbl2oIKBVWTeIMU/mfBxBUs/ueg5x+kzGtpE6gf7WoZ97+HV5EpMUCspv7lqOp2QzxqsNQYfPMX4iGAg3XGuYQWuJN1N67dW0o+XbKIEZyKWaYP0t5vPpzQe5Fi70l20vbyeFtzy9ESf4Sl5+tYL3jl91JAPyNR3QV7UIO2d2D6XwSTX1TBNz2GBevHPn6U2I5+KCy26ek4uVdb7aX+j7YYCzQuyVyHKwtdUdFz026hhaxDk0NhHv7mp8pRfvcDV4KJFs4vo6/OgsIQdZDnCl5qmvhXJ/moQSX/mLhmoYOhCyXn7xATDp0xyIMKh+c21u3x72lwJSV0RzApCtPAPb9O+316ETm1i+EKrPSqgYTopYhaaEArcXq9cvIqCqRnkxojThEnItqommlOYgUFOeWDS/v31ZLryKOB2uDfXdM0+fRQu050hjE8HcPnnUjCA4TegkX1Vh9PLph0VVBFOhud7kF697XyK78HbtOA1Axf4h1aU0vb6Jrr8zInZJw1N4ykcsxtsyPrj4+tT9lIiJYYjdNfyUroegkE3TMJ/1Lt+NfJXBeHz2GBv8Fm5bqCCAUY5K+pNyP1lIP3uX4aIMzeQmUqt5nI0wHc6M39YJvnqD9C+Lict33uQzh01pBOrrx/RFtBgMB8NBtk167mV26jLlUbjCtLJX9NM7U4D5kd7eOPnN9hIe86sSXRdZRcEg0HXzSliN685mFx7NM1A+7Nakd7avijhfBosYrnInwf6dZBcLlalefPhOhbSgw5IuyAIkeYiF1QbZXANBQLkcbspBcNnOkZyfMMtFQo2UEIHwooUtCC4q+KwEx8RtpWgTRgt+ObnYFgF/wgvHO8OuCemWXQVFrK/ATa4B1FZVQuFwW1UtuewULDCWNViwtw0NXp6VSltaNYov6g1EYIhFwcP8LWDCa1NnVkbIcCHZDpQqiC1dem0fFcdnT8mF3dS1rNifN5uRSwW4S+hTBsGc5+Pew1YJaCz5bjD0FodlA4biAdPCYXxv51CjiZUB6b21IT8eT/uvfq6fqCCAQ0xlol/H6EAgMprkr+5EUUDC4WBCAYYspShkHLTXTQqJ49q1tXQw6+VsWBg8NzoPxIw0tXywYde30th+HL81xlFdNefD+AZDg+alp0HtazLDpgQFLdffaqdBkZAKMbQg62TLTJg+DLzwlagAOKEhcMhbOiMNArbZGR/EjroWKdlDMXveMvlDOO5kC7Mh7tIC3fBONoUIWM/pkPlON+IzYU5eA7czIY4TLiE61o9nijbFYwEd7lcroM4z0JpBLaTkPZ0ZGQsXNQyI7CQYmE5ELbwcInbcqG3JFu6I01p8KooPAlHk8SnzrYTgz1V4NGKcmoRrFDpkSDKUo9SVViRCKZI+jZE3Yxte0x4oW6GQ5DMRbkvsHTtAp0lJpa8OdH2di/7y5Ir3haoqtagSfBdlGTFsneC0wmJZZHDofMcbyS2QXfWR1/bNMzQ3HT+zFHUUr6HVuz20VPv1CjBYPESO+4LhkXI3a0QYOehQ76JZ3fewD1XozwQhH0HlNONBuNJ77G60ndsFC8QmGS69PmW6RiL6VKGRmEX5jO4hL2Mg8lOy5UVclhD8BhhogHu7NAL76GwwzCb4fbfZGnORrSDhrBpHHDo6oFB1kC5PfgoEEgMut0uDCplyHeov3z0dW6gggFltjr6SmTAx7n/RuXKYfGCJnP4x4CT4ogoNFu37W+VNKrUtgJi55jBC8t3G+enIxCiby0opnveqaV122qpNmQezHcZfUhjx6HSfbVU2himjNwkOm9CHt2GngXbA7qMHXgWzA90YebanQlUJOqW88riw8yzdP0KwzS+gH7Bnal1a0VNqjcUGRXvcU+aUjAEPcXuLHg0DI3Vgc6CtFSpUGVoJOxf1tDeTruqm8IlI/MdQzzo12DBq0W4DRmGVeYyXHuQdvO6HWVxmstZhF48ZVZJgUqHOwH7pHBgrxTurxFMifg+WJGBThCi9/bUQFboNKYwi7LjeLGAL4VYgINb2IBDm4lHXcksgE9ZAYTRaV1QOzZX1H7o0I3STVW1tVMLcrkQI5DfU3A/rDQwERhmuaEjeKBJMY945FkFVWT7XLT4pDlwH6wmJsa5shBnNOp7FOp9r33BwD9x3Umn/uDxsQEjgc47KYv0PIuWlG6n1VsPUBvkZQpyxivdyoMXwsmyQlMNyzUVdzgF2yxcvwnfFdh46ZTbBmtNnOOEUCjEQis1DcYKxKtF/riT9hkQhx8yvFGPRC41jUAybC54zgcMFAb+cCEfnLhGb++soOS4eJoyIoccpuVA/WZDTGbrqrWhjSEHm0srrJDDKEUzrDi1pKCD3G7dZUa6ILvfQWIP95mRfk4MVDDwMpFSFbmpx7Z+0v3oKe7EaBRcfg78xemgZfDnoIItULgSY/IG+6aVgMSSB5BgJ2RIE/JkBoNhPTM3mya6A7Q7ktT115U72lB5vL6NoesjwX/fC9vb/B495Wun8QCPDoUGZfexWOHQlSEYgp1eyrv2HxQxPLTtkcupAA+KqF4LVVkt92pU8rcVG0t+8XQp+Z3caTB+mgFyehLp9ism0lUzMEACGHeVmkNtNOXaR6hg8lDa9KuF9LtH3qBfvdFIcXERR3uXlzY8cDmNSYpDXhAf2Whs7Rr5/T+/NnL5dsg+ZzxW/bj5QcxE3qIL5xbTH66ZQUlofRGMQxoUCnQLdZ3Xa9G1i5fR66UtWGBJgirShbmLg3Kz3LT0ptNpdHYKyoOGy/0CdHSHgzburaJb/vo+balnTdczUTfNiRbK7MYg+/ULxtNt55+oKiiCfDnBZeHtz9Hysi7KTUyn1EQHle73Uvo1j5MDM5ROCI9Dj15Ooy/8LXkzcik/OYnS4jW6/eF1zp/e4021TC1NQT/Oj517DpxX2eEZm5Hioek5aB7YkgJrqT0+gV7cVENXnJivGNg1yMIbewA/6Yo/nHLQOeRkPPavVpWAt92wwl448bV3tXsb77/lgkNfmTQEhvkIZn4Omn7dQw5a+GA9PXMd95leQ+pFf75gaEHmZdsXXxKno15sb0CDLvz+o/RKdSttfuQGSmpuoXm3r8TadgIFgu107YUT6LcXTwNHFtycS4N+/dg6umfFLuqKc2uY743TnNY4ZvjdS6fSLedMaEUsP9rxo4h/3FrDQAUDJKQe4A7o9weo06spSWVDtDtlz/1eaeBgMGKRz2fHDIXC1NXlw0r1sbJgx7fQR3kk5sDChfdRaCVgOAecN28oSEh3CKIUqYj9f7D6XouUypDKCOw7rpk/1vezV8qqH1ldTbedO3EYjlUdnYS/I5jy6q4DkMYZKd86s4TFCt4NEYTDV1w0L3wFDyTohDAzJqdnUNDAMhwP4+iGplrK5DGa6Lt3L6XnyjB3j4+noYkaZWcmUUdHgCpqO+jG+99HBzTo2mnDERPsoNXE5QyjlPQsemDFFrrzrVoqyE2lYZlx9P7WcgqFeQDDiI+Otw0j/cV3rlQ2kJJhyfSl2cMpFYaPvQd99Py6/fTqxib6wuYl9NbiSyhbjY48yeG7GDTz+49Qg5FNxcMz6Oq5+eisEVq3s41eXF9Jj6zdR7++8ESVdxQDxBz0yPItdOtTu6gz3kUnjxlK58/IgzAJ04bSJnrlwzDd+0otrd1WR6/ech7ED7dPJ40tyKIWB0wnaFVNgSDFO+JoVkm2GbSCSwPk2JKI4p44Pr/YSk6fVd0UHB2E1B2Z6TqQ4vHUWcFI+TLO6gAD2gikMd3wkwdeu9yNMs6bnt195YIJmfR8ZYgefn2fEgzs3M8MWJuCHciOpyWircPXV9PGok7HYs5I8XhOyEhOxXtBIvWtHb71kJCbcd1+XGAa7vSMnCxrJAwvvQqG5at25HzzqdJ5ltNjq2A8fVDscbE7iVKhhW4vb6Vf3fsSdTjS6aTiJKqqNlH/ts+dBq2OBdCCm56gze0eaK1u+t7csZSKwu3d34p6qqV7XthL28oPpj7znXmsyXChjjscq1fGEsS8R4t3Ifat542G8zNUW+6Y3P4ReFyN7bPhTY2e6AjcWWNB7cJ4VZTLU2mi+SV5tPS7meSOrkfxMebD8bgkLBRVx4+quywYjghIPyXJjUbFEfnZDB2dL0LDUtAOLJqGa/MhKWuOuKbHD5zz/vGJtZV4nmMfBA0b9awvz58YvOPFHf72sCN+ZXnjRByr6nEJ52f2X55ZP7wTL4+aOTlLWdCwNg63PTQprERwg+JgS3TegYiAKNd52hiV8izV+PyKd0rp+X1szzXoR4sm0rdnl/ClKuzc30Rf/fVyWru3qVswQH0hF+C21rXTL/c20twpBfT0905T8f3ovGoeyr8wYlx290oKxGXSRScPofu/Ol3FiX3csegLNONHS6g17Kav/88aev7G2ciP3WFffGMrNVipVFQQT6t/Mi92CV03HxpIhxdTF26cAZQSqzJYMSirqqdbn95DZqKT7rzyBLphxmF5fC2u2YZyLPrFctpem0h3vLKTbj17HGt0dMc1s1Xa/1iylm5+4xBNKXHR0htPvwsHF4NNvfYzVffcoS9f9LMXLlrdauT/YNGkLdedlLca59mmMqAAmy1UlfCV6EgLX/nwUC7sq2ByOI/ng/mSvZtpZ1krHYS31RCUyQ6sR2Jagfa95e9fw6O60YaMrwTEWVNaT9fcswao9Zx5k/PQTvRqXFeHLWzqoXgsXuVFE/rIl+HRJhgR6wTbcx+nucOo9PklRBZluB1020PvQXNKoTfuPpfGpbhVGj7kD+Mq4jjo5vtX0LaOOBo/LI5W3nIxeuPh8IMvttDs21bS21vaaOnOJu3C8ZmxGe7hSAPY65lmP9GDQ7DulmtgmBidA1USHUGpWkcP4dEUuKjx0GdTEj3qSExAYE5vM8DRZEiZ4kxu7DzFODLAuwgPaemUFmdnD/2r18DXxc7xPoNzI08QE/BmNLn1/bPXC2MHLarEbpVmah349jnjnJF5Y7ITX67wJ9774ocnQBBgTFPLivx+uknYn/fga7vHY1gwvn3OWO4lHo3Vlz7C4XJhLwpBcUP837/wPkacbJo5KcMWClzxyLuBUX9cQQZtuO9KamrrYejHOb6TH9Wcm5kQFQpIF8IWJmt0OHRu3Ul/eX4TdTjTKD1Zs4UChIaJuoBFQbmxOzFlefT66XTm/2yidz9oph0dQRqfxH2QaMcBFFcP0KTifPXbgjZEMCPwjCoTQjgzKR4CkB+Sw2nU2y//uY4I05eTJ2XZQgHnTAgwe3CwaDLK8b1zxtNdGJH/trKcfgrB4ISgZFsDy0lf0G6zkYi1Ciny6/h4hUMF7OPm9LdLfrIEMbVxXb7AVhzD6DywgLorwZ1+gmsvfXN9KTXBtpeE5//nDcOKO9cFMnD6ScWU8uC7mNK76ME3K+hn80d2J85lZpuDgbaegDpBgdU1HOHme1+lLnTcb140hkYnumAjQLG6r1RvLst4fE1V2uWzCmGbOzKYpjYCCalVGfsMX8lAcRT34zbc4TPpqdvOVELBhPaFXFAcVz5aodcXpifXNZORGEcP3XSmEgomFgzRkzgByslKoxvn5NOvVzXT31/fbiesUj++jwEJhgi5RsJLbWQgrNOiBzdQE+yzUK2QkejN+PY99vknXITVuxl47hrrDMGwSZNzPPTSd06lF3fW0neeKqWEOIym3Rfb6bFRjI1SEJ4IuB4JRnC/Hrew01TFRrXwiI0jPqilj1xxAs0tycg0TYM7cr+CAauGNWgjaIxKAGCeSKHrzxqVs2Lxlpy1ZR0ldcGwK9flGIPmziJq/Lvry0+q1uMKc9NTaV5BGsdPsTTLrrNY5nAwFuxDPT+RVZSjo6WDqjpcFNa9dP3Zp9jRuXwoB6tbyvIPVTY7NTnWhkGBOeBadKa//GSOuoYbEcqA48gdX4vwLObLvNT3pdnFdhwIDTZsdT8WjwKPGzeccmgdHYw36K1t9TR+ZoGKOyY9gUIwzq18fzeVn1VERUpgwOuC64PnGuj4XO1cEWEInC2VHbApJGHKYd/LFj4QoUq7s4XNpbNG0W9f3UN+TBs3NProlEx7sFA3jH1oGnf6itjPI74tcz2EUdBp6Wz8G3gww5ciz5eyRvb06nIKOt10xexC+3rkj9djmNjc0UPohaoAvbx6Tw/BgIFPlQFtC7EsaIMWVHjuoHfAIa4MQmFYmgsa0BhunpWwE8D93WrDvfjlY1AdjaRIvDMHF39EMOB8XndDtnPT/clDJL/U6JxZhTQzH5o1tCsT3JVSAQ2GV7lWr9tOQU8CjR2ZRiPcdp3rWGmxA1cOyjSxgH6zqo621zX3AtuOeaxPtKhjB5jRML9yeTgbiR4HdaF19CcYuOAslHlT+9FbKE3DgZaKYKGQptOjXudmF0dFBRo+x7bxCIxenEhMIAAQ1xMCM2KtgiOrZSZ1XCM/8mVGLd68BGTH7vtTCxutaDztqBBOAQIi4p06oUgbHrcmsyKSlXP/m3vT7jh77GjNwtOlmnvM/7y8rdCJTvil+UWcKGsTPnRLNVdUZeWjPQKXpTvECokmWVHfpmbbHqxUFGWzrdTEKga0JJSVH1XnaZOOaRHrPkqfRVtTnRIw+cnWCVl8TQhHIVRxjZKcipxGtS0taNTZWEnATB2BPQLsSuB4nCZrezDv5zip6SDmpTUN+FWALUQXnT+ZfrlkAzwRs2gOphuXzymmry8YS8OT+X58K5QWAoEbaHV1E4AlwJ6g06ShPACGlYAKY3WGTZqGMto7KAPajQfTPT+Wc8uqGyAYCqKdjvMVDRGzLrZ79LceZ1ZpbdqQTsN/4Ohz/f1Gu5ih7gBHphW7WjHVctCiWSXRS1gocO1odP0ZY2jZPetpnx8Oao1dNBn5VbwUN+wimon64EXbiop6evDd/Yrhwz86k9NaA5n5qq7p67DPqxU5iJ6tm1YiWLHaVYrtiIAaZisngvo48hwaERuyJ+ZDq+GAN5LpEEoc14J0QA+gHVWt5HThxcedAfr5ko2kId8hCA8Wdfwe1DCaRGdrhOIhCP0BPQWaE96VrAwTKsmBfgxIMGCcGM+QsfyBxuHEMhUqXo0gPW7Ts5zY58Z3dPnhNoiRy74lXEzIiYLjQDcijs/X6XByORy4s9iNOmYPUhUeHbo4PgfVicL2mjt3NHQt6Nb9B7RpNhGgRSu1tQvWvjbUf/Jls4pDd61uSn1uVXkyBAOm9+7kmtqG7HcPwMcEasy35o5EwiaqgCFwDlBpsYz0uKV9yAZjK818UqfGTj93adI9mG6x4QbXO9AglHDAlILLqzqhenGWugS3QWpst8E3P1PARjxenozNVflePh+MoHDvDbm8UPttWw5rUqqTolNHkJ7BIgl16HLHQzvAa/dY7eAQQY6gfbz7wDW06M4Xacv+CP19dQ39FX4dEwoS6PfXz6SpMHZirUaVuBM+CHGYfWt6AsXHceNFvjFNsEvDv7kOOW3so86xPAsDKX4icBM/ApfRt8PWM7ct7Mr/1hKvL1TXrx+BnbL9aXVZeVgByeFcLHnjQ3ivx1MROvyIdM4xplYsgLn9IRMlE4ZTdsIGavZr9NBbZfSnSyfZWprKuy2kbd2CaOHvVgF7Al130Rj/hJT4f4TDgSUOh/sddDzlcIZOOAUysAQrFlj9tEbi9w6c6xZ6+D1t+bulI2xtRLVilWGuTq5elvEm6pjnqBwiYMaWKz6uminaTpPPh2m2iw7h9Wl/WrZXadIcV2OtBk3eQD3qmDo6IEgS4oPcCHgVZ8B2GU6LwzEFAwrDIy90JjRtNrBxZ0ZGj6xZTurIoAbxHod4hOdGzXNQDnxevcgFHcI+og6rDwZh79jAWB6i1Kqq+HjstB0p9skQ4UTEWgYAQh9hVb/fYEBlQPXAG1aJ5ahnDZlXLTjR+d+vPJnREkkqfHlvo75gVCas71spAqEwd3K+8kTCCM69ArLbDqqvHnU3zokd0BHUD/7AFahwHrnhFISRFPYWFo4Q6g5bFULcaKo8wkODUN0I3GwDLNKIJcydlEHGMsFxUSAWvh1e7kdJfBcwx3Hw4+mEmnbgTDjSRU7INl6o7A4oBPsWvHDbRbSn4hDdB+/O5Vs7aX+DRWffvIz+9N1ZtGjqcBWdNb4grPM8igX5ZZ48xcU/nk6osnIZWG4iwHkHFc6Dgi0e1flYnvk8FCYVsY8PtBtHbtJonpv0Gy92eSdkXmIk7CVoCY+9vZs8cSlUjzcTj7rmETWosWc7+3MqJmg1ienxWCJ20Rsb95MJwcD5xGMZioyu2rtOv3hoFTWAV1qGm24/a9xfca8/OZ2efbF7Rr9bARtSUIPPhVoNgTOaxXYRXgHLw3Y6etA4rkcWjnaw88E/+XjPR0EYH1evagFqusj7sEKFfDRuTAatue4MCnax4xxfG20GqiFCZ8OBxGSse3Mj+DQEA8aXYowlI6K3xT0GFpDPgYejInf/7LmD/e6fvaXco31HTx9TMJimA3oj2wjUdAAAefg0MuISPTmzCtNHrIWWff9rpbRg1Cx6fHMthfCU7ne+OIGT34l5JKYeVgYMl+x4c8xg550ziWVJGOz47dhaKECNeFluNpb6WMfRYPFm6WQozQD+f2igrJYPQH4jK2GKw4t1VSNBpy2HWqweaI5er6Yn3HpUDI0q6zqhoWRgydPWLNjjVl2LO/LaesmIbPrj18+g3yJfV9y+lDYh7o8f3UznQzCwsp0Cb1Edajr36upm+CTkJKley5og5xl/9wMlgRbT3km+EFKGf0ZhXgzVkTWJK7j99xoW3v5MwtuaJ7UrGOGOdXRH7PWaJE1rgFfgroZD7aeV1ofJl2bRvEKXz+3KeT9kUiU/rwJDeIZh6SMgdCaYYa/jnXI/7CAavbmvheYXgwmyZI/pTiqHkLx/fTWF8adQnv7O7HdxfAU0gd7yAnGjp+hacBgwjEDm8OAMlYT1cBfehZ6J36e4HXoedBVoiL0V+UguPQunNEiQzU2BRgghEQz6KAuOT8rUqSLaIuTwNcycnIFAgAXqcYdjagwQCmxEGZRTyXHn5pO9gG0A/QbNacL9V0uAYOC2nomZJMoZKoHxbtwNCybT2gfX006sx/83nsYL4vmx/ByPd3pO4tsgvgHV0IYxeBRsFLmoguyoInTE/exq5k/uchzYSIp36xd4yIORyKt5aMP2Who3fTg6I+KxtEeDVK7KUPdZSFgxDU1db3/01nzYOYqPF+ek0gdtFq1cd4BuPHWE3eXQXFkpUgZMCJu6imYqD6EjQ5icMWGYnSgaG4/3ERzDnBmdHCnCIu5AB//HDxbQ6JtewHIwbAveAI2Jd1Nhbg4Nwft7GmAnWrKhgqafPwlTw2hjx5zPgoYAnZZefL9K2Ywc7jg6KY8HMJWyyqt9YxaV8BfvI5j++GzYeIZDCLGFrbfO2MeVxnt4zuKkLnfaiMw4s/ThG894HhGXxjo0RvJ8/J6GbS6282Z884miOnh3Prx6NwTDDGgTKEu0Ur92z5uYDaXQtfOK6Qu5SVWIj0Gh15Cd4Q7lHwjEjaxu6WJBMA7I2lkTtLQgvKVdae/uPkiGCyJTjeycRm+1qdKGIyOrCXaIaVmTimCieHsX7a211SwHViTCWD5mIcx2OdbK4ZGqNHMIMFSC2qKpDPzLFor9xEfKrIr8J4bwsTINa3sGWkACFDsWDFnog8VQ4ycDce5p0wopC0/9scf5I29VqM76jbNL1iDeP9Di74VQeBD7S1EV73Gldddzj5vGxIFq+tEGwEu2uieNTs53kAsPEP1myTae9aMNomPy1ACdyoBQeO29PfTrFTvU7x5Jqt3D6dpn+He0S9JlpwzHkmaIPtxzkB6Heze7arOA4TaOToGYTrr6oVWU4HLSyKHxNDWLbafcCbAQz88uQBBAG4KYARXkgwNcftX0wIXWku7mY9zeiGaOzSU3lkmfXFlBO1sxdeF5DG8QgHCLpqbOIN2Nx9LDSOfsaUOiDalnp+BUcGMYgHmvt+B2BIrwd0cm7tjffBo68/ze4vRxbN0T6yvf0vTAsrOmjXgYZf9dTChwfOzXYHuBwuEX8PONL88sCPMTlm9uPKDqg+0inLfFT6yjMq9OQ1M0uvOS8Xwpj8DDeKeXUDw2L67IMNzDn1tVylIQj4tHRmLqOJKFwr3PrqUHV+/HdI2nhVwXHJhXr+EDxHgHZ5r4rD0Ft2j2jNGUYTbCsKjR3a/vQRbdWAhQ5UFKXNNID+2IpyHY9brdbvbROe7QZ656pBSVWrHmGCtQjxj/lruxNYy+M6dHzBQDxj7E5MIlYEkW4lgfDbdbddGXTiqkDoygUP+w2hHxXnbKiNfRmP6JjV831obtZS1svYzpexXeCBQVDmhdUVTc0FjF52/e5QB3WvV985WzyN98kLpCLjrtphfpsffLaGvZAVq5vZyuuHM5XXbfBtp46LDSw8o2z30N9MlYpcVGEf7mdsYGqoVnT6ZRRhc54j304z+vpe89sobeK6ulLeX76Rk4Vc3+wT9pX3sctXnbaPE3TkFe1OKoytNZP3ycLrt3Da3ff5BzqtJswF8Eu+pPq8jvSKaSUamUzVYZVUCLfnHVbKzjtJELHpDn3ryU7nppC22oqqEtFQfoXuyf+v+epGZ3JpqrSXd/lQfnoJqsqYRVKjCSmeZujM6V+NlrmFKUOgoOYuPWrN8z47ENZedt3nvg5F4jHnUQdbO7pi30nj9svn7FnKHc+XsPDsc2nCj96vyJezXYIVx4pP7RrVUqrgVv03tf30UJmKoPG5ZBtz+7ybztnxtSbn1y3cQfP/7+7O8/vVatSHFkCK3R+Br1xTkThoU68bSt10Xzf7Oc3itvwDMnB+jau5bT/3+pmk4YNxyztjBqKqrho+7QfroDnoeA9mjtxIG16OYr0TaXAnc5251iduKbL8ZzcN5OWrxkJ93x7HpqDwcRHQ0AQtkH79834Al7wS+X0eK3dvN0uq078ePYiXb6fq+Itmm7s9iNot/4/yYn7VGtv8x0hSPhtmDwUFfI5FpKxGCeqxl4g0e0Y39lwST6zVvL8eihh86ZPXwHZp5vH52eP+h/tt0fHtFqmRf4LPWCF1QQ6wBOuMHBsT4QoYAV8eOhllIc7MRIlIu6Ly4ZnkX34HmF7/5jI9XGp9CP/radXOEAloLR8dFScrPj6c5LJ0ZvB5dYNIxWuKN3mIlqNYJPKMHAjYqFBjccaAf8ZOJLd19OC3/2BG3vSqInN7TBIWYNBAqPUh4sbSWRx9lJS39+Lk3LhjIIwchykJ+vmFmcTI9tqKPXttShCOzvBw3GAbsF/ibgiJQgnKouVPlhNywkRknJHlp+6zl02Z2v0SEtlRavqKI/LC2HAAtTEB3MifceDHN76cW7LlLaggl7HDtw8eydW1MAjbgpqL388g/P2KIS7uXj+oUzsu9b/VSaNy0z7qcP7xweNEOT4i9+tNK75Ipua38vl6lDna7UdXmpce7xKSm9uidzJAgQ/jOKtVlDUmpHZfjHbmtz0MPLdtK1UwqptaGNGsAtDR35/e2HwmvC1gcQwE14gjUe5RthBsO+E3++rGLjbeehOOF8OKakzj5xpLFwcik9+0EnlVfH05d+/a56TXI43EWXzCuhexdNoeJrHiMj1dbGeBZlG5gNag8GqMWvNftD5hvI2utQXWoAcQj2a1DXZyGvkAgmffnsiVTf1Ux/WF5Bf1qp0R9fWUrOcKfiqhqDFQ8HLD9deoab3z8KVe74wzEFA5rA4WHr+NPv84po3+vz/P/FiS/OGr3Xmaw1Fg8dyrfDHFAtW+aho0zhJdO8ISn04NVjaE9riK4+c/wGnH//6HwlJyc3/XnZxvv84cCOaXnJSEhPxpYKdTs9MS3ec8vFxR14fqEKTz9W4lqfael56BdTUcFTL5o7Pn/W1EL9oVU72t7aVtdkGhneIRmacclJ+RkXTBtdwL4FaoqCZleYk0Y/uwRaqSfRl+F04IQacjwstVlt5Hjsps7ecQkuY9+Ku68qf3vr7tZn19fH7Tnkhg0knJ+YoOddOL1A/8qpcPlHVLwwRXXRWCO47yeX0WU7qvAsRVXDhqqONkxDtPRkI+2C6fnpi2aMxRX2fZRXIKYb7JU3pjCHttx/BT2/5gN69v3aSKPf2olHsvcU5sTv/+L0vKZzp4xk0ZUHY+BEzLQn4omu5Aism7Bi7Fowc9wrwfiqB370sEq614/UxPjO9b9bWPPLJe/RvtrIXqwj1Z1zWZHv+0t6jX7EwaYHzq9RevgRR3v9UYmj5b/95txTX9tZ60lNYHMGDGtDM+k3C0f7w07HKojIDSBWie92iDU/DABtQX+oYdawGTwio4yOFrz1kx3mShf/13neL27eG4GXbHNzwNGRkZ4Qd8OCk4vnjMwbzmu2P1w4hhLwgh8OIXC0xSQet7x4Uu3uhrYnzz0h5xm0NfaNUAGCaydWdXbjDzjNQwWfAZE69MZLTqPL5p1Iz60tpeUba/DmjBxe+IGBN5WmFsbjmZUSyk+M23tlLJHj/Ob20W+A+XYeGs5LgOLxwpFhzu/fgSWdPRtjl/WThGqo0Xggxktzk3PctOyGafTMB9X03WfKKQlLgN3TrViSg/jmjtEFifv41fB8LIINkSI3YN7+1+NJChUwEvHnI5unoXgT0HmhB8M9kWgTtr+hsl4ZaHpIi1sX2y4wPdRYpesOODcK+RuHJxuzDVJ9m0c0bsO8hM3qKUuqEij56FVGGuwYAZjzDqD9VeI4j5S8HM9mf3bHTcVEJwnKqdthuuDIoF4bx9oJJqBKjYRaoDyYuGwjsBWie2diOYv95sJYrWA9FMlAzyezCdaBKuzvx9aCjWuZjWjIrzkeLsIl8JXJhhSKw6ocO7dqYd3yY30OeVIvvWVO6ECEkfWItz47cWwq9KhJmFbgNSmRNhgedmpO51s43m/A48+YOugnYutAxC1I94N+LxjESdQHJmmRK2HduQiX81QlC7PLRuR1PdT5F/GbX9rC3PsNSGcM+uYUiEwolzrXObPkeRnL3lGQpKfC3jAT+7y0lc5+KZDQmLlqVRiI4K3k4Pb1PO7Vq4aD9LkuTke7OA9+C/MhoHNxHxzqLVjQOrQ7kdbrvZ091rHYYNFnPESowclqbGgcaFKxD7WD31G5oNRaPhcNfFp1+Gi82PEjvrsTw1Ek1J3WEZH+734AYhnuVoYKeBDrQaPgQ88VwaEK55jBgAPiBxCZt48EnNuLg7z1G5APNmDhUQi2ZxzbYauPxFiV5HX0jXweaULwaJlhLQDfODeedVUdDk6jUDWOESy/VURuuEVqFIfmCE8a9hTAU1vkaMCle5FGr9oljkMm0Prodoy7HHla05zv4Qhvn1pA/rgl/h2DYBnKM9oMaR7LaVWjeGtwjgXkgALi7kJE3noLXN8r8Dx/OlRKDAqRIeAH87OB90ihj2kOFqb91gHONyKNp1GHz4a18HwIhUl4xD0DbjGQ0Swi2EdTDyG9g3gx3nuuj/EGqmMKBtyvDFJwF6TgKFY8/ZhzBaLr7Oz9qEHlRpdGp45KCFwQ2+O5a2yfv5WTkxqc8AOBH0EGkKi6jBktD/uIGHPbtWMN9pNnzYMLqAAUuc8KHlyig7gK+ejEZbx9YgFpsqA4LiEXu7nm0cqxz9tnMjg17R0UjLdPLaTY2sDHugfqkOXAyuj2qeS1Lz2k+2bIBB7rMNdhMbrRjU49a5hBxRl42os68O6AZmr1BagVD/b48Ict/fCAC2Hyxf4svAzMy+e2GsDr9yzPeG3eviXPh9Vba1hWq8D92MDGsqr7oDozuA/+Ow8ShIAQGAyBAXUePRheZjpcGfDLKLzv8hm85lwHe4G3HU8f1raFUkqrW5JKD3oT6zp8yfubfZkNbb4hLf5Qts8y3KxIsP83vPr8EdOoDpkOnqvh73toI/H6s9yYVsHWdBYIrNTxn7iDuqTKA8GkvgfxEV0PGsSVcokQ+JwTGJBg0NzuD9FRf4kpM4wqHnYM4TnjRwLiuHEwHSezvWHKqm8JppU3tsZV4gmV/c0dwaomb2eCI8IGthRfCHM5X8fJXjN+um7oWdjgKMcuwZi8sroBgcD7Sj5gZxDiwYPLJQgBITAIAgMSDJwuhAEbYfo1xCAOG9tYI+Ctz/DgFfapVRWdOWW1jSfub/FO3VPv/cLOurZ5LUHL0wX3XV5KM9hrDzMPg58yY3sGLmMNwhYS0ekGaxS8C1UjeiR2X7aESxACQmAQBAYsGAaR9jEvmTsikX3Ol/MGbWMIvi+HWfZrOxsC46rqG2l/R5j21XuprL6FDuC1YniqGJ5d2PAydTxgj9fm4G1CcL1V6/h4zJQfTsHEhbcuWDbZyCZBCAiBQRD4lwqGnvmFJsDrvb+HgGialGVcPSkrf07P87zP/hM1rV2+2ta2mroOy1da05m4s7Yl91AXtAx/CG6oeGIwxJJBXwvL576jr5ffQkAIDIyArZUPLO7/WSy8iGQGJhMn44aF8JaDtxK7LLMGoNXimzv8AWw8bWFPpuHYRrQEQznlzV59ZEp8XWqckx1tnoOw6XVdHeckCAEh0A+Bf0vB0E9++zwFTYN9TFkDaoFAYG8+CUJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAICAEhIASEgBAQAkJACAgBISAEhIAQEAJCQAgIASEgBISAEBACQkAIfCYIWJZV8pkoiBRCCAiBT4QAywQdKX1bhMMnwlMSEQL/8QSisuDb/wtm7JLg/HaJgAAAAABJRU5ErkJggg==\"","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.azure.pipeline.stage.bake.executionDetails.controller';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'azureBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'azure';\n $scope.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' &&\n SETTINGS.feature.roscoSelector($scope.stage.context));\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.azure.serverGroup.transformer';\nexport const name = AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER, []).factory('azureServerGroupTransformer', function () {\n function normalizeServerGroup(serverGroup) {\n return serverGroup;\n }\n\n function parseCustomScriptsSettings(command, configuration) {\n /*\n At the first time this wizard pops up, the type of command.customScriptsSettings.fileUris is String. As for the following\n occurrences of its pop up with this field unchanged, its type becomes an array. So here differentiate the two scenarios\n to assign the correct value to model.\n */\n if (Array.isArray(command.customScriptsSettings.fileUris)) {\n configuration.customScriptsSettings.fileUris = command.customScriptsSettings.fileUris;\n } else {\n const fileUrisTemp = command.customScriptsSettings.fileUris;\n if (fileUrisTemp.includes(',')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(',');\n } else if (fileUrisTemp.includes(';')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(';');\n } else {\n configuration.customScriptsSettings.fileUris = [fileUrisTemp];\n }\n\n configuration.customScriptsSettings.fileUris.forEach(function (v, index) {\n configuration.customScriptsSettings.fileUris[index] = v.trim();\n });\n }\n }\n\n function convertServerGroupCommandToDeployConfiguration(command) {\n let tempImage;\n\n if (command.viewState.mode === 'editPipeline' || command.viewState.mode === 'createPipeline') {\n tempImage = {\n imageName: '',\n isCustom: 'true',\n publisher: '',\n offer: '',\n sku: '',\n version: '',\n region: command.region,\n uri: '',\n ostype: '',\n };\n } else {\n tempImage = command.selectedImage;\n }\n\n const configuration = {\n name: command.application,\n cloudProvider: command.selectedProvider,\n application: command.application,\n stack: command.stack,\n strategy: command.strategy,\n rollback: {\n onFailure: command.rollback ? command.rollback.onFailure : null,\n },\n scaleDown: command.scaleDown,\n maxRemainingAsgs: command.maxRemainingAsgs,\n delayBeforeDisableSec: command.delayBeforeDisableSec,\n delayBeforeScaleDownSec: command.delayBeforeScaleDownSec,\n allowDeleteActive: command.strategy === 'redblack' ? true : null,\n allowScaleDownActive: command.strategy === 'redblack' ? true : null,\n detail: command.freeFormDetails,\n freeFormDetails: command.freeFormDetails,\n healthSettings: command.healthSettings,\n image: command.image,\n account: command.credentials,\n selectedProvider: 'azure',\n vnet: command.vnet,\n vnetResourceGroup: command.selectedVnet.resourceGroup,\n subnet: command.subnet,\n useSourceCapacity: false,\n capacity: {\n min: command.sku.capacity,\n max: command.sku.capacity,\n },\n credentials: command.credentials,\n region: command.region,\n securityGroupName: command.securityGroupName,\n loadBalancerName: command.loadBalancerName,\n loadBalancerType: command.loadBalancerType,\n user: '[anonymous]',\n upgradePolicy: 'Manual',\n type: 'createServerGroup',\n sku: {\n name: 'Standard_DS1_v2',\n tier: 'Standard',\n capacity: command.sku.capacity,\n },\n instanceTags: command.instanceTags,\n dataDisks: command.dataDisks,\n userAssignedIdentities: command.userAssignedIdentities,\n viewState: command.viewState,\n osConfig: {\n customData: command.osConfig ? command.osConfig.customData : null,\n },\n customScriptsSettings: {\n fileUris: null,\n commandToExecute: '',\n },\n zonesEnabled: command.zonesEnabled,\n zones: command.zonesEnabled ? command.zones : [],\n enableInboundNAT: command.enableInboundNAT,\n };\n\n if (command.image == null || command.image.isCustom == false) {\n configuration.image = tempImage;\n }\n\n if (typeof command.stack !== 'undefined') {\n configuration.name = configuration.name + '-' + command.stack;\n }\n if (typeof command.freeFormDetails !== 'undefined') {\n configuration.name = configuration.name + '-' + command.freeFormDetails;\n }\n\n if (typeof command.customScriptsSettings !== 'undefined') {\n configuration.customScriptsSettings.commandToExecute = command.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(command.customScriptsSettings.fileUris)) {\n parseCustomScriptsSettings(command, configuration);\n }\n }\n\n if (command.instanceType) {\n const vmsku = command.instanceType;\n configuration.instanceType = command.instanceType;\n configuration.sku.name = vmsku;\n configuration.sku.tier = vmsku.substring(0, vmsku.indexOf('_'));\n }\n\n // Default to an empty list of health provider names for now.\n configuration.interestingHealthProviderNames = [];\n\n return configuration;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration: convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup: normalizeServerGroup,\n parseCustomScriptsSettings: parseCustomScriptsSettings,\n };\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.azure.serverGroupCommandBuilder.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n ])\n .factory('azureServerGroupCommandBuilder', [\n '$q',\n 'azureImageReader',\n 'azureServerGroupTransformer',\n function ($q, azureImageReader, azureServerGroupTransformer) {\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultCredentials = defaults.account || application.defaultCredentials.azure;\n const defaultRegion = defaults.region || application.defaultRegions.azure;\n\n return azureImageReader.findImages({ provider: 'azure' }).then(function (images) {\n return {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n images,\n loadBalancers: [],\n selectedVnetSubnets: [],\n strategy: '',\n sku: {\n capacity: 1,\n },\n zonesEnabled: false,\n zones: [],\n instanceTags: {},\n dataDisks: [],\n selectedProvider: 'azure',\n viewState: {\n instanceProfile: 'custom',\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n loadBalancersConfigured: false,\n networkSettingsConfigured: false,\n securityGroupsConfigured: false,\n },\n enableInboundNAT: false,\n };\n });\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline() {\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n },\n });\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n\n const serverGroupName = NameUtils.parseServerGroupName(serverGroup.name);\n\n const command = {\n application: application.name,\n strategy: '',\n stack: serverGroupName.stack,\n freeFormDetails: serverGroupName.freeFormDetails,\n credentials: serverGroup.account,\n loadBalancers: serverGroup.loadBalancers,\n selectedSubnets: serverGroup.selectedVnetSubnets,\n selectedVnet: serverGroup.selectedVnet,\n securityGroups: serverGroup.securityGroups,\n loadBalancerName: serverGroup.loadBalancerName,\n loadBalancerType: serverGroup.loadBalancerType,\n securityGroupName: serverGroup.securityGroupName,\n region: serverGroup.region,\n vnet: serverGroup.vnet,\n vnetResourceGroup: serverGroup.vnetResourceGroup,\n subnet: serverGroup.subnet,\n zones: serverGroup.zones,\n zonesEnabled: serverGroup.zones && serverGroup.zones.length > 0,\n instanceTags: {},\n dataDisks: serverGroup.dataDisks,\n sku: serverGroup.sku,\n capacity: {\n min: serverGroup.capacity.min,\n max: serverGroup.capacity.max,\n desired: serverGroup.capacity.desired,\n },\n tags: [],\n instanceType: serverGroup.sku.name,\n selectedProvider: 'azure',\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n asgName: serverGroup.name,\n },\n viewState: {\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: false,\n listImplicitSecurityGroups: false,\n mode: mode,\n disableStrategySelection: true,\n },\n enableInboundNAT: serverGroup.enableInboundNAT,\n };\n\n if (typeof serverGroup.customScriptsSettings !== 'undefined') {\n command.customScriptsSettings = {};\n command.customScriptsSettings.commandToExecute = serverGroup.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(serverGroup.customScriptsSettings.fileUris)) {\n azureServerGroupTransformer.parseCustomScriptsSettings(serverGroup, command);\n }\n }\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = pipelineCluster.region;\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n const viewState = {\n disableImageSelection: true,\n useSimpleCapacity: true,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n instanceProfile: originalCluster.viewState.instanceProfile,\n instanceTypeDetails: originalCluster.viewState.instanceTypeDetails,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n viewState: viewState,\n };\n if (originalCluster.viewState.instanceTypeDetails) {\n viewOverrides.instanceType = originalCluster.viewState.instanceTypeDetails.name;\n }\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);\n\n return extendedCommand;\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n PipelineTemplates,\n Registry,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../../image/image.reader';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './../../../serverGroup/configure/serverGroupCommandBuilder.service';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE = 'spinnaker.azure.pipeline.stage.bakeStage';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE, [\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER,\n])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'azure',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'package' },\n { type: 'requiredField', fieldName: 'regions' },\n {\n type: 'upstreamVersionProvided',\n checkParentTriggers: true,\n getMessage: (labels) =>\n 'Bake stages should always have a stage or trigger preceding them that provides version information: ' +\n '<ul>' +\n labels.map((label) => `<li>${label}</li>`).join('') +\n '</ul>' +\n 'Otherwise, Spinnaker will bake and deploy the most-recently built package.',\n },\n ],\n restartable: true,\n });\n })\n .controller('azureBakeStageCtrl', [\n '$scope',\n '$q',\n 'azureImageReader',\n '$uibModal',\n function ($scope, $q, azureImageReader, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.regions = $scope.stage.regions || [];\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $q.all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n BakeryReader.getRegions('azure'),\n BakeryReader.getBaseOsOptions('azure'),\n BakeryReader.getBaseLabelOptions(),\n ]).then(function ([credentialsKeyedByAccount, regions, baseOsOptions, baseLabelOptions]) {\n $scope.accounts = Object.keys(credentialsKeyedByAccount);\n $scope.regions = regions;\n if ($scope.regions.length === 1) {\n $scope.stage.region = $scope.regions[0];\n } else if (!$scope.regions.includes($scope.stage.region)) {\n delete $scope.stage.region;\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n $scope.baseOsOptions = baseOsOptions.baseImages;\n\n $scope.baseLabelOptions = baseLabelOptions;\n $scope.osTypeOptions = ['linux', 'windows'];\n $scope.packageTypeOptions = ['DEB', 'RPM'];\n\n $scope.viewState.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage));\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n\n if ($scope.stage.managedImage != null) {\n $scope.managedImagesWasChosen = true;\n setManagedImages();\n }\n $scope.defaultImagesWasChosen = $scope.stage.baseOs != null;\n $scope.customImagesWasChosen = $scope.stage.publisher != null;\n });\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\n // Since the selector computes using stage as an input, it needs to be able to recompute roscoMode on updates\n if (typeof SETTINGS.feature.roscoSelector === 'function') {\n $scope.viewState.roscoMode = SETTINGS.feature.roscoSelector($scope.stage);\n }\n }\n\n function showAdvanced() {\n const stg = $scope.stage;\n return !!(\n stg.templateFileName ||\n (stg.extendedAttributes && _.size(stg.extendedAttributes) > 0) ||\n stg.varFileName\n );\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n function setManagedImages() {\n azureImageReader\n .findImages({ provider: 'azure', managedImages: true, account: $scope.stage.account })\n .then(function (images) {\n let managedImageOptions = [];\n for (let i in images) {\n let image = images[i];\n let newImage = {\n id: image.imageName,\n osType: image.ostype,\n name: image.imageName,\n };\n managedImageOptions.push(newImage);\n }\n $scope.managedImageOptions = managedImageOptions;\n })\n .catch(() => {});\n }\n\n function setRegions() {\n AccountService.getRegionsForAccount($scope.stage.account)\n .then(function (regions) {\n $scope.regions = regions.map((r) => r.name);\n })\n .catch(() => {});\n }\n\n this.addExtendedAttribute = function () {\n if (!$scope.stage.extendedAttributes) {\n $scope.stage.extendedAttributes = {};\n }\n $uibModal\n .open({\n templateUrl: PipelineTemplates.addExtendedAttributes,\n controller: 'bakeStageAddExtendedAttributeController',\n controllerAs: 'addExtendedAttribute',\n resolve: {\n extendedAttribute: function () {\n return {\n key: '',\n value: '',\n };\n },\n },\n })\n .result.then(function (extendedAttribute) {\n $scope.stage.extendedAttributes[extendedAttribute.key] = extendedAttribute.value;\n })\n .catch(() => {});\n };\n\n this.removeExtendedAttribute = function (key) {\n delete $scope.stage.extendedAttributes[key];\n };\n\n this.showTemplateFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.templateFileName;\n };\n\n this.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && _.size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n this.showVarFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.varFileName;\n };\n\n this.showDefaultImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = true;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.managedImage = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.showManagedImages = function () {\n setManagedImages();\n\n $scope.managedImagesWasChosen = true;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.osType = null;\n $scope.stage.baseOs = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.packageType = null;\n };\n\n this.showCustomImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = true;\n\n $scope.stage.baseOs = null;\n $scope.stage.managedImage = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.onChangeAccount = () => {\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n $scope.stage.managedImage = null;\n\n if ($scope.stage.account) {\n setRegions();\n }\n\n if ($scope.managedImagesWasChosen) {\n setManagedImages();\n }\n };\n\n $scope.onChangeManagedImage = () => {\n $scope.stage.packageType = null;\n const selectedManagedImage = _.find($scope.managedImageOptions, { id: $scope.stage.managedImage });\n $scope.stage.osType = selectedManagedImage.osType.toLowerCase();\n };\n\n this.onChangeOsType = function (e) {\n $scope.stage.packageType = null;\n };\n\n $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE = 'spinnaker.azure.pipeline.stage.destroyAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'azure',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getAccountDetails(stage.credentials).then(function (details) {\n stage.regions = [details.org];\n // stage.regions = ['eastus', 'westus'];\n });\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n\n if (stage.credentials) {\n ctrl.accountUpdated();\n }\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.disableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./disableAsgStage.html'),\n executionStepLabelUrl: require('./disableAsgStepLabel.html'),\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to disable a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew && $scope.application.attributes.platformHealthOnly) {\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.enableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./enableAsgStage.html'),\n executionStepLabelUrl: require('./enableAsgStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureEnableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.reset = () => {\n ctrl.accountUpdated();\n ctrl.resetSelectedCluster();\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew) {\n // bypass the health check for now; will change this later to ['azureService'] and we will also add back the check for $scope.application.attributes.platformHealthOnly\n stage.interestingHealthProviderNames = [];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels, InfrastructureCaches, TaskExecutor } from '@spinnaker/core';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE = 'spinnaker.azure.securityGroup.write.service';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE, [UIROUTER_ANGULARJS]).factory(\n 'azureSecurityGroupWriter',\n function () {\n function upsertSecurityGroup(securityGroup, application, descriptor, params = {}) {\n params.securityGroupName = securityGroup.name;\n\n // We want to extend params with all attributes from securityGroup, but only if they don't already exist.\n _.assignWith(params, securityGroup, function (value, other) {\n return _.isUndefined(value) ? other : value;\n });\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `${descriptor} ${FirewallLabels.get('Firewall')}: ${name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n function deleteSecurityGroup(securityGroup, application, params = {}) {\n params.type = 'deleteSecurityGroup';\n params.securityGroupName = securityGroup.name;\n params.regions = [securityGroup.region];\n params.credentials = securityGroup.accountId;\n //params.cloudProvider = securityGroup.providerType;\n params.appName = application.name;\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `Delete ${FirewallLabels.get('Firewalls')}: ${securityGroup.name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n return {\n deleteSecurityGroup: deleteSecurityGroup,\n upsertSecurityGroup: upsertSecurityGroup,\n };\n },\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL = 'spinnaker.azure.securityGroup.create.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function ($scope, $uibModalInstance, $state, $controller, application, securityGroup, azureSecurityGroupWriter) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.regions = [];\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n const ctrl = this;\n $scope.isNew = true;\n $scope.state = {\n submitting: false,\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.regions[0],\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Creating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n $scope.securityGroup = securityGroup;\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.securityGroup.credentials;\n const region = $scope.securityGroup.region;\n $scope.securityGroup.selectedVnet = null;\n $scope.securityGroup.vnet = null;\n $scope.securityGroup.vnetResourceGroup = null;\n\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.securityGroup.vnet = item.name;\n $scope.securityGroup.vnetResourceGroup = item.resourceGroup;\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n ctrl.selectedSubnets.push(subnet);\n });\n }\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n vpcId: 'null',\n };\n\n if ($scope.securityGroup.selectedVnet) {\n $scope.securityGroup.vnet = $scope.securityGroup.selectedVnet.name;\n $scope.securityGroup.vnetResourceGroup = $scope.securityGroup.selectedVnet.resourceGroup;\n }\n\n if ($scope.securityGroup.selectedSubnet) {\n $scope.securityGroup.subnet = $scope.securityGroup.selectedSubnet.name;\n }\n\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create', params);\n });\n };\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length == 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n ctrl.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n ctrl.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n ctrl.protocolUpdated = function (ruleset, index) {\n ruleset[index].protocol = ruleset[index].protocolUI;\n };\n\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.securityGroup.securityRules = [];\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n CACHE_INITIALIZER_SERVICE,\n FirewallLabels,\n InfrastructureCaches,\n SECURITY_GROUP_READER,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL =\n 'spinnaker.azure.securityGroup.azure.edit.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n CACHE_INITIALIZER_SERVICE,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$exceptionHandler',\n '$state',\n 'securityGroupReader',\n 'cacheInitializer',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function (\n $scope,\n $uibModalInstance,\n $exceptionHandler,\n $state,\n securityGroupReader,\n cacheInitializer,\n application,\n securityGroup,\n azureSecurityGroupWriter,\n ) {\n $scope.pages = {\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n if (!_.isEmpty(rule.protocol)) {\n rule.protocolUI = rule.protocol.toLowerCase();\n }\n\n rule.destPortRanges = rule.destinationPortRangeModel;\n rule.sourceIPCIDRRanges = rule.sourceAddressPrefixModel;\n\n return rule;\n });\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.refreshSecurityGroups = function () {\n $scope.state.refreshingSecurityGroups = true;\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n initializeSecurityGroups().then(function () {\n $scope.state.refreshingSecurityGroups = false;\n });\n });\n };\n\n function initializeSecurityGroups() {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n const account = securityGroup.accountName;\n const region = securityGroup.region;\n const availableGroups = _.filter(securityGroups[account].azure[region], {\n /*vpcId: vpcId*/\n });\n $scope.availableSecurityGroups = _.map(availableGroups, 'name');\n });\n }\n\n this.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n this.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n this.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n this.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n this.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n this.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.taskMonitor.onTaskComplete = $uibModalInstance.dismiss;\n\n this.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: null,\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from '../configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER = 'spinnaker.azure.securityGroup.clone.controller';\nexport const name = AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n]).controller('azureCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n '$state',\n 'azureSecurityGroupWriter',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, $state, azureSecurityGroupWriter, securityGroup, application) {\n const ctrl = this;\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n const temp = rule.destinationPortRange.split('-');\n rule.startPort = Number(temp[0]);\n rule.endPort = Number(temp[1]);\n return rule;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '7001-7001',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n ctrl.portUpdated = function (ruleset, index) {\n ruleset[index].destinationPortRange = ruleset[index].startPort + '-' + ruleset[index].endPort;\n };\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: 'none',\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Clone', params);\n });\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { ConfirmationModalService, FirewallLabels, SECURITY_GROUP_READER } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.azure.securityGroup.azure.details.controller';\nexport const name = AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n ])\n .controller('azureSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'azureSecurityGroupWriter',\n 'securityGroupReader',\n '$uibModal',\n function ($scope, $state, resolvedSecurityGroup, app, azureSecurityGroupWriter, securityGroupReader, $uibModal) {\n const application = app;\n const securityGroup = resolvedSecurityGroup;\n\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n function extractSecurityGroup() {\n return securityGroupReader\n .getSecurityGroupDetails(\n application,\n securityGroup.accountId,\n securityGroup.provider,\n securityGroup.region,\n securityGroup.vpcId,\n securityGroup.name,\n )\n .then(\n function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n $scope.securityGroup = details;\n }\n },\n function () {\n fourOhFour();\n },\n );\n }\n\n function fourOhFour() {\n $state.go('^');\n }\n\n extractSecurityGroup().then(() => {\n // If the user navigates away from the view before the initial extractSecurityGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\n }\n });\n\n this.editInboundRules = function editInboundRules() {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'azureEditSecurityGroupCtrl as ctrl',\n resolve: {\n securityGroup: function () {\n return angular.copy($scope.securityGroup);\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'azureCloneSecurityGroupController as ctrl',\n resolve: {\n securityGroup: function () {\n const securityGroup = angular.copy($scope.securityGroup);\n if (securityGroup.region) {\n securityGroup.regions = [securityGroup.region];\n }\n return securityGroup;\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.deleteSecurityGroup = function deleteSecurityGroup() {\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n };\n\n const submitMethod = function () {\n $scope.securityGroup.type = 'deleteSecurityGroup';\n return azureSecurityGroupWriter.deleteSecurityGroup(securityGroup, application, {\n cloudProvider: 'azure',\n vpcId: $scope.securityGroup.vpcId,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + securityGroup.name + '?',\n buttonText: 'Delete ' + securityGroup.name,\n account: securityGroup.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n if (app.isStandalone) {\n // we still want the edit to refresh the firewall details when the modal closes\n app.securityGroups = {\n refresh: extractSecurityGroup,\n };\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.azure.securityGroup.reader';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('azureSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n //hack to get around securityGroupId not matching id in indexedSecurityGroups.\n const temp = securityGroupId.split('/');\n return indexedSecurityGroups[container.account][container.region][temp[temp.length - 1]];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.azure.securityGroup.transformer';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('azureSecurityGroupTransformer', function () {\n function normalizeSecurityGroup() {}\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceArchetype.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER, []).controller(\n 'azureInstanceArchetypeCtrl',\n [\n '$scope',\n 'instanceTypeService',\n 'modalWizardService',\n function ($scope, instanceTypeService, modalWizardService) {\n const wizard = modalWizardService.getWizard();\n\n $scope.$watch('command.viewState.instanceProfile', function () {\n if (!$scope.command.viewState.instanceProfile || $scope.command.viewState.instanceProfile === 'custom') {\n wizard.excludePage('instance-type');\n } else {\n wizard.includePage('instance-type');\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n\n $scope.$watch('command.viewState.instanceType', function (newVal) {\n if (newVal) {\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceType.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER, []).controller('azureInstanceTypeCtrl', [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('instance-type');\n modalWizardService.getWizard().markClean('instance-type');\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.advancedSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupAdvancedSettingsCtrl',\n [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('advanced');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n modalWizardService.getWizard().markClean('advanced');\n } else {\n modalWizardService.getWizard().markDirty('advanced');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.advancedSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupAdvancedSettingsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./advancedSettingsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'adv',\n controller: 'azureServerGroupAdvancedSettingsSelectorCtrl',\n };\n })\n .controller('azureServerGroupAdvancedSettingsSelectorCtrl', function () {\n this.addDataDisk = () => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n this.command.dataDisks = newDataDisks.concat([\n {\n lun: 0,\n managedDisk: {\n storageAccountType: 'Standard_LRS',\n },\n diskSizeGB: 1,\n caching: 'None',\n createOption: 'Empty',\n },\n ]);\n };\n\n this.removeDataDisk = (index) => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n newDataDisks.splice(index, 1);\n this.command.dataDisks = newDataDisks;\n };\n });\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER =\n 'spinnaker.azure.serverGroup.configure.basicSettings.image.filter';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER, []).filter('regional', function () {\n return function (input, selectedRegion) {\n return _.filter(input, function (image) {\n return image.region === selectedRegion || image.region === null;\n });\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { IMAGE_READER, ModalWizard } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER } from './image.regional.filter';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.basicSettings';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER,\n IMAGE_READER,\n ])\n .controller('azureServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n 'imageReader',\n function ($scope, $controller, $uibModalStack, $state, imageReader) {\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('basic-settings');\n ModalWizard.markComplete('basic-settings');\n } else {\n ModalWizard.markIncomplete('basic-settings');\n }\n });\n\n this.imageChanged = (image) => {\n $scope.command.imageName = image.imageName;\n $scope.command.selectedImage = image;\n ModalWizard.markClean('basic-settings');\n };\n\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: imageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n this.stackPattern = {\n test: function (stack) {\n const pattern = $scope.command.viewState.templatingEnabled ? /^([a-zA-Z0-9]*(\\${.+})*)*$/ : /^[a-zA-Z0-9]*$/;\n\n return pattern.test(stack);\n },\n };\n\n this.detailPattern = {\n test: function (detail) {\n const pattern = $scope.command.viewState.templatingEnabled\n ? /^([a-zA-Z0-9-]*(\\${.+})*)*$/\n : /^[a-zA-Z0-9-]*$/;\n\n return pattern.test(detail);\n },\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupCapacitySelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./capacitySelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'cap',\n controller: 'azureServerGroupCapacitySelectorCtrl',\n };\n })\n .controller('azureServerGroupCapacitySelectorCtrl', function () {});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.healthSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupHealthSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n if (typeof $scope.command.healthSettings === 'undefined') {\n $scope.command.healthSettings = {};\n }\n\n this.healthCheckProtocols = [\n { displayName: 'N/A', name: null },\n { displayName: 'HTTP', name: 'http' },\n { displayName: 'TCP', name: 'tcp' },\n ];\n\n this.requiresHealthCheckPath = function () {\n return $scope.command.healthSettings.protocol === 'http';\n };\n\n this.changeHealthCheckProtocol = function (newProtocol) {\n if (newProtocol == null) {\n $scope.command.healthSettings.protocol = null;\n $scope.command.healthSettings.port = null;\n $scope.command.healthSettings.requestPath = null;\n } else if (!this.requiresHealthCheckPath()) {\n $scope.command.healthSettings.requestPath = null;\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.healthSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupHealthSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./healthSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.imageSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupImageSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n this.clearImage = function () {\n if ($scope.command.image.isCustom == false) {\n $scope.command.image = { isCustom: false };\n } else {\n $scope.command.image.region = $scope.command.region;\n }\n };\n\n ModalWizard.markComplete('image-settings');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('image-settings');\n } else {\n ModalWizard.markDirty('image-settings');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.imageSettingsSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE, []).directive(\n 'azureServerGroupImageSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./imageSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches, LOAD_BALANCER_READ_SERVICE, ModalWizard, NetworkReader } from '@spinnaker/core';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER, [\n LOAD_BALANCER_READ_SERVICE,\n]).controller('azureServerGroupLoadBalancersCtrl', [\n '$scope',\n 'loadBalancerReader',\n function ($scope, loadBalancerReader) {\n ModalWizard.markClean('load-balancers');\n\n function loadVnetSubnets(item, type) {\n loadBalancerReader\n .getLoadBalancerDetails('azure', $scope.command.credentials, $scope.command.region, item)\n .then(function (LBs) {\n if (!LBs || LBs.length === 0) {\n // load the subnet and vnets without a load balancer\n const attachedVnet = $scope.command.selectedVnet;\n const attachedSubnet = $scope.command.selectedSubnet;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n if (subnet.name === attachedSubnet) {\n $scope.command.selectedSubnet = attachedSubnet;\n }\n }\n });\n }\n });\n }\n });\n } else if (LBs && LBs.length === 1) {\n const selectedLoadBalancer = LBs[0];\n const attachedVnet = $scope.command.selectedVnet;\n $scope.command.selectedVnet = null;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n }\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region &&\n ((type === 'Azure Application Gateway' && selectedVnet.name == selectedLoadBalancer.vnet) ||\n (type === 'Azure Load Balancer' && selectedVnet.name === attachedVnet.name))\n ) {\n $scope.command.selectedVnet = selectedVnet;\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n }\n });\n }\n });\n }\n });\n }\n });\n }\n\n if ($scope.command.credentials && $scope.command.region) {\n $scope.command.viewState.networkSettingsConfigured = true;\n $scope.command.selectedVnetSubnets = [];\n if ($scope.command.loadBalancerName !== null && typeof $scope.command.loadBalancerName !== 'undefined') {\n $scope.useLoadBalancer = true;\n }\n loadVnetSubnets($scope.command.loadBalancerName, $scope.command.loadBalancerType);\n }\n\n this.loadBalancerChanged = function (item) {\n $scope.command.viewState.networkSettingsConfigured = true;\n ModalWizard.markComplete('load-balancers');\n\n const loadBalancers = $scope.command.backingData.loadBalancers;\n let loadBalancerType = null;\n\n if (loadBalancers) {\n const loadBalancerToFind = loadBalancers.find((lb) => lb.name === item);\n if (loadBalancerToFind) {\n loadBalancerType = Utility.getLoadBalancerType(loadBalancerToFind.loadBalancerType).type;\n }\n }\n\n if (item === null) {\n $scope.command.loadBalancerName = null;\n }\n\n $scope.command.selectedVnetSubnets = [];\n $scope.command.loadBalancerType = loadBalancerType;\n InfrastructureCaches.clearCache('networks');\n loadVnetSubnets(item, loadBalancerType);\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupLoadBalancersSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupLoadBalancersSelector.directive.html'),\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.networkSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupNetworkSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('network-settings');\n\n $scope.command.selectedVnet = {\n name: $scope.command.vnet,\n };\n\n $scope.command.selectedSubnet = $scope.command.subnet;\n\n this.vnetChanged = function (item) {\n $scope.command.vnet = item;\n $scope.command.subnet = $scope.command.selectedSubnet = null;\n $scope.command.selectedVnetSubnets = item.subnets.map((s) => s.name);\n };\n\n this.networkSettingsChanged = function (item) {\n $scope.command.vnet = $scope.command.selectedVnet.name;\n $scope.command.subnet = item;\n ModalWizard.markComplete('network-settings');\n };\n\n this.getVnetName = function () {\n if ($scope.command.selectedVnet) {\n return $scope.command.selectedVnet.name;\n } else {\n return 'Virtual network was not selected';\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.networkSettings.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupNetworkSettingsSelector',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./ServerGroupNetworkSettingsSelector.directive.html'),\n };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.securityGroups.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER, []).controller(\n 'azureServerGroupSecurityGroupsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('security-groups');\n ModalWizard.markComplete('security-groups');\n\n $scope.command.selectedSecurityGroup = {\n id: $scope.command.securityGroupName,\n };\n\n this.securityGroupChanged = function (securityGroup) {\n $scope.command.securityGroupName = securityGroup.id;\n ModalWizard.markComplete('security-groups');\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { FirewallLabels, InfrastructureCaches } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.securityGroupSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupSecurityGroupsSelector',\n [\n 'azureServerGroupConfigurationService',\n function (azureServerGroupConfigurationService) {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupSecurityGroupsSelector.directive.html'),\n link: function (scope) {\n scope.firewallLabel = FirewallLabels.get('firewall');\n\n scope.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n scope.refreshSecurityGroups = function () {\n scope.refreshing = true;\n azureServerGroupConfigurationService.refreshSecurityGroups(scope.command).then(function () {\n scope.refreshing = false;\n });\n };\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.tags.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE, [])\n .directive('azureTagsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./tagsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'tagsSelectorCtrl',\n controller: 'TagsSelectorCtrl',\n };\n })\n .controller('TagsSelectorCtrl', [\n '$scope',\n function () {\n this.getTagResult = function () {\n return Utility.checkTags(this.command.instanceTags);\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.zone.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE, []).directive('azureZoneSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./zoneSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: [\n '$scope',\n function ($scope) {\n this.updateEnableInboundNAT = () => {\n if ($scope.vm.command.zonesEnabled) {\n $scope.vm.command.enableInboundNAT = false;\n }\n };\n },\n ],\n };\n});\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER } from './wizard/ServerGroupInstanceArchetype.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER } from './wizard/ServerGroupInstanceType.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER } from './wizard/advancedSettings/ServerGroupAdvancedSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER } from './wizard/basicSettings/ServerGroupBasicSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE } from './wizard/capacity/capacitySelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER } from './wizard/healthSettings/ServerGroupHealthSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE } from './wizard/healthSettings/healthSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER } from './wizard/image/ServerGroupImageSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE } from './wizard/image/imageSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER } from './wizard/loadBalancers/ServerGroupLoadBalancers.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE } from './wizard/loadBalancers/serverGroupLoadBalancersSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER } from './wizard/networkSettings/ServerGroupNetworkSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE } from './wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER } from './wizard/securityGroup/ServerGroupSecurityGroups.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE } from './wizard/securityGroup/serverGroupSecurityGroupsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE } from './wizard/tags/tagsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE = 'spinnaker.azure.serverGroup.configure';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE, [\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE,\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from '../../instance/azureInstanceType.service';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.azure.serverGroup.configure.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n ])\n .factory('azureServerGroupConfigurationService', [\n '$q',\n 'azureImageReader',\n 'securityGroupReader',\n 'cacheInitializer',\n 'loadBalancerReader',\n 'azureInstanceTypeService',\n function (\n $q,\n azureImageReader,\n securityGroupReader,\n cacheInitializer,\n loadBalancerReader,\n azureInstanceTypeService,\n ) {\n const dataDiskTypes = ['Standard_LRS', 'StandardSSD_LRS', 'Premium_LRS'];\n const dataDiskCachingTypes = ['None', 'ReadOnly', 'ReadWrite'];\n\n const healthCheckTypes = ['EC2', 'ELB'];\n const terminationPolicies = [\n 'OldestInstance',\n 'NewestInstance',\n 'OldestLaunchConfiguration',\n 'ClosestToNextInstanceHour',\n 'Default',\n ];\n\n function configureUpdateCommand(command) {\n command.backingData = {\n healthCheckTypes: angular.copy(healthCheckTypes),\n terminationPolicies: angular.copy(terminationPolicies),\n };\n }\n\n function configureCommand(application, command) {\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n securityGroupReader.loadSecurityGroups(),\n loadBalancerReader.loadLoadBalancers(application.name),\n ])\n .then(function ([credentialsKeyedByAccount, securityGroups, loadBalancers]) {\n command.backingData = {\n credentialsKeyedByAccount,\n securityGroups,\n loadBalancers,\n dataDiskTypes: angular.copy(dataDiskTypes),\n dataDiskCachingTypes: angular.copy(dataDiskCachingTypes),\n accounts: _.keys(credentialsKeyedByAccount),\n filtered: {},\n };\n attachEventHandlers(command);\n });\n }\n\n function configureInstanceTypes(command) {\n const result = {\n dirty: {},\n };\n if (command.region) {\n const results = [result.dirty];\n\n // results.push(configureCustomInstanceTypes(command).dirty);\n results.push(configureStandardInstanceTypes(command).dirty);\n\n angular.extend(...results);\n } else {\n command.backingData.filtered.instanceTypes = [];\n }\n return result;\n }\n\n function configureStandardInstanceTypes(command) {\n const c = command;\n const result = {\n dirty: {},\n };\n\n const locations = [c.region];\n const { credentialsKeyedByAccount } = c.backingData;\n const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];\n\n if (locations.every((l) => !l)) {\n return result;\n }\n\n const filtered = azureInstanceTypeService\n .getAvailableTypesForRegions(locationToInstanceTypesMap, locations)\n .map((type) => type.name);\n\n const instanceType = c.instanceType;\n if (_.every([instanceType, !_.startsWith(instanceType, 'custom'), !_.includes(filtered, instanceType)])) {\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n c.backingData.filtered.instanceTypes = filtered;\n return result;\n }\n\n function configureImages(command) {\n const result = {\n dirty: {},\n };\n let regionalImages = null;\n if (command.viewState.disableImageSelection) {\n return result;\n }\n if (command.region) {\n regionalImages = command.backingData.packageImages\n .filter(function (image) {\n return image.amis && image.amis[command.region];\n })\n .map(function (image) {\n return {\n imageName: image.imageName,\n ami: image.amis ? image.amis[command.region][0] : null,\n };\n });\n if (\n command.amiName &&\n !regionalImages.some(function (image) {\n return image.imageName === command.amiName;\n })\n ) {\n result.dirty.amiName = true;\n command.amiName = null;\n }\n } else {\n command.amiName = null;\n }\n command.backingData.filtered.images = regionalImages;\n return result;\n }\n\n function configureZones(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (!command.region) {\n return result;\n }\n let { regionsSupportZones, availabilityZones } = command.backingData.credentialsKeyedByAccount[\n command.credentials\n ];\n regionsSupportZones = regionsSupportZones || [];\n availabilityZones = availabilityZones || [];\n filteredData.zones = regionsSupportZones.includes(command.region) ? availabilityZones : [];\n\n return result;\n }\n\n function getRegionalSecurityGroups(command) {\n const newSecurityGroups = command.backingData.securityGroups[command.credentials] || {\n azure: {},\n };\n return _.chain(newSecurityGroups[command.region]).sortBy('name').value();\n }\n\n function configureSecurityGroupOptions(command) {\n const result = {\n dirty: {},\n };\n let currentOptions;\n if (command.backingData.filtered.securityGroups) {\n currentOptions = command.backingData.filtered.securityGroups;\n }\n const newRegionalSecurityGroups = getRegionalSecurityGroups(command);\n if (command.selectedSecurityGroup) {\n // one has not been previously selected. We are either configuring for the\n //first time or they changed regions or account\n command.selectedSecurityGroup = null;\n result.dirty.securityGroups = true;\n }\n if (currentOptions != newRegionalSecurityGroups) {\n command.backingData.filtered.securityGroups = newRegionalSecurityGroups;\n result.dirty.securityGroups = true;\n }\n\n if (command.backingData.filtered.securityGroups === []) {\n command.viewState.securityGroupsConfigured = false;\n } else {\n command.viewState.securityGroupsConfigured = true;\n }\n\n return result;\n }\n\n function refreshSecurityGroups(command, skipCommandReconfiguration) {\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n function getLoadBalancerNames(loadBalancers) {\n return _.chain(loadBalancers).map('name').uniq().value().sort();\n }\n\n function configureLoadBalancerOptions(command) {\n const result = {\n dirty: {},\n };\n const current = command.loadBalancers;\n const newLoadBalancers = getLoadBalancerNames(command.backingData.loadBalancers);\n\n if (current && command.loadBalancers) {\n const matched = _.intersection(newLoadBalancers, command.loadBalancers);\n const removed = _.xor(matched, current);\n command.loadBalancers = matched;\n if (removed.length) {\n result.dirty.loadBalancers = removed;\n }\n }\n command.backingData.filtered.loadBalancers = newLoadBalancers;\n return result;\n }\n\n function refreshLoadBalancers(command, skipCommandReconfiguration) {\n return loadBalancerReader.listLoadBalancers('azure').then(function (loadBalancers) {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n configureLoadBalancerOptions(command);\n }\n });\n }\n\n function configureLoadBalancers(command) {\n const result = {\n dirty: {},\n };\n const temp = command.backingData.loadBalancers;\n const filterlist = _.filter(temp, function (lb) {\n return lb.account === command.credentials && lb.region === command.region;\n });\n\n command.loadBalancers = getLoadBalancerNames(filterlist);\n command.viewState.loadBalancersConfigured = true;\n\n return result;\n }\n\n function attachEventHandlers(cmd) {\n cmd.regionChanged = function regionChanged(command, isInit = false) {\n const result = {\n dirty: {},\n };\n if (command.region && command.credentials) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n angular.extend(result.dirty, configureZones(command).dirty);\n }\n // reset previous set values\n if (!isInit) {\n command.loadBalancerName = null;\n command.loadBalancerType = null;\n command.vnet = null;\n command.vnetResourceGroup = null;\n command.subnet = null;\n command.selectedSubnet = null;\n command.selectedVnet = null;\n command.selectedVnetSubnets = [];\n command.viewState.networkSettingsConfigured = false;\n command.selectedSecurityGroup = null;\n command.securityGroupName = null;\n command.zonesEnabled = false;\n command.zones = [];\n }\n\n return result;\n };\n\n cmd.credentialsChanged = function credentialsChanged(command, isInit) {\n const result = {\n dirty: {},\n };\n const backingData = command.backingData;\n if (command.credentials) {\n const regionsForAccount = backingData.credentialsKeyedByAccount[command.credentials] || {\n regions: [],\n defaultKeyPair: null,\n };\n backingData.filtered.regions = regionsForAccount.regions;\n if (\n !_.chain(backingData.filtered.regions)\n .some({\n name: command.region,\n })\n .value()\n ) {\n command.region = null;\n result.dirty.region = true;\n } else {\n angular.extend(result.dirty, command.regionChanged(command, isInit).dirty);\n }\n if (command.region) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n }\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n } else {\n command.region = null;\n }\n return result;\n };\n }\n\n function refreshInstanceTypes(command) {\n return cacheInitializer.refreshCache('instanceTypes').then(function () {\n return azureInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {\n command.backingData.instanceTypes = instanceTypes;\n configureInstanceTypes(command);\n });\n });\n }\n\n return {\n configureUpdateCommand: configureUpdateCommand,\n configureCommand: configureCommand,\n configureImages: configureImages,\n configureSecurityGroupOptions: configureSecurityGroupOptions,\n configureLoadBalancerOptions: configureLoadBalancerOptions,\n refreshLoadBalancers: refreshLoadBalancers,\n refreshSecurityGroups: refreshSecurityGroups,\n getRegionalSecurityGroups: getRegionalSecurityGroups,\n refreshInstanceTypes: refreshInstanceTypes,\n configureZones: configureZones,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { FirewallLabels, ModalWizard, SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';\nimport Utility from '../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER =\n 'spinnaker.azure.cloneServerGroup.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n SERVER_GROUP_WRITER,\n]).controller('azureCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n 'serverGroupWriter',\n 'azureServerGroupConfigurationService',\n 'serverGroupCommand',\n 'application',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n serverGroupWriter,\n azureServerGroupConfigurationService,\n serverGroupCommand,\n application,\n title,\n ) {\n $scope.pages = {\n templateSelection: require('./templateSelection.html'),\n basicSettings: require('./basicSettings/basicSettings.html'),\n imageSettings: require('./image/imageSettings.html'),\n healthSettings: require('./healthSettings/healthSettings.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n networkSettings: require('./networkSettings/networkSettings.html'),\n securityGroups: require('./securityGroup/securityGroups.html'),\n instanceType: require('./instanceType/instanceType.html'),\n zones: require('./capacity/zones.html'),\n tags: require('./tags/tags.html'),\n advancedSettings: require('./advancedSettings/advancedSettings.html'),\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n $scope.command = serverGroupCommand;\n\n // Give regions an init value to prevent it being undefined. If so, the React component RegionSelectField would get \"undefined\" for property regions\n // and then be unmounted so that the region selector would be hidden.\n $scope.command.backingData = $scope.command.backingData || {};\n $scope.command.backingData.filtered = $scope.command.backingData.filtered || {};\n $scope.command.backingData.filtered.regions = $scope.command.backingData.filtered.regions || [];\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: [\n 'account, region, subnet, cluster name (stack, details)',\n 'load balancers',\n FirewallLabels.get('firewalls'),\n 'instance type',\n 'all fields on the Advanced Settings page',\n ],\n notCopied: [],\n additionalCopyText:\n '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.',\n };\n\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'azure',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n azureServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'create') {\n serverGroupCommand.viewState.useAllImageSelection = true;\n }\n $scope.state.loaded = true;\n initializeWizardState();\n initializeSelectOptions();\n initializeWatches();\n });\n }\n\n function initializeWizardState() {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'editPipeline') {\n ModalWizard.markComplete('basic-settings');\n ModalWizard.markComplete('load-balancers');\n ModalWizard.markComplete('network-settings');\n ModalWizard.markComplete('security-groups');\n ModalWizard.markComplete('instance-type');\n ModalWizard.markComplete('zones');\n }\n }\n\n function initializeWatches() {\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged($scope.command, true));\n processCommandUpdateResult($scope.command.regionChanged($scope.command, true));\n }\n\n function createResultProcessor(method) {\n return function (newValue, oldValue) {\n if (newValue !== oldValue) {\n processCommandUpdateResult(method($scope.command));\n }\n };\n }\n\n function processCommandUpdateResult(result) {\n if (result.dirty.loadBalancers) {\n ModalWizard.markDirty('load-balancers');\n ModalWizard.markDirty('network-settings');\n }\n if (result.dirty.securityGroups) {\n ModalWizard.markDirty('security-groups');\n }\n if (result.dirty.instanceType) {\n ModalWizard.markDirty('instance-type');\n }\n if (result.dirty.zoneEnabled || result.dirty.zones) {\n ModalWizard.markDirty('zones');\n }\n }\n\n this.submit = function () {\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n $scope.taskMonitor.submit(function () {\n return serverGroupWriter.cloneServerGroup($scope.command, application);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.toggleSuspendedProcess = function (process) {\n $scope.command.suspendedProcesses = $scope.command.suspendedProcesses || [];\n const processIndex = $scope.command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n $scope.command.suspendedProcesses.push(process);\n } else {\n $scope.command.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n this.processIsSuspended = function (process) {\n return $scope.command.suspendedProcesses.includes(process);\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n this.isValid = function () {\n return (\n $scope.command &&\n $scope.command.application &&\n $scope.command.credentials &&\n $scope.command.instanceType &&\n $scope.command.region &&\n (!$scope.command.zonesEnabled || $scope.command.zones.length !== 0) &&\n Utility.checkTags($scope.command.instanceTags).isValid\n );\n };\n },\n]);\n","import React from 'react';\n\nimport { UserVerification } from '@spinnaker/core';\n\nexport interface IAzureModalFooterProps {\n onSubmit: () => void;\n onCancel: () => void;\n isValid: boolean;\n account: string;\n}\n\nexport interface IAzureModalFooterState {\n verified: boolean;\n}\n\nexport class AzureModalFooter extends React.Component<IAzureModalFooterProps, IAzureModalFooterState> {\n constructor(props: any) {\n super(props);\n }\n\n public state = { verified: false };\n\n private handleVerification = (verified: boolean) => {\n this.setState({ verified });\n };\n\n public render() {\n const { onSubmit, onCancel, isValid, account } = this.props;\n const { verified } = this.state;\n\n return (\n <div className=\"modal-footer\">\n {<UserVerification expectedValue={account} onValidChange={this.handleVerification} />}\n <button className=\"btn btn-default\" onClick={onCancel}>\n Cancel\n </button>\n <button type=\"submit\" className=\"btn btn-primary\" onClick={onSubmit} disabled={!isValid || !verified}>\n Submit\n </button>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport Select from 'react-select';\n\nimport type { IModalComponentProps } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\n\nimport { AzureModalFooter } from '../../../common/AzureModalFooter';\n\nexport interface IAzureRollbackServerGroupModalProps extends IModalComponentProps {\n application: any;\n serverGroup: any;\n disabledServerGroups: any;\n}\n\nexport interface IAzureRollbackServerGroupModalState {\n taskMonitor: TaskMonitor;\n submitting: boolean;\n command: any;\n}\n\nexport class AzureRollbackServerGroupModal extends React.Component<\n IAzureRollbackServerGroupModalProps,\n IAzureRollbackServerGroupModalState\n> {\n public static defaultProps: Partial<IAzureRollbackServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: IAzureRollbackServerGroupModalProps) {\n const modalProps = {};\n return ReactModal.show(AzureRollbackServerGroupModal, props, modalProps);\n }\n\n constructor(props: IAzureRollbackServerGroupModalProps) {\n super(props);\n\n const { application, serverGroup } = props;\n\n this.state = {\n taskMonitor: new TaskMonitor({\n application: application,\n title: 'Rolling back your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n }),\n submitting: true,\n command: {\n interestingHealthProviderNames: [],\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n enableAndDisableOnly: true,\n },\n },\n };\n }\n\n private close = (args?: any) => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = () => {\n const { command, taskMonitor } = this.state;\n const { serverGroup, application } = this.props;\n\n taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.rollbackServerGroup(serverGroup, application, command);\n });\n };\n\n private filterServerGroups = (disabledServerGroups: any) => {\n const filteredDisabledServerGroups = disabledServerGroups\n .filter((disabledServerGroup: any) => disabledServerGroup.instanceCounts.total !== 0)\n .sort((a: any, b: any) => b.name.localeCompare(a.name));\n\n return filteredDisabledServerGroups;\n };\n\n private isValid = () => {\n const restoreServerGroupName = this.state.command.rollbackContext.restoreServerGroupName;\n return restoreServerGroupName !== undefined;\n };\n\n private handleServerGroupChange = (restoreServerGroupOption: any) => {\n const { disabledServerGroups } = this.props;\n const newCommand = { ...this.state.command };\n newCommand.rollbackContext.restoreServerGroupName = restoreServerGroupOption.value;\n const restoreServerGroup = this.filterServerGroups(disabledServerGroups).find(function (disabledServerGroup: any) {\n return disabledServerGroup.name === restoreServerGroupOption.value;\n });\n newCommand.targetSize = restoreServerGroup.capacity.max;\n this.setState({\n command: newCommand,\n });\n };\n\n private handleTaskReasonChange = (taskReason?: any) => {\n const newCommand = { ...this.state.command };\n newCommand.reason = taskReason;\n this.setState({\n command: newCommand,\n });\n };\n\n public render() {\n const { command, taskMonitor, submitting } = this.state;\n const { serverGroup, disabledServerGroups } = this.props;\n const isValidSG = this.isValid();\n const disabledServerGroupOptions = this.filterServerGroups(disabledServerGroups).map(\n (disabledServerGroup: any) => ({\n label: disabledServerGroup.name,\n value: disabledServerGroup.name,\n }),\n );\n\n return (\n <Modal onHide={this.close}>\n <TaskMonitorWrapper monitor={taskMonitor} />\n {submitting && (\n <form role=\"form\">\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Rollback {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"row\">\n <div className=\"col-sm-3 sm-label-right\">Restore to</div>\n <div className=\"col-sm-6\">\n <Select\n value={command.rollbackContext.restoreServerGroupName}\n onChange={this.handleServerGroupChange}\n options={disabledServerGroupOptions}\n />\n </div>\n </div>\n <TaskReason reason={command.taskReason} onChange={this.handleTaskReasonChange} />\n </Modal.Body>\n <AzureModalFooter\n onSubmit={this.submit}\n onCancel={this.close}\n isValid={isValidSG}\n account={serverGroup.account}\n />\n </form>\n )}\n </Modal>\n );\n }\n}\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n} from '@spinnaker/core';\n\nimport '../configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { AzureRollbackServerGroupModal } from './rollback/RollbackServerGroupModal';\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER =\n 'spinnaker.azure.serverGroup.details.controller';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n SERVER_GROUP_WRITER,\n ])\n .controller('azureServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$templateCache',\n 'app',\n 'serverGroup',\n 'azureServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n function (\n $scope,\n $state,\n $templateCache,\n app,\n serverGroup,\n azureServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n function extractServerGroupSummary() {\n let summary = _.find(app.serverGroups.data, function (toCheck) {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some(function (loadBalancer) {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some(function (possibleServerGroup) {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n if (!summary) {\n $state.go('^');\n }\n return summary;\n }\n\n function retrieveServerGroup() {\n const summary = extractServerGroupSummary();\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then(function (details) {\n cancelLoader();\n\n angular.extend(details, summary);\n details.account = serverGroup.accountId; // it's possible the summary was not found because the clusters are still loading\n\n $scope.serverGroup = details;\n\n if (!_.isEmpty($scope.serverGroup)) {\n $scope.image = details.image ? details.image : undefined;\n\n if (details.image && details.image.description) {\n const tags = details.image.description.split(', ');\n tags.forEach(function (tag) {\n const keyVal = tag.split('=');\n if (keyVal.length === 2 && keyVal[0] === 'ancestor_name') {\n details.image.baseImage = keyVal[1];\n }\n });\n }\n\n if (details.launchConfig && details.launchConfig.securityGroups) {\n $scope.securityGroups = _.chain(details.launchConfig.securityGroups)\n .map(function (id) {\n return (\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n id: id,\n }) ||\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n name: id,\n })\n );\n })\n .compact()\n .value();\n }\n } else {\n $state.go('^');\n }\n });\n }\n\n function cancelLoader() {\n $scope.state.loading = false;\n }\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = function destroyServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: function () {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return serverGroupWriter.destroyServerGroup(serverGroup, app);\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = function disableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = () => serverGroupWriter.disableServerGroup(serverGroup, app);\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = function enableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.enableServerGroup(\n serverGroup,\n app,\n angular.extend(params, {\n interestingHealthProviderNames: [], // bypass the check for now; will change this later to ['azureService']\n }),\n );\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rollbackServerGroup = () => {\n const serverGroup = $scope.serverGroup;\n const cluster = _.find(app.clusters, { name: serverGroup.cluster, account: serverGroup.account });\n const disabledServerGroups = _.filter(cluster.serverGroups, { isDisabled: true, region: serverGroup.region });\n AzureRollbackServerGroupModal.show({ application: app, serverGroup, disabledServerGroups });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'azureCloneServerGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n title: () => 'Clone ' + serverGroup.name,\n application: () => app,\n serverGroupCommand: () =>\n azureServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup),\n },\n });\n };\n\n this.truncateCommitHash = function () {\n if ($scope.serverGroup && $scope.serverGroup.buildInfo && $scope.serverGroup.buildInfo.commit) {\n return $scope.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER } from './serverGroupDetails.azure.controller';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE = 'spinnaker.azure.serverGroup.details.azure';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE, [\n AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER,\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ApplicationNameValidator } from '@spinnaker/core';\n\nexport const AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR = 'spinnaker.azure.validation.applicationName';\nexport const name = AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR; // for backwards compatibility\nmodule(AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR, [])\n .factory('azureApplicationNameValidator', function () {\n function validateSpecialCharacters(name, errors) {\n const pattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!pattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters or digits. No ' +\n 'special characters are allowed.',\n );\n }\n }\n\n function validate(name) {\n const warnings = [];\n const errors = [];\n\n if (name && name.length) {\n validateSpecialCharacters(name, errors);\n }\n\n return {\n warnings: warnings,\n errors: errors,\n };\n }\n\n return {\n validate: validate,\n };\n })\n .run([\n 'azureApplicationNameValidator',\n function (azureApplicationNameValidator) {\n ApplicationNameValidator.registerValidator('azure', azureApplicationNameValidator);\n },\n ]);\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './help/azure.help';\nimport { AZURE_IMAGE_IMAGE_READER } from './image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from './instance/azureInstanceType.service';\nimport { AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { AzureLoadBalancerChoiceModal } from './loadBalancer/configure/AzureLoadBalancerChoiceModal';\nimport { AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER } from './loadBalancer/configure/createLoadBalancer.controller';\nimport { AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport logo from './logo/logo_azure.png';\nimport { AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE } from './pipeline/stages/bake/azureBakeStage';\nimport { AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/azureDestroyAsgStage';\nimport { AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE } from './pipeline/stages/disableAsg/azureDisableAsgStage';\nimport { AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE } from './pipeline/stages/enableAsg/azureEnableAsgStage';\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from './securityGroup/configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL } from './securityGroup/configure/EditSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './securityGroup/details/securityGroupDetail.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE } from './serverGroup/configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER } from './serverGroup/configure/wizard/CloneServerGroup.azure.controller';\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE } from './serverGroup/details/serverGroup.details.module';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR } from './validation/applicationName.validator';\n\nimport './logo/azure.logo.less';\n\nexport const AZURE_MODULE = 'spinnaker.azure';\nmodule(AZURE_MODULE, [\n AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE,\n AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE,\n AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER,\n AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER,\n AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n AZURE_SECURITYGROUP_SECURITYGROUP_READER,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR,\n]).config(function () {\n CloudProviderRegistry.registerProvider('azure', {\n name: 'Azure',\n logo: {\n path: logo,\n },\n image: {\n reader: 'azureImageReader',\n },\n serverGroup: {\n transformer: 'azureServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'azureServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'azureCloneServerGroupCtrl',\n commandBuilder: 'azureServerGroupCommandBuilder',\n configurationService: 'azureServerGroupConfigurationService',\n },\n instance: {\n instanceTypeService: 'azureInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'azureInstanceDetailsCtrl',\n },\n loadBalancer: {\n transformer: 'azureLoadBalancerTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetail.html'),\n detailsController: 'azureLoadBalancerDetailsCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/createLoadBalancer.html'),\n createLoadBalancerController: 'azureCreateLoadBalancerCtrl',\n CreateLoadBalancerModal: AzureLoadBalancerChoiceModal,\n },\n securityGroup: {\n transformer: 'azureSecurityGroupTransformer',\n reader: 'azureSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'azureSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'azureCreateSecurityGroupCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('azure', ['redblack']);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utility.ts","../src/help/azure.help.ts","../src/image/image.reader.js","../src/instance/azureInstanceType.service.js","../src/instance/details/instance.details.controller.js","../src/loadBalancer/configure/AzureLoadBalancerChoiceModal.tsx","../src/azure.settings.ts","../src/loadBalancer/loadBalancer.transformer.js","../src/loadBalancer/configure/createLoadBalancer.controller.js","../src/loadBalancer/details/loadBalancerDetail.controller.js","../src/logo/logo_azure.png","../src/pipeline/stages/bake/bakeExecutionDetails.controller.js","../src/serverGroup/serverGroup.transformer.js","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/pipeline/stages/bake/azureBakeStage.js","../src/pipeline/stages/destroyAsg/azureDestroyAsgStage.js","../src/pipeline/stages/disableAsg/azureDisableAsgStage.js","../src/pipeline/stages/enableAsg/azureEnableAsgStage.js","../src/securityGroup/securityGroup.write.service.js","../src/securityGroup/configure/CreateSecurityGroupCtrl.js","../src/securityGroup/configure/EditSecurityGroupCtrl.js","../src/securityGroup/clone/cloneSecurityGroup.controller.js","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.js","../src/securityGroup/securityGroup.transformer.js","../src/serverGroup/configure/wizard/ServerGroupInstanceArchetype.controller.js","../src/serverGroup/configure/wizard/ServerGroupInstanceType.controller.js","../src/serverGroup/configure/wizard/advancedSettings/ServerGroupAdvancedSettings.controller.js","../src/serverGroup/configure/wizard/advancedSettings/advancedSettingsSelector.directive.js","../src/serverGroup/configure/wizard/basicSettings/image.regional.filter.js","../src/serverGroup/configure/wizard/basicSettings/ServerGroupBasicSettings.controller.js","../src/serverGroup/configure/wizard/capacity/capacitySelector.directive.js","../src/serverGroup/configure/wizard/healthSettings/ServerGroupHealthSettings.controller.js","../src/serverGroup/configure/wizard/healthSettings/healthSettingsSelector.directive.js","../src/serverGroup/configure/wizard/image/ServerGroupImageSettings.controller.js","../src/serverGroup/configure/wizard/image/imageSettingsSelector.directive.js","../src/serverGroup/configure/wizard/loadBalancers/ServerGroupLoadBalancers.controller.js","../src/serverGroup/configure/wizard/loadBalancers/serverGroupLoadBalancersSelector.directive.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettings.controller.js","../src/serverGroup/configure/wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive.js","../src/serverGroup/configure/wizard/securityGroup/ServerGroupSecurityGroups.controller.js","../src/serverGroup/configure/wizard/securityGroup/serverGroupSecurityGroupsSelector.directive.js","../src/serverGroup/configure/wizard/tags/tagsSelector.directive.js","../src/serverGroup/configure/wizard/zones/zoneSelector.directive.js","../src/serverGroup/configure/serverGroup.configure.azure.module.js","../src/serverGroup/configure/serverGroupConfiguration.service.js","../src/serverGroup/configure/wizard/CloneServerGroup.azure.controller.js","../src/common/AzureModalFooter.tsx","../src/serverGroup/details/rollback/RollbackServerGroupModal.tsx","../src/serverGroup/details/serverGroupDetails.azure.controller.js","../src/serverGroup/details/serverGroup.details.module.js","../src/validation/applicationName.validator.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/azure.module.ts"],"sourcesContent":["export interface ITagResult {\n isValid: boolean;\n error: TagError | null;\n errorMessage?: string;\n}\n\nexport enum TagError {\n TAG_NUMBER_EXCEED,\n TAG_KEY_LENGTH_EXCEED,\n TAG_VALUE_LENGTH_EXCEED,\n TAG_KEY_INVALID_CHARACTER,\n TAG_VALUE_INVALID_CHARACTER,\n TAG_OBJECT_UNDEFINED,\n}\n\nexport interface IAzureLoadBalancer {\n type: string;\n description: string;\n}\n\nexport const AzureLoadBalancerTypes: IAzureLoadBalancer[] = [\n {\n type: 'Azure Load Balancer',\n description: '',\n },\n {\n type: 'Azure Application Gateway',\n description: '',\n },\n];\n\nexport default class Utility {\n public static readonly TAG_LIMITATION: number = 8;\n public static readonly TAG_KEY_LENGTH_LIMITATION: number = 512;\n public static readonly TAG_VALUE_LENGTH_LIMITATION: number = 256;\n public static readonly TAG_INVALID_CHAR_REG_EXR: RegExp = /[<>%&\\\\?/]/;\n\n public static checkTags(tagsObject: { [s: string]: string }): ITagResult {\n if (!tagsObject) {\n return {\n isValid: false,\n error: TagError.TAG_OBJECT_UNDEFINED,\n errorMessage: 'instanceTags is not defined',\n };\n }\n const length: number = Object.keys(tagsObject).length;\n if (!(length >= 0 && length <= Utility.TAG_LIMITATION)) {\n return {\n isValid: false,\n error: TagError.TAG_NUMBER_EXCEED,\n errorMessage: `Number of tags exceeds the limit: ${Utility.TAG_LIMITATION}`,\n };\n }\n\n for (const [k, v] of Object.entries(tagsObject)) {\n if (k.length > Utility.TAG_KEY_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_LENGTH_EXCEED,\n errorMessage: `Length of Tag key: ${k} exceeds the limit: ${Utility.TAG_KEY_LENGTH_LIMITATION}`,\n };\n }\n if (v.length > Utility.TAG_VALUE_LENGTH_LIMITATION) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_LENGTH_EXCEED,\n errorMessage: `Length of Tag value: ${v} exceeds the limit: ${Utility.TAG_VALUE_LENGTH_LIMITATION}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(k)) {\n return {\n isValid: false,\n error: TagError.TAG_KEY_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag key: ${k}`,\n };\n }\n if (Utility.TAG_INVALID_CHAR_REG_EXR.test(v)) {\n return {\n isValid: false,\n error: TagError.TAG_VALUE_INVALID_CHARACTER,\n errorMessage: `Invalid characters in Tag value: ${v}`,\n };\n }\n }\n return {\n isValid: true,\n error: null,\n };\n }\n\n public static getLoadBalancerType(typeString: string): IAzureLoadBalancer | null {\n typeString = typeString.toLowerCase().split('_').join(' ');\n return AzureLoadBalancerTypes.find((lb: IAzureLoadBalancer) => lb.type.toLowerCase() === typeString) || null;\n }\n}\n","import { HelpContentsRegistry } from '@spinnaker/core';\nimport Utility from '../utility';\n\nconst helpContents: { [key: string]: string } = {\n 'azure.securityGroup.ingress.description': 'Friendly description of the rule you want to enable (limit 80 chars.)',\n 'azure.securityGroup.ingress.priority':\n \"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.\",\n 'azure.securityGroup.ingress.source':\n \"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.\",\n 'azure.securityGroup.ingress.sourcePortRange':\n '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.',\n 'azure.securityGroup.ingress.destination':\n \"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.\",\n 'azure.securityGroup.ingress.destinationPortRange':\n '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.',\n 'azure.securityGroup.ingress.direction': 'Specifies whether the rule is for inbound or outbound traffic.',\n 'azure.securityGroup.ingress.actions':\n '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.',\n 'azure.securityGroup.ingress.destPortRanges':\n '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.',\n 'azure.securityGroup.ingress.sourceIPCIDRRanges':\n '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',\n 'azure.serverGroup.imageName': '(Required) <b>Image</b> is the deployable Azure Machine Image.',\n 'azure.serverGroup.stack':\n '(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.',\n 'azure.serverGroup.detail':\n '(Required) <b>Detail</b> is a naming component to help distinguish specifics of the server group.',\n 'azure.serverGroup.scriptLocation':\n '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',\n 'azure.serverGroup.commandToExecute':\n 'Command(s) to execute custom scripts provided during provisioning of an instance.',\n 'azure.serverGroup.customData': 'Script or metadata to be injected into each instances.',\n 'azure.serverGroup.customTags': `Custom tags on Virtual Machine Scale Set. Allow ${Utility.TAG_LIMITATION} tags at most.`,\n 'azure.serverGroup.enableInboundNAT':\n '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.',\n 'azure.serverGroup.lun':\n '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.',\n 'azure.serverGroup.diskSizeGB':\n 'Specifies the size of an empty data disk in gigabytes. This value cannot be larger than 1023 GB',\n 'azure.serverGroup.managedDisk.storageAccountType':\n 'You can choose between Azure managed disks types to support your workload or scenario.',\n 'azure.serverGroup.caching':\n '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.',\n 'azure.serverGroup.userAssignedIdentities':\n 'Allows your server to access Azure resources. Learn more here: https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview',\n 'azure.loadBalancer.dnsName':\n '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.',\n 'azure.loadBalancer.probes.probeInterval':\n 'Probe interval in seconds. This value is the time interval between two consecutive probes.',\n 'azure.loadBalancer.probes.timeout':\n '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.',\n 'azure.loadBalancer.probes.unhealthyThreshold':\n 'Probe retry count. The back-end server is marked down after the consecutive probe failure count reaches the unhealthy threshold.',\n 'azure.loadBalancer.loadBalancingRules.idleTimeout':\n 'Keep a TCP or HTTP connection open without relying on clients to send keep-alive messages.',\n 'azure.loadBalancer.loadBalancingRules.sessionPersistence':\n '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.',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nexport const AZURE_IMAGE_IMAGE_READER = 'spinnaker.azure.image.reader';\nexport const name = AZURE_IMAGE_IMAGE_READER; // for backwards compatibility\nmodule(AZURE_IMAGE_IMAGE_READER, []).factory('azureImageReader', function () {\n function findImages(params) {\n return REST('/images/find')\n .query(params)\n .get()\n .then(\n function (results) {\n return results;\n },\n function () {\n return [];\n },\n );\n }\n\n function getImage(amiName, region, credentials) {\n return REST('/images')\n .path(credentials, region, amiName)\n .query({ provider: 'azure' })\n .get()\n .then(\n function (results) {\n return results && results.length ? results[0] : null;\n },\n function () {\n return null;\n },\n );\n }\n\n return {\n findImages: findImages,\n getImage: getImage,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE = 'spinnaker.azure.instanceType.service';\nexport const name = AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE; // for backwards compatibility\nmodule(AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE, []).factory('azureInstanceTypeService', [\n '$q',\n function ($q) {\n const B = {\n type: 'B-series',\n description:\n '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.',\n instanceTypes: [\n {\n name: 'Standard_B1ms',\n label: 'Standard_B1ms',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 4,\n },\n },\n {\n name: 'Standard_B1s',\n label: 'Standard_B1s',\n cpu: 1,\n memory: 1,\n storage: {\n type: 'SSD',\n count: 2,\n size: 2,\n },\n },\n {\n name: 'Standard_B2ms',\n label: 'Standard_B2ms',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_B2s',\n label: 'Standard_B2s',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 8,\n },\n },\n {\n name: 'Standard_B4ms',\n label: 'Standard_B4ms',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_B8ms',\n label: 'Standard_B8ms',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_B1ls',\n label: 'Standard_B1ls',\n cpu: 1,\n memory: 0.5,\n storage: {\n type: 'SSD',\n count: 2,\n size: 1,\n },\n },\n ],\n };\n\n const DSV3 = {\n type: 'Dsv3-series',\n description:\n 'The Dsv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2s_v3',\n label: 'Standard_D2s_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 16,\n },\n },\n {\n name: 'Standard_D4s_v3',\n label: 'Standard_D4s_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 32,\n },\n },\n {\n name: 'Standard_D8s_v3',\n label: 'Standard_D8s_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 64,\n },\n },\n {\n name: 'Standard_D16s_v3',\n label: 'Standard_D16s_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 128,\n },\n },\n {\n name: 'Standard_D32s_v3',\n label: 'Standard_D32s_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 256,\n },\n },\n {\n name: 'Standard_D64s_v3',\n label: 'Standard_D64s_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 512,\n },\n },\n ],\n };\n\n const DV3 = {\n type: 'Dv3-series',\n description:\n 'The Dv3-series sizes offer a combination of vCPU, memory, and temporary storage for most production workloads.',\n instanceTypes: [\n {\n name: 'Standard_D2_v3',\n label: 'Standard_D2_v3',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D4_v3',\n label: 'Standard_D4_v3',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D8_v3',\n label: 'Standard_D8_v3',\n cpu: 8,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D16_v3',\n label: 'Standard_D16_v3',\n cpu: 16,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D32_v3',\n label: 'Standard_D32_v3',\n cpu: 32,\n memory: 128,\n storage: {\n type: 'SSD',\n count: 32,\n size: 800,\n },\n },\n {\n name: 'Standard_D64_v3',\n label: 'Standard_D64_v3',\n cpu: 64,\n memory: 256,\n storage: {\n type: 'SSD',\n count: 32,\n size: 1600,\n },\n },\n ],\n };\n\n const DSV2 = {\n type: 'DSv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DS1_v2',\n label: 'Standard_DS1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 7,\n },\n },\n {\n name: 'Standard_DS2_v2',\n label: 'Standard_DS2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 14,\n },\n },\n {\n name: 'Standard_DS3_v2',\n label: 'Standard_DS3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 28,\n },\n },\n {\n name: 'Standard_DS4_v2',\n label: 'Standard_DS4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 56,\n },\n },\n {\n name: 'Standard_DS5_v2',\n label: 'Standard_DS5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 112,\n },\n },\n {\n name: 'Standard_DS11_v2',\n label: 'Standard_DS11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 28,\n },\n },\n {\n name: 'Standard_DS12_v2',\n label: 'Standard_DS12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 56,\n },\n },\n {\n name: 'Standard_DS13_v2',\n label: 'Standard_DS13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 112,\n },\n },\n {\n name: 'Standard_DS14_v2',\n label: 'Standard_DS14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 224,\n },\n },\n {\n name: 'Standard_DS15_v2',\n label: 'Standard_DS15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const DV2 = {\n type: 'Dv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_D1_v2',\n label: 'Standard_D1_v2',\n cpu: 1,\n memory: 3.5,\n storage: {\n type: 'SSD',\n count: 4,\n size: 50,\n },\n },\n {\n name: 'Standard_D2_v2',\n label: 'Standard_D2_v2',\n cpu: 2,\n memory: 7,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D3_v2',\n label: 'Standard_D3_v2',\n cpu: 4,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D4_v2',\n label: 'Standard_D4_v2',\n cpu: 8,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D5_v2',\n label: 'Standard_D5_v2',\n cpu: 16,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D11_v2',\n label: 'Standard_D11_v2',\n cpu: 2,\n memory: 14,\n storage: {\n type: 'SSD',\n count: 8,\n size: 100,\n },\n },\n {\n name: 'Standard_D12_v2',\n label: 'Standard_D12_v2',\n cpu: 4,\n memory: 28,\n storage: {\n type: 'SSD',\n count: 16,\n size: 200,\n },\n },\n {\n name: 'Standard_D13_v2',\n label: 'Standard_D13_v2',\n cpu: 8,\n memory: 56,\n storage: {\n type: 'SSD',\n count: 32,\n size: 400,\n },\n },\n {\n name: 'Standard_D14_v2',\n label: 'Standard_D14_v2',\n cpu: 16,\n memory: 112,\n storage: {\n type: 'SSD',\n count: 64,\n size: 800,\n },\n },\n {\n name: 'Standard_D15_v2',\n label: 'Standard_D15_v2',\n cpu: 20,\n memory: 140,\n storage: {\n type: 'SSD',\n count: 64,\n size: 280,\n },\n },\n ],\n };\n\n const AV2 = {\n type: 'Av2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_A1_v2',\n label: 'Standard_A1_v2',\n cpu: 1,\n memory: 2,\n storage: {\n type: 'SSD',\n count: 2,\n size: 10,\n },\n },\n {\n name: 'Standard_A2m_v2',\n label: 'Standard_A2m_v2',\n cpu: 2,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A2_v2',\n label: 'Standard_A2_v2',\n cpu: 2,\n memory: 4,\n storage: {\n type: 'SSD',\n count: 4,\n size: 20,\n },\n },\n {\n name: 'Standard_A4m_v2',\n label: 'Standard_A4m_v2',\n cpu: 4,\n memory: 32,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A4_v2',\n label: 'Standard_A4_v2',\n cpu: 4,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 8,\n size: 40,\n },\n },\n {\n name: 'Standard_A8m_v2',\n label: 'Standard_A8m_v2',\n cpu: 8,\n memory: 64,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n {\n name: 'Standard_A8_v2',\n label: 'Standard_A8_v2',\n cpu: 8,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 16,\n size: 80,\n },\n },\n ],\n };\n\n const DC = {\n type: 'DC-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_DC2s',\n label: 'Standard_DC2s',\n cpu: 2,\n memory: 8,\n storage: {\n type: 'SSD',\n count: 2,\n size: 100,\n },\n },\n {\n name: 'Standard_DC4s',\n label: 'Standard_DC4s',\n cpu: 4,\n memory: 16,\n storage: {\n type: 'SSD',\n count: 4,\n size: 200,\n },\n },\n ],\n };\n\n const FSV2 = {\n type: 'Fsv2-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F2s_v2',\n label: 'Standard_F2s_v2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F4s_v2',\n label: 'Standard_F4s_v2',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F8s_v2',\n label: 'Standard_F8s_v2',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F16s_v2',\n label: 'Standard_F16s_v2',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F32s_v2',\n label: 'Standard_F32s_v2',\n cpu: 32,\n memory: 64,\n storage: { type: 'SSD', count: 32, size: 256 },\n },\n {\n name: 'Standard_F64s_v2',\n label: 'Standard_F64s_v2',\n cpu: 64,\n memory: 128,\n storage: { type: 'SSD', count: 32, size: 512 },\n },\n {\n name: 'Standard_F72s_v2',\n label: 'Standard_F72s_v2',\n cpu: 72,\n memory: 144,\n storage: { type: 'SSD', count: 32, size: 576 },\n },\n ],\n };\n\n const FS = {\n type: 'Fs-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1s',\n label: 'Standard_F1s',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 4 },\n },\n {\n name: 'Standard_F2s',\n label: 'Standard_F2s',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 8 },\n },\n {\n name: 'Standard_F4s',\n label: 'Standard_F4s',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 16 },\n },\n {\n name: 'Standard_F8s',\n label: 'Standard_F8s',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 32 },\n },\n {\n name: 'Standard_F16s',\n label: 'Standard_F16s',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 64 },\n },\n ],\n };\n\n const F = {\n type: 'F-series',\n description: '',\n instanceTypes: [\n {\n name: 'Standard_F1',\n label: 'Standard_F1',\n cpu: 1,\n memory: 2,\n storage: { type: 'SSD', count: 4, size: 16 },\n },\n {\n name: 'Standard_F2',\n label: 'Standard_F2',\n cpu: 2,\n memory: 4,\n storage: { type: 'SSD', count: 8, size: 32 },\n },\n {\n name: 'Standard_F4',\n label: 'Standard_F4',\n cpu: 4,\n memory: 8,\n storage: { type: 'SSD', count: 16, size: 64 },\n },\n {\n name: 'Standard_F8',\n label: 'Standard_F8',\n cpu: 8,\n memory: 16,\n storage: { type: 'SSD', count: 32, size: 128 },\n },\n {\n name: 'Standard_F16',\n label: 'Standard_F16',\n cpu: 16,\n memory: 32,\n storage: { type: 'SSD', count: 64, size: 256 },\n },\n ],\n };\n\n const categories = [\n {\n type: 'general',\n label: 'General Purpose',\n description:\n 'Balanced CPU-to-memory ratio. Ideal for testing and development, small to medium databases, and low to medium traffic web servers.',\n families: [B, DSV3, DV3, DSV2, DV2, AV2, DC],\n icon: 'hdd',\n },\n {\n type: 'compute',\n label: 'Compute Optimized',\n description:\n 'High CPU-to-memory ratio. Good for medium traffic web servers, network appliances, batch processes, and application servers.',\n families: [FSV2, FS, F],\n icon: 'hdd',\n },\n {\n type: 'custom',\n label: 'Custom Type',\n description: 'Select the instance type below.',\n families: [],\n icon: 'asterisk',\n },\n ];\n\n function calculateStorage(type) {\n if (!type || !type.storage) {\n return 0;\n }\n return type.storage.count * type.storage.size;\n }\n\n function buildStats(category) {\n const stats = {\n cpu: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n memory: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n storage: {\n min: Number.MAX_VALUE,\n max: -Number.MAX_VALUE,\n },\n families: [],\n };\n\n if (category.families && category.families.length) {\n category.families.forEach(function (family) {\n stats.families.push(family.type);\n const cpuMin = _.minBy(family.instanceTypes, 'cpu').cpu || Number.MAX_VALUE;\n const cpuMax = _.maxBy(family.instanceTypes, 'cpu').cpu || -Number.MAX_VALUE;\n const memoryMin = _.minBy(family.instanceTypes, 'memory').memory || Number.MAX_VALUE;\n const memoryMax = _.maxBy(family.instanceTypes, 'memory').memory || -Number.MAX_VALUE;\n const storageMin = calculateStorage(_.minBy(family.instanceTypes, calculateStorage)) || Number.MAX_VALUE;\n const storageMax = calculateStorage(_.maxBy(family.instanceTypes, calculateStorage)) || -Number.MAX_VALUE;\n\n stats.cpu.min = Math.min(stats.cpu.min, cpuMin);\n stats.cpu.max = Math.max(stats.cpu.max, cpuMax);\n stats.memory.min = Math.min(stats.memory.min, memoryMin);\n stats.memory.max = Math.max(stats.memory.max, memoryMax);\n stats.storage.min = Math.min(stats.storage.min, storageMin);\n stats.storage.max = Math.max(stats.storage.max, storageMax);\n });\n }\n\n return stats;\n }\n\n function getCategories() {\n categories.map(function (category) {\n for (const family of category.families) {\n for (const inst of family.instanceTypes) {\n if (inst.costFactor == undefined) inst.costFactor = 0;\n }\n }\n category.stats = buildStats(category);\n });\n return $q.when(categories);\n }\n\n const getAllTypesByRegion = function getAllTypesByRegion() {\n return getCategories();\n };\n\n function getAvailableTypesForRegions(locationToInstanceTypesMap, selectedLocations) {\n // This function is only ever called with one location.\n const [location] = selectedLocations;\n return locationToInstanceTypesMap[location];\n }\n\n return {\n getCategories: getCategories,\n getAvailableTypesForRegions: getAvailableTypesForRegions,\n getAllTypesByRegion: getAllTypesByRegion,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n} from '@spinnaker/core';\n\nexport const AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.azure.instance.detail.controller';\nexport const name = AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'azureInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n '$q',\n function ($scope, $state, $uibModal, instance, app, $q) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('azure', 'instance.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\n\n function extractHealthMetrics(instance, latest) {\n // do not backfill on standalone instances\n if (app.isStandalone) {\n instance.health = latest.health;\n }\n\n instance.health = instance.health || [];\n const displayableMetrics = instance.health.filter(function (metric) {\n return metric.type !== 'Azure' || metric.state !== 'Unknown';\n });\n // backfill details where applicable\n if (latest.health) {\n displayableMetrics.forEach(function (metric) {\n const detailsMatch = latest.health.filter(function (latestHealth) {\n return latestHealth.type === metric.type;\n });\n if (detailsMatch.length) {\n _.defaults(metric, detailsMatch[0]);\n }\n });\n }\n $scope.healthMetrics = displayableMetrics;\n }\n\n function retrieveInstance() {\n const extraData = {};\n let instanceSummary, loadBalancers, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n account = instance.account;\n region = instance.region;\n } else {\n app.serverGroups.data.some(function (serverGroup) {\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = serverGroup.loadBalancers;\n account = serverGroup.account;\n region = serverGroup.region;\n vpcId = serverGroup.vpcId;\n extraData.serverGroup = serverGroup.name;\n extraData.vpcId = serverGroup.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a server group that is part of another app\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n if (!instanceSummary) {\n // perhaps it is in a disabled server group via a load balancer\n app.loadBalancers.data.some(function (loadBalancer) {\n return loadBalancer.serverGroups.some(function (serverGroup) {\n if (!serverGroup.isDisabled) {\n return false;\n }\n return serverGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n loadBalancers = [loadBalancer.name];\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\n });\n });\n }\n }\n }\n\n if (instanceSummary && account && region) {\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then(\n function (details) {\n $scope.state.loading = false;\n extractHealthMetrics(instanceSummary, details);\n $scope.instance = _.defaults(details, instanceSummary);\n $scope.instance.account = account;\n $scope.instance.region = region;\n $scope.instance.vpcId = vpcId;\n $scope.instance.loadBalancers = loadBalancers;\n const discoveryMetric = _.find($scope.healthMetrics, function (metric) {\n return metric.type === 'Discovery';\n });\n if (discoveryMetric && discoveryMetric.vipAddress) {\n const vipList = discoveryMetric.vipAddress;\n $scope.instance.vipAddress = vipList.includes(',') ? vipList.split(',') : [vipList];\n }\n $scope.baseIpAddress = details.publicDnsName || details.privateIpAddress;\n },\n function () {\n // When an instance is first starting up, we may not have the details cached in oort yet, but we still\n // want to let the user see what details we have\n $scope.state.loading = false;\n $state.go('^');\n },\n );\n }\n\n if (!instanceSummary) {\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.loading = false;\n }\n\n return $q.when(null);\n }\n\n this.canDeregisterFromLoadBalancer = function () {\n return $scope.instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n };\n\n this.canRegisterWithLoadBalancer = function () {\n const instance = $scope.instance;\n if (!instance.loadBalancers || !instance.loadBalancers.length) {\n return false;\n }\n const outOfService = instance.health.some(function (health) {\n return health.type === 'LoadBalancer' && health.state === 'OutOfService';\n });\n const hasLoadBalancerHealth = instance.health.some(function (health) {\n return health.type === 'LoadBalancer';\n });\n return outOfService || !hasLoadBalancerHealth;\n };\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const discoveryHealth = instance.health.filter(function (health) {\n return health.type === 'Discovery';\n });\n return discoveryHealth.length ? discoveryHealth[0].state === 'OutOfService' : false;\n };\n\n this.terminateInstance = function terminateInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId,\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + '?',\n buttonText: 'Terminate ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.terminateInstanceAndShrinkServerGroup = function terminateInstanceAndShrinkServerGroup() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Terminating ' + instance.instanceId + ' and shrinking server group',\n onTaskComplete: function () {\n if ($state.includes('**.instanceDetails', { instanceId: instance.instanceId })) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return InstanceWriter.terminateInstanceAndShrinkServerGroup(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup + '?',\n buttonText: 'Terminate ' + instance.instanceId + ' and shrink ' + instance.serverGroup,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rebootInstance = function rebootInstance() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Rebooting ' + instance.instanceId,\n };\n\n const submitMethod = function () {\n return InstanceWriter.rebootInstance(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really reboot ' + instance.instanceId + '?',\n buttonText: 'Reboot ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.registerInstanceWithLoadBalancer = function registerInstanceWithLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Registering ' + instance.instanceId + ' with ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.registerInstanceWithLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really register ' + instance.instanceId + ' with ' + loadBalancerNames + '?',\n buttonText: 'Register ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.deregisterInstanceFromLoadBalancer = function deregisterInstanceFromLoadBalancer() {\n const instance = $scope.instance;\n const loadBalancerNames = instance.loadBalancers.join(' and ');\n\n const taskMonitor = {\n application: app,\n title: 'Deregistering ' + instance.instanceId + ' from ' + loadBalancerNames,\n };\n\n const submitMethod = function () {\n return InstanceWriter.deregisterInstanceFromLoadBalancer(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really deregister ' + instance.instanceId + ' from ' + loadBalancerNames + '?',\n buttonText: 'Deregister ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.enableInstanceInDiscovery = function enableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.enableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Enable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.disableInstanceInDiscovery = function disableInstanceInDiscovery() {\n const instance = $scope.instance;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + instance.instanceId + ' in discovery',\n };\n\n const submitMethod = function () {\n return InstanceWriter.disableInstanceInDiscovery(instance, app);\n };\n\n ConfirmationModalService.confirm({\n header: 'Really disable ' + instance.instanceId + ' in discovery?',\n buttonText: 'Disable ' + instance.instanceId,\n account: instance.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.hasHealthState = function hasHealthState(healthProviderType, state) {\n const instance = $scope.instance;\n return instance.health.some(function (health) {\n return health.type === healthProviderType && health.state === state;\n });\n };\n\n const initialize = app.isStandalone\n ? retrieveInstance()\n : $q.all([app.serverGroups.ready(), app.loadBalancers.ready()]).then(retrieveInstance);\n\n initialize.then(() => {\n // Two things to look out for here:\n // 1. If the retrieveInstance call completes *after* the user has navigated away from the view, there\n // is no point in subscribing to the refresh\n // 2. If this is a standalone instance, there is no application that will refresh\n if (!$scope.$$destroyed && !app.isStandalone) {\n app.serverGroups.onRefresh($scope, retrieveInstance);\n }\n });\n\n $scope.account = instance.account;\n },\n ],\n);\n","import React from 'react';\nimport { Button, Modal } from 'react-bootstrap';\n\nimport type { ILoadBalancerModalProps } from '@spinnaker/core';\nimport { CloudProviderRegistry, ModalClose, ModalInjector, noop, ReactModal } from '@spinnaker/core';\n\nimport type { IAzureLoadBalancer } from '../../utility';\nimport { AzureLoadBalancerTypes } from '../../utility';\n\nexport interface IAzureLoadBalancerChoiceModalState {\n choices: IAzureLoadBalancer[];\n selectedChoice: IAzureLoadBalancer;\n}\n\nexport class AzureLoadBalancerChoiceModal extends React.Component<\n ILoadBalancerModalProps,\n IAzureLoadBalancerChoiceModalState\n> {\n public static defaultProps: Partial<ILoadBalancerModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: ILoadBalancerModalProps): Promise<void> {\n return ReactModal.show(AzureLoadBalancerChoiceModal, {\n ...props,\n className: 'create-pipeline-modal-overflow-visible',\n });\n }\n\n constructor(props: ILoadBalancerModalProps) {\n super(props);\n this.state = {\n choices: AzureLoadBalancerTypes,\n selectedChoice: AzureLoadBalancerTypes[0],\n };\n }\n\n public choiceSelected(choice: IAzureLoadBalancer): void {\n this.setState({ selectedChoice: choice });\n }\n\n private choose = (): void => {\n this.close();\n const provider: any = CloudProviderRegistry.getValue('azure', 'loadBalancer');\n ModalInjector.modalService\n .open({\n templateUrl: provider.createLoadBalancerTemplateUrl,\n windowClass: 'modal-z-index',\n controller: `${provider.createLoadBalancerController} as ctrl`,\n size: 'lg',\n resolve: {\n application: () => this.props.app,\n loadBalancer: (): any => null,\n isNew: () => true,\n forPipelineConfig: () => false,\n loadBalancerType: () => this.state.selectedChoice,\n },\n })\n .result.catch(() => {});\n };\n\n public close = (reason?: any): void => {\n this.props.dismissModal(reason);\n };\n\n public render() {\n const { choices, selectedChoice } = this.state;\n\n return (\n <>\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Select Type of Load Balancer</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"modal-body\">\n <div className=\"card-choices\">\n {choices.map((choice) => (\n <div\n key={choice.type}\n className={`card ${selectedChoice === choice ? 'active' : ''}`}\n onClick={() => this.choiceSelected(choice)}\n >\n <h3 className=\"load-balancer-label\">{choice.type}</h3>\n <div>{choice.description}</div>\n </div>\n ))}\n </div>\n <div className=\"load-balancer-description\" />\n </div>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={this.choose}>\n Configure Load Balancer <span className=\"glyphicon glyphicon-chevron-right\" />\n </Button>\n </Modal.Footer>\n </>\n );\n }\n}\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IAzureProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n };\n}\n\nexport const AzureProviderSettings: IAzureProviderSettings = (SETTINGS.providers.azure as IAzureProviderSettings) || {\n defaults: {},\n};\nif (AzureProviderSettings) {\n AzureProviderSettings.resetToOriginal = SETTINGS.resetProvider('azure');\n}\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AzureProviderSettings } from '../azure.settings';\n\nexport const AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER = 'spinnaker.azure.loadBalancer.transformer';\nexport const name = AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER, []).factory('azureLoadBalancerTransformer', [\n '$q',\n function ($q) {\n function normalizeLoadBalancer(loadBalancer) {\n loadBalancer.serverGroups.forEach(function (serverGroup) {\n serverGroup.account = loadBalancer.account;\n serverGroup.region = loadBalancer.region;\n\n if (serverGroup.detachedInstances) {\n serverGroup.detachedInstances = serverGroup.detachedInstances.map(function (instanceId) {\n return { id: instanceId };\n });\n serverGroup.instances = serverGroup.instances.concat(serverGroup.detachedInstances);\n } else {\n serverGroup.detachedInstances = [];\n }\n });\n const activeServerGroups = _.filter(loadBalancer.serverGroups, { isDisabled: false });\n loadBalancer.provider = loadBalancer.type;\n loadBalancer.instances = _.chain(activeServerGroups).map('instances').flatten().value();\n loadBalancer.detachedInstances = _.chain(activeServerGroups).map('detachedInstances').flatten().value();\n return $q.resolve(loadBalancer);\n }\n\n function convertLoadBalancerForEditing(loadBalancer) {\n const toEdit = {\n region: loadBalancer.region,\n credentials: loadBalancer.account,\n name: loadBalancer.name,\n stack: loadBalancer.stack,\n detail: loadBalancer.detail,\n vnet: loadBalancer.vnet,\n subnet: loadBalancer.subnet,\n probes: [],\n loadBalancingRules: [],\n };\n\n if (loadBalancer.elb) {\n const elb = loadBalancer.elb;\n\n toEdit.securityGroups = elb.securityGroups;\n toEdit.vnet = elb.vnet;\n\n if (elb.loadBalancingRules) {\n toEdit.loadBalancingRules = elb.loadBalancingRules;\n }\n\n toEdit.probes = elb.probes;\n if (elb.dnsName && elb.dnsName !== 'dns-not-found') {\n toEdit.dnsName = elb.dnsName.split('.')[0];\n }\n }\n return toEdit;\n }\n\n function constructNewLoadBalancerTemplate(application) {\n const defaultCredentials = application.defaultCredentials.azure || AzureProviderSettings.defaults.account;\n const defaultRegion = application.defaultRegions.azure || AzureProviderSettings.defaults.region;\n return {\n stack: '',\n detail: 'frontend',\n credentials: defaultCredentials,\n region: defaultRegion,\n cloudProvider: 'azure',\n vnet: null,\n subnet: null,\n probes: [\n {\n probeName: '',\n probeProtocol: 'HTTP',\n probePort: '80',\n probePath: '/',\n probeInterval: 30,\n unhealthyThreshold: 8,\n timeout: 120,\n },\n ],\n securityGroups: [],\n loadBalancingRules: [\n {\n ruleName: '',\n protocol: 'HTTP',\n externalPort: 80,\n backendPort: 80,\n probeName: '',\n persistence: 'None',\n idleTimeout: 4,\n },\n ],\n sku: 'Standard_v2',\n };\n }\n\n return {\n normalizeLoadBalancer: normalizeLoadBalancer,\n convertLoadBalancerForEditing: convertLoadBalancerForEditing,\n constructNewLoadBalancerTemplate: constructNewLoadBalancerTemplate,\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, LoadBalancerWriter, NameUtils, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from '../loadBalancer.transformer';\n\nexport const AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER =\n 'spinnaker.azure.loadBalancer.create.controller';\nexport const name = AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER; // for backwards compatibility\nmodule(AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n]).controller('azureCreateLoadBalancerCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n 'azureLoadBalancerTransformer',\n 'application',\n 'loadBalancer',\n 'isNew',\n 'loadBalancerType',\n function (\n $scope,\n $uibModalInstance,\n $state,\n azureLoadBalancerTransformer,\n application,\n loadBalancer,\n isNew,\n loadBalancerType,\n ) {\n const ctrl = this;\n\n $scope.regions = [];\n\n $scope.pages = {\n location: require('./createLoadBalancerProperties.html'),\n listeners: require('./listeners.html'),\n healthCheck: require('./healthCheck.html'),\n advancedSettings: require('./advancedSettings.html'),\n };\n\n $scope.isNew = isNew;\n $scope.loadBalancerType = loadBalancerType.type;\n $scope.isALB = loadBalancerType.type === 'Azure Load Balancer';\n\n $scope.state = {\n accountsLoaded: false,\n submitting: false,\n };\n\n $scope.validSkus = ['Standard_v2', 'Standard_Small'];\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.loadBalancer.name,\n accountId: $scope.loadBalancer.credentials,\n region: $scope.loadBalancer.region,\n provider: 'azure',\n };\n\n if (!$state.includes('**.loadBalancerDetails')) {\n $state.go('.loadBalancerDetails', newStateParams);\n } else {\n $state.go('^.loadBalancerDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.loadBalancers.refresh();\n application.loadBalancers.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: (isNew ? 'Creating ' : 'Updating ') + 'your load balancer',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function initializeCreateMode() {\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accountsLoaded = true;\n ctrl.accountUpdated();\n });\n }\n\n function initializeController() {\n if (loadBalancer) {\n $scope.loadBalancer = azureLoadBalancerTransformer.convertLoadBalancerForEditing(loadBalancer);\n if (isNew) {\n const nameParts = NameUtils.parseLoadBalancerName($scope.loadBalancer.name);\n $scope.loadBalancer.stack = nameParts.stack;\n $scope.loadBalancer.detail = nameParts.freeFormDetails;\n delete $scope.loadBalancer.name;\n }\n } else {\n $scope.loadBalancer = azureLoadBalancerTransformer.constructNewLoadBalancerTemplate(application);\n }\n if (isNew) {\n updateLoadBalancerNames();\n initializeCreateMode();\n }\n }\n\n function updateLoadBalancerNames() {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n\n const accountLoadBalancersByRegion = {};\n application\n .getDataSource('loadBalancers')\n .refresh(true)\n .then(() => {\n application.getDataSource('loadBalancers').data.forEach((loadBalancer) => {\n if (loadBalancer.account === account) {\n accountLoadBalancersByRegion[loadBalancer.region] =\n accountLoadBalancersByRegion[loadBalancer.region] || [];\n accountLoadBalancersByRegion[loadBalancer.region].push(loadBalancer.name);\n }\n });\n\n $scope.existingLoadBalancerNames = accountLoadBalancersByRegion[region] || [];\n });\n }\n\n initializeController();\n\n this.requiresHealthCheckPath = function () {\n return (\n $scope.loadBalancer.probes[0].probeProtocol && $scope.loadBalancer.probes[0].probeProtocol.indexOf('HTTP') === 0\n );\n };\n\n this.updateName = function () {\n $scope.loadBalancer.name = this.getName();\n };\n\n this.getName = function () {\n const elb = $scope.loadBalancer;\n const elbName = [application.name, elb.stack || '', elb.detail || ''].join('-');\n return _.trimEnd(elbName, '-');\n };\n\n this.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.loadBalancer.credentials).then(function (regions) {\n $scope.regions = regions;\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n updateLoadBalancerNames();\n ctrl.updateName();\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.loadBalancer.credentials;\n const region = $scope.loadBalancer.region;\n $scope.loadBalancer.selectedVnet = null;\n $scope.loadBalancer.vnet = null;\n $scope.loadBalancer.vnetResourceGroup = null;\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.loadBalancer.vnet = item.name;\n $scope.loadBalancer.vnetResourceGroup = item.resourceGroup;\n $scope.loadBalancer.selectedSubnet = null;\n $scope.loadBalancer.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n if (device && device.type !== 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n ctrl.selectedSubnets.push(subnet);\n }\n });\n }\n };\n\n this.removeListener = function (index) {\n $scope.loadBalancer.loadBalancingRules.splice(index, 1);\n };\n\n this.addListener = function () {\n $scope.loadBalancer.loadBalancingRules.push({ protocol: 'HTTP' });\n };\n\n this.submit = function () {\n const descriptor = isNew ? 'Create' : 'Update';\n\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n clusterName: $scope.loadBalancer.clusterName,\n resourceGroupName: $scope.loadBalancer.clusterName,\n loadBalancerName: $scope.loadBalancer.name,\n };\n\n if ($scope.loadBalancer.selectedVnet) {\n $scope.loadBalancer.vnet = $scope.loadBalancer.selectedVnet.name;\n $scope.loadBalancer.vnetResourceGroup = $scope.loadBalancer.selectedVnet.resourceGroup;\n }\n\n if ($scope.loadBalancer.selectedSubnet) {\n $scope.loadBalancer.subnet = $scope.loadBalancer.selectedSubnet.name;\n }\n\n const name = $scope.loadBalancer.clusterName || $scope.loadBalancer.name;\n const probeName = name + '-probe';\n const ruleNameBase = name + '-rule';\n $scope.loadBalancer.type = 'upsertLoadBalancer';\n $scope.loadBalancer.loadBalancerType = $scope.loadBalancerType;\n if (!$scope.loadBalancer.vnet && !$scope.loadBalancer.subnetType) {\n $scope.loadBalancer.securityGroups = null;\n }\n\n $scope.loadBalancer.probes[0].probeName = probeName;\n\n $scope.loadBalancer.loadBalancingRules.forEach((rule, index) => {\n rule.ruleName = ruleNameBase + index;\n rule.probeName = probeName;\n });\n\n if ($scope.loadBalancer.probes[0].probeProtocol === 'TCP') {\n $scope.loadBalancer.probes[0].probePath = undefined;\n }\n\n return LoadBalancerWriter.upsertLoadBalancer($scope.loadBalancer, application, descriptor, params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n LOAD_BALANCER_READ_SERVICE,\n LoadBalancerWriter,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\n\nexport const AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER =\n 'spinnaker.azure.loadBalancer.details.controller';\nexport const name = AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER, [\n ANGULAR_UI_BOOTSTRAP,\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n LOAD_BALANCER_READ_SERVICE,\n ])\n .controller('azureLoadBalancerDetailsCtrl', [\n '$scope',\n '$state',\n '$exceptionHandler',\n '$uibModal',\n 'loadBalancer',\n 'app',\n 'securityGroupReader',\n 'loadBalancerReader',\n '$q',\n function (\n $scope,\n $state,\n $exceptionHandler,\n $uibModal,\n loadBalancer,\n app,\n securityGroupReader,\n loadBalancerReader,\n $q,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n function extractLoadBalancer() {\n $scope.loadBalancer = app.loadBalancers.data.filter(function (test) {\n return (\n test.name === loadBalancer.name &&\n test.region === loadBalancer.region &&\n test.account === loadBalancer.accountId\n );\n })[0];\n\n if ($scope.loadBalancer) {\n const detailsLoader = loadBalancerReader.getLoadBalancerDetails(\n $scope.loadBalancer.provider,\n loadBalancer.accountId,\n loadBalancer.region,\n loadBalancer.name,\n );\n\n return detailsLoader.then(function (details) {\n $scope.state.loading = false;\n const securityGroups = [];\n\n const filtered = details.filter(function (test) {\n return test.name === loadBalancer.name;\n });\n\n if (filtered.length) {\n $scope.loadBalancer.elb = filtered[0];\n\n $scope.loadBalancer.account = loadBalancer.accountId;\n\n if ($scope.loadBalancer.elb.securityGroups) {\n $scope.loadBalancer.elb.securityGroups.forEach(function (securityGroupId) {\n const match = securityGroupReader.getApplicationSecurityGroup(\n app,\n loadBalancer.accountId,\n loadBalancer.region,\n securityGroupId,\n );\n if (match) {\n securityGroups.push(match);\n }\n });\n $scope.securityGroups = _.sortBy(securityGroups, 'name');\n }\n\n if ($scope.loadBalancer.loadBalancerType && $scope.loadBalancer.loadBalancerType.includes('_')) {\n const type = $scope.loadBalancer.loadBalancerType;\n $scope.loadBalancer.loadBalancerType = type\n .split('_')\n .map((s) => {\n const ss = s.toLowerCase();\n return ss.substring(0, 1).toUpperCase() + ss.substring(1);\n })\n .join(' ');\n }\n }\n });\n }\n if (!$scope.loadBalancer) {\n $state.go('^');\n }\n\n return $q.when(null);\n }\n\n app\n .ready()\n .then(extractLoadBalancer)\n .then(() => {\n // If the user navigates away from the view before the initial extractLoadBalancer call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.onRefresh($scope, extractLoadBalancer);\n }\n });\n\n this.editLoadBalancer = function editLoadBalancer() {\n $uibModal.open({\n templateUrl: require('../configure/editLoadBalancer.html'),\n controller: 'azureCreateLoadBalancerCtrl as ctrl',\n size: 'lg',\n resolve: {\n application: function () {\n return app;\n },\n loadBalancer: function () {\n return angular.copy($scope.loadBalancer);\n },\n isNew: function () {\n return false;\n },\n loadBalancerType: function () {\n return { type: $scope.loadBalancer.loadBalancerType };\n },\n },\n });\n };\n\n this.deleteLoadBalancer = function deleteLoadBalancer() {\n if ($scope.loadBalancer.instances && $scope.loadBalancer.instances.length) {\n return;\n }\n\n const taskMonitor = {\n application: app,\n title: 'Deleting ' + loadBalancer.name,\n };\n\n const command = {\n cloudProvider: 'azure',\n loadBalancerName: $scope.loadBalancer.name,\n loadBalancerType: $scope.loadBalancer.loadBalancerType,\n credentials: $scope.loadBalancer.account,\n region: loadBalancer.region,\n appName: app.name,\n };\n\n const submitMethod = () => LoadBalancerWriter.deleteLoadBalancer(command, app);\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + loadBalancer.name + '?',\n buttonText: 'Delete ' + loadBalancer.name,\n account: loadBalancer.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n },\n ]);\n","export default \"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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\"","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { SETTINGS } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER =\n 'spinnaker.azure.pipeline.stage.bake.executionDetails.controller';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER, [UIROUTER_ANGULARJS]).controller(\n 'azureBakeExecutionDetailsCtrl',\n [\n '$scope',\n '$stateParams',\n 'executionDetailsSectionService',\n '$interpolate',\n function ($scope, $stateParams, executionDetailsSectionService, $interpolate) {\n $scope.configSections = ['bakeConfig', 'taskStatus'];\n\n const initialized = () => {\n $scope.detailsSection = $stateParams.details;\n $scope.provider = $scope.stage.context.cloudProviderType || 'azure';\n $scope.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' &&\n SETTINGS.feature.roscoSelector($scope.stage.context));\n $scope.bakeryDetailUrl = $interpolate(\n $scope.roscoMode && SETTINGS.roscoDetailUrl ? SETTINGS.roscoDetailUrl : SETTINGS.bakeryDetailUrl,\n );\n };\n\n const initialize = () => executionDetailsSectionService.synchronizeSection($scope.configSections, initialized);\n\n initialize();\n\n $scope.$on('$stateChangeSuccess', initialize);\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER = 'spinnaker.azure.serverGroup.transformer';\nexport const name = AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER, []).factory('azureServerGroupTransformer', function () {\n function normalizeServerGroup(serverGroup) {\n return serverGroup;\n }\n\n function parseCustomScriptsSettings(command, configuration) {\n /*\n At the first time this wizard pops up, the type of command.customScriptsSettings.fileUris is String. As for the following\n occurrences of its pop up with this field unchanged, its type becomes an array. So here differentiate the two scenarios\n to assign the correct value to model.\n */\n if (Array.isArray(command.customScriptsSettings.fileUris)) {\n configuration.customScriptsSettings.fileUris = command.customScriptsSettings.fileUris;\n } else {\n const fileUrisTemp = command.customScriptsSettings.fileUris;\n if (fileUrisTemp.includes(',')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(',');\n } else if (fileUrisTemp.includes(';')) {\n configuration.customScriptsSettings.fileUris = fileUrisTemp.split(';');\n } else {\n configuration.customScriptsSettings.fileUris = [fileUrisTemp];\n }\n\n configuration.customScriptsSettings.fileUris.forEach(function (v, index) {\n configuration.customScriptsSettings.fileUris[index] = v.trim();\n });\n }\n }\n\n function convertServerGroupCommandToDeployConfiguration(command) {\n let tempImage;\n\n if (command.viewState.mode === 'editPipeline' || command.viewState.mode === 'createPipeline') {\n tempImage = {\n imageName: '',\n isCustom: 'true',\n publisher: '',\n offer: '',\n sku: '',\n version: '',\n region: command.region,\n uri: '',\n ostype: '',\n };\n } else {\n tempImage = command.selectedImage;\n }\n\n const configuration = {\n name: command.application,\n cloudProvider: command.selectedProvider,\n application: command.application,\n stack: command.stack,\n strategy: command.strategy,\n rollback: {\n onFailure: command.rollback ? command.rollback.onFailure : null,\n },\n scaleDown: command.scaleDown,\n maxRemainingAsgs: command.maxRemainingAsgs,\n delayBeforeDisableSec: command.delayBeforeDisableSec,\n delayBeforeScaleDownSec: command.delayBeforeScaleDownSec,\n allowDeleteActive: command.strategy === 'redblack' ? true : null,\n allowScaleDownActive: command.strategy === 'redblack' ? true : null,\n detail: command.freeFormDetails,\n freeFormDetails: command.freeFormDetails,\n healthSettings: command.healthSettings,\n image: command.image,\n account: command.credentials,\n selectedProvider: 'azure',\n vnet: command.vnet,\n vnetResourceGroup: command.selectedVnet.resourceGroup,\n subnet: command.subnet,\n useSourceCapacity: false,\n capacity: {\n min: command.sku.capacity,\n max: command.sku.capacity,\n },\n credentials: command.credentials,\n region: command.region,\n securityGroupName: command.securityGroupName,\n loadBalancerName: command.loadBalancerName,\n loadBalancerType: command.loadBalancerType,\n user: '[anonymous]',\n upgradePolicy: 'Manual',\n type: 'createServerGroup',\n sku: {\n name: 'Standard_DS1_v2',\n tier: 'Standard',\n capacity: command.sku.capacity,\n },\n instanceTags: command.instanceTags,\n dataDisks: command.dataDisks,\n userAssignedIdentities: command.userAssignedIdentities,\n viewState: command.viewState,\n osConfig: {\n customData: command.osConfig ? command.osConfig.customData : null,\n },\n customScriptsSettings: {\n fileUris: null,\n commandToExecute: '',\n },\n zonesEnabled: command.zonesEnabled,\n zones: command.zonesEnabled ? command.zones : [],\n enableInboundNAT: command.enableInboundNAT,\n };\n\n if (command.image == null || command.image.isCustom == false) {\n configuration.image = tempImage;\n }\n\n if (typeof command.stack !== 'undefined') {\n configuration.name = configuration.name + '-' + command.stack;\n }\n if (typeof command.freeFormDetails !== 'undefined') {\n configuration.name = configuration.name + '-' + command.freeFormDetails;\n }\n\n if (typeof command.customScriptsSettings !== 'undefined') {\n configuration.customScriptsSettings.commandToExecute = command.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(command.customScriptsSettings.fileUris)) {\n parseCustomScriptsSettings(command, configuration);\n }\n }\n\n if (command.instanceType) {\n const vmsku = command.instanceType;\n configuration.instanceType = command.instanceType;\n configuration.sku.name = vmsku;\n configuration.sku.tier = vmsku.substring(0, vmsku.indexOf('_'));\n }\n\n // Default to an empty list of health provider names for now.\n configuration.interestingHealthProviderNames = [];\n\n return configuration;\n }\n\n return {\n convertServerGroupCommandToDeployConfiguration: convertServerGroupCommandToDeployConfiguration,\n normalizeServerGroup: normalizeServerGroup,\n parseCustomScriptsSettings: parseCustomScriptsSettings,\n };\n});\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { NameUtils } from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.azure.serverGroupCommandBuilder.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n ])\n .factory('azureServerGroupCommandBuilder', [\n '$q',\n 'azureImageReader',\n 'azureServerGroupTransformer',\n function ($q, azureImageReader, azureServerGroupTransformer) {\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n\n const defaultCredentials = defaults.account || application.defaultCredentials.azure;\n const defaultRegion = defaults.region || application.defaultRegions.azure;\n\n return azureImageReader.findImages({ provider: 'azure' }).then(function (images) {\n return {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n images,\n loadBalancers: [],\n selectedVnetSubnets: [],\n strategy: '',\n sku: {\n capacity: 1,\n },\n zonesEnabled: false,\n zones: [],\n instanceTags: {},\n dataDisks: [],\n selectedProvider: 'azure',\n viewState: {\n instanceProfile: 'custom',\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n loadBalancersConfigured: false,\n networkSettingsConfigured: false,\n securityGroupsConfigured: false,\n },\n enableInboundNAT: false,\n };\n });\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline() {\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n },\n });\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode) {\n mode = mode || 'clone';\n\n const serverGroupName = NameUtils.parseServerGroupName(serverGroup.name);\n\n const command = {\n application: application.name,\n strategy: '',\n stack: serverGroupName.stack,\n freeFormDetails: serverGroupName.freeFormDetails,\n credentials: serverGroup.account,\n loadBalancers: serverGroup.loadBalancers,\n selectedSubnets: serverGroup.selectedVnetSubnets,\n selectedVnet: serverGroup.selectedVnet,\n securityGroups: serverGroup.securityGroups,\n loadBalancerName: serverGroup.loadBalancerName,\n loadBalancerType: serverGroup.loadBalancerType,\n securityGroupName: serverGroup.securityGroupName,\n region: serverGroup.region,\n vnet: serverGroup.vnet,\n vnetResourceGroup: serverGroup.vnetResourceGroup,\n subnet: serverGroup.subnet,\n zones: serverGroup.zones,\n zonesEnabled: serverGroup.zones && serverGroup.zones.length > 0,\n instanceTags: {},\n dataDisks: serverGroup.dataDisks,\n sku: serverGroup.sku,\n capacity: {\n min: serverGroup.capacity.min,\n max: serverGroup.capacity.max,\n desired: serverGroup.capacity.desired,\n },\n tags: [],\n instanceType: serverGroup.sku.name,\n selectedProvider: 'azure',\n source: {\n account: serverGroup.account,\n region: serverGroup.region,\n serverGroupName: serverGroup.name,\n asgName: serverGroup.name,\n },\n viewState: {\n allImageSelection: null,\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: false,\n listImplicitSecurityGroups: false,\n mode: mode,\n disableStrategySelection: true,\n },\n enableInboundNAT: serverGroup.enableInboundNAT,\n };\n\n if (typeof serverGroup.customScriptsSettings !== 'undefined') {\n command.customScriptsSettings = {};\n command.customScriptsSettings.commandToExecute = serverGroup.customScriptsSettings.commandToExecute;\n if (!_.isEmpty(serverGroup.customScriptsSettings.fileUris)) {\n azureServerGroupTransformer.parseCustomScriptsSettings(serverGroup, command);\n }\n }\n\n return $q.when(command);\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = pipelineCluster.region;\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n const viewState = {\n disableImageSelection: true,\n useSimpleCapacity: true,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n instanceProfile: originalCluster.viewState.instanceProfile,\n instanceTypeDetails: originalCluster.viewState.instanceTypeDetails,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n viewState: viewState,\n };\n if (originalCluster.viewState.instanceTypeDetails) {\n viewOverrides.instanceType = originalCluster.viewState.instanceTypeDetails.name;\n }\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n const extendedCommand = angular.extend({}, command, pipelineCluster, viewOverrides);\n\n return extendedCommand;\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n AuthenticationService,\n BakeExecutionLabel,\n BakeryReader,\n PipelineTemplates,\n Registry,\n SETTINGS,\n} from '@spinnaker/core';\n\nimport { AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER } from './bakeExecutionDetails.controller';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../../image/image.reader';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './../../../serverGroup/configure/serverGroupCommandBuilder.service';\n\nexport const AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE = 'spinnaker.azure.pipeline.stage.bakeStage';\nexport const name = AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE, [\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_PIPELINE_STAGES_BAKE_BAKEEXECUTIONDETAILS_CONTROLLER,\n])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'bake',\n cloudProvider: 'azure',\n label: 'Bake',\n description: 'Bakes an image',\n templateUrl: require('./bakeStage.html'),\n executionDetailsUrl: require('./bakeExecutionDetails.html'),\n executionLabelComponent: BakeExecutionLabel,\n extraLabelLines: (stage) => {\n return stage.masterStage.context.allPreviouslyBaked || stage.masterStage.context.somePreviouslyBaked ? 1 : 0;\n },\n supportsCustomTimeout: true,\n validators: [\n { type: 'requiredField', fieldName: 'package' },\n { type: 'requiredField', fieldName: 'regions' },\n {\n type: 'upstreamVersionProvided',\n checkParentTriggers: true,\n getMessage: (labels) =>\n 'Bake stages should always have a stage or trigger preceding them that provides version information: ' +\n '<ul>' +\n labels.map((label) => `<li>${label}</li>`).join('') +\n '</ul>' +\n 'Otherwise, Spinnaker will bake and deploy the most-recently built package.',\n },\n ],\n restartable: true,\n });\n })\n .controller('azureBakeStageCtrl', [\n '$scope',\n '$q',\n 'azureImageReader',\n '$uibModal',\n function ($scope, $q, azureImageReader, $uibModal) {\n $scope.stage.extendedAttributes = $scope.stage.extendedAttributes || {};\n $scope.stage.regions = $scope.stage.regions || [];\n\n if (!$scope.stage.user) {\n $scope.stage.user = AuthenticationService.getAuthenticatedUser().name;\n }\n\n $scope.viewState = {\n loading: true,\n };\n\n function initialize() {\n $q.all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n BakeryReader.getRegions('azure'),\n BakeryReader.getBaseOsOptions('azure'),\n BakeryReader.getBaseLabelOptions(),\n ]).then(function ([credentialsKeyedByAccount, regions, baseOsOptions, baseLabelOptions]) {\n $scope.accounts = Object.keys(credentialsKeyedByAccount);\n $scope.regions = regions;\n if ($scope.regions.length === 1) {\n $scope.stage.region = $scope.regions[0];\n } else if (!$scope.regions.includes($scope.stage.region)) {\n delete $scope.stage.region;\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n if (!$scope.stage.regions.length && $scope.application.defaultRegions.azure) {\n $scope.stage.regions.push($scope.application.defaultRegions.azure);\n }\n $scope.baseOsOptions = baseOsOptions.baseImages;\n\n $scope.baseLabelOptions = baseLabelOptions;\n $scope.osTypeOptions = ['linux', 'windows'];\n $scope.packageTypeOptions = ['DEB', 'RPM'];\n\n $scope.viewState.roscoMode =\n SETTINGS.feature.roscoMode ||\n (typeof SETTINGS.feature.roscoSelector === 'function' && SETTINGS.feature.roscoSelector($scope.stage));\n $scope.showAdvancedOptions = showAdvanced();\n $scope.viewState.loading = false;\n\n if ($scope.stage.managedImage != null) {\n $scope.managedImagesWasChosen = true;\n setManagedImages();\n }\n $scope.defaultImagesWasChosen = $scope.stage.baseOs != null;\n $scope.customImagesWasChosen = $scope.stage.publisher != null;\n });\n }\n\n function stageUpdated() {\n deleteEmptyProperties();\n // Since the selector computes using stage as an input, it needs to be able to recompute roscoMode on updates\n if (typeof SETTINGS.feature.roscoSelector === 'function') {\n $scope.viewState.roscoMode = SETTINGS.feature.roscoSelector($scope.stage);\n }\n }\n\n function showAdvanced() {\n const stg = $scope.stage;\n return !!(\n stg.templateFileName ||\n (stg.extendedAttributes && _.size(stg.extendedAttributes) > 0) ||\n stg.varFileName\n );\n }\n\n function deleteEmptyProperties() {\n _.forOwn($scope.stage, function (val, key) {\n if (val === '') {\n delete $scope.stage[key];\n }\n });\n }\n\n function setManagedImages() {\n azureImageReader\n .findImages({ provider: 'azure', managedImages: true, account: $scope.stage.account })\n .then(function (images) {\n let managedImageOptions = [];\n for (let i in images) {\n let image = images[i];\n let newImage = {\n id: image.imageName,\n osType: image.ostype,\n name: image.imageName,\n };\n managedImageOptions.push(newImage);\n }\n $scope.managedImageOptions = managedImageOptions;\n })\n .catch(() => {});\n }\n\n function setRegions() {\n AccountService.getRegionsForAccount($scope.stage.account)\n .then(function (regions) {\n $scope.regions = regions.map((r) => r.name);\n })\n .catch(() => {});\n }\n\n this.addExtendedAttribute = function () {\n if (!$scope.stage.extendedAttributes) {\n $scope.stage.extendedAttributes = {};\n }\n $uibModal\n .open({\n templateUrl: PipelineTemplates.addExtendedAttributes,\n controller: 'bakeStageAddExtendedAttributeController',\n controllerAs: 'addExtendedAttribute',\n resolve: {\n extendedAttribute: function () {\n return {\n key: '',\n value: '',\n };\n },\n },\n })\n .result.then(function (extendedAttribute) {\n $scope.stage.extendedAttributes[extendedAttribute.key] = extendedAttribute.value;\n })\n .catch(() => {});\n };\n\n this.removeExtendedAttribute = function (key) {\n delete $scope.stage.extendedAttributes[key];\n };\n\n this.showTemplateFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.templateFileName;\n };\n\n this.showExtendedAttributes = function () {\n return (\n $scope.viewState.roscoMode || ($scope.stage.extendedAttributes && _.size($scope.stage.extendedAttributes) > 0)\n );\n };\n\n this.showVarFileName = function () {\n return $scope.viewState.roscoMode || $scope.stage.varFileName;\n };\n\n this.showDefaultImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = true;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.managedImage = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.showManagedImages = function () {\n setManagedImages();\n\n $scope.managedImagesWasChosen = true;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = false;\n\n $scope.stage.osType = null;\n $scope.stage.baseOs = null;\n $scope.stage.publisher = null;\n $scope.stage.offer = null;\n $scope.stage.sku = null;\n $scope.stage.packageType = null;\n };\n\n this.showCustomImages = function () {\n $scope.managedImagesWasChosen = false;\n $scope.defaultImagesWasChosen = false;\n $scope.customImagesWasChosen = true;\n\n $scope.stage.baseOs = null;\n $scope.stage.managedImage = null;\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n };\n\n this.onChangeAccount = () => {\n $scope.stage.osType = null;\n $scope.stage.packageType = null;\n $scope.stage.managedImage = null;\n\n if ($scope.stage.account) {\n setRegions();\n }\n\n if ($scope.managedImagesWasChosen) {\n setManagedImages();\n }\n };\n\n $scope.onChangeManagedImage = () => {\n $scope.stage.packageType = null;\n const selectedManagedImage = _.find($scope.managedImageOptions, { id: $scope.stage.managedImage });\n $scope.stage.osType = selectedManagedImage.osType.toLowerCase();\n };\n\n this.onChangeOsType = function (e) {\n $scope.stage.packageType = null;\n };\n\n $scope.$watch('stage', stageUpdated, true);\n\n initialize();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE = 'spinnaker.azure.pipeline.stage.destroyAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n cloudProvider: 'azure',\n templateUrl: require('./destroyAsgStage.html'),\n executionStepLabelUrl: require('./destroyAsgStepLabel.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to destroy a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDestroyAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getAccountDetails(stage.credentials).then(function (details) {\n stage.regions = [details.org];\n // stage.regions = ['eastus', 'westus'];\n });\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n\n if (stage.credentials) {\n ctrl.accountUpdated();\n }\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.disableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./disableAsgStage.html'),\n executionStepLabelUrl: require('./disableAsgStepLabel.html'),\n validators: [\n {\n type: 'targetImpedance',\n message:\n 'This pipeline will attempt to disable a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureDisableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew && $scope.application.attributes.platformHealthOnly) {\n stage.interestingHealthProviderNames = []; // bypass the check for now; will change this later to ['azureService']\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE = 'spinnaker.azure.pipeline.stage.enableAsgStage';\nexport const name = AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE; // for backwards compatibility\nmodule(AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'azure',\n templateUrl: require('./enableAsgStage.html'),\n executionStepLabelUrl: require('./enableAsgStepLabel.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('azureEnableAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.state = {\n accounts: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n ctrl.reset = () => {\n ctrl.accountUpdated();\n ctrl.resetSelectedCluster();\n };\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'azure';\n\n if (stage.isNew) {\n // bypass the health check for now; will change this later to ['azureService'] and we will also add back the check for $scope.application.attributes.platformHealthOnly\n stage.interestingHealthProviderNames = [];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.azure) {\n stage.credentials = $scope.application.defaultCredentials.azure;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.azure) {\n stage.regions.push($scope.application.defaultRegions.azure);\n }\n\n if (!stage.target) {\n stage.target = $scope.targets[0].val;\n }\n\n $scope.$watch('stage.credentials', $scope.accountUpdated);\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { FirewallLabels, InfrastructureCaches, TaskExecutor } from '@spinnaker/core';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE = 'spinnaker.azure.securityGroup.write.service';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE, [UIROUTER_ANGULARJS]).factory(\n 'azureSecurityGroupWriter',\n function () {\n function upsertSecurityGroup(securityGroup, application, descriptor, params = {}) {\n params.securityGroupName = securityGroup.name;\n\n // We want to extend params with all attributes from securityGroup, but only if they don't already exist.\n _.assignWith(params, securityGroup, function (value, other) {\n return _.isUndefined(value) ? other : value;\n });\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `${descriptor} ${FirewallLabels.get('Firewall')}: ${name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n function deleteSecurityGroup(securityGroup, application, params = {}) {\n params.type = 'deleteSecurityGroup';\n params.securityGroupName = securityGroup.name;\n params.regions = [securityGroup.region];\n params.credentials = securityGroup.accountId;\n //params.cloudProvider = securityGroup.providerType;\n params.appName = application.name;\n\n const operation = TaskExecutor.executeTask({\n job: [params],\n application: application,\n description: `Delete ${FirewallLabels.get('Firewalls')}: ${securityGroup.name}`,\n });\n\n InfrastructureCaches.clearCache('securityGroup');\n\n return operation;\n }\n\n return {\n deleteSecurityGroup: deleteSecurityGroup,\n upsertSecurityGroup: upsertSecurityGroup,\n };\n },\n);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, NetworkReader, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL = 'spinnaker.azure.securityGroup.create.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureCreateSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$state',\n '$controller',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function ($scope, $uibModalInstance, $state, $controller, application, securityGroup, azureSecurityGroupWriter) {\n $scope.pages = {\n location: require('./createSecurityGroupProperties.html'),\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n $scope.regions = [];\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n const ctrl = this;\n $scope.isNew = true;\n $scope.state = {\n submitting: false,\n infiniteScroll: {\n numToAdd: 20,\n currentItems: 20,\n },\n };\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addMoreItems = function () {\n $scope.state.infiniteScroll.currentItems += $scope.state.infiniteScroll.numToAdd;\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.regions[0],\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Creating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n $scope.securityGroup = securityGroup;\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n ctrl.regionUpdated();\n });\n };\n\n this.regionUpdated = function () {\n ctrl.vnetUpdated();\n };\n\n this.vnetUpdated = function () {\n const account = $scope.securityGroup.credentials;\n const region = $scope.securityGroup.region;\n $scope.securityGroup.selectedVnet = null;\n $scope.securityGroup.vnet = null;\n $scope.securityGroup.vnetResourceGroup = null;\n\n ctrl.selectedVnets = [];\n\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((vnet) => {\n if (vnet.account === account && vnet.region === region) {\n ctrl.selectedVnets.push(vnet);\n }\n });\n }\n });\n\n ctrl.subnetUpdated();\n };\n\n this.subnetUpdated = function () {\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n };\n\n this.selectedVnetChanged = function (item) {\n $scope.securityGroup.vnet = item.name;\n $scope.securityGroup.vnetResourceGroup = item.resourceGroup;\n $scope.securityGroup.selectedSubnet = null;\n $scope.securityGroup.subnet = null;\n ctrl.selectedSubnets = [];\n if (item.subnets) {\n item.subnets.map(function (subnet) {\n ctrl.selectedSubnets.push(subnet);\n });\n }\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n vpcId: 'null',\n };\n\n if ($scope.securityGroup.selectedVnet) {\n $scope.securityGroup.vnet = $scope.securityGroup.selectedVnet.name;\n $scope.securityGroup.vnetResourceGroup = $scope.securityGroup.selectedVnet.resourceGroup;\n }\n\n if ($scope.securityGroup.selectedSubnet) {\n $scope.securityGroup.subnet = $scope.securityGroup.selectedSubnet.name;\n }\n\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Create', params);\n });\n };\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length == 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n ctrl.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n ctrl.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].destPortRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n ctrl.protocolUpdated = function (ruleset, index) {\n ruleset[index].protocol = ruleset[index].protocolUI;\n };\n\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.securityGroup.securityRules = [];\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport {\n CACHE_INITIALIZER_SERVICE,\n FirewallLabels,\n InfrastructureCaches,\n SECURITY_GROUP_READER,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL =\n 'spinnaker.azure.securityGroup.azure.edit.controller';\nexport const name = AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL, [\n UIROUTER_ANGULARJS,\n CACHE_INITIALIZER_SERVICE,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n]).controller('azureEditSecurityGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$exceptionHandler',\n '$state',\n 'securityGroupReader',\n 'cacheInitializer',\n 'application',\n 'securityGroup',\n 'azureSecurityGroupWriter',\n function (\n $scope,\n $uibModalInstance,\n $exceptionHandler,\n $state,\n securityGroupReader,\n cacheInitializer,\n application,\n securityGroup,\n azureSecurityGroupWriter,\n ) {\n $scope.pages = {\n ingress: require('./createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n if (!_.isEmpty(rule.protocol)) {\n rule.protocolUI = rule.protocol.toLowerCase();\n }\n\n rule.destPortRanges = rule.destinationPortRangeModel;\n rule.sourceIPCIDRRanges = rule.sourceAddressPrefixModel;\n\n return rule;\n });\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n this.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n this.refreshSecurityGroups = function () {\n $scope.state.refreshingSecurityGroups = true;\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n initializeSecurityGroups().then(function () {\n $scope.state.refreshingSecurityGroups = false;\n });\n });\n };\n\n function initializeSecurityGroups() {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n const account = securityGroup.accountName;\n const region = securityGroup.region;\n const availableGroups = _.filter(securityGroups[account].azure[region], {\n /*vpcId: vpcId*/\n });\n $scope.availableSecurityGroups = _.map(availableGroups, 'name');\n });\n }\n\n this.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocolUI: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourceAddressPrefixes: [],\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '*',\n destinationPortRanges: [],\n destPortRanges: '*',\n sourceIPCIDRRanges: '*',\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n this.portUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].destPortRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].destinationPortRanges = [];\n ruleRanges.forEach((v) => ruleset[index].destinationPortRanges.push(v));\n\n // If there are multiple port ranges then set null to the single port parameter otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRange = null;\n } else {\n ruleset[index].destinationPortRange = ruleset[index].destPortRanges;\n\n // If there is a single port range then set null to the port array otherwise ARM template will fail in validation.\n ruleset[index].destinationPortRanges = [];\n }\n }\n };\n\n this.sourceIPCIDRUpdated = function (ruleset, index) {\n if (!_.isEmpty(ruleset[index].sourceIPCIDRRanges)) {\n const ruleRanges = ruleset[index].sourceIPCIDRRanges.split(',');\n if (ruleRanges.length > 1) {\n ruleset[index].sourceAddressPrefixes = [];\n ruleRanges.forEach((v) => ruleset[index].sourceAddressPrefixes.push(v));\n\n // If there are multiple IP/CIDR ranges then set null to the single sourceAddressPrefix parameter otherwise ARM template will fail in validation\n ruleset[index].sourceAddressPrefix = null;\n } else {\n ruleset[index].sourceAddressPrefix = ruleset[index].sourceIPCIDRRanges;\n\n // If there is a single IP/CIDR then set null to the IP/CIDR array otherwise ARM template will fail in validation.\n ruleset[index].sourceAddressPrefixes = [];\n }\n }\n };\n\n this.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n\n this.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n this.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n $scope.taskMonitor.onTaskComplete = $uibModalInstance.dismiss;\n\n this.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: null,\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Update', params);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, FirewallLabels, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from '../configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER = 'spinnaker.azure.securityGroup.clone.controller';\nexport const name = AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER, [\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n]).controller('azureCloneSecurityGroupController', [\n '$scope',\n '$uibModalInstance',\n '$controller',\n '$state',\n 'azureSecurityGroupWriter',\n 'securityGroup',\n 'application',\n function ($scope, $uibModalInstance, $controller, $state, azureSecurityGroupWriter, securityGroup, application) {\n const ctrl = this;\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n $scope.pages = {\n location: require('../configure/createSecurityGroupProperties.html'),\n ingress: require('../configure/createSecurityGroupIngress.html'),\n };\n\n securityGroup.securityRules = _.map(securityGroup.securityRules, function (rule) {\n const temp = rule.destinationPortRange.split('-');\n rule.startPort = Number(temp[0]);\n rule.endPort = Number(temp[1]);\n return rule;\n });\n\n ctrl.accountUpdated = function () {\n AccountService.getRegionsForAccount($scope.securityGroup.credentials).then(function (regions) {\n $scope.regions = regions;\n $scope.securityGroup.regions = regions;\n ctrl.updateName();\n });\n };\n\n ctrl.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n ctrl.updateName = function () {\n const securityGroup = $scope.securityGroup;\n let name = application.name;\n if (securityGroup.detail) {\n name += '-' + securityGroup.detail;\n }\n securityGroup.name = name;\n $scope.namePreview = name;\n };\n\n $scope.securityGroup = securityGroup;\n\n $scope.state = {\n refreshingSecurityGroups: false,\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: `Updating your ${FirewallLabels.get('firewall')}`,\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n AccountService.listAccounts('azure').then(function (accounts) {\n $scope.accounts = accounts;\n ctrl.accountUpdated();\n });\n\n ctrl.addRule = function (ruleset) {\n ruleset.push({\n name: $scope.securityGroup.name + '-Rule' + ruleset.length,\n priority: ruleset.length === 0 ? 100 : 100 * (ruleset.length + 1),\n protocol: 'tcp',\n access: 'Allow',\n direction: 'InBound',\n sourceAddressPrefix: '*',\n sourcePortRange: '*',\n destinationAddressPrefix: '*',\n destinationPortRange: '7001-7001',\n startPort: 7001,\n endPort: 7001,\n });\n };\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n $uibModalInstance.close();\n const newStateParams = {\n name: $scope.securityGroup.name,\n accountId: $scope.securityGroup.credentials || $scope.securityGroup.accountName,\n region: $scope.securityGroup.region,\n provider: 'azure',\n };\n if (!$state.includes('**.firewallDetails')) {\n $state.go('.firewallDetails', newStateParams);\n } else {\n $state.go('^.firewallDetails', newStateParams);\n }\n }\n\n function onTaskComplete() {\n application.securityGroups.refresh();\n application.securityGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n ctrl.portUpdated = function (ruleset, index) {\n ruleset[index].destinationPortRange = ruleset[index].startPort + '-' + ruleset[index].endPort;\n };\n ctrl.removeRule = function (ruleset, index) {\n ruleset.splice(index, 1);\n };\n ctrl.moveUp = function (ruleset, index) {\n if (index === 0) return;\n swapRules(ruleset, index, index - 1);\n };\n ctrl.moveDown = function (ruleset, index) {\n if (index === ruleset.length - 1) return;\n swapRules(ruleset, index, index + 1);\n };\n function swapRules(ruleset, a, b) {\n const temp = ruleset[b];\n const priorityA = ruleset[a].priority;\n const priorityB = ruleset[b].priority;\n //swap elements\n ruleset[b] = ruleset[a];\n ruleset[a] = temp;\n //swap priorities\n ruleset[a].priority = priorityA;\n ruleset[b].priority = priorityB;\n }\n\n ctrl.upsert = function () {\n $scope.taskMonitor.submit(function () {\n const params = {\n cloudProvider: 'azure',\n appName: application.name,\n region: $scope.securityGroup.region,\n subnet: 'none',\n vpcId: 'null',\n };\n $scope.securityGroup.type = 'upsertSecurityGroup';\n\n return azureSecurityGroupWriter.upsertSecurityGroup($scope.securityGroup, application, 'Clone', params);\n });\n };\n },\n]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { ConfirmationModalService, FirewallLabels, SECURITY_GROUP_READER } from '@spinnaker/core';\n\nimport { AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER } from '../clone/cloneSecurityGroup.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE } from '../securityGroup.write.service';\n\nexport const AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.azure.securityGroup.azure.details.controller';\nexport const name = AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n AZURE_SECURITYGROUP_SECURITYGROUP_WRITE_SERVICE,\n AZURE_SECURITYGROUP_CLONE_CLONESECURITYGROUP_CONTROLLER,\n ])\n .controller('azureSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'azureSecurityGroupWriter',\n 'securityGroupReader',\n '$uibModal',\n function ($scope, $state, resolvedSecurityGroup, app, azureSecurityGroupWriter, securityGroupReader, $uibModal) {\n const application = app;\n const securityGroup = resolvedSecurityGroup;\n\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallLabel = FirewallLabels.get('Firewall');\n\n function extractSecurityGroup() {\n return securityGroupReader\n .getSecurityGroupDetails(\n application,\n securityGroup.accountId,\n securityGroup.provider,\n securityGroup.region,\n securityGroup.vpcId,\n securityGroup.name,\n )\n .then(\n function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n $scope.securityGroup = details;\n }\n },\n function () {\n fourOhFour();\n },\n );\n }\n\n function fourOhFour() {\n $state.go('^');\n }\n\n extractSecurityGroup().then(() => {\n // If the user navigates away from the view before the initial extractSecurityGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\n }\n });\n\n this.editInboundRules = function editInboundRules() {\n $uibModal.open({\n templateUrl: require('../configure/editSecurityGroup.html'),\n controller: 'azureEditSecurityGroupCtrl as ctrl',\n resolve: {\n securityGroup: function () {\n return angular.copy($scope.securityGroup);\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.cloneSecurityGroup = function cloneSecurityGroup() {\n $uibModal.open({\n templateUrl: require('../clone/cloneSecurityGroup.html'),\n controller: 'azureCloneSecurityGroupController as ctrl',\n resolve: {\n securityGroup: function () {\n const securityGroup = angular.copy($scope.securityGroup);\n if (securityGroup.region) {\n securityGroup.regions = [securityGroup.region];\n }\n return securityGroup;\n },\n application: function () {\n return application;\n },\n },\n });\n };\n\n this.deleteSecurityGroup = function deleteSecurityGroup() {\n const taskMonitor = {\n application: application,\n title: 'Deleting ' + securityGroup.name,\n };\n\n const submitMethod = function () {\n $scope.securityGroup.type = 'deleteSecurityGroup';\n return azureSecurityGroupWriter.deleteSecurityGroup(securityGroup, application, {\n cloudProvider: 'azure',\n vpcId: $scope.securityGroup.vpcId,\n });\n };\n\n ConfirmationModalService.confirm({\n header: 'Really delete ' + securityGroup.name + '?',\n buttonText: 'Delete ' + securityGroup.name,\n account: securityGroup.accountId,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n if (app.isStandalone) {\n // we still want the edit to refresh the firewall details when the modal closes\n app.securityGroups = {\n refresh: extractSecurityGroup,\n };\n }\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_READER = 'spinnaker.azure.securityGroup.reader';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_READER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_READER, []).factory('azureSecurityGroupReader', function () {\n function resolveIndexedSecurityGroup(indexedSecurityGroups, container, securityGroupId) {\n //hack to get around securityGroupId not matching id in indexedSecurityGroups.\n const temp = securityGroupId.split('/');\n return indexedSecurityGroups[container.account][container.region][temp[temp.length - 1]];\n }\n\n return {\n resolveIndexedSecurityGroup: resolveIndexedSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.azure.securityGroup.transformer';\nexport const name = AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('azureSecurityGroupTransformer', function () {\n function normalizeSecurityGroup() {}\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceArchetype.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER, []).controller(\n 'azureInstanceArchetypeCtrl',\n [\n '$scope',\n 'instanceTypeService',\n 'modalWizardService',\n function ($scope, instanceTypeService, modalWizardService) {\n const wizard = modalWizardService.getWizard();\n\n $scope.$watch('command.viewState.instanceProfile', function () {\n if (!$scope.command.viewState.instanceProfile || $scope.command.viewState.instanceProfile === 'custom') {\n wizard.excludePage('instance-type');\n } else {\n wizard.includePage('instance-type');\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n\n $scope.$watch('command.viewState.instanceType', function (newVal) {\n if (newVal) {\n wizard.markClean('instance-profile');\n wizard.markComplete('instance-profile');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.instanceType.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER, []).controller('azureInstanceTypeCtrl', [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('instance-type');\n modalWizardService.getWizard().markClean('instance-type');\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.advancedSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupAdvancedSettingsCtrl',\n [\n '$scope',\n 'modalWizardService',\n function ($scope, modalWizardService) {\n modalWizardService.getWizard().markComplete('advanced');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n modalWizardService.getWizard().markClean('advanced');\n } else {\n modalWizardService.getWizard().markDirty('advanced');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport * as angular from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.advancedSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupAdvancedSettingsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./advancedSettingsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'adv',\n controller: 'azureServerGroupAdvancedSettingsSelectorCtrl',\n };\n })\n .controller('azureServerGroupAdvancedSettingsSelectorCtrl', function () {\n this.addDataDisk = () => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n this.command.dataDisks = newDataDisks.concat([\n {\n lun: 0,\n managedDisk: {\n storageAccountType: 'Standard_LRS',\n },\n diskSizeGB: 1,\n caching: 'None',\n createOption: 'Empty',\n },\n ]);\n };\n\n this.removeDataDisk = (index) => {\n const newDataDisks = angular.copy(this.command.dataDisks);\n newDataDisks.splice(index, 1);\n this.command.dataDisks = newDataDisks;\n };\n });\n","'use strict';\n\nimport { module } from 'angular';\nimport _ from 'lodash';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER =\n 'spinnaker.azure.serverGroup.configure.basicSettings.image.filter';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER, []).filter('regional', function () {\n return function (input, selectedRegion) {\n return _.filter(input, function (image) {\n return image.region === selectedRegion || image.region === null;\n });\n };\n});\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport ANGULAR_UI_BOOTSTRAP from 'angular-ui-bootstrap';\n\nimport { IMAGE_READER, ModalWizard } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER } from './image.regional.filter';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.basicSettings';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_IMAGE_REGIONAL_FILTER,\n IMAGE_READER,\n ])\n .controller('azureServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n 'imageReader',\n function ($scope, $controller, $uibModalStack, $state, imageReader) {\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('basic-settings');\n ModalWizard.markComplete('basic-settings');\n } else {\n ModalWizard.markIncomplete('basic-settings');\n }\n });\n\n this.imageChanged = (image) => {\n $scope.command.imageName = image.imageName;\n $scope.command.selectedImage = image;\n ModalWizard.markClean('basic-settings');\n };\n\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n imageReader: imageReader,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n this.stackPattern = {\n test: function (stack) {\n const pattern = $scope.command.viewState.templatingEnabled ? /^([a-zA-Z0-9]*(\\${.+})*)*$/ : /^[a-zA-Z0-9]*$/;\n\n return pattern.test(stack);\n },\n };\n\n this.detailPattern = {\n test: function (detail) {\n const pattern = $scope.command.viewState.templatingEnabled\n ? /^([a-zA-Z0-9-]*(\\${.+})*)*$/\n : /^[a-zA-Z0-9-]*$/;\n\n return pattern.test(detail);\n },\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE, [])\n .directive('azureServerGroupCapacitySelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./capacitySelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'cap',\n controller: 'azureServerGroupCapacitySelectorCtrl',\n };\n })\n .controller('azureServerGroupCapacitySelectorCtrl', function () {});\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.healthSetting.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupHealthSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n if (typeof $scope.command.healthSettings === 'undefined') {\n $scope.command.healthSettings = {};\n }\n\n this.healthCheckProtocols = [\n { displayName: 'N/A', name: null },\n { displayName: 'HTTP', name: 'http' },\n { displayName: 'TCP', name: 'tcp' },\n ];\n\n this.requiresHealthCheckPath = function () {\n return $scope.command.healthSettings.protocol === 'http';\n };\n\n this.changeHealthCheckProtocol = function (newProtocol) {\n if (newProtocol == null) {\n $scope.command.healthSettings.protocol = null;\n $scope.command.healthSettings.port = null;\n $scope.command.healthSettings.requestPath = null;\n } else if (!this.requiresHealthCheckPath()) {\n $scope.command.healthSettings.requestPath = null;\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.healthSettings.selector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupHealthSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./healthSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.imageSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupImageSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n this.clearImage = function () {\n if ($scope.command.image.isCustom == false) {\n $scope.command.image = { isCustom: false };\n } else {\n $scope.command.image.region = $scope.command.region;\n }\n };\n\n ModalWizard.markComplete('image-settings');\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('image-settings');\n } else {\n ModalWizard.markDirty('image-settings');\n }\n });\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.imageSettingsSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE, []).directive(\n 'azureServerGroupImageSettingsSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n templateUrl: require('./imageSettingsSelector.directive.html'),\n scope: {\n command: '=',\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { InfrastructureCaches, LOAD_BALANCER_READ_SERVICE, ModalWizard, NetworkReader } from '@spinnaker/core';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER, [\n LOAD_BALANCER_READ_SERVICE,\n]).controller('azureServerGroupLoadBalancersCtrl', [\n '$scope',\n 'loadBalancerReader',\n function ($scope, loadBalancerReader) {\n ModalWizard.markClean('load-balancers');\n\n function loadVnetSubnets(item, type) {\n loadBalancerReader\n .getLoadBalancerDetails('azure', $scope.command.credentials, $scope.command.region, item)\n .then(function (LBs) {\n if (!LBs || LBs.length === 0) {\n // load the subnet and vnets without a load balancer\n const attachedVnet = $scope.command.selectedVnet;\n const attachedSubnet = $scope.command.selectedSubnet;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n if (subnet.name === attachedSubnet) {\n $scope.command.selectedSubnet = attachedSubnet;\n }\n }\n });\n }\n });\n }\n });\n } else if (LBs && LBs.length === 1) {\n const selectedLoadBalancer = LBs[0];\n const attachedVnet = $scope.command.selectedVnet;\n $scope.command.selectedVnet = null;\n $scope.command.selectedVnetSubnets = [];\n $scope.command.allVnets = [];\n NetworkReader.listNetworks().then(function (vnets) {\n if (vnets.azure) {\n vnets.azure.forEach((selectedVnet) => {\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region\n ) {\n $scope.command.allVnets.push(selectedVnet);\n }\n if (\n selectedVnet.account === $scope.command.credentials &&\n selectedVnet.region === $scope.command.region &&\n ((type === 'Azure Application Gateway' && selectedVnet.name == selectedLoadBalancer.vnet) ||\n (type === 'Azure Load Balancer' && selectedVnet.name === attachedVnet.name))\n ) {\n $scope.command.selectedVnet = selectedVnet;\n selectedVnet.subnets.map(function (subnet) {\n let addSubnet = true;\n if (subnet.devices) {\n subnet.devices.map(function (device) {\n // only add subnets that are not assigned to an ApplicationGateway\n if (device && device.type === 'applicationGateways') {\n addSubnet = false;\n }\n });\n }\n if (addSubnet) {\n $scope.command.selectedVnetSubnets.push(subnet.name);\n }\n });\n }\n });\n }\n });\n }\n });\n }\n\n if ($scope.command.credentials && $scope.command.region) {\n $scope.command.viewState.networkSettingsConfigured = true;\n $scope.command.selectedVnetSubnets = [];\n if ($scope.command.loadBalancerName !== null && typeof $scope.command.loadBalancerName !== 'undefined') {\n $scope.useLoadBalancer = true;\n }\n loadVnetSubnets($scope.command.loadBalancerName, $scope.command.loadBalancerType);\n }\n\n this.loadBalancerChanged = function (item) {\n $scope.command.viewState.networkSettingsConfigured = true;\n ModalWizard.markComplete('load-balancers');\n\n const loadBalancers = $scope.command.backingData.loadBalancers;\n let loadBalancerType = null;\n\n if (loadBalancers) {\n const loadBalancerToFind = loadBalancers.find((lb) => lb.name === item);\n if (loadBalancerToFind) {\n loadBalancerType = Utility.getLoadBalancerType(loadBalancerToFind.loadBalancerType).type;\n }\n }\n\n if (item === null) {\n $scope.command.loadBalancerName = null;\n }\n\n $scope.command.selectedVnetSubnets = [];\n $scope.command.loadBalancerType = loadBalancerType;\n InfrastructureCaches.clearCache('networks');\n loadVnetSubnets(item, loadBalancerType);\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.loadBalancer.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupLoadBalancersSelector',\n [\n 'azureServerGroupConfigurationService',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupLoadBalancersSelector.directive.html'),\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.networkSettings.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER, []).controller(\n 'azureServerGroupNetworkSettingsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('network-settings');\n\n $scope.command.selectedVnet = {\n name: $scope.command.vnet,\n };\n\n $scope.command.selectedSubnet = $scope.command.subnet;\n\n this.vnetChanged = function (item) {\n $scope.command.vnet = item;\n $scope.command.subnet = $scope.command.selectedSubnet = null;\n $scope.command.selectedVnetSubnets = item.subnets.map((s) => s.name);\n };\n\n this.networkSettingsChanged = function (item) {\n $scope.command.vnet = $scope.command.selectedVnet.name;\n $scope.command.subnet = item;\n ModalWizard.markComplete('network-settings');\n };\n\n this.getVnetName = function () {\n if ($scope.command.selectedVnet) {\n return $scope.command.selectedVnet.name;\n } else {\n return 'Virtual network was not selected';\n }\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.networkSettings.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupNetworkSettingsSelector',\n function () {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./ServerGroupNetworkSettingsSelector.directive.html'),\n };\n },\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ModalWizard } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER =\n 'spinnaker.azure.serverGroup.configure.securityGroups.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER, []).controller(\n 'azureServerGroupSecurityGroupsCtrl',\n [\n '$scope',\n function ($scope) {\n ModalWizard.markClean('security-groups');\n ModalWizard.markComplete('security-groups');\n\n $scope.command.selectedSecurityGroup = {\n id: $scope.command.securityGroupName,\n };\n\n this.securityGroupChanged = function (securityGroup) {\n $scope.command.securityGroupName = securityGroup.id;\n ModalWizard.markComplete('security-groups');\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { FirewallLabels, InfrastructureCaches } from '@spinnaker/core';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.securityGroupSelector.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE, []).directive(\n 'azureServerGroupSecurityGroupsSelector',\n [\n 'azureServerGroupConfigurationService',\n function (azureServerGroupConfigurationService) {\n return {\n restrict: 'E',\n scope: {\n command: '=',\n },\n templateUrl: require('./serverGroupSecurityGroupsSelector.directive.html'),\n link: function (scope) {\n scope.firewallLabel = FirewallLabels.get('firewall');\n\n scope.getSecurityGroupRefreshTime = function () {\n return InfrastructureCaches.get('securityGroups').getStats().ageMax;\n };\n\n scope.refreshSecurityGroups = function () {\n scope.refreshing = true;\n azureServerGroupConfigurationService.refreshSecurityGroups(scope.command).then(function () {\n scope.refreshing = false;\n });\n };\n },\n };\n },\n ],\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport Utility from '../../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.tags.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE, [])\n .directive('azureTagsSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./tagsSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'tagsSelectorCtrl',\n controller: 'TagsSelectorCtrl',\n };\n })\n .controller('TagsSelectorCtrl', [\n '$scope',\n function () {\n this.getTagResult = function () {\n return Utility.checkTags(this.command.instanceTags);\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE =\n 'spinnaker.azure.serverGroup.configure.wizard.capacity.zone.directive';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE, []).directive('azureZoneSelector', function () {\n return {\n restrict: 'E',\n templateUrl: require('./zoneSelector.directive.html'),\n scope: {},\n bindToController: {\n command: '=',\n },\n controllerAs: 'vm',\n controller: [\n '$scope',\n function ($scope) {\n this.updateEnableInboundNAT = () => {\n if ($scope.vm.command.zonesEnabled) {\n $scope.vm.command.enableInboundNAT = false;\n }\n };\n },\n ],\n };\n});\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER } from './wizard/ServerGroupInstanceArchetype.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER } from './wizard/ServerGroupInstanceType.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER } from './wizard/advancedSettings/ServerGroupAdvancedSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE } from './wizard/advancedSettings/advancedSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER } from './wizard/basicSettings/ServerGroupBasicSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE } from './wizard/capacity/capacitySelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER } from './wizard/healthSettings/ServerGroupHealthSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE } from './wizard/healthSettings/healthSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER } from './wizard/image/ServerGroupImageSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE } from './wizard/image/imageSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER } from './wizard/loadBalancers/ServerGroupLoadBalancers.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE } from './wizard/loadBalancers/serverGroupLoadBalancersSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER } from './wizard/networkSettings/ServerGroupNetworkSettings.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE } from './wizard/networkSettings/ServerGroupNetworkSettingsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER } from './wizard/securityGroup/ServerGroupSecurityGroups.controller';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE } from './wizard/securityGroup/serverGroupSecurityGroupsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE } from './wizard/tags/tagsSelector.directive';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE } from './wizard/zones/zoneSelector.directive';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE = 'spinnaker.azure.serverGroup.configure';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE, [\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_BASICSETTINGS_SERVERGROUPBASICSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCEARCHETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SERVERGROUPINSTANCETYPE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_SERVERGROUPADVANCEDSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_HEALTHSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_IMAGESETTINGS_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_IMAGESETTINGS_SERVERGROUPIMAGESETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_HEALTHSETTINGS_SERVERGROUPHEALTHSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_LOADBALANCERS_SERVERGROUPLOADBALANCERSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CAPACITY_CAPACITYSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_SECURITYGROUP_SERVERGROUPSECURITYGROUPSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGS_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_NETWORKSETTINGS_SERVERGROUPNETWORKSETTINGSSELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_ZONES_ZONESELECTOR_DIRECTIVE,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_TAGS_TAGSSELECTOR_DIRECTIVE,\n]);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\nimport { AZURE_IMAGE_IMAGE_READER } from '../../image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from '../../instance/azureInstanceType.service';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE =\n 'spinnaker.azure.serverGroup.configure.service';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE, [\n AZURE_IMAGE_IMAGE_READER,\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n ])\n .factory('azureServerGroupConfigurationService', [\n '$q',\n 'azureImageReader',\n 'securityGroupReader',\n 'cacheInitializer',\n 'loadBalancerReader',\n 'azureInstanceTypeService',\n function (\n $q,\n azureImageReader,\n securityGroupReader,\n cacheInitializer,\n loadBalancerReader,\n azureInstanceTypeService,\n ) {\n const dataDiskTypes = ['Standard_LRS', 'StandardSSD_LRS', 'Premium_LRS'];\n const dataDiskCachingTypes = ['None', 'ReadOnly', 'ReadWrite'];\n\n const healthCheckTypes = ['EC2', 'ELB'];\n const terminationPolicies = [\n 'OldestInstance',\n 'NewestInstance',\n 'OldestLaunchConfiguration',\n 'ClosestToNextInstanceHour',\n 'Default',\n ];\n\n function configureUpdateCommand(command) {\n command.backingData = {\n healthCheckTypes: angular.copy(healthCheckTypes),\n terminationPolicies: angular.copy(terminationPolicies),\n };\n }\n\n function configureCommand(application, command) {\n return $q\n .all([\n AccountService.getCredentialsKeyedByAccount('azure'),\n securityGroupReader.loadSecurityGroups(),\n loadBalancerReader.loadLoadBalancers(application.name),\n ])\n .then(function ([credentialsKeyedByAccount, securityGroups, loadBalancers]) {\n command.backingData = {\n credentialsKeyedByAccount,\n securityGroups,\n loadBalancers,\n dataDiskTypes: angular.copy(dataDiskTypes),\n dataDiskCachingTypes: angular.copy(dataDiskCachingTypes),\n accounts: _.keys(credentialsKeyedByAccount),\n filtered: {},\n };\n attachEventHandlers(command);\n });\n }\n\n function configureInstanceTypes(command) {\n const result = {\n dirty: {},\n };\n if (command.region) {\n const results = [result.dirty];\n\n // results.push(configureCustomInstanceTypes(command).dirty);\n results.push(configureStandardInstanceTypes(command).dirty);\n\n angular.extend(...results);\n } else {\n command.backingData.filtered.instanceTypes = [];\n }\n return result;\n }\n\n function configureStandardInstanceTypes(command) {\n const c = command;\n const result = {\n dirty: {},\n };\n\n const locations = [c.region];\n const { credentialsKeyedByAccount } = c.backingData;\n const { locationToInstanceTypesMap } = credentialsKeyedByAccount[c.credentials];\n\n if (locations.every((l) => !l)) {\n return result;\n }\n\n const filtered = azureInstanceTypeService\n .getAvailableTypesForRegions(locationToInstanceTypesMap, locations)\n .map((type) => type.name);\n\n const instanceType = c.instanceType;\n if (_.every([instanceType, !_.startsWith(instanceType, 'custom'), !_.includes(filtered, instanceType)])) {\n result.dirty.instanceType = c.instanceType;\n c.instanceType = null;\n }\n c.backingData.filtered.instanceTypes = filtered;\n return result;\n }\n\n function configureImages(command) {\n const result = {\n dirty: {},\n };\n let regionalImages = null;\n if (command.viewState.disableImageSelection) {\n return result;\n }\n if (command.region) {\n regionalImages = command.backingData.packageImages\n .filter(function (image) {\n return image.amis && image.amis[command.region];\n })\n .map(function (image) {\n return {\n imageName: image.imageName,\n ami: image.amis ? image.amis[command.region][0] : null,\n };\n });\n if (\n command.amiName &&\n !regionalImages.some(function (image) {\n return image.imageName === command.amiName;\n })\n ) {\n result.dirty.amiName = true;\n command.amiName = null;\n }\n } else {\n command.amiName = null;\n }\n command.backingData.filtered.images = regionalImages;\n return result;\n }\n\n function configureZones(command) {\n const result = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (!command.region) {\n return result;\n }\n let { regionsSupportZones, availabilityZones } = command.backingData.credentialsKeyedByAccount[\n command.credentials\n ];\n regionsSupportZones = regionsSupportZones || [];\n availabilityZones = availabilityZones || [];\n filteredData.zones = regionsSupportZones.includes(command.region) ? availabilityZones : [];\n\n return result;\n }\n\n function getRegionalSecurityGroups(command) {\n const newSecurityGroups = command.backingData.securityGroups[command.credentials] || {\n azure: {},\n };\n return _.chain(newSecurityGroups[command.region]).sortBy('name').value();\n }\n\n function configureSecurityGroupOptions(command) {\n const result = {\n dirty: {},\n };\n let currentOptions;\n if (command.backingData.filtered.securityGroups) {\n currentOptions = command.backingData.filtered.securityGroups;\n }\n const newRegionalSecurityGroups = getRegionalSecurityGroups(command);\n if (command.selectedSecurityGroup) {\n // one has not been previously selected. We are either configuring for the\n //first time or they changed regions or account\n command.selectedSecurityGroup = null;\n result.dirty.securityGroups = true;\n }\n if (currentOptions != newRegionalSecurityGroups) {\n command.backingData.filtered.securityGroups = newRegionalSecurityGroups;\n result.dirty.securityGroups = true;\n }\n\n if (command.backingData.filtered.securityGroups === []) {\n command.viewState.securityGroupsConfigured = false;\n } else {\n command.viewState.securityGroupsConfigured = true;\n }\n\n return result;\n }\n\n function refreshSecurityGroups(command, skipCommandReconfiguration) {\n return cacheInitializer.refreshCache('securityGroups').then(function () {\n return securityGroupReader.getAllSecurityGroups().then(function (securityGroups) {\n command.backingData.securityGroups = securityGroups;\n if (!skipCommandReconfiguration) {\n configureSecurityGroupOptions(command);\n }\n });\n });\n }\n\n function getLoadBalancerNames(loadBalancers) {\n return _.chain(loadBalancers).map('name').uniq().value().sort();\n }\n\n function configureLoadBalancerOptions(command) {\n const result = {\n dirty: {},\n };\n const current = command.loadBalancers;\n const newLoadBalancers = getLoadBalancerNames(command.backingData.loadBalancers);\n\n if (current && command.loadBalancers) {\n const matched = _.intersection(newLoadBalancers, command.loadBalancers);\n const removed = _.xor(matched, current);\n command.loadBalancers = matched;\n if (removed.length) {\n result.dirty.loadBalancers = removed;\n }\n }\n command.backingData.filtered.loadBalancers = newLoadBalancers;\n return result;\n }\n\n function refreshLoadBalancers(command, skipCommandReconfiguration) {\n return loadBalancerReader.listLoadBalancers('azure').then(function (loadBalancers) {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n configureLoadBalancerOptions(command);\n }\n });\n }\n\n function configureLoadBalancers(command) {\n const result = {\n dirty: {},\n };\n const temp = command.backingData.loadBalancers;\n const filterlist = _.filter(temp, function (lb) {\n return lb.account === command.credentials && lb.region === command.region;\n });\n\n command.loadBalancers = getLoadBalancerNames(filterlist);\n command.viewState.loadBalancersConfigured = true;\n\n return result;\n }\n\n function attachEventHandlers(cmd) {\n cmd.regionChanged = function regionChanged(command, isInit = false) {\n const result = {\n dirty: {},\n };\n if (command.region && command.credentials) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n angular.extend(result.dirty, configureZones(command).dirty);\n }\n // reset previous set values\n if (!isInit) {\n command.loadBalancerName = null;\n command.loadBalancerType = null;\n command.vnet = null;\n command.vnetResourceGroup = null;\n command.subnet = null;\n command.selectedSubnet = null;\n command.selectedVnet = null;\n command.selectedVnetSubnets = [];\n command.viewState.networkSettingsConfigured = false;\n command.selectedSecurityGroup = null;\n command.securityGroupName = null;\n command.zonesEnabled = false;\n command.zones = [];\n }\n\n return result;\n };\n\n cmd.credentialsChanged = function credentialsChanged(command, isInit) {\n const result = {\n dirty: {},\n };\n const backingData = command.backingData;\n if (command.credentials) {\n const regionsForAccount = backingData.credentialsKeyedByAccount[command.credentials] || {\n regions: [],\n defaultKeyPair: null,\n };\n backingData.filtered.regions = regionsForAccount.regions;\n if (\n !_.chain(backingData.filtered.regions)\n .some({\n name: command.region,\n })\n .value()\n ) {\n command.region = null;\n result.dirty.region = true;\n } else {\n angular.extend(result.dirty, command.regionChanged(command, isInit).dirty);\n }\n if (command.region) {\n angular.extend(result.dirty, configureLoadBalancers(command).dirty);\n }\n angular.extend(result.dirty, configureInstanceTypes(command).dirty);\n } else {\n command.region = null;\n }\n return result;\n };\n }\n\n function refreshInstanceTypes(command) {\n return cacheInitializer.refreshCache('instanceTypes').then(function () {\n return azureInstanceTypeService.getAllTypesByRegion().then(function (instanceTypes) {\n command.backingData.instanceTypes = instanceTypes;\n configureInstanceTypes(command);\n });\n });\n }\n\n return {\n configureUpdateCommand: configureUpdateCommand,\n configureCommand: configureCommand,\n configureImages: configureImages,\n configureSecurityGroupOptions: configureSecurityGroupOptions,\n configureLoadBalancerOptions: configureLoadBalancerOptions,\n refreshLoadBalancers: refreshLoadBalancers,\n refreshSecurityGroups: refreshSecurityGroups,\n getRegionalSecurityGroups: getRegionalSecurityGroups,\n refreshInstanceTypes: refreshInstanceTypes,\n configureZones: configureZones,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport { FirewallLabels, ModalWizard, SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from '../../serverGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';\nimport Utility from '../../../utility';\n\nexport const AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER =\n 'spinnaker.azure.cloneServerGroup.controller';\nexport const name = AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCONFIGURATION_SERVICE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n SERVER_GROUP_WRITER,\n]).controller('azureCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n 'serverGroupWriter',\n 'azureServerGroupConfigurationService',\n 'serverGroupCommand',\n 'application',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n serverGroupWriter,\n azureServerGroupConfigurationService,\n serverGroupCommand,\n application,\n title,\n ) {\n $scope.pages = {\n templateSelection: require('./templateSelection.html'),\n basicSettings: require('./basicSettings/basicSettings.html'),\n imageSettings: require('./image/imageSettings.html'),\n healthSettings: require('./healthSettings/healthSettings.html'),\n loadBalancers: require('./loadBalancers/loadBalancers.html'),\n networkSettings: require('./networkSettings/networkSettings.html'),\n securityGroups: require('./securityGroup/securityGroups.html'),\n instanceType: require('./instanceType/instanceType.html'),\n zones: require('./capacity/zones.html'),\n tags: require('./tags/tags.html'),\n advancedSettings: require('./advancedSettings/advancedSettings.html'),\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n $scope.command = serverGroupCommand;\n\n // Give regions an init value to prevent it being undefined. If so, the React component RegionSelectField would get \"undefined\" for property regions\n // and then be unmounted so that the region selector would be hidden.\n $scope.command.backingData = $scope.command.backingData || {};\n $scope.command.backingData.filtered = $scope.command.backingData.filtered || {};\n $scope.command.backingData.filtered.regions = $scope.command.backingData.filtered.regions || [];\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: [\n 'account, region, subnet, cluster name (stack, details)',\n 'load balancers',\n FirewallLabels.get('firewalls'),\n 'instance type',\n 'all fields on the Advanced Settings page',\n ],\n notCopied: [],\n additionalCopyText:\n '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.',\n };\n\n if (!$scope.command.viewState.disableStrategySelection) {\n this.templateSelectionText.notCopied.push(\n 'the deployment strategy (if any) used to deploy the most recent server group',\n );\n }\n\n function onApplicationRefresh() {\n // If the user has already closed the modal, do not navigate to the new details view\n if ($scope.$$destroyed) {\n return;\n }\n const cloneStage = $scope.taskMonitor.task.execution.stages.find((stage) => stage.type === 'cloneServerGroup');\n if (cloneStage && cloneStage.context['deploy.server.groups']) {\n const newServerGroupName = cloneStage.context['deploy.server.groups'][$scope.command.region];\n if (newServerGroupName) {\n const newStateParams = {\n serverGroup: newServerGroupName,\n accountId: $scope.command.credentials,\n region: $scope.command.region,\n provider: 'azure',\n };\n let transitionTo = '^.^.^.clusters.serverGroup';\n if ($state.includes('**.clusters.serverGroup')) {\n // clone via details, all view\n transitionTo = '^.serverGroup';\n }\n if ($state.includes('**.clusters.cluster.serverGroup')) {\n // clone or create with details open\n transitionTo = '^.^.serverGroup';\n }\n if ($state.includes('**.clusters')) {\n // create new, no details open\n transitionTo = '.serverGroup';\n }\n $state.go(transitionTo, newStateParams);\n }\n }\n }\n\n function onTaskComplete() {\n application.serverGroups.refresh();\n application.serverGroups.onNextRefresh($scope, onApplicationRefresh);\n }\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Creating your server group',\n modalInstance: $uibModalInstance,\n onTaskComplete: onTaskComplete,\n });\n\n function configureCommand() {\n azureServerGroupConfigurationService.configureCommand(application, serverGroupCommand).then(function () {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'create') {\n serverGroupCommand.viewState.useAllImageSelection = true;\n }\n $scope.state.loaded = true;\n initializeWizardState();\n initializeSelectOptions();\n initializeWatches();\n });\n }\n\n function initializeWizardState() {\n const mode = serverGroupCommand.viewState.mode;\n if (mode === 'clone' || mode === 'editPipeline') {\n ModalWizard.markComplete('basic-settings');\n ModalWizard.markComplete('load-balancers');\n ModalWizard.markComplete('network-settings');\n ModalWizard.markComplete('security-groups');\n ModalWizard.markComplete('instance-type');\n ModalWizard.markComplete('zones');\n }\n }\n\n function initializeWatches() {\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged($scope.command, true));\n processCommandUpdateResult($scope.command.regionChanged($scope.command, true));\n }\n\n function createResultProcessor(method) {\n return function (newValue, oldValue) {\n if (newValue !== oldValue) {\n processCommandUpdateResult(method($scope.command));\n }\n };\n }\n\n function processCommandUpdateResult(result) {\n if (result.dirty.loadBalancers) {\n ModalWizard.markDirty('load-balancers');\n ModalWizard.markDirty('network-settings');\n }\n if (result.dirty.securityGroups) {\n ModalWizard.markDirty('security-groups');\n }\n if (result.dirty.instanceType) {\n ModalWizard.markDirty('instance-type');\n }\n if (result.dirty.zoneEnabled || result.dirty.zones) {\n ModalWizard.markDirty('zones');\n }\n }\n\n this.submit = function () {\n if ($scope.command.viewState.mode === 'editPipeline' || $scope.command.viewState.mode === 'createPipeline') {\n return $uibModalInstance.close($scope.command);\n }\n $scope.taskMonitor.submit(function () {\n return serverGroupWriter.cloneServerGroup($scope.command, application);\n });\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.toggleSuspendedProcess = function (process) {\n $scope.command.suspendedProcesses = $scope.command.suspendedProcesses || [];\n const processIndex = $scope.command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n $scope.command.suspendedProcesses.push(process);\n } else {\n $scope.command.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n this.processIsSuspended = function (process) {\n return $scope.command.suspendedProcesses.includes(process);\n };\n\n if (!$scope.state.requiresTemplateSelection) {\n configureCommand();\n } else {\n $scope.state.loaded = true;\n }\n\n this.templateSelected = () => {\n $scope.state.requiresTemplateSelection = false;\n configureCommand();\n };\n\n this.isValid = function () {\n return (\n $scope.command &&\n $scope.command.application &&\n $scope.command.credentials &&\n $scope.command.instanceType &&\n $scope.command.region &&\n (!$scope.command.zonesEnabled || $scope.command.zones.length !== 0) &&\n Utility.checkTags($scope.command.instanceTags).isValid\n );\n };\n },\n]);\n","import React from 'react';\n\nimport { UserVerification } from '@spinnaker/core';\n\nexport interface IAzureModalFooterProps {\n onSubmit: () => void;\n onCancel: () => void;\n isValid: boolean;\n account: string;\n}\n\nexport interface IAzureModalFooterState {\n verified: boolean;\n}\n\nexport class AzureModalFooter extends React.Component<IAzureModalFooterProps, IAzureModalFooterState> {\n constructor(props: any) {\n super(props);\n }\n\n public state = { verified: false };\n\n private handleVerification = (verified: boolean) => {\n this.setState({ verified });\n };\n\n public render() {\n const { onSubmit, onCancel, isValid, account } = this.props;\n const { verified } = this.state;\n\n return (\n <div className=\"modal-footer\">\n {<UserVerification expectedValue={account} onValidChange={this.handleVerification} />}\n <button className=\"btn btn-default\" onClick={onCancel}>\n Cancel\n </button>\n <button type=\"submit\" className=\"btn btn-primary\" onClick={onSubmit} disabled={!isValid || !verified}>\n Submit\n </button>\n </div>\n );\n }\n}\n","import React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport Select from 'react-select';\n\nimport type { IModalComponentProps } from '@spinnaker/core';\nimport {\n ModalClose,\n noop,\n ReactInjector,\n ReactModal,\n TaskMonitor,\n TaskMonitorWrapper,\n TaskReason,\n} from '@spinnaker/core';\n\nimport { AzureModalFooter } from '../../../common/AzureModalFooter';\n\nexport interface IAzureRollbackServerGroupModalProps extends IModalComponentProps {\n application: any;\n serverGroup: any;\n disabledServerGroups: any;\n}\n\nexport interface IAzureRollbackServerGroupModalState {\n taskMonitor: TaskMonitor;\n submitting: boolean;\n command: any;\n}\n\nexport class AzureRollbackServerGroupModal extends React.Component<\n IAzureRollbackServerGroupModalProps,\n IAzureRollbackServerGroupModalState\n> {\n public static defaultProps: Partial<IAzureRollbackServerGroupModalProps> = {\n closeModal: noop,\n dismissModal: noop,\n };\n\n public static show(props: IAzureRollbackServerGroupModalProps) {\n const modalProps = {};\n return ReactModal.show(AzureRollbackServerGroupModal, props, modalProps);\n }\n\n constructor(props: IAzureRollbackServerGroupModalProps) {\n super(props);\n\n const { application, serverGroup } = props;\n\n this.state = {\n taskMonitor: new TaskMonitor({\n application: application,\n title: 'Rolling back your server group',\n modalInstance: TaskMonitor.modalInstanceEmulation(() => this.props.dismissModal()),\n }),\n submitting: true,\n command: {\n interestingHealthProviderNames: [],\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n enableAndDisableOnly: true,\n },\n },\n };\n }\n\n private close = (args?: any) => {\n this.props.dismissModal.apply(null, args);\n };\n\n private submit = () => {\n const { command, taskMonitor } = this.state;\n const { serverGroup, application } = this.props;\n\n taskMonitor.submit(() => {\n return ReactInjector.serverGroupWriter.rollbackServerGroup(serverGroup, application, command);\n });\n };\n\n private filterServerGroups = (disabledServerGroups: any) => {\n const filteredDisabledServerGroups = disabledServerGroups\n .filter((disabledServerGroup: any) => disabledServerGroup.instanceCounts.total !== 0)\n .sort((a: any, b: any) => b.name.localeCompare(a.name));\n\n return filteredDisabledServerGroups;\n };\n\n private isValid = () => {\n const restoreServerGroupName = this.state.command.rollbackContext.restoreServerGroupName;\n return restoreServerGroupName !== undefined;\n };\n\n private handleServerGroupChange = (restoreServerGroupOption: any) => {\n const { disabledServerGroups } = this.props;\n const newCommand = { ...this.state.command };\n newCommand.rollbackContext.restoreServerGroupName = restoreServerGroupOption.value;\n const restoreServerGroup = this.filterServerGroups(disabledServerGroups).find(function (disabledServerGroup: any) {\n return disabledServerGroup.name === restoreServerGroupOption.value;\n });\n newCommand.targetSize = restoreServerGroup.capacity.max;\n this.setState({\n command: newCommand,\n });\n };\n\n private handleTaskReasonChange = (taskReason?: any) => {\n const newCommand = { ...this.state.command };\n newCommand.reason = taskReason;\n this.setState({\n command: newCommand,\n });\n };\n\n public render() {\n const { command, taskMonitor, submitting } = this.state;\n const { serverGroup, disabledServerGroups } = this.props;\n const isValidSG = this.isValid();\n const disabledServerGroupOptions = this.filterServerGroups(disabledServerGroups).map(\n (disabledServerGroup: any) => ({\n label: disabledServerGroup.name,\n value: disabledServerGroup.name,\n }),\n );\n\n return (\n <Modal onHide={this.close}>\n <TaskMonitorWrapper monitor={taskMonitor} />\n {submitting && (\n <form role=\"form\">\n <ModalClose dismiss={this.close} />\n <Modal.Header>\n <Modal.Title>Rollback {serverGroup.name}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div className=\"row\">\n <div className=\"col-sm-3 sm-label-right\">Restore to</div>\n <div className=\"col-sm-6\">\n <Select\n value={command.rollbackContext.restoreServerGroupName}\n onChange={this.handleServerGroupChange}\n options={disabledServerGroupOptions}\n />\n </div>\n </div>\n <TaskReason reason={command.taskReason} onChange={this.handleTaskReasonChange} />\n </Modal.Body>\n <AzureModalFooter\n onSubmit={this.submit}\n onCancel={this.close}\n isValid={isValidSG}\n account={serverGroup.account}\n />\n </form>\n )}\n </Modal>\n );\n }\n}\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport {\n ConfirmationModalService,\n FirewallLabels,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n} from '@spinnaker/core';\n\nimport '../configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { AzureRollbackServerGroupModal } from './rollback/RollbackServerGroupModal';\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER =\n 'spinnaker.azure.serverGroup.details.controller';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER; // for backwards compatibility\nangular\n .module(AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER, [\n UIROUTER_ANGULARJS,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n SERVER_GROUP_WRITER,\n ])\n .controller('azureServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n '$templateCache',\n 'app',\n 'serverGroup',\n 'azureServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n function (\n $scope,\n $state,\n $templateCache,\n app,\n serverGroup,\n azureServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n ) {\n $scope.state = {\n loading: true,\n };\n\n $scope.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n function extractServerGroupSummary() {\n let summary = _.find(app.serverGroups.data, function (toCheck) {\n return (\n toCheck.name === serverGroup.name &&\n toCheck.account === serverGroup.accountId &&\n toCheck.region === serverGroup.region\n );\n });\n if (!summary) {\n app.loadBalancers.data.some(function (loadBalancer) {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some(function (possibleServerGroup) {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n if (!summary) {\n $state.go('^');\n }\n return summary;\n }\n\n function retrieveServerGroup() {\n const summary = extractServerGroupSummary();\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then(function (details) {\n cancelLoader();\n\n angular.extend(details, summary);\n details.account = serverGroup.accountId; // it's possible the summary was not found because the clusters are still loading\n\n $scope.serverGroup = details;\n\n if (!_.isEmpty($scope.serverGroup)) {\n $scope.image = details.image ? details.image : undefined;\n\n if (details.image && details.image.description) {\n const tags = details.image.description.split(', ');\n tags.forEach(function (tag) {\n const keyVal = tag.split('=');\n if (keyVal.length === 2 && keyVal[0] === 'ancestor_name') {\n details.image.baseImage = keyVal[1];\n }\n });\n }\n\n if (details.launchConfig && details.launchConfig.securityGroups) {\n $scope.securityGroups = _.chain(details.launchConfig.securityGroups)\n .map(function (id) {\n return (\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n id: id,\n }) ||\n _.find(app.securityGroups.data, {\n accountName: serverGroup.accountId,\n region: serverGroup.region,\n name: id,\n })\n );\n })\n .compact()\n .value();\n }\n } else {\n $state.go('^');\n }\n });\n }\n\n function cancelLoader() {\n $scope.state.loading = false;\n }\n\n retrieveServerGroup().then(() => {\n // If the user navigates away from the view before the initial retrieveServerGroup call completes,\n // do not bother subscribing to the refresh\n if (!$scope.$$destroyed) {\n app.serverGroups.onRefresh($scope, retrieveServerGroup);\n }\n });\n\n this.destroyServerGroup = function destroyServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\n };\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: function () {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = function () {\n return serverGroupWriter.destroyServerGroup(serverGroup, app);\n };\n\n const confirmationModalParams = {\n header: 'Really destroy ' + serverGroup.name + '?',\n buttonText: 'Destroy ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = function disableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = () => serverGroupWriter.disableServerGroup(serverGroup, app);\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = function enableServerGroup() {\n const serverGroup = $scope.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.enableServerGroup(\n serverGroup,\n app,\n angular.extend(params, {\n interestingHealthProviderNames: [], // bypass the check for now; will change this later to ['azureService']\n }),\n );\n };\n\n ConfirmationModalService.confirm({\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n submitMethod: submitMethod,\n });\n };\n\n this.rollbackServerGroup = () => {\n const serverGroup = $scope.serverGroup;\n const cluster = _.find(app.clusters, { name: serverGroup.cluster, account: serverGroup.account });\n const disabledServerGroups = _.filter(cluster.serverGroups, { isDisabled: true, region: serverGroup.region });\n AzureRollbackServerGroupModal.show({ application: app, serverGroup, disabledServerGroups });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'azureCloneServerGroupCtrl as ctrl',\n size: 'lg',\n resolve: {\n title: () => 'Clone ' + serverGroup.name,\n application: () => app,\n serverGroupCommand: () =>\n azureServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup),\n },\n });\n };\n\n this.truncateCommitHash = function () {\n if ($scope.serverGroup && $scope.serverGroup.buildInfo && $scope.serverGroup.buildInfo.commit) {\n return $scope.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n },\n ]);\n","import { module } from 'angular';\n\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER } from './serverGroupDetails.azure.controller';\n\n('use strict');\n\nexport const AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE = 'spinnaker.azure.serverGroup.details.azure';\nexport const name = AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE; // for backwards compatibility\nmodule(AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE, [\n AZURE_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_AZURE_CONTROLLER,\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { ApplicationNameValidator } from '@spinnaker/core';\n\nexport const AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR = 'spinnaker.azure.validation.applicationName';\nexport const name = AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR; // for backwards compatibility\nmodule(AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR, [])\n .factory('azureApplicationNameValidator', function () {\n function validateSpecialCharacters(name, errors) {\n const pattern = /^([a-zA-Z][a-zA-Z0-9]*)?$/;\n if (!pattern.test(name)) {\n errors.push(\n 'The application name must begin with a letter and must contain only letters or digits. No ' +\n 'special characters are allowed.',\n );\n }\n }\n\n function validate(name) {\n const warnings = [];\n const errors = [];\n\n if (name && name.length) {\n validateSpecialCharacters(name, errors);\n }\n\n return {\n warnings: warnings,\n errors: errors,\n };\n }\n\n return {\n validate: validate,\n };\n })\n .run([\n 'azureApplicationNameValidator',\n function (azureApplicationNameValidator) {\n ApplicationNameValidator.registerValidator('azure', azureApplicationNameValidator);\n },\n ]);\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport './help/azure.help';\nimport { AZURE_IMAGE_IMAGE_READER } from './image/image.reader';\nimport { AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE } from './instance/azureInstanceType.service';\nimport { AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { AzureLoadBalancerChoiceModal } from './loadBalancer/configure/AzureLoadBalancerChoiceModal';\nimport { AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER } from './loadBalancer/configure/createLoadBalancer.controller';\nimport { AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER } from './loadBalancer/details/loadBalancerDetail.controller';\nimport { AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER } from './loadBalancer/loadBalancer.transformer';\nimport logo from './logo/logo_azure.png';\nimport { AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE } from './pipeline/stages/bake/azureBakeStage';\nimport { AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/azureDestroyAsgStage';\nimport { AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE } from './pipeline/stages/disableAsg/azureDisableAsgStage';\nimport { AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE } from './pipeline/stages/enableAsg/azureEnableAsgStage';\nimport { AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL } from './securityGroup/configure/CreateSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL } from './securityGroup/configure/EditSecurityGroupCtrl';\nimport { AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './securityGroup/details/securityGroupDetail.controller';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_READER } from './securityGroup/securityGroup.reader';\nimport { AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup/securityGroup.transformer';\nimport { AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE } from './serverGroup/configure/serverGroup.configure.azure.module';\nimport { AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER } from './serverGroup/configure/wizard/CloneServerGroup.azure.controller';\nimport { AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE } from './serverGroup/details/serverGroup.details.module';\nimport { AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\nimport { AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR } from './validation/applicationName.validator';\n\nimport './logo/azure.logo.less';\n\nexport const AZURE_MODULE = 'spinnaker.azure';\nmodule(AZURE_MODULE, [\n AZURE_PIPELINE_STAGES_DESTROYASG_AZUREDESTROYASGSTAGE,\n AZURE_PIPELINE_STAGES_ENABLEASG_AZUREENABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_DISABLEASG_AZUREDISABLEASGSTAGE,\n AZURE_PIPELINE_STAGES_BAKE_AZUREBAKESTAGE,\n AZURE_SERVERGROUP_DETAILS_SERVERGROUP_DETAILS_MODULE,\n AZURE_SERVERGROUP_SERVERGROUP_TRANSFORMER,\n AZURE_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_AZURE_CONTROLLER,\n AZURE_SERVERGROUP_CONFIGURE_SERVERGROUP_CONFIGURE_AZURE_MODULE,\n AZURE_INSTANCE_AZUREINSTANCETYPE_SERVICE,\n AZURE_LOADBALANCER_LOADBALANCER_TRANSFORMER,\n AZURE_LOADBALANCER_DETAILS_LOADBALANCERDETAIL_CONTROLLER,\n AZURE_LOADBALANCER_CONFIGURE_CREATELOADBALANCER_CONTROLLER,\n AZURE_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n AZURE_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n AZURE_SECURITYGROUP_CONFIGURE_CREATESECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_CONFIGURE_EDITSECURITYGROUPCTRL,\n AZURE_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n AZURE_SECURITYGROUP_SECURITYGROUP_READER,\n AZURE_IMAGE_IMAGE_READER,\n AZURE_VALIDATION_APPLICATIONNAME_VALIDATOR,\n]).config(function () {\n CloudProviderRegistry.registerProvider('azure', {\n name: 'Azure',\n logo: {\n path: logo,\n },\n image: {\n reader: 'azureImageReader',\n },\n serverGroup: {\n transformer: 'azureServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'azureServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'azureCloneServerGroupCtrl',\n commandBuilder: 'azureServerGroupCommandBuilder',\n configurationService: 'azureServerGroupConfigurationService',\n },\n instance: {\n instanceTypeService: 'azureInstanceTypeService',\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'azureInstanceDetailsCtrl',\n },\n loadBalancer: {\n transformer: 'azureLoadBalancerTransformer',\n detailsTemplateUrl: require('./loadBalancer/details/loadBalancerDetail.html'),\n detailsController: 'azureLoadBalancerDetailsCtrl',\n createLoadBalancerTemplateUrl: require('./loadBalancer/configure/createLoadBalancer.html'),\n createLoadBalancerController: 'azureCreateLoadBalancerCtrl',\n CreateLoadBalancerModal: AzureLoadBalancerChoiceModal,\n },\n securityGroup: {\n transformer: 'azureSecurityGroupTransformer',\n reader: 'azureSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'azureSecurityGroupDetailsCtrl',\n createSecurityGroupTemplateUrl: require('./securityGroup/configure/createSecurityGroup.html'),\n createSecurityGroupController: 'azureCreateSecurityGroupCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('azure', ['redblack']);\n"],"names":[],"mappings":";;;;;;;;;;AAMY,IAAA,QAAA,CAAA;AAAL,CAAA,SAAK,SAAL,EAAA;AACL,EAAA,SAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,mBAAA,CAAA;AACA,EAAA,SAAA,CAAA,SAAA,CAAA,uBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,uBAAA,CAAA;AACA,EAAA,SAAA,CAAA,SAAA,CAAA,yBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,yBAAA,CAAA;AACA,EAAA,SAAA,CAAA,SAAA,CAAA,2BAAA,CAAA,GAAA,CAAA,CAAA,GAAA,2BAAA,CAAA;AACA,EAAA,SAAA,CAAA,SAAA,CAAA,6BAAA,CAAA,GAAA,CAAA,CAAA,GAAA,6BAAA,CAAA;AACA,EAAA,SAAA,CAAA,SAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAA,CAAA;AAAA,CANU,EAAA,QAAA,KAAA,QAAA,GAAA,EAAA,CAAA,CAAA,CAAA;AAcL,MAAM,sBAA+C,GAAA;AAAA,EAC1D;AAAA,IACE,IAAM,EAAA,qBAAA;AAAA,IACN,WAAa,EAAA,EAAA;AAAA,GAAA;AAAA,EAEf;AAAA,IACE,IAAM,EAAA,2BAAA;AAAA,IACN,WAAa,EAAA,EAAA;AAAA,GAAA;AAAA,CAAA,CAAA;AAIjB,MAA6B,QAAA,GAAA,MAAA;AAAA,EAAA,OAMb,UAAU,UAAiD,EAAA;AACvE,IAAA,IAAI,CAAC,UAAY,EAAA;AACf,MAAO,OAAA;AAAA,QACL,OAAS,EAAA,KAAA;AAAA,QACT,KAAO,EAAA,CAAA;AAAA,QACP,YAAc,EAAA,6BAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAGlB,IAAM,MAAA,MAAA,GAAiB,MAAO,CAAA,IAAA,CAAK,UAAY,CAAA,CAAA,MAAA,CAAA;AAC/C,IAAA,IAAI,EAAE,MAAA,IAAU,CAAK,IAAA,MAAA,IAAU,SAAQ,cAAiB,CAAA,EAAA;AACtD,MAAO,OAAA;AAAA,QACL,OAAS,EAAA,KAAA;AAAA,QACT,KAAO,EAAA,CAAA;AAAA,QACP,YAAA,EAAc,qCAAqC,QAAQ,CAAA,cAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAI/D,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAM,CAAA,IAAA,MAAA,CAAO,QAAQ,UAAa,CAAA,EAAA;AAC/C,MAAI,IAAA,CAAA,CAAE,MAAS,GAAA,QAAA,CAAQ,yBAA2B,EAAA;AAChD,QAAO,OAAA;AAAA,UACL,OAAS,EAAA,KAAA;AAAA,UACT,KAAO,EAAA,CAAA;AAAA,UACP,YAAA,EAAc,CAAsB,mBAAA,EAAA,CAAA,CAAA,oBAAA,EAAwB,QAAQ,CAAA,yBAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAGxE,MAAI,IAAA,CAAA,CAAE,MAAS,GAAA,QAAA,CAAQ,2BAA6B,EAAA;AAClD,QAAO,OAAA;AAAA,UACL,OAAS,EAAA,KAAA;AAAA,UACT,KAAO,EAAA,CAAA;AAAA,UACP,YAAA,EAAc,CAAwB,qBAAA,EAAA,CAAA,CAAA,oBAAA,EAAwB,QAAQ,CAAA,2BAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAG1E,MAAI,IAAA,QAAA,CAAQ,wBAAyB,CAAA,IAAA,CAAK,CAAI,CAAA,EAAA;AAC5C,QAAO,OAAA;AAAA,UACL,OAAS,EAAA,KAAA;AAAA,UACT,KAAO,EAAA,CAAA;AAAA,UACP,cAAc,CAAkC,+BAAA,EAAA,CAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAGpD,MAAI,IAAA,QAAA,CAAQ,wBAAyB,CAAA,IAAA,CAAK,CAAI,CAAA,EAAA;AAC5C,QAAO,OAAA;AAAA,UACL,OAAS,EAAA,KAAA;AAAA,UACT,KAAO,EAAA,CAAA;AAAA,UACP,cAAc,CAAoC,iCAAA,EAAA,CAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAIxD,IAAO,OAAA;AAAA,MACL,OAAS,EAAA,IAAA;AAAA,MACT,KAAO,EAAA,IAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAIG,oBAAoB,UAA+C,EAAA;AAC/E,IAAA,UAAA,GAAa,UAAW,CAAA,WAAA,EAAA,CAAc,KAAM,CAAA,GAAA,CAAA,CAAK,IAAK,CAAA,GAAA,CAAA,CAAA;AACtD,IAAA,OAAO,uBAAuB,IAAK,CAAA,CAAC,OAA2B,EAAG,CAAA,IAAA,CAAK,kBAAkB,UAAe,CAAA,IAAA,IAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;AA7D5G,IAAA,OAAA,GAAA,QAAA,CAAA;AAAA,QACyB,cAAyB,GAAA,CAAA,CAAA;AADlD,QAEyB,yBAAoC,GAAA,GAAA,CAAA;AAF7D,QAGyB,2BAAsC,GAAA,GAAA,CAAA;AAH/D,QAIyB,wBAAmC,GAAA,YAAA;;AChC5D,MAAM,YAA0C,GAAA;AAAA,EAC9C,yCAA2C,EAAA,uEAAA;AAAA,EAC3C,sCACE,EAAA,yXAAA;AAAA,EACF,oCACE,EAAA,6PAAA;AAAA,EACF,6CACE,EAAA,yQAAA;AAAA,EACF,yCACE,EAAA,uQAAA;AAAA,EACF,kDACE,EAAA,iRAAA;AAAA,EACF,uCAAyC,EAAA,gEAAA;AAAA,EACzC,qCACE,EAAA,qIAAA;AAAA,EACF,4CACE,EAAA,iNAAA;AAAA,EACF,gDACE,EAAA,2MAAA;AAAA,EACF,6BAA+B,EAAA,gEAAA;AAAA,EAC/B,yBACE,EAAA,0JAAA;AAAA,EACF,0BACE,EAAA,mGAAA;AAAA,EACF,kCACE,EAAA,sNAAA;AAAA,EACF,oCACE,EAAA,mFAAA;AAAA,EACF,8BAAgC,EAAA,wDAAA;AAAA,EAChC,8BAAA,EAAgC,mDAAmD,OAAQ,CAAA,cAAA,CAAA,cAAA,CAAA;AAAA,EAC3F,oCACE,EAAA,+YAAA;AAAA,EACF,uBACE,EAAA,+KAAA;AAAA,EACF,8BACE,EAAA,iGAAA;AAAA,EACF,kDACE,EAAA,wFAAA;AAAA,EACF,2BACE,EAAA,6QAAA;AAAA,EACF,0CACE,EAAA,oKAAA;AAAA,EACF,4BACE,EAAA,6OAAA;AAAA,EACF,yCACE,EAAA,4FAAA;AAAA,EACF,mCACE,EAAA,qMAAA;AAAA,EACF,8CACE,EAAA,kIAAA;AAAA,EACF,mDACE,EAAA,4FAAA;AAAA,EACF,0DACE,EAAA,+hBAAA;AAAA,CAAA,CAAA;AAGJ,MAAO,CAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,CAAC,QAAQ,oBAAqB,CAAA,QAAA,CAAS,KAAK,YAAa,CAAA,GAAA,CAAA,CAAA,CAAA;;ACrDpF,MAAM,wBAA2B,GAAA,8BAAA,CAAA;AAExC,MAAA,CAAO,wBAA0B,EAAA,EAAA,CAAA,CAAI,OAAQ,CAAA,kBAAA,EAAoB,WAAY;AAC3E,EAAA,SAAA,UAAA,CAAoB,MAAQ,EAAA;AAC1B,IAAA,OAAO,KAAK,cACT,CAAA,CAAA,KAAA,CAAM,QACN,GACA,EAAA,CAAA,IAAA,CACC,SAAU,OAAS,EAAA;AACjB,MAAO,OAAA,OAAA,CAAA;AAAA,KAAA,EAET,WAAY;AACV,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAKf,EAAkB,SAAA,QAAA,CAAA,OAAA,EAAS,QAAQ,WAAa,EAAA;AAC9C,IAAA,OAAO,IAAK,CAAA,SAAA,CAAA,CACT,IAAK,CAAA,WAAA,EAAa,MAAQ,EAAA,OAAA,CAAA,CAC1B,KAAM,CAAA,EAAE,QAAU,EAAA,OAAA,EAAA,CAAA,CAClB,GACA,EAAA,CAAA,IAAA,CACC,SAAU,OAAS,EAAA;AACjB,MAAA,OAAO,OAAW,IAAA,OAAA,CAAQ,MAAS,GAAA,OAAA,CAAQ,CAAK,CAAA,GAAA,IAAA,CAAA;AAAA,KAAA,EAElD,WAAY;AACV,MAAO,OAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAKf,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,QAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;;ACnCG,MAAM,wCAA2C,GAAA,sCAAA,CAAA;AAExD,MAAO,CAAA,wCAAA,EAA0C,EAAI,CAAA,CAAA,OAAA,CAAQ,0BAA4B,EAAA;AAAA,EACvF,IAAA;AAAA,EACA,SAAU,EAAI,EAAA;AACZ,IAAA,MAAM,CAAI,GAAA;AAAA,MACR,IAAM,EAAA,UAAA;AAAA,MACN,WACE,EAAA,4LAAA;AAAA,MACF,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,eAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,cAAA;AAAA,UACN,KAAO,EAAA,cAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,eAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,cAAA;AAAA,UACN,KAAO,EAAA,cAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,eAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,eAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,eAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAMd,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,IAAM,EAAA,aAAA;AAAA,MACN,WACE,EAAA,iHAAA;AAAA,MACF,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAMd,IAAA,MAAM,GAAM,GAAA;AAAA,MACV,IAAM,EAAA,YAAA;AAAA,MACN,WACE,EAAA,gHAAA;AAAA,MACF,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,IAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAMd,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,IAAM,EAAA,aAAA;AAAA,MACN,WAAa,EAAA,EAAA;AAAA,MACb,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAMd,IAAA,MAAM,GAAM,GAAA;AAAA,MACV,IAAM,EAAA,YAAA;AAAA,MACN,WAAa,EAAA,EAAA;AAAA,MACb,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAMd,IAAA,MAAM,GAAM,GAAA;AAAA,MACV,IAAM,EAAA,YAAA;AAAA,MACN,WAAa,EAAA,EAAA;AAAA,MACb,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,gBAAA;AAAA,UACN,KAAO,EAAA,gBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,EAAA;AAAA,YACP,IAAM,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAMd,IAAA,MAAM,EAAK,GAAA;AAAA,MACT,IAAM,EAAA,WAAA;AAAA,MACN,WAAa,EAAA,EAAA;AAAA,MACb,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,eAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGV;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,eAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,OAAS,EAAA;AAAA,YACP,IAAM,EAAA,KAAA;AAAA,YACN,KAAO,EAAA,CAAA;AAAA,YACP,IAAM,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAMd,IAAA,MAAM,IAAO,GAAA;AAAA,MACX,IAAM,EAAA,aAAA;AAAA,MACN,WAAa,EAAA,EAAA;AAAA,MACb,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,GAAG,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,QAE1C;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,GAAG,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,QAE1C;AAAA,UACE,IAAM,EAAA,iBAAA;AAAA,UACN,KAAO,EAAA,iBAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,QAE3C;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,GAAA,EAAA;AAAA,SAAA;AAAA,QAE3C;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,GAAA,EAAA;AAAA,SAAA;AAAA,QAE3C;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,GAAA,EAAA;AAAA,SAAA;AAAA,QAE3C;AAAA,UACE,IAAM,EAAA,kBAAA;AAAA,UACN,KAAO,EAAA,kBAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,GAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,GAAA,EAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAK/C,IAAA,MAAM,EAAK,GAAA;AAAA,MACT,IAAM,EAAA,WAAA;AAAA,MACN,WAAa,EAAA,EAAA;AAAA,MACb,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,cAAA;AAAA,UACN,KAAO,EAAA,cAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,GAAG,IAAM,EAAA,CAAA,EAAA;AAAA,SAAA;AAAA,QAE1C;AAAA,UACE,IAAM,EAAA,cAAA;AAAA,UACN,KAAO,EAAA,cAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,GAAG,IAAM,EAAA,CAAA,EAAA;AAAA,SAAA;AAAA,QAE1C;AAAA,UACE,IAAM,EAAA,cAAA;AAAA,UACN,KAAO,EAAA,cAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,QAE3C;AAAA,UACE,IAAM,EAAA,cAAA;AAAA,UACN,KAAO,EAAA,cAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,QAE3C;AAAA,UACE,IAAM,EAAA,eAAA;AAAA,UACN,KAAO,EAAA,eAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAK/C,IAAA,MAAM,CAAI,GAAA;AAAA,MACR,IAAM,EAAA,UAAA;AAAA,MACN,WAAa,EAAA,EAAA;AAAA,MACb,aAAe,EAAA;AAAA,QACb;AAAA,UACE,IAAM,EAAA,aAAA;AAAA,UACN,KAAO,EAAA,aAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,GAAG,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,QAE1C;AAAA,UACE,IAAM,EAAA,aAAA;AAAA,UACN,KAAO,EAAA,aAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,GAAG,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,QAE1C;AAAA,UACE,IAAM,EAAA,aAAA;AAAA,UACN,KAAO,EAAA,aAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,CAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,EAAA,EAAA;AAAA,SAAA;AAAA,QAE3C;AAAA,UACE,IAAM,EAAA,aAAA;AAAA,UACN,KAAO,EAAA,aAAA;AAAA,UACP,GAAK,EAAA,CAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,GAAA,EAAA;AAAA,SAAA;AAAA,QAE3C;AAAA,UACE,IAAM,EAAA,cAAA;AAAA,UACN,KAAO,EAAA,cAAA;AAAA,UACP,GAAK,EAAA,EAAA;AAAA,UACL,MAAQ,EAAA,EAAA;AAAA,UACR,SAAS,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,IAAI,IAAM,EAAA,GAAA,EAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAK/C,IAAA,MAAM,UAAa,GAAA;AAAA,MACjB;AAAA,QACE,IAAM,EAAA,SAAA;AAAA,QACN,KAAO,EAAA,iBAAA;AAAA,QACP,WACE,EAAA,oIAAA;AAAA,QACF,UAAU,CAAC,CAAA,EAAG,MAAM,GAAK,EAAA,IAAA,EAAM,KAAK,GAAK,EAAA,EAAA,CAAA;AAAA,QACzC,IAAM,EAAA,KAAA;AAAA,OAAA;AAAA,MAER;AAAA,QACE,IAAM,EAAA,SAAA;AAAA,QACN,KAAO,EAAA,mBAAA;AAAA,QACP,WACE,EAAA,8HAAA;AAAA,QACF,QAAA,EAAU,CAAC,IAAA,EAAM,EAAI,EAAA,CAAA,CAAA;AAAA,QACrB,IAAM,EAAA,KAAA;AAAA,OAAA;AAAA,MAER;AAAA,QACE,IAAM,EAAA,QAAA;AAAA,QACN,KAAO,EAAA,aAAA;AAAA,QACP,WAAa,EAAA,iCAAA;AAAA,QACb,QAAU,EAAA,EAAA;AAAA,QACV,IAAM,EAAA,UAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIV,IAAA,SAAA,gBAAA,CAA0B,IAAM,EAAA;AAC9B,MAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,IAAA,CAAK,OAAS,EAAA;AAC1B,QAAO,OAAA,CAAA,CAAA;AAAA,OAAA;AAET,MAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,KAAQ,GAAA,IAAA,CAAK,OAAQ,CAAA,IAAA,CAAA;AAAA,KAAA;AAG3C,IAAA,SAAA,UAAA,CAAoB,QAAU,EAAA;AAC5B,MAAA,MAAM,KAAQ,GAAA;AAAA,QACZ,GAAK,EAAA;AAAA,UACH,KAAK,MAAO,CAAA,SAAA;AAAA,UACZ,GAAA,EAAK,CAAC,MAAO,CAAA,SAAA;AAAA,SAAA;AAAA,QAEf,MAAQ,EAAA;AAAA,UACN,KAAK,MAAO,CAAA,SAAA;AAAA,UACZ,GAAA,EAAK,CAAC,MAAO,CAAA,SAAA;AAAA,SAAA;AAAA,QAEf,OAAS,EAAA;AAAA,UACP,KAAK,MAAO,CAAA,SAAA;AAAA,UACZ,GAAA,EAAK,CAAC,MAAO,CAAA,SAAA;AAAA,SAAA;AAAA,QAEf,QAAU,EAAA,EAAA;AAAA,OAAA,CAAA;AAGZ,MAAA,IAAI,QAAS,CAAA,QAAA,IAAY,QAAS,CAAA,QAAA,CAAS,MAAQ,EAAA;AACjD,QAAS,QAAA,CAAA,QAAA,CAAS,OAAQ,CAAA,SAAU,MAAQ,EAAA;AAC1C,UAAM,KAAA,CAAA,QAAA,CAAS,KAAK,MAAO,CAAA,IAAA,CAAA,CAAA;AAC3B,UAAA,MAAM,SAAS,CAAE,CAAA,KAAA,CAAM,OAAO,aAAe,EAAA,KAAA,CAAA,CAAO,OAAO,MAAO,CAAA,SAAA,CAAA;AAClE,UAAM,MAAA,MAAA,GAAS,EAAE,KAAM,CAAA,MAAA,CAAO,eAAe,KAAO,CAAA,CAAA,GAAA,IAAO,CAAC,MAAO,CAAA,SAAA,CAAA;AACnE,UAAA,MAAM,YAAY,CAAE,CAAA,KAAA,CAAM,OAAO,aAAe,EAAA,QAAA,CAAA,CAAU,UAAU,MAAO,CAAA,SAAA,CAAA;AAC3E,UAAM,MAAA,SAAA,GAAY,EAAE,KAAM,CAAA,MAAA,CAAO,eAAe,QAAU,CAAA,CAAA,MAAA,IAAU,CAAC,MAAO,CAAA,SAAA,CAAA;AAC5E,UAAA,MAAM,aAAa,gBAAiB,CAAA,CAAA,CAAE,MAAM,MAAO,CAAA,aAAA,EAAe,sBAAsB,MAAO,CAAA,SAAA,CAAA;AAC/F,UAAM,MAAA,UAAA,GAAa,iBAAiB,CAAE,CAAA,KAAA,CAAM,OAAO,aAAe,EAAA,gBAAA,CAAA,CAAA,IAAsB,CAAC,MAAO,CAAA,SAAA,CAAA;AAEhG,UAAA,KAAA,CAAM,IAAI,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,CAAM,IAAI,GAAK,EAAA,MAAA,CAAA,CAAA;AACxC,UAAA,KAAA,CAAM,IAAI,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,CAAM,IAAI,GAAK,EAAA,MAAA,CAAA,CAAA;AACxC,UAAA,KAAA,CAAM,OAAO,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,CAAM,OAAO,GAAK,EAAA,SAAA,CAAA,CAAA;AAC9C,UAAA,KAAA,CAAM,OAAO,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,CAAM,OAAO,GAAK,EAAA,SAAA,CAAA,CAAA;AAC9C,UAAA,KAAA,CAAM,QAAQ,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,CAAM,QAAQ,GAAK,EAAA,UAAA,CAAA,CAAA;AAChD,UAAA,KAAA,CAAM,QAAQ,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,CAAM,QAAQ,GAAK,EAAA,UAAA,CAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAIpD,MAAO,OAAA,KAAA,CAAA;AAAA,KAAA;AAGT,IAAyB,SAAA,aAAA,GAAA;AACvB,MAAW,UAAA,CAAA,GAAA,CAAI,SAAU,QAAU,EAAA;AACjC,QAAW,KAAA,MAAA,MAAA,IAAU,SAAS,QAAU,EAAA;AACtC,UAAW,KAAA,MAAA,IAAA,IAAQ,OAAO,aAAe,EAAA;AACvC,YAAA,IAAI,KAAK,UAAc,IAAA,KAAA,CAAA;AAAW,cAAA,IAAA,CAAK,UAAa,GAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAGxD,QAAA,QAAA,CAAS,QAAQ,UAAW,CAAA,QAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAE9B,MAAA,OAAO,GAAG,IAAK,CAAA,UAAA,CAAA,CAAA;AAAA,KAAA;AAGjB,IAAA,MAAM,sBAAsB,SAA+B,oBAAA,GAAA;AACzD,MAAO,OAAA,aAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAA,SAAA,2BAAA,CAAqC,4BAA4B,iBAAmB,EAAA;AAElF,MAAA,MAAM,CAAC,QAAY,CAAA,GAAA,iBAAA,CAAA;AACnB,MAAA,OAAO,0BAA2B,CAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAGpC,IAAO,OAAA;AAAA,MACL,aAAA;AAAA,MACA,2BAAA;AAAA,MACA,mBAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AC5yBC,MAAM,kDAAqD,GAAA,4CAAA,CAAA;AAElE,MAAA,CAAO,kDAAoD,EAAA,CAAC,kBAAoB,EAAA,oBAAA,CAAA,CAAA,CAAuB,WACrG,0BACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAU,MAAQ,EAAA,MAAA,EAAQ,SAAW,EAAA,QAAA,EAAU,KAAK,EAAI,EAAA;AAEtD,IAAO,MAAA,CAAA,kBAAA,GAAqB,qBAAsB,CAAA,QAAA,CAAS,OAAS,EAAA,6BAAA,CAAA,CAAA;AAEpE,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,MACT,YAAY,GAAI,CAAA,YAAA;AAAA,KAAA,CAAA;AAGlB,IAAA,SAAA,oBAAA,CAA8B,WAAU,MAAQ,EAAA;AAE9C,MAAA,IAAI,IAAI,YAAc,EAAA;AACpB,QAAA,SAAA,CAAS,SAAS,MAAO,CAAA,MAAA,CAAA;AAAA,OAAA;AAG3B,MAAS,SAAA,CAAA,MAAA,GAAS,UAAS,MAAU,IAAA,EAAA,CAAA;AACrC,MAAA,MAAM,kBAAqB,GAAA,SAAA,CAAS,MAAO,CAAA,MAAA,CAAO,SAAU,MAAQ,EAAA;AAClE,QAAA,OAAO,MAAO,CAAA,IAAA,KAAS,OAAW,IAAA,MAAA,CAAO,KAAU,KAAA,SAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAGrD,MAAA,IAAI,OAAO,MAAQ,EAAA;AACjB,QAAmB,kBAAA,CAAA,OAAA,CAAQ,SAAU,MAAQ,EAAA;AAC3C,UAAA,MAAM,YAAe,GAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,SAAU,YAAc,EAAA;AAChE,YAAO,OAAA,YAAA,CAAa,SAAS,MAAO,CAAA,IAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAEtC,UAAA,IAAI,aAAa,MAAQ,EAAA;AACvB,YAAE,CAAA,CAAA,QAAA,CAAS,QAAQ,YAAa,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAItC,MAAA,MAAA,CAAO,aAAgB,GAAA,kBAAA,CAAA;AAAA,KAAA;AAGzB,IAA4B,SAAA,gBAAA,GAAA;AAC1B,MAAA,MAAM,SAAY,GAAA,EAAA,CAAA;AAClB,MAAI,IAAA,eAAA,EAAiB,aAAe,EAAA,OAAA,EAAS,MAAQ,EAAA,KAAA,CAAA;AACrD,MAAI,IAAA,CAAC,IAAI,YAAc,EAAA;AAErB,QAAkB,eAAA,GAAA,EAAA,CAAA;AAClB,QAAgB,aAAA,GAAA,EAAA,CAAA;AAChB,QAAA,OAAA,GAAU,QAAS,CAAA,OAAA,CAAA;AACnB,QAAA,MAAA,GAAS,QAAS,CAAA,MAAA,CAAA;AAAA,OACb,MAAA;AACL,QAAA,GAAA,CAAI,YAAa,CAAA,IAAA,CAAK,IAAK,CAAA,SAAU,WAAa,EAAA;AAChD,UAAA,OAAO,WAAY,CAAA,SAAA,CAAU,IAAK,CAAA,SAAU,gBAAkB,EAAA;AAC5D,YAAI,IAAA,gBAAA,CAAiB,EAAO,KAAA,QAAA,CAAS,UAAY,EAAA;AAC/C,cAAkB,eAAA,GAAA,gBAAA,CAAA;AAClB,cAAA,aAAA,GAAgB,WAAY,CAAA,aAAA,CAAA;AAC5B,cAAA,OAAA,GAAU,WAAY,CAAA,OAAA,CAAA;AACtB,cAAA,MAAA,GAAS,WAAY,CAAA,MAAA,CAAA;AACrB,cAAA,KAAA,GAAQ,WAAY,CAAA,KAAA,CAAA;AACpB,cAAA,SAAA,CAAU,cAAc,WAAY,CAAA,IAAA,CAAA;AACpC,cAAA,SAAA,CAAU,QAAQ,WAAY,CAAA,KAAA,CAAA;AAC9B,cAAO,OAAA,IAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAIb,QAAA,IAAI,CAAC,eAAiB,EAAA;AAEpB,UAAA,GAAA,CAAI,aAAc,CAAA,IAAA,CAAK,IAAK,CAAA,SAAU,YAAc,EAAA;AAClD,YAAA,OAAO,YAAa,CAAA,SAAA,CAAU,IAAK,CAAA,SAAU,gBAAkB,EAAA;AAC7D,cAAI,IAAA,gBAAA,CAAiB,EAAO,KAAA,QAAA,CAAS,UAAY,EAAA;AAC/C,gBAAkB,eAAA,GAAA,gBAAA,CAAA;AAClB,gBAAA,aAAA,GAAgB,CAAC,YAAa,CAAA,IAAA,CAAA,CAAA;AAC9B,gBAAA,OAAA,GAAU,YAAa,CAAA,OAAA,CAAA;AACvB,gBAAA,MAAA,GAAS,YAAa,CAAA,MAAA,CAAA;AACtB,gBAAA,KAAA,GAAQ,YAAa,CAAA,KAAA,CAAA;AACrB,gBAAO,OAAA,IAAA,CAAA;AAAA,eAAA;AAAA,aAAA,CAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAIb,UAAA,IAAI,CAAC,eAAiB,EAAA;AAEpB,YAAA,GAAA,CAAI,aAAc,CAAA,IAAA,CAAK,IAAK,CAAA,SAAU,YAAc,EAAA;AAClD,cAAA,OAAO,YAAa,CAAA,YAAA,CAAa,IAAK,CAAA,SAAU,WAAa,EAAA;AAC3D,gBAAI,IAAA,CAAC,YAAY,UAAY,EAAA;AAC3B,kBAAO,OAAA,KAAA,CAAA;AAAA,iBAAA;AAET,gBAAA,OAAO,WAAY,CAAA,SAAA,CAAU,IAAK,CAAA,SAAU,gBAAkB,EAAA;AAC5D,kBAAI,IAAA,gBAAA,CAAiB,EAAO,KAAA,QAAA,CAAS,UAAY,EAAA;AAC/C,oBAAkB,eAAA,GAAA,gBAAA,CAAA;AAClB,oBAAA,aAAA,GAAgB,CAAC,YAAa,CAAA,IAAA,CAAA,CAAA;AAC9B,oBAAA,OAAA,GAAU,YAAa,CAAA,OAAA,CAAA;AACvB,oBAAA,MAAA,GAAS,YAAa,CAAA,MAAA,CAAA;AACtB,oBAAA,KAAA,GAAQ,YAAa,CAAA,KAAA,CAAA;AACrB,oBAAO,OAAA,IAAA,CAAA;AAAA,mBAAA;AAAA,iBAAA,CAAA,CAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AASrB,MAAI,IAAA,eAAA,IAAmB,WAAW,MAAQ,EAAA;AACxC,QAAA,SAAA,CAAU,OAAU,GAAA,OAAA,CAAA;AACpB,QAAA,SAAA,CAAU,MAAS,GAAA,MAAA,CAAA;AACnB,QAAA,oBAAA,CAAqB,qBAAqB,WAAa,EAAA,SAAA,CAAA,CAAA;AACvD,QAAO,OAAA,cAAA,CAAe,mBAAmB,OAAS,EAAA,MAAA,EAAQ,SAAS,UAAY,CAAA,CAAA,IAAA,CAC7E,SAAU,OAAS,EAAA;AACjB,UAAA,MAAA,CAAO,MAAM,OAAU,GAAA,KAAA,CAAA;AACvB,UAAA,oBAAA,CAAqB,eAAiB,EAAA,OAAA,CAAA,CAAA;AACtC,UAAO,MAAA,CAAA,QAAA,GAAW,CAAE,CAAA,QAAA,CAAS,OAAS,EAAA,eAAA,CAAA,CAAA;AACtC,UAAA,MAAA,CAAO,SAAS,OAAU,GAAA,OAAA,CAAA;AAC1B,UAAA,MAAA,CAAO,SAAS,MAAS,GAAA,MAAA,CAAA;AACzB,UAAA,MAAA,CAAO,SAAS,KAAQ,GAAA,KAAA,CAAA;AACxB,UAAA,MAAA,CAAO,SAAS,aAAgB,GAAA,aAAA,CAAA;AAChC,UAAA,MAAM,kBAAkB,CAAE,CAAA,IAAA,CAAK,MAAO,CAAA,aAAA,EAAe,SAAU,MAAQ,EAAA;AACrE,YAAA,OAAO,OAAO,IAAS,KAAA,WAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAEzB,UAAI,IAAA,eAAA,IAAmB,gBAAgB,UAAY,EAAA;AACjD,YAAA,MAAM,UAAU,eAAgB,CAAA,UAAA,CAAA;AAChC,YAAO,MAAA,CAAA,QAAA,CAAS,aAAa,OAAQ,CAAA,QAAA,CAAS,OAAO,OAAQ,CAAA,KAAA,CAAM,OAAO,CAAC,OAAA,CAAA,CAAA;AAAA,WAAA;AAE7E,UAAO,MAAA,CAAA,aAAA,GAAgB,OAAQ,CAAA,aAAA,IAAiB,OAAQ,CAAA,gBAAA,CAAA;AAAA,SAAA,EAE1D,WAAY;AAGV,UAAA,MAAA,CAAO,MAAM,OAAU,GAAA,KAAA,CAAA;AACvB,UAAA,MAAA,CAAO,EAAG,CAAA,GAAA,CAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAKhB,MAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,QAAA,MAAA,CAAO,qBAAqB,QAAS,CAAA,UAAA,CAAA;AACrC,QAAA,MAAA,CAAO,MAAM,OAAU,GAAA,KAAA,CAAA;AAAA,OAAA;AAGzB,MAAA,OAAO,GAAG,IAAK,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA;AAGjB,IAAA,IAAA,CAAK,gCAAgC,WAAY;AAC/C,MAAA,OAAO,MAAO,CAAA,QAAA,CAAS,MAAO,CAAA,IAAA,CAAK,SAAU,MAAQ,EAAA;AACnD,QAAA,OAAO,OAAO,IAAS,KAAA,cAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAI3B,IAAA,IAAA,CAAK,8BAA8B,WAAY;AAC7C,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AACxB,MAAA,IAAI,CAAC,SAAS,CAAA,aAAA,IAAiB,CAAC,SAAA,CAAS,cAAc,MAAQ,EAAA;AAC7D,QAAO,OAAA,KAAA,CAAA;AAAA,OAAA;AAET,MAAA,MAAM,YAAe,GAAA,SAAA,CAAS,MAAO,CAAA,IAAA,CAAK,SAAU,MAAQ,EAAA;AAC1D,QAAA,OAAO,MAAO,CAAA,IAAA,KAAS,cAAkB,IAAA,MAAA,CAAO,KAAU,KAAA,cAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAE5D,MAAA,MAAM,qBAAwB,GAAA,SAAA,CAAS,MAAO,CAAA,IAAA,CAAK,SAAU,MAAQ,EAAA;AACnE,QAAA,OAAO,OAAO,IAAS,KAAA,cAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAEzB,MAAA,OAAO,gBAAgB,CAAC,qBAAA,CAAA;AAAA,KAAA,CAAA;AAG1B,IAAA,IAAA,CAAK,2BAA2B,WAAY;AAC1C,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AACxB,MAAA,MAAM,eAAkB,GAAA,SAAA,CAAS,MAAO,CAAA,MAAA,CAAO,SAAU,MAAQ,EAAA;AAC/D,QAAA,OAAO,OAAO,IAAS,KAAA,WAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAEzB,MAAA,OAAO,eAAgB,CAAA,MAAA,GAAS,eAAgB,CAAA,CAAA,CAAA,CAAG,UAAU,cAAiB,GAAA,KAAA,CAAA;AAAA,KAAA,CAAA;AAGhF,IAAA,IAAA,CAAK,oBAAoB,SAA6B,iBAAA,GAAA;AACpD,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AAExB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,iBAAiB,SAAS,CAAA,UAAA;AAAA,QACjC,gBAAgB,WAAY;AAC1B,UAAA,IAAI,OAAO,QAAS,CAAA,oBAAA,EAAsB,EAAE,UAAA,EAAY,UAAS,UAAe,EAAA,CAAA,EAAA;AAC9E,YAAA,MAAA,CAAO,EAAG,CAAA,GAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,CAAA;AAKhB,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,cAAA,CAAe,kBAAkB,SAAU,EAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGpD,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAA,EAAQ,mBAAsB,GAAA,SAAA,CAAS,UAAa,GAAA,GAAA;AAAA,QACpD,UAAA,EAAY,eAAe,SAAS,CAAA,UAAA;AAAA,QACpC,SAAS,SAAS,CAAA,OAAA;AAAA,QAClB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,IAAA,CAAK,wCAAwC,SAAiD,qCAAA,GAAA;AAC5F,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AAExB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,cAAiB,GAAA,SAAA,CAAS,UAAa,GAAA,6BAAA;AAAA,QAC9C,gBAAgB,WAAY;AAC1B,UAAA,IAAI,OAAO,QAAS,CAAA,oBAAA,EAAsB,EAAE,UAAA,EAAY,UAAS,UAAe,EAAA,CAAA,EAAA;AAC9E,YAAA,MAAA,CAAO,EAAG,CAAA,GAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,CAAA;AAKhB,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,cAAA,CAAe,sCAAsC,SAAU,EAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGxE,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,QAAQ,mBAAsB,GAAA,SAAA,CAAS,UAAa,GAAA,cAAA,GAAiB,UAAS,WAAc,GAAA,GAAA;AAAA,QAC5F,UAAY,EAAA,YAAA,GAAe,SAAS,CAAA,UAAA,GAAa,iBAAiB,SAAS,CAAA,WAAA;AAAA,QAC3E,SAAS,SAAS,CAAA,OAAA;AAAA,QAClB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,IAAA,CAAK,iBAAiB,SAA0B,cAAA,GAAA;AAC9C,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AAExB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,eAAe,SAAS,CAAA,UAAA;AAAA,OAAA,CAAA;AAGjC,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,cAAA,CAAe,eAAe,SAAU,EAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGjD,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAA,EAAQ,gBAAmB,GAAA,SAAA,CAAS,UAAa,GAAA,GAAA;AAAA,QACjD,UAAA,EAAY,YAAY,SAAS,CAAA,UAAA;AAAA,QACjC,SAAS,SAAS,CAAA,OAAA;AAAA,QAClB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,IAAA,CAAK,mCAAmC,SAA4C,gCAAA,GAAA;AAClF,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AACxB,MAAM,MAAA,iBAAA,GAAoB,SAAS,CAAA,aAAA,CAAc,IAAK,CAAA,OAAA,CAAA,CAAA;AAEtD,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAO,EAAA,cAAA,GAAiB,SAAS,CAAA,UAAA,GAAa,QAAW,GAAA,iBAAA;AAAA,OAAA,CAAA;AAG3D,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,cAAA,CAAe,iCAAiC,SAAU,EAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGnE,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAQ,EAAA,kBAAA,GAAqB,SAAS,CAAA,UAAA,GAAa,WAAW,iBAAoB,GAAA,GAAA;AAAA,QAClF,UAAA,EAAY,cAAc,SAAS,CAAA,UAAA;AAAA,QACnC,SAAS,SAAS,CAAA,OAAA;AAAA,QAClB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,IAAA,CAAK,qCAAqC,SAA8C,kCAAA,GAAA;AACtF,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AACxB,MAAM,MAAA,iBAAA,GAAoB,SAAS,CAAA,aAAA,CAAc,IAAK,CAAA,OAAA,CAAA,CAAA;AAEtD,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAO,EAAA,gBAAA,GAAmB,SAAS,CAAA,UAAA,GAAa,QAAW,GAAA,iBAAA;AAAA,OAAA,CAAA;AAG7D,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,cAAA,CAAe,mCAAmC,SAAU,EAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGrE,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAQ,EAAA,oBAAA,GAAuB,SAAS,CAAA,UAAA,GAAa,WAAW,iBAAoB,GAAA,GAAA;AAAA,QACpF,UAAA,EAAY,gBAAgB,SAAS,CAAA,UAAA;AAAA,QACrC,SAAS,SAAS,CAAA,OAAA;AAAA,QAClB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,IAAA,CAAK,4BAA4B,SAAqC,yBAAA,GAAA;AACpE,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AAExB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,WAAc,GAAA,SAAA,CAAS,UAAa,GAAA,eAAA;AAAA,OAAA,CAAA;AAG7C,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,cAAA,CAAe,0BAA0B,SAAU,EAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAG5D,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAA,EAAQ,gBAAmB,GAAA,SAAA,CAAS,UAAa,GAAA,gBAAA;AAAA,QACjD,UAAA,EAAY,YAAY,SAAS,CAAA,UAAA;AAAA,QACjC,SAAS,SAAS,CAAA,OAAA;AAAA,QAClB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,IAAA,CAAK,6BAA6B,SAAsC,0BAAA,GAAA;AACtE,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AAExB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,YAAe,GAAA,SAAA,CAAS,UAAa,GAAA,eAAA;AAAA,OAAA,CAAA;AAG9C,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,cAAA,CAAe,2BAA2B,SAAU,EAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAG7D,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAA,EAAQ,iBAAoB,GAAA,SAAA,CAAS,UAAa,GAAA,gBAAA;AAAA,QAClD,UAAA,EAAY,aAAa,SAAS,CAAA,UAAA;AAAA,QAClC,SAAS,SAAS,CAAA,OAAA;AAAA,QAClB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAK,IAAA,CAAA,cAAA,GAAiB,SAAwB,cAAA,CAAA,kBAAA,EAAoB,KAAO,EAAA;AACvE,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AACxB,MAAA,OAAO,SAAS,CAAA,MAAA,CAAO,IAAK,CAAA,SAAU,MAAQ,EAAA;AAC5C,QAAA,OAAO,MAAO,CAAA,IAAA,KAAS,kBAAsB,IAAA,MAAA,CAAO,KAAU,KAAA,KAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIlE,IAAA,MAAM,UAAa,GAAA,GAAA,CAAI,YACnB,GAAA,gBAAA,EAAA,GACA,EAAG,CAAA,GAAA,CAAI,CAAC,GAAA,CAAI,YAAa,CAAA,KAAA,EAAA,EAAS,GAAI,CAAA,aAAA,CAAc,UAAU,IAAK,CAAA,gBAAA,CAAA,CAAA;AAEvE,IAAA,UAAA,CAAW,KAAK,MAAM;AAKpB,MAAA,IAAI,CAAC,MAAA,CAAO,WAAe,IAAA,CAAC,IAAI,YAAc,EAAA;AAC5C,QAAI,GAAA,CAAA,YAAA,CAAa,UAAU,MAAQ,EAAA,gBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAIvC,IAAA,MAAA,CAAO,UAAU,QAAS,CAAA,OAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACjWzB,MAAA,6BAAA,GAAA,cAA2C,MAAM,SAGtD,CAAA;AAAA,EAaA,YAAY,KAAgC,EAAA;AAC1C,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AAWA,IAAA,IAAA,CAAA,MAAA,GAAS,MAAY;AAC3B,MAAK,IAAA,CAAA,KAAA,EAAA,CAAA;AACL,MAAM,MAAA,QAAA,GAAgB,qBAAsB,CAAA,QAAA,CAAS,OAAS,EAAA,cAAA,CAAA,CAAA;AAC9D,MAAA,aAAA,CAAc,aACX,IAAK,CAAA;AAAA,QACJ,aAAa,QAAS,CAAA,6BAAA;AAAA,QACtB,WAAa,EAAA,eAAA;AAAA,QACb,UAAA,EAAY,GAAG,QAAS,CAAA,4BAAA,CAAA,QAAA,CAAA;AAAA,QACxB,IAAM,EAAA,IAAA;AAAA,QACN,OAAS,EAAA;AAAA,UACP,WAAA,EAAa,MAAM,IAAA,CAAK,KAAM,CAAA,GAAA;AAAA,UAC9B,cAAc,MAAW,IAAA;AAAA,UACzB,OAAO,MAAM,IAAA;AAAA,UACb,mBAAmB,MAAM,KAAA;AAAA,UACzB,gBAAA,EAAkB,MAAM,IAAA,CAAK,KAAM,CAAA,cAAA;AAAA,SAAA;AAAA,OAGtC,CAAA,CAAA,MAAA,CAAO,MAAM,MAAM;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGjB,IAAA,IAAA,CAAA,KAAA,GAAQ,CAAC,MAAuB,KAAA;AACrC,MAAA,IAAA,CAAK,MAAM,YAAa,CAAA,MAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AA/BxB,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,OAAS,EAAA,sBAAA;AAAA,MACT,gBAAgB,sBAAuB,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAX7B,KAAK,KAA+C,EAAA;AAChE,IAAO,OAAA,UAAA,CAAW,KAAK,6BAA8B,EAAA;AAAA,MAChD,GAAA,KAAA;AAAA,MACH,SAAW,EAAA,wCAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAYR,eAAe,MAAkC,EAAA;AACtD,IAAK,IAAA,CAAA,QAAA,CAAS,EAAE,cAAgB,EAAA,MAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EA2B3B,MAAS,GAAA;AACd,IAAM,MAAA,EAAE,OAAS,EAAA,cAAA,EAAA,GAAmB,IAAK,CAAA,KAAA,CAAA;AAEzC,IACE,uBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,sCACG,UAAD,EAAA;AAAA,MAAY,SAAS,IAAK,CAAA,KAAA;AAAA,KAAA,CAAA,kBACzB,KAAA,CAAA,aAAA,CAAA,KAAA,CAAM,MAAP,EAAA,IAAA,sCACG,KAAM,CAAA,KAAA,EAAP,IAAa,EAAA,8BAAA,CAAA,CAAA,kBAEd,KAAA,CAAA,aAAA,CAAA,KAAA,CAAM,IAAP,EAAA,IAAA,sCACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,cAAA;AAAA,KAAA,EACZ,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAA,yCACX,KAAD,EAAA;AAAA,MACE,KAAK,MAAO,CAAA,IAAA;AAAA,MACZ,SAAW,EAAA,CAAA,KAAA,EAAQ,cAAmB,KAAA,MAAA,GAAS,QAAW,GAAA,EAAA,CAAA,CAAA;AAAA,MAC1D,OAAA,EAAS,MAAM,IAAA,CAAK,cAAe,CAAA,MAAA,CAAA;AAAA,KAAA,sCAElC,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,qBAAA;AAAA,KAAuB,EAAA,MAAA,CAAO,uBAC3C,KAAA,CAAA,aAAA,CAAA,KAAA,EAAD,MAAM,MAAO,CAAA,WAAA,CAAA,CAAA,CAAA,CAAA,sCAIlB,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,2BAAA;AAAA,KAAA,CAAA,CAAA,CAAA,kBAGlB,KAAA,CAAA,aAAA,CAAA,KAAA,CAAM,MAAP,EAAA,IAAA,sCACG,MAAD,EAAA;AAAA,MAAQ,SAAS,IAAK,CAAA,MAAA;AAAA,KAAQ,EAAA,0BAAA,sCACH,MAAD,EAAA;AAAA,MAAM,SAAU,EAAA,mCAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;AAhF7C,IAAA,4BAAA,GAAA,6BAAA,CAAA;AAAA,6BAIS,YAAiD,GAAA;AAAA,EAC7D,UAAY,EAAA,IAAA;AAAA,EACZ,YAAc,EAAA,IAAA;AAAA,CAAA;;ACVL,MAAA,qBAAA,GAAiD,QAAS,CAAA,SAAA,CAAU,KAAoC,IAAA;AAAA,EACnH,QAAU,EAAA,EAAA;AAAA,CAAA,CAAA;AAEZ,IAAI,qBAAuB,EAAA;AACzB,EAAsB,qBAAA,CAAA,eAAA,GAAkB,SAAS,aAAc,CAAA,OAAA,CAAA,CAAA;AAAA;;ACP1D,MAAM,2CAA8C,GAAA,0CAAA,CAAA;AAE3D,MAAO,CAAA,2CAAA,EAA6C,EAAI,CAAA,CAAA,OAAA,CAAQ,8BAAgC,EAAA;AAAA,EAC9F,IAAA;AAAA,EACA,SAAU,EAAI,EAAA;AACZ,IAAA,SAAA,qBAAA,CAA+B,YAAc,EAAA;AAC3C,MAAa,YAAA,CAAA,YAAA,CAAa,OAAQ,CAAA,SAAU,WAAa,EAAA;AACvD,QAAA,WAAA,CAAY,UAAU,YAAa,CAAA,OAAA,CAAA;AACnC,QAAA,WAAA,CAAY,SAAS,YAAa,CAAA,MAAA,CAAA;AAElC,QAAA,IAAI,YAAY,iBAAmB,EAAA;AACjC,UAAA,WAAA,CAAY,iBAAoB,GAAA,WAAA,CAAY,iBAAkB,CAAA,GAAA,CAAI,SAAU,UAAY,EAAA;AACtF,YAAA,OAAO,EAAE,EAAI,EAAA,UAAA,EAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAEf,UAAA,WAAA,CAAY,SAAY,GAAA,WAAA,CAAY,SAAU,CAAA,MAAA,CAAO,WAAY,CAAA,iBAAA,CAAA,CAAA;AAAA,SAC5D,MAAA;AACL,UAAA,WAAA,CAAY,iBAAoB,GAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAGpC,MAAA,MAAM,qBAAqB,CAAE,CAAA,MAAA,CAAO,YAAa,CAAA,YAAA,EAAc,EAAE,UAAY,EAAA,KAAA,EAAA,CAAA,CAAA;AAC7E,MAAA,YAAA,CAAa,WAAW,YAAa,CAAA,IAAA,CAAA;AACrC,MAAA,YAAA,CAAa,YAAY,CAAE,CAAA,KAAA,CAAM,kBAAoB,CAAA,CAAA,GAAA,CAAI,aAAa,OAAU,EAAA,CAAA,KAAA,EAAA,CAAA;AAChF,MAAA,YAAA,CAAa,oBAAoB,CAAE,CAAA,KAAA,CAAM,kBAAoB,CAAA,CAAA,GAAA,CAAI,qBAAqB,OAAU,EAAA,CAAA,KAAA,EAAA,CAAA;AAChG,MAAA,OAAO,GAAG,OAAQ,CAAA,YAAA,CAAA,CAAA;AAAA,KAAA;AAGpB,IAAA,SAAA,6BAAA,CAAuC,YAAc,EAAA;AACnD,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,QAAQ,YAAa,CAAA,MAAA;AAAA,QACrB,aAAa,YAAa,CAAA,OAAA;AAAA,QAC1B,MAAM,YAAa,CAAA,IAAA;AAAA,QACnB,OAAO,YAAa,CAAA,KAAA;AAAA,QACpB,QAAQ,YAAa,CAAA,MAAA;AAAA,QACrB,MAAM,YAAa,CAAA,IAAA;AAAA,QACnB,QAAQ,YAAa,CAAA,MAAA;AAAA,QACrB,MAAQ,EAAA,EAAA;AAAA,QACR,kBAAoB,EAAA,EAAA;AAAA,OAAA,CAAA;AAGtB,MAAA,IAAI,aAAa,GAAK,EAAA;AACpB,QAAA,MAAM,MAAM,YAAa,CAAA,GAAA,CAAA;AAEzB,QAAA,MAAA,CAAO,iBAAiB,GAAI,CAAA,cAAA,CAAA;AAC5B,QAAA,MAAA,CAAO,OAAO,GAAI,CAAA,IAAA,CAAA;AAElB,QAAA,IAAI,IAAI,kBAAoB,EAAA;AAC1B,UAAA,MAAA,CAAO,qBAAqB,GAAI,CAAA,kBAAA,CAAA;AAAA,SAAA;AAGlC,QAAA,MAAA,CAAO,SAAS,GAAI,CAAA,MAAA,CAAA;AACpB,QAAA,IAAI,GAAI,CAAA,OAAA,IAAW,GAAI,CAAA,OAAA,KAAY,eAAiB,EAAA;AAClD,UAAA,MAAA,CAAO,OAAU,GAAA,GAAA,CAAI,OAAQ,CAAA,KAAA,CAAM,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAG5C,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,gCAAA,CAA0C,WAAa,EAAA;AACrD,MAAA,MAAM,kBAAqB,GAAA,WAAA,CAAY,kBAAmB,CAAA,KAAA,IAAS,sBAAsB,QAAS,CAAA,OAAA,CAAA;AAClG,MAAA,MAAM,aAAgB,GAAA,WAAA,CAAY,cAAe,CAAA,KAAA,IAAS,sBAAsB,QAAS,CAAA,MAAA,CAAA;AACzF,MAAO,OAAA;AAAA,QACL,KAAO,EAAA,EAAA;AAAA,QACP,MAAQ,EAAA,UAAA;AAAA,QACR,WAAa,EAAA,kBAAA;AAAA,QACb,MAAQ,EAAA,aAAA;AAAA,QACR,aAAe,EAAA,OAAA;AAAA,QACf,IAAM,EAAA,IAAA;AAAA,QACN,MAAQ,EAAA,IAAA;AAAA,QACR,MAAQ,EAAA;AAAA,UACN;AAAA,YACE,SAAW,EAAA,EAAA;AAAA,YACX,aAAe,EAAA,MAAA;AAAA,YACf,SAAW,EAAA,IAAA;AAAA,YACX,SAAW,EAAA,GAAA;AAAA,YACX,aAAe,EAAA,EAAA;AAAA,YACf,kBAAoB,EAAA,CAAA;AAAA,YACpB,OAAS,EAAA,GAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGb,cAAgB,EAAA,EAAA;AAAA,QAChB,kBAAoB,EAAA;AAAA,UAClB;AAAA,YACE,QAAU,EAAA,EAAA;AAAA,YACV,QAAU,EAAA,MAAA;AAAA,YACV,YAAc,EAAA,EAAA;AAAA,YACd,WAAa,EAAA,EAAA;AAAA,YACb,SAAW,EAAA,EAAA;AAAA,YACX,WAAa,EAAA,MAAA;AAAA,YACb,WAAa,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,QAGjB,GAAK,EAAA,aAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAIT,IAAO,OAAA;AAAA,MACL,qBAAA;AAAA,MACA,6BAAA;AAAA,MACA,gCAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AC/FC,MAAM,0DACX,GAAA,gDAAA,CAAA;AAEF,MAAA,CAAO,0DAA4D,EAAA;AAAA,EACjE,kBAAA;AAAA,EACA,2CAAA;AAAA,CAAA,CAAA,CACC,WAAW,6BAA+B,EAAA;AAAA,EAC3C,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,8BAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,kBAAA;AAAA,EACA,SACE,QACA,iBACA,EAAA,MAAA,EACA,8BACA,WACA,EAAA,YAAA,EACA,OACA,gBACA,EAAA;AACA,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AAEb,IAAA,MAAA,CAAO,OAAU,GAAA,EAAA,CAAA;AAEjB,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,QAAU,EAAA,oEAAA;AAAA,MACV,SAAW,EAAA,iDAAA;AAAA,MACX,WAAa,EAAA,mDAAA;AAAA,MACb,gBAAkB,EAAA,wDAAA;AAAA,KAAA,CAAA;AAGpB,IAAA,MAAA,CAAO,KAAQ,GAAA,KAAA,CAAA;AACf,IAAA,MAAA,CAAO,mBAAmB,gBAAiB,CAAA,IAAA,CAAA;AAC3C,IAAO,MAAA,CAAA,KAAA,GAAQ,iBAAiB,IAAS,KAAA,qBAAA,CAAA;AAEzC,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,cAAgB,EAAA,KAAA;AAAA,MAChB,UAAY,EAAA,KAAA;AAAA,KAAA,CAAA;AAGd,IAAO,MAAA,CAAA,SAAA,GAAY,CAAC,aAAe,EAAA,gBAAA,CAAA,CAAA;AAEnC,IAAgC,SAAA,oBAAA,GAAA;AAE9B,MAAA,IAAI,OAAO,WAAa,EAAA;AACtB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAkB,iBAAA,CAAA,KAAA,EAAA,CAAA;AAClB,MAAA,MAAM,cAAiB,GAAA;AAAA,QACrB,IAAA,EAAM,OAAO,YAAa,CAAA,IAAA;AAAA,QAC1B,SAAA,EAAW,OAAO,YAAa,CAAA,WAAA;AAAA,QAC/B,MAAA,EAAQ,OAAO,YAAa,CAAA,MAAA;AAAA,QAC5B,QAAU,EAAA,OAAA;AAAA,OAAA,CAAA;AAGZ,MAAI,IAAA,CAAC,MAAO,CAAA,QAAA,CAAS,wBAA2B,CAAA,EAAA;AAC9C,QAAA,MAAA,CAAO,GAAG,sBAAwB,EAAA,cAAA,CAAA,CAAA;AAAA,OAC7B,MAAA;AACL,QAAA,MAAA,CAAO,GAAG,uBAAyB,EAAA,cAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAIvC,IAA0B,SAAA,cAAA,GAAA;AACxB,MAAA,WAAA,CAAY,aAAc,CAAA,OAAA,EAAA,CAAA;AAC1B,MAAY,WAAA,CAAA,aAAA,CAAc,cAAc,MAAQ,EAAA,oBAAA,CAAA,CAAA;AAAA,KAAA;AAGlD,IAAO,MAAA,CAAA,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,MACnC,WAAA;AAAA,MACA,KAAA,EAAQ,CAAQ,KAAA,GAAA,WAAA,GAAc,WAAe,IAAA,oBAAA;AAAA,MAC7C,aAAe,EAAA,iBAAA;AAAA,MACf,cAAA;AAAA,KAAA,CAAA,CAAA;AAGF,IAAgC,SAAA,oBAAA,GAAA;AAC9B,MAAA,cAAA,CAAe,YAAa,CAAA,OAAA,CAAA,CAAS,IAAK,CAAA,SAAU,QAAU,EAAA;AAC5D,QAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,QAAA,MAAA,CAAO,MAAM,cAAiB,GAAA,IAAA,CAAA;AAC9B,QAAK,IAAA,CAAA,cAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAIT,IAAgC,SAAA,oBAAA,GAAA;AAC9B,MAAA,IAAI,YAAc,EAAA;AAChB,QAAO,MAAA,CAAA,YAAA,GAAe,6BAA6B,6BAA8B,CAAA,YAAA,CAAA,CAAA;AACjF,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,MAAM,SAAY,GAAA,SAAA,CAAU,qBAAsB,CAAA,MAAA,CAAO,YAAa,CAAA,IAAA,CAAA,CAAA;AACtE,UAAO,MAAA,CAAA,YAAA,CAAa,QAAQ,SAAU,CAAA,KAAA,CAAA;AACtC,UAAO,MAAA,CAAA,YAAA,CAAa,SAAS,SAAU,CAAA,eAAA,CAAA;AACvC,UAAA,OAAO,OAAO,YAAa,CAAA,IAAA,CAAA;AAAA,SAAA;AAAA,OAExB,MAAA;AACL,QAAO,MAAA,CAAA,YAAA,GAAe,6BAA6B,gCAAiC,CAAA,WAAA,CAAA,CAAA;AAAA,OAAA;AAEtF,MAAA,IAAI,KAAO,EAAA;AACT,QAAA,uBAAA,EAAA,CAAA;AACA,QAAA,oBAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAIJ,IAAmC,SAAA,uBAAA,GAAA;AACjC,MAAM,MAAA,OAAA,GAAU,OAAO,YAAa,CAAA,WAAA,CAAA;AACpC,MAAM,MAAA,MAAA,GAAS,OAAO,YAAa,CAAA,MAAA,CAAA;AAEnC,MAAA,MAAM,4BAA+B,GAAA,EAAA,CAAA;AACrC,MAAA,WAAA,CACG,aAAc,CAAA,eAAA,CAAA,CACd,OAAQ,CAAA,IAAA,CAAA,CACR,KAAK,MAAM;AACV,QAAA,WAAA,CAAY,aAAc,CAAA,eAAA,CAAA,CAAiB,IAAK,CAAA,OAAA,CAAQ,CAAC,aAAiB,KAAA;AACxE,UAAI,IAAA,aAAA,CAAa,YAAY,OAAS,EAAA;AACpC,YAAA,4BAAA,CAA6B,aAAa,CAAA,MAAA,CAAA,GACxC,4BAA6B,CAAA,aAAA,CAAa,MAAW,CAAA,IAAA,EAAA,CAAA;AACvD,YAA6B,4BAAA,CAAA,aAAA,CAAa,MAAQ,CAAA,CAAA,IAAA,CAAK,aAAa,CAAA,IAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAIxE,QAAO,MAAA,CAAA,yBAAA,GAA4B,6BAA6B,MAAW,CAAA,IAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAIjF,IAAA,oBAAA,EAAA,CAAA;AAEA,IAAA,IAAA,CAAK,0BAA0B,WAAY;AACzC,MACE,OAAA,MAAA,CAAO,YAAa,CAAA,MAAA,CAAO,CAAG,CAAA,CAAA,aAAA,IAAiB,MAAO,CAAA,YAAA,CAAa,MAAO,CAAA,CAAA,CAAA,CAAG,aAAc,CAAA,OAAA,CAAQ,MAAY,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAInH,IAAA,IAAA,CAAK,aAAa,WAAY;AAC5B,MAAO,MAAA,CAAA,YAAA,CAAa,OAAO,IAAK,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGlC,IAAA,IAAA,CAAK,UAAU,WAAY;AACzB,MAAA,MAAM,MAAM,MAAO,CAAA,YAAA,CAAA;AACnB,MAAM,MAAA,OAAA,GAAU,CAAC,WAAA,CAAY,IAAM,EAAA,GAAA,CAAI,SAAS,EAAI,EAAA,GAAA,CAAI,MAAU,IAAA,EAAA,CAAA,CAAI,IAAK,CAAA,GAAA,CAAA,CAAA;AAC3E,MAAO,OAAA,CAAA,CAAE,QAAQ,OAAS,EAAA,GAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG5B,IAAA,IAAA,CAAK,iBAAiB,WAAY;AAChC,MAAA,cAAA,CAAe,qBAAqB,MAAO,CAAA,YAAA,CAAa,WAAa,CAAA,CAAA,IAAA,CAAK,SAAU,OAAS,EAAA;AAC3F,QAAA,MAAA,CAAO,OAAU,GAAA,OAAA,CAAA;AACjB,QAAK,IAAA,CAAA,aAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIT,IAAA,IAAA,CAAK,gBAAgB,WAAY;AAC/B,MAAA,uBAAA,EAAA,CAAA;AACA,MAAK,IAAA,CAAA,UAAA,EAAA,CAAA;AACL,MAAK,IAAA,CAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGP,IAAA,IAAA,CAAK,cAAc,WAAY;AAC7B,MAAM,MAAA,OAAA,GAAU,OAAO,YAAa,CAAA,WAAA,CAAA;AACpC,MAAM,MAAA,MAAA,GAAS,OAAO,YAAa,CAAA,MAAA,CAAA;AACnC,MAAA,MAAA,CAAO,aAAa,YAAe,GAAA,IAAA,CAAA;AACnC,MAAA,MAAA,CAAO,aAAa,IAAO,GAAA,IAAA,CAAA;AAC3B,MAAA,MAAA,CAAO,aAAa,iBAAoB,GAAA,IAAA,CAAA;AACxC,MAAA,IAAA,CAAK,aAAgB,GAAA,EAAA,CAAA;AAErB,MAAc,aAAA,CAAA,YAAA,EAAA,CAAe,IAAK,CAAA,SAAU,KAAO,EAAA;AACjD,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAM,KAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,IAAS,KAAA;AAC5B,YAAA,IAAI,IAAK,CAAA,OAAA,KAAY,OAAW,IAAA,IAAA,CAAK,WAAW,MAAQ,EAAA;AACtD,cAAA,IAAA,CAAK,cAAc,IAAK,CAAA,IAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAMhC,MAAK,IAAA,CAAA,aAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGP,IAAA,IAAA,CAAK,gBAAgB,WAAY;AAC/B,MAAA,MAAA,CAAO,aAAa,cAAiB,GAAA,IAAA,CAAA;AACrC,MAAA,MAAA,CAAO,aAAa,MAAS,GAAA,IAAA,CAAA;AAC7B,MAAA,IAAA,CAAK,eAAkB,GAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGzB,IAAK,IAAA,CAAA,mBAAA,GAAsB,SAAU,IAAM,EAAA;AACzC,MAAO,MAAA,CAAA,YAAA,CAAa,OAAO,IAAK,CAAA,IAAA,CAAA;AAChC,MAAO,MAAA,CAAA,YAAA,CAAa,oBAAoB,IAAK,CAAA,aAAA,CAAA;AAC7C,MAAA,MAAA,CAAO,aAAa,cAAiB,GAAA,IAAA,CAAA;AACrC,MAAA,MAAA,CAAO,aAAa,MAAS,GAAA,IAAA,CAAA;AAC7B,MAAA,IAAA,CAAK,eAAkB,GAAA,EAAA,CAAA;AACvB,MAAA,IAAI,KAAK,OAAS,EAAA;AAChB,QAAK,IAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,SAAU,MAAQ,EAAA;AACjC,UAAA,IAAI,SAAY,GAAA,IAAA,CAAA;AAChB,UAAA,IAAI,OAAO,OAAS,EAAA;AAClB,YAAO,MAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,SAAU,MAAQ,EAAA;AACnC,cAAI,IAAA,MAAA,IAAU,MAAO,CAAA,IAAA,KAAS,qBAAuB,EAAA;AACnD,gBAAY,SAAA,GAAA,KAAA,CAAA;AAAA,eAAA;AAAA,aAAA,CAAA,CAAA;AAAA,WAAA;AAIlB,UAAA,IAAI,SAAW,EAAA;AACb,YAAA,IAAA,CAAK,gBAAgB,IAAK,CAAA,MAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAMlC,IAAK,IAAA,CAAA,cAAA,GAAiB,SAAU,KAAO,EAAA;AACrC,MAAO,MAAA,CAAA,YAAA,CAAa,kBAAmB,CAAA,MAAA,CAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGvD,IAAA,IAAA,CAAK,cAAc,WAAY;AAC7B,MAAA,MAAA,CAAO,YAAa,CAAA,kBAAA,CAAmB,IAAK,CAAA,EAAE,QAAU,EAAA,MAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG1D,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAM,MAAA,UAAA,GAAa,QAAQ,QAAW,GAAA,QAAA,CAAA;AAEtC,MAAO,MAAA,CAAA,WAAA,CAAY,OAAO,WAAY;AACpC,QAAA,MAAM,MAAS,GAAA;AAAA,UACb,aAAe,EAAA,OAAA;AAAA,UACf,SAAS,WAAY,CAAA,IAAA;AAAA,UACrB,WAAA,EAAa,OAAO,YAAa,CAAA,WAAA;AAAA,UACjC,iBAAA,EAAmB,OAAO,YAAa,CAAA,WAAA;AAAA,UACvC,gBAAA,EAAkB,OAAO,YAAa,CAAA,IAAA;AAAA,SAAA,CAAA;AAGxC,QAAI,IAAA,MAAA,CAAO,aAAa,YAAc,EAAA;AACpC,UAAA,MAAA,CAAO,YAAa,CAAA,IAAA,GAAO,MAAO,CAAA,YAAA,CAAa,YAAa,CAAA,IAAA,CAAA;AAC5D,UAAA,MAAA,CAAO,YAAa,CAAA,iBAAA,GAAoB,MAAO,CAAA,YAAA,CAAa,YAAa,CAAA,aAAA,CAAA;AAAA,SAAA;AAG3E,QAAI,IAAA,MAAA,CAAO,aAAa,cAAgB,EAAA;AACtC,UAAA,MAAA,CAAO,YAAa,CAAA,MAAA,GAAS,MAAO,CAAA,YAAA,CAAa,cAAe,CAAA,IAAA,CAAA;AAAA,SAAA;AAGlE,QAAA,MAAM,KAAO,GAAA,MAAA,CAAO,YAAa,CAAA,WAAA,IAAe,OAAO,YAAa,CAAA,IAAA,CAAA;AACpE,QAAA,MAAM,YAAY,KAAO,GAAA,QAAA,CAAA;AACzB,QAAA,MAAM,eAAe,KAAO,GAAA,OAAA,CAAA;AAC5B,QAAA,MAAA,CAAO,aAAa,IAAO,GAAA,oBAAA,CAAA;AAC3B,QAAO,MAAA,CAAA,YAAA,CAAa,mBAAmB,MAAO,CAAA,gBAAA,CAAA;AAC9C,QAAA,IAAI,CAAC,MAAO,CAAA,YAAA,CAAa,QAAQ,CAAC,MAAA,CAAO,aAAa,UAAY,EAAA;AAChE,UAAA,MAAA,CAAO,aAAa,cAAiB,GAAA,IAAA,CAAA;AAAA,SAAA;AAGvC,QAAO,MAAA,CAAA,YAAA,CAAa,MAAO,CAAA,CAAA,CAAA,CAAG,SAAY,GAAA,SAAA,CAAA;AAE1C,QAAA,MAAA,CAAO,YAAa,CAAA,kBAAA,CAAmB,OAAQ,CAAA,CAAC,MAAM,KAAU,KAAA;AAC9D,UAAA,IAAA,CAAK,WAAW,YAAe,GAAA,KAAA,CAAA;AAC/B,UAAA,IAAA,CAAK,SAAY,GAAA,SAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAGnB,QAAA,IAAI,MAAO,CAAA,YAAA,CAAa,MAAO,CAAA,CAAA,CAAA,CAAG,kBAAkB,KAAO,EAAA;AACzD,UAAO,MAAA,CAAA,YAAA,CAAa,MAAO,CAAA,CAAA,CAAA,CAAG,SAAY,GAAA,KAAA,CAAA,CAAA;AAAA,SAAA;AAG5C,QAAA,OAAO,kBAAmB,CAAA,kBAAA,CAAmB,MAAO,CAAA,YAAA,EAAc,aAAa,UAAY,EAAA,MAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAI/F,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAkB,iBAAA,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChQjB,MAAM,wDACX,GAAA,iDAAA,CAAA;AAEF,OAAA,CACG,OAAO,wDAA0D,EAAA;AAAA,EAChE,oBAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,0BAAA;AAAA,CAAA,CAAA,CAED,WAAW,8BAAgC,EAAA;AAAA,EAC1C,QAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,KAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,IAAA;AAAA,EACA,SACE,QACA,MACA,EAAA,iBAAA,EACA,WACA,YACA,EAAA,GAAA,EACA,mBACA,EAAA,kBAAA,EACA,EACA,EAAA;AACA,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,KAAA,CAAA;AAGX,IAAO,MAAA,CAAA,cAAA,GAAiB,eAAe,GAAI,CAAA,WAAA,CAAA,CAAA;AAE3C,IAA+B,SAAA,mBAAA,GAAA;AAC7B,MAAA,MAAA,CAAO,eAAe,GAAI,CAAA,aAAA,CAAc,IAAK,CAAA,MAAA,CAAO,SAAU,IAAM,EAAA;AAClE,QACE,OAAA,IAAA,CAAK,IAAS,KAAA,YAAA,CAAa,IAC3B,IAAA,IAAA,CAAK,WAAW,YAAa,CAAA,MAAA,IAC7B,IAAK,CAAA,OAAA,KAAY,YAAa,CAAA,SAAA,CAAA;AAAA,OAE/B,CAAA,CAAA,CAAA,CAAA,CAAA;AAEH,MAAA,IAAI,OAAO,YAAc,EAAA;AACvB,QAAM,MAAA,aAAA,GAAgB,kBAAmB,CAAA,sBAAA,CACvC,MAAO,CAAA,YAAA,CAAa,UACpB,YAAa,CAAA,SAAA,EACb,YAAa,CAAA,MAAA,EACb,YAAa,CAAA,IAAA,CAAA,CAAA;AAGf,QAAO,OAAA,aAAA,CAAc,IAAK,CAAA,SAAU,OAAS,EAAA;AAC3C,UAAA,MAAA,CAAO,MAAM,OAAU,GAAA,KAAA,CAAA;AACvB,UAAA,MAAM,cAAiB,GAAA,EAAA,CAAA;AAEvB,UAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,MAAO,CAAA,SAAU,IAAM,EAAA;AAC9C,YAAO,OAAA,IAAA,CAAK,SAAS,YAAa,CAAA,IAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAGpC,UAAA,IAAI,SAAS,MAAQ,EAAA;AACnB,YAAO,MAAA,CAAA,YAAA,CAAa,MAAM,QAAS,CAAA,CAAA,CAAA,CAAA;AAEnC,YAAO,MAAA,CAAA,YAAA,CAAa,UAAU,YAAa,CAAA,SAAA,CAAA;AAE3C,YAAI,IAAA,MAAA,CAAO,YAAa,CAAA,GAAA,CAAI,cAAgB,EAAA;AAC1C,cAAA,MAAA,CAAO,YAAa,CAAA,GAAA,CAAI,cAAe,CAAA,OAAA,CAAQ,SAAU,eAAiB,EAAA;AACxE,gBAAA,MAAM,QAAQ,mBAAoB,CAAA,2BAAA,CAChC,KACA,YAAa,CAAA,SAAA,EACb,aAAa,MACb,EAAA,eAAA,CAAA,CAAA;AAEF,gBAAA,IAAI,KAAO,EAAA;AACT,kBAAA,cAAA,CAAe,IAAK,CAAA,KAAA,CAAA,CAAA;AAAA,iBAAA;AAAA,eAAA,CAAA,CAAA;AAGxB,cAAO,MAAA,CAAA,cAAA,GAAiB,CAAE,CAAA,MAAA,CAAO,cAAgB,EAAA,MAAA,CAAA,CAAA;AAAA,aAAA;AAGnD,YAAA,IAAI,OAAO,YAAa,CAAA,gBAAA,IAAoB,OAAO,YAAa,CAAA,gBAAA,CAAiB,SAAS,GAAM,CAAA,EAAA;AAC9F,cAAM,MAAA,IAAA,GAAO,OAAO,YAAa,CAAA,gBAAA,CAAA;AACjC,cAAA,MAAA,CAAO,aAAa,gBAAmB,GAAA,IAAA,CACpC,MAAM,GACN,CAAA,CAAA,GAAA,CAAI,CAAC,CAAM,KAAA;AACV,gBAAA,MAAM,KAAK,CAAE,CAAA,WAAA,EAAA,CAAA;AACb,gBAAA,OAAO,GAAG,SAAU,CAAA,CAAA,EAAG,CAAG,CAAA,CAAA,WAAA,EAAA,GAAgB,GAAG,SAAU,CAAA,CAAA,CAAA,CAAA;AAAA,eAAA,CAAA,CAExD,IAAK,CAAA,GAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAKhB,MAAI,IAAA,CAAC,OAAO,YAAc,EAAA;AACxB,QAAA,MAAA,CAAO,EAAG,CAAA,GAAA,CAAA,CAAA;AAAA,OAAA;AAGZ,MAAA,OAAO,GAAG,IAAK,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA;AAGjB,IAAA,GAAA,CACG,KACA,EAAA,CAAA,IAAA,CAAK,mBACL,CAAA,CAAA,IAAA,CAAK,MAAM;AAGV,MAAI,IAAA,CAAC,OAAO,WAAa,EAAA;AACvB,QAAA,GAAA,CAAI,UAAU,MAAQ,EAAA,mBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAI5B,IAAA,IAAA,CAAK,mBAAmB,SAA4B,gBAAA,GAAA;AAClD,MAAA,SAAA,CAAU,IAAK,CAAA;AAAA,QACb,WAAa,EAAA,wDAAA;AAAA,QACb,UAAY,EAAA,qCAAA;AAAA,QACZ,IAAM,EAAA,IAAA;AAAA,QACN,OAAS,EAAA;AAAA,UACP,aAAa,WAAY;AACvB,YAAO,OAAA,GAAA,CAAA;AAAA,WAAA;AAAA,UAET,cAAc,WAAY;AACxB,YAAO,OAAA,OAAA,CAAQ,KAAK,MAAO,CAAA,YAAA,CAAA,CAAA;AAAA,WAAA;AAAA,UAE7B,OAAO,WAAY;AACjB,YAAO,OAAA,KAAA,CAAA;AAAA,WAAA;AAAA,UAET,kBAAkB,WAAY;AAC5B,YAAO,OAAA,EAAE,IAAM,EAAA,MAAA,CAAO,YAAa,CAAA,gBAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAM3C,IAAA,IAAA,CAAK,qBAAqB,SAA8B,kBAAA,GAAA;AACtD,MAAA,IAAI,OAAO,YAAa,CAAA,SAAA,IAAa,MAAO,CAAA,YAAA,CAAa,UAAU,MAAQ,EAAA;AACzE,QAAA,OAAA;AAAA,OAAA;AAGF,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,cAAc,YAAa,CAAA,IAAA;AAAA,OAAA,CAAA;AAGpC,MAAA,MAAM,OAAU,GAAA;AAAA,QACd,aAAe,EAAA,OAAA;AAAA,QACf,gBAAA,EAAkB,OAAO,YAAa,CAAA,IAAA;AAAA,QACtC,gBAAA,EAAkB,OAAO,YAAa,CAAA,gBAAA;AAAA,QACtC,WAAA,EAAa,OAAO,YAAa,CAAA,OAAA;AAAA,QACjC,QAAQ,YAAa,CAAA,MAAA;AAAA,QACrB,SAAS,GAAI,CAAA,IAAA;AAAA,OAAA,CAAA;AAGf,MAAA,MAAM,YAAe,GAAA,MAAM,kBAAmB,CAAA,kBAAA,CAAmB,OAAS,EAAA,GAAA,CAAA,CAAA;AAE1E,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAA,EAAQ,gBAAmB,GAAA,YAAA,CAAa,IAAO,GAAA,GAAA;AAAA,QAC/C,UAAA,EAAY,YAAY,YAAa,CAAA,IAAA;AAAA,QACrC,SAAS,YAAa,CAAA,SAAA;AAAA,QACtB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChLV,WAAe;;ACOR,MAAM,0DACX,GAAA,iEAAA,CAAA;AAEF,MAAA,CAAO,0DAA4D,EAAA,CAAC,kBAAqB,CAAA,CAAA,CAAA,UAAA,CACvF,+BACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,cAAA;AAAA,EACA,gCAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAU,MAAA,EAAQ,YAAc,EAAA,8BAAA,EAAgC,YAAc,EAAA;AAC5E,IAAO,MAAA,CAAA,cAAA,GAAiB,CAAC,YAAc,EAAA,YAAA,CAAA,CAAA;AAEvC,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,MAAA,CAAO,iBAAiB,YAAa,CAAA,OAAA,CAAA;AACrC,MAAA,MAAA,CAAO,QAAW,GAAA,MAAA,CAAO,KAAM,CAAA,OAAA,CAAQ,iBAAqB,IAAA,OAAA,CAAA;AAC5D,MAAA,MAAA,CAAO,SACL,GAAA,QAAA,CAAS,OAAQ,CAAA,SAAA,IAChB,OAAO,QAAA,CAAS,OAAQ,CAAA,aAAA,KAAkB,UACzC,IAAA,QAAA,CAAS,OAAQ,CAAA,aAAA,CAAc,OAAO,KAAM,CAAA,OAAA,CAAA,CAAA;AAChD,MAAO,MAAA,CAAA,eAAA,GAAkB,aACvB,MAAO,CAAA,SAAA,IAAa,SAAS,cAAiB,GAAA,QAAA,CAAS,iBAAiB,QAAS,CAAA,eAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIrF,IAAA,MAAM,UAAa,GAAA,MAAM,8BAA+B,CAAA,kBAAA,CAAmB,OAAO,cAAgB,EAAA,WAAA,CAAA,CAAA;AAElG,IAAA,UAAA,EAAA,CAAA;AAEA,IAAA,MAAA,CAAO,IAAI,qBAAuB,EAAA,UAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AC/BjC,MAAM,yCAA4C,GAAA,yCAAA,CAAA;AAEzD,MAAA,CAAO,yCAA2C,EAAA,EAAA,CAAA,CAAI,OAAQ,CAAA,6BAAA,EAA+B,WAAY;AACvG,EAAA,SAAA,oBAAA,CAA8B,WAAa,EAAA;AACzC,IAAO,OAAA,WAAA,CAAA;AAAA,GAAA;AAGT,EAAA,SAAA,0BAAA,CAAoC,SAAS,aAAe,EAAA;AAM1D,IAAA,IAAI,KAAM,CAAA,OAAA,CAAQ,OAAQ,CAAA,qBAAA,CAAsB,QAAW,CAAA,EAAA;AACzD,MAAc,aAAA,CAAA,qBAAA,CAAsB,QAAW,GAAA,OAAA,CAAQ,qBAAsB,CAAA,QAAA,CAAA;AAAA,KACxE,MAAA;AACL,MAAM,MAAA,YAAA,GAAe,QAAQ,qBAAsB,CAAA,QAAA,CAAA;AACnD,MAAI,IAAA,YAAA,CAAa,SAAS,GAAM,CAAA,EAAA;AAC9B,QAAc,aAAA,CAAA,qBAAA,CAAsB,QAAW,GAAA,YAAA,CAAa,KAAM,CAAA,GAAA,CAAA,CAAA;AAAA,OACzD,MAAA,IAAA,YAAA,CAAa,SAAS,GAAM,CAAA,EAAA;AACrC,QAAc,aAAA,CAAA,qBAAA,CAAsB,QAAW,GAAA,YAAA,CAAa,KAAM,CAAA,GAAA,CAAA,CAAA;AAAA,OAC7D,MAAA;AACL,QAAc,aAAA,CAAA,qBAAA,CAAsB,WAAW,CAAC,YAAA,CAAA,CAAA;AAAA,OAAA;AAGlD,MAAA,aAAA,CAAc,qBAAsB,CAAA,QAAA,CAAS,OAAQ,CAAA,SAAU,GAAG,KAAO,EAAA;AACvE,QAAc,aAAA,CAAA,qBAAA,CAAsB,QAAS,CAAA,KAAA,CAAA,GAAS,CAAE,CAAA,IAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAK9D,EAAA,SAAA,8CAAA,CAAwD,OAAS,EAAA;AAC/D,IAAI,IAAA,SAAA,CAAA;AAEJ,IAAA,IAAI,QAAQ,SAAU,CAAA,IAAA,KAAS,kBAAkB,OAAQ,CAAA,SAAA,CAAU,SAAS,gBAAkB,EAAA;AAC5F,MAAY,SAAA,GAAA;AAAA,QACV,SAAW,EAAA,EAAA;AAAA,QACX,QAAU,EAAA,MAAA;AAAA,QACV,SAAW,EAAA,EAAA;AAAA,QACX,KAAO,EAAA,EAAA;AAAA,QACP,GAAK,EAAA,EAAA;AAAA,QACL,OAAS,EAAA,EAAA;AAAA,QACT,QAAQ,OAAQ,CAAA,MAAA;AAAA,QAChB,GAAK,EAAA,EAAA;AAAA,QACL,MAAQ,EAAA,EAAA;AAAA,OAAA,CAAA;AAAA,KAEL,MAAA;AACL,MAAA,SAAA,GAAY,OAAQ,CAAA,aAAA,CAAA;AAAA,KAAA;AAGtB,IAAA,MAAM,aAAgB,GAAA;AAAA,MACpB,MAAM,OAAQ,CAAA,WAAA;AAAA,MACd,eAAe,OAAQ,CAAA,gBAAA;AAAA,MACvB,aAAa,OAAQ,CAAA,WAAA;AAAA,MACrB,OAAO,OAAQ,CAAA,KAAA;AAAA,MACf,UAAU,OAAQ,CAAA,QAAA;AAAA,MAClB,QAAU,EAAA;AAAA,QACR,SAAW,EAAA,OAAA,CAAQ,QAAW,GAAA,OAAA,CAAQ,SAAS,SAAY,GAAA,IAAA;AAAA,OAAA;AAAA,MAE7D,WAAW,OAAQ,CAAA,SAAA;AAAA,MACnB,kBAAkB,OAAQ,CAAA,gBAAA;AAAA,MAC1B,uBAAuB,OAAQ,CAAA,qBAAA;AAAA,MAC/B,yBAAyB,OAAQ,CAAA,uBAAA;AAAA,MACjC,iBAAmB,EAAA,OAAA,CAAQ,QAAa,KAAA,UAAA,GAAa,IAAO,GAAA,IAAA;AAAA,MAC5D,oBAAsB,EAAA,OAAA,CAAQ,QAAa,KAAA,UAAA,GAAa,IAAO,GAAA,IAAA;AAAA,MAC/D,QAAQ,OAAQ,CAAA,eAAA;AAAA,MAChB,iBAAiB,OAAQ,CAAA,eAAA;AAAA,MACzB,gBAAgB,OAAQ,CAAA,cAAA;AAAA,MACxB,OAAO,OAAQ,CAAA,KAAA;AAAA,MACf,SAAS,OAAQ,CAAA,WAAA;AAAA,MACjB,gBAAkB,EAAA,OAAA;AAAA,MAClB,MAAM,OAAQ,CAAA,IAAA;AAAA,MACd,iBAAA,EAAmB,QAAQ,YAAa,CAAA,aAAA;AAAA,MACxC,QAAQ,OAAQ,CAAA,MAAA;AAAA,MAChB,iBAAmB,EAAA,KAAA;AAAA,MACnB,QAAU,EAAA;AAAA,QACR,GAAA,EAAK,QAAQ,GAAI,CAAA,QAAA;AAAA,QACjB,GAAA,EAAK,QAAQ,GAAI,CAAA,QAAA;AAAA,OAAA;AAAA,MAEnB,aAAa,OAAQ,CAAA,WAAA;AAAA,MACrB,QAAQ,OAAQ,CAAA,MAAA;AAAA,MAChB,mBAAmB,OAAQ,CAAA,iBAAA;AAAA,MAC3B,kBAAkB,OAAQ,CAAA,gBAAA;AAAA,MAC1B,kBAAkB,OAAQ,CAAA,gBAAA;AAAA,MAC1B,IAAM,EAAA,aAAA;AAAA,MACN,aAAe,EAAA,QAAA;AAAA,MACf,IAAM,EAAA,mBAAA;AAAA,MACN,GAAK,EAAA;AAAA,QACH,IAAM,EAAA,iBAAA;AAAA,QACN,IAAM,EAAA,UAAA;AAAA,QACN,QAAA,EAAU,QAAQ,GAAI,CAAA,QAAA;AAAA,OAAA;AAAA,MAExB,cAAc,OAAQ,CAAA,YAAA;AAAA,MACtB,WAAW,OAAQ,CAAA,SAAA;AAAA,MACnB,wBAAwB,OAAQ,CAAA,sBAAA;AAAA,MAChC,WAAW,OAAQ,CAAA,SAAA;AAAA,MACnB,QAAU,EAAA;AAAA,QACR,UAAY,EAAA,OAAA,CAAQ,QAAW,GAAA,OAAA,CAAQ,SAAS,UAAa,GAAA,IAAA;AAAA,OAAA;AAAA,MAE/D,qBAAuB,EAAA;AAAA,QACrB,QAAU,EAAA,IAAA;AAAA,QACV,gBAAkB,EAAA,EAAA;AAAA,OAAA;AAAA,MAEpB,cAAc,OAAQ,CAAA,YAAA;AAAA,MACtB,KAAO,EAAA,OAAA,CAAQ,YAAe,GAAA,OAAA,CAAQ,KAAQ,GAAA,EAAA;AAAA,MAC9C,kBAAkB,OAAQ,CAAA,gBAAA;AAAA,KAAA,CAAA;AAG5B,IAAA,IAAI,QAAQ,KAAS,IAAA,IAAA,IAAQ,OAAQ,CAAA,KAAA,CAAM,YAAY,KAAO,EAAA;AAC5D,MAAA,aAAA,CAAc,KAAQ,GAAA,SAAA,CAAA;AAAA,KAAA;AAGxB,IAAI,IAAA,OAAO,OAAQ,CAAA,KAAA,KAAU,WAAa,EAAA;AACxC,MAAA,aAAA,CAAc,IAAO,GAAA,aAAA,CAAc,IAAO,GAAA,GAAA,GAAM,OAAQ,CAAA,KAAA,CAAA;AAAA,KAAA;AAE1D,IAAI,IAAA,OAAO,OAAQ,CAAA,eAAA,KAAoB,WAAa,EAAA;AAClD,MAAA,aAAA,CAAc,IAAO,GAAA,aAAA,CAAc,IAAO,GAAA,GAAA,GAAM,OAAQ,CAAA,eAAA,CAAA;AAAA,KAAA;AAG1D,IAAI,IAAA,OAAO,OAAQ,CAAA,qBAAA,KAA0B,WAAa,EAAA;AACxD,MAAc,aAAA,CAAA,qBAAA,CAAsB,gBAAmB,GAAA,OAAA,CAAQ,qBAAsB,CAAA,gBAAA,CAAA;AACrF,MAAA,IAAI,CAAC,CAAA,CAAE,OAAQ,CAAA,OAAA,CAAQ,sBAAsB,QAAW,CAAA,EAAA;AACtD,QAAA,0BAAA,CAA2B,OAAS,EAAA,aAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAIxC,IAAA,IAAI,QAAQ,YAAc,EAAA;AACxB,MAAA,MAAM,QAAQ,OAAQ,CAAA,YAAA,CAAA;AACtB,MAAA,aAAA,CAAc,eAAe,OAAQ,CAAA,YAAA,CAAA;AACrC,MAAA,aAAA,CAAc,IAAI,IAAO,GAAA,KAAA,CAAA;AACzB,MAAA,aAAA,CAAc,IAAI,IAAO,GAAA,KAAA,CAAM,SAAU,CAAA,CAAA,EAAG,MAAM,OAAQ,CAAA,GAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAI5D,IAAA,aAAA,CAAc,8BAAiC,GAAA,EAAA,CAAA;AAE/C,IAAO,OAAA,aAAA,CAAA;AAAA,GAAA;AAGT,EAAO,OAAA;AAAA,IACL,8CAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;;AC1IG,MAAM,6DACX,GAAA,mDAAA,CAAA;AAEF,OAAA,CACG,OAAO,6DAA+D,EAAA;AAAA,EACrE,wBAAA;AAAA,EACA,yCAAA;AAAA,CAAA,CAAA,CAED,QAAQ,gCAAkC,EAAA;AAAA,EACzC,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,6BAAA;AAAA,EACA,SAAU,EAAI,EAAA,gBAAA,EAAkB,2BAA6B,EAAA;AAC3D,IAAA,SAAA,0BAAA,CAAoC,aAAa,QAAU,EAAA;AACzD,MAAA,QAAA,GAAW,QAAY,IAAA,EAAA,CAAA;AAEvB,MAAA,MAAM,kBAAqB,GAAA,QAAA,CAAS,OAAW,IAAA,WAAA,CAAY,kBAAmB,CAAA,KAAA,CAAA;AAC9E,MAAA,MAAM,aAAgB,GAAA,QAAA,CAAS,MAAU,IAAA,WAAA,CAAY,cAAe,CAAA,KAAA,CAAA;AAEpE,MAAA,OAAO,iBAAiB,UAAW,CAAA,EAAE,UAAU,OAAW,EAAA,CAAA,CAAA,IAAA,CAAK,SAAU,MAAQ,EAAA;AAC/E,QAAO,OAAA;AAAA,UACL,aAAa,WAAY,CAAA,IAAA;AAAA,UACzB,WAAa,EAAA,kBAAA;AAAA,UACb,MAAQ,EAAA,aAAA;AAAA,UACR,MAAA;AAAA,UACA,aAAe,EAAA,EAAA;AAAA,UACf,mBAAqB,EAAA,EAAA;AAAA,UACrB,QAAU,EAAA,EAAA;AAAA,UACV,GAAK,EAAA;AAAA,YACH,QAAU,EAAA,CAAA;AAAA,WAAA;AAAA,UAEZ,YAAc,EAAA,KAAA;AAAA,UACd,KAAO,EAAA,EAAA;AAAA,UACP,YAAc,EAAA,EAAA;AAAA,UACd,SAAW,EAAA,EAAA;AAAA,UACX,gBAAkB,EAAA,OAAA;AAAA,UAClB,SAAW,EAAA;AAAA,YACT,eAAiB,EAAA,QAAA;AAAA,YACjB,iBAAmB,EAAA,IAAA;AAAA,YACnB,oBAAsB,EAAA,KAAA;AAAA,YACtB,iBAAmB,EAAA,IAAA;AAAA,YACnB,iBAAmB,EAAA,IAAA;AAAA,YACnB,IAAA,EAAM,SAAS,IAAQ,IAAA,QAAA;AAAA,YACvB,wBAA0B,EAAA,IAAA;AAAA,YAC1B,uBAAyB,EAAA,KAAA;AAAA,YACzB,yBAA2B,EAAA,KAAA;AAAA,YAC3B,wBAA0B,EAAA,KAAA;AAAA,WAAA;AAAA,UAE5B,gBAAkB,EAAA,KAAA;AAAA,SAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAMxB,IAAiD,SAAA,qCAAA,GAAA;AAC/C,MAAA,OAAO,GAAG,IAAK,CAAA;AAAA,QACb,SAAW,EAAA;AAAA,UACT,yBAA2B,EAAA,IAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAKjC,IAA6C,SAAA,mCAAA,CAAA,WAAA,EAAa,aAAa,IAAM,EAAA;AAC3E,MAAA,IAAA,GAAO,IAAQ,IAAA,OAAA,CAAA;AAEf,MAAM,MAAA,eAAA,GAAkB,SAAU,CAAA,oBAAA,CAAqB,WAAY,CAAA,IAAA,CAAA,CAAA;AAEnE,MAAA,MAAM,OAAU,GAAA;AAAA,QACd,aAAa,WAAY,CAAA,IAAA;AAAA,QACzB,QAAU,EAAA,EAAA;AAAA,QACV,OAAO,eAAgB,CAAA,KAAA;AAAA,QACvB,iBAAiB,eAAgB,CAAA,eAAA;AAAA,QACjC,aAAa,WAAY,CAAA,OAAA;AAAA,QACzB,eAAe,WAAY,CAAA,aAAA;AAAA,QAC3B,iBAAiB,WAAY,CAAA,mBAAA;AAAA,QAC7B,cAAc,WAAY,CAAA,YAAA;AAAA,QAC1B,gBAAgB,WAAY,CAAA,cAAA;AAAA,QAC5B,kBAAkB,WAAY,CAAA,gBAAA;AAAA,QAC9B,kBAAkB,WAAY,CAAA,gBAAA;AAAA,QAC9B,mBAAmB,WAAY,CAAA,iBAAA;AAAA,QAC/B,QAAQ,WAAY,CAAA,MAAA;AAAA,QACpB,MAAM,WAAY,CAAA,IAAA;AAAA,QAClB,mBAAmB,WAAY,CAAA,iBAAA;AAAA,QAC/B,QAAQ,WAAY,CAAA,MAAA;AAAA,QACpB,OAAO,WAAY,CAAA,KAAA;AAAA,QACnB,YAAc,EAAA,WAAA,CAAY,KAAS,IAAA,WAAA,CAAY,MAAM,MAAS,GAAA,CAAA;AAAA,QAC9D,YAAc,EAAA,EAAA;AAAA,QACd,WAAW,WAAY,CAAA,SAAA;AAAA,QACvB,KAAK,WAAY,CAAA,GAAA;AAAA,QACjB,QAAU,EAAA;AAAA,UACR,GAAA,EAAK,YAAY,QAAS,CAAA,GAAA;AAAA,UAC1B,GAAA,EAAK,YAAY,QAAS,CAAA,GAAA;AAAA,UAC1B,OAAA,EAAS,YAAY,QAAS,CAAA,OAAA;AAAA,SAAA;AAAA,QAEhC,IAAM,EAAA,EAAA;AAAA,QACN,YAAA,EAAc,YAAY,GAAI,CAAA,IAAA;AAAA,QAC9B,gBAAkB,EAAA,OAAA;AAAA,QAClB,MAAQ,EAAA;AAAA,UACN,SAAS,WAAY,CAAA,OAAA;AAAA,UACrB,QAAQ,WAAY,CAAA,MAAA;AAAA,UACpB,iBAAiB,WAAY,CAAA,IAAA;AAAA,UAC7B,SAAS,WAAY,CAAA,IAAA;AAAA,SAAA;AAAA,QAEvB,SAAW,EAAA;AAAA,UACT,iBAAmB,EAAA,IAAA;AAAA,UACnB,oBAAsB,EAAA,KAAA;AAAA,UACtB,iBAAmB,EAAA,IAAA;AAAA,UACnB,iBAAmB,EAAA,KAAA;AAAA,UACnB,0BAA4B,EAAA,KAAA;AAAA,UAC5B,IAAA;AAAA,UACA,wBAA0B,EAAA,IAAA;AAAA,SAAA;AAAA,QAE5B,kBAAkB,WAAY,CAAA,gBAAA;AAAA,OAAA,CAAA;AAGhC,MAAI,IAAA,OAAO,WAAY,CAAA,qBAAA,KAA0B,WAAa,EAAA;AAC5D,QAAA,OAAA,CAAQ,qBAAwB,GAAA,EAAA,CAAA;AAChC,QAAQ,OAAA,CAAA,qBAAA,CAAsB,gBAAmB,GAAA,WAAA,CAAY,qBAAsB,CAAA,gBAAA,CAAA;AACnF,QAAA,IAAI,CAAC,CAAA,CAAE,OAAQ,CAAA,WAAA,CAAY,sBAAsB,QAAW,CAAA,EAAA;AAC1D,UAAA,2BAAA,CAA4B,2BAA2B,WAAa,EAAA,OAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAIxE,MAAA,OAAO,GAAG,IAAK,CAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAGjB,IAAA,SAAA,mCAAA,CAA6C,aAAa,eAAiB,EAAA;AACzE,MAAM,MAAA,eAAA,GAAkB,EAAE,SAAU,CAAA,eAAA,CAAA,CAAA;AACpC,MAAA,MAAM,SAAS,eAAgB,CAAA,MAAA,CAAA;AAE/B,MAAA,MAAM,cAAiB,GAAA,EAAE,OAAS,EAAA,eAAA,CAAgB,OAAS,EAAA,MAAA,EAAA,CAAA;AAC3D,MAAA,OAAO,0BAA2B,CAAA,WAAA,EAAa,cAAgB,CAAA,CAAA,IAAA,CAAK,SAAU,OAAS,EAAA;AACrF,QAAA,MAAM,SAAY,GAAA;AAAA,UAChB,qBAAuB,EAAA,IAAA;AAAA,UACvB,iBAAmB,EAAA,IAAA;AAAA,UACnB,IAAM,EAAA,cAAA;AAAA,UACN,iBAAmB,EAAA,MAAA;AAAA,UACnB,eAAA,EAAiB,gBAAgB,SAAU,CAAA,eAAA;AAAA,UAC3C,mBAAA,EAAqB,gBAAgB,SAAU,CAAA,mBAAA;AAAA,SAAA,CAAA;AAGjD,QAAA,MAAM,aAAgB,GAAA;AAAA,UACpB,MAAA;AAAA,UACA,aAAa,eAAgB,CAAA,OAAA;AAAA,UAC7B,SAAA;AAAA,SAAA,CAAA;AAEF,QAAI,IAAA,eAAA,CAAgB,UAAU,mBAAqB,EAAA;AACjD,UAAc,aAAA,CAAA,YAAA,GAAe,eAAgB,CAAA,SAAA,CAAU,mBAAoB,CAAA,IAAA,CAAA;AAAA,SAAA;AAG7E,QAAgB,eAAA,CAAA,QAAA,GAAW,gBAAgB,QAAY,IAAA,EAAA,CAAA;AAEvD,QAAA,MAAM,eAAkB,GAAA,OAAA,CAAQ,MAAO,CAAA,EAAA,EAAI,SAAS,eAAiB,EAAA,aAAA,CAAA,CAAA;AAErE,QAAO,OAAA,eAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAIX,IAAO,OAAA;AAAA,MACL,0BAAA;AAAA,MACA,qCAAA;AAAA,MACA,mCAAA;AAAA,MACA,mCAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACxJD,MAAM,yCAA4C,GAAA,0CAAA,CAAA;AAEzD,MAAA,CAAO,yCAA2C,EAAA;AAAA,EAChD,6DAAA;AAAA,EACA,wBAAA;AAAA,EACA,0DAAA;AAAA,CAAA,CAAA,CAEC,OAAO,WAAY;AAClB,EAAA,QAAA,CAAS,SAAS,aAAc,CAAA;AAAA,IAC9B,QAAU,EAAA,MAAA;AAAA,IACV,aAAe,EAAA,OAAA;AAAA,IACf,KAAO,EAAA,MAAA;AAAA,IACP,WAAa,EAAA,gBAAA;AAAA,IACb,WAAa,EAAA,+CAAA;AAAA,IACb,mBAAqB,EAAA,0DAAA;AAAA,IACrB,uBAAyB,EAAA,kBAAA;AAAA,IACzB,eAAA,EAAiB,CAAC,KAAU,KAAA;AAC1B,MAAO,OAAA,KAAA,CAAM,YAAY,OAAQ,CAAA,kBAAA,IAAsB,MAAM,WAAY,CAAA,OAAA,CAAQ,sBAAsB,CAAI,GAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAE7G,qBAAuB,EAAA,IAAA;AAAA,IACvB,UAAY,EAAA;AAAA,MACV,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC;AAAA,QACE,IAAM,EAAA,yBAAA;AAAA,QACN,mBAAqB,EAAA,IAAA;AAAA,QACrB,UAAA,EAAY,CAAC,MAAA,KACX,0GAEA,GAAA,MAAA,CAAO,GAAI,CAAA,CAAC,KAAU,KAAA,CAAA,IAAA,EAAO,KAAc,CAAA,KAAA,CAAA,CAAA,CAAA,IAAA,CAAK,EAChD,CAAA,GAAA,iFAAA;AAAA,OAAA;AAAA,KAAA;AAAA,IAIN,WAAa,EAAA,IAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAGhB,WAAW,oBAAsB,EAAA;AAAA,EAChC,QAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAU,MAAA,EAAQ,EAAI,EAAA,gBAAA,EAAkB,SAAW,EAAA;AACjD,IAAA,MAAA,CAAO,KAAM,CAAA,kBAAA,GAAqB,MAAO,CAAA,KAAA,CAAM,kBAAsB,IAAA,EAAA,CAAA;AACrE,IAAA,MAAA,CAAO,KAAM,CAAA,OAAA,GAAU,MAAO,CAAA,KAAA,CAAM,OAAW,IAAA,EAAA,CAAA;AAE/C,IAAI,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,IAAM,EAAA;AACtB,MAAO,MAAA,CAAA,KAAA,CAAM,IAAO,GAAA,qBAAA,CAAsB,oBAAuB,EAAA,CAAA,IAAA,CAAA;AAAA,KAAA;AAGnE,IAAA,MAAA,CAAO,SAAY,GAAA;AAAA,MACjB,OAAS,EAAA,IAAA;AAAA,KAAA,CAAA;AAGX,IAAsB,SAAA,UAAA,GAAA;AACpB,MAAA,EAAA,CAAG,GAAI,CAAA;AAAA,QACL,eAAe,4BAA6B,CAAA,OAAA,CAAA;AAAA,QAC5C,aAAa,UAAW,CAAA,OAAA,CAAA;AAAA,QACxB,aAAa,gBAAiB,CAAA,OAAA,CAAA;AAAA,QAC9B,YAAa,CAAA,mBAAA,EAAA;AAAA,OAAA,CAAA,CACZ,KAAK,SAAU,CAAC,yBAA2B,EAAA,OAAA,EAAS,eAAe,gBAAmB,CAAA,EAAA;AACvF,QAAO,MAAA,CAAA,QAAA,GAAW,OAAO,IAAK,CAAA,yBAAA,CAAA,CAAA;AAC9B,QAAA,MAAA,CAAO,OAAU,GAAA,OAAA,CAAA;AACjB,QAAI,IAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,KAAW,CAAG,EAAA;AAC/B,UAAO,MAAA,CAAA,KAAA,CAAM,MAAS,GAAA,MAAA,CAAO,OAAQ,CAAA,CAAA,CAAA,CAAA;AAAA,SAAA,MAAA,IAC5B,CAAC,MAAO,CAAA,OAAA,CAAQ,QAAS,CAAA,MAAA,CAAO,MAAM,MAAS,CAAA,EAAA;AACxD,UAAA,OAAO,OAAO,KAAM,CAAA,MAAA,CAAA;AAAA,SAAA;AAEtB,QAAI,IAAA,CAAC,OAAO,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,KAAO,EAAA;AAC3E,UAAA,MAAA,CAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,MAAA,CAAO,YAAY,cAAe,CAAA,KAAA,CAAA,CAAA;AAAA,SAAA;AAE9D,QAAI,IAAA,CAAC,OAAO,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,KAAO,EAAA;AAC3E,UAAA,MAAA,CAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,MAAA,CAAO,YAAY,cAAe,CAAA,KAAA,CAAA,CAAA;AAAA,SAAA;AAE9D,QAAA,MAAA,CAAO,gBAAgB,aAAc,CAAA,UAAA,CAAA;AAErC,QAAA,MAAA,CAAO,gBAAmB,GAAA,gBAAA,CAAA;AAC1B,QAAO,MAAA,CAAA,aAAA,GAAgB,CAAC,OAAS,EAAA,SAAA,CAAA,CAAA;AACjC,QAAO,MAAA,CAAA,kBAAA,GAAqB,CAAC,KAAO,EAAA,KAAA,CAAA,CAAA;AAEpC,QAAA,MAAA,CAAO,SAAU,CAAA,SAAA,GACf,QAAS,CAAA,OAAA,CAAQ,SAChB,IAAA,OAAO,QAAS,CAAA,OAAA,CAAQ,aAAkB,KAAA,UAAA,IAAc,QAAS,CAAA,OAAA,CAAQ,cAAc,MAAO,CAAA,KAAA,CAAA,CAAA;AACjG,QAAA,MAAA,CAAO,mBAAsB,GAAA,YAAA,EAAA,CAAA;AAC7B,QAAA,MAAA,CAAO,UAAU,OAAU,GAAA,KAAA,CAAA;AAE3B,QAAI,IAAA,MAAA,CAAO,KAAM,CAAA,YAAA,IAAgB,IAAM,EAAA;AACrC,UAAA,MAAA,CAAO,sBAAyB,GAAA,IAAA,CAAA;AAChC,UAAA,gBAAA,EAAA,CAAA;AAAA,SAAA;AAEF,QAAO,MAAA,CAAA,sBAAA,GAAyB,MAAO,CAAA,KAAA,CAAM,MAAU,IAAA,IAAA,CAAA;AACvD,QAAO,MAAA,CAAA,qBAAA,GAAwB,MAAO,CAAA,KAAA,CAAM,SAAa,IAAA,IAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAI7D,IAAwB,SAAA,YAAA,GAAA;AACtB,MAAA,qBAAA,EAAA,CAAA;AAEA,MAAA,IAAI,OAAO,QAAA,CAAS,OAAQ,CAAA,aAAA,KAAkB,UAAY,EAAA;AACxD,QAAA,MAAA,CAAO,SAAU,CAAA,SAAA,GAAY,QAAS,CAAA,OAAA,CAAQ,cAAc,MAAO,CAAA,KAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAIvE,IAAwB,SAAA,YAAA,GAAA;AACtB,MAAA,MAAM,MAAM,MAAO,CAAA,KAAA,CAAA;AACnB,MAAO,OAAA,CAAC,EACN,GAAA,CAAI,gBACH,IAAA,GAAA,CAAI,kBAAsB,IAAA,CAAA,CAAE,IAAK,CAAA,GAAA,CAAI,kBAAsB,CAAA,GAAA,CAAA,IAC5D,GAAI,CAAA,WAAA,CAAA,CAAA;AAAA,KAAA;AAIR,IAAiC,SAAA,qBAAA,GAAA;AAC/B,MAAA,CAAA,CAAE,MAAO,CAAA,MAAA,CAAO,KAAO,EAAA,SAAU,KAAK,GAAK,EAAA;AACzC,QAAA,IAAI,QAAQ,EAAI,EAAA;AACd,UAAA,OAAO,OAAO,KAAM,CAAA,GAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAK1B,IAA4B,SAAA,gBAAA,GAAA;AAC1B,MAAA,gBAAA,CACG,UAAW,CAAA,EAAE,QAAU,EAAA,OAAA,EAAS,aAAe,EAAA,IAAA,EAAM,OAAS,EAAA,MAAA,CAAO,KAAM,CAAA,OAAA,EAAA,CAAA,CAC3E,IAAK,CAAA,SAAU,MAAQ,EAAA;AACtB,QAAA,IAAI,mBAAsB,GAAA,EAAA,CAAA;AAC1B,QAAA,KAAA,IAAS,KAAK,MAAQ,EAAA;AACpB,UAAA,IAAI,QAAQ,MAAO,CAAA,CAAA,CAAA,CAAA;AACnB,UAAA,IAAI,QAAW,GAAA;AAAA,YACb,IAAI,KAAM,CAAA,SAAA;AAAA,YACV,QAAQ,KAAM,CAAA,MAAA;AAAA,YACd,MAAM,KAAM,CAAA,SAAA;AAAA,WAAA,CAAA;AAEd,UAAA,mBAAA,CAAoB,IAAK,CAAA,QAAA,CAAA,CAAA;AAAA,SAAA;AAE3B,QAAA,MAAA,CAAO,mBAAsB,GAAA,mBAAA,CAAA;AAAA,OAAA,CAAA,CAE9B,MAAM,MAAM;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAGjB,IAAsB,SAAA,UAAA,GAAA;AACpB,MAAA,cAAA,CAAe,qBAAqB,MAAO,CAAA,KAAA,CAAM,OAC9C,CAAA,CAAA,IAAA,CAAK,SAAU,OAAS,EAAA;AACvB,QAAA,MAAA,CAAO,OAAU,GAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAEvC,MAAM,MAAM;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAGjB,IAAA,IAAA,CAAK,uBAAuB,WAAY;AACtC,MAAI,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,kBAAoB,EAAA;AACpC,QAAA,MAAA,CAAO,MAAM,kBAAqB,GAAA,EAAA,CAAA;AAAA,OAAA;AAEpC,MAAA,SAAA,CACG,IAAK,CAAA;AAAA,QACJ,aAAa,iBAAkB,CAAA,qBAAA;AAAA,QAC/B,UAAY,EAAA,yCAAA;AAAA,QACZ,YAAc,EAAA,sBAAA;AAAA,QACd,OAAS,EAAA;AAAA,UACP,mBAAmB,WAAY;AAC7B,YAAO,OAAA;AAAA,cACL,GAAK,EAAA,EAAA;AAAA,cACL,KAAO,EAAA,EAAA;AAAA,aAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAKd,CAAA,CAAA,MAAA,CAAO,IAAK,CAAA,SAAU,iBAAmB,EAAA;AACxC,QAAA,MAAA,CAAO,KAAM,CAAA,kBAAA,CAAmB,iBAAkB,CAAA,GAAA,CAAA,GAAO,iBAAkB,CAAA,KAAA,CAAA;AAAA,OAAA,CAAA,CAE5E,MAAM,MAAM;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGjB,IAAK,IAAA,CAAA,uBAAA,GAA0B,SAAU,GAAK,EAAA;AAC5C,MAAO,OAAA,MAAA,CAAO,MAAM,kBAAmB,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGzC,IAAA,IAAA,CAAK,uBAAuB,WAAY;AACtC,MAAA,OAAO,MAAO,CAAA,SAAA,CAAU,SAAa,IAAA,MAAA,CAAO,KAAM,CAAA,gBAAA,CAAA;AAAA,KAAA,CAAA;AAGpD,IAAA,IAAA,CAAK,yBAAyB,WAAY;AACxC,MACE,OAAA,MAAA,CAAO,SAAU,CAAA,SAAA,IAAc,MAAO,CAAA,KAAA,CAAM,sBAAsB,CAAE,CAAA,IAAA,CAAK,MAAO,CAAA,KAAA,CAAM,kBAAsB,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIhH,IAAA,IAAA,CAAK,kBAAkB,WAAY;AACjC,MAAA,OAAO,MAAO,CAAA,SAAA,CAAU,SAAa,IAAA,MAAA,CAAO,KAAM,CAAA,WAAA,CAAA;AAAA,KAAA,CAAA;AAGpD,IAAA,IAAA,CAAK,oBAAoB,WAAY;AACnC,MAAA,MAAA,CAAO,sBAAyB,GAAA,KAAA,CAAA;AAChC,MAAA,MAAA,CAAO,sBAAyB,GAAA,IAAA,CAAA;AAChC,MAAA,MAAA,CAAO,qBAAwB,GAAA,KAAA,CAAA;AAE/B,MAAA,MAAA,CAAO,MAAM,YAAe,GAAA,IAAA,CAAA;AAC5B,MAAA,MAAA,CAAO,MAAM,SAAY,GAAA,IAAA,CAAA;AACzB,MAAA,MAAA,CAAO,MAAM,KAAQ,GAAA,IAAA,CAAA;AACrB,MAAA,MAAA,CAAO,MAAM,GAAM,GAAA,IAAA,CAAA;AACnB,MAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AACtB,MAAA,MAAA,CAAO,MAAM,WAAc,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAG7B,IAAA,IAAA,CAAK,oBAAoB,WAAY;AACnC,MAAA,gBAAA,EAAA,CAAA;AAEA,MAAA,MAAA,CAAO,sBAAyB,GAAA,IAAA,CAAA;AAChC,MAAA,MAAA,CAAO,sBAAyB,GAAA,KAAA,CAAA;AAChC,MAAA,MAAA,CAAO,qBAAwB,GAAA,KAAA,CAAA;AAE/B,MAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AACtB,MAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AACtB,MAAA,MAAA,CAAO,MAAM,SAAY,GAAA,IAAA,CAAA;AACzB,MAAA,MAAA,CAAO,MAAM,KAAQ,GAAA,IAAA,CAAA;AACrB,MAAA,MAAA,CAAO,MAAM,GAAM,GAAA,IAAA,CAAA;AACnB,MAAA,MAAA,CAAO,MAAM,WAAc,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAG7B,IAAA,IAAA,CAAK,mBAAmB,WAAY;AAClC,MAAA,MAAA,CAAO,sBAAyB,GAAA,KAAA,CAAA;AAChC,MAAA,MAAA,CAAO,sBAAyB,GAAA,KAAA,CAAA;AAChC,MAAA,MAAA,CAAO,qBAAwB,GAAA,IAAA,CAAA;AAE/B,MAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AACtB,MAAA,MAAA,CAAO,MAAM,YAAe,GAAA,IAAA,CAAA;AAC5B,MAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AACtB,MAAA,MAAA,CAAO,MAAM,WAAc,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAG7B,IAAA,IAAA,CAAK,kBAAkB,MAAM;AAC3B,MAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AACtB,MAAA,MAAA,CAAO,MAAM,WAAc,GAAA,IAAA,CAAA;AAC3B,MAAA,MAAA,CAAO,MAAM,YAAe,GAAA,IAAA,CAAA;AAE5B,MAAI,IAAA,MAAA,CAAO,MAAM,OAAS,EAAA;AACxB,QAAA,UAAA,EAAA,CAAA;AAAA,OAAA;AAGF,MAAA,IAAI,OAAO,sBAAwB,EAAA;AACjC,QAAA,gBAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,MAAA,CAAO,uBAAuB,MAAM;AAClC,MAAA,MAAA,CAAO,MAAM,WAAc,GAAA,IAAA,CAAA;AAC3B,MAAM,MAAA,oBAAA,GAAuB,EAAE,IAAK,CAAA,MAAA,CAAO,qBAAqB,EAAE,EAAA,EAAI,OAAO,KAAM,CAAA,YAAA,EAAA,CAAA,CAAA;AACnF,MAAO,MAAA,CAAA,KAAA,CAAM,MAAS,GAAA,oBAAA,CAAqB,MAAO,CAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGpD,IAAK,IAAA,CAAA,cAAA,GAAiB,SAAU,CAAG,EAAA;AACjC,MAAA,MAAA,CAAO,MAAM,WAAc,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAG7B,IAAO,MAAA,CAAA,MAAA,CAAO,SAAS,YAAc,EAAA,IAAA,CAAA,CAAA;AAErC,IAAA,UAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3QC,MAAM,qDAAwD,GAAA,gDAAA,CAAA;AAErE,MAAO,CAAA,qDAAA,EAAuD,EAC3D,CAAA,CAAA,MAAA,CAAO,WAAY;AAClB,EAAA,QAAA,CAAS,SAAS,aAAc,CAAA;AAAA,IAC9B,QAAU,EAAA,oBAAA;AAAA,IACV,aAAe,EAAA,OAAA;AAAA,IACf,WAAa,EAAA,2DAAA;AAAA,IACb,qBAAuB,EAAA,+DAAA;AAAA,IACvB,gBAAkB,EAAA,CAAC,KAAU,KAAA,CAAC,MAAM,OAAQ,CAAA,WAAA,CAAA;AAAA,IAC5C,sBAAwB,EAAA,CAAC,KAAU,KAAA,CAAC,KAAM,CAAA,WAAA,CAAA;AAAA,IAC1C,UAAY,EAAA;AAAA,MACV;AAAA,QACE,IAAM,EAAA,iBAAA;AAAA,QACN,OACE,EAAA,6GAAA;AAAA,OAAA;AAAA,MAEJ,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,QAAA,EAAA;AAAA,MACpC,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC,EAAE,IAAA,EAAM,eAAiB,EAAA,SAAA,EAAW,eAAe,UAAY,EAAA,SAAA,EAAA;AAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAIpE,WAAW,0BAA4B,EAAA;AAAA,EACtC,QAAA;AAAA,EACA,SAAU,MAAQ,EAAA;AAChB,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AAEb,IAAA,MAAM,QAAQ,MAAO,CAAA,KAAA,CAAA;AAErB,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,QAAU,EAAA,KAAA;AAAA,MACV,aAAe,EAAA,KAAA;AAAA,KAAA,CAAA;AAGjB,IAAA,cAAA,CAAe,YAAa,CAAA,OAAA,CAAA,CAAS,IAAK,CAAA,SAAU,QAAU,EAAA;AAC5D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAA,MAAA,CAAO,MAAM,QAAW,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG1B,IAAA,IAAA,CAAK,iBAAiB,WAAY;AAChC,MAAA,cAAA,CAAe,iBAAkB,CAAA,KAAA,CAAM,WAAa,CAAA,CAAA,IAAA,CAAK,SAAU,OAAS,EAAA;AAC1E,QAAM,KAAA,CAAA,OAAA,GAAU,CAAC,OAAQ,CAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAK7B,IAAA,MAAA,CAAO,UAAU,cAAe,CAAA,WAAA,CAAA;AAEhC,IAAM,KAAA,CAAA,OAAA,GAAU,MAAM,OAAW,IAAA,EAAA,CAAA;AACjC,IAAA,KAAA,CAAM,aAAgB,GAAA,OAAA,CAAA;AAEtB,IAAA,KAAA,CAAM,8BAAiC,GAAA,EAAA,CAAA;AAEvC,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,KAAO,EAAA;AACrE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,KAAA,CAAA;AAAA,KAAA;AAG5D,IAAA,IAAI,MAAM,WAAa,EAAA;AACrB,MAAK,IAAA,CAAA,cAAA,EAAA,CAAA;AAAA,KAAA;AAEP,IAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,MAAM,KAAA,CAAA,MAAA,GAAS,MAAO,CAAA,OAAA,CAAQ,CAAG,CAAA,CAAA,GAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;AC/DlC,MAAM,qDAAwD,GAAA,gDAAA,CAAA;AAErE,MAAO,CAAA,qDAAA,EAAuD,EAC3D,CAAA,CAAA,MAAA,CAAO,WAAY;AAClB,EAAA,QAAA,CAAS,SAAS,aAAc,CAAA;AAAA,IAC9B,QAAU,EAAA,oBAAA;AAAA,IACV,KAAO,EAAA,YAAA;AAAA,IACP,aAAe,EAAA,OAAA;AAAA,IACf,WAAa,EAAA,2DAAA;AAAA,IACb,qBAAuB,EAAA,+DAAA;AAAA,IACvB,UAAY,EAAA;AAAA,MACV;AAAA,QACE,IAAM,EAAA,iBAAA;AAAA,QACN,OACE,EAAA,6GAAA;AAAA,OAAA;AAAA,MAEJ,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,QAAA,EAAA;AAAA,MACpC,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC,EAAE,IAAA,EAAM,eAAiB,EAAA,SAAA,EAAW,eAAe,UAAY,EAAA,SAAA,EAAA;AAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAIpE,WAAW,0BAA4B,EAAA;AAAA,EACtC,QAAA;AAAA,EACA,SAAU,MAAQ,EAAA;AAChB,IAAA,MAAM,QAAQ,MAAO,CAAA,KAAA,CAAA;AAErB,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,QAAU,EAAA,KAAA;AAAA,MACV,aAAe,EAAA,KAAA;AAAA,KAAA,CAAA;AAGjB,IAAA,cAAA,CAAe,YAAa,CAAA,OAAA,CAAA,CAAS,IAAK,CAAA,SAAU,QAAU,EAAA;AAC5D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAA,MAAA,CAAO,MAAM,QAAW,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG1B,IAAA,MAAA,CAAO,UAAU,cAAe,CAAA,WAAA,CAAA;AAEhC,IAAM,KAAA,CAAA,OAAA,GAAU,MAAM,OAAW,IAAA,EAAA,CAAA;AACjC,IAAA,KAAA,CAAM,aAAgB,GAAA,OAAA,CAAA;AAEtB,IAAA,IAAI,KAAM,CAAA,KAAA,IAAS,MAAO,CAAA,WAAA,CAAY,WAAW,kBAAoB,EAAA;AACnE,MAAA,KAAA,CAAM,8BAAiC,GAAA,EAAA,CAAA;AAAA,KAAA;AAGzC,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,KAAO,EAAA;AACrE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,KAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,KAAO,EAAA;AACpE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA;AAGvD,IAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,MAAM,KAAA,CAAA,MAAA,GAAS,MAAO,CAAA,OAAA,CAAQ,CAAG,CAAA,CAAA,GAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;ACvDlC,MAAM,mDAAsD,GAAA,+CAAA,CAAA;AAEnE,MAAO,CAAA,mDAAA,EAAqD,EACzD,CAAA,CAAA,MAAA,CAAO,WAAY;AAClB,EAAA,QAAA,CAAS,SAAS,aAAc,CAAA;AAAA,IAC9B,QAAU,EAAA,mBAAA;AAAA,IACV,KAAO,EAAA,WAAA;AAAA,IACP,aAAe,EAAA,OAAA;AAAA,IACf,WAAa,EAAA,yDAAA;AAAA,IACb,qBAAuB,EAAA,6DAAA;AAAA,IACvB,UAAY,EAAA;AAAA,MACV,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,QAAA,EAAA;AAAA,MACpC,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC,EAAE,IAAA,EAAM,eAAiB,EAAA,SAAA,EAAW,eAAe,UAAY,EAAA,SAAA,EAAA;AAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAIpE,WAAW,yBAA2B,EAAA;AAAA,EACrC,QAAA;AAAA,EACA,SAAU,MAAQ,EAAA;AAChB,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AAEb,IAAA,MAAM,QAAQ,MAAO,CAAA,KAAA,CAAA;AAErB,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,QAAU,EAAA,KAAA;AAAA,MACV,aAAe,EAAA,KAAA;AAAA,KAAA,CAAA;AAGjB,IAAA,cAAA,CAAe,YAAa,CAAA,OAAA,CAAA,CAAS,IAAK,CAAA,SAAU,QAAU,EAAA;AAC5D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAA,MAAA,CAAO,MAAM,QAAW,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG1B,IAAA,IAAA,CAAK,QAAQ,MAAM;AACjB,MAAK,IAAA,CAAA,cAAA,EAAA,CAAA;AACL,MAAK,IAAA,CAAA,oBAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGP,IAAA,MAAA,CAAO,UAAU,cAAe,CAAA,WAAA,CAAA;AAEhC,IAAM,KAAA,CAAA,OAAA,GAAU,MAAM,OAAW,IAAA,EAAA,CAAA;AACjC,IAAA,KAAA,CAAM,aAAgB,GAAA,OAAA,CAAA;AAEtB,IAAA,IAAI,MAAM,KAAO,EAAA;AAEf,MAAA,KAAA,CAAM,8BAAiC,GAAA,EAAA,CAAA;AAAA,KAAA;AAGzC,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,KAAO,EAAA;AACrE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,KAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,KAAO,EAAA;AACpE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA;AAGvD,IAAI,IAAA,CAAC,MAAM,MAAQ,EAAA;AACjB,MAAM,KAAA,CAAA,MAAA,GAAS,MAAO,CAAA,OAAA,CAAQ,CAAG,CAAA,CAAA,GAAA,CAAA;AAAA,KAAA;AAGnC,IAAO,MAAA,CAAA,MAAA,CAAO,qBAAqB,MAAO,CAAA,cAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;AC3DzC,MAAM,+CAAkD,GAAA,6CAAA,CAAA;AACxD,MAAM,IAAO,GAAA,+CAAA,CAAA;AACpB,MAAA,CAAO,+CAAiD,EAAA,CAAC,kBAAqB,CAAA,CAAA,CAAA,OAAA,CAC5E,4BACA,WAAY;AACV,EAAA,SAAA,mBAAA,CAA6B,aAAe,EAAA,WAAA,EAAa,UAAY,EAAA,MAAA,GAAS,EAAI,EAAA;AAChF,IAAA,MAAA,CAAO,oBAAoB,aAAc,CAAA,IAAA,CAAA;AAGzC,IAAA,CAAA,CAAE,UAAW,CAAA,MAAA,EAAQ,aAAe,EAAA,SAAU,OAAO,KAAO,EAAA;AAC1D,MAAO,OAAA,CAAA,CAAE,WAAY,CAAA,KAAA,CAAA,GAAS,KAAQ,GAAA,KAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGxC,IAAM,MAAA,SAAA,GAAY,aAAa,WAAY,CAAA;AAAA,MACzC,KAAK,CAAC,MAAA,CAAA;AAAA,MACN,WAAA;AAAA,MACA,WAAa,EAAA,CAAA,EAAG,UAAc,CAAA,CAAA,EAAA,cAAA,CAAe,IAAI,UAAgB,CAAA,CAAA,EAAA,EAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGnE,IAAA,oBAAA,CAAqB,UAAW,CAAA,eAAA,CAAA,CAAA;AAEhC,IAAO,OAAA,SAAA,CAAA;AAAA,GAAA;AAGT,EAA6B,SAAA,mBAAA,CAAA,aAAA,EAAe,WAAa,EAAA,MAAA,GAAS,EAAI,EAAA;AACpE,IAAA,MAAA,CAAO,IAAO,GAAA,qBAAA,CAAA;AACd,IAAA,MAAA,CAAO,oBAAoB,aAAc,CAAA,IAAA,CAAA;AACzC,IAAO,MAAA,CAAA,OAAA,GAAU,CAAC,aAAc,CAAA,MAAA,CAAA,CAAA;AAChC,IAAA,MAAA,CAAO,cAAc,aAAc,CAAA,SAAA,CAAA;AAEnC,IAAA,MAAA,CAAO,UAAU,WAAY,CAAA,IAAA,CAAA;AAE7B,IAAM,MAAA,SAAA,GAAY,aAAa,WAAY,CAAA;AAAA,MACzC,KAAK,CAAC,MAAA,CAAA;AAAA,MACN,WAAA;AAAA,MACA,WAAa,EAAA,CAAA,OAAA,EAAU,cAAe,CAAA,GAAA,CAAI,iBAAiB,aAAc,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG3E,IAAA,oBAAA,CAAqB,UAAW,CAAA,eAAA,CAAA,CAAA;AAEhC,IAAO,OAAA,SAAA,CAAA;AAAA,GAAA;AAGT,EAAO,OAAA;AAAA,IACL,mBAAA;AAAA,IACA,mBAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;;AC3CC,MAAM,qDAAwD,GAAA,iDAAA,CAAA;AAErE,MAAA,CAAO,qDAAuD,EAAA;AAAA,EAC5D,kBAAA;AAAA,EACA,+CAAA;AAAA,CAAA,CAAA,CACC,WAAW,8BAAgC,EAAA;AAAA,EAC5C,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,0BAAA;AAAA,EACA,SAAU,MAAQ,EAAA,iBAAA,EAAmB,QAAQ,WAAa,EAAA,WAAA,EAAa,eAAe,wBAA0B,EAAA;AAC9G,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,QAAU,EAAA,sEAAA;AAAA,MACV,OAAS,EAAA,mEAAA;AAAA,KAAA,CAAA;AAGX,IAAA,MAAA,CAAO,OAAU,GAAA,EAAA,CAAA;AAEjB,IAAO,MAAA,CAAA,aAAA,GAAgB,eAAe,GAAI,CAAA,UAAA,CAAA,CAAA;AAE1C,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AACb,IAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAA;AACf,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,UAAY,EAAA,KAAA;AAAA,MACZ,cAAgB,EAAA;AAAA,QACd,QAAU,EAAA,EAAA;AAAA,QACV,YAAc,EAAA,EAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIlB,IAAA,cAAA,CAAe,YAAa,CAAA,OAAA,CAAA,CAAS,IAAK,CAAA,SAAU,QAAU,EAAA;AAC5D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAK,IAAA,CAAA,cAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGP,IAAA,IAAA,CAAK,eAAe,WAAY;AAC9B,MAAA,MAAA,CAAO,KAAM,CAAA,cAAA,CAAe,YAAgB,IAAA,MAAA,CAAO,MAAM,cAAe,CAAA,QAAA,CAAA;AAAA,KAAA,CAAA;AAG1E,IAAgC,SAAA,oBAAA,GAAA;AAE9B,MAAA,IAAI,OAAO,WAAa,EAAA;AACtB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAkB,iBAAA,CAAA,KAAA,EAAA,CAAA;AAClB,MAAA,MAAM,cAAiB,GAAA;AAAA,QACrB,IAAA,EAAM,OAAO,aAAc,CAAA,IAAA;AAAA,QAC3B,SAAW,EAAA,MAAA,CAAO,aAAc,CAAA,WAAA,IAAe,OAAO,aAAc,CAAA,WAAA;AAAA,QACpE,MAAA,EAAQ,MAAO,CAAA,aAAA,CAAc,OAAQ,CAAA,CAAA,CAAA;AAAA,QACrC,QAAU,EAAA,OAAA;AAAA,OAAA,CAAA;AAEZ,MAAI,IAAA,CAAC,MAAO,CAAA,QAAA,CAAS,oBAAuB,CAAA,EAAA;AAC1C,QAAA,MAAA,CAAO,GAAG,kBAAoB,EAAA,cAAA,CAAA,CAAA;AAAA,OACzB,MAAA;AACL,QAAA,MAAA,CAAO,GAAG,mBAAqB,EAAA,cAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAInC,IAA0B,SAAA,cAAA,GAAA;AACxB,MAAA,WAAA,CAAY,cAAe,CAAA,OAAA,EAAA,CAAA;AAC3B,MAAY,WAAA,CAAA,cAAA,CAAe,cAAc,MAAQ,EAAA,oBAAA,CAAA,CAAA;AAAA,KAAA;AAGnD,IAAO,MAAA,CAAA,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,MACnC,WAAA;AAAA,MACA,KAAA,EAAO,CAAiB,cAAA,EAAA,cAAA,CAAe,GAAI,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,MAC3C,aAAe,EAAA,iBAAA;AAAA,MACf,cAAA;AAAA,KAAA,CAAA,CAAA;AAGF,IAAA,MAAA,CAAO,aAAgB,GAAA,aAAA,CAAA;AAEvB,IAAA,IAAA,CAAK,iBAAiB,WAAY;AAChC,MAAA,cAAA,CAAe,qBAAqB,MAAO,CAAA,aAAA,CAAc,WAAa,CAAA,CAAA,IAAA,CAAK,SAAU,OAAS,EAAA;AAC5F,QAAA,MAAA,CAAO,OAAU,GAAA,OAAA,CAAA;AACjB,QAAA,MAAA,CAAO,cAAc,OAAU,GAAA,OAAA,CAAA;AAC/B,QAAK,IAAA,CAAA,UAAA,EAAA,CAAA;AACL,QAAK,IAAA,CAAA,aAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIT,IAAA,IAAA,CAAK,gBAAgB,WAAY;AAC/B,MAAK,IAAA,CAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGP,IAAA,IAAA,CAAK,cAAc,WAAY;AAC7B,MAAM,MAAA,OAAA,GAAU,OAAO,aAAc,CAAA,WAAA,CAAA;AACrC,MAAM,MAAA,MAAA,GAAS,OAAO,aAAc,CAAA,MAAA,CAAA;AACpC,MAAA,MAAA,CAAO,cAAc,YAAe,GAAA,IAAA,CAAA;AACpC,MAAA,MAAA,CAAO,cAAc,IAAO,GAAA,IAAA,CAAA;AAC5B,MAAA,MAAA,CAAO,cAAc,iBAAoB,GAAA,IAAA,CAAA;AAEzC,MAAA,IAAA,CAAK,aAAgB,GAAA,EAAA,CAAA;AAErB,MAAc,aAAA,CAAA,YAAA,EAAA,CAAe,IAAK,CAAA,SAAU,KAAO,EAAA;AACjD,QAAA,IAAI,MAAM,KAAO,EAAA;AACf,UAAM,KAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,IAAS,KAAA;AAC5B,YAAA,IAAI,IAAK,CAAA,OAAA,KAAY,OAAW,IAAA,IAAA,CAAK,WAAW,MAAQ,EAAA;AACtD,cAAA,IAAA,CAAK,cAAc,IAAK,CAAA,IAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAMhC,MAAK,IAAA,CAAA,aAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGP,IAAA,IAAA,CAAK,gBAAgB,WAAY;AAC/B,MAAA,MAAA,CAAO,cAAc,cAAiB,GAAA,IAAA,CAAA;AACtC,MAAA,MAAA,CAAO,cAAc,MAAS,GAAA,IAAA,CAAA;AAC9B,MAAA,IAAA,CAAK,eAAkB,GAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGzB,IAAK,IAAA,CAAA,mBAAA,GAAsB,SAAU,IAAM,EAAA;AACzC,MAAO,MAAA,CAAA,aAAA,CAAc,OAAO,IAAK,CAAA,IAAA,CAAA;AACjC,MAAO,MAAA,CAAA,aAAA,CAAc,oBAAoB,IAAK,CAAA,aAAA,CAAA;AAC9C,MAAA,MAAA,CAAO,cAAc,cAAiB,GAAA,IAAA,CAAA;AACtC,MAAA,MAAA,CAAO,cAAc,MAAS,GAAA,IAAA,CAAA;AAC9B,MAAA,IAAA,CAAK,eAAkB,GAAA,EAAA,CAAA;AACvB,MAAA,IAAI,KAAK,OAAS,EAAA;AAChB,QAAK,IAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,SAAU,MAAQ,EAAA;AACjC,UAAA,IAAA,CAAK,gBAAgB,IAAK,CAAA,MAAA,CAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAKhC,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAkB,iBAAA,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGpB,IAAA,IAAA,CAAK,aAAa,WAAY;AAC5B,MAAA,MAAM,iBAAgB,MAAO,CAAA,aAAA,CAAA;AAC7B,MAAA,IAAI,QAAO,WAAY,CAAA,IAAA,CAAA;AACvB,MAAA,IAAI,eAAc,MAAQ,EAAA;AACxB,QAAA,KAAA,IAAQ,MAAM,cAAc,CAAA,MAAA,CAAA;AAAA,OAAA;AAE9B,MAAA,cAAA,CAAc,IAAO,GAAA,KAAA,CAAA;AACrB,MAAA,MAAA,CAAO,WAAc,GAAA,KAAA,CAAA;AAAA,KAAA,CAAA;AAGvB,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAO,MAAA,CAAA,WAAA,CAAY,OAAO,WAAY;AACpC,QAAA,MAAM,MAAS,GAAA;AAAA,UACb,aAAe,EAAA,OAAA;AAAA,UACf,SAAS,WAAY,CAAA,IAAA;AAAA,UACrB,MAAA,EAAQ,OAAO,aAAc,CAAA,MAAA;AAAA,UAC7B,KAAO,EAAA,MAAA;AAAA,SAAA,CAAA;AAGT,QAAI,IAAA,MAAA,CAAO,cAAc,YAAc,EAAA;AACrC,UAAA,MAAA,CAAO,aAAc,CAAA,IAAA,GAAO,MAAO,CAAA,aAAA,CAAc,YAAa,CAAA,IAAA,CAAA;AAC9D,UAAA,MAAA,CAAO,aAAc,CAAA,iBAAA,GAAoB,MAAO,CAAA,aAAA,CAAc,YAAa,CAAA,aAAA,CAAA;AAAA,SAAA;AAG7E,QAAI,IAAA,MAAA,CAAO,cAAc,cAAgB,EAAA;AACvC,UAAA,MAAA,CAAO,aAAc,CAAA,MAAA,GAAS,MAAO,CAAA,aAAA,CAAc,cAAe,CAAA,IAAA,CAAA;AAAA,SAAA;AAGpE,QAAA,MAAA,CAAO,cAAc,IAAO,GAAA,qBAAA,CAAA;AAE5B,QAAA,OAAO,wBAAyB,CAAA,mBAAA,CAAoB,MAAO,CAAA,aAAA,EAAe,aAAa,QAAU,EAAA,MAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIrG,IAAK,IAAA,CAAA,OAAA,GAAU,SAAU,OAAS,EAAA;AAChC,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,IAAM,EAAA,MAAA,CAAO,aAAc,CAAA,IAAA,GAAO,UAAU,OAAQ,CAAA,MAAA;AAAA,QACpD,UAAU,OAAQ,CAAA,MAAA,IAAU,IAAI,GAAM,GAAA,GAAA,YAAe,MAAS,GAAA,CAAA,CAAA;AAAA,QAC9D,UAAY,EAAA,KAAA;AAAA,QACZ,QAAU,EAAA,KAAA;AAAA,QACV,MAAQ,EAAA,OAAA;AAAA,QACR,SAAW,EAAA,SAAA;AAAA,QACX,mBAAqB,EAAA,GAAA;AAAA,QACrB,qBAAuB,EAAA,EAAA;AAAA,QACvB,eAAiB,EAAA,GAAA;AAAA,QACjB,wBAA0B,EAAA,GAAA;AAAA,QAC1B,oBAAsB,EAAA,GAAA;AAAA,QACtB,qBAAuB,EAAA,EAAA;AAAA,QACvB,cAAgB,EAAA,GAAA;AAAA,QAChB,kBAAoB,EAAA,GAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIxB,IAAK,IAAA,CAAA,WAAA,GAAc,SAAU,OAAA,EAAS,KAAO,EAAA;AAC3C,MAAA,IAAI,CAAC,CAAA,CAAE,OAAQ,CAAA,OAAA,CAAQ,OAAO,cAAiB,CAAA,EAAA;AAC7C,QAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,cAAA,CAAe,KAAM,CAAA,GAAA,CAAA,CAAA;AAEvD,QAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACzB,UAAA,OAAA,CAAQ,OAAO,qBAAwB,GAAA,EAAA,CAAA;AACvC,UAAA,UAAA,CAAW,QAAQ,CAAC,CAAA,KAAM,OAAQ,CAAA,KAAA,CAAA,CAAO,sBAAsB,IAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAGpE,UAAA,OAAA,CAAQ,OAAO,oBAAuB,GAAA,IAAA,CAAA;AAAA,SACjC,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAA,CAAO,oBAAuB,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,cAAA,CAAA;AAGrD,UAAA,OAAA,CAAQ,OAAO,qBAAwB,GAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAK7C,IAAK,IAAA,CAAA,mBAAA,GAAsB,SAAU,OAAA,EAAS,KAAO,EAAA;AACnD,MAAA,IAAI,CAAC,CAAA,CAAE,OAAQ,CAAA,OAAA,CAAQ,OAAO,cAAiB,CAAA,EAAA;AAC7C,QAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,kBAAA,CAAmB,KAAM,CAAA,GAAA,CAAA,CAAA;AAC3D,QAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACzB,UAAA,OAAA,CAAQ,OAAO,qBAAwB,GAAA,EAAA,CAAA;AACvC,UAAA,UAAA,CAAW,QAAQ,CAAC,CAAA,KAAM,OAAQ,CAAA,KAAA,CAAA,CAAO,sBAAsB,IAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAGpE,UAAA,OAAA,CAAQ,OAAO,mBAAsB,GAAA,IAAA,CAAA;AAAA,SAChC,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAA,CAAO,mBAAsB,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,kBAAA,CAAA;AAGpD,UAAA,OAAA,CAAQ,OAAO,qBAAwB,GAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAK7C,IAAK,IAAA,CAAA,eAAA,GAAkB,SAAU,OAAA,EAAS,KAAO,EAAA;AAC/C,MAAQ,OAAA,CAAA,KAAA,CAAA,CAAO,QAAW,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,UAAA,CAAA;AAAA,KAAA,CAAA;AAG3C,IAAK,IAAA,CAAA,UAAA,GAAa,SAAU,OAAA,EAAS,KAAO,EAAA;AAC1C,MAAA,OAAA,CAAQ,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGxB,IAAK,IAAA,CAAA,MAAA,GAAS,SAAU,OAAA,EAAS,KAAO,EAAA;AACtC,MAAA,IAAI,KAAU,KAAA,CAAA;AAAG,QAAA,OAAA;AACjB,MAAU,SAAA,CAAA,OAAA,EAAS,OAAO,KAAQ,GAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAEpC,IAAK,IAAA,CAAA,QAAA,GAAW,SAAU,OAAA,EAAS,KAAO,EAAA;AACxC,MAAI,IAAA,KAAA,KAAU,QAAQ,MAAS,GAAA,CAAA;AAAG,QAAA,OAAA;AAClC,MAAU,SAAA,CAAA,OAAA,EAAS,OAAO,KAAQ,GAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGpC,IAAmB,SAAA,SAAA,CAAA,OAAA,EAAS,GAAG,CAAG,EAAA;AAChC,MAAA,MAAM,OAAO,OAAQ,CAAA,CAAA,CAAA,CAAA;AACrB,MAAM,MAAA,SAAA,GAAY,QAAQ,CAAG,CAAA,CAAA,QAAA,CAAA;AAC7B,MAAM,MAAA,SAAA,GAAY,QAAQ,CAAG,CAAA,CAAA,QAAA,CAAA;AAE7B,MAAA,OAAA,CAAQ,KAAK,OAAQ,CAAA,CAAA,CAAA,CAAA;AACrB,MAAA,OAAA,CAAQ,CAAK,CAAA,GAAA,IAAA,CAAA;AAEb,MAAA,OAAA,CAAQ,GAAG,QAAW,GAAA,SAAA,CAAA;AACtB,MAAA,OAAA,CAAQ,GAAG,QAAW,GAAA,SAAA,CAAA;AAAA,KAAA;AAGxB,IAAA,MAAA,CAAO,cAAc,aAAgB,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtPlC,MAAM,mDACX,GAAA,qDAAA,CAAA;AAEF,MAAA,CAAO,mDAAqD,EAAA;AAAA,EAC1D,kBAAA;AAAA,EACA,yBAAA;AAAA,EACA,qBAAA;AAAA,EACA,+CAAA;AAAA,CAAA,CAAA,CACC,WAAW,4BAA8B,EAAA;AAAA,EAC1C,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,0BAAA;AAAA,EACA,SACE,QACA,iBACA,EAAA,iBAAA,EACA,QACA,mBACA,EAAA,gBAAA,EACA,WACA,EAAA,aAAA,EACA,wBACA,EAAA;AACA,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,OAAS,EAAA,mEAAA;AAAA,KAAA,CAAA;AAGX,IAAA,aAAA,CAAc,gBAAgB,CAAE,CAAA,GAAA,CAAI,aAAc,CAAA,aAAA,EAAe,SAAU,IAAM,EAAA;AAC/E,MAAA,IAAI,CAAC,CAAA,CAAE,OAAQ,CAAA,IAAA,CAAK,QAAW,CAAA,EAAA;AAC7B,QAAK,IAAA,CAAA,UAAA,GAAa,KAAK,QAAS,CAAA,WAAA,EAAA,CAAA;AAAA,OAAA;AAGlC,MAAA,IAAA,CAAK,iBAAiB,IAAK,CAAA,yBAAA,CAAA;AAC3B,MAAA,IAAA,CAAK,qBAAqB,IAAK,CAAA,wBAAA,CAAA;AAE/B,MAAO,OAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGT,IAAA,MAAA,CAAO,aAAgB,GAAA,aAAA,CAAA;AAEvB,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,wBAA0B,EAAA,KAAA;AAAA,KAAA,CAAA;AAG5B,IAAO,MAAA,CAAA,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,MACnC,WAAA;AAAA,MACA,KAAA,EAAO,CAAiB,cAAA,EAAA,cAAA,CAAe,GAAI,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,MAC3C,aAAe,EAAA,iBAAA;AAAA,MACf,cAAA;AAAA,KAAA,CAAA,CAAA;AAGF,IAAA,IAAA,CAAK,8BAA8B,WAAY;AAC7C,MAAO,OAAA,oBAAA,CAAqB,GAAI,CAAA,gBAAA,CAAA,CAAkB,QAAW,EAAA,CAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAG/D,IAAA,IAAA,CAAK,wBAAwB,WAAY;AACvC,MAAA,MAAA,CAAO,MAAM,wBAA2B,GAAA,IAAA,CAAA;AACxC,MAAA,OAAO,gBAAiB,CAAA,YAAA,CAAa,gBAAkB,CAAA,CAAA,IAAA,CAAK,WAAY;AACtE,QAAA,wBAAA,EAAA,CAA2B,KAAK,WAAY;AAC1C,UAAA,MAAA,CAAO,MAAM,wBAA2B,GAAA,KAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAK9C,IAAoC,SAAA,wBAAA,GAAA;AAClC,MAAA,OAAO,mBAAoB,CAAA,oBAAA,EAAA,CAAuB,IAAK,CAAA,SAAU,cAAgB,EAAA;AAC/E,QAAA,MAAM,UAAU,aAAc,CAAA,WAAA,CAAA;AAC9B,QAAA,MAAM,SAAS,aAAc,CAAA,MAAA,CAAA;AAC7B,QAAA,MAAM,kBAAkB,CAAE,CAAA,MAAA,CAAO,cAAe,CAAA,OAAA,CAAA,CAAS,MAAM,MAAS,CAAA,EAAA,EAAA,CAAA,CAAA;AAGxE,QAAO,MAAA,CAAA,uBAAA,GAA0B,CAAE,CAAA,GAAA,CAAI,eAAiB,EAAA,MAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAI5D,IAAK,IAAA,CAAA,OAAA,GAAU,SAAU,OAAS,EAAA;AAChC,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,IAAM,EAAA,MAAA,CAAO,aAAc,CAAA,IAAA,GAAO,UAAU,OAAQ,CAAA,MAAA;AAAA,QACpD,UAAU,OAAQ,CAAA,MAAA,KAAW,IAAI,GAAM,GAAA,GAAA,YAAe,MAAS,GAAA,CAAA,CAAA;AAAA,QAC/D,UAAY,EAAA,KAAA;AAAA,QACZ,MAAQ,EAAA,OAAA;AAAA,QACR,SAAW,EAAA,SAAA;AAAA,QACX,mBAAqB,EAAA,GAAA;AAAA,QACrB,qBAAuB,EAAA,EAAA;AAAA,QACvB,eAAiB,EAAA,GAAA;AAAA,QACjB,wBAA0B,EAAA,GAAA;AAAA,QAC1B,oBAAsB,EAAA,GAAA;AAAA,QACtB,qBAAuB,EAAA,EAAA;AAAA,QACvB,cAAgB,EAAA,GAAA;AAAA,QAChB,kBAAoB,EAAA,GAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIxB,IAAgC,SAAA,oBAAA,GAAA;AAE9B,MAAA,IAAI,OAAO,WAAa,EAAA;AACtB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAkB,iBAAA,CAAA,KAAA,EAAA,CAAA;AAClB,MAAA,MAAM,cAAiB,GAAA;AAAA,QACrB,IAAA,EAAM,OAAO,aAAc,CAAA,IAAA;AAAA,QAC3B,SAAW,EAAA,MAAA,CAAO,aAAc,CAAA,WAAA,IAAe,OAAO,aAAc,CAAA,WAAA;AAAA,QACpE,MAAA,EAAQ,OAAO,aAAc,CAAA,MAAA;AAAA,QAC7B,QAAU,EAAA,OAAA;AAAA,OAAA,CAAA;AAEZ,MAAI,IAAA,CAAC,MAAO,CAAA,QAAA,CAAS,oBAAuB,CAAA,EAAA;AAC1C,QAAA,MAAA,CAAO,GAAG,kBAAoB,EAAA,cAAA,CAAA,CAAA;AAAA,OACzB,MAAA;AACL,QAAA,MAAA,CAAO,GAAG,mBAAqB,EAAA,cAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAInC,IAA0B,SAAA,cAAA,GAAA;AACxB,MAAA,WAAA,CAAY,cAAe,CAAA,OAAA,EAAA,CAAA;AAC3B,MAAY,WAAA,CAAA,cAAA,CAAe,cAAc,MAAQ,EAAA,oBAAA,CAAA,CAAA;AAAA,KAAA;AAGnD,IAAK,IAAA,CAAA,WAAA,GAAc,SAAU,OAAA,EAAS,KAAO,EAAA;AAC3C,MAAA,IAAI,CAAC,CAAA,CAAE,OAAQ,CAAA,OAAA,CAAQ,OAAO,kBAAqB,CAAA,EAAA;AACjD,QAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,cAAA,CAAe,KAAM,CAAA,GAAA,CAAA,CAAA;AACvD,QAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACzB,UAAA,OAAA,CAAQ,OAAO,qBAAwB,GAAA,EAAA,CAAA;AACvC,UAAA,UAAA,CAAW,QAAQ,CAAC,CAAA,KAAM,OAAQ,CAAA,KAAA,CAAA,CAAO,sBAAsB,IAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAGpE,UAAA,OAAA,CAAQ,OAAO,oBAAuB,GAAA,IAAA,CAAA;AAAA,SACjC,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAA,CAAO,oBAAuB,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,cAAA,CAAA;AAGrD,UAAA,OAAA,CAAQ,OAAO,qBAAwB,GAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAK7C,IAAK,IAAA,CAAA,mBAAA,GAAsB,SAAU,OAAA,EAAS,KAAO,EAAA;AACnD,MAAA,IAAI,CAAC,CAAA,CAAE,OAAQ,CAAA,OAAA,CAAQ,OAAO,kBAAqB,CAAA,EAAA;AACjD,QAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,kBAAA,CAAmB,KAAM,CAAA,GAAA,CAAA,CAAA;AAC3D,QAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACzB,UAAA,OAAA,CAAQ,OAAO,qBAAwB,GAAA,EAAA,CAAA;AACvC,UAAA,UAAA,CAAW,QAAQ,CAAC,CAAA,KAAM,OAAQ,CAAA,KAAA,CAAA,CAAO,sBAAsB,IAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAGpE,UAAA,OAAA,CAAQ,OAAO,mBAAsB,GAAA,IAAA,CAAA;AAAA,SAChC,MAAA;AACL,UAAQ,OAAA,CAAA,KAAA,CAAA,CAAO,mBAAsB,GAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,kBAAA,CAAA;AAGpD,UAAA,OAAA,CAAQ,OAAO,qBAAwB,GAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAK7C,IAAK,IAAA,CAAA,UAAA,GAAa,SAAU,OAAA,EAAS,KAAO,EAAA;AAC1C,MAAA,OAAA,CAAQ,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGxB,IAAK,IAAA,CAAA,MAAA,GAAS,SAAU,OAAA,EAAS,KAAO,EAAA;AACtC,MAAA,IAAI,KAAU,KAAA,CAAA;AAAG,QAAA,OAAA;AACjB,MAAU,SAAA,CAAA,OAAA,EAAS,OAAO,KAAQ,GAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAEpC,IAAK,IAAA,CAAA,QAAA,GAAW,SAAU,OAAA,EAAS,KAAO,EAAA;AACxC,MAAI,IAAA,KAAA,KAAU,QAAQ,MAAS,GAAA,CAAA;AAAG,QAAA,OAAA;AAClC,MAAU,SAAA,CAAA,OAAA,EAAS,OAAO,KAAQ,GAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGpC,IAAmB,SAAA,SAAA,CAAA,OAAA,EAAS,GAAG,CAAG,EAAA;AAChC,MAAA,MAAM,OAAO,OAAQ,CAAA,CAAA,CAAA,CAAA;AACrB,MAAM,MAAA,SAAA,GAAY,QAAQ,CAAG,CAAA,CAAA,QAAA,CAAA;AAC7B,MAAM,MAAA,SAAA,GAAY,QAAQ,CAAG,CAAA,CAAA,QAAA,CAAA;AAE7B,MAAA,OAAA,CAAQ,KAAK,OAAQ,CAAA,CAAA,CAAA,CAAA;AACrB,MAAA,OAAA,CAAQ,CAAK,CAAA,GAAA,IAAA,CAAA;AAEb,MAAA,OAAA,CAAQ,GAAG,QAAW,GAAA,SAAA,CAAA;AACtB,MAAA,OAAA,CAAQ,GAAG,QAAW,GAAA,SAAA,CAAA;AAAA,KAAA;AAGxB,IAAO,MAAA,CAAA,WAAA,CAAY,iBAAiB,iBAAkB,CAAA,OAAA,CAAA;AAEtD,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAO,MAAA,CAAA,WAAA,CAAY,OAAO,WAAY;AACpC,QAAA,MAAM,MAAS,GAAA;AAAA,UACb,aAAe,EAAA,OAAA;AAAA,UACf,SAAS,WAAY,CAAA,IAAA;AAAA,UACrB,MAAA,EAAQ,OAAO,aAAc,CAAA,MAAA;AAAA,UAC7B,MAAQ,EAAA,IAAA;AAAA,UACR,KAAO,EAAA,MAAA;AAAA,SAAA,CAAA;AAET,QAAA,MAAA,CAAO,cAAc,IAAO,GAAA,qBAAA,CAAA;AAE5B,QAAA,OAAO,wBAAyB,CAAA,mBAAA,CAAoB,MAAO,CAAA,aAAA,EAAe,aAAa,QAAU,EAAA,MAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIrG,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAkB,iBAAA,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChNjB,MAAM,uDAA0D,GAAA,gDAAA,CAAA;AAEvE,MAAA,CAAO,uDAAyD,EAAA;AAAA,EAC9D,+CAAA;AAAA,EACA,qDAAA;AAAA,CAAA,CAAA,CACC,WAAW,mCAAqC,EAAA;AAAA,EACjD,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,0BAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAU,MAAQ,EAAA,iBAAA,EAAmB,aAAa,MAAQ,EAAA,wBAAA,EAA0B,eAAe,WAAa,EAAA;AAC9G,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AAEb,IAAO,MAAA,CAAA,aAAA,GAAgB,eAAe,GAAI,CAAA,UAAA,CAAA,CAAA;AAE1C,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,QAAU,EAAA,sEAAA;AAAA,MACV,OAAS,EAAA,mEAAA;AAAA,KAAA,CAAA;AAGX,IAAA,aAAA,CAAc,gBAAgB,CAAE,CAAA,GAAA,CAAI,aAAc,CAAA,aAAA,EAAe,SAAU,IAAM,EAAA;AAC/E,MAAM,MAAA,IAAA,GAAO,IAAK,CAAA,oBAAA,CAAqB,KAAM,CAAA,GAAA,CAAA,CAAA;AAC7C,MAAK,IAAA,CAAA,SAAA,GAAY,OAAO,IAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAC7B,MAAK,IAAA,CAAA,OAAA,GAAU,OAAO,IAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAC3B,MAAO,OAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGT,IAAA,IAAA,CAAK,iBAAiB,WAAY;AAChC,MAAA,cAAA,CAAe,qBAAqB,MAAO,CAAA,aAAA,CAAc,WAAa,CAAA,CAAA,IAAA,CAAK,SAAU,OAAS,EAAA;AAC5F,QAAA,MAAA,CAAO,OAAU,GAAA,OAAA,CAAA;AACjB,QAAA,MAAA,CAAO,cAAc,OAAU,GAAA,OAAA,CAAA;AAC/B,QAAK,IAAA,CAAA,UAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIT,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAkB,iBAAA,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGpB,IAAA,IAAA,CAAK,aAAa,WAAY;AAC5B,MAAA,MAAM,iBAAgB,MAAO,CAAA,aAAA,CAAA;AAC7B,MAAA,IAAI,QAAO,WAAY,CAAA,IAAA,CAAA;AACvB,MAAA,IAAI,eAAc,MAAQ,EAAA;AACxB,QAAA,KAAA,IAAQ,MAAM,cAAc,CAAA,MAAA,CAAA;AAAA,OAAA;AAE9B,MAAA,cAAA,CAAc,IAAO,GAAA,KAAA,CAAA;AACrB,MAAA,MAAA,CAAO,WAAc,GAAA,KAAA,CAAA;AAAA,KAAA,CAAA;AAGvB,IAAA,MAAA,CAAO,aAAgB,GAAA,aAAA,CAAA;AAEvB,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,wBAA0B,EAAA,KAAA;AAAA,KAAA,CAAA;AAG5B,IAAO,MAAA,CAAA,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,MACnC,WAAA;AAAA,MACA,KAAA,EAAO,CAAiB,cAAA,EAAA,cAAA,CAAe,GAAI,CAAA,UAAA,CAAA,CAAA,CAAA;AAAA,MAC3C,aAAe,EAAA,iBAAA;AAAA,MACf,cAAA;AAAA,KAAA,CAAA,CAAA;AAGF,IAAA,cAAA,CAAe,YAAa,CAAA,OAAA,CAAA,CAAS,IAAK,CAAA,SAAU,QAAU,EAAA;AAC5D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAK,IAAA,CAAA,cAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGP,IAAK,IAAA,CAAA,OAAA,GAAU,SAAU,OAAS,EAAA;AAChC,MAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,QACX,IAAM,EAAA,MAAA,CAAO,aAAc,CAAA,IAAA,GAAO,UAAU,OAAQ,CAAA,MAAA;AAAA,QACpD,UAAU,OAAQ,CAAA,MAAA,KAAW,IAAI,GAAM,GAAA,GAAA,YAAe,MAAS,GAAA,CAAA,CAAA;AAAA,QAC/D,QAAU,EAAA,KAAA;AAAA,QACV,MAAQ,EAAA,OAAA;AAAA,QACR,SAAW,EAAA,SAAA;AAAA,QACX,mBAAqB,EAAA,GAAA;AAAA,QACrB,eAAiB,EAAA,GAAA;AAAA,QACjB,wBAA0B,EAAA,GAAA;AAAA,QAC1B,oBAAsB,EAAA,WAAA;AAAA,QACtB,SAAW,EAAA,IAAA;AAAA,QACX,OAAS,EAAA,IAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIb,IAAgC,SAAA,oBAAA,GAAA;AAE9B,MAAA,IAAI,OAAO,WAAa,EAAA;AACtB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAkB,iBAAA,CAAA,KAAA,EAAA,CAAA;AAClB,MAAA,MAAM,cAAiB,GAAA;AAAA,QACrB,IAAA,EAAM,OAAO,aAAc,CAAA,IAAA;AAAA,QAC3B,SAAW,EAAA,MAAA,CAAO,aAAc,CAAA,WAAA,IAAe,OAAO,aAAc,CAAA,WAAA;AAAA,QACpE,MAAA,EAAQ,OAAO,aAAc,CAAA,MAAA;AAAA,QAC7B,QAAU,EAAA,OAAA;AAAA,OAAA,CAAA;AAEZ,MAAI,IAAA,CAAC,MAAO,CAAA,QAAA,CAAS,oBAAuB,CAAA,EAAA;AAC1C,QAAA,MAAA,CAAO,GAAG,kBAAoB,EAAA,cAAA,CAAA,CAAA;AAAA,OACzB,MAAA;AACL,QAAA,MAAA,CAAO,GAAG,mBAAqB,EAAA,cAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAInC,IAA0B,SAAA,cAAA,GAAA;AACxB,MAAA,WAAA,CAAY,cAAe,CAAA,OAAA,EAAA,CAAA;AAC3B,MAAY,WAAA,CAAA,cAAA,CAAe,cAAc,MAAQ,EAAA,oBAAA,CAAA,CAAA;AAAA,KAAA;AAGnD,IAAK,IAAA,CAAA,WAAA,GAAc,SAAU,OAAA,EAAS,KAAO,EAAA;AAC3C,MAAA,OAAA,CAAQ,OAAO,oBAAuB,GAAA,OAAA,CAAQ,OAAO,SAAY,GAAA,GAAA,GAAM,QAAQ,KAAO,CAAA,CAAA,OAAA,CAAA;AAAA,KAAA,CAAA;AAExF,IAAK,IAAA,CAAA,UAAA,GAAa,SAAU,OAAA,EAAS,KAAO,EAAA;AAC1C,MAAA,OAAA,CAAQ,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAExB,IAAK,IAAA,CAAA,MAAA,GAAS,SAAU,OAAA,EAAS,KAAO,EAAA;AACtC,MAAA,IAAI,KAAU,KAAA,CAAA;AAAG,QAAA,OAAA;AACjB,MAAU,SAAA,CAAA,OAAA,EAAS,OAAO,KAAQ,GAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAEpC,IAAK,IAAA,CAAA,QAAA,GAAW,SAAU,OAAA,EAAS,KAAO,EAAA;AACxC,MAAI,IAAA,KAAA,KAAU,QAAQ,MAAS,GAAA,CAAA;AAAG,QAAA,OAAA;AAClC,MAAU,SAAA,CAAA,OAAA,EAAS,OAAO,KAAQ,GAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAEpC,IAAmB,SAAA,SAAA,CAAA,OAAA,EAAS,GAAG,CAAG,EAAA;AAChC,MAAA,MAAM,OAAO,OAAQ,CAAA,CAAA,CAAA,CAAA;AACrB,MAAM,MAAA,SAAA,GAAY,QAAQ,CAAG,CAAA,CAAA,QAAA,CAAA;AAC7B,MAAM,MAAA,SAAA,GAAY,QAAQ,CAAG,CAAA,CAAA,QAAA,CAAA;AAE7B,MAAA,OAAA,CAAQ,KAAK,OAAQ,CAAA,CAAA,CAAA,CAAA;AACrB,MAAA,OAAA,CAAQ,CAAK,CAAA,GAAA,IAAA,CAAA;AAEb,MAAA,OAAA,CAAQ,GAAG,QAAW,GAAA,SAAA,CAAA;AACtB,MAAA,OAAA,CAAQ,GAAG,QAAW,GAAA,SAAA,CAAA;AAAA,KAAA;AAGxB,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAO,MAAA,CAAA,WAAA,CAAY,OAAO,WAAY;AACpC,QAAA,MAAM,MAAS,GAAA;AAAA,UACb,aAAe,EAAA,OAAA;AAAA,UACf,SAAS,WAAY,CAAA,IAAA;AAAA,UACrB,MAAA,EAAQ,OAAO,aAAc,CAAA,MAAA;AAAA,UAC7B,MAAQ,EAAA,MAAA;AAAA,UACR,KAAO,EAAA,MAAA;AAAA,SAAA,CAAA;AAET,QAAA,MAAA,CAAO,cAAc,IAAO,GAAA,qBAAA,CAAA;AAE5B,QAAA,OAAO,wBAAyB,CAAA,mBAAA,CAAoB,MAAO,CAAA,aAAA,EAAe,aAAa,OAAS,EAAA,MAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClJjG,MAAM,0DACX,GAAA,wDAAA,CAAA;AAEF,OAAA,CACG,OAAO,0DAA4D,EAAA;AAAA,EAClE,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,+CAAA;AAAA,EACA,uDAAA;AAAA,CAAA,CAAA,CAED,WAAW,+BAAiC,EAAA;AAAA,EAC3C,QAAA;AAAA,EACA,QAAA;AAAA,EACA,uBAAA;AAAA,EACA,KAAA;AAAA,EACA,0BAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAU,MAAQ,EAAA,MAAA,EAAQ,uBAAuB,GAAK,EAAA,wBAAA,EAA0B,qBAAqB,SAAW,EAAA;AAC9G,IAAA,MAAM,WAAc,GAAA,GAAA,CAAA;AACpB,IAAA,MAAM,aAAgB,GAAA,qBAAA,CAAA;AAEtB,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,KAAA,CAAA;AAGX,IAAO,MAAA,CAAA,aAAA,GAAgB,eAAe,GAAI,CAAA,UAAA,CAAA,CAAA;AAE1C,IAAgC,SAAA,oBAAA,GAAA;AAC9B,MAAA,OAAO,mBACJ,CAAA,uBAAA,CACC,WACA,EAAA,aAAA,CAAc,WACd,aAAc,CAAA,QAAA,EACd,aAAc,CAAA,MAAA,EACd,cAAc,KACd,EAAA,aAAA,CAAc,IAEf,CAAA,CAAA,IAAA,CACC,SAAU,OAAS,EAAA;AACjB,QAAA,MAAA,CAAO,MAAM,OAAU,GAAA,KAAA,CAAA;AAEvB,QAAA,IAAI,CAAC,OAAA,IAAW,CAAE,CAAA,OAAA,CAAQ,OAAU,CAAA,EAAA;AAClC,UAAA,UAAA,EAAA,CAAA;AAAA,SACK,MAAA;AACL,UAAA,MAAA,CAAO,aAAgB,GAAA,OAAA,CAAA;AAAA,SAAA;AAAA,OAAA,EAG3B,WAAY;AACV,QAAA,UAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAKR,IAAsB,SAAA,UAAA,GAAA;AACpB,MAAA,MAAA,CAAO,EAAG,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA;AAGZ,IAAA,oBAAA,EAAA,CAAuB,KAAK,MAAM;AAGhC,MAAI,IAAA,CAAC,OAAO,WAAa,EAAA;AACvB,QAAI,GAAA,CAAA,cAAA,CAAe,UAAU,MAAQ,EAAA,oBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAIzC,IAAA,IAAA,CAAK,mBAAmB,SAA4B,gBAAA,GAAA;AAClD,MAAA,SAAA,CAAU,IAAK,CAAA;AAAA,QACb,WAAa,EAAA,0DAAA;AAAA,QACb,UAAY,EAAA,oCAAA;AAAA,QACZ,OAAS,EAAA;AAAA,UACP,eAAe,WAAY;AACzB,YAAO,OAAA,OAAA,CAAQ,KAAK,MAAO,CAAA,aAAA,CAAA,CAAA;AAAA,WAAA;AAAA,UAE7B,aAAa,WAAY;AACvB,YAAO,OAAA,WAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAMf,IAAA,IAAA,CAAK,qBAAqB,SAA8B,kBAAA,GAAA;AACtD,MAAA,SAAA,CAAU,IAAK,CAAA;AAAA,QACb,WAAa,EAAA,uDAAA;AAAA,QACb,UAAY,EAAA,2CAAA;AAAA,QACZ,OAAS,EAAA;AAAA,UACP,eAAe,WAAY;AACzB,YAAM,MAAA,cAAA,GAAgB,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,aAAA,CAAA,CAAA;AAC1C,YAAA,IAAI,eAAc,MAAQ,EAAA;AACxB,cAAc,cAAA,CAAA,OAAA,GAAU,CAAC,cAAc,CAAA,MAAA,CAAA,CAAA;AAAA,aAAA;AAEzC,YAAO,OAAA,cAAA,CAAA;AAAA,WAAA;AAAA,UAET,aAAa,WAAY;AACvB,YAAO,OAAA,WAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAMf,IAAA,IAAA,CAAK,sBAAsB,SAA+B,mBAAA,GAAA;AACxD,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAA;AAAA,QACA,KAAA,EAAO,cAAc,aAAc,CAAA,IAAA;AAAA,OAAA,CAAA;AAGrC,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAA,MAAA,CAAO,cAAc,IAAO,GAAA,qBAAA,CAAA;AAC5B,QAAO,OAAA,wBAAA,CAAyB,mBAAoB,CAAA,aAAA,EAAe,WAAa,EAAA;AAAA,UAC9E,aAAe,EAAA,OAAA;AAAA,UACf,KAAA,EAAO,OAAO,aAAc,CAAA,KAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAIhC,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAA,EAAQ,gBAAmB,GAAA,aAAA,CAAc,IAAO,GAAA,GAAA;AAAA,QAChD,UAAA,EAAY,YAAY,aAAc,CAAA,IAAA;AAAA,QACtC,SAAS,aAAc,CAAA,SAAA;AAAA,QACvB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,IAAI,IAAI,YAAc,EAAA;AAEpB,MAAA,GAAA,CAAI,cAAiB,GAAA;AAAA,QACnB,OAAS,EAAA,oBAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrIZ,MAAM,wCAA2C,GAAA,sCAAA,CAAA;AAExD,MAAA,CAAO,wCAA0C,EAAA,EAAA,CAAA,CAAI,OAAQ,CAAA,0BAAA,EAA4B,WAAY;AACnG,EAAqC,SAAA,2BAAA,CAAA,qBAAA,EAAuB,WAAW,eAAiB,EAAA;AAEtF,IAAM,MAAA,IAAA,GAAO,gBAAgB,KAAM,CAAA,GAAA,CAAA,CAAA;AACnC,IAAA,OAAO,sBAAsB,SAAU,CAAA,OAAA,CAAA,CAAS,UAAU,MAAQ,CAAA,CAAA,IAAA,CAAK,KAAK,MAAS,GAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAGvF,EAAO,OAAA;AAAA,IACL,2BAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;;ACVG,MAAM,6CAAgD,GAAA,2CAAA,CAAA;AAE7D,MAAA,CAAO,6CAA+C,EAAA,EAAA,CAAA,CAAI,OAAQ,CAAA,+BAAA,EAAiC,WAAY;AAC7G,EAAkC,SAAA,sBAAA,GAAA;AAAA,GAAA;AAElC,EAAO,OAAA;AAAA,IACL,sBAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;;ACNG,MAAM,0EACX,GAAA,oEAAA,CAAA;AAEF,MAAO,CAAA,0EAAA,EAA4E,EAAI,CAAA,CAAA,UAAA,CACrF,4BACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,qBAAA;AAAA,EACA,oBAAA;AAAA,EACA,SAAU,MAAQ,EAAA,mBAAA,EAAqB,kBAAoB,EAAA;AACzD,IAAA,MAAM,SAAS,kBAAmB,CAAA,SAAA,EAAA,CAAA;AAElC,IAAO,MAAA,CAAA,MAAA,CAAO,qCAAqC,WAAY;AAC7D,MAAI,IAAA,CAAC,OAAO,OAAQ,CAAA,SAAA,CAAU,mBAAmB,MAAO,CAAA,OAAA,CAAQ,SAAU,CAAA,eAAA,KAAoB,QAAU,EAAA;AACtG,QAAA,MAAA,CAAO,WAAY,CAAA,eAAA,CAAA,CAAA;AAAA,OACd,MAAA;AACL,QAAA,MAAA,CAAO,WAAY,CAAA,eAAA,CAAA,CAAA;AACnB,QAAA,MAAA,CAAO,SAAU,CAAA,kBAAA,CAAA,CAAA;AACjB,QAAA,MAAA,CAAO,YAAa,CAAA,kBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAIxB,IAAO,MAAA,CAAA,MAAA,CAAO,gCAAkC,EAAA,SAAU,MAAQ,EAAA;AAChE,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,MAAA,CAAO,SAAU,CAAA,kBAAA,CAAA,CAAA;AACjB,QAAA,MAAA,CAAO,YAAa,CAAA,kBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACzBvB,MAAM,qEACX,GAAA,+DAAA,CAAA;AAEF,MAAO,CAAA,qEAAA,EAAuE,EAAI,CAAA,CAAA,UAAA,CAAW,uBAAyB,EAAA;AAAA,EACpH,QAAA;AAAA,EACA,oBAAA;AAAA,EACA,SAAU,QAAQ,kBAAoB,EAAA;AACpC,IAAA,kBAAA,CAAmB,YAAY,YAAa,CAAA,eAAA,CAAA,CAAA;AAC5C,IAAA,kBAAA,CAAmB,YAAY,SAAU,CAAA,eAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACRtC,MAAM,0FACX,GAAA,kEAAA,CAAA;AAEF,MAAO,CAAA,0FAAA,EAA4F,EAAI,CAAA,CAAA,UAAA,CACrG,sCACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,oBAAA;AAAA,EACA,SAAU,QAAQ,kBAAoB,EAAA;AACpC,IAAA,kBAAA,CAAmB,YAAY,YAAa,CAAA,UAAA,CAAA,CAAA;AAE5C,IAAO,MAAA,CAAA,MAAA,CAAO,aAAe,EAAA,SAAU,MAAQ,EAAA;AAC7C,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,kBAAA,CAAmB,YAAY,SAAU,CAAA,UAAA,CAAA,CAAA;AAAA,OACpC,MAAA;AACL,QAAA,kBAAA,CAAmB,YAAY,SAAU,CAAA,UAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACf5C,MAAM,sFACX,GAAA,kFAAA,CAAA;AAEF,OAAA,CACG,MAAO,CAAA,sFAAA,EAAwF,EAC/F,CAAA,CAAA,SAAA,CAAU,4CAA4C,WAAY;AACjE,EAAO,OAAA;AAAA,IACL,QAAU,EAAA,GAAA;AAAA,IACV,WAAa,EAAA,iGAAA;AAAA,IACb,KAAO,EAAA,EAAA;AAAA,IACP,gBAAkB,EAAA;AAAA,MAChB,OAAS,EAAA,GAAA;AAAA,KAAA;AAAA,IAEX,YAAc,EAAA,KAAA;AAAA,IACd,UAAY,EAAA,8CAAA;AAAA,GAAA,CAAA;AAAA,CAGf,CAAA,CAAA,UAAA,CAAW,gDAAgD,WAAY;AACtE,EAAA,IAAA,CAAK,cAAc,MAAM;AACvB,IAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,IAAK,CAAA,IAAA,CAAK,OAAQ,CAAA,SAAA,CAAA,CAAA;AAC/C,IAAK,IAAA,CAAA,OAAA,CAAQ,SAAY,GAAA,YAAA,CAAa,MAAO,CAAA;AAAA,MAC3C;AAAA,QACE,GAAK,EAAA,CAAA;AAAA,QACL,WAAa,EAAA;AAAA,UACX,kBAAoB,EAAA,cAAA;AAAA,SAAA;AAAA,QAEtB,UAAY,EAAA,CAAA;AAAA,QACZ,OAAS,EAAA,MAAA;AAAA,QACT,YAAc,EAAA,OAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAKpB,EAAK,IAAA,CAAA,cAAA,GAAiB,CAAC,KAAU,KAAA;AAC/B,IAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,IAAK,CAAA,IAAA,CAAK,OAAQ,CAAA,SAAA,CAAA,CAAA;AAC/C,IAAA,YAAA,CAAa,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAC3B,IAAA,IAAA,CAAK,QAAQ,SAAY,GAAA,YAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCxB,MAAM,sEACX,GAAA,kEAAA,CAAA;AAEF,MAAA,CAAO,sEAAwE,EAAA,EAAA,CAAA,CAAI,MAAO,CAAA,UAAA,EAAY,WAAY;AAChH,EAAO,OAAA,SAAU,OAAO,cAAgB,EAAA;AACtC,IAAA,OAAO,CAAE,CAAA,MAAA,CAAO,KAAO,EAAA,SAAU,KAAO,EAAA;AACtC,MAAA,OAAO,KAAM,CAAA,MAAA,KAAW,cAAkB,IAAA,KAAA,CAAM,MAAW,KAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;;ACD1D,MAAM,oFACX,GAAA,qDAAA,CAAA;AAEF,OAAA,CACG,OAAO,oFAAsF,EAAA;AAAA,EAC5F,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,sEAAA;AAAA,EACA,YAAA;AAAA,CAAA,CAAA,CAED,WAAW,mCAAqC,EAAA;AAAA,EAC/C,QAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAU,MAAA,EAAQ,WAAa,EAAA,cAAA,EAAgB,QAAQ,WAAa,EAAA;AAClE,IAAO,MAAA,CAAA,MAAA,CAAO,aAAe,EAAA,SAAU,MAAQ,EAAA;AAC7C,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,WAAA,CAAY,SAAU,CAAA,gBAAA,CAAA,CAAA;AACtB,QAAA,WAAA,CAAY,YAAa,CAAA,gBAAA,CAAA,CAAA;AAAA,OACpB,MAAA;AACL,QAAA,WAAA,CAAY,cAAe,CAAA,gBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAI/B,IAAK,IAAA,CAAA,YAAA,GAAe,CAAC,KAAU,KAAA;AAC7B,MAAO,MAAA,CAAA,OAAA,CAAQ,YAAY,KAAM,CAAA,SAAA,CAAA;AACjC,MAAA,MAAA,CAAO,QAAQ,aAAgB,GAAA,KAAA,CAAA;AAC/B,MAAA,WAAA,CAAY,SAAU,CAAA,gBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGxB,IAAQ,OAAA,CAAA,MAAA,CACN,IACA,EAAA,WAAA,CAAY,oBAAsB,EAAA;AAAA,MAChC,MAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA;AAAA,KAAA,CAAA,CAAA,CAAA;AAIJ,IAAA,IAAA,CAAK,YAAe,GAAA;AAAA,MAClB,IAAA,EAAM,SAAU,KAAO,EAAA;AACrB,QAAA,MAAM,OAAU,GAAA,MAAA,CAAO,OAAQ,CAAA,SAAA,CAAU,oBAAoB,4BAA+B,GAAA,gBAAA,CAAA;AAE5F,QAAA,OAAO,QAAQ,IAAK,CAAA,KAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIxB,IAAA,IAAA,CAAK,aAAgB,GAAA;AAAA,MACnB,IAAA,EAAM,SAAU,MAAQ,EAAA;AACtB,QAAA,MAAM,OAAU,GAAA,MAAA,CAAO,OAAQ,CAAA,SAAA,CAAU,oBACrC,6BACA,GAAA,iBAAA,CAAA;AAEJ,QAAA,OAAO,QAAQ,IAAK,CAAA,MAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AC9DvB,MAAM,sEACX,GAAA,0EAAA,CAAA;AAEF,MAAA,CAAO,sEAAwE,EAAA,EAAA,CAAA,CAC5E,SAAU,CAAA,kCAAA,EAAoC,WAAY;AACzD,EAAO,OAAA;AAAA,IACL,QAAU,EAAA,GAAA;AAAA,IACV,WAAa,EAAA,iFAAA;AAAA,IACb,KAAO,EAAA,EAAA;AAAA,IACP,gBAAkB,EAAA;AAAA,MAChB,OAAS,EAAA,GAAA;AAAA,KAAA;AAAA,IAEX,YAAc,EAAA,KAAA;AAAA,IACd,UAAY,EAAA,sCAAA;AAAA,GAAA,CAAA;AAAA,CAGf,CAAA,CAAA,UAAA,CAAW,wCAAwC,WAAY;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;AChB3D,MAAM,sFACX,GAAA,gEAAA,CAAA;AAEF,MAAO,CAAA,sFAAA,EAAwF,EAAI,CAAA,CAAA,UAAA,CACjG,oCACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,SAAU,MAAQ,EAAA;AAChB,IAAA,IAAI,OAAO,MAAA,CAAO,OAAQ,CAAA,cAAA,KAAmB,WAAa,EAAA;AACxD,MAAA,MAAA,CAAO,QAAQ,cAAiB,GAAA,EAAA,CAAA;AAAA,KAAA;AAGlC,IAAA,IAAA,CAAK,oBAAuB,GAAA;AAAA,MAC1B,EAAE,WAAa,EAAA,KAAA,EAAO,IAAM,EAAA,IAAA,EAAA;AAAA,MAC5B,EAAE,WAAa,EAAA,MAAA,EAAQ,IAAM,EAAA,MAAA,EAAA;AAAA,MAC7B,EAAE,WAAa,EAAA,KAAA,EAAO,IAAM,EAAA,KAAA,EAAA;AAAA,KAAA,CAAA;AAG9B,IAAA,IAAA,CAAK,0BAA0B,WAAY;AACzC,MAAO,OAAA,MAAA,CAAO,OAAQ,CAAA,cAAA,CAAe,QAAa,KAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAGpD,IAAK,IAAA,CAAA,yBAAA,GAA4B,SAAU,WAAa,EAAA;AACtD,MAAA,IAAI,eAAe,IAAM,EAAA;AACvB,QAAO,MAAA,CAAA,OAAA,CAAQ,eAAe,QAAW,GAAA,IAAA,CAAA;AACzC,QAAO,MAAA,CAAA,OAAA,CAAQ,eAAe,IAAO,GAAA,IAAA,CAAA;AACrC,QAAO,MAAA,CAAA,OAAA,CAAQ,eAAe,WAAc,GAAA,IAAA,CAAA;AAAA,OACnC,MAAA,IAAA,CAAC,KAAK,uBAA2B,EAAA,EAAA;AAC1C,QAAO,MAAA,CAAA,OAAA,CAAQ,eAAe,WAAc,GAAA,IAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AC5B/C,MAAM,kFACX,GAAA,gFAAA,CAAA;AAEF,MAAO,CAAA,kFAAA,EAAoF,EAAI,CAAA,CAAA,SAAA,CAC7F,wCACA,EAAA;AAAA,EACE,sCAAA;AAAA,EACA,WAAY;AACV,IAAO,OAAA;AAAA,MACL,QAAU,EAAA,GAAA;AAAA,MACV,WAAa,EAAA,6FAAA;AAAA,MACb,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,GAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACVZ,MAAM,oFACX,GAAA,gEAAA,CAAA;AAEF,MAAO,CAAA,oFAAA,EAAsF,EAAI,CAAA,CAAA,UAAA,CAC/F,mCACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,SAAU,MAAQ,EAAA;AAChB,IAAA,IAAA,CAAK,aAAa,WAAY;AAC5B,MAAA,IAAI,MAAO,CAAA,OAAA,CAAQ,KAAM,CAAA,QAAA,IAAY,KAAO,EAAA;AAC1C,QAAO,MAAA,CAAA,OAAA,CAAQ,KAAQ,GAAA,EAAE,QAAU,EAAA,KAAA,EAAA,CAAA;AAAA,OAC9B,MAAA;AACL,QAAA,MAAA,CAAO,OAAQ,CAAA,KAAA,CAAM,MAAS,GAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIjD,IAAA,WAAA,CAAY,YAAa,CAAA,gBAAA,CAAA,CAAA;AAEzB,IAAO,MAAA,CAAA,MAAA,CAAO,aAAe,EAAA,SAAU,MAAQ,EAAA;AAC7C,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,WAAA,CAAY,SAAU,CAAA,gBAAA,CAAA,CAAA;AAAA,OACjB,MAAA;AACL,QAAA,WAAA,CAAY,SAAU,CAAA,gBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACxBzB,MAAM,wEACX,GAAA,8EAAA,CAAA;AAEF,MAAO,CAAA,wEAAA,EAA0E,EAAI,CAAA,CAAA,SAAA,CACnF,uCACA,EAAA;AAAA,EACE,sCAAA;AAAA,EACA,WAAY;AACV,IAAO,OAAA;AAAA,MACL,QAAU,EAAA,GAAA;AAAA,MACV,WAAa,EAAA,mFAAA;AAAA,MACb,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,GAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRZ,MAAM,oFACX,GAAA,+DAAA,CAAA;AAEF,MAAA,CAAO,oFAAsF,EAAA;AAAA,EAC3F,0BAAA;AAAA,CAAA,CAAA,CACC,WAAW,mCAAqC,EAAA;AAAA,EACjD,QAAA;AAAA,EACA,oBAAA;AAAA,EACA,SAAU,QAAQ,kBAAoB,EAAA;AACpC,IAAA,WAAA,CAAY,SAAU,CAAA,gBAAA,CAAA,CAAA;AAEtB,IAAA,SAAA,eAAA,CAAyB,MAAM,IAAM,EAAA;AACnC,MACG,kBAAA,CAAA,sBAAA,CAAuB,OAAS,EAAA,MAAA,CAAO,OAAQ,CAAA,WAAA,EAAa,MAAO,CAAA,OAAA,CAAQ,MAAQ,EAAA,IAAA,CAAA,CACnF,IAAK,CAAA,SAAU,GAAK,EAAA;AACnB,QAAA,IAAI,CAAC,GAAA,IAAO,GAAI,CAAA,MAAA,KAAW,CAAG,EAAA;AAE5B,UAAqB,OAAO,OAAQ,CAAA,aAAA;AACpC,UAAM,MAAA,cAAA,GAAiB,OAAO,OAAQ,CAAA,cAAA,CAAA;AACtC,UAAA,MAAA,CAAO,QAAQ,mBAAsB,GAAA,EAAA,CAAA;AACrC,UAAA,MAAA,CAAO,QAAQ,QAAW,GAAA,EAAA,CAAA;AAC1B,UAAc,aAAA,CAAA,YAAA,EAAA,CAAe,IAAK,CAAA,SAAU,KAAO,EAAA;AACjD,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAM,KAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,YAAiB,KAAA;AACpC,gBACE,IAAA,YAAA,CAAa,YAAY,MAAO,CAAA,OAAA,CAAQ,eACxC,YAAa,CAAA,MAAA,KAAW,MAAO,CAAA,OAAA,CAAQ,MACvC,EAAA;AACA,kBAAO,MAAA,CAAA,OAAA,CAAQ,SAAS,IAAK,CAAA,YAAA,CAAA,CAAA;AAE7B,kBAAa,YAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,SAAU,MAAQ,EAAA;AACzC,oBAAA,IAAI,SAAY,GAAA,IAAA,CAAA;AAChB,oBAAA,IAAI,OAAO,OAAS,EAAA;AAClB,sBAAO,MAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,SAAU,MAAQ,EAAA;AAEnC,wBAAI,IAAA,MAAA,IAAU,MAAO,CAAA,IAAA,KAAS,qBAAuB,EAAA;AACnD,0BAAY,SAAA,GAAA,KAAA,CAAA;AAAA,yBAAA;AAAA,uBAAA,CAAA,CAAA;AAAA,qBAAA;AAIlB,oBAAA,IAAI,SAAW,EAAA;AACb,sBAAO,MAAA,CAAA,OAAA,CAAQ,mBAAoB,CAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAA,CAAA;AAC/C,sBAAI,IAAA,MAAA,CAAO,SAAS,cAAgB,EAAA;AAClC,wBAAA,MAAA,CAAO,QAAQ,cAAiB,GAAA,cAAA,CAAA;AAAA,uBAAA;AAAA,qBAAA;AAAA,mBAAA,CAAA,CAAA;AAAA,iBAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAQrC,MAAA,IAAA,GAAA,IAAO,GAAI,CAAA,MAAA,KAAW,CAAG,EAAA;AAClC,UAAA,MAAM,uBAAuB,GAAI,CAAA,CAAA,CAAA,CAAA;AACjC,UAAM,MAAA,YAAA,GAAe,OAAO,OAAQ,CAAA,YAAA,CAAA;AACpC,UAAA,MAAA,CAAO,QAAQ,YAAe,GAAA,IAAA,CAAA;AAC9B,UAAA,MAAA,CAAO,QAAQ,mBAAsB,GAAA,EAAA,CAAA;AACrC,UAAA,MAAA,CAAO,QAAQ,QAAW,GAAA,EAAA,CAAA;AAC1B,UAAc,aAAA,CAAA,YAAA,EAAA,CAAe,IAAK,CAAA,SAAU,KAAO,EAAA;AACjD,YAAA,IAAI,MAAM,KAAO,EAAA;AACf,cAAM,KAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,YAAiB,KAAA;AACpC,gBACE,IAAA,YAAA,CAAa,YAAY,MAAO,CAAA,OAAA,CAAQ,eACxC,YAAa,CAAA,MAAA,KAAW,MAAO,CAAA,OAAA,CAAQ,MACvC,EAAA;AACA,kBAAO,MAAA,CAAA,OAAA,CAAQ,SAAS,IAAK,CAAA,YAAA,CAAA,CAAA;AAAA,iBAAA;AAE/B,gBACE,IAAA,YAAA,CAAa,YAAY,MAAO,CAAA,OAAA,CAAQ,eACxC,YAAa,CAAA,MAAA,KAAW,OAAO,OAAQ,CAAA,MAAA,cAC5B,2BAA+B,IAAA,YAAA,CAAa,QAAQ,oBAAqB,CAAA,IAAA,IACjF,SAAS,qBAAyB,IAAA,YAAA,CAAa,IAAS,KAAA,YAAA,CAAa,IACxE,CAAA,EAAA;AACA,kBAAA,MAAA,CAAO,QAAQ,YAAe,GAAA,YAAA,CAAA;AAC9B,kBAAa,YAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,SAAU,MAAQ,EAAA;AACzC,oBAAA,IAAI,SAAY,GAAA,IAAA,CAAA;AAChB,oBAAA,IAAI,OAAO,OAAS,EAAA;AAClB,sBAAO,MAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,SAAU,MAAQ,EAAA;AAEnC,wBAAI,IAAA,MAAA,IAAU,MAAO,CAAA,IAAA,KAAS,qBAAuB,EAAA;AACnD,0BAAY,SAAA,GAAA,KAAA,CAAA;AAAA,yBAAA;AAAA,uBAAA,CAAA,CAAA;AAAA,qBAAA;AAIlB,oBAAA,IAAI,SAAW,EAAA;AACb,sBAAO,MAAA,CAAA,OAAA,CAAQ,mBAAoB,CAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAA,CAAA;AAAA,qBAAA;AAAA,mBAAA,CAAA,CAAA;AAAA,iBAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAWnE,IAAA,IAAI,MAAO,CAAA,OAAA,CAAQ,WAAe,IAAA,MAAA,CAAO,QAAQ,MAAQ,EAAA;AACvD,MAAO,MAAA,CAAA,OAAA,CAAQ,UAAU,yBAA4B,GAAA,IAAA,CAAA;AACrD,MAAA,MAAA,CAAO,QAAQ,mBAAsB,GAAA,EAAA,CAAA;AACrC,MAAI,IAAA,MAAA,CAAO,QAAQ,gBAAqB,KAAA,IAAA,IAAQ,OAAO,MAAO,CAAA,OAAA,CAAQ,qBAAqB,WAAa,EAAA;AACtG,QAAA,MAAA,CAAO,eAAkB,GAAA,IAAA,CAAA;AAAA,OAAA;AAE3B,MAAA,eAAA,CAAgB,MAAO,CAAA,OAAA,CAAQ,gBAAkB,EAAA,MAAA,CAAO,OAAQ,CAAA,gBAAA,CAAA,CAAA;AAAA,KAAA;AAGlE,IAAK,IAAA,CAAA,mBAAA,GAAsB,SAAU,IAAM,EAAA;AACzC,MAAO,MAAA,CAAA,OAAA,CAAQ,UAAU,yBAA4B,GAAA,IAAA,CAAA;AACrD,MAAA,WAAA,CAAY,YAAa,CAAA,gBAAA,CAAA,CAAA;AAEzB,MAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,OAAA,CAAQ,WAAY,CAAA,aAAA,CAAA;AACjD,MAAA,IAAI,gBAAmB,GAAA,IAAA,CAAA;AAEvB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,MAAM,qBAAqB,aAAc,CAAA,IAAA,CAAK,CAAC,EAAA,KAAO,GAAG,IAAS,KAAA,IAAA,CAAA,CAAA;AAClE,QAAA,IAAI,kBAAoB,EAAA;AACtB,UAAmB,gBAAA,GAAA,OAAA,CAAQ,mBAAoB,CAAA,kBAAA,CAAmB,gBAAkB,CAAA,CAAA,IAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAIxF,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAA,MAAA,CAAO,QAAQ,gBAAmB,GAAA,IAAA,CAAA;AAAA,OAAA;AAGpC,MAAA,MAAA,CAAO,QAAQ,mBAAsB,GAAA,EAAA,CAAA;AACrC,MAAA,MAAA,CAAO,QAAQ,gBAAmB,GAAA,gBAAA,CAAA;AAClC,MAAA,oBAAA,CAAqB,UAAW,CAAA,UAAA,CAAA,CAAA;AAChC,MAAA,eAAA,CAAgB,IAAM,EAAA,gBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACjIrB,MAAM,2FACX,GAAA,8DAAA,CAAA;AAEF,MAAO,CAAA,2FAAA,EAA6F,EAAI,CAAA,CAAA,SAAA,CACtG,uCACA,EAAA;AAAA,EACE,sCAAA;AAAA,EACA,WAAY;AACV,IAAO,OAAA;AAAA,MACL,QAAU,EAAA,GAAA;AAAA,MACV,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,GAAA;AAAA,OAAA;AAAA,MAEX,WAAa,EAAA,sGAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACXd,MAAM,wFACX,GAAA,kEAAA,CAAA;AAEF,MAAO,CAAA,wFAAA,EAA0F,EAAI,CAAA,CAAA,UAAA,CACnG,qCACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,SAAU,MAAQ,EAAA;AAChB,IAAA,WAAA,CAAY,SAAU,CAAA,kBAAA,CAAA,CAAA;AAEtB,IAAA,MAAA,CAAO,QAAQ,YAAe,GAAA;AAAA,MAC5B,IAAA,EAAM,OAAO,OAAQ,CAAA,IAAA;AAAA,KAAA,CAAA;AAGvB,IAAO,MAAA,CAAA,OAAA,CAAQ,cAAiB,GAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,CAAA;AAE/C,IAAK,IAAA,CAAA,WAAA,GAAc,SAAU,IAAM,EAAA;AACjC,MAAA,MAAA,CAAO,QAAQ,IAAO,GAAA,IAAA,CAAA;AACtB,MAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,GAAS,MAAO,CAAA,OAAA,CAAQ,cAAiB,GAAA,IAAA,CAAA;AACxD,MAAA,MAAA,CAAO,QAAQ,mBAAsB,GAAA,IAAA,CAAK,QAAQ,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGjE,IAAK,IAAA,CAAA,sBAAA,GAAyB,SAAU,IAAM,EAAA;AAC5C,MAAA,MAAA,CAAO,OAAQ,CAAA,IAAA,GAAO,MAAO,CAAA,OAAA,CAAQ,YAAa,CAAA,IAAA,CAAA;AAClD,MAAA,MAAA,CAAO,QAAQ,MAAS,GAAA,IAAA,CAAA;AACxB,MAAA,WAAA,CAAY,YAAa,CAAA,kBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG3B,IAAA,IAAA,CAAK,cAAc,WAAY;AAC7B,MAAI,IAAA,MAAA,CAAO,QAAQ,YAAc,EAAA;AAC/B,QAAO,OAAA,MAAA,CAAO,QAAQ,YAAa,CAAA,IAAA,CAAA;AAAA,OAC9B,MAAA;AACL,QAAO,OAAA,kCAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AClCV,MAAM,+FACX,GAAA,iEAAA,CAAA;AAEF,MAAA,CAAO,+FAAiG,EAAA,EAAA,CAAA,CAAI,SAC1G,CAAA,yCAAA,EACA,WAAY;AACV,EAAO,OAAA;AAAA,IACL,QAAU,EAAA,GAAA;AAAA,IACV,KAAO,EAAA;AAAA,MACL,OAAS,EAAA,GAAA;AAAA,KAAA;AAAA,IAEX,WAAa,EAAA,0GAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTZ,MAAM,qFACX,GAAA,iEAAA,CAAA;AAEF,MAAO,CAAA,qFAAA,EAAuF,EAAI,CAAA,CAAA,UAAA,CAChG,oCACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,SAAU,MAAQ,EAAA;AAChB,IAAA,WAAA,CAAY,SAAU,CAAA,iBAAA,CAAA,CAAA;AACtB,IAAA,WAAA,CAAY,YAAa,CAAA,iBAAA,CAAA,CAAA;AAEzB,IAAA,MAAA,CAAO,QAAQ,qBAAwB,GAAA;AAAA,MACrC,EAAA,EAAI,OAAO,OAAQ,CAAA,iBAAA;AAAA,KAAA,CAAA;AAGrB,IAAK,IAAA,CAAA,oBAAA,GAAuB,SAAU,aAAe,EAAA;AACnD,MAAO,MAAA,CAAA,OAAA,CAAQ,oBAAoB,aAAc,CAAA,EAAA,CAAA;AACjD,MAAA,WAAA,CAAY,YAAa,CAAA,iBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACjB1B,MAAM,4FACX,GAAA,uEAAA,CAAA;AAEF,MAAO,CAAA,4FAAA,EAA8F,EAAI,CAAA,CAAA,SAAA,CACvG,wCACA,EAAA;AAAA,EACE,sCAAA;AAAA,EACA,SAAU,oCAAsC,EAAA;AAC9C,IAAO,OAAA;AAAA,MACL,QAAU,EAAA,GAAA;AAAA,MACV,KAAO,EAAA;AAAA,QACL,OAAS,EAAA,GAAA;AAAA,OAAA;AAAA,MAEX,WAAa,EAAA,uGAAA;AAAA,MACb,IAAA,EAAM,SAAU,KAAO,EAAA;AACrB,QAAM,KAAA,CAAA,aAAA,GAAgB,eAAe,GAAI,CAAA,UAAA,CAAA,CAAA;AAEzC,QAAA,KAAA,CAAM,8BAA8B,WAAY;AAC9C,UAAO,OAAA,oBAAA,CAAqB,GAAI,CAAA,gBAAA,CAAA,CAAkB,QAAW,EAAA,CAAA,MAAA,CAAA;AAAA,SAAA,CAAA;AAG/D,QAAA,KAAA,CAAM,wBAAwB,WAAY;AACxC,UAAA,KAAA,CAAM,UAAa,GAAA,IAAA,CAAA;AACnB,UAAA,oCAAA,CAAqC,qBAAsB,CAAA,KAAA,CAAM,OAAS,CAAA,CAAA,IAAA,CAAK,WAAY;AACzF,YAAA,KAAA,CAAM,UAAa,GAAA,KAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxB1B,MAAM,8DACX,GAAA,6DAAA,CAAA;AAEF,MAAA,CAAO,8DAAgE,EAAA,EAAA,CAAA,CACpE,SAAU,CAAA,mBAAA,EAAqB,WAAY;AAC1C,EAAO,OAAA;AAAA,IACL,QAAU,EAAA,GAAA;AAAA,IACV,WAAa,EAAA,yEAAA;AAAA,IACb,KAAO,EAAA,EAAA;AAAA,IACP,gBAAkB,EAAA;AAAA,MAChB,OAAS,EAAA,GAAA;AAAA,KAAA;AAAA,IAEX,YAAc,EAAA,kBAAA;AAAA,IACd,UAAY,EAAA,kBAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAGf,WAAW,kBAAoB,EAAA;AAAA,EAC9B,QAAA;AAAA,EACA,WAAY;AACV,IAAA,IAAA,CAAK,eAAe,WAAY;AAC9B,MAAO,OAAA,OAAA,CAAQ,SAAU,CAAA,IAAA,CAAK,OAAQ,CAAA,YAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;ACtBvC,MAAM,+DACX,GAAA,sEAAA,CAAA;AAEF,MAAA,CAAO,+DAAiE,EAAA,EAAA,CAAA,CAAI,SAAU,CAAA,mBAAA,EAAqB,WAAY;AACrH,EAAO,OAAA;AAAA,IACL,QAAU,EAAA,GAAA;AAAA,IACV,WAAa,EAAA,0EAAA;AAAA,IACb,KAAO,EAAA,EAAA;AAAA,IACP,gBAAkB,EAAA;AAAA,MAChB,OAAS,EAAA,GAAA;AAAA,KAAA;AAAA,IAEX,YAAc,EAAA,IAAA;AAAA,IACd,UAAY,EAAA;AAAA,MACV,QAAA;AAAA,MACA,SAAU,MAAQ,EAAA;AAChB,QAAA,IAAA,CAAK,yBAAyB,MAAM;AAClC,UAAI,IAAA,MAAA,CAAO,EAAG,CAAA,OAAA,CAAQ,YAAc,EAAA;AAClC,YAAO,MAAA,CAAA,EAAA,CAAG,QAAQ,gBAAmB,GAAA,KAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACG1C,MAAM,8DAAiE,GAAA,uCAAA,CAAA;AAE9E,MAAA,CAAO,8DAAgE,EAAA;AAAA,EACrE,oFAAA;AAAA,EACA,oFAAA;AAAA,EACA,0EAAA;AAAA,EACA,qEAAA;AAAA,EACA,qFAAA;AAAA,EACA,0FAAA;AAAA,EACA,kFAAA;AAAA,EACA,wEAAA;AAAA,EACA,oFAAA;AAAA,EACA,sFAAA;AAAA,EACA,2FAAA;AAAA,EACA,sEAAA;AAAA,EACA,4FAAA;AAAA,EACA,yCAAA;AAAA,EACA,sFAAA;AAAA,EACA,wFAAA;AAAA,EACA,+FAAA;AAAA,EACA,+DAAA;AAAA,EACA,8DAAA;AAAA,CAAA,CAAA;;AC/BK,MAAM,4DACX,GAAA,+CAAA,CAAA;AAEF,OAAA,CACG,OAAO,4DAA8D,EAAA;AAAA,EACpE,wBAAA;AAAA,EACA,0BAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wCAAA;AAAA,CAAA,CAAA,CAED,QAAQ,sCAAwC,EAAA;AAAA,EAC/C,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oBAAA;AAAA,EACA,0BAAA;AAAA,EACA,SACE,EACA,EAAA,gBAAA,EACA,mBACA,EAAA,gBAAA,EACA,oBACA,wBACA,EAAA;AACA,IAAM,MAAA,aAAA,GAAgB,CAAC,cAAA,EAAgB,iBAAmB,EAAA,aAAA,CAAA,CAAA;AAC1D,IAAM,MAAA,oBAAA,GAAuB,CAAC,MAAA,EAAQ,UAAY,EAAA,WAAA,CAAA,CAAA;AAElD,IAAM,MAAA,gBAAA,GAAmB,CAAC,KAAO,EAAA,KAAA,CAAA,CAAA;AACjC,IAAA,MAAM,mBAAsB,GAAA;AAAA,MAC1B,gBAAA;AAAA,MACA,gBAAA;AAAA,MACA,2BAAA;AAAA,MACA,2BAAA;AAAA,MACA,SAAA;AAAA,KAAA,CAAA;AAGF,IAAA,SAAA,sBAAA,CAAgC,OAAS,EAAA;AACvC,MAAA,OAAA,CAAQ,WAAc,GAAA;AAAA,QACpB,gBAAA,EAAkB,QAAQ,IAAK,CAAA,gBAAA,CAAA;AAAA,QAC/B,mBAAA,EAAqB,QAAQ,IAAK,CAAA,mBAAA,CAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAItC,IAAA,SAAA,gBAAA,CAA0B,aAAa,OAAS,EAAA;AAC9C,MAAA,OAAO,GACJ,GAAI,CAAA;AAAA,QACH,eAAe,4BAA6B,CAAA,OAAA,CAAA;AAAA,QAC5C,mBAAoB,CAAA,kBAAA,EAAA;AAAA,QACpB,kBAAA,CAAmB,kBAAkB,WAAY,CAAA,IAAA,CAAA;AAAA,OAAA,CAAA,CAElD,IAAK,CAAA,SAAU,CAAC,yBAAA,EAA2B,gBAAgB,aAAgB,CAAA,EAAA;AAC1E,QAAA,OAAA,CAAQ,WAAc,GAAA;AAAA,UACpB,yBAAA;AAAA,UACA,cAAA;AAAA,UACA,aAAA;AAAA,UACA,aAAA,EAAe,QAAQ,IAAK,CAAA,aAAA,CAAA;AAAA,UAC5B,oBAAA,EAAsB,QAAQ,IAAK,CAAA,oBAAA,CAAA;AAAA,UACnC,QAAA,EAAU,EAAE,IAAK,CAAA,yBAAA,CAAA;AAAA,UACjB,QAAU,EAAA,EAAA;AAAA,SAAA,CAAA;AAEZ,QAAoB,mBAAA,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAI1B,IAAA,SAAA,sBAAA,CAAgC,OAAS,EAAA;AACvC,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,KAAO,EAAA,EAAA;AAAA,OAAA,CAAA;AAET,MAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,QAAM,MAAA,OAAA,GAAU,CAAC,MAAO,CAAA,KAAA,CAAA,CAAA;AAGxB,QAAQ,OAAA,CAAA,IAAA,CAAK,+BAA+B,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAErD,QAAA,OAAA,CAAQ,OAAO,GAAG,OAAA,CAAA,CAAA;AAAA,OACb,MAAA;AACL,QAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,aAAgB,GAAA,EAAA,CAAA;AAAA,OAAA;AAE/C,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,8BAAA,CAAwC,OAAS,EAAA;AAC/C,MAAA,MAAM,CAAI,GAAA,OAAA,CAAA;AACV,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,KAAO,EAAA,EAAA;AAAA,OAAA,CAAA;AAGT,MAAM,MAAA,SAAA,GAAY,CAAC,CAAE,CAAA,MAAA,CAAA,CAAA;AACrB,MAAM,MAAA,EAAE,8BAA8B,CAAE,CAAA,WAAA,CAAA;AACxC,MAAM,MAAA,EAAE,0BAA+B,EAAA,GAAA,yBAAA,CAA0B,CAAE,CAAA,WAAA,CAAA,CAAA;AAEnE,MAAA,IAAI,SAAU,CAAA,KAAA,CAAM,CAAC,CAAA,KAAM,CAAC,CAAI,CAAA,EAAA;AAC9B,QAAO,OAAA,MAAA,CAAA;AAAA,OAAA;AAGT,MAAM,MAAA,QAAA,GAAW,yBACd,2BAA4B,CAAA,0BAAA,EAA4B,WACxD,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,IAAA,CAAA,CAAA;AAEtB,MAAA,MAAM,eAAe,CAAE,CAAA,YAAA,CAAA;AACvB,MAAA,IAAI,CAAE,CAAA,KAAA,CAAM,CAAC,YAAA,EAAc,CAAC,CAAA,CAAE,UAAW,CAAA,YAAA,EAAc,QAAW,CAAA,EAAA,CAAC,CAAE,CAAA,QAAA,CAAS,UAAU,YAAiB,CAAA,CAAA,CAAA,EAAA;AACvG,QAAO,MAAA,CAAA,KAAA,CAAM,eAAe,CAAE,CAAA,YAAA,CAAA;AAC9B,QAAA,CAAA,CAAE,YAAe,GAAA,IAAA,CAAA;AAAA,OAAA;AAEnB,MAAE,CAAA,CAAA,WAAA,CAAY,SAAS,aAAgB,GAAA,QAAA,CAAA;AACvC,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,eAAA,CAAyB,OAAS,EAAA;AAChC,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,KAAO,EAAA,EAAA;AAAA,OAAA,CAAA;AAET,MAAA,IAAI,cAAiB,GAAA,IAAA,CAAA;AACrB,MAAI,IAAA,OAAA,CAAQ,UAAU,qBAAuB,EAAA;AAC3C,QAAO,OAAA,MAAA,CAAA;AAAA,OAAA;AAET,MAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,QAAA,cAAA,GAAiB,OAAQ,CAAA,WAAA,CAAY,aAClC,CAAA,MAAA,CAAO,SAAU,KAAO,EAAA;AACvB,UAAA,OAAO,KAAM,CAAA,IAAA,IAAQ,KAAM,CAAA,IAAA,CAAK,OAAQ,CAAA,MAAA,CAAA,CAAA;AAAA,SAEzC,CAAA,CAAA,GAAA,CAAI,SAAU,KAAO,EAAA;AACpB,UAAO,OAAA;AAAA,YACL,WAAW,KAAM,CAAA,SAAA;AAAA,YACjB,KAAK,KAAM,CAAA,IAAA,GAAO,MAAM,IAAK,CAAA,OAAA,CAAQ,QAAQ,CAAK,CAAA,GAAA,IAAA;AAAA,WAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAGxD,QAAA,IACE,QAAQ,OACR,IAAA,CAAC,cAAe,CAAA,IAAA,CAAK,SAAU,KAAO,EAAA;AACpC,UAAO,OAAA,KAAA,CAAM,cAAc,OAAQ,CAAA,OAAA,CAAA;AAAA,SAErC,CAAA,EAAA;AACA,UAAA,MAAA,CAAO,MAAM,OAAU,GAAA,IAAA,CAAA;AACvB,UAAA,OAAA,CAAQ,OAAU,GAAA,IAAA,CAAA;AAAA,SAAA;AAAA,OAEf,MAAA;AACL,QAAA,OAAA,CAAQ,OAAU,GAAA,IAAA,CAAA;AAAA,OAAA;AAEpB,MAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,MAAS,GAAA,cAAA,CAAA;AACtC,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,cAAA,CAAwB,OAAS,EAAA;AAC/B,MAAM,MAAA,MAAA,GAAS,EAAE,KAAO,EAAA,EAAA,EAAA,CAAA;AACxB,MAAM,MAAA,YAAA,GAAe,QAAQ,WAAY,CAAA,QAAA,CAAA;AACzC,MAAI,IAAA,CAAC,QAAQ,MAAQ,EAAA;AACnB,QAAO,OAAA,MAAA,CAAA;AAAA,OAAA;AAET,MAAA,IAAI,EAAE,mBAAqB,EAAA,iBAAA,EAAA,GAAsB,OAAQ,CAAA,WAAA,CAAY,0BACnE,OAAQ,CAAA,WAAA,CAAA,CAAA;AAEV,MAAA,mBAAA,GAAsB,mBAAuB,IAAA,EAAA,CAAA;AAC7C,MAAA,iBAAA,GAAoB,iBAAqB,IAAA,EAAA,CAAA;AACzC,MAAA,YAAA,CAAa,KAAQ,GAAA,mBAAA,CAAoB,QAAS,CAAA,OAAA,CAAQ,UAAU,iBAAoB,GAAA,EAAA,CAAA;AAExF,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,yBAAA,CAAmC,OAAS,EAAA;AAC1C,MAAA,MAAM,iBAAoB,GAAA,OAAA,CAAQ,WAAY,CAAA,cAAA,CAAe,QAAQ,WAAgB,CAAA,IAAA;AAAA,QACnF,KAAO,EAAA,EAAA;AAAA,OAAA,CAAA;AAET,MAAA,OAAO,EAAE,KAAM,CAAA,iBAAA,CAAkB,OAAQ,CAAA,MAAA,CAAA,CAAA,CAAS,OAAO,MAAQ,CAAA,CAAA,KAAA,EAAA,CAAA;AAAA,KAAA;AAGnE,IAAA,SAAA,6BAAA,CAAuC,OAAS,EAAA;AAC9C,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,KAAO,EAAA,EAAA;AAAA,OAAA,CAAA;AAET,MAAI,IAAA,cAAA,CAAA;AACJ,MAAI,IAAA,OAAA,CAAQ,WAAY,CAAA,QAAA,CAAS,cAAgB,EAAA;AAC/C,QAAiB,cAAA,GAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,cAAA,CAAA;AAAA,OAAA;AAEhD,MAAA,MAAM,4BAA4B,yBAA0B,CAAA,OAAA,CAAA,CAAA;AAC5D,MAAA,IAAI,QAAQ,qBAAuB,EAAA;AAGjC,QAAA,OAAA,CAAQ,qBAAwB,GAAA,IAAA,CAAA;AAChC,QAAA,MAAA,CAAO,MAAM,cAAiB,GAAA,IAAA,CAAA;AAAA,OAAA;AAEhC,MAAA,IAAI,kBAAkB,yBAA2B,EAAA;AAC/C,QAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,cAAiB,GAAA,yBAAA,CAAA;AAC9C,QAAA,MAAA,CAAO,MAAM,cAAiB,GAAA,IAAA,CAAA;AAAA,OAAA;AAGhC,MAAA,IAAI,OAAQ,CAAA,WAAA,CAAY,QAAS,CAAA,cAAA,KAAmB,EAAI,EAAA;AACtD,QAAA,OAAA,CAAQ,UAAU,wBAA2B,GAAA,KAAA,CAAA;AAAA,OACxC,MAAA;AACL,QAAA,OAAA,CAAQ,UAAU,wBAA2B,GAAA,IAAA,CAAA;AAAA,OAAA;AAG/C,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,qBAAA,CAA+B,SAAS,0BAA4B,EAAA;AAClE,MAAA,OAAO,gBAAiB,CAAA,YAAA,CAAa,gBAAkB,CAAA,CAAA,IAAA,CAAK,WAAY;AACtE,QAAA,OAAO,mBAAoB,CAAA,oBAAA,EAAA,CAAuB,IAAK,CAAA,SAAU,cAAgB,EAAA;AAC/E,UAAA,OAAA,CAAQ,YAAY,cAAiB,GAAA,cAAA,CAAA;AACrC,UAAA,IAAI,CAAC,0BAA4B,EAAA;AAC/B,YAA8B,6BAAA,CAAA,OAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAMtC,IAAA,SAAA,oBAAA,CAA8B,aAAe,EAAA;AAC3C,MAAA,OAAO,EAAE,KAAM,CAAA,aAAA,CAAA,CAAe,GAAI,CAAA,MAAA,CAAA,CAAQ,OAAO,KAAQ,EAAA,CAAA,IAAA,EAAA,CAAA;AAAA,KAAA;AAG3D,IAAA,SAAA,4BAAA,CAAsC,OAAS,EAAA;AAC7C,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,KAAO,EAAA,EAAA;AAAA,OAAA,CAAA;AAET,MAAA,MAAM,UAAU,OAAQ,CAAA,aAAA,CAAA;AACxB,MAAM,MAAA,gBAAA,GAAmB,oBAAqB,CAAA,OAAA,CAAQ,WAAY,CAAA,aAAA,CAAA,CAAA;AAElE,MAAI,IAAA,OAAA,IAAW,QAAQ,aAAe,EAAA;AACpC,QAAA,MAAM,OAAU,GAAA,CAAA,CAAE,YAAa,CAAA,gBAAA,EAAkB,OAAQ,CAAA,aAAA,CAAA,CAAA;AACzD,QAAM,MAAA,OAAA,GAAU,CAAE,CAAA,GAAA,CAAI,OAAS,EAAA,OAAA,CAAA,CAAA;AAC/B,QAAA,OAAA,CAAQ,aAAgB,GAAA,OAAA,CAAA;AACxB,QAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,UAAA,MAAA,CAAO,MAAM,aAAgB,GAAA,OAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAGjC,MAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,aAAgB,GAAA,gBAAA,CAAA;AAC7C,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,oBAAA,CAA8B,SAAS,0BAA4B,EAAA;AACjE,MAAA,OAAO,kBAAmB,CAAA,iBAAA,CAAkB,OAAS,CAAA,CAAA,IAAA,CAAK,SAAU,aAAe,EAAA;AACjF,QAAA,OAAA,CAAQ,YAAY,aAAgB,GAAA,aAAA,CAAA;AACpC,QAAA,IAAI,CAAC,0BAA4B,EAAA;AAC/B,UAA6B,4BAAA,CAAA,OAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAKnC,IAAA,SAAA,sBAAA,CAAgC,OAAS,EAAA;AACvC,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,KAAO,EAAA,EAAA;AAAA,OAAA,CAAA;AAET,MAAM,MAAA,IAAA,GAAO,QAAQ,WAAY,CAAA,aAAA,CAAA;AACjC,MAAA,MAAM,UAAa,GAAA,CAAA,CAAE,MAAO,CAAA,IAAA,EAAM,SAAU,EAAI,EAAA;AAC9C,QAAA,OAAO,GAAG,OAAY,KAAA,OAAA,CAAQ,WAAe,IAAA,EAAA,CAAG,WAAW,OAAQ,CAAA,MAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAGrE,MAAA,OAAA,CAAQ,gBAAgB,oBAAqB,CAAA,UAAA,CAAA,CAAA;AAC7C,MAAA,OAAA,CAAQ,UAAU,uBAA0B,GAAA,IAAA,CAAA;AAE5C,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,mBAAA,CAA6B,GAAK,EAAA;AAChC,MAAA,GAAA,CAAI,aAAgB,GAAA,SAAA,aAAA,CAAuB,OAAS,EAAA,MAAA,GAAS,KAAO,EAAA;AAClE,QAAA,MAAM,MAAS,GAAA;AAAA,UACb,KAAO,EAAA,EAAA;AAAA,SAAA,CAAA;AAET,QAAI,IAAA,OAAA,CAAQ,MAAU,IAAA,OAAA,CAAQ,WAAa,EAAA;AACzC,UAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,KAAO,EAAA,sBAAA,CAAuB,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAC7D,UAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,KAAO,EAAA,6BAAA,CAA8B,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AACpE,UAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,KAAO,EAAA,sBAAA,CAAuB,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAC7D,UAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,KAAO,EAAA,cAAA,CAAe,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAAA,SAAA;AAGvD,QAAA,IAAI,CAAC,MAAQ,EAAA;AACX,UAAA,OAAA,CAAQ,gBAAmB,GAAA,IAAA,CAAA;AAC3B,UAAA,OAAA,CAAQ,gBAAmB,GAAA,IAAA,CAAA;AAC3B,UAAA,OAAA,CAAQ,IAAO,GAAA,IAAA,CAAA;AACf,UAAA,OAAA,CAAQ,iBAAoB,GAAA,IAAA,CAAA;AAC5B,UAAA,OAAA,CAAQ,MAAS,GAAA,IAAA,CAAA;AACjB,UAAA,OAAA,CAAQ,cAAiB,GAAA,IAAA,CAAA;AACzB,UAAA,OAAA,CAAQ,YAAe,GAAA,IAAA,CAAA;AACvB,UAAA,OAAA,CAAQ,mBAAsB,GAAA,EAAA,CAAA;AAC9B,UAAA,OAAA,CAAQ,UAAU,yBAA4B,GAAA,KAAA,CAAA;AAC9C,UAAA,OAAA,CAAQ,qBAAwB,GAAA,IAAA,CAAA;AAChC,UAAA,OAAA,CAAQ,iBAAoB,GAAA,IAAA,CAAA;AAC5B,UAAA,OAAA,CAAQ,YAAe,GAAA,KAAA,CAAA;AACvB,UAAA,OAAA,CAAQ,KAAQ,GAAA,EAAA,CAAA;AAAA,SAAA;AAGlB,QAAO,OAAA,MAAA,CAAA;AAAA,OAAA,CAAA;AAGT,MAAI,GAAA,CAAA,kBAAA,GAAqB,SAA4B,kBAAA,CAAA,OAAA,EAAS,MAAQ,EAAA;AACpE,QAAA,MAAM,MAAS,GAAA;AAAA,UACb,KAAO,EAAA,EAAA;AAAA,SAAA,CAAA;AAET,QAAA,MAAM,cAAc,OAAQ,CAAA,WAAA,CAAA;AAC5B,QAAA,IAAI,QAAQ,WAAa,EAAA;AACvB,UAAA,MAAM,iBAAoB,GAAA,WAAA,CAAY,yBAA0B,CAAA,OAAA,CAAQ,WAAgB,CAAA,IAAA;AAAA,YACtF,OAAS,EAAA,EAAA;AAAA,YACT,cAAgB,EAAA,IAAA;AAAA,WAAA,CAAA;AAElB,UAAY,WAAA,CAAA,QAAA,CAAS,UAAU,iBAAkB,CAAA,OAAA,CAAA;AACjD,UAAA,IACE,CAAC,CAAE,CAAA,KAAA,CAAM,WAAY,CAAA,QAAA,CAAS,SAC3B,IAAK,CAAA;AAAA,YACJ,MAAM,OAAQ,CAAA,MAAA;AAAA,WAAA,CAAA,CAEf,KACH,EAAA,EAAA;AACA,YAAA,OAAA,CAAQ,MAAS,GAAA,IAAA,CAAA;AACjB,YAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AAAA,WACjB,MAAA;AACL,YAAA,OAAA,CAAQ,OAAO,MAAO,CAAA,KAAA,EAAO,OAAQ,CAAA,aAAA,CAAc,SAAS,MAAQ,CAAA,CAAA,KAAA,CAAA,CAAA;AAAA,WAAA;AAEtE,UAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,YAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,KAAO,EAAA,sBAAA,CAAuB,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAAA,WAAA;AAE/D,UAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,KAAO,EAAA,sBAAA,CAAuB,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAAA,SACxD,MAAA;AACL,UAAA,OAAA,CAAQ,MAAS,GAAA,IAAA,CAAA;AAAA,SAAA;AAEnB,QAAO,OAAA,MAAA,CAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAIX,IAAA,SAAA,oBAAA,CAA8B,OAAS,EAAA;AACrC,MAAA,OAAO,gBAAiB,CAAA,YAAA,CAAa,eAAiB,CAAA,CAAA,IAAA,CAAK,WAAY;AACrE,QAAA,OAAO,wBAAyB,CAAA,mBAAA,EAAA,CAAsB,IAAK,CAAA,SAAU,aAAe,EAAA;AAClF,UAAA,OAAA,CAAQ,YAAY,aAAgB,GAAA,aAAA,CAAA;AACpC,UAAuB,sBAAA,CAAA,OAAA,CAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAK7B,IAAO,OAAA;AAAA,MACL,sBAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,6BAAA;AAAA,MACA,4BAAA;AAAA,MACA,oBAAA;AAAA,MACA,qBAAA;AAAA,MACA,yBAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACtVD,MAAM,oEACX,GAAA,6CAAA,CAAA;AAEF,MAAA,CAAO,oEAAsE,EAAA;AAAA,EAC3E,kBAAA;AAAA,EACA,4DAAA;AAAA,EACA,yCAAA;AAAA,EACA,mBAAA;AAAA,CAAA,CAAA,CACC,WAAW,2BAA6B,EAAA;AAAA,EACzC,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,sCAAA;AAAA,EACA,oBAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,SACE,QACA,iBACA,EAAA,EAAA,EACA,QACA,iBACA,EAAA,oCAAA,EACA,kBACA,EAAA,WAAA,EACA,KACA,EAAA;AACA,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,iBAAmB,EAAA,+DAAA;AAAA,MACnB,aAAe,EAAA,yEAAA;AAAA,MACf,aAAe,EAAA,iEAAA;AAAA,MACf,cAAgB,EAAA,2EAAA;AAAA,MAChB,aAAe,EAAA,yEAAA;AAAA,MACf,eAAiB,EAAA,6EAAA;AAAA,MACjB,cAAgB,EAAA,0EAAA;AAAA,MAChB,YAAc,EAAA,uEAAA;AAAA,MACd,KAAO,EAAA,4DAAA;AAAA,MACP,IAAM,EAAA,uDAAA;AAAA,MACN,gBAAkB,EAAA,+EAAA;AAAA,KAAA,CAAA;AAGpB,IAAO,MAAA,CAAA,cAAA,GAAiB,eAAe,GAAI,CAAA,WAAA,CAAA,CAAA;AAE3C,IAAA,MAAA,CAAO,KAAQ,GAAA,KAAA,CAAA;AAEf,IAAA,MAAA,CAAO,kBAAkB,WAAY,CAAA,IAAA,CAAA;AACrC,IAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;AACrB,IAAA,MAAA,CAAO,OAAU,GAAA,kBAAA,CAAA;AAIjB,IAAA,MAAA,CAAO,OAAQ,CAAA,WAAA,GAAc,MAAO,CAAA,OAAA,CAAQ,WAAe,IAAA,EAAA,CAAA;AAC3D,IAAA,MAAA,CAAO,QAAQ,WAAY,CAAA,QAAA,GAAW,MAAO,CAAA,OAAA,CAAQ,YAAY,QAAY,IAAA,EAAA,CAAA;AAC7E,IAAO,MAAA,CAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,OAAA,GAAU,OAAO,OAAQ,CAAA,WAAA,CAAY,SAAS,OAAW,IAAA,EAAA,CAAA;AAE7F,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,MAAQ,EAAA,KAAA;AAAA,MACR,yBAA2B,EAAA,CAAC,CAAC,kBAAA,CAAmB,SAAU,CAAA,yBAAA;AAAA,KAAA,CAAA;AAG5D,IAAA,IAAA,CAAK,qBAAwB,GAAA;AAAA,MAC3B,MAAQ,EAAA;AAAA,QACN,wDAAA;AAAA,QACA,gBAAA;AAAA,QACA,eAAe,GAAI,CAAA,WAAA,CAAA;AAAA,QACnB,eAAA;AAAA,QACA,0CAAA;AAAA,OAAA;AAAA,MAEF,SAAW,EAAA,EAAA;AAAA,MACX,kBACE,EAAA,uIAAA;AAAA,KAAA,CAAA;AAGJ,IAAA,IAAI,CAAC,MAAA,CAAO,OAAQ,CAAA,SAAA,CAAU,wBAA0B,EAAA;AACtD,MAAK,IAAA,CAAA,qBAAA,CAAsB,UAAU,IACnC,CAAA,8EAAA,CAAA,CAAA;AAAA,KAAA;AAIJ,IAAgC,SAAA,oBAAA,GAAA;AAE9B,MAAA,IAAI,OAAO,WAAa,EAAA;AACtB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAM,MAAA,UAAA,GAAa,MAAO,CAAA,WAAA,CAAY,IAAK,CAAA,SAAA,CAAU,OAAO,IAAK,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,IAAS,KAAA,kBAAA,CAAA,CAAA;AAC3F,MAAI,IAAA,UAAA,IAAc,UAAW,CAAA,OAAA,CAAQ,sBAAyB,CAAA,EAAA;AAC5D,QAAA,MAAM,kBAAqB,GAAA,UAAA,CAAW,OAAQ,CAAA,sBAAA,CAAA,CAAwB,OAAO,OAAQ,CAAA,MAAA,CAAA,CAAA;AACrF,QAAA,IAAI,kBAAoB,EAAA;AACtB,UAAA,MAAM,cAAiB,GAAA;AAAA,YACrB,WAAa,EAAA,kBAAA;AAAA,YACb,SAAA,EAAW,OAAO,OAAQ,CAAA,WAAA;AAAA,YAC1B,MAAA,EAAQ,OAAO,OAAQ,CAAA,MAAA;AAAA,YACvB,QAAU,EAAA,OAAA;AAAA,WAAA,CAAA;AAEZ,UAAA,IAAI,YAAe,GAAA,4BAAA,CAAA;AACnB,UAAI,IAAA,MAAA,CAAO,SAAS,yBAA4B,CAAA,EAAA;AAE9C,YAAe,YAAA,GAAA,eAAA,CAAA;AAAA,WAAA;AAEjB,UAAI,IAAA,MAAA,CAAO,SAAS,iCAAoC,CAAA,EAAA;AAEtD,YAAe,YAAA,GAAA,iBAAA,CAAA;AAAA,WAAA;AAEjB,UAAI,IAAA,MAAA,CAAO,SAAS,aAAgB,CAAA,EAAA;AAElC,YAAe,YAAA,GAAA,cAAA,CAAA;AAAA,WAAA;AAEjB,UAAA,MAAA,CAAO,GAAG,YAAc,EAAA,cAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA;AAK9B,IAA0B,SAAA,cAAA,GAAA;AACxB,MAAA,WAAA,CAAY,YAAa,CAAA,OAAA,EAAA,CAAA;AACzB,MAAY,WAAA,CAAA,YAAA,CAAa,cAAc,MAAQ,EAAA,oBAAA,CAAA,CAAA;AAAA,KAAA;AAGjD,IAAO,MAAA,CAAA,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,MACnC,WAAA;AAAA,MACA,KAAO,EAAA,4BAAA;AAAA,MACP,aAAe,EAAA,iBAAA;AAAA,MACf,cAAA;AAAA,KAAA,CAAA,CAAA;AAGF,IAA4B,SAAA,gBAAA,GAAA;AAC1B,MAAA,oCAAA,CAAqC,gBAAiB,CAAA,WAAA,EAAa,kBAAoB,CAAA,CAAA,IAAA,CAAK,WAAY;AACtG,QAAM,MAAA,IAAA,GAAO,mBAAmB,SAAU,CAAA,IAAA,CAAA;AAC1C,QAAI,IAAA,IAAA,KAAS,OAAW,IAAA,IAAA,KAAS,QAAU,EAAA;AACzC,UAAA,kBAAA,CAAmB,UAAU,oBAAuB,GAAA,IAAA,CAAA;AAAA,SAAA;AAEtD,QAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AACtB,QAAA,qBAAA,EAAA,CAAA;AACA,QAAA,uBAAA,EAAA,CAAA;AACA,QAAA,iBAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAIJ,IAAiC,SAAA,qBAAA,GAAA;AAC/B,MAAM,MAAA,IAAA,GAAO,mBAAmB,SAAU,CAAA,IAAA,CAAA;AAC1C,MAAI,IAAA,IAAA,KAAS,OAAW,IAAA,IAAA,KAAS,cAAgB,EAAA;AAC/C,QAAA,WAAA,CAAY,YAAa,CAAA,gBAAA,CAAA,CAAA;AACzB,QAAA,WAAA,CAAY,YAAa,CAAA,gBAAA,CAAA,CAAA;AACzB,QAAA,WAAA,CAAY,YAAa,CAAA,kBAAA,CAAA,CAAA;AACzB,QAAA,WAAA,CAAY,YAAa,CAAA,iBAAA,CAAA,CAAA;AACzB,QAAA,WAAA,CAAY,YAAa,CAAA,eAAA,CAAA,CAAA;AACzB,QAAA,WAAA,CAAY,YAAa,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAI7B,IAA6B,SAAA,iBAAA,GAAA;AAC3B,MAAA,MAAA,CAAO,MAAO,CAAA,qBAAA,EAAuB,qBAAsB,CAAA,MAAA,CAAO,OAAQ,CAAA,kBAAA,CAAA,CAAA,CAAA;AAC1E,MAAA,MAAA,CAAO,MAAO,CAAA,gBAAA,EAAkB,qBAAsB,CAAA,MAAA,CAAO,OAAQ,CAAA,aAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAGvE,IAAmC,SAAA,uBAAA,GAAA;AACjC,MAAA,0BAAA,CAA2B,MAAO,CAAA,OAAA,CAAQ,kBAAmB,CAAA,MAAA,CAAO,OAAS,EAAA,IAAA,CAAA,CAAA,CAAA;AAC7E,MAAA,0BAAA,CAA2B,MAAO,CAAA,OAAA,CAAQ,aAAc,CAAA,MAAA,CAAO,OAAS,EAAA,IAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAG1E,IAAA,SAAA,qBAAA,CAA+B,MAAQ,EAAA;AACrC,MAAO,OAAA,SAAU,UAAU,QAAU,EAAA;AACnC,QAAA,IAAI,aAAa,QAAU,EAAA;AACzB,UAAA,0BAAA,CAA2B,OAAO,MAAO,CAAA,OAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAK/C,IAAA,SAAA,0BAAA,CAAoC,MAAQ,EAAA;AAC1C,MAAI,IAAA,MAAA,CAAO,MAAM,aAAe,EAAA;AAC9B,QAAA,WAAA,CAAY,SAAU,CAAA,gBAAA,CAAA,CAAA;AACtB,QAAA,WAAA,CAAY,SAAU,CAAA,kBAAA,CAAA,CAAA;AAAA,OAAA;AAExB,MAAI,IAAA,MAAA,CAAO,MAAM,cAAgB,EAAA;AAC/B,QAAA,WAAA,CAAY,SAAU,CAAA,iBAAA,CAAA,CAAA;AAAA,OAAA;AAExB,MAAI,IAAA,MAAA,CAAO,MAAM,YAAc,EAAA;AAC7B,QAAA,WAAA,CAAY,SAAU,CAAA,eAAA,CAAA,CAAA;AAAA,OAAA;AAExB,MAAA,IAAI,MAAO,CAAA,KAAA,CAAM,WAAe,IAAA,MAAA,CAAO,MAAM,KAAO,EAAA;AAClD,QAAA,WAAA,CAAY,SAAU,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAI1B,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAI,IAAA,MAAA,CAAO,QAAQ,SAAU,CAAA,IAAA,KAAS,kBAAkB,MAAO,CAAA,OAAA,CAAQ,SAAU,CAAA,IAAA,KAAS,gBAAkB,EAAA;AAC1G,QAAO,OAAA,iBAAA,CAAkB,MAAM,MAAO,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA;AAExC,MAAO,MAAA,CAAA,WAAA,CAAY,OAAO,WAAY;AACpC,QAAO,OAAA,iBAAA,CAAkB,gBAAiB,CAAA,MAAA,CAAO,OAAS,EAAA,WAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAI9D,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAkB,iBAAA,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGpB,IAAK,IAAA,CAAA,sBAAA,GAAyB,SAAU,OAAS,EAAA;AAC/C,MAAA,MAAA,CAAO,OAAQ,CAAA,kBAAA,GAAqB,MAAO,CAAA,OAAA,CAAQ,kBAAsB,IAAA,EAAA,CAAA;AACzE,MAAA,MAAM,YAAe,GAAA,MAAA,CAAO,OAAQ,CAAA,kBAAA,CAAmB,OAAQ,CAAA,OAAA,CAAA,CAAA;AAC/D,MAAA,IAAI,iBAAiB,CAAI,CAAA,EAAA;AACvB,QAAO,MAAA,CAAA,OAAA,CAAQ,mBAAmB,IAAK,CAAA,OAAA,CAAA,CAAA;AAAA,OAClC,MAAA;AACL,QAAO,MAAA,CAAA,OAAA,CAAQ,kBAAmB,CAAA,MAAA,CAAO,YAAc,EAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAI3D,IAAK,IAAA,CAAA,kBAAA,GAAqB,SAAU,OAAS,EAAA;AAC3C,MAAO,OAAA,MAAA,CAAO,OAAQ,CAAA,kBAAA,CAAmB,QAAS,CAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGpD,IAAI,IAAA,CAAC,MAAO,CAAA,KAAA,CAAM,yBAA2B,EAAA;AAC3C,MAAA,gBAAA,EAAA,CAAA;AAAA,KACK,MAAA;AACL,MAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AAAA,KAAA;AAGxB,IAAA,IAAA,CAAK,mBAAmB,MAAM;AAC5B,MAAA,MAAA,CAAO,MAAM,yBAA4B,GAAA,KAAA,CAAA;AACzC,MAAA,gBAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGF,IAAA,IAAA,CAAK,UAAU,WAAY;AACzB,MACE,OAAA,MAAA,CAAO,OACP,IAAA,MAAA,CAAO,OAAQ,CAAA,WAAA,IACf,MAAO,CAAA,OAAA,CAAQ,WACf,IAAA,MAAA,CAAO,OAAQ,CAAA,YAAA,IACf,MAAO,CAAA,OAAA,CAAQ,MACd,KAAA,CAAC,MAAO,CAAA,OAAA,CAAQ,YAAgB,IAAA,MAAA,CAAO,OAAQ,CAAA,KAAA,CAAM,MAAW,KAAA,CAAA,CAAA,IACjE,OAAQ,CAAA,SAAA,CAAU,MAAO,CAAA,OAAA,CAAQ,YAAc,CAAA,CAAA,OAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnOhD,MAAA,gBAAA,SAA+B,MAAM,SAA0D,CAAA;AAAA,EACpG,YAAY,KAAY,EAAA;AACtB,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AAGD,IAAA,IAAA,CAAA,KAAA,GAAQ,EAAE,QAAU,EAAA,KAAA,EAAA,CAAA;AAEnB,IAAA,IAAA,CAAA,kBAAA,GAAqB,CAAC,QAAsB,KAAA;AAClD,MAAA,IAAA,CAAK,SAAS,EAAE,QAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAGX,MAAS,GAAA;AACd,IAAA,MAAM,EAAE,QAAA,EAAU,QAAU,EAAA,OAAA,EAAS,YAAY,IAAK,CAAA,KAAA,CAAA;AACtD,IAAM,MAAA,EAAE,aAAa,IAAK,CAAA,KAAA,CAAA;AAE1B,IAAA,2CACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,cAAA;AAAA,KAAA,sCACX,gBAAD,EAAA;AAAA,MAAkB,aAAe,EAAA,OAAA;AAAA,MAAS,eAAe,IAAK,CAAA,kBAAA;AAAA,KAAA,CAAA,sCAC9D,QAAD,EAAA;AAAA,MAAQ,SAAU,EAAA,iBAAA;AAAA,MAAkB,OAAS,EAAA,QAAA;AAAA,KAAU,EAAA,QAAA,CAAA,sCAGtD,QAAD,EAAA;AAAA,MAAQ,IAAK,EAAA,QAAA;AAAA,MAAS,SAAU,EAAA,iBAAA;AAAA,MAAkB,OAAS,EAAA,QAAA;AAAA,MAAU,QAAA,EAAU,CAAC,OAAA,IAAW,CAAC,QAAA;AAAA,KAAU,EAAA,QAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA;;ACPvG,MAAA,8BAAA,GAAA,cAA4C,MAAM,SAGvD,CAAA;AAAA,EAWA,YAAY,KAA4C,EAAA;AACtD,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AAsBA,IAAA,IAAA,CAAA,KAAA,GAAQ,CAAC,IAAe,KAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,CAAM,YAAa,CAAA,KAAA,CAAM,IAAM,EAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG9B,IAAA,IAAA,CAAA,MAAA,GAAS,MAAM;AACrB,MAAM,MAAA,EAAE,OAAS,EAAA,WAAA,EAAA,GAAgB,IAAK,CAAA,KAAA,CAAA;AACtC,MAAM,MAAA,EAAE,WAAa,EAAA,WAAA,EAAA,GAAgB,IAAK,CAAA,KAAA,CAAA;AAE1C,MAAA,WAAA,CAAY,OAAO,MAAM;AACvB,QAAA,OAAO,aAAc,CAAA,iBAAA,CAAkB,mBAAoB,CAAA,WAAA,EAAa,WAAa,EAAA,OAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIjF,IAAA,IAAA,CAAA,kBAAA,GAAqB,CAAC,oBAA8B,KAAA;AAC1D,MAAA,MAAM,+BAA+B,oBAClC,CAAA,MAAA,CAAO,CAAC,mBAAA,KAA6B,oBAAoB,cAAe,CAAA,KAAA,KAAU,CAClF,CAAA,CAAA,IAAA,CAAK,CAAC,CAAQ,EAAA,CAAA,KAAW,CAAE,CAAA,IAAA,CAAK,cAAc,CAAE,CAAA,IAAA,CAAA,CAAA,CAAA;AAEnD,MAAO,OAAA,4BAAA,CAAA;AAAA,KAAA,CAAA;AAGD,IAAA,IAAA,CAAA,OAAA,GAAU,MAAM;AACtB,MAAA,MAAM,sBAAyB,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,eAAgB,CAAA,sBAAA,CAAA;AAClE,MAAA,OAAO,sBAA2B,KAAA,KAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG5B,IAAA,IAAA,CAAA,uBAAA,GAA0B,CAAC,wBAAkC,KAAA;AACnE,MAAM,MAAA,EAAE,yBAAyB,IAAK,CAAA,KAAA,CAAA;AACtC,MAAM,MAAA,UAAA,GAAa,EAAK,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,EAAA,CAAA;AACnC,MAAW,UAAA,CAAA,eAAA,CAAgB,yBAAyB,wBAAyB,CAAA,KAAA,CAAA;AAC7E,MAAA,MAAM,qBAAqB,IAAK,CAAA,kBAAA,CAAmB,oBAAsB,CAAA,CAAA,IAAA,CAAK,SAAU,mBAA0B,EAAA;AAChH,QAAO,OAAA,mBAAA,CAAoB,SAAS,wBAAyB,CAAA,KAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAE/D,MAAW,UAAA,CAAA,UAAA,GAAa,mBAAmB,QAAS,CAAA,GAAA,CAAA;AACpD,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,OAAS,EAAA,UAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIL,IAAA,IAAA,CAAA,sBAAA,GAAyB,CAAC,UAAqB,KAAA;AACrD,MAAM,MAAA,UAAA,GAAa,EAAK,GAAA,IAAA,CAAK,KAAM,CAAA,OAAA,EAAA,CAAA;AACnC,MAAA,UAAA,CAAW,MAAS,GAAA,UAAA,CAAA;AACpB,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,OAAS,EAAA,UAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AA/DX,IAAM,MAAA,EAAE,aAAa,WAAgB,EAAA,GAAA,KAAA,CAAA;AAErC,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,WAAA,EAAa,IAAI,WAAY,CAAA;AAAA,QAC3B,WAAA;AAAA,QACA,KAAO,EAAA,gCAAA;AAAA,QACP,aAAe,EAAA,WAAA,CAAY,sBAAuB,CAAA,MAAM,KAAK,KAAM,CAAA,YAAA,EAAA,CAAA;AAAA,OAAA,CAAA;AAAA,MAErE,UAAY,EAAA,IAAA;AAAA,MACZ,OAAS,EAAA;AAAA,QACP,8BAAgC,EAAA,EAAA;AAAA,QAChC,YAAc,EAAA,UAAA;AAAA,QACd,eAAiB,EAAA;AAAA,UACf,yBAAyB,WAAY,CAAA,IAAA;AAAA,UACrC,oBAAsB,EAAA,IAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAAA,OAtBhB,KAAK,KAA4C,EAAA;AAC7D,IAAA,MAAM,UAAa,GAAA,EAAA,CAAA;AACnB,IAAO,OAAA,UAAA,CAAW,IAAK,CAAA,8BAAA,EAA+B,KAAO,EAAA,UAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAyExD,MAAS,GAAA;AACd,IAAA,MAAM,EAAE,OAAA,EAAS,WAAa,EAAA,UAAA,EAAA,GAAe,IAAK,CAAA,KAAA,CAAA;AAClD,IAAM,MAAA,EAAE,WAAa,EAAA,oBAAA,EAAA,GAAyB,IAAK,CAAA,KAAA,CAAA;AACnD,IAAA,MAAM,YAAY,IAAK,CAAA,OAAA,EAAA,CAAA;AACvB,IAAA,MAAM,6BAA6B,IAAK,CAAA,kBAAA,CAAmB,oBAAsB,CAAA,CAAA,GAAA,CAC/E,CAAC,mBAA8B,MAAA;AAAA,MAC7B,OAAO,mBAAoB,CAAA,IAAA;AAAA,MAC3B,OAAO,mBAAoB,CAAA,IAAA;AAAA,KAAA,CAAA,CAAA,CAAA;AAI/B,IAAA,2CACG,KAAD,EAAA;AAAA,MAAO,QAAQ,IAAK,CAAA,KAAA;AAAA,KAAA,sCACjB,kBAAD,EAAA;AAAA,MAAoB,OAAS,EAAA,WAAA;AAAA,KAC5B,CAAA,EAAA,UAAA,wCACE,MAAD,EAAA;AAAA,MAAM,IAAK,EAAA,MAAA;AAAA,KAAA,sCACR,UAAD,EAAA;AAAA,MAAY,SAAS,IAAK,CAAA,KAAA;AAAA,KAAA,CAAA,sCACzB,KAAM,CAAA,MAAA,EAAP,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,MAAM,KAAP,EAAA,IAAA,EAAa,WAAU,EAAA,WAAA,CAAY,wBAEpC,KAAA,CAAA,aAAA,CAAA,KAAA,CAAM,IAAP,EAAA,IAAA,sCACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,KAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAA0B,EAAA,YAAA,CAAA,sCACxC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,UAAA;AAAA,KAAA,sCACZ,MAAD,EAAA;AAAA,MACE,KAAA,EAAO,QAAQ,eAAgB,CAAA,sBAAA;AAAA,MAC/B,UAAU,IAAK,CAAA,uBAAA;AAAA,MACf,OAAS,EAAA,0BAAA;AAAA,KAAA,CAAA,CAAA,CAAA,sCAId,UAAD,EAAA;AAAA,MAAY,QAAQ,OAAQ,CAAA,UAAA;AAAA,MAAY,UAAU,IAAK,CAAA,sBAAA;AAAA,KAAA,CAAA,CAAA,sCAExD,gBAAD,EAAA;AAAA,MACE,UAAU,IAAK,CAAA,MAAA;AAAA,MACf,UAAU,IAAK,CAAA,KAAA;AAAA,MACf,OAAS,EAAA,SAAA;AAAA,MACT,SAAS,WAAY,CAAA,OAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;AAzH5B,IAAA,6BAAA,GAAA,8BAAA,CAAA;AAAA,8BAIS,YAA6D,GAAA;AAAA,EACzE,UAAY,EAAA,IAAA;AAAA,EACZ,YAAc,EAAA,IAAA;AAAA,CAAA;;ACjBX,MAAM,6DACX,GAAA,gDAAA,CAAA;AAEF,OAAA,CACG,OAAO,6DAA+D,EAAA;AAAA,EACrE,kBAAA;AAAA,EACA,6DAAA;AAAA,EACA,mBAAA;AAAA,CAAA,CAAA,CAED,WAAW,6BAA+B,EAAA;AAAA,EACzC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,gCAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA,SACE,QACA,MACA,EAAA,cAAA,EACA,KACA,WACA,EAAA,8BAAA,EACA,WACA,iBACA,EAAA;AACA,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,KAAA,CAAA;AAGX,IAAO,MAAA,CAAA,cAAA,GAAiB,eAAe,GAAI,CAAA,WAAA,CAAA,CAAA;AAE3C,IAAA,IAAA,CAAK,WAAc,GAAA,GAAA,CAAA;AAEnB,IAAqC,SAAA,yBAAA,GAAA;AACnC,MAAA,IAAI,UAAU,CAAE,CAAA,IAAA,CAAK,IAAI,YAAa,CAAA,IAAA,EAAM,SAAU,OAAS,EAAA;AAC7D,QACE,OAAA,OAAA,CAAQ,IAAS,KAAA,WAAA,CAAY,IAC7B,IAAA,OAAA,CAAQ,YAAY,WAAY,CAAA,SAAA,IAChC,OAAQ,CAAA,MAAA,KAAW,WAAY,CAAA,MAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAGnC,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAA,GAAA,CAAI,aAAc,CAAA,IAAA,CAAK,IAAK,CAAA,SAAU,YAAc,EAAA;AAClD,UAAA,IAAI,aAAa,OAAY,KAAA,WAAA,CAAY,aAAa,YAAa,CAAA,MAAA,KAAW,YAAY,MAAQ,EAAA;AAChG,YAAA,OAAO,YAAa,CAAA,YAAA,CAAa,IAAK,CAAA,SAAU,mBAAqB,EAAA;AACnE,cAAI,IAAA,mBAAA,CAAoB,IAAS,KAAA,WAAA,CAAY,IAAM,EAAA;AACjD,gBAAU,OAAA,GAAA,mBAAA,CAAA;AACV,gBAAO,OAAA,IAAA,CAAA;AAAA,eAAA;AAAA,aAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAMjB,MAAA,IAAI,CAAC,OAAS,EAAA;AACZ,QAAA,MAAA,CAAO,EAAG,CAAA,GAAA,CAAA,CAAA;AAAA,OAAA;AAEZ,MAAO,OAAA,OAAA,CAAA;AAAA,KAAA;AAGT,IAA+B,SAAA,mBAAA,GAAA;AAC7B,MAAA,MAAM,OAAU,GAAA,yBAAA,EAAA,CAAA;AAChB,MAAA,OAAO,iBAAkB,CAAA,cAAA,CACvB,GAAI,CAAA,IAAA,EACJ,WAAY,CAAA,SAAA,EACZ,WAAY,CAAA,MAAA,EACZ,WAAY,CAAA,IAAA,CAAA,CACZ,IAAK,CAAA,SAAU,OAAS,EAAA;AACxB,QAAA,YAAA,EAAA,CAAA;AAEA,QAAA,OAAA,CAAQ,OAAO,OAAS,EAAA,OAAA,CAAA,CAAA;AACxB,QAAA,OAAA,CAAQ,UAAU,WAAY,CAAA,SAAA,CAAA;AAE9B,QAAA,MAAA,CAAO,WAAc,GAAA,OAAA,CAAA;AAErB,QAAA,IAAI,CAAC,CAAA,CAAE,OAAQ,CAAA,MAAA,CAAO,WAAc,CAAA,EAAA;AAClC,UAAA,MAAA,CAAO,KAAQ,GAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAA,CAAA;AAE/C,UAAA,IAAI,OAAQ,CAAA,KAAA,IAAS,OAAQ,CAAA,KAAA,CAAM,WAAa,EAAA;AAC9C,YAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,KAAM,CAAA,WAAA,CAAY,KAAM,CAAA,IAAA,CAAA,CAAA;AAC7C,YAAK,IAAA,CAAA,OAAA,CAAQ,SAAU,GAAK,EAAA;AAC1B,cAAM,MAAA,MAAA,GAAS,IAAI,KAAM,CAAA,GAAA,CAAA,CAAA;AACzB,cAAA,IAAI,MAAO,CAAA,MAAA,KAAW,CAAK,IAAA,MAAA,CAAO,OAAO,eAAiB,EAAA;AACxD,gBAAQ,OAAA,CAAA,KAAA,CAAM,YAAY,MAAO,CAAA,CAAA,CAAA,CAAA;AAAA,eAAA;AAAA,aAAA,CAAA,CAAA;AAAA,WAAA;AAKvC,UAAA,IAAI,OAAQ,CAAA,YAAA,IAAgB,OAAQ,CAAA,YAAA,CAAa,cAAgB,EAAA;AAC/D,YAAO,MAAA,CAAA,cAAA,GAAiB,EAAE,KAAM,CAAA,OAAA,CAAQ,aAAa,cAClD,CAAA,CAAA,GAAA,CAAI,SAAU,EAAI,EAAA;AACjB,cAAA,OACE,CAAE,CAAA,IAAA,CAAK,GAAI,CAAA,cAAA,CAAe,IAAM,EAAA;AAAA,gBAC9B,aAAa,WAAY,CAAA,SAAA;AAAA,gBACzB,QAAQ,WAAY,CAAA,MAAA;AAAA,gBACpB,EAAA;AAAA,eAAA,CAAA,IAEF,CAAE,CAAA,IAAA,CAAK,GAAI,CAAA,cAAA,CAAe,IAAM,EAAA;AAAA,gBAC9B,aAAa,WAAY,CAAA,SAAA;AAAA,gBACzB,QAAQ,WAAY,CAAA,MAAA;AAAA,gBACpB,IAAM,EAAA,EAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA,CAAA,CAIX,OACA,EAAA,CAAA,KAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAEA,MAAA;AACL,UAAA,MAAA,CAAO,EAAG,CAAA,GAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAKhB,IAAwB,SAAA,YAAA,GAAA;AACtB,MAAA,MAAA,CAAO,MAAM,OAAU,GAAA,KAAA,CAAA;AAAA,KAAA;AAGzB,IAAA,mBAAA,EAAA,CAAsB,KAAK,MAAM;AAG/B,MAAI,IAAA,CAAC,OAAO,WAAa,EAAA;AACvB,QAAI,GAAA,CAAA,YAAA,CAAa,UAAU,MAAQ,EAAA,mBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAIvC,IAAA,IAAA,CAAK,qBAAqB,SAA8B,kBAAA,GAAA;AACtD,MAAA,MAAM,eAAc,MAAO,CAAA,WAAA,CAAA;AAE3B,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,MAAM,YAAY,CAAA,IAAA;AAAA,QAClB,WAAW,YAAY,CAAA,OAAA;AAAA,QACvB,QAAQ,YAAY,CAAA,MAAA;AAAA,OAAA,CAAA;AAGtB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,gBAAgB,YAAY,CAAA,IAAA;AAAA,QACnC,gBAAgB,WAAY;AAC1B,UAAI,IAAA,MAAA,CAAO,QAAS,CAAA,gBAAA,EAAkB,WAAc,CAAA,EAAA;AAClD,YAAA,MAAA,CAAO,EAAG,CAAA,GAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,CAAA;AAKhB,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,iBAAA,CAAkB,mBAAmB,YAAa,EAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAG3D,MAAA,MAAM,uBAA0B,GAAA;AAAA,QAC9B,MAAA,EAAQ,iBAAoB,GAAA,YAAA,CAAY,IAAO,GAAA,GAAA;AAAA,QAC/C,UAAA,EAAY,aAAa,YAAY,CAAA,IAAA;AAAA,QACrC,SAAS,YAAY,CAAA,OAAA;AAAA,QACrB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA;AAGF,MAAiC,gCAAA,CAAA,wBAAA,CAAyB,KAAK,YAAa,EAAA,uBAAA,CAAA,CAAA;AAE5E,MAAA,wBAAA,CAAyB,OAAQ,CAAA,uBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGnC,IAAA,IAAA,CAAK,qBAAqB,SAA8B,kBAAA,GAAA;AACtD,MAAA,MAAM,eAAc,MAAO,CAAA,WAAA,CAAA;AAE3B,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,eAAe,YAAY,CAAA,IAAA;AAAA,OAAA,CAAA;AAGpC,MAAA,MAAM,YAAe,GAAA,MAAM,iBAAkB,CAAA,kBAAA,CAAmB,YAAa,EAAA,GAAA,CAAA,CAAA;AAE7E,MAAA,MAAM,uBAA0B,GAAA;AAAA,QAC9B,MAAA,EAAQ,iBAAoB,GAAA,YAAA,CAAY,IAAO,GAAA,GAAA;AAAA,QAC/C,UAAA,EAAY,aAAa,YAAY,CAAA,IAAA;AAAA,QACrC,SAAS,YAAY,CAAA,OAAA;AAAA,QACrB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA;AAGF,MAAiC,gCAAA,CAAA,wBAAA,CAAyB,KAAK,YAAa,EAAA,uBAAA,CAAA,CAAA;AAE5E,MAAA,wBAAA,CAAyB,OAAQ,CAAA,uBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGnC,IAAA,IAAA,CAAK,oBAAoB,SAA6B,iBAAA,GAAA;AACpD,MAAA,MAAM,eAAc,MAAO,CAAA,WAAA,CAAA;AAE3B,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,cAAc,YAAY,CAAA,IAAA;AAAA,OAAA,CAAA;AAGnC,MAAM,MAAA,YAAA,GAAe,CAAC,MAAW,KAAA;AAC/B,QAAA,OAAO,kBAAkB,iBACvB,CAAA,YAAA,EACA,GACA,EAAA,OAAA,CAAQ,OAAO,MAAQ,EAAA;AAAA,UACrB,8BAAgC,EAAA,EAAA;AAAA,SAAA,CAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAKtC,MAAA,wBAAA,CAAyB,OAAQ,CAAA;AAAA,QAC/B,MAAA,EAAQ,gBAAmB,GAAA,YAAA,CAAY,IAAO,GAAA,GAAA;AAAA,QAC9C,UAAA,EAAY,YAAY,YAAY,CAAA,IAAA;AAAA,QACpC,SAAS,YAAY,CAAA,OAAA;AAAA,QACrB,iBAAmB,EAAA,WAAA;AAAA,QACnB,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,IAAA,CAAK,sBAAsB,MAAM;AAC/B,MAAA,MAAM,eAAc,MAAO,CAAA,WAAA,CAAA;AAC3B,MAAM,MAAA,OAAA,GAAU,CAAE,CAAA,IAAA,CAAK,GAAI,CAAA,QAAA,EAAU,EAAE,IAAM,EAAA,YAAA,CAAY,OAAS,EAAA,OAAA,EAAS,YAAY,CAAA,OAAA,EAAA,CAAA,CAAA;AACvF,MAAM,MAAA,oBAAA,GAAuB,EAAE,MAAO,CAAA,OAAA,CAAQ,cAAc,EAAE,UAAA,EAAY,IAAM,EAAA,MAAA,EAAQ,YAAY,CAAA,MAAA,EAAA,CAAA,CAAA;AACpG,MAAA,6BAAA,CAA8B,IAAK,CAAA,EAAE,WAAa,EAAA,GAAA,EAAK,WAAa,EAAA,YAAA,EAAA,oBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGtE,IAAK,IAAA,CAAA,gBAAA,GAAmB,CAAC,YAAgB,KAAA;AACvC,MAAA,SAAA,CAAU,IAAK,CAAA;AAAA,QACb,WAAa,EAAA,+DAAA;AAAA,QACb,UAAY,EAAA,mCAAA;AAAA,QACZ,IAAM,EAAA,IAAA;AAAA,QACN,OAAS,EAAA;AAAA,UACP,KAAA,EAAO,MAAM,QAAA,GAAW,YAAY,CAAA,IAAA;AAAA,UACpC,aAAa,MAAM,GAAA;AAAA,UACnB,kBAAoB,EAAA,MAClB,8BAA+B,CAAA,mCAAA,CAAoC,GAAK,EAAA,YAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAKhF,IAAA,IAAA,CAAK,qBAAqB,WAAY;AACpC,MAAI,IAAA,MAAA,CAAO,eAAe,MAAO,CAAA,WAAA,CAAY,aAAa,MAAO,CAAA,WAAA,CAAY,UAAU,MAAQ,EAAA;AAC7F,QAAA,OAAO,MAAO,CAAA,WAAA,CAAY,SAAU,CAAA,MAAA,CAAO,UAAU,CAAG,EAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAE1D,MAAO,OAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1PR,MAAM,oDAAuD,GAAA,2CAAA,CAAA;AAEpE,MAAA,CAAO,oDAAsD,EAAA;AAAA,EAC3D,6DAAA;AAAA,CAAA,CAAA;;ACHK,MAAM,0CAA6C,GAAA,4CAAA,CAAA;AAE1D,MAAA,CAAO,0CAA4C,EAAA,EAAA,CAAA,CAChD,OAAQ,CAAA,+BAAA,EAAiC,WAAY;AACpD,EAAA,SAAA,yBAAA,CAAmC,OAAM,MAAQ,EAAA;AAC/C,IAAA,MAAM,OAAU,GAAA,2BAAA,CAAA;AAChB,IAAI,IAAA,CAAC,OAAQ,CAAA,IAAA,CAAK,KAAO,CAAA,EAAA;AACvB,MAAA,MAAA,CAAO,IACL,CAAA,2HAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAMN,EAAA,SAAA,QAAA,CAAkB,KAAM,EAAA;AACtB,IAAA,MAAM,QAAW,GAAA,EAAA,CAAA;AACjB,IAAA,MAAM,MAAS,GAAA,EAAA,CAAA;AAEf,IAAI,IAAA,KAAA,IAAQ,MAAK,MAAQ,EAAA;AACvB,MAAA,yBAAA,CAA0B,KAAM,EAAA,MAAA,CAAA,CAAA;AAAA,KAAA;AAGlC,IAAO,OAAA;AAAA,MACL,QAAA;AAAA,MACA,MAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAIJ,EAAO,OAAA;AAAA,IACL,QAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA,CAGH,GAAI,CAAA;AAAA,EACH,+BAAA;AAAA,EACA,SAAU,6BAA+B,EAAA;AACvC,IAAA,wBAAA,CAAyB,kBAAkB,OAAS,EAAA,6BAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACzC1D,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;AACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;AACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;AACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAChD,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC9B,KAAK;AACL,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC5B,GAAG;AACH;AACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;AACnC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,GAAG;AACH;;;;;ACKO,MAAM,YAAe,GAAA,kBAAA;AAC5B,MAAA,CAAO,YAAc,EAAA;AAAA,EACnB,qDAAA;AAAA,EACA,mDAAA;AAAA,EACA,qDAAA;AAAA,EACA,yCAAA;AAAA,EACA,oDAAA;AAAA,EACA,yCAAA;AAAA,EACA,oEAAA;AAAA,EACA,8DAAA;AAAA,EACA,wCAAA;AAAA,EACA,2CAAA;AAAA,EACA,wDAAA;AAAA,EACA,0DAAA;AAAA,EACA,kDAAA;AAAA,EACA,0DAAA;AAAA,EACA,qDAAA;AAAA,EACA,mDAAA;AAAA,EACA,6CAAA;AAAA,EACA,wCAAA;AAAA,EACA,wBAAA;AAAA,EACA,0CAAA;AAAA,CAAA,CAAA,CACC,OAAO,WAAY;AACpB,EAAA,qBAAA,CAAsB,iBAAiB,OAAS,EAAA;AAAA,IAC9C,IAAM,EAAA,OAAA;AAAA,IACN,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA,IAAA;AAAA,KAAA;AAAA,IAER,KAAO,EAAA;AAAA,MACL,MAAQ,EAAA,kBAAA;AAAA,KAAA;AAAA,IAEV,WAAa,EAAA;AAAA,MACX,WAAa,EAAA,6BAAA;AAAA,MACb,kBAAoB,EAAA,uDAAA;AAAA,MACpB,iBAAmB,EAAA,6BAAA;AAAA,MACnB,2BAA6B,EAAA,+DAAA;AAAA,MAC7B,0BAA4B,EAAA,2BAAA;AAAA,MAC5B,cAAgB,EAAA,gCAAA;AAAA,MAChB,oBAAsB,EAAA,sCAAA;AAAA,KAAA;AAAA,IAExB,QAAU,EAAA;AAAA,MACR,mBAAqB,EAAA,0BAAA;AAAA,MACrB,kBAAoB,EAAA,iDAAA;AAAA,MACpB,iBAAmB,EAAA,0BAAA;AAAA,KAAA;AAAA,IAErB,YAAc,EAAA;AAAA,MACZ,WAAa,EAAA,8BAAA;AAAA,MACb,kBAAoB,EAAA,wDAAA;AAAA,MACpB,iBAAmB,EAAA,8BAAA;AAAA,MACnB,6BAA+B,EAAA,0DAAA;AAAA,MAC/B,4BAA8B,EAAA,6BAAA;AAAA,MAC9B,uBAAyB,EAAA,4BAAA;AAAA,KAAA;AAAA,IAE3B,aAAe,EAAA;AAAA,MACb,WAAa,EAAA,+BAAA;AAAA,MACb,MAAQ,EAAA,0BAAA;AAAA,MACR,kBAAoB,EAAA,0DAAA;AAAA,MACpB,iBAAmB,EAAA,+BAAA;AAAA,MACnB,8BAAgC,EAAA,4DAAA;AAAA,MAChC,6BAA+B,EAAA,8BAAA;AAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA;AAKrC,0BAA2B,CAAA,gBAAA,CAAiB,SAAS,CAAC,UAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}