@spinnaker/ecs 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/common/footer.component.ts","../src/common/common.module.ts","../src/ecs.help.ts","../src/ecs.settings.ts","../src/ecsCluster/ecsCluster.read.service.ts","../src/iamRoles/iamRole.read.service.ts","../src/instance/details/instance.details.controller.js","../src/loadBalancer/TargetGroup.tsx","../src/loadBalancer/EcsLoadBalancerClusterContainer.tsx","../src/loadBalancer/listener.tsx","../src/loadBalancer/details/loadBalancerDetails.tsx","../src/loadBalancer/details/targetGroupDetails.tsx","../src/loadBalancer/loadBalancer.transformer.ts","../src/loadBalancer/targetGroup.states.ts","../src/logo/ecs.logo.svg","../src/metricAlarm/metricAlarm.read.service.ts","../src/pipeline/stages/destroyAsg/ecsDestroyAsgStage.js","../src/pipeline/stages/disableAsg/ecsDisableAsgStage.js","../src/pipeline/stages/disableCluster/ecsDisableClusterStage.js","../src/pipeline/stages/enableAsg/ecsEnableAsgStage.js","../src/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.js","../src/pipeline/stages/resizeAsg/ecsResizeAsgStage.js","../src/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.js","../src/placementStrategy/placementStrategy.service.ts","../src/secrets/secret.read.service.ts","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.ts","../src/securityGroup/securityGroup.transformer.js","../src/securityGroup/securityGroup.module.ts","../src/serviceDiscovery/serviceDiscovery.read.service.ts","../src/serverGroup/configure/serverGroupConfiguration.service.ts","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.js","../src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.js","../src/serverGroup/configure/wizard/capacityProvider/CapacityProvider.tsx","../src/serverGroup/configure/wizard/container/Container.tsx","../src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.js","../src/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.js","../src/serverGroup/configure/wizard/logging/logging.component.ts","../src/serverGroup/configure/wizard/networking/Networking.tsx","../src/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.tsx","../src/serverGroup/configure/wizard/taskDefinition/TaskDefinition.tsx","../src/serverGroup/details/resize/resizeCapacity.component.ts","../src/serverGroup/details/resize/resizeServerGroup.controller.js","../src/serverGroup/details/rollback/rollbackServerGroup.controller.js","../src/serverGroup/serverGroup.transformer.ts","../src/serverGroup/details/serverGroupDetails.ecs.controller.js","../src/serverGroup/details/serverGroupDetails.module.ts","../src/serverGroup/events/serverGroupEventsReader.service.ts","../src/serverGroup/events/events.controller.ts","../src/serverGroup/events/events.component.ts","../src/serverGroup/serverGroup.module.ts","../../../node_modules/style-inject/dist/style-inject.es.js","../src/ecs.module.ts"],"sourcesContent":["import type { IComponentOptions } from 'angular';\nimport { module } from 'angular';\n\nconst footerComponent: IComponentOptions = {\n bindings: {\n action: '&',\n isValid: '&',\n cancel: '&',\n account: '=?',\n verification: '=?',\n },\n template: `\n <div class=\"modal-footer\">\n <user-verification account=\"$ctrl.account\" verification=\"$ctrl.verification\"></user-verification>\n <button type=\"submit\" ng-click=\"$ctrl.action()\" style=\"display:none\"></button> <!-- Allows form submission via enter keypress-->\n <button class=\"btn btn-default\" ng-click=\"$ctrl.cancel()\">Cancel</button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n ng-click=\"$ctrl.action()\"\n ng-disabled=\"!$ctrl.isValid()\">\n Submit\n </button>\n </div>\n `,\n controller: () => {},\n};\n\nexport const ECS_FOOTER_COMPONENT = 'spinnaker.ecs.footer';\nmodule(ECS_FOOTER_COMPONENT, []).component('ecsFooter', footerComponent);\n","import { module } from 'angular';\n\nimport { ECS_FOOTER_COMPONENT } from './footer.component';\n\nexport const COMMON_MODULE = 'spinnaker.ecs.common';\nmodule(COMMON_MODULE, [ECS_FOOTER_COMPONENT]);\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'ecs.loadBalancer.targetGroup':\n '<p>A <em>target group</em> is attached to an application / network load balancer and is a target for load balancer traffic.</p> <p> You need to create both the application load balancer and target groups prior to being able to use them in your pipeline.</p>',\n 'ecs.serverGroup.clusterName':\n '<p>The name of the ECS cluster (group of underlying EC2 hosts) onto which your application will be deployed.</p><p>Note that suggestions here are dependent on the selected account and region combination.</p>',\n 'ecs.stage.findImageByTags.labelOrSha':\n \"<p>As of now, only Amazon's ECR is supported as a source docker repository.</p>\",\n 'ecs.serverGroup.stack':\n '<p>An environment variable available within your container, and on which you should base your application configuration at runtime.</p> <p>Typical values for this parameter are <i>staging</i>, <i>prod</i>, etc. Keep this parameter short!</p>',\n 'ecs.serverGroup.detail':\n '<p>An environment variable available within your container, and on which you should base your application configuration at runtime.</p> <p>Typical values for this parameter are <i>app</i>, <i>worker</i>, <i>migrator</i>, etc. Keep this parameter short!</p>',\n 'ecs.capacity.overwrite':\n \"<p>Checking this box will have the previous server group's capacity overwrite the new <i>min</i>, <i>max</i> and <i>desired capacity</i> parameters if a previous server group exists.</p>\",\n 'ecs.capacity.desired': '<p>The starting number of containers, before any autoscaling happens.</p>',\n 'ecs.capacity.minimum':\n '<p>The minimum number of containers you can reach as a result of autoscaling.</p> <p>Typically, this represents the bare minimum you can afford to run without impacting your capacity to meet your SLA (Service Level Agreement) objectives</p>',\n 'ecs.capacity.maximum': '<p>The maximal number of containers you can reach as a result of autoscaling.</p>',\n 'ecs.capacity.reserved.computeUnits':\n '<p>The assured minimal amount of computing capacity your container will be able to use. 1024 units are equal to 1 AWS virtual CPU</p> <p>If other containers on your underlying host are not using their reserved compute capacity, this container will be able to use it.</p>',\n 'ecs.capacity.reserved.memory':\n '<p>The maximal amount of memory that your container can use, in megabytes. Exceeding this amount may result in termination of your container.</p><p>1024 mb = 1 gb</p>',\n 'ecs.loadbalancing.targetPort': '<p>The port on which your application is listening for incoming traffic</p>',\n 'ecs.iamrole':\n '<p>The IAM role that your container (task, in AWS wording) will inherit. </p><p>Define a role only if your application needs to access AWS APIs</p>',\n 'ecs.dockerimage': 'Docker image for your container, such as nginx:latest',\n 'ecs.dockerimagecredentials':\n '<p>The AWS Secrets Manager secret that contains private registry credentials.</p><p>Define credentials only for private registries other than Amazon ECR.</p>',\n 'ecs.placementConstraints':\n '<p>Rules for task placement. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html\" target=\"_blank\">AWS documentation</a> for more details. </p>',\n 'ecs.placementConstraintType':\n '<p>To ensure that each task in a particular group is running on a different container instance, use distinctInstance. To restrict the selection to a group of valid candidates, use memberOf. </p>',\n 'ecs.placementConstraintExpression':\n '<p>A cluster query language expression to apply to memberOf constraints. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html\" target=\"_blank\">AWS documentation</a> for more details.</p>',\n 'ecs.placementStrategy':\n '<p>The strategy the container scheduler will be using. See <a href=\"http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-strategies.html\" target=\"_blank\">AWS documentation</a> for more details. </p><p>You should at least balance across availability zones</p><p>Custom placement strategies have not been implemented yet.</p>',\n 'ecs.platformVersion': '<p>Defaults to the latest platform version.</p>',\n 'ecs.enableDeploymentCircuitBreaker': '<p>Enable circuit breaker for the ECS service.</p>',\n 'ecs.capacity.copySourceScalingPoliciesAndActions':\n '<p>Copy Application Autoscaling policies and their associated alarms from the previous ECS service.</p>',\n 'ecs.launchtype': '<p>Launch service tasks on your own EC2 instances or on Fargate.</p>',\n 'ecs.healthgraceperiod':\n '<p>How long a container will be kept alive despite the load balancer health checks, in seconds.</p>',\n 'ecs.publicip': '<p>Assign a public IP address to each task.</p>',\n 'ecs.networkMode':\n '<p>awsvpc is the only networking mode that allows you to use Elastic Network Interfaces (ENI). The default value converts to Bridge on Linux, and NAT on Windows.</p>',\n 'ecs.subnet':\n '<p>The subnet group(s) on which your server group will be deployed. All subnet groups selected must exist within the same VPC.</p>',\n 'ecs.securityGroups': '<p>The security group(s) name(s) your containers are deployed with.</p>',\n 'ecs.dockerLabels':\n '<p>Additional labels applied to your Docker container. This metadata can be used to identify your containers, or in conjunction with logging options. Maps directly to the <a href=\"https://docs.docker.com/engine/reference/commandline/run/#set-metadata-on-container--l---label---label-file\"><b>--label</b> Docker flag</a>.</p> <p>Spinnaker will automatically add the spinnaker.servergroup, spinnaker.stack, spinnaker.detail labels for non-null values.</p>',\n 'ecs.logDriver':\n '<p>The container\\'s logging driver. This directly maps to the <a href=\"https://docs.docker.com/config/containers/logging/configure/#configure-the-default-logging-driver\"><b>--log-driver</b> Docker flag.</a></p>',\n 'ecs.logOptions':\n '<p>A map of log options. This directly maps with the <a href=\"https://docs.docker.com/config/containers/logging/log_tags/\"><b>--log-opt</b> Docker flag </a></p>',\n 'ecs.taskDefinition':\n '<p>The source of the ECS Task Definition. Task Definition contents can either be entered manually via input fields or from a selected JSON file artifact. Artifact file contents should be structured as an ECS \"RegisterTaskDefinition\" request.</p>',\n 'ecs.taskDefinitionArtifact': '<p>The artifact containing the ECS Task Definition.</p>',\n 'ecs.containerMappings':\n '<p>The list of expected containers within the Task Definition and which container image they should use. Containers in the Task Definition which are not specified here will be registered as they appear in the artifact.</p>',\n 'ecs.containerMappingName':\n '<p>The name of the container. Name should match the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html#ECS-Type-ContainerDefinition-name\"><b>containerDefinition.name</b></a> field as it appears in the Task Definition.</p>',\n 'ecs.containerMappingImage': '<p>The container image the named container should run.</p>',\n 'ecs.targetGroupMappings':\n '<p>The list of target groups through which the ECS service will receive load balancer traffic. Each target group is mapped to a container name and port within the Task Definition to specify which container should be registered to the target group.</p>',\n 'ecs.loadBalancedContainer':\n '<p>The container in the Task Definition that should receive traffic from the load balancer. Required if a load balancer target group has been specified.</p>',\n 'ecs.tags': '<p>The tags to apply to the task definition and the service',\n 'ecs.environmentVariables':\n '<p>The environment variable(s) your container are deployed with. SERVER_GROUP, CLOUD_STACK and CLOUD_DETAIL environment variables are used during deployment to identify the task and cannot be set here.</p>',\n 'ecs.serviceDiscovery': '<p>The AWS Cloud Map service discovery registries to assign to this service</p>',\n 'ecs.serviceDiscoveryRegistry': '<p>The AWS Cloud Map service to use for service discovery registration</p>',\n 'ecs.serviceDiscoveryContainerPort':\n '<p>The port to be used for your service discovery service. Required only for services using bridge or host network mode, and for services using awsvpc network mode and a type SRV DNS record',\n 'ecs.serviceDiscoveryContainerName':\n '<p>The container name value, already specified in the task definition, to be used for your service discovery service.</p>',\n 'ecs.computeOptions':\n '<p>Specify either a <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\" target=\"_blank\">launch type</a> (default) or <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-capacity-providers.html\" target=\"_blank\">capacity providers</a> for running your ECS service.</p>',\n 'ecs.capacityProviderStrategy':\n '<p>A capacity provider strategy gives you control over how your tasks use one or more capacity providers. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-capacity-providers.html#capacity-providers-concepts\" target=\"_blank\">AWS documentation</a> for more details. </p>',\n 'ecs.capacityProviderName': '<p>The short name of the capacity provider.</p>',\n 'ecs.capacityProviderBase':\n '<p>Designates how many tasks, at a minimum, to run on the specified capacity provider. Only one capacity provider in a capacity provider strategy can have a <em>base</em> defined.</p>',\n 'ecs.capacityProviderWeight':\n '<p>Designates the relative percentage of the total number of tasks launched that should use the specified capacity provider.</p>',\n 'ecs.evaluateExpression':\n '<p>Whether to evaluate <a href=\"https://spinnaker.io/guides/user/pipeline/expressions/\" target=\"_blank\"><b>pipeline expressions</b></a> within the task definition artifact in this stage. Checking this box let\\'s you evaluate your task definition artifact coming from external sources.(e.g. GitHub) </p>',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IECSProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n zone?: string;\n };\n}\n\nexport const IECSProviderSettings: IECSProviderSettings = (SETTINGS.providers.ecs as IECSProviderSettings) || {\n defaults: {},\n};\nif (IECSProviderSettings) {\n IECSProviderSettings.resetToOriginal = SETTINGS.resetProvider('ecs');\n}\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nimport type { IEcsCapacityProviderDetails } from './IEcsCapacityProviderDetails';\nimport type { IEcsClusterDescriptor } from './IEcsCluster';\n\nexport class EcsClusterReader {\n public listClusters(): PromiseLike<IEcsClusterDescriptor[]> {\n return REST('/ecs/ecsClusters').get();\n }\n\n public describeClusters(account: string, region: string): PromiseLike<IEcsCapacityProviderDetails[]> {\n if (account != null && region != null) {\n return REST('/ecs/ecsClusterDescriptions').path(account).path(region).get();\n }\n return {} as PromiseLike<IEcsCapacityProviderDetails[]>;\n }\n}\n\nexport const ECS_CLUSTER_READ_SERVICE = 'spinnaker.ecs.ecsCluster.read.service';\n\nmodule(ECS_CLUSTER_READ_SERVICE, []).service('ecsClusterReader', EcsClusterReader);\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { IRoleDescriptor } from './IRole';\n\nexport class IamRoleReader {\n public listRoles(provider: string): PromiseLike<IRoleDescriptor[]> {\n return REST('/roles').path(provider).get();\n }\n}\n\nexport const IAM_ROLE_READ_SERVICE = 'spinnaker.ecs.iamRole.read.service';\n\nmodule(IAM_ROLE_READ_SERVICE, []).service('iamRoleReader', IamRoleReader);\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 { applyHealthCheckInfoToTargetGroups, getAllTargetGroups } from '@spinnaker/amazon';\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n SETTINGS,\n} from '@spinnaker/core';\n\nexport const ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.ecs.instance.details.controller';\nexport const name = ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'ecsInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n 'moniker',\n 'environment',\n '$q',\n 'overrides',\n function ($scope, $state, $uibModal, instance, app, moniker, environment, $q, overrides) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('ecs', 'instance.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n instancePort: _.get(app, 'attributes.instancePort') || SETTINGS.defaultInstancePort || 80,\n };\n\n $scope.application = app;\n $scope.moniker = moniker;\n $scope.environment = environment;\n\n const cloudProvider = 'ecs';\n const defaultRequestParams = { cloudProvider: cloudProvider };\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 !== 'Ecs' || metric.state !== 'Unknown';\n });\n\n // augment with target group healthcheck data\n const targetGroups = getAllTargetGroups(app.loadBalancers.data);\n applyHealthCheckInfoToTargetGroups(displayableMetrics, targetGroups, instance.account);\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, targetGroup, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n targetGroup = [];\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 targetGroup = serverGroup.targetGroup;\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 (\n 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 loadBalancer.targetGroup.some(function (targetGroup) {\n return targetGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n targetGroup = targetGroup.name;\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\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 (\n 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 loadBalancer.targetGroup.some(function (targetGroup) {\n targetGroup.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 }\n\n if (instanceSummary && account && region) {\n instanceSummary.account = account;\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then((details) => {\n if ($scope.$$destroyed) {\n return;\n }\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 $scope.instance.targetGroup = targetGroup;\n if ($scope.instance.networkInterfaces) {\n const permanentNetworkInterfaces = $scope.instance.networkInterfaces.filter(\n (f) => f.attachment.deleteOnTermination === false,\n );\n if (permanentNetworkInterfaces.length) {\n $scope.instance.permanentIps = permanentNetworkInterfaces.map((f) => f.privateIpAddress);\n }\n }\n $scope.baseIpAddress = details.publicDnsName || details.privateIpAddress;\n if (overrides.instanceDetailsLoaded) {\n overrides.instanceDetailsLoaded();\n }\n }, autoClose);\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 function autoClose() {\n if ($scope.$$destroyed) {\n return;\n }\n if (app.isStandalone) {\n $scope.state.loading = false;\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.notFoundStandalone = true;\n RecentHistoryService.removeLastItem('instances');\n } else {\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n }\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const healthMetrics = instance.health || [];\n const discoveryHealth = healthMetrics.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, defaultRequestParams);\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, defaultRequestParams);\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.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, defaultRequestParams);\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, defaultRequestParams);\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 const healthMetrics = instance.health || [];\n return healthMetrics.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 { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { IInstanceCounts } from '@spinnaker/core';\nimport { LoadBalancerServerGroup } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer, IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport interface IEcsTargetGroupProps {\n loadBalancer: IEcsLoadBalancer;\n targetGroup: IEcsTargetGroup;\n showServerGroups: boolean;\n showInstances: boolean;\n}\n\nexport class EcsTargetGroup extends React.Component<IEcsTargetGroupProps> {\n public render(): React.ReactElement<EcsTargetGroup> {\n const { targetGroup, loadBalancer, showServerGroups } = this.props;\n\n const params = {\n loadBalancerName: loadBalancer.name,\n region: targetGroup.region,\n accountId: targetGroup.account,\n name: targetGroup.targetGroupName,\n vpcId: targetGroup.vpcId,\n provider: targetGroup.cloudProvider,\n };\n\n // info not yet available; HealthCounts component requires it,\n // but will not render if no values are defined.\n const emptyInstanceCounts: IInstanceCounts = {\n up: undefined,\n down: undefined,\n starting: undefined,\n succeeded: undefined,\n failed: undefined,\n unknown: undefined,\n outOfService: undefined,\n };\n\n return (\n <div className=\"target-group-container container-fluid no-padding\">\n <UISrefActive class=\"active\">\n <UISref to=\".ecsTargetGroupDetails\" params={params}>\n <div className={`clickable clickable-row row no-margin-y target-group-header`}>\n <div className=\"col-md-8 target-group-title\">{targetGroup.targetGroupName}</div>\n </div>\n </UISref>\n </UISrefActive>\n {showServerGroups &&\n targetGroup.serverGroups.map((sgName) => {\n return (\n <LoadBalancerServerGroup\n key={sgName}\n account={targetGroup.account}\n region={targetGroup.region}\n serverGroup={{\n account: targetGroup.account,\n cloudProvider: targetGroup.cloudProvider,\n cluster: sgName,\n instanceCounts: emptyInstanceCounts,\n instances: targetGroup.instances,\n name: sgName,\n type: targetGroup.type,\n region: targetGroup.region,\n }}\n showInstances={false} // TODO: use prop when instanceCounts available\n />\n );\n })}\n </div>\n );\n }\n}\n","import { isEqual } from 'lodash';\nimport React from 'react';\n\nimport type { ILoadBalancerClusterContainerProps } from '@spinnaker/core';\n\nimport { EcsTargetGroup } from './TargetGroup';\nimport type { IEcsLoadBalancer } from '../domain/IEcsLoadBalancer';\n\nexport class EcsLoadBalancerClusterContainer extends React.Component<ILoadBalancerClusterContainerProps> {\n public shouldComponentUpdate(nextProps: ILoadBalancerClusterContainerProps) {\n const serverGroupsDiffer = () =>\n !isEqual(\n (nextProps.serverGroups || []).map((g) => g.name),\n (this.props.serverGroups || []).map((g) => g.name),\n );\n const targetGroupsDiffer = () =>\n !isEqual(\n ((nextProps.loadBalancer as IEcsLoadBalancer).targetGroups || []).map((t) => t.targetGroupName),\n ((this.props.loadBalancer as IEcsLoadBalancer).targetGroups || []).map((t) => t.targetGroupName),\n );\n return (\n nextProps.showInstances !== this.props.showInstances ||\n nextProps.showServerGroups !== this.props.showServerGroups ||\n nextProps.loadBalancer !== this.props.loadBalancer ||\n serverGroupsDiffer() ||\n targetGroupsDiffer()\n );\n }\n\n public render(): React.ReactElement<EcsLoadBalancerClusterContainer> {\n const { loadBalancer, showInstances, showServerGroups } = this.props;\n const lb = loadBalancer as IEcsLoadBalancer;\n\n const TargetGroups = lb.targetGroups.map((targetGroup) => {\n return (\n <EcsTargetGroup\n key={targetGroup.targetGroupName}\n loadBalancer={loadBalancer as IEcsLoadBalancer}\n targetGroup={targetGroup}\n showInstances={showInstances}\n showServerGroups={showServerGroups}\n />\n );\n });\n\n return <div className=\"cluster-container\">{TargetGroups}</div>;\n }\n}\n","import React from 'react';\n\nimport type { IEcsListener } from '../domain/IEcsLoadBalancer';\n\nexport interface IEcsListenerProps {\n listener: IEcsListener;\n}\n\nexport class EcsListener extends React.Component<IEcsListenerProps> {\n constructor(props: IEcsListenerProps) {\n super(props);\n }\n\n private getTargetGroupNameFromArn(arn: string): string {\n const parts = arn.split('/');\n if (parts.length < 0) {\n return arn;\n }\n return parts[1];\n }\n\n public render(): React.ReactElement<EcsListener> {\n const { port, protocol, defaultActions } = this.props.listener;\n\n // TODO: retrieve and display 'rules' in addition to default actions\n return (\n <div>\n <h4>\n {protocol}:{port}\n </h4>\n <div style={{ paddingLeft: 10 }}>\n <i>default actions</i>\n <ul>\n {defaultActions.map((action, i) => {\n if (action.type == 'forward') {\n return (\n <li key={i}>\n &rarr;\n <i className=\"fa fa-fw fa-crosshairs icon\" aria-hidden=\"true\"></i>\n <span>\n {action.targetGroupArn ||\n action.forwardConfig.targetGroups.map((tg) => {\n return this.getTargetGroupNameFromArn(tg.targetGroupArn);\n })}\n </span>\n </li>\n );\n } else {\n return (\n <li key={i}>\n {action.type}:{' '}\n {action.redirectConfig.statusCode ||\n action.fixedResponseConfig.statusCode ||\n action.authenticateOidcConfig.clientId ||\n action.authenticateCognitoActionConfig.userPoolDomain}\n </li>\n );\n }\n })}\n </ul>\n </div>\n </div>\n );\n }\n}\n","import { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { AccountTag, CollapsibleSection, Spinner, timestamp } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer } from '../../domain/IEcsLoadBalancer';\nimport { EcsListener } from '../listener';\n\ninterface IEcsLoadBalancerFromStateParams {\n accountId: string;\n region: string;\n name: string;\n vpcId: string;\n}\n\ninterface IEcsLoadBalancerDetailsState {\n loadBalancer: IEcsLoadBalancer;\n loadBalancerNotFound?: string;\n loading: boolean;\n refreshListenerUnsubscribe: () => void;\n}\n\nexport interface IEcsLoadBalancerDetailsProps {\n app: Application;\n accountId: string;\n loadBalancer: IEcsLoadBalancerFromStateParams;\n}\n\nexport class EcsLoadBalancerDetails extends React.Component<\n IEcsLoadBalancerDetailsProps,\n IEcsLoadBalancerDetailsState\n> {\n constructor(props: IEcsLoadBalancerDetailsProps) {\n super(props);\n this.state = {\n loading: true,\n loadBalancer: undefined,\n refreshListenerUnsubscribe: () => {},\n };\n\n props.app\n .getDataSource('loadBalancers')\n .ready()\n .then(() => this.extractLoadBalancer());\n }\n\n public componentWillUnmount(): void {\n this.state.refreshListenerUnsubscribe();\n }\n\n private extractLoadBalancer(): void {\n const { name, region } = this.props.loadBalancer;\n const loadBalancer: IEcsLoadBalancer = this.props.app\n .getDataSource('loadBalancers')\n .data.find((test: IEcsLoadBalancer) => {\n return test.name === name && test.account === this.props.loadBalancer.accountId && test.region === region;\n });\n\n this.setState({\n loading: false,\n loadBalancer,\n });\n this.state.refreshListenerUnsubscribe();\n\n if (loadBalancer) {\n this.setState({\n refreshListenerUnsubscribe: this.props.app\n .getDataSource('loadBalancers')\n .onRefresh(null, () => this.extractLoadBalancer()),\n });\n } else {\n this.setState({\n refreshListenerUnsubscribe: () => {},\n });\n }\n }\n\n public render(): React.ReactElement<EcsLoadBalancerDetails> {\n const loadBalancerName = this.props.loadBalancer.name;\n const { loadBalancer, loading } = this.state;\n const { accountId } = this.props;\n\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Load balancer not found.</h3>\n </div>\n </div>\n </div>\n );\n\n const loadBalancerHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <i className=\"fa icon-sitemap\" />\n <h3 className=\"horizontal middle space-between flex-1\">{loadBalancerName}</h3>\n </div>\n </div>\n );\n\n const loadBalancerContent = () => (\n <div className=\"content\">\n <CollapsibleSection heading=\"Load Balancer Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Created</dt>\n <dd>{timestamp(loadBalancer.createdTime)}</dd>\n <dt>In</dt>\n <dd>\n <AccountTag account={accountId} />\n <br />\n {loadBalancer.region}\n </dd>\n <dt>VPC</dt>\n <dd>{loadBalancer.vpcId}</dd>\n <dt>Type</dt>\n <dd>{loadBalancer.loadBalancerType}</dd>\n <dt>IP Type</dt>\n <dd>{loadBalancer.ipAddressType}</dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Availability Zones</dt>\n <dd>\n <ul>\n {loadBalancer.availabilityZones.map((az) => {\n return <li key={az}>{az}</li>;\n })}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Target Groups</dt>\n <dd>\n <ul>\n {loadBalancer.targetGroups.map((tg) => {\n return (\n <li key={tg.targetGroupName}>\n <UISrefActive class=\"active\">\n <UISref\n to=\"^.ecsTargetGroupDetails\"\n params={{\n loadBalancerName: loadBalancer.name,\n region: loadBalancer.region,\n accountId: loadBalancer.account,\n name: tg.targetGroupName,\n vpcId: tg.vpcId,\n provider: loadBalancer.cloudProvider,\n }}\n >\n <a>{tg.targetGroupName}</a>\n </UISref>\n </UISrefActive>\n </li>\n );\n })}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>DNS Name</dt>\n <dd>\n <a target=\"_blank\" href={'http://' + loadBalancer.dnsname}>\n {loadBalancer.dnsname}\n </a>\n </dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Status\" defaultExpanded={false}>\n <span>Select a target group to check the instance health status from the view of its server groups.</span>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Listeners\" defaultExpanded={false}>\n {loadBalancer.listeners ? (\n loadBalancer.listeners.map((listener, index) => {\n return (\n <div key={index}>\n <span>\n <EcsListener listener={listener}></EcsListener>\n </span>\n </div>\n );\n })\n ) : (\n <li>No listeners provided.</li>\n )}\n </CollapsibleSection>\n <CollapsibleSection heading=\"Firewalls\" defaultExpanded={false}>\n <ul>\n {loadBalancer.securityGroups ? (\n loadBalancer.securityGroups.map((sg) => {\n return <li key={sg}>{sg}</li>;\n })\n ) : (\n <li>No security groups provided.</li>\n )}\n </ul>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Subnets\" defaultExpanded={false}>\n <ul>\n {loadBalancer.subnets.map((subnet) => {\n return <li key={subnet}>{subnet}</li>;\n })}\n </ul>\n </CollapsibleSection>\n </div>\n );\n\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && loadBalancerHeader()}\n {!loading && !loadBalancer && notFoundContent()}\n {!loading && loadBalancer && loadBalancerContent()}\n </div>\n );\n }\n}\n","import { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { AccountTag, CollapsibleSection, Spinner } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer, IEcsTargetGroup } from '../../domain/IEcsLoadBalancer';\n\ninterface IEcsTargetGroupFromStateParams {\n loadBalancerName: string;\n targetGroupName: string;\n region: string;\n vpcId: string;\n}\n\ninterface IEcsTargetGroupDetailsState {\n loadBalancer: IEcsLoadBalancer;\n targetGroup: IEcsTargetGroup;\n targetGroupNotFound?: string;\n loading: boolean;\n refreshListenerUnsubscribe: () => void;\n}\n\nexport interface IEcsTargetGroupProps {\n app: Application;\n accountId: string;\n name: string;\n targetGroup: IEcsTargetGroupFromStateParams;\n provider: string;\n}\n\nexport class EcsTargetGroupDetails extends React.Component<IEcsTargetGroupProps, IEcsTargetGroupDetailsState> {\n constructor(props: IEcsTargetGroupProps) {\n super(props);\n this.state = {\n loading: true,\n targetGroup: undefined,\n loadBalancer: undefined,\n refreshListenerUnsubscribe: () => {},\n };\n\n props.app\n .getDataSource('loadBalancers')\n .ready()\n .then(() => this.extractTargetGroup());\n }\n\n public componentWillUnmount(): void {\n this.state.refreshListenerUnsubscribe();\n }\n\n private extractTargetGroup(): void {\n const { loadBalancerName, region, targetGroupName } = this.props.targetGroup;\n const loadBalancer: IEcsLoadBalancer = this.props.app\n .getDataSource('loadBalancers')\n .data.find((test: IEcsLoadBalancer) => {\n return test.name === loadBalancerName && test.account === this.props.accountId && test.region === region;\n });\n\n this.setState({\n loadBalancer,\n });\n this.state.refreshListenerUnsubscribe();\n\n if (!loadBalancer) {\n this.setState({\n loading: false,\n targetGroup: null,\n });\n } else {\n const targetGroup: IEcsTargetGroup = loadBalancer.targetGroups.find(\n (tg) => tg.targetGroupName === targetGroupName,\n );\n if (!targetGroup) {\n this.setState({\n loading: false,\n targetGroup: null,\n });\n }\n\n if (targetGroup) {\n this.setState({\n loading: false,\n targetGroup,\n });\n\n if (targetGroup) {\n this.setState({\n refreshListenerUnsubscribe: this.props.app\n .getDataSource('loadBalancers')\n .onRefresh(null, () => this.extractTargetGroup()),\n });\n } else {\n this.setState({\n refreshListenerUnsubscribe: () => {},\n });\n }\n }\n }\n }\n\n public render(): React.ReactElement<EcsTargetGroupDetails> {\n const { name, accountId } = this.props;\n const region = this.props.targetGroup.region;\n const { targetGroup, loadBalancer, loading } = this.state;\n\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Target group not found.</h3>\n </div>\n </div>\n </div>\n );\n\n const targetGroupHeader = () => (\n <div className=\"header\">\n <div className=\"header-text horizontal middle\">\n <i className=\"fa fa-crosshairs icon\" aria-hidden=\"true\"></i>\n <h3 className=\"horizontal middle space-between flex-1\">{name}</h3>\n </div>\n </div>\n );\n\n const targetGroupContent = () => (\n <div className=\"content\">\n <CollapsibleSection heading=\"Target Group Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>In</dt>\n <dd>\n <AccountTag account={accountId}></AccountTag>\n <br />\n {targetGroup.region}\n </dd>\n <dt>VPC</dt>\n <dd>{targetGroup.vpcId}</dd>\n <dt>Protocol</dt>\n <dd>{targetGroup.protocol}</dd>\n <dt>Port</dt>\n <dd>{targetGroup.port}</dd>\n <dt>Target Type</dt>\n <dd>{targetGroup.targetType.toUpperCase()}</dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Load Balancers</dt>\n <dd>\n {/* TODO: use UISref to display/highlight LBs in this app. See core/.../LoadBalancer.tsx */}\n <ul className=\"collapse-margin-on-filter-collapse\">\n {targetGroup.loadBalancerNames ? (\n targetGroup.loadBalancerNames.map((lb, i) => {\n return <li key={i}>{lb}</li>;\n })\n ) : (\n <li>No load balncers provided.</li>\n )}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Load Balancer DNS Name</dt>\n <dd>\n <a target=\"_blank\" href={'http://' + loadBalancer.dnsname}>\n {loadBalancer.dnsname}\n </a>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Server Groups</dt>\n <dd>\n <ul className=\"collapse-margin-on-filter-collapse\">\n {targetGroup.serverGroups.map((sg, i) => {\n return (\n <li key={i}>\n <UISrefActive class=\"active\">\n <UISref\n to=\"^.serverGroup\"\n params={{\n region: region,\n accountId: accountId,\n serverGroup: sg,\n provider: 'ecs',\n }}\n >\n <a>{sg}</a>\n </UISref>\n </UISrefActive>\n </li>\n );\n })}\n </ul>\n </dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Health Checks\" defaultExpanded={false}>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Target</dt>\n <dd>\n {targetGroup.healthCheckProtocol}:{targetGroup.healthCheckPort}\n {targetGroup.healthCheckPath}\n </dd>\n <dt>Timeout</dt>\n <dd>{targetGroup.healthCheckTimeoutSeconds} seconds</dd>\n <dt>Interval</dt>\n <dd>{targetGroup.healthCheckIntervalSeconds} seconds</dd>\n <dt>Healthy Threshold</dt>\n <dd>{targetGroup.healthyThresholdCount}</dd>\n <dt>Unhealthy Threshold</dt>\n <dd>{targetGroup.unhealthyThresholdCount}</dd>\n <dt>Matcher</dt>\n <dd>HTTP Code(s): {targetGroup && targetGroup.matcher ? targetGroup.matcher.httpCode : 'None'}</dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Attributes\" defaultExpanded={false}>\n <dl>\n <dt>Deregistration Delay Timeout</dt>\n <dd>{targetGroup.attributes['deregistration_delay.timeout_seconds'] || 0} seconds</dd>\n <dt>Stickiness Enabled</dt>\n <dd>{targetGroup.attributes['stickiness.enabled'] || 'N/A'}</dd>\n </dl>\n </CollapsibleSection>\n </div>\n );\n\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && targetGroupHeader()}\n {!loading && !targetGroup && notFoundContent()}\n {!loading && targetGroup && targetGroupContent()}\n </div>\n );\n }\n}\n","import type { IQService } from 'angular';\n\nimport type { IEcsLoadBalancer, IEcsLoadBalancerSourceData, IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport class EcsLoadBalancerTransformer {\n public static $inject = ['$q'];\n constructor(private $q: IQService) {}\n\n public normalizeLoadBalancer(loadBalancer: IEcsLoadBalancerSourceData): PromiseLike<IEcsLoadBalancer> {\n loadBalancer.targetGroups.forEach((tg: IEcsTargetGroup) => {\n tg.region = loadBalancer.region;\n tg.account = loadBalancer.account;\n tg.cloudProvider = loadBalancer.cloudProvider;\n if (loadBalancer.targetGroupServices) {\n const tgServiceMap = loadBalancer.targetGroupServices;\n tg.serverGroups = tgServiceMap[tg.targetGroupArn];\n }\n });\n return this.$q.resolve(loadBalancer);\n }\n}\n","import type { StateParams } from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport type { ApplicationStateProvider, INestedState } from '@spinnaker/core';\nimport { APPLICATION_STATE_PROVIDER } from '@spinnaker/core';\n\nimport { EcsTargetGroupDetails } from '../loadBalancer/details/targetGroupDetails';\n//import { IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport const ECS_TARGET_GROUP_STATES = 'spinnaker.ecs.loadBalancer.targetGroup.states';\nmodule(ECS_TARGET_GROUP_STATES, [APPLICATION_STATE_PROVIDER]).config([\n 'applicationStateProvider',\n (applicationStateProvider: ApplicationStateProvider) => {\n const ecsTargetGroupDetails: INestedState = {\n name: 'ecsTargetGroupDetails',\n url: '/ecsTargetGroupDetails/:provider/:accountId/:region/:vpcId/:loadBalancerName/:name',\n params: {\n vpcId: {\n value: null,\n squash: true,\n },\n },\n views: {\n 'detail@../insight': {\n component: EcsTargetGroupDetails,\n $type: 'react',\n },\n },\n resolve: {\n accountId: ['$stateParams', ($stateParams: StateParams) => $stateParams.accountId],\n name: ['$stateParams', ($stateParams: StateParams) => $stateParams.name],\n provider: ['$stateParams', ($stateParams: StateParams) => $stateParams.provider],\n // resolve flat params into an IEcsTargetGroup\n targetGroup: [\n '$stateParams',\n ($stateParams: StateParams) => {\n return {\n loadBalancerName: $stateParams.loadBalancerName,\n targetGroupName: $stateParams.name,\n accountId: $stateParams.accountId,\n region: $stateParams.region,\n vpcId: $stateParams.vpcId,\n };\n },\n ],\n },\n data: {\n pageTitleDetails: {\n title: 'Target Group Details',\n nameParam: 'name',\n accountParam: 'accountId',\n regionParam: 'region',\n },\n },\n };\n\n applicationStateProvider.addInsightDetailState(ecsTargetGroupDetails);\n },\n]);\n","export default \"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%3E%20%20%3Ctitle%3ECompute%3C%2Ftitle%3E%20%20%3Cg%3E%20%20%20%20%3Cpolygon%20points%3D%2219.64%2022.51%2016%2024.32%2016%2075.68%2019.64%2077.49%2033.98%2051.07%2019.64%2022.51%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2230.72%2031.78%2036.08%2024.19%2060.1%2034.87%2054.5%2035.76%2030.72%2031.78%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2226.56%2068.77%2032.46%2076.88%2060.1%2064.95%2054.76%2064.12%2026.56%2068.77%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2228.12%2075.5%2019.64%2077.49%2019.64%2022.51%2028.12%2024.44%2028.12%2075.5%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2223.66%2020.5%2028.12%2018.27%2036.52%2053.56%2028.12%2081.73%2023.66%2079.5%2023.66%2020.5%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2254.46%2064.08%2060.1%2064.95%2065.26%2050.58%2060.1%2034.87%2054.46%2035.76%2054.46%2064.08%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2236.8%2079.28%2028.12%2081.73%2028.12%2018.27%2036.8%2020.73%2036.8%2079.28%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2266.01%2063.84%2028.12%2070.88%2028.12%2081.73%2066.01%2071.03%2066.01%2063.84%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2266.08%2036%2028.12%2028.79%2028.12%2018.27%2066.08%2029.04%2066.08%2036%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2260.1%2027.34%2066.19%2029.02%2066.19%2071.03%2060.1%2072.7%2060.1%2027.34%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2284%2044.45%2067.7%2045.22%2061.94%2044.83%2078.42%2031.55%2084%2044.45%22%20fill%3D%22%236b3a19%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2261.94%2044.83%2078.42%2043.9%2078.42%2031.55%2061.94%2034.22%2061.94%2044.83%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2043.79%2063.13%2026.96%2071.62%2043.22%2054.31%2044.32%2046.43%2043.79%22%20fill%3D%22%236b3a19%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2043.79%2063.13%2042.37%2063.13%2026.96%2046.43%2030.87%2046.43%2043.79%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2261.94%2055.39%2084%2055.77%2078.42%2068.67%2061.94%2066%2061.94%2055.39%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2056.43%2071.62%2057.01%2063.13%2073.26%2046.43%2069.36%2046.43%2056.43%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2056.43%2063.13%2057.86%2071.62%2057.01%2054.31%2055.9%2046.43%2056.43%22%20fill%3D%22%23fbbf93%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2284%2055.77%2067.7%2055.01%2061.94%2055.39%2078.42%2056.33%2084%2055.77%22%20fill%3D%22%23fbbf93%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.42%2043.9%2084%2044.45%2084%2033.22%2078.42%2031.55%2078.42%2043.9%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2271.62%2043.22%2063.13%2042.37%2063.13%2026.96%2071.62%2029.51%2071.62%2043.22%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.42%2056.33%2084%2055.77%2084%2067%2078.42%2068.67%2078.42%2056.33%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2271.62%2057.01%2063.13%2057.86%2063.13%2073.26%2071.62%2070.72%2071.62%2057.01%22%20fill%3D%22%23f58536%22%2F%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E\"","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { IMetricAlarmDescriptor } from './MetricAlarm';\n\nexport class MetricAlarmReader {\n public listMetricAlarms(): PromiseLike<IMetricAlarmDescriptor[]> {\n return REST('/ecs/cloudMetrics/alarms').get();\n }\n}\n\nexport const METRIC_ALARM_READ_SERVICE = 'spinnaker.ecs.metricAlarm.read.service';\n\nmodule(METRIC_ALARM_READ_SERVICE, []).service('metricAlarmReader', MetricAlarmReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE = 'spinnaker.ecs.pipeline.stage.ecs.destroyAsgStage';\nexport const name = ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n alias: 'destroyAsg',\n cloudProvider: 'ecs',\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('ecsDestroyAsgStageCtrl', [\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('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.regions = ['us-east-1', 'us-west-1', 'eu-west-1', 'us-west-2'];\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\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, PipelineTemplates, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE = 'spinnaker.ecs.pipeline.stage.disableAsgStage';\nexport const name = ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'ecs',\n templateUrl: require('./disableAsgStage.html'),\n executionDetailsUrl: PipelineTemplates.disableAsgExecutionDetails,\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('ecsDisableAsgStageCtrl', [\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('ecs').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 = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\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 } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.disableClusterStage';\nexport const name = ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./disableClusterStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingEnabledServerGroups',\n fieldLabel: 'Keep [X] enabled Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsDisableClusterStageCtrl', [\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('ecs').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 stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n stage.remainingEnabledServerGroups = 1;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE = 'spinnaker.ecs.pipeline.stage.enableAsgStage';\nexport const name = ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'ecs',\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('ecsEnableAsgStageCtrl', [\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('ecs').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 = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\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 { module } from 'angular';\n\nimport { Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE =\n 'spinnaker.ecs.pipeline.stage.findImageFromTagsStage';\nexport const name = ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'ecs',\n templateUrl: require('./findImageFromTagsStage.html'),\n executionDetailsUrl: require('./findImageFromTagsExecutionDetails.html'),\n executionConfigSections: ['findImageConfig', 'taskStatus'],\n validators: [{ type: 'requiredField', fieldName: 'imageLabelOrSha' }],\n });\n })\n .controller('ecsFindImageFromTagsStageCtrl', [\n '$scope',\n function ($scope) {\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'ecs';\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE = 'spinnaker.ecs.pipeline.stage.ecs.resizeAsgStage';\nexport const name = ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n alias: 'resizeAsg',\n cloudProvider: 'ecs',\n templateUrl: require('./resizeAsgStage.html'),\n executionConfigSections: ['resizeServerGroupConfig', 'taskStatus'],\n executionStepLabelUrl: require('./resizeAsgStepLabel.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 resize a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'action' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsResizeAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.viewState.accountsLoaded = true;\n });\n\n $scope.resizeTargets = StageConstants.TARGET_LIST;\n\n $scope.scaleActions = [\n {\n label: 'Scale Up',\n val: 'scale_up',\n },\n {\n label: 'Scale Down',\n val: 'scale_down',\n },\n {\n label: 'Scale to Cluster Size',\n val: 'scale_to_cluster',\n },\n {\n label: 'Scale to Exact Size',\n val: 'scale_exact',\n },\n ];\n\n $scope.resizeTypes = [\n {\n label: 'Percentage',\n val: 'pct',\n },\n {\n label: 'Incremental',\n val: 'incr',\n },\n ];\n\n stage.capacity = stage.capacity || {};\n stage.regions = stage.regions || [];\n stage.target = stage.target || $scope.resizeTargets[0].val;\n stage.action = stage.action || $scope.scaleActions[0].val;\n stage.resizeType = stage.resizeType || $scope.resizeTypes[0].val;\n if (stage.targetHealthyDeployPercentage === undefined) {\n stage.targetHealthyDeployPercentage = 100;\n }\n if (!stage.action && stage.resizeType === 'exact') {\n stage.action = 'scale_exact';\n }\n stage.cloudProvider = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n ctrl.updateResizeType = function () {\n if (stage.action === 'scale_exact') {\n stage.resizeType = 'exact';\n delete stage.scalePct;\n delete stage.scaleNum;\n } else {\n stage.capacity = {};\n if (stage.resizeType === 'pct') {\n delete stage.scaleNum;\n } else {\n stage.resizeType = 'incr';\n delete stage.scalePct;\n stage.scaleNum = stage.scaleNum || 0;\n }\n }\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.scaleDownClusterStage';\nexport const name = ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./scaleDownClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingFullSizeServerGroups',\n fieldLabel: 'Keep [X] full size Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n strategy: true,\n });\n })\n .controller('ecsScaleDownClusterStageCtrl', [\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('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.remainingFullSizeServerGroups === undefined) {\n stage.remainingFullSizeServerGroups = 1;\n }\n\n if (stage.allowScaleDownActive === undefined) {\n stage.allowScaleDownActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.ecs.shrinkClusterStage';\nexport const name = ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./shrinkClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'shrinkToSize', fieldLabel: 'shrink to [X] Server Groups' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsShrinkClusterStageCtrl', [\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('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.shrinkToSize === undefined) {\n stage.shrinkToSize = 1;\n }\n\n if (stage.allowDeleteActive === undefined) {\n stage.allowDeleteActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.retainLargerOverNewer === undefined) {\n stage.retainLargerOverNewer = 'false';\n }\n stage.retainLargerOverNewer = stage.retainLargerOverNewer.toString();\n },\n ]);\n","import { module } from 'angular';\n\nimport type { IPlacementStrategy } from './IPlacementStrategy';\n\nexport class PlacementStrategyService {\n public getPredefinedStrategy(strategyName: string): IPlacementStrategy[] {\n if (strategyName === 'AZ Balanced Spread') {\n return this.getAzBalancedSpreadStrategy();\n } else if (strategyName === 'AZ Balanced BinPack' || strategyName === 'AZ Balanced BinPack Memory') {\n // Note: 'BinPack' is a misleading term which was replaced later by 'BinPack Memory' as it was more clear\n return this.getAzBalancedMemoryBinPackStrategy();\n } else if (strategyName === 'BinPack' || strategyName === 'BinPack Memory') {\n // Note: 'BinPack' is a misleading term which was replaced later by 'BinPack Memory' as it was more clear\n return this.getBinPackMemoryStrategy();\n } else if (strategyName === 'AZ Balanced BinPack CPU') {\n return this.getAzBalancedCpuBinPackStrategy();\n } else if (strategyName === 'BinPack CPU') {\n return this.getBinPackCpuStrategy();\n } else if (strategyName === 'One Task Per Host') {\n return this.getOneTaskPerHostStrategy();\n } else {\n // TODO: Add support for custom placement strategy.\n return [];\n }\n }\n\n public getAzBalancedSpreadStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'spread', field: 'instanceId' },\n ];\n }\n\n public getAzBalancedMemoryBinPackStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'binpack', field: 'memory' },\n ];\n }\n\n public getBinPackMemoryStrategy(): IPlacementStrategy[] {\n return [{ type: 'binpack', field: 'memory' }];\n }\n\n public getAzBalancedCpuBinPackStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'binpack', field: 'cpu' },\n ];\n }\n\n public getBinPackCpuStrategy(): IPlacementStrategy[] {\n return [{ type: 'binpack', field: 'cpu' }];\n }\n\n public getOneTaskPerHostStrategy(): IPlacementStrategy[] {\n return [{ type: 'spread', field: 'instanceId' }];\n }\n}\n\nexport const PLACEMENT_STRATEGY_SERVICE = 'spinnaker.ecs.placementStrategyService.service';\n\nmodule(PLACEMENT_STRATEGY_SERVICE, []).service('placementStrategyService', PlacementStrategyService);\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { ISecretDescriptor } from './ISecret';\n\nexport class SecretReader {\n public listSecrets(): PromiseLike<ISecretDescriptor[]> {\n return REST('/ecs/secrets').get();\n }\n}\n\nexport const ECS_SECRET_READ_SERVICE = 'spinnaker.ecs.secret.read.service';\n\nmodule(ECS_SECRET_READ_SERVICE, []).service('secretReader', SecretReader);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { VpcReader } from '@spinnaker/amazon';\nimport {\n CloudProviderRegistry,\n FirewallLabels,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n RecentHistoryService,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\n\nexport const ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.ecs.securityGroup.details.controller';\nexport const name = ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n ])\n .controller('ecsSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'securityGroupReader',\n function ($scope, $state, resolvedSecurityGroup, app, securityGroupReader) {\n this.application = app;\n const application = app;\n const securityGroup = resolvedSecurityGroup;\n this.firewallLabel = FirewallLabels.get('Firewall');\n\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('ecs', 'securityGroup.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\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(function (details) {\n return VpcReader.getVpcName(details.vpcId).then((name) => {\n details.vpcName = name;\n return details;\n });\n })\n .then(function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n const applicationSecurityGroup = securityGroupReader.getApplicationSecurityGroup(\n application,\n securityGroup.accountId,\n securityGroup.region,\n securityGroup.name,\n );\n\n angular.extend(securityGroup, applicationSecurityGroup, details);\n $scope.securityGroup = securityGroup;\n $scope.ipRules = buildIpRulesModel(securityGroup);\n $scope.securityGroupRules = buildSecurityGroupRulesModel(securityGroup);\n }\n }, fourOhFour);\n }\n\n function buildIpRulesModel(details) {\n const groupedRangeRules = _.groupBy(details.ipRangeRules, (rule) => rule.range.ip + rule.range.cidr);\n return Object.keys(groupedRangeRules)\n .map((addr) => {\n return {\n address: addr,\n rules: buildRuleModel(groupedRangeRules, addr),\n };\n })\n .filter((rule) => rule.rules.length);\n }\n\n function buildSecurityGroupRulesModel(details) {\n const groupedRangeRules = _.groupBy(details.securityGroupRules, (rule) => rule.securityGroup.id);\n return Object.keys(groupedRangeRules)\n .map((addr) => {\n return {\n securityGroup: groupedRangeRules[addr][0].securityGroup,\n rules: buildRuleModel(groupedRangeRules, addr),\n };\n })\n .filter((rule) => rule.rules.length);\n }\n\n function buildRuleModel(groupedRangeRules, addr) {\n const rules = [];\n groupedRangeRules[addr].forEach((rule) => {\n (rule.portRanges || []).forEach((range) => {\n if (rule.protocol === '-1' || (range.startPort !== undefined && range.endPort !== undefined)) {\n rules.push({ startPort: range.startPort, endPort: range.endPort, protocol: rule.protocol });\n }\n });\n });\n return rules;\n }\n\n function fourOhFour() {\n if ($scope.$$destroyed) {\n return;\n }\n if (app.isStandalone) {\n $scope.group = securityGroup.name;\n $scope.state.notFound = true;\n $scope.state.loading = false;\n RecentHistoryService.removeLastItem('securityGroups');\n } else {\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\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 && !app.isStandalone) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\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","import { module } from 'angular';\n\nimport type { ISecurityGroup, ISecurityGroupsByAccount } from '@spinnaker/core';\n\nexport class EcsSecurityGroupReader {\n public resolveIndexedSecurityGroup(\n indexedSecurityGroups: ISecurityGroupsByAccount,\n container: ISecurityGroup,\n securityGroupId: string,\n ): ISecurityGroup {\n return indexedSecurityGroups[container.account][container.region][securityGroupId];\n }\n}\n\nexport const ECS_SECURITY_GROUP_READER = 'spinnaker.ecs.securityGroup.reader';\nmodule(ECS_SECURITY_GROUP_READER, []).service('ecsSecurityGroupReader', EcsSecurityGroupReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.ecs.securityGroup.transformer';\nexport const name = ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('ecsSecurityGroupTransformer', function () {\n function normalizeSecurityGroup() {}\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","import { module } from 'angular';\n\nimport { ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './details/securityGroupDetail.controller';\nimport { ECS_SECURITY_GROUP_READER } from './securityGroup.reader';\nimport { ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup.transformer';\n\nexport const ECS_SECURITY_GROUP_MODULE = 'spinnaker.ecs.securityGroup';\nmodule(ECS_SECURITY_GROUP_MODULE, [\n ECS_SECURITY_GROUP_READER,\n ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n]);\n","import { REST } from '@spinnaker/core';\nimport type { IServiceDiscoveryRegistryDescriptor } from './IServiceDiscovery';\n\nexport class ServiceDiscoveryReader {\n public static listServiceDiscoveryRegistries(): PromiseLike<IServiceDiscoveryRegistryDescriptor[]> {\n return REST('/ecs/serviceDiscoveryRegistries').get();\n }\n}\n","import type { IQService } from 'angular';\nimport { module } from 'angular';\nimport { chain, clone, extend, find, flatten, has, intersection, keys, some, xor } from 'lodash';\n\nimport type { IAmazonLoadBalancer } from '@spinnaker/amazon';\nimport type {\n IAccountDetails,\n IArtifact,\n IDeploymentStrategy,\n IPipeline,\n IRegion,\n IServerGroupCommand,\n IServerGroupCommandBackingData,\n IServerGroupCommandBackingDataFiltered,\n IServerGroupCommandDirty,\n IServerGroupCommandResult,\n IServerGroupCommandViewState,\n IStage,\n ISubnet,\n LoadBalancerReader,\n SecurityGroupReader,\n ServerGroupCommandRegistry,\n} from '@spinnaker/core';\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n NameUtils,\n SECURITY_GROUP_READER,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n SubnetReader,\n} from '@spinnaker/core';\nimport type { IDockerImage } from '@spinnaker/docker';\nimport { DockerImageReader } from '@spinnaker/docker';\n\nimport type { IEcsCapacityProviderDetails } from '../../ecsCluster/IEcsCapacityProviderDetails';\nimport type { IEcsClusterDescriptor } from '../../ecsCluster/IEcsCluster';\nimport type { EcsClusterReader } from '../../ecsCluster/ecsCluster.read.service';\nimport type { IRoleDescriptor } from '../../iamRoles/IRole';\nimport type { IamRoleReader } from '../../iamRoles/iamRole.read.service';\nimport type { IMetricAlarmDescriptor } from '../../metricAlarm/MetricAlarm';\nimport type { MetricAlarmReader } from '../../metricAlarm/metricAlarm.read.service';\nimport type { IPlacementStrategy } from '../../placementStrategy/IPlacementStrategy';\nimport type { PlacementStrategyService } from '../../placementStrategy/placementStrategy.service';\nimport type { ISecretDescriptor } from '../../secrets/ISecret';\nimport type { SecretReader } from '../../secrets/secret.read.service';\nimport type { IServiceDiscoveryRegistryDescriptor } from '../../serviceDiscovery/IServiceDiscovery';\nimport { ServiceDiscoveryReader } from '../../serviceDiscovery/serviceDiscovery.read.service';\n\nexport interface IEcsServerGroupCommandDirty extends IServerGroupCommandDirty {\n targetGroups?: string[];\n defaulCapacityProviders?: string[];\n customCapacityProviders?: string[];\n}\n\nexport interface IEcsServerGroupCommandResult extends IServerGroupCommandResult {\n dirty: IEcsServerGroupCommandDirty;\n}\n\nexport interface IEcsDockerImage extends IDockerImage {\n imageId: string;\n message: string;\n fromTrigger: boolean;\n fromContext: boolean;\n stageId: string;\n imageLabelOrSha: string;\n}\n\nexport interface IEcsServerGroupCommandViewState extends IServerGroupCommandViewState {\n contextImages: IEcsDockerImage[];\n pipeline: IPipeline;\n currentStage: IStage;\n dirty: IEcsServerGroupCommandDirty;\n}\n\nexport interface IEcsServerGroupCommandBackingDataFiltered extends IServerGroupCommandBackingDataFiltered {\n targetGroups: string[];\n iamRoles: string[];\n ecsClusters: string[];\n availableCapacityProviders: string[];\n defaultCapacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n metricAlarms: IMetricAlarmDescriptor[];\n subnetTypes: ISubnet[];\n securityGroupNames: string[];\n secrets: string[];\n serviceDiscoveryRegistries: IServiceDiscoveryRegistryDescriptor[];\n images: IEcsDockerImage[];\n}\n\nexport interface IEcsServerGroupCommandBackingData extends IServerGroupCommandBackingData {\n filtered: IEcsServerGroupCommandBackingDataFiltered;\n targetGroups: string[];\n ecsClusters: IEcsClusterDescriptor[];\n capacityProviderDetails: IEcsCapacityProviderDetails[];\n iamRoles: IRoleDescriptor[];\n metricAlarms: IMetricAlarmDescriptor[];\n launchTypes: string[];\n networkModes: string[];\n secrets: ISecretDescriptor[];\n serviceDiscoveryRegistries: IServiceDiscoveryRegistryDescriptor[];\n images: IEcsDockerImage[];\n}\n\nexport interface IEcsTaskDefinitionArtifact {\n artifact?: IArtifact;\n artifactId?: string;\n}\n\nexport interface IEcsContainerMapping {\n containerName: string;\n imageDescription: IEcsDockerImage;\n}\n\nexport interface IEcsTargetGroupMapping {\n containerName: string;\n containerPort: number;\n targetGroup: string;\n}\n\nexport interface IEcsServiceDiscoveryRegistryAssociation {\n registry: IServiceDiscoveryRegistryDescriptor;\n containerPort: number;\n containerName: string;\n}\n\nexport interface IEcsCapacityProviderStrategyItem {\n capacityProvider: string;\n base: number;\n weight: number;\n}\n\nexport interface IEcsServerGroupCommand extends IServerGroupCommand {\n associatePublicIpAddress: boolean;\n backingData: IEcsServerGroupCommandBackingData;\n computeUnits: number;\n reservedMemory: number;\n targetHealthyDeployPercentage: number;\n targetGroup: string;\n containerPort: number;\n placementStrategyName: string;\n placementStrategySequence: IPlacementStrategy[];\n imageDescription: IEcsDockerImage;\n networkMode: string;\n subnetType: string;\n subnetTypes: string[];\n securityGroups: string[];\n securityGroupNames: string[];\n viewState: IEcsServerGroupCommandViewState;\n taskDefinitionArtifact: IEcsTaskDefinitionArtifact;\n taskDefinitionArtifactAccount: string;\n containerMappings: IEcsContainerMapping[];\n loadBalancedContainer: string;\n targetGroupMappings: IEcsTargetGroupMapping[];\n serviceDiscoveryAssociations: IEcsServiceDiscoveryRegistryAssociation[];\n useTaskDefinitionArtifact: boolean;\n evaluateTaskDefinitionArtifactExpressions: boolean;\n\n capacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n useDefaultCapacityProviders: boolean;\n ecsClusterName: string;\n subnetTypeChanged: (command: IEcsServerGroupCommand) => IServerGroupCommandResult;\n placementStrategyNameChanged: (command: IEcsServerGroupCommand) => IServerGroupCommandResult;\n regionIsDeprecated: (command: IEcsServerGroupCommand) => boolean;\n\n clusterChanged: (command: IServerGroupCommand) => void;\n}\n\nexport class EcsServerGroupConfigurationService {\n // private enabledMetrics = ['GroupMinSize', 'GroupMaxSize', 'GroupDesiredCapacity', 'GroupInServiceInstances', 'GroupPendingInstances', 'GroupStandbyInstances', 'GroupTerminatingInstances', 'GroupTotalInstances'];\n // private healthCheckTypes = ['EC2', 'ELB'];\n // private terminationPolicies = ['OldestInstance', 'NewestInstance', 'OldestLaunchConfiguration', 'ClosestToNextInstanceHour', 'Default'];\n private launchTypes = ['EC2', 'FARGATE'];\n private networkModes = ['bridge', 'host', 'awsvpc', 'none', 'default'];\n\n public static $inject = [\n '$q',\n 'loadBalancerReader',\n 'serverGroupCommandRegistry',\n 'iamRoleReader',\n 'ecsClusterReader',\n 'metricAlarmReader',\n 'placementStrategyService',\n 'securityGroupReader',\n 'secretReader',\n ];\n constructor(\n private $q: IQService,\n private loadBalancerReader: LoadBalancerReader,\n private serverGroupCommandRegistry: ServerGroupCommandRegistry,\n private iamRoleReader: IamRoleReader,\n private ecsClusterReader: EcsClusterReader,\n private metricAlarmReader: MetricAlarmReader,\n private placementStrategyService: PlacementStrategyService,\n private securityGroupReader: SecurityGroupReader,\n private secretReader: SecretReader,\n ) {}\n\n public configureUpdateCommand(command: IEcsServerGroupCommand): void {\n command.backingData = {\n // terminationPolicies: clone(this.terminationPolicies)\n launchTypes: clone(this.launchTypes),\n networkModes: clone(this.networkModes),\n } as IEcsServerGroupCommandBackingData;\n }\n\n // TODO (Bruno Carrier): Why do we need to inject an Application into this constructor so that the app works? This is strange, and needs investigating\n public configureCommand(cmd: IEcsServerGroupCommand, imageQuery = ''): PromiseLike<void> {\n this.applyOverrides('beforeConfiguration', cmd);\n cmd.toggleSuspendedProcess = (command: IEcsServerGroupCommand, process: string): void => {\n command.suspendedProcesses = command.suspendedProcesses || [];\n const processIndex = command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n command.suspendedProcesses.push(process);\n } else {\n command.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n cmd.processIsSuspended = (command: IEcsServerGroupCommand, process: string): boolean =>\n command.suspendedProcesses.includes(process);\n\n cmd.onStrategyChange = (command: IEcsServerGroupCommand, strategy: IDeploymentStrategy): void => {\n // Any strategy other than None or Custom should force traffic to be enabled\n if (strategy.key !== '' && strategy.key !== 'custom') {\n command.suspendedProcesses = (command.suspendedProcesses || []).filter((p) => p !== 'AddToLoadBalancer');\n }\n };\n\n cmd.regionIsDeprecated = (command: IEcsServerGroupCommand): boolean => {\n return (\n has(command, 'backingData.filtered.regions') &&\n command.backingData.filtered.regions.some((region) => region.name === command.region && region.deprecated)\n );\n };\n\n const imageQueries = cmd.imageDescription ? [this.grabImageAndTag(cmd.imageDescription.imageId)] : [];\n\n if (imageQuery) {\n imageQueries.push(imageQuery);\n }\n\n let imagesPromise;\n if (imageQueries.length) {\n imagesPromise = this.$q\n .all(\n imageQueries.map((q) =>\n DockerImageReader.findImages({\n provider: 'dockerRegistry',\n count: 50,\n q: q,\n }),\n ),\n )\n .then((promises) => flatten(promises));\n } else {\n imagesPromise = this.$q.when([]);\n }\n\n return this.$q\n .all({\n credentialsKeyedByAccount: AccountService.getCredentialsKeyedByAccount('ecs'),\n loadBalancers: this.loadBalancerReader.listLoadBalancers('ecs'),\n subnets: SubnetReader.listSubnetsByProvider('ecs'),\n iamRoles: this.iamRoleReader.listRoles('ecs'),\n ecsClusters: this.ecsClusterReader.listClusters(),\n capacityProviderDetails: this.ecsClusterReader.describeClusters(cmd.credentials, cmd.region),\n metricAlarms: this.metricAlarmReader.listMetricAlarms(),\n securityGroups: this.securityGroupReader.getAllSecurityGroups(),\n launchTypes: this.$q.when(clone(this.launchTypes)),\n networkModes: this.$q.when(clone(this.networkModes)),\n secrets: this.secretReader.listSecrets(),\n serviceDiscoveryRegistries: ServiceDiscoveryReader.listServiceDiscoveryRegistries(),\n images: imagesPromise,\n })\n .then((backingData: Partial<IEcsServerGroupCommandBackingData>) => {\n backingData.accounts = keys(backingData.credentialsKeyedByAccount);\n backingData.filtered = {} as IEcsServerGroupCommandBackingDataFiltered;\n\n if (cmd.viewState.contextImages) {\n backingData.images = backingData.images.concat(cmd.viewState.contextImages);\n }\n cmd.backingData = backingData as IEcsServerGroupCommandBackingData;\n this.configureVpcId(cmd);\n this.configureAvailableIamRoles(cmd);\n this.configureAvailableSubnetTypes(cmd);\n this.configureAvailableSecurityGroups(cmd);\n this.configureAvailableEcsClusters(cmd);\n this.setCapacityProviderDetails(cmd);\n this.configureAvailableSecrets(cmd);\n this.configureAvailableServiceDiscoveryRegistries(cmd);\n this.configureAvailableImages(cmd);\n this.configureAvailableRegions(cmd);\n this.configureLoadBalancerOptions(cmd);\n this.applyOverrides('afterConfiguration', cmd);\n this.attachEventHandlers(cmd);\n });\n }\n\n public setCapacityProviderDetails(command: IEcsServerGroupCommand): void {\n this.$q\n .all({\n capacityProviderDetails: this.ecsClusterReader.describeClusters(command.credentials, command.region),\n })\n .then((result: Partial<IEcsServerGroupCommandBackingData>) => {\n command.backingData.capacityProviderDetails = chain(result.capacityProviderDetails)\n .map((cluster) => this.mapCapacityProviderDetails(cluster))\n .value();\n });\n\n if (command.ecsClusterName != null && command.ecsClusterName.length > 0) {\n this.configureAvailableCapacityProviders(command);\n } else {\n command.backingData.filtered.availableCapacityProviders = [];\n command.backingData.filtered.defaultCapacityProviderStrategy = [];\n }\n this.checkDirtyCapacityProviders(command);\n }\n\n public configureAvailableCapacityProviders(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.availableCapacityProviders = chain(command.backingData.capacityProviderDetails)\n .filter({\n clusterName: command.ecsClusterName,\n })\n .map((availableCPs) => availableCPs.capacityProviders)\n .flattenDeep<string>()\n .value();\n\n command.backingData.filtered.defaultCapacityProviderStrategy = chain(command.backingData.capacityProviderDetails)\n .filter({\n clusterName: command.ecsClusterName,\n })\n .map((availableCPs) => availableCPs.defaultCapacityProviderStrategy)\n .flattenDeep<IEcsCapacityProviderStrategyItem>()\n .value();\n }\n\n public mapCapacityProviderDetails(describeClusters: IEcsCapacityProviderDetails): IEcsCapacityProviderDetails {\n return {\n capacityProviders: describeClusters.capacityProviders,\n clusterName: describeClusters.clusterName,\n defaultCapacityProviderStrategy: describeClusters.defaultCapacityProviderStrategy,\n };\n }\n\n public applyOverrides(phase: string, command: IEcsServerGroupCommand): void {\n this.serverGroupCommandRegistry.getCommandOverrides('ecs').forEach((override: any) => {\n if (override[phase]) {\n override[phase](command);\n }\n });\n }\n\n public grabImageAndTag(imageId: string): string {\n return imageId.split('/').pop();\n }\n\n public buildImageId(image: IEcsDockerImage): string {\n if (image.fromContext) {\n return `${image.imageLabelOrSha}`;\n } else if (image.fromTrigger && !image.tag) {\n return `${image.registry}/${image.repository} (Tag resolved at runtime)`;\n } else {\n return `${image.registry}/${image.repository}:${image.tag}`;\n }\n }\n\n public mapImage(image: IEcsDockerImage): IEcsDockerImage {\n if (image.message !== undefined) {\n return image;\n }\n\n return {\n repository: image.repository,\n tag: image.tag,\n imageId: this.buildImageId(image),\n registry: image.registry,\n fromContext: image.fromContext,\n fromTrigger: image.fromTrigger,\n account: image.account,\n imageLabelOrSha: image.imageLabelOrSha,\n stageId: image.stageId,\n message: image.message,\n };\n }\n\n public configureAvailableImages(command: IEcsServerGroupCommand): void {\n // No filtering required, but need to decorate with the displayable image ID\n command.backingData.filtered.images = command.backingData.images.map((image) => this.mapImage(image));\n }\n\n public configureAvailabilityZones(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.availabilityZones = find<IRegion>(\n command.backingData.credentialsKeyedByAccount[command.credentials].regions,\n { name: command.region },\n ).availabilityZones;\n command.availabilityZones = command.backingData.filtered.availabilityZones;\n }\n\n public configureAvailableSecurityGroups(command: IEcsServerGroupCommand): void {\n if (command.subnetType == null && (command.subnetTypes == null || command.subnetTypes.length == 0)) {\n command.backingData.filtered.securityGroups = [];\n return;\n }\n\n const vpcId = chain(command.backingData.subnets)\n .filter({\n account: command.credentials,\n region: command.region,\n purpose: command.subnetTypes ? command.subnetTypes[0] : command.subnetType,\n })\n .compact()\n .uniqBy('purpose')\n .map('vpcId')\n .value()[0];\n\n if (\n command.backingData.securityGroups[command.credentials] &&\n command.backingData.securityGroups[command.credentials]['ecs'] &&\n command.backingData.securityGroups[command.credentials]['ecs'][command.region]\n ) {\n const allSecurityGroups = command.backingData.securityGroups[command.credentials]['ecs'][command.region];\n command.backingData.filtered.securityGroupNames = chain(allSecurityGroups)\n .filter({ vpcId: vpcId })\n .map('name')\n .value() as string[];\n }\n }\n\n public configureAvailableSubnetTypes(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.subnetTypes = chain(command.backingData.subnets)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .compact()\n .uniqBy('purpose')\n .value()\n .filter(function (e: ISubnet) {\n return e.purpose && e.purpose.length > 0;\n });\n }\n\n public configureAvailableEcsClusters(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.ecsClusters = chain(command.backingData.ecsClusters)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map('name')\n .value();\n }\n\n public configureAvailableSecrets(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.secrets = chain(command.backingData.secrets)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map('name')\n .value();\n }\n\n public buildServiceRegistryDisplayName(registry: IServiceDiscoveryRegistryDescriptor): string {\n return `${registry.name} (${registry.id})`;\n }\n\n public mapServiceRegistry(registry: IServiceDiscoveryRegistryDescriptor): IServiceDiscoveryRegistryDescriptor {\n return {\n account: registry.account,\n region: registry.region,\n name: registry.name,\n id: registry.id,\n arn: registry.arn,\n displayName: this.buildServiceRegistryDisplayName(registry),\n };\n }\n\n public configureAvailableServiceDiscoveryRegistries(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.serviceDiscoveryRegistries = chain(command.backingData.serviceDiscoveryRegistries)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map((registry) => this.mapServiceRegistry(registry))\n .value();\n }\n\n public configureAvailableRegions(command: IEcsServerGroupCommand): void {\n const regionsForAccount: IAccountDetails =\n command.backingData.credentialsKeyedByAccount[command.credentials] || ({ regions: [] } as IAccountDetails);\n command.backingData.filtered.regions = regionsForAccount.regions;\n }\n\n public configureAvailableIamRoles(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.iamRoles = chain(command.backingData.iamRoles)\n .filter({ accountName: command.credentials })\n .map('name')\n .value();\n if (command.backingData.filtered.iamRoles.length > 0) {\n command.backingData.filtered.iamRoles.splice(0, 0, 'None (No IAM role)');\n }\n }\n\n public configureSubnetPurposes(command: IEcsServerGroupCommand): IServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n filteredData.subnetPurposes = chain(command.backingData.subnets)\n .filter({ account: command.credentials, region: command.region })\n .reject({ target: 'elb' })\n .reject({ purpose: null })\n .uniqBy('purpose')\n .value();\n\n if (command.subnetTypes) {\n result.dirty.subnetType = !command.subnetTypes.every((subnetType) =>\n chain(filteredData.subnetPurposes).some({ purpose: subnetType }).value(),\n );\n } else if (!chain(filteredData.subnetPurposes).some({ purpose: command.subnetType }).value()) {\n result.dirty.subnetType = true;\n }\n\n if (result.dirty.subnetType) {\n command.subnetTypes = null;\n command.subnetType = null;\n }\n\n return result;\n }\n\n private getLoadBalancerMap(command: IEcsServerGroupCommand): IAmazonLoadBalancer[] {\n return chain(command.backingData.loadBalancers)\n .map('accounts')\n .flattenDeep()\n .filter({ name: command.credentials })\n .map('regions')\n .flattenDeep()\n .filter({ name: command.region })\n .map<IAmazonLoadBalancer>('loadBalancers')\n .flattenDeep<IAmazonLoadBalancer>()\n .value();\n }\n\n public getLoadBalancerNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancers = this.getLoadBalancerMap(command).filter(\n (lb) => (!lb.loadBalancerType || lb.loadBalancerType === 'classic') && lb.vpcId === command.vpcId,\n );\n return loadBalancers.map((lb) => lb.name).sort();\n }\n\n public getVpcLoadBalancerNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancersForVpc = this.getLoadBalancerMap(command).filter(\n (lb) => (!lb.loadBalancerType || lb.loadBalancerType === 'classic') && lb.vpcId,\n );\n return loadBalancersForVpc.map((lb) => lb.name).sort();\n }\n\n public getTargetGroupNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancersV2 = this.getLoadBalancerMap(command).filter((lb) => lb.loadBalancerType !== 'classic') as any[];\n const allTargetGroups = flatten(loadBalancersV2.map<string[]>((lb) => lb.targetGroups));\n return allTargetGroups.sort();\n }\n\n public configureLoadBalancerOptions(command: IEcsServerGroupCommand): IServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const currentLoadBalancers = (command.loadBalancers || []).concat(command.vpcLoadBalancers || []);\n const newLoadBalancers = this.getLoadBalancerNames(command);\n const vpcLoadBalancers = this.getVpcLoadBalancerNames(command);\n const allTargetGroups = this.getTargetGroupNames(command);\n const currentTargetGroups = command.targetGroupMappings.map((tg) => tg.targetGroup);\n if (currentLoadBalancers && command.loadBalancers) {\n const valid = command.vpcId ? newLoadBalancers : newLoadBalancers.concat(vpcLoadBalancers);\n const matched = intersection(valid, currentLoadBalancers);\n const removedLoadBalancers = xor(matched, currentLoadBalancers);\n command.loadBalancers = intersection(newLoadBalancers, matched);\n if (!command.vpcId) {\n command.vpcLoadBalancers = intersection(vpcLoadBalancers, matched);\n } else {\n delete command.vpcLoadBalancers;\n }\n if (removedLoadBalancers.length) {\n result.dirty.loadBalancers = removedLoadBalancers;\n }\n }\n\n if (currentTargetGroups) {\n const matched = intersection(allTargetGroups, currentTargetGroups);\n const removedTargetGroups = xor(matched, currentTargetGroups);\n if (removedTargetGroups && removedTargetGroups.length > 0) {\n command.viewState.dirty.targetGroups = removedTargetGroups;\n } else if (command.viewState.dirty && command.viewState.dirty.targetGroups) {\n command.viewState.dirty.targetGroups = [];\n }\n }\n\n command.backingData.filtered.loadBalancers = newLoadBalancers;\n command.backingData.filtered.vpcLoadBalancers = vpcLoadBalancers;\n command.backingData.filtered.targetGroups = allTargetGroups;\n return result;\n }\n\n public refreshLoadBalancers(command: IEcsServerGroupCommand, skipCommandReconfiguration?: boolean) {\n return this.loadBalancerReader.listLoadBalancers('ecs').then((loadBalancers) => {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n this.configureLoadBalancerOptions(command);\n }\n });\n }\n\n public configureVpcId(command: IEcsServerGroupCommand): IEcsServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n if (command.subnetType == null && (command.subnetTypes == null || command.subnetTypes.length == 0)) {\n command.vpcId = null;\n result.dirty.vpcId = true;\n } else if (command.subnetTypes != null && command.subnetTypes.length > 0) {\n command.subnetTypes.forEach(function (subnetType) {\n const subnet = find<ISubnet>(command.backingData.subnets, {\n purpose: subnetType,\n account: command.credentials,\n region: command.region,\n });\n command.vpcId = subnet ? subnet.vpcId : null;\n });\n } else {\n const subnet = find<ISubnet>(command.backingData.subnets, {\n purpose: command.subnetType,\n account: command.credentials,\n region: command.region,\n });\n command.vpcId = subnet ? subnet.vpcId : null;\n }\n return result;\n }\n\n public checkDirtyCapacityProviders(command: IEcsServerGroupCommand): void {\n if (command.capacityProviderStrategy) {\n const availableCustomCapacityProviders = command.backingData.filtered.availableCapacityProviders;\n const currentCapacityProviders = command.capacityProviderStrategy.map((cp) => cp.capacityProvider);\n const matchedCustomCapacityProviders = intersection(availableCustomCapacityProviders, currentCapacityProviders);\n const removedCustomCapacityProviders = xor(matchedCustomCapacityProviders, currentCapacityProviders);\n\n if (removedCustomCapacityProviders && removedCustomCapacityProviders.length > 0) {\n command.viewState.dirty.customCapacityProviders = removedCustomCapacityProviders;\n } else if (command.viewState.dirty && command.viewState.dirty.customCapacityProviders) {\n command.viewState.dirty.customCapacityProviders = [];\n }\n\n if (command.useDefaultCapacityProviders) {\n const availableDefaultCapacityProvider = command.backingData.filtered.defaultCapacityProviderStrategy.map(\n (cp) => cp.capacityProvider,\n );\n const matchedDefaultCapacityProviders = intersection(\n availableDefaultCapacityProvider,\n currentCapacityProviders,\n );\n const removedDefaultCapacityProviders = xor(matchedDefaultCapacityProviders, currentCapacityProviders);\n\n if (removedDefaultCapacityProviders && removedDefaultCapacityProviders.length > 0) {\n command.viewState.dirty.defaulCapacityProviders = removedDefaultCapacityProviders;\n }\n }\n }\n }\n\n public attachEventHandlers(cmd: IEcsServerGroupCommand): void {\n cmd.subnetChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result = this.configureVpcId(command);\n extend(result.dirty, this.configureLoadBalancerOptions(command).dirty);\n command.viewState.dirty = command.viewState.dirty || {};\n extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.regionChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n extend(result.dirty, this.configureSubnetPurposes(command).dirty);\n if (command.region) {\n extend(result.dirty, command.subnetChanged(command).dirty);\n this.configureAvailabilityZones(command);\n this.configureAvailableEcsClusters(command);\n this.configureAvailableSubnetTypes(command);\n this.configureAvailableSecurityGroups(command);\n this.configureAvailableSecrets(command);\n this.configureAvailableServiceDiscoveryRegistries(command);\n this.setCapacityProviderDetails(command);\n }\n\n return result;\n };\n\n cmd.subnetTypeChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n this.configureAvailableSecurityGroups(command);\n return result;\n };\n\n cmd.clusterChanged = (command: IEcsServerGroupCommand): void => {\n command.moniker = NameUtils.getMoniker(command.application, command.stack, command.freeFormDetails);\n };\n\n cmd.credentialsChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const backingData = command.backingData;\n if (command.credentials) {\n this.configureAvailableIamRoles(command);\n this.configureAvailableEcsClusters(command);\n this.configureAvailableSubnetTypes(command);\n this.configureAvailableSecurityGroups(command);\n this.configureAvailableSecrets(command);\n this.configureAvailableServiceDiscoveryRegistries(command);\n this.configureAvailableRegions(command);\n this.setCapacityProviderDetails(command);\n\n if (!some(backingData.filtered.regions, { name: command.region })) {\n command.region = null;\n result.dirty.region = true;\n } else {\n extend(result.dirty, command.regionChanged(command).dirty);\n }\n } else {\n command.region = null;\n }\n return result;\n };\n\n cmd.placementStrategyNameChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n command.placementStrategySequence = this.placementStrategyService.getPredefinedStrategy(\n command.placementStrategyName,\n );\n return result;\n };\n\n this.applyOverrides('attachEventHandlers', cmd);\n }\n}\n\nexport const ECS_SERVER_GROUP_CONFIGURATION_SERVICE = 'spinnaker.ecs.serverGroup.configure.service';\nmodule(ECS_SERVER_GROUP_CONFIGURATION_SERVICE, [\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n]).service('ecsServerGroupConfigurationService', EcsServerGroupConfigurationService);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, INSTANCE_TYPE_SERVICE } from '@spinnaker/core';\n\nimport { ECS_SERVER_GROUP_CONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\n\nexport const ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.ecs.serverGroupCommandBuilder.service';\nexport const name = ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n INSTANCE_TYPE_SERVICE,\n ECS_SERVER_GROUP_CONFIGURATION_SERVICE,\n ])\n .factory('ecsServerGroupCommandBuilder', [\n '$q',\n 'instanceTypeService',\n 'ecsServerGroupConfigurationService',\n function ($q, instanceTypeService, ecsServerGroupConfigurationService) {\n function reconcileUpstreamImages(image, upstreamImages) {\n if (image.fromContext) {\n const matchingImage = upstreamImages.find((otherImage) => image.stageId === otherImage.stageId);\n\n if (matchingImage) {\n image.cluster = matchingImage.cluster;\n image.pattern = matchingImage.pattern;\n image.repository = matchingImage.repository;\n return image;\n } else {\n return null;\n }\n } else if (image.fromTrigger) {\n const matchingImage = upstreamImages.find((otherImage) => {\n return (\n image.registry === otherImage.registry &&\n image.repository === otherImage.repository &&\n image.tag === otherImage.tag\n );\n });\n\n if (matchingImage) {\n return image;\n } else {\n return null;\n }\n } else {\n return image;\n }\n }\n\n function findUpstreamImages(current, all, visited = {}) {\n // This actually indicates a loop in the stage dependencies.\n if (visited[current.refId]) {\n return [];\n } else {\n visited[current.refId] = true;\n }\n let result = [];\n if (current.type === 'findImageFromTags') {\n result.push({\n fromContext: true,\n imageLabelOrSha: current.imageLabelOrSha,\n stageId: current.refId,\n });\n }\n current.requisiteStageRefIds.forEach(function (id) {\n const next = all.find((stage) => stage.refId === id);\n if (next) {\n result = result.concat(findUpstreamImages(next, all, visited));\n }\n });\n\n return result;\n }\n\n function findTriggerImages(triggers) {\n const result = triggers\n .filter((trigger) => {\n return trigger.type === 'docker';\n })\n .map((trigger) => {\n return {\n fromTrigger: true,\n repository: trigger.repository,\n account: trigger.account,\n organization: trigger.organization,\n registry: trigger.registry,\n tag: trigger.tag,\n };\n });\n\n return result;\n }\n\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n const credentialsLoader = AccountService.getCredentialsKeyedByAccount('ecs');\n\n const defaultCredentials = defaults.account || application.defaultCredentials.ecs;\n const defaultRegion = defaults.region || application.defaultRegions.ecs;\n\n const preferredZonesLoader = AccountService.getAvailabilityZonesForAccountAndRegion(\n 'ecs',\n defaultCredentials,\n defaultRegion,\n );\n\n return $q\n .all({\n preferredZones: preferredZonesLoader,\n credentialsKeyedByAccount: credentialsLoader,\n })\n .then(function (asyncData) {\n const availabilityZones = asyncData.preferredZones;\n\n let defaultIamRole = 'None (No IAM role)';\n defaultIamRole = defaultIamRole.replace('{{application}}', application.name);\n\n const defaultImageCredentials = 'None (No registry credentials)';\n\n const command = {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n strategy: '',\n capacity: {\n min: 1,\n max: 1,\n desired: 1,\n },\n launchType: 'EC2',\n healthCheckType: 'EC2',\n selectedProvider: 'ecs',\n iamRole: defaultIamRole,\n dockerImageCredentialsSecret: defaultImageCredentials,\n availabilityZones: availabilityZones,\n subnetType: '',\n securityGroupNames: [],\n healthCheckGracePeriodSeconds: '',\n placementConstraints: [],\n placementStrategyName: '',\n taskDefinitionArtifact: {},\n useTaskDefinitionArtifact: false,\n placementStrategySequence: [],\n serviceDiscoveryAssociations: [],\n ecsClusterName: '',\n targetGroup: '',\n copySourceScalingPoliciesAndActions: true,\n preferSourceCapacity: true,\n useSourceCapacity: true,\n enableDeploymentCircuitBreaker: false,\n viewState: {\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n dirty: {},\n },\n };\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['ecs'];\n }\n\n return command;\n });\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster, current, pipeline) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = Object.keys(pipelineCluster.availabilityZones)[0];\n // var instanceTypeCategoryLoader = instanceTypeService.getCategoryForInstanceType('ecs', pipelineCluster.instanceType);\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n const zones = pipelineCluster.availabilityZones[region];\n const usePreferredZones = zones.join(',') === command.availabilityZones.join(',');\n\n let contextImages = findUpstreamImages(current, pipeline.stages) || [];\n contextImages = contextImages.concat(findTriggerImages(pipeline.triggers));\n\n if (command.docker && command.docker.image) {\n command.docker.image = reconcileUpstreamImages(command.docker.image, contextImages);\n }\n\n const viewState = {\n instanceProfile: undefined,\n disableImageSelection: true,\n useSimpleCapacity:\n pipelineCluster.capacity.min === pipelineCluster.capacity.max &&\n pipelineCluster.useSourceCapacity !== true,\n usePreferredZones: usePreferredZones,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n templatingEnabled: true,\n existingPipelineCluster: true,\n dirty: {},\n contextImages: contextImages,\n pipeline: pipeline,\n currentStage: current,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n availabilityZones: pipelineCluster.availabilityZones[region],\n viewState: viewState,\n };\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n return angular.extend({}, command, pipelineCluster, viewOverrides);\n });\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline(current, pipeline) {\n let contextImages = findUpstreamImages(current, pipeline.stages) || [];\n contextImages = contextImages.concat(findTriggerImages(pipeline.triggers));\n\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n // applies viewState overrides after template selection\n overrides: {\n viewState: {\n mode: 'editPipeline',\n contextImages: contextImages,\n pipeline: pipeline,\n currentStage: current,\n },\n },\n },\n });\n }\n\n function buildUpdateServerGroupCommand(serverGroup) {\n const command = {\n type: 'modifyAsg',\n asgs: [{ asgName: serverGroup.name, region: serverGroup.region }],\n healthCheckType: serverGroup.asg.healthCheckType,\n credentials: serverGroup.account,\n };\n ecsServerGroupConfigurationService.configureUpdateCommand(command);\n return command;\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode = 'clone') {\n // do NOT copy: deployment strategy. DO copy: account, region, cluster name, stack\n // TODO: query for & pull in ECS-specific data that would be useful, e.g, network mode, launch type\n const commandOptions = { account: serverGroup.account, region: serverGroup.region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n command.credentials = serverGroup.account;\n command.app = serverGroup.moniker.app;\n command.stack = serverGroup.moniker.stack;\n command.region = serverGroup.region;\n command.ecsClusterName = serverGroup.ecsCluster;\n command.capacity = serverGroup.capacity;\n command.viewState.mode = mode;\n\n return command;\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n buildUpdateServerGroupCommand: buildUpdateServerGroupCommand,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport {\n ModalWizard,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n SERVER_GROUP_WRITER,\n STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { ECS_CLUSTER_READ_SERVICE } from '../../../ecsCluster/ecsCluster.read.service';\nimport { IAM_ROLE_READ_SERVICE } from '../../../iamRoles/iamRole.read.service';\nimport { ECS_SECRET_READ_SERVICE } from '../../../secrets/secret.read.service';\nimport { ECS_SERVER_GROUP_CONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER =\n 'spinnaker.ecs.cloneServerGroup.controller';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ECS_SERVER_GROUP_CONFIGURATION_SERVICE,\n SERVER_GROUP_WRITER,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n IAM_ROLE_READ_SERVICE,\n ECS_CLUSTER_READ_SERVICE,\n ECS_SECRET_READ_SERVICE,\n STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT,\n]).controller('ecsCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n 'serverGroupWriter',\n 'overrideRegistry',\n 'ecsServerGroupConfigurationService',\n 'serverGroupCommandRegistry',\n 'serverGroupCommand',\n 'iamRoleReader',\n 'ecsClusterReader',\n 'secretReader',\n 'application',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n serverGroupWriter,\n overrideRegistry,\n ecsServerGroupConfigurationService,\n serverGroupCommandRegistry,\n serverGroupCommand,\n iamRoleReader,\n ecsClusterReader,\n secretReader,\n application,\n title,\n ) {\n $scope.pages = {\n templateSelection: overrideRegistry.getTemplate(\n 'ecs.serverGroup.templateSelection',\n require('./templateSelection/templateSelection.html'),\n ),\n basicSettings: overrideRegistry.getTemplate(\n 'ecs.serverGroup.basicSettings',\n require('./location/basicSettings.html'),\n ),\n container: overrideRegistry.getTemplate('ecs.serverGroup.container', require('./container/container.html')),\n horizontalScaling: overrideRegistry.getTemplate(\n 'ecs.serverGroup.horizontalScaling',\n require('./horizontalScaling/horizontalScaling.html'),\n ),\n networking: overrideRegistry.getTemplate('ecs.serverGroup.networking', require('./networking/networking.html')),\n logging: overrideRegistry.getTemplate('ecs.serverGroup.logging', require('./logging/logging.html')),\n serviceDiscovery: overrideRegistry.getTemplate(\n 'ecs.serverGroup.serviceDiscovery',\n require('./serviceDiscovery/serviceDiscovery.html'),\n ),\n advancedSettings: overrideRegistry.getTemplate(\n 'ecs.serverGroup.advancedSettings',\n require('./advancedSettings/advancedSettings.html'),\n ),\n taskDefinition: overrideRegistry.getTemplate(\n 'ecs.taskDefinition',\n require('./taskDefinition/taskDefinition.html'),\n ),\n };\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n\n $scope.command = serverGroupCommand;\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: ['account, region, ecs cluster, stack', 'capacity'],\n notCopied: ['launch type, target group, network mode'],\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: 'ecs',\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 ecsServerGroupConfigurationService.configureCommand($scope.command).then(function () {\n $scope.state.loaded = true;\n initializeCommand();\n initializeSelectOptions();\n initializeWatches();\n });\n }\n\n function initializeWatches() {\n $scope.$watch('command.subnetType', createResultProcessor($scope.command.subnetTypeChanged));\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n $scope.$watch(\n 'command.placementStrategyName',\n createResultProcessor($scope.command.placementStrategyNameChanged),\n );\n $scope.$watch('command.stack', () => $scope.command.clusterChanged($scope.command));\n $scope.$watch('command.freeFormDetails', () => $scope.command.clusterChanged($scope.command));\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged(serverGroupCommand));\n processCommandUpdateResult($scope.command.regionChanged(serverGroupCommand));\n }\n\n function createResultProcessor(method) {\n return function () {\n processCommandUpdateResult(method(serverGroupCommand));\n };\n }\n\n function processCommandUpdateResult() {\n // TODO(Bruno Carrier) - Implement marking sections either dirty or complete\n }\n\n function initializeCommand() {}\n\n this.isValid = function () {\n return true; // TODO(Bruno Carrier) - Implement validation of the form\n };\n\n this.showSubmitButton = function () {\n return ModalWizard.allPagesVisited();\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 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 // used by react components to update command fields in parent (angular) scope\n $scope.notifyAngular = function (commandKey, value) {\n if (commandKey == 'pipeline') {\n $scope.command.viewState.pipeline = value;\n } else {\n $scope.command[commandKey] = value;\n }\n };\n\n // used by react components to configure command for image queries\n $scope.configureCommand = function (query) {\n return ecsServerGroupConfigurationService.configureCommand($scope.command, query);\n };\n\n // TODO: Migrate horizontalScaling component to react and move this logic there\n $scope.capacityProviderState = {\n useCapacityProviders:\n $scope.command.capacityProviderStrategy && $scope.command.capacityProviderStrategy.length > 0,\n updateComputeOption: function (chosenOption) {\n if (chosenOption == 'launchType') {\n $scope.command.capacityProviderStrategy = [];\n } else if (chosenOption == 'capacityProviders') {\n $scope.command.launchType = '';\n $scope.command.capacityProviderStrategy = $scope.command.capacityProviderStrategy || [];\n }\n },\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT =\n 'spinnaker.ecs.serverGroup.configure.wizard.advancedSettings.component';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT, []).component(\n 'ecsServerGroupAdvancedSettings',\n {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./advancedSettings.component.html'),\n },\n);\n","import { module } from 'angular';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IEcsCapacityProviderStrategyItem, IEcsServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IEcsCapacityProviderProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IEcsCapacityProviderState {\n capacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n defaultCapacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n availableCapacityProviders: string[];\n ecsClusterName: string;\n useDefaultCapacityProviders: boolean;\n capacityProviderLoadedFlag: boolean;\n}\n\nclass EcsCapacityProvider extends React.Component<IEcsCapacityProviderProps, IEcsCapacityProviderState> {\n constructor(props: IEcsCapacityProviderProps) {\n super(props);\n const cmd = this.props.command;\n\n this.state = {\n availableCapacityProviders: this.getAvailableCapacityProviders(cmd),\n defaultCapacityProviderStrategy: this.getDefaultCapacityProviderStrategy(cmd),\n ecsClusterName: cmd.ecsClusterName,\n useDefaultCapacityProviders:\n cmd.useDefaultCapacityProviders || (cmd.capacityProviderStrategy && cmd.capacityProviderStrategy.length == 0),\n capacityProviderStrategy:\n cmd.capacityProviderStrategy && cmd.capacityProviderStrategy.length > 0 ? cmd.capacityProviderStrategy : [],\n capacityProviderLoadedFlag: false,\n };\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n const cmd = this.props.command;\n const useDefaultCapacityProviders = this.state.useDefaultCapacityProviders;\n this.setState({\n availableCapacityProviders: this.getAvailableCapacityProviders(cmd),\n defaultCapacityProviderStrategy: this.getDefaultCapacityProviderStrategy(cmd),\n capacityProviderStrategy: this.getCapacityProviderStrategy(useDefaultCapacityProviders, cmd),\n capacityProviderLoadedFlag: true,\n });\n this.props.notifyAngular('useDefaultCapacityProviders', this.state.useDefaultCapacityProviders);\n this.props.notifyAngular('capacityProviderStrategy', this.state.capacityProviderStrategy);\n });\n }\n\n private getAvailableCapacityProviders = (cmd: IEcsServerGroupCommand) => {\n return cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.availableCapacityProviders\n ? cmd.backingData.filtered.availableCapacityProviders\n : [];\n };\n\n private getDefaultCapacityProviderStrategy = (cmd: IEcsServerGroupCommand) => {\n return cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.defaultCapacityProviderStrategy\n ? cmd.backingData.filtered.defaultCapacityProviderStrategy\n : [];\n };\n\n private getCapacityProviderStrategy = (useDefaultCapacityProviders: boolean, cmd: IEcsServerGroupCommand) => {\n return useDefaultCapacityProviders &&\n cmd.backingData &&\n cmd.backingData.filtered &&\n cmd.backingData.filtered.defaultCapacityProviderStrategy\n ? cmd.backingData.filtered.defaultCapacityProviderStrategy\n : this.state.capacityProviderStrategy;\n };\n\n private addCapacityProviderStrategy = () => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n capacityProviderStrategy.push({ capacityProvider: '', base: null, weight: null });\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private removeCapacityProviderStrategy = (index: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n capacityProviderStrategy.splice(index, 1);\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderName = (index: number, targetCapacityProviderName: string) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.capacityProvider = targetCapacityProviderName;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n this.props.command.viewState.dirty.customCapacityProviders = [];\n };\n\n private updateCapacityProviderBase = (index: number, targetCapacityProviderBase: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.base = targetCapacityProviderBase;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderWeight = (index: number, targetCapacityProviderWeight: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.weight = targetCapacityProviderWeight;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderType = (targetCapacityProviderType: boolean) => {\n this.setState({ useDefaultCapacityProviders: targetCapacityProviderType });\n this.props.notifyAngular('useDefaultCapacityProviders', targetCapacityProviderType);\n this.props.command.viewState.dirty.customCapacityProviders = [];\n\n const capacityProviderStrategy =\n targetCapacityProviderType && this.state.defaultCapacityProviderStrategy.length > 0\n ? this.state.defaultCapacityProviderStrategy\n : [];\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n };\n\n render(): React.ReactElement<EcsCapacityProvider> {\n const updateCapacityProviderName = this.updateCapacityProviderName;\n const updateCapacityProviderBase = this.updateCapacityProviderBase;\n const updateCapacityProviderWeight = this.updateCapacityProviderWeight;\n const addCapacityProviderStrategy = this.addCapacityProviderStrategy;\n const removeCapacityProviderStrategy = this.removeCapacityProviderStrategy;\n const updateCapacityProviderType = this.updateCapacityProviderType;\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const useDefaultCapacityProviders = this.state.useDefaultCapacityProviders;\n const capacityProviderLoadedFlag = this.state.capacityProviderLoadedFlag;\n const customDirtyCapacityProviders =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.customCapacityProviders\n ? this.props.command.viewState.dirty.customCapacityProviders\n : [];\n const defaultDirtyCapacityProviders =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.defaulCapacityProviders\n ? this.props.command.viewState.dirty.defaulCapacityProviders\n : [];\n\n const capacityProviderNames =\n this.state.availableCapacityProviders && this.state.availableCapacityProviders.length > 0\n ? this.state.availableCapacityProviders.map((capacityProviderNames) => {\n return { label: `${capacityProviderNames}`, value: capacityProviderNames };\n })\n : [];\n\n const defaultCPError =\n useDefaultCapacityProviders && defaultDirtyCapacityProviders ? (\n <div className=\"alert alert-warning\">\n <p className=\"text-left\">\n <i className=\"fa fa-exclamation-triangle\"></i>\n Invalid capacity providers are a part of default capacity provider strategy.\n <br />\n Please click 'Done' to use current default capacity provider strategy (shown below) or switch to using a\n custom strategy.\n </p>\n </div>\n ) : (\n ''\n );\n\n const dirtyCapacityProviderList = customDirtyCapacityProviders\n ? customDirtyCapacityProviders.map(function (capacityProvider, index) {\n return <li key={index}>{capacityProvider}</li>;\n })\n : '';\n\n const dirtyCapacityProviderSection =\n useDefaultCapacityProviders && defaultDirtyCapacityProviders.length > 0 ? (\n defaultCPError\n ) : customDirtyCapacityProviders.length > 0 && !useDefaultCapacityProviders ? (\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\"></i>\n The following capacity providers could not be found in the selected account/region/cluster and were removed:\n </p>\n <ul>{dirtyCapacityProviderList}</ul>\n <br />\n <p className=\"text-left\">Please select the capacity provider(s) from the dropdown to resolve this error.</p>\n </div>\n ) : (\n ''\n );\n\n const capacityProviderInputs =\n capacityProviderStrategy.length > 0 ? (\n capacityProviderStrategy.map(function (mapping, index) {\n return (\n <tr key={index}>\n {useDefaultCapacityProviders ? (\n <td>\n <input\n data-test-id={'ServerGroup.defaultCapacityProvider.name.' + index}\n type=\"string\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.capacityProvider}\n disabled={true}\n />\n </td>\n ) : (\n <td data-test-id={'ServerGroup.customCapacityProvider.name.' + index}>\n <TetheredSelect\n placeholder=\"Select capacity provider\"\n options={capacityProviderNames}\n value={mapping.capacityProvider}\n onChange={(e: Option) => {\n updateCapacityProviderName(index, e.label as string);\n }}\n clearable={false}\n />\n </td>\n )}\n <td>\n <input\n data-test-id={'ServerGroup.capacityProvider.base.' + index}\n disabled={useDefaultCapacityProviders}\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n value={mapping.base}\n onChange={(e) => updateCapacityProviderBase(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <input\n data-test-id={'ServerGroup.capacityProvider.weight.' + index}\n disabled={useDefaultCapacityProviders}\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.weight}\n onChange={(e) => updateCapacityProviderWeight(index, e.target.valueAsNumber)}\n />\n </td>\n {!useDefaultCapacityProviders ? (\n <td>\n <div className=\"form-control-static\">\n <a className=\"btn-link sm-label\" onClick={() => removeCapacityProviderStrategy(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n ) : (\n ''\n )}\n </tr>\n );\n })\n ) : useDefaultCapacityProviders && this.state.capacityProviderStrategy.length == 0 ? (\n <tr>\n <div className=\"sm-label-left\" style={{ width: '200%' }}>\n <Alert color=\"warning\">\n {' '}\n The cluster does not have a default capacity provider strategy defined. Set a default capacity provider\n strategy or use a custom strategy.\n </Alert>\n </div>\n </tr>\n ) : (\n ''\n );\n\n const newCapacityProviderStrategy =\n this.state.ecsClusterName &&\n this.props.command.credentials &&\n this.props.command.region &&\n !useDefaultCapacityProviders &&\n capacityProviderNames.length > 0 ? (\n <button\n data-test-id=\"ServerGroup.addCapacityProvider\"\n className=\"btn btn-block btn-sm add-new\"\n onClick={addCapacityProviderStrategy}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Capacity Provider\n </button>\n ) : !useDefaultCapacityProviders && capacityProviderLoadedFlag && capacityProviderNames.length == 0 ? (\n <div className=\"sm-label-left\" style={{ width: '200%' }}>\n <Alert color=\"warning\"> The cluster does not have capacity providers defined. </Alert>\n </div>\n ) : (\n ''\n );\n\n return (\n <div>\n {(customDirtyCapacityProviders.length > 0 || defaultDirtyCapacityProviders.length > 0) &&\n capacityProviderLoadedFlag ? (\n <div>{dirtyCapacityProviderSection}</div>\n ) : (\n ''\n )}\n <div className=\"sm-label-left\">\n <b>Capacity Provider Strategy</b>\n <HelpField id=\"ecs.capacityProviderStrategy\" /> <br />\n <span>({this.state.ecsClusterName})</span>\n </div>\n <div className=\"radio\">\n <label>\n <input\n data-test-id=\"ServerGroup.capacityProviders.default\"\n type=\"radio\"\n checked={useDefaultCapacityProviders}\n onClick={() => updateCapacityProviderType(true)}\n id=\"computeOptionsLaunchType1\"\n />\n Use cluster default\n </label>\n </div>\n <div className=\"radio\">\n <label>\n <input\n data-test-id=\"ServerGroup.capacityProviders.custom\"\n type=\"radio\"\n checked={!useDefaultCapacityProviders}\n onClick={() => updateCapacityProviderType(false)}\n id=\"computeOptionsCapacityProviders2\"\n />\n Use custom (Advanced)\n </label>\n </div>\n {capacityProviderLoadedFlag ? (\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style={{ width: '50%' }}>\n Provider name\n <HelpField id=\"ecs.capacityProviderName\" />\n </th>\n <th style={{ width: '25%' }}>\n Base\n <HelpField id=\"ecs.capacityProviderBase\" />\n </th>\n <th style={{ width: '25%' }}>\n Weight\n <HelpField id=\"ecs.capacityProviderWeight\" />\n </th>\n </tr>\n </thead>\n <tbody>{capacityProviderInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newCapacityProviderStrategy}</td>\n </tr>\n </tfoot>\n </table>\n ) : (\n <div className=\"load medium\">\n <div className=\"message\">Loading capacity providers...</div>\n <div className=\"bars\">\n <div className=\"bar\"></div>\n <div className=\"bar\"></div>\n <div className=\"bar\"></div>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport const ECS_CAPACITY_PROVIDER_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.capacityProvider.react';\nmodule(ECS_CAPACITY_PROVIDER_REACT, []).component(\n 'ecsCapacityProviderReact',\n react2angular(withErrorBoundary(EcsCapacityProvider, 'ecsCapacityProviderReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport * as React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type {\n IEcsDockerImage,\n IEcsServerGroupCommand,\n IEcsTargetGroupMapping,\n} from '../../serverGroupConfiguration.service';\n\nexport interface IContainerProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IContainerState {\n imageDescription: IEcsDockerImage;\n computeUnits: number;\n reservedMemory: number;\n dockerImages: IEcsDockerImage[];\n targetGroupsAvailable: string[];\n targetGroupMappings: IEcsTargetGroupMapping[];\n}\n\nexport class Container extends React.Component<IContainerProps, IContainerState> {\n constructor(props: IContainerProps) {\n super(props);\n const cmd = this.props.command;\n let defaultContainer = '';\n if (cmd.containerMappings && cmd.containerMappings.length > 0) {\n defaultContainer = cmd.containerMappings[0].containerName;\n }\n\n let defaultTargetGroup: IEcsTargetGroupMapping[] = [];\n if (cmd.targetGroupMappings && cmd.targetGroupMappings.length > 0) {\n defaultTargetGroup = cmd.targetGroupMappings;\n }\n\n if (cmd.targetGroup && cmd.targetGroup.length > 0) {\n defaultTargetGroup.push({\n containerName: cmd.loadBalancedContainer || defaultContainer,\n targetGroup: cmd.targetGroup,\n containerPort: cmd.containerPort,\n });\n cmd.targetGroup = '';\n cmd.loadBalancedContainer = '';\n }\n\n cmd.targetGroupMappings = uniqWith(defaultTargetGroup, isEqual);\n cmd.containerMappings = null;\n\n this.state = {\n imageDescription: cmd.imageDescription ? cmd.imageDescription : this.getEmptyImageDescription(),\n computeUnits: cmd.computeUnits,\n reservedMemory: cmd.reservedMemory,\n dockerImages: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.images : [],\n targetGroupMappings: cmd.targetGroupMappings,\n targetGroupsAvailable: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.targetGroups : [],\n };\n\n this.state.targetGroupMappings.forEach((targetGroupMapping) => {\n targetGroupMapping.containerName = '';\n });\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n dockerImages: this.props.command.backingData.filtered.images,\n targetGroupsAvailable: this.props.command.backingData.filtered.targetGroups,\n });\n });\n }\n\n // TODO: Separate docker image component used by both TaskDefinition and Container\n\n private getIdToImageMap = (): Map<string, IEcsDockerImage> => {\n const imageIdToDescription = new Map<string, IEcsDockerImage>();\n this.props.command.backingData.filtered.images.forEach((e) => {\n imageIdToDescription.set(e.imageId, e);\n });\n\n return imageIdToDescription;\n };\n\n private getEmptyImageDescription = (): IEcsDockerImage => {\n return {\n imageId: '',\n message: '',\n fromTrigger: false,\n fromContext: false,\n stageId: '',\n imageLabelOrSha: '',\n account: '',\n registry: '',\n repository: '',\n tag: '',\n };\n };\n\n private pushTargetGroupMapping = () => {\n const targetMaps = this.state.targetGroupMappings;\n targetMaps.push({ containerName: '', targetGroup: '', containerPort: 80 });\n this.setState({ targetGroupMappings: targetMaps });\n };\n\n private updateContainerMappingImage = (newImage: Option<string>) => {\n const imageMap = this.getIdToImageMap();\n let newImageDescription = imageMap.get(newImage.value);\n if (!newImageDescription) {\n newImageDescription = this.getEmptyImageDescription();\n }\n\n this.props.notifyAngular('imageDescription', newImageDescription);\n this.setState({ imageDescription: newImageDescription });\n };\n\n private updateComputeUnits = (newComputeUnits: number) => {\n this.props.notifyAngular('computeUnits', newComputeUnits);\n this.setState({ computeUnits: newComputeUnits });\n };\n\n private updateReservedMemory = (newReservedMemory: number) => {\n this.props.notifyAngular('reservedMemory', newReservedMemory);\n this.setState({ reservedMemory: newReservedMemory });\n };\n\n private updateTargetGroupMappingTargetGroup = (index: number, newTargetGroup: Option<string>) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.targetGroup = newTargetGroup.value;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n this.updateDirtyTargetGroups();\n };\n\n private updateTargetGroupMappingPort = (index: number, targetPort: number) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerPort = targetPort;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private removeTargetGroupMapping = (index: number) => {\n const currentMappings = this.state.targetGroupMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateDirtyTargetGroups = () => {\n this.props.command.viewState.dirty.targetGroups = [];\n };\n\n public render(): React.ReactElement<Container> {\n const removeTargetGroupMapping = this.removeTargetGroupMapping;\n const updateContainerMappingImage = this.updateContainerMappingImage;\n const updateTargetGroupMappingTargetGroup = this.updateTargetGroupMappingTargetGroup;\n const updateTargetGroupMappingPort = this.updateTargetGroupMappingPort;\n const updateComputeUnits = this.updateComputeUnits;\n const updateReservedMemory = this.updateReservedMemory;\n const dirtyTagetGroups =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.targetGroups\n ? this.props.command.viewState.dirty.targetGroups\n : [];\n\n const dockerImageOptions = this.state.dockerImages.map(function (image) {\n let msg = '';\n if (image.fromTrigger || image.fromContext) {\n msg = image.fromTrigger ? '(TRIGGER) ' : '(FIND IMAGE RESULT) ';\n }\n return { label: `${msg} (${image.imageId})`, value: image.imageId };\n });\n\n const dirtyTargetGroupList = dirtyTagetGroups\n ? dirtyTagetGroups.map(function (targetGroup, index) {\n return <li key={index}>{targetGroup}</li>;\n })\n : '';\n\n const dirtyTargetGroupSection = (\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\"></i>\n The following target groups could not be found in the selected account/region/VPC and were removed:\n </p>\n <ul>{dirtyTargetGroupList}</ul>\n <br />\n <p className=\"text-left\">Please select the target group(s) from the dropdown to resolve this error.</p>\n </div>\n );\n\n const newTargetGroupMapping = this.state.targetGroupsAvailable.length ? (\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"ContainerInputs.targetGroupAdd\"\n onClick={this.pushTargetGroupMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Target Group Mapping\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No target groups found in the selected account/region/VPC</Alert>\n </div>\n );\n\n const targetGroupsAvailable = this.state.targetGroupsAvailable.map(function (targetGroup) {\n return { label: `${targetGroup}`, value: targetGroup };\n });\n\n const targetGroupInputs = this.state.targetGroupMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td data-test-id=\"ContainerInputs.targetGroup\">\n <TetheredSelect\n placeholder=\"Select a target group to use...\"\n options={targetGroupsAvailable}\n value={mapping.targetGroup.toString()}\n onChange={(e: Option) => updateTargetGroupMappingTargetGroup(index, e as Option<string>)}\n clearable={false}\n />\n </td>\n <td>\n <input\n data-test-id=\"ContainerInputs.targetGroupPort\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort.toString()}\n onChange={(e) => updateTargetGroupMappingPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"ContainerInputs.targetGroupRemove\"\n onClick={() => removeTargetGroupMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n return (\n <div className=\"container-fluid form-horizontal\">\n {dirtyTagetGroups.length > 0 ? <div>{dirtyTargetGroupSection}</div> : ''}\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Container Image</b>\n <HelpField id=\"ecs.containerMappingImage\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"ContainerInputs.containerImage\">\n <TetheredSelect\n placeholder=\"Select an image to use...\"\n options={dockerImageOptions}\n value={this.state.imageDescription.imageId}\n onChange={(e: Option) => {\n updateContainerMappingImage(e as Option<string>);\n }}\n clearable={false}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Compute Units</b>\n <HelpField id=\"ecs.capacity.reserved.computeUnits\" />\n </div>\n <div className=\"col-md-9\" style={{ width: '100px' }}>\n <input\n data-test-id=\"ContainerInputs.computeUnits\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={false}\n value={this.state.computeUnits}\n onChange={(e) => updateComputeUnits(e.target.valueAsNumber)}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Reserved Memory</b>\n <HelpField id=\"ecs.capacity.reserved.memory\" />\n </div>\n <div className=\"col-md-9\" style={{ width: '100px' }}>\n <input\n data-test-id=\"ContainerInputs.reservedMemory\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={false}\n value={this.state.reservedMemory}\n onChange={(e) => updateReservedMemory(e.target.valueAsNumber)}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Target Group Mappings</b>\n <HelpField id=\"ecs.targetGroupMappings\" />\n </div>\n <form name=\"ecsContainerTargetGroupMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '80%' }}>\n Target group\n <HelpField id=\"ecs.loadBalancer.targetGroup\" />\n </th>\n <th style={{ width: '20%' }}>\n Target port\n <HelpField id=\"ecs.loadbalancing.targetPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{targetGroupInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newTargetGroupMapping}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const CONTAINER_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.container.react';\nmodule(CONTAINER_REACT, []).component(\n 'containerReact',\n react2angular(withErrorBoundary(Container, 'containerReact'), ['command', 'notifyAngular', 'configureCommand']),\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT =\n 'spinnaker.ecs.serverGroup.configure.wizard.horizontalScaling.component';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT, []).component(\n 'ecsServerGroupHorizontalScaling',\n {\n bindings: {\n command: '=',\n application: '=',\n capacityProviderState: '=',\n notifyAngular: '=',\n configureCommand: '=',\n },\n templateUrl: require('./horizontalScaling.component.html'),\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 { ModalWizard } from '@spinnaker/core';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER =\n 'spinnaker.ecs.serverGroup.configure.basicSettings';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n ])\n .controller('ecsServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n function ($scope, $controller, $uibModalStack, $state) {\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('basicSettings');\n ModalWizard.markComplete('basicSettings');\n } else {\n ModalWizard.markIncomplete('basicSettings');\n }\n });\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVER_GROUP_LOGGING = 'spinnaker.ecs.serverGroup.configure.wizard.logging.component';\nmodule(ECS_SERVER_GROUP_LOGGING, []).component('ecsServerGroupLogging', {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./logging.component.html'),\n});\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport * as React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport type { ISubnet } from '@spinnaker/core';\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IEcsServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IEcsNetworkingProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IEcsNetworkingState {\n associatePublicIpAddress: boolean;\n networkMode: string;\n networkModesAvailable: string[];\n securityGroupNames: string[];\n securityGroupsAvailable: string[];\n subnetTypes: string[];\n subnetTypesAvailable: ISubnet[];\n}\n\nexport class EcsNetworking extends React.Component<IEcsNetworkingProps, IEcsNetworkingState> {\n constructor(props: IEcsNetworkingProps) {\n super(props);\n const cmd = this.props.command;\n\n let defaultSubnetTypes: string[] = [];\n if (cmd.subnetTypes && cmd.subnetTypes.length > 0) {\n defaultSubnetTypes = cmd.subnetTypes;\n }\n\n if (cmd.subnetType && cmd.subnetType.length > 0) {\n defaultSubnetTypes.push(cmd.subnetType);\n cmd.subnetType = '';\n }\n\n cmd.subnetTypes = uniqWith(defaultSubnetTypes, isEqual);\n\n this.state = {\n associatePublicIpAddress: cmd.associatePublicIpAddress,\n networkMode: cmd.networkMode,\n networkModesAvailable: cmd.backingData && cmd.backingData.networkModes ? cmd.backingData.networkModes : [],\n securityGroupNames: cmd.securityGroupNames,\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n subnetTypes: cmd.subnetTypes,\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n };\n }\n\n public componentDidMount() {\n const cmd = this.props.command;\n\n this.props.configureCommand('1').then(() => {\n this.setState({\n networkModesAvailable: cmd.backingData && cmd.backingData.networkModes ? cmd.backingData.networkModes : [],\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n });\n });\n }\n\n private updateNetworkMode = (newNetworkMode: Option<string>) => {\n const updatedNetworkMode = newNetworkMode.value;\n const cmd = this.props.command;\n this.props.notifyAngular('networkMode', updatedNetworkMode);\n this.setState({\n networkMode: updatedNetworkMode,\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n });\n };\n\n private updateSecurityGroups = (newSecurityGroups: Option<string>) => {\n const updatedSecurityGroups = Array.isArray(newSecurityGroups)\n ? newSecurityGroups.map((securityGroups) => securityGroups.value)\n : [];\n this.props.notifyAngular('securityGroupNames', updatedSecurityGroups);\n this.setState({ securityGroupNames: updatedSecurityGroups });\n };\n\n private updateSubnetTypes = (newSubnetTypes: Option<string>) => {\n const cmd = this.props.command;\n const updatedSubnetTypes = Array.isArray(newSubnetTypes)\n ? newSubnetTypes.map((subnetType) => subnetType.value)\n : [];\n this.props.notifyAngular('subnetTypes', updatedSubnetTypes);\n cmd.subnetTypeChanged(cmd);\n this.setState({\n subnetTypes: updatedSubnetTypes,\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n });\n };\n\n private updateAssociatePublicIpAddress = (usePublicIp: boolean) => {\n this.props.notifyAngular('associatePublicIpAddress', usePublicIp);\n this.setState({ associatePublicIpAddress: usePublicIp });\n };\n\n public render(): React.ReactElement<EcsNetworking> {\n const updateAssociatePublicIpAddress = this.updateAssociatePublicIpAddress;\n const updateNetworkMode = this.updateNetworkMode;\n const updateSecurityGroups = this.updateSecurityGroups;\n const updateSubnetTypes = this.updateSubnetTypes;\n\n const networkModesAvailable = this.state.networkModesAvailable.map(function (networkMode) {\n return { label: `${networkMode}`, value: networkMode };\n });\n\n const securityGroupsAvailable = this.state.securityGroupsAvailable.map(function (securityGroup) {\n return { label: `${securityGroup}`, value: securityGroup };\n });\n\n const subnetTypesAvailable = this.state.subnetTypesAvailable.map(function (subnetType) {\n return { label: `${subnetType.purpose} (${subnetType.vpcId})`, value: subnetType.purpose };\n });\n\n const subnetTypeOptions = this.state.subnetTypesAvailable.length ? (\n <TetheredSelect\n multi={true}\n options={subnetTypesAvailable}\n value={this.state.subnetTypes}\n onChange={(e: Option) => {\n updateSubnetTypes(e as Option<string>);\n }}\n />\n ) : (\n <Alert color=\"warning\">No account was selected, or no subnet types are available for this account</Alert>\n );\n\n const securityGroupsOptions = this.state.securityGroupsAvailable.length ? (\n <TetheredSelect\n multi={true}\n options={securityGroupsAvailable}\n value={this.state.securityGroupNames}\n onChange={(e: Option) => {\n updateSecurityGroups(e as Option<string>);\n }}\n />\n ) : (\n <Alert color=\"warning\">No security groups found in the selected account/region</Alert>\n );\n\n const awsVpcOptions =\n this.state.networkMode === 'awsvpc' ? (\n <div className=\"form-group\">\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>VPC Subnet</b>\n <HelpField key=\"ecs.subnet\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.subnetType\">\n {subnetTypeOptions}\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Security Groups</b>\n <HelpField key=\"ecs.securityGroups\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.securityGroups\">\n {securityGroupsOptions}\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Associate Public IP Address</b>\n <HelpField key=\"ecs.publicip\" />\n </div>\n <div className=\"col-md-1 radio\">\n <label>\n <input\n data-test-id=\"Networking.associatePublicIpAddressTrue\"\n type=\"radio\"\n value=\"true\"\n id=\"associatePublicIpAddressTrue\"\n checked={this.state.associatePublicIpAddress === true}\n onChange={() => updateAssociatePublicIpAddress(true)}\n />\n Yes\n </label>\n </div>\n <div className=\"col-md-1 radio\">\n <label>\n <input\n data-test-id=\"Networking.associatePublicIpAddressFalse\"\n type=\"radio\"\n value=\"false\"\n id=\"associatePublicIpAddressFalse\"\n checked={this.state.associatePublicIpAddress === false}\n onChange={() => updateAssociatePublicIpAddress(false)}\n />\n No\n </label>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"col-md-3 sm-label-right\"></div>\n );\n\n return (\n <div className=\"networking-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Network Mode</b>\n <HelpField id=\"ecs.networkMode\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.networkMode\">\n <TetheredSelect\n placeholder=\"Select a network mode to use ...\"\n options={networkModesAvailable}\n value={this.state.networkMode}\n onChange={(e: Option) => {\n updateNetworkMode(e as Option<string>);\n }}\n />\n </div>\n </div>\n </div>\n {awsVpcOptions}\n </div>\n );\n }\n}\n\nexport const ECS_NETWORKING_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.networking.react';\nmodule(ECS_NETWORKING_REACT, []).component(\n 'ecsNetworkingReact',\n react2angular(withErrorBoundary(EcsNetworking, 'ecsNetworkingReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type {\n IEcsServerGroupCommand,\n IEcsServiceDiscoveryRegistryAssociation,\n} from '../../serverGroupConfiguration.service';\n\nexport interface IServiceDiscoveryProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\nexport interface IEcsServiceDiscoveryRegistry {\n account: string;\n region: string;\n name: string;\n id: string;\n arn: string;\n displayName: string;\n}\n\ninterface IServiceDiscoveryState {\n serviceDiscoveryAssociations: IEcsServiceDiscoveryRegistryAssociation[];\n serviceDiscoveryRegistriesAvailable: IEcsServiceDiscoveryRegistry[];\n useTaskDefinitionArtifact: boolean;\n}\n\nexport class ServiceDiscovery extends React.Component<IServiceDiscoveryProps, IServiceDiscoveryState> {\n constructor(props: IServiceDiscoveryProps) {\n super(props);\n const cmd = this.props.command;\n\n this.state = {\n serviceDiscoveryAssociations: cmd.serviceDiscoveryAssociations,\n serviceDiscoveryRegistriesAvailable:\n cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.serviceDiscoveryRegistries : [],\n useTaskDefinitionArtifact: cmd.useTaskDefinitionArtifact,\n };\n\n if (!this.state.useTaskDefinitionArtifact) {\n this.state.serviceDiscoveryAssociations.forEach((serviceDiscoveryRegistryAssociation) => {\n serviceDiscoveryRegistryAssociation.containerName = null;\n });\n }\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n serviceDiscoveryRegistriesAvailable: this.props.command.backingData.filtered.serviceDiscoveryRegistries,\n });\n });\n }\n\n private getNameToRegistryMap = (): Map<string, IEcsServiceDiscoveryRegistry> => {\n const displayNameToRegistry = new Map<string, IEcsServiceDiscoveryRegistry>();\n this.props.command.backingData.filtered.serviceDiscoveryRegistries.forEach((e) => {\n displayNameToRegistry.set(e.displayName, e);\n });\n\n return displayNameToRegistry;\n };\n\n private getEmptyRegistry = (): IEcsServiceDiscoveryRegistry => {\n return {\n account: '',\n region: '',\n name: '',\n id: '',\n arn: '',\n displayName: '',\n };\n };\n\n private updateServiceDiscoveryRegistry = (index: number, newRegistry: Option<string>) => {\n const registryMap = this.getNameToRegistryMap();\n let newServiceDiscoveryRegistry = registryMap.get(newRegistry.value);\n\n if (!newServiceDiscoveryRegistry) {\n newServiceDiscoveryRegistry = this.getEmptyRegistry();\n }\n\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociation = currentAssociations[index];\n targetAssociation.registry = newServiceDiscoveryRegistry;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private updateServiceDiscoveryPort = (index: number, targetPort: number) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociations = currentAssociations[index];\n targetAssociations.containerPort = targetPort;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private updateServiceDiscoveryContainerName = (index: number, targetContainerName: string) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociations = currentAssociations[index];\n targetAssociations.containerName = targetContainerName;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private pushServiceDiscoveryAssociation = () => {\n const registryAssociations = this.state.serviceDiscoveryAssociations;\n registryAssociations.push({ registry: this.getEmptyRegistry(), containerPort: 80, containerName: '' });\n this.setState({ serviceDiscoveryAssociations: registryAssociations });\n };\n\n private removeServiceDiscoveryAssociations = (index: number) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n currentAssociations.splice(index, 1);\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n public render(): React.ReactElement<ServiceDiscovery> {\n const removeServiceDiscoveryAssociation = this.removeServiceDiscoveryAssociations;\n const updateServiceDiscoveryRegistry = this.updateServiceDiscoveryRegistry;\n const updateServiceDiscoveryPort = this.updateServiceDiscoveryPort;\n const updateServiceDiscoveryContainerName = this.updateServiceDiscoveryContainerName;\n\n const registriesAvailable = this.state.serviceDiscoveryRegistriesAvailable.map(function (registry) {\n return { label: `${registry.displayName}`, value: registry.displayName };\n });\n\n const useTaskDefinitionArtifact = this.state.useTaskDefinitionArtifact;\n const serviceDiscoveryInputs = this.state.serviceDiscoveryAssociations.map(function (mapping, index) {\n return (\n <tr key={index}>\n {useTaskDefinitionArtifact && (\n <td>\n <input\n className=\"form-control input-sm\"\n placeholder=\"Enter a container name ...\"\n required={true}\n value={mapping.containerName}\n onChange={(e) => updateServiceDiscoveryContainerName(index, e.target.value)}\n />\n </td>\n )}\n <td>\n <TetheredSelect\n placeholder=\"Select a registry...\"\n options={registriesAvailable}\n value={mapping.registry.displayName.toString()}\n onChange={(e: Option) => updateServiceDiscoveryRegistry(index, e as Option<string>)}\n clearable={false}\n required={true}\n />\n </td>\n <td>\n <input\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort}\n onChange={(e) => updateServiceDiscoveryPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a className=\"btn-link sm-label\" onClick={() => removeServiceDiscoveryAssociation(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const newServiceDiscoveryAssociation = this.state.serviceDiscoveryRegistriesAvailable.length ? (\n <button className=\"btn btn-block btn-sm add-new\" onClick={this.pushServiceDiscoveryAssociation}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Service Registry\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No registries found in the selected account/region/VPC</Alert>\n </div>\n );\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Service Registries (optional)</b>\n <HelpField id=\"ecs.serviceDiscovery\" />\n </div>\n <form name=\"ecsServiceDiscoveryRegistryMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n {useTaskDefinitionArtifact && (\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.serviceDiscoveryContainerName\" />\n </th>\n )}\n {useTaskDefinitionArtifact ? (\n <th style={{ width: '55%' }}>\n Registry\n <HelpField id=\"ecs.serviceDiscoveryRegistry\" />\n </th>\n ) : (\n <th style={{ width: '80%' }}>\n Registry\n <HelpField id=\"ecs.serviceDiscoveryRegistry\" />\n </th>\n )}\n <th style={{ width: '15%' }}>\n Port\n <HelpField id=\"ecs.serviceDiscoveryContainerPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{serviceDiscoveryInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newServiceDiscoveryAssociation}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const SERVICE_DISCOVERY_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.serviceDiscovery.react';\nmodule(SERVICE_DISCOVERY_REACT, []).component(\n 'serviceDiscoveryReact',\n react2angular(withErrorBoundary(ServiceDiscovery, 'serviceDiscoveryReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport type { IArtifact, IExpectedArtifact } from '@spinnaker/core';\nimport {\n ArtifactTypePatterns,\n CheckboxInput,\n HelpField,\n StageArtifactSelectorDelegate,\n StageConfigField,\n TetheredSelect,\n withErrorBoundary,\n} from '@spinnaker/core';\n\nimport type {\n IEcsContainerMapping,\n IEcsDockerImage,\n IEcsServerGroupCommand,\n IEcsTargetGroupMapping,\n IEcsTaskDefinitionArtifact,\n} from '../../serverGroupConfiguration.service';\n\nexport interface ITaskDefinitionProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface ITaskDefinitionState {\n taskDefArtifact: IEcsTaskDefinitionArtifact;\n taskDefArtifactAccount: string;\n containerMappings: IEcsContainerMapping[];\n targetGroupMappings: IEcsTargetGroupMapping[];\n dockerImages: IEcsDockerImage[];\n targetGroupsAvailable: string[];\n loadBalancedContainer: string;\n evaluateTaskDefinitionArtifactExpressions: boolean;\n}\n\nexport class TaskDefinition extends React.Component<ITaskDefinitionProps, ITaskDefinitionState> {\n constructor(props: ITaskDefinitionProps) {\n super(props);\n const cmd = this.props.command;\n let defaultContainer = '';\n if (cmd.containerMappings && cmd.containerMappings.length > 0) {\n defaultContainer = cmd.containerMappings[0].containerName;\n }\n\n let defaultTargetGroup: IEcsTargetGroupMapping[] = [];\n if (cmd.targetGroupMappings && cmd.targetGroupMappings.length > 0) {\n defaultTargetGroup = cmd.targetGroupMappings;\n }\n\n if (cmd.targetGroup && cmd.targetGroup.length > 0) {\n defaultTargetGroup.push({\n containerName: cmd.loadBalancedContainer || defaultContainer,\n targetGroup: cmd.targetGroup,\n containerPort: cmd.containerPort,\n });\n cmd.targetGroup = '';\n cmd.loadBalancedContainer = '';\n }\n\n cmd.targetGroupMappings = uniqWith(defaultTargetGroup, isEqual);\n\n this.state = {\n taskDefArtifact: cmd.taskDefinitionArtifact,\n containerMappings: cmd.containerMappings ? cmd.containerMappings : [],\n targetGroupMappings: cmd.targetGroupMappings,\n targetGroupsAvailable: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.targetGroups : [],\n dockerImages: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.images : [],\n loadBalancedContainer: cmd.loadBalancedContainer || defaultContainer,\n taskDefArtifactAccount: cmd.taskDefinitionArtifactAccount,\n evaluateTaskDefinitionArtifactExpressions: cmd.evaluateTaskDefinitionArtifactExpressions,\n };\n }\n\n // TODO: Separate docker image component used by both TaskDefinition and Container\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n dockerImages: this.props.command.backingData.filtered.images,\n targetGroupsAvailable: this.props.command.backingData.filtered.targetGroups,\n });\n });\n }\n\n private getIdToImageMap = (): Map<string, IEcsDockerImage> => {\n const imageIdToDescription = new Map<string, IEcsDockerImage>();\n this.props.command.backingData.filtered.images.forEach((e) => {\n imageIdToDescription.set(e.imageId, e);\n });\n\n return imageIdToDescription;\n };\n\n private getEmptyImageDescription = (): IEcsDockerImage => {\n return {\n imageId: '',\n message: '',\n fromTrigger: false,\n fromContext: false,\n stageId: '',\n imageLabelOrSha: '',\n account: '',\n registry: '',\n repository: '',\n tag: '',\n };\n };\n\n private excludedArtifactTypePatterns = [\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.DOCKER_IMAGE,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ];\n\n private onExpectedArtifactSelected = (expectedArtifactId: string): void => {\n const selectedArtifact = { artifactId: expectedArtifactId };\n this.props.notifyAngular('taskDefinitionArtifact', selectedArtifact);\n this.setState({ taskDefArtifact: selectedArtifact });\n };\n\n private onArtifactEdited = (artifact: IArtifact): void => {\n const newArtifact = { artifact: artifact };\n this.props.notifyAngular('taskDefinitionArtifact', newArtifact);\n this.setState({ taskDefArtifact: newArtifact });\n };\n\n private pushMapping = () => {\n const conMaps = this.state.containerMappings;\n conMaps.push({ containerName: '', imageDescription: this.getEmptyImageDescription() });\n this.setState({ containerMappings: conMaps });\n };\n\n private pushTargetGroupMapping = () => {\n const targetMaps = this.state.targetGroupMappings;\n targetMaps.push({ containerName: '', targetGroup: '', containerPort: 80 });\n this.setState({ targetGroupMappings: targetMaps });\n };\n\n private updateContainerMappingName = (index: number, newName: string) => {\n const currentMappings = this.state.containerMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerName = newName;\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private updateContainerMappingImage = (index: number, newImage: Option<string>) => {\n const imageMap = this.getIdToImageMap();\n let newImageDescription = imageMap.get(newImage.value);\n\n if (!newImageDescription) {\n newImageDescription = this.getEmptyImageDescription();\n }\n const currentMappings = this.state.containerMappings;\n const targetMapping = currentMappings[index];\n targetMapping.imageDescription = newImageDescription;\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private updateTargetGroupMappingTargetGroup = (index: number, newTargetGroup: Option<string>) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.targetGroup = newTargetGroup.value;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateTargetGroupMappingContainer = (index: number, targetContainer: string) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerName = targetContainer;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateTargetGroupMappingPort = (index: number, targetPort: number) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerPort = targetPort;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private removeMapping = (index: number) => {\n const currentMappings = this.state.containerMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private removeTargetGroupMapping = (index: number) => {\n const currentMappings = this.state.targetGroupMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateEvaluateTaskDefArtifactFlag = () => {\n this.props.notifyAngular(\n 'evaluateTaskDefinitionArtifactExpressions',\n !this.props.command.evaluateTaskDefinitionArtifactExpressions,\n );\n this.setState({\n evaluateTaskDefinitionArtifactExpressions: !this.props.command.evaluateTaskDefinitionArtifactExpressions,\n });\n };\n\n public render(): React.ReactElement<TaskDefinition> {\n const { command } = this.props;\n const removeMapping = this.removeMapping;\n const removeTargetGroupMapping = this.removeTargetGroupMapping;\n const updateContainerMappingName = this.updateContainerMappingName;\n const updateContainerMappingImage = this.updateContainerMappingImage;\n const updateTargetGroupMappingContainer = this.updateTargetGroupMappingContainer;\n const updateTargetGroupMappingTargetGroup = this.updateTargetGroupMappingTargetGroup;\n const updateTargetGroupMappingPort = this.updateTargetGroupMappingPort;\n const updateEvaluateTaskDefArtifactFlag = this.updateEvaluateTaskDefArtifactFlag;\n\n const dockerImageOptions = this.state.dockerImages.map(function (image) {\n let msg = '';\n if (image.fromTrigger || image.fromContext) {\n msg = image.fromTrigger ? '(TRIGGER) ' : '(FIND IMAGE RESULT) ';\n }\n return { label: `${msg} (${image.imageId})`, value: image.imageId };\n });\n\n const targetGroupsAvailable = this.state.targetGroupsAvailable.map(function (targetGroup) {\n return { label: `${targetGroup}`, value: targetGroup };\n });\n\n const mappingInputs = this.state.containerMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td>\n <input\n data-test-id=\"Artifacts.containerName\"\n className=\"form-control input-sm\"\n required={true}\n placeholder=\"enter container name...\"\n value={mapping.containerName.toString()}\n onChange={(e) => updateContainerMappingName(index, e.target.value)}\n />\n </td>\n <td data-test-id=\"Artifacts.containerImage\">\n <TetheredSelect\n placeholder=\"Select an image to use...\"\n options={dockerImageOptions}\n value={mapping.imageDescription.imageId}\n onChange={(e: Option) => {\n updateContainerMappingImage(index, e as Option<string>);\n }}\n clearable={false}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"Artifacts.containerRemove\"\n onClick={() => removeMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const targetGroupInputs = this.state.targetGroupMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td>\n <input\n data-test-id=\"Artifacts.targetGroupContainer\"\n className=\"form-control input-sm\"\n required={true}\n placeholder=\"Enter a container name ...\"\n value={mapping.containerName.toString()}\n onChange={(e) => updateTargetGroupMappingContainer(index, e.target.value)}\n />\n </td>\n <td data-test-id=\"Artifacts.targetGroup\">\n <TetheredSelect\n placeholder=\"Select a target group to use...\"\n options={targetGroupsAvailable}\n value={mapping.targetGroup.toString()}\n onChange={(e: Option) => updateTargetGroupMappingTargetGroup(index, e as Option<string>)}\n clearable={false}\n />\n </td>\n <td>\n <input\n data-test-id=\"Artifacts.targetGroupPort\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort.toString()}\n onChange={(e) => updateTargetGroupMappingPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"Artifacts.targetGroupRemove\"\n onClick={() => removeTargetGroupMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const newTargetGroupMapping = this.state.targetGroupsAvailable.length ? (\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"Artifacts.targetGroupAdd\"\n onClick={this.pushTargetGroupMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Target Group Mapping\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No target groups found in the selected account/region/VPC</Alert>\n </div>\n );\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <StageArtifactSelectorDelegate\n artifact={this.state.taskDefArtifact.artifact}\n excludedArtifactTypePatterns={this.excludedArtifactTypePatterns}\n expectedArtifactId={this.state.taskDefArtifact.artifactId}\n label=\"Artifact\"\n helpKey=\"ecs.taskDefinitionArtifact\"\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) => this.onExpectedArtifactSelected(artifact.id)}\n onArtifactEdited={this.onArtifactEdited}\n pipeline={command.viewState.pipeline}\n stage={command.viewState.currentStage}\n />\n </div>\n </div>\n\n <StageConfigField\n groupClassName=\"form-group evaluateTaskDef\"\n label=\"Expression Evaluation\"\n helpKey=\"ecs.evaluateExpression\"\n labelColumns={5}\n fieldColumns={7}\n >\n <CheckboxInput\n checked={command.evaluateTaskDefinitionArtifactExpressions === true}\n onChange={() => {\n updateEvaluateTaskDefArtifactFlag();\n }}\n text=\"Evaluate SpEL expressions in artifact\"\n />\n </StageConfigField>\n\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Container Mappings</b>\n <HelpField id=\"ecs.containerMappings\" />\n </div>\n <form name=\"ecsTaskDefinitionContainerMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.containerMappingName\" />\n </th>\n <th style={{ width: '70%' }}>\n Container image\n <HelpField id=\"ecs.containerMappingImage\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{mappingInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={3}>\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"Artifacts.containerAdd\"\n onClick={this.pushMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Container Mapping\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Target Group Mappings</b>\n <HelpField id=\"ecs.targetGroupMappings\" />\n </div>\n <form name=\"ecsTaskDefinitionTargetGroupMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.loadBalancedContainer\" />\n </th>\n <th style={{ width: '55%' }}>\n Target group\n <HelpField id=\"ecs.loadBalancer.targetGroup\" />\n </th>\n <th style={{ width: '15%' }}>\n Target port\n <HelpField id=\"ecs.loadbalancing.targetPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{targetGroupInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newTargetGroupMapping}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const TASK_DEFINITION_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.taskDefinition.react';\nmodule(TASK_DEFINITION_REACT, []).component(\n 'taskDefinitionReact',\n react2angular(withErrorBoundary(TaskDefinition, 'taskDefinitionReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import type { IComponentOptions } from 'angular';\nimport { module } from 'angular';\n\nconst resizeCapacityComponent: IComponentOptions = {\n bindings: {\n command: '=',\n currentSize: '=',\n },\n templateUrl: require('./resizeCapacity.component.html'),\n controller: () => {},\n};\n\nexport const ECS_RESIZE_CAPACITY_COMPONENT = 'spinnaker.ecs.serverGroup.resize';\nmodule(ECS_RESIZE_CAPACITY_COMPONENT, []).component('ecsResizeCapacity', resizeCapacityComponent);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nimport { ECS_RESIZE_CAPACITY_COMPONENT } from './resizeCapacity.component';\n\nexport const ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER =\n 'spinnaker.ecs.serverGroup.details.resize.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER, [\n SERVER_GROUP_WRITER,\n ECS_RESIZE_CAPACITY_COMPONENT,\n ])\n .controller('ecsResizeServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n function ($scope, $uibModalInstance, serverGroupWriter, application, serverGroup) {\n $scope.serverGroup = serverGroup;\n $scope.currentSize = {\n min: serverGroup.capacity.min,\n max: serverGroup.capacity.max,\n desired: serverGroup.capacity.desired,\n newSize: null,\n };\n\n $scope.verification = {};\n\n $scope.command = angular.copy($scope.currentSize);\n $scope.command.advancedMode = serverGroup.capacity.min !== serverGroup.capacity.max;\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Ecs'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n return command.advancedMode\n ? command.min <= command.max && command.desired >= command.min && command.desired <= command.max\n : command.newSize !== null;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Resizing ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.resize = function () {\n if (!this.isValid()) {\n return;\n }\n let capacity = { min: $scope.command.min, max: $scope.command.max, desired: $scope.command.desired };\n if (!$scope.command.advancedMode) {\n capacity = { min: $scope.command.newSize, max: $scope.command.newSize, desired: $scope.command.newSize };\n }\n\n const submitMethod = function () {\n return serverGroupWriter.resizeServerGroup(serverGroup, application, {\n capacity: capacity,\n interestingHealthProviderNames: $scope.command.interestingHealthProviderNames,\n reason: $scope.command.reason,\n });\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nexport const ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.ecs.serverGroup.details.rollback.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [SERVER_GROUP_WRITER]).controller(\n 'ecsRollbackServerGroupCtrl',\n [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n 'disabledServerGroups',\n 'allServerGroups',\n function (\n $scope,\n $uibModalInstance,\n serverGroupWriter,\n application,\n serverGroup,\n disabledServerGroups,\n allServerGroups,\n ) {\n $scope.serverGroup = serverGroup;\n $scope.disabledServerGroups = disabledServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.allServerGroups = allServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.verification = {};\n\n $scope.command = {\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n },\n };\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Ecs'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n\n return command.rollbackContext.restoreServerGroupName !== undefined;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Rollback ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.rollback = function () {\n if (!this.isValid()) {\n return;\n }\n\n const submitMethod = function () {\n return serverGroupWriter.rollbackServerGroup(serverGroup, application, $scope.command);\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.label = function (serverGroup) {\n if (!serverGroup) {\n return '';\n }\n\n if (!serverGroup.buildInfo || !serverGroup.buildInfo.jenkins || !serverGroup.buildInfo.jenkins.number) {\n return serverGroup.name;\n }\n\n return serverGroup.name + ' (build #' + serverGroup.buildInfo.jenkins.number + ')';\n };\n\n this.group = function (serverGroup) {\n return serverGroup.isDisabled ? 'Disabled Server Groups' : 'Enabled Server Groups';\n };\n },\n ],\n);\n","import { module } from 'angular';\nimport { defaults } from 'lodash';\n\nimport type {\n IAmazonServerGroup,\n IAmazonServerGroupView,\n IScalingAdjustmentView,\n IScalingPolicyAlarmView,\n IScalingPolicyView,\n IStepAdjustment,\n IStepAdjustmentView,\n} from '@spinnaker/amazon';\nimport { VpcReader } from '@spinnaker/amazon';\nimport type { IInstance, IVpc } from '@spinnaker/core';\n\nexport class EcsServerGroupTransformer {\n private addComparator(alarm: IScalingPolicyAlarmView): void {\n if (!alarm.comparisonOperator) {\n return;\n }\n\n switch (alarm.comparisonOperator) {\n case 'LessThanThreshold':\n alarm.comparator = '&lt;';\n break;\n case 'GreaterThanThreshold':\n alarm.comparator = '&gt;';\n break;\n case 'LessThanOrEqualToThreshold':\n alarm.comparator = '&le;';\n break;\n case 'GreaterThanOrEqualToThreshold':\n alarm.comparator = '&ge;';\n break;\n }\n }\n\n private addAdjustmentAttributes(policyOrStepAdjustment: IScalingAdjustmentView): void {\n policyOrStepAdjustment.operator = policyOrStepAdjustment.scalingAdjustment < 0 ? 'decrease' : 'increase';\n policyOrStepAdjustment.absAdjustment = Math.abs(policyOrStepAdjustment.scalingAdjustment);\n }\n\n private transformScalingPolicy(policy: IScalingPolicyView): IScalingPolicyView {\n const view: IScalingPolicyView = { ...policy };\n const upperBoundSorter = (a: IStepAdjustmentView, b: IStepAdjustmentView) =>\n b.metricIntervalUpperBound - a.metricIntervalUpperBound;\n const lowerBoundSorter = (a: IStepAdjustmentView, b: IStepAdjustmentView) =>\n a.metricIntervalLowerBound - b.metricIntervalLowerBound;\n\n view.alarms = policy.alarms || [];\n view.alarms.forEach((alarm: IScalingPolicyAlarmView) => this.addComparator(alarm));\n this.addAdjustmentAttributes(view); // simple policies\n if (view.stepAdjustments && view.stepAdjustments.length) {\n view.stepAdjustments.forEach((sa: IStepAdjustmentView) => this.addAdjustmentAttributes(sa)); // step policies\n const sorter = policy.stepAdjustments.every((a: IStepAdjustment) => a.metricIntervalUpperBound !== undefined)\n ? upperBoundSorter\n : lowerBoundSorter;\n view.stepAdjustments.sort((a: IStepAdjustmentView, b: IStepAdjustmentView) => sorter(a, b));\n }\n return view;\n }\n\n public normalizeServerGroupDetails(serverGroup: IAmazonServerGroup): IAmazonServerGroupView {\n const view: IAmazonServerGroupView = { ...serverGroup } as IAmazonServerGroupView;\n if (serverGroup.scalingPolicies) {\n view.scalingPolicies = serverGroup.scalingPolicies.map((policy: IScalingPolicyView) =>\n this.transformScalingPolicy(policy),\n );\n }\n return view;\n }\n\n public normalizeServerGroup(serverGroup: IAmazonServerGroup): PromiseLike<IAmazonServerGroup> {\n serverGroup.instances.forEach((instance: IInstance) => {\n instance.vpcId = serverGroup.vpcId;\n });\n return VpcReader.listVpcs().then(\n (vpc: IVpc[]): IAmazonServerGroup => this.addVpcNameToServerGroup(serverGroup)(vpc),\n );\n }\n\n private addVpcNameToServerGroup(serverGroup: IAmazonServerGroup): (vpc: IVpc[]) => IAmazonServerGroup {\n return (vpcs: IVpc[]) => {\n const match = vpcs.find((test) => test.id === serverGroup.vpcId);\n serverGroup.vpcName = match ? match.name : '';\n return serverGroup;\n };\n }\n\n public convertServerGroupCommandToDeployConfiguration(base: any): any {\n // use _.defaults to avoid copying the backingData, which is huge and expensive to copy over\n const command = defaults({ backingData: [], viewState: [] }, base);\n command.cloudProvider = 'ecs';\n command.availabilityZones = {};\n command.availabilityZones[command.region] = base.availabilityZones;\n command.loadBalancers = (base.loadBalancers || []).concat(base.vpcLoadBalancers || []);\n command.targetGroup = base.targetGroup || '';\n command.account = command.credentials;\n command.subnetType = command.subnetType || '';\n\n if (base.viewState.mode !== 'clone') {\n delete command.source;\n }\n\n delete command.region;\n delete command.viewState;\n delete command.backingData;\n delete command.selectedProvider;\n delete command.instanceProfile;\n delete command.vpcId;\n\n return command;\n }\n}\n\nexport const ECS_SERVER_GROUP_TRANSFORMER = 'spinnaker.ecs.serverGroup.transformer';\nmodule(ECS_SERVER_GROUP_TRANSFORMER, []).service('ecsServerGroupTransformer', EcsServerGroupTransformer);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport { chain, filter, find, has, isEmpty } from 'lodash';\n\nimport {\n AccountService,\n ConfirmationModalService,\n FirewallLabels,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER } from './resize/resizeServerGroup.controller';\nimport { ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\nimport { ECS_SERVER_GROUP_TRANSFORMER } from '../serverGroup.transformer';\n\nexport const ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER = 'spinnaker.ecs.serverGroup.details.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ECS_SERVER_GROUP_TRANSFORMER,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_WRITER,\n ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER,\n ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n ])\n .controller('ecsServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'app',\n 'serverGroup',\n 'ecsServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n 'ecsServerGroupTransformer',\n 'overrideRegistry',\n function (\n $scope,\n $state,\n app,\n serverGroup,\n ecsServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n ecsServerGroupTransformer,\n overrideRegistry,\n ) {\n this.state = {\n loading: true,\n };\n\n this.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n const extractServerGroupSummary = () => {\n return app.ready().then(() => {\n let summary = find(app.serverGroups.data, (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((loadBalancer) => {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some((possibleServerGroup) => {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n return summary;\n });\n };\n\n const autoClose = () => {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n };\n\n const cancelLoader = () => {\n this.state.loading = false;\n };\n\n const retrieveServerGroup = () => {\n return extractServerGroupSummary()\n .then((summary) => {\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then((details) => {\n cancelLoader();\n\n // it's possible the summary was not found because the clusters are still loading\n angular.extend(details, summary, { account: serverGroup.accountId });\n\n this.serverGroup = ecsServerGroupTransformer.normalizeServerGroupDetails(details);\n this.applyAccountDetails(this.serverGroup);\n\n if (!isEmpty(this.serverGroup)) {\n this.image = details.image ? details.image : undefined;\n\n const vpc = this.serverGroup.asg ? this.serverGroup.asg.vpczoneIdentifier : '';\n\n if (vpc !== '') {\n const subnetId = vpc.split(',')[0];\n SubnetReader.listSubnets().then((subnets) => {\n const subnet = chain(subnets).find({ id: subnetId }).value();\n this.serverGroup.subnetType = subnet.purpose;\n });\n }\n\n if (details.image && details.image.description) {\n const tags = details.image.description.split(', ');\n tags.forEach((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.image && details.image.tags) {\n const baseAmiVersionTag = details.image.tags.find((tag) => tag.key === 'base_ami_version');\n if (baseAmiVersionTag) {\n details.baseAmiVersion = baseAmiVersionTag.value;\n }\n }\n\n this.scalingPolicies = this.serverGroup.scalingPolicies;\n // TODO - figure out whether we need the commented out block below, or not. IF we do, then we need to make it stop crashing\n\n if (has(this.serverGroup, 'buildInfo.jenkins')) {\n this.changeConfig.buildInfo = {\n jenkins: this.serverGroup.buildInfo.jenkins,\n };\n }\n\n /*this.scalingPoliciesDisabled = this.scalingPolicies.length && this.autoScalingProcesses\n .filter(p => !p.enabled)\n .some(p => ['Launch','Terminate','AlarmNotification'].includes(p.name));\n this.scheduledActionsDisabled = this.serverGroup.scheduledActions.length && this.autoScalingProcesses\n .filter(p => !p.enabled)\n .some(p => ['Launch','Terminate','ScheduledAction'].includes(p.name));\n configureEntityTagTargets();\n\n this.changeConfig = {\n metadata: get(this.serverGroup.entityTags, 'creationMetadata')\n };\n */\n } else {\n autoClose();\n }\n });\n })\n .catch(autoClose);\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 = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = (params) => serverGroupWriter.destroyServerGroup(serverGroup, app, params);\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\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 askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.disableServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.enableServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.rollbackServerGroup = () => {\n $uibModal.open({\n templateUrl: overrideRegistry.getTemplate(\n 'ecs.rollback.modal',\n require('./rollback/rollbackServerGroup.html'),\n ),\n windowClass: 'modal-z-index',\n controller: 'ecsRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => this.serverGroup,\n disabledServerGroups: () => {\n const cluster = find(app.clusters, { name: this.serverGroup.cluster, account: this.serverGroup.account });\n return filter(cluster.serverGroups, { isDisabled: true, region: this.serverGroup.region });\n },\n allServerGroups: () =>\n app\n .getDataSource('serverGroups')\n .data.filter(\n (g) =>\n g.cluster === this.serverGroup.cluster &&\n g.region === this.serverGroup.region &&\n g.account === this.serverGroup.account &&\n g.name !== this.serverGroup.name,\n ),\n application: () => app,\n },\n });\n };\n\n this.resizeServerGroup = () => {\n $uibModal.open({\n templateUrl: overrideRegistry.getTemplate('ecs.resize.modal', require('./resize/resizeServerGroup.html')),\n controller: 'ecsResizeServerGroupCtrl as ctrl',\n windowClass: 'modal-z-index',\n resolve: {\n serverGroup: () => this.serverGroup,\n application: () => app,\n },\n });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'ecsCloneServerGroupCtrl as ctrl',\n size: 'lg',\n windowClass: 'modal-z-index',\n resolve: {\n title: () => 'Clone ' + serverGroup.name,\n application: () => app,\n serverGroupCommand: () =>\n ecsServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup),\n },\n });\n };\n\n this.buildJenkinsLink = () => {\n if (has(this, 'serverGroup.buildInfo.buildInfoUrl')) {\n return this.serverGroup.buildInfo.buildInfoUrl;\n } else if (has(this, 'serverGroup.buildInfo.jenkins')) {\n const jenkins = this.serverGroup.buildInfo.jenkins;\n return jenkins.host + 'job/' + jenkins.name + '/' + jenkins.number;\n }\n return null;\n };\n\n this.truncateCommitHash = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.commit) {\n return this.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n\n this.applyAccountDetails = (serverGroup) => {\n return AccountService.getAccountDetails(serverGroup.account).then((details) => {\n serverGroup.accountDetails = details;\n });\n };\n },\n ]);\n","import { module } from 'angular';\nimport { ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER } from './serverGroupDetails.ecs.controller';\n\nexport const SERVER_GROUP_DETAILS_MODULE = 'spinnaker.ecs.serverGroup.details';\nmodule(SERVER_GROUP_DETAILS_MODULE, [ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER]);\n","import { $log } from 'ngimport';\n\nimport type { IServerGroup } from '@spinnaker/core';\nimport { REST } from '@spinnaker/core';\n\nexport interface IEventDescription {\n createdAt: number;\n message: string;\n id: string;\n status: string;\n}\n\nexport class ServerGroupEventsReader {\n public static getEvents(serverGroup: IServerGroup): PromiseLike<IEventDescription[]> {\n return REST('/applications')\n .path(serverGroup.app, 'serverGroups', serverGroup.account, serverGroup.name, 'events')\n .query({\n region: serverGroup.region,\n provider: serverGroup.cloudProvider,\n })\n .get()\n .catch((error: any): any[] => {\n $log.error(error, 'error retrieving events');\n return [];\n });\n }\n}\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\n\nimport type { IServerGroup } from '@spinnaker/core';\n\nimport type { IEventDescription } from './serverGroupEventsReader.service';\nimport { ServerGroupEventsReader } from './serverGroupEventsReader.service';\n\nexport interface IScalingActivitiesViewState {\n loading: boolean;\n error: boolean;\n}\n\nexport class EventsController implements IController {\n public viewState: IScalingActivitiesViewState;\n public events: IEventDescription[] = [];\n\n public static $inject = ['$uibModalInstance', 'serverGroup'];\n public constructor(private $uibModalInstance: IModalServiceInstance, public serverGroup: IServerGroup) {}\n\n public $onInit(): void {\n this.viewState = {\n loading: true,\n error: false,\n };\n\n ServerGroupEventsReader.getEvents(this.serverGroup).then(\n (rawEvents: IEventDescription[]) => {\n this.viewState.loading = false;\n this.events = rawEvents;\n },\n () => {\n this.viewState.error = true;\n },\n );\n }\n\n public close(): void {\n this.$uibModalInstance.close();\n }\n}\n\nexport const EVENTS_CTRL = 'spinnaker.ecs.serverGroup.events.controller';\nmodule(EVENTS_CTRL, []).controller('EventsController', EventsController);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport { EVENTS_CTRL, EventsController } from './events.controller';\n\nclass ViewEventsLinkCtrl implements IController {\n public serverGroup: any;\n\n public static $inject = ['$uibModal'];\n public constructor(private $uibModal: IModalService) {}\n\n public showEvents(): void {\n this.$uibModal.open({\n templateUrl: require('./events.html'),\n controller: EventsController,\n controllerAs: '$ctrl',\n windowClass: 'modal-z-index',\n resolve: {\n serverGroup: () => this.serverGroup,\n },\n });\n }\n}\n\nexport const viewEventsLink: IComponentOptions = {\n bindings: {\n serverGroup: '<',\n },\n controller: ViewEventsLinkCtrl,\n template: `<a href ng-click=\"$ctrl.showEvents()\">View Events</a>`,\n};\n\nexport const VIEW_EVENTS_LINK_COMPONENT = 'spinnaker.ecs.serverGroup.details.viewEvents.link';\nmodule(VIEW_EVENTS_LINK_COMPONENT, [EVENTS_CTRL]).component('viewEventsLink', viewEventsLink);\n","import { module } from 'angular';\n\nimport { VIEW_EVENTS_LINK_COMPONENT } from './events/events.component';\n\nexport const ECS_SERVERGROUP_MODULE = 'spinnaker.ecs.serverGroup';\nmodule(ECS_SERVERGROUP_MODULE, [VIEW_EVENTS_LINK_COMPONENT]);\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","'use strict';\n\nimport { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport { COMMON_MODULE } from './common/common.module';\nimport './ecs.help';\nimport './ecs.settings';\nimport { ECS_CLUSTER_READ_SERVICE } from './ecsCluster/ecsCluster.read.service';\nimport { IAM_ROLE_READ_SERVICE } from './iamRoles/iamRole.read.service';\nimport { ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { EcsLoadBalancerClusterContainer } from './loadBalancer/EcsLoadBalancerClusterContainer';\nimport { EcsLoadBalancerDetails } from './loadBalancer/details/loadBalancerDetails';\nimport { EcsTargetGroupDetails } from './loadBalancer/details/targetGroupDetails';\nimport { EcsLoadBalancerTransformer } from './loadBalancer/loadBalancer.transformer';\nimport { ECS_TARGET_GROUP_STATES } from './loadBalancer/targetGroup.states';\nimport ecsLogo from './logo/ecs.logo.svg';\nimport { METRIC_ALARM_READ_SERVICE } from './metricAlarm/metricAlarm.read.service';\nimport { ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/ecsDestroyAsgStage';\nimport { ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE } from './pipeline/stages/disableAsg/ecsDisableAsgStage';\nimport { ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE } from './pipeline/stages/disableCluster/ecsDisableClusterStage';\nimport { ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE } from './pipeline/stages/enableAsg/ecsEnableAsgStage';\nimport { ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE } from './pipeline/stages/findImageFromTags/ecsFindImageFromTagStage';\nimport { ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE } from './pipeline/stages/resizeAsg/ecsResizeAsgStage';\nimport { ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage';\nimport { ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/ecsShrinkClusterStage';\nimport { PLACEMENT_STRATEGY_SERVICE } from './placementStrategy/placementStrategy.service';\nimport { ECS_SECRET_READ_SERVICE } from './secrets/secret.read.service';\nimport { ECS_SECURITY_GROUP_MODULE } from './securityGroup/securityGroup.module';\nimport { ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER } from './serverGroup/configure/wizard/CloneServerGroup.ecs.controller';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT } from './serverGroup/configure/wizard/advancedSettings/advancedSettings.component';\nimport { ECS_CAPACITY_PROVIDER_REACT } from './serverGroup/configure/wizard/capacityProvider/CapacityProvider';\nimport { CONTAINER_REACT } from './serverGroup/configure/wizard/container/Container';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT } from './serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER } from './serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller';\nimport { ECS_SERVER_GROUP_LOGGING } from './serverGroup/configure/wizard/logging/logging.component';\nimport { ECS_NETWORKING_REACT } from './serverGroup/configure/wizard/networking/Networking';\nimport { SERVICE_DISCOVERY_REACT } from './serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery';\nimport { TASK_DEFINITION_REACT } from './serverGroup/configure/wizard/taskDefinition/TaskDefinition';\nimport { SERVER_GROUP_DETAILS_MODULE } from './serverGroup/details/serverGroupDetails.module';\nimport { ECS_SERVERGROUP_MODULE } from './serverGroup/serverGroup.module';\nimport { ECS_SERVER_GROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\n\nimport './logo/ecs.logo.less';\n\nexport const ECS_MODULE = 'spinnaker.ecs';\nmodule(ECS_MODULE, [\n ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER,\n SERVER_GROUP_DETAILS_MODULE,\n IAM_ROLE_READ_SERVICE,\n ECS_SERVER_GROUP_TRANSFORMER,\n // require('./pipeline/stages/cloneServerGroup/ecsCloneServerGroupStage').name, // TODO(Bruno Carrier): We should enable this on Clouddriver before revealing this stage\n ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT,\n ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT,\n TASK_DEFINITION_REACT,\n CONTAINER_REACT,\n ECS_NETWORKING_REACT,\n SERVICE_DISCOVERY_REACT,\n ECS_CAPACITY_PROVIDER_REACT,\n ECS_SERVER_GROUP_LOGGING,\n ECS_CLUSTER_READ_SERVICE,\n ECS_SECRET_READ_SERVICE,\n METRIC_ALARM_READ_SERVICE,\n PLACEMENT_STRATEGY_SERVICE,\n COMMON_MODULE,\n ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER,\n ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE,\n ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE,\n ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE,\n ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE,\n ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE,\n ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE,\n ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE,\n ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE,\n ECS_SECURITY_GROUP_MODULE,\n ECS_SERVERGROUP_MODULE,\n ECS_TARGET_GROUP_STATES,\n]).config(function () {\n CloudProviderRegistry.registerProvider('ecs', {\n name: 'EC2 Container Service',\n logo: { path: ecsLogo },\n serverGroup: {\n transformer: 'ecsServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'ecsServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'ecsCloneServerGroupCtrl',\n commandBuilder: 'ecsServerGroupCommandBuilder',\n // configurationService: 'ecsServerGroupConfigurationService',\n scalingActivitiesEnabled: false,\n skipUpstreamStageCheck: true,\n },\n loadBalancer: {\n transformer: EcsLoadBalancerTransformer,\n ClusterContainer: EcsLoadBalancerClusterContainer,\n targetGroupDetails: EcsTargetGroupDetails,\n details: EcsLoadBalancerDetails,\n },\n instance: {\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'ecsInstanceDetailsCtrl',\n },\n securityGroup: {\n transformer: 'ecsSecurityGroupTransformer',\n reader: 'ecsSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'ecsSecurityGroupDetailsCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('ecs', ['redblack']);\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/common/footer.component.ts","../src/common/common.module.ts","../src/ecs.help.ts","../src/ecs.settings.ts","../src/ecsCluster/ecsCluster.read.service.ts","../src/iamRoles/iamRole.read.service.ts","../src/instance/details/instance.details.controller.js","../src/loadBalancer/TargetGroup.tsx","../src/loadBalancer/EcsLoadBalancerClusterContainer.tsx","../src/loadBalancer/listener.tsx","../src/loadBalancer/details/loadBalancerDetails.tsx","../src/loadBalancer/details/targetGroupDetails.tsx","../src/loadBalancer/loadBalancer.transformer.ts","../src/loadBalancer/targetGroup.states.ts","../src/logo/ecs.logo.svg","../src/metricAlarm/metricAlarm.read.service.ts","../src/pipeline/stages/destroyAsg/ecsDestroyAsgStage.js","../src/pipeline/stages/disableAsg/ecsDisableAsgStage.js","../src/pipeline/stages/disableCluster/ecsDisableClusterStage.js","../src/pipeline/stages/enableAsg/ecsEnableAsgStage.js","../src/pipeline/stages/findImageFromTags/ecsFindImageFromTagStage.js","../src/pipeline/stages/resizeAsg/ecsResizeAsgStage.js","../src/pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage.js","../src/pipeline/stages/shrinkCluster/ecsShrinkClusterStage.js","../src/placementStrategy/placementStrategy.service.ts","../src/secrets/secret.read.service.ts","../src/securityGroup/details/securityGroupDetail.controller.js","../src/securityGroup/securityGroup.reader.ts","../src/securityGroup/securityGroup.transformer.js","../src/securityGroup/securityGroup.module.ts","../src/serviceDiscovery/serviceDiscovery.read.service.ts","../src/serverGroup/configure/serverGroupConfiguration.service.ts","../src/serverGroup/configure/serverGroupCommandBuilder.service.js","../src/serverGroup/configure/wizard/CloneServerGroup.ecs.controller.js","../src/serverGroup/configure/wizard/advancedSettings/advancedSettings.component.js","../src/serverGroup/configure/wizard/capacityProvider/CapacityProvider.tsx","../src/serverGroup/configure/wizard/container/Container.tsx","../src/serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component.js","../src/serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller.js","../src/serverGroup/configure/wizard/logging/logging.component.ts","../src/serverGroup/configure/wizard/networking/Networking.tsx","../src/serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery.tsx","../src/serverGroup/configure/wizard/taskDefinition/TaskDefinition.tsx","../src/serverGroup/details/resize/resizeCapacity.component.ts","../src/serverGroup/details/resize/resizeServerGroup.controller.js","../src/serverGroup/details/rollback/rollbackServerGroup.controller.js","../src/serverGroup/serverGroup.transformer.ts","../src/serverGroup/details/serverGroupDetails.ecs.controller.js","../src/serverGroup/details/serverGroupDetails.module.ts","../src/serverGroup/events/serverGroupEventsReader.service.ts","../src/serverGroup/events/events.controller.ts","../src/serverGroup/events/events.component.ts","../src/serverGroup/serverGroup.module.ts","../../../node_modules/style-inject/dist/style-inject.es.js","../src/ecs.module.ts"],"sourcesContent":["import type { IComponentOptions } from 'angular';\nimport { module } from 'angular';\n\nconst footerComponent: IComponentOptions = {\n bindings: {\n action: '&',\n isValid: '&',\n cancel: '&',\n account: '=?',\n verification: '=?',\n },\n template: `\n <div class=\"modal-footer\">\n <user-verification account=\"$ctrl.account\" verification=\"$ctrl.verification\"></user-verification>\n <button type=\"submit\" ng-click=\"$ctrl.action()\" style=\"display:none\"></button> <!-- Allows form submission via enter keypress-->\n <button class=\"btn btn-default\" ng-click=\"$ctrl.cancel()\">Cancel</button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n ng-click=\"$ctrl.action()\"\n ng-disabled=\"!$ctrl.isValid()\">\n Submit\n </button>\n </div>\n `,\n controller: () => {},\n};\n\nexport const ECS_FOOTER_COMPONENT = 'spinnaker.ecs.footer';\nmodule(ECS_FOOTER_COMPONENT, []).component('ecsFooter', footerComponent);\n","import { module } from 'angular';\n\nimport { ECS_FOOTER_COMPONENT } from './footer.component';\n\nexport const COMMON_MODULE = 'spinnaker.ecs.common';\nmodule(COMMON_MODULE, [ECS_FOOTER_COMPONENT]);\n","import { HelpContentsRegistry } from '@spinnaker/core';\n\nconst helpContents: { [key: string]: string } = {\n 'ecs.loadBalancer.targetGroup':\n '<p>A <em>target group</em> is attached to an application / network load balancer and is a target for load balancer traffic.</p> <p> You need to create both the application load balancer and target groups prior to being able to use them in your pipeline.</p>',\n 'ecs.serverGroup.clusterName':\n '<p>The name of the ECS cluster (group of underlying EC2 hosts) onto which your application will be deployed.</p><p>Note that suggestions here are dependent on the selected account and region combination.</p>',\n 'ecs.stage.findImageByTags.labelOrSha':\n \"<p>As of now, only Amazon's ECR is supported as a source docker repository.</p>\",\n 'ecs.serverGroup.stack':\n '<p>An environment variable available within your container, and on which you should base your application configuration at runtime.</p> <p>Typical values for this parameter are <i>staging</i>, <i>prod</i>, etc. Keep this parameter short!</p>',\n 'ecs.serverGroup.detail':\n '<p>An environment variable available within your container, and on which you should base your application configuration at runtime.</p> <p>Typical values for this parameter are <i>app</i>, <i>worker</i>, <i>migrator</i>, etc. Keep this parameter short!</p>',\n 'ecs.capacity.overwrite':\n \"<p>Checking this box will have the previous server group's capacity overwrite the new <i>min</i>, <i>max</i> and <i>desired capacity</i> parameters if a previous server group exists.</p>\",\n 'ecs.capacity.desired': '<p>The starting number of containers, before any autoscaling happens.</p>',\n 'ecs.capacity.minimum':\n '<p>The minimum number of containers you can reach as a result of autoscaling.</p> <p>Typically, this represents the bare minimum you can afford to run without impacting your capacity to meet your SLA (Service Level Agreement) objectives</p>',\n 'ecs.capacity.maximum': '<p>The maximal number of containers you can reach as a result of autoscaling.</p>',\n 'ecs.capacity.reserved.computeUnits':\n '<p>The assured minimal amount of computing capacity your container will be able to use. 1024 units are equal to 1 AWS virtual CPU</p> <p>If other containers on your underlying host are not using their reserved compute capacity, this container will be able to use it.</p>',\n 'ecs.capacity.reserved.memory':\n '<p>The maximal amount of memory that your container can use, in megabytes. Exceeding this amount may result in termination of your container.</p><p>1024 mb = 1 gb</p>',\n 'ecs.loadbalancing.targetPort': '<p>The port on which your application is listening for incoming traffic</p>',\n 'ecs.iamrole':\n '<p>The IAM role that your container (task, in AWS wording) will inherit. </p><p>Define a role only if your application needs to access AWS APIs</p>',\n 'ecs.dockerimage': 'Docker image for your container, such as nginx:latest',\n 'ecs.dockerimagecredentials':\n '<p>The AWS Secrets Manager secret that contains private registry credentials.</p><p>Define credentials only for private registries other than Amazon ECR.</p>',\n 'ecs.placementConstraints':\n '<p>Rules for task placement. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-constraints.html\" target=\"_blank\">AWS documentation</a> for more details. </p>',\n 'ecs.placementConstraintType':\n '<p>To ensure that each task in a particular group is running on a different container instance, use distinctInstance. To restrict the selection to a group of valid candidates, use memberOf. </p>',\n 'ecs.placementConstraintExpression':\n '<p>A cluster query language expression to apply to memberOf constraints. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-query-language.html\" target=\"_blank\">AWS documentation</a> for more details.</p>',\n 'ecs.placementStrategy':\n '<p>The strategy the container scheduler will be using. See <a href=\"http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-placement-strategies.html\" target=\"_blank\">AWS documentation</a> for more details. </p><p>You should at least balance across availability zones</p><p>Custom placement strategies have not been implemented yet.</p>',\n 'ecs.platformVersion': '<p>Defaults to the latest platform version.</p>',\n 'ecs.enableDeploymentCircuitBreaker': '<p>Enable circuit breaker for the ECS service.</p>',\n 'ecs.capacity.copySourceScalingPoliciesAndActions':\n '<p>Copy Application Autoscaling policies and their associated alarms from the previous ECS service.</p>',\n 'ecs.launchtype': '<p>Launch service tasks on your own EC2 instances or on Fargate.</p>',\n 'ecs.healthgraceperiod':\n '<p>How long a container will be kept alive despite the load balancer health checks, in seconds.</p>',\n 'ecs.publicip': '<p>Assign a public IP address to each task.</p>',\n 'ecs.networkMode':\n '<p>awsvpc is the only networking mode that allows you to use Elastic Network Interfaces (ENI). The default value converts to Bridge on Linux, and NAT on Windows.</p>',\n 'ecs.subnet':\n '<p>The subnet group(s) on which your server group will be deployed. All subnet groups selected must exist within the same VPC.</p>',\n 'ecs.securityGroups': '<p>The security group(s) name(s) your containers are deployed with.</p>',\n 'ecs.dockerLabels':\n '<p>Additional labels applied to your Docker container. This metadata can be used to identify your containers, or in conjunction with logging options. Maps directly to the <a href=\"https://docs.docker.com/engine/reference/commandline/run/#set-metadata-on-container--l---label---label-file\"><b>--label</b> Docker flag</a>.</p> <p>Spinnaker will automatically add the spinnaker.servergroup, spinnaker.stack, spinnaker.detail labels for non-null values.</p>',\n 'ecs.logDriver':\n '<p>The container\\'s logging driver. This directly maps to the <a href=\"https://docs.docker.com/config/containers/logging/configure/#configure-the-default-logging-driver\"><b>--log-driver</b> Docker flag.</a></p>',\n 'ecs.logOptions':\n '<p>A map of log options. This directly maps with the <a href=\"https://docs.docker.com/config/containers/logging/log_tags/\"><b>--log-opt</b> Docker flag </a></p>',\n 'ecs.taskDefinition':\n '<p>The source of the ECS Task Definition. Task Definition contents can either be entered manually via input fields or from a selected JSON file artifact. Artifact file contents should be structured as an ECS \"RegisterTaskDefinition\" request.</p>',\n 'ecs.taskDefinitionArtifact': '<p>The artifact containing the ECS Task Definition.</p>',\n 'ecs.containerMappings':\n '<p>The list of expected containers within the Task Definition and which container image they should use. Containers in the Task Definition which are not specified here will be registered as they appear in the artifact.</p>',\n 'ecs.containerMappingName':\n '<p>The name of the container. Name should match the <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ContainerDefinition.html#ECS-Type-ContainerDefinition-name\"><b>containerDefinition.name</b></a> field as it appears in the Task Definition.</p>',\n 'ecs.containerMappingImage': '<p>The container image the named container should run.</p>',\n 'ecs.targetGroupMappings':\n '<p>The list of target groups through which the ECS service will receive load balancer traffic. Each target group is mapped to a container name and port within the Task Definition to specify which container should be registered to the target group.</p>',\n 'ecs.loadBalancedContainer':\n '<p>The container in the Task Definition that should receive traffic from the load balancer. Required if a load balancer target group has been specified.</p>',\n 'ecs.tags': '<p>The tags to apply to the task definition and the service',\n 'ecs.environmentVariables':\n '<p>The environment variable(s) your container are deployed with. SERVER_GROUP, CLOUD_STACK and CLOUD_DETAIL environment variables are used during deployment to identify the task and cannot be set here.</p>',\n 'ecs.serviceDiscovery': '<p>The AWS Cloud Map service discovery registries to assign to this service</p>',\n 'ecs.serviceDiscoveryRegistry': '<p>The AWS Cloud Map service to use for service discovery registration</p>',\n 'ecs.serviceDiscoveryContainerPort':\n '<p>The port to be used for your service discovery service. Required only for services using bridge or host network mode, and for services using awsvpc network mode and a type SRV DNS record',\n 'ecs.serviceDiscoveryContainerName':\n '<p>The container name value, already specified in the task definition, to be used for your service discovery service.</p>',\n 'ecs.computeOptions':\n '<p>Specify either a <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html\" target=\"_blank\">launch type</a> (default) or <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-capacity-providers.html\" target=\"_blank\">capacity providers</a> for running your ECS service.</p>',\n 'ecs.capacityProviderStrategy':\n '<p>A capacity provider strategy gives you control over how your tasks use one or more capacity providers. See <a href=\"https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-capacity-providers.html#capacity-providers-concepts\" target=\"_blank\">AWS documentation</a> for more details. </p>',\n 'ecs.capacityProviderName': '<p>The short name of the capacity provider.</p>',\n 'ecs.capacityProviderBase':\n '<p>Designates how many tasks, at a minimum, to run on the specified capacity provider. Only one capacity provider in a capacity provider strategy can have a <em>base</em> defined.</p>',\n 'ecs.capacityProviderWeight':\n '<p>Designates the relative percentage of the total number of tasks launched that should use the specified capacity provider.</p>',\n 'ecs.evaluateExpression':\n '<p>Whether to evaluate <a href=\"https://spinnaker.io/guides/user/pipeline/expressions/\" target=\"_blank\"><b>pipeline expressions</b></a> within the task definition artifact in this stage. Checking this box let\\'s you evaluate your task definition artifact coming from external sources.(e.g. GitHub) </p>',\n};\n\nObject.keys(helpContents).forEach((key) => HelpContentsRegistry.register(key, helpContents[key]));\n","import type { IProviderSettings } from '@spinnaker/core';\nimport { SETTINGS } from '@spinnaker/core';\n\nexport interface IECSProviderSettings extends IProviderSettings {\n defaults: {\n account?: string;\n region?: string;\n zone?: string;\n };\n}\n\nexport const IECSProviderSettings: IECSProviderSettings = (SETTINGS.providers.ecs as IECSProviderSettings) || {\n defaults: {},\n};\nif (IECSProviderSettings) {\n IECSProviderSettings.resetToOriginal = SETTINGS.resetProvider('ecs');\n}\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\n\nimport type { IEcsCapacityProviderDetails } from './IEcsCapacityProviderDetails';\nimport type { IEcsClusterDescriptor } from './IEcsCluster';\n\nexport class EcsClusterReader {\n public listClusters(): PromiseLike<IEcsClusterDescriptor[]> {\n return REST('/ecs/ecsClusters').get();\n }\n\n public describeClusters(account: string, region: string): PromiseLike<IEcsCapacityProviderDetails[]> {\n if (account != null && region != null) {\n return REST('/ecs/ecsClusterDescriptions').path(account).path(region).get();\n }\n return {} as PromiseLike<IEcsCapacityProviderDetails[]>;\n }\n}\n\nexport const ECS_CLUSTER_READ_SERVICE = 'spinnaker.ecs.ecsCluster.read.service';\n\nmodule(ECS_CLUSTER_READ_SERVICE, []).service('ecsClusterReader', EcsClusterReader);\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { IRoleDescriptor } from './IRole';\n\nexport class IamRoleReader {\n public listRoles(provider: string): PromiseLike<IRoleDescriptor[]> {\n return REST('/roles').path(provider).get();\n }\n}\n\nexport const IAM_ROLE_READ_SERVICE = 'spinnaker.ecs.iamRole.read.service';\n\nmodule(IAM_ROLE_READ_SERVICE, []).service('iamRoleReader', IamRoleReader);\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 { applyHealthCheckInfoToTargetGroups, getAllTargetGroups } from '@spinnaker/amazon';\nimport {\n CloudProviderRegistry,\n ConfirmationModalService,\n InstanceReader,\n InstanceWriter,\n RecentHistoryService,\n SETTINGS,\n} from '@spinnaker/core';\n\nexport const ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER = 'spinnaker.ecs.instance.details.controller';\nexport const name = ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER; // for backwards compatibility\nmodule(ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER, [UIROUTER_ANGULARJS, ANGULAR_UI_BOOTSTRAP]).controller(\n 'ecsInstanceDetailsCtrl',\n [\n '$scope',\n '$state',\n '$uibModal',\n 'instance',\n 'app',\n 'moniker',\n 'environment',\n '$q',\n 'overrides',\n function ($scope, $state, $uibModal, instance, app, moniker, environment, $q, overrides) {\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('ecs', 'instance.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n instancePort: _.get(app, 'attributes.instancePort') || SETTINGS.defaultInstancePort || 80,\n };\n\n $scope.application = app;\n $scope.moniker = moniker;\n $scope.environment = environment;\n\n const cloudProvider = 'ecs';\n const defaultRequestParams = { cloudProvider: cloudProvider };\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 !== 'Ecs' || metric.state !== 'Unknown';\n });\n\n // augment with target group healthcheck data\n const targetGroups = getAllTargetGroups(app.loadBalancers.data);\n applyHealthCheckInfoToTargetGroups(displayableMetrics, targetGroups, instance.account);\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, targetGroup, account, region, vpcId;\n if (!app.serverGroups) {\n // standalone instance\n instanceSummary = {};\n loadBalancers = [];\n targetGroup = [];\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 targetGroup = serverGroup.targetGroup;\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 (\n 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 loadBalancer.targetGroup.some(function (targetGroup) {\n return targetGroup.instances.some(function (possibleInstance) {\n if (possibleInstance.id === instance.instanceId) {\n instanceSummary = possibleInstance;\n targetGroup = targetGroup.name;\n account = loadBalancer.account;\n region = loadBalancer.region;\n vpcId = loadBalancer.vpcId;\n return true;\n }\n });\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 (\n 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 loadBalancer.targetGroup.some(function (targetGroup) {\n targetGroup.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 }\n\n if (instanceSummary && account && region) {\n instanceSummary.account = account;\n extraData.account = account;\n extraData.region = region;\n RecentHistoryService.addExtraDataToLatest('instances', extraData);\n return InstanceReader.getInstanceDetails(account, region, instance.instanceId).then((details) => {\n if ($scope.$$destroyed) {\n return;\n }\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 $scope.instance.targetGroup = targetGroup;\n if ($scope.instance.networkInterfaces) {\n const permanentNetworkInterfaces = $scope.instance.networkInterfaces.filter(\n (f) => f.attachment.deleteOnTermination === false,\n );\n if (permanentNetworkInterfaces.length) {\n $scope.instance.permanentIps = permanentNetworkInterfaces.map((f) => f.privateIpAddress);\n }\n }\n $scope.baseIpAddress = details.publicDnsName || details.privateIpAddress;\n if (overrides.instanceDetailsLoaded) {\n overrides.instanceDetailsLoaded();\n }\n }, autoClose);\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 function autoClose() {\n if ($scope.$$destroyed) {\n return;\n }\n if (app.isStandalone) {\n $scope.state.loading = false;\n $scope.instanceIdNotFound = instance.instanceId;\n $scope.state.notFoundStandalone = true;\n RecentHistoryService.removeLastItem('instances');\n } else {\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\n }\n\n this.canRegisterWithDiscovery = function () {\n const instance = $scope.instance;\n const healthMetrics = instance.health || [];\n const discoveryHealth = healthMetrics.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, defaultRequestParams);\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, defaultRequestParams);\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.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, defaultRequestParams);\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, defaultRequestParams);\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 const healthMetrics = instance.health || [];\n return healthMetrics.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 { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { IInstanceCounts } from '@spinnaker/core';\nimport { LoadBalancerServerGroup } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer, IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport interface IEcsTargetGroupProps {\n loadBalancer: IEcsLoadBalancer;\n targetGroup: IEcsTargetGroup;\n showServerGroups: boolean;\n showInstances: boolean;\n}\n\nexport class EcsTargetGroup extends React.Component<IEcsTargetGroupProps> {\n public render(): React.ReactElement<EcsTargetGroup> {\n const { targetGroup, loadBalancer, showServerGroups } = this.props;\n\n const params = {\n loadBalancerName: loadBalancer.name,\n region: targetGroup.region,\n accountId: targetGroup.account,\n name: targetGroup.targetGroupName,\n vpcId: targetGroup.vpcId,\n provider: targetGroup.cloudProvider,\n };\n\n // info not yet available; HealthCounts component requires it,\n // but will not render if no values are defined.\n const emptyInstanceCounts: IInstanceCounts = {\n up: undefined,\n down: undefined,\n starting: undefined,\n succeeded: undefined,\n failed: undefined,\n unknown: undefined,\n outOfService: undefined,\n };\n\n return (\n <div className=\"target-group-container container-fluid no-padding\">\n <UISrefActive class=\"active\">\n <UISref to=\".ecsTargetGroupDetails\" params={params}>\n <div className={`clickable clickable-row row no-margin-y target-group-header`}>\n <div className=\"col-md-8 target-group-title\">{targetGroup.targetGroupName}</div>\n </div>\n </UISref>\n </UISrefActive>\n {showServerGroups &&\n targetGroup.serverGroups.map((sgName) => {\n return (\n <LoadBalancerServerGroup\n key={sgName}\n account={targetGroup.account}\n region={targetGroup.region}\n serverGroup={{\n account: targetGroup.account,\n cloudProvider: targetGroup.cloudProvider,\n cluster: sgName,\n instanceCounts: emptyInstanceCounts,\n instances: targetGroup.instances,\n name: sgName,\n type: targetGroup.type,\n region: targetGroup.region,\n }}\n showInstances={false} // TODO: use prop when instanceCounts available\n />\n );\n })}\n </div>\n );\n }\n}\n","import { isEqual } from 'lodash';\nimport React from 'react';\n\nimport type { ILoadBalancerClusterContainerProps } from '@spinnaker/core';\n\nimport { EcsTargetGroup } from './TargetGroup';\nimport type { IEcsLoadBalancer } from '../domain/IEcsLoadBalancer';\n\nexport class EcsLoadBalancerClusterContainer extends React.Component<ILoadBalancerClusterContainerProps> {\n public shouldComponentUpdate(nextProps: ILoadBalancerClusterContainerProps) {\n const serverGroupsDiffer = () =>\n !isEqual(\n (nextProps.serverGroups || []).map((g) => g.name),\n (this.props.serverGroups || []).map((g) => g.name),\n );\n const targetGroupsDiffer = () =>\n !isEqual(\n ((nextProps.loadBalancer as IEcsLoadBalancer).targetGroups || []).map((t) => t.targetGroupName),\n ((this.props.loadBalancer as IEcsLoadBalancer).targetGroups || []).map((t) => t.targetGroupName),\n );\n return (\n nextProps.showInstances !== this.props.showInstances ||\n nextProps.showServerGroups !== this.props.showServerGroups ||\n nextProps.loadBalancer !== this.props.loadBalancer ||\n serverGroupsDiffer() ||\n targetGroupsDiffer()\n );\n }\n\n public render(): React.ReactElement<EcsLoadBalancerClusterContainer> {\n const { loadBalancer, showInstances, showServerGroups } = this.props;\n const lb = loadBalancer as IEcsLoadBalancer;\n\n const TargetGroups = lb.targetGroups.map((targetGroup) => {\n return (\n <EcsTargetGroup\n key={targetGroup.targetGroupName}\n loadBalancer={loadBalancer as IEcsLoadBalancer}\n targetGroup={targetGroup}\n showInstances={showInstances}\n showServerGroups={showServerGroups}\n />\n );\n });\n\n return <div className=\"cluster-container\">{TargetGroups}</div>;\n }\n}\n","import React from 'react';\n\nimport type { IEcsListener } from '../domain/IEcsLoadBalancer';\n\nexport interface IEcsListenerProps {\n listener: IEcsListener;\n}\n\nexport class EcsListener extends React.Component<IEcsListenerProps> {\n constructor(props: IEcsListenerProps) {\n super(props);\n }\n\n private getTargetGroupNameFromArn(arn: string): string {\n const parts = arn.split('/');\n if (parts.length < 0) {\n return arn;\n }\n return parts[1];\n }\n\n public render(): React.ReactElement<EcsListener> {\n const { port, protocol, defaultActions } = this.props.listener;\n\n // TODO: retrieve and display 'rules' in addition to default actions\n return (\n <div>\n <h4>\n {protocol}:{port}\n </h4>\n <div style={{ paddingLeft: 10 }}>\n <i>default actions</i>\n <ul>\n {defaultActions.map((action, i) => {\n if (action.type == 'forward') {\n return (\n <li key={i}>\n &rarr;\n <i className=\"fa fa-fw fa-crosshairs icon\" aria-hidden=\"true\"></i>\n <span>\n {action.targetGroupArn ||\n action.forwardConfig.targetGroups.map((tg) => {\n return this.getTargetGroupNameFromArn(tg.targetGroupArn);\n })}\n </span>\n </li>\n );\n } else {\n return (\n <li key={i}>\n {action.type}:{' '}\n {action.redirectConfig.statusCode ||\n action.fixedResponseConfig.statusCode ||\n action.authenticateOidcConfig.clientId ||\n action.authenticateCognitoActionConfig.userPoolDomain}\n </li>\n );\n }\n })}\n </ul>\n </div>\n </div>\n );\n }\n}\n","import { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { AccountTag, CollapsibleSection, Spinner, timestamp } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer } from '../../domain/IEcsLoadBalancer';\nimport { EcsListener } from '../listener';\n\ninterface IEcsLoadBalancerFromStateParams {\n accountId: string;\n region: string;\n name: string;\n vpcId: string;\n}\n\ninterface IEcsLoadBalancerDetailsState {\n loadBalancer: IEcsLoadBalancer;\n loadBalancerNotFound?: string;\n loading: boolean;\n refreshListenerUnsubscribe: () => void;\n}\n\nexport interface IEcsLoadBalancerDetailsProps {\n app: Application;\n accountId: string;\n loadBalancer: IEcsLoadBalancerFromStateParams;\n}\n\nexport class EcsLoadBalancerDetails extends React.Component<\n IEcsLoadBalancerDetailsProps,\n IEcsLoadBalancerDetailsState\n> {\n constructor(props: IEcsLoadBalancerDetailsProps) {\n super(props);\n this.state = {\n loading: true,\n loadBalancer: undefined,\n refreshListenerUnsubscribe: () => {},\n };\n\n props.app\n .getDataSource('loadBalancers')\n .ready()\n .then(() => this.extractLoadBalancer());\n }\n\n public componentWillUnmount(): void {\n this.state.refreshListenerUnsubscribe();\n }\n\n private extractLoadBalancer(): void {\n const { name, region } = this.props.loadBalancer;\n const loadBalancer: IEcsLoadBalancer = this.props.app\n .getDataSource('loadBalancers')\n .data.find((test: IEcsLoadBalancer) => {\n return test.name === name && test.account === this.props.loadBalancer.accountId && test.region === region;\n });\n\n this.setState({\n loading: false,\n loadBalancer,\n });\n this.state.refreshListenerUnsubscribe();\n\n if (loadBalancer) {\n this.setState({\n refreshListenerUnsubscribe: this.props.app\n .getDataSource('loadBalancers')\n .onRefresh(null, () => this.extractLoadBalancer()),\n });\n } else {\n this.setState({\n refreshListenerUnsubscribe: () => {},\n });\n }\n }\n\n public render(): React.ReactElement<EcsLoadBalancerDetails> {\n const loadBalancerName = this.props.loadBalancer.name;\n const { loadBalancer, loading } = this.state;\n const { accountId } = this.props;\n\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Load balancer not found.</h3>\n </div>\n </div>\n </div>\n );\n\n const loadBalancerHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"header-text horizontal middle\">\n <i className=\"fa icon-sitemap\" />\n <h3 className=\"horizontal middle space-between flex-1\">{loadBalancerName}</h3>\n </div>\n </div>\n );\n\n const loadBalancerContent = () => (\n <div className=\"content\">\n <CollapsibleSection heading=\"Load Balancer Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>Created</dt>\n <dd>{timestamp(loadBalancer.createdTime)}</dd>\n <dt>In</dt>\n <dd>\n <AccountTag account={accountId} />\n <br />\n {loadBalancer.region}\n </dd>\n <dt>VPC</dt>\n <dd>{loadBalancer.vpcId}</dd>\n <dt>Type</dt>\n <dd>{loadBalancer.loadBalancerType}</dd>\n <dt>IP Type</dt>\n <dd>{loadBalancer.ipAddressType}</dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Availability Zones</dt>\n <dd>\n <ul>\n {loadBalancer.availabilityZones.map((az) => {\n return <li key={az}>{az}</li>;\n })}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Target Groups</dt>\n <dd>\n <ul>\n {loadBalancer.targetGroups.map((tg) => {\n return (\n <li key={tg.targetGroupName}>\n <UISrefActive class=\"active\">\n <UISref\n to=\"^.ecsTargetGroupDetails\"\n params={{\n loadBalancerName: loadBalancer.name,\n region: loadBalancer.region,\n accountId: loadBalancer.account,\n name: tg.targetGroupName,\n vpcId: tg.vpcId,\n provider: loadBalancer.cloudProvider,\n }}\n >\n <a>{tg.targetGroupName}</a>\n </UISref>\n </UISrefActive>\n </li>\n );\n })}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>DNS Name</dt>\n <dd>\n <a target=\"_blank\" href={'http://' + loadBalancer.dnsname}>\n {loadBalancer.dnsname}\n </a>\n </dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Status\" defaultExpanded={false}>\n <span>Select a target group to check the instance health status from the view of its server groups.</span>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Listeners\" defaultExpanded={false}>\n {loadBalancer.listeners ? (\n loadBalancer.listeners.map((listener, index) => {\n return (\n <div key={index}>\n <span>\n <EcsListener listener={listener}></EcsListener>\n </span>\n </div>\n );\n })\n ) : (\n <li>No listeners provided.</li>\n )}\n </CollapsibleSection>\n <CollapsibleSection heading=\"Firewalls\" defaultExpanded={false}>\n <ul>\n {loadBalancer.securityGroups ? (\n loadBalancer.securityGroups.map((sg) => {\n return <li key={sg}>{sg}</li>;\n })\n ) : (\n <li>No security groups provided.</li>\n )}\n </ul>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Subnets\" defaultExpanded={false}>\n <ul>\n {loadBalancer.subnets.map((subnet) => {\n return <li key={subnet}>{subnet}</li>;\n })}\n </ul>\n </CollapsibleSection>\n </div>\n );\n\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && loadBalancerHeader()}\n {!loading && !loadBalancer && notFoundContent()}\n {!loading && loadBalancer && loadBalancerContent()}\n </div>\n );\n }\n}\n","import { UISref, UISrefActive } from '@uirouter/react';\nimport React from 'react';\n\nimport type { Application } from '@spinnaker/core';\nimport { AccountTag, CollapsibleSection, Spinner } from '@spinnaker/core';\n\nimport type { IEcsLoadBalancer, IEcsTargetGroup } from '../../domain/IEcsLoadBalancer';\n\ninterface IEcsTargetGroupFromStateParams {\n loadBalancerName: string;\n targetGroupName: string;\n region: string;\n vpcId: string;\n}\n\ninterface IEcsTargetGroupDetailsState {\n loadBalancer: IEcsLoadBalancer;\n targetGroup: IEcsTargetGroup;\n targetGroupNotFound?: string;\n loading: boolean;\n refreshListenerUnsubscribe: () => void;\n}\n\nexport interface IEcsTargetGroupProps {\n app: Application;\n accountId: string;\n name: string;\n targetGroup: IEcsTargetGroupFromStateParams;\n provider: string;\n}\n\nexport class EcsTargetGroupDetails extends React.Component<IEcsTargetGroupProps, IEcsTargetGroupDetailsState> {\n constructor(props: IEcsTargetGroupProps) {\n super(props);\n this.state = {\n loading: true,\n targetGroup: undefined,\n loadBalancer: undefined,\n refreshListenerUnsubscribe: () => {},\n };\n\n props.app\n .getDataSource('loadBalancers')\n .ready()\n .then(() => this.extractTargetGroup());\n }\n\n public componentWillUnmount(): void {\n this.state.refreshListenerUnsubscribe();\n }\n\n private extractTargetGroup(): void {\n const { loadBalancerName, region, targetGroupName } = this.props.targetGroup;\n const loadBalancer: IEcsLoadBalancer = this.props.app\n .getDataSource('loadBalancers')\n .data.find((test: IEcsLoadBalancer) => {\n return test.name === loadBalancerName && test.account === this.props.accountId && test.region === region;\n });\n\n this.setState({\n loadBalancer,\n });\n this.state.refreshListenerUnsubscribe();\n\n if (!loadBalancer) {\n this.setState({\n loading: false,\n targetGroup: null,\n });\n } else {\n const targetGroup: IEcsTargetGroup = loadBalancer.targetGroups.find(\n (tg) => tg.targetGroupName === targetGroupName,\n );\n if (!targetGroup) {\n this.setState({\n loading: false,\n targetGroup: null,\n });\n }\n\n if (targetGroup) {\n this.setState({\n loading: false,\n targetGroup,\n });\n\n if (targetGroup) {\n this.setState({\n refreshListenerUnsubscribe: this.props.app\n .getDataSource('loadBalancers')\n .onRefresh(null, () => this.extractTargetGroup()),\n });\n } else {\n this.setState({\n refreshListenerUnsubscribe: () => {},\n });\n }\n }\n }\n }\n\n public render(): React.ReactElement<EcsTargetGroupDetails> {\n const { name, accountId } = this.props;\n const region = this.props.targetGroup.region;\n const { targetGroup, loadBalancer, loading } = this.state;\n\n const CloseButton = (\n <div className=\"close-button\">\n <UISref to=\"^\">\n <span className=\"glyphicon glyphicon-remove\" />\n </UISref>\n </div>\n );\n\n const loadingHeader = () => (\n <div className=\"header\">\n {CloseButton}\n <div className=\"horizontal center middle\">\n <Spinner size=\"small\" />\n </div>\n </div>\n );\n\n const notFoundContent = () => (\n <div className=\"content\">\n <div className=\"content-section\">\n <div className=\"content-body text-center\">\n <h3>Target group not found.</h3>\n </div>\n </div>\n </div>\n );\n\n const targetGroupHeader = () => (\n <div className=\"header\">\n <div className=\"header-text horizontal middle\">\n <i className=\"fa fa-crosshairs icon\" aria-hidden=\"true\"></i>\n <h3 className=\"horizontal middle space-between flex-1\">{name}</h3>\n </div>\n </div>\n );\n\n const targetGroupContent = () => (\n <div className=\"content\">\n <CollapsibleSection heading=\"Target Group Details\" defaultExpanded={true}>\n <dl className=\"dl-horizontal dl-narrow\">\n <dt>In</dt>\n <dd>\n <AccountTag account={accountId}></AccountTag>\n <br />\n {targetGroup.region}\n </dd>\n <dt>VPC</dt>\n <dd>{targetGroup.vpcId}</dd>\n <dt>Protocol</dt>\n <dd>{targetGroup.protocol}</dd>\n <dt>Port</dt>\n <dd>{targetGroup.port}</dd>\n <dt>Target Type</dt>\n <dd>{targetGroup.targetType.toUpperCase()}</dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Load Balancers</dt>\n <dd>\n {/* TODO: use UISref to display/highlight LBs in this app. See core/.../LoadBalancer.tsx */}\n <ul className=\"collapse-margin-on-filter-collapse\">\n {targetGroup.loadBalancerNames ? (\n targetGroup.loadBalancerNames.map((lb, i) => {\n return <li key={i}>{lb}</li>;\n })\n ) : (\n <li>No load balncers provided.</li>\n )}\n </ul>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Load Balancer DNS Name</dt>\n <dd>\n <a target=\"_blank\" href={'http://' + loadBalancer.dnsname}>\n {loadBalancer.dnsname}\n </a>\n </dd>\n </dl>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Server Groups</dt>\n <dd>\n <ul className=\"collapse-margin-on-filter-collapse\">\n {targetGroup.serverGroups.map((sg, i) => {\n return (\n <li key={i}>\n <UISrefActive class=\"active\">\n <UISref\n to=\"^.serverGroup\"\n params={{\n region: region,\n accountId: accountId,\n serverGroup: sg,\n provider: 'ecs',\n }}\n >\n <a>{sg}</a>\n </UISref>\n </UISrefActive>\n </li>\n );\n })}\n </ul>\n </dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Health Checks\" defaultExpanded={false}>\n <dl className=\"horizontal-when-filters-collapsed\">\n <dt>Target</dt>\n <dd>\n {targetGroup.healthCheckProtocol}:{targetGroup.healthCheckPort}\n {targetGroup.healthCheckPath}\n </dd>\n <dt>Timeout</dt>\n <dd>{targetGroup.healthCheckTimeoutSeconds} seconds</dd>\n <dt>Interval</dt>\n <dd>{targetGroup.healthCheckIntervalSeconds} seconds</dd>\n <dt>Healthy Threshold</dt>\n <dd>{targetGroup.healthyThresholdCount}</dd>\n <dt>Unhealthy Threshold</dt>\n <dd>{targetGroup.unhealthyThresholdCount}</dd>\n <dt>Matcher</dt>\n <dd>HTTP Code(s): {targetGroup && targetGroup.matcher ? targetGroup.matcher.httpCode : 'None'}</dd>\n </dl>\n </CollapsibleSection>\n <CollapsibleSection heading=\"Attributes\" defaultExpanded={false}>\n <dl>\n <dt>Deregistration Delay Timeout</dt>\n <dd>{targetGroup.attributes['deregistration_delay.timeout_seconds'] || 0} seconds</dd>\n <dt>Stickiness Enabled</dt>\n <dd>{targetGroup.attributes['stickiness.enabled'] || 'N/A'}</dd>\n </dl>\n </CollapsibleSection>\n </div>\n );\n\n return (\n <div className=\"details-panel\">\n {loading && loadingHeader()}\n {!loading && targetGroupHeader()}\n {!loading && !targetGroup && notFoundContent()}\n {!loading && targetGroup && targetGroupContent()}\n </div>\n );\n }\n}\n","import type { IQService } from 'angular';\n\nimport type { IEcsLoadBalancer, IEcsLoadBalancerSourceData, IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport class EcsLoadBalancerTransformer {\n public static $inject = ['$q'];\n constructor(private $q: IQService) {}\n\n public normalizeLoadBalancer(loadBalancer: IEcsLoadBalancerSourceData): PromiseLike<IEcsLoadBalancer> {\n loadBalancer.targetGroups.forEach((tg: IEcsTargetGroup) => {\n tg.region = loadBalancer.region;\n tg.account = loadBalancer.account;\n tg.cloudProvider = loadBalancer.cloudProvider;\n if (loadBalancer.targetGroupServices) {\n const tgServiceMap = loadBalancer.targetGroupServices;\n tg.serverGroups = tgServiceMap[tg.targetGroupArn];\n }\n });\n return this.$q.resolve(loadBalancer);\n }\n}\n","import type { StateParams } from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport type { ApplicationStateProvider, INestedState } from '@spinnaker/core';\nimport { APPLICATION_STATE_PROVIDER } from '@spinnaker/core';\n\nimport { EcsTargetGroupDetails } from '../loadBalancer/details/targetGroupDetails';\n//import { IEcsTargetGroup } from '../domain/IEcsLoadBalancer';\n\nexport const ECS_TARGET_GROUP_STATES = 'spinnaker.ecs.loadBalancer.targetGroup.states';\nmodule(ECS_TARGET_GROUP_STATES, [APPLICATION_STATE_PROVIDER]).config([\n 'applicationStateProvider',\n (applicationStateProvider: ApplicationStateProvider) => {\n const ecsTargetGroupDetails: INestedState = {\n name: 'ecsTargetGroupDetails',\n url: '/ecsTargetGroupDetails/:provider/:accountId/:region/:vpcId/:loadBalancerName/:name',\n params: {\n vpcId: {\n value: null,\n squash: true,\n },\n },\n views: {\n 'detail@../insight': {\n component: EcsTargetGroupDetails,\n $type: 'react',\n },\n },\n resolve: {\n accountId: ['$stateParams', ($stateParams: StateParams) => $stateParams.accountId],\n name: ['$stateParams', ($stateParams: StateParams) => $stateParams.name],\n provider: ['$stateParams', ($stateParams: StateParams) => $stateParams.provider],\n // resolve flat params into an IEcsTargetGroup\n targetGroup: [\n '$stateParams',\n ($stateParams: StateParams) => {\n return {\n loadBalancerName: $stateParams.loadBalancerName,\n targetGroupName: $stateParams.name,\n accountId: $stateParams.accountId,\n region: $stateParams.region,\n vpcId: $stateParams.vpcId,\n };\n },\n ],\n },\n data: {\n pageTitleDetails: {\n title: 'Target Group Details',\n nameParam: 'name',\n accountParam: 'accountId',\n regionParam: 'region',\n },\n },\n };\n\n applicationStateProvider.addInsightDetailState(ecsTargetGroupDetails);\n },\n]);\n","export default \"data:image/svg+xml,%3Csvg%20id%3D%22Layer_1%22%20data-name%3D%22Layer%201%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22100%22%20height%3D%22100%22%20viewBox%3D%220%200%20100%20100%22%3E%20%20%3Ctitle%3ECompute%3C%2Ftitle%3E%20%20%3Cg%3E%20%20%20%20%3Cpolygon%20points%3D%2219.64%2022.51%2016%2024.32%2016%2075.68%2019.64%2077.49%2033.98%2051.07%2019.64%2022.51%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2230.72%2031.78%2036.08%2024.19%2060.1%2034.87%2054.5%2035.76%2030.72%2031.78%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2226.56%2068.77%2032.46%2076.88%2060.1%2064.95%2054.76%2064.12%2026.56%2068.77%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2228.12%2075.5%2019.64%2077.49%2019.64%2022.51%2028.12%2024.44%2028.12%2075.5%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2223.66%2020.5%2028.12%2018.27%2036.52%2053.56%2028.12%2081.73%2023.66%2079.5%2023.66%2020.5%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2254.46%2064.08%2060.1%2064.95%2065.26%2050.58%2060.1%2034.87%2054.46%2035.76%2054.46%2064.08%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2236.8%2079.28%2028.12%2081.73%2028.12%2018.27%2036.8%2020.73%2036.8%2079.28%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2266.01%2063.84%2028.12%2070.88%2028.12%2081.73%2066.01%2071.03%2066.01%2063.84%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2266.08%2036%2028.12%2028.79%2028.12%2018.27%2066.08%2029.04%2066.08%2036%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2260.1%2027.34%2066.19%2029.02%2066.19%2071.03%2060.1%2072.7%2060.1%2027.34%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2284%2044.45%2067.7%2045.22%2061.94%2044.83%2078.42%2031.55%2084%2044.45%22%20fill%3D%22%236b3a19%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2261.94%2044.83%2078.42%2043.9%2078.42%2031.55%2061.94%2034.22%2061.94%2044.83%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2043.79%2063.13%2026.96%2071.62%2043.22%2054.31%2044.32%2046.43%2043.79%22%20fill%3D%22%236b3a19%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2043.79%2063.13%2042.37%2063.13%2026.96%2046.43%2030.87%2046.43%2043.79%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2261.94%2055.39%2084%2055.77%2078.42%2068.67%2061.94%2066%2061.94%2055.39%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2056.43%2071.62%2057.01%2063.13%2073.26%2046.43%2069.36%2046.43%2056.43%22%20fill%3D%22%239d5025%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2246.43%2056.43%2063.13%2057.86%2071.62%2057.01%2054.31%2055.9%2046.43%2056.43%22%20fill%3D%22%23fbbf93%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2284%2055.77%2067.7%2055.01%2061.94%2055.39%2078.42%2056.33%2084%2055.77%22%20fill%3D%22%23fbbf93%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.42%2043.9%2084%2044.45%2084%2033.22%2078.42%2031.55%2078.42%2043.9%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2271.62%2043.22%2063.13%2042.37%2063.13%2026.96%2071.62%2029.51%2071.62%2043.22%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2278.42%2056.33%2084%2055.77%2084%2067%2078.42%2068.67%2078.42%2056.33%22%20fill%3D%22%23f58536%22%2F%3E%20%20%20%20%3Cpolygon%20points%3D%2271.62%2057.01%2063.13%2057.86%2063.13%2073.26%2071.62%2070.72%2071.62%2057.01%22%20fill%3D%22%23f58536%22%2F%3E%20%20%3C%2Fg%3E%3C%2Fsvg%3E\"","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { IMetricAlarmDescriptor } from './MetricAlarm';\n\nexport class MetricAlarmReader {\n public listMetricAlarms(): PromiseLike<IMetricAlarmDescriptor[]> {\n return REST('/ecs/cloudMetrics/alarms').get();\n }\n}\n\nexport const METRIC_ALARM_READ_SERVICE = 'spinnaker.ecs.metricAlarm.read.service';\n\nmodule(METRIC_ALARM_READ_SERVICE, []).service('metricAlarmReader', MetricAlarmReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE = 'spinnaker.ecs.pipeline.stage.ecs.destroyAsgStage';\nexport const name = ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'destroyServerGroup',\n alias: 'destroyAsg',\n cloudProvider: 'ecs',\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('ecsDestroyAsgStageCtrl', [\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('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n $scope.regions = ['us-east-1', 'us-west-1', 'eu-west-1', 'us-west-2'];\n\n $scope.targets = StageConstants.TARGET_LIST;\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\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, PipelineTemplates, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE = 'spinnaker.ecs.pipeline.stage.disableAsgStage';\nexport const name = ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableServerGroup',\n alias: 'disableAsg',\n cloudProvider: 'ecs',\n templateUrl: require('./disableAsgStage.html'),\n executionDetailsUrl: PipelineTemplates.disableAsgExecutionDetails,\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('ecsDisableAsgStageCtrl', [\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('ecs').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 = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\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 } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.disableClusterStage';\nexport const name = ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'disableCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./disableClusterStage.html'),\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingEnabledServerGroups',\n fieldLabel: 'Keep [X] enabled Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsDisableClusterStageCtrl', [\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('ecs').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 stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.remainingEnabledServerGroups === undefined) {\n stage.remainingEnabledServerGroups = 1;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE = 'spinnaker.ecs.pipeline.stage.enableAsgStage';\nexport const name = ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'enableServerGroup',\n alias: 'enableAsg',\n cloudProvider: 'ecs',\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('ecsEnableAsgStageCtrl', [\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('ecs').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 = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\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 { module } from 'angular';\n\nimport { Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE =\n 'spinnaker.ecs.pipeline.stage.findImageFromTagsStage';\nexport const name = ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'findImageFromTags',\n cloudProvider: 'ecs',\n templateUrl: require('./findImageFromTagsStage.html'),\n executionDetailsUrl: require('./findImageFromTagsExecutionDetails.html'),\n executionConfigSections: ['findImageConfig', 'taskStatus'],\n validators: [{ type: 'requiredField', fieldName: 'imageLabelOrSha' }],\n });\n })\n .controller('ecsFindImageFromTagsStageCtrl', [\n '$scope',\n function ($scope) {\n $scope.stage.cloudProvider = $scope.stage.cloudProvider || 'ecs';\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry, StageConstants } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE = 'spinnaker.ecs.pipeline.stage.ecs.resizeAsgStage';\nexport const name = ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'resizeServerGroup',\n alias: 'resizeAsg',\n cloudProvider: 'ecs',\n templateUrl: require('./resizeAsgStage.html'),\n executionConfigSections: ['resizeServerGroupConfig', 'taskStatus'],\n executionStepLabelUrl: require('./resizeAsgStepLabel.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 resize a server group without deploying a new version into the same cluster.',\n },\n { type: 'requiredField', fieldName: 'target' },\n { type: 'requiredField', fieldName: 'action' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsResizeAsgStageCtrl', [\n '$scope',\n function ($scope) {\n const ctrl = this;\n\n const stage = $scope.stage;\n\n $scope.viewState = {\n accountsLoaded: false,\n regionsLoaded: false,\n };\n\n AccountService.listAccounts('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.viewState.accountsLoaded = true;\n });\n\n $scope.resizeTargets = StageConstants.TARGET_LIST;\n\n $scope.scaleActions = [\n {\n label: 'Scale Up',\n val: 'scale_up',\n },\n {\n label: 'Scale Down',\n val: 'scale_down',\n },\n {\n label: 'Scale to Cluster Size',\n val: 'scale_to_cluster',\n },\n {\n label: 'Scale to Exact Size',\n val: 'scale_exact',\n },\n ];\n\n $scope.resizeTypes = [\n {\n label: 'Percentage',\n val: 'pct',\n },\n {\n label: 'Incremental',\n val: 'incr',\n },\n ];\n\n stage.capacity = stage.capacity || {};\n stage.regions = stage.regions || [];\n stage.target = stage.target || $scope.resizeTargets[0].val;\n stage.action = stage.action || $scope.scaleActions[0].val;\n stage.resizeType = stage.resizeType || $scope.resizeTypes[0].val;\n if (stage.targetHealthyDeployPercentage === undefined) {\n stage.targetHealthyDeployPercentage = 100;\n }\n if (!stage.action && stage.resizeType === 'exact') {\n stage.action = 'scale_exact';\n }\n stage.cloudProvider = 'ecs';\n\n if (\n stage.isNew &&\n $scope.application.attributes.platformHealthOnlyShowOverride &&\n $scope.application.attributes.platformHealthOnly\n ) {\n stage.interestingHealthProviderNames = ['Ecs'];\n }\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n ctrl.updateResizeType = function () {\n if (stage.action === 'scale_exact') {\n stage.resizeType = 'exact';\n delete stage.scalePct;\n delete stage.scaleNum;\n } else {\n stage.capacity = {};\n if (stage.resizeType === 'pct') {\n delete stage.scaleNum;\n } else {\n stage.resizeType = 'incr';\n delete stage.scalePct;\n stage.scaleNum = stage.scaleNum || 0;\n }\n }\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.scaleDownClusterStage';\nexport const name = ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'scaleDownCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./scaleDownClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n {\n type: 'requiredField',\n fieldName: 'remainingFullSizeServerGroups',\n fieldLabel: 'Keep [X] full size Server Groups',\n },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n strategy: true,\n });\n })\n .controller('ecsScaleDownClusterStageCtrl', [\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('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.remainingFullSizeServerGroups === undefined) {\n stage.remainingFullSizeServerGroups = 1;\n }\n\n if (stage.allowScaleDownActive === undefined) {\n stage.allowScaleDownActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.preferLargerOverNewer === undefined) {\n stage.preferLargerOverNewer = 'false';\n }\n stage.preferLargerOverNewer = stage.preferLargerOverNewer.toString();\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { AccountService, Registry } from '@spinnaker/core';\n\nexport const ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE =\n 'spinnaker.ecs.pipeline.stage.ecs.shrinkClusterStage';\nexport const name = ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE; // for backwards compatibility\nmodule(ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE, [])\n .config(function () {\n Registry.pipeline.registerStage({\n provides: 'shrinkCluster',\n cloudProvider: 'ecs',\n templateUrl: require('./shrinkClusterStage.html'),\n accountExtractor: (stage) => [stage.context.credentials],\n configAccountExtractor: (stage) => [stage.credentials],\n validators: [\n { type: 'requiredField', fieldName: 'cluster' },\n { type: 'requiredField', fieldName: 'shrinkToSize', fieldLabel: 'shrink to [X] Server Groups' },\n { type: 'requiredField', fieldName: 'regions' },\n { type: 'requiredField', fieldName: 'credentials', fieldLabel: 'account' },\n ],\n });\n })\n .controller('ecsShrinkClusterStageCtrl', [\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('ecs').then(function (accounts) {\n $scope.accounts = accounts;\n $scope.state.accounts = true;\n });\n\n stage.regions = stage.regions || [];\n stage.cloudProvider = 'ecs';\n\n if (!stage.credentials && $scope.application.defaultCredentials.ecs) {\n stage.credentials = $scope.application.defaultCredentials.ecs;\n }\n if (!stage.regions.length && $scope.application.defaultRegions.ecs) {\n stage.regions.push($scope.application.defaultRegions.ecs);\n }\n\n if (stage.shrinkToSize === undefined) {\n stage.shrinkToSize = 1;\n }\n\n if (stage.allowDeleteActive === undefined) {\n stage.allowDeleteActive = false;\n }\n\n ctrl.pluralize = function (str, val) {\n if (val === 1) {\n return str;\n }\n return str + 's';\n };\n\n if (stage.retainLargerOverNewer === undefined) {\n stage.retainLargerOverNewer = 'false';\n }\n stage.retainLargerOverNewer = stage.retainLargerOverNewer.toString();\n },\n ]);\n","import { module } from 'angular';\n\nimport type { IPlacementStrategy } from './IPlacementStrategy';\n\nexport class PlacementStrategyService {\n public getPredefinedStrategy(strategyName: string): IPlacementStrategy[] {\n if (strategyName === 'AZ Balanced Spread') {\n return this.getAzBalancedSpreadStrategy();\n } else if (strategyName === 'AZ Balanced BinPack' || strategyName === 'AZ Balanced BinPack Memory') {\n // Note: 'BinPack' is a misleading term which was replaced later by 'BinPack Memory' as it was more clear\n return this.getAzBalancedMemoryBinPackStrategy();\n } else if (strategyName === 'BinPack' || strategyName === 'BinPack Memory') {\n // Note: 'BinPack' is a misleading term which was replaced later by 'BinPack Memory' as it was more clear\n return this.getBinPackMemoryStrategy();\n } else if (strategyName === 'AZ Balanced BinPack CPU') {\n return this.getAzBalancedCpuBinPackStrategy();\n } else if (strategyName === 'BinPack CPU') {\n return this.getBinPackCpuStrategy();\n } else if (strategyName === 'One Task Per Host') {\n return this.getOneTaskPerHostStrategy();\n } else {\n // TODO: Add support for custom placement strategy.\n return [];\n }\n }\n\n public getAzBalancedSpreadStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'spread', field: 'instanceId' },\n ];\n }\n\n public getAzBalancedMemoryBinPackStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'binpack', field: 'memory' },\n ];\n }\n\n public getBinPackMemoryStrategy(): IPlacementStrategy[] {\n return [{ type: 'binpack', field: 'memory' }];\n }\n\n public getAzBalancedCpuBinPackStrategy(): IPlacementStrategy[] {\n return [\n { type: 'spread', field: 'attribute:ecs.availability-zone' },\n { type: 'binpack', field: 'cpu' },\n ];\n }\n\n public getBinPackCpuStrategy(): IPlacementStrategy[] {\n return [{ type: 'binpack', field: 'cpu' }];\n }\n\n public getOneTaskPerHostStrategy(): IPlacementStrategy[] {\n return [{ type: 'spread', field: 'instanceId' }];\n }\n}\n\nexport const PLACEMENT_STRATEGY_SERVICE = 'spinnaker.ecs.placementStrategyService.service';\n\nmodule(PLACEMENT_STRATEGY_SERVICE, []).service('placementStrategyService', PlacementStrategyService);\n","import { module } from 'angular';\n\nimport { REST } from '@spinnaker/core';\nimport type { ISecretDescriptor } from './ISecret';\n\nexport class SecretReader {\n public listSecrets(): PromiseLike<ISecretDescriptor[]> {\n return REST('/ecs/secrets').get();\n }\n}\n\nexport const ECS_SECRET_READ_SERVICE = 'spinnaker.ecs.secret.read.service';\n\nmodule(ECS_SECRET_READ_SERVICE, []).service('secretReader', SecretReader);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { VpcReader } from '@spinnaker/amazon';\nimport {\n CloudProviderRegistry,\n FirewallLabels,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n RecentHistoryService,\n SECURITY_GROUP_READER,\n} from '@spinnaker/core';\n\nexport const ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER =\n 'spinnaker.ecs.securityGroup.details.controller';\nexport const name = ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER, [\n UIROUTER_ANGULARJS,\n SECURITY_GROUP_READER,\n MANAGED_RESOURCE_DETAILS_INDICATOR,\n ])\n .controller('ecsSecurityGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'resolvedSecurityGroup',\n 'app',\n 'securityGroupReader',\n function ($scope, $state, resolvedSecurityGroup, app, securityGroupReader) {\n this.application = app;\n const application = app;\n const securityGroup = resolvedSecurityGroup;\n this.firewallLabel = FirewallLabels.get('Firewall');\n\n // needed for standalone instances\n $scope.detailsTemplateUrl = CloudProviderRegistry.getValue('ecs', 'securityGroup.detailsTemplateUrl');\n\n $scope.state = {\n loading: true,\n standalone: app.isStandalone,\n };\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(function (details) {\n return VpcReader.getVpcName(details.vpcId).then((name) => {\n details.vpcName = name;\n return details;\n });\n })\n .then(function (details) {\n $scope.state.loading = false;\n\n if (!details || _.isEmpty(details)) {\n fourOhFour();\n } else {\n const applicationSecurityGroup = securityGroupReader.getApplicationSecurityGroup(\n application,\n securityGroup.accountId,\n securityGroup.region,\n securityGroup.name,\n );\n\n angular.extend(securityGroup, applicationSecurityGroup, details);\n $scope.securityGroup = securityGroup;\n $scope.ipRules = buildIpRulesModel(securityGroup);\n $scope.securityGroupRules = buildSecurityGroupRulesModel(securityGroup);\n }\n }, fourOhFour);\n }\n\n function buildIpRulesModel(details) {\n const groupedRangeRules = _.groupBy(details.ipRangeRules, (rule) => rule.range.ip + rule.range.cidr);\n return Object.keys(groupedRangeRules)\n .map((addr) => {\n return {\n address: addr,\n rules: buildRuleModel(groupedRangeRules, addr),\n };\n })\n .filter((rule) => rule.rules.length);\n }\n\n function buildSecurityGroupRulesModel(details) {\n const groupedRangeRules = _.groupBy(details.securityGroupRules, (rule) => rule.securityGroup.id);\n return Object.keys(groupedRangeRules)\n .map((addr) => {\n return {\n securityGroup: groupedRangeRules[addr][0].securityGroup,\n rules: buildRuleModel(groupedRangeRules, addr),\n };\n })\n .filter((rule) => rule.rules.length);\n }\n\n function buildRuleModel(groupedRangeRules, addr) {\n const rules = [];\n groupedRangeRules[addr].forEach((rule) => {\n (rule.portRanges || []).forEach((range) => {\n if (rule.protocol === '-1' || (range.startPort !== undefined && range.endPort !== undefined)) {\n rules.push({ startPort: range.startPort, endPort: range.endPort, protocol: rule.protocol });\n }\n });\n });\n return rules;\n }\n\n function fourOhFour() {\n if ($scope.$$destroyed) {\n return;\n }\n if (app.isStandalone) {\n $scope.group = securityGroup.name;\n $scope.state.notFound = true;\n $scope.state.loading = false;\n RecentHistoryService.removeLastItem('securityGroups');\n } else {\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n }\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 && !app.isStandalone) {\n app.securityGroups.onRefresh($scope, extractSecurityGroup);\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","import { module } from 'angular';\n\nimport type { ISecurityGroup, ISecurityGroupsByAccount } from '@spinnaker/core';\n\nexport class EcsSecurityGroupReader {\n public resolveIndexedSecurityGroup(\n indexedSecurityGroups: ISecurityGroupsByAccount,\n container: ISecurityGroup,\n securityGroupId: string,\n ): ISecurityGroup {\n return indexedSecurityGroups[container.account][container.region][securityGroupId];\n }\n}\n\nexport const ECS_SECURITY_GROUP_READER = 'spinnaker.ecs.securityGroup.reader';\nmodule(ECS_SECURITY_GROUP_READER, []).service('ecsSecurityGroupReader', EcsSecurityGroupReader);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER = 'spinnaker.ecs.securityGroup.transformer';\nexport const name = ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER; // for backwards compatibility\nmodule(ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER, []).factory('ecsSecurityGroupTransformer', function () {\n function normalizeSecurityGroup() {}\n\n return {\n normalizeSecurityGroup: normalizeSecurityGroup,\n };\n});\n","import { module } from 'angular';\n\nimport { ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER } from './details/securityGroupDetail.controller';\nimport { ECS_SECURITY_GROUP_READER } from './securityGroup.reader';\nimport { ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER } from './securityGroup.transformer';\n\nexport const ECS_SECURITY_GROUP_MODULE = 'spinnaker.ecs.securityGroup';\nmodule(ECS_SECURITY_GROUP_MODULE, [\n ECS_SECURITY_GROUP_READER,\n ECS_SECURITYGROUP_SECURITYGROUP_TRANSFORMER,\n ECS_SECURITYGROUP_DETAILS_SECURITYGROUPDETAIL_CONTROLLER,\n]);\n","import { REST } from '@spinnaker/core';\nimport type { IServiceDiscoveryRegistryDescriptor } from './IServiceDiscovery';\n\nexport class ServiceDiscoveryReader {\n public static listServiceDiscoveryRegistries(): PromiseLike<IServiceDiscoveryRegistryDescriptor[]> {\n return REST('/ecs/serviceDiscoveryRegistries').get();\n }\n}\n","import type { IQService } from 'angular';\nimport { module } from 'angular';\nimport { chain, clone, extend, find, flatten, has, intersection, keys, some, xor } from 'lodash';\n\nimport type { IAmazonLoadBalancer } from '@spinnaker/amazon';\nimport type {\n IAccountDetails,\n IArtifact,\n IDeploymentStrategy,\n IPipeline,\n IRegion,\n IServerGroupCommand,\n IServerGroupCommandBackingData,\n IServerGroupCommandBackingDataFiltered,\n IServerGroupCommandDirty,\n IServerGroupCommandResult,\n IServerGroupCommandViewState,\n IStage,\n ISubnet,\n LoadBalancerReader,\n SecurityGroupReader,\n ServerGroupCommandRegistry,\n} from '@spinnaker/core';\nimport {\n AccountService,\n CACHE_INITIALIZER_SERVICE,\n LOAD_BALANCER_READ_SERVICE,\n NameUtils,\n SECURITY_GROUP_READER,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n SubnetReader,\n} from '@spinnaker/core';\nimport type { IDockerImage } from '@spinnaker/docker';\nimport { DockerImageReader } from '@spinnaker/docker';\n\nimport type { IEcsCapacityProviderDetails } from '../../ecsCluster/IEcsCapacityProviderDetails';\nimport type { IEcsClusterDescriptor } from '../../ecsCluster/IEcsCluster';\nimport type { EcsClusterReader } from '../../ecsCluster/ecsCluster.read.service';\nimport type { IRoleDescriptor } from '../../iamRoles/IRole';\nimport type { IamRoleReader } from '../../iamRoles/iamRole.read.service';\nimport type { IMetricAlarmDescriptor } from '../../metricAlarm/MetricAlarm';\nimport type { MetricAlarmReader } from '../../metricAlarm/metricAlarm.read.service';\nimport type { IPlacementStrategy } from '../../placementStrategy/IPlacementStrategy';\nimport type { PlacementStrategyService } from '../../placementStrategy/placementStrategy.service';\nimport type { ISecretDescriptor } from '../../secrets/ISecret';\nimport type { SecretReader } from '../../secrets/secret.read.service';\nimport type { IServiceDiscoveryRegistryDescriptor } from '../../serviceDiscovery/IServiceDiscovery';\nimport { ServiceDiscoveryReader } from '../../serviceDiscovery/serviceDiscovery.read.service';\n\nexport interface IEcsServerGroupCommandDirty extends IServerGroupCommandDirty {\n targetGroups?: string[];\n defaulCapacityProviders?: string[];\n customCapacityProviders?: string[];\n}\n\nexport interface IEcsServerGroupCommandResult extends IServerGroupCommandResult {\n dirty: IEcsServerGroupCommandDirty;\n}\n\nexport interface IEcsDockerImage extends IDockerImage {\n imageId: string;\n message: string;\n fromTrigger: boolean;\n fromContext: boolean;\n stageId: string;\n imageLabelOrSha: string;\n}\n\nexport interface IEcsServerGroupCommandViewState extends IServerGroupCommandViewState {\n contextImages: IEcsDockerImage[];\n pipeline: IPipeline;\n currentStage: IStage;\n dirty: IEcsServerGroupCommandDirty;\n}\n\nexport interface IEcsServerGroupCommandBackingDataFiltered extends IServerGroupCommandBackingDataFiltered {\n targetGroups: string[];\n iamRoles: string[];\n ecsClusters: string[];\n availableCapacityProviders: string[];\n defaultCapacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n metricAlarms: IMetricAlarmDescriptor[];\n subnetTypes: ISubnet[];\n securityGroupNames: string[];\n secrets: string[];\n serviceDiscoveryRegistries: IServiceDiscoveryRegistryDescriptor[];\n images: IEcsDockerImage[];\n}\n\nexport interface IEcsServerGroupCommandBackingData extends IServerGroupCommandBackingData {\n filtered: IEcsServerGroupCommandBackingDataFiltered;\n targetGroups: string[];\n ecsClusters: IEcsClusterDescriptor[];\n capacityProviderDetails: IEcsCapacityProviderDetails[];\n iamRoles: IRoleDescriptor[];\n metricAlarms: IMetricAlarmDescriptor[];\n launchTypes: string[];\n networkModes: string[];\n secrets: ISecretDescriptor[];\n serviceDiscoveryRegistries: IServiceDiscoveryRegistryDescriptor[];\n images: IEcsDockerImage[];\n}\n\nexport interface IEcsTaskDefinitionArtifact {\n artifact?: IArtifact;\n artifactId?: string;\n}\n\nexport interface IEcsContainerMapping {\n containerName: string;\n imageDescription: IEcsDockerImage;\n}\n\nexport interface IEcsTargetGroupMapping {\n containerName: string;\n containerPort: number;\n targetGroup: string;\n}\n\nexport interface IEcsServiceDiscoveryRegistryAssociation {\n registry: IServiceDiscoveryRegistryDescriptor;\n containerPort: number;\n containerName: string;\n}\n\nexport interface IEcsCapacityProviderStrategyItem {\n capacityProvider: string;\n base: number;\n weight: number;\n}\n\nexport interface IEcsServerGroupCommand extends IServerGroupCommand {\n associatePublicIpAddress: boolean;\n backingData: IEcsServerGroupCommandBackingData;\n computeUnits: number;\n reservedMemory: number;\n targetHealthyDeployPercentage: number;\n targetGroup: string;\n containerPort: number;\n placementStrategyName: string;\n placementStrategySequence: IPlacementStrategy[];\n imageDescription: IEcsDockerImage;\n networkMode: string;\n subnetType: string;\n subnetTypes: string[];\n securityGroups: string[];\n securityGroupNames: string[];\n viewState: IEcsServerGroupCommandViewState;\n taskDefinitionArtifact: IEcsTaskDefinitionArtifact;\n taskDefinitionArtifactAccount: string;\n containerMappings: IEcsContainerMapping[];\n loadBalancedContainer: string;\n targetGroupMappings: IEcsTargetGroupMapping[];\n serviceDiscoveryAssociations: IEcsServiceDiscoveryRegistryAssociation[];\n useTaskDefinitionArtifact: boolean;\n evaluateTaskDefinitionArtifactExpressions: boolean;\n\n capacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n useDefaultCapacityProviders: boolean;\n ecsClusterName: string;\n subnetTypeChanged: (command: IEcsServerGroupCommand) => IServerGroupCommandResult;\n placementStrategyNameChanged: (command: IEcsServerGroupCommand) => IServerGroupCommandResult;\n regionIsDeprecated: (command: IEcsServerGroupCommand) => boolean;\n\n clusterChanged: (command: IServerGroupCommand) => void;\n}\n\nexport class EcsServerGroupConfigurationService {\n // private enabledMetrics = ['GroupMinSize', 'GroupMaxSize', 'GroupDesiredCapacity', 'GroupInServiceInstances', 'GroupPendingInstances', 'GroupStandbyInstances', 'GroupTerminatingInstances', 'GroupTotalInstances'];\n // private healthCheckTypes = ['EC2', 'ELB'];\n // private terminationPolicies = ['OldestInstance', 'NewestInstance', 'OldestLaunchConfiguration', 'ClosestToNextInstanceHour', 'Default'];\n private launchTypes = ['EC2', 'FARGATE'];\n private networkModes = ['bridge', 'host', 'awsvpc', 'none', 'default'];\n\n public static $inject = [\n '$q',\n 'loadBalancerReader',\n 'serverGroupCommandRegistry',\n 'iamRoleReader',\n 'ecsClusterReader',\n 'metricAlarmReader',\n 'placementStrategyService',\n 'securityGroupReader',\n 'secretReader',\n ];\n constructor(\n private $q: IQService,\n private loadBalancerReader: LoadBalancerReader,\n private serverGroupCommandRegistry: ServerGroupCommandRegistry,\n private iamRoleReader: IamRoleReader,\n private ecsClusterReader: EcsClusterReader,\n private metricAlarmReader: MetricAlarmReader,\n private placementStrategyService: PlacementStrategyService,\n private securityGroupReader: SecurityGroupReader,\n private secretReader: SecretReader,\n ) {}\n\n public configureUpdateCommand(command: IEcsServerGroupCommand): void {\n command.backingData = {\n // terminationPolicies: clone(this.terminationPolicies)\n launchTypes: clone(this.launchTypes),\n networkModes: clone(this.networkModes),\n } as IEcsServerGroupCommandBackingData;\n }\n\n // TODO (Bruno Carrier): Why do we need to inject an Application into this constructor so that the app works? This is strange, and needs investigating\n public configureCommand(cmd: IEcsServerGroupCommand, imageQuery = ''): PromiseLike<void> {\n this.applyOverrides('beforeConfiguration', cmd);\n cmd.toggleSuspendedProcess = (command: IEcsServerGroupCommand, process: string): void => {\n command.suspendedProcesses = command.suspendedProcesses || [];\n const processIndex = command.suspendedProcesses.indexOf(process);\n if (processIndex === -1) {\n command.suspendedProcesses.push(process);\n } else {\n command.suspendedProcesses.splice(processIndex, 1);\n }\n };\n\n cmd.processIsSuspended = (command: IEcsServerGroupCommand, process: string): boolean =>\n command.suspendedProcesses.includes(process);\n\n cmd.onStrategyChange = (command: IEcsServerGroupCommand, strategy: IDeploymentStrategy): void => {\n // Any strategy other than None or Custom should force traffic to be enabled\n if (strategy.key !== '' && strategy.key !== 'custom') {\n command.suspendedProcesses = (command.suspendedProcesses || []).filter((p) => p !== 'AddToLoadBalancer');\n }\n };\n\n cmd.regionIsDeprecated = (command: IEcsServerGroupCommand): boolean => {\n return (\n has(command, 'backingData.filtered.regions') &&\n command.backingData.filtered.regions.some((region) => region.name === command.region && region.deprecated)\n );\n };\n\n const imageQueries = cmd.imageDescription ? [this.grabImageAndTag(cmd.imageDescription.imageId)] : [];\n\n if (imageQuery) {\n imageQueries.push(imageQuery);\n }\n\n let imagesPromise;\n if (imageQueries.length) {\n imagesPromise = this.$q\n .all(\n imageQueries.map((q) =>\n DockerImageReader.findImages({\n provider: 'dockerRegistry',\n count: 50,\n q: q,\n }),\n ),\n )\n .then((promises) => flatten(promises));\n } else {\n imagesPromise = this.$q.when([]);\n }\n\n return this.$q\n .all({\n credentialsKeyedByAccount: AccountService.getCredentialsKeyedByAccount('ecs'),\n loadBalancers: this.loadBalancerReader.listLoadBalancers('ecs'),\n subnets: SubnetReader.listSubnetsByProvider('ecs'),\n iamRoles: this.iamRoleReader.listRoles('ecs'),\n ecsClusters: this.ecsClusterReader.listClusters(),\n capacityProviderDetails: this.ecsClusterReader.describeClusters(cmd.credentials, cmd.region),\n metricAlarms: this.metricAlarmReader.listMetricAlarms(),\n securityGroups: this.securityGroupReader.getAllSecurityGroups(),\n launchTypes: this.$q.when(clone(this.launchTypes)),\n networkModes: this.$q.when(clone(this.networkModes)),\n secrets: this.secretReader.listSecrets(),\n serviceDiscoveryRegistries: ServiceDiscoveryReader.listServiceDiscoveryRegistries(),\n images: imagesPromise,\n })\n .then((backingData: Partial<IEcsServerGroupCommandBackingData>) => {\n backingData.accounts = keys(backingData.credentialsKeyedByAccount);\n backingData.filtered = {} as IEcsServerGroupCommandBackingDataFiltered;\n\n if (cmd.viewState.contextImages) {\n backingData.images = backingData.images.concat(cmd.viewState.contextImages);\n }\n cmd.backingData = backingData as IEcsServerGroupCommandBackingData;\n this.configureVpcId(cmd);\n this.configureAvailableIamRoles(cmd);\n this.configureAvailableSubnetTypes(cmd);\n this.configureAvailableSecurityGroups(cmd);\n this.configureAvailableEcsClusters(cmd);\n this.setCapacityProviderDetails(cmd);\n this.configureAvailableSecrets(cmd);\n this.configureAvailableServiceDiscoveryRegistries(cmd);\n this.configureAvailableImages(cmd);\n this.configureAvailableRegions(cmd);\n this.configureLoadBalancerOptions(cmd);\n this.applyOverrides('afterConfiguration', cmd);\n this.attachEventHandlers(cmd);\n });\n }\n\n public setCapacityProviderDetails(command: IEcsServerGroupCommand): void {\n this.$q\n .all({\n capacityProviderDetails: this.ecsClusterReader.describeClusters(command.credentials, command.region),\n })\n .then((result: Partial<IEcsServerGroupCommandBackingData>) => {\n command.backingData.capacityProviderDetails = chain(result.capacityProviderDetails)\n .map((cluster) => this.mapCapacityProviderDetails(cluster))\n .value();\n });\n\n if (command.ecsClusterName != null && command.ecsClusterName.length > 0) {\n this.configureAvailableCapacityProviders(command);\n } else {\n command.backingData.filtered.availableCapacityProviders = [];\n command.backingData.filtered.defaultCapacityProviderStrategy = [];\n }\n this.checkDirtyCapacityProviders(command);\n }\n\n public configureAvailableCapacityProviders(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.availableCapacityProviders = chain(command.backingData.capacityProviderDetails)\n .filter({\n clusterName: command.ecsClusterName,\n })\n .map((availableCPs) => availableCPs.capacityProviders)\n .flattenDeep<string>()\n .value();\n\n command.backingData.filtered.defaultCapacityProviderStrategy = chain(command.backingData.capacityProviderDetails)\n .filter({\n clusterName: command.ecsClusterName,\n })\n .map((availableCPs) => availableCPs.defaultCapacityProviderStrategy)\n .flattenDeep<IEcsCapacityProviderStrategyItem>()\n .value();\n }\n\n public mapCapacityProviderDetails(describeClusters: IEcsCapacityProviderDetails): IEcsCapacityProviderDetails {\n return {\n capacityProviders: describeClusters.capacityProviders,\n clusterName: describeClusters.clusterName,\n defaultCapacityProviderStrategy: describeClusters.defaultCapacityProviderStrategy,\n };\n }\n\n public applyOverrides(phase: string, command: IEcsServerGroupCommand): void {\n this.serverGroupCommandRegistry.getCommandOverrides('ecs').forEach((override: any) => {\n if (override[phase]) {\n override[phase](command);\n }\n });\n }\n\n public grabImageAndTag(imageId: string): string {\n return imageId.split('/').pop();\n }\n\n public buildImageId(image: IEcsDockerImage): string {\n if (image.fromContext) {\n return `${image.imageLabelOrSha}`;\n } else if (image.fromTrigger && !image.tag) {\n return `${image.registry}/${image.repository} (Tag resolved at runtime)`;\n } else {\n return `${image.registry}/${image.repository}:${image.tag}`;\n }\n }\n\n public mapImage(image: IEcsDockerImage): IEcsDockerImage {\n if (image.message !== undefined) {\n return image;\n }\n\n return {\n repository: image.repository,\n tag: image.tag,\n imageId: this.buildImageId(image),\n registry: image.registry,\n fromContext: image.fromContext,\n fromTrigger: image.fromTrigger,\n account: image.account,\n imageLabelOrSha: image.imageLabelOrSha,\n stageId: image.stageId,\n message: image.message,\n };\n }\n\n public configureAvailableImages(command: IEcsServerGroupCommand): void {\n // No filtering required, but need to decorate with the displayable image ID\n command.backingData.filtered.images = command.backingData.images.map((image) => this.mapImage(image));\n }\n\n public configureAvailabilityZones(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.availabilityZones = find<IRegion>(\n command.backingData.credentialsKeyedByAccount[command.credentials].regions,\n { name: command.region },\n ).availabilityZones;\n command.availabilityZones = command.backingData.filtered.availabilityZones;\n }\n\n public configureAvailableSecurityGroups(command: IEcsServerGroupCommand): void {\n if (command.subnetType == null && (command.subnetTypes == null || command.subnetTypes.length == 0)) {\n command.backingData.filtered.securityGroups = [];\n return;\n }\n\n const vpcId = chain(command.backingData.subnets)\n .filter({\n account: command.credentials,\n region: command.region,\n purpose: command.subnetTypes ? command.subnetTypes[0] : command.subnetType,\n })\n .compact()\n .uniqBy('purpose')\n .map('vpcId')\n .value()[0];\n\n if (\n command.backingData.securityGroups[command.credentials] &&\n command.backingData.securityGroups[command.credentials]['ecs'] &&\n command.backingData.securityGroups[command.credentials]['ecs'][command.region]\n ) {\n const allSecurityGroups = command.backingData.securityGroups[command.credentials]['ecs'][command.region];\n command.backingData.filtered.securityGroupNames = chain(allSecurityGroups)\n .filter({ vpcId: vpcId })\n .map('name')\n .value() as string[];\n }\n }\n\n public configureAvailableSubnetTypes(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.subnetTypes = chain(command.backingData.subnets)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .compact()\n .uniqBy('purpose')\n .value()\n .filter(function (e: ISubnet) {\n return e.purpose && e.purpose.length > 0;\n });\n }\n\n public configureAvailableEcsClusters(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.ecsClusters = chain(command.backingData.ecsClusters)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map('name')\n .value();\n }\n\n public configureAvailableSecrets(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.secrets = chain(command.backingData.secrets)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map('name')\n .value();\n }\n\n public buildServiceRegistryDisplayName(registry: IServiceDiscoveryRegistryDescriptor): string {\n return `${registry.name} (${registry.id})`;\n }\n\n public mapServiceRegistry(registry: IServiceDiscoveryRegistryDescriptor): IServiceDiscoveryRegistryDescriptor {\n return {\n account: registry.account,\n region: registry.region,\n name: registry.name,\n id: registry.id,\n arn: registry.arn,\n displayName: this.buildServiceRegistryDisplayName(registry),\n };\n }\n\n public configureAvailableServiceDiscoveryRegistries(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.serviceDiscoveryRegistries = chain(command.backingData.serviceDiscoveryRegistries)\n .filter({\n account: command.credentials,\n region: command.region,\n })\n .map((registry) => this.mapServiceRegistry(registry))\n .value();\n }\n\n public configureAvailableRegions(command: IEcsServerGroupCommand): void {\n const regionsForAccount: IAccountDetails =\n command.backingData.credentialsKeyedByAccount[command.credentials] || ({ regions: [] } as IAccountDetails);\n command.backingData.filtered.regions = regionsForAccount.regions;\n }\n\n public configureAvailableIamRoles(command: IEcsServerGroupCommand): void {\n command.backingData.filtered.iamRoles = chain(command.backingData.iamRoles)\n .filter({ accountName: command.credentials })\n .map('name')\n .value();\n if (command.backingData.filtered.iamRoles.length > 0) {\n command.backingData.filtered.iamRoles.splice(0, 0, 'None (No IAM role)');\n }\n }\n\n public configureSubnetPurposes(command: IEcsServerGroupCommand): IServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const filteredData = command.backingData.filtered;\n if (command.region === null) {\n return result;\n }\n filteredData.subnetPurposes = chain(command.backingData.subnets)\n .filter({ account: command.credentials, region: command.region })\n .reject({ target: 'elb' })\n .reject({ purpose: null })\n .uniqBy('purpose')\n .value();\n\n if (command.subnetTypes) {\n result.dirty.subnetType = !command.subnetTypes.every((subnetType) =>\n chain(filteredData.subnetPurposes).some({ purpose: subnetType }).value(),\n );\n } else if (!chain(filteredData.subnetPurposes).some({ purpose: command.subnetType }).value()) {\n result.dirty.subnetType = true;\n }\n\n if (result.dirty.subnetType) {\n command.subnetTypes = null;\n command.subnetType = null;\n }\n\n return result;\n }\n\n private getLoadBalancerMap(command: IEcsServerGroupCommand): IAmazonLoadBalancer[] {\n return chain(command.backingData.loadBalancers)\n .map('accounts')\n .flattenDeep()\n .filter({ name: command.credentials })\n .map('regions')\n .flattenDeep()\n .filter({ name: command.region })\n .map<IAmazonLoadBalancer>('loadBalancers')\n .flattenDeep<IAmazonLoadBalancer>()\n .value();\n }\n\n public getLoadBalancerNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancers = this.getLoadBalancerMap(command).filter(\n (lb) => (!lb.loadBalancerType || lb.loadBalancerType === 'classic') && lb.vpcId === command.vpcId,\n );\n return loadBalancers.map((lb) => lb.name).sort();\n }\n\n public getVpcLoadBalancerNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancersForVpc = this.getLoadBalancerMap(command).filter(\n (lb) => (!lb.loadBalancerType || lb.loadBalancerType === 'classic') && lb.vpcId,\n );\n return loadBalancersForVpc.map((lb) => lb.name).sort();\n }\n\n public getTargetGroupNames(command: IEcsServerGroupCommand): string[] {\n const loadBalancersV2 = this.getLoadBalancerMap(command).filter((lb) => lb.loadBalancerType !== 'classic') as any[];\n const allTargetGroups = flatten(loadBalancersV2.map<string[]>((lb) => lb.targetGroups));\n return allTargetGroups.sort();\n }\n\n public configureLoadBalancerOptions(command: IEcsServerGroupCommand): IServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const currentLoadBalancers = (command.loadBalancers || []).concat(command.vpcLoadBalancers || []);\n const newLoadBalancers = this.getLoadBalancerNames(command);\n const vpcLoadBalancers = this.getVpcLoadBalancerNames(command);\n const allTargetGroups = this.getTargetGroupNames(command);\n const currentTargetGroups = command.targetGroupMappings.map((tg) => tg.targetGroup);\n if (currentLoadBalancers && command.loadBalancers) {\n const valid = command.vpcId ? newLoadBalancers : newLoadBalancers.concat(vpcLoadBalancers);\n const matched = intersection(valid, currentLoadBalancers);\n const removedLoadBalancers = xor(matched, currentLoadBalancers);\n command.loadBalancers = intersection(newLoadBalancers, matched);\n if (!command.vpcId) {\n command.vpcLoadBalancers = intersection(vpcLoadBalancers, matched);\n } else {\n delete command.vpcLoadBalancers;\n }\n if (removedLoadBalancers.length) {\n result.dirty.loadBalancers = removedLoadBalancers;\n }\n }\n\n if (currentTargetGroups) {\n const matched = intersection(allTargetGroups, currentTargetGroups);\n const removedTargetGroups = xor(matched, currentTargetGroups);\n if (removedTargetGroups && removedTargetGroups.length > 0) {\n command.viewState.dirty.targetGroups = removedTargetGroups;\n } else if (command.viewState.dirty && command.viewState.dirty.targetGroups) {\n command.viewState.dirty.targetGroups = [];\n }\n }\n\n command.backingData.filtered.loadBalancers = newLoadBalancers;\n command.backingData.filtered.vpcLoadBalancers = vpcLoadBalancers;\n command.backingData.filtered.targetGroups = allTargetGroups;\n return result;\n }\n\n public refreshLoadBalancers(command: IEcsServerGroupCommand, skipCommandReconfiguration?: boolean) {\n return this.loadBalancerReader.listLoadBalancers('ecs').then((loadBalancers) => {\n command.backingData.loadBalancers = loadBalancers;\n if (!skipCommandReconfiguration) {\n this.configureLoadBalancerOptions(command);\n }\n });\n }\n\n public configureVpcId(command: IEcsServerGroupCommand): IEcsServerGroupCommandResult {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n if (command.subnetType == null && (command.subnetTypes == null || command.subnetTypes.length == 0)) {\n command.vpcId = null;\n result.dirty.vpcId = true;\n } else if (command.subnetTypes != null && command.subnetTypes.length > 0) {\n command.subnetTypes.forEach(function (subnetType) {\n const subnet = find<ISubnet>(command.backingData.subnets, {\n purpose: subnetType,\n account: command.credentials,\n region: command.region,\n });\n command.vpcId = subnet ? subnet.vpcId : null;\n });\n } else {\n const subnet = find<ISubnet>(command.backingData.subnets, {\n purpose: command.subnetType,\n account: command.credentials,\n region: command.region,\n });\n command.vpcId = subnet ? subnet.vpcId : null;\n }\n return result;\n }\n\n public checkDirtyCapacityProviders(command: IEcsServerGroupCommand): void {\n if (command.capacityProviderStrategy) {\n const availableCustomCapacityProviders = command.backingData.filtered.availableCapacityProviders;\n const currentCapacityProviders = command.capacityProviderStrategy.map((cp) => cp.capacityProvider);\n const matchedCustomCapacityProviders = intersection(availableCustomCapacityProviders, currentCapacityProviders);\n const removedCustomCapacityProviders = xor(matchedCustomCapacityProviders, currentCapacityProviders);\n\n if (removedCustomCapacityProviders && removedCustomCapacityProviders.length > 0) {\n command.viewState.dirty.customCapacityProviders = removedCustomCapacityProviders;\n } else if (command.viewState.dirty && command.viewState.dirty.customCapacityProviders) {\n command.viewState.dirty.customCapacityProviders = [];\n }\n\n if (command.useDefaultCapacityProviders) {\n const availableDefaultCapacityProvider = command.backingData.filtered.defaultCapacityProviderStrategy.map(\n (cp) => cp.capacityProvider,\n );\n const matchedDefaultCapacityProviders = intersection(\n availableDefaultCapacityProvider,\n currentCapacityProviders,\n );\n const removedDefaultCapacityProviders = xor(matchedDefaultCapacityProviders, currentCapacityProviders);\n\n if (removedDefaultCapacityProviders && removedDefaultCapacityProviders.length > 0) {\n command.viewState.dirty.defaulCapacityProviders = removedDefaultCapacityProviders;\n }\n }\n }\n }\n\n public attachEventHandlers(cmd: IEcsServerGroupCommand): void {\n cmd.subnetChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result = this.configureVpcId(command);\n extend(result.dirty, this.configureLoadBalancerOptions(command).dirty);\n command.viewState.dirty = command.viewState.dirty || {};\n extend(command.viewState.dirty, result.dirty);\n return result;\n };\n\n cmd.regionChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n extend(result.dirty, this.configureSubnetPurposes(command).dirty);\n if (command.region) {\n extend(result.dirty, command.subnetChanged(command).dirty);\n this.configureAvailabilityZones(command);\n this.configureAvailableEcsClusters(command);\n this.configureAvailableSubnetTypes(command);\n this.configureAvailableSecurityGroups(command);\n this.configureAvailableSecrets(command);\n this.configureAvailableServiceDiscoveryRegistries(command);\n this.setCapacityProviderDetails(command);\n }\n\n return result;\n };\n\n cmd.subnetTypeChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n this.configureAvailableSecurityGroups(command);\n return result;\n };\n\n cmd.clusterChanged = (command: IEcsServerGroupCommand): void => {\n command.moniker = NameUtils.getMoniker(command.application, command.stack, command.freeFormDetails);\n };\n\n cmd.credentialsChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n const backingData = command.backingData;\n if (command.credentials) {\n this.configureAvailableIamRoles(command);\n this.configureAvailableEcsClusters(command);\n this.configureAvailableSubnetTypes(command);\n this.configureAvailableSecurityGroups(command);\n this.configureAvailableSecrets(command);\n this.configureAvailableServiceDiscoveryRegistries(command);\n this.configureAvailableRegions(command);\n this.setCapacityProviderDetails(command);\n\n if (!some(backingData.filtered.regions, { name: command.region })) {\n command.region = null;\n result.dirty.region = true;\n } else {\n extend(result.dirty, command.regionChanged(command).dirty);\n }\n } else {\n command.region = null;\n }\n return result;\n };\n\n cmd.placementStrategyNameChanged = (command: IEcsServerGroupCommand): IServerGroupCommandResult => {\n const result: IEcsServerGroupCommandResult = { dirty: {} };\n command.placementStrategySequence = this.placementStrategyService.getPredefinedStrategy(\n command.placementStrategyName,\n );\n return result;\n };\n\n this.applyOverrides('attachEventHandlers', cmd);\n }\n}\n\nexport const ECS_SERVER_GROUP_CONFIGURATION_SERVICE = 'spinnaker.ecs.serverGroup.configure.service';\nmodule(ECS_SERVER_GROUP_CONFIGURATION_SERVICE, [\n LOAD_BALANCER_READ_SERVICE,\n SECURITY_GROUP_READER,\n CACHE_INITIALIZER_SERVICE,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n]).service('ecsServerGroupConfigurationService', EcsServerGroupConfigurationService);\n","'use strict';\n\nimport * as angular from 'angular';\nimport _ from 'lodash';\n\nimport { AccountService, INSTANCE_TYPE_SERVICE } from '@spinnaker/core';\n\nimport { ECS_SERVER_GROUP_CONFIGURATION_SERVICE } from './serverGroupConfiguration.service';\n\nexport const ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE =\n 'spinnaker.ecs.serverGroupCommandBuilder.service';\nexport const name = ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE, [\n INSTANCE_TYPE_SERVICE,\n ECS_SERVER_GROUP_CONFIGURATION_SERVICE,\n ])\n .factory('ecsServerGroupCommandBuilder', [\n '$q',\n 'instanceTypeService',\n 'ecsServerGroupConfigurationService',\n function ($q, instanceTypeService, ecsServerGroupConfigurationService) {\n function reconcileUpstreamImages(image, upstreamImages) {\n if (image.fromContext) {\n const matchingImage = upstreamImages.find((otherImage) => image.stageId === otherImage.stageId);\n\n if (matchingImage) {\n image.cluster = matchingImage.cluster;\n image.pattern = matchingImage.pattern;\n image.repository = matchingImage.repository;\n return image;\n } else {\n return null;\n }\n } else if (image.fromTrigger) {\n const matchingImage = upstreamImages.find((otherImage) => {\n return (\n image.registry === otherImage.registry &&\n image.repository === otherImage.repository &&\n image.tag === otherImage.tag\n );\n });\n\n if (matchingImage) {\n return image;\n } else {\n return null;\n }\n } else {\n return image;\n }\n }\n\n function findUpstreamImages(current, all, visited = {}) {\n // This actually indicates a loop in the stage dependencies.\n if (visited[current.refId]) {\n return [];\n } else {\n visited[current.refId] = true;\n }\n let result = [];\n if (current.type === 'findImageFromTags') {\n result.push({\n fromContext: true,\n imageLabelOrSha: current.imageLabelOrSha,\n stageId: current.refId,\n });\n }\n current.requisiteStageRefIds.forEach(function (id) {\n const next = all.find((stage) => stage.refId === id);\n if (next) {\n result = result.concat(findUpstreamImages(next, all, visited));\n }\n });\n\n return result;\n }\n\n function findTriggerImages(triggers) {\n const result = triggers\n .filter((trigger) => {\n return trigger.type === 'docker';\n })\n .map((trigger) => {\n return {\n fromTrigger: true,\n repository: trigger.repository,\n account: trigger.account,\n organization: trigger.organization,\n registry: trigger.registry,\n tag: trigger.tag,\n };\n });\n\n return result;\n }\n\n function buildNewServerGroupCommand(application, defaults) {\n defaults = defaults || {};\n const credentialsLoader = AccountService.getCredentialsKeyedByAccount('ecs');\n\n const defaultCredentials = defaults.account || application.defaultCredentials.ecs;\n const defaultRegion = defaults.region || application.defaultRegions.ecs;\n\n const preferredZonesLoader = AccountService.getAvailabilityZonesForAccountAndRegion(\n 'ecs',\n defaultCredentials,\n defaultRegion,\n );\n\n return $q\n .all({\n preferredZones: preferredZonesLoader,\n credentialsKeyedByAccount: credentialsLoader,\n })\n .then(function (asyncData) {\n const availabilityZones = asyncData.preferredZones;\n\n let defaultIamRole = 'None (No IAM role)';\n defaultIamRole = defaultIamRole.replace('{{application}}', application.name);\n\n const defaultImageCredentials = 'None (No registry credentials)';\n\n const command = {\n application: application.name,\n credentials: defaultCredentials,\n region: defaultRegion,\n strategy: '',\n capacity: {\n min: 1,\n max: 1,\n desired: 1,\n },\n launchType: 'EC2',\n healthCheckType: 'EC2',\n selectedProvider: 'ecs',\n iamRole: defaultIamRole,\n dockerImageCredentialsSecret: defaultImageCredentials,\n availabilityZones: availabilityZones,\n subnetType: '',\n securityGroupNames: [],\n healthCheckGracePeriodSeconds: '',\n placementConstraints: [],\n placementStrategyName: '',\n taskDefinitionArtifact: {},\n useTaskDefinitionArtifact: false,\n placementStrategySequence: [],\n serviceDiscoveryAssociations: [],\n ecsClusterName: '',\n targetGroup: '',\n copySourceScalingPoliciesAndActions: true,\n preferSourceCapacity: true,\n useSourceCapacity: true,\n enableDeploymentCircuitBreaker: false,\n viewState: {\n useAllImageSelection: false,\n useSimpleCapacity: true,\n usePreferredZones: true,\n mode: defaults.mode || 'create',\n disableStrategySelection: true,\n dirty: {},\n },\n };\n\n if (\n application.attributes &&\n application.attributes.platformHealthOnlyShowOverride &&\n application.attributes.platformHealthOnly\n ) {\n command.interestingHealthProviderNames = ['ecs'];\n }\n\n return command;\n });\n }\n\n function buildServerGroupCommandFromPipeline(application, originalCluster, current, pipeline) {\n const pipelineCluster = _.cloneDeep(originalCluster);\n const region = Object.keys(pipelineCluster.availabilityZones)[0];\n // var instanceTypeCategoryLoader = instanceTypeService.getCategoryForInstanceType('ecs', pipelineCluster.instanceType);\n\n const commandOptions = { account: pipelineCluster.account, region: region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n const zones = pipelineCluster.availabilityZones[region];\n const usePreferredZones = zones.join(',') === command.availabilityZones.join(',');\n\n let contextImages = findUpstreamImages(current, pipeline.stages) || [];\n contextImages = contextImages.concat(findTriggerImages(pipeline.triggers));\n\n if (command.docker && command.docker.image) {\n command.docker.image = reconcileUpstreamImages(command.docker.image, contextImages);\n }\n\n const viewState = {\n instanceProfile: undefined,\n disableImageSelection: true,\n useSimpleCapacity:\n pipelineCluster.capacity.min === pipelineCluster.capacity.max &&\n pipelineCluster.useSourceCapacity !== true,\n usePreferredZones: usePreferredZones,\n mode: 'editPipeline',\n submitButtonLabel: 'Done',\n templatingEnabled: true,\n existingPipelineCluster: true,\n dirty: {},\n contextImages: contextImages,\n pipeline: pipeline,\n currentStage: current,\n };\n\n const viewOverrides = {\n region: region,\n credentials: pipelineCluster.account,\n availabilityZones: pipelineCluster.availabilityZones[region],\n viewState: viewState,\n };\n\n pipelineCluster.strategy = pipelineCluster.strategy || '';\n\n return angular.extend({}, command, pipelineCluster, viewOverrides);\n });\n }\n\n // Only used to prepare view requiring template selecting\n function buildNewServerGroupCommandForPipeline(current, pipeline) {\n let contextImages = findUpstreamImages(current, pipeline.stages) || [];\n contextImages = contextImages.concat(findTriggerImages(pipeline.triggers));\n\n return $q.when({\n viewState: {\n requiresTemplateSelection: true,\n // applies viewState overrides after template selection\n overrides: {\n viewState: {\n mode: 'editPipeline',\n contextImages: contextImages,\n pipeline: pipeline,\n currentStage: current,\n },\n },\n },\n });\n }\n\n function buildUpdateServerGroupCommand(serverGroup) {\n const command = {\n type: 'modifyAsg',\n asgs: [{ asgName: serverGroup.name, region: serverGroup.region }],\n healthCheckType: serverGroup.asg.healthCheckType,\n credentials: serverGroup.account,\n };\n ecsServerGroupConfigurationService.configureUpdateCommand(command);\n return command;\n }\n\n function buildServerGroupCommandFromExisting(application, serverGroup, mode = 'clone') {\n // do NOT copy: deployment strategy. DO copy: account, region, cluster name, stack\n // TODO: query for & pull in ECS-specific data that would be useful, e.g, network mode, launch type\n const commandOptions = { account: serverGroup.account, region: serverGroup.region };\n return buildNewServerGroupCommand(application, commandOptions).then(function (command) {\n command.credentials = serverGroup.account;\n command.app = serverGroup.moniker.app;\n command.stack = serverGroup.moniker.stack;\n command.region = serverGroup.region;\n command.ecsClusterName = serverGroup.ecsCluster;\n command.capacity = serverGroup.capacity;\n command.viewState.mode = mode;\n\n return command;\n });\n }\n\n return {\n buildNewServerGroupCommand: buildNewServerGroupCommand,\n buildServerGroupCommandFromExisting: buildServerGroupCommandFromExisting,\n buildNewServerGroupCommandForPipeline: buildNewServerGroupCommandForPipeline,\n buildServerGroupCommandFromPipeline: buildServerGroupCommandFromPipeline,\n buildUpdateServerGroupCommand: buildUpdateServerGroupCommand,\n };\n },\n ]);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport { module } from 'angular';\n\nimport {\n ModalWizard,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n SERVER_GROUP_WRITER,\n STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT,\n TaskMonitor,\n} from '@spinnaker/core';\n\nimport { ECS_CLUSTER_READ_SERVICE } from '../../../ecsCluster/ecsCluster.read.service';\nimport { IAM_ROLE_READ_SERVICE } from '../../../iamRoles/iamRole.read.service';\nimport { ECS_SECRET_READ_SERVICE } from '../../../secrets/secret.read.service';\nimport { ECS_SERVER_GROUP_CONFIGURATION_SERVICE } from '../serverGroupConfiguration.service';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER =\n 'spinnaker.ecs.cloneServerGroup.controller';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ECS_SERVER_GROUP_CONFIGURATION_SERVICE,\n SERVER_GROUP_WRITER,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_COMMAND_REGISTRY_PROVIDER,\n IAM_ROLE_READ_SERVICE,\n ECS_CLUSTER_READ_SERVICE,\n ECS_SECRET_READ_SERVICE,\n STAGE_ARTIFACT_SELECTOR_COMPONENT_REACT,\n]).controller('ecsCloneServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n '$q',\n '$state',\n 'serverGroupWriter',\n 'overrideRegistry',\n 'ecsServerGroupConfigurationService',\n 'serverGroupCommandRegistry',\n 'serverGroupCommand',\n 'iamRoleReader',\n 'ecsClusterReader',\n 'secretReader',\n 'application',\n 'title',\n function (\n $scope,\n $uibModalInstance,\n $q,\n $state,\n serverGroupWriter,\n overrideRegistry,\n ecsServerGroupConfigurationService,\n serverGroupCommandRegistry,\n serverGroupCommand,\n iamRoleReader,\n ecsClusterReader,\n secretReader,\n application,\n title,\n ) {\n $scope.pages = {\n templateSelection: overrideRegistry.getTemplate(\n 'ecs.serverGroup.templateSelection',\n require('./templateSelection/templateSelection.html'),\n ),\n basicSettings: overrideRegistry.getTemplate(\n 'ecs.serverGroup.basicSettings',\n require('./location/basicSettings.html'),\n ),\n container: overrideRegistry.getTemplate('ecs.serverGroup.container', require('./container/container.html')),\n horizontalScaling: overrideRegistry.getTemplate(\n 'ecs.serverGroup.horizontalScaling',\n require('./horizontalScaling/horizontalScaling.html'),\n ),\n networking: overrideRegistry.getTemplate('ecs.serverGroup.networking', require('./networking/networking.html')),\n logging: overrideRegistry.getTemplate('ecs.serverGroup.logging', require('./logging/logging.html')),\n serviceDiscovery: overrideRegistry.getTemplate(\n 'ecs.serverGroup.serviceDiscovery',\n require('./serviceDiscovery/serviceDiscovery.html'),\n ),\n advancedSettings: overrideRegistry.getTemplate(\n 'ecs.serverGroup.advancedSettings',\n require('./advancedSettings/advancedSettings.html'),\n ),\n taskDefinition: overrideRegistry.getTemplate(\n 'ecs.taskDefinition',\n require('./taskDefinition/taskDefinition.html'),\n ),\n };\n\n $scope.title = title;\n\n $scope.applicationName = application.name;\n $scope.application = application;\n\n $scope.command = serverGroupCommand;\n\n $scope.state = {\n loaded: false,\n requiresTemplateSelection: !!serverGroupCommand.viewState.requiresTemplateSelection,\n };\n\n this.templateSelectionText = {\n copied: ['account, region, ecs cluster, stack', 'capacity'],\n notCopied: ['launch type, target group, network mode'],\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: 'ecs',\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 ecsServerGroupConfigurationService.configureCommand($scope.command).then(function () {\n $scope.state.loaded = true;\n initializeCommand();\n initializeSelectOptions();\n initializeWatches();\n });\n }\n\n function initializeWatches() {\n $scope.$watch('command.subnetType', createResultProcessor($scope.command.subnetTypeChanged));\n $scope.$watch('command.credentials', createResultProcessor($scope.command.credentialsChanged));\n $scope.$watch('command.region', createResultProcessor($scope.command.regionChanged));\n $scope.$watch(\n 'command.placementStrategyName',\n createResultProcessor($scope.command.placementStrategyNameChanged),\n );\n $scope.$watch('command.stack', () => $scope.command.clusterChanged($scope.command));\n $scope.$watch('command.freeFormDetails', () => $scope.command.clusterChanged($scope.command));\n }\n\n function initializeSelectOptions() {\n processCommandUpdateResult($scope.command.credentialsChanged(serverGroupCommand));\n processCommandUpdateResult($scope.command.regionChanged(serverGroupCommand));\n }\n\n function createResultProcessor(method) {\n return function () {\n processCommandUpdateResult(method(serverGroupCommand));\n };\n }\n\n function processCommandUpdateResult() {\n // TODO(Bruno Carrier) - Implement marking sections either dirty or complete\n }\n\n function initializeCommand() {}\n\n this.isValid = function () {\n return true; // TODO(Bruno Carrier) - Implement validation of the form\n };\n\n this.showSubmitButton = function () {\n return ModalWizard.allPagesVisited();\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 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 // used by react components to update command fields in parent (angular) scope\n $scope.notifyAngular = function (commandKey, value) {\n if (commandKey == 'pipeline') {\n $scope.command.viewState.pipeline = value;\n } else {\n $scope.command[commandKey] = value;\n }\n };\n\n // used by react components to configure command for image queries\n $scope.configureCommand = function (query) {\n return ecsServerGroupConfigurationService.configureCommand($scope.command, query);\n };\n\n // TODO: Migrate horizontalScaling component to react and move this logic there\n $scope.capacityProviderState = {\n useCapacityProviders:\n $scope.command.capacityProviderStrategy && $scope.command.capacityProviderStrategy.length > 0,\n updateComputeOption: function (chosenOption) {\n if (chosenOption == 'launchType') {\n $scope.command.capacityProviderStrategy = [];\n } else if (chosenOption == 'capacityProviders') {\n $scope.command.launchType = '';\n $scope.command.capacityProviderStrategy = $scope.command.capacityProviderStrategy || [];\n }\n },\n };\n },\n]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT =\n 'spinnaker.ecs.serverGroup.configure.wizard.advancedSettings.component';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT, []).component(\n 'ecsServerGroupAdvancedSettings',\n {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./advancedSettings.component.html'),\n },\n);\n","import { module } from 'angular';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IEcsCapacityProviderStrategyItem, IEcsServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IEcsCapacityProviderProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IEcsCapacityProviderState {\n capacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n defaultCapacityProviderStrategy: IEcsCapacityProviderStrategyItem[];\n availableCapacityProviders: string[];\n ecsClusterName: string;\n useDefaultCapacityProviders: boolean;\n capacityProviderLoadedFlag: boolean;\n}\n\nclass EcsCapacityProvider extends React.Component<IEcsCapacityProviderProps, IEcsCapacityProviderState> {\n constructor(props: IEcsCapacityProviderProps) {\n super(props);\n const cmd = this.props.command;\n\n this.state = {\n availableCapacityProviders: this.getAvailableCapacityProviders(cmd),\n defaultCapacityProviderStrategy: this.getDefaultCapacityProviderStrategy(cmd),\n ecsClusterName: cmd.ecsClusterName,\n useDefaultCapacityProviders:\n cmd.useDefaultCapacityProviders || (cmd.capacityProviderStrategy && cmd.capacityProviderStrategy.length == 0),\n capacityProviderStrategy:\n cmd.capacityProviderStrategy && cmd.capacityProviderStrategy.length > 0 ? cmd.capacityProviderStrategy : [],\n capacityProviderLoadedFlag: false,\n };\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n const cmd = this.props.command;\n const useDefaultCapacityProviders = this.state.useDefaultCapacityProviders;\n this.setState({\n availableCapacityProviders: this.getAvailableCapacityProviders(cmd),\n defaultCapacityProviderStrategy: this.getDefaultCapacityProviderStrategy(cmd),\n capacityProviderStrategy: this.getCapacityProviderStrategy(useDefaultCapacityProviders, cmd),\n capacityProviderLoadedFlag: true,\n });\n this.props.notifyAngular('useDefaultCapacityProviders', this.state.useDefaultCapacityProviders);\n this.props.notifyAngular('capacityProviderStrategy', this.state.capacityProviderStrategy);\n });\n }\n\n private getAvailableCapacityProviders = (cmd: IEcsServerGroupCommand) => {\n return cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.availableCapacityProviders\n ? cmd.backingData.filtered.availableCapacityProviders\n : [];\n };\n\n private getDefaultCapacityProviderStrategy = (cmd: IEcsServerGroupCommand) => {\n return cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.defaultCapacityProviderStrategy\n ? cmd.backingData.filtered.defaultCapacityProviderStrategy\n : [];\n };\n\n private getCapacityProviderStrategy = (useDefaultCapacityProviders: boolean, cmd: IEcsServerGroupCommand) => {\n return useDefaultCapacityProviders &&\n cmd.backingData &&\n cmd.backingData.filtered &&\n cmd.backingData.filtered.defaultCapacityProviderStrategy\n ? cmd.backingData.filtered.defaultCapacityProviderStrategy\n : this.state.capacityProviderStrategy;\n };\n\n private addCapacityProviderStrategy = () => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n capacityProviderStrategy.push({ capacityProvider: '', base: null, weight: null });\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private removeCapacityProviderStrategy = (index: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n capacityProviderStrategy.splice(index, 1);\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderName = (index: number, targetCapacityProviderName: string) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.capacityProvider = targetCapacityProviderName;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n this.props.command.viewState.dirty.customCapacityProviders = [];\n };\n\n private updateCapacityProviderBase = (index: number, targetCapacityProviderBase: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.base = targetCapacityProviderBase;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderWeight = (index: number, targetCapacityProviderWeight: number) => {\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const targetCapacityProviderStrategy = capacityProviderStrategy[index];\n targetCapacityProviderStrategy.weight = targetCapacityProviderWeight;\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n };\n\n private updateCapacityProviderType = (targetCapacityProviderType: boolean) => {\n this.setState({ useDefaultCapacityProviders: targetCapacityProviderType });\n this.props.notifyAngular('useDefaultCapacityProviders', targetCapacityProviderType);\n this.props.command.viewState.dirty.customCapacityProviders = [];\n\n const capacityProviderStrategy =\n targetCapacityProviderType && this.state.defaultCapacityProviderStrategy.length > 0\n ? this.state.defaultCapacityProviderStrategy\n : [];\n this.setState({ capacityProviderStrategy: capacityProviderStrategy });\n this.props.notifyAngular('capacityProviderStrategy', capacityProviderStrategy);\n };\n\n render(): React.ReactElement<EcsCapacityProvider> {\n const updateCapacityProviderName = this.updateCapacityProviderName;\n const updateCapacityProviderBase = this.updateCapacityProviderBase;\n const updateCapacityProviderWeight = this.updateCapacityProviderWeight;\n const addCapacityProviderStrategy = this.addCapacityProviderStrategy;\n const removeCapacityProviderStrategy = this.removeCapacityProviderStrategy;\n const updateCapacityProviderType = this.updateCapacityProviderType;\n const capacityProviderStrategy = this.state.capacityProviderStrategy;\n const useDefaultCapacityProviders = this.state.useDefaultCapacityProviders;\n const capacityProviderLoadedFlag = this.state.capacityProviderLoadedFlag;\n const customDirtyCapacityProviders =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.customCapacityProviders\n ? this.props.command.viewState.dirty.customCapacityProviders\n : [];\n const defaultDirtyCapacityProviders =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.defaulCapacityProviders\n ? this.props.command.viewState.dirty.defaulCapacityProviders\n : [];\n\n const capacityProviderNames =\n this.state.availableCapacityProviders && this.state.availableCapacityProviders.length > 0\n ? this.state.availableCapacityProviders.map((capacityProviderNames) => {\n return { label: `${capacityProviderNames}`, value: capacityProviderNames };\n })\n : [];\n\n const defaultCPError =\n useDefaultCapacityProviders && defaultDirtyCapacityProviders ? (\n <div className=\"alert alert-warning\">\n <p className=\"text-left\">\n <i className=\"fa fa-exclamation-triangle\"></i>\n Invalid capacity providers are a part of default capacity provider strategy.\n <br />\n Please click 'Done' to use current default capacity provider strategy (shown below) or switch to using a\n custom strategy.\n </p>\n </div>\n ) : (\n ''\n );\n\n const dirtyCapacityProviderList = customDirtyCapacityProviders\n ? customDirtyCapacityProviders.map(function (capacityProvider, index) {\n return <li key={index}>{capacityProvider}</li>;\n })\n : '';\n\n const dirtyCapacityProviderSection =\n useDefaultCapacityProviders && defaultDirtyCapacityProviders.length > 0 ? (\n defaultCPError\n ) : customDirtyCapacityProviders.length > 0 && !useDefaultCapacityProviders ? (\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\"></i>\n The following capacity providers could not be found in the selected account/region/cluster and were removed:\n </p>\n <ul>{dirtyCapacityProviderList}</ul>\n <br />\n <p className=\"text-left\">Please select the capacity provider(s) from the dropdown to resolve this error.</p>\n </div>\n ) : (\n ''\n );\n\n const capacityProviderInputs =\n capacityProviderStrategy.length > 0 ? (\n capacityProviderStrategy.map(function (mapping, index) {\n return (\n <tr key={index}>\n {useDefaultCapacityProviders ? (\n <td>\n <input\n data-test-id={'ServerGroup.defaultCapacityProvider.name.' + index}\n type=\"string\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.capacityProvider}\n disabled={true}\n />\n </td>\n ) : (\n <td data-test-id={'ServerGroup.customCapacityProvider.name.' + index}>\n <TetheredSelect\n placeholder=\"Select capacity provider\"\n options={capacityProviderNames}\n value={mapping.capacityProvider}\n onChange={(e: Option) => {\n updateCapacityProviderName(index, e.label as string);\n }}\n clearable={false}\n />\n </td>\n )}\n <td>\n <input\n data-test-id={'ServerGroup.capacityProvider.base.' + index}\n disabled={useDefaultCapacityProviders}\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n value={mapping.base}\n onChange={(e) => updateCapacityProviderBase(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <input\n data-test-id={'ServerGroup.capacityProvider.weight.' + index}\n disabled={useDefaultCapacityProviders}\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.weight}\n onChange={(e) => updateCapacityProviderWeight(index, e.target.valueAsNumber)}\n />\n </td>\n {!useDefaultCapacityProviders ? (\n <td>\n <div className=\"form-control-static\">\n <a className=\"btn-link sm-label\" onClick={() => removeCapacityProviderStrategy(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n ) : (\n ''\n )}\n </tr>\n );\n })\n ) : useDefaultCapacityProviders && this.state.capacityProviderStrategy.length == 0 ? (\n <tr>\n <div className=\"sm-label-left\" style={{ width: '200%' }}>\n <Alert color=\"warning\">\n {' '}\n The cluster does not have a default capacity provider strategy defined. Set a default capacity provider\n strategy or use a custom strategy.\n </Alert>\n </div>\n </tr>\n ) : (\n ''\n );\n\n const newCapacityProviderStrategy =\n this.state.ecsClusterName &&\n this.props.command.credentials &&\n this.props.command.region &&\n !useDefaultCapacityProviders &&\n capacityProviderNames.length > 0 ? (\n <button\n data-test-id=\"ServerGroup.addCapacityProvider\"\n className=\"btn btn-block btn-sm add-new\"\n onClick={addCapacityProviderStrategy}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Capacity Provider\n </button>\n ) : !useDefaultCapacityProviders && capacityProviderLoadedFlag && capacityProviderNames.length == 0 ? (\n <div className=\"sm-label-left\" style={{ width: '200%' }}>\n <Alert color=\"warning\"> The cluster does not have capacity providers defined. </Alert>\n </div>\n ) : (\n ''\n );\n\n return (\n <div>\n {(customDirtyCapacityProviders.length > 0 || defaultDirtyCapacityProviders.length > 0) &&\n capacityProviderLoadedFlag ? (\n <div>{dirtyCapacityProviderSection}</div>\n ) : (\n ''\n )}\n <div className=\"sm-label-left\">\n <b>Capacity Provider Strategy</b>\n <HelpField id=\"ecs.capacityProviderStrategy\" /> <br />\n <span>({this.state.ecsClusterName})</span>\n </div>\n <div className=\"radio\">\n <label>\n <input\n data-test-id=\"ServerGroup.capacityProviders.default\"\n type=\"radio\"\n checked={useDefaultCapacityProviders}\n onClick={() => updateCapacityProviderType(true)}\n id=\"computeOptionsLaunchType1\"\n />\n Use cluster default\n </label>\n </div>\n <div className=\"radio\">\n <label>\n <input\n data-test-id=\"ServerGroup.capacityProviders.custom\"\n type=\"radio\"\n checked={!useDefaultCapacityProviders}\n onClick={() => updateCapacityProviderType(false)}\n id=\"computeOptionsCapacityProviders2\"\n />\n Use custom (Advanced)\n </label>\n </div>\n {capacityProviderLoadedFlag ? (\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n <th style={{ width: '50%' }}>\n Provider name\n <HelpField id=\"ecs.capacityProviderName\" />\n </th>\n <th style={{ width: '25%' }}>\n Base\n <HelpField id=\"ecs.capacityProviderBase\" />\n </th>\n <th style={{ width: '25%' }}>\n Weight\n <HelpField id=\"ecs.capacityProviderWeight\" />\n </th>\n </tr>\n </thead>\n <tbody>{capacityProviderInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newCapacityProviderStrategy}</td>\n </tr>\n </tfoot>\n </table>\n ) : (\n <div className=\"load medium\">\n <div className=\"message\">Loading capacity providers...</div>\n <div className=\"bars\">\n <div className=\"bar\"></div>\n <div className=\"bar\"></div>\n <div className=\"bar\"></div>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport const ECS_CAPACITY_PROVIDER_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.capacityProvider.react';\nmodule(ECS_CAPACITY_PROVIDER_REACT, []).component(\n 'ecsCapacityProviderReact',\n react2angular(withErrorBoundary(EcsCapacityProvider, 'ecsCapacityProviderReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport * as React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type {\n IEcsDockerImage,\n IEcsServerGroupCommand,\n IEcsTargetGroupMapping,\n} from '../../serverGroupConfiguration.service';\n\nexport interface IContainerProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IContainerState {\n imageDescription: IEcsDockerImage;\n computeUnits: number;\n reservedMemory: number;\n dockerImages: IEcsDockerImage[];\n targetGroupsAvailable: string[];\n targetGroupMappings: IEcsTargetGroupMapping[];\n}\n\nexport class Container extends React.Component<IContainerProps, IContainerState> {\n constructor(props: IContainerProps) {\n super(props);\n const cmd = this.props.command;\n let defaultContainer = '';\n if (cmd.containerMappings && cmd.containerMappings.length > 0) {\n defaultContainer = cmd.containerMappings[0].containerName;\n }\n\n let defaultTargetGroup: IEcsTargetGroupMapping[] = [];\n if (cmd.targetGroupMappings && cmd.targetGroupMappings.length > 0) {\n defaultTargetGroup = cmd.targetGroupMappings;\n }\n\n if (cmd.targetGroup && cmd.targetGroup.length > 0) {\n defaultTargetGroup.push({\n containerName: cmd.loadBalancedContainer || defaultContainer,\n targetGroup: cmd.targetGroup,\n containerPort: cmd.containerPort,\n });\n cmd.targetGroup = '';\n cmd.loadBalancedContainer = '';\n }\n\n cmd.targetGroupMappings = uniqWith(defaultTargetGroup, isEqual);\n cmd.containerMappings = null;\n\n this.state = {\n imageDescription: cmd.imageDescription ? cmd.imageDescription : this.getEmptyImageDescription(),\n computeUnits: cmd.computeUnits,\n reservedMemory: cmd.reservedMemory,\n dockerImages: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.images : [],\n targetGroupMappings: cmd.targetGroupMappings,\n targetGroupsAvailable: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.targetGroups : [],\n };\n\n this.state.targetGroupMappings.forEach((targetGroupMapping) => {\n targetGroupMapping.containerName = '';\n });\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n dockerImages: this.props.command.backingData.filtered.images,\n targetGroupsAvailable: this.props.command.backingData.filtered.targetGroups,\n });\n });\n }\n\n // TODO: Separate docker image component used by both TaskDefinition and Container\n\n private getIdToImageMap = (): Map<string, IEcsDockerImage> => {\n const imageIdToDescription = new Map<string, IEcsDockerImage>();\n this.props.command.backingData.filtered.images.forEach((e) => {\n imageIdToDescription.set(e.imageId, e);\n });\n\n return imageIdToDescription;\n };\n\n private getEmptyImageDescription = (): IEcsDockerImage => {\n return {\n imageId: '',\n message: '',\n fromTrigger: false,\n fromContext: false,\n stageId: '',\n imageLabelOrSha: '',\n account: '',\n registry: '',\n repository: '',\n tag: '',\n };\n };\n\n private pushTargetGroupMapping = () => {\n const targetMaps = this.state.targetGroupMappings;\n targetMaps.push({ containerName: '', targetGroup: '', containerPort: 80 });\n this.setState({ targetGroupMappings: targetMaps });\n };\n\n private updateContainerMappingImage = (newImage: Option<string>) => {\n const imageMap = this.getIdToImageMap();\n let newImageDescription = imageMap.get(newImage.value);\n if (!newImageDescription) {\n newImageDescription = this.getEmptyImageDescription();\n }\n\n this.props.notifyAngular('imageDescription', newImageDescription);\n this.setState({ imageDescription: newImageDescription });\n };\n\n private updateComputeUnits = (newComputeUnits: number) => {\n this.props.notifyAngular('computeUnits', newComputeUnits);\n this.setState({ computeUnits: newComputeUnits });\n };\n\n private updateReservedMemory = (newReservedMemory: number) => {\n this.props.notifyAngular('reservedMemory', newReservedMemory);\n this.setState({ reservedMemory: newReservedMemory });\n };\n\n private updateTargetGroupMappingTargetGroup = (index: number, newTargetGroup: Option<string>) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.targetGroup = newTargetGroup.value;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n this.updateDirtyTargetGroups();\n };\n\n private updateTargetGroupMappingPort = (index: number, targetPort: number) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerPort = targetPort;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private removeTargetGroupMapping = (index: number) => {\n const currentMappings = this.state.targetGroupMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateDirtyTargetGroups = () => {\n this.props.command.viewState.dirty.targetGroups = [];\n };\n\n public render(): React.ReactElement<Container> {\n const removeTargetGroupMapping = this.removeTargetGroupMapping;\n const updateContainerMappingImage = this.updateContainerMappingImage;\n const updateTargetGroupMappingTargetGroup = this.updateTargetGroupMappingTargetGroup;\n const updateTargetGroupMappingPort = this.updateTargetGroupMappingPort;\n const updateComputeUnits = this.updateComputeUnits;\n const updateReservedMemory = this.updateReservedMemory;\n const dirtyTagetGroups =\n this.props.command.viewState.dirty && this.props.command.viewState.dirty.targetGroups\n ? this.props.command.viewState.dirty.targetGroups\n : [];\n\n const dockerImageOptions = this.state.dockerImages.map(function (image) {\n let msg = '';\n if (image.fromTrigger || image.fromContext) {\n msg = image.fromTrigger ? '(TRIGGER) ' : '(FIND IMAGE RESULT) ';\n }\n return { label: `${msg} (${image.imageId})`, value: image.imageId };\n });\n\n const dirtyTargetGroupList = dirtyTagetGroups\n ? dirtyTagetGroups.map(function (targetGroup, index) {\n return <li key={index}>{targetGroup}</li>;\n })\n : '';\n\n const dirtyTargetGroupSection = (\n <div className=\"alert alert-warning\">\n <p>\n <i className=\"fa fa-exclamation-triangle\"></i>\n The following target groups could not be found in the selected account/region/VPC and were removed:\n </p>\n <ul>{dirtyTargetGroupList}</ul>\n <br />\n <p className=\"text-left\">Please select the target group(s) from the dropdown to resolve this error.</p>\n </div>\n );\n\n const newTargetGroupMapping = this.state.targetGroupsAvailable.length ? (\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"ContainerInputs.targetGroupAdd\"\n onClick={this.pushTargetGroupMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Target Group Mapping\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No target groups found in the selected account/region/VPC</Alert>\n </div>\n );\n\n const targetGroupsAvailable = this.state.targetGroupsAvailable.map(function (targetGroup) {\n return { label: `${targetGroup}`, value: targetGroup };\n });\n\n const targetGroupInputs = this.state.targetGroupMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td data-test-id=\"ContainerInputs.targetGroup\">\n <TetheredSelect\n placeholder=\"Select a target group to use...\"\n options={targetGroupsAvailable}\n value={mapping.targetGroup.toString()}\n onChange={(e: Option) => updateTargetGroupMappingTargetGroup(index, e as Option<string>)}\n clearable={false}\n />\n </td>\n <td>\n <input\n data-test-id=\"ContainerInputs.targetGroupPort\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort.toString()}\n onChange={(e) => updateTargetGroupMappingPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"ContainerInputs.targetGroupRemove\"\n onClick={() => removeTargetGroupMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n return (\n <div className=\"container-fluid form-horizontal\">\n {dirtyTagetGroups.length > 0 ? <div>{dirtyTargetGroupSection}</div> : ''}\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Container Image</b>\n <HelpField id=\"ecs.containerMappingImage\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"ContainerInputs.containerImage\">\n <TetheredSelect\n placeholder=\"Select an image to use...\"\n options={dockerImageOptions}\n value={this.state.imageDescription.imageId}\n onChange={(e: Option) => {\n updateContainerMappingImage(e as Option<string>);\n }}\n clearable={false}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Compute Units</b>\n <HelpField id=\"ecs.capacity.reserved.computeUnits\" />\n </div>\n <div className=\"col-md-9\" style={{ width: '100px' }}>\n <input\n data-test-id=\"ContainerInputs.computeUnits\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={false}\n value={this.state.computeUnits}\n onChange={(e) => updateComputeUnits(e.target.valueAsNumber)}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Reserved Memory</b>\n <HelpField id=\"ecs.capacity.reserved.memory\" />\n </div>\n <div className=\"col-md-9\" style={{ width: '100px' }}>\n <input\n data-test-id=\"ContainerInputs.reservedMemory\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={false}\n value={this.state.reservedMemory}\n onChange={(e) => updateReservedMemory(e.target.valueAsNumber)}\n />\n </div>\n </div>\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Target Group Mappings</b>\n <HelpField id=\"ecs.targetGroupMappings\" />\n </div>\n <form name=\"ecsContainerTargetGroupMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '80%' }}>\n Target group\n <HelpField id=\"ecs.loadBalancer.targetGroup\" />\n </th>\n <th style={{ width: '20%' }}>\n Target port\n <HelpField id=\"ecs.loadbalancing.targetPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{targetGroupInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newTargetGroupMapping}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const CONTAINER_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.container.react';\nmodule(CONTAINER_REACT, []).component(\n 'containerReact',\n react2angular(withErrorBoundary(Container, 'containerReact'), ['command', 'notifyAngular', 'configureCommand']),\n);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT =\n 'spinnaker.ecs.serverGroup.configure.wizard.horizontalScaling.component';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT; // for backwards compatibility\nmodule(ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT, []).component(\n 'ecsServerGroupHorizontalScaling',\n {\n bindings: {\n command: '=',\n application: '=',\n capacityProviderState: '=',\n notifyAngular: '=',\n configureCommand: '=',\n },\n templateUrl: require('./horizontalScaling.component.html'),\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 { ModalWizard } from '@spinnaker/core';\n\nexport const ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER =\n 'spinnaker.ecs.serverGroup.configure.basicSettings';\nexport const name = ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ANGULAR_UI_BOOTSTRAP,\n ])\n .controller('ecsServerGroupBasicSettingsCtrl', [\n '$scope',\n '$controller',\n '$uibModalStack',\n '$state',\n function ($scope, $controller, $uibModalStack, $state) {\n angular.extend(\n this,\n $controller('BasicSettingsMixin', {\n $scope: $scope,\n $uibModalStack: $uibModalStack,\n $state: $state,\n }),\n );\n\n $scope.$watch('form.$valid', function (newVal) {\n if (newVal) {\n ModalWizard.markClean('basicSettings');\n ModalWizard.markComplete('basicSettings');\n } else {\n ModalWizard.markIncomplete('basicSettings');\n }\n });\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nexport const ECS_SERVER_GROUP_LOGGING = 'spinnaker.ecs.serverGroup.configure.wizard.logging.component';\nmodule(ECS_SERVER_GROUP_LOGGING, []).component('ecsServerGroupLogging', {\n bindings: {\n command: '=',\n application: '=',\n },\n templateUrl: require('./logging.component.html'),\n});\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport * as React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport type { ISubnet } from '@spinnaker/core';\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type { IEcsServerGroupCommand } from '../../serverGroupConfiguration.service';\n\nexport interface IEcsNetworkingProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface IEcsNetworkingState {\n associatePublicIpAddress: boolean;\n networkMode: string;\n networkModesAvailable: string[];\n securityGroupNames: string[];\n securityGroupsAvailable: string[];\n subnetTypes: string[];\n subnetTypesAvailable: ISubnet[];\n}\n\nexport class EcsNetworking extends React.Component<IEcsNetworkingProps, IEcsNetworkingState> {\n constructor(props: IEcsNetworkingProps) {\n super(props);\n const cmd = this.props.command;\n\n let defaultSubnetTypes: string[] = [];\n if (cmd.subnetTypes && cmd.subnetTypes.length > 0) {\n defaultSubnetTypes = cmd.subnetTypes;\n }\n\n if (cmd.subnetType && cmd.subnetType.length > 0) {\n defaultSubnetTypes.push(cmd.subnetType);\n cmd.subnetType = '';\n }\n\n cmd.subnetTypes = uniqWith(defaultSubnetTypes, isEqual);\n\n this.state = {\n associatePublicIpAddress: cmd.associatePublicIpAddress,\n networkMode: cmd.networkMode,\n networkModesAvailable: cmd.backingData && cmd.backingData.networkModes ? cmd.backingData.networkModes : [],\n securityGroupNames: cmd.securityGroupNames,\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n subnetTypes: cmd.subnetTypes,\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n };\n }\n\n public componentDidMount() {\n const cmd = this.props.command;\n\n this.props.configureCommand('1').then(() => {\n this.setState({\n networkModesAvailable: cmd.backingData && cmd.backingData.networkModes ? cmd.backingData.networkModes : [],\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n });\n });\n }\n\n private updateNetworkMode = (newNetworkMode: Option<string>) => {\n const updatedNetworkMode = newNetworkMode.value;\n const cmd = this.props.command;\n this.props.notifyAngular('networkMode', updatedNetworkMode);\n this.setState({\n networkMode: updatedNetworkMode,\n subnetTypesAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.subnetTypes\n ? cmd.backingData.filtered.subnetTypes\n : [],\n });\n };\n\n private updateSecurityGroups = (newSecurityGroups: Option<string>) => {\n const updatedSecurityGroups = Array.isArray(newSecurityGroups)\n ? newSecurityGroups.map((securityGroups) => securityGroups.value)\n : [];\n this.props.notifyAngular('securityGroupNames', updatedSecurityGroups);\n this.setState({ securityGroupNames: updatedSecurityGroups });\n };\n\n private updateSubnetTypes = (newSubnetTypes: Option<string>) => {\n const cmd = this.props.command;\n const updatedSubnetTypes = Array.isArray(newSubnetTypes)\n ? newSubnetTypes.map((subnetType) => subnetType.value)\n : [];\n this.props.notifyAngular('subnetTypes', updatedSubnetTypes);\n cmd.subnetTypeChanged(cmd);\n this.setState({\n subnetTypes: updatedSubnetTypes,\n securityGroupsAvailable:\n cmd.backingData && cmd.backingData.filtered && cmd.backingData.filtered.securityGroupNames\n ? cmd.backingData.filtered.securityGroupNames\n : [],\n });\n };\n\n private updateAssociatePublicIpAddress = (usePublicIp: boolean) => {\n this.props.notifyAngular('associatePublicIpAddress', usePublicIp);\n this.setState({ associatePublicIpAddress: usePublicIp });\n };\n\n public render(): React.ReactElement<EcsNetworking> {\n const updateAssociatePublicIpAddress = this.updateAssociatePublicIpAddress;\n const updateNetworkMode = this.updateNetworkMode;\n const updateSecurityGroups = this.updateSecurityGroups;\n const updateSubnetTypes = this.updateSubnetTypes;\n\n const networkModesAvailable = this.state.networkModesAvailable.map(function (networkMode) {\n return { label: `${networkMode}`, value: networkMode };\n });\n\n const securityGroupsAvailable = this.state.securityGroupsAvailable.map(function (securityGroup) {\n return { label: `${securityGroup}`, value: securityGroup };\n });\n\n const subnetTypesAvailable = this.state.subnetTypesAvailable.map(function (subnetType) {\n return { label: `${subnetType.purpose} (${subnetType.vpcId})`, value: subnetType.purpose };\n });\n\n const subnetTypeOptions = this.state.subnetTypesAvailable.length ? (\n <TetheredSelect\n multi={true}\n options={subnetTypesAvailable}\n value={this.state.subnetTypes}\n onChange={(e: Option) => {\n updateSubnetTypes(e as Option<string>);\n }}\n />\n ) : (\n <Alert color=\"warning\">No account was selected, or no subnet types are available for this account</Alert>\n );\n\n const securityGroupsOptions = this.state.securityGroupsAvailable.length ? (\n <TetheredSelect\n multi={true}\n options={securityGroupsAvailable}\n value={this.state.securityGroupNames}\n onChange={(e: Option) => {\n updateSecurityGroups(e as Option<string>);\n }}\n />\n ) : (\n <Alert color=\"warning\">No security groups found in the selected account/region</Alert>\n );\n\n const awsVpcOptions =\n this.state.networkMode === 'awsvpc' ? (\n <div className=\"form-group\">\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>VPC Subnet</b>\n <HelpField key=\"ecs.subnet\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.subnetType\">\n {subnetTypeOptions}\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Security Groups</b>\n <HelpField key=\"ecs.securityGroups\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.securityGroups\">\n {securityGroupsOptions}\n </div>\n </div>\n\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Associate Public IP Address</b>\n <HelpField key=\"ecs.publicip\" />\n </div>\n <div className=\"col-md-1 radio\">\n <label>\n <input\n data-test-id=\"Networking.associatePublicIpAddressTrue\"\n type=\"radio\"\n value=\"true\"\n id=\"associatePublicIpAddressTrue\"\n checked={this.state.associatePublicIpAddress === true}\n onChange={() => updateAssociatePublicIpAddress(true)}\n />\n Yes\n </label>\n </div>\n <div className=\"col-md-1 radio\">\n <label>\n <input\n data-test-id=\"Networking.associatePublicIpAddressFalse\"\n type=\"radio\"\n value=\"false\"\n id=\"associatePublicIpAddressFalse\"\n checked={this.state.associatePublicIpAddress === false}\n onChange={() => updateAssociatePublicIpAddress(false)}\n />\n No\n </label>\n </div>\n </div>\n </div>\n ) : (\n <div className=\"col-md-3 sm-label-right\"></div>\n );\n\n return (\n <div className=\"networking-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"form-group\">\n <div className=\"col-md-3 sm-label-right\">\n <b>Network Mode</b>\n <HelpField id=\"ecs.networkMode\" />\n </div>\n <div className=\"col-md-9\" data-test-id=\"Networking.networkMode\">\n <TetheredSelect\n placeholder=\"Select a network mode to use ...\"\n options={networkModesAvailable}\n value={this.state.networkMode}\n onChange={(e: Option) => {\n updateNetworkMode(e as Option<string>);\n }}\n />\n </div>\n </div>\n </div>\n {awsVpcOptions}\n </div>\n );\n }\n}\n\nexport const ECS_NETWORKING_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.networking.react';\nmodule(ECS_NETWORKING_REACT, []).component(\n 'ecsNetworkingReact',\n react2angular(withErrorBoundary(EcsNetworking, 'ecsNetworkingReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport { HelpField, TetheredSelect, withErrorBoundary } from '@spinnaker/core';\n\nimport type {\n IEcsServerGroupCommand,\n IEcsServiceDiscoveryRegistryAssociation,\n} from '../../serverGroupConfiguration.service';\n\nexport interface IServiceDiscoveryProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\nexport interface IEcsServiceDiscoveryRegistry {\n account: string;\n region: string;\n name: string;\n id: string;\n arn: string;\n displayName: string;\n}\n\ninterface IServiceDiscoveryState {\n serviceDiscoveryAssociations: IEcsServiceDiscoveryRegistryAssociation[];\n serviceDiscoveryRegistriesAvailable: IEcsServiceDiscoveryRegistry[];\n useTaskDefinitionArtifact: boolean;\n}\n\nexport class ServiceDiscovery extends React.Component<IServiceDiscoveryProps, IServiceDiscoveryState> {\n constructor(props: IServiceDiscoveryProps) {\n super(props);\n const cmd = this.props.command;\n\n this.state = {\n serviceDiscoveryAssociations: cmd.serviceDiscoveryAssociations,\n serviceDiscoveryRegistriesAvailable:\n cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.serviceDiscoveryRegistries : [],\n useTaskDefinitionArtifact: cmd.useTaskDefinitionArtifact,\n };\n\n if (!this.state.useTaskDefinitionArtifact) {\n this.state.serviceDiscoveryAssociations.forEach((serviceDiscoveryRegistryAssociation) => {\n serviceDiscoveryRegistryAssociation.containerName = null;\n });\n }\n }\n\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n serviceDiscoveryRegistriesAvailable: this.props.command.backingData.filtered.serviceDiscoveryRegistries,\n });\n });\n }\n\n private getNameToRegistryMap = (): Map<string, IEcsServiceDiscoveryRegistry> => {\n const displayNameToRegistry = new Map<string, IEcsServiceDiscoveryRegistry>();\n this.props.command.backingData.filtered.serviceDiscoveryRegistries.forEach((e) => {\n displayNameToRegistry.set(e.displayName, e);\n });\n\n return displayNameToRegistry;\n };\n\n private getEmptyRegistry = (): IEcsServiceDiscoveryRegistry => {\n return {\n account: '',\n region: '',\n name: '',\n id: '',\n arn: '',\n displayName: '',\n };\n };\n\n private updateServiceDiscoveryRegistry = (index: number, newRegistry: Option<string>) => {\n const registryMap = this.getNameToRegistryMap();\n let newServiceDiscoveryRegistry = registryMap.get(newRegistry.value);\n\n if (!newServiceDiscoveryRegistry) {\n newServiceDiscoveryRegistry = this.getEmptyRegistry();\n }\n\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociation = currentAssociations[index];\n targetAssociation.registry = newServiceDiscoveryRegistry;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private updateServiceDiscoveryPort = (index: number, targetPort: number) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociations = currentAssociations[index];\n targetAssociations.containerPort = targetPort;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private updateServiceDiscoveryContainerName = (index: number, targetContainerName: string) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n const targetAssociations = currentAssociations[index];\n targetAssociations.containerName = targetContainerName;\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n private pushServiceDiscoveryAssociation = () => {\n const registryAssociations = this.state.serviceDiscoveryAssociations;\n registryAssociations.push({ registry: this.getEmptyRegistry(), containerPort: 80, containerName: '' });\n this.setState({ serviceDiscoveryAssociations: registryAssociations });\n };\n\n private removeServiceDiscoveryAssociations = (index: number) => {\n const currentAssociations = this.state.serviceDiscoveryAssociations;\n currentAssociations.splice(index, 1);\n this.props.notifyAngular('serviceDiscoveryAssociations', currentAssociations);\n this.setState({ serviceDiscoveryAssociations: currentAssociations });\n };\n\n public render(): React.ReactElement<ServiceDiscovery> {\n const removeServiceDiscoveryAssociation = this.removeServiceDiscoveryAssociations;\n const updateServiceDiscoveryRegistry = this.updateServiceDiscoveryRegistry;\n const updateServiceDiscoveryPort = this.updateServiceDiscoveryPort;\n const updateServiceDiscoveryContainerName = this.updateServiceDiscoveryContainerName;\n\n const registriesAvailable = this.state.serviceDiscoveryRegistriesAvailable.map(function (registry) {\n return { label: `${registry.displayName}`, value: registry.displayName };\n });\n\n const useTaskDefinitionArtifact = this.state.useTaskDefinitionArtifact;\n const serviceDiscoveryInputs = this.state.serviceDiscoveryAssociations.map(function (mapping, index) {\n return (\n <tr key={index}>\n {useTaskDefinitionArtifact && (\n <td>\n <input\n className=\"form-control input-sm\"\n placeholder=\"Enter a container name ...\"\n required={true}\n value={mapping.containerName}\n onChange={(e) => updateServiceDiscoveryContainerName(index, e.target.value)}\n />\n </td>\n )}\n <td>\n <TetheredSelect\n placeholder=\"Select a registry...\"\n options={registriesAvailable}\n value={mapping.registry.displayName.toString()}\n onChange={(e: Option) => updateServiceDiscoveryRegistry(index, e as Option<string>)}\n clearable={false}\n required={true}\n />\n </td>\n <td>\n <input\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort}\n onChange={(e) => updateServiceDiscoveryPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a className=\"btn-link sm-label\" onClick={() => removeServiceDiscoveryAssociation(index)}>\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const newServiceDiscoveryAssociation = this.state.serviceDiscoveryRegistriesAvailable.length ? (\n <button className=\"btn btn-block btn-sm add-new\" onClick={this.pushServiceDiscoveryAssociation}>\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Service Registry\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No registries found in the selected account/region/VPC</Alert>\n </div>\n );\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Service Registries (optional)</b>\n <HelpField id=\"ecs.serviceDiscovery\" />\n </div>\n <form name=\"ecsServiceDiscoveryRegistryMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr>\n {useTaskDefinitionArtifact && (\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.serviceDiscoveryContainerName\" />\n </th>\n )}\n {useTaskDefinitionArtifact ? (\n <th style={{ width: '55%' }}>\n Registry\n <HelpField id=\"ecs.serviceDiscoveryRegistry\" />\n </th>\n ) : (\n <th style={{ width: '80%' }}>\n Registry\n <HelpField id=\"ecs.serviceDiscoveryRegistry\" />\n </th>\n )}\n <th style={{ width: '15%' }}>\n Port\n <HelpField id=\"ecs.serviceDiscoveryContainerPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{serviceDiscoveryInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newServiceDiscoveryAssociation}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const SERVICE_DISCOVERY_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.serviceDiscovery.react';\nmodule(SERVICE_DISCOVERY_REACT, []).component(\n 'serviceDiscoveryReact',\n react2angular(withErrorBoundary(ServiceDiscovery, 'serviceDiscoveryReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import { module } from 'angular';\nimport { isEqual, uniqWith } from 'lodash';\nimport React from 'react';\nimport { Alert } from 'react-bootstrap';\nimport type { Option } from 'react-select';\nimport { react2angular } from 'react2angular';\n\nimport type { IArtifact, IExpectedArtifact } from '@spinnaker/core';\nimport {\n ArtifactTypePatterns,\n CheckboxInput,\n HelpField,\n StageArtifactSelectorDelegate,\n StageConfigField,\n TetheredSelect,\n withErrorBoundary,\n} from '@spinnaker/core';\n\nimport type {\n IEcsContainerMapping,\n IEcsDockerImage,\n IEcsServerGroupCommand,\n IEcsTargetGroupMapping,\n IEcsTaskDefinitionArtifact,\n} from '../../serverGroupConfiguration.service';\n\nexport interface ITaskDefinitionProps {\n command: IEcsServerGroupCommand;\n notifyAngular: (key: string, value: any) => void;\n configureCommand: (query: string) => PromiseLike<void>;\n}\n\ninterface ITaskDefinitionState {\n taskDefArtifact: IEcsTaskDefinitionArtifact;\n taskDefArtifactAccount: string;\n containerMappings: IEcsContainerMapping[];\n targetGroupMappings: IEcsTargetGroupMapping[];\n dockerImages: IEcsDockerImage[];\n targetGroupsAvailable: string[];\n loadBalancedContainer: string;\n evaluateTaskDefinitionArtifactExpressions: boolean;\n}\n\nexport class TaskDefinition extends React.Component<ITaskDefinitionProps, ITaskDefinitionState> {\n constructor(props: ITaskDefinitionProps) {\n super(props);\n const cmd = this.props.command;\n let defaultContainer = '';\n if (cmd.containerMappings && cmd.containerMappings.length > 0) {\n defaultContainer = cmd.containerMappings[0].containerName;\n }\n\n let defaultTargetGroup: IEcsTargetGroupMapping[] = [];\n if (cmd.targetGroupMappings && cmd.targetGroupMappings.length > 0) {\n defaultTargetGroup = cmd.targetGroupMappings;\n }\n\n if (cmd.targetGroup && cmd.targetGroup.length > 0) {\n defaultTargetGroup.push({\n containerName: cmd.loadBalancedContainer || defaultContainer,\n targetGroup: cmd.targetGroup,\n containerPort: cmd.containerPort,\n });\n cmd.targetGroup = '';\n cmd.loadBalancedContainer = '';\n }\n\n cmd.targetGroupMappings = uniqWith(defaultTargetGroup, isEqual);\n\n this.state = {\n taskDefArtifact: cmd.taskDefinitionArtifact,\n containerMappings: cmd.containerMappings ? cmd.containerMappings : [],\n targetGroupMappings: cmd.targetGroupMappings,\n targetGroupsAvailable: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.targetGroups : [],\n dockerImages: cmd.backingData && cmd.backingData.filtered ? cmd.backingData.filtered.images : [],\n loadBalancedContainer: cmd.loadBalancedContainer || defaultContainer,\n taskDefArtifactAccount: cmd.taskDefinitionArtifactAccount,\n evaluateTaskDefinitionArtifactExpressions: cmd.evaluateTaskDefinitionArtifactExpressions,\n };\n }\n\n // TODO: Separate docker image component used by both TaskDefinition and Container\n public componentDidMount() {\n this.props.configureCommand('1').then(() => {\n this.setState({\n dockerImages: this.props.command.backingData.filtered.images,\n targetGroupsAvailable: this.props.command.backingData.filtered.targetGroups,\n });\n });\n }\n\n private getIdToImageMap = (): Map<string, IEcsDockerImage> => {\n const imageIdToDescription = new Map<string, IEcsDockerImage>();\n this.props.command.backingData.filtered.images.forEach((e) => {\n imageIdToDescription.set(e.imageId, e);\n });\n\n return imageIdToDescription;\n };\n\n private getEmptyImageDescription = (): IEcsDockerImage => {\n return {\n imageId: '',\n message: '',\n fromTrigger: false,\n fromContext: false,\n stageId: '',\n imageLabelOrSha: '',\n account: '',\n registry: '',\n repository: '',\n tag: '',\n };\n };\n\n private excludedArtifactTypePatterns = [\n ArtifactTypePatterns.KUBERNETES,\n ArtifactTypePatterns.DOCKER_IMAGE,\n ArtifactTypePatterns.FRONT50_PIPELINE_TEMPLATE,\n ];\n\n private onExpectedArtifactSelected = (expectedArtifactId: string): void => {\n const selectedArtifact = { artifactId: expectedArtifactId };\n this.props.notifyAngular('taskDefinitionArtifact', selectedArtifact);\n this.setState({ taskDefArtifact: selectedArtifact });\n };\n\n private onArtifactEdited = (artifact: IArtifact): void => {\n const newArtifact = { artifact: artifact };\n this.props.notifyAngular('taskDefinitionArtifact', newArtifact);\n this.setState({ taskDefArtifact: newArtifact });\n };\n\n private pushMapping = () => {\n const conMaps = this.state.containerMappings;\n conMaps.push({ containerName: '', imageDescription: this.getEmptyImageDescription() });\n this.setState({ containerMappings: conMaps });\n };\n\n private pushTargetGroupMapping = () => {\n const targetMaps = this.state.targetGroupMappings;\n targetMaps.push({ containerName: '', targetGroup: '', containerPort: 80 });\n this.setState({ targetGroupMappings: targetMaps });\n };\n\n private updateContainerMappingName = (index: number, newName: string) => {\n const currentMappings = this.state.containerMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerName = newName;\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private updateContainerMappingImage = (index: number, newImage: Option<string>) => {\n const imageMap = this.getIdToImageMap();\n let newImageDescription = imageMap.get(newImage.value);\n\n if (!newImageDescription) {\n newImageDescription = this.getEmptyImageDescription();\n }\n const currentMappings = this.state.containerMappings;\n const targetMapping = currentMappings[index];\n targetMapping.imageDescription = newImageDescription;\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private updateTargetGroupMappingTargetGroup = (index: number, newTargetGroup: Option<string>) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.targetGroup = newTargetGroup.value;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateTargetGroupMappingContainer = (index: number, targetContainer: string) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerName = targetContainer;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateTargetGroupMappingPort = (index: number, targetPort: number) => {\n const currentMappings = this.state.targetGroupMappings;\n const targetMapping = currentMappings[index];\n targetMapping.containerPort = targetPort;\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private removeMapping = (index: number) => {\n const currentMappings = this.state.containerMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('containerMappings', currentMappings);\n this.setState({ containerMappings: currentMappings });\n };\n\n private removeTargetGroupMapping = (index: number) => {\n const currentMappings = this.state.targetGroupMappings;\n currentMappings.splice(index, 1);\n this.props.notifyAngular('targetGroupMappings', currentMappings);\n this.setState({ targetGroupMappings: currentMappings });\n };\n\n private updateEvaluateTaskDefArtifactFlag = () => {\n this.props.notifyAngular(\n 'evaluateTaskDefinitionArtifactExpressions',\n !this.props.command.evaluateTaskDefinitionArtifactExpressions,\n );\n this.setState({\n evaluateTaskDefinitionArtifactExpressions: !this.props.command.evaluateTaskDefinitionArtifactExpressions,\n });\n };\n\n public render(): React.ReactElement<TaskDefinition> {\n const { command } = this.props;\n const removeMapping = this.removeMapping;\n const removeTargetGroupMapping = this.removeTargetGroupMapping;\n const updateContainerMappingName = this.updateContainerMappingName;\n const updateContainerMappingImage = this.updateContainerMappingImage;\n const updateTargetGroupMappingContainer = this.updateTargetGroupMappingContainer;\n const updateTargetGroupMappingTargetGroup = this.updateTargetGroupMappingTargetGroup;\n const updateTargetGroupMappingPort = this.updateTargetGroupMappingPort;\n const updateEvaluateTaskDefArtifactFlag = this.updateEvaluateTaskDefArtifactFlag;\n\n const dockerImageOptions = this.state.dockerImages.map(function (image) {\n let msg = '';\n if (image.fromTrigger || image.fromContext) {\n msg = image.fromTrigger ? '(TRIGGER) ' : '(FIND IMAGE RESULT) ';\n }\n return { label: `${msg} (${image.imageId})`, value: image.imageId };\n });\n\n const targetGroupsAvailable = this.state.targetGroupsAvailable.map(function (targetGroup) {\n return { label: `${targetGroup}`, value: targetGroup };\n });\n\n const mappingInputs = this.state.containerMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td>\n <input\n data-test-id=\"Artifacts.containerName\"\n className=\"form-control input-sm\"\n required={true}\n placeholder=\"enter container name...\"\n value={mapping.containerName.toString()}\n onChange={(e) => updateContainerMappingName(index, e.target.value)}\n />\n </td>\n <td data-test-id=\"Artifacts.containerImage\">\n <TetheredSelect\n placeholder=\"Select an image to use...\"\n options={dockerImageOptions}\n value={mapping.imageDescription.imageId}\n onChange={(e: Option) => {\n updateContainerMappingImage(index, e as Option<string>);\n }}\n clearable={false}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"Artifacts.containerRemove\"\n onClick={() => removeMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const targetGroupInputs = this.state.targetGroupMappings.map(function (mapping, index) {\n return (\n <tr key={index}>\n <td>\n <input\n data-test-id=\"Artifacts.targetGroupContainer\"\n className=\"form-control input-sm\"\n required={true}\n placeholder=\"Enter a container name ...\"\n value={mapping.containerName.toString()}\n onChange={(e) => updateTargetGroupMappingContainer(index, e.target.value)}\n />\n </td>\n <td data-test-id=\"Artifacts.targetGroup\">\n <TetheredSelect\n placeholder=\"Select a target group to use...\"\n options={targetGroupsAvailable}\n value={mapping.targetGroup.toString()}\n onChange={(e: Option) => updateTargetGroupMappingTargetGroup(index, e as Option<string>)}\n clearable={false}\n />\n </td>\n <td>\n <input\n data-test-id=\"Artifacts.targetGroupPort\"\n type=\"number\"\n className=\"form-control input-sm no-spel\"\n required={true}\n value={mapping.containerPort.toString()}\n onChange={(e) => updateTargetGroupMappingPort(index, e.target.valueAsNumber)}\n />\n </td>\n <td>\n <div className=\"form-control-static\">\n <a\n className=\"btn-link sm-label\"\n data-test-id=\"Artifacts.targetGroupRemove\"\n onClick={() => removeTargetGroupMapping(index)}\n >\n <span className=\"glyphicon glyphicon-trash\" />\n <span className=\"sr-only\">Remove</span>\n </a>\n </div>\n </td>\n </tr>\n );\n });\n\n const newTargetGroupMapping = this.state.targetGroupsAvailable.length ? (\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"Artifacts.targetGroupAdd\"\n onClick={this.pushTargetGroupMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Target Group Mapping\n </button>\n ) : (\n <div className=\"sm-label-left\">\n <Alert color=\"warning\">No target groups found in the selected account/region/VPC</Alert>\n </div>\n );\n\n return (\n <div className=\"container-fluid form-horizontal\">\n <div className=\"form-group\">\n <div className=\"col-md-12\">\n <StageArtifactSelectorDelegate\n artifact={this.state.taskDefArtifact.artifact}\n excludedArtifactTypePatterns={this.excludedArtifactTypePatterns}\n expectedArtifactId={this.state.taskDefArtifact.artifactId}\n label=\"Artifact\"\n helpKey=\"ecs.taskDefinitionArtifact\"\n onExpectedArtifactSelected={(artifact: IExpectedArtifact) => this.onExpectedArtifactSelected(artifact.id)}\n onArtifactEdited={this.onArtifactEdited}\n pipeline={command.viewState.pipeline}\n stage={command.viewState.currentStage}\n />\n </div>\n </div>\n\n <StageConfigField\n groupClassName=\"form-group evaluateTaskDef\"\n label=\"Expression Evaluation\"\n helpKey=\"ecs.evaluateExpression\"\n labelColumns={5}\n fieldColumns={7}\n >\n <CheckboxInput\n checked={command.evaluateTaskDefinitionArtifactExpressions === true}\n onChange={() => {\n updateEvaluateTaskDefArtifactFlag();\n }}\n text=\"Evaluate SpEL expressions in artifact\"\n />\n </StageConfigField>\n\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Container Mappings</b>\n <HelpField id=\"ecs.containerMappings\" />\n </div>\n <form name=\"ecsTaskDefinitionContainerMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.containerMappingName\" />\n </th>\n <th style={{ width: '70%' }}>\n Container image\n <HelpField id=\"ecs.containerMappingImage\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{mappingInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={3}>\n <button\n className=\"btn btn-block btn-sm add-new\"\n data-test-id=\"Artifacts.containerAdd\"\n onClick={this.pushMapping}\n >\n <span className=\"glyphicon glyphicon-plus-sign\" />\n Add New Container Mapping\n </button>\n </td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n <div className=\"form-group\">\n <div className=\"sm-label-left\">\n <b>Target Group Mappings</b>\n <HelpField id=\"ecs.targetGroupMappings\" />\n </div>\n <form name=\"ecsTaskDefinitionTargetGroupMappings\">\n <table className=\"table table-condensed packed tags\">\n <thead>\n <tr key=\"header\">\n <th style={{ width: '30%' }}>\n Container name\n <HelpField id=\"ecs.loadBalancedContainer\" />\n </th>\n <th style={{ width: '55%' }}>\n Target group\n <HelpField id=\"ecs.loadBalancer.targetGroup\" />\n </th>\n <th style={{ width: '15%' }}>\n Target port\n <HelpField id=\"ecs.loadbalancing.targetPort\" />\n </th>\n <th />\n </tr>\n </thead>\n <tbody>{targetGroupInputs}</tbody>\n <tfoot>\n <tr>\n <td colSpan={4}>{newTargetGroupMapping}</td>\n </tr>\n </tfoot>\n </table>\n </form>\n </div>\n </div>\n );\n }\n}\n\nexport const TASK_DEFINITION_REACT = 'spinnaker.ecs.serverGroup.configure.wizard.taskDefinition.react';\nmodule(TASK_DEFINITION_REACT, []).component(\n 'taskDefinitionReact',\n react2angular(withErrorBoundary(TaskDefinition, 'taskDefinitionReact'), [\n 'command',\n 'notifyAngular',\n 'configureCommand',\n ]),\n);\n","import type { IComponentOptions } from 'angular';\nimport { module } from 'angular';\n\nconst resizeCapacityComponent: IComponentOptions = {\n bindings: {\n command: '=',\n currentSize: '=',\n },\n templateUrl: require('./resizeCapacity.component.html'),\n controller: () => {},\n};\n\nexport const ECS_RESIZE_CAPACITY_COMPONENT = 'spinnaker.ecs.serverGroup.resize';\nmodule(ECS_RESIZE_CAPACITY_COMPONENT, []).component('ecsResizeCapacity', resizeCapacityComponent);\n","'use strict';\n\nimport * as angular from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nimport { ECS_RESIZE_CAPACITY_COMPONENT } from './resizeCapacity.component';\n\nexport const ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER =\n 'spinnaker.ecs.serverGroup.details.resize.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER, [\n SERVER_GROUP_WRITER,\n ECS_RESIZE_CAPACITY_COMPONENT,\n ])\n .controller('ecsResizeServerGroupCtrl', [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n function ($scope, $uibModalInstance, serverGroupWriter, application, serverGroup) {\n $scope.serverGroup = serverGroup;\n $scope.currentSize = {\n min: serverGroup.capacity.min,\n max: serverGroup.capacity.max,\n desired: serverGroup.capacity.desired,\n newSize: null,\n };\n\n $scope.verification = {};\n\n $scope.command = angular.copy($scope.currentSize);\n $scope.command.advancedMode = serverGroup.capacity.min !== serverGroup.capacity.max;\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Ecs'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n return command.advancedMode\n ? command.min <= command.max && command.desired >= command.min && command.desired <= command.max\n : command.newSize !== null;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Resizing ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.resize = function () {\n if (!this.isValid()) {\n return;\n }\n let capacity = { min: $scope.command.min, max: $scope.command.max, desired: $scope.command.desired };\n if (!$scope.command.advancedMode) {\n capacity = { min: $scope.command.newSize, max: $scope.command.newSize, desired: $scope.command.newSize };\n }\n\n const submitMethod = function () {\n return serverGroupWriter.resizeServerGroup(serverGroup, application, {\n capacity: capacity,\n interestingHealthProviderNames: $scope.command.interestingHealthProviderNames,\n reason: $scope.command.reason,\n });\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n },\n ]);\n","'use strict';\n\nimport { module } from 'angular';\n\nimport { SERVER_GROUP_WRITER, TaskMonitor } from '@spinnaker/core';\n\nexport const ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER =\n 'spinnaker.ecs.serverGroup.details.rollback.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER; // for backwards compatibility\nmodule(ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER, [SERVER_GROUP_WRITER]).controller(\n 'ecsRollbackServerGroupCtrl',\n [\n '$scope',\n '$uibModalInstance',\n 'serverGroupWriter',\n 'application',\n 'serverGroup',\n 'disabledServerGroups',\n 'allServerGroups',\n function (\n $scope,\n $uibModalInstance,\n serverGroupWriter,\n application,\n serverGroup,\n disabledServerGroups,\n allServerGroups,\n ) {\n $scope.serverGroup = serverGroup;\n $scope.disabledServerGroups = disabledServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.allServerGroups = allServerGroups.sort((a, b) => b.name.localeCompare(a.name));\n $scope.verification = {};\n\n $scope.command = {\n rollbackType: 'EXPLICIT',\n rollbackContext: {\n rollbackServerGroupName: serverGroup.name,\n },\n };\n\n if (application && application.attributes) {\n if (application.attributes.platformHealthOnlyShowOverride && application.attributes.platformHealthOnly) {\n $scope.command.interestingHealthProviderNames = ['Ecs'];\n }\n\n $scope.command.platformHealthOnlyShowOverride = application.attributes.platformHealthOnlyShowOverride;\n }\n\n this.isValid = function () {\n const command = $scope.command;\n if (!$scope.verification.verified) {\n return false;\n }\n\n return command.rollbackContext.restoreServerGroupName !== undefined;\n };\n\n $scope.taskMonitor = new TaskMonitor({\n application: application,\n title: 'Rollback ' + serverGroup.name,\n modalInstance: $uibModalInstance,\n });\n\n this.rollback = function () {\n if (!this.isValid()) {\n return;\n }\n\n const submitMethod = function () {\n return serverGroupWriter.rollbackServerGroup(serverGroup, application, $scope.command);\n };\n\n $scope.taskMonitor.submit(submitMethod);\n };\n\n this.cancel = function () {\n $uibModalInstance.dismiss();\n };\n\n this.label = function (serverGroup) {\n if (!serverGroup) {\n return '';\n }\n\n if (!serverGroup.buildInfo || !serverGroup.buildInfo.jenkins || !serverGroup.buildInfo.jenkins.number) {\n return serverGroup.name;\n }\n\n return serverGroup.name + ' (build #' + serverGroup.buildInfo.jenkins.number + ')';\n };\n\n this.group = function (serverGroup) {\n return serverGroup.isDisabled ? 'Disabled Server Groups' : 'Enabled Server Groups';\n };\n },\n ],\n);\n","import { module } from 'angular';\nimport { defaults } from 'lodash';\n\nimport type {\n IAmazonServerGroup,\n IAmazonServerGroupView,\n IScalingAdjustmentView,\n IScalingPolicyAlarmView,\n IScalingPolicyView,\n IStepAdjustment,\n IStepAdjustmentView,\n} from '@spinnaker/amazon';\nimport { VpcReader } from '@spinnaker/amazon';\nimport type { IInstance, IVpc } from '@spinnaker/core';\n\nexport class EcsServerGroupTransformer {\n private addComparator(alarm: IScalingPolicyAlarmView): void {\n if (!alarm.comparisonOperator) {\n return;\n }\n\n switch (alarm.comparisonOperator) {\n case 'LessThanThreshold':\n alarm.comparator = '&lt;';\n break;\n case 'GreaterThanThreshold':\n alarm.comparator = '&gt;';\n break;\n case 'LessThanOrEqualToThreshold':\n alarm.comparator = '&le;';\n break;\n case 'GreaterThanOrEqualToThreshold':\n alarm.comparator = '&ge;';\n break;\n }\n }\n\n private addAdjustmentAttributes(policyOrStepAdjustment: IScalingAdjustmentView): void {\n policyOrStepAdjustment.operator = policyOrStepAdjustment.scalingAdjustment < 0 ? 'decrease' : 'increase';\n policyOrStepAdjustment.absAdjustment = Math.abs(policyOrStepAdjustment.scalingAdjustment);\n }\n\n private transformScalingPolicy(policy: IScalingPolicyView): IScalingPolicyView {\n const view: IScalingPolicyView = { ...policy };\n const upperBoundSorter = (a: IStepAdjustmentView, b: IStepAdjustmentView) =>\n b.metricIntervalUpperBound - a.metricIntervalUpperBound;\n const lowerBoundSorter = (a: IStepAdjustmentView, b: IStepAdjustmentView) =>\n a.metricIntervalLowerBound - b.metricIntervalLowerBound;\n\n view.alarms = policy.alarms || [];\n view.alarms.forEach((alarm: IScalingPolicyAlarmView) => this.addComparator(alarm));\n this.addAdjustmentAttributes(view); // simple policies\n if (view.stepAdjustments && view.stepAdjustments.length) {\n view.stepAdjustments.forEach((sa: IStepAdjustmentView) => this.addAdjustmentAttributes(sa)); // step policies\n const sorter = policy.stepAdjustments.every((a: IStepAdjustment) => a.metricIntervalUpperBound !== undefined)\n ? upperBoundSorter\n : lowerBoundSorter;\n view.stepAdjustments.sort((a: IStepAdjustmentView, b: IStepAdjustmentView) => sorter(a, b));\n }\n return view;\n }\n\n public normalizeServerGroupDetails(serverGroup: IAmazonServerGroup): IAmazonServerGroupView {\n const view: IAmazonServerGroupView = { ...serverGroup } as IAmazonServerGroupView;\n if (serverGroup.scalingPolicies) {\n view.scalingPolicies = serverGroup.scalingPolicies.map((policy: IScalingPolicyView) =>\n this.transformScalingPolicy(policy),\n );\n }\n return view;\n }\n\n public normalizeServerGroup(serverGroup: IAmazonServerGroup): PromiseLike<IAmazonServerGroup> {\n serverGroup.instances.forEach((instance: IInstance) => {\n instance.vpcId = serverGroup.vpcId;\n });\n return VpcReader.listVpcs().then(\n (vpc: IVpc[]): IAmazonServerGroup => this.addVpcNameToServerGroup(serverGroup)(vpc),\n );\n }\n\n private addVpcNameToServerGroup(serverGroup: IAmazonServerGroup): (vpc: IVpc[]) => IAmazonServerGroup {\n return (vpcs: IVpc[]) => {\n const match = vpcs.find((test) => test.id === serverGroup.vpcId);\n serverGroup.vpcName = match ? match.name : '';\n return serverGroup;\n };\n }\n\n public convertServerGroupCommandToDeployConfiguration(base: any): any {\n // use _.defaults to avoid copying the backingData, which is huge and expensive to copy over\n const command = defaults({ backingData: [], viewState: [] }, base);\n command.cloudProvider = 'ecs';\n command.availabilityZones = {};\n command.availabilityZones[command.region] = base.availabilityZones;\n command.loadBalancers = (base.loadBalancers || []).concat(base.vpcLoadBalancers || []);\n command.targetGroup = base.targetGroup || '';\n command.account = command.credentials;\n command.subnetType = command.subnetType || '';\n\n if (base.viewState.mode !== 'clone') {\n delete command.source;\n }\n\n delete command.region;\n delete command.viewState;\n delete command.backingData;\n delete command.selectedProvider;\n delete command.instanceProfile;\n delete command.vpcId;\n\n return command;\n }\n}\n\nexport const ECS_SERVER_GROUP_TRANSFORMER = 'spinnaker.ecs.serverGroup.transformer';\nmodule(ECS_SERVER_GROUP_TRANSFORMER, []).service('ecsServerGroupTransformer', EcsServerGroupTransformer);\n","'use strict';\n\nimport UIROUTER_ANGULARJS from '@uirouter/angularjs';\nimport * as angular from 'angular';\nimport { chain, filter, find, has, isEmpty } from 'lodash';\n\nimport {\n AccountService,\n ConfirmationModalService,\n FirewallLabels,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_WRITER,\n ServerGroupReader,\n ServerGroupWarningMessageService,\n SubnetReader,\n} from '@spinnaker/core';\n\nimport { ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from '../configure/serverGroupCommandBuilder.service';\nimport { ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER } from './resize/resizeServerGroup.controller';\nimport { ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER } from './rollback/rollbackServerGroup.controller';\nimport { ECS_SERVER_GROUP_TRANSFORMER } from '../serverGroup.transformer';\n\nexport const ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER = 'spinnaker.ecs.serverGroup.details.controller';\nexport const name = ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER; // for backwards compatibility\nangular\n .module(ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER, [\n UIROUTER_ANGULARJS,\n ECS_SERVER_GROUP_TRANSFORMER,\n OVERRIDE_REGISTRY,\n SERVER_GROUP_WRITER,\n ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n ECS_SERVERGROUP_DETAILS_RESIZE_RESIZESERVERGROUP_CONTROLLER,\n ECS_SERVERGROUP_DETAILS_ROLLBACK_ROLLBACKSERVERGROUP_CONTROLLER,\n ])\n .controller('ecsServerGroupDetailsCtrl', [\n '$scope',\n '$state',\n 'app',\n 'serverGroup',\n 'ecsServerGroupCommandBuilder',\n '$uibModal',\n 'serverGroupWriter',\n 'ecsServerGroupTransformer',\n 'overrideRegistry',\n function (\n $scope,\n $state,\n app,\n serverGroup,\n ecsServerGroupCommandBuilder,\n $uibModal,\n serverGroupWriter,\n ecsServerGroupTransformer,\n overrideRegistry,\n ) {\n this.state = {\n loading: true,\n };\n\n this.firewallsLabel = FirewallLabels.get('Firewalls');\n\n this.application = app;\n\n const extractServerGroupSummary = () => {\n return app.ready().then(() => {\n let summary = find(app.serverGroups.data, (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((loadBalancer) => {\n if (loadBalancer.account === serverGroup.accountId && loadBalancer.region === serverGroup.region) {\n return loadBalancer.serverGroups.some((possibleServerGroup) => {\n if (possibleServerGroup.name === serverGroup.name) {\n summary = possibleServerGroup;\n return true;\n }\n });\n }\n });\n }\n return summary;\n });\n };\n\n const autoClose = () => {\n if ($scope.$$destroyed) {\n return;\n }\n $state.go('^', { allowModalToStayOpen: true }, { location: 'replace' });\n };\n\n const cancelLoader = () => {\n this.state.loading = false;\n };\n\n const retrieveServerGroup = () => {\n return extractServerGroupSummary()\n .then((summary) => {\n return ServerGroupReader.getServerGroup(\n app.name,\n serverGroup.accountId,\n serverGroup.region,\n serverGroup.name,\n ).then((details) => {\n cancelLoader();\n\n // it's possible the summary was not found because the clusters are still loading\n angular.extend(details, summary, { account: serverGroup.accountId });\n\n this.serverGroup = ecsServerGroupTransformer.normalizeServerGroupDetails(details);\n this.applyAccountDetails(this.serverGroup);\n\n if (!isEmpty(this.serverGroup)) {\n this.image = details.image ? details.image : undefined;\n\n const vpc = this.serverGroup.asg ? this.serverGroup.asg.vpczoneIdentifier : '';\n\n if (vpc !== '') {\n const subnetId = vpc.split(',')[0];\n SubnetReader.listSubnets().then((subnets) => {\n const subnet = chain(subnets).find({ id: subnetId }).value();\n this.serverGroup.subnetType = subnet.purpose;\n });\n }\n\n if (details.image && details.image.description) {\n const tags = details.image.description.split(', ');\n tags.forEach((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.image && details.image.tags) {\n const baseAmiVersionTag = details.image.tags.find((tag) => tag.key === 'base_ami_version');\n if (baseAmiVersionTag) {\n details.baseAmiVersion = baseAmiVersionTag.value;\n }\n }\n\n this.scalingPolicies = this.serverGroup.scalingPolicies;\n // TODO - figure out whether we need the commented out block below, or not. IF we do, then we need to make it stop crashing\n\n if (has(this.serverGroup, 'buildInfo.jenkins')) {\n this.changeConfig.buildInfo = {\n jenkins: this.serverGroup.buildInfo.jenkins,\n };\n }\n\n /*this.scalingPoliciesDisabled = this.scalingPolicies.length && this.autoScalingProcesses\n .filter(p => !p.enabled)\n .some(p => ['Launch','Terminate','AlarmNotification'].includes(p.name));\n this.scheduledActionsDisabled = this.serverGroup.scheduledActions.length && this.autoScalingProcesses\n .filter(p => !p.enabled)\n .some(p => ['Launch','Terminate','ScheduledAction'].includes(p.name));\n configureEntityTagTargets();\n\n this.changeConfig = {\n metadata: get(this.serverGroup.entityTags, 'creationMetadata')\n };\n */\n } else {\n autoClose();\n }\n });\n })\n .catch(autoClose);\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 = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Destroying ' + serverGroup.name,\n onTaskComplete: () => {\n if ($state.includes('**.serverGroup', stateParams)) {\n $state.go('^');\n }\n },\n };\n\n const submitMethod = (params) => serverGroupWriter.destroyServerGroup(serverGroup, app, params);\n\n const stateParams = {\n name: serverGroup.name,\n accountId: serverGroup.account,\n region: serverGroup.region,\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 askForReason: true,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n };\n\n ServerGroupWarningMessageService.addDestroyWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.disableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Disabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.disableServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really disable ' + serverGroup.name + '?',\n buttonText: 'Disable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n ServerGroupWarningMessageService.addDisableWarningMessage(app, serverGroup, confirmationModalParams);\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.enableServerGroup = () => {\n const serverGroup = this.serverGroup;\n\n const taskMonitor = {\n application: app,\n title: 'Enabling ' + serverGroup.name,\n };\n\n const submitMethod = (params) => {\n return serverGroupWriter.enableServerGroup(serverGroup, app, params);\n };\n\n const confirmationModalParams = {\n header: 'Really enable ' + serverGroup.name + '?',\n buttonText: 'Enable ' + serverGroup.name,\n account: serverGroup.account,\n taskMonitorConfig: taskMonitor,\n platformHealthOnlyShowOverride: app.attributes.platformHealthOnlyShowOverride,\n platformHealthType: 'Ecs',\n submitMethod: submitMethod,\n askForReason: true,\n };\n\n if (app.attributes.platformHealthOnlyShowOverride && app.attributes.platformHealthOnly) {\n confirmationModalParams.interestingHealthProviderNames = ['Ecs'];\n }\n\n ConfirmationModalService.confirm(confirmationModalParams);\n };\n\n this.rollbackServerGroup = () => {\n $uibModal.open({\n templateUrl: overrideRegistry.getTemplate(\n 'ecs.rollback.modal',\n require('./rollback/rollbackServerGroup.html'),\n ),\n windowClass: 'modal-z-index',\n controller: 'ecsRollbackServerGroupCtrl as ctrl',\n resolve: {\n serverGroup: () => this.serverGroup,\n disabledServerGroups: () => {\n const cluster = find(app.clusters, { name: this.serverGroup.cluster, account: this.serverGroup.account });\n return filter(cluster.serverGroups, { isDisabled: true, region: this.serverGroup.region });\n },\n allServerGroups: () =>\n app\n .getDataSource('serverGroups')\n .data.filter(\n (g) =>\n g.cluster === this.serverGroup.cluster &&\n g.region === this.serverGroup.region &&\n g.account === this.serverGroup.account &&\n g.name !== this.serverGroup.name,\n ),\n application: () => app,\n },\n });\n };\n\n this.resizeServerGroup = () => {\n $uibModal.open({\n templateUrl: overrideRegistry.getTemplate('ecs.resize.modal', require('./resize/resizeServerGroup.html')),\n controller: 'ecsResizeServerGroupCtrl as ctrl',\n windowClass: 'modal-z-index',\n resolve: {\n serverGroup: () => this.serverGroup,\n application: () => app,\n },\n });\n };\n\n this.cloneServerGroup = (serverGroup) => {\n $uibModal.open({\n templateUrl: require('../configure/wizard/serverGroupWizard.html'),\n controller: 'ecsCloneServerGroupCtrl as ctrl',\n size: 'lg',\n windowClass: 'modal-z-index',\n resolve: {\n title: () => 'Clone ' + serverGroup.name,\n application: () => app,\n serverGroupCommand: () =>\n ecsServerGroupCommandBuilder.buildServerGroupCommandFromExisting(app, serverGroup),\n },\n });\n };\n\n this.buildJenkinsLink = () => {\n if (has(this, 'serverGroup.buildInfo.buildInfoUrl')) {\n return this.serverGroup.buildInfo.buildInfoUrl;\n } else if (has(this, 'serverGroup.buildInfo.jenkins')) {\n const jenkins = this.serverGroup.buildInfo.jenkins;\n return jenkins.host + 'job/' + jenkins.name + '/' + jenkins.number;\n }\n return null;\n };\n\n this.truncateCommitHash = () => {\n if (this.serverGroup && this.serverGroup.buildInfo && this.serverGroup.buildInfo.commit) {\n return this.serverGroup.buildInfo.commit.substring(0, 8);\n }\n return null;\n };\n\n this.applyAccountDetails = (serverGroup) => {\n return AccountService.getAccountDetails(serverGroup.account).then((details) => {\n serverGroup.accountDetails = details;\n });\n };\n },\n ]);\n","import { module } from 'angular';\nimport { ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER } from './serverGroupDetails.ecs.controller';\n\nexport const SERVER_GROUP_DETAILS_MODULE = 'spinnaker.ecs.serverGroup.details';\nmodule(SERVER_GROUP_DETAILS_MODULE, [ECS_SERVERGROUP_DETAILS_SERVERGROUPDETAILS_ECS_CONTROLLER]);\n","import { $log } from 'ngimport';\n\nimport type { IServerGroup } from '@spinnaker/core';\nimport { REST } from '@spinnaker/core';\n\nexport interface IEventDescription {\n createdAt: number;\n message: string;\n id: string;\n status: string;\n}\n\nexport class ServerGroupEventsReader {\n public static getEvents(serverGroup: IServerGroup): PromiseLike<IEventDescription[]> {\n return REST('/applications')\n .path(serverGroup.app, 'serverGroups', serverGroup.account, serverGroup.name, 'events')\n .query({\n region: serverGroup.region,\n provider: serverGroup.cloudProvider,\n })\n .get()\n .catch((error: any): any[] => {\n $log.error(error, 'error retrieving events');\n return [];\n });\n }\n}\n","import type { IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalServiceInstance } from 'angular-ui-bootstrap';\n\nimport type { IServerGroup } from '@spinnaker/core';\n\nimport type { IEventDescription } from './serverGroupEventsReader.service';\nimport { ServerGroupEventsReader } from './serverGroupEventsReader.service';\n\nexport interface IScalingActivitiesViewState {\n loading: boolean;\n error: boolean;\n}\n\nexport class EventsController implements IController {\n public viewState: IScalingActivitiesViewState;\n public events: IEventDescription[] = [];\n\n public static $inject = ['$uibModalInstance', 'serverGroup'];\n public constructor(private $uibModalInstance: IModalServiceInstance, public serverGroup: IServerGroup) {}\n\n public $onInit(): void {\n this.viewState = {\n loading: true,\n error: false,\n };\n\n ServerGroupEventsReader.getEvents(this.serverGroup).then(\n (rawEvents: IEventDescription[]) => {\n this.viewState.loading = false;\n this.events = rawEvents;\n },\n () => {\n this.viewState.error = true;\n },\n );\n }\n\n public close(): void {\n this.$uibModalInstance.close();\n }\n}\n\nexport const EVENTS_CTRL = 'spinnaker.ecs.serverGroup.events.controller';\nmodule(EVENTS_CTRL, []).controller('EventsController', EventsController);\n","import type { IComponentOptions, IController } from 'angular';\nimport { module } from 'angular';\nimport type { IModalService } from 'angular-ui-bootstrap';\n\nimport { EVENTS_CTRL, EventsController } from './events.controller';\n\nclass ViewEventsLinkCtrl implements IController {\n public serverGroup: any;\n\n public static $inject = ['$uibModal'];\n public constructor(private $uibModal: IModalService) {}\n\n public showEvents(): void {\n this.$uibModal.open({\n templateUrl: require('./events.html'),\n controller: EventsController,\n controllerAs: '$ctrl',\n windowClass: 'modal-z-index',\n resolve: {\n serverGroup: () => this.serverGroup,\n },\n });\n }\n}\n\nexport const viewEventsLink: IComponentOptions = {\n bindings: {\n serverGroup: '<',\n },\n controller: ViewEventsLinkCtrl,\n template: `<a href ng-click=\"$ctrl.showEvents()\">View Events</a>`,\n};\n\nexport const VIEW_EVENTS_LINK_COMPONENT = 'spinnaker.ecs.serverGroup.details.viewEvents.link';\nmodule(VIEW_EVENTS_LINK_COMPONENT, [EVENTS_CTRL]).component('viewEventsLink', viewEventsLink);\n","import { module } from 'angular';\n\nimport { VIEW_EVENTS_LINK_COMPONENT } from './events/events.component';\n\nexport const ECS_SERVERGROUP_MODULE = 'spinnaker.ecs.serverGroup';\nmodule(ECS_SERVERGROUP_MODULE, [VIEW_EVENTS_LINK_COMPONENT]);\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","'use strict';\n\nimport { module } from 'angular';\n\nimport { CloudProviderRegistry, DeploymentStrategyRegistry } from '@spinnaker/core';\n\nimport { COMMON_MODULE } from './common/common.module';\nimport './ecs.help';\nimport './ecs.settings';\nimport { ECS_CLUSTER_READ_SERVICE } from './ecsCluster/ecsCluster.read.service';\nimport { IAM_ROLE_READ_SERVICE } from './iamRoles/iamRole.read.service';\nimport { ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER } from './instance/details/instance.details.controller';\nimport { EcsLoadBalancerClusterContainer } from './loadBalancer/EcsLoadBalancerClusterContainer';\nimport { EcsLoadBalancerDetails } from './loadBalancer/details/loadBalancerDetails';\nimport { EcsTargetGroupDetails } from './loadBalancer/details/targetGroupDetails';\nimport { EcsLoadBalancerTransformer } from './loadBalancer/loadBalancer.transformer';\nimport { ECS_TARGET_GROUP_STATES } from './loadBalancer/targetGroup.states';\nimport ecsLogo from './logo/ecs.logo.svg';\nimport { METRIC_ALARM_READ_SERVICE } from './metricAlarm/metricAlarm.read.service';\nimport { ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE } from './pipeline/stages/destroyAsg/ecsDestroyAsgStage';\nimport { ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE } from './pipeline/stages/disableAsg/ecsDisableAsgStage';\nimport { ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE } from './pipeline/stages/disableCluster/ecsDisableClusterStage';\nimport { ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE } from './pipeline/stages/enableAsg/ecsEnableAsgStage';\nimport { ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE } from './pipeline/stages/findImageFromTags/ecsFindImageFromTagStage';\nimport { ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE } from './pipeline/stages/resizeAsg/ecsResizeAsgStage';\nimport { ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE } from './pipeline/stages/scaleDownCluster/ecsScaleDownClusterStage';\nimport { ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE } from './pipeline/stages/shrinkCluster/ecsShrinkClusterStage';\nimport { PLACEMENT_STRATEGY_SERVICE } from './placementStrategy/placementStrategy.service';\nimport { ECS_SECRET_READ_SERVICE } from './secrets/secret.read.service';\nimport { ECS_SECURITY_GROUP_MODULE } from './securityGroup/securityGroup.module';\nimport { ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE } from './serverGroup/configure/serverGroupCommandBuilder.service';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER } from './serverGroup/configure/wizard/CloneServerGroup.ecs.controller';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT } from './serverGroup/configure/wizard/advancedSettings/advancedSettings.component';\nimport { ECS_CAPACITY_PROVIDER_REACT } from './serverGroup/configure/wizard/capacityProvider/CapacityProvider';\nimport { CONTAINER_REACT } from './serverGroup/configure/wizard/container/Container';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT } from './serverGroup/configure/wizard/horizontalScaling/horizontalScaling.component';\nimport { ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER } from './serverGroup/configure/wizard/location/ServerGroupBasicSettings.controller';\nimport { ECS_SERVER_GROUP_LOGGING } from './serverGroup/configure/wizard/logging/logging.component';\nimport { ECS_NETWORKING_REACT } from './serverGroup/configure/wizard/networking/Networking';\nimport { SERVICE_DISCOVERY_REACT } from './serverGroup/configure/wizard/serviceDiscovery/ServiceDiscovery';\nimport { TASK_DEFINITION_REACT } from './serverGroup/configure/wizard/taskDefinition/TaskDefinition';\nimport { SERVER_GROUP_DETAILS_MODULE } from './serverGroup/details/serverGroupDetails.module';\nimport { ECS_SERVERGROUP_MODULE } from './serverGroup/serverGroup.module';\nimport { ECS_SERVER_GROUP_TRANSFORMER } from './serverGroup/serverGroup.transformer';\n\nimport './logo/ecs.logo.less';\n\nexport const ECS_MODULE = 'spinnaker.ecs';\nmodule(ECS_MODULE, [\n ECS_SERVERGROUP_CONFIGURE_WIZARD_CLONESERVERGROUP_ECS_CONTROLLER,\n SERVER_GROUP_DETAILS_MODULE,\n IAM_ROLE_READ_SERVICE,\n ECS_SERVER_GROUP_TRANSFORMER,\n // require('./pipeline/stages/cloneServerGroup/ecsCloneServerGroupStage').name, // TODO(Bruno Carrier): We should enable this on Clouddriver before revealing this stage\n ECS_SERVERGROUP_CONFIGURE_WIZARD_ADVANCEDSETTINGS_ADVANCEDSETTINGS_COMPONENT,\n ECS_SERVERGROUP_CONFIGURE_WIZARD_HORIZONTALSCALING_HORIZONTALSCALING_COMPONENT,\n TASK_DEFINITION_REACT,\n CONTAINER_REACT,\n ECS_NETWORKING_REACT,\n SERVICE_DISCOVERY_REACT,\n ECS_CAPACITY_PROVIDER_REACT,\n ECS_SERVER_GROUP_LOGGING,\n ECS_CLUSTER_READ_SERVICE,\n ECS_SECRET_READ_SERVICE,\n METRIC_ALARM_READ_SERVICE,\n PLACEMENT_STRATEGY_SERVICE,\n COMMON_MODULE,\n ECS_SERVERGROUP_CONFIGURE_WIZARD_LOCATION_SERVERGROUPBASICSETTINGS_CONTROLLER,\n ECS_SERVERGROUP_CONFIGURE_SERVERGROUPCOMMANDBUILDER_SERVICE,\n ECS_INSTANCE_DETAILS_INSTANCE_DETAILS_CONTROLLER,\n ECS_PIPELINE_STAGES_FINDIMAGEFROMTAGS_ECSFINDIMAGEFROMTAGSTAGE,\n ECS_PIPELINE_STAGES_DESTROYASG_ECSDESTROYASGSTAGE,\n ECS_PIPELINE_STAGES_DISABLEASG_ECSDISABLEASGSTAGE,\n ECS_PIPELINE_STAGES_DISABLECLUSTER_ECSDISABLECLUSTERSTAGE,\n ECS_PIPELINE_STAGES_ENABLEASG_ECSENABLEASGSTAGE,\n ECS_PIPELINE_STAGES_RESIZEASG_ECSRESIZEASGSTAGE,\n ECS_PIPELINE_STAGES_SCALEDOWNCLUSTER_ECSSCALEDOWNCLUSTERSTAGE,\n ECS_PIPELINE_STAGES_SHRINKCLUSTER_ECSSHRINKCLUSTERSTAGE,\n ECS_SECURITY_GROUP_MODULE,\n ECS_SERVERGROUP_MODULE,\n ECS_TARGET_GROUP_STATES,\n]).config(function () {\n CloudProviderRegistry.registerProvider('ecs', {\n name: 'EC2 Container Service',\n logo: { path: ecsLogo },\n serverGroup: {\n transformer: 'ecsServerGroupTransformer',\n detailsTemplateUrl: require('./serverGroup/details/serverGroupDetails.html'),\n detailsController: 'ecsServerGroupDetailsCtrl',\n cloneServerGroupTemplateUrl: require('./serverGroup/configure/wizard/serverGroupWizard.html'),\n cloneServerGroupController: 'ecsCloneServerGroupCtrl',\n commandBuilder: 'ecsServerGroupCommandBuilder',\n // configurationService: 'ecsServerGroupConfigurationService',\n scalingActivitiesEnabled: false,\n skipUpstreamStageCheck: true,\n },\n loadBalancer: {\n transformer: EcsLoadBalancerTransformer,\n ClusterContainer: EcsLoadBalancerClusterContainer,\n targetGroupDetails: EcsTargetGroupDetails,\n details: EcsLoadBalancerDetails,\n },\n instance: {\n detailsTemplateUrl: require('./instance/details/instanceDetails.html'),\n detailsController: 'ecsInstanceDetailsCtrl',\n },\n securityGroup: {\n transformer: 'ecsSecurityGroupTransformer',\n reader: 'ecsSecurityGroupReader',\n detailsTemplateUrl: require('./securityGroup/details/securityGroupDetail.html'),\n detailsController: 'ecsSecurityGroupDetailsCtrl',\n },\n });\n});\n\nDeploymentStrategyRegistry.registerProvider('ecs', ['redblack']);\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;AAGA,MAAM,eAAqC,GAAA;AAAA,EACzC,QAAU,EAAA;AAAA,IACR,MAAQ,EAAA,GAAA;AAAA,IACR,OAAS,EAAA,GAAA;AAAA,IACT,MAAQ,EAAA,GAAA;AAAA,IACR,OAAS,EAAA,IAAA;AAAA,IACT,YAAc,EAAA,IAAA;AAAA,GAAA;AAAA,EAEhB,QAAU,EAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA;AAAA,EAaV,YAAY,MAAM;AAAA,GAAA;AAAA,CAAA,CAAA;AAGb,MAAM,oBAAuB,GAAA,sBAAA,CAAA;AACpC,MAAO,CAAA,oBAAA,EAAsB,EAAI,CAAA,CAAA,SAAA,CAAU,WAAa,EAAA,eAAA,CAAA;;ACxBjD,MAAM,aAAgB,GAAA,sBAAA,CAAA;AAC7B,MAAA,CAAO,eAAe,CAAC,oBAAA,CAAA,CAAA;;ACHvB,MAAM,YAA0C,GAAA;AAAA,EAC9C,8BACE,EAAA,oQAAA;AAAA,EACF,6BACE,EAAA,iNAAA;AAAA,EACF,sCACE,EAAA,iFAAA;AAAA,EACF,uBACE,EAAA,qPAAA;AAAA,EACF,wBACE,EAAA,oQAAA;AAAA,EACF,wBACE,EAAA,4LAAA;AAAA,EACF,sBAAwB,EAAA,2EAAA;AAAA,EACxB,sBACE,EAAA,kPAAA;AAAA,EACF,sBAAwB,EAAA,mFAAA;AAAA,EACxB,oCACE,EAAA,iRAAA;AAAA,EACF,8BACE,EAAA,yKAAA;AAAA,EACF,8BAAgC,EAAA,6EAAA;AAAA,EAChC,aACE,EAAA,sJAAA;AAAA,EACF,iBAAmB,EAAA,uDAAA;AAAA,EACnB,4BACE,EAAA,+JAAA;AAAA,EACF,0BACE,EAAA,sMAAA;AAAA,EACF,6BACE,EAAA,oMAAA;AAAA,EACF,mCACE,EAAA,6OAAA;AAAA,EACF,uBACE,EAAA,2VAAA;AAAA,EACF,qBAAuB,EAAA,iDAAA;AAAA,EACvB,oCAAsC,EAAA,oDAAA;AAAA,EACtC,kDACE,EAAA,yGAAA;AAAA,EACF,gBAAkB,EAAA,sEAAA;AAAA,EAClB,uBACE,EAAA,qGAAA;AAAA,EACF,cAAgB,EAAA,iDAAA;AAAA,EAChB,iBACE,EAAA,wKAAA;AAAA,EACF,YACE,EAAA,oIAAA;AAAA,EACF,oBAAsB,EAAA,yEAAA;AAAA,EACtB,kBACE,EAAA,ycAAA;AAAA,EACF,eACE,EAAA,CAAA,kNAAA,CAAA;AAAA,EACF,gBACE,EAAA,oKAAA;AAAA,EACF,oBACE,EAAA,uPAAA;AAAA,EACF,4BAA8B,EAAA,yDAAA;AAAA,EAC9B,uBACE,EAAA,gOAAA;AAAA,EACF,0BACE,EAAA,4QAAA;AAAA,EACF,2BAA6B,EAAA,4DAAA;AAAA,EAC7B,yBACE,EAAA,6PAAA;AAAA,EACF,2BACE,EAAA,8JAAA;AAAA,EACF,UAAY,EAAA,6DAAA;AAAA,EACZ,0BACE,EAAA,+MAAA;AAAA,EACF,sBAAwB,EAAA,iFAAA;AAAA,EACxB,8BAAgC,EAAA,4EAAA;AAAA,EAChC,mCACE,EAAA,+LAAA;AAAA,EACF,mCACE,EAAA,2HAAA;AAAA,EACF,oBACE,EAAA,yUAAA;AAAA,EACF,8BACE,EAAA,8SAAA;AAAA,EACF,0BAA4B,EAAA,iDAAA;AAAA,EAC5B,0BACE,EAAA,yLAAA;AAAA,EACF,4BACE,EAAA,kIAAA;AAAA,EACF,wBACE,EAAA,CAAA,6SAAA,CAAA;AAAA,CAAA,CAAA;AAGJ,MAAO,CAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,CAAC,QAAQ,oBAAqB,CAAA,QAAA,CAAS,KAAK,YAAa,CAAA,GAAA,CAAA,CAAA,CAAA;;AC/E9E,MAAA,oBAAA,GAA8C,QAAS,CAAA,SAAA,CAAU,GAAgC,IAAA;AAAA,EAC5G,QAAU,EAAA,EAAA;AAAA,CAAA,CAAA;AAEZ,IAAI,oBAAsB,EAAA;AACxB,EAAqB,oBAAA,CAAA,eAAA,GAAkB,SAAS,aAAc,CAAA,KAAA,CAAA,CAAA;AAAA;;ACRlC,MAAA,gBAAA,CAAA;AAAA,EACrB,YAAqD,GAAA;AAC1D,IAAA,OAAO,KAAK,kBAAoB,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAG3B,gBAAA,CAAiB,SAAiB,MAA4D,EAAA;AACnG,IAAI,IAAA,OAAA,IAAW,IAAQ,IAAA,MAAA,IAAU,IAAM,EAAA;AACrC,MAAA,OAAO,IAAK,CAAA,6BAAA,CAAA,CAA+B,IAAK,CAAA,OAAA,CAAA,CAAS,KAAK,MAAQ,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,KAAA;AAExE,IAAO,OAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAIJ,MAAM,wBAA2B,GAAA,uCAAA,CAAA;AAExC,MAAO,CAAA,wBAAA,EAA0B,EAAI,CAAA,CAAA,OAAA,CAAQ,kBAAoB,EAAA,gBAAA,CAAA;;ACjBtC,MAAA,aAAA,CAAA;AAAA,EAClB,UAAU,QAAkD,EAAA;AACjE,IAAO,OAAA,IAAA,CAAK,QAAU,CAAA,CAAA,IAAA,CAAK,QAAU,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAIlC,MAAM,qBAAwB,GAAA,oCAAA,CAAA;AAErC,MAAO,CAAA,qBAAA,EAAuB,EAAI,CAAA,CAAA,OAAA,CAAQ,eAAiB,EAAA,aAAA,CAAA;;ACIpD,MAAM,gDAAmD,GAAA,2CAAA,CAAA;AAEhE,MAAA,CAAO,gDAAkD,EAAA,CAAC,kBAAoB,EAAA,oBAAA,CAAA,CAAA,CAAuB,WACnG,wBACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAU,QAAQ,MAAQ,EAAA,SAAA,EAAW,UAAU,GAAK,EAAA,OAAA,EAAS,WAAa,EAAA,EAAA,EAAI,SAAW,EAAA;AAEvF,IAAO,MAAA,CAAA,kBAAA,GAAqB,qBAAsB,CAAA,QAAA,CAAS,KAAO,EAAA,6BAAA,CAAA,CAAA;AAElE,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,MACT,YAAY,GAAI,CAAA,YAAA;AAAA,MAChB,cAAc,CAAE,CAAA,GAAA,CAAI,GAAK,EAAA,yBAAA,CAAA,IAA8B,SAAS,mBAAuB,IAAA,EAAA;AAAA,KAAA,CAAA;AAGzF,IAAA,MAAA,CAAO,WAAc,GAAA,GAAA,CAAA;AACrB,IAAA,MAAA,CAAO,OAAU,GAAA,OAAA,CAAA;AACjB,IAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;AAErB,IAAA,MAAM,aAAgB,GAAA,KAAA,CAAA;AACtB,IAAA,MAAM,uBAAuB,EAAE,aAAA,EAAA,CAAA;AAE/B,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,KAAS,IAAA,MAAA,CAAO,KAAU,KAAA,SAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAInD,MAAM,MAAA,YAAA,GAAe,kBAAmB,CAAA,GAAA,CAAI,aAAc,CAAA,IAAA,CAAA,CAAA;AAC1D,MAAmC,kCAAA,CAAA,kBAAA,EAAoB,cAAc,SAAS,CAAA,OAAA,CAAA,CAAA;AAG9E,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,MAAA,IAAI,eAAiB,EAAA,aAAA,EAAe,WAAa,EAAA,OAAA,EAAS,MAAQ,EAAA,KAAA,CAAA;AAClE,MAAI,IAAA,CAAC,IAAI,YAAc,EAAA;AAErB,QAAkB,eAAA,GAAA,EAAA,CAAA;AAClB,QAAgB,aAAA,GAAA,EAAA,CAAA;AAChB,QAAc,WAAA,GAAA,EAAA,CAAA;AACd,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,WAAA,GAAc,WAAY,CAAA,WAAA,CAAA;AAC1B,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,OACE,YAAa,CAAA,SAAA,CAAU,IAAK,CAAA,SAAU,gBAAkB,EAAA;AACtD,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,IAGX,YAAa,CAAA,WAAA,CAAY,IAAK,CAAA,SAAU,YAAa,EAAA;AACnD,cAAA,OAAO,YAAY,CAAA,SAAA,CAAU,IAAK,CAAA,SAAU,gBAAkB,EAAA;AAC5D,gBAAI,IAAA,gBAAA,CAAiB,EAAO,KAAA,QAAA,CAAS,UAAY,EAAA;AAC/C,kBAAkB,eAAA,GAAA,gBAAA,CAAA;AAClB,kBAAA,YAAA,GAAc,YAAY,CAAA,IAAA,CAAA;AAC1B,kBAAA,OAAA,GAAU,YAAa,CAAA,OAAA,CAAA;AACvB,kBAAA,MAAA,GAAS,YAAa,CAAA,MAAA,CAAA;AACtB,kBAAA,KAAA,GAAQ,YAAa,CAAA,KAAA,CAAA;AACrB,kBAAO,OAAA,IAAA,CAAA;AAAA,iBAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA,CAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAMjB,UAAA,IAAI,CAAC,eAAiB,EAAA;AAEpB,YAAA,GAAA,CAAI,aAAc,CAAA,IAAA,CAAK,IAAK,CAAA,SAAU,YAAc,EAAA;AAClD,cAAA,OACE,YAAa,CAAA,YAAA,CAAa,IAAK,CAAA,SAAU,WAAa,EAAA;AACpD,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,IAIb,YAAa,CAAA,WAAA,CAAY,IAAK,CAAA,SAAU,YAAa,EAAA;AACnD,gBAAY,YAAA,CAAA,YAAA,CAAa,IAAK,CAAA,SAAU,WAAa,EAAA;AACnD,kBAAI,IAAA,CAAC,YAAY,UAAY,EAAA;AAC3B,oBAAO,OAAA,KAAA,CAAA;AAAA,mBAAA;AAET,kBAAA,OAAO,WAAY,CAAA,SAAA,CAAU,IAAK,CAAA,SAAU,gBAAkB,EAAA;AAC5D,oBAAI,IAAA,gBAAA,CAAiB,EAAO,KAAA,QAAA,CAAS,UAAY,EAAA;AAC/C,sBAAkB,eAAA,GAAA,gBAAA,CAAA;AAClB,sBAAA,aAAA,GAAgB,CAAC,YAAa,CAAA,IAAA,CAAA,CAAA;AAC9B,sBAAA,OAAA,GAAU,YAAa,CAAA,OAAA,CAAA;AACvB,sBAAA,MAAA,GAAS,YAAa,CAAA,MAAA,CAAA;AACtB,sBAAA,KAAA,GAAQ,YAAa,CAAA,KAAA,CAAA;AACrB,sBAAO,OAAA,IAAA,CAAA;AAAA,qBAAA;AAAA,mBAAA,CAAA,CAAA;AAAA,iBAAA,CAAA,CAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAWzB,MAAI,IAAA,eAAA,IAAmB,WAAW,MAAQ,EAAA;AACxC,QAAA,eAAA,CAAgB,OAAU,GAAA,OAAA,CAAA;AAC1B,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,CAAK,CAAC,OAAY,KAAA;AAC/F,UAAA,IAAI,OAAO,WAAa,EAAA;AACtB,YAAA,OAAA;AAAA,WAAA;AAEF,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,MAAA,CAAO,SAAS,WAAc,GAAA,WAAA,CAAA;AAC9B,UAAI,IAAA,MAAA,CAAO,SAAS,iBAAmB,EAAA;AACrC,YAAM,MAAA,0BAAA,GAA6B,OAAO,QAAS,CAAA,iBAAA,CAAkB,OACnE,CAAC,CAAA,KAAM,CAAE,CAAA,UAAA,CAAW,mBAAwB,KAAA,KAAA,CAAA,CAAA;AAE9C,YAAA,IAAI,2BAA2B,MAAQ,EAAA;AACrC,cAAA,MAAA,CAAO,SAAS,YAAe,GAAA,0BAAA,CAA2B,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,gBAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA;AAG3E,UAAO,MAAA,CAAA,aAAA,GAAgB,OAAQ,CAAA,aAAA,IAAiB,OAAQ,CAAA,gBAAA,CAAA;AACxD,UAAA,IAAI,UAAU,qBAAuB,EAAA;AACnC,YAAU,SAAA,CAAA,qBAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAEX,EAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAGL,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,IAAqB,SAAA,SAAA,GAAA;AACnB,MAAA,IAAI,OAAO,WAAa,EAAA;AACtB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAA,IAAI,IAAI,YAAc,EAAA;AACpB,QAAA,MAAA,CAAO,MAAM,OAAU,GAAA,KAAA,CAAA;AACvB,QAAA,MAAA,CAAO,qBAAqB,QAAS,CAAA,UAAA,CAAA;AACrC,QAAA,MAAA,CAAO,MAAM,kBAAqB,GAAA,IAAA,CAAA;AAClC,QAAA,oBAAA,CAAqB,cAAe,CAAA,WAAA,CAAA,CAAA;AAAA,OAC/B,MAAA;AACL,QAAA,MAAA,CAAO,GAAG,GAAK,EAAA,EAAE,oBAAsB,EAAA,IAAA,EAAA,EAAQ,EAAE,QAAU,EAAA,SAAA,EAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAI/D,IAAA,IAAA,CAAK,2BAA2B,WAAY;AAC1C,MAAA,MAAM,YAAW,MAAO,CAAA,QAAA,CAAA;AACxB,MAAM,MAAA,aAAA,GAAgB,UAAS,MAAU,IAAA,EAAA,CAAA;AACzC,MAAA,MAAM,eAAkB,GAAA,aAAA,CAAc,MAAO,CAAA,SAAU,MAAQ,EAAA;AAC7D,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,iBAAkB,CAAA,SAAA,EAAU,GAAK,EAAA,oBAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGzD,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,qCAAsC,CAAA,SAAA,EAAU,GAAK,EAAA,oBAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAG7E,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,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,yBAA0B,CAAA,SAAA,EAAU,GAAK,EAAA,oBAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGjE,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,0BAA2B,CAAA,SAAA,EAAU,GAAK,EAAA,oBAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGlE,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,MAAM,MAAA,aAAA,GAAgB,UAAS,MAAU,IAAA,EAAA,CAAA;AACzC,MAAO,OAAA,aAAA,CAAc,IAAK,CAAA,SAAU,MAAQ,EAAA;AAC1C,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;;ACjVzB,MAAA,cAAA,SAA6BA,eAAM,SAAgC,CAAA;AAAA,EACjE,MAA6C,GAAA;AAClD,IAAA,MAAM,EAAE,WAAA,EAAa,YAAc,EAAA,gBAAA,EAAA,GAAqB,IAAK,CAAA,KAAA,CAAA;AAE7D,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,kBAAkB,YAAa,CAAA,IAAA;AAAA,MAC/B,QAAQ,WAAY,CAAA,MAAA;AAAA,MACpB,WAAW,WAAY,CAAA,OAAA;AAAA,MACvB,MAAM,WAAY,CAAA,eAAA;AAAA,MAClB,OAAO,WAAY,CAAA,KAAA;AAAA,MACnB,UAAU,WAAY,CAAA,aAAA;AAAA,KAAA,CAAA;AAKxB,IAAA,MAAM,mBAAuC,GAAA;AAAA,MAC3C,EAAI,EAAA,KAAA,CAAA;AAAA,MACJ,IAAM,EAAA,KAAA,CAAA;AAAA,MACN,QAAU,EAAA,KAAA,CAAA;AAAA,MACV,SAAW,EAAA,KAAA,CAAA;AAAA,MACX,MAAQ,EAAA,KAAA,CAAA;AAAA,MACR,OAAS,EAAA,KAAA,CAAA;AAAA,MACT,YAAc,EAAA,KAAA,CAAA;AAAA,KAAA,CAAA;AAGhB,IAAA,oDACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,mDAAA;AAAA,KAAA,+CACZ,YAAD,EAAA;AAAA,MAAc,KAAM,EAAA,QAAA;AAAA,KAAA,+CACjB,MAAD,EAAA;AAAA,MAAQ,EAAG,EAAA,wBAAA;AAAA,MAAyB,MAAA;AAAA,KAAA,+CACjC,KAAD,EAAA;AAAA,MAAK,SAAW,EAAA,CAAA,2DAAA,CAAA;AAAA,KAAA,+CACb,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,6BAAA;AAAA,KAAA,EAA+B,YAAY,eAI/D,CAAA,CAAA,CAAA,CAAA,EAAA,gBAAA,IACC,YAAY,YAAa,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACvC,MAAA,oDACG,uBAAD,EAAA;AAAA,QACE,GAAK,EAAA,MAAA;AAAA,QACL,SAAS,WAAY,CAAA,OAAA;AAAA,QACrB,QAAQ,WAAY,CAAA,MAAA;AAAA,QACpB,WAAa,EAAA;AAAA,UACX,SAAS,WAAY,CAAA,OAAA;AAAA,UACrB,eAAe,WAAY,CAAA,aAAA;AAAA,UAC3B,OAAS,EAAA,MAAA;AAAA,UACT,cAAgB,EAAA,mBAAA;AAAA,UAChB,WAAW,WAAY,CAAA,SAAA;AAAA,UACvB,IAAM,EAAA,MAAA;AAAA,UACN,MAAM,WAAY,CAAA,IAAA;AAAA,UAClB,QAAQ,WAAY,CAAA,MAAA;AAAA,SAAA;AAAA,QAEtB,aAAe,EAAA,KAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA;;AC1DxB,MAAA,+BAAA,SAA8CA,eAAM,SAA8C,CAAA;AAAA,EAChG,sBAAsB,SAA+C,EAAA;AAC1E,IAAA,MAAM,qBAAqB,MACzB,CAAC,QACE,CAAU,SAAA,CAAA,YAAA,IAAgB,IAAI,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,CAAA,EAC3C,MAAK,KAAM,CAAA,YAAA,IAAgB,IAAI,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,CAAA,CAAA,CAAA;AAEjD,IAAM,MAAA,kBAAA,GAAqB,MACzB,CAAC,OAAA,CACG,WAAU,YAAkC,CAAA,YAAA,IAAgB,IAAI,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,eAAA,CAAA,EAC7E,MAAK,KAAM,CAAA,YAAA,CAAkC,gBAAgB,EAAI,EAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAE,CAAA,eAAA,CAAA,CAAA,CAAA;AAEpF,IAAA,OACE,SAAU,CAAA,aAAA,KAAkB,IAAK,CAAA,KAAA,CAAM,iBACvC,SAAU,CAAA,gBAAA,KAAqB,IAAK,CAAA,KAAA,CAAM,oBAC1C,SAAU,CAAA,YAAA,KAAiB,IAAK,CAAA,KAAA,CAAM,gBACtC,kBACA,EAAA,IAAA,kBAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAIG,MAA8D,GAAA;AACnE,IAAA,MAAM,EAAE,YAAA,EAAc,aAAe,EAAA,gBAAA,EAAA,GAAqB,IAAK,CAAA,KAAA,CAAA;AAC/D,IAAA,MAAM,EAAK,GAAA,YAAA,CAAA;AAEX,IAAA,MAAM,YAAe,GAAA,EAAA,CAAG,YAAa,CAAA,GAAA,CAAI,CAAC,WAAgB,KAAA;AACxD,MAAA,oDACG,cAAD,EAAA;AAAA,QACE,KAAK,WAAY,CAAA,eAAA;AAAA,QACjB,YAAA;AAAA,QACA,WAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAKN,IAAA,oDAAQ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,mBAAA;AAAA,KAAqB,EAAA,YAAA,CAAA,CAAA;AAAA,GAAA;AAAA;;ACrCxC,MAAA,WAAA,SAA0BA,eAAM,SAA6B,CAAA;AAAA,EAClE,YAAY,KAA0B,EAAA;AACpC,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGA,0BAA0B,GAAqB,EAAA;AACrD,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAM,CAAA,GAAA,CAAA,CAAA;AACxB,IAAI,IAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACpB,MAAO,OAAA,GAAA,CAAA;AAAA,KAAA;AAET,IAAA,OAAO,KAAM,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGR,MAA0C,GAAA;AAC/C,IAAA,MAAM,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAA,GAAmB,KAAK,KAAM,CAAA,QAAA,CAAA;AAGtD,IACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA,IAAA,kBACGA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,MACG,QAAS,EAAA,GAAA,EAAE,IAEd,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,KAAA,EAAO,EAAE,WAAa,EAAA,EAAA,EAAA;AAAA,KACzB,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAD,EAAA,IAAA,EAAG,iBACH,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,EACG,cAAe,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,CAAM,KAAA;AACjC,MAAI,IAAA,MAAA,CAAO,QAAQ,SAAW,EAAA;AAC5B,QAAA,oDACG,IAAD,EAAA;AAAA,UAAI,GAAK,EAAA,CAAA;AAAA,SAAG,EAAA,QAAA,+CAET,GAAD,EAAA;AAAA,UAAG,SAAU,EAAA,6BAAA;AAAA,UAA8B,aAAY,EAAA,MAAA;AAAA,SACvD,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,EAAA,IAAA,EACG,MAAO,CAAA,cAAA,IACN,OAAO,aAAc,CAAA,YAAA,CAAa,GAAI,CAAA,CAAC,EAAO,KAAA;AAC5C,UAAO,OAAA,IAAA,CAAK,0BAA0B,EAAG,CAAA,cAAA,CAAA,CAAA;AAAA,SAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAK9C,MAAA;AACL,QAAA,oDACG,IAAD,EAAA;AAAA,UAAI,GAAK,EAAA,CAAA;AAAA,SAAA,EACN,MAAO,CAAA,IAAA,EAAK,GAAE,EAAA,GAAA,EACd,OAAO,cAAe,CAAA,UAAA,IACrB,MAAO,CAAA,mBAAA,CAAoB,UAC3B,IAAA,MAAA,CAAO,sBAAuB,CAAA,QAAA,IAC9B,OAAO,+BAAgC,CAAA,cAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA;;ACzBtD,MAAA,sBAAA,SAAqCA,eAAM,SAGhD,CAAA;AAAA,EACA,YAAY,KAAqC,EAAA;AAC/C,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AACN,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,OAAS,EAAA,IAAA;AAAA,MACT,YAAc,EAAA,KAAA,CAAA;AAAA,MACd,4BAA4B,MAAM;AAAA,OAAA;AAAA,KAAA,CAAA;AAGpC,IAAA,KAAA,CAAM,IACH,aAAc,CAAA,eAAA,CAAA,CACd,KACA,EAAA,CAAA,IAAA,CAAK,MAAM,IAAK,CAAA,mBAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGd,oBAA6B,GAAA;AAClC,IAAA,IAAA,CAAK,KAAM,CAAA,0BAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGL,mBAA4B,GAAA;AAClC,IAAA,MAAM,EAAE,IAAA,EAAM,MAAW,EAAA,GAAA,IAAA,CAAK,KAAM,CAAA,YAAA,CAAA;AACpC,IAAM,MAAA,YAAA,GAAiC,KAAK,KAAM,CAAA,GAAA,CAC/C,cAAc,eACd,CAAA,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,IAA2B,KAAA;AACrC,MAAO,OAAA,IAAA,CAAK,IAAS,KAAA,IAAA,IAAQ,IAAK,CAAA,OAAA,KAAY,KAAK,KAAM,CAAA,YAAA,CAAa,SAAa,IAAA,IAAA,CAAK,MAAW,KAAA,MAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGvG,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,OAAS,EAAA,KAAA;AAAA,MACT,YAAA;AAAA,KAAA,CAAA,CAAA;AAEF,IAAA,IAAA,CAAK,KAAM,CAAA,0BAAA,EAAA,CAAA;AAEX,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,0BAAA,EAA4B,KAAK,KAAM,CAAA,GAAA,CACpC,cAAc,eACd,CAAA,CAAA,SAAA,CAAU,IAAM,EAAA,MAAM,IAAK,CAAA,mBAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAE3B,MAAA;AACL,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,4BAA4B,MAAM;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAKjC,MAAqD,GAAA;AAC1D,IAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,KAAA,CAAM,YAAa,CAAA,IAAA,CAAA;AACjD,IAAM,MAAA,EAAE,YAAc,EAAA,OAAA,EAAA,GAAY,IAAK,CAAA,KAAA,CAAA;AACvC,IAAM,MAAA,EAAE,cAAc,IAAK,CAAA,KAAA,CAAA;AAE3B,IAAM,MAAA,WAAA,gDACH,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,cAAA;AAAA,KAAA,+CACZ,MAAD,EAAA;AAAA,MAAQ,EAAG,EAAA,GAAA;AAAA,KAAA,+CACR,MAAD,EAAA;AAAA,MAAM,SAAU,EAAA,4BAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAKtB,IAAM,MAAA,aAAA,GAAgB,sBACpBA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,QAAA;AAAA,KACZ,EAAA,WAAA,+CACA,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,0BAAA;AAAA,KAAA,+CACZ,OAAD,EAAA;AAAA,MAAS,IAAK,EAAA,OAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAKpB,IAAM,MAAA,eAAA,GAAkB,sBACtBA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,SAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,iBAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,0BAAA;AAAA,KACb,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,0BAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAMZ,IAAM,MAAA,kBAAA,GAAqB,sBACzBA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,QAAA;AAAA,KACZ,EAAA,WAAA,+CACA,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,+BAAA;AAAA,KAAA,+CACZ,GAAD,EAAA;AAAA,MAAG,SAAU,EAAA,iBAAA;AAAA,KAAA,CAAA,+CACZ,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,wCAAA;AAAA,KAA0C,EAAA,gBAAA,CAAA,CAAA,CAAA,CAAA;AAK9D,IAAM,MAAA,mBAAA,GAAsB,sBAC1BA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,SAAA;AAAA,KAAA,+CACZ,kBAAD,EAAA;AAAA,MAAoB,OAAQ,EAAA,uBAAA;AAAA,MAAwB,eAAiB,EAAA,IAAA;AAAA,KAAA,+CAClE,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,yBAAA;AAAA,KAAA,+CACX,IAAD,EAAA,IAAA,EAAI,4BACHA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,MAAK,SAAU,CAAA,YAAA,CAAa,WAC5B,CAAA,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,IAAA,CAAA,+CACH,IAAD,EAAA,IAAA,+CACG,UAAD,EAAA;AAAA,MAAY,OAAS,EAAA,SAAA;AAAA,KAAA,CAAA,kBACpBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACC,CAAA,EAAA,YAAA,CAAa,yBAEfA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,KAAA,CAAA,kBACHA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAK,EAAA,YAAA,CAAa,wBACjBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,MAAA,CAAA,kBACHA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAK,EAAA,YAAA,CAAa,mCACjBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,SAAA,CAAA,+CACH,IAAD,EAAA,IAAA,EAAK,YAAa,CAAA,aAAA,CAAA,CAAA,+CAEnB,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,mCAAA;AAAA,KAAA,kBACXA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,oBAAA,CAAA,+CACH,IAAD,EAAA,IAAA,kBACGA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACG,EAAA,YAAA,CAAa,iBAAkB,CAAA,GAAA,CAAI,CAAC,EAAO,KAAA;AAC1C,MAAA,oDAAQ,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,EAAA;AAAA,OAAK,EAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA,+CAK5B,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,mCAAA;AAAA,KAAA,kBACXA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,eAAA,CAAA,+CACH,IAAD,EAAA,IAAA,kBACGA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACG,EAAA,YAAA,CAAa,YAAa,CAAA,GAAA,CAAI,CAAC,EAAO,KAAA;AACrC,MAAA,oDACG,IAAD,EAAA;AAAA,QAAI,KAAK,EAAG,CAAA,eAAA;AAAA,OAAA,+CACT,YAAD,EAAA;AAAA,QAAc,KAAM,EAAA,QAAA;AAAA,OAAA,+CACjB,MAAD,EAAA;AAAA,QACE,EAAG,EAAA,yBAAA;AAAA,QACH,MAAQ,EAAA;AAAA,UACN,kBAAkB,YAAa,CAAA,IAAA;AAAA,UAC/B,QAAQ,YAAa,CAAA,MAAA;AAAA,UACrB,WAAW,YAAa,CAAA,OAAA;AAAA,UACxB,MAAM,EAAG,CAAA,eAAA;AAAA,UACT,OAAO,EAAG,CAAA,KAAA;AAAA,UACV,UAAU,YAAa,CAAA,aAAA;AAAA,SAAA;AAAA,OAGzB,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAD,EAAA,IAAA,EAAI,EAAG,CAAA,eAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA,+CAStB,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,mCAAA;AAAA,KACZ,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,UAAA,CAAA,+CACH,IAAD,EAAA,IAAA,+CACG,GAAD,EAAA;AAAA,MAAG,MAAO,EAAA,QAAA;AAAA,MAAS,IAAA,EAAM,YAAY,YAAa,CAAA,OAAA;AAAA,KAC/C,EAAA,YAAA,CAAa,OAKtB,CAAA,CAAA,CAAA,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,kBAAD,EAAA;AAAA,MAAoB,OAAQ,EAAA,QAAA;AAAA,MAAS,eAAiB,EAAA,KAAA;AAAA,KAAA,kBACnDA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAD,IAAM,EAAA,+FAAA,CAAA,CAAA,+CAEP,kBAAD,EAAA;AAAA,MAAoB,OAAQ,EAAA,WAAA;AAAA,MAAY,eAAiB,EAAA,KAAA;AAAA,KAAA,EACtD,aAAa,SACZ,GAAA,YAAA,CAAa,UAAU,GAAI,CAAA,CAAC,UAAU,KAAU,KAAA;AAC9C,MAAA,oDACG,KAAD,EAAA;AAAA,QAAK,GAAK,EAAA,KAAA;AAAA,OAAA,kBACPA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,WAAD,EAAA;AAAA,QAAa,QAAA;AAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA,mBAMpBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,wBAAA,CAAA,CAAA,+CAGP,kBAAD,EAAA;AAAA,MAAoB,OAAQ,EAAA,WAAA;AAAA,MAAY,eAAiB,EAAA,KAAA;AAAA,KACvD,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IACG,EAAA,YAAA,CAAa,iBACZ,YAAa,CAAA,cAAA,CAAe,GAAI,CAAA,CAAC,EAAO,KAAA;AACtC,MAAA,oDAAQ,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,EAAA;AAAA,OAAK,EAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,mBAGtBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,8BAAA,CAAA,CAAA,CAAA,+CAIT,kBAAD,EAAA;AAAA,MAAoB,OAAQ,EAAA,SAAA;AAAA,MAAU,eAAiB,EAAA,KAAA;AAAA,KAAA,+CACpD,IAAD,EAAA,IAAA,EACG,aAAa,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACpC,MAAA,oDAAQ,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,MAAA;AAAA,OAAS,EAAA,MAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAOnC,IAAA,oDACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,EACZ,OAAW,IAAA,aAAA,EAAA,EACX,CAAC,OAAA,IAAW,kBACZ,EAAA,EAAA,CAAC,OAAW,IAAA,CAAC,YAAgB,IAAA,eAAA,EAAA,EAC7B,CAAC,OAAA,IAAW,YAAgB,IAAA,mBAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA;;ACvM9B,MAAA,qBAAA,SAAoCA,eAAM,SAA6D,CAAA;AAAA,EAC5G,YAAY,KAA6B,EAAA;AACvC,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AACN,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,OAAS,EAAA,IAAA;AAAA,MACT,WAAa,EAAA,KAAA,CAAA;AAAA,MACb,YAAc,EAAA,KAAA,CAAA;AAAA,MACd,4BAA4B,MAAM;AAAA,OAAA;AAAA,KAAA,CAAA;AAGpC,IAAA,KAAA,CAAM,IACH,aAAc,CAAA,eAAA,CAAA,CACd,KACA,EAAA,CAAA,IAAA,CAAK,MAAM,IAAK,CAAA,kBAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGd,oBAA6B,GAAA;AAClC,IAAA,IAAA,CAAK,KAAM,CAAA,0BAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGL,kBAA2B,GAAA;AACjC,IAAA,MAAM,EAAE,gBAAA,EAAkB,MAAQ,EAAA,eAAA,EAAA,GAAoB,KAAK,KAAM,CAAA,WAAA,CAAA;AACjE,IAAM,MAAA,YAAA,GAAiC,KAAK,KAAM,CAAA,GAAA,CAC/C,cAAc,eACd,CAAA,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,IAA2B,KAAA;AACrC,MAAO,OAAA,IAAA,CAAK,SAAS,gBAAoB,IAAA,IAAA,CAAK,YAAY,IAAK,CAAA,KAAA,CAAM,SAAa,IAAA,IAAA,CAAK,MAAW,KAAA,MAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGtG,IAAA,IAAA,CAAK,QAAS,CAAA;AAAA,MACZ,YAAA;AAAA,KAAA,CAAA,CAAA;AAEF,IAAA,IAAA,CAAK,KAAM,CAAA,0BAAA,EAAA,CAAA;AAEX,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,OAAS,EAAA,KAAA;AAAA,QACT,WAAa,EAAA,IAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAEV,MAAA;AACL,MAAA,MAAM,cAA+B,YAAa,CAAA,YAAA,CAAa,KAC7D,CAAC,EAAA,KAAO,GAAG,eAAoB,KAAA,eAAA,CAAA,CAAA;AAEjC,MAAA,IAAI,CAAC,WAAa,EAAA;AAChB,QAAA,IAAA,CAAK,QAAS,CAAA;AAAA,UACZ,OAAS,EAAA,KAAA;AAAA,UACT,WAAa,EAAA,IAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAIjB,MAAA,IAAI,WAAa,EAAA;AACf,QAAA,IAAA,CAAK,QAAS,CAAA;AAAA,UACZ,OAAS,EAAA,KAAA;AAAA,UACT,WAAA;AAAA,SAAA,CAAA,CAAA;AAGF,QAAA,IAAI,WAAa,EAAA;AACf,UAAA,IAAA,CAAK,QAAS,CAAA;AAAA,YACZ,0BAAA,EAA4B,KAAK,KAAM,CAAA,GAAA,CACpC,cAAc,eACd,CAAA,CAAA,SAAA,CAAU,IAAM,EAAA,MAAM,IAAK,CAAA,kBAAA,EAAA,CAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAE3B,MAAA;AACL,UAAA,IAAA,CAAK,QAAS,CAAA;AAAA,YACZ,4BAA4B,MAAM;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAOrC,MAAoD,GAAA;AACzD,IAAM,MAAA,EAAE,IAAM,EAAA,SAAA,EAAA,GAAc,IAAK,CAAA,KAAA,CAAA;AACjC,IAAM,MAAA,MAAA,GAAS,IAAK,CAAA,KAAA,CAAM,WAAY,CAAA,MAAA,CAAA;AACtC,IAAA,MAAM,EAAE,WAAA,EAAa,YAAc,EAAA,OAAA,EAAA,GAAY,IAAK,CAAA,KAAA,CAAA;AAEpD,IAAM,MAAA,WAAA,gDACH,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,cAAA;AAAA,KAAA,+CACZ,MAAD,EAAA;AAAA,MAAQ,EAAG,EAAA,GAAA;AAAA,KAAA,+CACR,MAAD,EAAA;AAAA,MAAM,SAAU,EAAA,4BAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAKtB,IAAM,MAAA,aAAA,GAAgB,sBACpBA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,QAAA;AAAA,KACZ,EAAA,WAAA,+CACA,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,0BAAA;AAAA,KAAA,+CACZ,OAAD,EAAA;AAAA,MAAS,IAAK,EAAA,OAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAKpB,IAAM,MAAA,eAAA,GAAkB,sBACtBA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,SAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,iBAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,0BAAA;AAAA,KACb,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,yBAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAMZ,IAAM,MAAA,iBAAA,GAAoB,sBACxBA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,QAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,+BAAA;AAAA,KAAA,+CACZ,GAAD,EAAA;AAAA,MAAG,SAAU,EAAA,uBAAA;AAAA,MAAwB,aAAY,EAAA,MAAA;AAAA,KAAA,CAAA,+CAChD,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,wCAAA;AAAA,KAA0C,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAK9D,IAAM,MAAA,kBAAA,GAAqB,sBACzBA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,SAAA;AAAA,KAAA,+CACZ,kBAAD,EAAA;AAAA,MAAoB,OAAQ,EAAA,sBAAA;AAAA,MAAuB,eAAiB,EAAA,IAAA;AAAA,KAAA,+CACjE,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,yBAAA;AAAA,KACZ,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,IAAA,CAAA,+CACH,IAAD,EAAA,IAAA,+CACG,UAAD,EAAA;AAAA,MAAY,OAAS,EAAA,SAAA;AAAA,KAAA,CAAA,+CACpB,IAAD,EAAA,IAAA,CAAA,EACC,YAAY,MAEf,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,KAAA,CAAA,+CACH,IAAD,EAAA,IAAA,EAAK,YAAY,KACjB,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,UAAA,CAAA,+CACH,IAAD,EAAA,IAAA,EAAK,YAAY,QACjB,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,MAAA,CAAA,+CACH,IAAD,EAAA,IAAA,EAAK,YAAY,IACjB,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,aAAA,CAAA,+CACH,IAAD,EAAA,IAAA,EAAK,YAAY,UAAW,CAAA,WAAA,EAAA,CAAA,CAAA,+CAE7B,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,mCAAA;AAAA,KACZ,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,gBAAA,CAAA,+CACH,IAAD,EAAA,IAAA,+CAEG,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,oCAAA;AAAA,KAAA,EACX,YAAY,iBACX,GAAA,WAAA,CAAY,kBAAkB,GAAI,CAAA,CAAC,IAAI,CAAM,KAAA;AAC3C,MAAA,oDAAQ,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,CAAA;AAAA,OAAI,EAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,mBAGrBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,4BAAA,CAAA,CAAA,CAAA,CAAA,+CAKX,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,mCAAA;AAAA,KACZ,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,wBAAA,CAAA,+CACH,IAAD,EAAA,IAAA,+CACG,GAAD,EAAA;AAAA,MAAG,MAAO,EAAA,QAAA;AAAA,MAAS,IAAA,EAAM,YAAY,YAAa,CAAA,OAAA;AAAA,KAC/C,EAAA,YAAA,CAAa,OAIpB,CAAA,CAAA,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,mCAAA;AAAA,KACZ,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IAAI,EAAA,eAAA,CAAA,+CACH,IAAD,EAAA,IAAA,+CACG,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,oCAAA;AAAA,KAAA,EACX,WAAY,CAAA,YAAA,CAAa,GAAI,CAAA,CAAC,IAAI,CAAM,KAAA;AACvC,MAAA,oDACG,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,CAAA;AAAA,OAAA,+CACN,YAAD,EAAA;AAAA,QAAc,KAAM,EAAA,QAAA;AAAA,OAAA,+CACjB,MAAD,EAAA;AAAA,QACE,EAAG,EAAA,eAAA;AAAA,QACH,MAAQ,EAAA;AAAA,UACN,MAAA;AAAA,UACA,SAAA;AAAA,UACA,WAAa,EAAA,EAAA;AAAA,UACb,QAAU,EAAA,KAAA;AAAA,SAAA;AAAA,OAGZ,kBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,IAAI,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,+CAUrB,kBAAD,EAAA;AAAA,MAAoB,OAAQ,EAAA,eAAA;AAAA,MAAgB,eAAiB,EAAA,KAAA;AAAA,KAAA,+CAC1D,IAAD,EAAA;AAAA,MAAI,SAAU,EAAA,mCAAA;AAAA,KAAA,kBACXA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,QAAA,CAAA,+CACH,IAAD,EAAA,IAAA,EACG,WAAY,CAAA,mBAAA,EAAoB,GAAE,EAAA,WAAA,CAAY,eAC9C,EAAA,WAAA,CAAY,kCAEdA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,SAAA,CAAA,kBACHA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAK,EAAA,WAAA,CAAY,2BAA0B,UAC3C,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,EAAI,UACJ,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,EAAK,YAAY,0BAA2B,EAAA,UAAA,CAAA,kBAC3CA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,mBAAA,CAAA,kBACHA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,MAAK,WAAY,CAAA,qBAAA,CAAA,kBAChBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,qBAAA,CAAA,kBACHA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,MAAK,WAAY,CAAA,uBAAA,CAAA,kBAChBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,SAAA,CAAA,kBACHA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,MAAI,gBAAe,EAAA,WAAA,IAAe,WAAY,CAAA,OAAA,GAAU,WAAY,CAAA,OAAA,CAAQ,QAAW,GAAA,MAAA,CAAA,CAAA,CAAA,+CAG1F,kBAAD,EAAA;AAAA,MAAoB,OAAQ,EAAA,YAAA;AAAA,MAAa,eAAiB,EAAA,KAAA;AAAA,KACxD,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,kBACGA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,MAAI,8BACJ,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,EAAK,WAAY,CAAA,UAAA,CAAW,2CAA2C,CAAE,EAAA,UAAA,CAAA,kBACxEA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAAI,EAAA,oBAAA,CAAA,+CACH,IAAD,EAAA,IAAA,EAAK,WAAY,CAAA,UAAA,CAAW,oBAAyB,CAAA,IAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAM7D,IAAA,oDACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,EACZ,OAAW,IAAA,aAAA,EAAA,EACX,CAAC,OAAA,IAAW,iBACZ,EAAA,EAAA,CAAC,OAAW,IAAA,CAAC,WAAe,IAAA,eAAA,EAAA,EAC5B,CAAC,OAAA,IAAW,WAAe,IAAA,kBAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA;;AClPI,MAAA,0BAAA,CAAA;AAAA,EAEtC,YAAoB,EAAe,EAAA;AAAf,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAEb,sBAAsB,YAAyE,EAAA;AACpG,IAAa,YAAA,CAAA,YAAA,CAAa,OAAQ,CAAA,CAAC,EAAwB,KAAA;AACzD,MAAA,EAAA,CAAG,SAAS,YAAa,CAAA,MAAA,CAAA;AACzB,MAAA,EAAA,CAAG,UAAU,YAAa,CAAA,OAAA,CAAA;AAC1B,MAAA,EAAA,CAAG,gBAAgB,YAAa,CAAA,aAAA,CAAA;AAChC,MAAA,IAAI,aAAa,mBAAqB,EAAA;AACpC,QAAA,MAAM,eAAe,YAAa,CAAA,mBAAA,CAAA;AAClC,QAAG,EAAA,CAAA,YAAA,GAAe,aAAa,EAAG,CAAA,cAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAGtC,IAAO,OAAA,IAAA,CAAK,GAAG,OAAQ,CAAA,YAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAbX,0BADT,CACS,UAAU,CAAC,IAAA,CAAA;;ACIpB,MAAM,uBAA0B,GAAA,+CAAA,CAAA;AACvC,MAAO,CAAA,uBAAA,EAAyB,CAAC,0BAAA,CAAA,CAAA,CAA6B,MAAO,CAAA;AAAA,EACnE,0BAAA;AAAA,EACA,CAAC,wBAAuD,KAAA;AACtD,IAAA,MAAM,qBAAsC,GAAA;AAAA,MAC1C,IAAM,EAAA,uBAAA;AAAA,MACN,GAAK,EAAA,oFAAA;AAAA,MACL,MAAQ,EAAA;AAAA,QACN,KAAO,EAAA;AAAA,UACL,KAAO,EAAA,IAAA;AAAA,UACP,MAAQ,EAAA,IAAA;AAAA,SAAA;AAAA,OAAA;AAAA,MAGZ,KAAO,EAAA;AAAA,QACL,mBAAqB,EAAA;AAAA,UACnB,SAAW,EAAA,qBAAA;AAAA,UACX,KAAO,EAAA,OAAA;AAAA,SAAA;AAAA,OAAA;AAAA,MAGX,OAAS,EAAA;AAAA,QACP,SAAW,EAAA,CAAC,cAAgB,EAAA,CAAC,iBAA8B,YAAa,CAAA,SAAA,CAAA;AAAA,QACxE,IAAM,EAAA,CAAC,cAAgB,EAAA,CAAC,iBAA8B,YAAa,CAAA,IAAA,CAAA;AAAA,QACnE,QAAU,EAAA,CAAC,cAAgB,EAAA,CAAC,iBAA8B,YAAa,CAAA,QAAA,CAAA;AAAA,QAEvE,WAAa,EAAA;AAAA,UACX,cAAA;AAAA,UACA,CAAC,YAA8B,KAAA;AAC7B,YAAO,OAAA;AAAA,cACL,kBAAkB,YAAa,CAAA,gBAAA;AAAA,cAC/B,iBAAiB,YAAa,CAAA,IAAA;AAAA,cAC9B,WAAW,YAAa,CAAA,SAAA;AAAA,cACxB,QAAQ,YAAa,CAAA,MAAA;AAAA,cACrB,OAAO,YAAa,CAAA,KAAA;AAAA,aAAA,CAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA;AAAA,MAK5B,IAAM,EAAA;AAAA,QACJ,gBAAkB,EAAA;AAAA,UAChB,KAAO,EAAA,sBAAA;AAAA,UACP,SAAW,EAAA,MAAA;AAAA,UACX,YAAc,EAAA,WAAA;AAAA,UACd,WAAa,EAAA,QAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAKnB,IAAA,wBAAA,CAAyB,qBAAsB,CAAA,qBAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;ACLnD,cAAe,s8GAAs8G;;AC9Ct7G,MAAA,iBAAA,CAAA;AAAA,EACtB,gBAA0D,GAAA;AAC/D,IAAA,OAAO,KAAK,0BAA4B,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAIrC,MAAM,yBAA4B,GAAA,wCAAA,CAAA;AAEzC,MAAO,CAAA,yBAAA,EAA2B,EAAI,CAAA,CAAA,OAAA,CAAQ,mBAAqB,EAAA,iBAAA,CAAA;;ACP5D,MAAM,iDAAoD,GAAA,kDAAA,CAAA;AAEjE,MAAO,CAAA,iDAAA,EAAmD,EACvD,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,KAAA;AAAA,IACf,WAAa,EAAA,yDAAA;AAAA,IACb,qBAAuB,EAAA,6DAAA;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,wBAA0B,EAAA;AAAA,EACpC,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,KAAA,CAAA,CAAO,IAAK,CAAA,SAAU,QAAU,EAAA;AAC1D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAA,MAAA,CAAO,MAAM,QAAW,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG1B,IAAA,MAAA,CAAO,OAAU,GAAA,CAAC,WAAa,EAAA,WAAA,EAAa,WAAa,EAAA,WAAA,CAAA,CAAA;AAEzD,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,KAAA,CAAA;AAEtB,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,GAAK,EAAA;AACnE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,GAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,GAAK,EAAA;AAClE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,GAAA,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,iDAAoD,GAAA,8CAAA,CAAA;AAEjE,MAAO,CAAA,iDAAA,EAAmD,EACvD,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,KAAA;AAAA,IACf,WAAa,EAAA,yDAAA;AAAA,IACb,qBAAqB,iBAAkB,CAAA,0BAAA;AAAA,IACvC,qBAAuB,EAAA,6DAAA;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,wBAA0B,EAAA;AAAA,EACpC,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,KAAA,CAAA,CAAO,IAAK,CAAA,SAAU,QAAU,EAAA;AAC1D,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,KAAA,CAAA;AAEtB,IACE,IAAA,KAAA,CAAM,SACN,MAAO,CAAA,WAAA,CAAY,WAAW,8BAC9B,IAAA,MAAA,CAAO,WAAY,CAAA,UAAA,CAAW,kBAC9B,EAAA;AACA,MAAA,KAAA,CAAM,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,KAAA;AAG1C,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,GAAK,EAAA;AACnE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,GAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,GAAK,EAAA;AAClE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,GAAA,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;;;;;;;;;;;;;;;;;;;;AC5DlC,MAAM,yDACX,GAAA,kDAAA,CAAA;AAEF,MAAO,CAAA,yDAAA,EAA2D,EAC/D,CAAA,CAAA,MAAA,CAAO,WAAY;AAClB,EAAA,QAAA,CAAS,SAAS,aAAc,CAAA;AAAA,IAC9B,QAAU,EAAA,gBAAA;AAAA,IACV,aAAe,EAAA,KAAA;AAAA,IACf,WAAa,EAAA,iEAAA;AAAA,IACb,UAAY,EAAA;AAAA,MACV,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC;AAAA,QACE,IAAM,EAAA,eAAA;AAAA,QACN,SAAW,EAAA,8BAAA;AAAA,QACX,UAAY,EAAA,gCAAA;AAAA,OAAA;AAAA,MAEd,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,4BAA8B,EAAA;AAAA,EACxC,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,KAAA,CAAA,CAAO,IAAK,CAAA,SAAU,QAAU,EAAA;AAC1D,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,IAAM,KAAA,CAAA,OAAA,GAAU,MAAM,OAAW,IAAA,EAAA,CAAA;AACjC,IAAA,KAAA,CAAM,aAAgB,GAAA,KAAA,CAAA;AAEtB,IACE,IAAA,KAAA,CAAM,SACN,MAAO,CAAA,WAAA,CAAY,WAAW,8BAC9B,IAAA,MAAA,CAAO,WAAY,CAAA,UAAA,CAAW,kBAC9B,EAAA;AACA,MAAA,KAAA,CAAM,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,KAAA;AAG1C,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,GAAK,EAAA;AACnE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,GAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,GAAK,EAAA;AAClE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA;AAGvD,IAAI,IAAA,KAAA,CAAM,iCAAiC,KAAW,CAAA,EAAA;AACpD,MAAA,KAAA,CAAM,4BAA+B,GAAA,CAAA,CAAA;AAAA,KAAA;AAGvC,IAAK,IAAA,CAAA,SAAA,GAAY,SAAU,GAAA,EAAK,GAAK,EAAA;AACnC,MAAA,IAAI,QAAQ,CAAG,EAAA;AACb,QAAO,OAAA,GAAA,CAAA;AAAA,OAAA;AAET,MAAA,OAAO,GAAM,GAAA,GAAA,CAAA;AAAA,KAAA,CAAA;AAGf,IAAI,IAAA,KAAA,CAAM,0BAA0B,KAAW,CAAA,EAAA;AAC7C,MAAA,KAAA,CAAM,qBAAwB,GAAA,OAAA,CAAA;AAAA,KAAA;AAEhC,IAAM,KAAA,CAAA,qBAAA,GAAwB,MAAM,qBAAsB,CAAA,QAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3EzD,MAAM,+CAAkD,GAAA,6CAAA,CAAA;AAE/D,MAAO,CAAA,+CAAA,EAAiD,EACrD,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,KAAA;AAAA,IACf,WAAa,EAAA,uDAAA;AAAA,IACb,qBAAuB,EAAA,2DAAA;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,uBAAyB,EAAA;AAAA,EACnC,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,KAAA,CAAA,CAAO,IAAK,CAAA,SAAU,QAAU,EAAA;AAC1D,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,KAAA,CAAA;AAEtB,IACE,IAAA,KAAA,CAAM,SACN,MAAO,CAAA,WAAA,CAAY,WAAW,8BAC9B,IAAA,MAAA,CAAO,WAAY,CAAA,UAAA,CAAW,kBAC9B,EAAA;AACA,MAAA,KAAA,CAAM,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,KAAA;AAG1C,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,GAAK,EAAA;AACnE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,GAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,GAAK,EAAA;AAClE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,GAAA,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;;;;;;;;;;;;;;;;;;;;AChEzC,MAAM,8DACX,GAAA,qDAAA,CAAA;AAEF,MAAO,CAAA,8DAAA,EAAgE,EACpE,CAAA,CAAA,MAAA,CAAO,WAAY;AAClB,EAAA,QAAA,CAAS,SAAS,aAAc,CAAA;AAAA,IAC9B,QAAU,EAAA,mBAAA;AAAA,IACV,aAAe,EAAA,KAAA;AAAA,IACf,WAAa,EAAA,uEAAA;AAAA,IACb,mBAAqB,EAAA,kFAAA;AAAA,IACrB,uBAAA,EAAyB,CAAC,iBAAmB,EAAA,YAAA,CAAA;AAAA,IAC7C,UAAY,EAAA,CAAC,EAAE,IAAA,EAAM,iBAAiB,SAAW,EAAA,iBAAA,EAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAGpD,WAAW,+BAAiC,EAAA;AAAA,EAC3C,QAAA;AAAA,EACA,SAAU,MAAQ,EAAA;AAChB,IAAA,MAAA,CAAO,KAAM,CAAA,aAAA,GAAgB,MAAO,CAAA,KAAA,CAAM,aAAiB,IAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjB1D,MAAM,+CAAkD,GAAA,iDAAA,CAAA;AAE/D,MAAO,CAAA,+CAAA,EAAiD,EACrD,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,KAAA;AAAA,IACf,WAAa,EAAA,uDAAA;AAAA,IACb,uBAAA,EAAyB,CAAC,yBAA2B,EAAA,YAAA,CAAA;AAAA,IACrD,qBAAuB,EAAA,2DAAA;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,4GAAA;AAAA,OAAA;AAAA,MAEJ,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,QAAA,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,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,uBAAyB,EAAA;AAAA,EACnC,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,SAAY,GAAA;AAAA,MACjB,cAAgB,EAAA,KAAA;AAAA,MAChB,aAAe,EAAA,KAAA;AAAA,KAAA,CAAA;AAGjB,IAAA,cAAA,CAAe,YAAa,CAAA,KAAA,CAAA,CAAO,IAAK,CAAA,SAAU,QAAU,EAAA;AAC1D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAA,MAAA,CAAO,UAAU,cAAiB,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGpC,IAAA,MAAA,CAAO,gBAAgB,cAAe,CAAA,WAAA,CAAA;AAEtC,IAAA,MAAA,CAAO,YAAe,GAAA;AAAA,MACpB;AAAA,QACE,KAAO,EAAA,UAAA;AAAA,QACP,GAAK,EAAA,UAAA;AAAA,OAAA;AAAA,MAEP;AAAA,QACE,KAAO,EAAA,YAAA;AAAA,QACP,GAAK,EAAA,YAAA;AAAA,OAAA;AAAA,MAEP;AAAA,QACE,KAAO,EAAA,uBAAA;AAAA,QACP,GAAK,EAAA,kBAAA;AAAA,OAAA;AAAA,MAEP;AAAA,QACE,KAAO,EAAA,qBAAA;AAAA,QACP,GAAK,EAAA,aAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIT,IAAA,MAAA,CAAO,WAAc,GAAA;AAAA,MACnB;AAAA,QACE,KAAO,EAAA,YAAA;AAAA,QACP,GAAK,EAAA,KAAA;AAAA,OAAA;AAAA,MAEP;AAAA,QACE,KAAO,EAAA,aAAA;AAAA,QACP,GAAK,EAAA,MAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIT,IAAM,KAAA,CAAA,QAAA,GAAW,MAAM,QAAY,IAAA,EAAA,CAAA;AACnC,IAAM,KAAA,CAAA,OAAA,GAAU,MAAM,OAAW,IAAA,EAAA,CAAA;AACjC,IAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAM,MAAU,IAAA,MAAA,CAAO,cAAc,CAAG,CAAA,CAAA,GAAA,CAAA;AACvD,IAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAM,MAAU,IAAA,MAAA,CAAO,aAAa,CAAG,CAAA,CAAA,GAAA,CAAA;AACtD,IAAA,KAAA,CAAM,UAAa,GAAA,KAAA,CAAM,UAAc,IAAA,MAAA,CAAO,YAAY,CAAG,CAAA,CAAA,GAAA,CAAA;AAC7D,IAAI,IAAA,KAAA,CAAM,kCAAkC,KAAW,CAAA,EAAA;AACrD,MAAA,KAAA,CAAM,6BAAgC,GAAA,GAAA,CAAA;AAAA,KAAA;AAExC,IAAA,IAAI,CAAC,KAAA,CAAM,MAAU,IAAA,KAAA,CAAM,eAAe,OAAS,EAAA;AACjD,MAAA,KAAA,CAAM,MAAS,GAAA,aAAA,CAAA;AAAA,KAAA;AAEjB,IAAA,KAAA,CAAM,aAAgB,GAAA,KAAA,CAAA;AAEtB,IACE,IAAA,KAAA,CAAM,SACN,MAAO,CAAA,WAAA,CAAY,WAAW,8BAC9B,IAAA,MAAA,CAAO,WAAY,CAAA,UAAA,CAAW,kBAC9B,EAAA;AACA,MAAA,KAAA,CAAM,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,KAAA;AAG1C,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,GAAK,EAAA;AACnE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,GAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,GAAK,EAAA;AAClE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA;AAGvD,IAAA,IAAA,CAAK,mBAAmB,WAAY;AAClC,MAAI,IAAA,KAAA,CAAM,WAAW,aAAe,EAAA;AAClC,QAAA,KAAA,CAAM,UAAa,GAAA,OAAA,CAAA;AACnB,QAAA,OAAO,KAAM,CAAA,QAAA,CAAA;AACb,QAAA,OAAO,KAAM,CAAA,QAAA,CAAA;AAAA,OACR,MAAA;AACL,QAAA,KAAA,CAAM,QAAW,GAAA,EAAA,CAAA;AACjB,QAAI,IAAA,KAAA,CAAM,eAAe,KAAO,EAAA;AAC9B,UAAA,OAAO,KAAM,CAAA,QAAA,CAAA;AAAA,SACR,MAAA;AACL,UAAA,KAAA,CAAM,UAAa,GAAA,MAAA,CAAA;AACnB,UAAA,OAAO,KAAM,CAAA,QAAA,CAAA;AACb,UAAM,KAAA,CAAA,QAAA,GAAW,MAAM,QAAY,IAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACpHxC,MAAM,6DACX,GAAA,oDAAA,CAAA;AAEF,MAAO,CAAA,6DAAA,EAA+D,EACnE,CAAA,CAAA,MAAA,CAAO,WAAY;AAClB,EAAA,QAAA,CAAS,SAAS,aAAc,CAAA;AAAA,IAC9B,QAAU,EAAA,kBAAA;AAAA,IACV,aAAe,EAAA,KAAA;AAAA,IACf,WAAa,EAAA,qEAAA;AAAA,IACb,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,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC;AAAA,QACE,IAAM,EAAA,eAAA;AAAA,QACN,SAAW,EAAA,+BAAA;AAAA,QACX,UAAY,EAAA,kCAAA;AAAA,OAAA;AAAA,MAEd,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,IAEjE,QAAU,EAAA,IAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAGb,WAAW,8BAAgC,EAAA;AAAA,EAC1C,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,KAAA,CAAA,CAAO,IAAK,CAAA,SAAU,QAAU,EAAA;AAC1D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAA,MAAA,CAAO,MAAM,QAAW,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG1B,IAAM,KAAA,CAAA,OAAA,GAAU,MAAM,OAAW,IAAA,EAAA,CAAA;AACjC,IAAA,KAAA,CAAM,aAAgB,GAAA,KAAA,CAAA;AAEtB,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,GAAK,EAAA;AACnE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,GAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,GAAK,EAAA;AAClE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA;AAGvD,IAAI,IAAA,KAAA,CAAM,kCAAkC,KAAW,CAAA,EAAA;AACrD,MAAA,KAAA,CAAM,6BAAgC,GAAA,CAAA,CAAA;AAAA,KAAA;AAGxC,IAAI,IAAA,KAAA,CAAM,yBAAyB,KAAW,CAAA,EAAA;AAC5C,MAAA,KAAA,CAAM,oBAAuB,GAAA,KAAA,CAAA;AAAA,KAAA;AAG/B,IAAK,IAAA,CAAA,SAAA,GAAY,SAAU,GAAA,EAAK,GAAK,EAAA;AACnC,MAAA,IAAI,QAAQ,CAAG,EAAA;AACb,QAAO,OAAA,GAAA,CAAA;AAAA,OAAA;AAET,MAAA,OAAO,GAAM,GAAA,GAAA,CAAA;AAAA,KAAA,CAAA;AAGf,IAAI,IAAA,KAAA,CAAM,0BAA0B,KAAW,CAAA,EAAA;AAC7C,MAAA,KAAA,CAAM,qBAAwB,GAAA,OAAA,CAAA;AAAA,KAAA;AAEhC,IAAM,KAAA,CAAA,qBAAA,GAAwB,MAAM,qBAAsB,CAAA,QAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACrEzD,MAAM,uDACX,GAAA,qDAAA,CAAA;AAEF,MAAO,CAAA,uDAAA,EAAyD,EAC7D,CAAA,CAAA,MAAA,CAAO,WAAY;AAClB,EAAA,QAAA,CAAS,SAAS,aAAc,CAAA;AAAA,IAC9B,QAAU,EAAA,eAAA;AAAA,IACV,aAAe,EAAA,KAAA;AAAA,IACf,WAAa,EAAA,+DAAA;AAAA,IACb,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,EAAE,IAAM,EAAA,eAAA,EAAiB,SAAW,EAAA,SAAA,EAAA;AAAA,MACpC,EAAE,IAAA,EAAM,eAAiB,EAAA,SAAA,EAAW,gBAAgB,UAAY,EAAA,6BAAA,EAAA;AAAA,MAChE,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,2BAA6B,EAAA;AAAA,EACvC,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,KAAA,CAAA,CAAO,IAAK,CAAA,SAAU,QAAU,EAAA;AAC1D,MAAA,MAAA,CAAO,QAAW,GAAA,QAAA,CAAA;AAClB,MAAA,MAAA,CAAO,MAAM,QAAW,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG1B,IAAM,KAAA,CAAA,OAAA,GAAU,MAAM,OAAW,IAAA,EAAA,CAAA;AACjC,IAAA,KAAA,CAAM,aAAgB,GAAA,KAAA,CAAA;AAEtB,IAAA,IAAI,CAAC,KAAM,CAAA,WAAA,IAAe,MAAO,CAAA,WAAA,CAAY,mBAAmB,GAAK,EAAA;AACnE,MAAM,KAAA,CAAA,WAAA,GAAc,MAAO,CAAA,WAAA,CAAY,kBAAmB,CAAA,GAAA,CAAA;AAAA,KAAA;AAE5D,IAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,WAAA,CAAY,eAAe,GAAK,EAAA;AAClE,MAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAY,cAAe,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA;AAGvD,IAAI,IAAA,KAAA,CAAM,iBAAiB,KAAW,CAAA,EAAA;AACpC,MAAA,KAAA,CAAM,YAAe,GAAA,CAAA,CAAA;AAAA,KAAA;AAGvB,IAAI,IAAA,KAAA,CAAM,sBAAsB,KAAW,CAAA,EAAA;AACzC,MAAA,KAAA,CAAM,iBAAoB,GAAA,KAAA,CAAA;AAAA,KAAA;AAG5B,IAAK,IAAA,CAAA,SAAA,GAAY,SAAU,GAAA,EAAK,GAAK,EAAA;AACnC,MAAA,IAAI,QAAQ,CAAG,EAAA;AACb,QAAO,OAAA,GAAA,CAAA;AAAA,OAAA;AAET,MAAA,OAAO,GAAM,GAAA,GAAA,CAAA;AAAA,KAAA,CAAA;AAGf,IAAI,IAAA,KAAA,CAAM,0BAA0B,KAAW,CAAA,EAAA;AAC7C,MAAA,KAAA,CAAM,qBAAwB,GAAA,OAAA,CAAA;AAAA,KAAA;AAEhC,IAAM,KAAA,CAAA,qBAAA,GAAwB,MAAM,qBAAsB,CAAA,QAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClE1B,MAAA,wBAAA,CAAA;AAAA,EAC7B,sBAAsB,YAA4C,EAAA;AACvE,IAAA,IAAI,iBAAiB,oBAAsB,EAAA;AACzC,MAAA,OAAO,IAAK,CAAA,2BAAA,EAAA,CAAA;AAAA,KACH,MAAA,IAAA,YAAA,KAAiB,qBAAyB,IAAA,YAAA,KAAiB,4BAA8B,EAAA;AAElG,MAAA,OAAO,IAAK,CAAA,kCAAA,EAAA,CAAA;AAAA,KACH,MAAA,IAAA,YAAA,KAAiB,SAAa,IAAA,YAAA,KAAiB,gBAAkB,EAAA;AAE1E,MAAA,OAAO,IAAK,CAAA,wBAAA,EAAA,CAAA;AAAA,KAAA,MAAA,IACH,iBAAiB,yBAA2B,EAAA;AACrD,MAAA,OAAO,IAAK,CAAA,+BAAA,EAAA,CAAA;AAAA,KAAA,MAAA,IACH,iBAAiB,aAAe,EAAA;AACzC,MAAA,OAAO,IAAK,CAAA,qBAAA,EAAA,CAAA;AAAA,KAAA,MAAA,IACH,iBAAiB,mBAAqB,EAAA;AAC/C,MAAA,OAAO,IAAK,CAAA,yBAAA,EAAA,CAAA;AAAA,KACP,MAAA;AAEL,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAIJ,2BAAoD,GAAA;AACzD,IAAO,OAAA;AAAA,MACL,EAAE,IAAM,EAAA,QAAA,EAAU,KAAO,EAAA,iCAAA,EAAA;AAAA,MACzB,EAAE,IAAM,EAAA,QAAA,EAAU,KAAO,EAAA,YAAA,EAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAItB,kCAA2D,GAAA;AAChE,IAAO,OAAA;AAAA,MACL,EAAE,IAAM,EAAA,QAAA,EAAU,KAAO,EAAA,iCAAA,EAAA;AAAA,MACzB,EAAE,IAAM,EAAA,SAAA,EAAW,KAAO,EAAA,QAAA,EAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAIvB,wBAAiD,GAAA;AACtD,IAAA,OAAO,CAAC,EAAE,IAAM,EAAA,SAAA,EAAW,KAAO,EAAA,QAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAG7B,+BAAwD,GAAA;AAC7D,IAAO,OAAA;AAAA,MACL,EAAE,IAAM,EAAA,QAAA,EAAU,KAAO,EAAA,iCAAA,EAAA;AAAA,MACzB,EAAE,IAAM,EAAA,SAAA,EAAW,KAAO,EAAA,KAAA,EAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAIvB,qBAA8C,GAAA;AACnD,IAAA,OAAO,CAAC,EAAE,IAAM,EAAA,SAAA,EAAW,KAAO,EAAA,KAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAG7B,yBAAkD,GAAA;AACvD,IAAA,OAAO,CAAC,EAAE,IAAM,EAAA,QAAA,EAAU,KAAO,EAAA,YAAA,EAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAI9B,MAAM,0BAA6B,GAAA,gDAAA,CAAA;AAE1C,MAAO,CAAA,0BAAA,EAA4B,EAAI,CAAA,CAAA,OAAA,CAAQ,0BAA4B,EAAA,wBAAA,CAAA;;ACzDjD,MAAA,YAAA,CAAA;AAAA,EACjB,WAAgD,GAAA;AACrD,IAAA,OAAO,KAAK,cAAgB,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAIzB,MAAM,uBAA0B,GAAA,mCAAA,CAAA;AAEvC,MAAO,CAAA,uBAAA,EAAyB,EAAI,CAAA,CAAA,OAAA,CAAQ,cAAgB,EAAA,YAAA,CAAA;;ACErD,MAAM,wDACX,GAAA,gDAAA,CAAA;AAEF,OAAA,CACG,OAAO,wDAA0D,EAAA;AAAA,EAChE,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,kCAAA;AAAA,CAAA,CAAA,CAED,WAAW,6BAA+B,EAAA;AAAA,EACzC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,uBAAA;AAAA,EACA,KAAA;AAAA,EACA,qBAAA;AAAA,EACA,SAAU,MAAA,EAAQ,MAAQ,EAAA,qBAAA,EAAuB,KAAK,mBAAqB,EAAA;AACzE,IAAA,IAAA,CAAK,WAAc,GAAA,GAAA,CAAA;AACnB,IAAA,MAAM,WAAc,GAAA,GAAA,CAAA;AACpB,IAAA,MAAM,aAAgB,GAAA,qBAAA,CAAA;AACtB,IAAK,IAAA,CAAA,aAAA,GAAgB,eAAe,GAAI,CAAA,UAAA,CAAA,CAAA;AAGxC,IAAO,MAAA,CAAA,kBAAA,GAAqB,qBAAsB,CAAA,QAAA,CAAS,KAAO,EAAA,kCAAA,CAAA,CAAA;AAElE,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,OAAS,EAAA,IAAA;AAAA,MACT,YAAY,GAAI,CAAA,YAAA;AAAA,KAAA,CAAA;AAGlB,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,CAAK,SAAU,OAAS,EAAA;AACvB,QAAA,OAAO,UAAU,UAAW,CAAA,OAAA,CAAQ,KAAO,CAAA,CAAA,IAAA,CAAK,CAAC,KAAS,KAAA;AACxD,UAAA,OAAA,CAAQ,OAAU,GAAA,KAAA,CAAA;AAClB,UAAO,OAAA,OAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAGV,CAAA,CAAA,IAAA,CAAK,SAAU,OAAS,EAAA;AACvB,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,UAAM,MAAA,wBAAA,GAA2B,oBAAoB,2BACnD,CAAA,WAAA,EACA,cAAc,SACd,EAAA,aAAA,CAAc,QACd,aAAc,CAAA,IAAA,CAAA,CAAA;AAGhB,UAAQ,OAAA,CAAA,MAAA,CAAO,eAAe,wBAA0B,EAAA,OAAA,CAAA,CAAA;AACxD,UAAA,MAAA,CAAO,aAAgB,GAAA,aAAA,CAAA;AACvB,UAAA,MAAA,CAAO,UAAU,iBAAkB,CAAA,aAAA,CAAA,CAAA;AACnC,UAAA,MAAA,CAAO,qBAAqB,4BAA6B,CAAA,aAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAE1D,EAAA,UAAA,CAAA,CAAA;AAAA,KAAA;AAGP,IAAA,SAAA,iBAAA,CAA2B,OAAS,EAAA;AAClC,MAAM,MAAA,iBAAA,GAAoB,CAAE,CAAA,OAAA,CAAQ,OAAQ,CAAA,YAAA,EAAc,CAAC,IAAA,KAAS,IAAK,CAAA,KAAA,CAAM,EAAK,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAA,CAAA;AAC/F,MAAA,OAAO,MAAO,CAAA,IAAA,CAAK,iBAChB,CAAA,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AACb,QAAO,OAAA;AAAA,UACL,OAAS,EAAA,IAAA;AAAA,UACT,KAAA,EAAO,eAAe,iBAAmB,EAAA,IAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA,CAAA,CAG5C,MAAO,CAAA,CAAC,IAAS,KAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAA,CAAA;AAAA,KAAA;AAGjC,IAAA,SAAA,4BAAA,CAAsC,OAAS,EAAA;AAC7C,MAAM,MAAA,iBAAA,GAAoB,EAAE,OAAQ,CAAA,OAAA,CAAQ,oBAAoB,CAAC,IAAA,KAAS,KAAK,aAAc,CAAA,EAAA,CAAA,CAAA;AAC7F,MAAA,OAAO,MAAO,CAAA,IAAA,CAAK,iBAChB,CAAA,CAAA,GAAA,CAAI,CAAC,IAAS,KAAA;AACb,QAAO,OAAA;AAAA,UACL,aAAA,EAAe,iBAAkB,CAAA,IAAA,CAAA,CAAM,CAAG,CAAA,CAAA,aAAA;AAAA,UAC1C,KAAA,EAAO,eAAe,iBAAmB,EAAA,IAAA,CAAA;AAAA,SAAA,CAAA;AAAA,OAAA,CAAA,CAG5C,MAAO,CAAA,CAAC,IAAS,KAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAA,CAAA;AAAA,KAAA;AAGjC,IAAA,SAAA,cAAA,CAAwB,mBAAmB,IAAM,EAAA;AAC/C,MAAA,MAAM,KAAQ,GAAA,EAAA,CAAA;AACd,MAAkB,iBAAA,CAAA,IAAA,CAAA,CAAM,OAAQ,CAAA,CAAC,IAAS,KAAA;AACxC,QAAC,CAAK,IAAA,CAAA,UAAA,IAAc,EAAI,EAAA,OAAA,CAAQ,CAAC,KAAU,KAAA;AACzC,UAAI,IAAA,IAAA,CAAK,aAAa,IAAS,IAAA,KAAA,CAAM,cAAc,KAAa,CAAA,IAAA,KAAA,CAAM,YAAY,KAAY,CAAA,EAAA;AAC5F,YAAM,KAAA,CAAA,IAAA,CAAK,EAAE,SAAW,EAAA,KAAA,CAAM,WAAW,OAAS,EAAA,KAAA,CAAM,OAAS,EAAA,QAAA,EAAU,IAAK,CAAA,QAAA,EAAA,CAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAItF,MAAO,OAAA,KAAA,CAAA;AAAA,KAAA;AAGT,IAAsB,SAAA,UAAA,GAAA;AACpB,MAAA,IAAI,OAAO,WAAa,EAAA;AACtB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAA,IAAI,IAAI,YAAc,EAAA;AACpB,QAAA,MAAA,CAAO,QAAQ,aAAc,CAAA,IAAA,CAAA;AAC7B,QAAA,MAAA,CAAO,MAAM,QAAW,GAAA,IAAA,CAAA;AACxB,QAAA,MAAA,CAAO,MAAM,OAAU,GAAA,KAAA,CAAA;AACvB,QAAA,oBAAA,CAAqB,cAAe,CAAA,gBAAA,CAAA,CAAA;AAAA,OAC/B,MAAA;AACL,QAAA,MAAA,CAAO,GAAG,GAAK,EAAA,EAAE,oBAAsB,EAAA,IAAA,EAAA,EAAQ,EAAE,QAAU,EAAA,SAAA,EAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAI/D,IAAA,oBAAA,EAAA,CAAuB,KAAK,MAAM;AAGhC,MAAA,IAAI,CAAC,MAAA,CAAO,WAAe,IAAA,CAAC,IAAI,YAAc,EAAA;AAC5C,QAAI,GAAA,CAAA,cAAA,CAAe,UAAU,MAAQ,EAAA,oBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAIzC,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;;AC1IiB,MAAA,sBAAA,CAAA;AAAA,EAC3B,2BAAA,CACL,qBACA,EAAA,SAAA,EACA,eACgB,EAAA;AAChB,IAAA,OAAO,qBAAsB,CAAA,SAAA,CAAU,OAAS,CAAA,CAAA,SAAA,CAAU,MAAQ,CAAA,CAAA,eAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAI/D,MAAM,yBAA4B,GAAA,oCAAA,CAAA;AACzC,MAAO,CAAA,yBAAA,EAA2B,EAAI,CAAA,CAAA,OAAA,CAAQ,wBAA0B,EAAA,sBAAA,CAAA;;ACXjE,MAAM,2CAA8C,GAAA,yCAAA,CAAA;AAE3D,MAAA,CAAO,2CAA6C,EAAA,EAAA,CAAA,CAAI,OAAQ,CAAA,6BAAA,EAA+B,WAAY;AACzG,EAAkC,SAAA,sBAAA,GAAA;AAAA,GAAA;AAElC,EAAO,OAAA;AAAA,IACL,sBAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;;ACJG,MAAM,yBAA4B,GAAA,6BAAA,CAAA;AACzC,MAAA,CAAO,yBAA2B,EAAA;AAAA,EAChC,yBAAA;AAAA,EACA,2CAAA;AAAA,EACA,wDAAA;AAAA,CAAA,CAAA;;ACPkC,MAAA,sBAAA,CAAA;AAAA,EAAA,OACpB,8BAAqF,GAAA;AACjG,IAAA,OAAO,KAAK,iCAAmC,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA;;ACkKH,MAAA,kCAAA,CAAA;AAAA,EAkB9C,WAAA,CACU,IACA,kBACA,EAAA,0BAAA,EACA,eACA,gBACA,EAAA,iBAAA,EACA,wBACA,EAAA,mBAAA,EACA,YACR,EAAA;AATQ,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA,CAAA;AACA,IAAA,IAAA,CAAA,kBAAA,GAAA,kBAAA,CAAA;AACA,IAAA,IAAA,CAAA,0BAAA,GAAA,0BAAA,CAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA,CAAA;AACA,IAAA,IAAA,CAAA,gBAAA,GAAA,gBAAA,CAAA;AACA,IAAA,IAAA,CAAA,iBAAA,GAAA,iBAAA,CAAA;AACA,IAAA,IAAA,CAAA,wBAAA,GAAA,wBAAA,CAAA;AACA,IAAA,IAAA,CAAA,mBAAA,GAAA,mBAAA,CAAA;AACA,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA,CAAA;AAvBF,IAAA,IAAA,CAAA,WAAA,GAAc,CAAC,KAAO,EAAA,SAAA,CAAA,CAAA;AACtB,IAAA,IAAA,CAAA,YAAA,GAAe,CAAC,QAAA,EAAU,MAAQ,EAAA,QAAA,EAAU,MAAQ,EAAA,SAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAyBrD,uBAAuB,OAAuC,EAAA;AACnE,IAAA,OAAA,CAAQ,WAAc,GAAA;AAAA,MAEpB,WAAA,EAAa,MAAM,IAAK,CAAA,WAAA,CAAA;AAAA,MACxB,YAAA,EAAc,MAAM,IAAK,CAAA,YAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAKtB,gBAAA,CAAiB,GAA6B,EAAA,UAAA,GAAa,EAAuB,EAAA;AACvF,IAAA,IAAA,CAAK,eAAe,qBAAuB,EAAA,GAAA,CAAA,CAAA;AAC3C,IAAI,GAAA,CAAA,sBAAA,GAAyB,CAAC,OAAA,EAAiC,OAA0B,KAAA;AACvF,MAAQ,OAAA,CAAA,kBAAA,GAAqB,QAAQ,kBAAsB,IAAA,EAAA,CAAA;AAC3D,MAAM,MAAA,YAAA,GAAe,OAAQ,CAAA,kBAAA,CAAmB,OAAQ,CAAA,OAAA,CAAA,CAAA;AACxD,MAAA,IAAI,iBAAiB,CAAI,CAAA,EAAA;AACvB,QAAA,OAAA,CAAQ,mBAAmB,IAAK,CAAA,OAAA,CAAA,CAAA;AAAA,OAC3B,MAAA;AACL,QAAQ,OAAA,CAAA,kBAAA,CAAmB,OAAO,YAAc,EAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIpD,IAAA,GAAA,CAAI,qBAAqB,CAAC,OAAA,EAAiC,OACzD,KAAA,OAAA,CAAQ,mBAAmB,QAAS,CAAA,OAAA,CAAA,CAAA;AAEtC,IAAI,GAAA,CAAA,gBAAA,GAAmB,CAAC,OAAA,EAAiC,QAAwC,KAAA;AAE/F,MAAA,IAAI,QAAS,CAAA,GAAA,KAAQ,EAAM,IAAA,QAAA,CAAS,QAAQ,QAAU,EAAA;AACpD,QAAA,OAAA,CAAQ,qBAAsB,CAAQ,OAAA,CAAA,kBAAA,IAAsB,IAAI,MAAO,CAAA,CAAC,MAAM,CAAM,KAAA,mBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIxF,IAAI,GAAA,CAAA,kBAAA,GAAqB,CAAC,OAA6C,KAAA;AACrE,MAAA,OACE,GAAI,CAAA,OAAA,EAAS,8BACb,CAAA,IAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,OAAA,CAAQ,IAAK,CAAA,CAAC,MAAW,KAAA,MAAA,CAAO,IAAS,KAAA,OAAA,CAAQ,UAAU,MAAO,CAAA,UAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAInG,IAAM,MAAA,YAAA,GAAe,IAAI,gBAAmB,GAAA,CAAC,KAAK,eAAgB,CAAA,GAAA,CAAI,iBAAiB,OAAY,CAAA,CAAA,GAAA,EAAA,CAAA;AAEnG,IAAA,IAAI,UAAY,EAAA;AACd,MAAA,YAAA,CAAa,IAAK,CAAA,UAAA,CAAA,CAAA;AAAA,KAAA;AAGpB,IAAI,IAAA,aAAA,CAAA;AACJ,IAAA,IAAI,aAAa,MAAQ,EAAA;AACvB,MAAgB,aAAA,GAAA,IAAA,CAAK,GAClB,GACC,CAAA,YAAA,CAAa,IAAI,CAAC,CAAA,KAChB,kBAAkB,UAAW,CAAA;AAAA,QAC3B,QAAU,EAAA,gBAAA;AAAA,QACV,KAAO,EAAA,EAAA;AAAA,QACP,CAAA;AAAA,OAIL,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,CAAC,QAAA,KAAa,OAAQ,CAAA,QAAA,CAAA,CAAA,CAAA;AAAA,KACzB,MAAA;AACL,MAAgB,aAAA,GAAA,IAAA,CAAK,GAAG,IAAK,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAG/B,IAAO,OAAA,IAAA,CAAK,GACT,GAAI,CAAA;AAAA,MACH,yBAAA,EAA2B,eAAe,4BAA6B,CAAA,KAAA,CAAA;AAAA,MACvE,aAAA,EAAe,IAAK,CAAA,kBAAA,CAAmB,iBAAkB,CAAA,KAAA,CAAA;AAAA,MACzD,OAAA,EAAS,aAAa,qBAAsB,CAAA,KAAA,CAAA;AAAA,MAC5C,QAAA,EAAU,IAAK,CAAA,aAAA,CAAc,SAAU,CAAA,KAAA,CAAA;AAAA,MACvC,WAAA,EAAa,KAAK,gBAAiB,CAAA,YAAA,EAAA;AAAA,MACnC,yBAAyB,IAAK,CAAA,gBAAA,CAAiB,gBAAiB,CAAA,GAAA,CAAI,aAAa,GAAI,CAAA,MAAA,CAAA;AAAA,MACrF,YAAA,EAAc,KAAK,iBAAkB,CAAA,gBAAA,EAAA;AAAA,MACrC,cAAA,EAAgB,KAAK,mBAAoB,CAAA,oBAAA,EAAA;AAAA,MACzC,WAAa,EAAA,IAAA,CAAK,EAAG,CAAA,IAAA,CAAK,MAAM,IAAK,CAAA,WAAA,CAAA,CAAA;AAAA,MACrC,YAAc,EAAA,IAAA,CAAK,EAAG,CAAA,IAAA,CAAK,MAAM,IAAK,CAAA,YAAA,CAAA,CAAA;AAAA,MACtC,OAAA,EAAS,KAAK,YAAa,CAAA,WAAA,EAAA;AAAA,MAC3B,4BAA4B,sBAAuB,CAAA,8BAAA,EAAA;AAAA,MACnD,MAAQ,EAAA,aAAA;AAAA,KAET,CAAA,CAAA,IAAA,CAAK,CAAC,WAA4D,KAAA;AACjE,MAAY,WAAA,CAAA,QAAA,GAAW,KAAK,WAAY,CAAA,yBAAA,CAAA,CAAA;AACxC,MAAA,WAAA,CAAY,QAAW,GAAA,EAAA,CAAA;AAEvB,MAAI,IAAA,GAAA,CAAI,UAAU,aAAe,EAAA;AAC/B,QAAA,WAAA,CAAY,MAAS,GAAA,WAAA,CAAY,MAAO,CAAA,MAAA,CAAO,IAAI,SAAU,CAAA,aAAA,CAAA,CAAA;AAAA,OAAA;AAE/D,MAAA,GAAA,CAAI,WAAc,GAAA,WAAA,CAAA;AAClB,MAAA,IAAA,CAAK,cAAe,CAAA,GAAA,CAAA,CAAA;AACpB,MAAA,IAAA,CAAK,0BAA2B,CAAA,GAAA,CAAA,CAAA;AAChC,MAAA,IAAA,CAAK,6BAA8B,CAAA,GAAA,CAAA,CAAA;AACnC,MAAA,IAAA,CAAK,gCAAiC,CAAA,GAAA,CAAA,CAAA;AACtC,MAAA,IAAA,CAAK,6BAA8B,CAAA,GAAA,CAAA,CAAA;AACnC,MAAA,IAAA,CAAK,0BAA2B,CAAA,GAAA,CAAA,CAAA;AAChC,MAAA,IAAA,CAAK,yBAA0B,CAAA,GAAA,CAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,4CAA6C,CAAA,GAAA,CAAA,CAAA;AAClD,MAAA,IAAA,CAAK,wBAAyB,CAAA,GAAA,CAAA,CAAA;AAC9B,MAAA,IAAA,CAAK,yBAA0B,CAAA,GAAA,CAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,4BAA6B,CAAA,GAAA,CAAA,CAAA;AAClC,MAAA,IAAA,CAAK,eAAe,oBAAsB,EAAA,GAAA,CAAA,CAAA;AAC1C,MAAA,IAAA,CAAK,mBAAoB,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAIxB,2BAA2B,OAAuC,EAAA;AACvE,IAAA,IAAA,CAAK,GACF,GAAI,CAAA;AAAA,MACH,yBAAyB,IAAK,CAAA,gBAAA,CAAiB,gBAAiB,CAAA,OAAA,CAAQ,aAAa,OAAQ,CAAA,MAAA,CAAA;AAAA,KAE9F,CAAA,CAAA,IAAA,CAAK,CAAC,MAAuD,KAAA;AAC5D,MAAQ,OAAA,CAAA,WAAA,CAAY,uBAA0B,GAAA,KAAA,CAAM,MAAO,CAAA,uBAAA,CAAA,CACxD,IAAI,CAAC,OAAA,KAAY,IAAK,CAAA,0BAAA,CAA2B,OACjD,CAAA,CAAA,CAAA,KAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGP,IAAA,IAAI,QAAQ,cAAkB,IAAA,IAAA,IAAQ,OAAQ,CAAA,cAAA,CAAe,SAAS,CAAG,EAAA;AACvE,MAAA,IAAA,CAAK,mCAAoC,CAAA,OAAA,CAAA,CAAA;AAAA,KACpC,MAAA;AACL,MAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,0BAA6B,GAAA,EAAA,CAAA;AAC1D,MAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,+BAAkC,GAAA,EAAA,CAAA;AAAA,KAAA;AAEjE,IAAA,IAAA,CAAK,2BAA4B,CAAA,OAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAG5B,oCAAoC,OAAuC,EAAA;AAChF,IAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,0BAAA,GAA6B,MAAM,OAAQ,CAAA,WAAA,CAAY,yBACjF,MAAO,CAAA;AAAA,MACN,aAAa,OAAQ,CAAA,cAAA;AAAA,KAAA,CAAA,CAEtB,GAAI,CAAA,CAAC,YAAiB,KAAA,YAAA,CAAa,mBACnC,WACA,EAAA,CAAA,KAAA,EAAA,CAAA;AAEH,IAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,+BAAA,GAAkC,MAAM,OAAQ,CAAA,WAAA,CAAY,yBACtF,MAAO,CAAA;AAAA,MACN,aAAa,OAAQ,CAAA,cAAA;AAAA,KAAA,CAAA,CAEtB,GAAI,CAAA,CAAC,YAAiB,KAAA,YAAA,CAAa,iCACnC,WACA,EAAA,CAAA,KAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGE,2BAA2B,gBAA4E,EAAA;AAC5G,IAAO,OAAA;AAAA,MACL,mBAAmB,gBAAiB,CAAA,iBAAA;AAAA,MACpC,aAAa,gBAAiB,CAAA,WAAA;AAAA,MAC9B,iCAAiC,gBAAiB,CAAA,+BAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAI/C,cAAA,CAAe,OAAe,OAAuC,EAAA;AAC1E,IAAA,IAAA,CAAK,0BAA2B,CAAA,mBAAA,CAAoB,KAAO,CAAA,CAAA,OAAA,CAAQ,CAAC,QAAkB,KAAA;AACpF,MAAA,IAAI,SAAS,KAAQ,CAAA,EAAA;AACnB,QAAA,QAAA,CAAS,KAAO,CAAA,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAKf,gBAAgB,OAAyB,EAAA;AAC9C,IAAO,OAAA,OAAA,CAAQ,MAAM,GAAK,CAAA,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGrB,aAAa,KAAgC,EAAA;AAClD,IAAA,IAAI,MAAM,WAAa,EAAA;AACrB,MAAA,OAAO,GAAG,KAAM,CAAA,eAAA,CAAA,CAAA,CAAA;AAAA,KAAA,MAAA,IACP,KAAM,CAAA,WAAA,IAAe,CAAC,KAAA,CAAM,GAAK,EAAA;AAC1C,MAAO,OAAA,CAAA,EAAG,KAAM,CAAA,QAAA,CAAA,CAAA,EAAY,KAAM,CAAA,UAAA,CAAA,0BAAA,CAAA,CAAA;AAAA,KAC7B,MAAA;AACL,MAAA,OAAO,CAAG,EAAA,KAAA,CAAM,QAAY,CAAA,CAAA,EAAA,KAAA,CAAM,cAAc,KAAM,CAAA,GAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAInD,SAAS,KAAyC,EAAA;AACvD,IAAI,IAAA,KAAA,CAAM,YAAY,KAAW,CAAA,EAAA;AAC/B,MAAO,OAAA,KAAA,CAAA;AAAA,KAAA;AAGT,IAAO,OAAA;AAAA,MACL,YAAY,KAAM,CAAA,UAAA;AAAA,MAClB,KAAK,KAAM,CAAA,GAAA;AAAA,MACX,OAAA,EAAS,KAAK,YAAa,CAAA,KAAA,CAAA;AAAA,MAC3B,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,iBAAiB,KAAM,CAAA,eAAA;AAAA,MACvB,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,SAAS,KAAM,CAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAIZ,yBAAyB,OAAuC,EAAA;AAErE,IAAQ,OAAA,CAAA,WAAA,CAAY,QAAS,CAAA,MAAA,GAAS,OAAQ,CAAA,WAAA,CAAY,OAAO,GAAI,CAAA,CAAC,KAAU,KAAA,IAAA,CAAK,QAAS,CAAA,KAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGzF,2BAA2B,OAAuC,EAAA;AACvE,IAAA,OAAA,CAAQ,WAAY,CAAA,QAAA,CAAS,iBAAoB,GAAA,IAAA,CAC/C,OAAQ,CAAA,WAAA,CAAY,yBAA0B,CAAA,OAAA,CAAQ,WAAa,CAAA,CAAA,OAAA,EACnE,EAAE,IAAA,EAAM,QAAQ,MAChB,EAAA,CAAA,CAAA,iBAAA,CAAA;AACF,IAAQ,OAAA,CAAA,iBAAA,GAAoB,OAAQ,CAAA,WAAA,CAAY,QAAS,CAAA,iBAAA,CAAA;AAAA,GAAA;AAAA,EAGpD,iCAAiC,OAAuC,EAAA;AAC7E,IAAI,IAAA,OAAA,CAAQ,cAAc,IAAS,KAAA,OAAA,CAAQ,eAAe,IAAQ,IAAA,OAAA,CAAQ,WAAY,CAAA,MAAA,IAAU,CAAI,CAAA,EAAA;AAClG,MAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,cAAiB,GAAA,EAAA,CAAA;AAC9C,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,KAAQ,GAAA,KAAA,CAAM,OAAQ,CAAA,WAAA,CAAY,SACrC,MAAO,CAAA;AAAA,MACN,SAAS,OAAQ,CAAA,WAAA;AAAA,MACjB,QAAQ,OAAQ,CAAA,MAAA;AAAA,MAChB,SAAS,OAAQ,CAAA,WAAA,GAAc,OAAQ,CAAA,WAAA,CAAY,KAAK,OAAQ,CAAA,UAAA;AAAA,KAAA,CAAA,CAEjE,OACA,EAAA,CAAA,MAAA,CAAO,SACP,CAAA,CAAA,GAAA,CAAI,SACJ,KAAQ,EAAA,CAAA,CAAA,CAAA,CAAA;AAEX,IAAA,IACE,QAAQ,WAAY,CAAA,cAAA,CAAe,QAAQ,WAC3C,CAAA,IAAA,OAAA,CAAQ,YAAY,cAAe,CAAA,OAAA,CAAQ,WAAa,CAAA,CAAA,KAAA,CAAA,IACxD,QAAQ,WAAY,CAAA,cAAA,CAAe,QAAQ,WAAa,CAAA,CAAA,KAAA,CAAA,CAAO,QAAQ,MACvE,CAAA,EAAA;AACA,MAAA,MAAM,oBAAoB,OAAQ,CAAA,WAAA,CAAY,eAAe,OAAQ,CAAA,WAAA,CAAA,CAAa,OAAO,OAAQ,CAAA,MAAA,CAAA,CAAA;AACjG,MAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,kBAAqB,GAAA,KAAA,CAAM,mBACrD,MAAO,CAAA,EAAE,KACT,EAAA,CAAA,CAAA,GAAA,CAAI,MACJ,CAAA,CAAA,KAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAIA,8BAA8B,OAAuC,EAAA;AAC1E,IAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,WAAA,GAAc,MAAM,OAAQ,CAAA,WAAA,CAAY,SAClE,MAAO,CAAA;AAAA,MACN,SAAS,OAAQ,CAAA,WAAA;AAAA,MACjB,QAAQ,OAAQ,CAAA,MAAA;AAAA,KAAA,CAAA,CAEjB,UACA,MAAO,CAAA,SAAA,CAAA,CACP,KACA,EAAA,CAAA,MAAA,CAAO,SAAU,CAAY,EAAA;AAC5B,MAAA,OAAO,CAAE,CAAA,OAAA,IAAW,CAAE,CAAA,OAAA,CAAQ,MAAS,GAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAItC,8BAA8B,OAAuC,EAAA;AAC1E,IAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,WAAA,GAAc,MAAM,OAAQ,CAAA,WAAA,CAAY,aAClE,MAAO,CAAA;AAAA,MACN,SAAS,OAAQ,CAAA,WAAA;AAAA,MACjB,QAAQ,OAAQ,CAAA,MAAA;AAAA,KAAA,CAAA,CAEjB,IAAI,MACJ,CAAA,CAAA,KAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGE,0BAA0B,OAAuC,EAAA;AACtE,IAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,OAAA,GAAU,MAAM,OAAQ,CAAA,WAAA,CAAY,SAC9D,MAAO,CAAA;AAAA,MACN,SAAS,OAAQ,CAAA,WAAA;AAAA,MACjB,QAAQ,OAAQ,CAAA,MAAA;AAAA,KAAA,CAAA,CAEjB,IAAI,MACJ,CAAA,CAAA,KAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGE,gCAAgC,QAAuD,EAAA;AAC5F,IAAO,OAAA,CAAA,EAAG,QAAS,CAAA,IAAA,CAAA,EAAA,EAAS,QAAS,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGhC,mBAAmB,QAAoF,EAAA;AAC5G,IAAO,OAAA;AAAA,MACL,SAAS,QAAS,CAAA,OAAA;AAAA,MAClB,QAAQ,QAAS,CAAA,MAAA;AAAA,MACjB,MAAM,QAAS,CAAA,IAAA;AAAA,MACf,IAAI,QAAS,CAAA,EAAA;AAAA,MACb,KAAK,QAAS,CAAA,GAAA;AAAA,MACd,WAAA,EAAa,KAAK,+BAAgC,CAAA,QAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAI/C,6CAA6C,OAAuC,EAAA;AACzF,IAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,0BAAA,GAA6B,MAAM,OAAQ,CAAA,WAAA,CAAY,4BACjF,MAAO,CAAA;AAAA,MACN,SAAS,OAAQ,CAAA,WAAA;AAAA,MACjB,QAAQ,OAAQ,CAAA,MAAA;AAAA,KAAA,CAAA,CAEjB,GAAI,CAAA,CAAC,QAAa,KAAA,IAAA,CAAK,mBAAmB,QAC1C,CAAA,CAAA,CAAA,KAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGE,0BAA0B,OAAuC,EAAA;AACtE,IAAA,MAAM,oBACJ,OAAQ,CAAA,WAAA,CAAY,0BAA0B,OAAQ,CAAA,WAAA,CAAA,IAAiB,EAAE,OAAS,EAAA,EAAA,EAAA,CAAA;AACpF,IAAQ,OAAA,CAAA,WAAA,CAAY,QAAS,CAAA,OAAA,GAAU,iBAAkB,CAAA,OAAA,CAAA;AAAA,GAAA;AAAA,EAGpD,2BAA2B,OAAuC,EAAA;AACvE,IAAA,OAAA,CAAQ,WAAY,CAAA,QAAA,CAAS,QAAW,GAAA,KAAA,CAAM,OAAQ,CAAA,WAAA,CAAY,QAC/D,CAAA,CAAA,MAAA,CAAO,EAAE,WAAA,EAAa,OAAQ,CAAA,WAAA,EAAA,CAAA,CAC9B,IAAI,MACJ,CAAA,CAAA,KAAA,EAAA,CAAA;AACH,IAAA,IAAI,OAAQ,CAAA,WAAA,CAAY,QAAS,CAAA,QAAA,CAAS,SAAS,CAAG,EAAA;AACpD,MAAA,OAAA,CAAQ,WAAY,CAAA,QAAA,CAAS,QAAS,CAAA,MAAA,CAAO,GAAG,CAAG,EAAA,oBAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAIhD,wBAAwB,OAA4D,EAAA;AACzF,IAAM,MAAA,MAAA,GAAuC,EAAE,KAAO,EAAA,EAAA,EAAA,CAAA;AACtD,IAAM,MAAA,YAAA,GAAe,QAAQ,WAAY,CAAA,QAAA,CAAA;AACzC,IAAI,IAAA,OAAA,CAAQ,WAAW,IAAM,EAAA;AAC3B,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAET,IAAa,YAAA,CAAA,cAAA,GAAiB,MAAM,OAAQ,CAAA,WAAA,CAAY,SACrD,MAAO,CAAA,EAAE,OAAS,EAAA,OAAA,CAAQ,WAAa,EAAA,MAAA,EAAQ,QAAQ,MACvD,EAAA,CAAA,CAAA,MAAA,CAAO,EAAE,MAAQ,EAAA,KAAA,EAAA,CAAA,CACjB,OAAO,EAAE,OAAA,EAAS,IAClB,EAAA,CAAA,CAAA,MAAA,CAAO,SACP,CAAA,CAAA,KAAA,EAAA,CAAA;AAEH,IAAA,IAAI,QAAQ,WAAa,EAAA;AACvB,MAAA,MAAA,CAAO,KAAM,CAAA,UAAA,GAAa,CAAC,OAAA,CAAQ,YAAY,KAAM,CAAA,CAAC,UACpD,KAAA,KAAA,CAAM,YAAa,CAAA,cAAA,CAAA,CAAgB,IAAK,CAAA,EAAE,SAAS,UAAc,EAAA,CAAA,CAAA,KAAA,EAAA,CAAA,CAAA;AAAA,KAE1D,MAAA,IAAA,CAAC,MAAM,YAAa,CAAA,cAAA,CAAA,CAAgB,KAAK,EAAE,OAAA,EAAS,OAAQ,CAAA,UAAA,EAAA,CAAA,CAAc,KAAS,EAAA,EAAA;AAC5F,MAAA,MAAA,CAAO,MAAM,UAAa,GAAA,IAAA,CAAA;AAAA,KAAA;AAG5B,IAAI,IAAA,MAAA,CAAO,MAAM,UAAY,EAAA;AAC3B,MAAA,OAAA,CAAQ,WAAc,GAAA,IAAA,CAAA;AACtB,MAAA,OAAA,CAAQ,UAAa,GAAA,IAAA,CAAA;AAAA,KAAA;AAGvB,IAAO,OAAA,MAAA,CAAA;AAAA,GAAA;AAAA,EAGD,mBAAmB,OAAwD,EAAA;AACjF,IAAO,OAAA,KAAA,CAAM,QAAQ,WAAY,CAAA,aAAA,CAAA,CAC9B,IAAI,UACJ,CAAA,CAAA,WAAA,EAAA,CACA,MAAO,CAAA,EAAE,IAAM,EAAA,OAAA,CAAQ,eACvB,GAAI,CAAA,SAAA,CAAA,CACJ,cACA,MAAO,CAAA,EAAE,MAAM,OAAQ,CAAA,MAAA,EAAA,CAAA,CACvB,GAAyB,CAAA,eAAA,CAAA,CACzB,WACA,EAAA,CAAA,KAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGE,qBAAqB,OAA2C,EAAA;AACrE,IAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,kBAAmB,CAAA,OAAA,CAAA,CAAS,OACrD,CAAC,EAAA,KAAQ,CAAC,CAAA,EAAA,CAAG,oBAAoB,EAAG,CAAA,gBAAA,KAAqB,SAAc,KAAA,EAAA,CAAG,UAAU,OAAQ,CAAA,KAAA,CAAA,CAAA;AAE9F,IAAA,OAAO,aAAc,CAAA,GAAA,CAAI,CAAC,EAAA,KAAO,GAAG,IAAM,CAAA,CAAA,IAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGrC,wBAAwB,OAA2C,EAAA;AACxE,IAAA,MAAM,mBAAsB,GAAA,IAAA,CAAK,kBAAmB,CAAA,OAAA,CAAA,CAAS,MAC3D,CAAA,CAAC,EAAQ,KAAA,CAAA,CAAC,EAAG,CAAA,gBAAA,IAAoB,EAAG,CAAA,gBAAA,KAAqB,cAAc,EAAG,CAAA,KAAA,CAAA,CAAA;AAE5E,IAAA,OAAO,mBAAoB,CAAA,GAAA,CAAI,CAAC,EAAA,KAAO,GAAG,IAAM,CAAA,CAAA,IAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAG3C,oBAAoB,OAA2C,EAAA;AACpE,IAAM,MAAA,eAAA,GAAkB,KAAK,kBAAmB,CAAA,OAAA,CAAA,CAAS,OAAO,CAAC,EAAA,KAAO,GAAG,gBAAqB,KAAA,SAAA,CAAA,CAAA;AAChG,IAAA,MAAM,kBAAkB,OAAQ,CAAA,eAAA,CAAgB,GAAc,CAAA,CAAC,OAAO,EAAG,CAAA,YAAA,CAAA,CAAA,CAAA;AACzE,IAAA,OAAO,eAAgB,CAAA,IAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAGlB,6BAA6B,OAA4D,EAAA;AAC9F,IAAM,MAAA,MAAA,GAAuC,EAAE,KAAO,EAAA,EAAA,EAAA,CAAA;AACtD,IAAA,MAAM,uBAAwB,CAAQ,OAAA,CAAA,aAAA,IAAiB,EAAI,EAAA,MAAA,CAAO,QAAQ,gBAAoB,IAAA,EAAA,CAAA,CAAA;AAC9F,IAAM,MAAA,gBAAA,GAAmB,KAAK,oBAAqB,CAAA,OAAA,CAAA,CAAA;AACnD,IAAM,MAAA,gBAAA,GAAmB,KAAK,uBAAwB,CAAA,OAAA,CAAA,CAAA;AACtD,IAAM,MAAA,eAAA,GAAkB,KAAK,mBAAoB,CAAA,OAAA,CAAA,CAAA;AACjD,IAAA,MAAM,sBAAsB,OAAQ,CAAA,mBAAA,CAAoB,GAAI,CAAA,CAAC,OAAO,EAAG,CAAA,WAAA,CAAA,CAAA;AACvE,IAAI,IAAA,oBAAA,IAAwB,QAAQ,aAAe,EAAA;AACjD,MAAA,MAAM,KAAQ,GAAA,OAAA,CAAQ,KAAQ,GAAA,gBAAA,GAAmB,iBAAiB,MAAO,CAAA,gBAAA,CAAA,CAAA;AACzE,MAAM,MAAA,OAAA,GAAU,aAAa,KAAO,EAAA,oBAAA,CAAA,CAAA;AACpC,MAAM,MAAA,oBAAA,GAAuB,IAAI,OAAS,EAAA,oBAAA,CAAA,CAAA;AAC1C,MAAQ,OAAA,CAAA,aAAA,GAAgB,aAAa,gBAAkB,EAAA,OAAA,CAAA,CAAA;AACvD,MAAI,IAAA,CAAC,QAAQ,KAAO,EAAA;AAClB,QAAQ,OAAA,CAAA,gBAAA,GAAmB,aAAa,gBAAkB,EAAA,OAAA,CAAA,CAAA;AAAA,OACrD,MAAA;AACL,QAAA,OAAO,OAAQ,CAAA,gBAAA,CAAA;AAAA,OAAA;AAEjB,MAAA,IAAI,qBAAqB,MAAQ,EAAA;AAC/B,QAAA,MAAA,CAAO,MAAM,aAAgB,GAAA,oBAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAIjC,IAAA,IAAI,mBAAqB,EAAA;AACvB,MAAM,MAAA,OAAA,GAAU,aAAa,eAAiB,EAAA,mBAAA,CAAA,CAAA;AAC9C,MAAM,MAAA,mBAAA,GAAsB,IAAI,OAAS,EAAA,mBAAA,CAAA,CAAA;AACzC,MAAI,IAAA,mBAAA,IAAuB,mBAAoB,CAAA,MAAA,GAAS,CAAG,EAAA;AACzD,QAAQ,OAAA,CAAA,SAAA,CAAU,MAAM,YAAe,GAAA,mBAAA,CAAA;AAAA,OAAA,MAAA,IAC9B,QAAQ,SAAU,CAAA,KAAA,IAAS,OAAQ,CAAA,SAAA,CAAU,MAAM,YAAc,EAAA;AAC1E,QAAQ,OAAA,CAAA,SAAA,CAAU,MAAM,YAAe,GAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAI3C,IAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,aAAgB,GAAA,gBAAA,CAAA;AAC7C,IAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,gBAAmB,GAAA,gBAAA,CAAA;AAChD,IAAQ,OAAA,CAAA,WAAA,CAAY,SAAS,YAAe,GAAA,eAAA,CAAA;AAC5C,IAAO,OAAA,MAAA,CAAA;AAAA,GAAA;AAAA,EAGF,oBAAA,CAAqB,SAAiC,0BAAsC,EAAA;AACjG,IAAA,OAAO,KAAK,kBAAmB,CAAA,iBAAA,CAAkB,KAAO,CAAA,CAAA,IAAA,CAAK,CAAC,aAAkB,KAAA;AAC9E,MAAA,OAAA,CAAQ,YAAY,aAAgB,GAAA,aAAA,CAAA;AACpC,MAAA,IAAI,CAAC,0BAA4B,EAAA;AAC/B,QAAA,IAAA,CAAK,4BAA6B,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAKjC,eAAe,OAA+D,EAAA;AACnF,IAAM,MAAA,MAAA,GAAuC,EAAE,KAAO,EAAA,EAAA,EAAA,CAAA;AACtD,IAAI,IAAA,OAAA,CAAQ,cAAc,IAAS,KAAA,OAAA,CAAQ,eAAe,IAAQ,IAAA,OAAA,CAAQ,WAAY,CAAA,MAAA,IAAU,CAAI,CAAA,EAAA;AAClG,MAAA,OAAA,CAAQ,KAAQ,GAAA,IAAA,CAAA;AAChB,MAAA,MAAA,CAAO,MAAM,KAAQ,GAAA,IAAA,CAAA;AAAA,KAAA,MAAA,IACZ,QAAQ,WAAe,IAAA,IAAA,IAAQ,OAAQ,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AACxE,MAAQ,OAAA,CAAA,WAAA,CAAY,OAAQ,CAAA,SAAU,UAAY,EAAA;AAChD,QAAA,MAAM,MAAS,GAAA,IAAA,CAAc,OAAQ,CAAA,WAAA,CAAY,OAAS,EAAA;AAAA,UACxD,OAAS,EAAA,UAAA;AAAA,UACT,SAAS,OAAQ,CAAA,WAAA;AAAA,UACjB,QAAQ,OAAQ,CAAA,MAAA;AAAA,SAAA,CAAA,CAAA;AAElB,QAAQ,OAAA,CAAA,KAAA,GAAQ,MAAS,GAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAErC,MAAA;AACL,MAAA,MAAM,MAAS,GAAA,IAAA,CAAc,OAAQ,CAAA,WAAA,CAAY,OAAS,EAAA;AAAA,QACxD,SAAS,OAAQ,CAAA,UAAA;AAAA,QACjB,SAAS,OAAQ,CAAA,WAAA;AAAA,QACjB,QAAQ,OAAQ,CAAA,MAAA;AAAA,OAAA,CAAA,CAAA;AAElB,MAAQ,OAAA,CAAA,KAAA,GAAQ,MAAS,GAAA,MAAA,CAAO,KAAQ,GAAA,IAAA,CAAA;AAAA,KAAA;AAE1C,IAAO,OAAA,MAAA,CAAA;AAAA,GAAA;AAAA,EAGF,4BAA4B,OAAuC,EAAA;AACxE,IAAA,IAAI,QAAQ,wBAA0B,EAAA;AACpC,MAAM,MAAA,gCAAA,GAAmC,OAAQ,CAAA,WAAA,CAAY,QAAS,CAAA,0BAAA,CAAA;AACtE,MAAA,MAAM,2BAA2B,OAAQ,CAAA,wBAAA,CAAyB,GAAI,CAAA,CAAC,OAAO,EAAG,CAAA,gBAAA,CAAA,CAAA;AACjF,MAAM,MAAA,8BAAA,GAAiC,aAAa,gCAAkC,EAAA,wBAAA,CAAA,CAAA;AACtF,MAAM,MAAA,8BAAA,GAAiC,IAAI,8BAAgC,EAAA,wBAAA,CAAA,CAAA;AAE3E,MAAI,IAAA,8BAAA,IAAkC,8BAA+B,CAAA,MAAA,GAAS,CAAG,EAAA;AAC/E,QAAQ,OAAA,CAAA,SAAA,CAAU,MAAM,uBAA0B,GAAA,8BAAA,CAAA;AAAA,OAAA,MAAA,IACzC,QAAQ,SAAU,CAAA,KAAA,IAAS,OAAQ,CAAA,SAAA,CAAU,MAAM,uBAAyB,EAAA;AACrF,QAAQ,OAAA,CAAA,SAAA,CAAU,MAAM,uBAA0B,GAAA,EAAA,CAAA;AAAA,OAAA;AAGpD,MAAA,IAAI,QAAQ,2BAA6B,EAAA;AACvC,QAAM,MAAA,gCAAA,GAAmC,QAAQ,WAAY,CAAA,QAAA,CAAS,gCAAgC,GACpG,CAAA,CAAC,OAAO,EAAG,CAAA,gBAAA,CAAA,CAAA;AAEb,QAAM,MAAA,+BAAA,GAAkC,aACtC,gCACA,EAAA,wBAAA,CAAA,CAAA;AAEF,QAAM,MAAA,+BAAA,GAAkC,IAAI,+BAAiC,EAAA,wBAAA,CAAA,CAAA;AAE7E,QAAI,IAAA,+BAAA,IAAmC,+BAAgC,CAAA,MAAA,GAAS,CAAG,EAAA;AACjF,UAAQ,OAAA,CAAA,SAAA,CAAU,MAAM,uBAA0B,GAAA,+BAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAMnD,oBAAoB,GAAmC,EAAA;AAC5D,IAAI,GAAA,CAAA,aAAA,GAAgB,CAAC,OAA+D,KAAA;AAClF,MAAM,MAAA,MAAA,GAAS,KAAK,cAAe,CAAA,OAAA,CAAA,CAAA;AACnC,MAAA,MAAA,CAAO,MAAO,CAAA,KAAA,EAAO,IAAK,CAAA,4BAAA,CAA6B,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAChE,MAAA,OAAA,CAAQ,SAAU,CAAA,KAAA,GAAQ,OAAQ,CAAA,SAAA,CAAU,KAAS,IAAA,EAAA,CAAA;AACrD,MAAO,MAAA,CAAA,OAAA,CAAQ,SAAU,CAAA,KAAA,EAAO,MAAO,CAAA,KAAA,CAAA,CAAA;AACvC,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAI,GAAA,CAAA,aAAA,GAAgB,CAAC,OAA+D,KAAA;AAClF,MAAM,MAAA,MAAA,GAAuC,EAAE,KAAO,EAAA,EAAA,EAAA,CAAA;AACtD,MAAA,MAAA,CAAO,MAAO,CAAA,KAAA,EAAO,IAAK,CAAA,uBAAA,CAAwB,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAC3D,MAAA,IAAI,QAAQ,MAAQ,EAAA;AAClB,QAAA,MAAA,CAAO,MAAO,CAAA,KAAA,EAAO,OAAQ,CAAA,aAAA,CAAc,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AACpD,QAAA,IAAA,CAAK,0BAA2B,CAAA,OAAA,CAAA,CAAA;AAChC,QAAA,IAAA,CAAK,6BAA8B,CAAA,OAAA,CAAA,CAAA;AACnC,QAAA,IAAA,CAAK,6BAA8B,CAAA,OAAA,CAAA,CAAA;AACnC,QAAA,IAAA,CAAK,gCAAiC,CAAA,OAAA,CAAA,CAAA;AACtC,QAAA,IAAA,CAAK,yBAA0B,CAAA,OAAA,CAAA,CAAA;AAC/B,QAAA,IAAA,CAAK,4CAA6C,CAAA,OAAA,CAAA,CAAA;AAClD,QAAA,IAAA,CAAK,0BAA2B,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA;AAGlC,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAI,GAAA,CAAA,iBAAA,GAAoB,CAAC,OAA+D,KAAA;AACtF,MAAM,MAAA,MAAA,GAAuC,EAAE,KAAO,EAAA,EAAA,EAAA,CAAA;AACtD,MAAA,IAAA,CAAK,gCAAiC,CAAA,OAAA,CAAA,CAAA;AACtC,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAI,GAAA,CAAA,cAAA,GAAiB,CAAC,OAA0C,KAAA;AAC9D,MAAA,OAAA,CAAQ,UAAU,SAAU,CAAA,UAAA,CAAW,QAAQ,WAAa,EAAA,OAAA,CAAQ,OAAO,OAAQ,CAAA,eAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGrF,IAAI,GAAA,CAAA,kBAAA,GAAqB,CAAC,OAA+D,KAAA;AACvF,MAAM,MAAA,MAAA,GAAuC,EAAE,KAAO,EAAA,EAAA,EAAA,CAAA;AACtD,MAAA,MAAM,cAAc,OAAQ,CAAA,WAAA,CAAA;AAC5B,MAAA,IAAI,QAAQ,WAAa,EAAA;AACvB,QAAA,IAAA,CAAK,0BAA2B,CAAA,OAAA,CAAA,CAAA;AAChC,QAAA,IAAA,CAAK,6BAA8B,CAAA,OAAA,CAAA,CAAA;AACnC,QAAA,IAAA,CAAK,6BAA8B,CAAA,OAAA,CAAA,CAAA;AACnC,QAAA,IAAA,CAAK,gCAAiC,CAAA,OAAA,CAAA,CAAA;AACtC,QAAA,IAAA,CAAK,yBAA0B,CAAA,OAAA,CAAA,CAAA;AAC/B,QAAA,IAAA,CAAK,4CAA6C,CAAA,OAAA,CAAA,CAAA;AAClD,QAAA,IAAA,CAAK,yBAA0B,CAAA,OAAA,CAAA,CAAA;AAC/B,QAAA,IAAA,CAAK,0BAA2B,CAAA,OAAA,CAAA,CAAA;AAEhC,QAAI,IAAA,CAAC,KAAK,WAAY,CAAA,QAAA,CAAS,SAAS,EAAE,IAAA,EAAM,QAAQ,MAAW,EAAA,CAAA,EAAA;AACjE,UAAA,OAAA,CAAQ,MAAS,GAAA,IAAA,CAAA;AACjB,UAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AAAA,SACjB,MAAA;AACL,UAAA,MAAA,CAAO,MAAO,CAAA,KAAA,EAAO,OAAQ,CAAA,aAAA,CAAc,OAAS,CAAA,CAAA,KAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAEjD,MAAA;AACL,QAAA,OAAA,CAAQ,MAAS,GAAA,IAAA,CAAA;AAAA,OAAA;AAEnB,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAI,GAAA,CAAA,4BAAA,GAA+B,CAAC,OAA+D,KAAA;AACjG,MAAM,MAAA,MAAA,GAAuC,EAAE,KAAO,EAAA,EAAA,EAAA,CAAA;AACtD,MAAA,OAAA,CAAQ,yBAA4B,GAAA,IAAA,CAAK,wBAAyB,CAAA,qBAAA,CAChE,OAAQ,CAAA,qBAAA,CAAA,CAAA;AAEV,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAA,IAAA,CAAK,eAAe,qBAAuB,EAAA,GAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAzjBxC,mCAOS,OAAU,GAAA;AAAA,EACtB,IAAA;AAAA,EACA,oBAAA;AAAA,EACA,4BAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,0BAAA;AAAA,EACA,qBAAA;AAAA,EACA,cAAA;AAAA,CAAA,CAAA;AA6iBG,MAAM,sCAAyC,GAAA,6CAAA,CAAA;AACtD,MAAA,CAAO,sCAAwC,EAAA;AAAA,EAC7C,0BAAA;AAAA,EACA,qBAAA;AAAA,EACA,yBAAA;AAAA,EACA,sCAAA;AAAA,CAAA,CAAA,CACC,QAAQ,oCAAsC,EAAA,kCAAA,CAAA;;ACjuB1C,MAAM,2DACX,GAAA,iDAAA,CAAA;AAEF,OAAA,CACG,OAAO,2DAA6D,EAAA;AAAA,EACnE,qBAAA;AAAA,EACA,sCAAA;AAAA,CAAA,CAAA,CAED,QAAQ,8BAAgC,EAAA;AAAA,EACvC,IAAA;AAAA,EACA,qBAAA;AAAA,EACA,oCAAA;AAAA,EACA,SAAU,EAAI,EAAA,mBAAA,EAAqB,kCAAoC,EAAA;AACrE,IAAA,SAAA,uBAAA,CAAiC,OAAO,cAAgB,EAAA;AACtD,MAAA,IAAI,MAAM,WAAa,EAAA;AACrB,QAAA,MAAM,gBAAgB,cAAe,CAAA,IAAA,CAAK,CAAC,UAAe,KAAA,KAAA,CAAM,YAAY,UAAW,CAAA,OAAA,CAAA,CAAA;AAEvF,QAAA,IAAI,aAAe,EAAA;AACjB,UAAA,KAAA,CAAM,UAAU,aAAc,CAAA,OAAA,CAAA;AAC9B,UAAA,KAAA,CAAM,UAAU,aAAc,CAAA,OAAA,CAAA;AAC9B,UAAA,KAAA,CAAM,aAAa,aAAc,CAAA,UAAA,CAAA;AACjC,UAAO,OAAA,KAAA,CAAA;AAAA,SACF,MAAA;AACL,UAAO,OAAA,IAAA,CAAA;AAAA,SAAA;AAAA,OAAA,MAAA,IAEA,MAAM,WAAa,EAAA;AAC5B,QAAA,MAAM,aAAgB,GAAA,cAAA,CAAe,IAAK,CAAA,CAAC,UAAe,KAAA;AACxD,UACE,OAAA,KAAA,CAAM,QAAa,KAAA,UAAA,CAAW,QAC9B,IAAA,KAAA,CAAM,eAAe,UAAW,CAAA,UAAA,IAChC,KAAM,CAAA,GAAA,KAAQ,UAAW,CAAA,GAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAI7B,QAAA,IAAI,aAAe,EAAA;AACjB,UAAO,OAAA,KAAA,CAAA;AAAA,SACF,MAAA;AACL,UAAO,OAAA,IAAA,CAAA;AAAA,SAAA;AAAA,OAEJ,MAAA;AACL,QAAO,OAAA,KAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAIX,IAA4B,SAAA,kBAAA,CAAA,OAAA,EAAS,GAAK,EAAA,OAAA,GAAU,EAAI,EAAA;AAEtD,MAAI,IAAA,OAAA,CAAQ,QAAQ,KAAQ,CAAA,EAAA;AAC1B,QAAO,OAAA,EAAA,CAAA;AAAA,OACF,MAAA;AACL,QAAA,OAAA,CAAQ,QAAQ,KAAS,CAAA,GAAA,IAAA,CAAA;AAAA,OAAA;AAE3B,MAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,MAAI,IAAA,OAAA,CAAQ,SAAS,mBAAqB,EAAA;AACxC,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,WAAa,EAAA,IAAA;AAAA,UACb,iBAAiB,OAAQ,CAAA,eAAA;AAAA,UACzB,SAAS,OAAQ,CAAA,KAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA;AAGrB,MAAQ,OAAA,CAAA,oBAAA,CAAqB,OAAQ,CAAA,SAAU,EAAI,EAAA;AACjD,QAAA,MAAM,OAAO,GAAI,CAAA,IAAA,CAAK,CAAC,KAAA,KAAU,MAAM,KAAU,KAAA,EAAA,CAAA,CAAA;AACjD,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAA,GAAS,MAAO,CAAA,MAAA,CAAO,kBAAmB,CAAA,IAAA,EAAM,GAAK,EAAA,OAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAIzD,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,iBAAA,CAA2B,QAAU,EAAA;AACnC,MAAA,MAAM,MAAS,GAAA,QAAA,CACZ,MAAO,CAAA,CAAC,OAAY,KAAA;AACnB,QAAA,OAAO,QAAQ,IAAS,KAAA,QAAA,CAAA;AAAA,OAEzB,CAAA,CAAA,GAAA,CAAI,CAAC,OAAY,KAAA;AAChB,QAAO,OAAA;AAAA,UACL,WAAa,EAAA,IAAA;AAAA,UACb,YAAY,OAAQ,CAAA,UAAA;AAAA,UACpB,SAAS,OAAQ,CAAA,OAAA;AAAA,UACjB,cAAc,OAAQ,CAAA,YAAA;AAAA,UACtB,UAAU,OAAQ,CAAA,QAAA;AAAA,UAClB,KAAK,OAAQ,CAAA,GAAA;AAAA,SAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAInB,MAAO,OAAA,MAAA,CAAA;AAAA,KAAA;AAGT,IAAA,SAAA,0BAAA,CAAoC,aAAa,QAAU,EAAA;AACzD,MAAA,QAAA,GAAW,QAAY,IAAA,EAAA,CAAA;AACvB,MAAM,MAAA,iBAAA,GAAoB,eAAe,4BAA6B,CAAA,KAAA,CAAA,CAAA;AAEtE,MAAA,MAAM,kBAAqB,GAAA,QAAA,CAAS,OAAW,IAAA,WAAA,CAAY,kBAAmB,CAAA,GAAA,CAAA;AAC9E,MAAA,MAAM,aAAgB,GAAA,QAAA,CAAS,MAAU,IAAA,WAAA,CAAY,cAAe,CAAA,GAAA,CAAA;AAEpE,MAAA,MAAM,oBAAuB,GAAA,cAAA,CAAe,uCAC1C,CAAA,KAAA,EACA,kBACA,EAAA,aAAA,CAAA,CAAA;AAGF,MAAA,OAAO,GACJ,GAAI,CAAA;AAAA,QACH,cAAgB,EAAA,oBAAA;AAAA,QAChB,yBAA2B,EAAA,iBAAA;AAAA,OAE5B,CAAA,CAAA,IAAA,CAAK,SAAU,SAAW,EAAA;AACzB,QAAA,MAAM,oBAAoB,SAAU,CAAA,cAAA,CAAA;AAEpC,QAAA,IAAI,cAAiB,GAAA,oBAAA,CAAA;AACrB,QAAiB,cAAA,GAAA,cAAA,CAAe,OAAQ,CAAA,iBAAA,EAAmB,WAAY,CAAA,IAAA,CAAA,CAAA;AAEvE,QAAA,MAAM,uBAA0B,GAAA,gCAAA,CAAA;AAEhC,QAAA,MAAM,OAAU,GAAA;AAAA,UACd,aAAa,WAAY,CAAA,IAAA;AAAA,UACzB,WAAa,EAAA,kBAAA;AAAA,UACb,MAAQ,EAAA,aAAA;AAAA,UACR,QAAU,EAAA,EAAA;AAAA,UACV,QAAU,EAAA;AAAA,YACR,GAAK,EAAA,CAAA;AAAA,YACL,GAAK,EAAA,CAAA;AAAA,YACL,OAAS,EAAA,CAAA;AAAA,WAAA;AAAA,UAEX,UAAY,EAAA,KAAA;AAAA,UACZ,eAAiB,EAAA,KAAA;AAAA,UACjB,gBAAkB,EAAA,KAAA;AAAA,UAClB,OAAS,EAAA,cAAA;AAAA,UACT,4BAA8B,EAAA,uBAAA;AAAA,UAC9B,iBAAA;AAAA,UACA,UAAY,EAAA,EAAA;AAAA,UACZ,kBAAoB,EAAA,EAAA;AAAA,UACpB,6BAA+B,EAAA,EAAA;AAAA,UAC/B,oBAAsB,EAAA,EAAA;AAAA,UACtB,qBAAuB,EAAA,EAAA;AAAA,UACvB,sBAAwB,EAAA,EAAA;AAAA,UACxB,yBAA2B,EAAA,KAAA;AAAA,UAC3B,yBAA2B,EAAA,EAAA;AAAA,UAC3B,4BAA8B,EAAA,EAAA;AAAA,UAC9B,cAAgB,EAAA,EAAA;AAAA,UAChB,WAAa,EAAA,EAAA;AAAA,UACb,mCAAqC,EAAA,IAAA;AAAA,UACrC,oBAAsB,EAAA,IAAA;AAAA,UACtB,iBAAmB,EAAA,IAAA;AAAA,UACnB,8BAAgC,EAAA,KAAA;AAAA,UAChC,SAAW,EAAA;AAAA,YACT,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,KAAO,EAAA,EAAA;AAAA,WAAA;AAAA,SAAA,CAAA;AAIX,QAAA,IACE,YAAY,UACZ,IAAA,WAAA,CAAY,WAAW,8BACvB,IAAA,WAAA,CAAY,WAAW,kBACvB,EAAA;AACA,UAAA,OAAA,CAAQ,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,SAAA;AAG5C,QAAO,OAAA,OAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAIb,IAA6C,SAAA,mCAAA,CAAA,WAAA,EAAa,eAAiB,EAAA,OAAA,EAAS,QAAU,EAAA;AAC5F,MAAM,MAAA,eAAA,GAAkB,EAAE,SAAU,CAAA,eAAA,CAAA,CAAA;AACpC,MAAA,MAAM,MAAS,GAAA,MAAA,CAAO,IAAK,CAAA,eAAA,CAAgB,iBAAmB,CAAA,CAAA,CAAA,CAAA,CAAA;AAG9D,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,QAAM,MAAA,KAAA,GAAQ,gBAAgB,iBAAkB,CAAA,MAAA,CAAA,CAAA;AAChD,QAAA,MAAM,oBAAoB,KAAM,CAAA,IAAA,CAAK,GAAS,CAAA,KAAA,OAAA,CAAQ,kBAAkB,IAAK,CAAA,GAAA,CAAA,CAAA;AAE7E,QAAA,IAAI,aAAgB,GAAA,kBAAA,CAAmB,OAAS,EAAA,QAAA,CAAS,MAAW,CAAA,IAAA,EAAA,CAAA;AACpE,QAAgB,aAAA,GAAA,aAAA,CAAc,MAAO,CAAA,iBAAA,CAAkB,QAAS,CAAA,QAAA,CAAA,CAAA,CAAA;AAEhE,QAAA,IAAI,OAAQ,CAAA,MAAA,IAAU,OAAQ,CAAA,MAAA,CAAO,KAAO,EAAA;AAC1C,UAAA,OAAA,CAAQ,MAAO,CAAA,KAAA,GAAQ,uBAAwB,CAAA,OAAA,CAAQ,OAAO,KAAO,EAAA,aAAA,CAAA,CAAA;AAAA,SAAA;AAGvE,QAAA,MAAM,SAAY,GAAA;AAAA,UAChB,eAAiB,EAAA,KAAA,CAAA;AAAA,UACjB,qBAAuB,EAAA,IAAA;AAAA,UACvB,iBAAA,EACE,gBAAgB,QAAS,CAAA,GAAA,KAAQ,gBAAgB,QAAS,CAAA,GAAA,IAC1D,gBAAgB,iBAAsB,KAAA,IAAA;AAAA,UACxC,iBAAA;AAAA,UACA,IAAM,EAAA,cAAA;AAAA,UACN,iBAAmB,EAAA,MAAA;AAAA,UACnB,iBAAmB,EAAA,IAAA;AAAA,UACnB,uBAAyB,EAAA,IAAA;AAAA,UACzB,KAAO,EAAA,EAAA;AAAA,UACP,aAAA;AAAA,UACA,QAAA;AAAA,UACA,YAAc,EAAA,OAAA;AAAA,SAAA,CAAA;AAGhB,QAAA,MAAM,aAAgB,GAAA;AAAA,UACpB,MAAA;AAAA,UACA,aAAa,eAAgB,CAAA,OAAA;AAAA,UAC7B,iBAAA,EAAmB,gBAAgB,iBAAkB,CAAA,MAAA,CAAA;AAAA,UACrD,SAAA;AAAA,SAAA,CAAA;AAGF,QAAgB,eAAA,CAAA,QAAA,GAAW,gBAAgB,QAAY,IAAA,EAAA,CAAA;AAEvD,QAAA,OAAO,OAAQ,CAAA,MAAA,CAAO,EAAI,EAAA,OAAA,EAAS,eAAiB,EAAA,aAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAKxD,IAAA,SAAA,qCAAA,CAA+C,SAAS,QAAU,EAAA;AAChE,MAAA,IAAI,aAAgB,GAAA,kBAAA,CAAmB,OAAS,EAAA,QAAA,CAAS,MAAW,CAAA,IAAA,EAAA,CAAA;AACpE,MAAgB,aAAA,GAAA,aAAA,CAAc,MAAO,CAAA,iBAAA,CAAkB,QAAS,CAAA,QAAA,CAAA,CAAA,CAAA;AAEhE,MAAA,OAAO,GAAG,IAAK,CAAA;AAAA,QACb,SAAW,EAAA;AAAA,UACT,yBAA2B,EAAA,IAAA;AAAA,UAE3B,SAAW,EAAA;AAAA,YACT,SAAW,EAAA;AAAA,cACT,IAAM,EAAA,cAAA;AAAA,cACN,aAAA;AAAA,cACA,QAAA;AAAA,cACA,YAAc,EAAA,OAAA;AAAA,aAAA;AAAA,WAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAOxB,IAAA,SAAA,6BAAA,CAAuC,WAAa,EAAA;AAClD,MAAA,MAAM,OAAU,GAAA;AAAA,QACd,IAAM,EAAA,WAAA;AAAA,QACN,MAAM,CAAC,EAAE,SAAS,WAAY,CAAA,IAAA,EAAM,QAAQ,WAAY,CAAA,MAAA,EAAA,CAAA;AAAA,QACxD,eAAA,EAAiB,YAAY,GAAI,CAAA,eAAA;AAAA,QACjC,aAAa,WAAY,CAAA,OAAA;AAAA,OAAA,CAAA;AAE3B,MAAA,kCAAA,CAAmC,sBAAuB,CAAA,OAAA,CAAA,CAAA;AAC1D,MAAO,OAAA,OAAA,CAAA;AAAA,KAAA;AAGT,IAA6C,SAAA,mCAAA,CAAA,WAAA,EAAa,WAAa,EAAA,IAAA,GAAO,OAAS,EAAA;AAGrF,MAAA,MAAM,iBAAiB,EAAE,OAAA,EAAS,WAAY,CAAA,OAAA,EAAS,QAAQ,WAAY,CAAA,MAAA,EAAA,CAAA;AAC3E,MAAA,OAAO,0BAA2B,CAAA,WAAA,EAAa,cAAgB,CAAA,CAAA,IAAA,CAAK,SAAU,OAAS,EAAA;AACrF,QAAA,OAAA,CAAQ,cAAc,WAAY,CAAA,OAAA,CAAA;AAClC,QAAQ,OAAA,CAAA,GAAA,GAAM,YAAY,OAAQ,CAAA,GAAA,CAAA;AAClC,QAAQ,OAAA,CAAA,KAAA,GAAQ,YAAY,OAAQ,CAAA,KAAA,CAAA;AACpC,QAAA,OAAA,CAAQ,SAAS,WAAY,CAAA,MAAA,CAAA;AAC7B,QAAA,OAAA,CAAQ,iBAAiB,WAAY,CAAA,UAAA,CAAA;AACrC,QAAA,OAAA,CAAQ,WAAW,WAAY,CAAA,QAAA,CAAA;AAC/B,QAAA,OAAA,CAAQ,UAAU,IAAO,GAAA,IAAA,CAAA;AAEzB,QAAO,OAAA,OAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAIX,IAAO,OAAA;AAAA,MACL,0BAAA;AAAA,MACA,mCAAA;AAAA,MACA,qCAAA;AAAA,MACA,mCAAA;AAAA,MACA,6BAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AClQD,MAAM,gEACX,GAAA,2CAAA,CAAA;AAEF,MAAA,CAAO,gEAAkE,EAAA;AAAA,EACvE,kBAAA;AAAA,EACA,sCAAA;AAAA,EACA,mBAAA;AAAA,EACA,iBAAA;AAAA,EACA,sCAAA;AAAA,EACA,qBAAA;AAAA,EACA,wBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uCAAA;AAAA,CAAA,CAAA,CACC,WAAW,yBAA2B,EAAA;AAAA,EACvC,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,oCAAA;AAAA,EACA,4BAAA;AAAA,EACA,oBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,SACE,MAAA,EACA,iBACA,EAAA,EAAA,EACA,QACA,iBACA,EAAA,gBAAA,EACA,kCACA,EAAA,0BAAA,EACA,kBACA,EAAA,aAAA,EACA,gBACA,EAAA,YAAA,EACA,aACA,KACA,EAAA;AACA,IAAA,MAAA,CAAO,KAAQ,GAAA;AAAA,MACb,iBAAA,EAAmB,gBAAiB,CAAA,WAAA,CAClC,mCACA,EAAA,+EAAA,CAAA;AAAA,MAEF,aAAA,EAAe,gBAAiB,CAAA,WAAA,CAC9B,+BACA,EAAA,kEAAA,CAAA;AAAA,MAEF,SAAA,EAAW,gBAAiB,CAAA,WAAA,CAAY,2BAA6B,EAAA,+DAAA,CAAA;AAAA,MACrE,iBAAA,EAAmB,gBAAiB,CAAA,WAAA,CAClC,mCACA,EAAA,+EAAA,CAAA;AAAA,MAEF,UAAA,EAAY,gBAAiB,CAAA,WAAA,CAAY,4BAA8B,EAAA,iEAAA,CAAA;AAAA,MACvE,OAAA,EAAS,gBAAiB,CAAA,WAAA,CAAY,yBAA2B,EAAA,2DAAA,CAAA;AAAA,MACjE,gBAAA,EAAkB,gBAAiB,CAAA,WAAA,CACjC,kCACA,EAAA,6EAAA,CAAA;AAAA,MAEF,gBAAA,EAAkB,gBAAiB,CAAA,WAAA,CACjC,kCACA,EAAA,6EAAA,CAAA;AAAA,MAEF,cAAA,EAAgB,gBAAiB,CAAA,WAAA,CAC/B,oBACA,EAAA,yEAAA,CAAA;AAAA,KAAA,CAAA;AAIJ,IAAA,MAAA,CAAO,KAAQ,GAAA,KAAA,CAAA;AAEf,IAAA,MAAA,CAAO,kBAAkB,WAAY,CAAA,IAAA,CAAA;AACrC,IAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;AAErB,IAAA,MAAA,CAAO,OAAU,GAAA,kBAAA,CAAA;AAEjB,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,MAAA,EAAQ,CAAC,qCAAuC,EAAA,UAAA,CAAA;AAAA,MAChD,WAAW,CAAC,yCAAA,CAAA;AAAA,KAAA,CAAA;AAEd,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,KAAA;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,kCAAA,CAAmC,gBAAiB,CAAA,MAAA,CAAO,OAAS,CAAA,CAAA,IAAA,CAAK,WAAY;AACnF,QAAA,MAAA,CAAO,MAAM,MAAS,GAAA,IAAA,CAAA;AAEtB,QAAA,uBAAA,EAAA,CAAA;AACA,QAAA,iBAAA,EAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAIJ,IAA6B,SAAA,iBAAA,GAAA;AAC3B,MAAA,MAAA,CAAO,MAAO,CAAA,oBAAA,EAAsB,qBAAsB,CAAA,MAAA,CAAO,OAAQ,CAAA,iBAAA,CAAA,CAAA,CAAA;AACzE,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;AACrE,MAAA,MAAA,CAAO,MACL,CAAA,+BAAA,EACA,qBAAsB,CAAA,MAAA,CAAO,OAAQ,CAAA,4BAAA,CAAA,CAAA,CAAA;AAEvC,MAAA,MAAA,CAAO,OAAO,eAAiB,EAAA,MAAM,MAAO,CAAA,OAAA,CAAQ,eAAe,MAAO,CAAA,OAAA,CAAA,CAAA,CAAA;AAC1E,MAAA,MAAA,CAAO,OAAO,yBAA2B,EAAA,MAAM,MAAO,CAAA,OAAA,CAAQ,eAAe,MAAO,CAAA,OAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAGtF,IAAmC,SAAA,uBAAA,GAAA;AACjC,MAA2B,0BAAA,CAAA,MAAA,CAAO,QAAQ,kBAAmB,CAAA,kBAAA,CAAA,CAAA,CAAA;AAC7D,MAA2B,0BAAA,CAAA,MAAA,CAAO,QAAQ,aAAc,CAAA,kBAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAG1D,IAAA,SAAA,qBAAA,CAA+B,MAAQ,EAAA;AACrC,MAAA,OAAO,WAAY;AACjB,QAAA,0BAAA,CAA2B,MAAO,CAAA,kBAAA,CAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAAA,KAAA;AAItC,IAAsC,SAAA,0BAAA,GAAA;AAAA,KAAA;AAMtC,IAAA,IAAA,CAAK,UAAU,WAAY;AACzB,MAAO,OAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAA,IAAA,CAAK,mBAAmB,WAAY;AAClC,MAAA,OAAO,WAAY,CAAA,eAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGrB,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,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;AAIF,IAAO,MAAA,CAAA,aAAA,GAAgB,SAAU,UAAA,EAAY,KAAO,EAAA;AAClD,MAAA,IAAI,cAAc,UAAY,EAAA;AAC5B,QAAO,MAAA,CAAA,OAAA,CAAQ,UAAU,QAAW,GAAA,KAAA,CAAA;AAAA,OAC/B,MAAA;AACL,QAAA,MAAA,CAAO,QAAQ,UAAc,CAAA,GAAA,KAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAKjC,IAAO,MAAA,CAAA,gBAAA,GAAmB,SAAU,KAAO,EAAA;AACzC,MAAO,OAAA,kCAAA,CAAmC,gBAAiB,CAAA,MAAA,CAAO,OAAS,EAAA,KAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAI7E,IAAA,MAAA,CAAO,qBAAwB,GAAA;AAAA,MAC7B,sBACE,MAAO,CAAA,OAAA,CAAQ,4BAA4B,MAAO,CAAA,OAAA,CAAQ,yBAAyB,MAAS,GAAA,CAAA;AAAA,MAC9F,mBAAA,EAAqB,SAAU,YAAc,EAAA;AAC3C,QAAA,IAAI,gBAAgB,YAAc,EAAA;AAChC,UAAA,MAAA,CAAO,QAAQ,wBAA2B,GAAA,EAAA,CAAA;AAAA,SAAA,MAAA,IACjC,gBAAgB,mBAAqB,EAAA;AAC9C,UAAA,MAAA,CAAO,QAAQ,UAAa,GAAA,EAAA,CAAA;AAC5B,UAAA,MAAA,CAAO,OAAQ,CAAA,wBAAA,GAA2B,MAAO,CAAA,OAAA,CAAQ,wBAA4B,IAAA,EAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACzPxF,MAAM,4EACX,GAAA,uEAAA,CAAA;AAEF,MAAO,CAAA,4EAAA,EAA8E,EAAI,CAAA,CAAA,SAAA,CACvF,gCACA,EAAA;AAAA,EACE,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,GAAA;AAAA,IACT,WAAa,EAAA,GAAA;AAAA,GAAA;AAAA,EAEf,WAAa,EAAA,uFAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACWjB,MAAA,mBAAA,SAAkCA,eAAM,SAAgE,CAAA;AAAA,EACtG,YAAY,KAAkC,EAAA;AAC5C,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AA8BA,IAAA,IAAA,CAAA,6BAAA,GAAgC,CAAC,GAAgC,KAAA;AACvE,MAAA,OAAO,GAAI,CAAA,WAAA,IAAe,GAAI,CAAA,WAAA,CAAY,QAAY,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,0BAC3E,GAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,0BACzB,GAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGE,IAAA,IAAA,CAAA,kCAAA,GAAqC,CAAC,GAAgC,KAAA;AAC5E,MAAA,OAAO,GAAI,CAAA,WAAA,IAAe,GAAI,CAAA,WAAA,CAAY,QAAY,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,+BAC3E,GAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,+BACzB,GAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGE,IAA8B,IAAA,CAAA,2BAAA,GAAA,CAAC,6BAAsC,GAAgC,KAAA;AAC3G,MAAA,OAAO,2BACL,IAAA,GAAA,CAAI,WACJ,IAAA,GAAA,CAAI,YAAY,QAChB,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,kCACvB,GAAI,CAAA,WAAA,CAAY,QAAS,CAAA,+BAAA,GACzB,KAAK,KAAM,CAAA,wBAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAA,IAAA,CAAA,2BAAA,GAA8B,MAAM;AAC1C,MAAM,MAAA,wBAAA,GAA2B,KAAK,KAAM,CAAA,wBAAA,CAAA;AAC5C,MAAA,wBAAA,CAAyB,KAAK,EAAE,gBAAA,EAAkB,EAAI,EAAA,IAAA,EAAM,MAAM,MAAQ,EAAA,IAAA,EAAA,CAAA,CAAA;AAC1E,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,0BAA4B,EAAA,wBAAA,CAAA,CAAA;AACrD,MAAA,IAAA,CAAK,SAAS,EAAE,wBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGV,IAAA,IAAA,CAAA,8BAAA,GAAiC,CAAC,KAAkB,KAAA;AAC1D,MAAM,MAAA,wBAAA,GAA2B,KAAK,KAAM,CAAA,wBAAA,CAAA;AAC5C,MAAA,wBAAA,CAAyB,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AACvC,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,0BAA4B,EAAA,wBAAA,CAAA,CAAA;AACrD,MAAA,IAAA,CAAK,SAAS,EAAE,wBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGV,IAA6B,IAAA,CAAA,0BAAA,GAAA,CAAC,OAAe,0BAAuC,KAAA;AAC1F,MAAM,MAAA,wBAAA,GAA2B,KAAK,KAAM,CAAA,wBAAA,CAAA;AAC5C,MAAA,MAAM,iCAAiC,wBAAyB,CAAA,KAAA,CAAA,CAAA;AAChE,MAAA,8BAAA,CAA+B,gBAAmB,GAAA,0BAAA,CAAA;AAClD,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,0BAA4B,EAAA,wBAAA,CAAA,CAAA;AACrD,MAAA,IAAA,CAAK,SAAS,EAAE,wBAAA,EAAA,CAAA,CAAA;AAChB,MAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,SAAU,CAAA,KAAA,CAAM,uBAA0B,GAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGvD,IAA6B,IAAA,CAAA,0BAAA,GAAA,CAAC,OAAe,0BAAuC,KAAA;AAC1F,MAAM,MAAA,wBAAA,GAA2B,KAAK,KAAM,CAAA,wBAAA,CAAA;AAC5C,MAAA,MAAM,iCAAiC,wBAAyB,CAAA,KAAA,CAAA,CAAA;AAChE,MAAA,8BAAA,CAA+B,IAAO,GAAA,0BAAA,CAAA;AACtC,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,0BAA4B,EAAA,wBAAA,CAAA,CAAA;AACrD,MAAA,IAAA,CAAK,SAAS,EAAE,wBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGV,IAA+B,IAAA,CAAA,4BAAA,GAAA,CAAC,OAAe,4BAAyC,KAAA;AAC9F,MAAM,MAAA,wBAAA,GAA2B,KAAK,KAAM,CAAA,wBAAA,CAAA;AAC5C,MAAA,MAAM,iCAAiC,wBAAyB,CAAA,KAAA,CAAA,CAAA;AAChE,MAAA,8BAAA,CAA+B,MAAS,GAAA,4BAAA,CAAA;AACxC,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,0BAA4B,EAAA,wBAAA,CAAA,CAAA;AACrD,MAAA,IAAA,CAAK,SAAS,EAAE,wBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGV,IAAA,IAAA,CAAA,0BAAA,GAA6B,CAAC,0BAAwC,KAAA;AAC5E,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,2BAA6B,EAAA,0BAAA,EAAA,CAAA,CAAA;AAC7C,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,6BAA+B,EAAA,0BAAA,CAAA,CAAA;AACxD,MAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,SAAU,CAAA,KAAA,CAAM,uBAA0B,GAAA,EAAA,CAAA;AAE7D,MAAM,MAAA,wBAAA,GACJ,8BAA8B,IAAK,CAAA,KAAA,CAAM,gCAAgC,MAAS,GAAA,CAAA,GAC9E,IAAK,CAAA,KAAA,CAAM,+BACX,GAAA,EAAA,CAAA;AACN,MAAA,IAAA,CAAK,SAAS,EAAE,wBAAA,EAAA,CAAA,CAAA;AAChB,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,0BAA4B,EAAA,wBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAnGrD,IAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AAEvB,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,0BAAA,EAA4B,KAAK,6BAA8B,CAAA,GAAA,CAAA;AAAA,MAC/D,+BAAA,EAAiC,KAAK,kCAAmC,CAAA,GAAA,CAAA;AAAA,MACzE,gBAAgB,GAAI,CAAA,cAAA;AAAA,MACpB,6BACE,GAAI,CAAA,2BAAA,IAAgC,IAAI,wBAA4B,IAAA,GAAA,CAAI,yBAAyB,MAAU,IAAA,CAAA;AAAA,MAC7G,wBAAA,EACE,IAAI,wBAA4B,IAAA,GAAA,CAAI,yBAAyB,MAAS,GAAA,CAAA,GAAI,IAAI,wBAA2B,GAAA,EAAA;AAAA,MAC3G,0BAA4B,EAAA,KAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAIzB,iBAAoB,GAAA;AACzB,IAAA,IAAA,CAAK,KAAM,CAAA,gBAAA,CAAiB,GAAK,CAAA,CAAA,IAAA,CAAK,MAAM;AAC1C,MAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AACvB,MAAM,MAAA,2BAAA,GAA8B,KAAK,KAAM,CAAA,2BAAA,CAAA;AAC/C,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,0BAAA,EAA4B,KAAK,6BAA8B,CAAA,GAAA,CAAA;AAAA,QAC/D,+BAAA,EAAiC,KAAK,kCAAmC,CAAA,GAAA,CAAA;AAAA,QACzE,wBAAA,EAA0B,IAAK,CAAA,2BAAA,CAA4B,2BAA6B,EAAA,GAAA,CAAA;AAAA,QACxF,0BAA4B,EAAA,IAAA;AAAA,OAAA,CAAA,CAAA;AAE9B,MAAA,IAAA,CAAK,KAAM,CAAA,aAAA,CAAc,6BAA+B,EAAA,IAAA,CAAK,KAAM,CAAA,2BAAA,CAAA,CAAA;AACnE,MAAA,IAAA,CAAK,KAAM,CAAA,aAAA,CAAc,0BAA4B,EAAA,IAAA,CAAK,KAAM,CAAA,wBAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EA6EpE,MAAkD,GAAA;AAChD,IAAA,MAAM,6BAA6B,IAAK,CAAA,0BAAA,CAAA;AACxC,IAAA,MAAM,6BAA6B,IAAK,CAAA,0BAAA,CAAA;AACxC,IAAA,MAAM,+BAA+B,IAAK,CAAA,4BAAA,CAAA;AAC1C,IAAA,MAAM,8BAA8B,IAAK,CAAA,2BAAA,CAAA;AACzC,IAAA,MAAM,iCAAiC,IAAK,CAAA,8BAAA,CAAA;AAC5C,IAAA,MAAM,6BAA6B,IAAK,CAAA,0BAAA,CAAA;AACxC,IAAM,MAAA,wBAAA,GAA2B,KAAK,KAAM,CAAA,wBAAA,CAAA;AAC5C,IAAM,MAAA,2BAAA,GAA8B,KAAK,KAAM,CAAA,2BAAA,CAAA;AAC/C,IAAM,MAAA,0BAAA,GAA6B,KAAK,KAAM,CAAA,0BAAA,CAAA;AAC9C,IAAA,MAAM,+BACJ,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,SAAA,CAAU,SAAS,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,SAAA,CAAU,MAAM,uBACrE,GAAA,IAAA,CAAK,MAAM,OAAQ,CAAA,SAAA,CAAU,MAAM,uBACnC,GAAA,EAAA,CAAA;AACN,IAAA,MAAM,gCACJ,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,SAAA,CAAU,SAAS,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,SAAA,CAAU,MAAM,uBACrE,GAAA,IAAA,CAAK,MAAM,OAAQ,CAAA,SAAA,CAAU,MAAM,uBACnC,GAAA,EAAA,CAAA;AAEN,IAAA,MAAM,qBACJ,GAAA,IAAA,CAAK,KAAM,CAAA,0BAAA,IAA8B,KAAK,KAAM,CAAA,0BAAA,CAA2B,MAAS,GAAA,CAAA,GACpF,IAAK,CAAA,KAAA,CAAM,0BAA2B,CAAA,GAAA,CAAI,CAAC,sBAA0B,KAAA;AACnE,MAAA,OAAO,EAAE,KAAA,EAAO,CAAG,EAAA,sBAAA,CAAA,CAAA,EAAyB,KAAO,EAAA,sBAAA,EAAA,CAAA;AAAA,KAErD,CAAA,GAAA,EAAA,CAAA;AAEN,IAAA,MAAM,cACJ,GAAA,2BAAA,IAA+B,6BAC7B,mBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,qBAAA;AAAA,KAAA,+CACZ,GAAD,EAAA;AAAA,MAAG,SAAU,EAAA,WAAA;AAAA,KAAA,+CACV,GAAD,EAAA;AAAA,MAAG,SAAU,EAAA,4BAAA;AAAA,KAAA,CAAA,EAAiC,8EAE9C,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,CAAA,EAAM,2HAMV,CAAA,CAAA,GAAA,EAAA,CAAA;AAGJ,IAAA,MAAM,4BAA4B,4BAC9B,GAAA,4BAAA,CAA6B,GAAI,CAAA,SAAU,kBAAkB,KAAO,EAAA;AAClE,MAAA,oDAAQ,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,KAAA;AAAA,OAAQ,EAAA,gBAAA,CAAA,CAAA;AAAA,KAE1B,CAAA,GAAA,EAAA,CAAA;AAEJ,IAAA,MAAM,4BACJ,GAAA,2BAAA,IAA+B,6BAA8B,CAAA,MAAA,GAAS,CACpE,GAAA,cAAA,GACE,4BAA6B,CAAA,MAAA,GAAS,CAAK,IAAA,CAAC,2BAC9C,mBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,qBAAA;AAAA,KAAA,kBACZA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAD,EAAA;AAAA,MAAG,SAAU,EAAA,4BAAA;AAAA,KAAiC,CAAA,EAAA,8GAAA,CAAA,+CAG/C,IAAD,EAAA,IAAA,EAAK,4CACJA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACA,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,GAAD,EAAA;AAAA,MAAG,SAAU,EAAA,WAAA;AAAA,KAAA,EAAY,iFAG3B,CAAA,CAAA,GAAA,EAAA,CAAA;AAGJ,IAAM,MAAA,sBAAA,GACJ,yBAAyB,MAAS,GAAA,CAAA,GAChC,yBAAyB,GAAI,CAAA,SAAU,SAAS,KAAO,EAAA;AACrD,MAAA,oDACG,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,KAAA;AAAA,OAAA,EACN,2BACC,mBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,+CACG,OAAD,EAAA;AAAA,QACE,gBAAc,2CAA8C,GAAA,KAAA;AAAA,QAC5D,IAAK,EAAA,QAAA;AAAA,QACL,SAAU,EAAA,+BAAA;AAAA,QACV,QAAU,EAAA,IAAA;AAAA,QACV,OAAO,OAAQ,CAAA,gBAAA;AAAA,QACf,QAAU,EAAA,IAAA;AAAA,OAAA,CAAA,CAAA,gDAIb,IAAD,EAAA;AAAA,QAAI,gBAAc,0CAA6C,GAAA,KAAA;AAAA,OAAA,+CAC5D,cAAD,EAAA;AAAA,QACE,WAAY,EAAA,0BAAA;AAAA,QACZ,OAAS,EAAA,qBAAA;AAAA,QACT,OAAO,OAAQ,CAAA,gBAAA;AAAA,QACf,QAAA,EAAU,CAAC,CAAc,KAAA;AACvB,UAAA,0BAAA,CAA2B,OAAO,CAAE,CAAA,KAAA,CAAA,CAAA;AAAA,SAAA;AAAA,QAEtC,SAAW,EAAA,KAAA;AAAA,OAAA,CAAA,CAAA,kBAIhBA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,QACE,gBAAc,oCAAuC,GAAA,KAAA;AAAA,QACrD,QAAU,EAAA,2BAAA;AAAA,QACV,IAAK,EAAA,QAAA;AAAA,QACL,SAAU,EAAA,+BAAA;AAAA,QACV,OAAO,OAAQ,CAAA,IAAA;AAAA,QACf,UAAU,CAAC,CAAA,KAAM,0BAA2B,CAAA,KAAA,EAAO,EAAE,MAAO,CAAA,aAAA,CAAA;AAAA,OAAA,CAAA,CAAA,kBAG/DA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,QACE,gBAAc,sCAAyC,GAAA,KAAA;AAAA,QACvD,QAAU,EAAA,2BAAA;AAAA,QACV,IAAK,EAAA,QAAA;AAAA,QACL,SAAU,EAAA,+BAAA;AAAA,QACV,QAAU,EAAA,IAAA;AAAA,QACV,OAAO,OAAQ,CAAA,MAAA;AAAA,QACf,UAAU,CAAC,CAAA,KAAM,4BAA6B,CAAA,KAAA,EAAO,EAAE,MAAO,CAAA,aAAA,CAAA;AAAA,OAAA,CAAA,CAAA,EAGjE,CAAC,2BACA,mBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,+CACG,KAAD,EAAA;AAAA,QAAK,SAAU,EAAA,qBAAA;AAAA,OAAA,+CACZ,GAAD,EAAA;AAAA,QAAG,SAAU,EAAA,mBAAA;AAAA,QAAoB,OAAA,EAAS,MAAM,8BAA+B,CAAA,KAAA,CAAA;AAAA,OAAA,+CAC5E,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,2BAAA;AAAA,OAAA,CAAA,+CACf,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,SAAA;AAAA,OAAA,EAAU,QAKhC,CAAA,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA;AAAA,KAKN,CAAA,GAAA,2BAAA,IAA+B,IAAK,CAAA,KAAA,CAAM,wBAAyB,CAAA,MAAA,IAAU,oBAC9EA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,MAAgB,KAAA,EAAO,EAAE,KAAO,EAAA,MAAA,EAAA;AAAA,KAAA,+CAC5C,KAAD,EAAA;AAAA,MAAO,KAAM,EAAA,SAAA;AAAA,KAAA,EACV,KAAI,4IAOX,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA;AAGJ,IAAA,MAAM,8BACJ,IAAK,CAAA,KAAA,CAAM,kBACX,IAAK,CAAA,KAAA,CAAM,QAAQ,WACnB,IAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,UACnB,CAAC,2BAAA,IACD,sBAAsB,MAAS,GAAA,CAAA,gDAC5B,QAAD,EAAA;AAAA,MACE,cAAa,EAAA,iCAAA;AAAA,MACb,SAAU,EAAA,8BAAA;AAAA,MACV,OAAS,EAAA,2BAAA;AAAA,KAAA,+CAER,MAAD,EAAA;AAAA,MAAM,SAAU,EAAA,+BAAA;AAAA,KAAkC,CAAA,EAAA,2BAAA,CAAA,GAGlD,CAAC,2BAA+B,IAAA,0BAAA,IAA8B,sBAAsB,MAAU,IAAA,CAAA,gDAC/F,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,MAAgB,KAAA,EAAO,EAAE,KAAO,EAAA,MAAA,EAAA;AAAA,KAAA,+CAC5C,KAAD,EAAA;AAAA,MAAO,KAAM,EAAA,SAAA;AAAA,KAAA,EAAU,yDAGzB,CAAA,CAAA,GAAA,EAAA,CAAA;AAGJ,IAAA,oDACG,KAAD,EAAA,IAAA,EACI,CAA6B,4BAAA,CAAA,MAAA,GAAS,KAAK,6BAA8B,CAAA,MAAA,GAAS,CACpF,KAAA,0BAAA,gDACG,KAAD,EAAA,IAAA,EAAM,4BAEN,CAAA,GAAA,EAAA,+CAED,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,kBACZA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,4BAAA,CAAA,+CACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,8BAAA;AAAA,KAAA,CAAA,EAAiC,GAAC,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,CAAA,kBAC/CA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAD,IAAM,EAAA,GAAA,EAAE,IAAK,CAAA,KAAA,CAAM,cAAe,EAAA,GAAA,CAAA,CAAA,+CAEnC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,OAAA;AAAA,KAAA,kBACZA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,MACE,cAAa,EAAA,uCAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,OAAS,EAAA,2BAAA;AAAA,MACT,OAAA,EAAS,MAAM,0BAA2B,CAAA,IAAA,CAAA;AAAA,MAC1C,EAAG,EAAA,2BAAA;AAAA,KACH,CAAA,EAAA,qBAAA,CAAA,CAAA,+CAIL,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,OAAA;AAAA,KAAA,kBACZA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,MACE,cAAa,EAAA,sCAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,SAAS,CAAC,2BAAA;AAAA,MACV,OAAA,EAAS,MAAM,0BAA2B,CAAA,KAAA,CAAA;AAAA,MAC1C,EAAG,EAAA,kCAAA;AAAA,KACH,CAAA,EAAA,uBAAA,CAAA,CAAA,EAIL,0BACC,mBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,MAAO,SAAU,EAAA,mCAAA;AAAA,KAAA,+CACd,OAAD,EAAA,IAAA,+CACG,IAAD,EAAA,IAAA,+CACG,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,eAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,0BAAA;AAAA,KAAA,CAAA,CAAA,+CAEf,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,MAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,0BAAA;AAAA,KAAA,CAAA,CAAA,+CAEf,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,QAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,4BAAA;AAAA,KAIpB,CAAA,CAAA,CAAA,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA,IAAA,EAAQ,sBACR,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA,IAAA,kBACGA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA;AAAA,MAAI,OAAS,EAAA,CAAA;AAAA,KAAI,EAAA,2BAAA,CAAA,CAAA,CAAA,CAAA,gDAKtB,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,aAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,SAAA;AAAA,KAAU,EAAA,+BAAA,CAAA,+CACxB,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,MAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,KAAA;AAAA,KAAA,CAAA,+CACd,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,KAAA;AAAA,KAAA,CAAA,+CACd,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,KAAA;AAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAStB,MAAM,2BAA8B,GAAA,mEAAA,CAAA;AAC3C,MAAA,CAAO,6BAA6B,EAAI,CAAA,CAAA,SAAA,CACtC,4BACA,aAAc,CAAA,iBAAA,CAAkB,qBAAqB,0BAA6B,CAAA,EAAA;AAAA,EAChF,SAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,CAAA,CAAA,CAAA;;AC5VG,MAAA,SAAA,SAAwB,MAAM,SAA4C,CAAA;AAAA,EAC/E,YAAY,KAAwB,EAAA;AAClC,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AAkDA,IAAA,IAAA,CAAA,eAAA,GAAkB,MAAoC;AAC5D,MAAA,MAAM,uBAAuB,IAAI,GAAA,EAAA,CAAA;AACjC,MAAA,IAAA,CAAK,MAAM,OAAQ,CAAA,WAAA,CAAY,SAAS,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC5D,QAAqB,oBAAA,CAAA,GAAA,CAAI,EAAE,OAAS,EAAA,CAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAGtC,MAAO,OAAA,oBAAA,CAAA;AAAA,KAAA,CAAA;AAGD,IAAA,IAAA,CAAA,wBAAA,GAA2B,MAAuB;AACxD,MAAO,OAAA;AAAA,QACL,OAAS,EAAA,EAAA;AAAA,QACT,OAAS,EAAA,EAAA;AAAA,QACT,WAAa,EAAA,KAAA;AAAA,QACb,WAAa,EAAA,KAAA;AAAA,QACb,OAAS,EAAA,EAAA;AAAA,QACT,eAAiB,EAAA,EAAA;AAAA,QACjB,OAAS,EAAA,EAAA;AAAA,QACT,QAAU,EAAA,EAAA;AAAA,QACV,UAAY,EAAA,EAAA;AAAA,QACZ,GAAK,EAAA,EAAA;AAAA,OAAA,CAAA;AAAA,KAAA,CAAA;AAID,IAAA,IAAA,CAAA,sBAAA,GAAyB,MAAM;AACrC,MAAM,MAAA,UAAA,GAAa,KAAK,KAAM,CAAA,mBAAA,CAAA;AAC9B,MAAA,UAAA,CAAW,KAAK,EAAE,aAAA,EAAe,EAAI,EAAA,WAAA,EAAa,IAAI,aAAe,EAAA,EAAA,EAAA,CAAA,CAAA;AACrE,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,UAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG/B,IAAA,IAAA,CAAA,2BAAA,GAA8B,CAAC,QAA6B,KAAA;AAClE,MAAA,MAAM,WAAW,IAAK,CAAA,eAAA,EAAA,CAAA;AACtB,MAAI,IAAA,mBAAA,GAAsB,QAAS,CAAA,GAAA,CAAI,QAAS,CAAA,KAAA,CAAA,CAAA;AAChD,MAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,QAAA,mBAAA,GAAsB,IAAK,CAAA,wBAAA,EAAA,CAAA;AAAA,OAAA;AAG7B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,kBAAoB,EAAA,mBAAA,CAAA,CAAA;AAC7C,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,gBAAkB,EAAA,mBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG5B,IAAA,IAAA,CAAA,kBAAA,GAAqB,CAAC,eAA4B,KAAA;AACxD,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,cAAgB,EAAA,eAAA,CAAA,CAAA;AACzC,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,YAAc,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGxB,IAAA,IAAA,CAAA,oBAAA,GAAuB,CAAC,iBAA8B,KAAA;AAC5D,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,gBAAkB,EAAA,iBAAA,CAAA,CAAA;AAC3C,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,cAAgB,EAAA,iBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG1B,IAAsC,IAAA,CAAA,mCAAA,GAAA,CAAC,OAAe,cAAmC,KAAA;AAC/F,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,mBAAA,CAAA;AACnC,MAAA,MAAM,gBAAgB,eAAgB,CAAA,KAAA,CAAA,CAAA;AACtC,MAAA,aAAA,CAAc,cAAc,cAAe,CAAA,KAAA,CAAA;AAC3C,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,qBAAuB,EAAA,eAAA,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,eAAA,EAAA,CAAA,CAAA;AACrC,MAAK,IAAA,CAAA,uBAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGC,IAA+B,IAAA,CAAA,4BAAA,GAAA,CAAC,OAAe,UAAuB,KAAA;AAC5E,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,mBAAA,CAAA;AACnC,MAAA,MAAM,gBAAgB,eAAgB,CAAA,KAAA,CAAA,CAAA;AACtC,MAAA,aAAA,CAAc,aAAgB,GAAA,UAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,qBAAuB,EAAA,eAAA,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG/B,IAAA,IAAA,CAAA,wBAAA,GAA2B,CAAC,KAAkB,KAAA;AACpD,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,mBAAA,CAAA;AACnC,MAAA,eAAA,CAAgB,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,qBAAuB,EAAA,eAAA,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG/B,IAAA,IAAA,CAAA,uBAAA,GAA0B,MAAM;AACtC,MAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,SAAU,CAAA,KAAA,CAAM,YAAe,GAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AA7HlD,IAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AACvB,IAAA,IAAI,gBAAmB,GAAA,EAAA,CAAA;AACvB,IAAA,IAAI,GAAI,CAAA,iBAAA,IAAqB,GAAI,CAAA,iBAAA,CAAkB,SAAS,CAAG,EAAA;AAC7D,MAAmB,gBAAA,GAAA,GAAA,CAAI,kBAAkB,CAAG,CAAA,CAAA,aAAA,CAAA;AAAA,KAAA;AAG9C,IAAA,IAAI,kBAA+C,GAAA,EAAA,CAAA;AACnD,IAAA,IAAI,GAAI,CAAA,mBAAA,IAAuB,GAAI,CAAA,mBAAA,CAAoB,SAAS,CAAG,EAAA;AACjE,MAAA,kBAAA,GAAqB,GAAI,CAAA,mBAAA,CAAA;AAAA,KAAA;AAG3B,IAAA,IAAI,GAAI,CAAA,WAAA,IAAe,GAAI,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AACjD,MAAA,kBAAA,CAAmB,IAAK,CAAA;AAAA,QACtB,aAAA,EAAe,IAAI,qBAAyB,IAAA,gBAAA;AAAA,QAC5C,aAAa,GAAI,CAAA,WAAA;AAAA,QACjB,eAAe,GAAI,CAAA,aAAA;AAAA,OAAA,CAAA,CAAA;AAErB,MAAA,GAAA,CAAI,WAAc,GAAA,EAAA,CAAA;AAClB,MAAA,GAAA,CAAI,qBAAwB,GAAA,EAAA,CAAA;AAAA,KAAA;AAG9B,IAAI,GAAA,CAAA,mBAAA,GAAsB,SAAS,kBAAoB,EAAA,OAAA,CAAA,CAAA;AACvD,IAAA,GAAA,CAAI,iBAAoB,GAAA,IAAA,CAAA;AAExB,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,gBAAkB,EAAA,GAAA,CAAI,gBAAmB,GAAA,GAAA,CAAI,mBAAmB,IAAK,CAAA,wBAAA,EAAA;AAAA,MACrE,cAAc,GAAI,CAAA,YAAA;AAAA,MAClB,gBAAgB,GAAI,CAAA,cAAA;AAAA,MACpB,YAAA,EAAc,IAAI,WAAe,IAAA,GAAA,CAAI,YAAY,QAAW,GAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,MAAS,GAAA,EAAA;AAAA,MAC9F,qBAAqB,GAAI,CAAA,mBAAA;AAAA,MACzB,qBAAA,EAAuB,IAAI,WAAe,IAAA,GAAA,CAAI,YAAY,QAAW,GAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,YAAe,GAAA,EAAA;AAAA,KAAA,CAAA;AAG/G,IAAA,IAAA,CAAK,KAAM,CAAA,mBAAA,CAAoB,OAAQ,CAAA,CAAC,kBAAuB,KAAA;AAC7D,MAAA,kBAAA,CAAmB,aAAgB,GAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAIhC,iBAAoB,GAAA;AACzB,IAAA,IAAA,CAAK,KAAM,CAAA,gBAAA,CAAiB,GAAK,CAAA,CAAA,IAAA,CAAK,MAAM;AAC1C,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,YAAc,EAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,MAAA;AAAA,QACtD,qBAAuB,EAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAsF9D,MAAwC,GAAA;AAC7C,IAAA,MAAM,2BAA2B,IAAK,CAAA,wBAAA,CAAA;AACtC,IAAA,MAAM,8BAA8B,IAAK,CAAA,2BAAA,CAAA;AACzC,IAAA,MAAM,sCAAsC,IAAK,CAAA,mCAAA,CAAA;AACjD,IAAA,MAAM,+BAA+B,IAAK,CAAA,4BAAA,CAAA;AAC1C,IAAA,MAAM,qBAAqB,IAAK,CAAA,kBAAA,CAAA;AAChC,IAAA,MAAM,uBAAuB,IAAK,CAAA,oBAAA,CAAA;AAClC,IAAA,MAAM,mBACJ,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,SAAA,CAAU,SAAS,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,SAAA,CAAU,MAAM,YACrE,GAAA,IAAA,CAAK,MAAM,OAAQ,CAAA,SAAA,CAAU,MAAM,YACnC,GAAA,EAAA,CAAA;AAEN,IAAA,MAAM,qBAAqB,IAAK,CAAA,KAAA,CAAM,YAAa,CAAA,GAAA,CAAI,SAAU,KAAO,EAAA;AACtE,MAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,MAAI,IAAA,KAAA,CAAM,WAAe,IAAA,KAAA,CAAM,WAAa,EAAA;AAC1C,QAAM,GAAA,GAAA,KAAA,CAAM,cAAc,YAAe,GAAA,sBAAA,CAAA;AAAA,OAAA;AAE3C,MAAA,OAAO,EAAE,KAAO,EAAA,CAAA,EAAG,QAAQ,KAAM,CAAA,OAAA,CAAA,CAAA,CAAA,EAAY,OAAO,KAAM,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG5D,IAAA,MAAM,uBAAuB,gBACzB,GAAA,gBAAA,CAAiB,GAAI,CAAA,SAAU,aAAa,KAAO,EAAA;AACjD,MAAA,2CAAQ,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,KAAA;AAAA,OAAQ,EAAA,WAAA,CAAA,CAAA;AAAA,KAE1B,CAAA,GAAA,EAAA,CAAA;AAEJ,IAAM,MAAA,uBAAA,uCACH,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,qBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAD,EAAA;AAAA,MAAG,SAAU,EAAA,4BAAA;AAAA,KAAiC,CAAA,EAAA,qGAAA,CAAA,sCAG/C,IAAD,EAAA,IAAA,EAAK,uCACJ,KAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACA,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,GAAD,EAAA;AAAA,MAAG,SAAU,EAAA,WAAA;AAAA,KAAY,EAAA,4EAAA,CAAA,CAAA,CAAA;AAI7B,IAAA,MAAM,wBAAwB,IAAK,CAAA,KAAA,CAAM,qBAAsB,CAAA,MAAA,uCAC5D,QAAD,EAAA;AAAA,MACE,SAAU,EAAA,8BAAA;AAAA,MACV,cAAa,EAAA,gCAAA;AAAA,MACb,SAAS,IAAK,CAAA,sBAAA;AAAA,KAAA,sCAEb,MAAD,EAAA;AAAA,MAAM,SAAU,EAAA,+BAAA;AAAA,KAAkC,CAAA,EAAA,8BAAA,CAAA,uCAInD,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAO,KAAM,EAAA,SAAA;AAAA,KAAU,EAAA,2DAAA,CAAA,CAAA,CAAA;AAI3B,IAAA,MAAM,wBAAwB,IAAK,CAAA,KAAA,CAAM,qBAAsB,CAAA,GAAA,CAAI,SAAU,WAAa,EAAA;AACxF,MAAA,OAAO,EAAE,KAAA,EAAO,CAAG,EAAA,WAAA,CAAA,CAAA,EAAe,KAAO,EAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG3C,IAAA,MAAM,oBAAoB,IAAK,CAAA,KAAA,CAAM,oBAAoB,GAAI,CAAA,SAAU,SAAS,KAAO,EAAA;AACrF,MAAA,2CACG,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,KAAA;AAAA,OAAA,sCACN,IAAD,EAAA;AAAA,QAAI,cAAa,EAAA,6BAAA;AAAA,OAAA,sCACd,cAAD,EAAA;AAAA,QACE,WAAY,EAAA,iCAAA;AAAA,QACZ,OAAS,EAAA,qBAAA;AAAA,QACT,KAAA,EAAO,QAAQ,WAAY,CAAA,QAAA,EAAA;AAAA,QAC3B,QAAU,EAAA,CAAC,CAAc,KAAA,mCAAA,CAAoC,KAAO,EAAA,CAAA,CAAA;AAAA,QACpE,SAAW,EAAA,KAAA;AAAA,OAAA,CAAA,CAAA,kBAGd,KAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,QACE,cAAa,EAAA,iCAAA;AAAA,QACb,IAAK,EAAA,QAAA;AAAA,QACL,SAAU,EAAA,+BAAA;AAAA,QACV,QAAU,EAAA,IAAA;AAAA,QACV,KAAA,EAAO,QAAQ,aAAc,CAAA,QAAA,EAAA;AAAA,QAC7B,UAAU,CAAC,CAAA,KAAM,4BAA6B,CAAA,KAAA,EAAO,EAAE,MAAO,CAAA,aAAA,CAAA;AAAA,OAAA,CAAA,CAAA,kBAGjE,KAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,QAAK,SAAU,EAAA,qBAAA;AAAA,OAAA,sCACZ,GAAD,EAAA;AAAA,QACE,SAAU,EAAA,mBAAA;AAAA,QACV,cAAa,EAAA,mCAAA;AAAA,QACb,OAAA,EAAS,MAAM,wBAAyB,CAAA,KAAA,CAAA;AAAA,OAAA,sCAEvC,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,2BAAA;AAAA,OAAA,CAAA,sCACf,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,SAAA;AAAA,OAAU,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAQtC,IAAA,2CACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,iCAAA;AAAA,KACZ,EAAA,gBAAA,CAAiB,SAAS,CAAI,mBAAA,KAAA,CAAA,aAAA,CAAC,OAAD,IAAM,EAAA,uBAAA,CAAA,GAAiC,EACtE,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,iBAAA,CAAA,sCACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,2BAAA;AAAA,KAAA,CAAA,CAAA,sCAEf,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,UAAA;AAAA,MAAW,cAAa,EAAA,gCAAA;AAAA,KAAA,sCACpC,cAAD,EAAA;AAAA,MACE,WAAY,EAAA,2BAAA;AAAA,MACZ,OAAS,EAAA,kBAAA;AAAA,MACT,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,gBAAiB,CAAA,OAAA;AAAA,MACnC,QAAA,EAAU,CAAC,CAAc,KAAA;AACvB,QAA4B,2BAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAE9B,SAAW,EAAA,KAAA;AAAA,KAAA,CAAA,CAAA,CAAA,sCAIhB,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,eAAA,CAAA,sCACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,oCAAA;AAAA,KAAA,CAAA,CAAA,sCAEf,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,UAAA;AAAA,MAAW,KAAA,EAAO,EAAE,KAAO,EAAA,OAAA,EAAA;AAAA,KAAA,sCACvC,OAAD,EAAA;AAAA,MACE,cAAa,EAAA,8BAAA;AAAA,MACb,IAAK,EAAA,QAAA;AAAA,MACL,SAAU,EAAA,+BAAA;AAAA,MACV,QAAU,EAAA,KAAA;AAAA,MACV,KAAA,EAAO,KAAK,KAAM,CAAA,YAAA;AAAA,MAClB,QAAU,EAAA,CAAC,CAAM,KAAA,kBAAA,CAAmB,EAAE,MAAO,CAAA,aAAA,CAAA;AAAA,KAAA,CAAA,CAAA,CAAA,sCAIlD,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,iBAAA,CAAA,sCACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,8BAAA;AAAA,KAAA,CAAA,CAAA,sCAEf,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,UAAA;AAAA,MAAW,KAAA,EAAO,EAAE,KAAO,EAAA,OAAA,EAAA;AAAA,KAAA,sCACvC,OAAD,EAAA;AAAA,MACE,cAAa,EAAA,gCAAA;AAAA,MACb,IAAK,EAAA,QAAA;AAAA,MACL,SAAU,EAAA,+BAAA;AAAA,MACV,QAAU,EAAA,KAAA;AAAA,MACV,KAAA,EAAO,KAAK,KAAM,CAAA,cAAA;AAAA,MAClB,QAAU,EAAA,CAAC,CAAM,KAAA,oBAAA,CAAqB,EAAE,MAAO,CAAA,aAAA,CAAA;AAAA,KAAA,CAAA,CAAA,CAAA,sCAIpD,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,uBAAA,CAAA,sCACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,yBAAA;AAAA,KAAA,CAAA,CAAA,sCAEf,MAAD,EAAA;AAAA,MAAM,IAAK,EAAA,iCAAA;AAAA,KAAA,sCACR,OAAD,EAAA;AAAA,MAAO,SAAU,EAAA,mCAAA;AAAA,KAAA,kBACd,KAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAD,EAAA;AAAA,MAAI,GAAI,EAAA,QAAA;AAAA,KAAA,sCACL,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,cAAA,sCAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,8BAAA;AAAA,KAAA,CAAA,CAAA,sCAEf,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,aAAA,sCAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,8BAAA;AAAA,KAAA,CAAA,CAAA,kBAEf,KAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAGJ,CAAA,CAAA,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,SAAD,IAAQ,EAAA,iBAAA,CAAA,kBACP,KAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,sCACG,IAAD,EAAA;AAAA,MAAI,OAAS,EAAA,CAAA;AAAA,KAAI,EAAA,qBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAW5B,MAAM,eAAkB,GAAA,4DAAA,CAAA;AAC/B,MAAO,CAAA,eAAA,EAAiB,EAAI,CAAA,CAAA,SAAA,CAC1B,gBACA,EAAA,aAAA,CAAc,kBAAkB,SAAW,EAAA,gBAAA,CAAA,EAAmB,CAAC,SAAA,EAAW,eAAiB,EAAA,kBAAA,CAAA,CAAA,CAAA;;ACrVtF,MAAM,8EACX,GAAA,wEAAA,CAAA;AAEF,MAAO,CAAA,8EAAA,EAAgF,EAAI,CAAA,CAAA,SAAA,CACzF,iCACA,EAAA;AAAA,EACE,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,GAAA;AAAA,IACT,WAAa,EAAA,GAAA;AAAA,IACb,qBAAuB,EAAA,GAAA;AAAA,IACvB,aAAe,EAAA,GAAA;AAAA,IACf,gBAAkB,EAAA,GAAA;AAAA,GAAA;AAAA,EAEpB,WAAa,EAAA,yFAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACTV,MAAM,6EACX,GAAA,mDAAA,CAAA;AAEF,OAAA,CACG,OAAO,6EAA+E,EAAA;AAAA,EACrF,kBAAA;AAAA,EACA,oBAAA;AAAA,CAAA,CAAA,CAED,WAAW,iCAAmC,EAAA;AAAA,EAC7C,QAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAU,MAAA,EAAQ,WAAa,EAAA,cAAA,EAAgB,MAAQ,EAAA;AACrD,IAAQ,OAAA,CAAA,MAAA,CACN,IACA,EAAA,WAAA,CAAY,oBAAsB,EAAA;AAAA,MAChC,MAAA;AAAA,MACA,cAAA;AAAA,MACA,MAAA;AAAA,KAAA,CAAA,CAAA,CAAA;AAIJ,IAAO,MAAA,CAAA,MAAA,CAAO,aAAe,EAAA,SAAU,MAAQ,EAAA;AAC7C,MAAA,IAAI,MAAQ,EAAA;AACV,QAAA,WAAA,CAAY,SAAU,CAAA,eAAA,CAAA,CAAA;AACtB,QAAA,WAAA,CAAY,YAAa,CAAA,eAAA,CAAA,CAAA;AAAA,OACpB,MAAA;AACL,QAAA,WAAA,CAAY,cAAe,CAAA,eAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AChC9B,MAAM,wBAA2B,GAAA,8DAAA,CAAA;AACxC,MAAO,CAAA,wBAAA,EAA0B,EAAI,CAAA,CAAA,SAAA,CAAU,uBAAyB,EAAA;AAAA,EACtE,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,GAAA;AAAA,IACT,WAAa,EAAA,GAAA;AAAA,GAAA;AAAA,EAEf,WAAa,EAAA,qEAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACkBR,MAAA,aAAA,SAA4B,MAAM,SAAoD,CAAA;AAAA,EAC3F,YAAY,KAA4B,EAAA;AACtC,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AAkDA,IAAA,IAAA,CAAA,iBAAA,GAAoB,CAAC,cAAmC,KAAA;AAC9D,MAAA,MAAM,qBAAqB,cAAe,CAAA,KAAA,CAAA;AAC1C,MAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AACvB,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,aAAe,EAAA,kBAAA,CAAA,CAAA;AACxC,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,WAAa,EAAA,kBAAA;AAAA,QACb,oBACE,EAAA,GAAA,CAAI,WAAe,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,IAAY,GAAI,CAAA,WAAA,CAAY,QAAS,CAAA,WAAA,GACpE,GAAI,CAAA,WAAA,CAAY,SAAS,WACzB,GAAA,EAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIF,IAAA,IAAA,CAAA,oBAAA,GAAuB,CAAC,iBAAsC,KAAA;AACpE,MAAM,MAAA,qBAAA,GAAwB,MAAM,OAAQ,CAAA,iBAAA,CAAA,GACxC,kBAAkB,GAAI,CAAA,CAAC,cAAmB,KAAA,cAAA,CAAe,KACzD,CAAA,GAAA,EAAA,CAAA;AACJ,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,oBAAsB,EAAA,qBAAA,CAAA,CAAA;AAC/C,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,kBAAoB,EAAA,qBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG9B,IAAA,IAAA,CAAA,iBAAA,GAAoB,CAAC,cAAmC,KAAA;AAC9D,MAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AACvB,MAAM,MAAA,kBAAA,GAAqB,MAAM,OAAQ,CAAA,cAAA,CAAA,GACrC,eAAe,GAAI,CAAA,CAAC,UAAe,KAAA,UAAA,CAAW,KAC9C,CAAA,GAAA,EAAA,CAAA;AACJ,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,aAAe,EAAA,kBAAA,CAAA,CAAA;AACxC,MAAA,GAAA,CAAI,iBAAkB,CAAA,GAAA,CAAA,CAAA;AACtB,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,WAAa,EAAA,kBAAA;AAAA,QACb,uBACE,EAAA,GAAA,CAAI,WAAe,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,IAAY,GAAI,CAAA,WAAA,CAAY,QAAS,CAAA,kBAAA,GACpE,GAAI,CAAA,WAAA,CAAY,SAAS,kBACzB,GAAA,EAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIF,IAAA,IAAA,CAAA,8BAAA,GAAiC,CAAC,WAAyB,KAAA;AACjE,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,0BAA4B,EAAA,WAAA,CAAA,CAAA;AACrD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,wBAA0B,EAAA,WAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAxF1C,IAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AAEvB,IAAA,IAAI,kBAA+B,GAAA,EAAA,CAAA;AACnC,IAAA,IAAI,GAAI,CAAA,WAAA,IAAe,GAAI,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AACjD,MAAA,kBAAA,GAAqB,GAAI,CAAA,WAAA,CAAA;AAAA,KAAA;AAG3B,IAAA,IAAI,GAAI,CAAA,UAAA,IAAc,GAAI,CAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AAC/C,MAAA,kBAAA,CAAmB,KAAK,GAAI,CAAA,UAAA,CAAA,CAAA;AAC5B,MAAA,GAAA,CAAI,UAAa,GAAA,EAAA,CAAA;AAAA,KAAA;AAGnB,IAAI,GAAA,CAAA,WAAA,GAAc,SAAS,kBAAoB,EAAA,OAAA,CAAA,CAAA;AAE/C,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,0BAA0B,GAAI,CAAA,wBAAA;AAAA,MAC9B,aAAa,GAAI,CAAA,WAAA;AAAA,MACjB,qBAAA,EAAuB,IAAI,WAAe,IAAA,GAAA,CAAI,YAAY,YAAe,GAAA,GAAA,CAAI,YAAY,YAAe,GAAA,EAAA;AAAA,MACxG,oBAAoB,GAAI,CAAA,kBAAA;AAAA,MACxB,uBACE,EAAA,GAAA,CAAI,WAAe,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,IAAY,GAAI,CAAA,WAAA,CAAY,QAAS,CAAA,kBAAA,GACpE,GAAI,CAAA,WAAA,CAAY,SAAS,kBACzB,GAAA,EAAA;AAAA,MACN,aAAa,GAAI,CAAA,WAAA;AAAA,MACjB,oBACE,EAAA,GAAA,CAAI,WAAe,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,IAAY,GAAI,CAAA,WAAA,CAAY,QAAS,CAAA,WAAA,GACpE,GAAI,CAAA,WAAA,CAAY,SAAS,WACzB,GAAA,EAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAIH,iBAAoB,GAAA;AACzB,IAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AAEvB,IAAA,IAAA,CAAK,KAAM,CAAA,gBAAA,CAAiB,GAAK,CAAA,CAAA,IAAA,CAAK,MAAM;AAC1C,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,qBAAA,EAAuB,IAAI,WAAe,IAAA,GAAA,CAAI,YAAY,YAAe,GAAA,GAAA,CAAI,YAAY,YAAe,GAAA,EAAA;AAAA,QACxG,uBACE,EAAA,GAAA,CAAI,WAAe,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,IAAY,GAAI,CAAA,WAAA,CAAY,QAAS,CAAA,kBAAA,GACpE,GAAI,CAAA,WAAA,CAAY,SAAS,kBACzB,GAAA,EAAA;AAAA,QACN,oBACE,EAAA,GAAA,CAAI,WAAe,IAAA,GAAA,CAAI,WAAY,CAAA,QAAA,IAAY,GAAI,CAAA,WAAA,CAAY,QAAS,CAAA,WAAA,GACpE,GAAI,CAAA,WAAA,CAAY,SAAS,WACzB,GAAA,EAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EA+CL,MAA4C,GAAA;AACjD,IAAA,MAAM,iCAAiC,IAAK,CAAA,8BAAA,CAAA;AAC5C,IAAA,MAAM,oBAAoB,IAAK,CAAA,iBAAA,CAAA;AAC/B,IAAA,MAAM,uBAAuB,IAAK,CAAA,oBAAA,CAAA;AAClC,IAAA,MAAM,oBAAoB,IAAK,CAAA,iBAAA,CAAA;AAE/B,IAAA,MAAM,wBAAwB,IAAK,CAAA,KAAA,CAAM,qBAAsB,CAAA,GAAA,CAAI,SAAU,WAAa,EAAA;AACxF,MAAA,OAAO,EAAE,KAAA,EAAO,CAAG,EAAA,WAAA,CAAA,CAAA,EAAe,KAAO,EAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG3C,IAAA,MAAM,0BAA0B,IAAK,CAAA,KAAA,CAAM,uBAAwB,CAAA,GAAA,CAAI,SAAU,aAAe,EAAA;AAC9F,MAAA,OAAO,EAAE,KAAA,EAAO,CAAG,EAAA,aAAA,CAAA,CAAA,EAAiB,KAAO,EAAA,aAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG7C,IAAA,MAAM,uBAAuB,IAAK,CAAA,KAAA,CAAM,oBAAqB,CAAA,GAAA,CAAI,SAAU,UAAY,EAAA;AACrF,MAAO,OAAA,EAAE,OAAO,CAAG,EAAA,UAAA,CAAW,YAAY,UAAW,CAAA,KAAA,CAAA,CAAA,CAAA,EAAU,OAAO,UAAW,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGnF,IAAA,MAAM,oBAAoB,IAAK,CAAA,KAAA,CAAM,oBAAqB,CAAA,MAAA,uCACvD,cAAD,EAAA;AAAA,MACE,KAAO,EAAA,IAAA;AAAA,MACP,OAAS,EAAA,oBAAA;AAAA,MACT,KAAA,EAAO,KAAK,KAAM,CAAA,WAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAc,KAAA;AACvB,QAAkB,iBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,uCAIrB,KAAD,EAAA;AAAA,MAAO,KAAM,EAAA,SAAA;AAAA,KAAU,EAAA,4EAAA,CAAA,CAAA;AAGzB,IAAA,MAAM,wBAAwB,IAAK,CAAA,KAAA,CAAM,uBAAwB,CAAA,MAAA,uCAC9D,cAAD,EAAA;AAAA,MACE,KAAO,EAAA,IAAA;AAAA,MACP,OAAS,EAAA,uBAAA;AAAA,MACT,KAAA,EAAO,KAAK,KAAM,CAAA,kBAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAc,KAAA;AACvB,QAAqB,oBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,uCAIxB,KAAD,EAAA;AAAA,MAAO,KAAM,EAAA,SAAA;AAAA,KAAU,EAAA,yDAAA,CAAA,CAAA;AAGzB,IAAA,MAAM,gBACJ,IAAK,CAAA,KAAA,CAAM,WAAgB,KAAA,QAAA,uCACxB,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,YAAA,CAAA,sCACF,SAAD,EAAA;AAAA,MAAW,GAAI,EAAA,YAAA;AAAA,KAAA,CAAA,CAAA,sCAEhB,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,UAAA;AAAA,MAAW,cAAa,EAAA,uBAAA;AAAA,KACpC,EAAA,iBAAA,CAAA,CAAA,sCAIJ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,iBAAA,CAAA,sCACF,SAAD,EAAA;AAAA,MAAW,GAAI,EAAA,oBAAA;AAAA,KAAA,CAAA,CAAA,sCAEhB,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,UAAA;AAAA,MAAW,cAAa,EAAA,2BAAA;AAAA,KACpC,EAAA,qBAAA,CAAA,CAAA,sCAIJ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,6BAAA,CAAA,sCACF,SAAD,EAAA;AAAA,MAAW,GAAI,EAAA,cAAA;AAAA,KAAA,CAAA,CAAA,sCAEhB,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,gBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,MACE,cAAa,EAAA,yCAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,KAAM,EAAA,MAAA;AAAA,MACN,EAAG,EAAA,8BAAA;AAAA,MACH,OAAA,EAAS,IAAK,CAAA,KAAA,CAAM,wBAA6B,KAAA,IAAA;AAAA,MACjD,QAAA,EAAU,MAAM,8BAA+B,CAAA,IAAA,CAAA;AAAA,KAC/C,CAAA,EAAA,KAAA,CAAA,CAAA,sCAIL,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,gBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,MACE,cAAa,EAAA,0CAAA;AAAA,MACb,IAAK,EAAA,OAAA;AAAA,MACL,KAAM,EAAA,OAAA;AAAA,MACN,EAAG,EAAA,+BAAA;AAAA,MACH,OAAA,EAAS,IAAK,CAAA,KAAA,CAAM,wBAA6B,KAAA,KAAA;AAAA,MACjD,QAAA,EAAU,MAAM,8BAA+B,CAAA,KAAA,CAAA;AAAA,KAC/C,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,uCAOT,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAAA,CAAA,CAAA;AAGnB,IAAA,2CACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,kCAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,sCACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,yBAAA;AAAA,KAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,cAAA,CAAA,sCACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,iBAAA;AAAA,KAAA,CAAA,CAAA,sCAEf,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,UAAA;AAAA,MAAW,cAAa,EAAA,wBAAA;AAAA,KAAA,sCACpC,cAAD,EAAA;AAAA,MACE,WAAY,EAAA,kCAAA;AAAA,MACZ,OAAS,EAAA,qBAAA;AAAA,MACT,KAAA,EAAO,KAAK,KAAM,CAAA,WAAA;AAAA,MAClB,QAAA,EAAU,CAAC,CAAc,KAAA;AACvB,QAAkB,iBAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAM3B,CAAA,CAAA,CAAA,CAAA,EAAA,aAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAMF,MAAM,oBAAuB,GAAA,6DAAA,CAAA;AACpC,MAAA,CAAO,sBAAsB,EAAI,CAAA,CAAA,SAAA,CAC/B,sBACA,aAAc,CAAA,iBAAA,CAAkB,eAAe,oBAAuB,CAAA,EAAA;AAAA,EACpE,SAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,CAAA,CAAA,CAAA;;AChOG,MAAA,gBAAA,SAA+BA,eAAM,SAA0D,CAAA;AAAA,EACpG,YAAY,KAA+B,EAAA;AACzC,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AAyBA,IAAA,IAAA,CAAA,oBAAA,GAAuB,MAAiD;AAC9E,MAAA,MAAM,wBAAwB,IAAI,GAAA,EAAA,CAAA;AAClC,MAAA,IAAA,CAAK,MAAM,OAAQ,CAAA,WAAA,CAAY,SAAS,0BAA2B,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAChF,QAAsB,qBAAA,CAAA,GAAA,CAAI,EAAE,WAAa,EAAA,CAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAG3C,MAAO,OAAA,qBAAA,CAAA;AAAA,KAAA,CAAA;AAGD,IAAA,IAAA,CAAA,gBAAA,GAAmB,MAAoC;AAC7D,MAAO,OAAA;AAAA,QACL,OAAS,EAAA,EAAA;AAAA,QACT,MAAQ,EAAA,EAAA;AAAA,QACR,IAAM,EAAA,EAAA;AAAA,QACN,EAAI,EAAA,EAAA;AAAA,QACJ,GAAK,EAAA,EAAA;AAAA,QACL,WAAa,EAAA,EAAA;AAAA,OAAA,CAAA;AAAA,KAAA,CAAA;AAIT,IAAiC,IAAA,CAAA,8BAAA,GAAA,CAAC,OAAe,WAAgC,KAAA;AACvF,MAAA,MAAM,cAAc,IAAK,CAAA,oBAAA,EAAA,CAAA;AACzB,MAAI,IAAA,2BAAA,GAA8B,WAAY,CAAA,GAAA,CAAI,WAAY,CAAA,KAAA,CAAA,CAAA;AAE9D,MAAA,IAAI,CAAC,2BAA6B,EAAA;AAChC,QAAA,2BAAA,GAA8B,IAAK,CAAA,gBAAA,EAAA,CAAA;AAAA,OAAA;AAGrC,MAAM,MAAA,mBAAA,GAAsB,KAAK,KAAM,CAAA,4BAAA,CAAA;AACvC,MAAA,MAAM,oBAAoB,mBAAoB,CAAA,KAAA,CAAA,CAAA;AAC9C,MAAA,iBAAA,CAAkB,QAAW,GAAA,2BAAA,CAAA;AAC7B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,8BAAgC,EAAA,mBAAA,CAAA,CAAA;AACzD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,4BAA8B,EAAA,mBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGxC,IAA6B,IAAA,CAAA,0BAAA,GAAA,CAAC,OAAe,UAAuB,KAAA;AAC1E,MAAM,MAAA,mBAAA,GAAsB,KAAK,KAAM,CAAA,4BAAA,CAAA;AACvC,MAAA,MAAM,qBAAqB,mBAAoB,CAAA,KAAA,CAAA,CAAA;AAC/C,MAAA,kBAAA,CAAmB,aAAgB,GAAA,UAAA,CAAA;AACnC,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,8BAAgC,EAAA,mBAAA,CAAA,CAAA;AACzD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,4BAA8B,EAAA,mBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGxC,IAAsC,IAAA,CAAA,mCAAA,GAAA,CAAC,OAAe,mBAAgC,KAAA;AAC5F,MAAM,MAAA,mBAAA,GAAsB,KAAK,KAAM,CAAA,4BAAA,CAAA;AACvC,MAAA,MAAM,qBAAqB,mBAAoB,CAAA,KAAA,CAAA,CAAA;AAC/C,MAAA,kBAAA,CAAmB,aAAgB,GAAA,mBAAA,CAAA;AACnC,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,8BAAgC,EAAA,mBAAA,CAAA,CAAA;AACzD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,4BAA8B,EAAA,mBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGxC,IAAA,IAAA,CAAA,+BAAA,GAAkC,MAAM;AAC9C,MAAM,MAAA,oBAAA,GAAuB,KAAK,KAAM,CAAA,4BAAA,CAAA;AACxC,MAAA,oBAAA,CAAqB,KAAK,EAAE,QAAA,EAAU,KAAK,gBAAoB,EAAA,EAAA,aAAA,EAAe,IAAI,aAAe,EAAA,EAAA,EAAA,CAAA,CAAA;AACjG,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,4BAA8B,EAAA,oBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGxC,IAAA,IAAA,CAAA,kCAAA,GAAqC,CAAC,KAAkB,KAAA;AAC9D,MAAM,MAAA,mBAAA,GAAsB,KAAK,KAAM,CAAA,4BAAA,CAAA;AACvC,MAAA,mBAAA,CAAoB,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAClC,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,8BAAgC,EAAA,mBAAA,CAAA,CAAA;AACzD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,4BAA8B,EAAA,mBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AArF9C,IAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AAEvB,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,8BAA8B,GAAI,CAAA,4BAAA;AAAA,MAClC,mCAAA,EACE,IAAI,WAAe,IAAA,GAAA,CAAI,YAAY,QAAW,GAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,0BAA6B,GAAA,EAAA;AAAA,MACtG,2BAA2B,GAAI,CAAA,yBAAA;AAAA,KAAA,CAAA;AAGjC,IAAI,IAAA,CAAC,IAAK,CAAA,KAAA,CAAM,yBAA2B,EAAA;AACzC,MAAA,IAAA,CAAK,KAAM,CAAA,4BAAA,CAA6B,OAAQ,CAAA,CAAC,mCAAwC,KAAA;AACvF,QAAA,mCAAA,CAAoC,aAAgB,GAAA,IAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAKnD,iBAAoB,GAAA;AACzB,IAAA,IAAA,CAAK,KAAM,CAAA,gBAAA,CAAiB,GAAK,CAAA,CAAA,IAAA,CAAK,MAAM;AAC1C,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,mCAAqC,EAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,0BAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAqE5E,MAA+C,GAAA;AACpD,IAAA,MAAM,oCAAoC,IAAK,CAAA,kCAAA,CAAA;AAC/C,IAAA,MAAM,iCAAiC,IAAK,CAAA,8BAAA,CAAA;AAC5C,IAAA,MAAM,6BAA6B,IAAK,CAAA,0BAAA,CAAA;AACxC,IAAA,MAAM,sCAAsC,IAAK,CAAA,mCAAA,CAAA;AAEjD,IAAA,MAAM,sBAAsB,IAAK,CAAA,KAAA,CAAM,mCAAoC,CAAA,GAAA,CAAI,SAAU,QAAU,EAAA;AACjG,MAAA,OAAO,EAAE,KAAO,EAAA,CAAA,EAAG,QAAS,CAAA,WAAA,CAAA,CAAA,EAAe,OAAO,QAAS,CAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG7D,IAAM,MAAA,yBAAA,GAA4B,KAAK,KAAM,CAAA,yBAAA,CAAA;AAC7C,IAAA,MAAM,yBAAyB,IAAK,CAAA,KAAA,CAAM,6BAA6B,GAAI,CAAA,SAAU,SAAS,KAAO,EAAA;AACnG,MAAA,oDACG,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,KAAA;AAAA,OAAA,EACN,yBACC,oBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,+CACG,OAAD,EAAA;AAAA,QACE,SAAU,EAAA,uBAAA;AAAA,QACV,WAAY,EAAA,4BAAA;AAAA,QACZ,QAAU,EAAA,IAAA;AAAA,QACV,OAAO,OAAQ,CAAA,aAAA;AAAA,QACf,UAAU,CAAC,CAAA,KAAM,mCAAoC,CAAA,KAAA,EAAO,EAAE,MAAO,CAAA,KAAA,CAAA;AAAA,OAAA,CAAA,CAAA,kBAI1EA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,cAAD,EAAA;AAAA,QACE,WAAY,EAAA,sBAAA;AAAA,QACZ,OAAS,EAAA,mBAAA;AAAA,QACT,KAAA,EAAO,OAAQ,CAAA,QAAA,CAAS,WAAY,CAAA,QAAA,EAAA;AAAA,QACpC,QAAU,EAAA,CAAC,CAAc,KAAA,8BAAA,CAA+B,KAAO,EAAA,CAAA,CAAA;AAAA,QAC/D,SAAW,EAAA,KAAA;AAAA,QACX,QAAU,EAAA,IAAA;AAAA,OAAA,CAAA,CAAA,kBAGbA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,QACE,IAAK,EAAA,QAAA;AAAA,QACL,SAAU,EAAA,+BAAA;AAAA,QACV,QAAU,EAAA,IAAA;AAAA,QACV,OAAO,OAAQ,CAAA,aAAA;AAAA,QACf,UAAU,CAAC,CAAA,KAAM,0BAA2B,CAAA,KAAA,EAAO,EAAE,MAAO,CAAA,aAAA,CAAA;AAAA,OAAA,CAAA,CAAA,kBAG/DA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,QAAK,SAAU,EAAA,qBAAA;AAAA,OAAA,+CACZ,GAAD,EAAA;AAAA,QAAG,SAAU,EAAA,mBAAA;AAAA,QAAoB,OAAA,EAAS,MAAM,iCAAkC,CAAA,KAAA,CAAA;AAAA,OAAA,+CAC/E,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,2BAAA;AAAA,OAAA,CAAA,+CACf,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,SAAA;AAAA,OAAU,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAQtC,IAAA,MAAM,iCAAiC,IAAK,CAAA,KAAA,CAAM,mCAAoC,CAAA,MAAA,gDACnF,QAAD,EAAA;AAAA,MAAQ,SAAU,EAAA,8BAAA;AAAA,MAA+B,SAAS,IAAK,CAAA,+BAAA;AAAA,KAAA,+CAC5D,MAAD,EAAA;AAAA,MAAM,SAAU,EAAA,+BAAA;AAAA,KAAkC,CAAA,EAAA,0BAAA,CAAA,gDAInD,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAO,KAAM,EAAA,SAAA;AAAA,KAAU,EAAA,wDAAA,CAAA,CAAA,CAAA;AAI3B,IAAA,oDACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,iCAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,kBACZA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,+BAAA,CAAA,+CACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,sBAAA;AAAA,KAAA,CAAA,CAAA,+CAEf,MAAD,EAAA;AAAA,MAAM,IAAK,EAAA,qCAAA;AAAA,KAAA,+CACR,OAAD,EAAA;AAAA,MAAO,SAAU,EAAA,mCAAA;AAAA,KACf,kBAAAA,cAAA,CAAA,aAAA,CAAC,SAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,MAAD,IACG,EAAA,yBAAA,iDACE,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,gBAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,mCAAA;AAAA,KAGjB,CAAA,CAAA,EAAA,yBAAA,gDACE,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,UAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,8BAAA;AAAA,KAAA,CAAA,CAAA,gDAGf,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,UAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,8BAAA;AAAA,KAAA,CAAA,CAAA,+CAGjB,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,MAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,mCAAA;AAAA,KAAA,CAAA,CAAA,kBAEfA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAGJ,CAAA,CAAA,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,SAAD,IAAQ,EAAA,sBAAA,CAAA,kBACPA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,+CACG,IAAD,EAAA;AAAA,MAAI,OAAS,EAAA,CAAA;AAAA,KAAI,EAAA,8BAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAW5B,MAAM,uBAA0B,GAAA,mEAAA,CAAA;AACvC,MAAA,CAAO,yBAAyB,EAAI,CAAA,CAAA,SAAA,CAClC,yBACA,aAAc,CAAA,iBAAA,CAAkB,kBAAkB,uBAA0B,CAAA,EAAA;AAAA,EAC1E,SAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,CAAA,CAAA,CAAA;;AC5MG,MAAA,cAAA,SAA6BA,eAAM,SAAsD,CAAA;AAAA,EAC9F,YAAY,KAA6B,EAAA;AACvC,IAAM,KAAA,CAAA,KAAA,CAAA,CAAA;AA8CA,IAAA,IAAA,CAAA,eAAA,GAAkB,MAAoC;AAC5D,MAAA,MAAM,uBAAuB,IAAI,GAAA,EAAA,CAAA;AACjC,MAAA,IAAA,CAAK,MAAM,OAAQ,CAAA,WAAA,CAAY,SAAS,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC5D,QAAqB,oBAAA,CAAA,GAAA,CAAI,EAAE,OAAS,EAAA,CAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAGtC,MAAO,OAAA,oBAAA,CAAA;AAAA,KAAA,CAAA;AAGD,IAAA,IAAA,CAAA,wBAAA,GAA2B,MAAuB;AACxD,MAAO,OAAA;AAAA,QACL,OAAS,EAAA,EAAA;AAAA,QACT,OAAS,EAAA,EAAA;AAAA,QACT,WAAa,EAAA,KAAA;AAAA,QACb,WAAa,EAAA,KAAA;AAAA,QACb,OAAS,EAAA,EAAA;AAAA,QACT,eAAiB,EAAA,EAAA;AAAA,QACjB,OAAS,EAAA,EAAA;AAAA,QACT,QAAU,EAAA,EAAA;AAAA,QACV,UAAY,EAAA,EAAA;AAAA,QACZ,GAAK,EAAA,EAAA;AAAA,OAAA,CAAA;AAAA,KAAA,CAAA;AAID,IAA+B,IAAA,CAAA,4BAAA,GAAA;AAAA,MACrC,oBAAqB,CAAA,UAAA;AAAA,MACrB,oBAAqB,CAAA,YAAA;AAAA,MACrB,oBAAqB,CAAA,yBAAA;AAAA,KAAA,CAAA;AAGf,IAAA,IAAA,CAAA,0BAAA,GAA6B,CAAC,kBAAqC,KAAA;AACzE,MAAM,MAAA,gBAAA,GAAmB,EAAE,UAAY,EAAA,kBAAA,EAAA,CAAA;AACvC,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,wBAA0B,EAAA,gBAAA,CAAA,CAAA;AACnD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,eAAiB,EAAA,gBAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG3B,IAAA,IAAA,CAAA,gBAAA,GAAmB,CAAC,QAA8B,KAAA;AACxD,MAAA,MAAM,cAAc,EAAE,QAAA,EAAA,CAAA;AACtB,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,wBAA0B,EAAA,WAAA,CAAA,CAAA;AACnD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,eAAiB,EAAA,WAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG3B,IAAA,IAAA,CAAA,WAAA,GAAc,MAAM;AAC1B,MAAM,MAAA,OAAA,GAAU,KAAK,KAAM,CAAA,iBAAA,CAAA;AAC3B,MAAA,OAAA,CAAQ,IAAK,CAAA,EAAE,aAAe,EAAA,EAAA,EAAI,kBAAkB,IAAK,CAAA,wBAAA,EAAA,EAAA,CAAA,CAAA;AACzD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,iBAAmB,EAAA,OAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG7B,IAAA,IAAA,CAAA,sBAAA,GAAyB,MAAM;AACrC,MAAM,MAAA,UAAA,GAAa,KAAK,KAAM,CAAA,mBAAA,CAAA;AAC9B,MAAA,UAAA,CAAW,KAAK,EAAE,aAAA,EAAe,EAAI,EAAA,WAAA,EAAa,IAAI,aAAe,EAAA,EAAA,EAAA,CAAA,CAAA;AACrE,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,UAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG/B,IAA6B,IAAA,CAAA,0BAAA,GAAA,CAAC,OAAe,OAAoB,KAAA;AACvE,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,iBAAA,CAAA;AACnC,MAAA,MAAM,gBAAgB,eAAgB,CAAA,KAAA,CAAA,CAAA;AACtC,MAAA,aAAA,CAAc,aAAgB,GAAA,OAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,mBAAqB,EAAA,eAAA,CAAA,CAAA;AAC9C,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,iBAAmB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG7B,IAA8B,IAAA,CAAA,2BAAA,GAAA,CAAC,OAAe,QAA6B,KAAA;AACjF,MAAA,MAAM,WAAW,IAAK,CAAA,eAAA,EAAA,CAAA;AACtB,MAAI,IAAA,mBAAA,GAAsB,QAAS,CAAA,GAAA,CAAI,QAAS,CAAA,KAAA,CAAA,CAAA;AAEhD,MAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,QAAA,mBAAA,GAAsB,IAAK,CAAA,wBAAA,EAAA,CAAA;AAAA,OAAA;AAE7B,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,iBAAA,CAAA;AACnC,MAAA,MAAM,gBAAgB,eAAgB,CAAA,KAAA,CAAA,CAAA;AACtC,MAAA,aAAA,CAAc,gBAAmB,GAAA,mBAAA,CAAA;AACjC,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,mBAAqB,EAAA,eAAA,CAAA,CAAA;AAC9C,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,iBAAmB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG7B,IAAsC,IAAA,CAAA,mCAAA,GAAA,CAAC,OAAe,cAAmC,KAAA;AAC/F,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,mBAAA,CAAA;AACnC,MAAA,MAAM,gBAAgB,eAAgB,CAAA,KAAA,CAAA,CAAA;AACtC,MAAA,aAAA,CAAc,cAAc,cAAe,CAAA,KAAA,CAAA;AAC3C,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,qBAAuB,EAAA,eAAA,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG/B,IAAoC,IAAA,CAAA,iCAAA,GAAA,CAAC,OAAe,eAA4B,KAAA;AACtF,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,mBAAA,CAAA;AACnC,MAAA,MAAM,gBAAgB,eAAgB,CAAA,KAAA,CAAA,CAAA;AACtC,MAAA,aAAA,CAAc,aAAgB,GAAA,eAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,qBAAuB,EAAA,eAAA,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG/B,IAA+B,IAAA,CAAA,4BAAA,GAAA,CAAC,OAAe,UAAuB,KAAA;AAC5E,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,mBAAA,CAAA;AACnC,MAAA,MAAM,gBAAgB,eAAgB,CAAA,KAAA,CAAA,CAAA;AACtC,MAAA,aAAA,CAAc,aAAgB,GAAA,UAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,qBAAuB,EAAA,eAAA,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG/B,IAAA,IAAA,CAAA,aAAA,GAAgB,CAAC,KAAkB,KAAA;AACzC,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,iBAAA,CAAA;AACnC,MAAA,eAAA,CAAgB,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,mBAAqB,EAAA,eAAA,CAAA,CAAA;AAC9C,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,iBAAmB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG7B,IAAA,IAAA,CAAA,wBAAA,GAA2B,CAAC,KAAkB,KAAA;AACpD,MAAM,MAAA,eAAA,GAAkB,KAAK,KAAM,CAAA,mBAAA,CAAA;AACnC,MAAA,eAAA,CAAgB,OAAO,KAAO,EAAA,CAAA,CAAA,CAAA;AAC9B,MAAK,IAAA,CAAA,KAAA,CAAM,cAAc,qBAAuB,EAAA,eAAA,CAAA,CAAA;AAChD,MAAK,IAAA,CAAA,QAAA,CAAS,EAAE,mBAAqB,EAAA,eAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG/B,IAAA,IAAA,CAAA,iCAAA,GAAoC,MAAM;AAChD,MAAA,IAAA,CAAK,MAAM,aACT,CAAA,2CAAA,EACA,CAAC,IAAA,CAAK,MAAM,OAAQ,CAAA,yCAAA,CAAA,CAAA;AAEtB,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,yCAA2C,EAAA,CAAC,IAAK,CAAA,KAAA,CAAM,OAAQ,CAAA,yCAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AArKjE,IAAM,MAAA,GAAA,GAAM,KAAK,KAAM,CAAA,OAAA,CAAA;AACvB,IAAA,IAAI,gBAAmB,GAAA,EAAA,CAAA;AACvB,IAAA,IAAI,GAAI,CAAA,iBAAA,IAAqB,GAAI,CAAA,iBAAA,CAAkB,SAAS,CAAG,EAAA;AAC7D,MAAmB,gBAAA,GAAA,GAAA,CAAI,kBAAkB,CAAG,CAAA,CAAA,aAAA,CAAA;AAAA,KAAA;AAG9C,IAAA,IAAI,kBAA+C,GAAA,EAAA,CAAA;AACnD,IAAA,IAAI,GAAI,CAAA,mBAAA,IAAuB,GAAI,CAAA,mBAAA,CAAoB,SAAS,CAAG,EAAA;AACjE,MAAA,kBAAA,GAAqB,GAAI,CAAA,mBAAA,CAAA;AAAA,KAAA;AAG3B,IAAA,IAAI,GAAI,CAAA,WAAA,IAAe,GAAI,CAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AACjD,MAAA,kBAAA,CAAmB,IAAK,CAAA;AAAA,QACtB,aAAA,EAAe,IAAI,qBAAyB,IAAA,gBAAA;AAAA,QAC5C,aAAa,GAAI,CAAA,WAAA;AAAA,QACjB,eAAe,GAAI,CAAA,aAAA;AAAA,OAAA,CAAA,CAAA;AAErB,MAAA,GAAA,CAAI,WAAc,GAAA,EAAA,CAAA;AAClB,MAAA,GAAA,CAAI,qBAAwB,GAAA,EAAA,CAAA;AAAA,KAAA;AAG9B,IAAI,GAAA,CAAA,mBAAA,GAAsB,SAAS,kBAAoB,EAAA,OAAA,CAAA,CAAA;AAEvD,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,iBAAiB,GAAI,CAAA,sBAAA;AAAA,MACrB,iBAAmB,EAAA,GAAA,CAAI,iBAAoB,GAAA,GAAA,CAAI,iBAAoB,GAAA,EAAA;AAAA,MACnE,qBAAqB,GAAI,CAAA,mBAAA;AAAA,MACzB,qBAAA,EAAuB,IAAI,WAAe,IAAA,GAAA,CAAI,YAAY,QAAW,GAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,YAAe,GAAA,EAAA;AAAA,MAC7G,YAAA,EAAc,IAAI,WAAe,IAAA,GAAA,CAAI,YAAY,QAAW,GAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,MAAS,GAAA,EAAA;AAAA,MAC9F,qBAAA,EAAuB,IAAI,qBAAyB,IAAA,gBAAA;AAAA,MACpD,wBAAwB,GAAI,CAAA,6BAAA;AAAA,MAC5B,2CAA2C,GAAI,CAAA,yCAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAK5C,iBAAoB,GAAA;AACzB,IAAA,IAAA,CAAK,KAAM,CAAA,gBAAA,CAAiB,GAAK,CAAA,CAAA,IAAA,CAAK,MAAM;AAC1C,MAAA,IAAA,CAAK,QAAS,CAAA;AAAA,QACZ,YAAc,EAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,MAAA;AAAA,QACtD,qBAAuB,EAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,YAAY,QAAS,CAAA,YAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAiI9D,MAA6C,GAAA;AAClD,IAAM,MAAA,EAAE,YAAY,IAAK,CAAA,KAAA,CAAA;AACzB,IAAA,MAAM,gBAAgB,IAAK,CAAA,aAAA,CAAA;AAC3B,IAAA,MAAM,2BAA2B,IAAK,CAAA,wBAAA,CAAA;AACtC,IAAA,MAAM,6BAA6B,IAAK,CAAA,0BAAA,CAAA;AACxC,IAAA,MAAM,8BAA8B,IAAK,CAAA,2BAAA,CAAA;AACzC,IAAA,MAAM,oCAAoC,IAAK,CAAA,iCAAA,CAAA;AAC/C,IAAA,MAAM,sCAAsC,IAAK,CAAA,mCAAA,CAAA;AACjD,IAAA,MAAM,+BAA+B,IAAK,CAAA,4BAAA,CAAA;AAC1C,IAAA,MAAM,oCAAoC,IAAK,CAAA,iCAAA,CAAA;AAE/C,IAAA,MAAM,qBAAqB,IAAK,CAAA,KAAA,CAAM,YAAa,CAAA,GAAA,CAAI,SAAU,KAAO,EAAA;AACtE,MAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AACV,MAAI,IAAA,KAAA,CAAM,WAAe,IAAA,KAAA,CAAM,WAAa,EAAA;AAC1C,QAAM,GAAA,GAAA,KAAA,CAAM,cAAc,YAAe,GAAA,sBAAA,CAAA;AAAA,OAAA;AAE3C,MAAA,OAAO,EAAE,KAAO,EAAA,CAAA,EAAG,QAAQ,KAAM,CAAA,OAAA,CAAA,CAAA,CAAA,EAAY,OAAO,KAAM,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG5D,IAAA,MAAM,wBAAwB,IAAK,CAAA,KAAA,CAAM,qBAAsB,CAAA,GAAA,CAAI,SAAU,WAAa,EAAA;AACxF,MAAA,OAAO,EAAE,KAAA,EAAO,CAAG,EAAA,WAAA,CAAA,CAAA,EAAe,KAAO,EAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAG3C,IAAA,MAAM,gBAAgB,IAAK,CAAA,KAAA,CAAM,kBAAkB,GAAI,CAAA,SAAU,SAAS,KAAO,EAAA;AAC/E,MAAA,oDACG,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,KAAA;AAAA,OAAA,kBACNA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,QACE,cAAa,EAAA,yBAAA;AAAA,QACb,SAAU,EAAA,uBAAA;AAAA,QACV,QAAU,EAAA,IAAA;AAAA,QACV,WAAY,EAAA,yBAAA;AAAA,QACZ,KAAA,EAAO,QAAQ,aAAc,CAAA,QAAA,EAAA;AAAA,QAC7B,UAAU,CAAC,CAAA,KAAM,0BAA2B,CAAA,KAAA,EAAO,EAAE,MAAO,CAAA,KAAA,CAAA;AAAA,OAAA,CAAA,CAAA,+CAG/D,IAAD,EAAA;AAAA,QAAI,cAAa,EAAA,0BAAA;AAAA,OAAA,+CACd,cAAD,EAAA;AAAA,QACE,WAAY,EAAA,2BAAA;AAAA,QACZ,OAAS,EAAA,kBAAA;AAAA,QACT,KAAA,EAAO,QAAQ,gBAAiB,CAAA,OAAA;AAAA,QAChC,QAAA,EAAU,CAAC,CAAc,KAAA;AACvB,UAAA,2BAAA,CAA4B,KAAO,EAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,QAErC,SAAW,EAAA,KAAA;AAAA,OAAA,CAAA,CAAA,kBAGdA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,QAAK,SAAU,EAAA,qBAAA;AAAA,OAAA,+CACZ,GAAD,EAAA;AAAA,QACE,SAAU,EAAA,mBAAA;AAAA,QACV,cAAa,EAAA,2BAAA;AAAA,QACb,OAAA,EAAS,MAAM,aAAc,CAAA,KAAA,CAAA;AAAA,OAAA,+CAE5B,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,2BAAA;AAAA,OAAA,CAAA,+CACf,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,SAAA;AAAA,OAAU,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAQtC,IAAA,MAAM,oBAAoB,IAAK,CAAA,KAAA,CAAM,oBAAoB,GAAI,CAAA,SAAU,SAAS,KAAO,EAAA;AACrF,MAAA,oDACG,IAAD,EAAA;AAAA,QAAI,GAAK,EAAA,KAAA;AAAA,OAAA,kBACNA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,QACE,cAAa,EAAA,gCAAA;AAAA,QACb,SAAU,EAAA,uBAAA;AAAA,QACV,QAAU,EAAA,IAAA;AAAA,QACV,WAAY,EAAA,4BAAA;AAAA,QACZ,KAAA,EAAO,QAAQ,aAAc,CAAA,QAAA,EAAA;AAAA,QAC7B,UAAU,CAAC,CAAA,KAAM,iCAAkC,CAAA,KAAA,EAAO,EAAE,MAAO,CAAA,KAAA,CAAA;AAAA,OAAA,CAAA,CAAA,+CAGtE,IAAD,EAAA;AAAA,QAAI,cAAa,EAAA,uBAAA;AAAA,OAAA,+CACd,cAAD,EAAA;AAAA,QACE,WAAY,EAAA,iCAAA;AAAA,QACZ,OAAS,EAAA,qBAAA;AAAA,QACT,KAAA,EAAO,QAAQ,WAAY,CAAA,QAAA,EAAA;AAAA,QAC3B,QAAU,EAAA,CAAC,CAAc,KAAA,mCAAA,CAAoC,KAAO,EAAA,CAAA,CAAA;AAAA,QACpE,SAAW,EAAA,KAAA;AAAA,OAAA,CAAA,CAAA,kBAGdA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,OAAD,EAAA;AAAA,QACE,cAAa,EAAA,2BAAA;AAAA,QACb,IAAK,EAAA,QAAA;AAAA,QACL,SAAU,EAAA,+BAAA;AAAA,QACV,QAAU,EAAA,IAAA;AAAA,QACV,KAAA,EAAO,QAAQ,aAAc,CAAA,QAAA,EAAA;AAAA,QAC7B,UAAU,CAAC,CAAA,KAAM,4BAA6B,CAAA,KAAA,EAAO,EAAE,MAAO,CAAA,aAAA,CAAA;AAAA,OAAA,CAAA,CAAA,kBAGjEA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,QAAK,SAAU,EAAA,qBAAA;AAAA,OAAA,+CACZ,GAAD,EAAA;AAAA,QACE,SAAU,EAAA,mBAAA;AAAA,QACV,cAAa,EAAA,6BAAA;AAAA,QACb,OAAA,EAAS,MAAM,wBAAyB,CAAA,KAAA,CAAA;AAAA,OAAA,+CAEvC,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,2BAAA;AAAA,OAAA,CAAA,+CACf,MAAD,EAAA;AAAA,QAAM,SAAU,EAAA,SAAA;AAAA,OAAU,EAAA,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAQtC,IAAA,MAAM,wBAAwB,IAAK,CAAA,KAAA,CAAM,qBAAsB,CAAA,MAAA,gDAC5D,QAAD,EAAA;AAAA,MACE,SAAU,EAAA,8BAAA;AAAA,MACV,cAAa,EAAA,0BAAA;AAAA,MACb,SAAS,IAAK,CAAA,sBAAA;AAAA,KAAA,+CAEb,MAAD,EAAA;AAAA,MAAM,SAAU,EAAA,+BAAA;AAAA,KAAkC,CAAA,EAAA,8BAAA,CAAA,gDAInD,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAO,KAAM,EAAA,SAAA;AAAA,KAAU,EAAA,2DAAA,CAAA,CAAA,CAAA;AAI3B,IAAA,oDACG,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,iCAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,WAAA;AAAA,KAAA,+CACZ,6BAAD,EAAA;AAAA,MACE,QAAA,EAAU,IAAK,CAAA,KAAA,CAAM,eAAgB,CAAA,QAAA;AAAA,MACrC,8BAA8B,IAAK,CAAA,4BAAA;AAAA,MACnC,kBAAA,EAAoB,IAAK,CAAA,KAAA,CAAM,eAAgB,CAAA,UAAA;AAAA,MAC/C,KAAM,EAAA,UAAA;AAAA,MACN,OAAQ,EAAA,4BAAA;AAAA,MACR,0BAA4B,EAAA,CAAC,QAAgC,KAAA,IAAA,CAAK,2BAA2B,QAAS,CAAA,EAAA,CAAA;AAAA,MACtG,kBAAkB,IAAK,CAAA,gBAAA;AAAA,MACvB,QAAA,EAAU,QAAQ,SAAU,CAAA,QAAA;AAAA,MAC5B,KAAA,EAAO,QAAQ,SAAU,CAAA,YAAA;AAAA,KAAA,CAAA,CAAA,CAAA,+CAK9B,gBAAD,EAAA;AAAA,MACE,cAAe,EAAA,4BAAA;AAAA,MACf,KAAM,EAAA,uBAAA;AAAA,MACN,OAAQ,EAAA,wBAAA;AAAA,MACR,YAAc,EAAA,CAAA;AAAA,MACd,YAAc,EAAA,CAAA;AAAA,KAAA,+CAEb,aAAD,EAAA;AAAA,MACE,OAAA,EAAS,QAAQ,yCAA8C,KAAA,IAAA;AAAA,MAC/D,UAAU,MAAM;AACd,QAAA,iCAAA,EAAA,CAAA;AAAA,OAAA;AAAA,MAEF,IAAK,EAAA,uCAAA;AAAA,KAAA,CAAA,CAAA,+CAIR,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,kBACZA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,oBAAA,CAAA,+CACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,uBAAA;AAAA,KAAA,CAAA,CAAA,+CAEf,MAAD,EAAA;AAAA,MAAM,IAAK,EAAA,oCAAA;AAAA,KAAA,+CACR,OAAD,EAAA;AAAA,MAAO,SAAU,EAAA,mCAAA;AAAA,KAAA,kBACdA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA;AAAA,MAAI,GAAI,EAAA,QAAA;AAAA,KAAA,+CACL,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,gBAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,0BAAA;AAAA,KAAA,CAAA,CAAA,+CAEf,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,iBAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,2BAAA;AAAA,KAAA,CAAA,CAAA,kBAEfA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAGJ,CAAA,CAAA,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,SAAD,IAAQ,EAAA,aAAA,CAAA,kBACPA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,+CACG,IAAD,EAAA;AAAA,MAAI,OAAS,EAAA,CAAA;AAAA,KAAA,+CACV,QAAD,EAAA;AAAA,MACE,SAAU,EAAA,8BAAA;AAAA,MACV,cAAa,EAAA,wBAAA;AAAA,MACb,SAAS,IAAK,CAAA,WAAA;AAAA,KAAA,+CAEb,MAAD,EAAA;AAAA,MAAM,SAAU,EAAA,+BAAA;AAAA,KAAkC,CAAA,EAAA,2BAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,+CAS/D,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,YAAA;AAAA,KAAA,+CACZ,KAAD,EAAA;AAAA,MAAK,SAAU,EAAA,eAAA;AAAA,KAAA,kBACZA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAD,IAAG,EAAA,uBAAA,CAAA,+CACF,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,yBAAA;AAAA,KAAA,CAAA,CAAA,+CAEf,MAAD,EAAA;AAAA,MAAM,IAAK,EAAA,sCAAA;AAAA,KAAA,+CACR,OAAD,EAAA;AAAA,MAAO,SAAU,EAAA,mCAAA;AAAA,KAAA,kBACdA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA;AAAA,MAAI,GAAI,EAAA,QAAA;AAAA,KAAA,+CACL,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,gBAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,2BAAA;AAAA,KAAA,CAAA,CAAA,+CAEf,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,cAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,8BAAA;AAAA,KAAA,CAAA,CAAA,+CAEf,IAAD,EAAA;AAAA,MAAI,KAAA,EAAO,EAAE,KAAO,EAAA,KAAA,EAAA;AAAA,KAAS,EAAA,aAAA,+CAE1B,SAAD,EAAA;AAAA,MAAW,EAAG,EAAA,8BAAA;AAAA,KAAA,CAAA,CAAA,kBAEfA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAD,IAGJ,CAAA,CAAA,CAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,SAAD,IAAQ,EAAA,iBAAA,CAAA,kBACPA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAD,IACE,kBAAAA,cAAA,CAAA,aAAA,CAAC,IAAD,EAAA,IAAA,+CACG,IAAD,EAAA;AAAA,MAAI,OAAS,EAAA,CAAA;AAAA,KAAI,EAAA,qBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAW5B,MAAM,qBAAwB,GAAA,iEAAA,CAAA;AACrC,MAAA,CAAO,uBAAuB,EAAI,CAAA,CAAA,SAAA,CAChC,uBACA,aAAc,CAAA,iBAAA,CAAkB,gBAAgB,qBAAwB,CAAA,EAAA;AAAA,EACtE,SAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,CAAA,CAAA,CAAA;;ACtcJ,MAAM,uBAA6C,GAAA;AAAA,EACjD,QAAU,EAAA;AAAA,IACR,OAAS,EAAA,GAAA;AAAA,IACT,WAAa,EAAA,GAAA;AAAA,GAAA;AAAA,EAEf,WAAa,EAAA,kEAAA;AAAA,EACb,YAAY,MAAM;AAAA,GAAA;AAAA,CAAA,CAAA;AAGb,MAAM,6BAAgC,GAAA,kCAAA,CAAA;AAC7C,MAAO,CAAA,6BAAA,EAA+B,EAAI,CAAA,CAAA,SAAA,CAAU,mBAAqB,EAAA,uBAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLlE,MAAM,2DACX,GAAA,qDAAA,CAAA;AAEF,OAAA,CACG,OAAO,2DAA6D,EAAA;AAAA,EACnE,mBAAA;AAAA,EACA,6BAAA;AAAA,CAAA,CAAA,CAED,WAAW,0BAA4B,EAAA;AAAA,EACtC,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAU,MAAA,EAAQ,iBAAmB,EAAA,iBAAA,EAAmB,aAAa,WAAa,EAAA;AAChF,IAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;AACrB,IAAA,MAAA,CAAO,WAAc,GAAA;AAAA,MACnB,GAAA,EAAK,YAAY,QAAS,CAAA,GAAA;AAAA,MAC1B,GAAA,EAAK,YAAY,QAAS,CAAA,GAAA;AAAA,MAC1B,OAAA,EAAS,YAAY,QAAS,CAAA,OAAA;AAAA,MAC9B,OAAS,EAAA,IAAA;AAAA,KAAA,CAAA;AAGX,IAAA,MAAA,CAAO,YAAe,GAAA,EAAA,CAAA;AAEtB,IAAO,MAAA,CAAA,OAAA,GAAU,OAAQ,CAAA,IAAA,CAAK,MAAO,CAAA,WAAA,CAAA,CAAA;AACrC,IAAA,MAAA,CAAO,QAAQ,YAAe,GAAA,WAAA,CAAY,QAAS,CAAA,GAAA,KAAQ,YAAY,QAAS,CAAA,GAAA,CAAA;AAEhF,IAAI,IAAA,WAAA,IAAe,YAAY,UAAY,EAAA;AACzC,MAAA,IAAI,WAAY,CAAA,UAAA,CAAW,8BAAkC,IAAA,WAAA,CAAY,WAAW,kBAAoB,EAAA;AACtG,QAAO,MAAA,CAAA,OAAA,CAAQ,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,OAAA;AAGnD,MAAO,MAAA,CAAA,OAAA,CAAQ,8BAAiC,GAAA,WAAA,CAAY,UAAW,CAAA,8BAAA,CAAA;AAAA,KAAA;AAGzE,IAAA,IAAA,CAAK,UAAU,WAAY;AACzB,MAAA,MAAM,UAAU,MAAO,CAAA,OAAA,CAAA;AACvB,MAAI,IAAA,CAAC,MAAO,CAAA,YAAA,CAAa,QAAU,EAAA;AACjC,QAAO,OAAA,KAAA,CAAA;AAAA,OAAA;AAET,MAAA,OAAO,OAAQ,CAAA,YAAA,GACX,OAAQ,CAAA,GAAA,IAAO,QAAQ,GAAO,IAAA,OAAA,CAAQ,OAAW,IAAA,OAAA,CAAQ,OAAO,OAAQ,CAAA,OAAA,IAAW,OAAQ,CAAA,GAAA,GAC3F,QAAQ,OAAY,KAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAG1B,IAAO,MAAA,CAAA,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,MACnC,WAAA;AAAA,MACA,KAAA,EAAO,cAAc,WAAY,CAAA,IAAA;AAAA,MACjC,aAAe,EAAA,iBAAA;AAAA,KAAA,CAAA,CAAA;AAGjB,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAI,IAAA,CAAC,KAAK,OAAW,EAAA,EAAA;AACnB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAA,IAAI,QAAW,GAAA,EAAE,GAAK,EAAA,MAAA,CAAO,OAAQ,CAAA,GAAA,EAAK,GAAK,EAAA,MAAA,CAAO,OAAQ,CAAA,GAAA,EAAK,OAAS,EAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,EAAA,CAAA;AAC3F,MAAI,IAAA,CAAC,MAAO,CAAA,OAAA,CAAQ,YAAc,EAAA;AAChC,QAAW,QAAA,GAAA,EAAE,GAAK,EAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,EAAS,GAAK,EAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,EAAS,OAAS,EAAA,MAAA,CAAO,OAAQ,CAAA,OAAA,EAAA,CAAA;AAAA,OAAA;AAGjG,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAO,OAAA,iBAAA,CAAkB,iBAAkB,CAAA,WAAA,EAAa,WAAa,EAAA;AAAA,UACnE,QAAA;AAAA,UACA,8BAAA,EAAgC,OAAO,OAAQ,CAAA,8BAAA;AAAA,UAC/C,MAAA,EAAQ,OAAO,OAAQ,CAAA,MAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAI3B,MAAA,MAAA,CAAO,YAAY,MAAO,CAAA,YAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG5B,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAkB,iBAAA,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AC3EnB,MAAM,+DACX,GAAA,uDAAA,CAAA;AAEF,MAAA,CAAO,+DAAiE,EAAA,CAAC,mBAAsB,CAAA,CAAA,CAAA,UAAA,CAC7F,4BACA,EAAA;AAAA,EACE,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,sBAAA;AAAA,EACA,iBAAA;AAAA,EACA,SACE,MACA,EAAA,iBAAA,EACA,mBACA,WACA,EAAA,WAAA,EACA,sBACA,eACA,EAAA;AACA,IAAA,MAAA,CAAO,WAAc,GAAA,WAAA,CAAA;AACrB,IAAO,MAAA,CAAA,oBAAA,GAAuB,qBAAqB,IAAK,CAAA,CAAC,GAAG,CAAM,KAAA,CAAA,CAAE,IAAK,CAAA,aAAA,CAAc,CAAE,CAAA,IAAA,CAAA,CAAA,CAAA;AACzF,IAAO,MAAA,CAAA,eAAA,GAAkB,gBAAgB,IAAK,CAAA,CAAC,GAAG,CAAM,KAAA,CAAA,CAAE,IAAK,CAAA,aAAA,CAAc,CAAE,CAAA,IAAA,CAAA,CAAA,CAAA;AAC/E,IAAA,MAAA,CAAO,YAAe,GAAA,EAAA,CAAA;AAEtB,IAAA,MAAA,CAAO,OAAU,GAAA;AAAA,MACf,YAAc,EAAA,UAAA;AAAA,MACd,eAAiB,EAAA;AAAA,QACf,yBAAyB,WAAY,CAAA,IAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIzC,IAAI,IAAA,WAAA,IAAe,YAAY,UAAY,EAAA;AACzC,MAAA,IAAI,WAAY,CAAA,UAAA,CAAW,8BAAkC,IAAA,WAAA,CAAY,WAAW,kBAAoB,EAAA;AACtG,QAAO,MAAA,CAAA,OAAA,CAAQ,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,OAAA;AAGnD,MAAO,MAAA,CAAA,OAAA,CAAQ,8BAAiC,GAAA,WAAA,CAAY,UAAW,CAAA,8BAAA,CAAA;AAAA,KAAA;AAGzE,IAAA,IAAA,CAAK,UAAU,WAAY;AACzB,MAAA,MAAM,UAAU,MAAO,CAAA,OAAA,CAAA;AACvB,MAAI,IAAA,CAAC,MAAO,CAAA,YAAA,CAAa,QAAU,EAAA;AACjC,QAAO,OAAA,KAAA,CAAA;AAAA,OAAA;AAGT,MAAO,OAAA,OAAA,CAAQ,gBAAgB,sBAA2B,KAAA,KAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG5D,IAAO,MAAA,CAAA,WAAA,GAAc,IAAI,WAAY,CAAA;AAAA,MACnC,WAAA;AAAA,MACA,KAAA,EAAO,cAAc,WAAY,CAAA,IAAA;AAAA,MACjC,aAAe,EAAA,iBAAA;AAAA,KAAA,CAAA,CAAA;AAGjB,IAAA,IAAA,CAAK,WAAW,WAAY;AAC1B,MAAI,IAAA,CAAC,KAAK,OAAW,EAAA,EAAA;AACnB,QAAA,OAAA;AAAA,OAAA;AAGF,MAAA,MAAM,eAAe,WAAY;AAC/B,QAAA,OAAO,iBAAkB,CAAA,mBAAA,CAAoB,WAAa,EAAA,WAAA,EAAa,MAAO,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGhF,MAAA,MAAA,CAAO,YAAY,MAAO,CAAA,YAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG5B,IAAA,IAAA,CAAK,SAAS,WAAY;AACxB,MAAkB,iBAAA,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAGpB,IAAK,IAAA,CAAA,KAAA,GAAQ,SAAU,YAAa,EAAA;AAClC,MAAA,IAAI,CAAC,YAAa,EAAA;AAChB,QAAO,OAAA,EAAA,CAAA;AAAA,OAAA;AAGT,MAAI,IAAA,CAAC,YAAY,CAAA,SAAA,IAAa,CAAC,YAAA,CAAY,SAAU,CAAA,OAAA,IAAW,CAAC,YAAA,CAAY,SAAU,CAAA,OAAA,CAAQ,MAAQ,EAAA;AACrG,QAAA,OAAO,YAAY,CAAA,IAAA,CAAA;AAAA,OAAA;AAGrB,MAAA,OAAO,aAAY,IAAO,GAAA,WAAA,GAAc,YAAY,CAAA,SAAA,CAAU,QAAQ,MAAS,GAAA,GAAA,CAAA;AAAA,KAAA,CAAA;AAGjF,IAAK,IAAA,CAAA,KAAA,GAAQ,SAAU,YAAa,EAAA;AAClC,MAAO,OAAA,YAAA,CAAY,aAAa,wBAA2B,GAAA,uBAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA;;AC7E5B,MAAA,yBAAA,CAAA;AAAA,EAC7B,cAAc,KAAsC,EAAA;AAC1D,IAAI,IAAA,CAAC,MAAM,kBAAoB,EAAA;AAC7B,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,QAAQ,KAAM,CAAA,kBAAA;AAAA,MACP,KAAA,mBAAA;AACH,QAAA,KAAA,CAAM,UAAa,GAAA,MAAA,CAAA;AACnB,QAAA,MAAA;AAAA,MACG,KAAA,sBAAA;AACH,QAAA,KAAA,CAAM,UAAa,GAAA,MAAA,CAAA;AACnB,QAAA,MAAA;AAAA,MACG,KAAA,4BAAA;AACH,QAAA,KAAA,CAAM,UAAa,GAAA,MAAA,CAAA;AACnB,QAAA,MAAA;AAAA,MACG,KAAA,+BAAA;AACH,QAAA,KAAA,CAAM,UAAa,GAAA,MAAA,CAAA;AACnB,QAAA,MAAA;AAAA,KAAA;AAAA,GAAA;AAAA,EAIE,wBAAwB,sBAAsD,EAAA;AACpF,IAAA,sBAAA,CAAuB,QAAW,GAAA,sBAAA,CAAuB,iBAAoB,GAAA,CAAA,GAAI,UAAa,GAAA,UAAA,CAAA;AAC9F,IAAuB,sBAAA,CAAA,aAAA,GAAgB,IAAK,CAAA,GAAA,CAAI,sBAAuB,CAAA,iBAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAGjE,uBAAuB,MAAgD,EAAA;AAC7E,IAAA,MAAM,OAA2B,EAAK,GAAA,MAAA,EAAA,CAAA;AACtC,IAAA,MAAM,mBAAmB,CAAC,CAAA,EAAwB,CAChD,KAAA,CAAA,CAAE,2BAA2B,CAAE,CAAA,wBAAA,CAAA;AACjC,IAAA,MAAM,mBAAmB,CAAC,CAAA,EAAwB,CAChD,KAAA,CAAA,CAAE,2BAA2B,CAAE,CAAA,wBAAA,CAAA;AAEjC,IAAK,IAAA,CAAA,MAAA,GAAS,OAAO,MAAU,IAAA,EAAA,CAAA;AAC/B,IAAA,IAAA,CAAK,MAAO,CAAA,OAAA,CAAQ,CAAC,KAAA,KAAmC,KAAK,aAAc,CAAA,KAAA,CAAA,CAAA,CAAA;AAC3E,IAAA,IAAA,CAAK,uBAAwB,CAAA,IAAA,CAAA,CAAA;AAC7B,IAAA,IAAI,IAAK,CAAA,eAAA,IAAmB,IAAK,CAAA,eAAA,CAAgB,MAAQ,EAAA;AACvD,MAAA,IAAA,CAAK,eAAgB,CAAA,OAAA,CAAQ,CAAC,EAAA,KAA4B,KAAK,uBAAwB,CAAA,EAAA,CAAA,CAAA,CAAA;AACvF,MAAM,MAAA,MAAA,GAAS,OAAO,eAAgB,CAAA,KAAA,CAAM,CAAC,CAAuB,KAAA,CAAA,CAAE,wBAA6B,KAAA,KAAA,CAAA,CAAA,GAC/F,gBACA,GAAA,gBAAA,CAAA;AACJ,MAAA,IAAA,CAAK,gBAAgB,IAAK,CAAA,CAAC,CAAwB,EAAA,CAAA,KAA2B,OAAO,CAAG,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAE1F,IAAO,OAAA,IAAA,CAAA;AAAA,GAAA;AAAA,EAGF,4BAA4B,WAAyD,EAAA;AAC1F,IAAA,MAAM,OAA+B,EAAK,GAAA,WAAA,EAAA,CAAA;AAC1C,IAAA,IAAI,YAAY,eAAiB,EAAA;AAC/B,MAAA,IAAA,CAAK,kBAAkB,WAAY,CAAA,eAAA,CAAgB,IAAI,CAAC,MAAA,KACtD,KAAK,sBAAuB,CAAA,MAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAGhC,IAAO,OAAA,IAAA,CAAA;AAAA,GAAA;AAAA,EAGF,qBAAqB,WAAkE,EAAA;AAC5F,IAAY,WAAA,CAAA,SAAA,CAAU,OAAQ,CAAA,CAAC,QAAwB,KAAA;AACrD,MAAA,QAAA,CAAS,QAAQ,WAAY,CAAA,KAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAE/B,IAAA,OAAO,UAAU,QAAW,EAAA,CAAA,IAAA,CAC1B,CAAC,GAAoC,KAAA,IAAA,CAAK,wBAAwB,WAAa,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAI3E,wBAAwB,WAAsE,EAAA;AACpG,IAAA,OAAO,CAAC,IAAiB,KAAA;AACvB,MAAA,MAAM,QAAQ,IAAK,CAAA,IAAA,CAAK,CAAC,IAAS,KAAA,IAAA,CAAK,OAAO,WAAY,CAAA,KAAA,CAAA,CAAA;AAC1D,MAAY,WAAA,CAAA,OAAA,GAAU,KAAQ,GAAA,KAAA,CAAM,IAAO,GAAA,EAAA,CAAA;AAC3C,MAAO,OAAA,WAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,EAIJ,+CAA+C,IAAgB,EAAA;AAEpE,IAAA,MAAM,UAAU,QAAS,CAAA,EAAE,WAAa,EAAA,EAAA,EAAI,WAAW,EAAM,EAAA,EAAA,IAAA,CAAA,CAAA;AAC7D,IAAA,OAAA,CAAQ,aAAgB,GAAA,KAAA,CAAA;AACxB,IAAA,OAAA,CAAQ,iBAAoB,GAAA,EAAA,CAAA;AAC5B,IAAQ,OAAA,CAAA,iBAAA,CAAkB,OAAQ,CAAA,MAAA,CAAA,GAAU,IAAK,CAAA,iBAAA,CAAA;AACjD,IAAA,OAAA,CAAQ,gBAAiB,CAAK,IAAA,CAAA,aAAA,IAAiB,EAAI,EAAA,MAAA,CAAO,KAAK,gBAAoB,IAAA,EAAA,CAAA,CAAA;AACnF,IAAQ,OAAA,CAAA,WAAA,GAAc,KAAK,WAAe,IAAA,EAAA,CAAA;AAC1C,IAAA,OAAA,CAAQ,UAAU,OAAQ,CAAA,WAAA,CAAA;AAC1B,IAAQ,OAAA,CAAA,UAAA,GAAa,QAAQ,UAAc,IAAA,EAAA,CAAA;AAE3C,IAAI,IAAA,IAAA,CAAK,SAAU,CAAA,IAAA,KAAS,OAAS,EAAA;AACnC,MAAA,OAAO,OAAQ,CAAA,MAAA,CAAA;AAAA,KAAA;AAGjB,IAAA,OAAO,OAAQ,CAAA,MAAA,CAAA;AACf,IAAA,OAAO,OAAQ,CAAA,SAAA,CAAA;AACf,IAAA,OAAO,OAAQ,CAAA,WAAA,CAAA;AACf,IAAA,OAAO,OAAQ,CAAA,gBAAA,CAAA;AACf,IAAA,OAAO,OAAQ,CAAA,eAAA,CAAA;AACf,IAAA,OAAO,OAAQ,CAAA,KAAA,CAAA;AAEf,IAAO,OAAA,OAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAIJ,MAAM,4BAA+B,GAAA,uCAAA,CAAA;AAC5C,MAAO,CAAA,4BAAA,EAA8B,EAAI,CAAA,CAAA,OAAA,CAAQ,2BAA6B,EAAA,yBAAA,CAAA;;AC9FvE,MAAM,yDAA4D,GAAA,8CAAA,CAAA;AAEzE,OAAA,CACG,OAAO,yDAA2D,EAAA;AAAA,EACjE,kBAAA;AAAA,EACA,4BAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA,2DAAA;AAAA,EACA,2DAAA;AAAA,EACA,+DAAA;AAAA,CAAA,CAAA,CAED,WAAW,2BAA6B,EAAA;AAAA,EACvC,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,8BAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA,2BAAA;AAAA,EACA,kBAAA;AAAA,EACA,SACE,QACA,MACA,EAAA,GAAA,EACA,aACA,4BACA,EAAA,SAAA,EACA,iBACA,EAAA,yBAAA,EACA,gBACA,EAAA;AACA,IAAA,IAAA,CAAK,KAAQ,GAAA;AAAA,MACX,OAAS,EAAA,IAAA;AAAA,KAAA,CAAA;AAGX,IAAK,IAAA,CAAA,cAAA,GAAiB,eAAe,GAAI,CAAA,WAAA,CAAA,CAAA;AAEzC,IAAA,IAAA,CAAK,WAAc,GAAA,GAAA,CAAA;AAEnB,IAAA,MAAM,4BAA4B,MAAM;AACtC,MAAO,OAAA,GAAA,CAAI,KAAQ,EAAA,CAAA,IAAA,CAAK,MAAM;AAC5B,QAAA,IAAI,UAAU,IAAK,CAAA,GAAA,CAAI,YAAa,CAAA,IAAA,EAAM,CAAC,OAAY,KAAA;AACrD,UACE,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,SAAA,CAAA,CAAA;AAGnC,QAAA,IAAI,CAAC,OAAS,EAAA;AACZ,UAAA,GAAA,CAAI,aAAc,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,YAAiB,KAAA;AAC5C,YAAA,IAAI,aAAa,OAAY,KAAA,WAAA,CAAY,aAAa,YAAa,CAAA,MAAA,KAAW,YAAY,MAAQ,EAAA;AAChG,cAAA,OAAO,YAAa,CAAA,YAAA,CAAa,IAAK,CAAA,CAAC,mBAAwB,KAAA;AAC7D,gBAAI,IAAA,mBAAA,CAAoB,IAAS,KAAA,WAAA,CAAY,IAAM,EAAA;AACjD,kBAAU,OAAA,GAAA,mBAAA,CAAA;AACV,kBAAO,OAAA,IAAA,CAAA;AAAA,iBAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAMjB,QAAO,OAAA,OAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAIX,IAAA,MAAM,YAAY,MAAM;AACtB,MAAA,IAAI,OAAO,WAAa,EAAA;AACtB,QAAA,OAAA;AAAA,OAAA;AAEF,MAAA,MAAA,CAAO,GAAG,GAAK,EAAA,EAAE,oBAAsB,EAAA,IAAA,EAAA,EAAQ,EAAE,QAAU,EAAA,SAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG7D,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAA,CAAK,MAAM,OAAU,GAAA,KAAA,CAAA;AAAA,KAAA,CAAA;AAGvB,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAO,OAAA,yBAAA,EAAA,CACJ,IAAK,CAAA,CAAC,OAAY,KAAA;AACjB,QAAA,OAAO,iBAAkB,CAAA,cAAA,CACvB,GAAI,CAAA,IAAA,EACJ,WAAY,CAAA,SAAA,EACZ,WAAY,CAAA,MAAA,EACZ,WAAY,CAAA,IAAA,CAAA,CACZ,IAAK,CAAA,CAAC,OAAY,KAAA;AAClB,UAAA,YAAA,EAAA,CAAA;AAGA,UAAA,OAAA,CAAQ,MAAO,CAAA,OAAA,EAAS,OAAS,EAAA,EAAE,SAAS,WAAY,CAAA,SAAA,EAAA,CAAA,CAAA;AAExD,UAAK,IAAA,CAAA,WAAA,GAAc,0BAA0B,2BAA4B,CAAA,OAAA,CAAA,CAAA;AACzE,UAAA,IAAA,CAAK,oBAAoB,IAAK,CAAA,WAAA,CAAA,CAAA;AAE9B,UAAI,IAAA,CAAC,OAAQ,CAAA,IAAA,CAAK,WAAc,CAAA,EAAA;AAC9B,YAAA,IAAA,CAAK,KAAQ,GAAA,OAAA,CAAQ,KAAQ,GAAA,OAAA,CAAQ,KAAQ,GAAA,KAAA,CAAA,CAAA;AAE7C,YAAA,MAAM,MAAM,IAAK,CAAA,WAAA,CAAY,MAAM,IAAK,CAAA,WAAA,CAAY,IAAI,iBAAoB,GAAA,EAAA,CAAA;AAE5E,YAAA,IAAI,QAAQ,EAAI,EAAA;AACd,cAAM,MAAA,QAAA,GAAW,GAAI,CAAA,KAAA,CAAM,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA;AAChC,cAAa,YAAA,CAAA,WAAA,EAAA,CAAc,IAAK,CAAA,CAAC,OAAY,KAAA;AAC3C,gBAAA,MAAM,SAAS,KAAM,CAAA,OAAA,CAAA,CAAS,IAAK,CAAA,EAAE,IAAI,QAAY,EAAA,CAAA,CAAA,KAAA,EAAA,CAAA;AACrD,gBAAK,IAAA,CAAA,WAAA,CAAY,aAAa,MAAO,CAAA,OAAA,CAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA;AAIzC,YAAA,IAAI,OAAQ,CAAA,KAAA,IAAS,OAAQ,CAAA,KAAA,CAAM,WAAa,EAAA;AAC9C,cAAA,MAAM,IAAO,GAAA,OAAA,CAAQ,KAAM,CAAA,WAAA,CAAY,KAAM,CAAA,IAAA,CAAA,CAAA;AAC7C,cAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACpB,gBAAM,MAAA,MAAA,GAAS,IAAI,KAAM,CAAA,GAAA,CAAA,CAAA;AACzB,gBAAA,IAAI,MAAO,CAAA,MAAA,KAAW,CAAK,IAAA,MAAA,CAAO,OAAO,eAAiB,EAAA;AACxD,kBAAQ,OAAA,CAAA,KAAA,CAAM,YAAY,MAAO,CAAA,CAAA,CAAA,CAAA;AAAA,iBAAA;AAAA,eAAA,CAAA,CAAA;AAAA,aAAA;AAKvC,YAAA,IAAI,OAAQ,CAAA,KAAA,IAAS,OAAQ,CAAA,KAAA,CAAM,IAAM,EAAA;AACvC,cAAM,MAAA,iBAAA,GAAoB,QAAQ,KAAM,CAAA,IAAA,CAAK,KAAK,CAAC,GAAA,KAAQ,IAAI,GAAQ,KAAA,kBAAA,CAAA,CAAA;AACvE,cAAA,IAAI,iBAAmB,EAAA;AACrB,gBAAA,OAAA,CAAQ,iBAAiB,iBAAkB,CAAA,KAAA,CAAA;AAAA,eAAA;AAAA,aAAA;AAI/C,YAAK,IAAA,CAAA,eAAA,GAAkB,KAAK,WAAY,CAAA,eAAA,CAAA;AAGxC,YAAI,IAAA,GAAA,CAAI,IAAK,CAAA,WAAA,EAAa,mBAAsB,CAAA,EAAA;AAC9C,cAAA,IAAA,CAAK,aAAa,SAAY,GAAA;AAAA,gBAC5B,OAAA,EAAS,IAAK,CAAA,WAAA,CAAY,SAAU,CAAA,OAAA;AAAA,eAAA,CAAA;AAAA,aAAA;AAAA,WAgBnC,MAAA;AACL,YAAA,SAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAIL,KAAM,CAAA,SAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGX,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,MAAM;AAC9B,MAAA,MAAM,eAAc,IAAK,CAAA,WAAA,CAAA;AAEzB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,gBAAgB,YAAY,CAAA,IAAA;AAAA,QACnC,gBAAgB,MAAM;AACpB,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,CAAC,MAAA,KAAW,iBAAkB,CAAA,kBAAA,CAAmB,cAAa,GAAK,EAAA,MAAA,CAAA,CAAA;AAExF,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,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,QACA,YAAc,EAAA,IAAA;AAAA,QACd,8BAAA,EAAgC,IAAI,UAAW,CAAA,8BAAA;AAAA,QAC/C,kBAAoB,EAAA,KAAA;AAAA,OAAA,CAAA;AAGtB,MAAiC,gCAAA,CAAA,wBAAA,CAAyB,KAAK,YAAa,EAAA,uBAAA,CAAA,CAAA;AAE5E,MAAA,IAAI,GAAI,CAAA,UAAA,CAAW,8BAAkC,IAAA,GAAA,CAAI,WAAW,kBAAoB,EAAA;AACtF,QAAA,uBAAA,CAAwB,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,OAAA;AAG5D,MAAA,wBAAA,CAAyB,OAAQ,CAAA,uBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGnC,IAAA,IAAA,CAAK,qBAAqB,MAAM;AAC9B,MAAA,MAAM,eAAc,IAAK,CAAA,WAAA,CAAA;AAEzB,MAAA,MAAM,WAAc,GAAA;AAAA,QAClB,WAAa,EAAA,GAAA;AAAA,QACb,KAAA,EAAO,eAAe,YAAY,CAAA,IAAA;AAAA,OAAA,CAAA;AAGpC,MAAM,MAAA,YAAA,GAAe,CAAC,MAAW,KAAA;AAC/B,QAAO,OAAA,iBAAA,CAAkB,kBAAmB,CAAA,YAAA,EAAa,GAAK,EAAA,MAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAGhE,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,8BAAA,EAAgC,IAAI,UAAW,CAAA,8BAAA;AAAA,QAC/C,kBAAoB,EAAA,KAAA;AAAA,QACpB,YAAA;AAAA,QACA,YAAc,EAAA,IAAA;AAAA,OAAA,CAAA;AAGhB,MAAiC,gCAAA,CAAA,wBAAA,CAAyB,KAAK,YAAa,EAAA,uBAAA,CAAA,CAAA;AAE5E,MAAA,IAAI,GAAI,CAAA,UAAA,CAAW,8BAAkC,IAAA,GAAA,CAAI,WAAW,kBAAoB,EAAA;AACtF,QAAA,uBAAA,CAAwB,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,OAAA;AAG5D,MAAA,wBAAA,CAAyB,OAAQ,CAAA,uBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGnC,IAAA,IAAA,CAAK,oBAAoB,MAAM;AAC7B,MAAA,MAAM,eAAc,IAAK,CAAA,WAAA,CAAA;AAEzB,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,QAAO,OAAA,iBAAA,CAAkB,iBAAkB,CAAA,YAAA,EAAa,GAAK,EAAA,MAAA,CAAA,CAAA;AAAA,OAAA,CAAA;AAG/D,MAAA,MAAM,uBAA0B,GAAA;AAAA,QAC9B,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,8BAAA,EAAgC,IAAI,UAAW,CAAA,8BAAA;AAAA,QAC/C,kBAAoB,EAAA,KAAA;AAAA,QACpB,YAAA;AAAA,QACA,YAAc,EAAA,IAAA;AAAA,OAAA,CAAA;AAGhB,MAAA,IAAI,GAAI,CAAA,UAAA,CAAW,8BAAkC,IAAA,GAAA,CAAI,WAAW,kBAAoB,EAAA;AACtF,QAAA,uBAAA,CAAwB,iCAAiC,CAAC,KAAA,CAAA,CAAA;AAAA,OAAA;AAG5D,MAAA,wBAAA,CAAyB,OAAQ,CAAA,uBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGnC,IAAA,IAAA,CAAK,sBAAsB,MAAM;AAC/B,MAAA,SAAA,CAAU,IAAK,CAAA;AAAA,QACb,WAAA,EAAa,gBAAiB,CAAA,WAAA,CAC5B,oBACA,EAAA,+DAAA,CAAA;AAAA,QAEF,WAAa,EAAA,eAAA;AAAA,QACb,UAAY,EAAA,oCAAA;AAAA,QACZ,OAAS,EAAA;AAAA,UACP,WAAA,EAAa,MAAM,IAAK,CAAA,WAAA;AAAA,UACxB,sBAAsB,MAAM;AAC1B,YAAM,MAAA,OAAA,GAAU,IAAK,CAAA,GAAA,CAAI,QAAU,EAAA,EAAE,IAAM,EAAA,IAAA,CAAK,WAAY,CAAA,OAAA,EAAS,OAAS,EAAA,IAAA,CAAK,WAAY,CAAA,OAAA,EAAA,CAAA,CAAA;AAC/F,YAAO,OAAA,MAAA,CAAO,QAAQ,YAAc,EAAA,EAAE,YAAY,IAAM,EAAA,MAAA,EAAQ,KAAK,WAAY,CAAA,MAAA,EAAA,CAAA,CAAA;AAAA,WAAA;AAAA,UAEnF,eAAA,EAAiB,MACf,GAAA,CACG,aAAc,CAAA,cAAA,CAAA,CACd,IAAK,CAAA,MAAA,CACJ,CAAC,CAAA,KACC,CAAE,CAAA,OAAA,KAAY,IAAK,CAAA,WAAA,CAAY,OAC/B,IAAA,CAAA,CAAE,MAAW,KAAA,IAAA,CAAK,WAAY,CAAA,MAAA,IAC9B,CAAE,CAAA,OAAA,KAAY,IAAK,CAAA,WAAA,CAAY,OAC/B,IAAA,CAAA,CAAE,IAAS,KAAA,IAAA,CAAK,WAAY,CAAA,IAAA,CAAA;AAAA,UAEpC,aAAa,MAAM,GAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAKzB,IAAA,IAAA,CAAK,oBAAoB,MAAM;AAC7B,MAAA,SAAA,CAAU,IAAK,CAAA;AAAA,QACb,WAAA,EAAa,gBAAiB,CAAA,WAAA,CAAY,kBAAoB,EAAA,2DAAA,CAAA;AAAA,QAC9D,UAAY,EAAA,kCAAA;AAAA,QACZ,WAAa,EAAA,eAAA;AAAA,QACb,OAAS,EAAA;AAAA,UACP,WAAA,EAAa,MAAM,IAAK,CAAA,WAAA;AAAA,UACxB,aAAa,MAAM,GAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAKzB,IAAK,IAAA,CAAA,gBAAA,GAAmB,CAAC,YAAgB,KAAA;AACvC,MAAA,SAAA,CAAU,IAAK,CAAA;AAAA,QACb,WAAa,EAAA,6DAAA;AAAA,QACb,UAAY,EAAA,iCAAA;AAAA,QACZ,IAAM,EAAA,IAAA;AAAA,QACN,WAAa,EAAA,eAAA;AAAA,QACb,OAAS,EAAA;AAAA,UACP,KAAA,EAAO,MAAM,QAAA,GAAW,YAAY,CAAA,IAAA;AAAA,UACpC,aAAa,MAAM,GAAA;AAAA,UACnB,kBAAoB,EAAA,MAClB,4BAA6B,CAAA,mCAAA,CAAoC,GAAK,EAAA,YAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAK9E,IAAA,IAAA,CAAK,mBAAmB,MAAM;AAC5B,MAAI,IAAA,GAAA,CAAI,MAAM,oCAAuC,CAAA,EAAA;AACnD,QAAO,OAAA,IAAA,CAAK,YAAY,SAAU,CAAA,YAAA,CAAA;AAAA,OACzB,MAAA,IAAA,GAAA,CAAI,MAAM,+BAAkC,CAAA,EAAA;AACrD,QAAM,MAAA,OAAA,GAAU,IAAK,CAAA,WAAA,CAAY,SAAU,CAAA,OAAA,CAAA;AAC3C,QAAA,OAAO,QAAQ,IAAO,GAAA,MAAA,GAAS,OAAQ,CAAA,IAAA,GAAO,MAAM,OAAQ,CAAA,MAAA,CAAA;AAAA,OAAA;AAE9D,MAAO,OAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAA,IAAA,CAAK,qBAAqB,MAAM;AAC9B,MAAI,IAAA,IAAA,CAAK,eAAe,IAAK,CAAA,WAAA,CAAY,aAAa,IAAK,CAAA,WAAA,CAAY,UAAU,MAAQ,EAAA;AACvF,QAAA,OAAO,IAAK,CAAA,WAAA,CAAY,SAAU,CAAA,MAAA,CAAO,UAAU,CAAG,EAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAExD,MAAO,OAAA,IAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAK,IAAA,CAAA,mBAAA,GAAsB,CAAC,YAAgB,KAAA;AAC1C,MAAA,OAAO,eAAe,iBAAkB,CAAA,YAAA,CAAY,OAAS,CAAA,CAAA,IAAA,CAAK,CAAC,OAAY,KAAA;AAC7E,QAAA,YAAA,CAAY,cAAiB,GAAA,OAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACtWhC,MAAM,2BAA8B,GAAA,mCAAA,CAAA;AAC3C,MAAA,CAAO,6BAA6B,CAAC,yDAAA,CAAA,CAAA;;ACQA,MAAA,uBAAA,CAAA;AAAA,EAAA,OACrB,UAAU,WAA6D,EAAA;AACnF,IAAO,OAAA,IAAA,CAAK,eACT,CAAA,CAAA,IAAA,CAAK,WAAY,CAAA,GAAA,EAAK,cAAgB,EAAA,WAAA,CAAY,OAAS,EAAA,WAAA,CAAY,IAAM,EAAA,QAAA,CAAA,CAC7E,KAAM,CAAA;AAAA,MACL,QAAQ,WAAY,CAAA,MAAA;AAAA,MACpB,UAAU,WAAY,CAAA,aAAA;AAAA,KAEvB,CAAA,CAAA,GAAA,EAAA,CACA,KAAM,CAAA,CAAC,KAAsB,KAAA;AAC5B,MAAA,IAAA,CAAK,MAAM,KAAO,EAAA,yBAAA,CAAA,CAAA;AAClB,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA;;ACTsC,MAAA,gBAAA,CAAA;AAAA,EAK5C,WAAA,CAAoB,mBAAiD,WAA2B,EAAA;AAA5E,IAAA,IAAA,CAAA,iBAAA,GAAA,iBAAA,CAAA;AAAiD,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA,CAAA;AAHrE,IAA8B,IAAA,CAAA,MAAA,GAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAK9B,OAAgB,GAAA;AACrB,IAAA,IAAA,CAAK,SAAY,GAAA;AAAA,MACf,OAAS,EAAA,IAAA;AAAA,MACT,KAAO,EAAA,KAAA;AAAA,KAAA,CAAA;AAGT,IAAA,uBAAA,CAAwB,SAAU,CAAA,IAAA,CAAK,WAAa,CAAA,CAAA,IAAA,CAClD,CAAC,SAAmC,KAAA;AAClC,MAAA,IAAA,CAAK,UAAU,OAAU,GAAA,KAAA,CAAA;AACzB,MAAA,IAAA,CAAK,MAAS,GAAA,SAAA,CAAA;AAAA,KAAA,EAEhB,MAAM;AACJ,MAAA,IAAA,CAAK,UAAU,KAAQ,GAAA,IAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAKtB,KAAc,GAAA;AACnB,IAAA,IAAA,CAAK,iBAAkB,CAAA,KAAA,EAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AArBX,gBAJT,CAIS,OAAU,GAAA,CAAC,mBAAqB,EAAA,aAAA,CAAA,CAAA;AAyBzC,MAAM,WAAc,GAAA,6CAAA,CAAA;AAC3B,MAAO,CAAA,WAAA,EAAa,EAAI,CAAA,CAAA,UAAA,CAAW,kBAAoB,EAAA,gBAAA,CAAA;;ACtCvD,MAAgD,kBAAA,CAAA;AAAA,EAIvC,YAAoB,SAA0B,EAAA;AAA1B,IAAA,IAAA,CAAA,SAAA,GAAA,SAAA,CAAA;AAAA,GAAA;AAAA,EAEpB,UAAmB,GAAA;AACxB,IAAA,IAAA,CAAK,UAAU,IAAK,CAAA;AAAA,MAClB,WAAa,EAAA,wCAAA;AAAA,MACb,UAAY,EAAA,gBAAA;AAAA,MACZ,YAAc,EAAA,OAAA;AAAA,MACd,WAAa,EAAA,eAAA;AAAA,MACb,OAAS,EAAA;AAAA,QACP,WAAA,EAAa,MAAM,IAAK,CAAA,WAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAAA,CAAA;AAVhB,kBAHhB,CAGgB,UAAU,CAAC,WAAA,CAAA,CAAA;AAgBpB,MAAM,cAAoC,GAAA;AAAA,EAC/C,QAAU,EAAA;AAAA,IACR,WAAa,EAAA,GAAA;AAAA,GAAA;AAAA,EAEf,UAAY,EAAA,kBAAA;AAAA,EACZ,QAAU,EAAA,CAAA,qDAAA,CAAA;AAAA,CAAA,CAAA;AAGL,MAAM,0BAA6B,GAAA,mDAAA,CAAA;AAC1C,MAAA,CAAO,0BAA4B,EAAA,CAAC,WAAc,CAAA,CAAA,CAAA,SAAA,CAAU,gBAAkB,EAAA,cAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC9BvE,MAAM,sBAAyB,GAAA,2BAAA,CAAA;AACtC,MAAA,CAAO,wBAAwB,CAAC,0BAAA,CAAA,CAAA;;ACLhC,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;;;;;ACsBO,MAAM,UAAa,GAAA,gBAAA;AAC1B,MAAA,CAAO,UAAY,EAAA;AAAA,EACjB,gEAAA;AAAA,EACA,2BAAA;AAAA,EACA,qBAAA;AAAA,EACA,4BAAA;AAAA,EAEA,4EAAA;AAAA,EACA,8EAAA;AAAA,EACA,qBAAA;AAAA,EACA,eAAA;AAAA,EACA,oBAAA;AAAA,EACA,uBAAA;AAAA,EACA,2BAAA;AAAA,EACA,wBAAA;AAAA,EACA,wBAAA;AAAA,EACA,uBAAA;AAAA,EACA,yBAAA;AAAA,EACA,0BAAA;AAAA,EACA,aAAA;AAAA,EACA,6EAAA;AAAA,EACA,2DAAA;AAAA,EACA,gDAAA;AAAA,EACA,8DAAA;AAAA,EACA,iDAAA;AAAA,EACA,iDAAA;AAAA,EACA,yDAAA;AAAA,EACA,+CAAA;AAAA,EACA,+CAAA;AAAA,EACA,6DAAA;AAAA,EACA,uDAAA;AAAA,EACA,yBAAA;AAAA,EACA,sBAAA;AAAA,EACA,uBAAA;AAAA,CAAA,CAAA,CACC,OAAO,WAAY;AACpB,EAAA,qBAAA,CAAsB,iBAAiB,KAAO,EAAA;AAAA,IAC5C,IAAM,EAAA,uBAAA;AAAA,IACN,IAAA,EAAM,EAAE,IAAM,EAAA,OAAA,EAAA;AAAA,IACd,WAAa,EAAA;AAAA,MACX,WAAa,EAAA,2BAAA;AAAA,MACb,kBAAoB,EAAA,qDAAA;AAAA,MACpB,iBAAmB,EAAA,2BAAA;AAAA,MACnB,2BAA6B,EAAA,6DAAA;AAAA,MAC7B,0BAA4B,EAAA,yBAAA;AAAA,MAC5B,cAAgB,EAAA,8BAAA;AAAA,MAEhB,wBAA0B,EAAA,KAAA;AAAA,MAC1B,sBAAwB,EAAA,IAAA;AAAA,KAAA;AAAA,IAE1B,YAAc,EAAA;AAAA,MACZ,WAAa,EAAA,0BAAA;AAAA,MACb,gBAAkB,EAAA,+BAAA;AAAA,MAClB,kBAAoB,EAAA,qBAAA;AAAA,MACpB,OAAS,EAAA,sBAAA;AAAA,KAAA;AAAA,IAEX,QAAU,EAAA;AAAA,MACR,kBAAoB,EAAA,+CAAA;AAAA,MACpB,iBAAmB,EAAA,wBAAA;AAAA,KAAA;AAAA,IAErB,aAAe,EAAA;AAAA,MACb,WAAa,EAAA,6BAAA;AAAA,MACb,MAAQ,EAAA,wBAAA;AAAA,MACR,kBAAoB,EAAA,wDAAA;AAAA,MACpB,iBAAmB,EAAA,6BAAA;AAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA;AAKzB,0BAA2B,CAAA,gBAAA,CAAiB,OAAO,CAAC,UAAA,CAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}