From 0b34fbfb1686af1b65b6d63222675801907c9770 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 10 Jan 2024 22:53:51 +0000 Subject: [PATCH 001/126] Initial pass at m2 service environment resource --- internal/service/m2/environment.go | 553 ++++++++++++++++++++ internal/service/m2/environment_test.go | 294 +++++++++++ internal/service/m2/generate.go | 1 + internal/service/m2/service_package_gen.go | 11 +- internal/service/m2/tags_gen.go | 128 +++++ names/names.go | 1 + website/docs/r/m2_environment.html.markdown | 61 +++ 7 files changed, 1048 insertions(+), 1 deletion(-) create mode 100644 internal/service/m2/environment.go create mode 100644 internal/service/m2/environment_test.go create mode 100644 internal/service/m2/tags_gen.go create mode 100644 website/docs/r/m2_environment.html.markdown diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go new file mode 100644 index 00000000000..976c63135f6 --- /dev/null +++ b/internal/service/m2/environment.go @@ -0,0 +1,553 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + "errors" + "fmt" + "github.com/YakDriver/regexache" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/flex" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "log" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/m2" + "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// Function annotations are used for resource registration to the Provider. DO NOT EDIT. +// @SDKResource("aws_m2_environment", name="Environment") +// @Tags(identifierAttribute="arn") +func ResourceEnvironment() *schema.Resource { + return &schema.Resource{ + CreateWithoutTimeout: resourceEnvironmentCreate, + ReadWithoutTimeout: resourceEnvironmentRead, + UpdateWithoutTimeout: resourceEnvironmentUpdate, + DeleteWithoutTimeout: resourceEnvironmentDelete, + + Importer: &schema.ResourceImporter{ + StateContext: schema.ImportStatePassthroughContext, + }, + + Timeouts: &schema.ResourceTimeout{ + Create: schema.DefaultTimeout(30 * time.Minute), + Update: schema.DefaultTimeout(30 * time.Minute), + Delete: schema.DefaultTimeout(30 * time.Minute), + }, + + Schema: map[string]*schema.Schema{ + "arn": { + Type: schema.TypeString, + Computed: true, + }, + "apply_changes_during_maintenance_window": { + Type: schema.TypeBool, + Optional: true, + Description: "Apply the changes during maintenance window", + }, + "client_token": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + ValidateFunc: validation.StringLenBetween(0, 64), + }, + "description": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "efs_mount": { + Type: schema.TypeSet, + Optional: true, + MinItems: 0, + MaxItems: 1, + ForceNew: true, + ConflictsWith: []string{"fsx_mount"}, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "file_system_id": { + Type: schema.TypeString, + Required: true, + }, + "mount_point": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringMatch(regexache.MustCompile("^/m2/mount(/[\\w-]+)+$"), "Mount point must start /m2/mount"), + }, + }, + }, + }, + "engine_type": { + Type: schema.TypeString, + Required: true, + ValidateFunc: validation.StringInSlice(enum.Values[types.EngineType](), false), + ForceNew: true, + }, + "engine_version": { + Type: schema.TypeString, + Optional: true, + }, + "force_updates": { + Type: schema.TypeBool, + Optional: true, + Description: "Force updates to the environment.", + }, + "fsx_mount": { + Type: schema.TypeSet, + Optional: true, + ForceNew: true, + MinItems: 0, + MaxItems: 1, + ConflictsWith: []string{"efs_mount"}, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "file_system_id": { + Type: schema.TypeString, + Required: true, + }, + "mount_point": { + Type: schema.TypeString, + Required: true, + }, + }, + }, + }, + "high_availability_config": { + Type: schema.TypeList, + MaxItems: 1, + Optional: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "desired_capacity": { + Type: schema.TypeInt, + Required: true, + ValidateFunc: validation.IntBetween(1, 100), + }, + }, + }, + }, + "instance_type": { + Type: schema.TypeString, + Required: true, + }, + "kms_key_id": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + }, + "load_balancer_arn": { + Type: schema.TypeString, + Computed: true, + }, + "name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "preferred_maintenance_window": { + Type: schema.TypeString, + Optional: true, + Computed: true, + Description: "Preferred maintenance window, if not provided a random one will be generated.", + }, + "publicly_accessible": { + Type: schema.TypeBool, + Optional: true, + Default: false, + ForceNew: true, + }, + "security_groups": { + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Required: true, + MinItems: 1, + ForceNew: true, + }, + "subnet_ids": { + Type: schema.TypeSet, + Elem: &schema.Schema{Type: schema.TypeString}, + Required: true, + MinItems: 1, + ForceNew: true, + }, + names.AttrTags: tftags.TagsSchema(), + names.AttrTagsAll: tftags.TagsSchemaComputed(), + }, + } +} + +const ( + ResNameEnvironment = "Environment" +) + +func resourceEnvironmentCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).M2Client(ctx) + + var clientToken string + if v, ok := d.GetOk("client_token"); ok { + clientToken = v.(string) + } else { + clientToken = id.UniqueId() + } + + in := &m2.CreateEnvironmentInput{ + EngineType: types.EngineType(d.Get("engine_type").(string)), + InstanceType: aws.String(d.Get("instance_type").(string)), + Name: aws.String(d.Get("name").(string)), + ClientToken: aws.String(clientToken), + Description: aws.String(d.Get("description").(string)), + EngineVersion: aws.String(d.Get("engine_version").(string)), + KmsKeyId: aws.String(d.Get("kms_key_id").(string)), + PubliclyAccessible: d.Get("publicly_accessible").(bool), + SecurityGroupIds: flex.ExpandStringValueSet(d.Get("security_groups").(*schema.Set)), + SubnetIds: flex.ExpandStringValueSet(d.Get("subnet_ids").(*schema.Set)), + Tags: getTagsIn(ctx), + } + + if v, ok := d.GetOk("high_availability_config"); ok && len(v.([]interface{})) > 0 { + in.HighAvailabilityConfig = expandHaConfig(v.([]interface{})) + } + + if v, ok := d.GetOk("preferred_maintenance_window"); ok { + in.PreferredMaintenanceWindow = aws.String(v.(string)) + } + + in.StorageConfigurations = expandStorageConfigurations(d) + + out, err := conn.CreateEnvironment(ctx, in) + if err != nil { + return create.AppendDiagError(diags, names.M2, create.ErrActionCreating, ResNameEnvironment, d.Get("name").(string), err) + } + + if out == nil || out.EnvironmentId == nil { + return create.AppendDiagError(diags, names.M2, create.ErrActionCreating, ResNameEnvironment, d.Get("name").(string), errors.New("empty output")) + } + + d.SetId(aws.ToString(out.EnvironmentId)) + + // TIP: -- 5. Use a waiter to wait for create to complete + if _, err := waitEnvironmentCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil { + return create.AppendDiagError(diags, names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, d.Id(), err) + } + + // TIP: -- 6. Call the Read function in the Create return + return append(diags, resourceEnvironmentRead(ctx, d, meta)...) +} + +func resourceEnvironmentRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + conn := meta.(*conns.AWSClient).M2Client(ctx) + + out, err := findEnvironmentByID(ctx, conn, d.Id()) + + if !d.IsNewResource() && tfresource.NotFound(err) { + log.Printf("[WARN] M2 Environment (%s) not found, removing from state", d.Id()) + d.SetId("") + return diags + } + + if err != nil { + return create.AppendDiagError(diags, names.M2, create.ErrActionReading, ResNameEnvironment, d.Id(), err) + } + + d.Set("arn", out.EnvironmentArn) + d.Set("description", out.Description) + d.Set("engine_type", string(out.EngineType)) + d.Set("engine_version", out.EngineVersion) + d.Set("instance_type", out.InstanceType) + d.Set("kms_key_id", out.KmsKeyId) + + d.Set("name", out.Name) + + efsConfig, fsxConfig := flattenStorageConfig(out.StorageConfigurations) + + d.Set("efs_mount", efsConfig) + d.Set("fsx_mount", fsxConfig) + + d.Set("preferred_maintenance_window", out.PreferredMaintenanceWindow) + d.Set("publicly_accessible", out.PubliclyAccessible) + d.Set("security_groups", out.SecurityGroupIds) + d.Set("subnet_ids", out.SubnetIds) + d.Set("high_availability_config", flattenHaConfig(out.HighAvailabilityConfig)) + d.Set("load_balancer_arn", out.LoadBalancerArn) + + return diags +} + +func resourceEnvironmentUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + + conn := meta.(*conns.AWSClient).M2Client(ctx) + + update := false + + in := &m2.UpdateEnvironmentInput{ + EnvironmentId: aws.String(d.Id()), + } + + if v, ok := d.GetOk("apply_changes_during_maintenance_window"); ok && v.(bool) { + if d.HasChangesExcept("apply_changes_during_maintenance_window", "engine_version") { + return create.AppendDiagError(diags, names.M2, create.ErrActionUpdating, ResNameEnvironment, d.Id(), fmt.Errorf("cannot make changes to any configuration except `engine_version` during maintenance window")) + } + in.ApplyDuringMaintenanceWindow = d.Get("apply_changes_during_maintenance_window").(bool) + in.EngineVersion = aws.String(d.Get("engine_version").(string)) + update = true + } else { + if d.HasChange("engine_version") { + in.EngineVersion = aws.String(d.Get("engine_version").(string)) + update = true + } + + if d.HasChange("high_availability_config") { + if v, ok := d.GetOk("high_availability_config"); ok && len(v.([]interface{})) > 0 { + config := v.([]interface{})[0].(map[string]interface{}) + in.DesiredCapacity = aws.Int32(config["desired_capacity"].(int32)) + } else { + in.DesiredCapacity = aws.Int32(1) + } + update = true + } + + if d.HasChange("instance_type") { + in.InstanceType = aws.String(d.Get("instance_type").(string)) + update = true + } + + if d.HasChange("preferred_maintenance_window") { + in.PreferredMaintenanceWindow = aws.String(d.Get("preferred_maintenance_window").(string)) + update = true + } + } + + if !update { + return diags + } + + log.Printf("[DEBUG] Updating M2 Environment (%s): %#v", d.Id(), in) + out, err := conn.UpdateEnvironment(ctx, in) + if err != nil { + return create.AppendDiagError(diags, names.M2, create.ErrActionUpdating, ResNameEnvironment, d.Id(), err) + } + + if _, err := waitEnvironmentUpdated(ctx, conn, aws.ToString(out.EnvironmentId), d.Timeout(schema.TimeoutUpdate)); err != nil { + return create.AppendDiagError(diags, names.M2, create.ErrActionWaitingForUpdate, ResNameEnvironment, d.Id(), err) + } + + return append(diags, resourceEnvironmentRead(ctx, d, meta)...) +} + +func resourceEnvironmentDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + var diags diag.Diagnostics + + conn := meta.(*conns.AWSClient).M2Client(ctx) + + log.Printf("[INFO] Deleting M2 Environment %s", d.Id()) + + _, err := conn.DeleteEnvironment(ctx, &m2.DeleteEnvironmentInput{ + EnvironmentId: aws.String(d.Id()), + }) + + if errs.IsA[*types.ResourceNotFoundException](err) { + return diags + } + if err != nil { + return create.AppendDiagError(diags, names.M2, create.ErrActionDeleting, ResNameEnvironment, d.Id(), err) + } + + if _, err := waitEnvironmentDeleted(ctx, conn, d.Id(), d.Timeout(schema.TimeoutDelete)); err != nil { + return create.AppendDiagError(diags, names.M2, create.ErrActionWaitingForDeletion, ResNameEnvironment, d.Id(), err) + } + + return diags +} + +func waitEnvironmentCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(types.EnvironmentLifecycleCreating), + Target: enum.Slice(types.EnvironmentLifecycleAvailable), + Refresh: statusEnvironment(ctx, conn, id), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { + return out, err + } + + return nil, err +} + +func waitEnvironmentUpdated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(types.EnvironmentLifecycleUpdating), + Target: enum.Slice(types.EnvironmentLifecycleAvailable), + Refresh: statusEnvironment(ctx, conn, id), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { + return out, err + } + + return nil, err +} + +func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(types.EnvironmentLifecycleAvailable, types.EnvironmentLifecycleCreating, types.EnvironmentLifecycleDeleting), + Target: []string{}, + Refresh: statusEnvironment(ctx, conn, id), + Timeout: timeout, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { + return out, err + } + + return nil, err +} + +func statusEnvironment(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + out, err := findEnvironmentByID(ctx, conn, id) + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err + } + + return out, string(out.Status), nil + } +} + +func findEnvironmentByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetEnvironmentOutput, error) { + in := &m2.GetEnvironmentInput{ + EnvironmentId: aws.String(id), + } + out, err := conn.GetEnvironment(ctx, in) + if errs.IsA[*types.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + if err != nil { + return nil, err + } + + if out == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return out, nil +} + +func expandStorageConfigurations(d *schema.ResourceData) []types.StorageConfiguration { + configs := make([]types.StorageConfiguration, 0) + + if efsMounts, ok := d.GetOk("efs_mount"); ok { + for _, config := range efsMounts.(*schema.Set).List() { + configMap := config.(map[string]interface{}) + configs = append(configs, expandStorageConfiguration(configMap, true)) + } + } + + if fsxMounts, ok := d.GetOk("fsx_mount"); ok { + for _, config := range fsxMounts.(*schema.Set).List() { + configMap := config.(map[string]interface{}) + configs = append(configs, expandStorageConfiguration(configMap, false)) + } + } + return configs +} + +func expandStorageConfiguration(m map[string]interface{}, efs bool) types.StorageConfiguration { + if efs { + return &types.StorageConfigurationMemberEfs{ + Value: types.EfsStorageConfiguration{ + FileSystemId: aws.String(m["file_system_id"].(string)), + MountPoint: aws.String(m["mount_point"].(string)), + }, + } + } else { + return &types.StorageConfigurationMemberFsx{ + Value: types.FsxStorageConfiguration{ + FileSystemId: aws.String(m["file_system_id"].(string)), + MountPoint: aws.String(m["mount_point"].(string)), + }, + } + } +} + +func expandHaConfig(tfList []interface{}) *types.HighAvailabilityConfig { + if len(tfList) == 0 { + return nil + } + + v, ok := tfList[0].(map[string]interface{}) + + if ok { + + return &types.HighAvailabilityConfig{ + DesiredCapacity: aws.Int32(int32(v["desired_capacity"].(int))), + } + } + return nil +} + +func flattenHaConfig(haConfig *types.HighAvailabilityConfig) []interface{} { + if haConfig == nil { + return nil + } + + return []interface{}{map[string]interface{}{ + "desired_capacity": haConfig.DesiredCapacity, + }} +} + +func flattenStorageConfig(storageConfig []types.StorageConfiguration) ([]interface{}, []interface{}) { + efsConfig := make([]interface{}, 0) + fsxConfig := make([]interface{}, 0) + for _, config := range storageConfig { + switch config.(type) { + case *types.StorageConfigurationMemberEfs: + r := config.(*types.StorageConfigurationMemberEfs) + efsConfig = appendStorageConfig(r.Value.FileSystemId, r.Value.MountPoint, efsConfig) + case *types.StorageConfigurationMemberFsx: + r := config.(*types.StorageConfigurationMemberFsx) + fsxConfig = appendStorageConfig(r.Value.FileSystemId, r.Value.MountPoint, fsxConfig) + } + } + return efsConfig, fsxConfig +} + +func appendStorageConfig(fileSystemId *string, mountPoint *string, config []interface{}) []interface{} { + return append(config, map[string]string{ + "file_system_id": *fileSystemId, + "mount_point": *mountPoint, + }) +} diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go new file mode 100644 index 00000000000..62a87e2309c --- /dev/null +++ b/internal/service/m2/environment_test.go @@ -0,0 +1,294 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2_test + +import ( + "context" + "errors" + "fmt" + "testing" + + "github.com/YakDriver/regexache" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/m2" + "github.com/aws/aws-sdk-go-v2/service/m2/types" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/names" + + tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" +) + +const ( + testEngineType = "bluage" + testEngineVersion = "3.7.0" +) + +func TestAccM2Environment_basic(t *testing.T) { + ctx := acctest.Context(t) + // TIP: This is a long-running test guard for tests that run longer than + // 300s (5 min) generally. + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + var environment m2.GetEnvironmentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion, 2), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "description", rName), + resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), + resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), + resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "efs_mount.0.mount_point", "/m2/mount/example"), + resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccM2Environment_disappears(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + var environment m2.GetEnvironmentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion, 2), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + acctest.CheckResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment(), resourceName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + +func testAccCheckEnvironmentDestroy(ctx context.Context) resource.TestCheckFunc { + return func(s *terraform.State) error { + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_m2_environment" { + continue + } + + _, err := conn.GetEnvironment(ctx, &m2.GetEnvironmentInput{ + EnvironmentId: aws.String(rs.Primary.ID), + }) + if errs.IsA[*types.ResourceNotFoundException](err) { + return nil + } + if err != nil { + return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameEnvironment, rs.Primary.ID, err) + } + + return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameEnvironment, rs.Primary.ID, errors.New("not destroyed")) + } + + return nil + } +} + +func testAccCheckEnvironmentExists(ctx context.Context, name string, environment *m2.GetEnvironmentOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[name] + if !ok { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameEnvironment, name, errors.New("not found")) + } + + if rs.Primary.ID == "" { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameEnvironment, name, errors.New("not set")) + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + resp, err := conn.GetEnvironment(ctx, &m2.GetEnvironmentInput{ + EnvironmentId: aws.String(rs.Primary.ID), + }) + + if err != nil { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameEnvironment, rs.Primary.ID, err) + } + + *environment = *resp + + return nil + } +} + +func testAccPreCheck(ctx context.Context, t *testing.T) { + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + input := &m2.ListEnvironmentsInput{} + _, err := conn.ListEnvironments(ctx, input) + + if acctest.PreCheckSkipError(err) { + t.Skipf("skipping acceptance testing: %s", err) + } + if err != nil { + t.Fatalf("unexpected PreCheck error: %s", err) + } +} + +func testAccCheckEnvironmentNotRecreated(before, after *m2.GetEnvironmentOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + if before, after := aws.ToString(before.EnvironmentId), aws.ToString(after.EnvironmentId); before != after { + return create.Error(names.M2, create.ErrActionCheckingNotRecreated, tfm2.ResNameEnvironment, before, errors.New("recreated")) + } + + return nil + } +} + +func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string, desiredCapacity int32) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), + testAccEnvironmentConfig_efs(rName), + fmt.Sprintf(` + +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + kms_key_id = aws_kms_key.test.id + + + efs_mount { + file_system_id = aws_efs_file_system.test.id + mount_point = "/m2/mount/example" + } + + high_availability_config { + desired_capacity = %[4]d + } +} +`, rName, engineType, engineVersion, desiredCapacity)) +} + +func testAccEnvironmentConfig_base(rName string) string { + return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptInDefaultExclude(), + fmt.Sprintf(` +resource "aws_vpc" "test" { + cidr_block = "10.0.0.0/16" + enable_dns_support = true + enable_dns_hostnames = true + + tags = { + Name = %[1]q + } +} + +resource "aws_subnet" "test" { + count = 2 + + vpc_id = aws_vpc.test.id + availability_zone = data.aws_availability_zones.available.names[count.index] + cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) + + tags = { + Name = %[1]q + } +} +`, rName), + fmt.Sprintf(` +resource "aws_security_group" "test" { + name = %[1]q + vpc_id = aws_vpc.test.id + + tags = { + Name = %[1]q + } + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } + ingress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = [aws_vpc.test.cidr_block] + } +} +resource "aws_kms_key" "test" { + deletion_window_in_days = 7 +} +`, rName)) +} + +func testAccEnvironmentConfig_efs(rName string) string { + return fmt.Sprintf(` +resource "aws_efs_file_system" "test" { + creation_token = %[1]q + tags = { + Name = %[1]q + } +} + +resource "aws_efs_access_point" "test" { + file_system_id = aws_efs_file_system.test.id + root_directory { + path = "/" + } + tags = { + Name = %[1]q + } +} + +resource "aws_efs_mount_target" "test" { + count = 2 + file_system_id = aws_efs_file_system.test.id + subnet_id = aws_subnet.test[count.index].id + security_groups = [aws_security_group.test.id] +} +`, rName) +} diff --git a/internal/service/m2/generate.go b/internal/service/m2/generate.go index d8fa11d9053..e3b3812b734 100644 --- a/internal/service/m2/generate.go +++ b/internal/service/m2/generate.go @@ -2,6 +2,7 @@ // SPDX-License-Identifier: MPL-2.0 //go:generate go run ../../generate/servicepackage/main.go +//go:generate go run ../../generate/tags/main.go -ListTags -ServiceTagsMap -UpdateTags -KVTValues -AWSSDKVersion=2 -SkipTypesImp // ONLY generate directives and package declaration! Do not add anything else to this file package m2 diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index ef6d98b3311..df2d0168c10 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -27,7 +27,16 @@ func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePac } func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePackageSDKResource { - return []*types.ServicePackageSDKResource{} + return []*types.ServicePackageSDKResource{ + { + Factory: ResourceEnvironment, + TypeName: "aws_m2_environment", + Name: "Environment", + Tags: &types.ServicePackageResourceTags{ + IdentifierAttribute: "arn", + }, + }, + } } func (p *servicePackage) ServicePackageName() string { diff --git a/internal/service/m2/tags_gen.go b/internal/service/m2/tags_gen.go new file mode 100644 index 00000000000..ed7c2bed720 --- /dev/null +++ b/internal/service/m2/tags_gen.go @@ -0,0 +1,128 @@ +// Code generated by internal/generate/tags/main.go; DO NOT EDIT. +package m2 + +import ( + "context" + "fmt" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/m2" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/logging" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "github.com/hashicorp/terraform-provider-aws/internal/types/option" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// listTags lists m2 service tags. +// The identifier is typically the Amazon Resource Name (ARN), although +// it may also be a different identifier depending on the service. +func listTags(ctx context.Context, conn *m2.Client, identifier string, optFns ...func(*m2.Options)) (tftags.KeyValueTags, error) { + input := &m2.ListTagsForResourceInput{ + ResourceArn: aws.String(identifier), + } + + output, err := conn.ListTagsForResource(ctx, input, optFns...) + + if err != nil { + return tftags.New(ctx, nil), err + } + + return KeyValueTags(ctx, output.Tags), nil +} + +// ListTags lists m2 service tags and set them in Context. +// It is called from outside this package. +func (p *servicePackage) ListTags(ctx context.Context, meta any, identifier string) error { + tags, err := listTags(ctx, meta.(*conns.AWSClient).M2Client(ctx), identifier) + + if err != nil { + return err + } + + if inContext, ok := tftags.FromContext(ctx); ok { + inContext.TagsOut = option.Some(tags) + } + + return nil +} + +// map[string]string handling + +// Tags returns m2 service tags. +func Tags(tags tftags.KeyValueTags) map[string]string { + return tags.Map() +} + +// KeyValueTags creates tftags.KeyValueTags from m2 service tags. +func KeyValueTags(ctx context.Context, tags map[string]string) tftags.KeyValueTags { + return tftags.New(ctx, tags) +} + +// getTagsIn returns m2 service tags from Context. +// nil is returned if there are no input tags. +func getTagsIn(ctx context.Context) map[string]string { + if inContext, ok := tftags.FromContext(ctx); ok { + if tags := Tags(inContext.TagsIn.UnwrapOrDefault()); len(tags) > 0 { + return tags + } + } + + return nil +} + +// setTagsOut sets m2 service tags in Context. +func setTagsOut(ctx context.Context, tags map[string]string) { + if inContext, ok := tftags.FromContext(ctx); ok { + inContext.TagsOut = option.Some(KeyValueTags(ctx, tags)) + } +} + +// updateTags updates m2 service tags. +// The identifier is typically the Amazon Resource Name (ARN), although +// it may also be a different identifier depending on the service. +func updateTags(ctx context.Context, conn *m2.Client, identifier string, oldTagsMap, newTagsMap any, optFns ...func(*m2.Options)) error { + oldTags := tftags.New(ctx, oldTagsMap) + newTags := tftags.New(ctx, newTagsMap) + + ctx = tflog.SetField(ctx, logging.KeyResourceId, identifier) + + removedTags := oldTags.Removed(newTags) + removedTags = removedTags.IgnoreSystem(names.M2) + if len(removedTags) > 0 { + input := &m2.UntagResourceInput{ + ResourceArn: aws.String(identifier), + TagKeys: removedTags.Keys(), + } + + _, err := conn.UntagResource(ctx, input, optFns...) + + if err != nil { + return fmt.Errorf("untagging resource (%s): %w", identifier, err) + } + } + + updatedTags := oldTags.Updated(newTags) + updatedTags = updatedTags.IgnoreSystem(names.M2) + if len(updatedTags) > 0 { + input := &m2.TagResourceInput{ + ResourceArn: aws.String(identifier), + Tags: Tags(updatedTags), + } + + _, err := conn.TagResource(ctx, input, optFns...) + + if err != nil { + return fmt.Errorf("tagging resource (%s): %w", identifier, err) + } + } + + return nil +} + +// UpdateTags updates m2 service tags. +// It is called from outside this package. +func (p *servicePackage) UpdateTags(ctx context.Context, meta any, identifier string, oldTags, newTags any) error { + return updateTags(ctx, meta.(*conns.AWSClient).M2Client(ctx), identifier, oldTags, newTags) +} diff --git a/names/names.go b/names/names.go index 021a881c70a..f56be7dfa35 100644 --- a/names/names.go +++ b/names/names.go @@ -66,6 +66,7 @@ const ( KinesisEndpointID = "kinesis" LambdaEndpointID = "lambda" LexV2ModelsEndpointID = "models-v2-lex" + M2EndpointID = "m2" MediaLiveEndpointID = "medialive" MQEndpointID = "mq" ObservabilityAccessManagerEndpointID = "oam" diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown new file mode 100644 index 00000000000..5a20160bf1f --- /dev/null +++ b/website/docs/r/m2_environment.html.markdown @@ -0,0 +1,61 @@ +--- +subcategory: "Mainframe Modernization" +layout: "aws" +page_title: "AWS: aws_m2_environment" +description: |- + Terraform resource for managing an AWS Mainframe Modernization Environment. +--- +# Resource: aws_m2_environment + +Terraform resource for managing an [AWS Mainframe Modernization Environment](https://docs.aws.amazon.com/m2/latest/userguide/environments-m2.html). + +## Example Usage + +### Basic Usage + +```terraform +resource "aws_m2_environment" "example" { +} +``` + +## Argument Reference + +The following arguments are required: + +* `example_arg` - (Required) Concise argument description. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. + +The following arguments are optional: + +* `optional_arg` - (Optional) Concise argument description. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. + +## Attribute Reference + +This resource exports the following attributes in addition to the arguments above: + +* `arn` - ARN of the Environment. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. +* `example_attribute` - Concise description. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. + +## Timeouts + +[Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts): + +* `create` - (Default `60m`) +* `update` - (Default `180m`) +* `delete` - (Default `90m`) + +## Import + +In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Mainframe Modernization Environment using the `example_id_arg`. For example: + +```terraform +import { + to = aws_m2_environment.example + id = "environment-id-12345678" +} +``` + +Using `terraform import`, import Mainframe Modernization Environment using the `example_id_arg`. For example: + +```console +% terraform import aws_m2_environment.example environment-id-12345678 +``` From c51549354d97600e43f44acb2fd978959bb46668 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Thu, 11 Jan 2024 09:04:44 +0000 Subject: [PATCH 002/126] Initial pass on docs --- website/docs/r/m2_environment.html.markdown | 64 ++++++++++++++++++--- 1 file changed, 56 insertions(+), 8 deletions(-) diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index 5a20160bf1f..c4292b62067 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -14,7 +14,21 @@ Terraform resource for managing an [AWS Mainframe Modernization Environment](htt ### Basic Usage ```terraform -resource "aws_m2_environment" "example" { +resource "aws_m2_environment" "test" { + name = "test-env" + engine_type = "blueage" + instance_type = "M2.m5.large" + security_groups = ["sg-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef"] + + efs_mount { + file_system_id = "fs-01234567890abcdef" + mount_point = "/m2/mount/example" + } + + high_availability_config { + desired_capacity = 2 + } } ``` @@ -22,18 +36,52 @@ resource "aws_m2_environment" "example" { The following arguments are required: -* `example_arg` - (Required) Concise argument description. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. +* `name` - (Required) The name of the runtime environment. Must be unique within the account. +* `engine_type` - (Required) The engine type must be `microfocus | bluage`. +* `instance_type` - (Required) M2 Instance Type. +* `security_groups` - (Required) List of security group ids. +* `subnet_ids` - (Required) List of subnet ids to deploy environment to. The following arguments are optional: -* `optional_arg` - (Optional) Concise argument description. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. +* `engine_version` - (Optional) The specific version of the engine for the Environment. +* `preferred_maintenance_window` - (Optional) Configures the maintenance window that you want for the runtime nvironment. The maintenance window must have the format `ddd:hh24:mi-ddd:hh24:mi` and must be less than 24 hours. If not provided a random value will be used. +* `publicly_accessible` - (Optional) Allow applications deployed to this environment to be publicly accessible. +* `tags` - (Optional) Key-value tags for the place index. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. + +### efs_mount + +This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). + +The following arguments are required: + +* `mount_point` - (Required) Path to mount the filesystem on, must start with `/m2/mount/`. +* `file_sysatem_id` - (Required) Id of the EFS filesystem to mount. + +### high_availability_config - (Optional) + +This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). + +The following arguments are required: + +* `desired_capacity` - (Required) Desired number of instances for the Environment. + +### fsx_mount + +This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). + +The following arguments are required: + +* `mount_point` - (Required) Path to mount the filesystem on, must start with `/m2/mount/`. +* `file_sysatem_id` - (Required) Id of the FSX filesystem to mount. + ## Attribute Reference This resource exports the following attributes in addition to the arguments above: -* `arn` - ARN of the Environment. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. -* `example_attribute` - Concise description. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. +* `arn` - ARN of the Environment. +* `load_balancer_arn` - ARN of the load balancer created by the Environment. ## Timeouts @@ -50,12 +98,12 @@ In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashico ```terraform import { to = aws_m2_environment.example - id = "environment-id-12345678" + id = "01234567890abcdef012345678" } ``` -Using `terraform import`, import Mainframe Modernization Environment using the `example_id_arg`. For example: +Using `terraform import`, import Mainframe Modernization Environment using the `01234567890abcdef012345678`. For example: ```console -% terraform import aws_m2_environment.example environment-id-12345678 +% terraform import aws_m2_environment.example 01234567890abcdef012345678 ``` From 2061c987427526daf150cec870afe10f3eb21aa9 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Thu, 11 Jan 2024 10:25:37 +0000 Subject: [PATCH 003/126] Fix doc issues, break tests up so basic test is minimal as possible --- internal/service/m2/environment.go | 74 +++++----- internal/service/m2/environment_test.go | 147 ++++++++++++++++++-- website/docs/r/m2_environment.html.markdown | 68 +++++++-- 3 files changed, 230 insertions(+), 59 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 976c63135f6..48b336a3d4b 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -102,11 +102,6 @@ func ResourceEnvironment() *schema.Resource { Type: schema.TypeString, Optional: true, }, - "force_updates": { - Type: schema.TypeBool, - Optional: true, - Description: "Force updates to the environment.", - }, "fsx_mount": { Type: schema.TypeSet, Optional: true, @@ -131,6 +126,7 @@ func ResourceEnvironment() *schema.Resource { Type: schema.TypeList, MaxItems: 1, Optional: true, + Computed: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "desired_capacity": { @@ -168,7 +164,6 @@ func ResourceEnvironment() *schema.Resource { "publicly_accessible": { Type: schema.TypeBool, Optional: true, - Default: false, ForceNew: true, }, "security_groups": { @@ -207,27 +202,36 @@ func resourceEnvironmentCreate(ctx context.Context, d *schema.ResourceData, meta } in := &m2.CreateEnvironmentInput{ - EngineType: types.EngineType(d.Get("engine_type").(string)), - InstanceType: aws.String(d.Get("instance_type").(string)), - Name: aws.String(d.Get("name").(string)), - ClientToken: aws.String(clientToken), - Description: aws.String(d.Get("description").(string)), - EngineVersion: aws.String(d.Get("engine_version").(string)), - KmsKeyId: aws.String(d.Get("kms_key_id").(string)), - PubliclyAccessible: d.Get("publicly_accessible").(bool), - SecurityGroupIds: flex.ExpandStringValueSet(d.Get("security_groups").(*schema.Set)), - SubnetIds: flex.ExpandStringValueSet(d.Get("subnet_ids").(*schema.Set)), - Tags: getTagsIn(ctx), + EngineType: types.EngineType(d.Get("engine_type").(string)), + InstanceType: aws.String(d.Get("instance_type").(string)), + Name: aws.String(d.Get("name").(string)), + ClientToken: aws.String(clientToken), + Description: aws.String(d.Get("description").(string)), + SecurityGroupIds: flex.ExpandStringValueSet(d.Get("security_groups").(*schema.Set)), + SubnetIds: flex.ExpandStringValueSet(d.Get("subnet_ids").(*schema.Set)), + Tags: getTagsIn(ctx), + } + + if v, ok := d.GetOk("engine_version"); ok { + in.EngineVersion = aws.String(v.(string)) } if v, ok := d.GetOk("high_availability_config"); ok && len(v.([]interface{})) > 0 { in.HighAvailabilityConfig = expandHaConfig(v.([]interface{})) } + if v, ok := d.GetOk("kms_key_id"); ok { + in.KmsKeyId = aws.String(v.(string)) + } + if v, ok := d.GetOk("preferred_maintenance_window"); ok { in.PreferredMaintenanceWindow = aws.String(v.(string)) } + if v, ok := d.GetOk("publicly_accessible"); ok { + in.PubliclyAccessible = v.(bool) + } + in.StorageConfigurations = expandStorageConfigurations(d) out, err := conn.CreateEnvironment(ctx, in) @@ -485,24 +489,6 @@ func expandStorageConfigurations(d *schema.ResourceData) []types.StorageConfigur return configs } -func expandStorageConfiguration(m map[string]interface{}, efs bool) types.StorageConfiguration { - if efs { - return &types.StorageConfigurationMemberEfs{ - Value: types.EfsStorageConfiguration{ - FileSystemId: aws.String(m["file_system_id"].(string)), - MountPoint: aws.String(m["mount_point"].(string)), - }, - } - } else { - return &types.StorageConfigurationMemberFsx{ - Value: types.FsxStorageConfiguration{ - FileSystemId: aws.String(m["file_system_id"].(string)), - MountPoint: aws.String(m["mount_point"].(string)), - }, - } - } -} - func expandHaConfig(tfList []interface{}) *types.HighAvailabilityConfig { if len(tfList) == 0 { return nil @@ -529,6 +515,24 @@ func flattenHaConfig(haConfig *types.HighAvailabilityConfig) []interface{} { }} } +func expandStorageConfiguration(m map[string]interface{}, efs bool) types.StorageConfiguration { + if efs { + return &types.StorageConfigurationMemberEfs{ + Value: types.EfsStorageConfiguration{ + FileSystemId: aws.String(m["file_system_id"].(string)), + MountPoint: aws.String(m["mount_point"].(string)), + }, + } + } else { + return &types.StorageConfigurationMemberFsx{ + Value: types.FsxStorageConfiguration{ + FileSystemId: aws.String(m["file_system_id"].(string)), + MountPoint: aws.String(m["mount_point"].(string)), + }, + } + } +} + func flattenStorageConfig(storageConfig []types.StorageConfiguration) ([]interface{}, []interface{}) { efsConfig := make([]interface{}, 0) fsxConfig := make([]interface{}, 0) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 62a87e2309c..eed937f03b6 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -53,7 +53,54 @@ func TestAccM2Environment_basic(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion, 2), + Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "description", rName), + resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), + resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), + resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "efs_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccM2Environment_highAvailability(t *testing.T) { + ctx := acctest.Context(t) + // TIP: This is a long-running test guard for tests that run longer than + // 300s (5 min) generally. + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + var environment m2.GetEnvironmentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_highAvailability(rName, testEngineType, testEngineVersion, 2), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), resource.TestCheckResourceAttr(resourceName, "description", rName), @@ -63,6 +110,53 @@ func TestAccM2Environment_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "efs_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccM2Environment_efs(t *testing.T) { + ctx := acctest.Context(t) + // TIP: This is a long-running test guard for tests that run longer than + // 300s (5 min) generally. + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + var environment m2.GetEnvironmentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_efsComplete(rName, testEngineType, testEngineVersion), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "description", rName), + resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), + resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), + resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), resource.TestCheckResourceAttr(resourceName, "efs_mount.0.mount_point", "/m2/mount/example"), resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), @@ -98,7 +192,7 @@ func TestAccM2Environment_disappears(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion, 2), + Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), acctest.CheckResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment(), resourceName), @@ -185,7 +279,7 @@ func testAccCheckEnvironmentNotRecreated(before, after *m2.GetEnvironmentOutput) } } -func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string, desiredCapacity int32) string { +func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), testAccEnvironmentConfig_efs(rName), fmt.Sprintf(` @@ -198,13 +292,22 @@ resource "aws_m2_environment" "test" { instance_type = "M2.m5.large" security_groups = [aws_security_group.test.id] subnet_ids = aws_subnet.test[*].id - kms_key_id = aws_kms_key.test.id - +} +`, rName, engineType, engineVersion)) +} - efs_mount { - file_system_id = aws_efs_file_system.test.id - mount_point = "/m2/mount/example" - } +func testAccEnvironmentConfig_highAvailability(rName, engineType, engineVersion string, desiredCapacity int32) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), + fmt.Sprintf(` + +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id high_availability_config { desired_capacity = %[4]d @@ -213,6 +316,29 @@ resource "aws_m2_environment" "test" { `, rName, engineType, engineVersion, desiredCapacity)) } +func testAccEnvironmentConfig_efsComplete(rName, engineType, engineVersion string) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), + testAccEnvironmentConfig_efs(rName), + fmt.Sprintf(` + +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + + efs_mount { + file_system_id = aws_efs_file_system.test.id + mount_point = "/m2/mount/example" + } + +} +`, rName, engineType, engineVersion)) +} + func testAccEnvironmentConfig_base(rName string) string { return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptInDefaultExclude(), fmt.Sprintf(` @@ -259,9 +385,6 @@ resource "aws_security_group" "test" { cidr_blocks = [aws_vpc.test.cidr_block] } } -resource "aws_kms_key" "test" { - deletion_window_in_days = 7 -} `, rName)) } diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index c4292b62067..eff60d14e80 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -16,7 +16,35 @@ Terraform resource for managing an [AWS Mainframe Modernization Environment](htt ```terraform resource "aws_m2_environment" "test" { name = "test-env" - engine_type = "blueage" + engine_type = "bluage" + instance_type = "M2.m5.large" + security_groups = ["sg-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef"] +} +``` + +### High Availability + +```terraform +resource "aws_m2_environment" "test" { + name = "test-env" + engine_type = "bluage" + instance_type = "M2.m5.large" + security_groups = ["sg-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef", "subnet-01234567890abcdea"] + + high_availability_config { + desired_capacity = 2 + } +} +``` + +### EFS Filesystem + +```terraform +resource "aws_m2_environment" "test" { + name = "test-env" + engine_type = "bluage" instance_type = "M2.m5.large" security_groups = ["sg-01234567890abcdef"] subnet_ids = ["subnet-01234567890abcdef"] @@ -25,10 +53,24 @@ resource "aws_m2_environment" "test" { file_system_id = "fs-01234567890abcdef" mount_point = "/m2/mount/example" } +} +``` - high_availability_config { - desired_capacity = 2 +### FSX Filesystem + +```terraform +resource "aws_m2_environment" "test" { + name = "test-env" + engine_type = "bluage" + instance_type = "M2.m5.large" + security_groups = ["sg-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef"] + + fsx_mount { + file_system_id = "fs-01234567890abcdef" + mount_point = "/m2/mount/example" } + } ``` @@ -36,8 +78,8 @@ resource "aws_m2_environment" "test" { The following arguments are required: -* `name` - (Required) The name of the runtime environment. Must be unique within the account. -* `engine_type` - (Required) The engine type must be `microfocus | bluage`. +* `name` - (Required) Name of the runtime environment. Must be unique within the account. +* `engine_type` - (Required) Engine type must be `microfocus | bluage`. * `instance_type` - (Required) M2 Instance Type. * `security_groups` - (Required) List of security group ids. * `subnet_ids` - (Required) List of subnet ids to deploy environment to. @@ -45,7 +87,8 @@ The following arguments are required: The following arguments are optional: * `engine_version` - (Optional) The specific version of the engine for the Environment. -* `preferred_maintenance_window` - (Optional) Configures the maintenance window that you want for the runtime nvironment. The maintenance window must have the format `ddd:hh24:mi-ddd:hh24:mi` and must be less than 24 hours. If not provided a random value will be used. +* `kms_key_id` - (Optional) KMS Key to use for the Environment. +* `preferred_maintenance_window` - (Optional) Configures the maintenance window that you want for the runtime environment. The maintenance window must have the format `ddd:hh24:mi-ddd:hh24:mi` and must be less than 24 hours. If not provided a random value will be used. * `publicly_accessible` - (Optional) Allow applications deployed to this environment to be publicly accessible. * `tags` - (Optional) Key-value tags for the place index. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. @@ -56,24 +99,25 @@ This argument is processed in [attribute-as-blocks mode](https://www.terraform.i The following arguments are required: * `mount_point` - (Required) Path to mount the filesystem on, must start with `/m2/mount/`. -* `file_sysatem_id` - (Required) Id of the EFS filesystem to mount. +* `file_system_id` - (Required) Id of the EFS filesystem to mount. -### high_availability_config - (Optional) +### fsx_mount This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). The following arguments are required: -* `desired_capacity` - (Required) Desired number of instances for the Environment. +* `mount_point` - (Required) Path to mount the filesystem on, must start with `/m2/mount/`. +* `file_system_id` - (Required) Id of the FSX filesystem to mount. -### fsx_mount +### high_availability_config - (Optional) This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). The following arguments are required: -* `mount_point` - (Required) Path to mount the filesystem on, must start with `/m2/mount/`. -* `file_sysatem_id` - (Required) Id of the FSX filesystem to mount. +* `desired_capacity` - (Required) Desired number of instances for the Environment. + ## Attribute Reference From 2a2945388f7d3e9109d8085fa84bd56008c4cead Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Thu, 11 Jan 2024 13:08:35 +0000 Subject: [PATCH 004/126] Missing example param in docs --- website/docs/r/m2_environment.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index eff60d14e80..12a7a66f33c 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -137,7 +137,7 @@ This resource exports the following attributes in addition to the arguments abov ## Import -In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Mainframe Modernization Environment using the `example_id_arg`. For example: +In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Mainframe Modernization Environment using the `01234567890abcdef012345678`. For example: ```terraform import { From 587b7cdca66244ea0b058945b52729c439ff9fc5 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Thu, 11 Jan 2024 21:11:54 +0000 Subject: [PATCH 005/126] Test update and fixes --- internal/service/m2/environment.go | 4 +- internal/service/m2/environment_test.go | 89 ++++++++++++++++++++++++- 2 files changed, 88 insertions(+), 5 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 48b336a3d4b..c40e86eb733 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -132,7 +132,7 @@ func ResourceEnvironment() *schema.Resource { "desired_capacity": { Type: schema.TypeInt, Required: true, - ValidateFunc: validation.IntBetween(1, 100), + ValidateFunc: validation.IntBetween(0, 100), }, }, }, @@ -321,7 +321,7 @@ func resourceEnvironmentUpdate(ctx context.Context, d *schema.ResourceData, meta if d.HasChange("high_availability_config") { if v, ok := d.GetOk("high_availability_config"); ok && len(v.([]interface{})) > 0 { config := v.([]interface{})[0].(map[string]interface{}) - in.DesiredCapacity = aws.Int32(config["desired_capacity"].(int32)) + in.DesiredCapacity = aws.Int32(int32(config["desired_capacity"].(int))) } else { in.DesiredCapacity = aws.Int32(1) } diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index eed937f03b6..d5de1f394b9 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -26,8 +26,9 @@ import ( ) const ( - testEngineType = "bluage" - testEngineVersion = "3.7.0" + testEngineType = "bluage" + testEngineVersion = "3.7.0" + testEngineUpdateVersion = "3.8.0" ) func TestAccM2Environment_basic(t *testing.T) { @@ -77,6 +78,65 @@ func TestAccM2Environment_basic(t *testing.T) { }) } +func TestAccM2Environment_update(t *testing.T) { + ctx := acctest.Context(t) + // TIP: This is a long-running test guard for tests that run longer than + // 300s (5 min) generally. + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + var environment m2.GetEnvironmentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_highAvailability(rName, testEngineType, testEngineVersion, 2), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "description", rName), + resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), + resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), + resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "efs_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + ), + }, + { + Config: testAccEnvironmentConfig_update(rName, testEngineType, testEngineVersion, 1), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "description", rName), + resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "1"), + resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), + resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "efs_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m6i.large"), + resource.TestCheckResourceAttr(resourceName, "preferred_maintenance_window", "sat:03:35-sat:05:35"), + ), + }, + }, + }) +} + func TestAccM2Environment_highAvailability(t *testing.T) { ctx := acctest.Context(t) // TIP: This is a long-running test guard for tests that run longer than @@ -281,7 +341,6 @@ func testAccCheckEnvironmentNotRecreated(before, after *m2.GetEnvironmentOutput) func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), - testAccEnvironmentConfig_efs(rName), fmt.Sprintf(` resource "aws_m2_environment" "test" { @@ -296,6 +355,30 @@ resource "aws_m2_environment" "test" { `, rName, engineType, engineVersion)) } +func testAccEnvironmentConfig_update(rName, engineType, engineVersion string, desiredCapacity int32) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), + fmt.Sprintf(` + +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m6i.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + + preferred_maintenance_window = "sat:03:35-sat:05:35" + + high_availability_config { + desired_capacity = %[4]d + } + +} +`, rName, engineType, engineVersion, desiredCapacity)) + +} + func testAccEnvironmentConfig_highAvailability(rName, engineType, engineVersion string, desiredCapacity int32) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` From 58ec004a27a391c5a0939efb01dd582243c5dff4 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Thu, 11 Jan 2024 21:27:46 +0000 Subject: [PATCH 006/126] Add force_update --- internal/service/m2/environment.go | 9 +++++++++ website/docs/r/m2_environment.html.markdown | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index c40e86eb733..a09d4d3f344 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -102,6 +102,11 @@ func ResourceEnvironment() *schema.Resource { Type: schema.TypeString, Optional: true, }, + "force_update": { + Type: schema.TypeBool, + Optional: true, + Description: "Force updates to the environment.", + }, "fsx_mount": { Type: schema.TypeSet, Optional: true, @@ -305,6 +310,10 @@ func resourceEnvironmentUpdate(ctx context.Context, d *schema.ResourceData, meta EnvironmentId: aws.String(d.Id()), } + if v, ok := d.GetOk("force_update"); ok { + in.ForceUpdate = v.(bool) + } + if v, ok := d.GetOk("apply_changes_during_maintenance_window"); ok && v.(bool) { if d.HasChangesExcept("apply_changes_during_maintenance_window", "engine_version") { return create.AppendDiagError(diags, names.M2, create.ErrActionUpdating, ResNameEnvironment, d.Id(), fmt.Errorf("cannot make changes to any configuration except `engine_version` during maintenance window")) diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index 12a7a66f33c..e000b30f733 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -87,6 +87,7 @@ The following arguments are required: The following arguments are optional: * `engine_version` - (Optional) The specific version of the engine for the Environment. +* `force_update` - (Optional) Force update the environment even if applications are running. * `kms_key_id` - (Optional) KMS Key to use for the Environment. * `preferred_maintenance_window` - (Optional) Configures the maintenance window that you want for the runtime environment. The maintenance window must have the format `ddd:hh24:mi-ddd:hh24:mi` and must be less than 24 hours. If not provided a random value will be used. * `publicly_accessible` - (Optional) Allow applications deployed to this environment to be publicly accessible. @@ -110,7 +111,7 @@ The following arguments are required: * `mount_point` - (Required) Path to mount the filesystem on, must start with `/m2/mount/`. * `file_system_id` - (Required) Id of the FSX filesystem to mount. -### high_availability_config - (Optional) +### high_availability_config This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). From 2cc3aacb7c08ae860c03d0781411800698f6a011 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 10:39:26 +0000 Subject: [PATCH 007/126] Add changelog entry --- .changelog/35311.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/35311.txt diff --git a/.changelog/35311.txt b/.changelog/35311.txt new file mode 100644 index 00000000000..a2cdda5a420 --- /dev/null +++ b/.changelog/35311.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +aws_m2_environment +``` \ No newline at end of file From ed51d73365d700ef7844fd2378adec1203f6f998 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 10:44:56 +0000 Subject: [PATCH 008/126] Fix formatting of terraform in tests --- internal/service/m2/environment_test.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index d5de1f394b9..82449a640a0 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -426,8 +426,8 @@ func testAccEnvironmentConfig_base(rName string) string { return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptInDefaultExclude(), fmt.Sprintf(` resource "aws_vpc" "test" { - cidr_block = "10.0.0.0/16" - enable_dns_support = true + cidr_block = "10.0.0.0/16" + enable_dns_support = true enable_dns_hostnames = true tags = { @@ -456,15 +456,15 @@ resource "aws_security_group" "test" { Name = %[1]q } egress { - from_port = 0 - to_port = 0 - protocol = "-1" + from_port = 0 + to_port = 0 + protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } ingress { - from_port = 0 - to_port = 0 - protocol = "-1" + from_port = 0 + to_port = 0 + protocol = "-1" cidr_blocks = [aws_vpc.test.cidr_block] } } @@ -492,8 +492,9 @@ resource "aws_efs_access_point" "test" { resource "aws_efs_mount_target" "test" { count = 2 - file_system_id = aws_efs_file_system.test.id - subnet_id = aws_subnet.test[count.index].id + + file_system_id = aws_efs_file_system.test.id + subnet_id = aws_subnet.test[count.index].id security_groups = [aws_security_group.test.id] } `, rName) From 05280d3a1c915751fb547813f2776eac566584b8 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 10:47:17 +0000 Subject: [PATCH 009/126] Fix blank lines in docs --- website/docs/r/m2_environment.html.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index e000b30f733..f852f41e4e5 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -119,8 +119,6 @@ The following arguments are required: * `desired_capacity` - (Required) Desired number of instances for the Environment. - - ## Attribute Reference This resource exports the following attributes in addition to the arguments above: From 715efc3dd555e0548d673058f1fa800e470df6f5 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 10:49:33 +0000 Subject: [PATCH 010/126] Fix hcl formatting in docs --- website/docs/r/m2_environment.html.markdown | 44 ++++++++++----------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index f852f41e4e5..f33897cd698 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -15,11 +15,11 @@ Terraform resource for managing an [AWS Mainframe Modernization Environment](htt ```terraform resource "aws_m2_environment" "test" { - name = "test-env" - engine_type = "bluage" - instance_type = "M2.m5.large" - security_groups = ["sg-01234567890abcdef"] - subnet_ids = ["subnet-01234567890abcdef"] + name = "test-env" + engine_type = "bluage" + instance_type = "M2.m5.large" + security_groups = ["sg-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef"] } ``` @@ -27,11 +27,11 @@ resource "aws_m2_environment" "test" { ```terraform resource "aws_m2_environment" "test" { - name = "test-env" - engine_type = "bluage" - instance_type = "M2.m5.large" - security_groups = ["sg-01234567890abcdef"] - subnet_ids = ["subnet-01234567890abcdef", "subnet-01234567890abcdea"] + name = "test-env" + engine_type = "bluage" + instance_type = "M2.m5.large" + security_groups = ["sg-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef", "subnet-01234567890abcdea"] high_availability_config { desired_capacity = 2 @@ -43,15 +43,15 @@ resource "aws_m2_environment" "test" { ```terraform resource "aws_m2_environment" "test" { - name = "test-env" - engine_type = "bluage" - instance_type = "M2.m5.large" - security_groups = ["sg-01234567890abcdef"] - subnet_ids = ["subnet-01234567890abcdef"] + name = "test-env" + engine_type = "bluage" + instance_type = "M2.m5.large" + security_groups = ["sg-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef"] efs_mount { file_system_id = "fs-01234567890abcdef" - mount_point = "/m2/mount/example" + mount_point = "/m2/mount/example" } } ``` @@ -60,15 +60,15 @@ resource "aws_m2_environment" "test" { ```terraform resource "aws_m2_environment" "test" { - name = "test-env" - engine_type = "bluage" - instance_type = "M2.m5.large" - security_groups = ["sg-01234567890abcdef"] - subnet_ids = ["subnet-01234567890abcdef"] + name = "test-env" + engine_type = "bluage" + instance_type = "M2.m5.large" + security_groups = ["sg-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef"] fsx_mount { file_system_id = "fs-01234567890abcdef" - mount_point = "/m2/mount/example" + mount_point = "/m2/mount/example" } } From 0c4066d08db394134956242532c467ff8a4ada08 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 10:51:11 +0000 Subject: [PATCH 011/126] Fix hcl formatting in docs --- website/docs/r/m2_environment.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index f33897cd698..fd9b92a35e7 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -32,7 +32,7 @@ resource "aws_m2_environment" "test" { instance_type = "M2.m5.large" security_groups = ["sg-01234567890abcdef"] subnet_ids = ["subnet-01234567890abcdef", "subnet-01234567890abcdea"] - + high_availability_config { desired_capacity = 2 } From cf27fd882f9aad38e6a745036d4683aacc324017 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 10:53:40 +0000 Subject: [PATCH 012/126] Fix test resource formatting --- internal/service/m2/environment_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 82449a640a0..f14553b239a 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -463,10 +463,10 @@ resource "aws_security_group" "test" { } ingress { from_port = 0 - to_port = 0 + to_port = 0 protocol = "-1" cidr_blocks = [aws_vpc.test.cidr_block] - } + } } `, rName)) } From 3014e1590c547ede18d7b100fb970775dd61361d Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 11:00:40 +0000 Subject: [PATCH 013/126] Remove trailing spaces in test hcl --- internal/service/m2/environment_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index f14553b239a..5a4192ef4f4 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -345,7 +345,7 @@ func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string) str resource "aws_m2_environment" "test" { name = %[1]q - description = %[1]q + description = %[1]q engine_type = %[2]q engine_version = %[3]q instance_type = "M2.m5.large" @@ -361,7 +361,7 @@ func testAccEnvironmentConfig_update(rName, engineType, engineVersion string, de resource "aws_m2_environment" "test" { name = %[1]q - description = %[1]q + description = %[1]q engine_type = %[2]q engine_version = %[3]q instance_type = "M2.m6i.large" @@ -385,7 +385,7 @@ func testAccEnvironmentConfig_highAvailability(rName, engineType, engineVersion resource "aws_m2_environment" "test" { name = %[1]q - description = %[1]q + description = %[1]q engine_type = %[2]q engine_version = %[3]q instance_type = "M2.m5.large" @@ -406,7 +406,7 @@ func testAccEnvironmentConfig_efsComplete(rName, engineType, engineVersion strin resource "aws_m2_environment" "test" { name = %[1]q - description = %[1]q + description = %[1]q engine_type = %[2]q engine_version = %[3]q instance_type = "M2.m5.large" From 3864f046fa6b4dc0b759a89a3d908719876e80ec Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 11:06:09 +0000 Subject: [PATCH 014/126] Fix more formatting in tests now it parses --- internal/service/m2/environment_test.go | 58 ++++++++++++------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 5a4192ef4f4..3a0b7b02b31 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -344,13 +344,13 @@ func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string) str fmt.Sprintf(` resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m5.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id } `, rName, engineType, engineVersion)) } @@ -360,13 +360,13 @@ func testAccEnvironmentConfig_update(rName, engineType, engineVersion string, de fmt.Sprintf(` resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m6i.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m6i.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id preferred_maintenance_window = "sat:03:35-sat:05:35" @@ -384,13 +384,13 @@ func testAccEnvironmentConfig_highAvailability(rName, engineType, engineVersion fmt.Sprintf(` resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m5.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id high_availability_config { desired_capacity = %[4]d @@ -405,17 +405,17 @@ func testAccEnvironmentConfig_efsComplete(rName, engineType, engineVersion strin fmt.Sprintf(` resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m5.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id efs_mount { file_system_id = aws_efs_file_system.test.id - mount_point = "/m2/mount/example" + mount_point = "/m2/mount/example" } } From f66e11989a5cb05b27a00919f3dad6b1f9614926 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 11:09:41 +0000 Subject: [PATCH 015/126] Remove trailing spaces in test hcl --- internal/service/m2/environment_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 3a0b7b02b31..1cf6fcced4b 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -390,7 +390,7 @@ resource "aws_m2_environment" "test" { engine_version = %[3]q instance_type = "M2.m5.large" security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id + subnet_ids = aws_subnet.test[*].id high_availability_config { desired_capacity = %[4]d @@ -411,7 +411,7 @@ resource "aws_m2_environment" "test" { engine_version = %[3]q instance_type = "M2.m5.large" security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id + subnet_ids = aws_subnet.test[*].id efs_mount { file_system_id = aws_efs_file_system.test.id From 872cc3b585b3a7650ba4adfe5344db91fac8c728 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 11:10:15 +0000 Subject: [PATCH 016/126] Remove trailing spaces in test hcl --- internal/service/m2/environment_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 1cf6fcced4b..b47b471ac93 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -367,7 +367,7 @@ resource "aws_m2_environment" "test" { instance_type = "M2.m6i.large" security_groups = [aws_security_group.test.id] subnet_ids = aws_subnet.test[*].id - + preferred_maintenance_window = "sat:03:35-sat:05:35" high_availability_config { From 8018f1a496a58d5b3f5dc3326e663eace260340d Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 11:22:40 +0000 Subject: [PATCH 017/126] Fix import check failing --- internal/service/m2/environment.go | 12 ++++++------ internal/service/m2/environment_test.go | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index a09d4d3f344..d46c99b19e0 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -7,24 +7,24 @@ import ( "context" "errors" "fmt" - "github.com/YakDriver/regexache" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/enum" - "github.com/hashicorp/terraform-provider-aws/internal/flex" - tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "log" "time" + "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/flex" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index b47b471ac93..6e7d9c7a2ba 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -20,9 +20,8 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/create" "github.com/hashicorp/terraform-provider-aws/internal/errs" - "github.com/hashicorp/terraform-provider-aws/names" - tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/names" ) const ( From adda8413eb6871319135fb18ef6a35805d59c43b Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 12:11:11 +0000 Subject: [PATCH 018/126] Fix linting warnings --- internal/service/m2/environment.go | 20 +++++++------------- internal/service/m2/environment_test.go | 15 ++------------- 2 files changed, 9 insertions(+), 26 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index d46c99b19e0..c0271f63658 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -29,7 +29,6 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// Function annotations are used for resource registration to the Provider. DO NOT EDIT. // @SDKResource("aws_m2_environment", name="Environment") // @Tags(identifierAttribute="arn") func ResourceEnvironment() *schema.Resource { @@ -72,7 +71,7 @@ func ResourceEnvironment() *schema.Resource { ForceNew: true, }, "efs_mount": { - Type: schema.TypeSet, + Type: schema.TypeList, Optional: true, MinItems: 0, MaxItems: 1, @@ -108,7 +107,7 @@ func ResourceEnvironment() *schema.Resource { Description: "Force updates to the environment.", }, "fsx_mount": { - Type: schema.TypeSet, + Type: schema.TypeList, Optional: true, ForceNew: true, MinItems: 0, @@ -250,12 +249,10 @@ func resourceEnvironmentCreate(ctx context.Context, d *schema.ResourceData, meta d.SetId(aws.ToString(out.EnvironmentId)) - // TIP: -- 5. Use a waiter to wait for create to complete if _, err := waitEnvironmentCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil { return create.AppendDiagError(diags, names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, d.Id(), err) } - // TIP: -- 6. Call the Read function in the Create return return append(diags, resourceEnvironmentRead(ctx, d, meta)...) } @@ -285,7 +282,6 @@ func resourceEnvironmentRead(ctx context.Context, d *schema.ResourceData, meta i d.Set("name", out.Name) efsConfig, fsxConfig := flattenStorageConfig(out.StorageConfigurations) - d.Set("efs_mount", efsConfig) d.Set("fsx_mount", fsxConfig) @@ -483,14 +479,14 @@ func expandStorageConfigurations(d *schema.ResourceData) []types.StorageConfigur configs := make([]types.StorageConfiguration, 0) if efsMounts, ok := d.GetOk("efs_mount"); ok { - for _, config := range efsMounts.(*schema.Set).List() { + for _, config := range efsMounts.([]interface{}) { configMap := config.(map[string]interface{}) configs = append(configs, expandStorageConfiguration(configMap, true)) } } if fsxMounts, ok := d.GetOk("fsx_mount"); ok { - for _, config := range fsxMounts.(*schema.Set).List() { + for _, config := range fsxMounts.([]interface{}) { configMap := config.(map[string]interface{}) configs = append(configs, expandStorageConfiguration(configMap, false)) } @@ -546,13 +542,11 @@ func flattenStorageConfig(storageConfig []types.StorageConfiguration) ([]interfa efsConfig := make([]interface{}, 0) fsxConfig := make([]interface{}, 0) for _, config := range storageConfig { - switch config.(type) { + switch v := config.(type) { case *types.StorageConfigurationMemberEfs: - r := config.(*types.StorageConfigurationMemberEfs) - efsConfig = appendStorageConfig(r.Value.FileSystemId, r.Value.MountPoint, efsConfig) + efsConfig = appendStorageConfig(v.Value.FileSystemId, v.Value.MountPoint, efsConfig) case *types.StorageConfigurationMemberFsx: - r := config.(*types.StorageConfigurationMemberFsx) - fsxConfig = appendStorageConfig(r.Value.FileSystemId, r.Value.MountPoint, fsxConfig) + fsxConfig = appendStorageConfig(v.Value.FileSystemId, v.Value.MountPoint, fsxConfig) } } return efsConfig, fsxConfig diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 6e7d9c7a2ba..8f08404a77e 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -25,9 +25,8 @@ import ( ) const ( - testEngineType = "bluage" - testEngineVersion = "3.7.0" - testEngineUpdateVersion = "3.8.0" + testEngineType = "bluage" + testEngineVersion = "3.7.0" ) func TestAccM2Environment_basic(t *testing.T) { @@ -328,16 +327,6 @@ func testAccPreCheck(ctx context.Context, t *testing.T) { } } -func testAccCheckEnvironmentNotRecreated(before, after *m2.GetEnvironmentOutput) resource.TestCheckFunc { - return func(s *terraform.State) error { - if before, after := aws.ToString(before.EnvironmentId), aws.ToString(after.EnvironmentId); before != after { - return create.Error(names.M2, create.ErrActionCheckingNotRecreated, tfm2.ResNameEnvironment, before, errors.New("recreated")) - } - - return nil - } -} - func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` From e1404da364d4c9a4a24b54c9e3e212137b92b1b4 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 13:48:23 +0000 Subject: [PATCH 019/126] Remove trailing empty lines --- internal/service/m2/environment.go | 1 - internal/service/m2/environment_test.go | 7 ------- 2 files changed, 8 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index c0271f63658..d6f54e12646 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -502,7 +502,6 @@ func expandHaConfig(tfList []interface{}) *types.HighAvailabilityConfig { v, ok := tfList[0].(map[string]interface{}) if ok { - return &types.HighAvailabilityConfig{ DesiredCapacity: aws.Int32(int32(v["desired_capacity"].(int))), } diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 8f08404a77e..110e00cb2d1 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -330,7 +330,6 @@ func testAccPreCheck(ctx context.Context, t *testing.T) { func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` - resource "aws_m2_environment" "test" { name = %[1]q description = %[1]q @@ -346,7 +345,6 @@ resource "aws_m2_environment" "test" { func testAccEnvironmentConfig_update(rName, engineType, engineVersion string, desiredCapacity int32) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` - resource "aws_m2_environment" "test" { name = %[1]q description = %[1]q @@ -361,16 +359,13 @@ resource "aws_m2_environment" "test" { high_availability_config { desired_capacity = %[4]d } - } `, rName, engineType, engineVersion, desiredCapacity)) - } func testAccEnvironmentConfig_highAvailability(rName, engineType, engineVersion string, desiredCapacity int32) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` - resource "aws_m2_environment" "test" { name = %[1]q description = %[1]q @@ -391,7 +386,6 @@ func testAccEnvironmentConfig_efsComplete(rName, engineType, engineVersion strin return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), testAccEnvironmentConfig_efs(rName), fmt.Sprintf(` - resource "aws_m2_environment" "test" { name = %[1]q description = %[1]q @@ -405,7 +399,6 @@ resource "aws_m2_environment" "test" { file_system_id = aws_efs_file_system.test.id mount_point = "/m2/mount/example" } - } `, rName, engineType, engineVersion)) } From f618bea8b3a8b93559f32054c82faad622bfc8e3 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 15 Jan 2024 17:51:12 +0000 Subject: [PATCH 020/126] Fix naming and adjust default timeouts in docs to match code. --- internal/service/m2/environment.go | 10 +++++----- website/docs/r/m2_environment.html.markdown | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index d6f54e12646..e66ad8475da 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -236,7 +236,7 @@ func resourceEnvironmentCreate(ctx context.Context, d *schema.ResourceData, meta in.PubliclyAccessible = v.(bool) } - in.StorageConfigurations = expandStorageConfigurations(d) + in.StorageConfigurations = expandStorageConfig(d) out, err := conn.CreateEnvironment(ctx, in) if err != nil { @@ -475,20 +475,20 @@ func findEnvironmentByID(ctx context.Context, conn *m2.Client, id string) (*m2.G return out, nil } -func expandStorageConfigurations(d *schema.ResourceData) []types.StorageConfiguration { +func expandStorageConfig(d *schema.ResourceData) []types.StorageConfiguration { configs := make([]types.StorageConfiguration, 0) if efsMounts, ok := d.GetOk("efs_mount"); ok { for _, config := range efsMounts.([]interface{}) { configMap := config.(map[string]interface{}) - configs = append(configs, expandStorageConfiguration(configMap, true)) + configs = append(configs, newStorageConfig(configMap, true)) } } if fsxMounts, ok := d.GetOk("fsx_mount"); ok { for _, config := range fsxMounts.([]interface{}) { configMap := config.(map[string]interface{}) - configs = append(configs, expandStorageConfiguration(configMap, false)) + configs = append(configs, newStorageConfig(configMap, false)) } } return configs @@ -519,7 +519,7 @@ func flattenHaConfig(haConfig *types.HighAvailabilityConfig) []interface{} { }} } -func expandStorageConfiguration(m map[string]interface{}, efs bool) types.StorageConfiguration { +func newStorageConfig(m map[string]interface{}, efs bool) types.StorageConfiguration { if efs { return &types.StorageConfigurationMemberEfs{ Value: types.EfsStorageConfiguration{ diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index fd9b92a35e7..91757ae4f76 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -130,9 +130,9 @@ This resource exports the following attributes in addition to the arguments abov [Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts): -* `create` - (Default `60m`) -* `update` - (Default `180m`) -* `delete` - (Default `90m`) +* `create` - (Default `30m`) +* `update` - (Default `30m`) +* `delete` - (Default `30m`) ## Import From 95a6a8836441f1bdef72ccf25ecf824bccf52f72 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Tue, 16 Jan 2024 16:12:42 +0000 Subject: [PATCH 021/126] Iniitial Commit --- internal/service/m2/environment.go | 518 +++++++++++++++++++++ internal/service/m2/environment_test.go | 272 +++++++++++ internal/service/m2/find.go | 39 ++ internal/service/m2/generate.go | 8 + internal/service/m2/service_package_gen.go | 58 +++ internal/service/m2/status.go | 55 +++ internal/service/m2/tags_gen.go | 128 +++++ internal/service/m2/wait.go | 58 +++ 8 files changed, 1136 insertions(+) create mode 100644 internal/service/m2/environment.go create mode 100644 internal/service/m2/environment_test.go create mode 100644 internal/service/m2/find.go create mode 100644 internal/service/m2/generate.go create mode 100644 internal/service/m2/service_package_gen.go create mode 100644 internal/service/m2/status.go create mode 100644 internal/service/m2/tags_gen.go create mode 100644 internal/service/m2/wait.go diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go new file mode 100644 index 00000000000..bf82fe84baf --- /dev/null +++ b/internal/service/m2/environment.go @@ -0,0 +1,518 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + "fmt" + "time" + + "github.com/aws/aws-sdk-go-v2/service/m2" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/aws/aws-sdk-go/aws/arn" + "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" + "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/setplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/framework" + "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// @FrameworkResource(name="M2 Environment") +// @Tags(identifierAttribute="arn") +func newResourceEnvironment(context.Context) (resource.ResourceWithConfigure, error) { + r := &resourceEnvironment{} + r.SetDefaultCreateTimeout(40 * time.Minute) + r.SetDefaultUpdateTimeout(80 * time.Minute) + r.SetDefaultDeleteTimeout(40 * time.Minute) + + return r, nil +} + +const ( + ResNameEnvironment = "M2 Environment" +) + +type resourceEnvironment struct { + framework.ResourceWithConfigure + framework.WithTimeouts +} + +func (r *resourceEnvironment) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { + response.TypeName = "aws_m2_environment" +} + +func (r *resourceEnvironment) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { + s := schema.Schema{ + Attributes: map[string]schema.Attribute{ + "arn": framework.ARNAttributeComputedOnly(), + "client_token": schema.StringAttribute{ + Optional: true, + }, + "description": schema.StringAttribute{ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + }, + "engine_type": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "engine_version": schema.StringAttribute{ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + }, + "environment_id": framework.IDAttribute(), + // "high_availability_config": schema.ListAttribute{ + // CustomType: fwtypes.NewListNestedObjectTypeOf[highAvailabilityConfig](ctx), + // ElementType: fwtypes.NewObjectTypeOf[highAvailabilityConfig](ctx), + // Optional: true, + // Computed: true, + // PlanModifiers: []planmodifier.List{ + // listplanmodifier.UseStateForUnknown(), + // }, + // }, + "id": framework.IDAttribute(), + "instance_type": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "kms_key_id": schema.StringAttribute{ + Optional: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "name": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "preferred_mainttainence_window": schema.StringAttribute{ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + }, + "publicly_accessible": schema.BoolAttribute{ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Bool{ + boolplanmodifier.UseStateForUnknown(), + }, + }, + "security_group_ids": schema.SetAttribute{ + Optional: true, + Computed: true, + ElementType: types.StringType, + PlanModifiers: []planmodifier.Set{ + setplanmodifier.UseStateForUnknown(), + }, + }, + "subnet_ids": schema.SetAttribute{ + ElementType: types.StringType, + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Set{ + setplanmodifier.UseStateForUnknown(), + setplanmodifier.RequiresReplace(), + }, + }, + names.AttrTags: tftags.TagsAttribute(), + names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), + }, + Blocks: map[string]schema.Block{ + "high_availability_config": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[highAvailabilityConfig](ctx), + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "desired_capacity": schema.Int64Attribute{ + Required: true, + }, + }, + }, + }, + + "storage_configuration": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[storageConfiguration](ctx), + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Blocks: map[string]schema.Block{ + "efs": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[efs](ctx), + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "file_system_id": schema.StringAttribute{ + Required: true, + }, + "mount_point": schema.StringAttribute{ + Required: true, + }, + }, + }, + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + }, + "fsx": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[fsx](ctx), + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "file_system_id": schema.StringAttribute{ + Required: true, + }, + "mount_point": schema.StringAttribute{ + Required: true, + }, + }, + }, + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + }, + }, + }, + }, + }, + } + + if s.Blocks == nil { + s.Blocks = make(map[string]schema.Block) + } + s.Blocks["timeouts"] = timeouts.Block(ctx, timeouts.Opts{ + Create: true, + Update: true, + Delete: true, + }) + + response.Schema = s +} + +func (r *resourceEnvironment) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { + conn := r.Meta().M2Client(ctx) + var data resourceEnvironmentData + + response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) + + if response.Diagnostics.HasError() { + return + } + + input := &m2.CreateEnvironmentInput{} + + response.Diagnostics.Append(flex.Expand(ctx, data, input)...) + + if response.Diagnostics.HasError() { + return + } + + input.EngineType = awstypes.EngineType(*flex.StringFromFramework(ctx, data.EngineType)) + input.InstanceType = flex.StringFromFramework(ctx, data.InstanceType) + input.Name = flex.StringFromFramework(ctx, data.Name) + input.Tags = getTagsIn(ctx) + + output, err := conn.CreateEnvironment(ctx, input) + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameEnvironment, data.Name.ValueString(), err), + err.Error(), + ) + return + } + + state := data + state.ID = flex.StringToFramework(ctx, output.EnvironmentId) + + envARN := arn.ARN{ + Partition: r.Meta().Partition, + Service: "m2", + Region: r.Meta().Region, + AccountID: r.Meta().AccountID, + Resource: fmt.Sprintf("env/%s", *output.EnvironmentId), + }.String() + + state.ARN = types.StringValue(envARN) + createTimeout := r.CreateTimeout(ctx, data.Timeouts) + out, err := waitEnvironmentAvailable(ctx, conn, state.ID.ValueString(), createTimeout) + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, data.Name.ValueString(), err), + err.Error(), + ) + return + } + + response.Diagnostics.Append(flex.Flatten(ctx, out, &state)...) + + if response.Diagnostics.HasError() { + return + } + + response.Diagnostics.Append(response.State.Set(ctx, &state)...) +} + +// Read implements resource.ResourceWithConfigure. +func (r *resourceEnvironment) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { + + conn := r.Meta().M2Client(ctx) + var data resourceEnvironmentData + response.Diagnostics.Append(request.State.Get(ctx, &data)...) + + if response.Diagnostics.HasError() { + return + } + + out, err := findEnvByID(ctx, conn, data.EnvironmentId.ValueString()) + + if tfresource.NotFound(err) { + response.State.RemoveResource(ctx) + return + } + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameEnvironment, data.EnvironmentId.ValueString(), err), + err.Error(), + ) + return + } + + envARN := arn.ARN{ + Partition: r.Meta().Partition, + Service: "m2", + Region: r.Meta().Region, + AccountID: r.Meta().AccountID, + Resource: fmt.Sprintf("env/%s", *out.EnvironmentId), + }.String() + + data.ARN = types.StringValue(envARN) + + response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) + + if response.Diagnostics.HasError() { + return + } + + data.ID = flex.StringToFramework(ctx, out.EnvironmentId) + + response.Diagnostics.Append(response.State.Set(ctx, &data)...) + +} + +// Delete implements resource.ResourceWithConfigure. +func (r *resourceEnvironment) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { + conn := r.Meta().M2Client(ctx) + var state resourceEnvironmentData + + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + + if response.Diagnostics.HasError() { + return + } + + tflog.Debug(ctx, "deleting M2 Environment", map[string]interface{}{ + "id": state.EnvironmentId.ValueString(), + }) + + input := &m2.DeleteEnvironmentInput{ + EnvironmentId: flex.StringFromFramework(ctx, state.EnvironmentId), + } + + _, err := tfresource.RetryWhenAWSErrCodeEquals(ctx, 5*time.Minute, func() (interface{}, error) { + return conn.DeleteEnvironment(ctx, input) + }, "DependencyViolation") + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return + } + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameEnvironment, state.EnvironmentId.ValueString(), err), + err.Error(), + ) + return + } + + deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) + _, err = waitEnvironmentDeleted(ctx, conn, state.EnvironmentId.ValueString(), deleteTimeout) + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameEnvironment, state.EnvironmentId.ValueString(), err), + err.Error(), + ) + return + } + +} + +// Update implements resource.ResourceWithConfigure. +func (r *resourceEnvironment) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { + conn := r.Meta().M2Client(ctx) + var state, plan resourceEnvironmentData + + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + + if response.Diagnostics.HasError() { + return + } + + response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + + if response.Diagnostics.HasError() { + return + } + + if environmentHasChanges(ctx, plan, state) { + input := &m2.UpdateEnvironmentInput{} + response.Diagnostics.Append(flex.Expand(ctx, plan, input)...) + + if response.Diagnostics.HasError() { + return + } + + input.EnvironmentId = flex.StringFromFramework(ctx, state.ID) + + _, err := conn.UpdateEnvironment(ctx, input) + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, state.ID.ValueString(), err), + err.Error(), + ) + return + } + + updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) + _, err = waitEnvironmentAvailable(ctx, conn, state.ID.ValueString(), updateTimeout) + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameEnvironment, plan.ID.ValueString(), err), + err.Error(), + ) + return + } + + response.Diagnostics.Append(response.State.Set(ctx, &plan)...) + + } + + // out, err := FindEnvByID(ctx, conn, state.ID.ValueString()) + + // if err != nil { + // response.Diagnostics.AddError( + // create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, state.ID.ValueString(), err), + // err.Error(), + // ) + // return + // } + + // response.Diagnostics.Append(flex.Flatten(ctx, out, &plan)...) + + // if response.Diagnostics.HasError() { + // return + // } + + response.Diagnostics.Append(response.State.Set(ctx, &plan)...) + +} +func (r *resourceEnvironment) ImportState(ctx context.Context, request resource.ImportStateRequest, response *resource.ImportStateResponse) { + resource.ImportStatePassthroughID(ctx, path.Root("environment_id"), request, response) +} + +func (r *resourceEnvironment) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { + r.SetTagsAll(ctx, request, response) +} + +type resourceEnvironmentData struct { + ARN types.String `tfsdk:"arn"` + ClientToken types.String `tfsdk:"client_token"` + Description types.String `tfsdk:"description"` + EngineType types.String `tfsdk:"engine_type"` + EngineVersion types.String `tfsdk:"engine_version"` + EnvironmentId types.String `tfsdk:"environment_id"` + HighAvailabilityConfig fwtypes.ListNestedObjectValueOf[highAvailabilityConfig] `tfsdk:"high_availability_config"` + ID types.String `tfsdk:"id"` + InstanceType types.String `tfsdk:"instance_type"` + KmsKeyId types.String `tfsdk:"kms_key_id"` + Name types.String `tfsdk:"name"` + PreferredMaintenanceWindow types.String `tfsdk:"preferred_mainttainence_window"` + PubliclyAccessible types.Bool `tfsdk:"publicly_accessible"` + SecurityGroupIds types.Set `tfsdk:"security_group_ids"` + StorageConfiguration fwtypes.ListNestedObjectValueOf[storageConfiguration] `tfsdk:"storage_configuration"` + SubnetIds types.Set `tfsdk:"subnet_ids"` + Tags types.Map `tfsdk:"tags"` + TagsAll types.Map `tfsdk:"tags_all"` + Timeouts timeouts.Value `tfsdk:"timeouts"` +} + +type storageConfiguration struct { + EFS fwtypes.ListNestedObjectValueOf[efs] `tfsdk:"efs"` + FSX fwtypes.ListNestedObjectValueOf[fsx] `tfsdk:"fsx"` +} + +type efs struct { + FileSystemId types.String `tfsdk:"file_system_id"` + MountPoint types.String `tfsdk:"mount_point"` +} + +type fsx struct { + FileSystemId types.String `tfsdk:"file_system_id"` + MountPoint types.String `tfsdk:"mount_point"` +} + +type highAvailabilityConfig struct { + DesiredCapacity types.Int64 `tfsdk:"desired_capacity"` +} + +func environmentHasChanges(_ context.Context, plan, state resourceEnvironmentData) bool { + return !plan.EngineType.Equal(state.EngineType) || + !plan.Description.Equal(state.Description) || + !plan.SecurityGroupIds.Equal(state.SecurityGroupIds) || + !plan.EngineVersion.Equal(state.EngineVersion) || + !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) || + !plan.InstanceType.Equal(state.InstanceType) || + !plan.KmsKeyId.Equal(state.InstanceType) || + !plan.Name.Equal(state.Name) || + !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) || + !plan.PubliclyAccessible.Equal(state.PubliclyAccessible) || + !plan.SecurityGroupIds.Equal(state.SecurityGroupIds) || + !plan.StorageConfiguration.Equal(state.StorageConfiguration) || + !plan.SubnetIds.Equal(state.SubnetIds) + +} diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go new file mode 100644 index 00000000000..bedb9976c35 --- /dev/null +++ b/internal/service/m2/environment_test.go @@ -0,0 +1,272 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2_test + +import ( + "context" + "fmt" + "testing" + + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccEnvironment_basic(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + var environment awstypes.EnvironmentSummary + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_basic(rName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccEnvironment_full(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + var environment awstypes.EnvironmentSummary + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_full(rName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + resource.TestCheckResourceAttrSet(resourceName, "subnet_ids.#"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccEnvironment_update(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + descriptionOld := "MicroFocus M2 Environment" + descriptionNew := "MicroFocus M2 Environment Updated" + resourceName := "aws_m2_environment.test" + var environment awstypes.EnvironmentSummary + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_update(rName, descriptionOld), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttr(resourceName, "description", descriptionOld), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccEnvironmentConfig_update(rName, descriptionNew), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttr(resourceName, "description", descriptionNew), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + ), + }, + }, + }) +} + +func testAccCheckEnvironmentExists(ctx context.Context, resourceName string, v *awstypes.EnvironmentSummary) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[resourceName] + if !ok { + return fmt.Errorf("not found: %s", resourceName) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("no M2 Environment ID is set") + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + out, err := tfm2.FindEnvByID(ctx, conn, rs.Primary.ID) + if err != nil { + return fmt.Errorf("retrieving M2 Environment (%s): %w", rs.Primary.ID, err) + } + + v = out + + return nil + } +} + +func testAccCheckEnvironmentDestroy(ctx context.Context) resource.TestCheckFunc { + return func(s *terraform.State) error { + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_m2_environment" { + continue + } + + _, err := tfm2.FindEnvByID(ctx, conn, rs.Primary.ID) + + if tfresource.NotFound(err) { + continue + } + if err != nil { + return err + } + + return fmt.Errorf("M2 Environment (%s) still exists", rs.Primary.ID) + } + + return nil + } +} + +func testAccEnvironmentConfig_basic(rName string) string { + return fmt.Sprintf(` +resource "aws_m2_environment" "test" { + engine_type = "microfocus" + instance_type = "M2.m5.large" + name = %[1]q +} +`, rName) +} + +func testAccEnvironmentConfig_full(rName string) string { + return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` +resource "aws_m2_environment" "test" { + description = "Test-1" + engine_type = "microfocus" + engine_version = "8.0.10" + high_availability_config { + desired_capacity = 1 + } + instance_type = "M2.m5.large" + kms_key_id = aws_kms_key.test.arn + name = %[1]q + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + tags = { + Name = %[1]q + } +} + +resource "aws_vpc" "test" { + cidr_block = "10.0.0.0/16" + enable_dns_support = true + enable_dns_hostnames = true + tags = { + Name = %[1]q + } +} + +resource "aws_subnet" "test" { + count = 2 + vpc_id = aws_vpc.test.id + availability_zone = data.aws_availability_zones.available.names[count.index] + cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) + tags = { + Name = %[1]q + } +} + +resource "aws_kms_key" "test" { + description = "tf-test-cmk-kms-key-id" +} + +resource "aws_security_group" "test" { + name = %[1]q + description = %[1]q + vpc_id = aws_vpc.test.id + + ingress { + from_port = -1 + to_port = -1 + protocol = "icmp" + cidr_blocks = ["0.0.0.0/0"] + } +} +`, rName)) +} + +func testAccEnvironmentConfig_update(rName string, desc string) string { + return fmt.Sprintf(` +resource "aws_m2_environment" "test" { + engine_type = "microfocus" + description = %[2]q + instance_type = "M2.m5.large" + name = %[1]q +} +`, rName, desc) +} diff --git a/internal/service/m2/find.go b/internal/service/m2/find.go new file mode 100644 index 00000000000..b5edaec6269 --- /dev/null +++ b/internal/service/m2/find.go @@ -0,0 +1,39 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + + m2 "github.com/aws/aws-sdk-go-v2/service/m2" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/aws/aws-sdk-go/aws" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" +) + +func FindEnvByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.EnvironmentSummary, error) { + in := &m2.GetEnvironmentInput{ + EnvironmentId: aws.String(id), + } + out, err := conn.GetEnvironment(ctx, in) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + + if err != nil { + return nil, err + } + + if out == nil || out.EnvironmentId == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return &awstypes.EnvironmentSummary{}, nil +} diff --git a/internal/service/m2/generate.go b/internal/service/m2/generate.go new file mode 100644 index 00000000000..666c1fb5359 --- /dev/null +++ b/internal/service/m2/generate.go @@ -0,0 +1,8 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +//go:generate go run ../../generate/tags/main.go -KVTValues -SkipTypesImp -AWSSDKVersion=2 -ListTags -ListTagsInIDElem=ResourceArn -ListTagsOutTagsElem=Tags -ServiceTagsMap -TagOp=TagResource -TagInIDElem=ResourceArn -UntagOp=UntagResource -UpdateTags +//go:generate go run ../../generate/servicepackage/main.go +// ONLY generate directives and package declaration! Do not add anything else to this file. + +package m2 diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go new file mode 100644 index 00000000000..5e1d74d8967 --- /dev/null +++ b/internal/service/m2/service_package_gen.go @@ -0,0 +1,58 @@ +// Code generated by internal/generate/servicepackages/main.go; DO NOT EDIT. + +package m2 + +import ( + "context" + + aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" + m2_sdkv2 "github.com/aws/aws-sdk-go-v2/service/m2" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/types" + "github.com/hashicorp/terraform-provider-aws/names" +) + +type servicePackage struct{} + +func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.ServicePackageFrameworkDataSource { + return []*types.ServicePackageFrameworkDataSource{} +} + +func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.ServicePackageFrameworkResource { + return []*types.ServicePackageFrameworkResource{ + { + Factory: newResourceEnvironment, + Name: "M2 Environment", + Tags: &types.ServicePackageResourceTags{ + IdentifierAttribute: "arn", + }, + }, + } +} + +func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePackageSDKDataSource { + return []*types.ServicePackageSDKDataSource{} +} + +func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePackageSDKResource { + return []*types.ServicePackageSDKResource{} +} + +func (p *servicePackage) ServicePackageName() string { + return names.M2 +} + +// NewClient returns a new AWS SDK for Go v2 client for this service package's AWS API. +func (p *servicePackage) NewClient(ctx context.Context, config map[string]any) (*m2_sdkv2.Client, error) { + cfg := *(config["aws_sdkv2_config"].(*aws_sdkv2.Config)) + + return m2_sdkv2.NewFromConfig(cfg, func(o *m2_sdkv2.Options) { + if endpoint := config["endpoint"].(string); endpoint != "" { + o.BaseEndpoint = aws_sdkv2.String(endpoint) + } + }), nil +} + +func ServicePackage(ctx context.Context) conns.ServicePackage { + return &servicePackage{} +} diff --git a/internal/service/m2/status.go b/internal/service/m2/status.go new file mode 100644 index 00000000000..57e6e0632f6 --- /dev/null +++ b/internal/service/m2/status.go @@ -0,0 +1,55 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + + m2 "github.com/aws/aws-sdk-go-v2/service/m2" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/aws/aws-sdk-go/aws" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" +) + +func statusEnvironment(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + out, err := findEnvByID(ctx, conn, id) + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err + } + + return out, string(out.Status), nil + + } +} + +func findEnvByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetEnvironmentOutput, error) { + in := &m2.GetEnvironmentInput{ + EnvironmentId: aws.String(id), + } + out, err := conn.GetEnvironment(ctx, in) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + + if err != nil { + return nil, err + } + + if out == nil || out.EnvironmentId == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return out, nil +} diff --git a/internal/service/m2/tags_gen.go b/internal/service/m2/tags_gen.go new file mode 100644 index 00000000000..143767def21 --- /dev/null +++ b/internal/service/m2/tags_gen.go @@ -0,0 +1,128 @@ +// Code generated by internal/generate/tags/main.go; DO NOT EDIT. +package m2 + +import ( + "context" + "fmt" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/m2" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/logging" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "github.com/hashicorp/terraform-provider-aws/internal/types" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// listTags lists m2 service tags. +// The identifier is typically the Amazon Resource Name (ARN), although +// it may also be a different identifier depending on the service. +func listTags(ctx context.Context, conn *m2.Client, identifier string) (tftags.KeyValueTags, error) { + input := &m2.ListTagsForResourceInput{ + ResourceArn: aws.String(identifier), + } + + output, err := conn.ListTagsForResource(ctx, input) + + if err != nil { + return tftags.New(ctx, nil), err + } + + return KeyValueTags(ctx, output.Tags), nil +} + +// ListTags lists m2 service tags and set them in Context. +// It is called from outside this package. +func (p *servicePackage) ListTags(ctx context.Context, meta any, identifier string) error { + tags, err := listTags(ctx, meta.(*conns.AWSClient).M2Client(ctx), identifier) + + if err != nil { + return err + } + + if inContext, ok := tftags.FromContext(ctx); ok { + inContext.TagsOut = types.Some(tags) + } + + return nil +} + +// map[string]string handling + +// Tags returns m2 service tags. +func Tags(tags tftags.KeyValueTags) map[string]string { + return tags.Map() +} + +// KeyValueTags creates tftags.KeyValueTags from m2 service tags. +func KeyValueTags(ctx context.Context, tags map[string]string) tftags.KeyValueTags { + return tftags.New(ctx, tags) +} + +// getTagsIn returns m2 service tags from Context. +// nil is returned if there are no input tags. +func getTagsIn(ctx context.Context) map[string]string { + if inContext, ok := tftags.FromContext(ctx); ok { + if tags := Tags(inContext.TagsIn.UnwrapOrDefault()); len(tags) > 0 { + return tags + } + } + + return nil +} + +// setTagsOut sets m2 service tags in Context. +func setTagsOut(ctx context.Context, tags map[string]string) { + if inContext, ok := tftags.FromContext(ctx); ok { + inContext.TagsOut = types.Some(KeyValueTags(ctx, tags)) + } +} + +// updateTags updates m2 service tags. +// The identifier is typically the Amazon Resource Name (ARN), although +// it may also be a different identifier depending on the service. +func updateTags(ctx context.Context, conn *m2.Client, identifier string, oldTagsMap, newTagsMap any) error { + oldTags := tftags.New(ctx, oldTagsMap) + newTags := tftags.New(ctx, newTagsMap) + + ctx = tflog.SetField(ctx, logging.KeyResourceId, identifier) + + removedTags := oldTags.Removed(newTags) + removedTags = removedTags.IgnoreSystem(names.M2) + if len(removedTags) > 0 { + input := &m2.UntagResourceInput{ + ResourceArn: aws.String(identifier), + TagKeys: removedTags.Keys(), + } + + _, err := conn.UntagResource(ctx, input) + + if err != nil { + return fmt.Errorf("untagging resource (%s): %w", identifier, err) + } + } + + updatedTags := oldTags.Updated(newTags) + updatedTags = updatedTags.IgnoreSystem(names.M2) + if len(updatedTags) > 0 { + input := &m2.TagResourceInput{ + ResourceArn: aws.String(identifier), + Tags: Tags(updatedTags), + } + + _, err := conn.TagResource(ctx, input) + + if err != nil { + return fmt.Errorf("tagging resource (%s): %w", identifier, err) + } + } + + return nil +} + +// UpdateTags updates m2 service tags. +// It is called from outside this package. +func (p *servicePackage) UpdateTags(ctx context.Context, meta any, identifier string, oldTags, newTags any) error { + return updateTags(ctx, meta.(*conns.AWSClient).M2Client(ctx), identifier, oldTags, newTags) +} diff --git a/internal/service/m2/wait.go b/internal/service/m2/wait.go new file mode 100644 index 00000000000..8921048dc30 --- /dev/null +++ b/internal/service/m2/wait.go @@ -0,0 +1,58 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + "time" + + m2 "github.com/aws/aws-sdk-go-v2/service/m2" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-provider-aws/internal/enum" +) + +// waitM2 Environment available +func waitEnvironmentAvailable(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { + stateConf := &retry.StateChangeConf{ + //Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating), + Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating, awstypes.EnvironmentLifecycleUpdating), + Target: enum.Slice(awstypes.EnvironmentLifecycleAvailable), + Refresh: statusEnvironment(ctx, conn, id), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { + return out, err + } + + return nil, err +} + +// M2 Environment Delete +const ( + EnvironmentDeletedMinTimeout = 10 * time.Second + EnvironmentDeletedDelay = 30 * time.Second +) + +func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating, awstypes.EnvironmentLifecycleDeleting, awstypes.EnvironmentLifecycleUpdating), + Target: []string{}, + Refresh: statusEnvironment(ctx, conn, id), + Timeout: timeout, + MinTimeout: EnvironmentDeletedMinTimeout, + Delay: EnvironmentDeletedDelay, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { + return out, err + } + + return nil, err +} From 5eaade54b8300e5934a1cc7d4be9b67cfa48f7ef Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 17 Jan 2024 12:38:23 +0000 Subject: [PATCH 022/126] Migrate to framework from old SDK. --- internal/service/m2/environment.go | 815 +++++++++++--------- internal/service/m2/environment_test.go | 27 +- internal/service/m2/export_test.go | 9 + internal/service/m2/service_package_gen.go | 21 +- website/docs/r/m2_environment.html.markdown | 22 +- 5 files changed, 517 insertions(+), 377 deletions(-) create mode 100644 internal/service/m2/export_test.go diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index e66ad8475da..a4e25ebafac 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -6,390 +6,403 @@ package m2 import ( "context" "errors" - "fmt" - "log" + "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" + "github.com/hashicorp/terraform-plugin-framework/attr" + "github.com/hashicorp/terraform-plugin-framework/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" "time" - "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" - "github.com/aws/aws-sdk-go-v2/service/m2/types" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" + "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" - "github.com/hashicorp/terraform-provider-aws/internal/conns" "github.com/hashicorp/terraform-provider-aws/internal/create" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" - "github.com/hashicorp/terraform-provider-aws/internal/flex" + "github.com/hashicorp/terraform-provider-aws/internal/framework" + "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// @SDKResource("aws_m2_environment", name="Environment") +// Function annotations are used for resource registration to the Provider. DO NOT EDIT. +// @FrameworkResource(name="Environment") // @Tags(identifierAttribute="arn") -func ResourceEnvironment() *schema.Resource { - return &schema.Resource{ - CreateWithoutTimeout: resourceEnvironmentCreate, - ReadWithoutTimeout: resourceEnvironmentRead, - UpdateWithoutTimeout: resourceEnvironmentUpdate, - DeleteWithoutTimeout: resourceEnvironmentDelete, - - Importer: &schema.ResourceImporter{ - StateContext: schema.ImportStatePassthroughContext, - }, +func newResourceEnvironment(_ context.Context) (resource.ResourceWithConfigure, error) { + r := &resourceEnvironment{} - Timeouts: &schema.ResourceTimeout{ - Create: schema.DefaultTimeout(30 * time.Minute), - Update: schema.DefaultTimeout(30 * time.Minute), - Delete: schema.DefaultTimeout(30 * time.Minute), - }, + r.SetDefaultCreateTimeout(30 * time.Minute) + r.SetDefaultUpdateTimeout(30 * time.Minute) + r.SetDefaultDeleteTimeout(30 * time.Minute) - Schema: map[string]*schema.Schema{ - "arn": { - Type: schema.TypeString, - Computed: true, + return r, nil +} + +const ( + ResNameEnvironment = "Environment" +) + +type resourceEnvironment struct { + framework.ResourceWithConfigure + framework.WithTimeouts +} + +func (r *resourceEnvironment) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { + resp.TypeName = "aws_m2_environment" +} + +func (r *resourceEnvironment) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { + resp.Schema = schema.Schema{ + Attributes: map[string]schema.Attribute{ + "arn": framework.ARNAttributeComputedOnly(), + "apply_changes_during_maintenance_window": schema.BoolAttribute{ + Optional: true, }, - "apply_changes_during_maintenance_window": { - Type: schema.TypeBool, - Optional: true, - Description: "Apply the changes during maintenance window", + "client_token": schema.StringAttribute{ + Optional: true, }, - "client_token": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ForceNew: true, - ValidateFunc: validation.StringLenBetween(0, 64), + "description": schema.StringAttribute{ + Optional: true, }, - "description": { - Type: schema.TypeString, + "id": framework.IDAttribute(), + "engine_type": schema.StringAttribute{ Required: true, - ForceNew: true, - }, - "efs_mount": { - Type: schema.TypeList, - Optional: true, - MinItems: 0, - MaxItems: 1, - ForceNew: true, - ConflictsWith: []string{"fsx_mount"}, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "file_system_id": { - Type: schema.TypeString, - Required: true, - }, - "mount_point": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringMatch(regexache.MustCompile("^/m2/mount(/[\\w-]+)+$"), "Mount point must start /m2/mount"), - }, - }, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), }, }, - "engine_type": { - Type: schema.TypeString, - Required: true, - ValidateFunc: validation.StringInSlice(enum.Values[types.EngineType](), false), - ForceNew: true, + "engine_version": schema.StringAttribute{ + Optional: true, + Computed: true, }, - "engine_version": { - Type: schema.TypeString, + "force_update": schema.BoolAttribute{ Optional: true, }, - "force_update": { - Type: schema.TypeBool, - Optional: true, - Description: "Force updates to the environment.", + "instance_type": schema.StringAttribute{ + Required: true, + Validators: []validator.String{}, }, - "fsx_mount": { - Type: schema.TypeList, - Optional: true, - ForceNew: true, - MinItems: 0, - MaxItems: 1, - ConflictsWith: []string{"efs_mount"}, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "file_system_id": { - Type: schema.TypeString, - Required: true, - }, - "mount_point": { - Type: schema.TypeString, - Required: true, - }, - }, + "kms_key_id": schema.StringAttribute{ + Optional: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), }, }, - "high_availability_config": { - Type: schema.TypeList, - MaxItems: 1, - Optional: true, + "load_balancer_arn": schema.StringAttribute{ Computed: true, - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "desired_capacity": { - Type: schema.TypeInt, - Required: true, - ValidateFunc: validation.IntBetween(0, 100), - }, - }, - }, }, - "instance_type": { - Type: schema.TypeString, + "name": schema.StringAttribute{ Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, }, - "kms_key_id": { - Type: schema.TypeString, + "preferred_maintenance_window": schema.StringAttribute{ Optional: true, - ForceNew: true, - }, - "load_balancer_arn": { - Type: schema.TypeString, Computed: true, }, - "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, - }, - "preferred_maintenance_window": { - Type: schema.TypeString, - Optional: true, - Computed: true, - Description: "Preferred maintenance window, if not provided a random one will be generated.", + "security_groups": schema.SetAttribute{ + Required: true, + ElementType: types.StringType, + Validators: []validator.Set{ + setvalidator.SizeAtLeast(1), + }, }, - "publicly_accessible": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + "subnet_ids": schema.SetAttribute{ + Required: true, + ElementType: types.StringType, + Validators: []validator.Set{ + setvalidator.SizeAtLeast(1), + }, }, - "security_groups": { - Type: schema.TypeSet, - Elem: &schema.Schema{Type: schema.TypeString}, - Required: true, - MinItems: 1, - ForceNew: true, + names.AttrTags: tftags.TagsAttribute(), + names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), + }, + Blocks: map[string]schema.Block{ + "storage_configuration": schema.ListNestedBlock{ + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + PlanModifiers: []planmodifier.List{ + listplanmodifier.RequiresReplace(), + }, + NestedObject: schema.NestedBlockObject{ + Blocks: map[string]schema.Block{ + "efs": schema.ListNestedBlock{ + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "file_system_id": schema.StringAttribute{ + Required: true, + }, + "mount_point": schema.StringAttribute{ + Required: true, + }, + }, + }, + }, + "fsx": schema.ListNestedBlock{ + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "file_system_id": schema.StringAttribute{ + Required: true, + }, + "mount_point": schema.StringAttribute{ + Required: true, + }, + }, + }, + }, + }, + }, }, - "subnet_ids": { - Type: schema.TypeSet, - Elem: &schema.Schema{Type: schema.TypeString}, - Required: true, - MinItems: 1, - ForceNew: true, + "high_availability_config": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[haData](ctx), + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "desired_capacity": schema.Int64Attribute{ + Required: true, + }, + }, + }, }, - names.AttrTags: tftags.TagsSchema(), - names.AttrTagsAll: tftags.TagsSchemaComputed(), + "timeouts": timeouts.Block(ctx, timeouts.Opts{ + Create: true, + Update: true, + Delete: true, + }), }, } } -const ( - ResNameEnvironment = "Environment" -) +func (r *resourceEnvironment) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { + conn := r.Meta().M2Client(ctx) -func resourceEnvironmentCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).M2Client(ctx) - - var clientToken string - if v, ok := d.GetOk("client_token"); ok { - clientToken = v.(string) - } else { - clientToken = id.UniqueId() + var plan resourceEnvironmentData + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + if resp.Diagnostics.HasError() { + return } - in := &m2.CreateEnvironmentInput{ - EngineType: types.EngineType(d.Get("engine_type").(string)), - InstanceType: aws.String(d.Get("instance_type").(string)), - Name: aws.String(d.Get("name").(string)), - ClientToken: aws.String(clientToken), - Description: aws.String(d.Get("description").(string)), - SecurityGroupIds: flex.ExpandStringValueSet(d.Get("security_groups").(*schema.Set)), - SubnetIds: flex.ExpandStringValueSet(d.Get("subnet_ids").(*schema.Set)), - Tags: getTagsIn(ctx), - } + in := &m2.CreateEnvironmentInput{} - if v, ok := d.GetOk("engine_version"); ok { - in.EngineVersion = aws.String(v.(string)) - } + resp.Diagnostics.Append(flex.Expand(ctx, plan, in)...) - if v, ok := d.GetOk("high_availability_config"); ok && len(v.([]interface{})) > 0 { - in.HighAvailabilityConfig = expandHaConfig(v.([]interface{})) + var clientToken string + if plan.ClientToken.IsNull() || plan.ClientToken.IsUnknown() { + clientToken = id.UniqueId() + } else { + clientToken = plan.ClientToken.ValueString() } - if v, ok := d.GetOk("kms_key_id"); ok { - in.KmsKeyId = aws.String(v.(string)) - } + in.ClientToken = aws.String(clientToken) - if v, ok := d.GetOk("preferred_maintenance_window"); ok { - in.PreferredMaintenanceWindow = aws.String(v.(string)) + if !plan.StorageConfiguration.IsNull() { + var sc []storageData + resp.Diagnostics.Append(plan.StorageConfiguration.ElementsAs(ctx, &sc, false)...) + storageConfig, d := expandStorageConfigurations(ctx, sc) + resp.Diagnostics.Append(d...) + in.StorageConfigurations = storageConfig } - if v, ok := d.GetOk("publicly_accessible"); ok { - in.PubliclyAccessible = v.(bool) + if resp.Diagnostics.HasError() { + return } - in.StorageConfigurations = expandStorageConfig(d) - out, err := conn.CreateEnvironment(ctx, in) if err != nil { - return create.AppendDiagError(diags, names.M2, create.ErrActionCreating, ResNameEnvironment, d.Get("name").(string), err) + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameEnvironment, plan.Name.String(), err), + err.Error(), + ) + return } - if out == nil || out.EnvironmentId == nil { - return create.AppendDiagError(diags, names.M2, create.ErrActionCreating, ResNameEnvironment, d.Get("name").(string), errors.New("empty output")) + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameEnvironment, plan.Name.String(), nil), + errors.New("empty output").Error(), + ) + return } - d.SetId(aws.ToString(out.EnvironmentId)) + plan.ID = flex.StringToFramework(ctx, out.EnvironmentId) - if _, err := waitEnvironmentCreated(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil { - return create.AppendDiagError(diags, names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, d.Id(), err) + createTimeout := r.CreateTimeout(ctx, plan.Timeouts) + env, err := waitEnvironmentCreated(ctx, conn, plan.ID.ValueString(), createTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, plan.Name.String(), err), + err.Error(), + ) + return } - return append(diags, resourceEnvironmentRead(ctx, d, meta)...) + resp.Diagnostics.Append(plan.refreshFromOutput(ctx, env)...) + resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) } -func resourceEnvironmentRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - var diags diag.Diagnostics - conn := meta.(*conns.AWSClient).M2Client(ctx) - - out, err := findEnvironmentByID(ctx, conn, d.Id()) +func (r *resourceEnvironment) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { + conn := r.Meta().M2Client(ctx) - if !d.IsNewResource() && tfresource.NotFound(err) { - log.Printf("[WARN] M2 Environment (%s) not found, removing from state", d.Id()) - d.SetId("") - return diags + var state resourceEnvironmentData + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return } + out, err := findEnvironmentByID(ctx, conn, state.ID.ValueString()) + if tfresource.NotFound(err) { + resp.State.RemoveResource(ctx) + return + } if err != nil { - return create.AppendDiagError(diags, names.M2, create.ErrActionReading, ResNameEnvironment, d.Id(), err) + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameEnvironment, state.ID.String(), err), + err.Error(), + ) + return } - d.Set("arn", out.EnvironmentArn) - d.Set("description", out.Description) - d.Set("engine_type", string(out.EngineType)) - d.Set("engine_version", out.EngineVersion) - d.Set("instance_type", out.InstanceType) - d.Set("kms_key_id", out.KmsKeyId) - - d.Set("name", out.Name) - - efsConfig, fsxConfig := flattenStorageConfig(out.StorageConfigurations) - d.Set("efs_mount", efsConfig) - d.Set("fsx_mount", fsxConfig) - - d.Set("preferred_maintenance_window", out.PreferredMaintenanceWindow) - d.Set("publicly_accessible", out.PubliclyAccessible) - d.Set("security_groups", out.SecurityGroupIds) - d.Set("subnet_ids", out.SubnetIds) - d.Set("high_availability_config", flattenHaConfig(out.HighAvailabilityConfig)) - d.Set("load_balancer_arn", out.LoadBalancerArn) - - return diags + resp.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) + resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) } -func resourceEnvironmentUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - var diags diag.Diagnostics - - conn := meta.(*conns.AWSClient).M2Client(ctx) - - update := false +func (r *resourceEnvironment) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { + conn := r.Meta().M2Client(ctx) - in := &m2.UpdateEnvironmentInput{ - EnvironmentId: aws.String(d.Id()), + var plan, state resourceEnvironmentData + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return } - if v, ok := d.GetOk("force_update"); ok { - in.ForceUpdate = v.(bool) + in := &m2.UpdateEnvironmentInput{ + EnvironmentId: flex.StringFromFramework(ctx, plan.ID), } - if v, ok := d.GetOk("apply_changes_during_maintenance_window"); ok && v.(bool) { - if d.HasChangesExcept("apply_changes_during_maintenance_window", "engine_version") { - return create.AppendDiagError(diags, names.M2, create.ErrActionUpdating, ResNameEnvironment, d.Id(), fmt.Errorf("cannot make changes to any configuration except `engine_version` during maintenance window")) + if r.hasChangesForMaintenance(plan, state) { + in.ApplyDuringMaintenanceWindow = true + in.EngineVersion = flex.StringFromFramework(ctx, plan.EngineVersion) + } else if r.hasChanges(plan, state) { + if !plan.EngineVersion.Equal(state.EngineVersion) { + in.EngineVersion = flex.StringFromFramework(ctx, plan.EngineVersion) } - in.ApplyDuringMaintenanceWindow = d.Get("apply_changes_during_maintenance_window").(bool) - in.EngineVersion = aws.String(d.Get("engine_version").(string)) - update = true - } else { - if d.HasChange("engine_version") { - in.EngineVersion = aws.String(d.Get("engine_version").(string)) - update = true - } - - if d.HasChange("high_availability_config") { - if v, ok := d.GetOk("high_availability_config"); ok && len(v.([]interface{})) > 0 { - config := v.([]interface{})[0].(map[string]interface{}) - in.DesiredCapacity = aws.Int32(int32(config["desired_capacity"].(int))) - } else { - in.DesiredCapacity = aws.Int32(1) - } - update = true + if !plan.InstanceType.Equal(state.InstanceType) { + in.InstanceType = flex.StringFromFramework(ctx, plan.InstanceType) } - - if d.HasChange("instance_type") { - in.InstanceType = aws.String(d.Get("instance_type").(string)) - update = true - } - - if d.HasChange("preferred_maintenance_window") { - in.PreferredMaintenanceWindow = aws.String(d.Get("preferred_maintenance_window").(string)) - update = true + if !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) { + in.PreferredMaintenanceWindow = flex.StringFromFramework(ctx, plan.PreferredMaintenanceWindow) } + } else { + return } - if !update { - return diags + if !plan.ForceUpdate.IsNull() { + in.ForceUpdate = plan.ForceUpdate.ValueBool() } - log.Printf("[DEBUG] Updating M2 Environment (%s): %#v", d.Id(), in) out, err := conn.UpdateEnvironment(ctx, in) if err != nil { - return create.AppendDiagError(diags, names.M2, create.ErrActionUpdating, ResNameEnvironment, d.Id(), err) + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, plan.ID.String(), err), + err.Error(), + ) + return } + if out == nil || out.EnvironmentId == nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, plan.ID.String(), nil), + errors.New("empty output").Error(), + ) + return + } + + plan.ID = flex.StringToFramework(ctx, out.EnvironmentId) - if _, err := waitEnvironmentUpdated(ctx, conn, aws.ToString(out.EnvironmentId), d.Timeout(schema.TimeoutUpdate)); err != nil { - return create.AppendDiagError(diags, names.M2, create.ErrActionWaitingForUpdate, ResNameEnvironment, d.Id(), err) + updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) + env, err := waitEnvironmentUpdated(ctx, conn, plan.ID.ValueString(), updateTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameEnvironment, plan.ID.String(), err), + err.Error(), + ) + return } - return append(diags, resourceEnvironmentRead(ctx, d, meta)...) -} + resp.Diagnostics.Append(flex.Flatten(ctx, env, &plan)...) -func resourceEnvironmentDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - var diags diag.Diagnostics + if resp.Diagnostics.HasError() { + return + } - conn := meta.(*conns.AWSClient).M2Client(ctx) + resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) +} - log.Printf("[INFO] Deleting M2 Environment %s", d.Id()) +func (r *resourceEnvironment) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { + conn := r.Meta().M2Client(ctx) - _, err := conn.DeleteEnvironment(ctx, &m2.DeleteEnvironmentInput{ - EnvironmentId: aws.String(d.Id()), - }) + var state resourceEnvironmentData + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } - if errs.IsA[*types.ResourceNotFoundException](err) { - return diags + in := &m2.DeleteEnvironmentInput{ + EnvironmentId: aws.String(state.ID.ValueString()), } + + _, err := conn.DeleteEnvironment(ctx, in) if err != nil { - return create.AppendDiagError(diags, names.M2, create.ErrActionDeleting, ResNameEnvironment, d.Id(), err) + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return + } + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameEnvironment, state.ID.String(), err), + err.Error(), + ) + return } - if _, err := waitEnvironmentDeleted(ctx, conn, d.Id(), d.Timeout(schema.TimeoutDelete)); err != nil { - return create.AppendDiagError(diags, names.M2, create.ErrActionWaitingForDeletion, ResNameEnvironment, d.Id(), err) + deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) + _, err = waitEnvironmentDeleted(ctx, conn, state.ID.ValueString(), deleteTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameEnvironment, state.ID.String(), err), + err.Error(), + ) + return } +} - return diags +func (r *resourceEnvironment) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { + resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) } func waitEnvironmentCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(types.EnvironmentLifecycleCreating), - Target: enum.Slice(types.EnvironmentLifecycleAvailable), + Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating), + Target: enum.Slice(awstypes.EnvironmentLifecycleAvailable), Refresh: statusEnvironment(ctx, conn, id), Timeout: timeout, NotFoundChecks: 20, @@ -406,8 +419,8 @@ func waitEnvironmentCreated(ctx context.Context, conn *m2.Client, id string, tim func waitEnvironmentUpdated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(types.EnvironmentLifecycleUpdating), - Target: enum.Slice(types.EnvironmentLifecycleAvailable), + Pending: enum.Slice(awstypes.EnvironmentLifecycleUpdating), + Target: enum.Slice(awstypes.EnvironmentLifecycleAvailable), Refresh: statusEnvironment(ctx, conn, id), Timeout: timeout, NotFoundChecks: 20, @@ -424,7 +437,7 @@ func waitEnvironmentUpdated(ctx context.Context, conn *m2.Client, id string, tim func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(types.EnvironmentLifecycleAvailable, types.EnvironmentLifecycleCreating, types.EnvironmentLifecycleDeleting), + Pending: enum.Slice(awstypes.EnvironmentLifecycleAvailable, awstypes.EnvironmentLifecycleCreating, awstypes.EnvironmentLifecycleDeleting), Target: []string{}, Refresh: statusEnvironment(ctx, conn, id), Timeout: timeout, @@ -457,14 +470,16 @@ func findEnvironmentByID(ctx context.Context, conn *m2.Client, id string) (*m2.G in := &m2.GetEnvironmentInput{ EnvironmentId: aws.String(id), } + out, err := conn.GetEnvironment(ctx, in) - if errs.IsA[*types.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } if err != nil { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + return nil, err } @@ -475,85 +490,197 @@ func findEnvironmentByID(ctx context.Context, conn *m2.Client, id string) (*m2.G return out, nil } -func expandStorageConfig(d *schema.ResourceData) []types.StorageConfiguration { - configs := make([]types.StorageConfiguration, 0) +func (rd *resourceEnvironmentData) refreshFromOutput(ctx context.Context, out *m2.GetEnvironmentOutput) diag.Diagnostics { + var diags diag.Diagnostics - if efsMounts, ok := d.GetOk("efs_mount"); ok { - for _, config := range efsMounts.([]interface{}) { - configMap := config.(map[string]interface{}) - configs = append(configs, newStorageConfig(configMap, true)) - } - } + diags.Append(flex.Flatten(ctx, out, rd)...) + rd.ARN = flex.StringToFramework(ctx, out.EnvironmentArn) + rd.ID = flex.StringToFramework(ctx, out.EnvironmentId) + storage, d := flattenStorageConfigurations(ctx, out.StorageConfigurations) + diags.Append(d...) + rd.StorageConfiguration = storage - if fsxMounts, ok := d.GetOk("fsx_mount"); ok { - for _, config := range fsxMounts.([]interface{}) { - configMap := config.(map[string]interface{}) - configs = append(configs, newStorageConfig(configMap, false)) - } - } - return configs + return diags } -func expandHaConfig(tfList []interface{}) *types.HighAvailabilityConfig { - if len(tfList) == 0 { - return nil +type resourceEnvironmentData struct { + ARN types.String `tfsdk:"arn"` + ApplyDuringMaintenanceWindow types.Bool `tfsdk:"apply_changes_during_maintenance_window"` + ClientToken types.String `tfsdk:"client_token"` + Description types.String `tfsdk:"description"` + ID types.String `tfsdk:"id"` + EngineType types.String `tfsdk:"engine_type"` + EngineVersion types.String `tfsdk:"engine_version"` + ForceUpdate types.Bool `tfsdk:"force_update"` + HighAvailabilityConfig fwtypes.ListNestedObjectValueOf[haData] `tfsdk:"high_availability_config"` + InstanceType types.String `tfsdk:"instance_type"` + KmsKeyId types.String `tfsdk:"kms_key_id"` + LoadBalancerArn types.String `tfsdk:"load_balancer_arn"` + PreferredMaintenanceWindow types.String `tfsdk:"preferred_maintenance_window"` + SecurityGroupIds types.Set `tfsdk:"security_groups"` + StorageConfiguration types.List `tfsdk:"storage_configuration"` + SubnetIds types.Set `tfsdk:"subnet_ids"` + Name types.String `tfsdk:"name"` + Tags types.Map `tfsdk:"tags"` + TagsAll types.Map `tfsdk:"tags_all"` + Timeouts timeouts.Value `tfsdk:"timeouts"` +} + +type storageData struct { + EFS types.List `tfsdk:"efs"` + FSX types.List `tfsdk:"fsx"` +} + +type efs struct { + FileSystemId types.String `tfsdk:"file_system_id"` + MountPoint types.String `tfsdk:"mount_point"` +} + +type fsx struct { + FileSystemId types.String `tfsdk:"file_system_id"` + MountPoint types.String `tfsdk:"mount_point"` +} + +type haData struct { + DesiredCapacity types.Int64 `tfsdk:"desired_capacity"` +} + +var ( + storageDataAttrTypes = map[string]attr.Type{ + "efs": types.ListType{ElemType: mountObjectType}, + "fsx": types.ListType{ElemType: mountObjectType}, + } + + mountObjectType = types.ObjectType{AttrTypes: mountAttrTypes} + + mountAttrTypes = map[string]attr.Type{ + "file_system_id": types.StringType, + "mount_point": types.StringType, } +) - v, ok := tfList[0].(map[string]interface{}) +func (r *resourceEnvironment) ModifyPlan(ctx context.Context, req resource.ModifyPlanRequest, resp *resource.ModifyPlanResponse) { + r.SetTagsAll(ctx, req, resp) +} - if ok { - return &types.HighAvailabilityConfig{ - DesiredCapacity: aws.Int32(int32(v["desired_capacity"].(int))), +func expandStorageConfigurations(ctx context.Context, storageConfigurations []storageData) ([]awstypes.StorageConfiguration, diag.Diagnostics) { + storage := []awstypes.StorageConfiguration{} + var diags diag.Diagnostics + + for _, mount := range storageConfigurations { + if !mount.EFS.IsNull() { + var efsMounts []efs + diags.Append(mount.EFS.ElementsAs(ctx, &efsMounts, false)...) + mp := expandEfsMountPoint(ctx, efsMounts) + storage = append(storage, mp) + } + if !mount.FSX.IsNull() { + var fsxMounts []fsx + diags.Append(mount.FSX.ElementsAs(ctx, &fsxMounts, false)...) + mp := expandFsxMountPoint(ctx, fsxMounts) + storage = append(storage, mp) } } - return nil + + return storage, diags } -func flattenHaConfig(haConfig *types.HighAvailabilityConfig) []interface{} { - if haConfig == nil { +func expandEfsMountPoint(ctx context.Context, efs []efs) *awstypes.StorageConfigurationMemberEfs { + if len(efs) == 0 { return nil } + return &awstypes.StorageConfigurationMemberEfs{ + Value: awstypes.EfsStorageConfiguration{ + FileSystemId: flex.StringFromFramework(ctx, efs[0].FileSystemId), + MountPoint: flex.StringFromFramework(ctx, efs[0].MountPoint), + }, + } +} - return []interface{}{map[string]interface{}{ - "desired_capacity": haConfig.DesiredCapacity, - }} +func expandFsxMountPoint(ctx context.Context, fsx []fsx) *awstypes.StorageConfigurationMemberFsx { + if len(fsx) == 0 { + return nil + } + return &awstypes.StorageConfigurationMemberFsx{ + Value: awstypes.FsxStorageConfiguration{ + FileSystemId: flex.StringFromFramework(ctx, fsx[0].FileSystemId), + MountPoint: flex.StringFromFramework(ctx, fsx[0].MountPoint), + }, + } } -func newStorageConfig(m map[string]interface{}, efs bool) types.StorageConfiguration { - if efs { - return &types.StorageConfigurationMemberEfs{ - Value: types.EfsStorageConfiguration{ - FileSystemId: aws.String(m["file_system_id"].(string)), - MountPoint: aws.String(m["mount_point"].(string)), - }, - } - } else { - return &types.StorageConfigurationMemberFsx{ - Value: types.FsxStorageConfiguration{ - FileSystemId: aws.String(m["file_system_id"].(string)), - MountPoint: aws.String(m["mount_point"].(string)), - }, +func flattenStorageConfigurations(ctx context.Context, apiObject []awstypes.StorageConfiguration) (types.List, diag.Diagnostics) { + var diags diag.Diagnostics + elemType := types.ObjectType{AttrTypes: storageDataAttrTypes} + + elems := []attr.Value{} + + for _, config := range apiObject { + switch v := config.(type) { + case *awstypes.StorageConfigurationMemberEfs: + mountPoint, d := flattenMountPoint(ctx, v.Value.FileSystemId, v.Value.MountPoint, "efs") + elems = append(elems, mountPoint) + diags.Append(d...) + + case *awstypes.StorageConfigurationMemberFsx: + mountPoint, d := flattenMountPoint(ctx, v.Value.FileSystemId, v.Value.MountPoint, "fsx") + elems = append(elems, mountPoint) + diags.Append(d...) } } + listVal, d := types.ListValue(elemType, elems) + diags.Append(d...) + + return listVal, diags } -func flattenStorageConfig(storageConfig []types.StorageConfiguration) ([]interface{}, []interface{}) { - efsConfig := make([]interface{}, 0) - fsxConfig := make([]interface{}, 0) - for _, config := range storageConfig { - switch v := config.(type) { - case *types.StorageConfigurationMemberEfs: - efsConfig = appendStorageConfig(v.Value.FileSystemId, v.Value.MountPoint, efsConfig) - case *types.StorageConfigurationMemberFsx: - fsxConfig = appendStorageConfig(v.Value.FileSystemId, v.Value.MountPoint, fsxConfig) +func flattenMountPoint(ctx context.Context, fileSystemId, mountPoint *string, mountType string) (attr.Value, diag.Diagnostics) { + var diags diag.Diagnostics + + obj := map[string]attr.Value{ + "file_system_id": flex.StringToFramework(ctx, fileSystemId), + "mount_point": flex.StringToFramework(ctx, mountPoint), + } + + mountValue, d := types.ObjectValue(mountAttrTypes, obj) + diags.Append(d...) + if diags.HasError() { + return nil, diags + } + + mountList := []attr.Value{ + mountValue, + } + + mountListValue, d := types.ListValue(mountObjectType, mountList) + diags.Append(d...) + if diags.HasError() { + return nil, diags + } + + configMap := map[string]attr.Value{ + mountType: mountListValue, + } + + for k := range storageDataAttrTypes { + if k != mountType { + configMap[k] = types.ListNull(mountObjectType) } } - return efsConfig, fsxConfig + + configValue, d := types.ObjectValue(storageDataAttrTypes, configMap) + diags.Append(d...) + + return configValue, diags +} + +func (r *resourceEnvironment) hasChanges(plan, state resourceEnvironmentData) bool { + return !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) || + !plan.EngineVersion.Equal(state.EngineVersion) || + !plan.InstanceType.Equal(state.EngineType) || + !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) } -func appendStorageConfig(fileSystemId *string, mountPoint *string, config []interface{}) []interface{} { - return append(config, map[string]string{ - "file_system_id": *fileSystemId, - "mount_point": *mountPoint, - }) +func (r *resourceEnvironment) hasChangesForMaintenance(plan, state resourceEnvironmentData) bool { + return plan.ApplyDuringMaintenanceWindow.ValueBool() && !plan.EngineVersion.Equal(state.EngineVersion) } diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 110e00cb2d1..2f2cc203a6e 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -109,8 +109,8 @@ func TestAccM2Environment_update(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), - resource.TestCheckResourceAttr(resourceName, "efs_mount.#", "0"), - resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), ), }, @@ -125,8 +125,8 @@ func TestAccM2Environment_update(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "1"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), - resource.TestCheckResourceAttr(resourceName, "efs_mount.#", "0"), - resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m6i.large"), resource.TestCheckResourceAttr(resourceName, "preferred_maintenance_window", "sat:03:35-sat:05:35"), ), @@ -168,8 +168,8 @@ func TestAccM2Environment_highAvailability(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), - resource.TestCheckResourceAttr(resourceName, "efs_mount.#", "0"), - resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), ), }, @@ -214,9 +214,8 @@ func TestAccM2Environment_efs(t *testing.T) { acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), - resource.TestCheckResourceAttr(resourceName, "efs_mount.0.mount_point", "/m2/mount/example"), - resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "1"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.0.efs.0.mount_point", "/m2/mount/example"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), ), }, @@ -253,7 +252,7 @@ func TestAccM2Environment_disappears(t *testing.T) { Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), - acctest.CheckResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment(), resourceName), + acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment, resourceName), ), ExpectNonEmptyPlan: true, }, @@ -395,9 +394,11 @@ resource "aws_m2_environment" "test" { security_groups = [aws_security_group.test.id] subnet_ids = aws_subnet.test[*].id - efs_mount { - file_system_id = aws_efs_file_system.test.id - mount_point = "/m2/mount/example" + storage_configuration { + efs { + file_system_id = aws_efs_file_system.test.id + mount_point = "/m2/mount/example" + } } } `, rName, engineType, engineVersion)) diff --git a/internal/service/m2/export_test.go b/internal/service/m2/export_test.go new file mode 100644 index 00000000000..a8619c2223b --- /dev/null +++ b/internal/service/m2/export_test.go @@ -0,0 +1,9 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +// Exports for use in tests only. +var ( + ResourceEnvironment = newResourceEnvironment +) diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index df2d0168c10..8096ae76b4d 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -19,7 +19,15 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv } func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.ServicePackageFrameworkResource { - return []*types.ServicePackageFrameworkResource{} + return []*types.ServicePackageFrameworkResource{ + { + Factory: newResourceEnvironment, + Name: "Environment", + Tags: &types.ServicePackageResourceTags{ + IdentifierAttribute: "arn", + }, + }, + } } func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePackageSDKDataSource { @@ -27,16 +35,7 @@ func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePac } func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePackageSDKResource { - return []*types.ServicePackageSDKResource{ - { - Factory: ResourceEnvironment, - TypeName: "aws_m2_environment", - Name: "Environment", - Tags: &types.ServicePackageResourceTags{ - IdentifierAttribute: "arn", - }, - }, - } + return []*types.ServicePackageSDKResource{} } func (p *servicePackage) ServicePackageName() string { diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index 91757ae4f76..9ad25ef87d4 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -48,10 +48,11 @@ resource "aws_m2_environment" "test" { instance_type = "M2.m5.large" security_groups = ["sg-01234567890abcdef"] subnet_ids = ["subnet-01234567890abcdef"] - - efs_mount { - file_system_id = "fs-01234567890abcdef" - mount_point = "/m2/mount/example" + storage_configuration { + efs { + file_system_id = "fs-01234567890abcdef" + mount_point = "/m2/mount/example" + } } } ``` @@ -66,9 +67,11 @@ resource "aws_m2_environment" "test" { security_groups = ["sg-01234567890abcdef"] subnet_ids = ["subnet-01234567890abcdef"] - fsx_mount { - file_system_id = "fs-01234567890abcdef" - mount_point = "/m2/mount/example" + storage_configuration { + fsx { + file_system_id = "fs-01234567890abcdef" + mount_point = "/m2/mount/example" + } } } @@ -93,7 +96,8 @@ The following arguments are optional: * `publicly_accessible` - (Optional) Allow applications deployed to this environment to be publicly accessible. * `tags` - (Optional) Key-value tags for the place index. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. -### efs_mount +### storage_configuration +#### efs This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). @@ -102,7 +106,7 @@ The following arguments are required: * `mount_point` - (Required) Path to mount the filesystem on, must start with `/m2/mount/`. * `file_system_id` - (Required) Id of the EFS filesystem to mount. -### fsx_mount +#### fsx This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). From d9ae7532c4ed3a89a6fd70f86c4a6aa425b64e4a Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 17 Jan 2024 12:47:55 +0000 Subject: [PATCH 023/126] Actually send desired capacity in update if changed. --- internal/service/m2/environment.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index a4e25ebafac..5caa62a25f2 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -314,6 +314,14 @@ func (r *resourceEnvironment) Update(ctx context.Context, req resource.UpdateReq if !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) { in.PreferredMaintenanceWindow = flex.StringFromFramework(ctx, plan.PreferredMaintenanceWindow) } + + if !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) { + v, d := plan.HighAvailabilityConfig.ToSlice(ctx) + resp.Diagnostics.Append(d...) + if len(v) > 0 { + in.DesiredCapacity = flex.Int32FromFramework(ctx, v[0].DesiredCapacity) + } + } } else { return } From 6ca4f773e212be59b8182a1f2d6ff4e3c2df06ca Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 17 Jan 2024 13:41:41 +0000 Subject: [PATCH 024/126] Fix imports --- internal/service/m2/environment.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 5caa62a25f2..e337fd294b7 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -6,12 +6,6 @@ package m2 import ( "context" "errors" - "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" - "github.com/hashicorp/terraform-plugin-framework/attr" - "github.com/hashicorp/terraform-plugin-framework/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" - "github.com/hashicorp/terraform-provider-aws/internal/enum" - fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" "time" "github.com/aws/aws-sdk-go-v2/aws" @@ -19,6 +13,9 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" + "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" + "github.com/hashicorp/terraform-plugin-framework/attr" + "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -27,11 +24,14 @@ import ( "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/schema/validator" "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/framework" "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" From 491780dcee323480fa99cb0098aac358055764bc Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 17 Jan 2024 13:44:35 +0000 Subject: [PATCH 025/126] Fix caps on FSX/EFS --- internal/service/m2/environment.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index e337fd294b7..b9285274109 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -579,13 +579,13 @@ func expandStorageConfigurations(ctx context.Context, storageConfigurations []st if !mount.EFS.IsNull() { var efsMounts []efs diags.Append(mount.EFS.ElementsAs(ctx, &efsMounts, false)...) - mp := expandEfsMountPoint(ctx, efsMounts) + mp := expandEFSMountPoint(ctx, efsMounts) storage = append(storage, mp) } if !mount.FSX.IsNull() { var fsxMounts []fsx diags.Append(mount.FSX.ElementsAs(ctx, &fsxMounts, false)...) - mp := expandFsxMountPoint(ctx, fsxMounts) + mp := expandFSXMountPoint(ctx, fsxMounts) storage = append(storage, mp) } } @@ -593,7 +593,7 @@ func expandStorageConfigurations(ctx context.Context, storageConfigurations []st return storage, diags } -func expandEfsMountPoint(ctx context.Context, efs []efs) *awstypes.StorageConfigurationMemberEfs { +func expandEFSMountPoint(ctx context.Context, efs []efs) *awstypes.StorageConfigurationMemberEfs { if len(efs) == 0 { return nil } @@ -605,7 +605,7 @@ func expandEfsMountPoint(ctx context.Context, efs []efs) *awstypes.StorageConfig } } -func expandFsxMountPoint(ctx context.Context, fsx []fsx) *awstypes.StorageConfigurationMemberFsx { +func expandFSXMountPoint(ctx context.Context, fsx []fsx) *awstypes.StorageConfigurationMemberFsx { if len(fsx) == 0 { return nil } From 0d9d774e6a1ba132803eb581975cbc35dd7b6a7d Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 17 Jan 2024 13:49:09 +0000 Subject: [PATCH 026/126] Missing blank line --- website/docs/r/m2_environment.html.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index 9ad25ef87d4..24505518c77 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -97,6 +97,7 @@ The following arguments are optional: * `tags` - (Optional) Key-value tags for the place index. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. ### storage_configuration + #### efs This argument is processed in [attribute-as-blocks mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html). From bbe17d802e659f34ddbf4769d2a2dcae50bbbd6e Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 17 Jan 2024 14:08:44 +0000 Subject: [PATCH 027/126] FSX -> Fsx --- internal/service/m2/environment.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index b9285274109..f2102d43edd 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -585,7 +585,7 @@ func expandStorageConfigurations(ctx context.Context, storageConfigurations []st if !mount.FSX.IsNull() { var fsxMounts []fsx diags.Append(mount.FSX.ElementsAs(ctx, &fsxMounts, false)...) - mp := expandFSXMountPoint(ctx, fsxMounts) + mp := expandFsxMountPoint(ctx, fsxMounts) storage = append(storage, mp) } } @@ -605,7 +605,7 @@ func expandEFSMountPoint(ctx context.Context, efs []efs) *awstypes.StorageConfig } } -func expandFSXMountPoint(ctx context.Context, fsx []fsx) *awstypes.StorageConfigurationMemberFsx { +func expandFsxMountPoint(ctx context.Context, fsx []fsx) *awstypes.StorageConfigurationMemberFsx { if len(fsx) == 0 { return nil } From 27cd9427638d5ab4efc1241612c918c16b5be749 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 17 Jan 2024 14:45:25 +0000 Subject: [PATCH 028/126] Tags not being set correctly. --- internal/service/m2/environment.go | 2 ++ internal/service/m2/environment_test.go | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index f2102d43edd..3991bb6a92b 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -217,6 +217,8 @@ func (r *resourceEnvironment) Create(ctx context.Context, req resource.CreateReq in.ClientToken = aws.String(clientToken) + in.Tags = getTagsIn(ctx) + if !plan.StorageConfiguration.IsNull() { var sc []storageData resp.Diagnostics.Append(plan.StorageConfiguration.ElementsAs(ctx, &sc, false)...) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 2f2cc203a6e..c89dde99d91 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -337,6 +337,10 @@ resource "aws_m2_environment" "test" { instance_type = "M2.m5.large" security_groups = [aws_security_group.test.id] subnet_ids = aws_subnet.test[*].id + + tags = { + key = "value" + } } `, rName, engineType, engineVersion)) } @@ -358,6 +362,10 @@ resource "aws_m2_environment" "test" { high_availability_config { desired_capacity = %[4]d } + + tags = { + key = "%[4]d" + } } `, rName, engineType, engineVersion, desiredCapacity)) } @@ -377,6 +385,10 @@ resource "aws_m2_environment" "test" { high_availability_config { desired_capacity = %[4]d } + tags = { + key = "%[4]d" + } + } `, rName, engineType, engineVersion, desiredCapacity)) } From 297a728f1ae1007f55eb18927b31b14656e390cc Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 17 Jan 2024 21:39:53 +0000 Subject: [PATCH 029/126] Initial version of aws_m2_application resource --- internal/service/m2/application.go | 594 ++++++++++++++++++ internal/service/m2/application_test.go | 263 ++++++++ internal/service/m2/export_test.go | 1 + internal/service/m2/service_package_gen.go | 7 + .../test-fixtures/application-definition.json | 24 + website/docs/r/m2_application.html.markdown | 108 ++++ 6 files changed, 997 insertions(+) create mode 100644 internal/service/m2/application.go create mode 100644 internal/service/m2/application_test.go create mode 100644 internal/service/m2/test-fixtures/application-definition.json create mode 100644 website/docs/r/m2_application.html.markdown diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go new file mode 100644 index 00000000000..7e58ff963e0 --- /dev/null +++ b/internal/service/m2/application.go @@ -0,0 +1,594 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + "errors" + "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" + "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" + "github.com/hashicorp/terraform-plugin-framework/attr" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/m2" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" + "github.com/hashicorp/terraform-plugin-framework/diag" + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/framework" + "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// Function annotations are used for resource registration to the Provider. DO NOT EDIT. +// @FrameworkResource(name="Application") +// @Tags(identifierAttribute="arn") +func newResourceApplication(_ context.Context) (resource.ResourceWithConfigure, error) { + r := &resourceApplication{} + + r.SetDefaultCreateTimeout(30 * time.Minute) + r.SetDefaultUpdateTimeout(30 * time.Minute) + r.SetDefaultDeleteTimeout(30 * time.Minute) + + return r, nil +} + +const ( + ResNameApplication = "Application" +) + +type resourceApplication struct { + framework.ResourceWithConfigure + framework.WithTimeouts +} + +func (r *resourceApplication) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { + resp.TypeName = "aws_m2_application" +} + +func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { + resp.Schema = schema.Schema{ + Attributes: map[string]schema.Attribute{ + "arn": framework.ARNAttributeComputedOnly(), + "current_version": schema.Int64Attribute{ + Computed: true, + }, + "client_token": schema.StringAttribute{ + Optional: true, + }, + "description": schema.StringAttribute{ + Optional: true, + }, + "id": framework.IDAttribute(), + "engine_type": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + Validators: []validator.String{ + stringvalidator.OneOf(enum.Values[awstypes.EngineType]()...), + }, + }, + "kms_key_id": schema.StringAttribute{ + Optional: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "name": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "role_arn": schema.StringAttribute{ + CustomType: fwtypes.ARNType, + Optional: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + names.AttrTags: tftags.TagsAttribute(), + names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), + }, + Blocks: map[string]schema.Block{ + "definition": schema.ListNestedBlock{ + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "content": schema.StringAttribute{ + Optional: true, + Validators: []validator.String{ + stringvalidator.ExactlyOneOf( + path.MatchRelative().AtParent().AtName("content"), + path.MatchRelative().AtParent().AtName("s3_location"), + ), + }, + }, + "s3_location": schema.StringAttribute{ + Optional: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + }, + }, + }, + }, + "timeouts": timeouts.Block(ctx, timeouts.Opts{ + Create: true, + Update: true, + Delete: true, + }), + }, + } +} + +func (r *resourceApplication) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { + conn := r.Meta().M2Client(ctx) + + var plan resourceApplicationData + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + if resp.Diagnostics.HasError() { + return + } + + in := &m2.CreateApplicationInput{ + Tags: getTagsIn(ctx), + } + + resp.Diagnostics.Append(flex.Expand(ctx, plan, in)...) + if resp.Diagnostics.HasError() { + return + } + + var definitions []applicationDefinition + resp.Diagnostics.Append(plan.Definition.ElementsAs(ctx, &definitions, false)...) + + if resp.Diagnostics.HasError() { + return + } + + apiDefinition := expandApplicationDefinition(ctx, definitions) + in.Definition = apiDefinition + + out, err := conn.CreateApplication(ctx, in) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, plan.Name.String(), err), + err.Error(), + ) + return + } + if out == nil || out.ApplicationId == nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, plan.Name.String(), nil), + errors.New("empty output").Error(), + ) + return + } + + plan.ARN = flex.StringToFramework(ctx, out.ApplicationArn) + plan.ID = flex.StringToFramework(ctx, out.ApplicationId) + + createTimeout := r.CreateTimeout(ctx, plan.Timeouts) + app, err := waitApplicationCreated(ctx, conn, plan.ID.ValueString(), createTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameApplication, plan.Name.String(), err), + err.Error(), + ) + return + } + resp.Diagnostics.Append(plan.refreshFromOutput(ctx, app)...) + resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) +} + +func (r *resourceApplication) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { + conn := r.Meta().M2Client(ctx) + + var state resourceApplicationData + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + + out, err := findApplicationByID(ctx, conn, state.ID.ValueString()) + if tfresource.NotFound(err) { + resp.State.RemoveResource(ctx) + return + } + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), + err.Error(), + ) + return + } + + version, err := findApplicationVersion(ctx, conn, state.ID.ValueString(), *out.LatestVersion.ApplicationVersion) + if tfresource.NotFound(err) { + resp.State.RemoveResource(ctx) + return + } + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), + err.Error(), + ) + return + } + + resp.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) + resp.Diagnostics.Append(state.refreshFromVersion(ctx, version)...) + resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) +} + +func (r *resourceApplication) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { + conn := r.Meta().M2Client(ctx) + + var plan, state resourceApplicationData + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + + update := false + + in := &m2.UpdateApplicationInput{ + ApplicationId: flex.StringFromFramework(ctx, state.ID), + CurrentApplicationVersion: flex.Int32FromFramework(ctx, state.CurrentVersion), + } + + if !plan.Definition.Equal(state.Definition) { + var definitions []applicationDefinition + resp.Diagnostics.Append(plan.Definition.ElementsAs(ctx, &definitions, false)...) + + if resp.Diagnostics.HasError() { + return + } + + apiDefinition := expandApplicationDefinition(ctx, definitions) + in.Definition = apiDefinition + update = true + } + + if !plan.Description.Equal(state.Description) { + in.Description = flex.StringFromFramework(ctx, plan.Description) + update = true + } + + if update { + out, err := conn.UpdateApplication(ctx, in) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameApplication, plan.ID.String(), err), + err.Error(), + ) + return + } + if out == nil || out.ApplicationVersion == nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameApplication, plan.ID.String(), nil), + errors.New("empty output").Error(), + ) + return + } + + updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) + version, err := waitApplicationUpdated(ctx, conn, plan.ID.ValueString(), *out.ApplicationVersion, updateTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameApplication, plan.ID.String(), err), + err.Error(), + ) + return + } + resp.Diagnostics.Append(plan.refreshFromVersion(ctx, version)...) + resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) + } +} + +func (r *resourceApplication) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { + conn := r.Meta().M2Client(ctx) + + var state resourceApplicationData + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + + in := &m2.DeleteApplicationInput{ + ApplicationId: aws.String(state.ID.ValueString()), + } + + _, err := conn.DeleteApplication(ctx, in) + if err != nil { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return + } + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameApplication, state.ID.String(), err), + err.Error(), + ) + return + } + + deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) + _, err = waitApplicationDeleted(ctx, conn, state.ID.ValueString(), deleteTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameApplication, state.ID.String(), err), + err.Error(), + ) + return + } +} + +func (r *resourceApplication) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { + resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) +} +func (r *resourceApplication) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { + r.SetTagsAll(ctx, request, response) +} + +func (r *resourceApplicationData) refreshFromOutput(ctx context.Context, app *m2.GetApplicationOutput) diag.Diagnostics { + var diags diag.Diagnostics + + diags.Append(flex.Flatten(ctx, app, r)...) + r.ARN = flex.StringToFramework(ctx, app.ApplicationArn) + r.ID = flex.StringToFramework(ctx, app.ApplicationId) + r.CurrentVersion = flex.Int32ToFramework(ctx, app.LatestVersion.ApplicationVersion) + + return diags + +} +func (r *resourceApplicationData) refreshFromVersion(ctx context.Context, version *m2.GetApplicationVersionOutput) diag.Diagnostics { + var diags diag.Diagnostics + definition, d := flattenApplicationDefinitionFromVersion(ctx, version) + r.Definition = definition + diags.Append(d...) + r.CurrentVersion = flex.Int32ToFramework(ctx, version.ApplicationVersion) + return diags +} + +func waitApplicationCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleCreating), + Target: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleAvailable), + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { + return out, err + } + + return nil, err +} + +func waitApplicationUpdated(ctx context.Context, conn *m2.Client, id string, version int32, timeout time.Duration) (*m2.GetApplicationVersionOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleCreating), + Target: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleAvailable), + Refresh: statusApplicationVersion(ctx, conn, id, version), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationVersionOutput); ok { + return out, err + } + + return nil, err +} + +func waitApplicationDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleDeleting, awstypes.ApplicationLifecycleDeletingFromEnvironment, + awstypes.ApplicationLifecycleAvailable, awstypes.ApplicationLifecycleStopped, awstypes.ApplicationLifecycleStopping), + Target: []string{}, + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { + return out, err + } + + return nil, err +} + +func statusApplication(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + out, err := findApplicationByID(ctx, conn, id) + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err + } + + return out, string(out.Status), nil + } +} + +func statusApplicationVersion(ctx context.Context, conn *m2.Client, id string, version int32) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + out, err := findApplicationVersion(ctx, conn, id, version) + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err + } + + return out, string(out.Status), nil + } +} + +func findApplicationByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetApplicationOutput, error) { + in := &m2.GetApplicationInput{ + ApplicationId: aws.String(id), + } + + out, err := conn.GetApplication(ctx, in) + if err != nil { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + + return nil, err + } + + if out == nil || out.ApplicationId == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return out, nil +} + +func findApplicationVersion(ctx context.Context, conn *m2.Client, id string, version int32) (*m2.GetApplicationVersionOutput, error) { + in := &m2.GetApplicationVersionInput{ + ApplicationId: aws.String(id), + ApplicationVersion: aws.Int32(version), + } + out, err := conn.GetApplicationVersion(ctx, in) + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + if err != nil { + return nil, err + } + + if out == nil || out.ApplicationVersion == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return out, nil + +} + +func expandApplicationDefinition(ctx context.Context, definition []applicationDefinition) awstypes.Definition { + if len(definition) == 0 { + return nil + } + + if !definition[0].S3Location.IsNull() { + return &awstypes.DefinitionMemberS3Location{ + Value: *flex.StringFromFramework(ctx, definition[0].S3Location), + } + } + + if !definition[0].Content.IsNull() { + return &awstypes.DefinitionMemberContent{ + Value: *flex.StringFromFramework(ctx, definition[0].Content), + } + } + + return nil +} + +func flattenApplicationDefinition(ctx context.Context, definition awstypes.Definition) (attr.Value, diag.Diagnostics) { + var diags diag.Diagnostics + + content := types.StringNull() + s3Location := types.StringNull() + + switch v := definition.(type) { + case *awstypes.DefinitionMemberS3Location: + s3Location = flex.StringValueToFramework(ctx, v.Value) + case *awstypes.DefinitionMemberContent: + content = flex.StringValueToFramework(ctx, v.Value) + + } + + obj := map[string]attr.Value{ + "content": content, + "s3_location": s3Location, + } + + definitionValue, d := types.ObjectValue(applicationDefinitionAttrs, obj) + diags.Append(d...) + if diags.HasError() { + return nil, diags + } + + return definitionValue, diags +} + +func flattenApplicationDefinitionFromVersion(ctx context.Context, version *m2.GetApplicationVersionOutput) (types.List, diag.Diagnostics) { + var diags diag.Diagnostics + elemType := types.ObjectType{AttrTypes: applicationDefinitionAttrs} + + obj := map[string]attr.Value{ + "content": flex.StringToFramework(ctx, version.DefinitionContent), + "s3_location": types.StringNull(), + } + + definitionValue, d := types.ObjectValue(applicationDefinitionAttrs, obj) + diags.Append(d...) + elems := []attr.Value{definitionValue} + definitionList, d := types.ListValue(elemType, elems) + + return definitionList, diags +} + +type resourceApplicationData struct { + ARN types.String `tfsdk:"arn"` + ClientToken types.String `tfsdk:"client_token"` + CurrentVersion types.Int64 `tfsdk:"current_version"` + Definition types.List `tfsdk:"definition"` + Description types.String `tfsdk:"description"` + ID types.String `tfsdk:"id"` + EngineType types.String `tfsdk:"engine_type"` + KmsKeyId types.String `tfsdk:"kms_key_id"` + Name types.String `tfsdk:"name"` + RoleArn fwtypes.ARN `tfsdk:"role_arn"` + Tags types.Map `tfsdk:"tags"` + TagsAll types.Map `tfsdk:"tags_all"` + Timeouts timeouts.Value `tfsdk:"timeouts"` +} + +type applicationDefinition struct { + Content types.String `tfsdk:"content"` + S3Location types.String `tfsdk:"s3_location"` +} + +var ( + applicationDefinitionAttrs = map[string]attr.Type{ + "content": types.StringType, + "s3_location": types.StringType, + } +) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go new file mode 100644 index 00000000000..46d8201f99e --- /dev/null +++ b/internal/service/m2/application_test.go @@ -0,0 +1,263 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2_test + +import ( + "context" + "errors" + "fmt" + "os" + "testing" + + "github.com/YakDriver/regexache" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/m2" + "github.com/aws/aws-sdk-go-v2/service/m2/types" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccM2Application_basic(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + skipIfDemoAppMissing(t) + + var application m2.GetApplicationOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_application.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckApplicationDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_basic(rName, "bluage"), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "name", rName), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccM2Application_update(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + skipIfDemoAppMissing(t) + + var application m2.GetApplicationOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_application.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckApplicationDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_versioned(rName, "bluage", "v1"), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttr(resourceName, "current_version", "1"), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + ), + }, + { + Config: testAccApplicationConfig_versioned(rName, "bluage", "v2"), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttr(resourceName, "current_version", "2"), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccM2Application_disappears(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + skipIfDemoAppMissing(t) + + var application m2.GetApplicationOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_application.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccApplicationPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckApplicationDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_basic(rName, "bluage"), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceApplication, resourceName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + +func testAccCheckApplicationDestroy(ctx context.Context) resource.TestCheckFunc { + return func(s *terraform.State) error { + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_m2_application" { + continue + } + + _, err := conn.GetApplication(ctx, &m2.GetApplicationInput{ + ApplicationId: aws.String(rs.Primary.ID), + }) + if errs.IsA[*types.ResourceNotFoundException](err) { + return nil + } + if err != nil { + return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameApplication, rs.Primary.ID, err) + } + + return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameApplication, rs.Primary.ID, errors.New("not destroyed")) + } + + return nil + } +} + +func testAccCheckApplicationExists(ctx context.Context, name string, application *m2.GetApplicationOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[name] + if !ok { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameApplication, name, errors.New("not found")) + } + + if rs.Primary.ID == "" { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameApplication, name, errors.New("not set")) + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + resp, err := conn.GetApplication(ctx, &m2.GetApplicationInput{ + ApplicationId: aws.String(rs.Primary.ID), + }) + + if err != nil { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameApplication, rs.Primary.ID, err) + } + + *application = *resp + + return nil + } +} + +func testAccApplicationPreCheck(ctx context.Context, t *testing.T) { + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + input := &m2.ListApplicationsInput{} + _, err := conn.ListApplications(ctx, input) + + if acctest.PreCheckSkipError(err) { + t.Skipf("skipping acceptance testing: %s", err) + } + if err != nil { + t.Fatalf("unexpected PreCheck error: %s", err) + } +} + +func testAccCheckApplicationNotRecreated(before, after *m2.GetApplicationOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + if before, after := aws.ToString(before.ApplicationId), aws.ToString(after.ApplicationId); before != after { + return create.Error(names.M2, create.ErrActionCheckingNotRecreated, tfm2.ResNameApplication, before, errors.New("recreated")) + } + + return nil + } +} + +func testAccApplicationConfig_basic(rName, engineType string) string { + return testAccApplicationConfig_versioned(rName, engineType, "1") +} + +func testAccApplicationConfig_versioned(rName, engineType, version string) string { + return fmt.Sprintf(` +resource "aws_s3_bucket" "test" { + bucket = %[1]q +} + +resource "aws_s3_object" "test" { + bucket = aws_s3_bucket.test.id + key = "%[3]s/PlanetsDemo-%[3]s.zip" + source = "test-fixtures/PlanetsDemo-v1.zip" +} + +resource "aws_m2_application" "test" { + name = %[1]q + engine_type = %[2]q + definition { + content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = %[3]q }) + } + + tags = { + engine = %[2]q + } + + depends_on = [ aws_s3_object.test ] +} +`, rName, engineType, version) + +} + +func skipIfDemoAppMissing(t *testing.T) { + if _, err := os.Stat("test-fixtures/PlanetsDemo-v1.zip"); errors.Is(err, os.ErrNotExist) { + t.Skip("Download test-fixtures/PlanetsDemo-v1.zip from: https://docs.aws.amazon.com/m2/latest/userguide/tutorial-runtime-ba.html") + } +} diff --git a/internal/service/m2/export_test.go b/internal/service/m2/export_test.go index a8619c2223b..bdca5d28052 100644 --- a/internal/service/m2/export_test.go +++ b/internal/service/m2/export_test.go @@ -6,4 +6,5 @@ package m2 // Exports for use in tests only. var ( ResourceEnvironment = newResourceEnvironment + ResourceApplication = newResourceApplication ) diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index 8096ae76b4d..1f90ded8cbc 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -20,6 +20,13 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.ServicePackageFrameworkResource { return []*types.ServicePackageFrameworkResource{ + { + Factory: newResourceApplication, + Name: "Application", + Tags: &types.ServicePackageResourceTags{ + IdentifierAttribute: "arn", + }, + }, { Factory: newResourceEnvironment, Name: "Environment", diff --git a/internal/service/m2/test-fixtures/application-definition.json b/internal/service/m2/test-fixtures/application-definition.json new file mode 100644 index 00000000000..0c82fe34f8f --- /dev/null +++ b/internal/service/m2/test-fixtures/application-definition.json @@ -0,0 +1,24 @@ +{ + "definition": { + "listeners": [ + { + "port": 8196, + "type": "http" + } + ], + "ba-application": { + "app-location": "$${s3-source}/PlanetsDemo-${version}.zip" + } + }, + "source-locations": [ + { + "source-id": "s3-source", + "source-type": "s3", + "properties": { + "s3-bucket": "${s3_bucket}", + "s3-key-prefix": "${version}" + } + } + ], + "template-version": "2.0" +} \ No newline at end of file diff --git a/website/docs/r/m2_application.html.markdown b/website/docs/r/m2_application.html.markdown new file mode 100644 index 00000000000..f4e49db3aaa --- /dev/null +++ b/website/docs/r/m2_application.html.markdown @@ -0,0 +1,108 @@ +--- +subcategory: "Mainframe Modernization" +layout: "aws" +page_title: "AWS: aws_m2_application" +description: |- + Terraform resource for managing an AWS Mainframe Modernization Application. +--- +# Resource: aws_m2_application + +Terraform resource for managing an [AWS Mainframe Modernization Application](https://docs.aws.amazon.com/m2/latest/userguide/applications-m2.html). + +## Example Usage + +### Basic Usage + +```terraform +resource "aws_m2_application" "example" { + name = "Example" + engine_type = "bluage" + definition { + content = < Date: Thu, 18 Jan 2024 12:50:04 +0000 Subject: [PATCH 030/126] Order properties per docs. --- .../test-fixtures/application-definition.json | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/service/m2/test-fixtures/application-definition.json b/internal/service/m2/test-fixtures/application-definition.json index 0c82fe34f8f..65ae9a24359 100644 --- a/internal/service/m2/test-fixtures/application-definition.json +++ b/internal/service/m2/test-fixtures/application-definition.json @@ -1,15 +1,5 @@ { - "definition": { - "listeners": [ - { - "port": 8196, - "type": "http" - } - ], - "ba-application": { - "app-location": "$${s3-source}/PlanetsDemo-${version}.zip" - } - }, + "template-version": "2.0", "source-locations": [ { "source-id": "s3-source", @@ -20,5 +10,15 @@ } } ], - "template-version": "2.0" + "definition": { + "listeners": [ + { + "port": 8196, + "type": "http" + } + ], + "ba-application": { + "app-location": "$${s3-source}/PlanetsDemo-${version}.zip" + } + } } \ No newline at end of file From 2b959d270f1f36623eb73f12e4ae98af9a14ecd7 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Thu, 18 Jan 2024 12:50:38 +0000 Subject: [PATCH 031/126] Change to SingleNestedBlock for definition, it's not a list. --- internal/service/m2/application.go | 72 +++++++++++++----------------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 7e58ff963e0..9f44deedf3c 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -6,10 +6,10 @@ package m2 import ( "context" "errors" - "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-plugin-framework/types/basetypes" "github.com/hashicorp/terraform-provider-aws/internal/enum" fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" "time" @@ -107,26 +107,21 @@ func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaReq names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), }, Blocks: map[string]schema.Block{ - "definition": schema.ListNestedBlock{ - Validators: []validator.List{ - listvalidator.SizeAtMost(1), - }, - NestedObject: schema.NestedBlockObject{ - Attributes: map[string]schema.Attribute{ - "content": schema.StringAttribute{ - Optional: true, - Validators: []validator.String{ - stringvalidator.ExactlyOneOf( - path.MatchRelative().AtParent().AtName("content"), - path.MatchRelative().AtParent().AtName("s3_location"), - ), - }, + "definition": schema.SingleNestedBlock{ + Attributes: map[string]schema.Attribute{ + "content": schema.StringAttribute{ + Optional: true, + Validators: []validator.String{ + stringvalidator.ExactlyOneOf( + path.MatchRelative().AtParent().AtName("content"), + path.MatchRelative().AtParent().AtName("s3_location"), + ), }, - "s3_location": schema.StringAttribute{ - Optional: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), - }, + }, + "s3_location": schema.StringAttribute{ + Optional: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), }, }, }, @@ -158,14 +153,14 @@ func (r *resourceApplication) Create(ctx context.Context, req resource.CreateReq return } - var definitions []applicationDefinition - resp.Diagnostics.Append(plan.Definition.ElementsAs(ctx, &definitions, false)...) + var definition applicationDefinition + resp.Diagnostics.Append(plan.Definition.As(ctx, &definition, basetypes.ObjectAsOptions{})...) if resp.Diagnostics.HasError() { return } - apiDefinition := expandApplicationDefinition(ctx, definitions) + apiDefinition := expandApplicationDefinition(ctx, definition) in.Definition = apiDefinition out, err := conn.CreateApplication(ctx, in) @@ -258,14 +253,14 @@ func (r *resourceApplication) Update(ctx context.Context, req resource.UpdateReq } if !plan.Definition.Equal(state.Definition) { - var definitions []applicationDefinition - resp.Diagnostics.Append(plan.Definition.ElementsAs(ctx, &definitions, false)...) + var definition applicationDefinition + resp.Diagnostics.Append(plan.Definition.As(ctx, &definition, basetypes.ObjectAsOptions{})...) if resp.Diagnostics.HasError() { return } - apiDefinition := expandApplicationDefinition(ctx, definitions) + apiDefinition := expandApplicationDefinition(ctx, definition) in.Definition = apiDefinition update = true } @@ -500,20 +495,16 @@ func findApplicationVersion(ctx context.Context, conn *m2.Client, id string, ver } -func expandApplicationDefinition(ctx context.Context, definition []applicationDefinition) awstypes.Definition { - if len(definition) == 0 { - return nil - } - - if !definition[0].S3Location.IsNull() { +func expandApplicationDefinition(ctx context.Context, definition applicationDefinition) awstypes.Definition { + if !definition.S3Location.IsNull() { return &awstypes.DefinitionMemberS3Location{ - Value: *flex.StringFromFramework(ctx, definition[0].S3Location), + Value: *flex.StringFromFramework(ctx, definition.S3Location), } } - if !definition[0].Content.IsNull() { + if !definition.Content.IsNull() { return &awstypes.DefinitionMemberContent{ - Value: *flex.StringFromFramework(ctx, definition[0].Content), + Value: *flex.StringFromFramework(ctx, definition.Content), } } @@ -548,28 +539,25 @@ func flattenApplicationDefinition(ctx context.Context, definition awstypes.Defin return definitionValue, diags } -func flattenApplicationDefinitionFromVersion(ctx context.Context, version *m2.GetApplicationVersionOutput) (types.List, diag.Diagnostics) { +func flattenApplicationDefinitionFromVersion(ctx context.Context, version *m2.GetApplicationVersionOutput) (types.Object, diag.Diagnostics) { var diags diag.Diagnostics - elemType := types.ObjectType{AttrTypes: applicationDefinitionAttrs} obj := map[string]attr.Value{ "content": flex.StringToFramework(ctx, version.DefinitionContent), - "s3_location": types.StringNull(), + "s3_location": types.StringNull(), // This value is never returned... } definitionValue, d := types.ObjectValue(applicationDefinitionAttrs, obj) diags.Append(d...) - elems := []attr.Value{definitionValue} - definitionList, d := types.ListValue(elemType, elems) - return definitionList, diags + return definitionValue, diags } type resourceApplicationData struct { ARN types.String `tfsdk:"arn"` ClientToken types.String `tfsdk:"client_token"` CurrentVersion types.Int64 `tfsdk:"current_version"` - Definition types.List `tfsdk:"definition"` + Definition types.Object `tfsdk:"definition"` Description types.String `tfsdk:"description"` ID types.String `tfsdk:"id"` EngineType types.String `tfsdk:"engine_type"` From 5140925690dbf5a41df1c963babd21f150d8b3fd Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Thu, 18 Jan 2024 13:32:11 +0000 Subject: [PATCH 032/126] Update states for application lifecycle --- internal/service/m2/application.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 9f44deedf3c..7cecf17f3fd 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -384,8 +384,8 @@ func waitApplicationCreated(ctx context.Context, conn *m2.Client, id string, tim func waitApplicationUpdated(ctx context.Context, conn *m2.Client, id string, version int32, timeout time.Duration) (*m2.GetApplicationVersionOutput, error) { stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.ApplicationLifecycleCreating), - Target: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleAvailable), + Pending: enum.Slice(awstypes.ApplicationVersionLifecycleCreating), + Target: enum.Slice(awstypes.ApplicationVersionLifecycleAvailable), Refresh: statusApplicationVersion(ctx, conn, id, version), Timeout: timeout, NotFoundChecks: 20, @@ -402,8 +402,7 @@ func waitApplicationUpdated(ctx context.Context, conn *m2.Client, id string, ver func waitApplicationDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleDeleting, awstypes.ApplicationLifecycleDeletingFromEnvironment, - awstypes.ApplicationLifecycleAvailable, awstypes.ApplicationLifecycleStopped, awstypes.ApplicationLifecycleStopping), + Pending: enum.Slice(awstypes.ApplicationLifecycleDeleting, awstypes.ApplicationLifecycleDeletingFromEnvironment), Target: []string{}, Refresh: statusApplication(ctx, conn, id), Timeout: timeout, From dd3d4bb0df6acb38ae701f6e32ec2bbf4588fafa Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Thu, 18 Jan 2024 13:46:08 +0000 Subject: [PATCH 033/126] Fsx should be FSx --- internal/service/m2/environment.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 3991bb6a92b..9fab1ea4bbf 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -587,7 +587,7 @@ func expandStorageConfigurations(ctx context.Context, storageConfigurations []st if !mount.FSX.IsNull() { var fsxMounts []fsx diags.Append(mount.FSX.ElementsAs(ctx, &fsxMounts, false)...) - mp := expandFsxMountPoint(ctx, fsxMounts) + mp := expandFSxMountPoint(ctx, fsxMounts) storage = append(storage, mp) } } @@ -607,7 +607,7 @@ func expandEFSMountPoint(ctx context.Context, efs []efs) *awstypes.StorageConfig } } -func expandFsxMountPoint(ctx context.Context, fsx []fsx) *awstypes.StorageConfigurationMemberFsx { +func expandFSxMountPoint(ctx context.Context, fsx []fsx) *awstypes.StorageConfigurationMemberFsx { if len(fsx) == 0 { return nil } From b67192e6f2c04d8b54f8da3c62a8aaefbc83c7a6 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Thu, 18 Jan 2024 21:06:03 +0000 Subject: [PATCH 034/126] Add Accpt tests --- .changelog/35324.txt | 3 + internal/service/m2/environment.go | 13 +--- internal/service/m2/environment_test.go | 75 ++++++++++++++++++++ website/docs/r/m2_environment.html.markdown | 78 +++++++++++++++++++++ 4 files changed, 158 insertions(+), 11 deletions(-) create mode 100644 .changelog/35324.txt create mode 100644 website/docs/r/m2_environment.html.markdown diff --git a/.changelog/35324.txt b/.changelog/35324.txt new file mode 100644 index 00000000000..a2cdda5a420 --- /dev/null +++ b/.changelog/35324.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +aws_m2_environment +``` \ No newline at end of file diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index bf82fe84baf..35dfe47fa19 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -68,7 +68,7 @@ func (r *resourceEnvironment) Schema(ctx context.Context, request resource.Schem Optional: true, Computed: true, PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), + stringplanmodifier.RequiresReplace(), }, }, "engine_type": schema.StringAttribute{ @@ -85,16 +85,7 @@ func (r *resourceEnvironment) Schema(ctx context.Context, request resource.Schem }, }, "environment_id": framework.IDAttribute(), - // "high_availability_config": schema.ListAttribute{ - // CustomType: fwtypes.NewListNestedObjectTypeOf[highAvailabilityConfig](ctx), - // ElementType: fwtypes.NewObjectTypeOf[highAvailabilityConfig](ctx), - // Optional: true, - // Computed: true, - // PlanModifiers: []planmodifier.List{ - // listplanmodifier.UseStateForUnknown(), - // }, - // }, - "id": framework.IDAttribute(), + "id": framework.IDAttribute(), "instance_type": schema.StringAttribute{ Required: true, PlanModifiers: []planmodifier.String{ diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index bedb9976c35..e8133beee91 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -145,6 +145,69 @@ func TestAccEnvironment_update(t *testing.T) { }) } +func TestAccEnvironment_tags(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + var environment awstypes.EnvironmentSummary + + tags1 := ` + tags = { + key1 = "value1" + } +` + tags2 := ` + tags = { + key1 = "value1" + key2 = "value2" + } +` + tags3 := ` + tags = { + key2 = "value2" + } +` + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_tags(rName, tags1), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + ), + }, + { + Config: testAccEnvironmentConfig_tags(rName, tags2), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + { + Config: testAccEnvironmentConfig_tags(rName, tags3), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + }, + }) +} + func testAccCheckEnvironmentExists(ctx context.Context, resourceName string, v *awstypes.EnvironmentSummary) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[resourceName] @@ -270,3 +333,15 @@ resource "aws_m2_environment" "test" { } `, rName, desc) } + +func testAccEnvironmentConfig_tags(rName, tags string) string { + return fmt.Sprintf(` +resource "aws_m2_environment" "test" { + engine_type = "microfocus" + instance_type = "M2.m5.large" + name = %[1]q + +%[2]s +} +`, rName, tags) +} diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown new file mode 100644 index 00000000000..0380fbeae2e --- /dev/null +++ b/website/docs/r/m2_environment.html.markdown @@ -0,0 +1,78 @@ +--- +subcategory: "m2" +layout: "aws" +page_title: "AWS: aws_m2_environment" +description: |- + Provides a resource to create a M2 environment in a AWS Account. +--- + +# Resource: aws_m2_environment + +Provides a resource to createe an [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/APIReference/API_CreateEnvironment.html). + +## Example Usage + +```terraform +resource "aws_m2_environment" "test" { + engine_type = "microfocus" + instance_type = "M2.m5.large" + name = "Microfocus M2 Environment +} +``` + +## Argument Reference + +This resource supports the following arguments: + +* `client_token` - (Auto Generaated) Unique, case-sensitive identifier you provide to ensure the idempotency of the request to create an environment. +* `description` - (Optional) The description of the runtime environment. +* `engine_type` - (Required) The engine type for the runtime environment. Valid Values are `microfocus` or `blueage` +* `engine_version` - (Opional) The version of the engine type for the runtime environment. +* `high_availability_config` - (Optional) The details of a high availability configuration for this runtime environment. Check the high availability config object for more details. +* `instance_type` - (Required) The type of instance for the runtime environment. +* `kms_key_id` - (Optional) The identifier of a customer managed key. +* `name` - (Required) The name of the runtime environment. Must be unique within the account. +* `preferred_maintainence_window` - (Optional) Configures the maintenance window that you want for the runtime environment. The maintenance window must have the format ddd:hh24:mi-ddd:hh24:mi and must be less than 24 hours. The following two examples are valid maintenance windows: sun:23:45-mon:00:15 or sat:01:00-sat:03:00. If you do not provide a value, a random system-generated value will be assigned. +* `publicly_accessible` - (Optional) Flag which specifies whether the runtime environment is publicly accessible. +* `security_group_ids` - (Optional) The list of security groups for the VPC associated with this runtime environment. +* `storage_configurations` - (Optional) The array of storage configurations for this runtime environment. Check the storage configurations object for more details. +* `subnet_ids` - (Optional) The list of subnets associated with the VPC for this runtime environment. +* `tags` - (Optional) A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. + +The `high_availability_config` object supports the following: + +* `desired_capacity` - (Required) The number of instances in a high availability configuration. The minimum possible value is 1 and the maximum is 100. + +The `storage_configurations` object supports the following and only one configuration can be specified. + +* `efs` - (Optional) Defines the storage configuration for an Amazon EFS file system. +* `fsx` - (Optional) Defines the storage configuration for an Amazon FSx file system. + +The `efs` or `fsx` object supports the following fields. + +* `file_system_id` - (Required) The file system identifier. +* `mount_point` - (Required) The mount point for the file system. + +## Attribute Reference + +This resource exports the following attributes in addition to the arguments above: + +* `environment_id` - The unique identifier of the runtime environment. + + +## Import + +In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import `aws_m2_environment` using the environmentid. For example: + +```terraform +import { + to = aws_m2_environment.example + environment_id = "abcd1" +} +``` + +Using `terraform import`, import `aws_m2_environment` using the environmentid. For example: + +```console +% terraform import aws_m2_environment.example abcd1 +``` From 0f6c9f5225202a6e958b2f1e0d70741db1256a89 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 16:04:50 +0000 Subject: [PATCH 035/126] Initial pass at deployment resource --- internal/service/m2/application.go | 87 ++++ internal/service/m2/deployment.go | 479 +++++++++++++++++++++ internal/service/m2/deployment_test.go | 289 +++++++++++++ internal/service/m2/export_test.go | 1 + internal/service/m2/service_package_gen.go | 4 + 5 files changed, 860 insertions(+) create mode 100644 internal/service/m2/deployment.go create mode 100644 internal/service/m2/deployment_test.go diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 7cecf17f3fd..66d81b537cc 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -416,6 +416,56 @@ func waitApplicationDeleted(ctx context.Context, conn *m2.Client, id string, tim return nil, err } +func waitApplicationDeletedFromEnvironment(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleDeletingFromEnvironment), + Target: enum.Slice(awstypes.ApplicationLifecycleAvailable), + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { + return out, err + } + + return nil, err +} + +func waitApplicationStopped(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleStopping), + Target: enum.Slice(awstypes.ApplicationLifecycleStopped), + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { + return out, err + } + + return nil, err +} + +func waitApplicationRunning(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleStarting), + Target: enum.Slice(awstypes.ApplicationLifecycleRunning), + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { + return out, err + } + + return nil, err +} + func statusApplication(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { out, err := findApplicationByID(ctx, conn, id) @@ -494,6 +544,43 @@ func findApplicationVersion(ctx context.Context, conn *m2.Client, id string, ver } +func startApplication(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stopInput := &m2.StartApplicationInput{ + ApplicationId: &id, + } + + _, err := conn.StartApplication(ctx, stopInput) + if err != nil { + return nil, err + } + + app, err := waitApplicationRunning(ctx, conn, id, timeout) + if err != nil { + return nil, err + } + + return app, nil +} + +func stopApplication(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stopInput := &m2.StopApplicationInput{ + ApplicationId: &id, + ForceStop: forceStop, + } + + _, err := conn.StopApplication(ctx, stopInput) + if err != nil { + return nil, err + } + + app, err := waitApplicationStopped(ctx, conn, id, timeout) + if err != nil { + return nil, err + } + + return app, nil +} + func expandApplicationDefinition(ctx context.Context, definition applicationDefinition) awstypes.Definition { if !definition.S3Location.IsNull() { return &awstypes.DefinitionMemberS3Location{ diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go new file mode 100644 index 00000000000..8ee9be593ff --- /dev/null +++ b/internal/service/m2/deployment.go @@ -0,0 +1,479 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + "errors" + "fmt" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + "github.com/hashicorp/terraform-provider-aws/internal/enum" + "strings" + "time" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/m2" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/framework" + "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// Function annotations are used for resource registration to the Provider. DO NOT EDIT. +// @FrameworkResource(name="Deployment") +func newResourceDeployment(_ context.Context) (resource.ResourceWithConfigure, error) { + r := &resourceDeployment{} + + r.SetDefaultCreateTimeout(60 * time.Minute) + r.SetDefaultUpdateTimeout(60 * time.Minute) + r.SetDefaultDeleteTimeout(60 * time.Minute) + + return r, nil +} + +const ( + ResNameDeployment = "Deployment" +) + +type resourceDeployment struct { + framework.ResourceWithConfigure + framework.WithTimeouts +} + +func (r *resourceDeployment) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { + resp.TypeName = "aws_m2_deployment" +} + +func (r *resourceDeployment) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { + resp.Schema = schema.Schema{ + Attributes: map[string]schema.Attribute{ + "application_id": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "application_version": schema.Int64Attribute{ + Required: true, + PlanModifiers: []planmodifier.Int64{ + int64planmodifier.RequiresReplace(), + }, + }, + "client_token": schema.StringAttribute{ + Optional: true, + }, + "environment_id": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "force_stop": schema.BoolAttribute{ + Optional: true, + }, + "id": framework.IDAttribute(), + "start": schema.BoolAttribute{ + Required: true, + }, + }, + Blocks: map[string]schema.Block{ + "timeouts": timeouts.Block(ctx, timeouts.Opts{ + Create: true, + Update: true, + Delete: true, + }), + }, + } +} + +func (r *resourceDeployment) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { + conn := r.Meta().M2Client(ctx) + + var plan resourceDeploymentData + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + if resp.Diagnostics.HasError() { + return + } + + in := plan.createDeploymentInput(ctx) + + out, err := conn.CreateDeployment(ctx, in) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameDeployment, plan.ApplicationId.String(), err), + err.Error(), + ) + return + } + if out == nil || out.DeploymentId == nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameDeployment, plan.ApplicationId.String(), nil), + errors.New("empty output").Error(), + ) + return + } + + deploymentId := DeploymentId(plan.ApplicationId.ValueString(), *out.DeploymentId) + + plan.ID = flex.StringValueToFramework(ctx, deploymentId) + + createTimeout := r.CreateTimeout(ctx, plan.Timeouts) + deployment, err := waitDeploymentCreated(ctx, conn, plan.ID.ValueString(), createTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameDeployment, plan.ApplicationId.String(), err), + err.Error(), + ) + return + } + + if plan.Start.ValueBool() { + _, err = startApplication(ctx, conn, plan.ApplicationId.ValueString(), createTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameDeployment, plan.ApplicationId.String(), err), + err.Error(), + ) + return + } + } + + plan.refreshFromOutput(ctx, deployment) + resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) +} + +func (r *resourceDeployment) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { + conn := r.Meta().M2Client(ctx) + + var state resourceDeploymentData + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + + out, err := findDeploymentByID(ctx, conn, state.ID.ValueString()) + if tfresource.NotFound(err) { + resp.State.RemoveResource(ctx) + return + } + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameDeployment, state.ID.String(), err), + err.Error(), + ) + return + } + state.refreshFromOutput(ctx, out) + + applicationId, _, err := DeploymentParseResourceId(state.ID.ValueString()) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameDeployment, state.ID.String(), err), + err.Error(), + ) + return + } + + app, err := findApplicationByID(ctx, conn, applicationId) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameDeployment, state.ID.String(), err), + err.Error(), + ) + return + } + state.refreshFromApplicationOutput(ctx, app) + + resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) +} + +func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { + conn := r.Meta().M2Client(ctx) + + var plan, state resourceDeploymentData + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + + plan.ID = types.StringUnknown() + + updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) + + if !plan.ApplicationVersion.Equal(state.ApplicationVersion) { + + applicationId := flex.StringFromFramework(ctx, plan.ApplicationId) + + // Stop the application if it was running + if state.Start.ValueBool() { + _, err := stopApplication(ctx, conn, *applicationId, plan.ForceStop.ValueBool(), updateTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), err), + err.Error(), + ) + return + + } + } + + // Create the updated deployment + in := plan.createDeploymentInput(ctx) + + out, err := conn.CreateDeployment(ctx, in) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), err), + err.Error(), + ) + return + } + if out == nil || out.DeploymentId == nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), nil), + errors.New("empty output").Error(), + ) + return + } + + combinedId := DeploymentId(plan.ApplicationId.ValueString(), *out.DeploymentId) + plan.ID = flex.StringValueToFramework(ctx, combinedId) + + deployment, err := waitDeploymentUpdated(ctx, conn, plan.ID.ValueString(), updateTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameDeployment, plan.ApplicationId.String(), err), + err.Error(), + ) + return + } + plan.refreshFromOutput(ctx, deployment) + } + + // Start the application if plan says to + if plan.Start.ValueBool() { + app, err := startApplication(ctx, conn, plan.ApplicationId.ValueString(), updateTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), err), + err.Error(), + ) + return + } + plan.refreshFromApplicationOutput(ctx, app) + } + + resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) + +} + +func (r *resourceDeployment) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { + conn := r.Meta().M2Client(ctx) + + var state resourceDeploymentData + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + + deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) + + if state.Start.ValueBool() { + _, err := stopApplication(ctx, conn, state.ApplicationId.ValueString(), state.ForceStop.ValueBool(), deleteTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameDeployment, state.ApplicationId.String(), err), + err.Error(), + ) + return + } + } + + in := &m2.DeleteApplicationFromEnvironmentInput{ + ApplicationId: flex.StringFromFramework(ctx, state.ApplicationId), + EnvironmentId: flex.StringFromFramework(ctx, state.EnvironmentId), + } + + _, err := conn.DeleteApplicationFromEnvironment(ctx, in) + if err != nil { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return + } + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameDeployment, state.ID.String(), err), + err.Error(), + ) + return + } + + _, err = waitApplicationDeletedFromEnvironment(ctx, conn, state.ApplicationId.ValueString(), deleteTimeout) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameDeployment, state.ID.String(), err), + err.Error(), + ) + return + } +} + +func (r *resourceDeployment) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { + resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) +} + +func (r *resourceDeploymentData) refreshFromOutput(ctx context.Context, out *m2.GetDeploymentOutput) { + combinedId := DeploymentId(*out.ApplicationId, *out.DeploymentId) + r.ID = flex.StringValueToFramework(ctx, combinedId) + r.ApplicationId = flex.StringToFramework(ctx, out.ApplicationId) + r.ApplicationVersion = flex.Int32ToFramework(ctx, out.ApplicationVersion) + r.EnvironmentId = flex.StringToFramework(ctx, out.EnvironmentId) +} + +func (r *resourceDeploymentData) refreshFromApplicationOutput(ctx context.Context, app *m2.GetApplicationOutput) { + r.Start = types.BoolValue(app.Status == awstypes.ApplicationLifecycleRunning) +} + +func (r *resourceDeploymentData) createDeploymentInput(ctx context.Context) *m2.CreateDeploymentInput { + + in := &m2.CreateDeploymentInput{ + ApplicationId: r.ApplicationId.ValueStringPointer(), + ApplicationVersion: flex.Int32FromFramework(ctx, r.ApplicationVersion), + EnvironmentId: r.EnvironmentId.ValueStringPointer(), + } + + var clientToken string + if r.ClientToken.IsNull() || r.ClientToken.IsUnknown() { + clientToken = id.UniqueId() + } else { + clientToken = r.ClientToken.ValueString() + } + + in.ClientToken = aws.String(clientToken) + + return in +} + +func waitDeploymentCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetDeploymentOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.DeploymentLifecycleDeploying), + Target: enum.Slice(awstypes.DeploymentLifecycleSucceeded), + Refresh: statusDeployment(ctx, conn, id), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetDeploymentOutput); ok { + return out, err + } + + return nil, err +} + +func waitDeploymentUpdated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetDeploymentOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.DeploymentLifecycleDeployUpdate), + Target: enum.Slice(awstypes.DeploymentLifecycleSucceeded), + Refresh: statusDeployment(ctx, conn, id), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetDeploymentOutput); ok { + return out, err + } + + return nil, err +} + +func statusDeployment(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + out, err := findDeploymentByID(ctx, conn, id) + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err + } + + return out, string(out.Status), nil + } +} + +func findDeploymentByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetDeploymentOutput, error) { + + applicationId, deploymentId, err := DeploymentParseResourceId(id) + if err != nil { + return nil, err + } + + in := &m2.GetDeploymentInput{ + ApplicationId: aws.String(applicationId), + DeploymentId: aws.String(deploymentId), + } + + out, err := conn.GetDeployment(ctx, in) + if err != nil { + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + + return nil, err + } + + if out == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return out, nil +} + +type resourceDeploymentData struct { + ApplicationId types.String `tfsdk:"application_id"` + ApplicationVersion types.Int64 `tfsdk:"application_version"` + ClientToken types.String `tfsdk:"client_token"` + EnvironmentId types.String `tfsdk:"environment_id"` + ForceStop types.Bool `tfsdk:"force_stop"` + ID types.String `tfsdk:"id"` + Start types.Bool `tfsdk:"start"` + Timeouts timeouts.Value `tfsdk:"timeouts"` +} + +const deploymentIDSeparator = "_" + +func DeploymentId(applicationId, deploymentId string) string { + parts := []string{applicationId, deploymentId} + combinedId := strings.Join(parts, deploymentIDSeparator) + return combinedId +} + +func DeploymentParseResourceId(id string) (string, string, error) { + parts := strings.Split(id, deploymentIDSeparator) + + if len(parts) == 2 && parts[0] != "" && parts[1] != "" { + return parts[0], parts[1], nil + } + + return "", "", fmt.Errorf("unexpected format for ID (%[1]s), expected APPLICATION-ID%[2]sDEPLOYMENT-ID", id, deploymentIDSeparator) + +} diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go new file mode 100644 index 00000000000..9b92900ec20 --- /dev/null +++ b/internal/service/m2/deployment_test.go @@ -0,0 +1,289 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2_test + +import ( + "context" + "errors" + "fmt" + "testing" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/m2" + "github.com/aws/aws-sdk-go-v2/service/m2/types" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccM2Deployment_basic(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + skipIfDemoAppMissing(t) + + var deployment m2.GetDeploymentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_deployment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckDeploymentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v1", "1", "true"), + Check: resource.ComposeTestCheckFunc( + testAccCheckDeploymentExists(ctx, resourceName, &deployment), + resource.TestCheckResourceAttr(resourceName, "application_version", "1"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"apply_immediately", "user"}, + }, + }, + }) +} + +func TestAccM2Deployment_nostart(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + skipIfDemoAppMissing(t) + + var deployment m2.GetDeploymentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_deployment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckDeploymentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v1", "1", "false"), + Check: resource.ComposeTestCheckFunc( + testAccCheckDeploymentExists(ctx, resourceName, &deployment), + resource.TestCheckResourceAttr(resourceName, "application_version", "1"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"apply_immediately", "user"}, + }, + }, + }) +} + +func TestAccM2Deployment_update(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + skipIfDemoAppMissing(t) + + var deployment m2.GetDeploymentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_deployment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckDeploymentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v1", "1", "true"), + Check: resource.ComposeTestCheckFunc( + testAccCheckDeploymentExists(ctx, resourceName, &deployment), + resource.TestCheckResourceAttr(resourceName, "application_version", "1"), + ), + }, + { + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v2", "2", "true"), + Check: resource.ComposeTestCheckFunc( + testAccCheckDeploymentExists(ctx, resourceName, &deployment), + resource.TestCheckResourceAttr(resourceName, "application_version", "2"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"apply_immediately", "user"}, + }, + }, + }) +} + +func TestAccM2Deployment_disappears(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + skipIfDemoAppMissing(t) + + var deployment m2.GetDeploymentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_deployment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckDeploymentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v1", "1", "false"), + Check: resource.ComposeTestCheckFunc( + testAccCheckDeploymentExists(ctx, resourceName, &deployment), + acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceDeployment, resourceName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + +func testAccCheckDeploymentDestroy(ctx context.Context) resource.TestCheckFunc { + return func(s *terraform.State) error { + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_m2_deployment" { + continue + } + + applicationId, deploymentId, err := tfm2.DeploymentParseResourceId(rs.Primary.ID) + if err != nil { + return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameDeployment, rs.Primary.ID, err) + } + + _, err = conn.GetDeployment(ctx, &m2.GetDeploymentInput{ + ApplicationId: aws.String(applicationId), + DeploymentId: aws.String(deploymentId), + }) + if errs.IsA[*types.ResourceNotFoundException](err) { + return nil + } + if err != nil { + return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameDeployment, rs.Primary.ID, err) + } + + return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameDeployment, rs.Primary.ID, errors.New("not destroyed")) + } + + return nil + } +} + +func testAccCheckDeploymentExists(ctx context.Context, name string, deployment *m2.GetDeploymentOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[name] + if !ok { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameDeployment, name, errors.New("not found")) + } + + if rs.Primary.ID == "" { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameDeployment, name, errors.New("not set")) + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + applicationId, deploymentId, err := tfm2.DeploymentParseResourceId(rs.Primary.ID) + if err != nil { + return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameDeployment, rs.Primary.ID, err) + } + + resp, err := conn.GetDeployment(ctx, &m2.GetDeploymentInput{ + ApplicationId: aws.String(applicationId), + DeploymentId: aws.String(deploymentId), + }) + + if err != nil { + return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameDeployment, rs.Primary.ID, err) + } + + *deployment = *resp + + return nil + } +} + +func testAccCheckDeploymentNotRecreated(before, after *m2.GetDeploymentOutput) resource.TestCheckFunc { + return func(s *terraform.State) error { + if before, after := aws.ToString(before.DeploymentId), aws.ToString(after.DeploymentId); before != after { + return create.Error(names.M2, create.ErrActionCheckingNotRecreated, tfm2.ResNameDeployment, before, errors.New("recreated")) + } + + return nil + } +} + +func testAccDeploymentConfig_basic(rName, engineType, engineVersion, appVersion, deployVersion, start string) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_basic(rName, engineType, engineVersion), + testAccApplicationConfig_versioned(rName, engineType, appVersion), + testAccDeploymentConfig_secretsManagerEndpoint(rName), + fmt.Sprintf(` +resource "aws_m2_deployment" "test" { + environment_id = aws_m2_environment.test.id + application_id = aws_m2_application.test.id + application_version = %[2]q + start = %[3]q + depends_on = [aws_vpc_endpoint.secretsmanager] +} +`, rName, deployVersion, start)) +} + +func testAccDeploymentConfig_secretsManagerEndpoint(rName string) string { + return fmt.Sprintf(` +resource "aws_vpc_endpoint" "secretsmanager" { + vpc_id = aws_vpc.test.id + service_name = "com.amazonaws.eu-west-1.secretsmanager" + vpc_endpoint_type = "Interface" + + security_group_ids = [ + aws_security_group.test.id, + ] + subnet_ids = aws_subnet.test[*].id + + private_dns_enabled = true + + tags = { + Name = %[1]q + } +} +`, rName) +} diff --git a/internal/service/m2/export_test.go b/internal/service/m2/export_test.go index bdca5d28052..96697a7fb82 100644 --- a/internal/service/m2/export_test.go +++ b/internal/service/m2/export_test.go @@ -7,4 +7,5 @@ package m2 var ( ResourceEnvironment = newResourceEnvironment ResourceApplication = newResourceApplication + ResourceDeployment = newResourceDeployment ) diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index 1f90ded8cbc..f09860430a4 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -27,6 +27,10 @@ func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.Servic IdentifierAttribute: "arn", }, }, + { + Factory: newResourceDeployment, + Name: "Deployment", + }, { Factory: newResourceEnvironment, Name: "Environment", From 743ee0585cc7ba64d207507ab1a90fc643498e66 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 16:08:28 +0000 Subject: [PATCH 036/126] Set start to `false` for the disappears test as we can't delete an application whilst it's running. --- internal/service/m2/application_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 46d8201f99e..17239250636 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -250,7 +250,7 @@ resource "aws_m2_application" "test" { engine = %[2]q } - depends_on = [ aws_s3_object.test ] + depends_on = [aws_s3_object.test] } `, rName, engineType, version) From e0505c5f67343163b633288369ed9a65fc469994 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 16:41:07 +0000 Subject: [PATCH 037/126] Fix errors from checks --- internal/service/m2/application.go | 30 --------------------- internal/service/m2/application_test.go | 11 -------- website/docs/r/m2_application.html.markdown | 1 - 3 files changed, 42 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 7cecf17f3fd..4a8983e497d 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -353,7 +353,6 @@ func (r *resourceApplicationData) refreshFromOutput(ctx context.Context, app *m2 r.CurrentVersion = flex.Int32ToFramework(ctx, app.LatestVersion.ApplicationVersion) return diags - } func (r *resourceApplicationData) refreshFromVersion(ctx context.Context, version *m2.GetApplicationVersionOutput) diag.Diagnostics { var diags diag.Diagnostics @@ -491,7 +490,6 @@ func findApplicationVersion(ctx context.Context, conn *m2.Client, id string, ver } return out, nil - } func expandApplicationDefinition(ctx context.Context, definition applicationDefinition) awstypes.Definition { @@ -510,34 +508,6 @@ func expandApplicationDefinition(ctx context.Context, definition applicationDefi return nil } -func flattenApplicationDefinition(ctx context.Context, definition awstypes.Definition) (attr.Value, diag.Diagnostics) { - var diags diag.Diagnostics - - content := types.StringNull() - s3Location := types.StringNull() - - switch v := definition.(type) { - case *awstypes.DefinitionMemberS3Location: - s3Location = flex.StringValueToFramework(ctx, v.Value) - case *awstypes.DefinitionMemberContent: - content = flex.StringValueToFramework(ctx, v.Value) - - } - - obj := map[string]attr.Value{ - "content": content, - "s3_location": s3Location, - } - - definitionValue, d := types.ObjectValue(applicationDefinitionAttrs, obj) - diags.Append(d...) - if diags.HasError() { - return nil, diags - } - - return definitionValue, diags -} - func flattenApplicationDefinitionFromVersion(ctx context.Context, version *m2.GetApplicationVersionOutput) (types.Object, diag.Diagnostics) { var diags diag.Diagnostics diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 17239250636..f5b57277781 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -213,16 +213,6 @@ func testAccApplicationPreCheck(ctx context.Context, t *testing.T) { } } -func testAccCheckApplicationNotRecreated(before, after *m2.GetApplicationOutput) resource.TestCheckFunc { - return func(s *terraform.State) error { - if before, after := aws.ToString(before.ApplicationId), aws.ToString(after.ApplicationId); before != after { - return create.Error(names.M2, create.ErrActionCheckingNotRecreated, tfm2.ResNameApplication, before, errors.New("recreated")) - } - - return nil - } -} - func testAccApplicationConfig_basic(rName, engineType string) string { return testAccApplicationConfig_versioned(rName, engineType, "1") } @@ -253,7 +243,6 @@ resource "aws_m2_application" "test" { depends_on = [aws_s3_object.test] } `, rName, engineType, version) - } func skipIfDemoAppMissing(t *testing.T) { diff --git a/website/docs/r/m2_application.html.markdown b/website/docs/r/m2_application.html.markdown index f4e49db3aaa..05b32238c9f 100644 --- a/website/docs/r/m2_application.html.markdown +++ b/website/docs/r/m2_application.html.markdown @@ -57,7 +57,6 @@ The following arguments are required: * `name` - (Required) Unique identifier of the application. * `engine_type` - (Required) Engine type must be `microfocus | bluage`. - The following arguments are optional: * `description` - (Optional) Description of the application From bf23e1120a08a39d877bc860d0cb554d300527ae Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 17:05:16 +0000 Subject: [PATCH 038/126] Sort Imports. --- internal/service/m2/application.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 4a8983e497d..c87e457b26e 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -6,30 +6,30 @@ package m2 import ( "context" "errors" - "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" - "github.com/hashicorp/terraform-plugin-framework/attr" - "github.com/hashicorp/terraform-plugin-framework/schema/validator" - "github.com/hashicorp/terraform-plugin-framework/types/basetypes" - "github.com/hashicorp/terraform-provider-aws/internal/enum" - fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" "time" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" + "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" + "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-framework/types/basetypes" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/framework" "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" From e69650e9283e657886ef8c15249cb5f2f516f196 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 20:05:49 +0000 Subject: [PATCH 039/126] Basic docs for deployment. --- website/docs/r/m2_deployment.html.markdown | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 website/docs/r/m2_deployment.html.markdown diff --git a/website/docs/r/m2_deployment.html.markdown b/website/docs/r/m2_deployment.html.markdown new file mode 100644 index 00000000000..890e6ab7916 --- /dev/null +++ b/website/docs/r/m2_deployment.html.markdown @@ -0,0 +1,63 @@ +--- +subcategory: "Mainframe Modernization" +layout: "aws" +page_title: "AWS: aws_m2_deployment" +description: |- + Terraform resource for managing an AWS Mainframe Modernization Deployment. +--- +# Resource: aws_m2_deployment + +Terraform resource for managing an [AWS Mainframe Modernization Deployment.](https://docs.aws.amazon.com/m2/latest/userguide/applications-m2-deploy.html) + +## Example Usage + +### Basic Usage + +```terraform +resource "aws_m2_deployment" "test" { + environment_id = "01234567890abcdef012345678" + application_id = "34567890abcdef012345678012" + application_version = 1 + start = true +} +``` + +## Argument Reference + +The following arguments are required: + +* `environment_id` - (Required) Environment to deploy application to. +* `application_id` - (Required) Application to deploy. +* `application_verison` - (Required) Version to application to deploy +* `start` - (Required) Start the application once deployed. + + +## Attribute Reference + +This resource exports the following attributes in addition to the arguments above: + + +## Timeouts + +[Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts): + +* `create` - (Default `60m`) +* `update` - (Default `60m`) +* `delete` - (Default `60m`) + +## Import + +In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Mainframe Modernization Deployment using the `APPLICATION-ID_DEPLOYMENT-ID`. For example: + +```terraform +import { + to = aws_m2_deployment.example + id = "APPLICATION-ID_DEPLOYMENT-ID" +} +``` + +Using `terraform import`, import Mainframe Modernization Deployment using the `APPLICATION-ID_DEPLOYMENT-ID`. For example: + +```console +% terraform import aws_m2_deployment.example APPLICATION-ID_DEPLOYMENT-ID +``` From e52085990f6fe01e118171a6f34ce99355ba46c0 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 21:39:54 +0000 Subject: [PATCH 040/126] Fix linting issue in test terraform. --- internal/service/m2/deployment_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index 9b92900ec20..8368dcf3159 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -258,11 +258,11 @@ func testAccDeploymentConfig_basic(rName, engineType, engineVersion, appVersion, testAccDeploymentConfig_secretsManagerEndpoint(rName), fmt.Sprintf(` resource "aws_m2_deployment" "test" { - environment_id = aws_m2_environment.test.id - application_id = aws_m2_application.test.id - application_version = %[2]q - start = %[3]q - depends_on = [aws_vpc_endpoint.secretsmanager] + environment_id = aws_m2_environment.test.id + application_id = aws_m2_application.test.id + application_version = %[2]q + start = %[3]q + depends_on = [aws_vpc_endpoint.secretsmanager] } `, rName, deployVersion, start)) } @@ -280,7 +280,7 @@ resource "aws_vpc_endpoint" "secretsmanager" { subnet_ids = aws_subnet.test[*].id private_dns_enabled = true - + tags = { Name = %[1]q } From 232c017fb6ecefc9d19fde8941f8704fb2cee41e Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 21:41:55 +0000 Subject: [PATCH 041/126] Fix linting issue in test docs. --- website/docs/r/m2_deployment.html.markdown | 6 ------ 1 file changed, 6 deletions(-) diff --git a/website/docs/r/m2_deployment.html.markdown b/website/docs/r/m2_deployment.html.markdown index 890e6ab7916..d122b123fa3 100644 --- a/website/docs/r/m2_deployment.html.markdown +++ b/website/docs/r/m2_deployment.html.markdown @@ -31,12 +31,6 @@ The following arguments are required: * `application_verison` - (Required) Version to application to deploy * `start` - (Required) Start the application once deployed. - -## Attribute Reference - -This resource exports the following attributes in addition to the arguments above: - - ## Timeouts [Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts): From 79d1a1334c0e635ff1a15f03ed11edc367af159e Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 21:42:17 +0000 Subject: [PATCH 042/126] Spelling error. --- website/docs/r/m2_deployment.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/m2_deployment.html.markdown b/website/docs/r/m2_deployment.html.markdown index d122b123fa3..91c0549c525 100644 --- a/website/docs/r/m2_deployment.html.markdown +++ b/website/docs/r/m2_deployment.html.markdown @@ -28,7 +28,7 @@ The following arguments are required: * `environment_id` - (Required) Environment to deploy application to. * `application_id` - (Required) Application to deploy. -* `application_verison` - (Required) Version to application to deploy +* `application_version` - (Required) Version to application to deploy * `start` - (Required) Start the application once deployed. ## Timeouts From cf947fc85038476f811dad6dd98eb0d423780c2c Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 21:42:57 +0000 Subject: [PATCH 043/126] Fix imports. --- internal/service/m2/deployment.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index 8ee9be593ff..5df93f9505e 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -7,9 +7,6 @@ import ( "context" "errors" "fmt" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" - "github.com/hashicorp/terraform-provider-aws/internal/enum" "strings" "time" @@ -20,11 +17,14 @@ import ( "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/framework" "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" From c9b641dab692fd2cca46e2ba7beabed10d5a36e0 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 22:51:22 +0000 Subject: [PATCH 044/126] Remove check for property that doesn't exist. --- internal/service/m2/deployment_test.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index 8368dcf3159..0087b11aba2 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -135,10 +135,9 @@ func TestAccM2Deployment_update(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"apply_immediately", "user"}, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) From c1fa425a943627a45dc28e3582c9eafe5c4c6268 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 22:51:38 +0000 Subject: [PATCH 045/126] Remove check for property that doesn't exist. --- internal/service/m2/deployment_test.go | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index 0087b11aba2..c14d6461b3a 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -52,10 +52,9 @@ func TestAccM2Deployment_basic(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"apply_immediately", "user"}, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) @@ -90,10 +89,9 @@ func TestAccM2Deployment_nostart(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"apply_immediately", "user"}, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) From 800040d9644443ab58959ae13977f0e255ec7cdb Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 23:06:12 +0000 Subject: [PATCH 046/126] Whitespace. --- internal/service/m2/deployment.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index 5df93f9505e..4392a5e408e 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -215,7 +215,6 @@ func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequ updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) if !plan.ApplicationVersion.Equal(state.ApplicationVersion) { - applicationId := flex.StringFromFramework(ctx, plan.ApplicationId) // Stop the application if it was running @@ -227,7 +226,6 @@ func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequ err.Error(), ) return - } } @@ -278,7 +276,6 @@ func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequ } resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) - } func (r *resourceDeployment) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { @@ -347,7 +344,6 @@ func (r *resourceDeploymentData) refreshFromApplicationOutput(ctx context.Contex } func (r *resourceDeploymentData) createDeploymentInput(ctx context.Context) *m2.CreateDeploymentInput { - in := &m2.CreateDeploymentInput{ ApplicationId: r.ApplicationId.ValueStringPointer(), ApplicationVersion: flex.Int32FromFramework(ctx, r.ApplicationVersion), @@ -418,7 +414,6 @@ func statusDeployment(ctx context.Context, conn *m2.Client, id string) retry.Sta } func findDeploymentByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetDeploymentOutput, error) { - applicationId, deploymentId, err := DeploymentParseResourceId(id) if err != nil { return nil, err @@ -437,7 +432,6 @@ func findDeploymentByID(ctx context.Context, conn *m2.Client, id string) (*m2.Ge LastRequest: in, } } - return nil, err } @@ -475,5 +469,4 @@ func DeploymentParseResourceId(id string) (string, string, error) { } return "", "", fmt.Errorf("unexpected format for ID (%[1]s), expected APPLICATION-ID%[2]sDEPLOYMENT-ID", id, deploymentIDSeparator) - } From 7e6360757112be283d87df7a5b5b2f1cd8635292 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 23:06:50 +0000 Subject: [PATCH 047/126] Unused function. --- internal/service/m2/deployment_test.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index c14d6461b3a..da65497f05a 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -239,16 +239,6 @@ func testAccCheckDeploymentExists(ctx context.Context, name string, deployment * } } -func testAccCheckDeploymentNotRecreated(before, after *m2.GetDeploymentOutput) resource.TestCheckFunc { - return func(s *terraform.State) error { - if before, after := aws.ToString(before.DeploymentId), aws.ToString(after.DeploymentId); before != after { - return create.Error(names.M2, create.ErrActionCheckingNotRecreated, tfm2.ResNameDeployment, before, errors.New("recreated")) - } - - return nil - } -} - func testAccDeploymentConfig_basic(rName, engineType, engineVersion, appVersion, deployVersion, start string) string { return acctest.ConfigCompose(testAccEnvironmentConfig_basic(rName, engineType, engineVersion), testAccApplicationConfig_versioned(rName, engineType, appVersion), From 43f08b48595e058dec92ad7d1a4db30f92527638 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 23:08:17 +0000 Subject: [PATCH 048/126] Unused param. --- internal/service/m2/deployment.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index 4392a5e408e..cd559883555 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -195,7 +195,7 @@ func (r *resourceDeployment) Read(ctx context.Context, req resource.ReadRequest, ) return } - state.refreshFromApplicationOutput(ctx, app) + state.refreshFromApplicationOutput(app) resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) } @@ -272,7 +272,7 @@ func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequ ) return } - plan.refreshFromApplicationOutput(ctx, app) + plan.refreshFromApplicationOutput(app) } resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) @@ -339,7 +339,7 @@ func (r *resourceDeploymentData) refreshFromOutput(ctx context.Context, out *m2. r.EnvironmentId = flex.StringToFramework(ctx, out.EnvironmentId) } -func (r *resourceDeploymentData) refreshFromApplicationOutput(ctx context.Context, app *m2.GetApplicationOutput) { +func (r *resourceDeploymentData) refreshFromApplicationOutput(app *m2.GetApplicationOutput) { r.Start = types.BoolValue(app.Status == awstypes.ApplicationLifecycleRunning) } From 76686b1fbdb82c5757de4fb5ef8dc0f8cf2fe174 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 23:10:19 +0000 Subject: [PATCH 049/126] Unused return value. --- internal/service/m2/application.go | 10 +++++----- internal/service/m2/deployment.go | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 95cc273ad7a..e04c5a8a5d7 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -560,7 +560,7 @@ func startApplication(ctx context.Context, conn *m2.Client, id string, timeout t return app, nil } -func stopApplication(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) (*m2.GetApplicationOutput, error) { +func stopApplication(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) error { stopInput := &m2.StopApplicationInput{ ApplicationId: &id, ForceStop: forceStop, @@ -568,15 +568,15 @@ func stopApplication(ctx context.Context, conn *m2.Client, id string, forceStop _, err := conn.StopApplication(ctx, stopInput) if err != nil { - return nil, err + return err } - app, err := waitApplicationStopped(ctx, conn, id, timeout) + _, err = waitApplicationStopped(ctx, conn, id, timeout) if err != nil { - return nil, err + return err } - return app, nil + return nil } func expandApplicationDefinition(ctx context.Context, definition applicationDefinition) awstypes.Definition { diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index cd559883555..f8309c8e61e 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -219,7 +219,7 @@ func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequ // Stop the application if it was running if state.Start.ValueBool() { - _, err := stopApplication(ctx, conn, *applicationId, plan.ForceStop.ValueBool(), updateTimeout) + err := stopApplication(ctx, conn, *applicationId, plan.ForceStop.ValueBool(), updateTimeout) if err != nil { resp.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), err), @@ -290,7 +290,7 @@ func (r *resourceDeployment) Delete(ctx context.Context, req resource.DeleteRequ deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) if state.Start.ValueBool() { - _, err := stopApplication(ctx, conn, state.ApplicationId.ValueString(), state.ForceStop.ValueBool(), deleteTimeout) + err := stopApplication(ctx, conn, state.ApplicationId.ValueString(), state.ForceStop.ValueBool(), deleteTimeout) if err != nil { resp.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameDeployment, state.ApplicationId.String(), err), From a89ff1d59bff1cf0f085f2e4405a16d09924c758 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 23:10:35 +0000 Subject: [PATCH 050/126] Missing section in docs. --- website/docs/r/m2_deployment.html.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/website/docs/r/m2_deployment.html.markdown b/website/docs/r/m2_deployment.html.markdown index 91c0549c525..fcf14e6856a 100644 --- a/website/docs/r/m2_deployment.html.markdown +++ b/website/docs/r/m2_deployment.html.markdown @@ -31,6 +31,10 @@ The following arguments are required: * `application_version` - (Required) Version to application to deploy * `start` - (Required) Start the application once deployed. +## Attribute Reference + +This resource exports the following attributes in addition to the arguments above: + ## Timeouts [Configuration options](https://developer.hashicorp.com/terraform/language/resources/syntax#operation-timeouts): From 8e0355bd3747819374e6ba9b06ec732a97575196 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 23:21:17 +0000 Subject: [PATCH 051/126] Superfluous if. --- internal/service/m2/application.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index e04c5a8a5d7..8055b62f232 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -572,11 +572,7 @@ func stopApplication(ctx context.Context, conn *m2.Client, id string, forceStop } _, err = waitApplicationStopped(ctx, conn, id, timeout) - if err != nil { - return err - } - - return nil + return err } func expandApplicationDefinition(ctx context.Context, definition applicationDefinition) awstypes.Definition { From c4098862945f29f447b44e11e4ede53ab48193e9 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 23:25:06 +0000 Subject: [PATCH 052/126] Don't hard code region. --- internal/service/m2/deployment_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index da65497f05a..883ba1677b3 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -256,9 +256,12 @@ resource "aws_m2_deployment" "test" { func testAccDeploymentConfig_secretsManagerEndpoint(rName string) string { return fmt.Sprintf(` + +data "aws_region" "current" {} + resource "aws_vpc_endpoint" "secretsmanager" { vpc_id = aws_vpc.test.id - service_name = "com.amazonaws.eu-west-1.secretsmanager" + service_name = "com.amazonaws.${data.aws_region.current.name}.secretsmanager" vpc_endpoint_type = "Interface" security_group_ids = [ From cbca2322d925d9f5205b7819c8fbf4b15c23402a Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Fri, 19 Jan 2024 23:53:40 +0000 Subject: [PATCH 053/126] Remove requires replace. --- internal/service/m2/deployment.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index f8309c8e61e..d442c99629a 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -17,7 +17,6 @@ import ( "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/types" @@ -68,9 +67,6 @@ func (r *resourceDeployment) Schema(ctx context.Context, req resource.SchemaRequ }, "application_version": schema.Int64Attribute{ Required: true, - PlanModifiers: []planmodifier.Int64{ - int64planmodifier.RequiresReplace(), - }, }, "client_token": schema.StringAttribute{ Optional: true, From c073afb8589a6739a325adaa1a5eaa0bb6963fb5 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 22 Jan 2024 09:18:38 +0000 Subject: [PATCH 054/126] Check if application is running before attempting to stop it so we can succesfully destroy failed applications. --- internal/service/m2/application.go | 17 +++++++++++++++-- internal/service/m2/deployment.go | 4 ++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 8055b62f232..5d69ecdb139 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -560,13 +560,26 @@ func startApplication(ctx context.Context, conn *m2.Client, id string, timeout t return app, nil } -func stopApplication(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) error { +func stopApplicationIfRunning(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) error { + + app, err := findApplicationByID(ctx, conn, id) + if err != nil { + if tfresource.NotFound(err) { + return nil + } + return err + } + + if app.Status != awstypes.ApplicationLifecycleRunning { + return nil + } + stopInput := &m2.StopApplicationInput{ ApplicationId: &id, ForceStop: forceStop, } - _, err := conn.StopApplication(ctx, stopInput) + _, err = conn.StopApplication(ctx, stopInput) if err != nil { return err } diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index d442c99629a..0ac7d7913bb 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -215,7 +215,7 @@ func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequ // Stop the application if it was running if state.Start.ValueBool() { - err := stopApplication(ctx, conn, *applicationId, plan.ForceStop.ValueBool(), updateTimeout) + err := stopApplicationIfRunning(ctx, conn, *applicationId, plan.ForceStop.ValueBool(), updateTimeout) if err != nil { resp.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), err), @@ -286,7 +286,7 @@ func (r *resourceDeployment) Delete(ctx context.Context, req resource.DeleteRequ deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) if state.Start.ValueBool() { - err := stopApplication(ctx, conn, state.ApplicationId.ValueString(), state.ForceStop.ValueBool(), deleteTimeout) + err := stopApplicationIfRunning(ctx, conn, state.ApplicationId.ValueString(), state.ForceStop.ValueBool(), deleteTimeout) if err != nil { resp.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameDeployment, state.ApplicationId.String(), err), From 8e8432d61bff44a01cccc638c8bc8997b6456386 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 22 Jan 2024 19:34:23 +0000 Subject: [PATCH 055/126] Update tests for deployment. --- internal/service/m2/application_test.go | 32 +++++++++++-------- internal/service/m2/deployment.go | 17 ++++++++++ internal/service/m2/deployment_test.go | 16 +++++----- .../test-fixtures/application-definition.json | 4 +-- 4 files changed, 46 insertions(+), 23 deletions(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index f5b57277781..ef431c3299a 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -87,7 +87,7 @@ func TestAccM2Application_update(t *testing.T) { CheckDestroy: testAccCheckApplicationDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccApplicationConfig_versioned(rName, "bluage", "v1"), + Config: testAccApplicationConfig_versioned(rName, "bluage", 1, 2), Check: resource.ComposeTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), resource.TestCheckResourceAttr(resourceName, "name", rName), @@ -96,7 +96,7 @@ func TestAccM2Application_update(t *testing.T) { ), }, { - Config: testAccApplicationConfig_versioned(rName, "bluage", "v2"), + Config: testAccApplicationConfig_versioned(rName, "bluage", 2, 2), Check: resource.ComposeTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), resource.TestCheckResourceAttr(resourceName, "name", rName), @@ -214,26 +214,20 @@ func testAccApplicationPreCheck(ctx context.Context, t *testing.T) { } func testAccApplicationConfig_basic(rName, engineType string) string { - return testAccApplicationConfig_versioned(rName, engineType, "1") + return testAccApplicationConfig_versioned(rName, engineType, 1, 1) } -func testAccApplicationConfig_versioned(rName, engineType, version string) string { - return fmt.Sprintf(` +func testAccApplicationConfig_versioned(rName, engineType string, version int32, versions int32) string { + return acctest.ConfigCompose(fmt.Sprintf(` resource "aws_s3_bucket" "test" { bucket = %[1]q } -resource "aws_s3_object" "test" { - bucket = aws_s3_bucket.test.id - key = "%[3]s/PlanetsDemo-%[3]s.zip" - source = "test-fixtures/PlanetsDemo-v1.zip" -} - resource "aws_m2_application" "test" { name = %[1]q engine_type = %[2]q definition { - content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = %[3]q }) + content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = %[3]d }) } tags = { @@ -242,7 +236,19 @@ resource "aws_m2_application" "test" { depends_on = [aws_s3_object.test] } -`, rName, engineType, version) +`, rName, engineType, version), + testAccApplicationConfig_resources(versions)) +} + +func testAccApplicationConfig_resources(versions int32) string { + return fmt.Sprintf(` +resource "aws_s3_object" "test" { + count = %[1]d + bucket = aws_s3_bucket.test.id + key = "v${count.index+1}/PlanetsDemo-v${count.index+1}.zip" + source = "test-fixtures/PlanetsDemo-v1.zip" +} +`, versions) } func skipIfDemoAppMissing(t *testing.T) { diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index 0ac7d7913bb..1229122e2f5 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -327,6 +327,23 @@ func (r *resourceDeployment) ImportState(ctx context.Context, req resource.Impor resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) } +func (r *resourceDeployment) ModifyPlan(ctx context.Context, req resource.ModifyPlanRequest, resp *resource.ModifyPlanResponse) { + if !req.State.Raw.IsNull() && !req.Plan.Raw.IsNull() { + var plan, state resourceDeploymentData + resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) + resp.Diagnostics.Append(req.State.Get(ctx, &state)...) + if resp.Diagnostics.HasError() { + return + } + + if !plan.ApplicationVersion.Equal(state.ApplicationVersion) { + // if the ApplicationVersion changes, ID becomes unknown + plan.ID = types.StringUnknown() + } + resp.Diagnostics.Append(resp.Plan.Set(ctx, &plan)...) + } +} + func (r *resourceDeploymentData) refreshFromOutput(ctx context.Context, out *m2.GetDeploymentOutput) { combinedId := DeploymentId(*out.ApplicationId, *out.DeploymentId) r.ID = flex.StringValueToFramework(ctx, combinedId) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index 883ba1677b3..4c583074df7 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -45,7 +45,7 @@ func TestAccM2Deployment_basic(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v1", "1", "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 1, 1, "true"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), @@ -82,7 +82,7 @@ func TestAccM2Deployment_nostart(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v1", "1", "false"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 1, 1, "false"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), @@ -119,14 +119,14 @@ func TestAccM2Deployment_update(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v1", "1", "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 1, 1, "true"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), ), }, { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v2", "2", "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 2, 2, "false"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "2"), @@ -163,7 +163,7 @@ func TestAccM2Deployment_disappears(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", "v1", "1", "false"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 1, 1, "false"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceDeployment, resourceName), @@ -239,15 +239,15 @@ func testAccCheckDeploymentExists(ctx context.Context, name string, deployment * } } -func testAccDeploymentConfig_basic(rName, engineType, engineVersion, appVersion, deployVersion, start string) string { +func testAccDeploymentConfig_basic(rName, engineType, engineVersion string, appVersion, deployVersion int32, start string) string { return acctest.ConfigCompose(testAccEnvironmentConfig_basic(rName, engineType, engineVersion), - testAccApplicationConfig_versioned(rName, engineType, appVersion), + testAccApplicationConfig_versioned(rName, engineType, appVersion, 2), testAccDeploymentConfig_secretsManagerEndpoint(rName), fmt.Sprintf(` resource "aws_m2_deployment" "test" { environment_id = aws_m2_environment.test.id application_id = aws_m2_application.test.id - application_version = %[2]q + application_version = %[2]d start = %[3]q depends_on = [aws_vpc_endpoint.secretsmanager] } diff --git a/internal/service/m2/test-fixtures/application-definition.json b/internal/service/m2/test-fixtures/application-definition.json index 65ae9a24359..76f9a75b5b8 100644 --- a/internal/service/m2/test-fixtures/application-definition.json +++ b/internal/service/m2/test-fixtures/application-definition.json @@ -6,7 +6,7 @@ "source-type": "s3", "properties": { "s3-bucket": "${s3_bucket}", - "s3-key-prefix": "${version}" + "s3-key-prefix": "v${version}" } } ], @@ -18,7 +18,7 @@ } ], "ba-application": { - "app-location": "$${s3-source}/PlanetsDemo-${version}.zip" + "app-location": "$${s3-source}/PlanetsDemo-v${version}.zip" } } } \ No newline at end of file From eea83f258c0937ad055e1cfcafa82818f6e7473f Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 22 Jan 2024 20:02:56 +0000 Subject: [PATCH 056/126] fmt --- internal/service/m2/application_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index ef431c3299a..71a949a5514 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -245,7 +245,7 @@ func testAccApplicationConfig_resources(versions int32) string { resource "aws_s3_object" "test" { count = %[1]d bucket = aws_s3_bucket.test.id - key = "v${count.index+1}/PlanetsDemo-v${count.index+1}.zip" + key = "v${count.index + 1}/PlanetsDemo-v${count.index + 1}.zip" source = "test-fixtures/PlanetsDemo-v1.zip" } `, versions) From 167a8a157dc5377c09d10a65d96bb8e26b523cb7 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 22 Jan 2024 20:54:50 +0000 Subject: [PATCH 057/126] lint. --- internal/service/m2/application.go | 1 - 1 file changed, 1 deletion(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 5d69ecdb139..d0f67a85022 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -561,7 +561,6 @@ func startApplication(ctx context.Context, conn *m2.Client, id string, timeout t } func stopApplicationIfRunning(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) error { - app, err := findApplicationByID(ctx, conn, id) if err != nil { if tfresource.NotFound(err) { From 8b27202d55a3ced029e44d43e8cca9ecaca11101 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Tue, 23 Jan 2024 13:50:55 +0000 Subject: [PATCH 058/126] Change engine to 3.7.0 as this version works for starting update of demo app. --- internal/service/m2/deployment_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index 4c583074df7..51217b5ec1c 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -119,14 +119,14 @@ func TestAccM2Deployment_update(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 1, 1, "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.7.0", 1, 1, "true"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), ), }, { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 2, 2, "false"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.7.0", 2, 2, "true"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "2"), From 29ac0696a12a3a9f8241d2ce45389a3a3fd21367 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Tue, 23 Jan 2024 15:14:13 +0000 Subject: [PATCH 059/126] Use 3.9.0 as it's the latest engine and correctly deploys the demo app. --- internal/service/m2/deployment_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index 51217b5ec1c..e06a9fe16ab 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -45,7 +45,7 @@ func TestAccM2Deployment_basic(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 1, 1, "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.9.0", 1, 1, "true"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), @@ -82,7 +82,7 @@ func TestAccM2Deployment_nostart(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 1, 1, "false"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.9.0", 1, 1, "false"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), @@ -119,14 +119,14 @@ func TestAccM2Deployment_update(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.7.0", 1, 1, "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.9.0", 1, 1, "true"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), ), }, { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.7.0", 2, 2, "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.9.0", 2, 2, "true"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "2"), @@ -163,7 +163,7 @@ func TestAccM2Deployment_disappears(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", "3.8.0", 1, 1, "false"), + Config: testAccDeploymentConfig_basic(rName, "bluage", "3.9.0", 1, 1, "false"), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceDeployment, resourceName), From 1d56a5d47125bdf1d55746b59a6fabe8a458bc05 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 24 Jan 2024 14:09:39 +0000 Subject: [PATCH 060/126] Remove generated guidance --- website/docs/r/m2_application.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/m2_application.html.markdown b/website/docs/r/m2_application.html.markdown index 05b32238c9f..b255443c104 100644 --- a/website/docs/r/m2_application.html.markdown +++ b/website/docs/r/m2_application.html.markdown @@ -77,7 +77,7 @@ The following arguments are optional: This resource exports the following attributes in addition to the arguments above: -* `arn` - ARN of the Application. Do not begin the description with "An", "The", "Defines", "Indicates", or "Specifies," as these are verbose. In other words, "Indicates the amount of storage," can be rewritten as "Amount of storage," without losing any information. +* `arn` - ARN of the Application. * `current_version` - Current version of the application deployed. * `tags_all` - A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block). From f66ddd7b392d2210f4f116c8504d3e0de9d3a5e0 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Sat, 27 Jan 2024 21:34:06 +0000 Subject: [PATCH 061/126] Add changelog --- .changelog/35399.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/35399.txt diff --git a/.changelog/35399.txt b/.changelog/35399.txt new file mode 100644 index 00000000000..a6430d00102 --- /dev/null +++ b/.changelog/35399.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +aws_m2_application +``` From 12a7095182d911c92c8f6f814e8ec07c04544f35 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Sat, 27 Jan 2024 21:35:32 +0000 Subject: [PATCH 062/126] Add changelog --- .changelog/35408.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/35408.txt diff --git a/.changelog/35408.txt b/.changelog/35408.txt new file mode 100644 index 00000000000..541d3dde981 --- /dev/null +++ b/.changelog/35408.txt @@ -0,0 +1,3 @@ +```release-note:new-resource +aws_m2_deployment +``` From e1d43e0f5db44565dabdf54fb212475ac794df6e Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Sun, 28 Jan 2024 18:37:37 +0000 Subject: [PATCH 063/126] adding application and deployment --- internal/service/m2/application.go | 340 ++++++++++++++++++++ internal/service/m2/application_test.go | 353 +++++++++++++++++++++ internal/service/m2/deployment.go | 181 +++++++++++ internal/service/m2/deployment_test.go | 210 ++++++++++++ internal/service/m2/environment.go | 2 +- internal/service/m2/find.go | 48 +++ internal/service/m2/service_package_gen.go | 11 + 7 files changed, 1144 insertions(+), 1 deletion(-) create mode 100644 internal/service/m2/application.go create mode 100644 internal/service/m2/application_test.go create mode 100644 internal/service/m2/deployment.go create mode 100644 internal/service/m2/deployment_test.go diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go new file mode 100644 index 00000000000..6e016a39aa7 --- /dev/null +++ b/internal/service/m2/application.go @@ -0,0 +1,340 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + "time" + + "github.com/aws/aws-sdk-go-v2/service/m2" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" + "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/schema/validator" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-log/tflog" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/framework" + "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" + tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// @FrameworkResource(name="M2 Application") +// @Tags(identifierAttribute="arn") +func newResourceApplication(context.Context) (resource.ResourceWithConfigure, error) { + r := &resourceApplication{} + return r, nil +} + +const ( + ResNameApplication = "M2 Application" +) + +type resourceApplication struct { + framework.ResourceWithConfigure +} + +func (r *resourceApplication) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { + response.TypeName = "aws_m2_application" +} + +func (r *resourceApplication) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { + s := schema.Schema{ + Attributes: map[string]schema.Attribute{ + "application_arn": framework.ARNAttributeComputedOnly(), + "application_id": framework.IDAttribute(), + "application_version": schema.Int64Attribute{ + Computed: true, + }, + "client_token": schema.StringAttribute{ + Optional: true, + }, + "description": schema.StringAttribute{ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "engine_type": schema.StringAttribute{ + CustomType: fwtypes.StringEnumType[awstypes.EngineType](), + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "id": framework.IDAttribute(), + "kms_key_id": schema.StringAttribute{ + Optional: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "name": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "role_arn": schema.StringAttribute{ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + }, + + names.AttrTags: tftags.TagsAttribute(), + names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), + }, + Blocks: map[string]schema.Block{ + "definition": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[definition](ctx), + Validators: []validator.List{ + listvalidator.IsRequired(), + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "content": schema.StringAttribute{ + Optional: true, + Validators: []validator.String{ + stringvalidator.ConflictsWith( + path.MatchRelative().AtParent().AtName("s3_location"), + ), + stringvalidator.ExactlyOneOf( + path.MatchRelative().AtParent().AtName("s3_location"), + ), + }, + }, + "s3_location": schema.StringAttribute{ + Optional: true, + Validators: []validator.String{ + stringvalidator.ConflictsWith( + path.MatchRelative().AtParent().AtName("content"), + ), + stringvalidator.ExactlyOneOf( + path.MatchRelative().AtParent().AtName("content"), + ), + }, + }, + }, + }, + }, + }, + } + + if s.Blocks == nil { + s.Blocks = make(map[string]schema.Block) + } + + response.Schema = s +} + +func (r *resourceApplication) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { + conn := r.Meta().M2Client(ctx) + var data resourceApplicationData + + response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) + + if response.Diagnostics.HasError() { + return + } + + input := &m2.CreateApplicationInput{} + + response.Diagnostics.Append(flex.Expand(ctx, data, input)...) + + if response.Diagnostics.HasError() { + return + } + + input.Tags = getTagsIn(ctx) + + output, err := conn.CreateApplication(ctx, input) + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, data.ApplicationId.ValueString(), err), + err.Error(), + ) + return + } + + state := data + state.ID = flex.StringToFramework(ctx, output.ApplicationId) + + response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) + + if response.Diagnostics.HasError() { + return + } + + response.Diagnostics.Append(response.State.Set(ctx, &state)...) +} + +// Read implements resource.ResourceWithConfigure. +func (r *resourceApplication) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { + + conn := r.Meta().M2Client(ctx) + var data resourceApplicationData + response.Diagnostics.Append(request.State.Get(ctx, &data)...) + + if response.Diagnostics.HasError() { + return + } + + out, err := FindAppByID(ctx, conn, data.ApplicationId.ValueString()) + + if tfresource.NotFound(err) { + response.State.RemoveResource(ctx) + return + } + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, data.ApplicationId.ValueString(), err), + err.Error(), + ) + return + } + + response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) + + if response.Diagnostics.HasError() { + return + } + + data.ID = flex.StringToFramework(ctx, out.ApplicationId) + + response.Diagnostics.Append(response.State.Set(ctx, &data)...) + +} + +// Delete implements resource.ResourceWithConfigure. +func (r *resourceApplication) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { + conn := r.Meta().M2Client(ctx) + var state resourceApplicationData + + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + + if response.Diagnostics.HasError() { + return + } + + tflog.Debug(ctx, "deleting M2 Application", map[string]interface{}{ + "id": state.ApplicationId.ValueString(), + }) + + input := &m2.DeleteApplicationInput{ + ApplicationId: flex.StringFromFramework(ctx, state.ApplicationId), + } + + _, err := tfresource.RetryWhenAWSErrCodeEquals(ctx, 5*time.Minute, func() (interface{}, error) { + return conn.DeleteApplication(ctx, input) + }, "DependencyViolation") + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return + } + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameApplication, state.ApplicationId.ValueString(), err), + err.Error(), + ) + return + } + +} + +// Update implements resource.ResourceWithConfigure. +func (r *resourceApplication) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { + conn := r.Meta().M2Client(ctx) + var state, plan resourceApplicationData + + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + + if response.Diagnostics.HasError() { + return + } + + response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + + if response.Diagnostics.HasError() { + return + } + + if applicationHasChanges(ctx, plan, state) { + input := &m2.UpdateApplicationInput{} + response.Diagnostics.Append(flex.Expand(ctx, plan, input)...) + + if response.Diagnostics.HasError() { + return + } + + _, err := conn.UpdateApplication(ctx, input) + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameApplication, state.ApplicationId.ValueString(), err), + err.Error(), + ) + return + } + + response.Diagnostics.Append(response.State.Set(ctx, &plan)...) + + } + + response.Diagnostics.Append(response.State.Set(ctx, &plan)...) + +} +func (r *resourceApplication) ImportState(ctx context.Context, request resource.ImportStateRequest, response *resource.ImportStateResponse) { + resource.ImportStatePassthroughID(ctx, path.Root("application_id"), request, response) +} + +func (r *resourceApplication) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { + r.SetTagsAll(ctx, request, response) +} + +type resourceApplicationData struct { + ApplicationArn types.String `tfsdk:"application_arn"` + ApplicationId types.String `tfsdk:"application_id"` + ApplicationVersion types.Int64 `tfsdk:"application_version"` + ClientToken types.String `tfsdk:"client_token"` + Definition fwtypes.ListNestedObjectValueOf[definition] `tfsdk:"definition"` + Description types.String `tfsdk:"description"` + EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` + ID types.String `tfsdk:"id"` + KmsKeyId types.String `tfsdk:"kms_key_id"` + RoleARN types.String `tfsdk:"role_arn"` + Name types.String `tfsdk:"name"` + Tags types.Map `tfsdk:"tags"` + TagsAll types.Map `tfsdk:"tags_all"` +} + +type definition struct { + Content types.String `tfsdk:"content"` + S3Location types.String `tfsdk:"s3_location"` +} + +func applicationHasChanges(_ context.Context, plan, state resourceApplicationData) bool { + return !plan.EngineType.Equal(state.EngineType) || + !plan.Description.Equal(state.Description) || + !plan.KmsKeyId.Equal(state.KmsKeyId) || + !plan.Name.Equal(state.Name) || + !plan.RoleARN.Equal(state.RoleARN) || + !plan.Definition.Equal(state.Definition) + +} diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go new file mode 100644 index 00000000000..e2b94379330 --- /dev/null +++ b/internal/service/m2/application_test.go @@ -0,0 +1,353 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2_test + +import ( + "context" + "fmt" + "testing" + + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccApplication_basic(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_application.test" + var application awstypes.ApplicationSummary + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_basic(rName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttrSet(resourceName, "application_id"), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccApplication_full(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_application.test" + var application awstypes.ApplicationSummary + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_full(rName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + resource.TestCheckResourceAttrSet(resourceName, "subnet_ids.#"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccApplication_update(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + descriptionOld := "MicroFocus M2 Application" + descriptionNew := "MicroFocus M2 Application Updated" + resourceName := "aws_m2_application.test" + var application awstypes.ApplicationSummary + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_update(rName, descriptionOld), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttr(resourceName, "description", descriptionOld), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccApplicationConfig_update(rName, descriptionNew), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttr(resourceName, "description", descriptionNew), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + ), + }, + }, + }) +} + +func TestAccApplicatioon_tags(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_application.test" + var application awstypes.ApplicationSummary + + tags1 := ` + tags = { + key1 = "value1" + } +` + tags2 := ` + tags = { + key1 = "value1" + key2 = "value2" + } +` + tags3 := ` + tags = { + key2 = "value2" + } +` + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_tags(rName, tags1), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + ), + }, + { + Config: testAccApplicationConfig_tags(rName, tags2), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + { + Config: testAccApplicationConfig_tags(rName, tags3), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + }, + }) +} + +func testAccCheckApplicationExists(ctx context.Context, resourceName string, v *awstypes.ApplicationSummary) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[resourceName] + if !ok { + return fmt.Errorf("not found: %s", resourceName) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("no M2 Application ID is set") + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + out, err := tfm2.FindAppByID(ctx, conn, rs.Primary.ID) + if err != nil { + return fmt.Errorf("retrieving M2 Application (%s): %w", rs.Primary.ID, err) + } + + v = out + + return nil + } +} + +func testAccCheckApplicationDestroy(ctx context.Context) resource.TestCheckFunc { + return func(s *terraform.State) error { + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_m2_application" { + continue + } + + _, err := tfm2.FindAppByID(ctx, conn, rs.Primary.ID) + + if tfresource.NotFound(err) { + continue + } + if err != nil { + return err + } + + return fmt.Errorf("M2 Application (%s) still exists", rs.Primary.ID) + } + + return nil + } +} + +func testAccApplicationConfig_basic(rName string) string { + return fmt.Sprintf(` +resource "aws_s3_bucket" "test" { + bucket = %[1]q + force_destroy = true +} +resource "aws_m2_application" "test" { + definition { + s3_location = "s3://${aws_s3_bucket.test.bucket}/test" + } + engine_type = "microfocus" + name = %[1]q + +} +`, rName) +} + +func testAccApplicationConfig_full(rName string) string { + return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` +resource "aws_m2_environment" "test" { + description = "Test-1" + engine_type = "microfocus" + engine_version = "8.0.10" + high_availability_config { + desired_capacity = 1 + } + instance_type = "M2.m5.large" + kms_key_id = aws_kms_key.test.arn + name = %[1]q + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + tags = { + Name = %[1]q + } +} + +resource "aws_vpc" "test" { + cidr_block = "10.0.0.0/16" + enable_dns_support = true + enable_dns_hostnames = true + tags = { + Name = %[1]q + } +} + +resource "aws_subnet" "test" { + count = 2 + vpc_id = aws_vpc.test.id + availability_zone = data.aws_availability_zones.available.names[count.index] + cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) + tags = { + Name = %[1]q + } +} + +resource "aws_kms_key" "test" { + description = "tf-test-cmk-kms-key-id" +} + +resource "aws_security_group" "test" { + name = %[1]q + description = %[1]q + vpc_id = aws_vpc.test.id + + ingress { + from_port = -1 + to_port = -1 + protocol = "icmp" + cidr_blocks = ["0.0.0.0/0"] + } +} +`, rName)) +} + +func testAccApplicationConfig_update(rName string, desc string) string { + return fmt.Sprintf(` +resource "aws_m2_environment" "test" { + engine_type = "microfocus" + description = %[2]q + instance_type = "M2.m5.large" + name = %[1]q +} +`, rName, desc) +} + +func testAccApplicationConfig_tags(rName, tags string) string { + return fmt.Sprintf(` +resource "aws_m2_environment" "test" { + engine_type = "microfocus" + instance_type = "M2.m5.large" + name = %[1]q + +%[2]s +} +`, rName, tags) +} diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go new file mode 100644 index 00000000000..936ee9f3e16 --- /dev/null +++ b/internal/service/m2/deployment.go @@ -0,0 +1,181 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/service/m2" + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/resource" + "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-provider-aws/internal/create" + "github.com/hashicorp/terraform-provider-aws/internal/framework" + "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +// @FrameworkResource(name="M2 Deployment") +func newResourceDeployment(context.Context) (resource.ResourceWithConfigure, error) { + r := &resourceDeployment{} + + return r, nil +} + +const ( + ResNameDeployment = "M2 Deployment" +) + +type resourceDeployment struct { + framework.ResourceWithConfigure +} + +func (r *resourceDeployment) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { + response.TypeName = "aws_m2_deployment" +} + +func (r *resourceDeployment) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { + s := schema.Schema{ + Attributes: map[string]schema.Attribute{ + "application_id": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "application_version": schema.Int64Attribute{ + Required: true, + PlanModifiers: []planmodifier.Int64{ + int64planmodifier.RequiresReplace(), + }, + }, + "client_token": schema.StringAttribute{ + Optional: true, + }, + "environment_id": schema.StringAttribute{ + Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "deployment_id": framework.IDAttribute(), + "id": framework.IDAttribute(), + }, + } + + if s.Blocks == nil { + s.Blocks = make(map[string]schema.Block) + } + + response.Schema = s +} + +func (r *resourceDeployment) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { + conn := r.Meta().M2Client(ctx) + var data resourceDeploymentData + + response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) + + if response.Diagnostics.HasError() { + return + } + + input := &m2.CreateDeploymentInput{} + + response.Diagnostics.Append(flex.Expand(ctx, data, input)...) + + if response.Diagnostics.HasError() { + return + } + + input.ApplicationId = flex.StringFromFramework(ctx, data.ApplicationId) + input.ApplicationVersion = flex.Int32FromFramework(ctx, data.ApplicationVersion) + input.EnvironmentId = flex.StringFromFramework(ctx, data.EnvironmentId) + + output, err := conn.CreateDeployment(ctx, input) + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameDeployment, data.EnvironmentId.ValueString(), err), + err.Error(), + ) + return + } + + state := data + state.ID = flex.StringToFramework(ctx, output.DeploymentId) + + response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) + + if response.Diagnostics.HasError() { + return + } + + response.Diagnostics.Append(response.State.Set(ctx, &state)...) +} + +// Read implements resource.ResourceWithConfigure. +func (r *resourceDeployment) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { + + conn := r.Meta().M2Client(ctx) + var data resourceDeploymentData + response.Diagnostics.Append(request.State.Get(ctx, &data)...) + + if response.Diagnostics.HasError() { + return + } + + out, err := FindDeploymentByID(ctx, conn, data.DeploymentId.ValueString()) + + if tfresource.NotFound(err) { + response.State.RemoveResource(ctx) + return + } + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameDeployment, data.DeploymentId.ValueString(), err), + err.Error(), + ) + return + } + + response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) + + if response.Diagnostics.HasError() { + return + } + + data.ID = flex.StringToFramework(ctx, out.DeploymentId) + + response.Diagnostics.Append(response.State.Set(ctx, &data)...) + +} + +// Delete implements resource.ResourceWithConfigure. +func (r *resourceDeployment) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { + // Noop. +} + +// Update implements resource.ResourceWithConfigure. +func (r *resourceDeployment) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { + // Noop. +} +func (r *resourceDeployment) ImportState(ctx context.Context, request resource.ImportStateRequest, response *resource.ImportStateResponse) { + resource.ImportStatePassthroughID(ctx, path.Root("deployment_id"), request, response) +} + +type resourceDeploymentData struct { + ApplicationId types.String `tfsdk:"application_id"` + ApplicationVersion types.Int64 `tfsdk:"application_version"` + ClientToken types.String `tfsdk:"client_token"` + EnvironmentId types.String `tfsdk:"environment_id"` + DeploymentId types.String `tfsdk:"deployment_id"` + ID types.String `tfsdk:"id"` +} diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go new file mode 100644 index 00000000000..9a7e92eac74 --- /dev/null +++ b/internal/service/m2/deployment_test.go @@ -0,0 +1,210 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2_test + +import ( + "context" + "fmt" + "testing" + + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "github.com/hashicorp/terraform-plugin-testing/helper/resource" + "github.com/hashicorp/terraform-plugin-testing/terraform" + "github.com/hashicorp/terraform-provider-aws/internal/acctest" + "github.com/hashicorp/terraform-provider-aws/internal/conns" + tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" + "github.com/hashicorp/terraform-provider-aws/names" +) + +func TestAccDeployment_basic(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_deployment.test" + var deployment awstypes.DeploymentSummary + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckDeploymentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccDeploymentConfig_basic(rName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckDeploymentExists(ctx, resourceName, &deployment), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func TestAccDeployment_full(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_deployment.test" + var deployment awstypes.DeploymentSummary + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckDeploymentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccDeploymentConfig_full(rName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckDeploymentExists(ctx, resourceName, &deployment), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + resource.TestCheckResourceAttrSet(resourceName, "subnet_ids.#"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckDeploymentExists(ctx context.Context, resourceName string, v *awstypes.DeploymentSummary) resource.TestCheckFunc { + return func(s *terraform.State) error { + rs, ok := s.RootModule().Resources[resourceName] + if !ok { + return fmt.Errorf("not found: %s", resourceName) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("no M2 Deployment ID is set") + } + + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + out, err := tfm2.FindDeploymentByID(ctx, conn, rs.Primary.ID) + if err != nil { + return fmt.Errorf("retrieving M2 Deployment (%s): %w", rs.Primary.ID, err) + } + + v = out + + return nil + } +} + +func testAccCheckDeploymentDestroy(ctx context.Context) resource.TestCheckFunc { + return func(s *terraform.State) error { + conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) + + for _, rs := range s.RootModule().Resources { + if rs.Type != "aws_m2_deployment" { + continue + } + + _, err := tfm2.FindDeploymentByID(ctx, conn, rs.Primary.ID) + + if tfresource.NotFound(err) { + continue + } + if err != nil { + return err + } + + return fmt.Errorf("M2 Deployment (%s) still exists", rs.Primary.ID) + } + + return nil + } +} + +func testAccDeploymentConfig_basic(rName string) string { + return fmt.Sprintf(` +resource "aws_m2_deployment" "test" { + engine_type = "microfocus" + instance_type = "M2.m5.large" + name = %[1]q +} +`, rName) +} + +func testAccDeploymentConfig_full(rName string) string { + return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` +resource "aws_m2_environment" "test" { + description = "Test-1" + engine_type = "microfocus" + engine_version = "8.0.10" + high_availability_config { + desired_capacity = 1 + } + instance_type = "M2.m5.large" + kms_key_id = aws_kms_key.test.arn + name = %[1]q + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + tags = { + Name = %[1]q + } +} + +resource "aws_vpc" "test" { + cidr_block = "10.0.0.0/16" + enable_dns_support = true + enable_dns_hostnames = true + tags = { + Name = %[1]q + } +} + +resource "aws_subnet" "test" { + count = 2 + vpc_id = aws_vpc.test.id + availability_zone = data.aws_availability_zones.available.names[count.index] + cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) + tags = { + Name = %[1]q + } +} + +resource "aws_kms_key" "test" { + description = "tf-test-cmk-kms-key-id" +} + +resource "aws_security_group" "test" { + name = %[1]q + description = %[1]q + vpc_id = aws_vpc.test.id + + ingress { + from_port = -1 + to_port = -1 + protocol = "icmp" + cidr_blocks = ["0.0.0.0/0"] + } +} +`, rName)) +} diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 35dfe47fa19..8c3e3571fa5 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -498,7 +498,7 @@ func environmentHasChanges(_ context.Context, plan, state resourceEnvironmentDat !plan.EngineVersion.Equal(state.EngineVersion) || !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) || !plan.InstanceType.Equal(state.InstanceType) || - !plan.KmsKeyId.Equal(state.InstanceType) || + !plan.KmsKeyId.Equal(state.KmsKeyId) || !plan.Name.Equal(state.Name) || !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) || !plan.PubliclyAccessible.Equal(state.PubliclyAccessible) || diff --git a/internal/service/m2/find.go b/internal/service/m2/find.go index b5edaec6269..cad045ecb4e 100644 --- a/internal/service/m2/find.go +++ b/internal/service/m2/find.go @@ -37,3 +37,51 @@ func FindEnvByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.Env return &awstypes.EnvironmentSummary{}, nil } + +func FindDeploymentByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.DeploymentSummary, error) { + in := &m2.GetDeploymentInput{ + DeploymentId: aws.String(id), + } + out, err := conn.GetDeployment(ctx, in) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + + if err != nil { + return nil, err + } + + if out == nil || out.DeploymentId == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return &awstypes.DeploymentSummary{}, nil +} + +func FindAppByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.ApplicationSummary, error) { + in := &m2.GetApplicationInput{ + ApplicationId: aws.String(id), + } + out, err := conn.GetApplication(ctx, in) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + + if err != nil { + return nil, err + } + + if out == nil || out.ApplicationId == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return &awstypes.ApplicationSummary{}, nil +} diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index 5e1d74d8967..6d264286692 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -20,6 +20,17 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.ServicePackageFrameworkResource { return []*types.ServicePackageFrameworkResource{ + { + Factory: newResourceApplication, + Name: "M2 Application", + Tags: &types.ServicePackageResourceTags{ + IdentifierAttribute: "arn", + }, + }, + { + Factory: newResourceDeployment, + Name: "M2 Deployment", + }, { Factory: newResourceEnvironment, Name: "M2 Environment", From c756f30a71dbbce1711b8128f39273e60bceab19 Mon Sep 17 00:00:00 2001 From: EC2 Default User Date: Mon, 5 Feb 2024 20:51:24 +0000 Subject: [PATCH 064/126] Dont Auto Flex --- internal/service/m2/application.go | 58 ++++++++++++++++++------- internal/service/m2/application_test.go | 54 ++++++++++++++++++++++- 2 files changed, 95 insertions(+), 17 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 6e016a39aa7..b45777111aa 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -143,26 +143,47 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem func (r *resourceApplication) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { conn := r.Meta().M2Client(ctx) - var data resourceApplicationData + var data resourceApplicationData response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) - if response.Diagnostics.HasError() { return } - input := &m2.CreateApplicationInput{} - - response.Diagnostics.Append(flex.Expand(ctx, data, input)...) - + definition, diags := data.Definition.ToPtr(ctx) + response.Diagnostics.Append(diags...) if response.Diagnostics.HasError() { return } + //content := &awstypes.DefinitionMemberContent{} + s3location := &awstypes.DefinitionMemberS3Location{} + //response.Diagnostics.Append(flex.Expand(ctx, definition, &content.Value)...) + response.Diagnostics.Append(flex.Expand(ctx, definition, s3location.Value)...) + if response.Diagnostics.HasError() { + return + } + print(*&s3location.Value) + input := &m2.CreateApplicationInput{ + Definition: s3location, + EngineType: data.EngineType.ValueEnum(), + Name: data.Name.ValueStringPointer(), + Tags: getTagsIn(ctx), + } - input.Tags = getTagsIn(ctx) + // if len(content.Value) > 0 { + // input.Definition = content + // } else if len(s3location.Value) > 0 { + // input.Definition = s3location + // } + //response.Diagnostics.Append(flex.Expand(ctx, data, input)...) - output, err := conn.CreateApplication(ctx, input) + //if response.Diagnostics.HasError() { + // return + //} + + //input.Tags = getTagsIn(ctx) + output, err := conn.CreateApplication(ctx, input) if err != nil { response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, data.ApplicationId.ValueString(), err), @@ -173,12 +194,14 @@ func (r *resourceApplication) Create(ctx context.Context, request resource.Creat state := data state.ID = flex.StringToFramework(ctx, output.ApplicationId) + state.ApplicationArn = flex.StringToFramework(ctx, output.ApplicationArn) + state.ApplicationVersion = flex.Int32ToFramework(ctx, output.ApplicationVersion) - response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) + //response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) - if response.Diagnostics.HasError() { - return - } + //if response.Diagnostics.HasError() { + // return + //} response.Diagnostics.Append(response.State.Set(ctx, &state)...) } @@ -209,13 +232,16 @@ func (r *resourceApplication) Read(ctx context.Context, request resource.ReadReq return } - response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) + //response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) - if response.Diagnostics.HasError() { - return - } + //if response.Diagnostics.HasError() { + // return + //} data.ID = flex.StringToFramework(ctx, out.ApplicationId) + data.ApplicationArn = flex.StringToFramework(ctx, out.ApplicationArn) + data.ApplicationVersion = flex.Int32ToFramework(ctx, out.ApplicationVersion) + //I Might have to flaatten more fields response.Diagnostics.Append(response.State.Set(ctx, &data)...) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index e2b94379330..066135be67a 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -261,9 +261,61 @@ resource "aws_s3_bucket" "test" { bucket = %[1]q force_destroy = true } +resource "aws_s3_object" "test" { + bucket = aws_s3_bucket.test.id + key = "test.json" + content_type = "application/json" + content = < Date: Sun, 11 Feb 2024 21:23:12 +0000 Subject: [PATCH 065/126] Try Auto Flex --- internal/service/m2/application.go | 151 ++++++++++++++++-------- internal/service/m2/application_test.go | 19 +-- internal/service/m2/find.go | 27 ++++- internal/service/m2/wait.go | 83 +++++++++++++ 4 files changed, 221 insertions(+), 59 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index b45777111aa..e3674de4f2f 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -9,8 +9,10 @@ import ( "github.com/aws/aws-sdk-go-v2/service/m2" awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" + "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -33,6 +35,9 @@ import ( // @Tags(identifierAttribute="arn") func newResourceApplication(context.Context) (resource.ResourceWithConfigure, error) { r := &resourceApplication{} + r.SetDefaultCreateTimeout(40 * time.Minute) + r.SetDefaultUpdateTimeout(80 * time.Minute) + r.SetDefaultDeleteTimeout(40 * time.Minute) return r, nil } @@ -42,6 +47,7 @@ const ( type resourceApplication struct { framework.ResourceWithConfigure + framework.WithTimeouts } func (r *resourceApplication) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { @@ -51,8 +57,8 @@ func (r *resourceApplication) Metadata(_ context.Context, request resource.Metad func (r *resourceApplication) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { s := schema.Schema{ Attributes: map[string]schema.Attribute{ - "application_arn": framework.ARNAttributeComputedOnly(), - "application_id": framework.IDAttribute(), + "arn": framework.ARNAttributeComputedOnly(), + "application_id": framework.IDAttribute(), "application_version": schema.Int64Attribute{ Computed: true, }, @@ -61,18 +67,23 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem }, "description": schema.StringAttribute{ Optional: true, - Computed: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, }, "engine_type": schema.StringAttribute{ - CustomType: fwtypes.StringEnumType[awstypes.EngineType](), - Required: true, + Required: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, }, + // "engine_type": schema.StringAttribute{ + // CustomType: fwtypes.StringEnumType[awstypes.EngineType](), + // Required: true, + // PlanModifiers: []planmodifier.String{ + // stringplanmodifier.RequiresReplace(), + // }, + // }, "id": framework.IDAttribute(), "kms_key_id": schema.StringAttribute{ Optional: true, @@ -88,7 +99,6 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem }, "role_arn": schema.StringAttribute{ Optional: true, - Computed: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.UseStateForUnknown(), }, @@ -116,6 +126,9 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem path.MatchRelative().AtParent().AtName("s3_location"), ), }, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, }, "s3_location": schema.StringAttribute{ Optional: true, @@ -127,6 +140,9 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem path.MatchRelative().AtParent().AtName("content"), ), }, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, }, }, }, @@ -137,6 +153,11 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem if s.Blocks == nil { s.Blocks = make(map[string]schema.Block) } + s.Blocks["timeouts"] = timeouts.Block(ctx, timeouts.Opts{ + Create: true, + Update: true, + Delete: true, + }) response.Schema = s } @@ -155,34 +176,20 @@ func (r *resourceApplication) Create(ctx context.Context, request resource.Creat if response.Diagnostics.HasError() { return } - //content := &awstypes.DefinitionMemberContent{} - s3location := &awstypes.DefinitionMemberS3Location{} - //response.Diagnostics.Append(flex.Expand(ctx, definition, &content.Value)...) - response.Diagnostics.Append(flex.Expand(ctx, definition, s3location.Value)...) - if response.Diagnostics.HasError() { - return + + engineType := awstypes.EngineType(*flex.StringFromFramework(ctx, data.EngineType)) + s3location := &awstypes.DefinitionMemberS3Location{ + Value: *flex.StringFromFramework(ctx, definition.S3Location), } - print(*&s3location.Value) + input := &m2.CreateApplicationInput{ Definition: s3location, - EngineType: data.EngineType.ValueEnum(), + //EngineType: data.EngineType.ValueEnum(), + EngineType: engineType, Name: data.Name.ValueStringPointer(), Tags: getTagsIn(ctx), } - // if len(content.Value) > 0 { - // input.Definition = content - // } else if len(s3location.Value) > 0 { - // input.Definition = s3location - // } - //response.Diagnostics.Append(flex.Expand(ctx, data, input)...) - - //if response.Diagnostics.HasError() { - // return - //} - - //input.Tags = getTagsIn(ctx) - output, err := conn.CreateApplication(ctx, input) if err != nil { response.Diagnostics.AddError( @@ -194,14 +201,24 @@ func (r *resourceApplication) Create(ctx context.Context, request resource.Creat state := data state.ID = flex.StringToFramework(ctx, output.ApplicationId) - state.ApplicationArn = flex.StringToFramework(ctx, output.ApplicationArn) + state.ApplicationId = flex.StringToFramework(ctx, output.ApplicationId) + state.ARN = flex.StringToFramework(ctx, output.ApplicationArn) state.ApplicationVersion = flex.Int32ToFramework(ctx, output.ApplicationVersion) + createTimeout := r.CreateTimeout(ctx, data.Timeouts) + out, err := waitApplicationCreated(ctx, conn, state.ID.ValueString(), createTimeout) - //response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, data.Name.ValueString(), err), + err.Error(), + ) + return + } + response.Diagnostics.Append(flex.Flatten(ctx, out, &state)...) - //if response.Diagnostics.HasError() { - // return - //} + if response.Diagnostics.HasError() { + return + } response.Diagnostics.Append(response.State.Set(ctx, &state)...) } @@ -232,16 +249,30 @@ func (r *resourceApplication) Read(ctx context.Context, request resource.ReadReq return } - //response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) + //version, err := findApplicationVersion(ctx, conn, data.ID.ValueString(), *out.LatestVersion.ApplicationVersion) + + if tfresource.NotFound(err) { + response.State.RemoveResource(ctx) + return + } + + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, data.ApplicationId.ValueString(), err), + err.Error(), + ) + return + } - //if response.Diagnostics.HasError() { - // return - //} + response.Diagnostics.Append(data.refreshFromOutput(ctx, out)...) + // data.Definition = fwtypes.NewListNestedObjectValueOfPtr(ctx, &definition{ + // Content: flex.StringValueToFramework(ctx, *version.DefinitionContent), + // S3Location: types.StringNull(), + // }) - data.ID = flex.StringToFramework(ctx, out.ApplicationId) - data.ApplicationArn = flex.StringToFramework(ctx, out.ApplicationArn) - data.ApplicationVersion = flex.Int32ToFramework(ctx, out.ApplicationVersion) - //I Might have to flaatten more fields + if response.Diagnostics.HasError() { + return + } response.Diagnostics.Append(response.State.Set(ctx, &data)...) @@ -282,6 +313,16 @@ func (r *resourceApplication) Delete(ctx context.Context, request resource.Delet return } + deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) + _, err = waitApplicationDeleted(ctx, conn, state.ID.ValueString(), deleteTimeout) + if err != nil { + response.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameApplication, state.ID.String(), err), + err.Error(), + ) + return + } + } // Update implements resource.ResourceWithConfigure. @@ -335,19 +376,21 @@ func (r *resourceApplication) ModifyPlan(ctx context.Context, request resource.M } type resourceApplicationData struct { - ApplicationArn types.String `tfsdk:"application_arn"` + ARN types.String `tfsdk:"arn"` ApplicationId types.String `tfsdk:"application_id"` ApplicationVersion types.Int64 `tfsdk:"application_version"` ClientToken types.String `tfsdk:"client_token"` Definition fwtypes.ListNestedObjectValueOf[definition] `tfsdk:"definition"` Description types.String `tfsdk:"description"` - EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` - ID types.String `tfsdk:"id"` - KmsKeyId types.String `tfsdk:"kms_key_id"` - RoleARN types.String `tfsdk:"role_arn"` - Name types.String `tfsdk:"name"` - Tags types.Map `tfsdk:"tags"` - TagsAll types.Map `tfsdk:"tags_all"` + //EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` + EngineType types.String `tfsdk:"engine_type"` + ID types.String `tfsdk:"id"` + KmsKeyId types.String `tfsdk:"kms_key_id"` + RoleARN types.String `tfsdk:"role_arn"` + Name types.String `tfsdk:"name"` + Tags types.Map `tfsdk:"tags"` + TagsAll types.Map `tfsdk:"tags_all"` + Timeouts timeouts.Value `tfsdk:"timeouts"` } type definition struct { @@ -364,3 +407,15 @@ func applicationHasChanges(_ context.Context, plan, state resourceApplicationDat !plan.Definition.Equal(state.Definition) } + +func (r *resourceApplicationData) refreshFromOutput(ctx context.Context, app *m2.GetApplicationOutput) diag.Diagnostics { + var diags diag.Diagnostics + + //diags.Append(flex.Flatten(ctx, app, r)...) + r.ARN = flex.StringToFramework(ctx, app.ApplicationArn) + r.ID = flex.StringToFramework(ctx, app.ApplicationId) + r.ApplicationVersion = flex.Int32ToFramework(ctx, app.LatestVersion.ApplicationVersion) + r.Name = flex.StringToFramework(ctx, app.Name) + r.EngineType = flex.StringToFramework(ctx, (*string)(&app.EngineType)) + return diags +} diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 066135be67a..80e1119ceca 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" + "github.com/aws/aws-sdk-go-v2/service/m2" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -27,7 +27,7 @@ func TestAccApplication_basic(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" - var application awstypes.ApplicationSummary + var application m2.GetApplicationOutput resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -47,9 +47,10 @@ func TestAccApplication_basic(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"definition.#", "definition.0.%", "definition.0.s3_location"}, }, }, }) @@ -63,7 +64,7 @@ func TestAccApplication_full(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" - var application awstypes.ApplicationSummary + var application m2.GetApplicationOutput resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -103,7 +104,7 @@ func TestAccApplication_update(t *testing.T) { descriptionOld := "MicroFocus M2 Application" descriptionNew := "MicroFocus M2 Application Updated" resourceName := "aws_m2_application.test" - var application awstypes.ApplicationSummary + var application m2.GetApplicationOutput resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -152,7 +153,7 @@ func TestAccApplicatioon_tags(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" - var application awstypes.ApplicationSummary + var application m2.GetApplicationOutput tags1 := ` tags = { @@ -207,7 +208,7 @@ func TestAccApplicatioon_tags(t *testing.T) { }) } -func testAccCheckApplicationExists(ctx context.Context, resourceName string, v *awstypes.ApplicationSummary) resource.TestCheckFunc { +func testAccCheckApplicationExists(ctx context.Context, resourceName string, v *m2.GetApplicationOutput) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[resourceName] if !ok { diff --git a/internal/service/m2/find.go b/internal/service/m2/find.go index cad045ecb4e..007ac4dc31b 100644 --- a/internal/service/m2/find.go +++ b/internal/service/m2/find.go @@ -62,7 +62,7 @@ func FindDeploymentByID(ctx context.Context, conn *m2.Client, id string) (*awsty return &awstypes.DeploymentSummary{}, nil } -func FindAppByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.ApplicationSummary, error) { +func FindAppByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetApplicationOutput, error) { in := &m2.GetApplicationInput{ ApplicationId: aws.String(id), } @@ -83,5 +83,28 @@ func FindAppByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.App return nil, tfresource.NewEmptyResultError(in) } - return &awstypes.ApplicationSummary{}, nil + return out, nil +} + +func findApplicationVersion(ctx context.Context, conn *m2.Client, id string, version int32) (*m2.GetApplicationVersionOutput, error) { + in := &m2.GetApplicationVersionInput{ + ApplicationId: aws.String(id), + ApplicationVersion: aws.Int32(version), + } + out, err := conn.GetApplicationVersion(ctx, in) + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: in, + } + } + if err != nil { + return nil, err + } + + if out == nil || out.ApplicationVersion == nil { + return nil, tfresource.NewEmptyResultError(in) + } + + return out, nil } diff --git a/internal/service/m2/wait.go b/internal/service/m2/wait.go index 8921048dc30..d21054d3985 100644 --- a/internal/service/m2/wait.go +++ b/internal/service/m2/wait.go @@ -11,6 +11,7 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-provider-aws/internal/enum" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" ) // waitM2 Environment available @@ -56,3 +57,85 @@ func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, tim return nil, err } + +func waitApplicationCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleCreating), + Target: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleAvailable), + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { + return out, err + } + + return nil, err +} + +func waitApplicationUpdated(ctx context.Context, conn *m2.Client, id string, version int32, timeout time.Duration) (*m2.GetApplicationVersionOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationVersionLifecycleCreating), + Target: enum.Slice(awstypes.ApplicationVersionLifecycleAvailable), + Refresh: statusApplicationVersion(ctx, conn, id, version), + Timeout: timeout, + NotFoundChecks: 20, + ContinuousTargetOccurence: 2, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationVersionOutput); ok { + return out, err + } + + return nil, err +} + +func waitApplicationDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleDeleting, awstypes.ApplicationLifecycleDeletingFromEnvironment), + Target: []string{}, + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, + } + + outputRaw, err := stateConf.WaitForStateContext(ctx) + if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { + return out, err + } + + return nil, err +} + +func statusApplication(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + out, err := FindAppByID(ctx, conn, id) + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err + } + + return out, string(out.Status), nil + } +} + +func statusApplicationVersion(ctx context.Context, conn *m2.Client, id string, version int32) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + out, err := findApplicationVersion(ctx, conn, id, version) + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err + } + + return out, string(out.Status), nil + } +} From f155ba3862c021f5b58c5a824aefc8c82f0e65f2 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 19 Feb 2024 12:55:20 +0000 Subject: [PATCH 066/126] Use autoflex where possible here --- internal/service/m2/deployment.go | 50 +++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index 1229122e2f5..19e7fa3e568 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -7,6 +7,7 @@ import ( "context" "errors" "fmt" + "github.com/hashicorp/terraform-plugin-framework/diag" "strings" "time" @@ -104,7 +105,11 @@ func (r *resourceDeployment) Create(ctx context.Context, req resource.CreateRequ return } - in := plan.createDeploymentInput(ctx) + in, diags := plan.createDeploymentInput(ctx) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return + } out, err := conn.CreateDeployment(ctx, in) if err != nil { @@ -147,7 +152,8 @@ func (r *resourceDeployment) Create(ctx context.Context, req resource.CreateRequ } } - plan.refreshFromOutput(ctx, deployment) + outDiags := plan.refreshFromOutput(ctx, deployment) + resp.Diagnostics.Append(outDiags...) resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) } @@ -172,7 +178,11 @@ func (r *resourceDeployment) Read(ctx context.Context, req resource.ReadRequest, ) return } - state.refreshFromOutput(ctx, out) + diags := state.refreshFromOutput(ctx, out) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return + } applicationId, _, err := DeploymentParseResourceId(state.ID.ValueString()) if err != nil { @@ -226,7 +236,11 @@ func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequ } // Create the updated deployment - in := plan.createDeploymentInput(ctx) + in, diags := plan.createDeploymentInput(ctx) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return + } out, err := conn.CreateDeployment(ctx, in) if err != nil { @@ -255,7 +269,11 @@ func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequ ) return } - plan.refreshFromOutput(ctx, deployment) + outDiags := plan.refreshFromOutput(ctx, deployment) + resp.Diagnostics.Append(outDiags...) + if resp.Diagnostics.HasError() { + return + } } // Start the application if plan says to @@ -344,24 +362,24 @@ func (r *resourceDeployment) ModifyPlan(ctx context.Context, req resource.Modify } } -func (r *resourceDeploymentData) refreshFromOutput(ctx context.Context, out *m2.GetDeploymentOutput) { +func (r *resourceDeploymentData) refreshFromOutput(ctx context.Context, out *m2.GetDeploymentOutput) diag.Diagnostics { + diags := diag.Diagnostics{} + + diags.Append(flex.Flatten(ctx, out, r)...) combinedId := DeploymentId(*out.ApplicationId, *out.DeploymentId) r.ID = flex.StringValueToFramework(ctx, combinedId) - r.ApplicationId = flex.StringToFramework(ctx, out.ApplicationId) - r.ApplicationVersion = flex.Int32ToFramework(ctx, out.ApplicationVersion) - r.EnvironmentId = flex.StringToFramework(ctx, out.EnvironmentId) + return diags } func (r *resourceDeploymentData) refreshFromApplicationOutput(app *m2.GetApplicationOutput) { r.Start = types.BoolValue(app.Status == awstypes.ApplicationLifecycleRunning) } -func (r *resourceDeploymentData) createDeploymentInput(ctx context.Context) *m2.CreateDeploymentInput { - in := &m2.CreateDeploymentInput{ - ApplicationId: r.ApplicationId.ValueStringPointer(), - ApplicationVersion: flex.Int32FromFramework(ctx, r.ApplicationVersion), - EnvironmentId: r.EnvironmentId.ValueStringPointer(), - } +func (r *resourceDeploymentData) createDeploymentInput(ctx context.Context) (*m2.CreateDeploymentInput, diag.Diagnostics) { + diags := diag.Diagnostics{} + + in := m2.CreateDeploymentInput{} + diags.Append(flex.Expand(ctx, r, &in)...) var clientToken string if r.ClientToken.IsNull() || r.ClientToken.IsUnknown() { @@ -372,7 +390,7 @@ func (r *resourceDeploymentData) createDeploymentInput(ctx context.Context) *m2. in.ClientToken = aws.String(clientToken) - return in + return &in, diags } func waitDeploymentCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetDeploymentOutput, error) { From ad5158dfde5443811b909bc4f65f4eb5449abbbc Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Mon, 19 Feb 2024 13:29:50 +0000 Subject: [PATCH 067/126] import formatting --- internal/service/m2/deployment.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index 19e7fa3e568..a134ed041f7 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -7,7 +7,6 @@ import ( "context" "errors" "fmt" - "github.com/hashicorp/terraform-plugin-framework/diag" "strings" "time" @@ -15,6 +14,7 @@ import ( "github.com/aws/aws-sdk-go-v2/service/m2" awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" + "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" From d96182643d90a641b1a0c0a38bab52dcef0c5946 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 12:55:22 +0000 Subject: [PATCH 068/126] tweaks on review comments, add more tests --- internal/service/m2/environment.go | 140 +++++++---- internal/service/m2/environment_test.go | 246 ++++++++++++++++++++ website/docs/r/m2_environment.html.markdown | 12 +- 3 files changed, 343 insertions(+), 55 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 9fab1ea4bbf..93197065335 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -19,8 +19,10 @@ import ( "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/setplanmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/schema/validator" "github.com/hashicorp/terraform-plugin-framework/types" @@ -75,8 +77,11 @@ func (r *resourceEnvironment) Schema(ctx context.Context, req resource.SchemaReq }, "description": schema.StringAttribute{ Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, }, - "id": framework.IDAttribute(), "engine_type": schema.StringAttribute{ Required: true, PlanModifiers: []planmodifier.String{ @@ -86,10 +91,15 @@ func (r *resourceEnvironment) Schema(ctx context.Context, req resource.SchemaReq "engine_version": schema.StringAttribute{ Optional: true, Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, }, + "environment_id": framework.IDAttribute(), "force_update": schema.BoolAttribute{ Optional: true, }, + "id": framework.IDAttribute(), "instance_type": schema.StringAttribute{ Required: true, Validators: []validator.String{}, @@ -112,25 +122,58 @@ func (r *resourceEnvironment) Schema(ctx context.Context, req resource.SchemaReq "preferred_maintenance_window": schema.StringAttribute{ Optional: true, Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, + }, + "publicly_accessible": schema.BoolAttribute{ + Optional: true, + Computed: true, + PlanModifiers: []planmodifier.Bool{ + boolplanmodifier.UseStateForUnknown(), + }, }, "security_groups": schema.SetAttribute{ - Required: true, + Optional: true, + Computed: true, ElementType: types.StringType, Validators: []validator.Set{ setvalidator.SizeAtLeast(1), }, + PlanModifiers: []planmodifier.Set{ + setplanmodifier.UseStateForUnknown(), + setplanmodifier.RequiresReplace(), + }, }, "subnet_ids": schema.SetAttribute{ - Required: true, + Optional: true, + Computed: true, ElementType: types.StringType, Validators: []validator.Set{ - setvalidator.SizeAtLeast(1), + setvalidator.SizeAtLeast(2), + }, + PlanModifiers: []planmodifier.Set{ + setplanmodifier.UseStateForUnknown(), + setplanmodifier.RequiresReplace(), }, }, names.AttrTags: tftags.TagsAttribute(), names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), }, Blocks: map[string]schema.Block{ + "high_availability_config": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[haData](ctx), + Validators: []validator.List{ + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "desired_capacity": schema.Int64Attribute{ + Required: true, + }, + }, + }, + }, "storage_configuration": schema.ListNestedBlock{ Validators: []validator.List{ listvalidator.SizeAtMost(1), @@ -173,19 +216,6 @@ func (r *resourceEnvironment) Schema(ctx context.Context, req resource.SchemaReq }, }, }, - "high_availability_config": schema.ListNestedBlock{ - CustomType: fwtypes.NewListNestedObjectTypeOf[haData](ctx), - Validators: []validator.List{ - listvalidator.SizeAtMost(1), - }, - NestedObject: schema.NestedBlockObject{ - Attributes: map[string]schema.Attribute{ - "desired_capacity": schema.Int64Attribute{ - Required: true, - }, - }, - }, - }, "timeouts": timeouts.Block(ctx, timeouts.Opts{ Create: true, Update: true, @@ -220,7 +250,7 @@ func (r *resourceEnvironment) Create(ctx context.Context, req resource.CreateReq in.Tags = getTagsIn(ctx) if !plan.StorageConfiguration.IsNull() { - var sc []storageData + var sc []storageConfiguration resp.Diagnostics.Append(plan.StorageConfiguration.ElementsAs(ctx, &sc, false)...) storageConfig, d := expandStorageConfigurations(ctx, sc) resp.Diagnostics.Append(d...) @@ -299,39 +329,11 @@ func (r *resourceEnvironment) Update(ctx context.Context, req resource.UpdateReq return } - in := &m2.UpdateEnvironmentInput{ - EnvironmentId: flex.StringFromFramework(ctx, plan.ID), - } - - if r.hasChangesForMaintenance(plan, state) { - in.ApplyDuringMaintenanceWindow = true - in.EngineVersion = flex.StringFromFramework(ctx, plan.EngineVersion) - } else if r.hasChanges(plan, state) { - if !plan.EngineVersion.Equal(state.EngineVersion) { - in.EngineVersion = flex.StringFromFramework(ctx, plan.EngineVersion) - } - if !plan.InstanceType.Equal(state.InstanceType) { - in.InstanceType = flex.StringFromFramework(ctx, plan.InstanceType) - } - if !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) { - in.PreferredMaintenanceWindow = flex.StringFromFramework(ctx, plan.PreferredMaintenanceWindow) - } - - if !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) { - v, d := plan.HighAvailabilityConfig.ToSlice(ctx) - resp.Diagnostics.Append(d...) - if len(v) > 0 { - in.DesiredCapacity = flex.Int32FromFramework(ctx, v[0].DesiredCapacity) - } - } - } else { + in, updateRequired := r.updateEnvironmentInput(ctx, plan, state, resp) + if !updateRequired { return } - if !plan.ForceUpdate.IsNull() { - in.ForceUpdate = plan.ForceUpdate.ValueBool() - } - out, err := conn.UpdateEnvironment(ctx, in) if err != nil { resp.Diagnostics.AddError( @@ -369,6 +371,42 @@ func (r *resourceEnvironment) Update(ctx context.Context, req resource.UpdateReq resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) } +func (r *resourceEnvironment) updateEnvironmentInput(ctx context.Context, plan, state resourceEnvironmentData, resp *resource.UpdateResponse) (*m2.UpdateEnvironmentInput, bool) { + in := &m2.UpdateEnvironmentInput{ + EnvironmentId: flex.StringFromFramework(ctx, plan.ID), + } + + if r.hasChangesForMaintenance(plan, state) { + in.ApplyDuringMaintenanceWindow = true + in.EngineVersion = flex.StringFromFramework(ctx, plan.EngineVersion) + } else if r.hasChanges(plan, state) { + if !plan.EngineVersion.Equal(state.EngineVersion) { + in.EngineVersion = flex.StringFromFramework(ctx, plan.EngineVersion) + } + if !plan.InstanceType.Equal(state.InstanceType) { + in.InstanceType = flex.StringFromFramework(ctx, plan.InstanceType) + } + if !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) { + in.PreferredMaintenanceWindow = flex.StringFromFramework(ctx, plan.PreferredMaintenanceWindow) + } + + if !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) { + v, d := plan.HighAvailabilityConfig.ToSlice(ctx) + resp.Diagnostics.Append(d...) + if len(v) > 0 { + in.DesiredCapacity = flex.Int32FromFramework(ctx, v[0].DesiredCapacity) + } + } + } else { + return nil, false + } + + if !plan.ForceUpdate.IsNull() { + in.ForceUpdate = plan.ForceUpdate.ValueBool() + } + return in, true +} + func (r *resourceEnvironment) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { conn := r.Meta().M2Client(ctx) @@ -521,12 +559,14 @@ type resourceEnvironmentData struct { ID types.String `tfsdk:"id"` EngineType types.String `tfsdk:"engine_type"` EngineVersion types.String `tfsdk:"engine_version"` + EnvironmentId types.String `tfsdk:"environment_id"` ForceUpdate types.Bool `tfsdk:"force_update"` HighAvailabilityConfig fwtypes.ListNestedObjectValueOf[haData] `tfsdk:"high_availability_config"` InstanceType types.String `tfsdk:"instance_type"` KmsKeyId types.String `tfsdk:"kms_key_id"` LoadBalancerArn types.String `tfsdk:"load_balancer_arn"` PreferredMaintenanceWindow types.String `tfsdk:"preferred_maintenance_window"` + PubliclyAccessible types.Bool `tfsdk:"publicly_accessible"` SecurityGroupIds types.Set `tfsdk:"security_groups"` StorageConfiguration types.List `tfsdk:"storage_configuration"` SubnetIds types.Set `tfsdk:"subnet_ids"` @@ -536,7 +576,7 @@ type resourceEnvironmentData struct { Timeouts timeouts.Value `tfsdk:"timeouts"` } -type storageData struct { +type storageConfiguration struct { EFS types.List `tfsdk:"efs"` FSX types.List `tfsdk:"fsx"` } @@ -573,7 +613,7 @@ func (r *resourceEnvironment) ModifyPlan(ctx context.Context, req resource.Modif r.SetTagsAll(ctx, req, resp) } -func expandStorageConfigurations(ctx context.Context, storageConfigurations []storageData) ([]awstypes.StorageConfiguration, diag.Diagnostics) { +func expandStorageConfigurations(ctx context.Context, storageConfigurations []storageConfiguration) ([]awstypes.StorageConfiguration, diag.Diagnostics) { storage := []awstypes.StorageConfiguration{} var diags diag.Diagnostics diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index c89dde99d91..0a447637a6f 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -76,6 +76,44 @@ func TestAccM2Environment_basic(t *testing.T) { }) } +func TestAccM2Environment_full(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + var environment m2.GetEnvironmentOutput + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_full(rName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckResourceAttrSet(resourceName, "name"), + resource.TestCheckResourceAttrSet(resourceName, "engine_type"), + resource.TestCheckResourceAttrSet(resourceName, "instance_type"), + resource.TestCheckResourceAttrSet(resourceName, "subnet_ids.#"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func TestAccM2Environment_update(t *testing.T) { ctx := acctest.Context(t) // TIP: This is a long-running test guard for tests that run longer than @@ -227,7 +265,51 @@ func TestAccM2Environment_efs(t *testing.T) { }, }) } +func TestAccM2Environment_fsx(t *testing.T) { + ctx := acctest.Context(t) + // TIP: This is a long-running test guard for tests that run longer than + // 300s (5 min) generally. + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + var environment m2.GetEnvironmentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_fsxComplete(rName, testEngineType, testEngineVersion), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "description", rName), + resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), + resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "1"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.0.fsx.0.mount_point", "/m2/mount/example"), + resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} func TestAccM2Environment_disappears(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { @@ -260,6 +342,69 @@ func TestAccM2Environment_disappears(t *testing.T) { }) } +func TestAccM2Environment_tags(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + var environment m2.GetEnvironmentOutput + + tags1 := ` + tags = { + key1 = "value1" + } +` + tags2 := ` + tags = { + key1 = "value1" + key2 = "value2" + } +` + tags3 := ` + tags = { + key2 = "value2" + } +` + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_tags(rName, tags1), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + ), + }, + { + Config: testAccEnvironmentConfig_tags(rName, tags2), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + { + Config: testAccEnvironmentConfig_tags(rName, tags3), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + }, + }) +} + func testAccCheckEnvironmentDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) @@ -416,6 +561,29 @@ resource "aws_m2_environment" "test" { `, rName, engineType, engineVersion)) } +func testAccEnvironmentConfig_fsxComplete(rName, engineType, engineVersion string) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), + testAccEnvironmentConfig_fsx(rName), + fmt.Sprintf(` +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + + storage_configuration { + fsx { + file_system_id = aws_fsx_lustre_file_system.test.id + mount_point = "/m2/mount/example" + } + } +} +`, rName, engineType, engineVersion)) +} + func testAccEnvironmentConfig_base(rName string) string { return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptInDefaultExclude(), fmt.Sprintf(` @@ -493,3 +661,81 @@ resource "aws_efs_mount_target" "test" { } `, rName) } + +func testAccEnvironmentConfig_fsx(rName string) string { + return fmt.Sprintf(` +resource "aws_fsx_lustre_file_system" "test" { + storage_capacity = 1200 + subnet_ids = [aws_subnet.test[0].id] + security_group_ids = [aws_security_group.test.id] + tags = { + Name = %[1]q + } +} +`, rName) +} + +func testAccEnvironmentConfig_tags(rName, tags string) string { + return fmt.Sprintf(` +resource "aws_m2_environment" "test" { + engine_type = "microfocus" + instance_type = "M2.m5.large" + name = %[1]q +%[2]s +} +`, rName, tags) +} + +func testAccEnvironmentConfig_full(rName string) string { + return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` +resource "aws_m2_environment" "test" { + description = "Test-1" + engine_type = "microfocus" + engine_version = "8.0.10" + high_availability_config { + desired_capacity = 1 + } + instance_type = "M2.m5.large" + kms_key_id = aws_kms_key.test.arn + name = %[1]q + security_groups = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + tags = { + Name = %[1]q + } +} +resource "aws_vpc" "test" { + cidr_block = "10.0.0.0/16" + enable_dns_support = true + enable_dns_hostnames = true + tags = { + Name = %[1]q + } +} +resource "aws_subnet" "test" { + count = 2 + vpc_id = aws_vpc.test.id + availability_zone = data.aws_availability_zones.available.names[count.index] + cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) + tags = { + Name = %[1]q + } +} +resource "aws_kms_key" "test" { + description = "tf-test-cmk-kms-key-id" +} + +resource "aws_security_group" "test" { + name = %[1]q + description = %[1]q + vpc_id = aws_vpc.test.id + + ingress { + from_port = -1 + to_port = -1 + protocol = "icmp" + cidr_blocks = ["0.0.0.0/0"] + } +} +`, rName)) +} diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index 24505518c77..2aa09fec865 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -19,7 +19,7 @@ resource "aws_m2_environment" "test" { engine_type = "bluage" instance_type = "M2.m5.large" security_groups = ["sg-01234567890abcdef"] - subnet_ids = ["subnet-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef", "subnet-01234567890abcdea"] } ``` @@ -47,7 +47,7 @@ resource "aws_m2_environment" "test" { engine_type = "bluage" instance_type = "M2.m5.large" security_groups = ["sg-01234567890abcdef"] - subnet_ids = ["subnet-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef", "subnet-01234567890abcdea"] storage_configuration { efs { file_system_id = "fs-01234567890abcdef" @@ -65,7 +65,7 @@ resource "aws_m2_environment" "test" { engine_type = "bluage" instance_type = "M2.m5.large" security_groups = ["sg-01234567890abcdef"] - subnet_ids = ["subnet-01234567890abcdef"] + subnet_ids = ["subnet-01234567890abcdef", "subnet-01234567890abcdea"] storage_configuration { fsx { @@ -84,8 +84,6 @@ The following arguments are required: * `name` - (Required) Name of the runtime environment. Must be unique within the account. * `engine_type` - (Required) Engine type must be `microfocus | bluage`. * `instance_type` - (Required) M2 Instance Type. -* `security_groups` - (Required) List of security group ids. -* `subnet_ids` - (Required) List of subnet ids to deploy environment to. The following arguments are optional: @@ -94,6 +92,8 @@ The following arguments are optional: * `kms_key_id` - (Optional) KMS Key to use for the Environment. * `preferred_maintenance_window` - (Optional) Configures the maintenance window that you want for the runtime environment. The maintenance window must have the format `ddd:hh24:mi-ddd:hh24:mi` and must be less than 24 hours. If not provided a random value will be used. * `publicly_accessible` - (Optional) Allow applications deployed to this environment to be publicly accessible. +* `security_groups` - (Optional) List of security group ids. +* `subnet_ids` - (Optional) List of subnet ids to deploy environment to. * `tags` - (Optional) Key-value tags for the place index. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. ### storage_configuration @@ -129,6 +129,8 @@ The following arguments are required: This resource exports the following attributes in addition to the arguments above: * `arn` - ARN of the Environment. +* `id` - The id of the Environment. +* `environment_id` - The id of the Environment. * `load_balancer_arn` - ARN of the load balancer created by the Environment. ## Timeouts From 15da14a279c61faa196dbee3fd2feee35ea6422f Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 16:39:47 +0000 Subject: [PATCH 069/126] Additional testing and related changes --- internal/service/m2/application.go | 20 ++- internal/service/m2/application_test.go | 189 +++++++++++++++++++- website/docs/r/m2_application.html.markdown | 1 + 3 files changed, 207 insertions(+), 3 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index c87e457b26e..2d92dc23a25 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -64,7 +64,8 @@ func (r *resourceApplication) Metadata(_ context.Context, req resource.MetadataR func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { resp.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ - "arn": framework.ARNAttributeComputedOnly(), + "application_id": framework.IDAttribute(), + "arn": framework.ARNAttributeComputedOnly(), "current_version": schema.Int64Attribute{ Computed: true, }, @@ -73,8 +74,11 @@ func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaReq }, "description": schema.StringAttribute{ Optional: true, + Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, }, - "id": framework.IDAttribute(), "engine_type": schema.StringAttribute{ Required: true, PlanModifiers: []planmodifier.String{ @@ -84,6 +88,7 @@ func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaReq stringvalidator.OneOf(enum.Values[awstypes.EngineType]()...), }, }, + "id": framework.IDAttribute(), "kms_key_id": schema.StringAttribute{ Optional: true, PlanModifiers: []planmodifier.String{ @@ -229,6 +234,16 @@ func (r *resourceApplication) Read(ctx context.Context, req resource.ReadRequest ) return } + // Tags are on GetApplicationOutput, but nil + tags, err := listTags(ctx, conn, *out.ApplicationArn) + if err != nil { + resp.Diagnostics.AddError( + create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), + err.Error(), + ) + } + + setTagsOut(ctx, tags.Map()) resp.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) resp.Diagnostics.Append(state.refreshFromVersion(ctx, version)...) @@ -523,6 +538,7 @@ func flattenApplicationDefinitionFromVersion(ctx context.Context, version *m2.Ge } type resourceApplicationData struct { + ApplicationId types.String `tfsdk:"application_id"` ARN types.String `tfsdk:"arn"` ClientToken types.String `tfsdk:"client_token"` CurrentVersion types.Int64 `tfsdk:"current_version"` diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index f5b57277781..f2937507e44 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -64,6 +64,41 @@ func TestAccM2Application_basic(t *testing.T) { }) } +func TestAccM2Application_full(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_application.test" + var application m2.GetApplicationOutput + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_full(rName), + Check: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "name", rName), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + func TestAccM2Application_update(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { @@ -147,6 +182,69 @@ func TestAccM2Application_disappears(t *testing.T) { }) } +func TestAccApplicationM2_tags(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_application.test" + var application m2.GetApplicationOutput + + tags1 := ` + tags = { + key1 = "value1" + } +` + tags2 := ` + tags = { + key1 = "value1" + key2 = "value2" + } +` + tags3 := ` + tags = { + key2 = "value2" + } +` + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccApplicationConfig_tags(rName, tags1), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + ), + }, + { + Config: testAccApplicationConfig_tags(rName, tags2), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + { + Config: testAccApplicationConfig_tags(rName, tags3), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + }, + }) +} + func testAccCheckApplicationDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) @@ -231,7 +329,7 @@ resource "aws_s3_object" "test" { resource "aws_m2_application" "test" { name = %[1]q - engine_type = %[2]q + engine_type = %[2]q definition { content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = %[3]q }) } @@ -250,3 +348,92 @@ func skipIfDemoAppMissing(t *testing.T) { t.Skip("Download test-fixtures/PlanetsDemo-v1.zip from: https://docs.aws.amazon.com/m2/latest/userguide/tutorial-runtime-ba.html") } } + +func testAccApplicationConfig_full(rName string) string { + return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` +resource "aws_s3_bucket" "test" { + bucket = %[1]q +} + +resource "aws_s3_object" "test" { + bucket = aws_s3_bucket.test.id + key = "v1/PlanetsDemo-v1.zip" + source = "test-fixtures/PlanetsDemo-v1.zip" +} + +resource "aws_m2_application" "test" { + name = %[1]q + engine_type = "bluage" + kms_key_id = aws_kms_key.test.arn + role_arn = aws_iam_role.test.arn + definition { + content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = "v1" }) + } + depends_on = [aws_s3_object.test, aws_iam_role_policy.test] +} + +resource "aws_kms_key" "test" { + description = "tf-test-cmk-kms-key-id" +} + +resource "aws_iam_role" "test" { + name = %[1]q + assume_role_policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = "sts:AssumeRole" + Effect = "Allow" + Sid = "" + Principal = { + Service = "m2.amazonaws.com" + } + }, + ] + }) +} + +resource "aws_iam_role_policy" "test" { + name = "m2_permissions" + role = aws_iam_role.test.id + policy = jsonencode({ + Version = "2012-10-17" + Statement = [ + { + Action = [ + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue", + "kms:Decrypt", + ] + Effect = "Allow" + Resource = "*" + }, + ] + }) +} +`, rName)) +} + +func testAccApplicationConfig_tags(rName, tags string) string { + return fmt.Sprintf(` +resource "aws_s3_bucket" "test" { + bucket = %[1]q +} + +resource "aws_s3_object" "test" { + bucket = aws_s3_bucket.test.id + key = "v1/PlanetsDemo-v1.zip" + source = "test-fixtures/PlanetsDemo-v1.zip" +} + +resource "aws_m2_application" "test" { + name = %[1]q + engine_type = "bluage" + definition { + content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = "v1" }) + } +%[2]s + depends_on = [aws_s3_object.test] +} +`, rName, tags) +} diff --git a/website/docs/r/m2_application.html.markdown b/website/docs/r/m2_application.html.markdown index b255443c104..e97f4d6eac4 100644 --- a/website/docs/r/m2_application.html.markdown +++ b/website/docs/r/m2_application.html.markdown @@ -77,6 +77,7 @@ The following arguments are optional: This resource exports the following attributes in addition to the arguments above: +* `application_id` - Id of the Application. * `arn` - ARN of the Application. * `current_version` - Current version of the application deployed. * `tags_all` - A map of tags assigned to the resource, including those inherited from the provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block). From b2705d105379c35a7a7a7e7519a9f304da5c551d Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 16:57:05 +0000 Subject: [PATCH 070/126] Revert changes to description, it doesn't need replacement nor is it computed --- internal/service/m2/application.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 2d92dc23a25..221f9603391 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -74,10 +74,6 @@ func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaReq }, "description": schema.StringAttribute{ Optional: true, - Computed: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, }, "engine_type": schema.StringAttribute{ Required: true, From 622d24582c548caa2d287493ded38e26d8d43c2b Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 17:40:47 +0000 Subject: [PATCH 071/126] fmt test tf --- internal/service/m2/environment_test.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 0a447637a6f..55f24e7878a 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -689,11 +689,11 @@ resource "aws_m2_environment" "test" { func testAccEnvironmentConfig_full(rName string) string { return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` resource "aws_m2_environment" "test" { - description = "Test-1" - engine_type = "microfocus" + description = "Test-1" + engine_type = "microfocus" engine_version = "8.0.10" high_availability_config { - desired_capacity = 1 + desired_capacity = 1 } instance_type = "M2.m5.large" kms_key_id = aws_kms_key.test.arn @@ -705,7 +705,7 @@ resource "aws_m2_environment" "test" { } } resource "aws_vpc" "test" { - cidr_block = "10.0.0.0/16" + cidr_block = "10.0.0.0/16" enable_dns_support = true enable_dns_hostnames = true tags = { @@ -718,7 +718,7 @@ resource "aws_subnet" "test" { availability_zone = data.aws_availability_zones.available.names[count.index] cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) tags = { - Name = %[1]q + Name = %[1]q } } resource "aws_kms_key" "test" { @@ -734,7 +734,7 @@ resource "aws_security_group" "test" { from_port = -1 to_port = -1 protocol = "icmp" - cidr_blocks = ["0.0.0.0/0"] + cidr_blocks = ["0.0.0.0/0"] } } `, rName)) From fe52719765907e79939fae7ccd7971136478b84c Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 17:44:26 +0000 Subject: [PATCH 072/126] Replace EndpointID with ServiceID --- internal/service/m2/environment_test.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 55f24e7878a..03695f75d1e 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -44,10 +44,10 @@ func TestAccM2Environment_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + acctest.PreCheckPartitionHasService(t, names.M2ServiceID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ @@ -129,10 +129,10 @@ func TestAccM2Environment_update(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + acctest.PreCheckPartitionHasService(t, names.M2ServiceID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ @@ -188,10 +188,10 @@ func TestAccM2Environment_highAvailability(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + acctest.PreCheckPartitionHasService(t, names.M2ServiceID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ @@ -235,10 +235,10 @@ func TestAccM2Environment_efs(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + acctest.PreCheckPartitionHasService(t, names.M2ServiceID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ @@ -280,10 +280,10 @@ func TestAccM2Environment_fsx(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + acctest.PreCheckPartitionHasService(t, names.M2ServiceID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ From dc9bebd4a4370db179caa600a6c1dff5e180828d Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 17:48:02 +0000 Subject: [PATCH 073/126] Whitespace --- internal/service/m2/environment_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 03695f75d1e..f33542daae9 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -724,12 +724,12 @@ resource "aws_subnet" "test" { resource "aws_kms_key" "test" { description = "tf-test-cmk-kms-key-id" } - + resource "aws_security_group" "test" { name = %[1]q description = %[1]q vpc_id = aws_vpc.test.id - + ingress { from_port = -1 to_port = -1 From c2b28cc26b0c3c8772e799ae212a580399e5a1be Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 17:53:56 +0000 Subject: [PATCH 074/126] Fix test tf formatting. --- internal/service/m2/application_test.go | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index f2937507e44..a8a7e9029ec 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -40,10 +40,10 @@ func TestAccM2Application_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + acctest.PreCheckPartitionHasService(t, names.M2ServiceID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckApplicationDestroy(ctx), Steps: []resource.TestStep{ @@ -114,10 +114,10 @@ func TestAccM2Application_update(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + acctest.PreCheckPartitionHasService(t, names.M2ServiceID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckApplicationDestroy(ctx), Steps: []resource.TestStep{ @@ -163,10 +163,10 @@ func TestAccM2Application_disappears(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + acctest.PreCheckPartitionHasService(t, names.M2ServiceID) testAccApplicationPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckApplicationDestroy(ctx), Steps: []resource.TestStep{ @@ -394,19 +394,19 @@ resource "aws_iam_role" "test" { } resource "aws_iam_role_policy" "test" { - name = "m2_permissions" - role = aws_iam_role.test.id + name = "m2_permissions" + role = aws_iam_role.test.id policy = jsonencode({ - Version = "2012-10-17" + Version = "2012-10-17" Statement = [ { - Action = [ - "secretsmanager:DescribeSecret", - "secretsmanager:GetSecretValue", - "kms:Decrypt", - ] - Effect = "Allow" - Resource = "*" + Action = [ + "secretsmanager:DescribeSecret", + "secretsmanager:GetSecretValue", + "kms:Decrypt", + ] + Effect = "Allow" + Resource = "*" }, ] }) From 90a8da3a4e3328983bc2941dc639a872c4e88d85 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 17:55:29 +0000 Subject: [PATCH 075/126] Use correct constant --- internal/service/m2/application_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index a8a7e9029ec..17e924f7b03 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -40,7 +40,7 @@ func TestAccM2Application_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2ServiceID) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), @@ -114,7 +114,7 @@ func TestAccM2Application_update(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2ServiceID) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), @@ -163,7 +163,7 @@ func TestAccM2Application_disappears(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2ServiceID) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccApplicationPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), From c1fa4a20403cf9a3ef0ca256028f20c7a91cd867 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 17:56:03 +0000 Subject: [PATCH 076/126] Use correct constant --- internal/service/m2/environment_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index f33542daae9..506d3273b47 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -44,7 +44,7 @@ func TestAccM2Environment_basic(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2ServiceID) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), @@ -129,7 +129,7 @@ func TestAccM2Environment_update(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2ServiceID) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), @@ -188,7 +188,7 @@ func TestAccM2Environment_highAvailability(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2ServiceID) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), @@ -235,7 +235,7 @@ func TestAccM2Environment_efs(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2ServiceID) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), @@ -280,7 +280,7 @@ func TestAccM2Environment_fsx(t *testing.T) { resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2ServiceID) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), From 9ac06448e0dedc57cf6f1e1de2478898ae2213a7 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 18:24:50 +0000 Subject: [PATCH 077/126] whitespace --- internal/service/m2/application_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 17e924f7b03..2ff3e5d0f95 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -394,10 +394,10 @@ resource "aws_iam_role" "test" { } resource "aws_iam_role_policy" "test" { - name = "m2_permissions" - role = aws_iam_role.test.id + name = "m2_permissions" + role = aws_iam_role.test.id policy = jsonencode({ - Version = "2012-10-17" + Version = "2012-10-17" Statement = [ { Action = [ From 1199696ec99b5bea0c5e0b70142c429a5367ed5c Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 18:29:18 +0000 Subject: [PATCH 078/126] Use correct constant --- internal/service/m2/deployment_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index e06a9fe16ab..c90bce27c91 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -40,7 +40,7 @@ func TestAccM2Deployment_basic(t *testing.T) { acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ @@ -77,7 +77,7 @@ func TestAccM2Deployment_nostart(t *testing.T) { acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ @@ -114,7 +114,7 @@ func TestAccM2Deployment_update(t *testing.T) { acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ @@ -158,7 +158,7 @@ func TestAccM2Deployment_disappears(t *testing.T) { acctest.PreCheckPartitionHasService(t, names.M2EndpointID) testAccPreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2EndpointID), + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ From c4e14186c9548296ae1fbdcf8625db123fec2c48 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 18:43:42 +0000 Subject: [PATCH 079/126] Remove format string --- internal/service/m2/application_test.go | 5 ----- 1 file changed, 5 deletions(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 2ff3e5d0f95..5e62f206f6a 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -333,11 +333,6 @@ resource "aws_m2_application" "test" { definition { content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = %[3]q }) } - - tags = { - engine = %[2]q - } - depends_on = [aws_s3_object.test] } `, rName, engineType, version) From f58cbaca22cb04d7d623d9adc8f297950570df73 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 18:59:46 +0000 Subject: [PATCH 080/126] Remove format string --- internal/service/m2/application_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 5e62f206f6a..f23a04d908d 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -329,7 +329,7 @@ resource "aws_s3_object" "test" { resource "aws_m2_application" "test" { name = %[1]q - engine_type = %[2]q + engine_type = "%[2]s" definition { content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = %[3]q }) } From dad573b7c87d459e4e6a50827234af2017590362 Mon Sep 17 00:00:00 2001 From: Andrew Tulloch Date: Wed, 21 Feb 2024 19:20:08 +0000 Subject: [PATCH 081/126] Fix prefixes for tests --- internal/service/m2/application_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index f23a04d908d..1841fa73a03 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -182,7 +182,7 @@ func TestAccM2Application_disappears(t *testing.T) { }) } -func TestAccApplicationM2_tags(t *testing.T) { +func TestAccM2Application_tags(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { t.Skip("skipping long-running test in short mode") From 2d6529f0eef09be5c2a7f70fc892d10a311204ed Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 11:15:35 -0400 Subject: [PATCH 082/126] Revert "Try Auto Flex" This reverts commit 2468c593445efeb14fa93bf207510dddcd031ed1. --- internal/service/m2/application.go | 151 ++++++++---------------- internal/service/m2/application_test.go | 19 ++- internal/service/m2/find.go | 27 +---- internal/service/m2/wait.go | 83 ------------- 4 files changed, 59 insertions(+), 221 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index e3674de4f2f..b45777111aa 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -9,10 +9,8 @@ import ( "github.com/aws/aws-sdk-go-v2/service/m2" awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" - "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -35,9 +33,6 @@ import ( // @Tags(identifierAttribute="arn") func newResourceApplication(context.Context) (resource.ResourceWithConfigure, error) { r := &resourceApplication{} - r.SetDefaultCreateTimeout(40 * time.Minute) - r.SetDefaultUpdateTimeout(80 * time.Minute) - r.SetDefaultDeleteTimeout(40 * time.Minute) return r, nil } @@ -47,7 +42,6 @@ const ( type resourceApplication struct { framework.ResourceWithConfigure - framework.WithTimeouts } func (r *resourceApplication) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { @@ -57,8 +51,8 @@ func (r *resourceApplication) Metadata(_ context.Context, request resource.Metad func (r *resourceApplication) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { s := schema.Schema{ Attributes: map[string]schema.Attribute{ - "arn": framework.ARNAttributeComputedOnly(), - "application_id": framework.IDAttribute(), + "application_arn": framework.ARNAttributeComputedOnly(), + "application_id": framework.IDAttribute(), "application_version": schema.Int64Attribute{ Computed: true, }, @@ -67,23 +61,18 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem }, "description": schema.StringAttribute{ Optional: true, + Computed: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, }, "engine_type": schema.StringAttribute{ - Required: true, + CustomType: fwtypes.StringEnumType[awstypes.EngineType](), + Required: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, }, - // "engine_type": schema.StringAttribute{ - // CustomType: fwtypes.StringEnumType[awstypes.EngineType](), - // Required: true, - // PlanModifiers: []planmodifier.String{ - // stringplanmodifier.RequiresReplace(), - // }, - // }, "id": framework.IDAttribute(), "kms_key_id": schema.StringAttribute{ Optional: true, @@ -99,6 +88,7 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem }, "role_arn": schema.StringAttribute{ Optional: true, + Computed: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.UseStateForUnknown(), }, @@ -126,9 +116,6 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem path.MatchRelative().AtParent().AtName("s3_location"), ), }, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), - }, }, "s3_location": schema.StringAttribute{ Optional: true, @@ -140,9 +127,6 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem path.MatchRelative().AtParent().AtName("content"), ), }, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), - }, }, }, }, @@ -153,11 +137,6 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem if s.Blocks == nil { s.Blocks = make(map[string]schema.Block) } - s.Blocks["timeouts"] = timeouts.Block(ctx, timeouts.Opts{ - Create: true, - Update: true, - Delete: true, - }) response.Schema = s } @@ -176,20 +155,34 @@ func (r *resourceApplication) Create(ctx context.Context, request resource.Creat if response.Diagnostics.HasError() { return } - - engineType := awstypes.EngineType(*flex.StringFromFramework(ctx, data.EngineType)) - s3location := &awstypes.DefinitionMemberS3Location{ - Value: *flex.StringFromFramework(ctx, definition.S3Location), + //content := &awstypes.DefinitionMemberContent{} + s3location := &awstypes.DefinitionMemberS3Location{} + //response.Diagnostics.Append(flex.Expand(ctx, definition, &content.Value)...) + response.Diagnostics.Append(flex.Expand(ctx, definition, s3location.Value)...) + if response.Diagnostics.HasError() { + return } - + print(*&s3location.Value) input := &m2.CreateApplicationInput{ Definition: s3location, - //EngineType: data.EngineType.ValueEnum(), - EngineType: engineType, + EngineType: data.EngineType.ValueEnum(), Name: data.Name.ValueStringPointer(), Tags: getTagsIn(ctx), } + // if len(content.Value) > 0 { + // input.Definition = content + // } else if len(s3location.Value) > 0 { + // input.Definition = s3location + // } + //response.Diagnostics.Append(flex.Expand(ctx, data, input)...) + + //if response.Diagnostics.HasError() { + // return + //} + + //input.Tags = getTagsIn(ctx) + output, err := conn.CreateApplication(ctx, input) if err != nil { response.Diagnostics.AddError( @@ -201,24 +194,14 @@ func (r *resourceApplication) Create(ctx context.Context, request resource.Creat state := data state.ID = flex.StringToFramework(ctx, output.ApplicationId) - state.ApplicationId = flex.StringToFramework(ctx, output.ApplicationId) - state.ARN = flex.StringToFramework(ctx, output.ApplicationArn) + state.ApplicationArn = flex.StringToFramework(ctx, output.ApplicationArn) state.ApplicationVersion = flex.Int32ToFramework(ctx, output.ApplicationVersion) - createTimeout := r.CreateTimeout(ctx, data.Timeouts) - out, err := waitApplicationCreated(ctx, conn, state.ID.ValueString(), createTimeout) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, data.Name.ValueString(), err), - err.Error(), - ) - return - } - response.Diagnostics.Append(flex.Flatten(ctx, out, &state)...) + //response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) - if response.Diagnostics.HasError() { - return - } + //if response.Diagnostics.HasError() { + // return + //} response.Diagnostics.Append(response.State.Set(ctx, &state)...) } @@ -249,30 +232,16 @@ func (r *resourceApplication) Read(ctx context.Context, request resource.ReadReq return } - //version, err := findApplicationVersion(ctx, conn, data.ID.ValueString(), *out.LatestVersion.ApplicationVersion) - - if tfresource.NotFound(err) { - response.State.RemoveResource(ctx) - return - } - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, data.ApplicationId.ValueString(), err), - err.Error(), - ) - return - } + //response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) - response.Diagnostics.Append(data.refreshFromOutput(ctx, out)...) - // data.Definition = fwtypes.NewListNestedObjectValueOfPtr(ctx, &definition{ - // Content: flex.StringValueToFramework(ctx, *version.DefinitionContent), - // S3Location: types.StringNull(), - // }) + //if response.Diagnostics.HasError() { + // return + //} - if response.Diagnostics.HasError() { - return - } + data.ID = flex.StringToFramework(ctx, out.ApplicationId) + data.ApplicationArn = flex.StringToFramework(ctx, out.ApplicationArn) + data.ApplicationVersion = flex.Int32ToFramework(ctx, out.ApplicationVersion) + //I Might have to flaatten more fields response.Diagnostics.Append(response.State.Set(ctx, &data)...) @@ -313,16 +282,6 @@ func (r *resourceApplication) Delete(ctx context.Context, request resource.Delet return } - deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) - _, err = waitApplicationDeleted(ctx, conn, state.ID.ValueString(), deleteTimeout) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameApplication, state.ID.String(), err), - err.Error(), - ) - return - } - } // Update implements resource.ResourceWithConfigure. @@ -376,21 +335,19 @@ func (r *resourceApplication) ModifyPlan(ctx context.Context, request resource.M } type resourceApplicationData struct { - ARN types.String `tfsdk:"arn"` + ApplicationArn types.String `tfsdk:"application_arn"` ApplicationId types.String `tfsdk:"application_id"` ApplicationVersion types.Int64 `tfsdk:"application_version"` ClientToken types.String `tfsdk:"client_token"` Definition fwtypes.ListNestedObjectValueOf[definition] `tfsdk:"definition"` Description types.String `tfsdk:"description"` - //EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` - EngineType types.String `tfsdk:"engine_type"` - ID types.String `tfsdk:"id"` - KmsKeyId types.String `tfsdk:"kms_key_id"` - RoleARN types.String `tfsdk:"role_arn"` - Name types.String `tfsdk:"name"` - Tags types.Map `tfsdk:"tags"` - TagsAll types.Map `tfsdk:"tags_all"` - Timeouts timeouts.Value `tfsdk:"timeouts"` + EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` + ID types.String `tfsdk:"id"` + KmsKeyId types.String `tfsdk:"kms_key_id"` + RoleARN types.String `tfsdk:"role_arn"` + Name types.String `tfsdk:"name"` + Tags types.Map `tfsdk:"tags"` + TagsAll types.Map `tfsdk:"tags_all"` } type definition struct { @@ -407,15 +364,3 @@ func applicationHasChanges(_ context.Context, plan, state resourceApplicationDat !plan.Definition.Equal(state.Definition) } - -func (r *resourceApplicationData) refreshFromOutput(ctx context.Context, app *m2.GetApplicationOutput) diag.Diagnostics { - var diags diag.Diagnostics - - //diags.Append(flex.Flatten(ctx, app, r)...) - r.ARN = flex.StringToFramework(ctx, app.ApplicationArn) - r.ID = flex.StringToFramework(ctx, app.ApplicationId) - r.ApplicationVersion = flex.Int32ToFramework(ctx, app.LatestVersion.ApplicationVersion) - r.Name = flex.StringToFramework(ctx, app.Name) - r.EngineType = flex.StringToFramework(ctx, (*string)(&app.EngineType)) - return diags -} diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 80e1119ceca..066135be67a 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -8,7 +8,7 @@ import ( "fmt" "testing" - "github.com/aws/aws-sdk-go-v2/service/m2" + awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" @@ -27,7 +27,7 @@ func TestAccApplication_basic(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" - var application m2.GetApplicationOutput + var application awstypes.ApplicationSummary resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -47,10 +47,9 @@ func TestAccApplication_basic(t *testing.T) { ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"definition.#", "definition.0.%", "definition.0.s3_location"}, + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) @@ -64,7 +63,7 @@ func TestAccApplication_full(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" - var application m2.GetApplicationOutput + var application awstypes.ApplicationSummary resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -104,7 +103,7 @@ func TestAccApplication_update(t *testing.T) { descriptionOld := "MicroFocus M2 Application" descriptionNew := "MicroFocus M2 Application Updated" resourceName := "aws_m2_application.test" - var application m2.GetApplicationOutput + var application awstypes.ApplicationSummary resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) }, @@ -153,7 +152,7 @@ func TestAccApplicatioon_tags(t *testing.T) { rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" - var application m2.GetApplicationOutput + var application awstypes.ApplicationSummary tags1 := ` tags = { @@ -208,7 +207,7 @@ func TestAccApplicatioon_tags(t *testing.T) { }) } -func testAccCheckApplicationExists(ctx context.Context, resourceName string, v *m2.GetApplicationOutput) resource.TestCheckFunc { +func testAccCheckApplicationExists(ctx context.Context, resourceName string, v *awstypes.ApplicationSummary) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[resourceName] if !ok { diff --git a/internal/service/m2/find.go b/internal/service/m2/find.go index 007ac4dc31b..cad045ecb4e 100644 --- a/internal/service/m2/find.go +++ b/internal/service/m2/find.go @@ -62,7 +62,7 @@ func FindDeploymentByID(ctx context.Context, conn *m2.Client, id string) (*awsty return &awstypes.DeploymentSummary{}, nil } -func FindAppByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetApplicationOutput, error) { +func FindAppByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.ApplicationSummary, error) { in := &m2.GetApplicationInput{ ApplicationId: aws.String(id), } @@ -83,28 +83,5 @@ func FindAppByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetApplic return nil, tfresource.NewEmptyResultError(in) } - return out, nil -} - -func findApplicationVersion(ctx context.Context, conn *m2.Client, id string, version int32) (*m2.GetApplicationVersionOutput, error) { - in := &m2.GetApplicationVersionInput{ - ApplicationId: aws.String(id), - ApplicationVersion: aws.Int32(version), - } - out, err := conn.GetApplicationVersion(ctx, in) - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } - if err != nil { - return nil, err - } - - if out == nil || out.ApplicationVersion == nil { - return nil, tfresource.NewEmptyResultError(in) - } - - return out, nil + return &awstypes.ApplicationSummary{}, nil } diff --git a/internal/service/m2/wait.go b/internal/service/m2/wait.go index d21054d3985..8921048dc30 100644 --- a/internal/service/m2/wait.go +++ b/internal/service/m2/wait.go @@ -11,7 +11,6 @@ import ( awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-provider-aws/internal/enum" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" ) // waitM2 Environment available @@ -57,85 +56,3 @@ func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, tim return nil, err } - -func waitApplicationCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.ApplicationLifecycleCreating), - Target: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleAvailable), - Refresh: statusApplication(ctx, conn, id), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, - } - - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { - return out, err - } - - return nil, err -} - -func waitApplicationUpdated(ctx context.Context, conn *m2.Client, id string, version int32, timeout time.Duration) (*m2.GetApplicationVersionOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.ApplicationVersionLifecycleCreating), - Target: enum.Slice(awstypes.ApplicationVersionLifecycleAvailable), - Refresh: statusApplicationVersion(ctx, conn, id, version), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, - } - - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationVersionOutput); ok { - return out, err - } - - return nil, err -} - -func waitApplicationDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.ApplicationLifecycleDeleting, awstypes.ApplicationLifecycleDeletingFromEnvironment), - Target: []string{}, - Refresh: statusApplication(ctx, conn, id), - Timeout: timeout, - } - - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { - return out, err - } - - return nil, err -} - -func statusApplication(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { - return func() (interface{}, string, error) { - out, err := FindAppByID(ctx, conn, id) - if tfresource.NotFound(err) { - return nil, "", nil - } - - if err != nil { - return nil, "", err - } - - return out, string(out.Status), nil - } -} - -func statusApplicationVersion(ctx context.Context, conn *m2.Client, id string, version int32) retry.StateRefreshFunc { - return func() (interface{}, string, error) { - out, err := findApplicationVersion(ctx, conn, id, version) - if tfresource.NotFound(err) { - return nil, "", nil - } - - if err != nil { - return nil, "", err - } - - return out, string(out.Status), nil - } -} From e8164cd3949c64b16ef2c87042bccae5f3d8bfda Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 11:15:46 -0400 Subject: [PATCH 083/126] Revert "Dont Auto Flex" This reverts commit c756f30a71dbbce1711b8128f39273e60bceab19. --- internal/service/m2/application.go | 58 +++++++------------------ internal/service/m2/application_test.go | 54 +---------------------- 2 files changed, 17 insertions(+), 95 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index b45777111aa..6e016a39aa7 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -143,47 +143,26 @@ func (r *resourceApplication) Schema(ctx context.Context, request resource.Schem func (r *resourceApplication) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { conn := r.Meta().M2Client(ctx) - var data resourceApplicationData + response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) - if response.Diagnostics.HasError() { - return - } - definition, diags := data.Definition.ToPtr(ctx) - response.Diagnostics.Append(diags...) if response.Diagnostics.HasError() { return } - //content := &awstypes.DefinitionMemberContent{} - s3location := &awstypes.DefinitionMemberS3Location{} - //response.Diagnostics.Append(flex.Expand(ctx, definition, &content.Value)...) - response.Diagnostics.Append(flex.Expand(ctx, definition, s3location.Value)...) + + input := &m2.CreateApplicationInput{} + + response.Diagnostics.Append(flex.Expand(ctx, data, input)...) + if response.Diagnostics.HasError() { return } - print(*&s3location.Value) - input := &m2.CreateApplicationInput{ - Definition: s3location, - EngineType: data.EngineType.ValueEnum(), - Name: data.Name.ValueStringPointer(), - Tags: getTagsIn(ctx), - } - // if len(content.Value) > 0 { - // input.Definition = content - // } else if len(s3location.Value) > 0 { - // input.Definition = s3location - // } - //response.Diagnostics.Append(flex.Expand(ctx, data, input)...) - - //if response.Diagnostics.HasError() { - // return - //} - - //input.Tags = getTagsIn(ctx) + input.Tags = getTagsIn(ctx) output, err := conn.CreateApplication(ctx, input) + if err != nil { response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, data.ApplicationId.ValueString(), err), @@ -194,14 +173,12 @@ func (r *resourceApplication) Create(ctx context.Context, request resource.Creat state := data state.ID = flex.StringToFramework(ctx, output.ApplicationId) - state.ApplicationArn = flex.StringToFramework(ctx, output.ApplicationArn) - state.ApplicationVersion = flex.Int32ToFramework(ctx, output.ApplicationVersion) - //response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) + response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) - //if response.Diagnostics.HasError() { - // return - //} + if response.Diagnostics.HasError() { + return + } response.Diagnostics.Append(response.State.Set(ctx, &state)...) } @@ -232,16 +209,13 @@ func (r *resourceApplication) Read(ctx context.Context, request resource.ReadReq return } - //response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) + response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) - //if response.Diagnostics.HasError() { - // return - //} + if response.Diagnostics.HasError() { + return + } data.ID = flex.StringToFramework(ctx, out.ApplicationId) - data.ApplicationArn = flex.StringToFramework(ctx, out.ApplicationArn) - data.ApplicationVersion = flex.Int32ToFramework(ctx, out.ApplicationVersion) - //I Might have to flaatten more fields response.Diagnostics.Append(response.State.Set(ctx, &data)...) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 066135be67a..e2b94379330 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -261,61 +261,9 @@ resource "aws_s3_bucket" "test" { bucket = %[1]q force_destroy = true } -resource "aws_s3_object" "test" { - bucket = aws_s3_bucket.test.id - key = "test.json" - content_type = "application/json" - content = < Date: Thu, 21 Mar 2024 11:15:53 -0400 Subject: [PATCH 084/126] Revert "adding application and deployment" This reverts commit e1d43e0f5db44565dabdf54fb212475ac794df6e. --- internal/service/m2/application.go | 340 -------------------- internal/service/m2/application_test.go | 353 --------------------- internal/service/m2/deployment.go | 181 ----------- internal/service/m2/deployment_test.go | 210 ------------ internal/service/m2/environment.go | 2 +- internal/service/m2/find.go | 48 --- internal/service/m2/service_package_gen.go | 11 - 7 files changed, 1 insertion(+), 1144 deletions(-) delete mode 100644 internal/service/m2/application.go delete mode 100644 internal/service/m2/application_test.go delete mode 100644 internal/service/m2/deployment.go delete mode 100644 internal/service/m2/deployment_test.go diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go deleted file mode 100644 index 6e016a39aa7..00000000000 --- a/internal/service/m2/application.go +++ /dev/null @@ -1,340 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2 - -import ( - "context" - "time" - - "github.com/aws/aws-sdk-go-v2/service/m2" - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" - "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" - "github.com/hashicorp/terraform-plugin-framework/path" - "github.com/hashicorp/terraform-plugin-framework/resource" - "github.com/hashicorp/terraform-plugin-framework/resource/schema" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" - "github.com/hashicorp/terraform-plugin-framework/schema/validator" - "github.com/hashicorp/terraform-plugin-framework/types" - "github.com/hashicorp/terraform-plugin-log/tflog" - "github.com/hashicorp/terraform-provider-aws/internal/create" - "github.com/hashicorp/terraform-provider-aws/internal/errs" - "github.com/hashicorp/terraform-provider-aws/internal/framework" - "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" - fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" - tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" - "github.com/hashicorp/terraform-provider-aws/names" -) - -// @FrameworkResource(name="M2 Application") -// @Tags(identifierAttribute="arn") -func newResourceApplication(context.Context) (resource.ResourceWithConfigure, error) { - r := &resourceApplication{} - return r, nil -} - -const ( - ResNameApplication = "M2 Application" -) - -type resourceApplication struct { - framework.ResourceWithConfigure -} - -func (r *resourceApplication) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { - response.TypeName = "aws_m2_application" -} - -func (r *resourceApplication) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { - s := schema.Schema{ - Attributes: map[string]schema.Attribute{ - "application_arn": framework.ARNAttributeComputedOnly(), - "application_id": framework.IDAttribute(), - "application_version": schema.Int64Attribute{ - Computed: true, - }, - "client_token": schema.StringAttribute{ - Optional: true, - }, - "description": schema.StringAttribute{ - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "engine_type": schema.StringAttribute{ - CustomType: fwtypes.StringEnumType[awstypes.EngineType](), - Required: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "id": framework.IDAttribute(), - "kms_key_id": schema.StringAttribute{ - Optional: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "name": schema.StringAttribute{ - Required: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "role_arn": schema.StringAttribute{ - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), - }, - }, - - names.AttrTags: tftags.TagsAttribute(), - names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), - }, - Blocks: map[string]schema.Block{ - "definition": schema.ListNestedBlock{ - CustomType: fwtypes.NewListNestedObjectTypeOf[definition](ctx), - Validators: []validator.List{ - listvalidator.IsRequired(), - listvalidator.SizeAtMost(1), - }, - NestedObject: schema.NestedBlockObject{ - Attributes: map[string]schema.Attribute{ - "content": schema.StringAttribute{ - Optional: true, - Validators: []validator.String{ - stringvalidator.ConflictsWith( - path.MatchRelative().AtParent().AtName("s3_location"), - ), - stringvalidator.ExactlyOneOf( - path.MatchRelative().AtParent().AtName("s3_location"), - ), - }, - }, - "s3_location": schema.StringAttribute{ - Optional: true, - Validators: []validator.String{ - stringvalidator.ConflictsWith( - path.MatchRelative().AtParent().AtName("content"), - ), - stringvalidator.ExactlyOneOf( - path.MatchRelative().AtParent().AtName("content"), - ), - }, - }, - }, - }, - }, - }, - } - - if s.Blocks == nil { - s.Blocks = make(map[string]schema.Block) - } - - response.Schema = s -} - -func (r *resourceApplication) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { - conn := r.Meta().M2Client(ctx) - var data resourceApplicationData - - response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) - - if response.Diagnostics.HasError() { - return - } - - input := &m2.CreateApplicationInput{} - - response.Diagnostics.Append(flex.Expand(ctx, data, input)...) - - if response.Diagnostics.HasError() { - return - } - - input.Tags = getTagsIn(ctx) - - output, err := conn.CreateApplication(ctx, input) - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, data.ApplicationId.ValueString(), err), - err.Error(), - ) - return - } - - state := data - state.ID = flex.StringToFramework(ctx, output.ApplicationId) - - response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) - - if response.Diagnostics.HasError() { - return - } - - response.Diagnostics.Append(response.State.Set(ctx, &state)...) -} - -// Read implements resource.ResourceWithConfigure. -func (r *resourceApplication) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { - - conn := r.Meta().M2Client(ctx) - var data resourceApplicationData - response.Diagnostics.Append(request.State.Get(ctx, &data)...) - - if response.Diagnostics.HasError() { - return - } - - out, err := FindAppByID(ctx, conn, data.ApplicationId.ValueString()) - - if tfresource.NotFound(err) { - response.State.RemoveResource(ctx) - return - } - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, data.ApplicationId.ValueString(), err), - err.Error(), - ) - return - } - - response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) - - if response.Diagnostics.HasError() { - return - } - - data.ID = flex.StringToFramework(ctx, out.ApplicationId) - - response.Diagnostics.Append(response.State.Set(ctx, &data)...) - -} - -// Delete implements resource.ResourceWithConfigure. -func (r *resourceApplication) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { - conn := r.Meta().M2Client(ctx) - var state resourceApplicationData - - response.Diagnostics.Append(request.State.Get(ctx, &state)...) - - if response.Diagnostics.HasError() { - return - } - - tflog.Debug(ctx, "deleting M2 Application", map[string]interface{}{ - "id": state.ApplicationId.ValueString(), - }) - - input := &m2.DeleteApplicationInput{ - ApplicationId: flex.StringFromFramework(ctx, state.ApplicationId), - } - - _, err := tfresource.RetryWhenAWSErrCodeEquals(ctx, 5*time.Minute, func() (interface{}, error) { - return conn.DeleteApplication(ctx, input) - }, "DependencyViolation") - - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return - } - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameApplication, state.ApplicationId.ValueString(), err), - err.Error(), - ) - return - } - -} - -// Update implements resource.ResourceWithConfigure. -func (r *resourceApplication) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { - conn := r.Meta().M2Client(ctx) - var state, plan resourceApplicationData - - response.Diagnostics.Append(request.State.Get(ctx, &state)...) - - if response.Diagnostics.HasError() { - return - } - - response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) - - if response.Diagnostics.HasError() { - return - } - - if applicationHasChanges(ctx, plan, state) { - input := &m2.UpdateApplicationInput{} - response.Diagnostics.Append(flex.Expand(ctx, plan, input)...) - - if response.Diagnostics.HasError() { - return - } - - _, err := conn.UpdateApplication(ctx, input) - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameApplication, state.ApplicationId.ValueString(), err), - err.Error(), - ) - return - } - - response.Diagnostics.Append(response.State.Set(ctx, &plan)...) - - } - - response.Diagnostics.Append(response.State.Set(ctx, &plan)...) - -} -func (r *resourceApplication) ImportState(ctx context.Context, request resource.ImportStateRequest, response *resource.ImportStateResponse) { - resource.ImportStatePassthroughID(ctx, path.Root("application_id"), request, response) -} - -func (r *resourceApplication) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { - r.SetTagsAll(ctx, request, response) -} - -type resourceApplicationData struct { - ApplicationArn types.String `tfsdk:"application_arn"` - ApplicationId types.String `tfsdk:"application_id"` - ApplicationVersion types.Int64 `tfsdk:"application_version"` - ClientToken types.String `tfsdk:"client_token"` - Definition fwtypes.ListNestedObjectValueOf[definition] `tfsdk:"definition"` - Description types.String `tfsdk:"description"` - EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` - ID types.String `tfsdk:"id"` - KmsKeyId types.String `tfsdk:"kms_key_id"` - RoleARN types.String `tfsdk:"role_arn"` - Name types.String `tfsdk:"name"` - Tags types.Map `tfsdk:"tags"` - TagsAll types.Map `tfsdk:"tags_all"` -} - -type definition struct { - Content types.String `tfsdk:"content"` - S3Location types.String `tfsdk:"s3_location"` -} - -func applicationHasChanges(_ context.Context, plan, state resourceApplicationData) bool { - return !plan.EngineType.Equal(state.EngineType) || - !plan.Description.Equal(state.Description) || - !plan.KmsKeyId.Equal(state.KmsKeyId) || - !plan.Name.Equal(state.Name) || - !plan.RoleARN.Equal(state.RoleARN) || - !plan.Definition.Equal(state.Definition) - -} diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go deleted file mode 100644 index e2b94379330..00000000000 --- a/internal/service/m2/application_test.go +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2_test - -import ( - "context" - "fmt" - "testing" - - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" - "github.com/hashicorp/terraform-plugin-testing/helper/resource" - "github.com/hashicorp/terraform-plugin-testing/terraform" - "github.com/hashicorp/terraform-provider-aws/internal/acctest" - "github.com/hashicorp/terraform-provider-aws/internal/conns" - tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" - "github.com/hashicorp/terraform-provider-aws/names" -) - -func TestAccApplication_basic(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_application.test" - var application awstypes.ApplicationSummary - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccApplicationConfig_basic(rName), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttrSet(resourceName, "application_id"), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func TestAccApplication_full(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_application.test" - var application awstypes.ApplicationSummary - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccApplicationConfig_full(rName), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - resource.TestCheckResourceAttrSet(resourceName, "subnet_ids.#"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func TestAccApplication_update(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - descriptionOld := "MicroFocus M2 Application" - descriptionNew := "MicroFocus M2 Application Updated" - resourceName := "aws_m2_application.test" - var application awstypes.ApplicationSummary - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccApplicationConfig_update(rName, descriptionOld), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttr(resourceName, "description", descriptionOld), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - { - Config: testAccApplicationConfig_update(rName, descriptionNew), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttr(resourceName, "description", descriptionNew), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - ), - }, - }, - }) -} - -func TestAccApplicatioon_tags(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_application.test" - var application awstypes.ApplicationSummary - - tags1 := ` - tags = { - key1 = "value1" - } -` - tags2 := ` - tags = { - key1 = "value1" - key2 = "value2" - } -` - tags3 := ` - tags = { - key2 = "value2" - } -` - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccApplicationConfig_tags(rName, tags1), - Check: resource.ComposeTestCheckFunc( - testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), - ), - }, - { - Config: testAccApplicationConfig_tags(rName, tags2), - Check: resource.ComposeTestCheckFunc( - testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), - resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), - resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), - ), - }, - { - Config: testAccApplicationConfig_tags(rName, tags3), - Check: resource.ComposeTestCheckFunc( - testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), - ), - }, - }, - }) -} - -func testAccCheckApplicationExists(ctx context.Context, resourceName string, v *awstypes.ApplicationSummary) resource.TestCheckFunc { - return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[resourceName] - if !ok { - return fmt.Errorf("not found: %s", resourceName) - } - - if rs.Primary.ID == "" { - return fmt.Errorf("no M2 Application ID is set") - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - out, err := tfm2.FindAppByID(ctx, conn, rs.Primary.ID) - if err != nil { - return fmt.Errorf("retrieving M2 Application (%s): %w", rs.Primary.ID, err) - } - - v = out - - return nil - } -} - -func testAccCheckApplicationDestroy(ctx context.Context) resource.TestCheckFunc { - return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - - for _, rs := range s.RootModule().Resources { - if rs.Type != "aws_m2_application" { - continue - } - - _, err := tfm2.FindAppByID(ctx, conn, rs.Primary.ID) - - if tfresource.NotFound(err) { - continue - } - if err != nil { - return err - } - - return fmt.Errorf("M2 Application (%s) still exists", rs.Primary.ID) - } - - return nil - } -} - -func testAccApplicationConfig_basic(rName string) string { - return fmt.Sprintf(` -resource "aws_s3_bucket" "test" { - bucket = %[1]q - force_destroy = true -} -resource "aws_m2_application" "test" { - definition { - s3_location = "s3://${aws_s3_bucket.test.bucket}/test" - } - engine_type = "microfocus" - name = %[1]q - -} -`, rName) -} - -func testAccApplicationConfig_full(rName string) string { - return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` -resource "aws_m2_environment" "test" { - description = "Test-1" - engine_type = "microfocus" - engine_version = "8.0.10" - high_availability_config { - desired_capacity = 1 - } - instance_type = "M2.m5.large" - kms_key_id = aws_kms_key.test.arn - name = %[1]q - security_group_ids = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - tags = { - Name = %[1]q - } -} - -resource "aws_vpc" "test" { - cidr_block = "10.0.0.0/16" - enable_dns_support = true - enable_dns_hostnames = true - tags = { - Name = %[1]q - } -} - -resource "aws_subnet" "test" { - count = 2 - vpc_id = aws_vpc.test.id - availability_zone = data.aws_availability_zones.available.names[count.index] - cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) - tags = { - Name = %[1]q - } -} - -resource "aws_kms_key" "test" { - description = "tf-test-cmk-kms-key-id" -} - -resource "aws_security_group" "test" { - name = %[1]q - description = %[1]q - vpc_id = aws_vpc.test.id - - ingress { - from_port = -1 - to_port = -1 - protocol = "icmp" - cidr_blocks = ["0.0.0.0/0"] - } -} -`, rName)) -} - -func testAccApplicationConfig_update(rName string, desc string) string { - return fmt.Sprintf(` -resource "aws_m2_environment" "test" { - engine_type = "microfocus" - description = %[2]q - instance_type = "M2.m5.large" - name = %[1]q -} -`, rName, desc) -} - -func testAccApplicationConfig_tags(rName, tags string) string { - return fmt.Sprintf(` -resource "aws_m2_environment" "test" { - engine_type = "microfocus" - instance_type = "M2.m5.large" - name = %[1]q - -%[2]s -} -`, rName, tags) -} diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go deleted file mode 100644 index 936ee9f3e16..00000000000 --- a/internal/service/m2/deployment.go +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2 - -import ( - "context" - - "github.com/aws/aws-sdk-go-v2/service/m2" - "github.com/hashicorp/terraform-plugin-framework/path" - "github.com/hashicorp/terraform-plugin-framework/resource" - "github.com/hashicorp/terraform-plugin-framework/resource/schema" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" - "github.com/hashicorp/terraform-plugin-framework/types" - "github.com/hashicorp/terraform-provider-aws/internal/create" - "github.com/hashicorp/terraform-provider-aws/internal/framework" - "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" - "github.com/hashicorp/terraform-provider-aws/names" -) - -// @FrameworkResource(name="M2 Deployment") -func newResourceDeployment(context.Context) (resource.ResourceWithConfigure, error) { - r := &resourceDeployment{} - - return r, nil -} - -const ( - ResNameDeployment = "M2 Deployment" -) - -type resourceDeployment struct { - framework.ResourceWithConfigure -} - -func (r *resourceDeployment) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { - response.TypeName = "aws_m2_deployment" -} - -func (r *resourceDeployment) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { - s := schema.Schema{ - Attributes: map[string]schema.Attribute{ - "application_id": schema.StringAttribute{ - Required: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "application_version": schema.Int64Attribute{ - Required: true, - PlanModifiers: []planmodifier.Int64{ - int64planmodifier.RequiresReplace(), - }, - }, - "client_token": schema.StringAttribute{ - Optional: true, - }, - "environment_id": schema.StringAttribute{ - Required: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "deployment_id": framework.IDAttribute(), - "id": framework.IDAttribute(), - }, - } - - if s.Blocks == nil { - s.Blocks = make(map[string]schema.Block) - } - - response.Schema = s -} - -func (r *resourceDeployment) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { - conn := r.Meta().M2Client(ctx) - var data resourceDeploymentData - - response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) - - if response.Diagnostics.HasError() { - return - } - - input := &m2.CreateDeploymentInput{} - - response.Diagnostics.Append(flex.Expand(ctx, data, input)...) - - if response.Diagnostics.HasError() { - return - } - - input.ApplicationId = flex.StringFromFramework(ctx, data.ApplicationId) - input.ApplicationVersion = flex.Int32FromFramework(ctx, data.ApplicationVersion) - input.EnvironmentId = flex.StringFromFramework(ctx, data.EnvironmentId) - - output, err := conn.CreateDeployment(ctx, input) - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameDeployment, data.EnvironmentId.ValueString(), err), - err.Error(), - ) - return - } - - state := data - state.ID = flex.StringToFramework(ctx, output.DeploymentId) - - response.Diagnostics.Append(flex.Flatten(ctx, output, &state)...) - - if response.Diagnostics.HasError() { - return - } - - response.Diagnostics.Append(response.State.Set(ctx, &state)...) -} - -// Read implements resource.ResourceWithConfigure. -func (r *resourceDeployment) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { - - conn := r.Meta().M2Client(ctx) - var data resourceDeploymentData - response.Diagnostics.Append(request.State.Get(ctx, &data)...) - - if response.Diagnostics.HasError() { - return - } - - out, err := FindDeploymentByID(ctx, conn, data.DeploymentId.ValueString()) - - if tfresource.NotFound(err) { - response.State.RemoveResource(ctx) - return - } - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameDeployment, data.DeploymentId.ValueString(), err), - err.Error(), - ) - return - } - - response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) - - if response.Diagnostics.HasError() { - return - } - - data.ID = flex.StringToFramework(ctx, out.DeploymentId) - - response.Diagnostics.Append(response.State.Set(ctx, &data)...) - -} - -// Delete implements resource.ResourceWithConfigure. -func (r *resourceDeployment) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { - // Noop. -} - -// Update implements resource.ResourceWithConfigure. -func (r *resourceDeployment) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { - // Noop. -} -func (r *resourceDeployment) ImportState(ctx context.Context, request resource.ImportStateRequest, response *resource.ImportStateResponse) { - resource.ImportStatePassthroughID(ctx, path.Root("deployment_id"), request, response) -} - -type resourceDeploymentData struct { - ApplicationId types.String `tfsdk:"application_id"` - ApplicationVersion types.Int64 `tfsdk:"application_version"` - ClientToken types.String `tfsdk:"client_token"` - EnvironmentId types.String `tfsdk:"environment_id"` - DeploymentId types.String `tfsdk:"deployment_id"` - ID types.String `tfsdk:"id"` -} diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go deleted file mode 100644 index 9a7e92eac74..00000000000 --- a/internal/service/m2/deployment_test.go +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2_test - -import ( - "context" - "fmt" - "testing" - - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" - "github.com/hashicorp/terraform-plugin-testing/helper/resource" - "github.com/hashicorp/terraform-plugin-testing/terraform" - "github.com/hashicorp/terraform-provider-aws/internal/acctest" - "github.com/hashicorp/terraform-provider-aws/internal/conns" - tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" - "github.com/hashicorp/terraform-provider-aws/names" -) - -func TestAccDeployment_basic(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_deployment.test" - var deployment awstypes.DeploymentSummary - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckDeploymentDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccDeploymentConfig_basic(rName), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckDeploymentExists(ctx, resourceName, &deployment), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func TestAccDeployment_full(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_deployment.test" - var deployment awstypes.DeploymentSummary - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckDeploymentDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccDeploymentConfig_full(rName), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckDeploymentExists(ctx, resourceName, &deployment), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - resource.TestCheckResourceAttrSet(resourceName, "subnet_ids.#"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func testAccCheckDeploymentExists(ctx context.Context, resourceName string, v *awstypes.DeploymentSummary) resource.TestCheckFunc { - return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[resourceName] - if !ok { - return fmt.Errorf("not found: %s", resourceName) - } - - if rs.Primary.ID == "" { - return fmt.Errorf("no M2 Deployment ID is set") - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - out, err := tfm2.FindDeploymentByID(ctx, conn, rs.Primary.ID) - if err != nil { - return fmt.Errorf("retrieving M2 Deployment (%s): %w", rs.Primary.ID, err) - } - - v = out - - return nil - } -} - -func testAccCheckDeploymentDestroy(ctx context.Context) resource.TestCheckFunc { - return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - - for _, rs := range s.RootModule().Resources { - if rs.Type != "aws_m2_deployment" { - continue - } - - _, err := tfm2.FindDeploymentByID(ctx, conn, rs.Primary.ID) - - if tfresource.NotFound(err) { - continue - } - if err != nil { - return err - } - - return fmt.Errorf("M2 Deployment (%s) still exists", rs.Primary.ID) - } - - return nil - } -} - -func testAccDeploymentConfig_basic(rName string) string { - return fmt.Sprintf(` -resource "aws_m2_deployment" "test" { - engine_type = "microfocus" - instance_type = "M2.m5.large" - name = %[1]q -} -`, rName) -} - -func testAccDeploymentConfig_full(rName string) string { - return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` -resource "aws_m2_environment" "test" { - description = "Test-1" - engine_type = "microfocus" - engine_version = "8.0.10" - high_availability_config { - desired_capacity = 1 - } - instance_type = "M2.m5.large" - kms_key_id = aws_kms_key.test.arn - name = %[1]q - security_group_ids = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - tags = { - Name = %[1]q - } -} - -resource "aws_vpc" "test" { - cidr_block = "10.0.0.0/16" - enable_dns_support = true - enable_dns_hostnames = true - tags = { - Name = %[1]q - } -} - -resource "aws_subnet" "test" { - count = 2 - vpc_id = aws_vpc.test.id - availability_zone = data.aws_availability_zones.available.names[count.index] - cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) - tags = { - Name = %[1]q - } -} - -resource "aws_kms_key" "test" { - description = "tf-test-cmk-kms-key-id" -} - -resource "aws_security_group" "test" { - name = %[1]q - description = %[1]q - vpc_id = aws_vpc.test.id - - ingress { - from_port = -1 - to_port = -1 - protocol = "icmp" - cidr_blocks = ["0.0.0.0/0"] - } -} -`, rName)) -} diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 8c3e3571fa5..35dfe47fa19 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -498,7 +498,7 @@ func environmentHasChanges(_ context.Context, plan, state resourceEnvironmentDat !plan.EngineVersion.Equal(state.EngineVersion) || !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) || !plan.InstanceType.Equal(state.InstanceType) || - !plan.KmsKeyId.Equal(state.KmsKeyId) || + !plan.KmsKeyId.Equal(state.InstanceType) || !plan.Name.Equal(state.Name) || !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) || !plan.PubliclyAccessible.Equal(state.PubliclyAccessible) || diff --git a/internal/service/m2/find.go b/internal/service/m2/find.go index cad045ecb4e..b5edaec6269 100644 --- a/internal/service/m2/find.go +++ b/internal/service/m2/find.go @@ -37,51 +37,3 @@ func FindEnvByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.Env return &awstypes.EnvironmentSummary{}, nil } - -func FindDeploymentByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.DeploymentSummary, error) { - in := &m2.GetDeploymentInput{ - DeploymentId: aws.String(id), - } - out, err := conn.GetDeployment(ctx, in) - - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } - - if err != nil { - return nil, err - } - - if out == nil || out.DeploymentId == nil { - return nil, tfresource.NewEmptyResultError(in) - } - - return &awstypes.DeploymentSummary{}, nil -} - -func FindAppByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.ApplicationSummary, error) { - in := &m2.GetApplicationInput{ - ApplicationId: aws.String(id), - } - out, err := conn.GetApplication(ctx, in) - - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } - - if err != nil { - return nil, err - } - - if out == nil || out.ApplicationId == nil { - return nil, tfresource.NewEmptyResultError(in) - } - - return &awstypes.ApplicationSummary{}, nil -} diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index 6d264286692..5e1d74d8967 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -20,17 +20,6 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.ServicePackageFrameworkResource { return []*types.ServicePackageFrameworkResource{ - { - Factory: newResourceApplication, - Name: "M2 Application", - Tags: &types.ServicePackageResourceTags{ - IdentifierAttribute: "arn", - }, - }, - { - Factory: newResourceDeployment, - Name: "M2 Deployment", - }, { Factory: newResourceEnvironment, Name: "M2 Environment", From 528c323747a0a8e2fa60161ef0f95afc5e7c2835 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 11:16:06 -0400 Subject: [PATCH 085/126] Revert "Add Accpt tests" This reverts commit b67192e6f2c04d8b54f8da3c62a8aaefbc83c7a6. --- .changelog/35324.txt | 3 - internal/service/m2/environment.go | 13 +++- internal/service/m2/environment_test.go | 75 -------------------- website/docs/r/m2_environment.html.markdown | 78 --------------------- 4 files changed, 11 insertions(+), 158 deletions(-) delete mode 100644 .changelog/35324.txt delete mode 100644 website/docs/r/m2_environment.html.markdown diff --git a/.changelog/35324.txt b/.changelog/35324.txt deleted file mode 100644 index a2cdda5a420..00000000000 --- a/.changelog/35324.txt +++ /dev/null @@ -1,3 +0,0 @@ -```release-note:new-resource -aws_m2_environment -``` \ No newline at end of file diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 35dfe47fa19..bf82fe84baf 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -68,7 +68,7 @@ func (r *resourceEnvironment) Schema(ctx context.Context, request resource.Schem Optional: true, Computed: true, PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), + stringplanmodifier.UseStateForUnknown(), }, }, "engine_type": schema.StringAttribute{ @@ -85,7 +85,16 @@ func (r *resourceEnvironment) Schema(ctx context.Context, request resource.Schem }, }, "environment_id": framework.IDAttribute(), - "id": framework.IDAttribute(), + // "high_availability_config": schema.ListAttribute{ + // CustomType: fwtypes.NewListNestedObjectTypeOf[highAvailabilityConfig](ctx), + // ElementType: fwtypes.NewObjectTypeOf[highAvailabilityConfig](ctx), + // Optional: true, + // Computed: true, + // PlanModifiers: []planmodifier.List{ + // listplanmodifier.UseStateForUnknown(), + // }, + // }, + "id": framework.IDAttribute(), "instance_type": schema.StringAttribute{ Required: true, PlanModifiers: []planmodifier.String{ diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index e8133beee91..bedb9976c35 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -145,69 +145,6 @@ func TestAccEnvironment_update(t *testing.T) { }) } -func TestAccEnvironment_tags(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_environment.test" - var environment awstypes.EnvironmentSummary - - tags1 := ` - tags = { - key1 = "value1" - } -` - tags2 := ` - tags = { - key1 = "value1" - key2 = "value2" - } -` - tags3 := ` - tags = { - key2 = "value2" - } -` - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccEnvironmentConfig_tags(rName, tags1), - Check: resource.ComposeTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), - ), - }, - { - Config: testAccEnvironmentConfig_tags(rName, tags2), - Check: resource.ComposeTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), - resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), - resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), - ), - }, - { - Config: testAccEnvironmentConfig_tags(rName, tags3), - Check: resource.ComposeTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), - ), - }, - }, - }) -} - func testAccCheckEnvironmentExists(ctx context.Context, resourceName string, v *awstypes.EnvironmentSummary) resource.TestCheckFunc { return func(s *terraform.State) error { rs, ok := s.RootModule().Resources[resourceName] @@ -333,15 +270,3 @@ resource "aws_m2_environment" "test" { } `, rName, desc) } - -func testAccEnvironmentConfig_tags(rName, tags string) string { - return fmt.Sprintf(` -resource "aws_m2_environment" "test" { - engine_type = "microfocus" - instance_type = "M2.m5.large" - name = %[1]q - -%[2]s -} -`, rName, tags) -} diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown deleted file mode 100644 index 0380fbeae2e..00000000000 --- a/website/docs/r/m2_environment.html.markdown +++ /dev/null @@ -1,78 +0,0 @@ ---- -subcategory: "m2" -layout: "aws" -page_title: "AWS: aws_m2_environment" -description: |- - Provides a resource to create a M2 environment in a AWS Account. ---- - -# Resource: aws_m2_environment - -Provides a resource to createe an [AWS Mainframe Modernization](https://docs.aws.amazon.com/m2/latest/APIReference/API_CreateEnvironment.html). - -## Example Usage - -```terraform -resource "aws_m2_environment" "test" { - engine_type = "microfocus" - instance_type = "M2.m5.large" - name = "Microfocus M2 Environment -} -``` - -## Argument Reference - -This resource supports the following arguments: - -* `client_token` - (Auto Generaated) Unique, case-sensitive identifier you provide to ensure the idempotency of the request to create an environment. -* `description` - (Optional) The description of the runtime environment. -* `engine_type` - (Required) The engine type for the runtime environment. Valid Values are `microfocus` or `blueage` -* `engine_version` - (Opional) The version of the engine type for the runtime environment. -* `high_availability_config` - (Optional) The details of a high availability configuration for this runtime environment. Check the high availability config object for more details. -* `instance_type` - (Required) The type of instance for the runtime environment. -* `kms_key_id` - (Optional) The identifier of a customer managed key. -* `name` - (Required) The name of the runtime environment. Must be unique within the account. -* `preferred_maintainence_window` - (Optional) Configures the maintenance window that you want for the runtime environment. The maintenance window must have the format ddd:hh24:mi-ddd:hh24:mi and must be less than 24 hours. The following two examples are valid maintenance windows: sun:23:45-mon:00:15 or sat:01:00-sat:03:00. If you do not provide a value, a random system-generated value will be assigned. -* `publicly_accessible` - (Optional) Flag which specifies whether the runtime environment is publicly accessible. -* `security_group_ids` - (Optional) The list of security groups for the VPC associated with this runtime environment. -* `storage_configurations` - (Optional) The array of storage configurations for this runtime environment. Check the storage configurations object for more details. -* `subnet_ids` - (Optional) The list of subnets associated with the VPC for this runtime environment. -* `tags` - (Optional) A map of tags to assign to the resource. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. - -The `high_availability_config` object supports the following: - -* `desired_capacity` - (Required) The number of instances in a high availability configuration. The minimum possible value is 1 and the maximum is 100. - -The `storage_configurations` object supports the following and only one configuration can be specified. - -* `efs` - (Optional) Defines the storage configuration for an Amazon EFS file system. -* `fsx` - (Optional) Defines the storage configuration for an Amazon FSx file system. - -The `efs` or `fsx` object supports the following fields. - -* `file_system_id` - (Required) The file system identifier. -* `mount_point` - (Required) The mount point for the file system. - -## Attribute Reference - -This resource exports the following attributes in addition to the arguments above: - -* `environment_id` - The unique identifier of the runtime environment. - - -## Import - -In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import `aws_m2_environment` using the environmentid. For example: - -```terraform -import { - to = aws_m2_environment.example - environment_id = "abcd1" -} -``` - -Using `terraform import`, import `aws_m2_environment` using the environmentid. For example: - -```console -% terraform import aws_m2_environment.example abcd1 -``` From c962d8542fbc4d710c63ac4b0d68dda4b32bbe78 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 11:16:15 -0400 Subject: [PATCH 086/126] Revert "Iniitial Commit" This reverts commit 95a6a8836441f1bdef72ccf25ecf824bccf52f72. --- internal/service/m2/environment.go | 518 --------------------- internal/service/m2/environment_test.go | 272 ----------- internal/service/m2/find.go | 39 -- internal/service/m2/generate.go | 8 - internal/service/m2/service_package_gen.go | 58 --- internal/service/m2/status.go | 55 --- internal/service/m2/tags_gen.go | 128 ----- internal/service/m2/wait.go | 58 --- 8 files changed, 1136 deletions(-) delete mode 100644 internal/service/m2/environment.go delete mode 100644 internal/service/m2/environment_test.go delete mode 100644 internal/service/m2/find.go delete mode 100644 internal/service/m2/generate.go delete mode 100644 internal/service/m2/service_package_gen.go delete mode 100644 internal/service/m2/status.go delete mode 100644 internal/service/m2/tags_gen.go delete mode 100644 internal/service/m2/wait.go diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go deleted file mode 100644 index bf82fe84baf..00000000000 --- a/internal/service/m2/environment.go +++ /dev/null @@ -1,518 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2 - -import ( - "context" - "fmt" - "time" - - "github.com/aws/aws-sdk-go-v2/service/m2" - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - "github.com/aws/aws-sdk-go/aws/arn" - "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" - "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" - "github.com/hashicorp/terraform-plugin-framework/path" - "github.com/hashicorp/terraform-plugin-framework/resource" - "github.com/hashicorp/terraform-plugin-framework/resource/schema" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/setplanmodifier" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" - "github.com/hashicorp/terraform-plugin-framework/schema/validator" - "github.com/hashicorp/terraform-plugin-framework/types" - "github.com/hashicorp/terraform-plugin-log/tflog" - "github.com/hashicorp/terraform-provider-aws/internal/create" - "github.com/hashicorp/terraform-provider-aws/internal/errs" - "github.com/hashicorp/terraform-provider-aws/internal/framework" - "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" - fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" - tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" - "github.com/hashicorp/terraform-provider-aws/names" -) - -// @FrameworkResource(name="M2 Environment") -// @Tags(identifierAttribute="arn") -func newResourceEnvironment(context.Context) (resource.ResourceWithConfigure, error) { - r := &resourceEnvironment{} - r.SetDefaultCreateTimeout(40 * time.Minute) - r.SetDefaultUpdateTimeout(80 * time.Minute) - r.SetDefaultDeleteTimeout(40 * time.Minute) - - return r, nil -} - -const ( - ResNameEnvironment = "M2 Environment" -) - -type resourceEnvironment struct { - framework.ResourceWithConfigure - framework.WithTimeouts -} - -func (r *resourceEnvironment) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { - response.TypeName = "aws_m2_environment" -} - -func (r *resourceEnvironment) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { - s := schema.Schema{ - Attributes: map[string]schema.Attribute{ - "arn": framework.ARNAttributeComputedOnly(), - "client_token": schema.StringAttribute{ - Optional: true, - }, - "description": schema.StringAttribute{ - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), - }, - }, - "engine_type": schema.StringAttribute{ - Required: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "engine_version": schema.StringAttribute{ - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), - }, - }, - "environment_id": framework.IDAttribute(), - // "high_availability_config": schema.ListAttribute{ - // CustomType: fwtypes.NewListNestedObjectTypeOf[highAvailabilityConfig](ctx), - // ElementType: fwtypes.NewObjectTypeOf[highAvailabilityConfig](ctx), - // Optional: true, - // Computed: true, - // PlanModifiers: []planmodifier.List{ - // listplanmodifier.UseStateForUnknown(), - // }, - // }, - "id": framework.IDAttribute(), - "instance_type": schema.StringAttribute{ - Required: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "kms_key_id": schema.StringAttribute{ - Optional: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "name": schema.StringAttribute{ - Required: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.RequiresReplace(), - }, - }, - "preferred_mainttainence_window": schema.StringAttribute{ - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), - }, - }, - "publicly_accessible": schema.BoolAttribute{ - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.Bool{ - boolplanmodifier.UseStateForUnknown(), - }, - }, - "security_group_ids": schema.SetAttribute{ - Optional: true, - Computed: true, - ElementType: types.StringType, - PlanModifiers: []planmodifier.Set{ - setplanmodifier.UseStateForUnknown(), - }, - }, - "subnet_ids": schema.SetAttribute{ - ElementType: types.StringType, - Optional: true, - Computed: true, - PlanModifiers: []planmodifier.Set{ - setplanmodifier.UseStateForUnknown(), - setplanmodifier.RequiresReplace(), - }, - }, - names.AttrTags: tftags.TagsAttribute(), - names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), - }, - Blocks: map[string]schema.Block{ - "high_availability_config": schema.ListNestedBlock{ - CustomType: fwtypes.NewListNestedObjectTypeOf[highAvailabilityConfig](ctx), - Validators: []validator.List{ - listvalidator.SizeAtMost(1), - }, - NestedObject: schema.NestedBlockObject{ - Attributes: map[string]schema.Attribute{ - "desired_capacity": schema.Int64Attribute{ - Required: true, - }, - }, - }, - }, - - "storage_configuration": schema.ListNestedBlock{ - CustomType: fwtypes.NewListNestedObjectTypeOf[storageConfiguration](ctx), - Validators: []validator.List{ - listvalidator.SizeAtMost(1), - }, - NestedObject: schema.NestedBlockObject{ - Blocks: map[string]schema.Block{ - "efs": schema.ListNestedBlock{ - CustomType: fwtypes.NewListNestedObjectTypeOf[efs](ctx), - NestedObject: schema.NestedBlockObject{ - Attributes: map[string]schema.Attribute{ - "file_system_id": schema.StringAttribute{ - Required: true, - }, - "mount_point": schema.StringAttribute{ - Required: true, - }, - }, - }, - Validators: []validator.List{ - listvalidator.SizeAtMost(1), - }, - }, - "fsx": schema.ListNestedBlock{ - CustomType: fwtypes.NewListNestedObjectTypeOf[fsx](ctx), - NestedObject: schema.NestedBlockObject{ - Attributes: map[string]schema.Attribute{ - "file_system_id": schema.StringAttribute{ - Required: true, - }, - "mount_point": schema.StringAttribute{ - Required: true, - }, - }, - }, - Validators: []validator.List{ - listvalidator.SizeAtMost(1), - }, - }, - }, - }, - }, - }, - } - - if s.Blocks == nil { - s.Blocks = make(map[string]schema.Block) - } - s.Blocks["timeouts"] = timeouts.Block(ctx, timeouts.Opts{ - Create: true, - Update: true, - Delete: true, - }) - - response.Schema = s -} - -func (r *resourceEnvironment) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { - conn := r.Meta().M2Client(ctx) - var data resourceEnvironmentData - - response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) - - if response.Diagnostics.HasError() { - return - } - - input := &m2.CreateEnvironmentInput{} - - response.Diagnostics.Append(flex.Expand(ctx, data, input)...) - - if response.Diagnostics.HasError() { - return - } - - input.EngineType = awstypes.EngineType(*flex.StringFromFramework(ctx, data.EngineType)) - input.InstanceType = flex.StringFromFramework(ctx, data.InstanceType) - input.Name = flex.StringFromFramework(ctx, data.Name) - input.Tags = getTagsIn(ctx) - - output, err := conn.CreateEnvironment(ctx, input) - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameEnvironment, data.Name.ValueString(), err), - err.Error(), - ) - return - } - - state := data - state.ID = flex.StringToFramework(ctx, output.EnvironmentId) - - envARN := arn.ARN{ - Partition: r.Meta().Partition, - Service: "m2", - Region: r.Meta().Region, - AccountID: r.Meta().AccountID, - Resource: fmt.Sprintf("env/%s", *output.EnvironmentId), - }.String() - - state.ARN = types.StringValue(envARN) - createTimeout := r.CreateTimeout(ctx, data.Timeouts) - out, err := waitEnvironmentAvailable(ctx, conn, state.ID.ValueString(), createTimeout) - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, data.Name.ValueString(), err), - err.Error(), - ) - return - } - - response.Diagnostics.Append(flex.Flatten(ctx, out, &state)...) - - if response.Diagnostics.HasError() { - return - } - - response.Diagnostics.Append(response.State.Set(ctx, &state)...) -} - -// Read implements resource.ResourceWithConfigure. -func (r *resourceEnvironment) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { - - conn := r.Meta().M2Client(ctx) - var data resourceEnvironmentData - response.Diagnostics.Append(request.State.Get(ctx, &data)...) - - if response.Diagnostics.HasError() { - return - } - - out, err := findEnvByID(ctx, conn, data.EnvironmentId.ValueString()) - - if tfresource.NotFound(err) { - response.State.RemoveResource(ctx) - return - } - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameEnvironment, data.EnvironmentId.ValueString(), err), - err.Error(), - ) - return - } - - envARN := arn.ARN{ - Partition: r.Meta().Partition, - Service: "m2", - Region: r.Meta().Region, - AccountID: r.Meta().AccountID, - Resource: fmt.Sprintf("env/%s", *out.EnvironmentId), - }.String() - - data.ARN = types.StringValue(envARN) - - response.Diagnostics.Append(flex.Flatten(ctx, out, &data)...) - - if response.Diagnostics.HasError() { - return - } - - data.ID = flex.StringToFramework(ctx, out.EnvironmentId) - - response.Diagnostics.Append(response.State.Set(ctx, &data)...) - -} - -// Delete implements resource.ResourceWithConfigure. -func (r *resourceEnvironment) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { - conn := r.Meta().M2Client(ctx) - var state resourceEnvironmentData - - response.Diagnostics.Append(request.State.Get(ctx, &state)...) - - if response.Diagnostics.HasError() { - return - } - - tflog.Debug(ctx, "deleting M2 Environment", map[string]interface{}{ - "id": state.EnvironmentId.ValueString(), - }) - - input := &m2.DeleteEnvironmentInput{ - EnvironmentId: flex.StringFromFramework(ctx, state.EnvironmentId), - } - - _, err := tfresource.RetryWhenAWSErrCodeEquals(ctx, 5*time.Minute, func() (interface{}, error) { - return conn.DeleteEnvironment(ctx, input) - }, "DependencyViolation") - - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return - } - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameEnvironment, state.EnvironmentId.ValueString(), err), - err.Error(), - ) - return - } - - deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) - _, err = waitEnvironmentDeleted(ctx, conn, state.EnvironmentId.ValueString(), deleteTimeout) - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameEnvironment, state.EnvironmentId.ValueString(), err), - err.Error(), - ) - return - } - -} - -// Update implements resource.ResourceWithConfigure. -func (r *resourceEnvironment) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { - conn := r.Meta().M2Client(ctx) - var state, plan resourceEnvironmentData - - response.Diagnostics.Append(request.State.Get(ctx, &state)...) - - if response.Diagnostics.HasError() { - return - } - - response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) - - if response.Diagnostics.HasError() { - return - } - - if environmentHasChanges(ctx, plan, state) { - input := &m2.UpdateEnvironmentInput{} - response.Diagnostics.Append(flex.Expand(ctx, plan, input)...) - - if response.Diagnostics.HasError() { - return - } - - input.EnvironmentId = flex.StringFromFramework(ctx, state.ID) - - _, err := conn.UpdateEnvironment(ctx, input) - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, state.ID.ValueString(), err), - err.Error(), - ) - return - } - - updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) - _, err = waitEnvironmentAvailable(ctx, conn, state.ID.ValueString(), updateTimeout) - - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameEnvironment, plan.ID.ValueString(), err), - err.Error(), - ) - return - } - - response.Diagnostics.Append(response.State.Set(ctx, &plan)...) - - } - - // out, err := FindEnvByID(ctx, conn, state.ID.ValueString()) - - // if err != nil { - // response.Diagnostics.AddError( - // create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, state.ID.ValueString(), err), - // err.Error(), - // ) - // return - // } - - // response.Diagnostics.Append(flex.Flatten(ctx, out, &plan)...) - - // if response.Diagnostics.HasError() { - // return - // } - - response.Diagnostics.Append(response.State.Set(ctx, &plan)...) - -} -func (r *resourceEnvironment) ImportState(ctx context.Context, request resource.ImportStateRequest, response *resource.ImportStateResponse) { - resource.ImportStatePassthroughID(ctx, path.Root("environment_id"), request, response) -} - -func (r *resourceEnvironment) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { - r.SetTagsAll(ctx, request, response) -} - -type resourceEnvironmentData struct { - ARN types.String `tfsdk:"arn"` - ClientToken types.String `tfsdk:"client_token"` - Description types.String `tfsdk:"description"` - EngineType types.String `tfsdk:"engine_type"` - EngineVersion types.String `tfsdk:"engine_version"` - EnvironmentId types.String `tfsdk:"environment_id"` - HighAvailabilityConfig fwtypes.ListNestedObjectValueOf[highAvailabilityConfig] `tfsdk:"high_availability_config"` - ID types.String `tfsdk:"id"` - InstanceType types.String `tfsdk:"instance_type"` - KmsKeyId types.String `tfsdk:"kms_key_id"` - Name types.String `tfsdk:"name"` - PreferredMaintenanceWindow types.String `tfsdk:"preferred_mainttainence_window"` - PubliclyAccessible types.Bool `tfsdk:"publicly_accessible"` - SecurityGroupIds types.Set `tfsdk:"security_group_ids"` - StorageConfiguration fwtypes.ListNestedObjectValueOf[storageConfiguration] `tfsdk:"storage_configuration"` - SubnetIds types.Set `tfsdk:"subnet_ids"` - Tags types.Map `tfsdk:"tags"` - TagsAll types.Map `tfsdk:"tags_all"` - Timeouts timeouts.Value `tfsdk:"timeouts"` -} - -type storageConfiguration struct { - EFS fwtypes.ListNestedObjectValueOf[efs] `tfsdk:"efs"` - FSX fwtypes.ListNestedObjectValueOf[fsx] `tfsdk:"fsx"` -} - -type efs struct { - FileSystemId types.String `tfsdk:"file_system_id"` - MountPoint types.String `tfsdk:"mount_point"` -} - -type fsx struct { - FileSystemId types.String `tfsdk:"file_system_id"` - MountPoint types.String `tfsdk:"mount_point"` -} - -type highAvailabilityConfig struct { - DesiredCapacity types.Int64 `tfsdk:"desired_capacity"` -} - -func environmentHasChanges(_ context.Context, plan, state resourceEnvironmentData) bool { - return !plan.EngineType.Equal(state.EngineType) || - !plan.Description.Equal(state.Description) || - !plan.SecurityGroupIds.Equal(state.SecurityGroupIds) || - !plan.EngineVersion.Equal(state.EngineVersion) || - !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) || - !plan.InstanceType.Equal(state.InstanceType) || - !plan.KmsKeyId.Equal(state.InstanceType) || - !plan.Name.Equal(state.Name) || - !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) || - !plan.PubliclyAccessible.Equal(state.PubliclyAccessible) || - !plan.SecurityGroupIds.Equal(state.SecurityGroupIds) || - !plan.StorageConfiguration.Equal(state.StorageConfiguration) || - !plan.SubnetIds.Equal(state.SubnetIds) - -} diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go deleted file mode 100644 index bedb9976c35..00000000000 --- a/internal/service/m2/environment_test.go +++ /dev/null @@ -1,272 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2_test - -import ( - "context" - "fmt" - "testing" - - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" - "github.com/hashicorp/terraform-plugin-testing/helper/resource" - "github.com/hashicorp/terraform-plugin-testing/terraform" - "github.com/hashicorp/terraform-provider-aws/internal/acctest" - "github.com/hashicorp/terraform-provider-aws/internal/conns" - tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" - "github.com/hashicorp/terraform-provider-aws/names" -) - -func TestAccEnvironment_basic(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_environment.test" - var environment awstypes.EnvironmentSummary - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccEnvironmentConfig_basic(rName), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func TestAccEnvironment_full(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_environment.test" - var environment awstypes.EnvironmentSummary - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccEnvironmentConfig_full(rName), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - resource.TestCheckResourceAttrSet(resourceName, "subnet_ids.#"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - -func TestAccEnvironment_update(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - descriptionOld := "MicroFocus M2 Environment" - descriptionNew := "MicroFocus M2 Environment Updated" - resourceName := "aws_m2_environment.test" - var environment awstypes.EnvironmentSummary - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccEnvironmentConfig_update(rName, descriptionOld), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttr(resourceName, "description", descriptionOld), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - { - Config: testAccEnvironmentConfig_update(rName, descriptionNew), - Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttr(resourceName, "description", descriptionNew), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - ), - }, - }, - }) -} - -func testAccCheckEnvironmentExists(ctx context.Context, resourceName string, v *awstypes.EnvironmentSummary) resource.TestCheckFunc { - return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[resourceName] - if !ok { - return fmt.Errorf("not found: %s", resourceName) - } - - if rs.Primary.ID == "" { - return fmt.Errorf("no M2 Environment ID is set") - } - - conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - out, err := tfm2.FindEnvByID(ctx, conn, rs.Primary.ID) - if err != nil { - return fmt.Errorf("retrieving M2 Environment (%s): %w", rs.Primary.ID, err) - } - - v = out - - return nil - } -} - -func testAccCheckEnvironmentDestroy(ctx context.Context) resource.TestCheckFunc { - return func(s *terraform.State) error { - conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - - for _, rs := range s.RootModule().Resources { - if rs.Type != "aws_m2_environment" { - continue - } - - _, err := tfm2.FindEnvByID(ctx, conn, rs.Primary.ID) - - if tfresource.NotFound(err) { - continue - } - if err != nil { - return err - } - - return fmt.Errorf("M2 Environment (%s) still exists", rs.Primary.ID) - } - - return nil - } -} - -func testAccEnvironmentConfig_basic(rName string) string { - return fmt.Sprintf(` -resource "aws_m2_environment" "test" { - engine_type = "microfocus" - instance_type = "M2.m5.large" - name = %[1]q -} -`, rName) -} - -func testAccEnvironmentConfig_full(rName string) string { - return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` -resource "aws_m2_environment" "test" { - description = "Test-1" - engine_type = "microfocus" - engine_version = "8.0.10" - high_availability_config { - desired_capacity = 1 - } - instance_type = "M2.m5.large" - kms_key_id = aws_kms_key.test.arn - name = %[1]q - security_group_ids = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - tags = { - Name = %[1]q - } -} - -resource "aws_vpc" "test" { - cidr_block = "10.0.0.0/16" - enable_dns_support = true - enable_dns_hostnames = true - tags = { - Name = %[1]q - } -} - -resource "aws_subnet" "test" { - count = 2 - vpc_id = aws_vpc.test.id - availability_zone = data.aws_availability_zones.available.names[count.index] - cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) - tags = { - Name = %[1]q - } -} - -resource "aws_kms_key" "test" { - description = "tf-test-cmk-kms-key-id" -} - -resource "aws_security_group" "test" { - name = %[1]q - description = %[1]q - vpc_id = aws_vpc.test.id - - ingress { - from_port = -1 - to_port = -1 - protocol = "icmp" - cidr_blocks = ["0.0.0.0/0"] - } -} -`, rName)) -} - -func testAccEnvironmentConfig_update(rName string, desc string) string { - return fmt.Sprintf(` -resource "aws_m2_environment" "test" { - engine_type = "microfocus" - description = %[2]q - instance_type = "M2.m5.large" - name = %[1]q -} -`, rName, desc) -} diff --git a/internal/service/m2/find.go b/internal/service/m2/find.go deleted file mode 100644 index b5edaec6269..00000000000 --- a/internal/service/m2/find.go +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2 - -import ( - "context" - - m2 "github.com/aws/aws-sdk-go-v2/service/m2" - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - "github.com/aws/aws-sdk-go/aws" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" - "github.com/hashicorp/terraform-provider-aws/internal/errs" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" -) - -func FindEnvByID(ctx context.Context, conn *m2.Client, id string) (*awstypes.EnvironmentSummary, error) { - in := &m2.GetEnvironmentInput{ - EnvironmentId: aws.String(id), - } - out, err := conn.GetEnvironment(ctx, in) - - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } - - if err != nil { - return nil, err - } - - if out == nil || out.EnvironmentId == nil { - return nil, tfresource.NewEmptyResultError(in) - } - - return &awstypes.EnvironmentSummary{}, nil -} diff --git a/internal/service/m2/generate.go b/internal/service/m2/generate.go deleted file mode 100644 index 666c1fb5359..00000000000 --- a/internal/service/m2/generate.go +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -//go:generate go run ../../generate/tags/main.go -KVTValues -SkipTypesImp -AWSSDKVersion=2 -ListTags -ListTagsInIDElem=ResourceArn -ListTagsOutTagsElem=Tags -ServiceTagsMap -TagOp=TagResource -TagInIDElem=ResourceArn -UntagOp=UntagResource -UpdateTags -//go:generate go run ../../generate/servicepackage/main.go -// ONLY generate directives and package declaration! Do not add anything else to this file. - -package m2 diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go deleted file mode 100644 index 5e1d74d8967..00000000000 --- a/internal/service/m2/service_package_gen.go +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by internal/generate/servicepackages/main.go; DO NOT EDIT. - -package m2 - -import ( - "context" - - aws_sdkv2 "github.com/aws/aws-sdk-go-v2/aws" - m2_sdkv2 "github.com/aws/aws-sdk-go-v2/service/m2" - "github.com/hashicorp/terraform-provider-aws/internal/conns" - "github.com/hashicorp/terraform-provider-aws/internal/types" - "github.com/hashicorp/terraform-provider-aws/names" -) - -type servicePackage struct{} - -func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.ServicePackageFrameworkDataSource { - return []*types.ServicePackageFrameworkDataSource{} -} - -func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.ServicePackageFrameworkResource { - return []*types.ServicePackageFrameworkResource{ - { - Factory: newResourceEnvironment, - Name: "M2 Environment", - Tags: &types.ServicePackageResourceTags{ - IdentifierAttribute: "arn", - }, - }, - } -} - -func (p *servicePackage) SDKDataSources(ctx context.Context) []*types.ServicePackageSDKDataSource { - return []*types.ServicePackageSDKDataSource{} -} - -func (p *servicePackage) SDKResources(ctx context.Context) []*types.ServicePackageSDKResource { - return []*types.ServicePackageSDKResource{} -} - -func (p *servicePackage) ServicePackageName() string { - return names.M2 -} - -// NewClient returns a new AWS SDK for Go v2 client for this service package's AWS API. -func (p *servicePackage) NewClient(ctx context.Context, config map[string]any) (*m2_sdkv2.Client, error) { - cfg := *(config["aws_sdkv2_config"].(*aws_sdkv2.Config)) - - return m2_sdkv2.NewFromConfig(cfg, func(o *m2_sdkv2.Options) { - if endpoint := config["endpoint"].(string); endpoint != "" { - o.BaseEndpoint = aws_sdkv2.String(endpoint) - } - }), nil -} - -func ServicePackage(ctx context.Context) conns.ServicePackage { - return &servicePackage{} -} diff --git a/internal/service/m2/status.go b/internal/service/m2/status.go deleted file mode 100644 index 57e6e0632f6..00000000000 --- a/internal/service/m2/status.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2 - -import ( - "context" - - m2 "github.com/aws/aws-sdk-go-v2/service/m2" - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - "github.com/aws/aws-sdk-go/aws" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" - "github.com/hashicorp/terraform-provider-aws/internal/errs" - "github.com/hashicorp/terraform-provider-aws/internal/tfresource" -) - -func statusEnvironment(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { - return func() (interface{}, string, error) { - out, err := findEnvByID(ctx, conn, id) - if tfresource.NotFound(err) { - return nil, "", nil - } - - if err != nil { - return nil, "", err - } - - return out, string(out.Status), nil - - } -} - -func findEnvByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetEnvironmentOutput, error) { - in := &m2.GetEnvironmentInput{ - EnvironmentId: aws.String(id), - } - out, err := conn.GetEnvironment(ctx, in) - - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } - - if err != nil { - return nil, err - } - - if out == nil || out.EnvironmentId == nil { - return nil, tfresource.NewEmptyResultError(in) - } - - return out, nil -} diff --git a/internal/service/m2/tags_gen.go b/internal/service/m2/tags_gen.go deleted file mode 100644 index 143767def21..00000000000 --- a/internal/service/m2/tags_gen.go +++ /dev/null @@ -1,128 +0,0 @@ -// Code generated by internal/generate/tags/main.go; DO NOT EDIT. -package m2 - -import ( - "context" - "fmt" - - "github.com/aws/aws-sdk-go-v2/aws" - "github.com/aws/aws-sdk-go-v2/service/m2" - "github.com/hashicorp/terraform-plugin-log/tflog" - "github.com/hashicorp/terraform-provider-aws/internal/conns" - "github.com/hashicorp/terraform-provider-aws/internal/logging" - tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" - "github.com/hashicorp/terraform-provider-aws/internal/types" - "github.com/hashicorp/terraform-provider-aws/names" -) - -// listTags lists m2 service tags. -// The identifier is typically the Amazon Resource Name (ARN), although -// it may also be a different identifier depending on the service. -func listTags(ctx context.Context, conn *m2.Client, identifier string) (tftags.KeyValueTags, error) { - input := &m2.ListTagsForResourceInput{ - ResourceArn: aws.String(identifier), - } - - output, err := conn.ListTagsForResource(ctx, input) - - if err != nil { - return tftags.New(ctx, nil), err - } - - return KeyValueTags(ctx, output.Tags), nil -} - -// ListTags lists m2 service tags and set them in Context. -// It is called from outside this package. -func (p *servicePackage) ListTags(ctx context.Context, meta any, identifier string) error { - tags, err := listTags(ctx, meta.(*conns.AWSClient).M2Client(ctx), identifier) - - if err != nil { - return err - } - - if inContext, ok := tftags.FromContext(ctx); ok { - inContext.TagsOut = types.Some(tags) - } - - return nil -} - -// map[string]string handling - -// Tags returns m2 service tags. -func Tags(tags tftags.KeyValueTags) map[string]string { - return tags.Map() -} - -// KeyValueTags creates tftags.KeyValueTags from m2 service tags. -func KeyValueTags(ctx context.Context, tags map[string]string) tftags.KeyValueTags { - return tftags.New(ctx, tags) -} - -// getTagsIn returns m2 service tags from Context. -// nil is returned if there are no input tags. -func getTagsIn(ctx context.Context) map[string]string { - if inContext, ok := tftags.FromContext(ctx); ok { - if tags := Tags(inContext.TagsIn.UnwrapOrDefault()); len(tags) > 0 { - return tags - } - } - - return nil -} - -// setTagsOut sets m2 service tags in Context. -func setTagsOut(ctx context.Context, tags map[string]string) { - if inContext, ok := tftags.FromContext(ctx); ok { - inContext.TagsOut = types.Some(KeyValueTags(ctx, tags)) - } -} - -// updateTags updates m2 service tags. -// The identifier is typically the Amazon Resource Name (ARN), although -// it may also be a different identifier depending on the service. -func updateTags(ctx context.Context, conn *m2.Client, identifier string, oldTagsMap, newTagsMap any) error { - oldTags := tftags.New(ctx, oldTagsMap) - newTags := tftags.New(ctx, newTagsMap) - - ctx = tflog.SetField(ctx, logging.KeyResourceId, identifier) - - removedTags := oldTags.Removed(newTags) - removedTags = removedTags.IgnoreSystem(names.M2) - if len(removedTags) > 0 { - input := &m2.UntagResourceInput{ - ResourceArn: aws.String(identifier), - TagKeys: removedTags.Keys(), - } - - _, err := conn.UntagResource(ctx, input) - - if err != nil { - return fmt.Errorf("untagging resource (%s): %w", identifier, err) - } - } - - updatedTags := oldTags.Updated(newTags) - updatedTags = updatedTags.IgnoreSystem(names.M2) - if len(updatedTags) > 0 { - input := &m2.TagResourceInput{ - ResourceArn: aws.String(identifier), - Tags: Tags(updatedTags), - } - - _, err := conn.TagResource(ctx, input) - - if err != nil { - return fmt.Errorf("tagging resource (%s): %w", identifier, err) - } - } - - return nil -} - -// UpdateTags updates m2 service tags. -// It is called from outside this package. -func (p *servicePackage) UpdateTags(ctx context.Context, meta any, identifier string, oldTags, newTags any) error { - return updateTags(ctx, meta.(*conns.AWSClient).M2Client(ctx), identifier, oldTags, newTags) -} diff --git a/internal/service/m2/wait.go b/internal/service/m2/wait.go deleted file mode 100644 index 8921048dc30..00000000000 --- a/internal/service/m2/wait.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) HashiCorp, Inc. -// SPDX-License-Identifier: MPL-2.0 - -package m2 - -import ( - "context" - "time" - - m2 "github.com/aws/aws-sdk-go-v2/service/m2" - awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" - "github.com/hashicorp/terraform-provider-aws/internal/enum" -) - -// waitM2 Environment available -func waitEnvironmentAvailable(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { - stateConf := &retry.StateChangeConf{ - //Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating), - Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating, awstypes.EnvironmentLifecycleUpdating), - Target: enum.Slice(awstypes.EnvironmentLifecycleAvailable), - Refresh: statusEnvironment(ctx, conn, id), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, - } - - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { - return out, err - } - - return nil, err -} - -// M2 Environment Delete -const ( - EnvironmentDeletedMinTimeout = 10 * time.Second - EnvironmentDeletedDelay = 30 * time.Second -) - -func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating, awstypes.EnvironmentLifecycleDeleting, awstypes.EnvironmentLifecycleUpdating), - Target: []string{}, - Refresh: statusEnvironment(ctx, conn, id), - Timeout: timeout, - MinTimeout: EnvironmentDeletedMinTimeout, - Delay: EnvironmentDeletedDelay, - } - - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { - return out, err - } - - return nil, err -} From e332f81877c5bdad0e60cff3176bd2a0927c3be0 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 11:27:41 -0400 Subject: [PATCH 087/126] 'export_test.go' -> 'exports_test.go'. --- internal/service/elbv2/{export_test.go => exports_test.go} | 0 internal/service/m2/{export_test.go => exports_test.go} | 0 internal/service/mediapackage/{export_test.go => exports_test.go} | 0 .../service/timestreamwrite/{export_test.go => exports_test.go} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename internal/service/elbv2/{export_test.go => exports_test.go} (100%) rename internal/service/m2/{export_test.go => exports_test.go} (100%) rename internal/service/mediapackage/{export_test.go => exports_test.go} (100%) rename internal/service/timestreamwrite/{export_test.go => exports_test.go} (100%) diff --git a/internal/service/elbv2/export_test.go b/internal/service/elbv2/exports_test.go similarity index 100% rename from internal/service/elbv2/export_test.go rename to internal/service/elbv2/exports_test.go diff --git a/internal/service/m2/export_test.go b/internal/service/m2/exports_test.go similarity index 100% rename from internal/service/m2/export_test.go rename to internal/service/m2/exports_test.go diff --git a/internal/service/mediapackage/export_test.go b/internal/service/mediapackage/exports_test.go similarity index 100% rename from internal/service/mediapackage/export_test.go rename to internal/service/mediapackage/exports_test.go diff --git a/internal/service/timestreamwrite/export_test.go b/internal/service/timestreamwrite/exports_test.go similarity index 100% rename from internal/service/timestreamwrite/export_test.go rename to internal/service/timestreamwrite/exports_test.go From 7f366bd94bfa7b86b6a416538de97e045a1c2981 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 11:32:55 -0400 Subject: [PATCH 088/126] r/aws_m2_environment: Some renaming. --- internal/service/m2/environment.go | 99 ++++++++++------------ internal/service/m2/exports_test.go | 2 +- internal/service/m2/service_package_gen.go | 2 +- 3 files changed, 49 insertions(+), 54 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 93197065335..cdfb9398b3d 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -16,7 +16,6 @@ import ( "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/diag" - "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" "github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier" @@ -39,11 +38,10 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// Function annotations are used for resource registration to the Provider. DO NOT EDIT. // @FrameworkResource(name="Environment") // @Tags(identifierAttribute="arn") -func newResourceEnvironment(_ context.Context) (resource.ResourceWithConfigure, error) { - r := &resourceEnvironment{} +func newEnvironmentResource(context.Context) (resource.ResourceWithConfigure, error) { + r := &environmentResource{} r.SetDefaultCreateTimeout(30 * time.Minute) r.SetDefaultUpdateTimeout(30 * time.Minute) @@ -56,17 +54,18 @@ const ( ResNameEnvironment = "Environment" ) -type resourceEnvironment struct { +type environmentResource struct { framework.ResourceWithConfigure + framework.WithImportByID framework.WithTimeouts } -func (r *resourceEnvironment) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { - resp.TypeName = "aws_m2_environment" +func (r *environmentResource) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { + response.TypeName = "aws_m2_environment" } -func (r *resourceEnvironment) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { - resp.Schema = schema.Schema{ +func (r *environmentResource) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { + response.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ "arn": framework.ARNAttributeComputedOnly(), "apply_changes_during_maintenance_window": schema.BoolAttribute{ @@ -225,18 +224,18 @@ func (r *resourceEnvironment) Schema(ctx context.Context, req resource.SchemaReq } } -func (r *resourceEnvironment) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { +func (r *environmentResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { conn := r.Meta().M2Client(ctx) var plan resourceEnvironmentData - resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) - if resp.Diagnostics.HasError() { + response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + if response.Diagnostics.HasError() { return } in := &m2.CreateEnvironmentInput{} - resp.Diagnostics.Append(flex.Expand(ctx, plan, in)...) + response.Diagnostics.Append(flex.Expand(ctx, plan, in)...) var clientToken string if plan.ClientToken.IsNull() || plan.ClientToken.IsUnknown() { @@ -251,26 +250,26 @@ func (r *resourceEnvironment) Create(ctx context.Context, req resource.CreateReq if !plan.StorageConfiguration.IsNull() { var sc []storageConfiguration - resp.Diagnostics.Append(plan.StorageConfiguration.ElementsAs(ctx, &sc, false)...) + response.Diagnostics.Append(plan.StorageConfiguration.ElementsAs(ctx, &sc, false)...) storageConfig, d := expandStorageConfigurations(ctx, sc) - resp.Diagnostics.Append(d...) + response.Diagnostics.Append(d...) in.StorageConfigurations = storageConfig } - if resp.Diagnostics.HasError() { + if response.Diagnostics.HasError() { return } out, err := conn.CreateEnvironment(ctx, in) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameEnvironment, plan.Name.String(), err), err.Error(), ) return } if out == nil || out.EnvironmentId == nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameEnvironment, plan.Name.String(), nil), errors.New("empty output").Error(), ) @@ -282,68 +281,68 @@ func (r *resourceEnvironment) Create(ctx context.Context, req resource.CreateReq createTimeout := r.CreateTimeout(ctx, plan.Timeouts) env, err := waitEnvironmentCreated(ctx, conn, plan.ID.ValueString(), createTimeout) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, plan.Name.String(), err), err.Error(), ) return } - resp.Diagnostics.Append(plan.refreshFromOutput(ctx, env)...) - resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) + response.Diagnostics.Append(plan.refreshFromOutput(ctx, env)...) + response.Diagnostics.Append(response.State.Set(ctx, plan)...) } -func (r *resourceEnvironment) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { +func (r *environmentResource) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { conn := r.Meta().M2Client(ctx) var state resourceEnvironmentData - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + if response.Diagnostics.HasError() { return } out, err := findEnvironmentByID(ctx, conn, state.ID.ValueString()) if tfresource.NotFound(err) { - resp.State.RemoveResource(ctx) + response.State.RemoveResource(ctx) return } if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameEnvironment, state.ID.String(), err), err.Error(), ) return } - resp.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) - resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) + response.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) + response.Diagnostics.Append(response.State.Set(ctx, &state)...) } -func (r *resourceEnvironment) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { +func (r *environmentResource) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { conn := r.Meta().M2Client(ctx) var plan, state resourceEnvironmentData - resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { + response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + if response.Diagnostics.HasError() { return } - in, updateRequired := r.updateEnvironmentInput(ctx, plan, state, resp) + in, updateRequired := r.updateEnvironmentInput(ctx, plan, state, response) if !updateRequired { return } out, err := conn.UpdateEnvironment(ctx, in) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, plan.ID.String(), err), err.Error(), ) return } if out == nil || out.EnvironmentId == nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, plan.ID.String(), nil), errors.New("empty output").Error(), ) @@ -355,23 +354,23 @@ func (r *resourceEnvironment) Update(ctx context.Context, req resource.UpdateReq updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) env, err := waitEnvironmentUpdated(ctx, conn, plan.ID.ValueString(), updateTimeout) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameEnvironment, plan.ID.String(), err), err.Error(), ) return } - resp.Diagnostics.Append(flex.Flatten(ctx, env, &plan)...) + response.Diagnostics.Append(flex.Flatten(ctx, env, &plan)...) - if resp.Diagnostics.HasError() { + if response.Diagnostics.HasError() { return } - resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) + response.Diagnostics.Append(response.State.Set(ctx, &plan)...) } -func (r *resourceEnvironment) updateEnvironmentInput(ctx context.Context, plan, state resourceEnvironmentData, resp *resource.UpdateResponse) (*m2.UpdateEnvironmentInput, bool) { +func (r *environmentResource) updateEnvironmentInput(ctx context.Context, plan, state resourceEnvironmentData, resp *resource.UpdateResponse) (*m2.UpdateEnvironmentInput, bool) { in := &m2.UpdateEnvironmentInput{ EnvironmentId: flex.StringFromFramework(ctx, plan.ID), } @@ -407,12 +406,12 @@ func (r *resourceEnvironment) updateEnvironmentInput(ctx context.Context, plan, return in, true } -func (r *resourceEnvironment) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { +func (r *environmentResource) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { conn := r.Meta().M2Client(ctx) var state resourceEnvironmentData - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + if response.Diagnostics.HasError() { return } @@ -425,7 +424,7 @@ func (r *resourceEnvironment) Delete(ctx context.Context, req resource.DeleteReq if errs.IsA[*awstypes.ResourceNotFoundException](err) { return } - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameEnvironment, state.ID.String(), err), err.Error(), ) @@ -435,7 +434,7 @@ func (r *resourceEnvironment) Delete(ctx context.Context, req resource.DeleteReq deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) _, err = waitEnvironmentDeleted(ctx, conn, state.ID.ValueString(), deleteTimeout) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameEnvironment, state.ID.String(), err), err.Error(), ) @@ -443,10 +442,6 @@ func (r *resourceEnvironment) Delete(ctx context.Context, req resource.DeleteReq } } -func (r *resourceEnvironment) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { - resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) -} - func waitEnvironmentCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { stateConf := &retry.StateChangeConf{ Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating), @@ -609,7 +604,7 @@ var ( } ) -func (r *resourceEnvironment) ModifyPlan(ctx context.Context, req resource.ModifyPlanRequest, resp *resource.ModifyPlanResponse) { +func (r *environmentResource) ModifyPlan(ctx context.Context, req resource.ModifyPlanRequest, resp *resource.ModifyPlanResponse) { r.SetTagsAll(ctx, req, resp) } @@ -724,13 +719,13 @@ func flattenMountPoint(ctx context.Context, fileSystemId, mountPoint *string, mo return configValue, diags } -func (r *resourceEnvironment) hasChanges(plan, state resourceEnvironmentData) bool { +func (r *environmentResource) hasChanges(plan, state resourceEnvironmentData) bool { return !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) || !plan.EngineVersion.Equal(state.EngineVersion) || !plan.InstanceType.Equal(state.EngineType) || !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) } -func (r *resourceEnvironment) hasChangesForMaintenance(plan, state resourceEnvironmentData) bool { +func (r *environmentResource) hasChangesForMaintenance(plan, state resourceEnvironmentData) bool { return plan.ApplyDuringMaintenanceWindow.ValueBool() && !plan.EngineVersion.Equal(state.EngineVersion) } diff --git a/internal/service/m2/exports_test.go b/internal/service/m2/exports_test.go index a8619c2223b..f8b6c33aa4b 100644 --- a/internal/service/m2/exports_test.go +++ b/internal/service/m2/exports_test.go @@ -5,5 +5,5 @@ package m2 // Exports for use in tests only. var ( - ResourceEnvironment = newResourceEnvironment + ResourceEnvironment = newEnvironmentResource ) diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index 8096ae76b4d..e25cec7596f 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -21,7 +21,7 @@ func (p *servicePackage) FrameworkDataSources(ctx context.Context) []*types.Serv func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.ServicePackageFrameworkResource { return []*types.ServicePackageFrameworkResource{ { - Factory: newResourceEnvironment, + Factory: newEnvironmentResource, Name: "Environment", Tags: &types.ServicePackageResourceTags{ IdentifierAttribute: "arn", From 93837ee4aaf2b45ee221873f161b30a90fb0c77e Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 12:02:44 -0400 Subject: [PATCH 089/126] r/aws_m2_environment: More renaming. --- internal/service/m2/environment.go | 127 +++++++++++--------- website/docs/r/m2_environment.html.markdown | 6 +- 2 files changed, 72 insertions(+), 61 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index cdfb9398b3d..0d198eea0e6 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -8,12 +8,15 @@ import ( "errors" "time" + "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" + "github.com/hashicorp/terraform-plugin-framework-validators/int64validator" "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" + "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/resource" @@ -67,22 +70,23 @@ func (r *environmentResource) Metadata(_ context.Context, request resource.Metad func (r *environmentResource) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { response.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ - "arn": framework.ARNAttributeComputedOnly(), "apply_changes_during_maintenance_window": schema.BoolAttribute{ Optional: true, }, - "client_token": schema.StringAttribute{ - Optional: true, - }, + names.AttrARN: framework.ARNAttributeComputedOnly(), "description": schema.StringAttribute{ Optional: true, Computed: true, + Validators: []validator.String{ + stringvalidator.LengthAtMost(500), + }, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, }, "engine_type": schema.StringAttribute{ - Required: true, + CustomType: fwtypes.StringEnumType[awstypes.EngineType](), + Required: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, @@ -90,21 +94,27 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem "engine_version": schema.StringAttribute{ Optional: true, Computed: true, + Validators: []validator.String{ + stringvalidator.RegexMatches(regexache.MustCompile(`^\S{1,10}$`), ""), + }, PlanModifiers: []planmodifier.String{ stringplanmodifier.UseStateForUnknown(), }, }, "environment_id": framework.IDAttribute(), - "force_update": schema.BoolAttribute{ + "force_update": schema.BoolAttribute{ // TODO ???? Optional: true, }, - "id": framework.IDAttribute(), + names.AttrID: framework.IDAttribute(), "instance_type": schema.StringAttribute{ - Required: true, - Validators: []validator.String{}, + Required: true, + Validators: []validator.String{ + stringvalidator.RegexMatches(regexache.MustCompile(`^\S{1,20}$`), ""), + }, }, "kms_key_id": schema.StringAttribute{ - Optional: true, + CustomType: fwtypes.ARNType, + Optional: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, @@ -114,11 +124,14 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem }, "name": schema.StringAttribute{ Required: true, + Validators: []validator.String{ + stringvalidator.RegexMatches(regexache.MustCompile(`^[A-Za-z0-9][A-Za-z0-9_\-]{1,59}$`), ""), + }, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, }, - "preferred_maintenance_window": schema.StringAttribute{ + "preferred_maintenance_window": schema.StringAttribute{ // TODO Custom type? Optional: true, Computed: true, PlanModifiers: []planmodifier.String{ @@ -129,31 +142,34 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem Optional: true, Computed: true, PlanModifiers: []planmodifier.Bool{ + boolplanmodifier.RequiresReplace(), boolplanmodifier.UseStateForUnknown(), }, }, - "security_groups": schema.SetAttribute{ + "security_group_ids": schema.SetAttribute{ + CustomType: fwtypes.SetOfStringType, + ElementType: types.StringType, Optional: true, Computed: true, - ElementType: types.StringType, Validators: []validator.Set{ setvalidator.SizeAtLeast(1), }, PlanModifiers: []planmodifier.Set{ - setplanmodifier.UseStateForUnknown(), setplanmodifier.RequiresReplace(), + setplanmodifier.UseStateForUnknown(), }, }, "subnet_ids": schema.SetAttribute{ + CustomType: fwtypes.SetOfStringType, + ElementType: types.StringType, Optional: true, Computed: true, - ElementType: types.StringType, Validators: []validator.Set{ setvalidator.SizeAtLeast(2), }, PlanModifiers: []planmodifier.Set{ - setplanmodifier.UseStateForUnknown(), setplanmodifier.RequiresReplace(), + setplanmodifier.UseStateForUnknown(), }, }, names.AttrTags: tftags.TagsAttribute(), @@ -161,14 +177,18 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem }, Blocks: map[string]schema.Block{ "high_availability_config": schema.ListNestedBlock{ - CustomType: fwtypes.NewListNestedObjectTypeOf[haData](ctx), + CustomType: fwtypes.NewListNestedObjectTypeOf[highAvailabilityConfigModel](ctx), Validators: []validator.List{ + listvalidator.IsRequired(), listvalidator.SizeAtMost(1), }, NestedObject: schema.NestedBlockObject{ Attributes: map[string]schema.Attribute{ "desired_capacity": schema.Int64Attribute{ Required: true, + Validators: []validator.Int64{ + int64validator.Between(1, 100), + }, }, }, }, @@ -227,7 +247,7 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem func (r *environmentResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { conn := r.Meta().M2Client(ctx) - var plan resourceEnvironmentData + var plan environmentResourceModel response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) if response.Diagnostics.HasError() { return @@ -237,15 +257,7 @@ func (r *environmentResource) Create(ctx context.Context, request resource.Creat response.Diagnostics.Append(flex.Expand(ctx, plan, in)...) - var clientToken string - if plan.ClientToken.IsNull() || plan.ClientToken.IsUnknown() { - clientToken = id.UniqueId() - } else { - clientToken = plan.ClientToken.ValueString() - } - - in.ClientToken = aws.String(clientToken) - + in.ClientToken = aws.String(id.UniqueId()) in.Tags = getTagsIn(ctx) if !plan.StorageConfiguration.IsNull() { @@ -295,7 +307,7 @@ func (r *environmentResource) Create(ctx context.Context, request resource.Creat func (r *environmentResource) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { conn := r.Meta().M2Client(ctx) - var state resourceEnvironmentData + var state environmentResourceModel response.Diagnostics.Append(request.State.Get(ctx, &state)...) if response.Diagnostics.HasError() { return @@ -321,7 +333,7 @@ func (r *environmentResource) Read(ctx context.Context, request resource.ReadReq func (r *environmentResource) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { conn := r.Meta().M2Client(ctx) - var plan, state resourceEnvironmentData + var plan, state environmentResourceModel response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) response.Diagnostics.Append(request.State.Get(ctx, &state)...) if response.Diagnostics.HasError() { @@ -370,7 +382,7 @@ func (r *environmentResource) Update(ctx context.Context, request resource.Updat response.Diagnostics.Append(response.State.Set(ctx, &plan)...) } -func (r *environmentResource) updateEnvironmentInput(ctx context.Context, plan, state resourceEnvironmentData, resp *resource.UpdateResponse) (*m2.UpdateEnvironmentInput, bool) { +func (r *environmentResource) updateEnvironmentInput(ctx context.Context, plan, state environmentResourceModel, resp *resource.UpdateResponse) (*m2.UpdateEnvironmentInput, bool) { in := &m2.UpdateEnvironmentInput{ EnvironmentId: flex.StringFromFramework(ctx, plan.ID), } @@ -409,7 +421,7 @@ func (r *environmentResource) updateEnvironmentInput(ctx context.Context, plan, func (r *environmentResource) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { conn := r.Meta().M2Client(ctx) - var state resourceEnvironmentData + var state environmentResourceModel response.Diagnostics.Append(request.State.Get(ctx, &state)...) if response.Diagnostics.HasError() { return @@ -533,7 +545,7 @@ func findEnvironmentByID(ctx context.Context, conn *m2.Client, id string) (*m2.G return out, nil } -func (rd *resourceEnvironmentData) refreshFromOutput(ctx context.Context, out *m2.GetEnvironmentOutput) diag.Diagnostics { +func (rd *environmentResourceModel) refreshFromOutput(ctx context.Context, out *m2.GetEnvironmentOutput) diag.Diagnostics { var diags diag.Diagnostics diags.Append(flex.Flatten(ctx, out, rd)...) @@ -546,29 +558,28 @@ func (rd *resourceEnvironmentData) refreshFromOutput(ctx context.Context, out *m return diags } -type resourceEnvironmentData struct { - ARN types.String `tfsdk:"arn"` - ApplyDuringMaintenanceWindow types.Bool `tfsdk:"apply_changes_during_maintenance_window"` - ClientToken types.String `tfsdk:"client_token"` - Description types.String `tfsdk:"description"` - ID types.String `tfsdk:"id"` - EngineType types.String `tfsdk:"engine_type"` - EngineVersion types.String `tfsdk:"engine_version"` - EnvironmentId types.String `tfsdk:"environment_id"` - ForceUpdate types.Bool `tfsdk:"force_update"` - HighAvailabilityConfig fwtypes.ListNestedObjectValueOf[haData] `tfsdk:"high_availability_config"` - InstanceType types.String `tfsdk:"instance_type"` - KmsKeyId types.String `tfsdk:"kms_key_id"` - LoadBalancerArn types.String `tfsdk:"load_balancer_arn"` - PreferredMaintenanceWindow types.String `tfsdk:"preferred_maintenance_window"` - PubliclyAccessible types.Bool `tfsdk:"publicly_accessible"` - SecurityGroupIds types.Set `tfsdk:"security_groups"` - StorageConfiguration types.List `tfsdk:"storage_configuration"` - SubnetIds types.Set `tfsdk:"subnet_ids"` - Name types.String `tfsdk:"name"` - Tags types.Map `tfsdk:"tags"` - TagsAll types.Map `tfsdk:"tags_all"` - Timeouts timeouts.Value `tfsdk:"timeouts"` +type environmentResourceModel struct { + ARN types.String `tfsdk:"arn"` + ApplyDuringMaintenanceWindow types.Bool `tfsdk:"apply_changes_during_maintenance_window"` + Description types.String `tfsdk:"description"` + EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` + EngineVersion types.String `tfsdk:"engine_version"` + EnvironmentID types.String `tfsdk:"environment_id"` + ForceUpdate types.Bool `tfsdk:"force_update"` + HighAvailabilityConfig fwtypes.ListNestedObjectValueOf[highAvailabilityConfigModel] `tfsdk:"high_availability_config"` + ID types.String `tfsdk:"id"` + InstanceType types.String `tfsdk:"instance_type"` + KmsKeyID fwtypes.ARN `tfsdk:"kms_key_id"` + LoadBalancerArn types.String `tfsdk:"load_balancer_arn"` + Name types.String `tfsdk:"name"` + PreferredMaintenanceWindow types.String `tfsdk:"preferred_maintenance_window"` + PubliclyAccessible types.Bool `tfsdk:"publicly_accessible"` + SecurityGroupIDs fwtypes.SetValueOf[types.String] `tfsdk:"security_group_ids"` + StorageConfiguration types.List `tfsdk:"storage_configuration"` + SubnetIDs fwtypes.SetValueOf[types.String] `tfsdk:"subnet_ids"` + Tags types.Map `tfsdk:"tags"` + TagsAll types.Map `tfsdk:"tags_all"` + Timeouts timeouts.Value `tfsdk:"timeouts"` } type storageConfiguration struct { @@ -586,7 +597,7 @@ type fsx struct { MountPoint types.String `tfsdk:"mount_point"` } -type haData struct { +type highAvailabilityConfigModel struct { DesiredCapacity types.Int64 `tfsdk:"desired_capacity"` } @@ -719,13 +730,13 @@ func flattenMountPoint(ctx context.Context, fileSystemId, mountPoint *string, mo return configValue, diags } -func (r *environmentResource) hasChanges(plan, state resourceEnvironmentData) bool { +func (r *environmentResource) hasChanges(plan, state environmentResourceModel) bool { return !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) || !plan.EngineVersion.Equal(state.EngineVersion) || !plan.InstanceType.Equal(state.EngineType) || !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) } -func (r *environmentResource) hasChangesForMaintenance(plan, state resourceEnvironmentData) bool { +func (r *environmentResource) hasChangesForMaintenance(plan, state environmentResourceModel) bool { return plan.ApplyDuringMaintenanceWindow.ValueBool() && !plan.EngineVersion.Equal(state.EngineVersion) } diff --git a/website/docs/r/m2_environment.html.markdown b/website/docs/r/m2_environment.html.markdown index 2aa09fec865..70dabf3f117 100644 --- a/website/docs/r/m2_environment.html.markdown +++ b/website/docs/r/m2_environment.html.markdown @@ -82,17 +82,17 @@ resource "aws_m2_environment" "test" { The following arguments are required: * `name` - (Required) Name of the runtime environment. Must be unique within the account. -* `engine_type` - (Required) Engine type must be `microfocus | bluage`. +* `engine_type` - (Required) Engine type must be `microfocus` or `bluage`. * `instance_type` - (Required) M2 Instance Type. The following arguments are optional: * `engine_version` - (Optional) The specific version of the engine for the Environment. * `force_update` - (Optional) Force update the environment even if applications are running. -* `kms_key_id` - (Optional) KMS Key to use for the Environment. +* `kms_key_id` - (Optional) ARN of the KMS key to use for the Environment. * `preferred_maintenance_window` - (Optional) Configures the maintenance window that you want for the runtime environment. The maintenance window must have the format `ddd:hh24:mi-ddd:hh24:mi` and must be less than 24 hours. If not provided a random value will be used. * `publicly_accessible` - (Optional) Allow applications deployed to this environment to be publicly accessible. -* `security_groups` - (Optional) List of security group ids. +* `security_group_ids` - (Optional) List of security group ids. * `subnet_ids` - (Optional) List of subnet ids to deploy environment to. * `tags` - (Optional) Key-value tags for the place index. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. From 319a7b52d414b3cf2a6840a131e6b46d1febcb73 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 13:45:48 -0400 Subject: [PATCH 090/126] r/aws_m2_environment: Tidy up Create. --- internal/service/m2/environment.go | 295 +++++++++++++++++------------ 1 file changed, 171 insertions(+), 124 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 0d198eea0e6..38ea045a9d3 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -6,6 +6,7 @@ package m2 import ( "context" "errors" + "fmt" "time" "github.com/YakDriver/regexache" @@ -19,6 +20,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/diag" + "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" "github.com/hashicorp/terraform-plugin-framework/resource/schema/boolplanmodifier" @@ -35,6 +37,7 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/framework" "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwflex "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" @@ -53,10 +56,6 @@ func newEnvironmentResource(context.Context) (resource.ResourceWithConfigure, er return r, nil } -const ( - ResNameEnvironment = "Environment" -) - type environmentResource struct { framework.ResourceWithConfigure framework.WithImportByID @@ -194,6 +193,7 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem }, }, "storage_configuration": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[storageConfigurationModel](ctx), Validators: []validator.List{ listvalidator.SizeAtMost(1), }, @@ -205,14 +205,27 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem "efs": schema.ListNestedBlock{ Validators: []validator.List{ listvalidator.SizeAtMost(1), + listvalidator.ExactlyOneOf( + path.MatchRelative().AtParent().AtName("efs"), + path.MatchRelative().AtParent().AtName("fsx"), + ), + }, + PlanModifiers: []planmodifier.List{ + listplanmodifier.RequiresReplace(), }, NestedObject: schema.NestedBlockObject{ Attributes: map[string]schema.Attribute{ "file_system_id": schema.StringAttribute{ Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, }, "mount_point": schema.StringAttribute{ Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, }, }, }, @@ -221,13 +234,22 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem Validators: []validator.List{ listvalidator.SizeAtMost(1), }, + PlanModifiers: []planmodifier.List{ + listplanmodifier.RequiresReplace(), + }, NestedObject: schema.NestedBlockObject{ Attributes: map[string]schema.Attribute{ "file_system_id": schema.StringAttribute{ Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, }, "mount_point": schema.StringAttribute{ Required: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, }, }, }, @@ -245,63 +267,69 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem } func (r *environmentResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { - conn := r.Meta().M2Client(ctx) - - var plan environmentResourceModel - response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + var data environmentResourceModel + response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) if response.Diagnostics.HasError() { return } - in := &m2.CreateEnvironmentInput{} - - response.Diagnostics.Append(flex.Expand(ctx, plan, in)...) + conn := r.Meta().M2Client(ctx) - in.ClientToken = aws.String(id.UniqueId()) - in.Tags = getTagsIn(ctx) + // We can't use AutoFlEx for StorageConfigurations as it's a union. + var storageConfigurations []awstypes.StorageConfiguration + if !data.StorageConfiguration.IsNull() { + var storageConfigurationModels []storageConfigurationModel + response.Diagnostics.Append(data.StorageConfiguration.ElementsAs(ctx, &storageConfigurationModels, false)...) + if response.Diagnostics.HasError() { + return + } - if !plan.StorageConfiguration.IsNull() { - var sc []storageConfiguration - response.Diagnostics.Append(plan.StorageConfiguration.ElementsAs(ctx, &sc, false)...) - storageConfig, d := expandStorageConfigurations(ctx, sc) + var d diag.Diagnostics + storageConfigurations, d = expandStorageConfigurations(ctx, storageConfigurationModels) response.Diagnostics.Append(d...) - in.StorageConfigurations = storageConfig + if response.Diagnostics.HasError() { + return + } } + name := data.Name.ValueString() + input := &m2.CreateEnvironmentInput{} + response.Diagnostics.Append(fwflex.Expand(ctx, data, input)...) if response.Diagnostics.HasError() { return } - out, err := conn.CreateEnvironment(ctx, in) + // Additional fields. + input.ClientToken = aws.String(id.UniqueId()) + input.Tags = getTagsIn(ctx) + input.StorageConfigurations = storageConfigurations + + output, err := conn.CreateEnvironment(ctx, input) + if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameEnvironment, plan.Name.String(), err), - err.Error(), - ) - return - } - if out == nil || out.EnvironmentId == nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameEnvironment, plan.Name.String(), nil), - errors.New("empty output").Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("creating Mainframe Modernization Environment (%s)", name), err.Error()) + return } - plan.ID = flex.StringToFramework(ctx, out.EnvironmentId) + // Set values for unknowns. + data.EnvironmentID = flex.StringToFramework(ctx, output.EnvironmentId) + data.setID() + + env, err := waitEnvironmentCreated(ctx, conn, data.ID.ValueString(), r.CreateTimeout(ctx, data.Timeouts)) - createTimeout := r.CreateTimeout(ctx, plan.Timeouts) - env, err := waitEnvironmentCreated(ctx, conn, plan.ID.ValueString(), createTimeout) if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameEnvironment, plan.Name.String(), err), - err.Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Environment (%s) create", data.ID.ValueString()), err.Error()) + + return + } + + response.Diagnostics.Append(fwflex.Flatten(ctx, env, &data)...) + if response.Diagnostics.HasError() { return } - response.Diagnostics.Append(plan.refreshFromOutput(ctx, env)...) - response.Diagnostics.Append(response.State.Set(ctx, plan)...) + response.Diagnostics.Append(response.State.Set(ctx, data)...) } func (r *environmentResource) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { @@ -454,19 +482,61 @@ func (r *environmentResource) Delete(ctx context.Context, request resource.Delet } } +func findEnvironmentByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetEnvironmentOutput, error) { + input := &m2.GetEnvironmentInput{ + EnvironmentId: aws.String(id), + } + + output, err := conn.GetEnvironment(ctx, input) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } + + if err != nil { + return nil, err + } + + if output == nil { + return nil, tfresource.NewEmptyResultError(input) + } + + return output, nil +} + +func statusEnvironment(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { + return func() (interface{}, string, error) { + output, err := findEnvironmentByID(ctx, conn, id) + + if tfresource.NotFound(err) { + return nil, "", nil + } + + if err != nil { + return nil, "", err + } + + return output, string(output.Status), nil + } +} + func waitEnvironmentCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating), - Target: enum.Slice(awstypes.EnvironmentLifecycleAvailable), - Refresh: statusEnvironment(ctx, conn, id), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, + Pending: enum.Slice(awstypes.EnvironmentLifecycleCreating), + Target: enum.Slice(awstypes.EnvironmentLifecycleAvailable), + Refresh: statusEnvironment(ctx, conn, id), + Timeout: timeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { - return out, err + + if output, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } return nil, err @@ -474,17 +544,18 @@ func waitEnvironmentCreated(ctx context.Context, conn *m2.Client, id string, tim func waitEnvironmentUpdated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetEnvironmentOutput, error) { stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.EnvironmentLifecycleUpdating), - Target: enum.Slice(awstypes.EnvironmentLifecycleAvailable), - Refresh: statusEnvironment(ctx, conn, id), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, + Pending: enum.Slice(awstypes.EnvironmentLifecycleUpdating), + Target: enum.Slice(awstypes.EnvironmentLifecycleAvailable), + Refresh: statusEnvironment(ctx, conn, id), + Timeout: timeout, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { - return out, err + + if output, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } return nil, err @@ -499,50 +570,14 @@ func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, tim } outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { - return out, err - } - - return nil, err -} -func statusEnvironment(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { - return func() (interface{}, string, error) { - out, err := findEnvironmentByID(ctx, conn, id) - if tfresource.NotFound(err) { - return nil, "", nil - } + if output, ok := outputRaw.(*m2.GetEnvironmentOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) - if err != nil { - return nil, "", err - } - - return out, string(out.Status), nil - } -} - -func findEnvironmentByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetEnvironmentOutput, error) { - in := &m2.GetEnvironmentInput{ - EnvironmentId: aws.String(id), + return output, err } - out, err := conn.GetEnvironment(ctx, in) - if err != nil { - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } - - return nil, err - } - - if out == nil { - return nil, tfresource.NewEmptyResultError(in) - } - - return out, nil + return nil, err } func (rd *environmentResourceModel) refreshFromOutput(ctx context.Context, out *m2.GetEnvironmentOutput) diag.Diagnostics { @@ -575,25 +610,35 @@ type environmentResourceModel struct { PreferredMaintenanceWindow types.String `tfsdk:"preferred_maintenance_window"` PubliclyAccessible types.Bool `tfsdk:"publicly_accessible"` SecurityGroupIDs fwtypes.SetValueOf[types.String] `tfsdk:"security_group_ids"` - StorageConfiguration types.List `tfsdk:"storage_configuration"` + StorageConfiguration fwtypes.ListNestedObjectValueOf[storageConfigurationModel] `tfsdk:"storage_configuration"` SubnetIDs fwtypes.SetValueOf[types.String] `tfsdk:"subnet_ids"` Tags types.Map `tfsdk:"tags"` TagsAll types.Map `tfsdk:"tags_all"` Timeouts timeouts.Value `tfsdk:"timeouts"` } -type storageConfiguration struct { +func (model *environmentResourceModel) InitFromID() error { + model.EnvironmentID = model.ID + + return nil +} + +func (model *environmentResourceModel) setID() { + model.ID = model.EnvironmentID +} + +type storageConfigurationModel struct { EFS types.List `tfsdk:"efs"` FSX types.List `tfsdk:"fsx"` } -type efs struct { - FileSystemId types.String `tfsdk:"file_system_id"` +type efsStorageConfigurationModel struct { + FileSystemID types.String `tfsdk:"file_system_id"` MountPoint types.String `tfsdk:"mount_point"` } -type fsx struct { - FileSystemId types.String `tfsdk:"file_system_id"` +type fsxStorageConfigurationModel struct { + FileSystemID types.String `tfsdk:"file_system_id"` MountPoint types.String `tfsdk:"mount_point"` } @@ -619,48 +664,50 @@ func (r *environmentResource) ModifyPlan(ctx context.Context, req resource.Modif r.SetTagsAll(ctx, req, resp) } -func expandStorageConfigurations(ctx context.Context, storageConfigurations []storageConfiguration) ([]awstypes.StorageConfiguration, diag.Diagnostics) { - storage := []awstypes.StorageConfiguration{} +func expandStorageConfigurations(ctx context.Context, storageConfigurationModels []storageConfigurationModel) ([]awstypes.StorageConfiguration, diag.Diagnostics) { var diags diag.Diagnostics - - for _, mount := range storageConfigurations { - if !mount.EFS.IsNull() { - var efsMounts []efs - diags.Append(mount.EFS.ElementsAs(ctx, &efsMounts, false)...) - mp := expandEFSMountPoint(ctx, efsMounts) - storage = append(storage, mp) + storageConfigurations := []awstypes.StorageConfiguration{} + + for _, item := range storageConfigurationModels { + if !item.EFS.IsNull() && (len(item.EFS.Elements()) > 0) { + var efsStorageConfigurationModels []efsStorageConfigurationModel + diags.Append(item.EFS.ElementsAs(ctx, &efsStorageConfigurationModels, false)...) + v := expandStorageConfigurationMemberEFS(ctx, efsStorageConfigurationModels) + storageConfigurations = append(storageConfigurations, v) } - if !mount.FSX.IsNull() { - var fsxMounts []fsx - diags.Append(mount.FSX.ElementsAs(ctx, &fsxMounts, false)...) - mp := expandFSxMountPoint(ctx, fsxMounts) - storage = append(storage, mp) + if !item.FSX.IsNull() && (len(item.FSX.Elements()) > 0) { + var fsxStorageConfigurationModels []fsxStorageConfigurationModel + diags.Append(item.FSX.ElementsAs(ctx, &fsxStorageConfigurationModels, false)...) + v := expandStorageConfigurationMemberFSX(ctx, fsxStorageConfigurationModels) + storageConfigurations = append(storageConfigurations, v) } } - return storage, diags + return storageConfigurations, diags } -func expandEFSMountPoint(ctx context.Context, efs []efs) *awstypes.StorageConfigurationMemberEfs { - if len(efs) == 0 { +func expandStorageConfigurationMemberEFS(ctx context.Context, efsStorageConfigurationModels []efsStorageConfigurationModel) *awstypes.StorageConfigurationMemberEfs { + if len(efsStorageConfigurationModels) == 0 { return nil } + return &awstypes.StorageConfigurationMemberEfs{ Value: awstypes.EfsStorageConfiguration{ - FileSystemId: flex.StringFromFramework(ctx, efs[0].FileSystemId), - MountPoint: flex.StringFromFramework(ctx, efs[0].MountPoint), + FileSystemId: flex.StringFromFramework(ctx, efsStorageConfigurationModels[0].FileSystemID), + MountPoint: flex.StringFromFramework(ctx, efsStorageConfigurationModels[0].MountPoint), }, } } -func expandFSxMountPoint(ctx context.Context, fsx []fsx) *awstypes.StorageConfigurationMemberFsx { - if len(fsx) == 0 { +func expandStorageConfigurationMemberFSX(ctx context.Context, fsxStorageConfigurationModels []fsxStorageConfigurationModel) *awstypes.StorageConfigurationMemberFsx { + if len(fsxStorageConfigurationModels) == 0 { return nil } + return &awstypes.StorageConfigurationMemberFsx{ Value: awstypes.FsxStorageConfiguration{ - FileSystemId: flex.StringFromFramework(ctx, fsx[0].FileSystemId), - MountPoint: flex.StringFromFramework(ctx, fsx[0].MountPoint), + FileSystemId: flex.StringFromFramework(ctx, fsxStorageConfigurationModels[0].FileSystemID), + MountPoint: flex.StringFromFramework(ctx, fsxStorageConfigurationModels[0].MountPoint), }, } } From d1dad85970fca3ed0f7c8a13d68e1500ed329608 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 16:52:40 -0400 Subject: [PATCH 091/126] r/aws_m2_environment: Tidy up Delete. --- internal/service/m2/environment.go | 108 +++++++++++++++-------------- 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 38ea045a9d3..f6190164129 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -30,13 +30,13 @@ import ( "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/schema/validator" "github.com/hashicorp/terraform-plugin-framework/types" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + sdkid "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-provider-aws/internal/create" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/errs/fwdiag" "github.com/hashicorp/terraform-provider-aws/internal/framework" - "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" fwflex "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" @@ -300,7 +300,7 @@ func (r *environmentResource) Create(ctx context.Context, request resource.Creat } // Additional fields. - input.ClientToken = aws.String(id.UniqueId()) + input.ClientToken = aws.String(sdkid.UniqueId()) input.Tags = getTagsIn(ctx) input.StorageConfigurations = storageConfigurations @@ -313,7 +313,7 @@ func (r *environmentResource) Create(ctx context.Context, request resource.Creat } // Set values for unknowns. - data.EnvironmentID = flex.StringToFramework(ctx, output.EnvironmentId) + data.EnvironmentID = fwflex.StringToFramework(ctx, output.EnvironmentId) data.setID() env, err := waitEnvironmentCreated(ctx, conn, data.ID.ValueString(), r.CreateTimeout(ctx, data.Timeouts)) @@ -333,29 +333,37 @@ func (r *environmentResource) Create(ctx context.Context, request resource.Creat } func (r *environmentResource) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { - conn := r.Meta().M2Client(ctx) - - var state environmentResourceModel - response.Diagnostics.Append(request.State.Get(ctx, &state)...) + var data environmentResourceModel + response.Diagnostics.Append(request.State.Get(ctx, &data)...) if response.Diagnostics.HasError() { return } - out, err := findEnvironmentByID(ctx, conn, state.ID.ValueString()) + if err := data.InitFromID(); err != nil { + response.Diagnostics.AddError("parsing resource ID", err.Error()) + + return + } + + conn := r.Meta().M2Client(ctx) + + out, err := findEnvironmentByID(ctx, conn, data.ID.ValueString()) + if tfresource.NotFound(err) { + response.Diagnostics.Append(fwdiag.NewResourceNotFoundWarningDiagnostic(err)) response.State.RemoveResource(ctx) + return } + if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameEnvironment, state.ID.String(), err), - err.Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("reading Mainframe Modernization Environment (%s)", data.ID.ValueString()), err.Error()) + return } - response.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) - response.Diagnostics.Append(response.State.Set(ctx, &state)...) + response.Diagnostics.Append(data.refreshFromOutput(ctx, out)...) + response.Diagnostics.Append(response.State.Set(ctx, &data)...) } func (r *environmentResource) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { @@ -389,7 +397,7 @@ func (r *environmentResource) Update(ctx context.Context, request resource.Updat return } - plan.ID = flex.StringToFramework(ctx, out.EnvironmentId) + plan.ID = fwflex.StringToFramework(ctx, out.EnvironmentId) updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) env, err := waitEnvironmentUpdated(ctx, conn, plan.ID.ValueString(), updateTimeout) @@ -401,7 +409,7 @@ func (r *environmentResource) Update(ctx context.Context, request resource.Updat return } - response.Diagnostics.Append(flex.Flatten(ctx, env, &plan)...) + response.Diagnostics.Append(fwflex.Flatten(ctx, env, &plan)...) if response.Diagnostics.HasError() { return @@ -412,28 +420,28 @@ func (r *environmentResource) Update(ctx context.Context, request resource.Updat func (r *environmentResource) updateEnvironmentInput(ctx context.Context, plan, state environmentResourceModel, resp *resource.UpdateResponse) (*m2.UpdateEnvironmentInput, bool) { in := &m2.UpdateEnvironmentInput{ - EnvironmentId: flex.StringFromFramework(ctx, plan.ID), + EnvironmentId: fwflex.StringFromFramework(ctx, plan.ID), } if r.hasChangesForMaintenance(plan, state) { in.ApplyDuringMaintenanceWindow = true - in.EngineVersion = flex.StringFromFramework(ctx, plan.EngineVersion) + in.EngineVersion = fwflex.StringFromFramework(ctx, plan.EngineVersion) } else if r.hasChanges(plan, state) { if !plan.EngineVersion.Equal(state.EngineVersion) { - in.EngineVersion = flex.StringFromFramework(ctx, plan.EngineVersion) + in.EngineVersion = fwflex.StringFromFramework(ctx, plan.EngineVersion) } if !plan.InstanceType.Equal(state.InstanceType) { - in.InstanceType = flex.StringFromFramework(ctx, plan.InstanceType) + in.InstanceType = fwflex.StringFromFramework(ctx, plan.InstanceType) } if !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) { - in.PreferredMaintenanceWindow = flex.StringFromFramework(ctx, plan.PreferredMaintenanceWindow) + in.PreferredMaintenanceWindow = fwflex.StringFromFramework(ctx, plan.PreferredMaintenanceWindow) } if !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) { v, d := plan.HighAvailabilityConfig.ToSlice(ctx) resp.Diagnostics.Append(d...) if len(v) > 0 { - in.DesiredCapacity = flex.Int32FromFramework(ctx, v[0].DesiredCapacity) + in.DesiredCapacity = fwflex.Int32FromFramework(ctx, v[0].DesiredCapacity) } } } else { @@ -447,37 +455,31 @@ func (r *environmentResource) updateEnvironmentInput(ctx context.Context, plan, } func (r *environmentResource) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { - conn := r.Meta().M2Client(ctx) - - var state environmentResourceModel - response.Diagnostics.Append(request.State.Get(ctx, &state)...) + var data environmentResourceModel + response.Diagnostics.Append(request.State.Get(ctx, &data)...) if response.Diagnostics.HasError() { return } - in := &m2.DeleteEnvironmentInput{ - EnvironmentId: aws.String(state.ID.ValueString()), + conn := r.Meta().M2Client(ctx) + + _, err := conn.DeleteEnvironment(ctx, &m2.DeleteEnvironmentInput{ + EnvironmentId: aws.String(data.ID.ValueString()), + }) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return } - _, err := conn.DeleteEnvironment(ctx, in) if err != nil { - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return - } - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameEnvironment, state.ID.String(), err), - err.Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("deleting Mainframe Modernization Environment (%s)", data.ID.ValueString()), err.Error()) + return } - deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) - _, err = waitEnvironmentDeleted(ctx, conn, state.ID.ValueString(), deleteTimeout) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameEnvironment, state.ID.String(), err), - err.Error(), - ) + if _, err := waitEnvironmentDeleted(ctx, conn, data.ID.ValueString(), r.DeleteTimeout(ctx, data.Timeouts)); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Environment (%s) delete", data.ID.ValueString()), err.Error()) + return } } @@ -583,9 +585,9 @@ func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, tim func (rd *environmentResourceModel) refreshFromOutput(ctx context.Context, out *m2.GetEnvironmentOutput) diag.Diagnostics { var diags diag.Diagnostics - diags.Append(flex.Flatten(ctx, out, rd)...) - rd.ARN = flex.StringToFramework(ctx, out.EnvironmentArn) - rd.ID = flex.StringToFramework(ctx, out.EnvironmentId) + diags.Append(fwflex.Flatten(ctx, out, rd)...) + rd.ARN = fwflex.StringToFramework(ctx, out.EnvironmentArn) + rd.ID = fwflex.StringToFramework(ctx, out.EnvironmentId) storage, d := flattenStorageConfigurations(ctx, out.StorageConfigurations) diags.Append(d...) rd.StorageConfiguration = storage @@ -693,8 +695,8 @@ func expandStorageConfigurationMemberEFS(ctx context.Context, efsStorageConfigur return &awstypes.StorageConfigurationMemberEfs{ Value: awstypes.EfsStorageConfiguration{ - FileSystemId: flex.StringFromFramework(ctx, efsStorageConfigurationModels[0].FileSystemID), - MountPoint: flex.StringFromFramework(ctx, efsStorageConfigurationModels[0].MountPoint), + FileSystemId: fwflex.StringFromFramework(ctx, efsStorageConfigurationModels[0].FileSystemID), + MountPoint: fwflex.StringFromFramework(ctx, efsStorageConfigurationModels[0].MountPoint), }, } } @@ -706,8 +708,8 @@ func expandStorageConfigurationMemberFSX(ctx context.Context, fsxStorageConfigur return &awstypes.StorageConfigurationMemberFsx{ Value: awstypes.FsxStorageConfiguration{ - FileSystemId: flex.StringFromFramework(ctx, fsxStorageConfigurationModels[0].FileSystemID), - MountPoint: flex.StringFromFramework(ctx, fsxStorageConfigurationModels[0].MountPoint), + FileSystemId: fwflex.StringFromFramework(ctx, fsxStorageConfigurationModels[0].FileSystemID), + MountPoint: fwflex.StringFromFramework(ctx, fsxStorageConfigurationModels[0].MountPoint), }, } } @@ -741,8 +743,8 @@ func flattenMountPoint(ctx context.Context, fileSystemId, mountPoint *string, mo var diags diag.Diagnostics obj := map[string]attr.Value{ - "file_system_id": flex.StringToFramework(ctx, fileSystemId), - "mount_point": flex.StringToFramework(ctx, mountPoint), + "file_system_id": fwflex.StringToFramework(ctx, fileSystemId), + "mount_point": fwflex.StringToFramework(ctx, mountPoint), } mountValue, d := types.ObjectValue(mountAttrTypes, obj) From af88268cac40facb41902696518fe28bfffca588 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Thu, 21 Mar 2024 17:24:54 -0400 Subject: [PATCH 092/126] r/aws_m2_environment: Change 'expandStorageConfigurations'. --- internal/service/m2/environment.go | 106 ++++++++++++++--------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index f6190164129..17d32c52307 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -101,7 +101,7 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem }, }, "environment_id": framework.IDAttribute(), - "force_update": schema.BoolAttribute{ // TODO ???? + "force_update": schema.BoolAttribute{ Optional: true, }, names.AttrID: framework.IDAttribute(), @@ -130,7 +130,7 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem stringplanmodifier.RequiresReplace(), }, }, - "preferred_maintenance_window": schema.StringAttribute{ // TODO Custom type? + "preferred_maintenance_window": schema.StringAttribute{ // TODO Custom type? See internal/types/timestamp/timestamp.go. Optional: true, Computed: true, PlanModifiers: []planmodifier.String{ @@ -203,6 +203,7 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem NestedObject: schema.NestedBlockObject{ Blocks: map[string]schema.Block{ "efs": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[efsStorageConfigurationModel](ctx), Validators: []validator.List{ listvalidator.SizeAtMost(1), listvalidator.ExactlyOneOf( @@ -231,6 +232,7 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem }, }, "fsx": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[fsxStorageConfigurationModel](ctx), Validators: []validator.List{ listvalidator.SizeAtMost(1), }, @@ -275,18 +277,19 @@ func (r *environmentResource) Create(ctx context.Context, request resource.Creat conn := r.Meta().M2Client(ctx) - // We can't use AutoFlEx for StorageConfigurations as it's a union. + // We can't use AutoFlEx with the top-level resource model because the API structure uses Go interfaces. var storageConfigurations []awstypes.StorageConfiguration if !data.StorageConfiguration.IsNull() { - var storageConfigurationModels []storageConfigurationModel - response.Diagnostics.Append(data.StorageConfiguration.ElementsAs(ctx, &storageConfigurationModels, false)...) + var diags diag.Diagnostics + + storageConfigurationsData, diags := data.StorageConfiguration.ToSlice(ctx) + response.Diagnostics.Append(diags...) if response.Diagnostics.HasError() { return } - var d diag.Diagnostics - storageConfigurations, d = expandStorageConfigurations(ctx, storageConfigurationModels) - response.Diagnostics.Append(d...) + storageConfigurations, diags = expandStorageConfigurations(ctx, storageConfigurationsData) + response.Diagnostics.Append(diags...) if response.Diagnostics.HasError() { return } @@ -347,7 +350,7 @@ func (r *environmentResource) Read(ctx context.Context, request resource.ReadReq conn := r.Meta().M2Client(ctx) - out, err := findEnvironmentByID(ctx, conn, data.ID.ValueString()) + output, err := findEnvironmentByID(ctx, conn, data.ID.ValueString()) if tfresource.NotFound(err) { response.Diagnostics.Append(fwdiag.NewResourceNotFoundWarningDiagnostic(err)) @@ -362,7 +365,12 @@ func (r *environmentResource) Read(ctx context.Context, request resource.ReadReq return } - response.Diagnostics.Append(data.refreshFromOutput(ctx, out)...) + // Set attributes for import. + response.Diagnostics.Append(fwflex.Flatten(ctx, output, &data)...) + if response.Diagnostics.HasError() { + return + } + response.Diagnostics.Append(response.State.Set(ctx, &data)...) } @@ -484,6 +492,10 @@ func (r *environmentResource) Delete(ctx context.Context, request resource.Delet } } +func (r *environmentResource) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { + r.SetTagsAll(ctx, request, response) +} + func findEnvironmentByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetEnvironmentOutput, error) { input := &m2.GetEnvironmentInput{ EnvironmentId: aws.String(id), @@ -630,8 +642,8 @@ func (model *environmentResourceModel) setID() { } type storageConfigurationModel struct { - EFS types.List `tfsdk:"efs"` - FSX types.List `tfsdk:"fsx"` + EFS fwtypes.ListNestedObjectValueOf[efsStorageConfigurationModel] `tfsdk:"efs"` + FSX fwtypes.ListNestedObjectValueOf[fsxStorageConfigurationModel] `tfsdk:"fsx"` } type efsStorageConfigurationModel struct { @@ -662,56 +674,44 @@ var ( } ) -func (r *environmentResource) ModifyPlan(ctx context.Context, req resource.ModifyPlanRequest, resp *resource.ModifyPlanResponse) { - r.SetTagsAll(ctx, req, resp) -} - -func expandStorageConfigurations(ctx context.Context, storageConfigurationModels []storageConfigurationModel) ([]awstypes.StorageConfiguration, diag.Diagnostics) { +func expandStorageConfigurations(ctx context.Context, storageConfigurationsData []*storageConfigurationModel) ([]awstypes.StorageConfiguration, diag.Diagnostics) { var diags diag.Diagnostics storageConfigurations := []awstypes.StorageConfiguration{} - for _, item := range storageConfigurationModels { - if !item.EFS.IsNull() && (len(item.EFS.Elements()) > 0) { - var efsStorageConfigurationModels []efsStorageConfigurationModel - diags.Append(item.EFS.ElementsAs(ctx, &efsStorageConfigurationModels, false)...) - v := expandStorageConfigurationMemberEFS(ctx, efsStorageConfigurationModels) - storageConfigurations = append(storageConfigurations, v) - } - if !item.FSX.IsNull() && (len(item.FSX.Elements()) > 0) { - var fsxStorageConfigurationModels []fsxStorageConfigurationModel - diags.Append(item.FSX.ElementsAs(ctx, &fsxStorageConfigurationModels, false)...) - v := expandStorageConfigurationMemberFSX(ctx, fsxStorageConfigurationModels) - storageConfigurations = append(storageConfigurations, v) - } - } + for _, item := range storageConfigurationsData { + if !item.EFS.IsNull() { + efsStorageConfigurationData, d := item.EFS.ToPtr(ctx) + diags.Append(d...) + if diags.HasError() { + return nil, diags + } - return storageConfigurations, diags -} + storageConfiguration := &awstypes.StorageConfigurationMemberEfs{} + diags.Append(fwflex.Expand(ctx, efsStorageConfigurationData, &storageConfiguration.Value)...) + if diags.HasError() { + return nil, diags + } -func expandStorageConfigurationMemberEFS(ctx context.Context, efsStorageConfigurationModels []efsStorageConfigurationModel) *awstypes.StorageConfigurationMemberEfs { - if len(efsStorageConfigurationModels) == 0 { - return nil - } + storageConfigurations = append(storageConfigurations, storageConfiguration) + } + if !item.FSX.IsNull() { + fsxStorageConfigurationData, d := item.FSX.ToPtr(ctx) + diags.Append(d...) + if diags.HasError() { + return nil, diags + } - return &awstypes.StorageConfigurationMemberEfs{ - Value: awstypes.EfsStorageConfiguration{ - FileSystemId: fwflex.StringFromFramework(ctx, efsStorageConfigurationModels[0].FileSystemID), - MountPoint: fwflex.StringFromFramework(ctx, efsStorageConfigurationModels[0].MountPoint), - }, - } -} + storageConfiguration := &awstypes.StorageConfigurationMemberFsx{} + diags.Append(fwflex.Expand(ctx, fsxStorageConfigurationData, &storageConfiguration.Value)...) + if diags.HasError() { + return nil, diags + } -func expandStorageConfigurationMemberFSX(ctx context.Context, fsxStorageConfigurationModels []fsxStorageConfigurationModel) *awstypes.StorageConfigurationMemberFsx { - if len(fsxStorageConfigurationModels) == 0 { - return nil + storageConfigurations = append(storageConfigurations, storageConfiguration) + } } - return &awstypes.StorageConfigurationMemberFsx{ - Value: awstypes.FsxStorageConfiguration{ - FileSystemId: fwflex.StringFromFramework(ctx, fsxStorageConfigurationModels[0].FileSystemID), - MountPoint: fwflex.StringFromFramework(ctx, fsxStorageConfigurationModels[0].MountPoint), - }, - } + return storageConfigurations, diags } func flattenStorageConfigurations(ctx context.Context, apiObject []awstypes.StorageConfiguration) (types.List, diag.Diagnostics) { From aecf0608c4cd426b479dcc8e7442b73cc8c6d884 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 08:25:57 -0400 Subject: [PATCH 093/126] r/aws_m2_environment: Tidy up Read. --- internal/service/m2/environment.go | 129 ++++++++++++----------------- 1 file changed, 54 insertions(+), 75 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 17d32c52307..2f8a4d7a726 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -277,35 +277,33 @@ func (r *environmentResource) Create(ctx context.Context, request resource.Creat conn := r.Meta().M2Client(ctx) - // We can't use AutoFlEx with the top-level resource model because the API structure uses Go interfaces. - var storageConfigurations []awstypes.StorageConfiguration - if !data.StorageConfiguration.IsNull() { - var diags diag.Diagnostics + name := data.Name.ValueString() + input := &m2.CreateEnvironmentInput{} + response.Diagnostics.Append(fwflex.Expand(ctx, data, input)...) + if response.Diagnostics.HasError() { + return + } - storageConfigurationsData, diags := data.StorageConfiguration.ToSlice(ctx) + // AutoFlEx doesn't yet handle union types. + if !data.StorageConfigurations.IsNull() { + storageConfigurationsData, diags := data.StorageConfigurations.ToSlice(ctx) response.Diagnostics.Append(diags...) if response.Diagnostics.HasError() { return } - storageConfigurations, diags = expandStorageConfigurations(ctx, storageConfigurationsData) + storageConfigurations, diags := expandStorageConfigurations(ctx, storageConfigurationsData) response.Diagnostics.Append(diags...) if response.Diagnostics.HasError() { return } - } - name := data.Name.ValueString() - input := &m2.CreateEnvironmentInput{} - response.Diagnostics.Append(fwflex.Expand(ctx, data, input)...) - if response.Diagnostics.HasError() { - return + input.StorageConfigurations = storageConfigurations } // Additional fields. input.ClientToken = aws.String(sdkid.UniqueId()) input.Tags = getTagsIn(ctx) - input.StorageConfigurations = storageConfigurations output, err := conn.CreateEnvironment(ctx, input) @@ -371,6 +369,17 @@ func (r *environmentResource) Read(ctx context.Context, request resource.ReadReq return } + // AutoFlEx doesn't yet handle union types. + if output.StorageConfigurations != nil { + x, diags := flattenStorageConfigurations(ctx, output.StorageConfigurations) + response.Diagnostics.Append(diags...) + if response.Diagnostics.HasError() { + return + } + + data.StorageConfigurations = fwtypes.NewListNestedObjectValueOfSliceMust(ctx, x) + } + response.Diagnostics.Append(response.State.Set(ctx, &data)...) } @@ -602,7 +611,7 @@ func (rd *environmentResourceModel) refreshFromOutput(ctx context.Context, out * rd.ID = fwflex.StringToFramework(ctx, out.EnvironmentId) storage, d := flattenStorageConfigurations(ctx, out.StorageConfigurations) diags.Append(d...) - rd.StorageConfiguration = storage + rd.StorageConfigurations = storage return diags } @@ -624,7 +633,7 @@ type environmentResourceModel struct { PreferredMaintenanceWindow types.String `tfsdk:"preferred_maintenance_window"` PubliclyAccessible types.Bool `tfsdk:"publicly_accessible"` SecurityGroupIDs fwtypes.SetValueOf[types.String] `tfsdk:"security_group_ids"` - StorageConfiguration fwtypes.ListNestedObjectValueOf[storageConfigurationModel] `tfsdk:"storage_configuration"` + StorageConfigurations fwtypes.ListNestedObjectValueOf[storageConfigurationModel] `tfsdk:"storage_configuration"` SubnetIDs fwtypes.SetValueOf[types.String] `tfsdk:"subnet_ids"` Tags types.Map `tfsdk:"tags"` TagsAll types.Map `tfsdk:"tags_all"` @@ -676,7 +685,7 @@ var ( func expandStorageConfigurations(ctx context.Context, storageConfigurationsData []*storageConfigurationModel) ([]awstypes.StorageConfiguration, diag.Diagnostics) { var diags diag.Diagnostics - storageConfigurations := []awstypes.StorageConfiguration{} + apiObjects := []awstypes.StorageConfiguration{} for _, item := range storageConfigurationsData { if !item.EFS.IsNull() { @@ -686,13 +695,13 @@ func expandStorageConfigurations(ctx context.Context, storageConfigurationsData return nil, diags } - storageConfiguration := &awstypes.StorageConfigurationMemberEfs{} - diags.Append(fwflex.Expand(ctx, efsStorageConfigurationData, &storageConfiguration.Value)...) + apiObject := &awstypes.StorageConfigurationMemberEfs{} + diags.Append(fwflex.Expand(ctx, efsStorageConfigurationData, &apiObject.Value)...) if diags.HasError() { return nil, diags } - storageConfigurations = append(storageConfigurations, storageConfiguration) + apiObjects = append(apiObjects, apiObject) } if !item.FSX.IsNull() { fsxStorageConfigurationData, d := item.FSX.ToPtr(ctx) @@ -701,82 +710,52 @@ func expandStorageConfigurations(ctx context.Context, storageConfigurationsData return nil, diags } - storageConfiguration := &awstypes.StorageConfigurationMemberFsx{} - diags.Append(fwflex.Expand(ctx, fsxStorageConfigurationData, &storageConfiguration.Value)...) + apiObject := &awstypes.StorageConfigurationMemberFsx{} + diags.Append(fwflex.Expand(ctx, fsxStorageConfigurationData, &apiObject.Value)...) if diags.HasError() { return nil, diags } - storageConfigurations = append(storageConfigurations, storageConfiguration) + apiObjects = append(apiObjects, apiObject) } } - return storageConfigurations, diags + return apiObjects, diags } -func flattenStorageConfigurations(ctx context.Context, apiObject []awstypes.StorageConfiguration) (types.List, diag.Diagnostics) { +func flattenStorageConfigurations(ctx context.Context, apiObjects []awstypes.StorageConfiguration) ([]*storageConfigurationModel, diag.Diagnostics) { var diags diag.Diagnostics - elemType := types.ObjectType{AttrTypes: storageDataAttrTypes} - - elems := []attr.Value{} + var storageConfigurationsData []*storageConfigurationModel - for _, config := range apiObject { - switch v := config.(type) { + for _, apiObject := range apiObjects { + switch v := apiObject.(type) { case *awstypes.StorageConfigurationMemberEfs: - mountPoint, d := flattenMountPoint(ctx, v.Value.FileSystemId, v.Value.MountPoint, "efs") - elems = append(elems, mountPoint) + var efsStorageConfigurationData efsStorageConfigurationModel + d := fwflex.Flatten(ctx, &v.Value, &efsStorageConfigurationData) diags.Append(d...) + if diags.HasError() { + return nil, diags + } + + storageConfigurationsData = append(storageConfigurationsData, &storageConfigurationModel{ + EFS: fwtypes.NewListNestedObjectValueOfPtrMust(ctx, &efsStorageConfigurationData), + }) case *awstypes.StorageConfigurationMemberFsx: - mountPoint, d := flattenMountPoint(ctx, v.Value.FileSystemId, v.Value.MountPoint, "fsx") - elems = append(elems, mountPoint) + var fsxStorageConfigurationData fsxStorageConfigurationModel + d := fwflex.Flatten(ctx, &v.Value, &fsxStorageConfigurationData) diags.Append(d...) - } - } - listVal, d := types.ListValue(elemType, elems) - diags.Append(d...) - - return listVal, diags -} - -func flattenMountPoint(ctx context.Context, fileSystemId, mountPoint *string, mountType string) (attr.Value, diag.Diagnostics) { - var diags diag.Diagnostics - - obj := map[string]attr.Value{ - "file_system_id": fwflex.StringToFramework(ctx, fileSystemId), - "mount_point": fwflex.StringToFramework(ctx, mountPoint), - } - - mountValue, d := types.ObjectValue(mountAttrTypes, obj) - diags.Append(d...) - if diags.HasError() { - return nil, diags - } - - mountList := []attr.Value{ - mountValue, - } - - mountListValue, d := types.ListValue(mountObjectType, mountList) - diags.Append(d...) - if diags.HasError() { - return nil, diags - } - - configMap := map[string]attr.Value{ - mountType: mountListValue, - } + if diags.HasError() { + return nil, diags + } - for k := range storageDataAttrTypes { - if k != mountType { - configMap[k] = types.ListNull(mountObjectType) + storageConfigurationsData = append(storageConfigurationsData, &storageConfigurationModel{ + FSX: fwtypes.NewListNestedObjectValueOfPtrMust(ctx, &fsxStorageConfigurationData), + }) } } - configValue, d := types.ObjectValue(storageDataAttrTypes, configMap) - diags.Append(d...) - - return configValue, diags + return storageConfigurationsData, diags } func (r *environmentResource) hasChanges(plan, state environmentResourceModel) bool { From dc9034a59d251f1b271067a4f42857e128d402db Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 08:45:47 -0400 Subject: [PATCH 094/126] r/aws_m2_environment: Tidy up Update. --- internal/service/m2/environment.go | 158 +++++++++-------------------- 1 file changed, 49 insertions(+), 109 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 2f8a4d7a726..321dd4daa68 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -18,7 +18,6 @@ import ( "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/setvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" - "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" @@ -32,7 +31,6 @@ import ( "github.com/hashicorp/terraform-plugin-framework/types" sdkid "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" - "github.com/hashicorp/terraform-provider-aws/internal/create" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/fwdiag" @@ -384,91 +382,71 @@ func (r *environmentResource) Read(ctx context.Context, request resource.ReadReq } func (r *environmentResource) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { - conn := r.Meta().M2Client(ctx) - - var plan, state environmentResourceModel - response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) - response.Diagnostics.Append(request.State.Get(ctx, &state)...) + var old, new environmentResourceModel + response.Diagnostics.Append(request.Plan.Get(ctx, &new)...) if response.Diagnostics.HasError() { return } - - in, updateRequired := r.updateEnvironmentInput(ctx, plan, state, response) - if !updateRequired { - return - } - - out, err := conn.UpdateEnvironment(ctx, in) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, plan.ID.String(), err), - err.Error(), - ) - return - } - if out == nil || out.EnvironmentId == nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameEnvironment, plan.ID.String(), nil), - errors.New("empty output").Error(), - ) - return - } - - plan.ID = fwflex.StringToFramework(ctx, out.EnvironmentId) - - updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) - env, err := waitEnvironmentUpdated(ctx, conn, plan.ID.ValueString(), updateTimeout) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameEnvironment, plan.ID.String(), err), - err.Error(), - ) - return - } - - response.Diagnostics.Append(fwflex.Flatten(ctx, env, &plan)...) - + response.Diagnostics.Append(request.State.Get(ctx, &old)...) if response.Diagnostics.HasError() { return } - response.Diagnostics.Append(response.State.Set(ctx, &plan)...) -} + conn := r.Meta().M2Client(ctx) -func (r *environmentResource) updateEnvironmentInput(ctx context.Context, plan, state environmentResourceModel, resp *resource.UpdateResponse) (*m2.UpdateEnvironmentInput, bool) { - in := &m2.UpdateEnvironmentInput{ - EnvironmentId: fwflex.StringFromFramework(ctx, plan.ID), - } + if !new.EngineVersion.Equal(old.EngineVersion) || + !new.HighAvailabilityConfig.Equal(old.HighAvailabilityConfig) || + !new.InstanceType.Equal(old.InstanceType) || + !new.PreferredMaintenanceWindow.Equal(old.PreferredMaintenanceWindow) { + input := &m2.UpdateEnvironmentInput{ + EnvironmentId: fwflex.StringFromFramework(ctx, new.ID), + } - if r.hasChangesForMaintenance(plan, state) { - in.ApplyDuringMaintenanceWindow = true - in.EngineVersion = fwflex.StringFromFramework(ctx, plan.EngineVersion) - } else if r.hasChanges(plan, state) { - if !plan.EngineVersion.Equal(state.EngineVersion) { - in.EngineVersion = fwflex.StringFromFramework(ctx, plan.EngineVersion) + if !new.ForceUpdate.IsNull() { + input.ForceUpdate = new.ForceUpdate.ValueBool() } - if !plan.InstanceType.Equal(state.InstanceType) { - in.InstanceType = fwflex.StringFromFramework(ctx, plan.InstanceType) + + // https://docs.aws.amazon.com/m2/latest/APIReference/API_UpdateEnvironment.html#m2-UpdateEnvironment-request-applyDuringMaintenanceWindow. + // "Currently, AWS Mainframe Modernization accepts the engineVersion parameter only if applyDuringMaintenanceWindow is true. If any parameter other than engineVersion is provided in UpdateEnvironmentRequest, it will fail if applyDuringMaintenanceWindow is set to true." + if new.ApplyDuringMaintenanceWindow.ValueBool() && !new.EngineVersion.Equal(old.EngineVersion) { + input.ApplyDuringMaintenanceWindow = true + input.EngineVersion = fwflex.StringFromFramework(ctx, new.EngineVersion) + } else { + if !new.EngineVersion.Equal(old.EngineVersion) { + input.EngineVersion = fwflex.StringFromFramework(ctx, new.EngineVersion) + } + if !new.HighAvailabilityConfig.Equal(old.HighAvailabilityConfig) { + highAvailabilityConfigData, diags := new.HighAvailabilityConfig.ToPtr(ctx) + response.Diagnostics.Append(diags...) + if response.Diagnostics.HasError() { + return + } + + input.DesiredCapacity = fwflex.Int32FromFramework(ctx, highAvailabilityConfigData.DesiredCapacity) + } + if !new.InstanceType.Equal(old.InstanceType) { + input.InstanceType = fwflex.StringFromFramework(ctx, new.InstanceType) + } + if !new.PreferredMaintenanceWindow.Equal(old.PreferredMaintenanceWindow) { + input.PreferredMaintenanceWindow = fwflex.StringFromFramework(ctx, new.PreferredMaintenanceWindow) + } } - if !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) { - in.PreferredMaintenanceWindow = fwflex.StringFromFramework(ctx, plan.PreferredMaintenanceWindow) + _, err := conn.UpdateEnvironment(ctx, input) + + if err != nil { + response.Diagnostics.AddError(fmt.Sprintf("updating Mainframe Modernization Environment (%s)", new.ID.ValueString()), err.Error()) + + return } - if !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) { - v, d := plan.HighAvailabilityConfig.ToSlice(ctx) - resp.Diagnostics.Append(d...) - if len(v) > 0 { - in.DesiredCapacity = fwflex.Int32FromFramework(ctx, v[0].DesiredCapacity) - } + if _, err := waitEnvironmentUpdated(ctx, conn, new.ID.ValueString(), r.UpdateTimeout(ctx, new.Timeouts)); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Environment (%s) update", new.ID.ValueString()), err.Error()) + + return } - } else { - return nil, false } - if !plan.ForceUpdate.IsNull() { - in.ForceUpdate = plan.ForceUpdate.ValueBool() - } - return in, true + response.Diagnostics.Append(response.State.Set(ctx, &new)...) } func (r *environmentResource) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { @@ -603,19 +581,6 @@ func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, tim return nil, err } -func (rd *environmentResourceModel) refreshFromOutput(ctx context.Context, out *m2.GetEnvironmentOutput) diag.Diagnostics { - var diags diag.Diagnostics - - diags.Append(fwflex.Flatten(ctx, out, rd)...) - rd.ARN = fwflex.StringToFramework(ctx, out.EnvironmentArn) - rd.ID = fwflex.StringToFramework(ctx, out.EnvironmentId) - storage, d := flattenStorageConfigurations(ctx, out.StorageConfigurations) - diags.Append(d...) - rd.StorageConfigurations = storage - - return diags -} - type environmentResourceModel struct { ARN types.String `tfsdk:"arn"` ApplyDuringMaintenanceWindow types.Bool `tfsdk:"apply_changes_during_maintenance_window"` @@ -669,20 +634,6 @@ type highAvailabilityConfigModel struct { DesiredCapacity types.Int64 `tfsdk:"desired_capacity"` } -var ( - storageDataAttrTypes = map[string]attr.Type{ - "efs": types.ListType{ElemType: mountObjectType}, - "fsx": types.ListType{ElemType: mountObjectType}, - } - - mountObjectType = types.ObjectType{AttrTypes: mountAttrTypes} - - mountAttrTypes = map[string]attr.Type{ - "file_system_id": types.StringType, - "mount_point": types.StringType, - } -) - func expandStorageConfigurations(ctx context.Context, storageConfigurationsData []*storageConfigurationModel) ([]awstypes.StorageConfiguration, diag.Diagnostics) { var diags diag.Diagnostics apiObjects := []awstypes.StorageConfiguration{} @@ -757,14 +708,3 @@ func flattenStorageConfigurations(ctx context.Context, apiObjects []awstypes.Sto return storageConfigurationsData, diags } - -func (r *environmentResource) hasChanges(plan, state environmentResourceModel) bool { - return !plan.HighAvailabilityConfig.Equal(state.HighAvailabilityConfig) || - !plan.EngineVersion.Equal(state.EngineVersion) || - !plan.InstanceType.Equal(state.EngineType) || - !plan.PreferredMaintenanceWindow.Equal(state.PreferredMaintenanceWindow) -} - -func (r *environmentResource) hasChangesForMaintenance(plan, state environmentResourceModel) bool { - return plan.ApplyDuringMaintenanceWindow.ValueBool() && !plan.EngineVersion.Equal(state.EngineVersion) -} From 1ad86b20e57f82e13f96ac9f0a790a8df15afc11 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 08:51:43 -0400 Subject: [PATCH 095/126] r/aws_m2_environment: Tidy up acceptance tests. --- internal/service/m2/environment_test.go | 99 +++++++++---------------- internal/service/m2/exports_test.go | 2 + 2 files changed, 38 insertions(+), 63 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 506d3273b47..dc2b5ce710b 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -5,38 +5,31 @@ package m2_test import ( "context" - "errors" "fmt" "testing" "github.com/YakDriver/regexache" - "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" - "github.com/aws/aws-sdk-go-v2/service/m2/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-aws/internal/acctest" "github.com/hashicorp/terraform-provider-aws/internal/conns" - "github.com/hashicorp/terraform-provider-aws/internal/create" - "github.com/hashicorp/terraform-provider-aws/internal/errs" tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) const ( - testEngineType = "bluage" - testEngineVersion = "3.7.0" + testAccEngineType = "bluage" + testAccEngineVersion = "3.7.0" ) func TestAccM2Environment_basic(t *testing.T) { ctx := acctest.Context(t) - // TIP: This is a long-running test guard for tests that run longer than - // 300s (5 min) generally. if testing.Short() { t.Skip("skipping long-running test in short mode") } - var environment m2.GetEnvironmentOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_environment.test" @@ -52,12 +45,12 @@ func TestAccM2Environment_basic(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion), + Config: testAccEnvironmentConfig_basic(rName, testAccEngineType, testAccEngineVersion), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), @@ -81,7 +74,6 @@ func TestAccM2Environment_full(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") } - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_environment.test" var environment m2.GetEnvironmentOutput @@ -116,12 +108,9 @@ func TestAccM2Environment_full(t *testing.T) { func TestAccM2Environment_update(t *testing.T) { ctx := acctest.Context(t) - // TIP: This is a long-running test guard for tests that run longer than - // 300s (5 min) generally. if testing.Short() { t.Skip("skipping long-running test in short mode") } - var environment m2.GetEnvironmentOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_environment.test" @@ -137,12 +126,12 @@ func TestAccM2Environment_update(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_highAvailability(rName, testEngineType, testEngineVersion, 2), + Config: testAccEnvironmentConfig_highAvailability(rName, testAccEngineType, testAccEngineVersion, 2), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), @@ -153,12 +142,12 @@ func TestAccM2Environment_update(t *testing.T) { ), }, { - Config: testAccEnvironmentConfig_update(rName, testEngineType, testEngineVersion, 1), + Config: testAccEnvironmentConfig_update(rName, testAccEngineType, testAccEngineVersion, 1), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "1"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), @@ -175,12 +164,9 @@ func TestAccM2Environment_update(t *testing.T) { func TestAccM2Environment_highAvailability(t *testing.T) { ctx := acctest.Context(t) - // TIP: This is a long-running test guard for tests that run longer than - // 300s (5 min) generally. if testing.Short() { t.Skip("skipping long-running test in short mode") } - var environment m2.GetEnvironmentOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_environment.test" @@ -196,12 +182,12 @@ func TestAccM2Environment_highAvailability(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_highAvailability(rName, testEngineType, testEngineVersion, 2), + Config: testAccEnvironmentConfig_highAvailability(rName, testAccEngineType, testAccEngineVersion, 2), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), @@ -222,12 +208,9 @@ func TestAccM2Environment_highAvailability(t *testing.T) { func TestAccM2Environment_efs(t *testing.T) { ctx := acctest.Context(t) - // TIP: This is a long-running test guard for tests that run longer than - // 300s (5 min) generally. if testing.Short() { t.Skip("skipping long-running test in short mode") } - var environment m2.GetEnvironmentOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_environment.test" @@ -243,12 +226,12 @@ func TestAccM2Environment_efs(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_efsComplete(rName, testEngineType, testEngineVersion), + Config: testAccEnvironmentConfig_efsComplete(rName, testAccEngineType, testAccEngineVersion), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), @@ -267,8 +250,6 @@ func TestAccM2Environment_efs(t *testing.T) { } func TestAccM2Environment_fsx(t *testing.T) { ctx := acctest.Context(t) - // TIP: This is a long-running test guard for tests that run longer than - // 300s (5 min) generally. if testing.Short() { t.Skip("skipping long-running test in short mode") } @@ -276,7 +257,6 @@ func TestAccM2Environment_fsx(t *testing.T) { var environment m2.GetEnvironmentOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_environment.test" - resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { acctest.PreCheck(ctx, t) @@ -288,12 +268,12 @@ func TestAccM2Environment_fsx(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_fsxComplete(rName, testEngineType, testEngineVersion), + Config: testAccEnvironmentConfig_fsxComplete(rName, testAccEngineType, testAccEngineVersion), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testEngineVersion), + resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), @@ -315,7 +295,6 @@ func TestAccM2Environment_disappears(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") } - var environment m2.GetEnvironmentOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_environment.test" @@ -331,7 +310,7 @@ func TestAccM2Environment_disappears(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_basic(rName, testEngineType, testEngineVersion), + Config: testAccEnvironmentConfig_basic(rName, testAccEngineType, testAccEngineVersion), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment, resourceName), @@ -347,7 +326,6 @@ func TestAccM2Environment_tags(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") } - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_environment.test" var environment m2.GetEnvironmentOutput @@ -414,44 +392,39 @@ func testAccCheckEnvironmentDestroy(ctx context.Context) resource.TestCheckFunc continue } - _, err := conn.GetEnvironment(ctx, &m2.GetEnvironmentInput{ - EnvironmentId: aws.String(rs.Primary.ID), - }) - if errs.IsA[*types.ResourceNotFoundException](err) { - return nil + _, err := tfm2.FindEnvironmentByID(ctx, conn, rs.Primary.ID) + + if tfresource.NotFound(err) { + continue } + if err != nil { - return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameEnvironment, rs.Primary.ID, err) + return err } - return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameEnvironment, rs.Primary.ID, errors.New("not destroyed")) + return fmt.Errorf("Mainframe Modernization Environment %s still exists", rs.Primary.ID) } return nil } } -func testAccCheckEnvironmentExists(ctx context.Context, name string, environment *m2.GetEnvironmentOutput) resource.TestCheckFunc { +func testAccCheckEnvironmentExists(ctx context.Context, n string, v *m2.GetEnvironmentOutput) resource.TestCheckFunc { return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[name] + rs, ok := s.RootModule().Resources[n] if !ok { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameEnvironment, name, errors.New("not found")) - } - - if rs.Primary.ID == "" { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameEnvironment, name, errors.New("not set")) + return fmt.Errorf("Not found: %s", n) } conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - resp, err := conn.GetEnvironment(ctx, &m2.GetEnvironmentInput{ - EnvironmentId: aws.String(rs.Primary.ID), - }) + + output, err := tfm2.FindEnvironmentByID(ctx, conn, rs.Primary.ID) if err != nil { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameEnvironment, rs.Primary.ID, err) + return err } - *environment = *resp + *v = *output return nil } diff --git a/internal/service/m2/exports_test.go b/internal/service/m2/exports_test.go index f8b6c33aa4b..dabc15012fb 100644 --- a/internal/service/m2/exports_test.go +++ b/internal/service/m2/exports_test.go @@ -6,4 +6,6 @@ package m2 // Exports for use in tests only. var ( ResourceEnvironment = newEnvironmentResource + + FindEnvironmentByID = findEnvironmentByID ) From d3187f10d88709f24b92c45f68ae892e5533e85a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 09:34:13 -0400 Subject: [PATCH 096/126] r/aws_m2_environment: 'description' is not Computed. --- internal/service/m2/environment.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 321dd4daa68..9b7af10ac21 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -73,7 +73,6 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem names.AttrARN: framework.ARNAttributeComputedOnly(), "description": schema.StringAttribute{ Optional: true, - Computed: true, Validators: []validator.String{ stringvalidator.LengthAtMost(500), }, @@ -176,7 +175,6 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem "high_availability_config": schema.ListNestedBlock{ CustomType: fwtypes.NewListNestedObjectTypeOf[highAvailabilityConfigModel](ctx), Validators: []validator.List{ - listvalidator.IsRequired(), listvalidator.SizeAtMost(1), }, NestedObject: schema.NestedBlockObject{ @@ -582,11 +580,11 @@ func waitEnvironmentDeleted(ctx context.Context, conn *m2.Client, id string, tim } type environmentResourceModel struct { - ARN types.String `tfsdk:"arn"` ApplyDuringMaintenanceWindow types.Bool `tfsdk:"apply_changes_during_maintenance_window"` Description types.String `tfsdk:"description"` EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` EngineVersion types.String `tfsdk:"engine_version"` + EnvironmentARN types.String `tfsdk:"arn"` EnvironmentID types.String `tfsdk:"environment_id"` ForceUpdate types.Bool `tfsdk:"force_update"` HighAvailabilityConfig fwtypes.ListNestedObjectValueOf[highAvailabilityConfigModel] `tfsdk:"high_availability_config"` From 024cad0cf1de0d48e3b2ba4dadf1ca14ac02450c Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 10:38:37 -0400 Subject: [PATCH 097/126] r/aws_m2_environment: Tweak 'TestAccM2Environment_basic'. --- internal/service/m2/environment_test.go | 302 ++++++++++-------------- 1 file changed, 126 insertions(+), 176 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index dc2b5ce710b..2cee8cbf416 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -45,19 +45,27 @@ func TestAccM2Environment_basic(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_basic(rName, testAccEngineType, testAccEngineVersion), - Check: resource.ComposeTestCheckFunc( + Config: testAccEnvironmentConfig_basic(rName, testAccEngineType), + Check: resource.ComposeAggregateTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), + resource.TestCheckNoResourceAttr(resourceName, "apply_changes_during_maintenance_window"), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckNoResourceAttr(resourceName, "description"), + resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), + resource.TestCheckResourceAttrSet(resourceName, "engine_version"), + resource.TestCheckResourceAttrSet(resourceName, "environment_id"), + resource.TestCheckNoResourceAttr(resourceName, "force_update"), resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), - resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), - resource.TestCheckResourceAttr(resourceName, "efs_mount.#", "0"), - resource.TestCheckResourceAttr(resourceName, "fsx_mount.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + resource.TestCheckNoResourceAttr(resourceName, "kms_key_id"), + resource.TestCheckResourceAttrSet(resourceName, "load_balancer_arn"), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttrSet(resourceName, "preferred_maintenance_window"), + resource.TestCheckResourceAttr(resourceName, "publicly_accessible", "false"), + acctest.CheckResourceAttrGreaterThanValue(resourceName, "security_group_ids.#", 0), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), + acctest.CheckResourceAttrGreaterThanValue(resourceName, "subnet_ids.#", 0), + resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), ), }, { @@ -135,7 +143,7 @@ func TestAccM2Environment_update(t *testing.T) { acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "security_group_ids.#", "1"), resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), @@ -151,7 +159,7 @@ func TestAccM2Environment_update(t *testing.T) { acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "1"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "security_group_ids.#", "1"), resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m6i.large"), @@ -191,7 +199,7 @@ func TestAccM2Environment_highAvailability(t *testing.T) { acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "security_groups.#", "1"), + resource.TestCheckResourceAttr(resourceName, "security_group_ids.#", "1"), resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), @@ -310,7 +318,7 @@ func TestAccM2Environment_disappears(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_basic(rName, testAccEngineType, testAccEngineVersion), + Config: testAccEnvironmentConfig_basic(rName, testAccEngineType), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment, resourceName), @@ -444,122 +452,8 @@ func testAccPreCheck(ctx context.Context, t *testing.T) { } } -func testAccEnvironmentConfig_basic(rName, engineType, engineVersion string) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), - fmt.Sprintf(` -resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m5.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - - tags = { - key = "value" - } -} -`, rName, engineType, engineVersion)) -} - -func testAccEnvironmentConfig_update(rName, engineType, engineVersion string, desiredCapacity int32) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), - fmt.Sprintf(` -resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m6i.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - - preferred_maintenance_window = "sat:03:35-sat:05:35" - - high_availability_config { - desired_capacity = %[4]d - } - - tags = { - key = "%[4]d" - } -} -`, rName, engineType, engineVersion, desiredCapacity)) -} - -func testAccEnvironmentConfig_highAvailability(rName, engineType, engineVersion string, desiredCapacity int32) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), - fmt.Sprintf(` -resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m5.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - - high_availability_config { - desired_capacity = %[4]d - } - tags = { - key = "%[4]d" - } - -} -`, rName, engineType, engineVersion, desiredCapacity)) -} - -func testAccEnvironmentConfig_efsComplete(rName, engineType, engineVersion string) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), - testAccEnvironmentConfig_efs(rName), - fmt.Sprintf(` -resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m5.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - - storage_configuration { - efs { - file_system_id = aws_efs_file_system.test.id - mount_point = "/m2/mount/example" - } - } -} -`, rName, engineType, engineVersion)) -} - -func testAccEnvironmentConfig_fsxComplete(rName, engineType, engineVersion string) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), - testAccEnvironmentConfig_fsx(rName), - fmt.Sprintf(` -resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m5.large" - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - - storage_configuration { - fsx { - file_system_id = aws_fsx_lustre_file_system.test.id - mount_point = "/m2/mount/example" - } - } -} -`, rName, engineType, engineVersion)) -} - func testAccEnvironmentConfig_base(rName string) string { - return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptInDefaultExclude(), - fmt.Sprintf(` + return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptInDefaultExclude(), fmt.Sprintf(` resource "aws_vpc" "test" { cidr_block = "10.0.0.0/16" enable_dns_support = true @@ -581,8 +475,7 @@ resource "aws_subnet" "test" { Name = %[1]q } } -`, rName), - fmt.Sprintf(` + resource "aws_security_group" "test" { name = %[1]q vpc_id = aws_vpc.test.id @@ -590,6 +483,7 @@ resource "aws_security_group" "test" { tags = { Name = %[1]q } + egress { from_port = 0 to_port = 0 @@ -606,10 +500,59 @@ resource "aws_security_group" "test" { `, rName)) } -func testAccEnvironmentConfig_efs(rName string) string { - return fmt.Sprintf(` +func testAccEnvironmentConfig_basic(rName, engineType string) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` +resource "aws_m2_environment" "test" { + name = %[1]q + engine_type = %[2]q + instance_type = "M2.m5.large" +} +`, rName, engineType)) +} + +func testAccEnvironmentConfig_update(rName, engineType, engineVersion string, desiredCapacity int32) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m6i.large" + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + + preferred_maintenance_window = "sat:03:35-sat:05:35" + + high_availability_config { + desired_capacity = %[4]d + } +} +`, rName, engineType, engineVersion, desiredCapacity)) +} + +func testAccEnvironmentConfig_highAvailability(rName, engineType, engineVersion string, desiredCapacity int32) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), + fmt.Sprintf(` +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + + high_availability_config { + desired_capacity = %[4]d + } +} +`, rName, engineType, engineVersion, desiredCapacity)) +} + +func testAccEnvironmentConfig_efsComplete(rName, engineType, engineVersion string) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), + fmt.Sprintf(` resource "aws_efs_file_system" "test" { - creation_token = %[1]q tags = { Name = %[1]q } @@ -617,9 +560,11 @@ resource "aws_efs_file_system" "test" { resource "aws_efs_access_point" "test" { file_system_id = aws_efs_file_system.test.id + root_directory { path = "/" } + tags = { Name = %[1]q } @@ -632,20 +577,55 @@ resource "aws_efs_mount_target" "test" { subnet_id = aws_subnet.test[count.index].id security_groups = [aws_security_group.test.id] } -`, rName) + +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + + storage_configuration { + efs { + file_system_id = aws_efs_file_system.test.id + mount_point = "/m2/mount/example" + } + } +} +`, rName, engineType, engineVersion)) } -func testAccEnvironmentConfig_fsx(rName string) string { - return fmt.Sprintf(` +func testAccEnvironmentConfig_fsxComplete(rName, engineType, engineVersion string) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` resource "aws_fsx_lustre_file_system" "test" { storage_capacity = 1200 subnet_ids = [aws_subnet.test[0].id] security_group_ids = [aws_security_group.test.id] + tags = { Name = %[1]q } } -`, rName) + +resource "aws_m2_environment" "test" { + name = %[1]q + description = %[1]q + engine_type = %[2]q + engine_version = %[3]q + instance_type = "M2.m5.large" + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id + + storage_configuration { + fsx { + file_system_id = aws_fsx_lustre_file_system.test.id + mount_point = "/m2/mount/example" + } + } +} +`, rName, engineType, engineVersion)) } func testAccEnvironmentConfig_tags(rName, tags string) string { @@ -660,55 +640,25 @@ resource "aws_m2_environment" "test" { } func testAccEnvironmentConfig_full(rName string) string { - return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` resource "aws_m2_environment" "test" { description = "Test-1" engine_type = "microfocus" engine_version = "8.0.10" + high_availability_config { desired_capacity = 1 } - instance_type = "M2.m5.large" - kms_key_id = aws_kms_key.test.arn - name = %[1]q - security_groups = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - tags = { - Name = %[1]q - } -} -resource "aws_vpc" "test" { - cidr_block = "10.0.0.0/16" - enable_dns_support = true - enable_dns_hostnames = true - tags = { - Name = %[1]q - } -} -resource "aws_subnet" "test" { - count = 2 - vpc_id = aws_vpc.test.id - availability_zone = data.aws_availability_zones.available.names[count.index] - cidr_block = cidrsubnet(aws_vpc.test.cidr_block, 8, count.index) - tags = { - Name = %[1]q - } -} -resource "aws_kms_key" "test" { - description = "tf-test-cmk-kms-key-id" + + instance_type = "M2.m5.large" + kms_key_id = aws_kms_key.test.arn + name = %[1]q + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id } -resource "aws_security_group" "test" { - name = %[1]q +resource "aws_kms_key" "test" { description = %[1]q - vpc_id = aws_vpc.test.id - - ingress { - from_port = -1 - to_port = -1 - protocol = "icmp" - cidr_blocks = ["0.0.0.0/0"] - } } `, rName)) } From 4df6c6b94c49a1c8bab56e25aaf88208cc3c680c Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 10:38:53 -0400 Subject: [PATCH 098/126] Acceptance test output: % make testacc TESTARGS='-run=TestAccM2Environment_basic' PKG=m2 ACCTEST_PARALLELISM=2 ==> Checking that code complies with gofmt requirements... TF_ACC=1 go1.21.8 test ./internal/service/m2/... -v -count 1 -parallel 2 -run=TestAccM2Environment_basic -timeout 360m === RUN TestAccM2Environment_basic === PAUSE TestAccM2Environment_basic === CONT TestAccM2Environment_basic --- PASS: TestAccM2Environment_basic (393.63s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/m2 404.690s From 05400c64c02fc5c15d3a9fb63eff9783f918195a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 11:10:25 -0400 Subject: [PATCH 099/126] Add 'OnceAWeekWindow' custom type. --- .../framework/types/once_a_week_window.go | 170 ++++++++++++++++++ .../types/once_a_week_window_test.go | 114 ++++++++++++ 2 files changed, 284 insertions(+) create mode 100644 internal/framework/types/once_a_week_window.go create mode 100644 internal/framework/types/once_a_week_window_test.go diff --git a/internal/framework/types/once_a_week_window.go b/internal/framework/types/once_a_week_window.go new file mode 100644 index 00000000000..81d282de1f5 --- /dev/null +++ b/internal/framework/types/once_a_week_window.go @@ -0,0 +1,170 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package types + +import ( + "context" + "fmt" + "strings" + + "github.com/YakDriver/regexache" + "github.com/hashicorp/terraform-plugin-framework/attr" + "github.com/hashicorp/terraform-plugin-framework/attr/xattr" + "github.com/hashicorp/terraform-plugin-framework/diag" + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-framework/types/basetypes" + "github.com/hashicorp/terraform-plugin-go/tftypes" +) + +var ( + _ xattr.TypeWithValidate = (*onceAWeekWindowType)(nil) + _ basetypes.StringTypable = (*onceAWeekWindowType)(nil) + _ basetypes.StringValuable = (*OnceAWeekWindow)(nil) + _ basetypes.StringValuableWithSemanticEquals = (*OnceAWeekWindow)(nil) +) + +type onceAWeekWindowType struct { + basetypes.StringType +} + +var ( + OnceAWeekWindowType = onceAWeekWindowType{} +) + +func (t onceAWeekWindowType) Equal(o attr.Type) bool { + other, ok := o.(onceAWeekWindowType) + if !ok { + return false + } + + return t.StringType.Equal(other.StringType) +} + +func (onceAWeekWindowType) String() string { + return "OnceAWeekWindowType" +} + +func (t onceAWeekWindowType) ValueFromString(_ context.Context, in types.String) (basetypes.StringValuable, diag.Diagnostics) { + var diags diag.Diagnostics + + if in.IsNull() { + return OnceAWeekWindowNull(), diags + } + if in.IsUnknown() { + return OnceAWeekWindowUnknown(), diags + } + + return OnceAWeekWindowValue(in.ValueString()), diags +} + +func (t onceAWeekWindowType) ValueFromTerraform(ctx context.Context, in tftypes.Value) (attr.Value, error) { + attrValue, err := t.StringType.ValueFromTerraform(ctx, in) + if err != nil { + return nil, err + } + + stringValue, ok := attrValue.(basetypes.StringValue) + if !ok { + return nil, fmt.Errorf("unexpected value type of %T", attrValue) + } + + stringValuable, diags := t.ValueFromString(ctx, stringValue) + if diags.HasError() { + return nil, fmt.Errorf("unexpected error converting StringValue to StringValuable: %v", diags) + } + + return stringValuable, nil +} + +func (onceAWeekWindowType) ValueType(context.Context) attr.Value { + return OnceAWeekWindow{} +} + +func (t onceAWeekWindowType) Validate(ctx context.Context, in tftypes.Value, path path.Path) diag.Diagnostics { + var diags diag.Diagnostics + + if !in.IsKnown() || in.IsNull() { + return diags + } + + var value string + err := in.As(&value) + if err != nil { + diags.AddAttributeError( + path, + "OnceAWeekWindowType Validation Error", + ProviderErrorDetailPrefix+fmt.Sprintf("Cannot convert value to string: %s", err), + ) + return diags + } + + // Valid time format is "ddd:hh24:mi". + validTimeFormat := "(sun|mon|tue|wed|thu|fri|sat):([0-1][0-9]|2[0-3]):([0-5][0-9])" + validTimeFormatConsolidated := "^(" + validTimeFormat + "-" + validTimeFormat + "|)$" + + if v := strings.ToLower(value); !regexache.MustCompile(validTimeFormatConsolidated).MatchString(v) { + diags.AddAttributeError( + path, + "OnceAWeekWindowType Validation Error", + fmt.Sprintf("Value %q must satisfy the format of \"ddd:hh24:mi-ddd:hh24:mi\".", value), + ) + return diags + } + + return diags +} + +type OnceAWeekWindow struct { + basetypes.StringValue +} + +func OnceAWeekWindowNull() OnceAWeekWindow { + return OnceAWeekWindow{StringValue: basetypes.NewStringNull()} +} + +func OnceAWeekWindowUnknown() OnceAWeekWindow { + return OnceAWeekWindow{StringValue: basetypes.NewStringUnknown()} +} + +func OnceAWeekWindowValue(value string) OnceAWeekWindow { + return OnceAWeekWindow{StringValue: basetypes.NewStringValue(value)} +} + +func (v OnceAWeekWindow) Equal(o attr.Value) bool { + other, ok := o.(OnceAWeekWindow) + if !ok { + return false + } + + return v.StringValue.Equal(other.StringValue) +} + +func (OnceAWeekWindow) Type(context.Context) attr.Type { + return OnceAWeekWindowType +} + +func (v OnceAWeekWindow) StringSemanticEquals(ctx context.Context, newValuable basetypes.StringValuable) (bool, diag.Diagnostics) { + var diags diag.Diagnostics + + newValue, ok := newValuable.(OnceAWeekWindow) + if !ok { + return false, diags + } + + old, d := v.ToStringValue(ctx) + diags.Append(d...) + if diags.HasError() { + return false, diags + } + + new, d := newValue.ToStringValue(ctx) + diags.Append(d...) + if diags.HasError() { + return false, diags + } + + // Case insensitive comparison. + return strings.EqualFold(old.ValueString(), new.ValueString()), diags +} diff --git a/internal/framework/types/once_a_week_window_test.go b/internal/framework/types/once_a_week_window_test.go new file mode 100644 index 00000000000..f0094ebc779 --- /dev/null +++ b/internal/framework/types/once_a_week_window_test.go @@ -0,0 +1,114 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package types_test + +import ( + "context" + "testing" + + "github.com/hashicorp/terraform-plugin-framework/path" + "github.com/hashicorp/terraform-plugin-go/tftypes" + fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" +) + +func TestOnceAWeekWindowTypeValidate(t *testing.T) { + t.Parallel() + + type testCase struct { + val tftypes.Value + expectError bool + } + tests := map[string]testCase{ + "not a string": { + val: tftypes.NewValue(tftypes.Bool, true), + expectError: true, + }, + "unknown string": { + val: tftypes.NewValue(tftypes.String, tftypes.UnknownValue), + }, + "null string": { + val: tftypes.NewValue(tftypes.String, nil), + }, + "valid string lowercase": { + val: tftypes.NewValue(tftypes.String, "thu:07:44-thu:09:44"), + }, + "valid string uppercase": { + val: tftypes.NewValue(tftypes.String, "THU:07:44-THU:09:44"), + }, + "invalid string": { + val: tftypes.NewValue(tftypes.String, "thu:25:44-zat:09:88"), + expectError: true, + }, + } + + for name, test := range tests { + name, test := name, test + t.Run(name, func(t *testing.T) { + t.Parallel() + + ctx := context.Background() + + diags := fwtypes.OnceAWeekWindowType.Validate(ctx, test.val, path.Root("test")) + + if !diags.HasError() && test.expectError { + t.Fatal("expected error, got no error") + } + + if diags.HasError() && !test.expectError { + t.Fatalf("got unexpected error: %#v", diags) + } + }) + } +} + +func TestOnceAWeekWindowStringSemanticEquals(t *testing.T) { + t.Parallel() + + type testCase struct { + val1, val2 fwtypes.OnceAWeekWindow + equals bool + } + tests := map[string]testCase{ + "both lowercase, equal": { + val1: fwtypes.OnceAWeekWindowValue("thu:07:44-thu:09:44"), + val2: fwtypes.OnceAWeekWindowValue("thu:07:44-thu:09:44"), + equals: true, + }, + "both uppercase, equal": { + val1: fwtypes.OnceAWeekWindowValue("THU:07:44-THU:09:44"), + val2: fwtypes.OnceAWeekWindowValue("THU:07:44-THU:09:44"), + equals: true, + }, + "first uppercase, second lowercase, equal": { + val1: fwtypes.OnceAWeekWindowValue("THU:07:44-THU:09:44"), + val2: fwtypes.OnceAWeekWindowValue("thu:07:44-thu:09:44"), + equals: true, + }, + "first lowercase, second uppercase, equal": { + val1: fwtypes.OnceAWeekWindowValue("thu:07:44-thu:09:44"), + val2: fwtypes.OnceAWeekWindowValue("THU:07:44-THU:09:44"), + equals: true, + }, + "not equal": { + val1: fwtypes.OnceAWeekWindowValue("thu:07:44-thu:09:44"), + val2: fwtypes.OnceAWeekWindowValue("thu:07:44-fri:11:09"), + equals: true, + }, + } + + for name, test := range tests { + name, test := name, test + t.Run(name, func(t *testing.T) { + t.Parallel() + + ctx := context.Background() + + equals, _ := test.val1.StringSemanticEquals(ctx, test.val2) + + if got, want := equals, test.equals; got != want { + t.Errorf("StringSemanticEquals(%q, %q) = %v, want %v", test.val1, test.val2, got, want) + } + }) + } +} From 9ed0b41bb55ea2077d98f130c4adef7170ca14a0 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 11:16:36 -0400 Subject: [PATCH 100/126] r/aws_m2_environment: Use 'OnceAWeekWindowType'. --- internal/service/m2/environment.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 9b7af10ac21..854368780ee 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -127,9 +127,10 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem stringplanmodifier.RequiresReplace(), }, }, - "preferred_maintenance_window": schema.StringAttribute{ // TODO Custom type? See internal/types/timestamp/timestamp.go. - Optional: true, - Computed: true, + "preferred_maintenance_window": schema.StringAttribute{ + CustomType: fwtypes.OnceAWeekWindowType, + Optional: true, + Computed: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.UseStateForUnknown(), }, @@ -593,7 +594,7 @@ type environmentResourceModel struct { KmsKeyID fwtypes.ARN `tfsdk:"kms_key_id"` LoadBalancerArn types.String `tfsdk:"load_balancer_arn"` Name types.String `tfsdk:"name"` - PreferredMaintenanceWindow types.String `tfsdk:"preferred_maintenance_window"` + PreferredMaintenanceWindow fwtypes.OnceAWeekWindow `tfsdk:"preferred_maintenance_window"` PubliclyAccessible types.Bool `tfsdk:"publicly_accessible"` SecurityGroupIDs fwtypes.SetValueOf[types.String] `tfsdk:"security_group_ids"` StorageConfigurations fwtypes.ListNestedObjectValueOf[storageConfigurationModel] `tfsdk:"storage_configuration"` From 0898f13aec6f5666556ae8c1ed776c6421d230ab Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 11:33:38 -0400 Subject: [PATCH 101/126] r/aws_m2_environment: UseStateForUnknown for 'load_balancer_arn'. --- internal/service/m2/environment.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 854368780ee..e47f924e818 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -117,6 +117,9 @@ func (r *environmentResource) Schema(ctx context.Context, request resource.Schem }, "load_balancer_arn": schema.StringAttribute{ Computed: true, + PlanModifiers: []planmodifier.String{ + stringplanmodifier.UseStateForUnknown(), + }, }, "name": schema.StringAttribute{ Required: true, From a86e54aa3dfd24fc747273f6ab7d5799faa3b5d6 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 11:47:03 -0400 Subject: [PATCH 102/126] Tweak 'TestAccM2Environment_tags'. --- internal/service/m2/environment_test.go | 238 ++++++++++++------------ 1 file changed, 123 insertions(+), 115 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 2cee8cbf416..016c5161b81 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -77,6 +77,88 @@ func TestAccM2Environment_basic(t *testing.T) { }) } +func TestAccM2Environment_disappears(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + var environment m2.GetEnvironmentOutput + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_basic(rName, testAccEngineType), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment, resourceName), + ), + ExpectNonEmptyPlan: true, + }, + }, + }) +} + +func TestAccM2Environment_tags(t *testing.T) { + ctx := acctest.Context(t) + if testing.Short() { + t.Skip("skipping long-running test in short mode") + } + rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) + resourceName := "aws_m2_environment.test" + var environment m2.GetEnvironmentOutput + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckEnvironmentDestroy(ctx), + ), + Steps: []resource.TestStep{ + { + Config: testAccEnvironmentConfig_tags1(rName, "key1", "value1"), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccEnvironmentConfig_tags2(rName, "key1", "value1updated", "key2", "value2"), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1updated"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + { + Config: testAccEnvironmentConfig_tags1(rName, "key2", "value2"), + Check: resource.ComposeTestCheckFunc( + testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), + }, + }, + }) +} + func TestAccM2Environment_full(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { @@ -298,98 +380,6 @@ func TestAccM2Environment_fsx(t *testing.T) { }, }) } -func TestAccM2Environment_disappears(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - var environment m2.GetEnvironmentOutput - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_environment.test" - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { - acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2) - testAccPreCheck(ctx, t) - }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: testAccCheckEnvironmentDestroy(ctx), - Steps: []resource.TestStep{ - { - Config: testAccEnvironmentConfig_basic(rName, testAccEngineType), - Check: resource.ComposeTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment, resourceName), - ), - ExpectNonEmptyPlan: true, - }, - }, - }) -} - -func TestAccM2Environment_tags(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_environment.test" - var environment m2.GetEnvironmentOutput - - tags1 := ` - tags = { - key1 = "value1" - } -` - tags2 := ` - tags = { - key1 = "value1" - key2 = "value2" - } -` - tags3 := ` - tags = { - key2 = "value2" - } -` - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentDestroy(ctx), - ), - Steps: []resource.TestStep{ - { - Config: testAccEnvironmentConfig_tags(rName, tags1), - Check: resource.ComposeTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), - ), - }, - { - Config: testAccEnvironmentConfig_tags(rName, tags2), - Check: resource.ComposeTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), - resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), - resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), - ), - }, - { - Config: testAccEnvironmentConfig_tags(rName, tags3), - Check: resource.ComposeTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), - ), - }, - }, - }) -} func testAccCheckEnvironmentDestroy(ctx context.Context) resource.TestCheckFunc { return func(s *terraform.State) error { @@ -501,13 +491,37 @@ resource "aws_security_group" "test" { } func testAccEnvironmentConfig_basic(rName, engineType string) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` + return fmt.Sprintf(` resource "aws_m2_environment" "test" { name = %[1]q engine_type = %[2]q instance_type = "M2.m5.large" } -`, rName, engineType)) +`, rName, engineType) +} + +func testAccEnvironmentConfig_full(rName string) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` +resource "aws_m2_environment" "test" { + description = "Test-1" + engine_type = "microfocus" + engine_version = "8.0.10" + + high_availability_config { + desired_capacity = 1 + } + + instance_type = "M2.m5.large" + kms_key_id = aws_kms_key.test.arn + name = %[1]q + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id +} + +resource "aws_kms_key" "test" { + description = %[1]q +} +`, rName)) } func testAccEnvironmentConfig_update(rName, engineType, engineVersion string, desiredCapacity int32) string { @@ -628,37 +642,31 @@ resource "aws_m2_environment" "test" { `, rName, engineType, engineVersion)) } -func testAccEnvironmentConfig_tags(rName, tags string) string { +func testAccEnvironmentConfig_tags1(rName, tagKey1, tagValue1 string) string { return fmt.Sprintf(` resource "aws_m2_environment" "test" { engine_type = "microfocus" instance_type = "M2.m5.large" name = %[1]q -%[2]s + + tags = { + %[2]q = %[3]q + } } -`, rName, tags) +`, rName, tagKey1, tagValue1) } -func testAccEnvironmentConfig_full(rName string) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` +func testAccEnvironmentConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { + return fmt.Sprintf(` resource "aws_m2_environment" "test" { - description = "Test-1" - engine_type = "microfocus" - engine_version = "8.0.10" + engine_type = "microfocus" + instance_type = "M2.m5.large" + name = %[1]q - high_availability_config { - desired_capacity = 1 + tags = { + %[2]q = %[3]q + %[4]q = %[5]q } - - instance_type = "M2.m5.large" - kms_key_id = aws_kms_key.test.arn - name = %[1]q - security_group_ids = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id -} - -resource "aws_kms_key" "test" { - description = %[1]q } -`, rName)) +`, rName, tagKey1, tagValue1, tagKey2, tagValue2) } From 1f3dc42b470bed95910c384b1976a34ba0546cad Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 11:47:09 -0400 Subject: [PATCH 103/126] Acceptance test output: % make testacc TESTARGS='-run=TestAccM2Environment_disappears\|TestAccM2Environment_tags' PKG=m2 ACCTEST_PARALLELISM=2 ==> Checking that code complies with gofmt requirements... TF_ACC=1 go1.21.8 test ./internal/service/m2/... -v -count 1 -parallel 2 -run=TestAccM2Environment_disappears\|TestAccM2Environment_tags -timeout 360m === RUN TestAccM2Environment_disappears === PAUSE TestAccM2Environment_disappears === RUN TestAccM2Environment_tags === PAUSE TestAccM2Environment_tags === CONT TestAccM2Environment_disappears === CONT TestAccM2Environment_tags --- PASS: TestAccM2Environment_disappears (420.21s) --- PASS: TestAccM2Environment_tags (617.54s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/m2 628.780s From e7196adb58f30500f1894c2195719d6d6988f5d0 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 12:53:56 -0400 Subject: [PATCH 104/126] Tidy up 'TestAccM2Environment_full' and 'TestAccM2Environment_update'. --- internal/service/m2/environment_test.go | 184 +++++++----------------- 1 file changed, 52 insertions(+), 132 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 016c5161b81..0c8d428870e 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -20,11 +20,6 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -const ( - testAccEngineType = "bluage" - testAccEngineVersion = "3.7.0" -) - func TestAccM2Environment_basic(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { @@ -45,13 +40,13 @@ func TestAccM2Environment_basic(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_basic(rName, testAccEngineType), + Config: testAccEnvironmentConfig_basic(rName, "bluage"), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), resource.TestCheckNoResourceAttr(resourceName, "apply_changes_during_maintenance_window"), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), resource.TestCheckNoResourceAttr(resourceName, "description"), - resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), + resource.TestCheckResourceAttr(resourceName, "engine_type", "bluage"), resource.TestCheckResourceAttrSet(resourceName, "engine_version"), resource.TestCheckResourceAttrSet(resourceName, "environment_id"), resource.TestCheckNoResourceAttr(resourceName, "force_update"), @@ -97,7 +92,7 @@ func TestAccM2Environment_disappears(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_basic(rName, testAccEngineType), + Config: testAccEnvironmentConfig_basic(rName, "bluage"), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceEnvironment, resourceName), @@ -180,11 +175,25 @@ func TestAccM2Environment_full(t *testing.T) { Config: testAccEnvironmentConfig_full(rName), Check: resource.ComposeAggregateTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), + resource.TestCheckNoResourceAttr(resourceName, "apply_changes_during_maintenance_window"), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckResourceAttr(resourceName, "description", "Test-1"), + resource.TestCheckResourceAttr(resourceName, "engine_type", "microfocus"), + resource.TestCheckResourceAttr(resourceName, "engine_version", "8.0.10"), resource.TestCheckResourceAttrSet(resourceName, "environment_id"), - resource.TestCheckResourceAttrSet(resourceName, "name"), - resource.TestCheckResourceAttrSet(resourceName, "engine_type"), - resource.TestCheckResourceAttrSet(resourceName, "instance_type"), - resource.TestCheckResourceAttrSet(resourceName, "subnet_ids.#"), + resource.TestCheckNoResourceAttr(resourceName, "force_update"), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "1"), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "5"), + resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttrSet(resourceName, "load_balancer_arn"), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttrSet(resourceName, "preferred_maintenance_window"), + resource.TestCheckResourceAttr(resourceName, "publicly_accessible", "false"), + resource.TestCheckResourceAttr(resourceName, "security_group_ids.#", "1"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), + resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), ), }, { @@ -216,34 +225,21 @@ func TestAccM2Environment_update(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_highAvailability(rName, testAccEngineType, testAccEngineVersion, 2), + Config: testAccEnvironmentConfig_update(rName, "M2.m5.large", 2), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), - acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "1"), resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), - resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "security_group_ids.#", "1"), - resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), - resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + resource.TestCheckResourceAttr(resourceName, "preferred_maintenance_window", "sat:03:35-sat:05:35"), ), }, { - Config: testAccEnvironmentConfig_update(rName, testAccEngineType, testAccEngineVersion, 1), + Config: testAccEnvironmentConfig_update(rName, "M2.m6i.large", 3), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), - acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), - resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "1"), - resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "security_group_ids.#", "1"), - resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), - resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "1"), + resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "3"), resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m6i.large"), resource.TestCheckResourceAttr(resourceName, "preferred_maintenance_window", "sat:03:35-sat:05:35"), ), @@ -252,50 +248,6 @@ func TestAccM2Environment_update(t *testing.T) { }) } -func TestAccM2Environment_highAvailability(t *testing.T) { - ctx := acctest.Context(t) - if testing.Short() { - t.Skip("skipping long-running test in short mode") - } - var environment m2.GetEnvironmentOutput - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) - resourceName := "aws_m2_environment.test" - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { - acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) - testAccPreCheck(ctx, t) - }, - ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: testAccCheckEnvironmentDestroy(ctx), - Steps: []resource.TestStep{ - { - Config: testAccEnvironmentConfig_highAvailability(rName, testAccEngineType, testAccEngineVersion, 2), - Check: resource.ComposeTestCheckFunc( - testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), - acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), - resource.TestCheckResourceAttr(resourceName, "high_availability_config.0.desired_capacity", "2"), - resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), - resource.TestCheckResourceAttr(resourceName, "security_group_ids.#", "1"), - resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), - resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "0"), - resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), - ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, - }, - }, - }) -} - func TestAccM2Environment_efs(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { @@ -316,18 +268,13 @@ func TestAccM2Environment_efs(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_efsComplete(rName, testAccEngineType, testAccEngineVersion), + Config: testAccEnvironmentConfig_efsComplete(rName), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), - acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), - resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), - resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "1"), - resource.TestCheckResourceAttr(resourceName, "storage_configuration.0.efs.0.mount_point", "/m2/mount/example"), - resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + resource.TestCheckResourceAttrSet(resourceName, "storage_configuration.0.efs.0.file_system_id"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.0.efs.0.mount_point", "/m2/mount/efsexample"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.0.fsx.#", "0"), ), }, { @@ -358,18 +305,13 @@ func TestAccM2Environment_fsx(t *testing.T) { CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccEnvironmentConfig_fsxComplete(rName, testAccEngineType, testAccEngineVersion), + Config: testAccEnvironmentConfig_fsxComplete(rName), Check: resource.ComposeTestCheckFunc( testAccCheckEnvironmentExists(ctx, resourceName, &environment), - resource.TestCheckResourceAttr(resourceName, "description", rName), - resource.TestCheckResourceAttr(resourceName, "engine_type", testAccEngineType), - resource.TestCheckResourceAttr(resourceName, "engine_version", testAccEngineVersion), - acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`env/+.`)), - resource.TestCheckResourceAttr(resourceName, "high_availability_config.#", "0"), - resource.TestCheckResourceAttr(resourceName, "subnet_ids.#", "2"), resource.TestCheckResourceAttr(resourceName, "storage_configuration.#", "1"), - resource.TestCheckResourceAttr(resourceName, "storage_configuration.0.fsx.0.mount_point", "/m2/mount/example"), - resource.TestCheckResourceAttr(resourceName, "instance_type", "M2.m5.large"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.0.efs.#", "0"), + resource.TestCheckResourceAttrSet(resourceName, "storage_configuration.0.fsx.0.file_system_id"), + resource.TestCheckResourceAttr(resourceName, "storage_configuration.0.fsx.0.mount_point", "/m2/mount/fsxexample"), ), }, { @@ -508,7 +450,7 @@ resource "aws_m2_environment" "test" { engine_version = "8.0.10" high_availability_config { - desired_capacity = 1 + desired_capacity = 5 } instance_type = "M2.m5.large" @@ -524,46 +466,26 @@ resource "aws_kms_key" "test" { `, rName)) } -func testAccEnvironmentConfig_update(rName, engineType, engineVersion string, desiredCapacity int32) string { +func testAccEnvironmentConfig_update(rName, instanceType string, desiredCapacity int32) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` resource "aws_m2_environment" "test" { name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m6i.large" + engine_type = "bluage" + engine_version = "3.7.0" + instance_type = %[2]q security_group_ids = [aws_security_group.test.id] subnet_ids = aws_subnet.test[*].id preferred_maintenance_window = "sat:03:35-sat:05:35" high_availability_config { - desired_capacity = %[4]d + desired_capacity = %[3]d } } -`, rName, engineType, engineVersion, desiredCapacity)) +`, rName, instanceType, desiredCapacity)) } -func testAccEnvironmentConfig_highAvailability(rName, engineType, engineVersion string, desiredCapacity int32) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), - fmt.Sprintf(` -resource "aws_m2_environment" "test" { - name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q - instance_type = "M2.m5.large" - security_group_ids = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id - - high_availability_config { - desired_capacity = %[4]d - } -} -`, rName, engineType, engineVersion, desiredCapacity)) -} - -func testAccEnvironmentConfig_efsComplete(rName, engineType, engineVersion string) string { +func testAccEnvironmentConfig_efsComplete(rName string) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` resource "aws_efs_file_system" "test" { @@ -594,9 +516,8 @@ resource "aws_efs_mount_target" "test" { resource "aws_m2_environment" "test" { name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q + engine_type = "bluage" + engine_version = "3.7.0" instance_type = "M2.m5.large" security_group_ids = [aws_security_group.test.id] subnet_ids = aws_subnet.test[*].id @@ -604,14 +525,14 @@ resource "aws_m2_environment" "test" { storage_configuration { efs { file_system_id = aws_efs_file_system.test.id - mount_point = "/m2/mount/example" + mount_point = "/m2/mount/efsexample" } } } -`, rName, engineType, engineVersion)) +`, rName)) } -func testAccEnvironmentConfig_fsxComplete(rName, engineType, engineVersion string) string { +func testAccEnvironmentConfig_fsxComplete(rName string) string { return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), fmt.Sprintf(` resource "aws_fsx_lustre_file_system" "test" { storage_capacity = 1200 @@ -625,9 +546,8 @@ resource "aws_fsx_lustre_file_system" "test" { resource "aws_m2_environment" "test" { name = %[1]q - description = %[1]q - engine_type = %[2]q - engine_version = %[3]q + engine_type = "bluage" + engine_version = "3.7.0" instance_type = "M2.m5.large" security_group_ids = [aws_security_group.test.id] subnet_ids = aws_subnet.test[*].id @@ -635,11 +555,11 @@ resource "aws_m2_environment" "test" { storage_configuration { fsx { file_system_id = aws_fsx_lustre_file_system.test.id - mount_point = "/m2/mount/example" + mount_point = "/m2/mount/fsxexample" } } } -`, rName, engineType, engineVersion)) +`, rName)) } func testAccEnvironmentConfig_tags1(rName, tagKey1, tagValue1 string) string { From 01379fd8f264fb4e5c7c5225e93b903bd3c29f2d Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 12:54:13 -0400 Subject: [PATCH 105/126] Acceptance test output: % make testacc TESTARGS='-run=TestAccM2Environment_full\|TestAccM2Environment_update' PKG=m2 ACCTEST_PARALLELISM=2 ==> Checking that code complies with gofmt requirements... TF_ACC=1 go1.21.8 test ./internal/service/m2/... -v -count 1 -parallel 2 -run=TestAccM2Environment_full\|TestAccM2Environment_update -timeout 360m === RUN TestAccM2Environment_full === PAUSE TestAccM2Environment_full === RUN TestAccM2Environment_update === PAUSE TestAccM2Environment_update === CONT TestAccM2Environment_full === CONT TestAccM2Environment_update --- PASS: TestAccM2Environment_full (648.27s) --- PASS: TestAccM2Environment_update (1257.00s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/m2 1268.613s From adda8ebf2aa4c753494e420ef5b0a939d9629229 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 14:08:12 -0400 Subject: [PATCH 106/126] AutoFlEx: Silently skip Smithy union types (#36508). --- internal/framework/flex/auto_expand.go | 16 +++++++++++++++- internal/framework/flex/auto_flatten.go | 8 ++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/internal/framework/flex/auto_expand.go b/internal/framework/flex/auto_expand.go index 7e9e454320a..afb4f451b2f 100644 --- a/internal/framework/flex/auto_expand.go +++ b/internal/framework/flex/auto_expand.go @@ -616,10 +616,24 @@ func (expander autoExpander) nestedObjectCollection(ctx context.Context, vFrom f diags.Append(expander.nestedObjectToSlice(ctx, vFrom, tTo, tElem, vTo)...) return diags } + + case reflect.Interface: + // + // types.List(OfObject) -> []interface. + // + // Smithy union type handling not yet implemented. Silently skip. + return diags } + + case reflect.Interface: + // + // types.List(OfObject) -> interface. + // + // Smithy union type handling not yet implemented. Silently skip. + return diags } - diags.AddError("Incompatible types", fmt.Sprintf("nestedObject[%s] cannot be expanded to %s", vFrom.Type(ctx).(attr.TypeWithElementType).ElementType(), vTo.Kind())) + diags.AddError("Incompatible types", fmt.Sprintf("nestedObjectCollection[%s] cannot be expanded to %s", vFrom.Type(ctx).(attr.TypeWithElementType).ElementType(), vTo.Kind())) return diags } diff --git a/internal/framework/flex/auto_flatten.go b/internal/framework/flex/auto_flatten.go index 541183c81d1..6f5f224f7ea 100644 --- a/internal/framework/flex/auto_flatten.go +++ b/internal/framework/flex/auto_flatten.go @@ -89,6 +89,10 @@ func (flattener autoFlattener) convert(ctx context.Context, vFrom, vTo reflect.V case reflect.Struct: diags.Append(flattener.struct_(ctx, vFrom, false, tTo, vTo)...) return diags + + case reflect.Interface: + // Smithy union type handling not yet implemented. Silently skip. + return diags } tflog.Info(ctx, "AutoFlex Flatten; incompatible types", map[string]interface{}{ @@ -494,6 +498,10 @@ func (flattener autoFlattener) slice(ctx context.Context, vFrom reflect.Value, t diags.Append(flattener.sliceOfStructNestedObjectCollection(ctx, vFrom, tTo, vTo)...) return diags } + + case reflect.Interface: + // Smithy union type handling not yet implemented. Silently skip. + return diags } tflog.Info(ctx, "AutoFlex Flatten; incompatible types", map[string]interface{}{ From c0fa4523f00501bfee544e4ca85f2e420aab320a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 14:26:40 -0400 Subject: [PATCH 107/126] r/aws_m2_environment: Taint on 'waitEnvironmentCreated' failure. --- internal/service/m2/environment.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index e47f924e818..519932982f4 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -320,6 +320,7 @@ func (r *environmentResource) Create(ctx context.Context, request resource.Creat env, err := waitEnvironmentCreated(ctx, conn, data.ID.ValueString(), r.CreateTimeout(ctx, data.Timeouts)) if err != nil { + response.State.SetAttribute(ctx, path.Root(names.AttrID), data.ID) // Set 'id' so as to taint the resource. response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Environment (%s) create", data.ID.ValueString()), err.Error()) return From a4de0481a30a0139ed80f1c0c1627a6afcb6b468 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 14:47:23 -0400 Subject: [PATCH 108/126] Fix 'flattenStorageConfigurations' to prevent crash in 'NewListNestedObjectValueOfSliceMust'. --- internal/service/m2/environment.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 519932982f4..47d27ebf63e 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -372,13 +372,13 @@ func (r *environmentResource) Read(ctx context.Context, request resource.ReadReq // AutoFlEx doesn't yet handle union types. if output.StorageConfigurations != nil { - x, diags := flattenStorageConfigurations(ctx, output.StorageConfigurations) + storageConfigurationsData, diags := flattenStorageConfigurations(ctx, output.StorageConfigurations) response.Diagnostics.Append(diags...) if response.Diagnostics.HasError() { return } - data.StorageConfigurations = fwtypes.NewListNestedObjectValueOfSliceMust(ctx, x) + data.StorageConfigurations = fwtypes.NewListNestedObjectValueOfSliceMust(ctx, storageConfigurationsData) } response.Diagnostics.Append(response.State.Set(ctx, &data)...) @@ -685,7 +685,7 @@ func flattenStorageConfigurations(ctx context.Context, apiObjects []awstypes.Sto switch v := apiObject.(type) { case *awstypes.StorageConfigurationMemberEfs: var efsStorageConfigurationData efsStorageConfigurationModel - d := fwflex.Flatten(ctx, &v.Value, &efsStorageConfigurationData) + d := fwflex.Flatten(ctx, v.Value, &efsStorageConfigurationData) diags.Append(d...) if diags.HasError() { return nil, diags @@ -693,17 +693,19 @@ func flattenStorageConfigurations(ctx context.Context, apiObjects []awstypes.Sto storageConfigurationsData = append(storageConfigurationsData, &storageConfigurationModel{ EFS: fwtypes.NewListNestedObjectValueOfPtrMust(ctx, &efsStorageConfigurationData), + FSX: fwtypes.NewListNestedObjectValueOfNull[fsxStorageConfigurationModel](ctx), }) case *awstypes.StorageConfigurationMemberFsx: var fsxStorageConfigurationData fsxStorageConfigurationModel - d := fwflex.Flatten(ctx, &v.Value, &fsxStorageConfigurationData) + d := fwflex.Flatten(ctx, v.Value, &fsxStorageConfigurationData) diags.Append(d...) if diags.HasError() { return nil, diags } storageConfigurationsData = append(storageConfigurationsData, &storageConfigurationModel{ + EFS: fwtypes.NewListNestedObjectValueOfNull[efsStorageConfigurationModel](ctx), FSX: fwtypes.NewListNestedObjectValueOfPtrMust(ctx, &fsxStorageConfigurationData), }) } From 7322d1dba0dd33ac62bd646411e87e1a0537acc6 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 14:48:08 -0400 Subject: [PATCH 109/126] Correct acceptance test configuration indentation. --- internal/service/m2/environment_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index 0c8d428870e..e935c3b2a36 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -515,12 +515,12 @@ resource "aws_efs_mount_target" "test" { } resource "aws_m2_environment" "test" { - name = %[1]q - engine_type = "bluage" - engine_version = "3.7.0" - instance_type = "M2.m5.large" + name = %[1]q + engine_type = "bluage" + engine_version = "3.7.0" + instance_type = "M2.m5.large" security_group_ids = [aws_security_group.test.id] - subnet_ids = aws_subnet.test[*].id + subnet_ids = aws_subnet.test[*].id storage_configuration { efs { From dc649e07b3e60c790e5d37f626f927979819a21b Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 22 Mar 2024 15:53:41 -0400 Subject: [PATCH 110/126] Acceptance test output: ==> Checking that code complies with gofmt requirements... TF_ACC=1 go1.21.8 test ./internal/service/m2/... -v -count 1 -parallel 2 -run=TestAccM2Environment_fsx\|TestAccM2Environment_efs -timeout 360m === RUN TestAccM2Environment_efs === PAUSE TestAccM2Environment_efs === RUN TestAccM2Environment_fsx === PAUSE TestAccM2Environment_fsx === CONT TestAccM2Environment_efs === CONT TestAccM2Environment_fsx --- PASS: TestAccM2Environment_efs (522.91s) --- PASS: TestAccM2Environment_fsx (1162.30s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/m2 930.301s From 1201017201d0ffafc3222c7c36856a0a09d47eb4 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Sun, 24 Mar 2024 16:49:01 -0400 Subject: [PATCH 111/126] r/aws_m2_application: Some renaming. --- internal/service/m2/application.go | 120 ++++++++++----------- internal/service/m2/environment.go | 2 +- internal/service/m2/exports_test.go | 2 +- internal/service/m2/service_package_gen.go | 2 +- 4 files changed, 61 insertions(+), 65 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 221f9603391..e2ee81069f6 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -23,6 +23,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/schema/validator" "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-framework/types/basetypes" + sdkid "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" "github.com/hashicorp/terraform-provider-aws/internal/create" "github.com/hashicorp/terraform-provider-aws/internal/enum" @@ -35,11 +36,10 @@ import ( "github.com/hashicorp/terraform-provider-aws/names" ) -// Function annotations are used for resource registration to the Provider. DO NOT EDIT. // @FrameworkResource(name="Application") // @Tags(identifierAttribute="arn") -func newResourceApplication(_ context.Context) (resource.ResourceWithConfigure, error) { - r := &resourceApplication{} +func newApplicationResource(context.Context) (resource.ResourceWithConfigure, error) { + r := &applicationResource{} r.SetDefaultCreateTimeout(30 * time.Minute) r.SetDefaultUpdateTimeout(30 * time.Minute) @@ -52,26 +52,24 @@ const ( ResNameApplication = "Application" ) -type resourceApplication struct { +type applicationResource struct { framework.ResourceWithConfigure + framework.WithImportByID framework.WithTimeouts } -func (r *resourceApplication) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { - resp.TypeName = "aws_m2_application" +func (*applicationResource) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { + response.TypeName = "aws_m2_application" } -func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { - resp.Schema = schema.Schema{ +func (r *applicationResource) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { + response.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ "application_id": framework.IDAttribute(), - "arn": framework.ARNAttributeComputedOnly(), + names.AttrARN: framework.ARNAttributeComputedOnly(), "current_version": schema.Int64Attribute{ Computed: true, }, - "client_token": schema.StringAttribute{ - Optional: true, - }, "description": schema.StringAttribute{ Optional: true, }, @@ -84,7 +82,7 @@ func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaReq stringvalidator.OneOf(enum.Values[awstypes.EngineType]()...), }, }, - "id": framework.IDAttribute(), + names.AttrID: framework.IDAttribute(), "kms_key_id": schema.StringAttribute{ Optional: true, PlanModifiers: []planmodifier.String{ @@ -136,44 +134,45 @@ func (r *resourceApplication) Schema(ctx context.Context, req resource.SchemaReq } } -func (r *resourceApplication) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { +func (r *applicationResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { conn := r.Meta().M2Client(ctx) var plan resourceApplicationData - resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) - if resp.Diagnostics.HasError() { + response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + if response.Diagnostics.HasError() { return } - in := &m2.CreateApplicationInput{ - Tags: getTagsIn(ctx), - } - - resp.Diagnostics.Append(flex.Expand(ctx, plan, in)...) - if resp.Diagnostics.HasError() { + input := &m2.CreateApplicationInput{} + response.Diagnostics.Append(flex.Expand(ctx, plan, input)...) + if response.Diagnostics.HasError() { return } + // Additional fields. + input.ClientToken = aws.String(sdkid.UniqueId()) + input.Tags = getTagsIn(ctx) + var definition applicationDefinition - resp.Diagnostics.Append(plan.Definition.As(ctx, &definition, basetypes.ObjectAsOptions{})...) + response.Diagnostics.Append(plan.Definition.As(ctx, &definition, basetypes.ObjectAsOptions{})...) - if resp.Diagnostics.HasError() { + if response.Diagnostics.HasError() { return } apiDefinition := expandApplicationDefinition(ctx, definition) - in.Definition = apiDefinition + input.Definition = apiDefinition - out, err := conn.CreateApplication(ctx, in) + out, err := conn.CreateApplication(ctx, input) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, plan.Name.String(), err), err.Error(), ) return } if out == nil || out.ApplicationId == nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, plan.Name.String(), nil), errors.New("empty output").Error(), ) @@ -186,32 +185,32 @@ func (r *resourceApplication) Create(ctx context.Context, req resource.CreateReq createTimeout := r.CreateTimeout(ctx, plan.Timeouts) app, err := waitApplicationCreated(ctx, conn, plan.ID.ValueString(), createTimeout) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameApplication, plan.Name.String(), err), err.Error(), ) return } - resp.Diagnostics.Append(plan.refreshFromOutput(ctx, app)...) - resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) + response.Diagnostics.Append(plan.refreshFromOutput(ctx, app)...) + response.Diagnostics.Append(response.State.Set(ctx, plan)...) } -func (r *resourceApplication) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { +func (r *applicationResource) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { conn := r.Meta().M2Client(ctx) var state resourceApplicationData - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + if response.Diagnostics.HasError() { return } out, err := findApplicationByID(ctx, conn, state.ID.ValueString()) if tfresource.NotFound(err) { - resp.State.RemoveResource(ctx) + response.State.RemoveResource(ctx) return } if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), err.Error(), ) @@ -220,11 +219,11 @@ func (r *resourceApplication) Read(ctx context.Context, req resource.ReadRequest version, err := findApplicationVersion(ctx, conn, state.ID.ValueString(), *out.LatestVersion.ApplicationVersion) if tfresource.NotFound(err) { - resp.State.RemoveResource(ctx) + response.State.RemoveResource(ctx) return } if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), err.Error(), ) @@ -233,7 +232,7 @@ func (r *resourceApplication) Read(ctx context.Context, req resource.ReadRequest // Tags are on GetApplicationOutput, but nil tags, err := listTags(ctx, conn, *out.ApplicationArn) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), err.Error(), ) @@ -241,18 +240,18 @@ func (r *resourceApplication) Read(ctx context.Context, req resource.ReadRequest setTagsOut(ctx, tags.Map()) - resp.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) - resp.Diagnostics.Append(state.refreshFromVersion(ctx, version)...) - resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) + response.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) + response.Diagnostics.Append(state.refreshFromVersion(ctx, version)...) + response.Diagnostics.Append(response.State.Set(ctx, &state)...) } -func (r *resourceApplication) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { +func (r *applicationResource) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { conn := r.Meta().M2Client(ctx) var plan, state resourceApplicationData - resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { + response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + if response.Diagnostics.HasError() { return } @@ -265,9 +264,9 @@ func (r *resourceApplication) Update(ctx context.Context, req resource.UpdateReq if !plan.Definition.Equal(state.Definition) { var definition applicationDefinition - resp.Diagnostics.Append(plan.Definition.As(ctx, &definition, basetypes.ObjectAsOptions{})...) + response.Diagnostics.Append(plan.Definition.As(ctx, &definition, basetypes.ObjectAsOptions{})...) - if resp.Diagnostics.HasError() { + if response.Diagnostics.HasError() { return } @@ -284,14 +283,14 @@ func (r *resourceApplication) Update(ctx context.Context, req resource.UpdateReq if update { out, err := conn.UpdateApplication(ctx, in) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameApplication, plan.ID.String(), err), err.Error(), ) return } if out == nil || out.ApplicationVersion == nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameApplication, plan.ID.String(), nil), errors.New("empty output").Error(), ) @@ -301,23 +300,23 @@ func (r *resourceApplication) Update(ctx context.Context, req resource.UpdateReq updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) version, err := waitApplicationUpdated(ctx, conn, plan.ID.ValueString(), *out.ApplicationVersion, updateTimeout) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameApplication, plan.ID.String(), err), err.Error(), ) return } - resp.Diagnostics.Append(plan.refreshFromVersion(ctx, version)...) - resp.Diagnostics.Append(resp.State.Set(ctx, &plan)...) + response.Diagnostics.Append(plan.refreshFromVersion(ctx, version)...) + response.Diagnostics.Append(response.State.Set(ctx, &plan)...) } } -func (r *resourceApplication) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { +func (r *applicationResource) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { conn := r.Meta().M2Client(ctx) var state resourceApplicationData - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + if response.Diagnostics.HasError() { return } @@ -330,7 +329,7 @@ func (r *resourceApplication) Delete(ctx context.Context, req resource.DeleteReq if errs.IsA[*awstypes.ResourceNotFoundException](err) { return } - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameApplication, state.ID.String(), err), err.Error(), ) @@ -340,7 +339,7 @@ func (r *resourceApplication) Delete(ctx context.Context, req resource.DeleteReq deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) _, err = waitApplicationDeleted(ctx, conn, state.ID.ValueString(), deleteTimeout) if err != nil { - resp.Diagnostics.AddError( + response.Diagnostics.AddError( create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameApplication, state.ID.String(), err), err.Error(), ) @@ -348,10 +347,7 @@ func (r *resourceApplication) Delete(ctx context.Context, req resource.DeleteReq } } -func (r *resourceApplication) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { - resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) -} -func (r *resourceApplication) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { +func (r *applicationResource) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { r.SetTagsAll(ctx, request, response) } diff --git a/internal/service/m2/environment.go b/internal/service/m2/environment.go index 47d27ebf63e..ea74ae2cd48 100644 --- a/internal/service/m2/environment.go +++ b/internal/service/m2/environment.go @@ -60,7 +60,7 @@ type environmentResource struct { framework.WithTimeouts } -func (r *environmentResource) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { +func (*environmentResource) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { response.TypeName = "aws_m2_environment" } diff --git a/internal/service/m2/exports_test.go b/internal/service/m2/exports_test.go index 4b7129965d4..4d56cd033ee 100644 --- a/internal/service/m2/exports_test.go +++ b/internal/service/m2/exports_test.go @@ -5,7 +5,7 @@ package m2 // Exports for use in tests only. var ( - ResourceApplication = newResourceApplication + ResourceApplication = newApplicationResource ResourceEnvironment = newEnvironmentResource FindEnvironmentByID = findEnvironmentByID diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index ed642f899b3..5ac461033b1 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -28,7 +28,7 @@ func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.Servic }, }, { - Factory: newResourceApplication, + Factory: newApplicationResource, Name: "Application", Tags: &types.ServicePackageResourceTags{ IdentifierAttribute: "arn", From 92aed5a48426f643994b0ce6954e899d54c86aa6 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Sun, 24 Mar 2024 17:49:06 -0400 Subject: [PATCH 112/126] r/aws_m2_application: Use AutoFlEx. --- internal/service/m2/application.go | 563 ++++++++++---------- internal/service/m2/exports_test.go | 1 + website/docs/r/m2_application.html.markdown | 6 +- 3 files changed, 284 insertions(+), 286 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index e2ee81069f6..b6765b04200 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -6,14 +6,16 @@ package m2 import ( "context" "errors" + "fmt" "time" + "github.com/YakDriver/regexache" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" + "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" - "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" @@ -22,14 +24,14 @@ import ( "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/schema/validator" "github.com/hashicorp/terraform-plugin-framework/types" - "github.com/hashicorp/terraform-plugin-framework/types/basetypes" sdkid "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" - "github.com/hashicorp/terraform-provider-aws/internal/create" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/errs/fwdiag" "github.com/hashicorp/terraform-provider-aws/internal/framework" "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwflex "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" @@ -48,10 +50,6 @@ func newApplicationResource(context.Context) (resource.ResourceWithConfigure, er return r, nil } -const ( - ResNameApplication = "Application" -) - type applicationResource struct { framework.ResourceWithConfigure framework.WithImportByID @@ -72,15 +70,16 @@ func (r *applicationResource) Schema(ctx context.Context, request resource.Schem }, "description": schema.StringAttribute{ Optional: true, + Validators: []validator.String{ + stringvalidator.LengthAtMost(500), + }, }, "engine_type": schema.StringAttribute{ - Required: true, + CustomType: fwtypes.StringEnumType[awstypes.EngineType](), + Required: true, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, - Validators: []validator.String{ - stringvalidator.OneOf(enum.Values[awstypes.EngineType]()...), - }, }, names.AttrID: framework.IDAttribute(), "kms_key_id": schema.StringAttribute{ @@ -91,6 +90,9 @@ func (r *applicationResource) Schema(ctx context.Context, request resource.Schem }, "name": schema.StringAttribute{ Required: true, + Validators: []validator.String{ + stringvalidator.RegexMatches(regexache.MustCompile(`^[A-Za-z0-9][A-Za-z0-9_\-]{1,59}$`), ""), + }, PlanModifiers: []planmodifier.String{ stringplanmodifier.RequiresReplace(), }, @@ -106,21 +108,29 @@ func (r *applicationResource) Schema(ctx context.Context, request resource.Schem names.AttrTagsAll: tftags.TagsAttributeComputedOnly(), }, Blocks: map[string]schema.Block{ - "definition": schema.SingleNestedBlock{ - Attributes: map[string]schema.Attribute{ - "content": schema.StringAttribute{ - Optional: true, - Validators: []validator.String{ - stringvalidator.ExactlyOneOf( - path.MatchRelative().AtParent().AtName("content"), - path.MatchRelative().AtParent().AtName("s3_location"), - ), + "definition": schema.ListNestedBlock{ + CustomType: fwtypes.NewListNestedObjectTypeOf[definitionModel](ctx), + Validators: []validator.List{ + listvalidator.IsRequired(), + listvalidator.SizeAtMost(1), + }, + NestedObject: schema.NestedBlockObject{ + Attributes: map[string]schema.Attribute{ + "content": schema.StringAttribute{ + Optional: true, + Validators: []validator.String{ + stringvalidator.LengthBetween(1, 65000), + stringvalidator.ExactlyOneOf( + path.MatchRelative().AtParent().AtName("content"), + path.MatchRelative().AtParent().AtName("s3_location"), + ), + }, }, - }, - "s3_location": schema.StringAttribute{ - Optional: true, - PlanModifiers: []planmodifier.String{ - stringplanmodifier.UseStateForUnknown(), + "s3_location": schema.StringAttribute{ + Optional: true, + Validators: []validator.String{ + stringvalidator.RegexMatches(regexache.MustCompile(`^\S{1,2000}$`), ""), + }, }, }, }, @@ -135,214 +145,218 @@ func (r *applicationResource) Schema(ctx context.Context, request resource.Schem } func (r *applicationResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { - conn := r.Meta().M2Client(ctx) - - var plan resourceApplicationData - response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + var data applicationResourceModel + response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) if response.Diagnostics.HasError() { return } + conn := r.Meta().M2Client(ctx) + + name := data.Name.ValueString() input := &m2.CreateApplicationInput{} - response.Diagnostics.Append(flex.Expand(ctx, plan, input)...) + response.Diagnostics.Append(fwflex.Expand(ctx, data, input)...) if response.Diagnostics.HasError() { return } + // AutoFlEx doesn't yet handle union types. + if !data.Definition.IsNull() { + definitionData, diags := data.Definition.ToPtr(ctx) + response.Diagnostics.Append(diags...) + if response.Diagnostics.HasError() { + return + } + + definition, diags := expandDefinition(ctx, definitionData) + response.Diagnostics.Append(diags...) + if response.Diagnostics.HasError() { + return + } + + input.Definition = definition + } + // Additional fields. input.ClientToken = aws.String(sdkid.UniqueId()) input.Tags = getTagsIn(ctx) - var definition applicationDefinition - response.Diagnostics.Append(plan.Definition.As(ctx, &definition, basetypes.ObjectAsOptions{})...) + output, err := conn.CreateApplication(ctx, input) + + if err != nil { + response.Diagnostics.AddError(fmt.Sprintf("creating Mainframe Modernization Application (%s)", name), err.Error()) - if response.Diagnostics.HasError() { return } - apiDefinition := expandApplicationDefinition(ctx, definition) - input.Definition = apiDefinition + // Set values for unknowns. + data.ApplicationID = fwflex.StringToFramework(ctx, output.ApplicationId) + data.setID() + + app, err := waitApplicationCreated(ctx, conn, data.ID.ValueString(), r.CreateTimeout(ctx, data.Timeouts)) - out, err := conn.CreateApplication(ctx, input) if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, plan.Name.String(), err), - err.Error(), - ) + response.State.SetAttribute(ctx, path.Root(names.AttrID), data.ID) // Set 'id' so as to taint the resource. + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Application (%s) create", data.ID.ValueString()), err.Error()) + return } - if out == nil || out.ApplicationId == nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameApplication, plan.Name.String(), nil), - errors.New("empty output").Error(), - ) + + response.Diagnostics.Append(fwflex.Flatten(ctx, app, &data)...) + if response.Diagnostics.HasError() { return } - plan.ARN = flex.StringToFramework(ctx, out.ApplicationArn) - plan.ID = flex.StringToFramework(ctx, out.ApplicationId) + // Additional fields. + data.CurrentVersion = fwflex.Int32ToFramework(ctx, app.LatestVersion.ApplicationVersion) - createTimeout := r.CreateTimeout(ctx, plan.Timeouts) - app, err := waitApplicationCreated(ctx, conn, plan.ID.ValueString(), createTimeout) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameApplication, plan.Name.String(), err), - err.Error(), - ) - return - } - response.Diagnostics.Append(plan.refreshFromOutput(ctx, app)...) - response.Diagnostics.Append(response.State.Set(ctx, plan)...) + response.Diagnostics.Append(response.State.Set(ctx, data)...) } func (r *applicationResource) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { + var data applicationResourceModel + response.Diagnostics.Append(request.State.Get(ctx, &data)...) + if response.Diagnostics.HasError() { + return + } + conn := r.Meta().M2Client(ctx) - var state resourceApplicationData - response.Diagnostics.Append(request.State.Get(ctx, &state)...) - if response.Diagnostics.HasError() { + if err := data.InitFromID(); err != nil { + response.Diagnostics.AddError("parsing resource ID", err.Error()) + return } - out, err := findApplicationByID(ctx, conn, state.ID.ValueString()) + outputGA, err := findApplicationByID(ctx, conn, data.ID.ValueString()) + if tfresource.NotFound(err) { + response.Diagnostics.Append(fwdiag.NewResourceNotFoundWarningDiagnostic(err)) response.State.RemoveResource(ctx) + return } + if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), - err.Error(), - ) - return - } + response.Diagnostics.AddError(fmt.Sprintf("reading Mainframe Modernization Application (%s)", data.ID.ValueString()), err.Error()) - version, err := findApplicationVersion(ctx, conn, state.ID.ValueString(), *out.LatestVersion.ApplicationVersion) - if tfresource.NotFound(err) { - response.State.RemoveResource(ctx) return } + + applicationVersion := aws.ToInt32(outputGA.LatestVersion.ApplicationVersion) + outputGAV, err := findApplicationVersionByTwoPartKey(ctx, conn, data.ID.ValueString(), applicationVersion) + if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), - err.Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("reading Mainframe Modernization Application (%s) version (%d)", data.ID.ValueString(), applicationVersion), err.Error()) + return } - // Tags are on GetApplicationOutput, but nil - tags, err := listTags(ctx, conn, *out.ApplicationArn) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameApplication, state.ID.String(), err), - err.Error(), - ) + + // Set attributes for import. + response.Diagnostics.Append(fwflex.Flatten(ctx, outputGA, &data)...) + if response.Diagnostics.HasError() { + return } - setTagsOut(ctx, tags.Map()) + // Additional fields. + data.CurrentVersion = fwflex.Int32ToFramework(ctx, outputGAV.ApplicationVersion) + data.Definition = fwtypes.NewListNestedObjectValueOfPtrMust(ctx, &definitionModel{ + Content: fwflex.StringToFramework(ctx, outputGAV.DefinitionContent), + S3Location: types.StringNull(), + }) - response.Diagnostics.Append(state.refreshFromOutput(ctx, out)...) - response.Diagnostics.Append(state.refreshFromVersion(ctx, version)...) - response.Diagnostics.Append(response.State.Set(ctx, &state)...) + response.Diagnostics.Append(response.State.Set(ctx, &data)...) } func (r *applicationResource) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { - conn := r.Meta().M2Client(ctx) - - var plan, state resourceApplicationData - response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) - response.Diagnostics.Append(request.State.Get(ctx, &state)...) + var old, new applicationResourceModel + response.Diagnostics.Append(request.Plan.Get(ctx, &new)...) if response.Diagnostics.HasError() { return } - - update := false - - in := &m2.UpdateApplicationInput{ - ApplicationId: flex.StringFromFramework(ctx, state.ID), - CurrentApplicationVersion: flex.Int32FromFramework(ctx, state.CurrentVersion), + response.Diagnostics.Append(request.State.Get(ctx, &old)...) + if response.Diagnostics.HasError() { + return } - if !plan.Definition.Equal(state.Definition) { - var definition applicationDefinition - response.Diagnostics.Append(plan.Definition.As(ctx, &definition, basetypes.ObjectAsOptions{})...) + conn := r.Meta().M2Client(ctx) - if response.Diagnostics.HasError() { - return + if !new.Definition.Equal(old.Definition) || !new.Description.Equal(old.Description) { + input := &m2.UpdateApplicationInput{ + ApplicationId: flex.StringFromFramework(ctx, new.ID), + CurrentApplicationVersion: flex.Int32FromFramework(ctx, new.CurrentVersion), } - apiDefinition := expandApplicationDefinition(ctx, definition) - in.Definition = apiDefinition - update = true - } + if !new.Definition.Equal(old.Definition) { + // AutoFlEx doesn't yet handle union types. + if !new.Definition.IsNull() { + definitionData, diags := new.Definition.ToPtr(ctx) + response.Diagnostics.Append(diags...) + if response.Diagnostics.HasError() { + return + } + + definition, diags := expandDefinition(ctx, definitionData) + response.Diagnostics.Append(diags...) + if response.Diagnostics.HasError() { + return + } + + input.Definition = definition + } + } - if !plan.Description.Equal(state.Description) { - in.Description = flex.StringFromFramework(ctx, plan.Description) - update = true - } + if !new.Description.Equal(old.Description) { + input.Description = flex.StringFromFramework(ctx, new.Description) + } + + outputUA, err := conn.UpdateApplication(ctx, input) - if update { - out, err := conn.UpdateApplication(ctx, in) if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameApplication, plan.ID.String(), err), - err.Error(), - ) - return - } - if out == nil || out.ApplicationVersion == nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameApplication, plan.ID.String(), nil), - errors.New("empty output").Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("updating Mainframe Modernization Application (%s)", new.ID.ValueString()), err.Error()) + return } - updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) - version, err := waitApplicationUpdated(ctx, conn, plan.ID.ValueString(), *out.ApplicationVersion, updateTimeout) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameApplication, plan.ID.String(), err), - err.Error(), - ) + applicationVersion := aws.ToInt32(outputUA.ApplicationVersion) + if _, err := waitApplicationUpdated(ctx, conn, new.ID.ValueString(), applicationVersion, r.UpdateTimeout(ctx, new.Timeouts)); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Application (%s) update", new.ID.ValueString()), err.Error()) + return } - response.Diagnostics.Append(plan.refreshFromVersion(ctx, version)...) - response.Diagnostics.Append(response.State.Set(ctx, &plan)...) + + new.CurrentVersion = types.Int64Value(int64(applicationVersion)) } + + response.Diagnostics.Append(response.State.Set(ctx, &new)...) } func (r *applicationResource) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { - conn := r.Meta().M2Client(ctx) - - var state resourceApplicationData - response.Diagnostics.Append(request.State.Get(ctx, &state)...) + var data applicationResourceModel + response.Diagnostics.Append(request.State.Get(ctx, &data)...) if response.Diagnostics.HasError() { return } - in := &m2.DeleteApplicationInput{ - ApplicationId: aws.String(state.ID.ValueString()), + conn := r.Meta().M2Client(ctx) + + _, err := conn.DeleteApplication(ctx, &m2.DeleteApplicationInput{ + ApplicationId: aws.String(data.ID.ValueString()), + }) + + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return } - _, err := conn.DeleteApplication(ctx, in) if err != nil { - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return - } - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameApplication, state.ID.String(), err), - err.Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("deleting Mainframe Modernization Application (%s)", data.ID.ValueString()), err.Error()) + return } - deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) - _, err = waitApplicationDeleted(ctx, conn, state.ID.ValueString(), deleteTimeout) - if err != nil { - response.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameApplication, state.ID.String(), err), - err.Error(), - ) + if _, err := waitApplicationDeleted(ctx, conn, data.ID.ValueString(), r.DeleteTimeout(ctx, data.Timeouts)); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Application (%s) delete", data.ID.ValueString()), err.Error()) + return } } @@ -351,80 +365,61 @@ func (r *applicationResource) ModifyPlan(ctx context.Context, request resource.M r.SetTagsAll(ctx, request, response) } -func (r *resourceApplicationData) refreshFromOutput(ctx context.Context, app *m2.GetApplicationOutput) diag.Diagnostics { - var diags diag.Diagnostics +func findApplicationByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetApplicationOutput, error) { + input := &m2.GetApplicationInput{ + ApplicationId: aws.String(id), + } - diags.Append(flex.Flatten(ctx, app, r)...) - r.ARN = flex.StringToFramework(ctx, app.ApplicationArn) - r.ID = flex.StringToFramework(ctx, app.ApplicationId) - r.CurrentVersion = flex.Int32ToFramework(ctx, app.LatestVersion.ApplicationVersion) + output, err := conn.GetApplication(ctx, input) - return diags -} -func (r *resourceApplicationData) refreshFromVersion(ctx context.Context, version *m2.GetApplicationVersionOutput) diag.Diagnostics { - var diags diag.Diagnostics - definition, d := flattenApplicationDefinitionFromVersion(ctx, version) - r.Definition = definition - diags.Append(d...) - r.CurrentVersion = flex.Int32ToFramework(ctx, version.ApplicationVersion) - return diags -} + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } -func waitApplicationCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.ApplicationLifecycleCreating), - Target: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleAvailable), - Refresh: statusApplication(ctx, conn, id), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, + if err != nil { + return nil, err } - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { - return out, err + if output == nil || output.ApplicationId == nil { + return nil, tfresource.NewEmptyResultError(input) } - return nil, err + return output, nil } -func waitApplicationUpdated(ctx context.Context, conn *m2.Client, id string, version int32, timeout time.Duration) (*m2.GetApplicationVersionOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.ApplicationVersionLifecycleCreating), - Target: enum.Slice(awstypes.ApplicationVersionLifecycleAvailable), - Refresh: statusApplicationVersion(ctx, conn, id, version), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, +func findApplicationVersionByTwoPartKey(ctx context.Context, conn *m2.Client, id string, version int32) (*m2.GetApplicationVersionOutput, error) { + input := &m2.GetApplicationVersionInput{ + ApplicationId: aws.String(id), + ApplicationVersion: aws.Int32(version), } - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationVersionOutput); ok { - return out, err - } + output, err := conn.GetApplicationVersion(ctx, input) - return nil, err -} + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } -func waitApplicationDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.ApplicationLifecycleDeleting, awstypes.ApplicationLifecycleDeletingFromEnvironment), - Target: []string{}, - Refresh: statusApplication(ctx, conn, id), - Timeout: timeout, + if err != nil { + return nil, err } - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { - return out, err + if output == nil || output.ApplicationVersion == nil { + return nil, tfresource.NewEmptyResultError(input) } - return nil, err + return output, nil } func statusApplication(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - out, err := findApplicationByID(ctx, conn, id) + output, err := findApplicationByID(ctx, conn, id) + if tfresource.NotFound(err) { return nil, "", nil } @@ -433,13 +428,14 @@ func statusApplication(ctx context.Context, conn *m2.Client, id string) retry.St return nil, "", err } - return out, string(out.Status), nil + return output, string(output.Status), nil } } func statusApplicationVersion(ctx context.Context, conn *m2.Client, id string, version int32) retry.StateRefreshFunc { return func() (interface{}, string, error) { - out, err := findApplicationVersion(ctx, conn, id, version) + output, err := findApplicationVersionByTwoPartKey(ctx, conn, id, version) + if tfresource.NotFound(err) { return nil, "", nil } @@ -448,112 +444,113 @@ func statusApplicationVersion(ctx context.Context, conn *m2.Client, id string, v return nil, "", err } - return out, string(out.Status), nil + return output, string(output.Status), nil } } -func findApplicationByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetApplicationOutput, error) { - in := &m2.GetApplicationInput{ - ApplicationId: aws.String(id), +func waitApplicationCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleCreating), + Target: enum.Slice(awstypes.ApplicationLifecycleCreated, awstypes.ApplicationLifecycleAvailable), + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, } - out, err := conn.GetApplication(ctx, in) - if err != nil { - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } + outputRaw, err := stateConf.WaitForStateContext(ctx) - return nil, err - } + if output, ok := outputRaw.(*m2.GetApplicationOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) - if out == nil || out.ApplicationId == nil { - return nil, tfresource.NewEmptyResultError(in) + return output, err } - return out, nil + return nil, err } -func findApplicationVersion(ctx context.Context, conn *m2.Client, id string, version int32) (*m2.GetApplicationVersionOutput, error) { - in := &m2.GetApplicationVersionInput{ - ApplicationId: aws.String(id), - ApplicationVersion: aws.Int32(version), - } - out, err := conn.GetApplicationVersion(ctx, in) - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } - if err != nil { - return nil, err +func waitApplicationUpdated(ctx context.Context, conn *m2.Client, id string, version int32, timeout time.Duration) (*m2.GetApplicationVersionOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationVersionLifecycleCreating), + Target: enum.Slice(awstypes.ApplicationVersionLifecycleAvailable), + Refresh: statusApplicationVersion(ctx, conn, id, version), + Timeout: timeout, } - if out == nil || out.ApplicationVersion == nil { - return nil, tfresource.NewEmptyResultError(in) + outputRaw, err := stateConf.WaitForStateContext(ctx) + + if output, ok := outputRaw.(*m2.GetApplicationVersionOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } - return out, nil + return nil, err } -func expandApplicationDefinition(ctx context.Context, definition applicationDefinition) awstypes.Definition { - if !definition.S3Location.IsNull() { - return &awstypes.DefinitionMemberS3Location{ - Value: *flex.StringFromFramework(ctx, definition.S3Location), - } +func waitApplicationDeleted(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.ApplicationLifecycleDeleting, awstypes.ApplicationLifecycleDeletingFromEnvironment), + Target: []string{}, + Refresh: statusApplication(ctx, conn, id), + Timeout: timeout, } - if !definition.Content.IsNull() { - return &awstypes.DefinitionMemberContent{ - Value: *flex.StringFromFramework(ctx, definition.Content), - } + outputRaw, err := stateConf.WaitForStateContext(ctx) + + if output, ok := outputRaw.(*m2.GetApplicationOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } - return nil + return nil, err } -func flattenApplicationDefinitionFromVersion(ctx context.Context, version *m2.GetApplicationVersionOutput) (types.Object, diag.Diagnostics) { - var diags diag.Diagnostics - - obj := map[string]attr.Value{ - "content": flex.StringToFramework(ctx, version.DefinitionContent), - "s3_location": types.StringNull(), // This value is never returned... - } +type applicationResourceModel struct { + ApplicationID types.String `tfsdk:"application_id"` + ARN types.String `tfsdk:"application_arn"` + ClientToken types.String `tfsdk:"client_token"` + CurrentVersion types.Int64 `tfsdk:"current_version"` + Definition fwtypes.ListNestedObjectValueOf[definitionModel] `tfsdk:"definition"` + Description types.String `tfsdk:"description"` + EngineType fwtypes.StringEnum[awstypes.EngineType] `tfsdk:"engine_type"` + ID types.String `tfsdk:"id"` + KmsKeyID types.String `tfsdk:"kms_key_id"` + Name types.String `tfsdk:"name"` + RoleARN fwtypes.ARN `tfsdk:"role_arn"` + Tags types.Map `tfsdk:"tags"` + TagsAll types.Map `tfsdk:"tags_all"` + Timeouts timeouts.Value `tfsdk:"timeouts"` +} - definitionValue, d := types.ObjectValue(applicationDefinitionAttrs, obj) - diags.Append(d...) +func (model *applicationResourceModel) InitFromID() error { + model.ApplicationID = model.ID - return definitionValue, diags + return nil } -type resourceApplicationData struct { - ApplicationId types.String `tfsdk:"application_id"` - ARN types.String `tfsdk:"arn"` - ClientToken types.String `tfsdk:"client_token"` - CurrentVersion types.Int64 `tfsdk:"current_version"` - Definition types.Object `tfsdk:"definition"` - Description types.String `tfsdk:"description"` - ID types.String `tfsdk:"id"` - EngineType types.String `tfsdk:"engine_type"` - KmsKeyId types.String `tfsdk:"kms_key_id"` - Name types.String `tfsdk:"name"` - RoleArn fwtypes.ARN `tfsdk:"role_arn"` - Tags types.Map `tfsdk:"tags"` - TagsAll types.Map `tfsdk:"tags_all"` - Timeouts timeouts.Value `tfsdk:"timeouts"` +func (model *applicationResourceModel) setID() { + model.ID = model.ApplicationID } -type applicationDefinition struct { +type definitionModel struct { Content types.String `tfsdk:"content"` S3Location types.String `tfsdk:"s3_location"` } -var ( - applicationDefinitionAttrs = map[string]attr.Type{ - "content": types.StringType, - "s3_location": types.StringType, +func expandDefinition(ctx context.Context, definitionData *definitionModel) (awstypes.Definition, diag.Diagnostics) { + var diags diag.Diagnostics + + if !definitionData.Content.IsNull() { + return &awstypes.DefinitionMemberContent{ + Value: definitionData.Content.ValueString(), + }, diags + } + + if !definitionData.S3Location.IsNull() { + return &awstypes.DefinitionMemberS3Location{ + Value: definitionData.S3Location.ValueString(), + }, diags } -) + + return nil, diags +} diff --git a/internal/service/m2/exports_test.go b/internal/service/m2/exports_test.go index 4d56cd033ee..7351495a424 100644 --- a/internal/service/m2/exports_test.go +++ b/internal/service/m2/exports_test.go @@ -8,5 +8,6 @@ var ( ResourceApplication = newApplicationResource ResourceEnvironment = newEnvironmentResource + FindApplicationByID = findApplicationByID FindEnvironmentByID = findEnvironmentByID ) diff --git a/website/docs/r/m2_application.html.markdown b/website/docs/r/m2_application.html.markdown index e97f4d6eac4..3dddb73cc50 100644 --- a/website/docs/r/m2_application.html.markdown +++ b/website/docs/r/m2_application.html.markdown @@ -53,13 +53,13 @@ EOF The following arguments are required: -* `description` - (Required) Description of the application -* `name` - (Required) Unique identifier of the application. +* `description` - (Required) Description of the application. * `engine_type` - (Required) Engine type must be `microfocus | bluage`. +* `name` - (Required) Unique identifier of the application. The following arguments are optional: -* `description` - (Optional) Description of the application +* `definition` - (Optional) The application definition for this application. You can specify either inline JSON or an S3 bucket location. * `kms_key_id` - (Optional) KMS Key to use for the Application. * `role_arn` - (Optional) ARN of role for application to use to access AWS resources. * `tags` - (Optional) A map of tags assigned to the WorkSpaces Connection Alias. If configured with a provider [`default_tags` configuration block](https://registry.terraform.io/providers/hashicorp/aws/latest/docs#default_tags-configuration-block) present, tags with matching keys will overwrite those defined at the provider-level. From 031974ea503cc09c5e3d97ee52cc7c93d4ecbbbc Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Sun, 24 Mar 2024 17:52:37 -0400 Subject: [PATCH 113/126] Simplify. --- internal/service/m2/application.go | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index b6765b04200..a3d1e7729b4 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -16,7 +16,6 @@ import ( "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" "github.com/hashicorp/terraform-plugin-framework-validators/listvalidator" "github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator" - "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" @@ -168,13 +167,7 @@ func (r *applicationResource) Create(ctx context.Context, request resource.Creat return } - definition, diags := expandDefinition(ctx, definitionData) - response.Diagnostics.Append(diags...) - if response.Diagnostics.HasError() { - return - } - - input.Definition = definition + input.Definition = expandDefinition(definitionData) } // Additional fields. @@ -296,13 +289,7 @@ func (r *applicationResource) Update(ctx context.Context, request resource.Updat return } - definition, diags := expandDefinition(ctx, definitionData) - response.Diagnostics.Append(diags...) - if response.Diagnostics.HasError() { - return - } - - input.Definition = definition + input.Definition = expandDefinition(definitionData) } } @@ -537,20 +524,18 @@ type definitionModel struct { S3Location types.String `tfsdk:"s3_location"` } -func expandDefinition(ctx context.Context, definitionData *definitionModel) (awstypes.Definition, diag.Diagnostics) { - var diags diag.Diagnostics - +func expandDefinition(definitionData *definitionModel) awstypes.Definition { if !definitionData.Content.IsNull() { return &awstypes.DefinitionMemberContent{ Value: definitionData.Content.ValueString(), - }, diags + } } if !definitionData.S3Location.IsNull() { return &awstypes.DefinitionMemberS3Location{ Value: definitionData.S3Location.ValueString(), - }, diags + } } - return nil, diags + return nil } From d8ef0f91f68d334abf6a9f94ecdaf8497720ecf4 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Sun, 24 Mar 2024 17:58:55 -0400 Subject: [PATCH 114/126] r/aws_m2_application: Demo application from 'https://docs.aws.amazon.com/m2/latest/userguide/tutorial-runtime-ba.html'. --- .../m2/test-fixtures/PlanetsDemo-v1.zip | Bin 0 -> 1335660 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 internal/service/m2/test-fixtures/PlanetsDemo-v1.zip diff --git a/internal/service/m2/test-fixtures/PlanetsDemo-v1.zip b/internal/service/m2/test-fixtures/PlanetsDemo-v1.zip new file mode 100644 index 0000000000000000000000000000000000000000..a143a066168b708f473dd9c8cbbb2190a42e10e3 GIT binary patch literal 1335660 zcmd>jW0YpWmgSeWZB?Suwq0r4wryLLwo$1{+eW2r+jizR^}64z*F8NwGyf;My?)k z01)t>u`15s6W(Bs3V#96{||T#DO-&r*)EG?92Yi9&Hq2>~+_5SK8q}2MLr(p^PBk1&VwuIJ zSP6)yVlE=&sC!*TLSZStpsM33TXCmZ2}f7iv7|rxgmhkPJ0mhH=7@^>b8tY44@cp3 z?BoPyh{;i?PERCv#_O!uQiNi?;EOy&GS?JompSOvWkYlg3}&xU684AB@UxLVBA|v{ z-h)9jp<9PZ&09x#u$b5HQzw=5A%+Icz`%64IcL!mT8D9;)}Aqvr7bQ1ucdAgSrQLd z8KN3StXJWF(7kV07n68pZb&8*FX(;;{|CMQd;1{$i(VUhb0b4z>;FeP{V|YGZY&Xq zX#NM|f9*u^UxEG!_@8X$@lRXPi|HHwZ){~7$AlEbh#YDz^MUl}_R9{j8Xh_lCJH9~ z#H1F#xURVr^!8XAlzw>E$(`Z4!<*Je0R42fyLc8~tq&F2%82ZmU#FYV86qx0frt(1gOMcYg7_nB93%4;FZqtl_G);6YmHN@tk^T=Ac5Az806 zbZ)2YJ-MV#T;B%hV}6@#t`@oyTZ-@ z=)y=ukrwbJy5jSHpoQqar^VLL((eB&Ugi!F6~jOQ0BT48fcU@X#nr{q#`*t7Op1!O z{Td^>pIpfo6bE(u4?!9w^-vXbVap*|jr1TZ`6z9U=DWM zuTzs(m)iJ&>Jt!#jmFIvr7(;LIHWG~Olf_+?dVJ z(UjY8Y8a(b+5+ zrGHB&U2Nm6;K-pZCENb^^^;E=BHE!Pg4NY+V6xP=SI7flUh=Jt*_Pj|)cJ6c;!tFqCYroQhqUOl~i1EczMgphq>s7MfdmO}gQ~erN)@*YYPLX?NmVpg+~qN0xb%=p ztNC&s^Wf)oAkPfkoEYb`fvCN*ygdhL=vgl&U2Zg7qu~Y`#o0q7ia4Gx3C3O z*{Eyf#%W>L-3W`$120SOYc4rtbq@(L{T4!BJA^Ww43qCX%jLhK>^M{0lGlnpIrx3e z^I99%s&N*r=Z)Gznpj+N26%v2|ME7+3LXC`8i4q_zO5{co&Vj(2t)id`bYg={Pn-o z^dG}XSW&TqzySbo;=jSg{~S&)s;sZ)gAMx*DJH>5QxeO$02NV^Rx-9ZC z1iXV7*&mUy8DuRG464;ZlsLhoS-+jNQ8GJB&7b`E{CL~j^ZNL?F6S5ka5GD$5+ny8 z-(=ebvWdMsAwjf4t%gbXt|>Ut z=b_f_pr4HC?7rzP({>c>LPAOfWl3?Mk)qbg_;@)CPav$-=hSf@K7=UaCR}EG+a_X` z^)=O(Bb;B*3A#FAM$le@XS-xyLQhf6z@LR5nsCj;5vikq1r31~m7Ez54F#Kg+)b5O z!#p2=n+-c^esfU14;&H;yr_sJJmbpE%+lvPS$PS>*X%S*$NxY|sUf^5Dt_XmzzkebY&Hy80V+a{6a zobjb!)w#_%U5_n+)>>@nlblS6i?np*l_Fu; zN;Eg^#5x`B>ZTd!iEhUtL$c7Z39~XvJSnpmTrKexRzI>;R!-hzhEBx_(js@nNf#4Y zcSYOhsNYqf9g(i9lLkqm52Z}?>iqJk5OYk>r0Dv1P;Jpm40YuyxK+VxG^H!4Vokb| zPnAD*`rH(8bJ&%?rxvOPK7Ke z$9?_LRwk4`l_VO3YZ2sz9l)eO40XK2+X-nuz^oI9w2Srv+Z}lB0A|-8f5Y+t+cQ9P zL-`R}q7m0o2V2P$gJi(cY(O)71MRktwh}Di2tML~PpQynt~i2@n?7)S3*mz@y~o8H zZ@&Z48F9Ts{sCav$M}F27_NNb@(bMFdwvP#m=Yvh>Rznct5&VOvu0v!!mKJ7=@@z; z2z~6RCM~7v2tyFUb?M!%tKLZTeX1|0-DVS;L3uk^FR`EKq^$@vx?5I^ zK}|1=S0hyHMrefn12LV57yWt{1Ah1h53)Po}DaDzUgFklB3$k%<3;Mcu>(V6|fgizO~_&*6D%>Ps}XGfcV z7sEuL)Bia!YV;~rk%Z@WN&o`@^56jgjQX=mvo^;cNw|Kk0dCc1n$8Lfl<7j11) zn|5B~M&?iJ5$0%Nkt;iXDqabyKuIhj`u4E5YseArIruHT@$F)6Tgj{tf$6j zL-ik7)#gVQRQK$I6R*|hm)7#`2ZOacNA<;ZKNs@|h|d+lc8@uAW!f9d9`BVJLT|-Q z&&FO@?mN`B9D(>yo7|<2(o?aQeU09IXVzY#5zwL1H*uEGZ0YE= zx0^c?By(5gYxVGUVS%R(iR3_}Z~56))U9tGFTUwARO+HuqHUOn#o0d$qsBU(@u$ba z$3R&`(0@fzNKvwDGXyD?^bOd3FRU2MD2>*ua+X#qE+N4(^m!uNJLMGn;#HeR;n2%Z zO{dXL*eUUbgTB|8&tk3Z7b%|cPx+y>5{#aM$5^D{d8?J^4NGo%->LEqOz6fk!#I|t zd%=YsUc;G%fqQ~HS(c?nfgF43o0yDA`ev!5g{g4_9Q8Mh#4~b94XbCFgnpdCWahn) zjKO>KAIw;p$yVj8o~pLNRfRsL#1;Thke$m*A!ht-!_oY1+?;{{w=(W-wDE7ni2IN*W@VWY#TEG>@pK)MBp3*EEVVb?)Kzdhc{;bAGmCu z)cK8{{lAoB6pKwDAWJm36$I1ZNV_%^Z>vdy7?=g%$#>mc?yk=JQ6>s2hfqF&Mn_zh zQ!k!h-ArEJGFmY&WD7xl9^z}~fk^32xc;R5_ssF%6Z2)s{~Rho|J~kyQ^db#9{-G% zFrO2Q{!#ziXld#%0;NB%9@Hl)Ko|-QK=L0D{=;zz-CtBXCVIxdkGrAMzljCdUs&+} z3SISKJmDbl!Unt5Y`gv+Ufvel^N+7%*`o;_%3!4V2Q6E7H??P}_Voj;9~i}fLJEJA zUt+-MT(n9(6Pfb(EC}H39R#2NZ~&y|$l$~0=!r1%jTTw@am|j5`zS67ZJpK zQR?vJg8+n3ja9RS%sK-J>|JbgTDTJZjvv5M)E9r3H!_-ul$jW3< zSM~r<(S(^JG(c$C@_wIn5QQWs+Hl0%|ET+uoQ@&}V)V(25HK@`iA=Q+hSO}Z_Q!OgvxC@3P0Qt@pZJGa7H=dwKR@j&$(e9tv6bw6 zIyFZq6}CGbH&Ao#Q#xH%D1XeZ5nE>wrXXV^!Mue;76xqHgv(f}Yt&H`?*MQyR?N^l zmE&uo3N;r!pmQ8WA=GPg6cIO`>IB!=Ls8eKXgU&@+GJNYj|V>b0zi5^b4&1~ujBLJ zcxnu<0a@3wFGC57^XCKh9s)~tMPEQ zg-%Yd+uKK?CH;nG7x#dGJqRP1G)n1k5c|bQ1Z{o&Ywj1H!rQ*nq3KA<5xlLeIv2#7 z%kx27$dmp!at1vgJ_NIqr@iy@vp&3Tmb@O^Hs16;^nr_kxujR4{3ABPtxc%2r~RV? zqVMp8H`F)LzIHmBT;Kij-+4IhNiNgtXg8^Nu1CtC+IWT#%%4U$M_l8)Glp{^HcXH?WV!2g=WP zlqd$5A)vfy$LV;J=tINjyyH{CYz{c%WB@U7!+ZWUTT4}{oWnJa^Y4c?|2lp?)Q@rMZ1eI@ai9tC3BKsTX5Z$MF?ro${Q zNwA*&PHxm2_#4KU=5AuXqFng|T_Sg?dZkXQfkHah0AVoV4%s7(W|btci6efBj8Mpq z>^I|gx>qjFDC2#GI`8Owh5kNVgem30a4^_gbisBKn9`cAkbJuWLj#><@cw-8S8>Uc zZ`oi|5*;BwF(Sm4v+q_l;x&@0IgEGSrAld;bxIWI24sJxx-BJ>@&Vg5Xu0x5@fmn* z(AJN|gSAB8WlBFxY7S+=%~_w+K!D)fmGhF+zyjr&UE(4dP`YYRAwm1w_+CO9RnJ@% zAA~WCk0i1m09K`tFYGfKXC>vSHEM9I?Pq&6fvI{SNT)SBP4=JZ=9+MwR0^)U5cukH z=+s<<1%KAmH~Ym-IKWbt5kj7Xdd77rQ(m=I?9D5TiIGayU_&rAb@P41go~Z~_hN2$ zG*QKP#xYVg7JB;yP1c&#qZ3gyrDk5{Whct)k!MKR5bB;xXbQ!S-5iGcQa#(%m8;x4 zW)i`Kz{ARN(cH=Jg8x9oGQ9qfRE7HSkcfSc z2{m{mnEq7KAUyqpB16B5yoO<0trN2>j+v`iX)$jilWK^=srOs>`L|RE?S8G>%!?xJ zaGG3lm~&>=S~*Y7L)gk_Z=T@x%K{WlK5Mbq>^o-|g%go)qEM>#{cs_u+X zLMY!;p7Jt{CC;&IU$OJwDvEacLmCiEW^w2YPsfRkKsPTtl&yrAPE4(c)tgt}bA@P7 z2gvOpW5VBBH!Is_il0E_!q315uiS7)tb2gf>swMjW*l|L=+@|L<<5;{qfzsqR<(>! z!rwwF_3iujklEeAUwOgUi<9x1iY3H80f}r?@B#eyFnPqSTESLshB+b(s7ubsBO9c@ zs|FMIw>o+lik7WR}PVg?gM_uU@}z=?@0(L3JyZj_Uy>WZ zIho*5iJ)=ntFi`lMBcBoDV98dU|Ty2Lk&SkFCF<_^pa6G5U%hjsmkiq1VxQ)k?b2k zJfjW?|5>XKZ%mkJN@D&<7n1!>NhT}$~T>|<@+FmMtA`0vD`-IHB?!Kf>JifL;HAtsSTC&=Wp*^kjgtu z0i3eytimAPTIJ2uhJ87x$P?%aNZiXn<^Z}9TrtR2j8c{G6$Al6YK=1a#bK!=BO-cx zoOy?4XDofoQjr@frME@lY;hFRH#$;B@JPHeOk-#Z3a8*;j@6%d4w=ddhyo?q!wZ^6frAa59wY5crDM_pS8hNCwTE@acz6E=1oNC6!%@!Og`R z#YT%4mGFsOSFZT!K(46^%MUyw$Khd{vVTzaO%z~?OE`wqD_K`H4+=1arCKO#`UKJi z+=q8RsnfQDu@sSV*|&fD?x}M`FTxJ8Oa)lW(PO9UPguh%>QxA_(+i@Ib2B)ac6b{D zWJ2U&@PM!$vdJ{vq0|!upfAE+#k|H4?MwPv6|lrhCg7|>?Kou%w=4S=T;Bwog!6`K zufd+zNR|s`;s4A@XHDE7ab{YnJlhySBmjxlBAMA$T9cW^Zp6X&eMnb&Asre|=PeGfw$t`PJZcfj#8(a2};lrauQ<2KoSp`4k$)Kt)6k5l!D zOsG7oGeaoy#Y4FMJ<;FAt;{sVVj2d;HHId6(#s||?FLdB4CHfDGJEim5-BNN(J^gj z|EpN>zN%cM>B55{EZ$li*@a(TzHzO&>ra@?bN1AoDpASO$8)$dn|UM!0F2v=n7BQe zi1_d#UJf;O#UN}!*Fdlz3O^H@5IHt=HM{)hxcIZs+6(MJz3PjT=vP#6p%zT0`C^%F zw+zS^mtPB#X0pobb6<2z_5`xiuJNHJ-ix!5L>nVKX$;zscp5j0rtv2nHYQUFoZ}^l z)wvN!;%$w-N<^^7do8gl*5YOuiXR)$+nCz>D>Iu`({dT#N!4ghhYZN~o$13lT4&6vhAO+zb7x96wy6=`rp21%FzJ0*L zj?0gJO<9q2FM8cWrwG$)8cf*6J=u=6+oEUZeu}8RB0=Q^3JUWFs9I;CeI~C*)KqhI znfzHLX=F#1>~Z4=%5o~rLjs>=#gkheqi2H*ekAO8L^R3N#nWN^?GM&X>^2}<-TNOz z3frHD@Qa5Ak~0UWC%zIPW?}GA?O1%!<_loi_~7-=y9Tgn5o)je%@E(HALZr1YY>#; z(m2TnRu?9VC$T*$-jD#hHc-4vLZ5w~RFHu`yQXGcy%;1?Kn7RZah!?yiXI%1`e|8; zt{dNAVjj{8O_qIUR9LV_`VwLsPW0)k_t|mDcl2g(`gf!d z0%C;&j)kvWJy|fhTpw~;KGthTmI@FqfhD5m5B3V!)6q=R;8C@{aE=vvTg+ z>nEoBTcCf=wLf>a#)zXVM8QTv342024x-p*No@dp>q$HzyRQHSj?yoEWXmve8Dtlc z(tD?>iPKZ;ORnV{=yMG`vE|f#-(I0+dVAq0%+sK z;1A)QN-^_sg`Fqdc()Ln@Wu@#?_`E>rXPCLGQMZ)YGk&{R?f0uL1oERgcwh_jP+;y zDKMEFY~+&ElD2ae4%=&`s!lSH!GMEE#-LA|dot}xG4O0Fb8jMV@MrM|1GHa`U9E51 zPSG&D=CMPEI7=+IiUFyEav-f~zWRmQ*ma|=FRVRzMCCn(=}=|Ij>y?1N@p}=G$EfG zh{N;2u%q|J(Qx9dIyb1%a+{)I})%MB*Jno-KEuPmfM>qy@GWJ-nRQ|QaY%@HA zJrgHm0B!O!-OYsZXl)UmD47kxtn`?7y~`EDvnX?#0ZPvC(E+}Q`;u&~r-Q3CXl~?# zpHXB8vkgXO=t^#JKN4wMY_Rbv4DyZ=?0jIG6VkJMV+{KjELrXf($F<>C5-xSO|^90q@uH5cNLn595)Ful2qCqf9;F=lAth`cALo_yPPJ zvE5oHL1Yi!h`Zs6z~$wK_croH*i|s(bzmz>P(>aeG(az3^TL94%lbYUI@gn4TU0CG z!z>{MIg%&4u)6-;>Oo6u499S@dF2-fhoVWpqz%IM%=U;q$gw=KqCve+W&Y)M2F=fS z**fq_8qhAj@9q8rNFTZ%P3d2HfH{&M*%EiW`{&YA4!IorCWf%=vzmEXLvW$jYbj8}R`nhz8! zL?W##q?eq={kot^JwmsvV&$mo&LRCUaUcM-{gI8gHTq-LK8j9Emp3)aHr8QI6~4H6 zD+TGq>T6;1qX5|aTAgX(jub3Oh48~;L?}=tNp)H-1LTIBXb&WMcA8oLYojk-3aBm% z3%0rhnN1|dISOS=C6Mhv3~dZ;N3{z;UP7Ld><1z1WQzGa=?TGlrsN$U2@+1sx6Zx^ z$$F;p7(7ufd2^=||ex&@`>4p)P6%heFK3D$IaZ-qJh1Y-=0XhRJas*axPw05}mZ;v-heo&& zb}5Jq4nzf2FoO1)gZ#@l9{&4Fa=fu~q4*Xnlv;1y(hc_98XKv{BEB)M2|ef3Jn?;i z)UHq_BnVczj6{YTN$BDGJn??O&meD9#6495?!CQu_{GuKo$xvKF3ym|rAvfDGJS58 zQ{&!ODgm@zxQTI|7Gjxq3dNCIB#L9BR%|K|xv-?MU=kj=KI9CSm~LF0-8)9jS}xVL zS=K!mcB00wxu6|A<=cG`2lx5+;;*RCjw^^sS;Gzc$kf{a%Of_FyK7@Moc>>ZYz4UV zbO4j~j4O~n(><}N1upU?z(n!53@|S|iI4bx&s2+minb7FIGz%LU+XLlSl8^p;5%7w zheY2xD)I!8y+A*VjjC65OiXOHf=zAjUs|TSwQ@?$%vP;SnR7@kwqg5jEju2iUf!v)^L_HKYS?Pk@>%~H z2}{+A4-Vtm?^X+HDH~DgmMB^nsP^PPN!ct+@Ot;f%K6l^YD%Oe#i$aXZP0nG`L6G` zH(J)nZ7PFYL(T0-aICSHxZ6{5-9n4)cCoE3mbmLvGF?K+?MPl>gHqxYLJuW`G%Ohj z>7MTElJa>G?xbL*`wJ|I)nIF9dHHUfr^y5^7HU9Wwa3%Sbj`k2A{o@qqD#hg+DOg( zRw6mn#$!v=blVKf^j0G&)y5-Blyuri%yL&EJH(yPp0(eaO?MMFP%zwSAK9c;H|rC= z)4Rddz-oHZeX-!FemEgS<2RNUVTv8pW13H$R*0moC6o|av{70hYA^al_e*5#TRmY{ z@TF?Cl&lR|mR96oh9)%#hvoSjJe~fs#q`Q5*^*z$ax1)Ek^Bk zkv&pN55~)z0@~+kJkxfB%((qVC+rrZ57u9=ZN0u+EQjbX7W6f^XW@8K42Xn-F=K=-KnxaB-pzv*sytc&{y**!b|_ zaEAb@hLj*l`FCV0REya$XT?VH3Jw z%Sk{V9vzruRqOI)mSV0&le=DZ9d`8vArk2zyup~K7$e~iVQGL&6#)Exi@He-0Lnw4 z0-yxdRKyb0l;mQ*fD;cR-4xiL@*h1WZ$JjvyN5zxEa;v9tgB)HFnX6|t?%R>c!lxN zV-5hu_sy)XE)2Z_Y5IWm^z}gH-Ajv!yw~lMm!5#H_}-PRsfoGlsqxjVE8w^9pYkHB zK;7_*Y}N&2FsYLQ^8ya=Qf^RsQF>~63{mwRXg$lI7ZZEaaV2~9Jka~+B;#-gy@Ljr z$T<0nzHEt-R^V)|pjJYyq%mrCzWY)M^U?A5jz3n~Fbb&X9*fi!*Ex`8K0*o({#bM*~c{b z{XnycgpY2NB2W;(hSMj5t67*`D)4*pJJJ`C-^3G8cQY2VW`hwdN*}lBI}9sJX~66R zG&=JONCfz#TmtxnoPx!#IxwjXP-Zv@TDzmDgBHFv`>%U3)5EKr=a0@TYAb-C1sXJN z(+K?zVt&Axv@h@|>BCxfa|FY!x78(pU3>L0eP`PpoIYX)1F*lnIA#L5dzun>Sff-O zrM7OaeXJhGmwYz8B5d2e7=PJt4*|SWdv@(1$^qPLOOW|rE-%+a$K8}UXZ%F!6+=AC zSPwX^)vlgw_bT^&?!Lrwx7tpwos>6jor=EBKlyseok5z8uEdHQ%d=riY!z$FXzx(O1$shNtMh4_rdNMZ21HpTcNi|L)7A7QY!_M~q{WZq1ZU=2El zB8Gq@uQQa)@1m=7N=1h>{pdNWYP}t9Ngru2N6jHCaBlHCOiA|)BI1(J0Tn|g+k;kb zqA%hCo?kV&ZmBg2Sh{P|cymu>j(x%O=I!;w=o{}P^o-XSK0$oR-}X5B-3!#SthY9N zwX$T7+w5~Dhi1j&!{%L_%MwJnZm;O8oL3Ycf(wsiA}d45 zDgOjY&^VN0%}JO(hVDNvxxahyWU*@|e)nwnuGkBo>44j-z@A^AH!4bm0RlcNT0$*} zfHK6?tv%WNw@g-aHaEq}v9&KPVQP0Y$zrsd!cjYa*dJTVhtX#2Jf0tqFysL}n%{q4 z(bn)Rzc$~?Ob0H)*Wg8Q895yF3Iwqj6?Smrp_QL#ckIIu@Oohz+b9i(OodG4$If!1 zxrd!4pZLNJ^2hwFd(G#tah@7Bnd+pI2x)FY!^P=g=6^8C0nU!!}|uQ?}-mWnz09%X$TDdd0A7Rg161zx?zX z3S}1~jmxakY;RQHJC!@ln-PY%fu7`=_+dyi&z zM$>>d%9AJ}H&VB0rN3{fHriG#)m}$+uJEjF&#=Mzb2yU02%Nc{)`deSKjO*eiOa+V zzY=DVcIj~R*{a<01PHvvPm1vY$m%%AGbks(z&z-6Mw8NorrynG;TF=L zA>6Cf?>YO#0KPEx{}60fqpfkdQSFGFSLW;9M)1p*Rzf3Xibv9x;yZ;0L-83lpMnNJ zHOp4G3mia}9ZAf99nZ+%saF+&@&9<>MjcNF()PhG*I!q*7Ib}(wqv#Qm!Ibou?~Yd zP8W*0J}HdUOp-F#lcgA!R=rAimv$?5&nY83hI#;eood<*`B5Jtw+gjG1;1uz>Icmi z-$#jyC473RLg+-`1$rTqpD*>G$jm)i7hKPJ*Gb~P5(yX5Vd!){S&{1GJLiH78T&Jo z9mBCiuYOWoq>KayApH;vuFVU~@i%abh*n;%TnpYcnefN#M)%3%xh2{7vClQK2Gu0S zQ3_>|=XNsN?rtyPYM1Q=e*%P={qeh_Hcm73j#pz)T|^)2w<%N{jSoXyc;@zN0$L6| z(q^ra=kuh9(xLg#C;wgc82*_I+aByd)ssawcYOqNg1znZ!y5G?9p2l)UfBTj2l_`` zdDWk!vi{wR37xF1VMd->-4IWpTRr&&!HD>!*kDG%+m$y1h}D^rBN5n=o^-whr*X7H zw0Wt-E~RTej3;#Unqk-8yc3amK|4w;k)hl-|CN#iMSZti9vgRx^Yp}Zu-F5OW^ z>6z|D_f@$dC!N=`bmtPpH&JP`m^-93Sg;rZtgZ${N5iY4aIs{NLjbcsRrTp*a3&&olsTKTQ|{jdh*HeA&f6=F*b2BbMpO?b^M-N#$tBLg^PGp zlYw}&xBWiA^R-Q6+_=t;_A7sRJ#VyQL4PB;fnGyK1H;LbXk-@Ca>(R>pqkrSsH{-` zB4j`$?&bj2T43s6M7f7Udo>^kweehe1}4XtXv+_3`B-2snWs0wzvjKJkhK4zf~%6r5F$!(E27ScvUm3bBD!%%N%egKXT%KLC_392iHGl&K-ok>oz z;tS3^qx}MLuwaHr~+&?CVzj-NDIj<3*?helzY7j?Q}5m zB7x#1VodK7VVnK>j+YQa3c->d{7c9^dxUd`Py#`&7>p}Z@P-_n7JTo_K)1 zm$?JrU5{a04<_9RB6mUu*8J0E1<&rLfTf_5ve&~R$agm2ZZ_ayHiV-Xpgsyh*@oqS%c|z!BW@W^U9$0N?|SbKslR$ zdW`_v`bYs{82^6c_u6i8g>e3ba{h>Ea`tGSb#RWWM7iV<*%cy|Cot!i=MKSmmrX;+ zYvHXDuxB}&&H&2tKoS0EyX_DG*C0ICfVQ(BPFKSz*MM_|UPkMFB6Y7}9M}GBEO3q; zRJjN|q!5yh1bvAJFgxTPhXCGPF!zXQG?6HQutd30X`};V^@CvNh5&(xW5>&&JP(q~ zP3akR-eA3zY8H+tn%2PAjSyd5aE^yyZJuZ|z6ie?Z}Yblq^>B#ZHNYr-fRv-d%XZ8 zLhNn4p+JWH5ZC>H)7ya>D36JGnozc?S2N5xtef~6-o8awdLO4`npnhVyfm1KP zx6tHgezSWsrUiI6&S40Td(ayXpqu|B@7*q-PDpE%BbG=*|DP~a58nU5GrfN`EEeFSN0pRzQN zq4ZfVKa7w{qRW8d)1byaAIyJ4f??;6KyB)$O{nYB0Fh->(L=DnX%yvf;1Amn{l;LL z#{drBK6+onE4>vgfr~%h7w-%!fmoM;c;3CWzJh!L4)cTt;eG~T0-gRn9%)2781pY7 z%eU|*d4RI3VE;Ri(~thv9!3G62NOdp z02POyL7*k#+EzNnMt;zb@vY|o1_8JrM>PU)w~4?l0T%gUTndkUDCssPSypqnRBmJZ z`#22Nf}4%`(1v`9m*6lT^e=P?fL3U*i|>=V?R1S&k*LL_n)hq8eh3Ge_K6Yu30L_*q9TpQ?!0wy2~ z!4~(J;Jb&5$1DnMgv<@io{*V!v%ww-(uv}eC-UeaBx_NngE>xuUjee+v7sR420U_e zBwP~2hXbt1{lVk*vjE0$0J9hJ1d6H*8o~uG!Um4mL$J=<4gzZ-yyq$ooex!&?*xmc z1ELEk-QwFIv>MioD%O_PH4eRnW^#v=apMkw3#bme!PhesznhUxGYH;=NV{7w?^VYh zERA(jF>Myvi`yU?#h!>TF4}l0>u=XGf z3)Pf?L@xWf?Kgy-K?pi9N*j?m4dG~Cqg&60dhN_Doy2lJ1!5k`H9B>&8+~G}NiFz? z)G_Wz8>;CaWSJI9bdQYbevSYB?S-al8N zHZGu&fgmpjP}j=c_kB(}q0S#v`R27W`M!{S=@dR6S#3cm#^5ZaNLvS>&dtNweNb`M zlY|TH`bZmk*c_Zr;D5G4E#XG}cOjBWLoLysK#oynICRng=TpNoLd=$&1EA7KXWd(2 z1%IG&%fdXnn5=vKtL`Il@QcCVC~xi!U@62cdKSXV&!h27_!Rtu;F_B`oO&iq#xfM5JKN1hwRGXI z`!5}SaRys0eUQqf+f^koJ_;zZopeMdb{~%63rjPee66O0LQyDYv6FML{YpoX-<3G_ zCIfY@vme+K_UJ;SbWtgAoiiuw+7nhoT_aYF_s$(0*P}m&iWO5X+nnnJyp~`Y+}@M# zkX_U9w@u)OI#SE%_i!B(5DX#vH9(eM`D_4W0%{lRIwz)u-OGXB_oxLF+q)9j|5f8unLB(sYuR9!}syR^vGQ_5A=mu#r z4u7{8i-tsu z9f5v*Kj^$hjIdo`jfHsBe*8)$P3paMp%&#=`d$@zLC_}IDIG+orNZhhK#4hpZbtRM z!23N`+9CL@(Z%-gHb|;daL-tGDc}3#{Lp{WXs9b!s$(8m^I*!#I5^VCo_#FlRN#a0EJBZ}>3px!_qs^5ul|e=0m(oxydO2i2g5-)UW9Tq@6p2qh317M<#=YKaqa_8 z;Uu)`p2*v*Mw>6!wvL{4r;oNN%VGOCUAW97&C{z3z`@qk@Yakl6-ms zoTCaL#MU{?Rjes4JGG#o9hF$@XWN^vVJqZqg z0aYqdqqY#f7efO60hSa6o2RO}Qdd?~g;3|T!u8UJU)i@?AU=PNLO1cyr+UM0W$oKR zraI5BxMLQjCkQPBw8Vb#RCEbgW}~L=_%ji98aw*gB741yC?Kf;I<-h*e_o8<$vNQ* z*90;st-venXhgFh>tZKDiB)*BbyRpe-2ax3c|IY4!S|wkVN7z@rf4;8+WGW&945N>2R%D$3+tl>w*;Z{h*WH<3$ zM`{;Ay7xLOwum&FgJSCKQkywbcqh&lQ(9pT{+ZFO&tHaO=Rq!)!<>o6;u^!$CKrc7 zqd};bf8GCQE1nQ1;FgZRQXhj1cKR>7(B0%;2O zjhb9V_Zd3GvV}CMk~rUS2ab5annEm9T3tK=;^t5%f>$tBn}l9)F=b%NMs8?AOXGA& zdP{yue(kwg_ZXo?OWilmFvl!!w{5#Eb7b;_^&w_c#r}dvcW2W@bGy)+sCy?heYTpi zb6^vT*XTXL(zNSN@yR`BAu6C!XWqN&_l2{mE%`d-`^|x23Pno-Negs?^e-QN>=PVl z&kc+&Vv;JqWWL_+p{cHMy9pE0fiINKm#lSJw=Ih-tw@#jXS2ku$rBBodv6mf{J^P0 zl*4Ba6P;e^v1`By3x6_hXA{Y8C^k)aJ{zn=Fn+HfhG!ZBG|!-LGI}^__-Kg5?yUwn zVo)D;`b3=siZgiq%_8cs#xJrT8u$P)!8KTvwldgfXMrurZ-hM(G5mwsgMWT$$_+U8 zC4%$}7NS^phEam~$5g&mXEtcgNr;&6<=7}|xy6e`e?8JmS9tAI@S)M@AMAMe%v$NW z+{hq%PZFCrNef5OBs`k$SeQsO&M~zLU}?3OU1w^V-&PRNl*I-wzG=c`G-&LIOPfa) z;f9jMEiN5DQ{&MZKsM;tmPC}Vit9{DW)NR(BI|_H%s{qC8f4!xMq|KASQ_8OH-taT zJRR|>Y>0b+yS>9?YD`I!Ed$O>Cg@HJxFmm(nTRy2`eCuU(*m_9jC1MdElM{K%}6mP zKiQ{pW*Q9q3i@=z{nY|{cD*8ayBJ|68~;SVNQC){`O>Q`ZOr;OZGJ84GS<*_HaHbw z%#RaZT=n?TZL-^^>Z^^%qq0$h_hj5TKw&F+SA17j1KbQ;OzC{a4doRe6b`tGwx=8t;z3RmnWT&su=$ z1dqT6(>}kg?8+rO1ggk6Dw%XC+<8`ii& zoDZovl}JCR!7x+C&^kObH$+l61K}&>e$MM6<@dExC|s_vO4;(l`eEl;>GNh?U--1x zd+yUFKlg^cgxFb!4Q_ljjZE>@6U_GD7*z$1WWeuZeLEV4#O;ScDY^MBz=Mqn5A>KSV4#Nj8gu*N$*nA@h+ch5Ci&I3MoO1|+27RBFgowx(@Bs5I zC)wiYHc5?{>bVRtw~XI<@(vM*5NJj=(gGA(G#A?0&Qh_dJ2&RW^qHVc;sOIj9+@F| zfdE(CpQuhEK_R0LFXUbzg5`B|dCHwtFIcb6I=SDjHbJR9L{?5!vxWsygGn@luKZ*m zBPsfuU>|VXT?YBv(Ap&~P8*HJlY{Idn^ND}i(d z^%=cRocvGWZfzQ~S?p+LArRQV{`hOAP*~Ut_LdRj7~iUu!Zh)^Wk2Is58ICB+;SfF zf@^r7YQ}NOq#}XTc`#tBRg2SDFy9}r zLIqlofFvL>&c~lOs=*HpjlO>xAL|@eQZh4EHz}DnSPLOK&Qv>Y5W1B{m~sdCH76*t z>KIvfXSj^VahIHwWAu`di%$C>wNst0Txo*8we??B($rMa^>!^N2NQFt%2iGaxu%O` zAmqTTW*G1K)%0s-En4*aS^YpCJ zC~ztn42yP4V$EBui6J^DoxF({HmAl{V2iPYd~Kr^HQdf~GtNWn(FV$*(b~;A(Ja}= zSv+ilRd`~{A=LRH4{$0oKJXdfw2g5d$0Y1EMy*udoTVt+n7mnA-0X?-d`C&{1j@QG3k z3wjKX5mSMs0xP9VSJ7$BBM=y>V#$NE5BgK-e<&@g zL~R*?B4r3N_c|=-!T)1Gna$XPO_W=NFLKE(Q5Ws?xcTFZq3*^pA9O$=z57$bW2aR( zkRInKmsqZzz=%iQ+*_<5CgLHe;SWiE9&#unp~jYK+~q3~%tjnrUlnP}bQO=IN&jYg z;S)>9@x-z;@#o34Eb?h8bwXStlk__M9Rj|rD^v&usj3?foEn9b7UL|$3_OWrOR^26 z;1#7tvD(>}JfD*C``Na}D_xhHlo+o~o97T({84Pq=5yENU~F{f*&Lh4FfRj_&z2bF zOg@}^l$*QV>?2uesjXXco4|HGi2trr)|5MIT#}_Bo1v)MK!Lw0Nx))E@QoX6xx(aO zATVN#QHFKhpq_BTBcFBhiE$5sVO7eMA=EYc8{_;J1Zd^5G@6QQDnHSmmY?GPBcdsO zGMWrFgm&%DXKdeD1wX2Q9`&Ld3eV%QO!0RO+Xwh>nZ0tf!RA9&qT>keV?}m49aD?! z11v&mKWy_?k)78A+Nr;DVlyPWB0l(Z?=kDM7^nx7z&THPCv4Nx|z@BzF_pOP z68Sa56*-(zqYbxrX*ygA*EB9E%n_FKo(}e*wB>5Z=MAQ1lLTrW#cbFg7@4NBiheg4 z&@Y?Ge$;T_P*A)@(;p9d}J(b~xk2LDy$+Vph9SAIX8A$^m0;cMJSJZ{n(U07ma z6tfd)-pE8ScA{xR87RMwKtyu}gCbe}lV{U-Wq5{)kxs*r+F;Z^z%?#LRh)os@F*Ny zQE&8;+@9dAR^kPGj~1^1tj15AB`$?REhWs~21|o}$SonF=z;zrbp3n^-u>4n_M?0$rW=z$Dg_zlq6dU(N0Btxr}&N#w{2dhD>^lx+- z?$4*M6cyEdNMC!~6czR6`EKsj?Y%qZm)6$a-|j*QskS#)KEEqx|BK&CqMO3{bM|}x z0!LSkpjd&D=z!oc2g9idMkX%zsxw-+i5Mw5yy?NAhdRvb=z_tIbL2wOpgbok+{BwA zL?5#BsDgbB72X^<5y#f6xkHea+OKZOV-&rEKLc4(gW!|2K)~`6w}xK4A1blIrRPq1 z0KGVG4@v?g^e{jC2x^0-7&t3DXE%Ge#-vR!9yD)6jPsh|^@)y0_>^_69545`dQVNupcO_j9VNLbYId$m4 zsgy0RJ+SOUM&KM|nnU7pszf4ImqX-ko)c(3kr0i8VZZ4;S2%A4K2 zq3Um;ipA22Knjc*X|K?w+5=v*x@S)B#EAVWOiTpwN#vl|DfZ#f^477kspY@An7EZk-TcrtH1LqtZE<7)28A2i;3%~nbzi|aUZ#XNIE0XLh3 zrd@@p8)F4HNQV`;(o+^NL@-#eTW}Ob1w`N|Ij8~;&O`{lvA5qnV9?qV090f-u}PJr zkSIVvzSq{j`!Q%k&))uUy2oN;!eH@<-OY7|`!4xaZ1dF3*rmZ|fUMG$bszVMc2Xxw z9W7#gwrNP(J=HwNL%KCWvj4VfARBkDv7NBPn}5*f5ni|`l>*oQ8Ivi#%BI`vs(pN& zB7!+*BBXgxn==+}1*C_wYM3u*+l!P4Sai8@8ieuZ8w$-; z%wt8b0N;@com>lX8d2Urs1A?BuWibK`(dvK{X>h`4uFUTTb$Ai-yMls@H{{*$QW!@ z9xu#YEkz!q&0gXejb>PaU_COw(ZaLU>$KG|ZU-~nA3nVbD$+YhOokr2D&}d&>2)u) zPPG1~?nZC<7@x6>)_=1axqav7A-Rj}dUXOl!^dKL)zO94pSnC6Kgz;gmKW|%>b2EA zo7rI(v%c~EWO3mo@B4RJnzL;~0q=>86U*~etre>{?QFr8mQe0Fmp8ZZy*SI~elVJ? zzSrv&r0zh~Ln%IH&OFR9kppJD7)5|zt_EVLG`S=^_l-!|)AK>Yb^ z>MSbB1UeSU5%v;@RGeqNZa_P4?O39S&Lj={Yjz~N>3(LBKA&aX=2+?~xfW*&{PTh` zpfhzHxMuB=mAcEolm=MmW=b9dA&zhe2th9pridN(ds(8Zf)GeDoamLd5Qj)JMwjM&*sp_$7->h$DA2xn^cT4yE{v8`~SiWF4h#f>h zl5&MhCJSqR#(+;rO=(OkMuI`o2&1jeBKKyAIR4aC6&}o^y-C{7j;58=O1E>K1`@)l z<{#}}u1odiZ6$M&aHa?U9m+v=c4^+hT)NN)@gT-4l>OB;Eu*uGbMp)-QEbX6gu~9< z$?|pMO@l7?%56of%9V_1*i9SNQpy)!2{x-6YNyqTo8HyqHg~{=>0UF4hrLyOkWu;= z@RXU2DW>#*ajY{(L^3uELWvTIN?}Jnd_d!2Gt5{JSShq=AVX9{Cc-9T@V)|EbmZ5) zEaxU)5IH0u-fTjTC|1Ca7S_Uyx+5oYMr;Cw702{5YI8Bsi z5VO3m^g|yVq}{i(kR;=X2cIt0h7n_ycVn)xXG8OP5<%aO?huCIT)fkCo4w9226dX{-^wI2a!;X({YGQjzweby3Ed!97S0V3-4VnZ2m_o7 z2(GXf6}U9mG|PqE*1uW2?uiiId}Uii!Brbh*;Z)}DjisFxkdUw#bFB>I6r3KDYEMM z!*73(_M*IrGS!X?^!(+uLjCtYpq)`JsIyNz7IvyFYCkm_a!$rmPmHe6?sFtz^Z2hhNTG!hu0fS-(z|MsET*ZSfUK z3CDVm&bL{pYEBzmRZae)dBQ9vzwNHqgs3G+g2(|A{Ez!;i2bLeoD`Qt2T84eqNu2x z#H;vq1vlcI6*{?2Gp?9IDpMp(h{c5~WcFSr;%u!)iQ;YtGjZYzhT4^b7=%JaSk&}| z!|XmM|9C+f*-AF`$RkUglQj6#y+4^N(BDRd;fwabhYtHiRX&rI zUHEl^NpZV(_f0JGckI&OzZ7x3FjgC@>_D3>js7V8Ij+q^BeUZQ zxjr@sdXXY6BGi|9s|2xEW@Jt3BYP_?)T_d!DY+HiM;3a8MfK+IF%LW=zEL}H*^uf= zOnQL>G8&7S%GHkp)}Msto80T}Mq+$q^a${?DQz@80@b%M zqOE$+X?BQaL@o;OS3i^KqDNDo*NOZY_BKCO7%?whug9oc-gLjRpQfm(r{}+BTi-0- zsE$6jmdyjq^y|?Eu_tnB!j!z76TcPPr`;^Q8BUvZn-tLj)_<}Rs)UQ z?YO&Y!I}B0ed<@uMWxO8nu_yZo!D0M7@BJgQzlQHUYG4AgwU7EW>k46(r*&KI!L9D z`$+ff4AvFlO_o=JnLm7*`aSd}O~;8zi$Q|11p7$! zCQ7;E{k!D#rfI0wT5(q^5|&LoscJ9}M|I>RH~Vcw0rM#&)hDt$B8)k(w1GG-=^kuTZ}=jmK@M>=Qz8_2)KZZ%k(`CDqngT zOg%_4CLIOlPA@4jr9I_I)2mPFNpcr$7cCaKov==$vu0AiPRMnNbefZ>;A}ORk|n47z71%{120dtRm@F72W_jEp@M$s zf9$))J5Mz2-azlgi2AVf&^sQKKE#8wmBOE7DTS3UHDI~GEO*bZSOT?wagvf`Qk9cOgneO(MFGY_l_0n# z;S@@{8f7N zD6wfyqh3f`e?*rAo3Bh6CpbiJ?Yb_)nT17pBg$<%@R6`}{57Wx6O$qd^|2J59-)`Y zBP3MLLwxD|M9sq6me{pNGB5{d@VqU91> z&-2+p&1N$Bf^Fs51zRE0-FESsXu$j{jw-I_2jDUC5{V{-+GABTop9 zGWW8p!znC<2<9jg{D>(*P0`_eQhlmqO|i5E^$#M5O8`OKk2Hu+0Cx~aWkbNBYM5RL z+yKrG2JgE_E_~)Q%s2rR12$uV040$46tv^Gw<(ckl7%y6UD0uzk*BQP#*Jr z^}$mcbGsw_BR;_Bh()9FBA)sgF;k*bcr(7SWD*_;?O~waFCYhAN{7A~|D2ypZWQ`= z0*6#yG{O9;Rh}@)qGVY!AvI|&Naw-~A+S$IiU9vXKT@Cw&dS^5FQKs98_2iX2}Jzx zrTW~1$dB3ygZvH@^$5XDE=(oU=ohAze~FL6XoE`Qr<@clW)|2g+^Q+n0=d%Rlpr%o zSWvUTa9Y)4&uA&iT7TMY?idz=BDw`Z7ONQ*4Kwm*8&Kr)I;O2nd6VqGI|0V4ggh^) zWORuVyrYNIAm<9Wt|ka}*Hv^;HQ#w_^S?3CmmY`~fiPfANkdmeipV`9Kp!4+ZI~On z`XA(Py0*;)FC~z=h8OfJRW&bLg{Gccd4-l)=$IMA$dPO<5aGf;b!KKniqn72#*JPe zGl2q*WmI7USu|M+bYM08lWcSvB|us0nC5go4!``%X6t;528&}qsf~%bs>IvtivwEy z^-Y~cAf?d-ceB*#NA>g^Ojoq+wxtH=4&BDT4!z6WzCH;c(zQvmj8%qK){f>F708FZ zSBQ>484}n^$4m%$@z58Ko-KtYd~_wjJRRfg ziGeMX?(4noFz}^uXo}3!d#DQsJ{K5qFIsW=ELMu{^>rA zUXKd9mbQQ|x`8XAM>SF@;U}Ud9)D^{YQtX)M9JS)mh0$L%D+fU5)?AVOC%&WmGqEj z>KL@f#b-grh$3&-9#!g)xljPga}yQhZXWyJHJ1K&q5Rw|_5C1!PnX~Uv8TS>dZ~Xj z{Um>x6ug5e3n5c_qw0Iks%t$CzlG`fqvYuLm;D!dD|G!7f00%iX~kwLVmcLAw75@%s6TO;mnPV9Jz7s zQ~j`ZFm8eyt}2>`0vtT7J$OVeRL>GQ^A#tQO|)IlMLjW6mK0NnkC_T?-Xv(T0>2a~ zvZG^hv4=6=+!Xvc(curRggH_n5E!`%08p-Dg)S&zON4@M+?flR90wiA@`=b#6zYvU ztHm_mR;-YROOTw2%JTiCnu}2aYVTVDOo&9Iqx}GAK-EIpBlA33oXjg^ z8AH>EzE;Ta(HXkD)_U>87?)O0;ZIHu0c$qxR=f>LX}s^t)eD9~kpeVk3tn3V0{@)g6wW#i z#a~vi6yk1)mZOPWzRKl(Uj-!<%R>Lb7tvunYipuAPVbZ1<-)n*s<2utj^knR*QZGT z6Mm*tK~EsOJpRaEPxn&F zV|{rvZz-S7U#$OAC8CJcHvs) zCd-|(V&^qZdN<-ae&)|(mvlRN66+38JCX$xEJlRc9Oi1~Y;Om3D8(Q?0>s{VxagzUHEiP!W|ZO)$4+%N4mBS_fs5ASDy()^Vf0-(H}O7^S;&3>J1N80KdlT+ z8@6XxUG;kXu7KhNbU|UEXDJtw<@Mc5RnKcLWX-kP70@}iOupHcJ=Y*3US~~BNo%UU zt+cqb3+j*Z_JYJryHcKt9H#DfKWPES%K)R#CL%{h<%V0X)ZtW^gjC^!E}>TBf)W}CfrI=c1I&eKo%abwTx=`4cYs4ljX=$0P}J3d5> z*SU2VhIpn&b)y#@VmkeGjBmTOF(5DNS_;IPBgqgIXc=i1d9@&Vgx>4<7FRGkV?|7; zJ94>1x7kiheiVQO1rw7^5wrFW7mYjDg_w@&;Mfq%U37}GDV?Q3-YpE1wYc1Ttl|Mj z%VqahRPw|cr`qS`v~``+^0V*BOg^uNV=Gy#!fUQ=8eco_Nz*IzvUmvzYwV>mw11Woyhn?>}Gk- zEARfJny340b2IkM`efp@B&SpEt{?6vEL-8ePPj6@t-kjp^YO$zb9&A0?_%}eH#wf} z$I_qug{yR=_3@qOU8`>_xI0-^^#=ShFB{QT-`lnA-@bP7Z5jE5QB^S23aQNdQ! zAq*mi>IKyZffYK4kv}o7s+7q$(!J2cq~ZfJIJGMSW*kZ2!dUC_8GU#cPskhm3XpE> z+O+gq?9wJoH;pTMj)p<|ew3cbSZFjd7xo=w+LxyEc^!3vb}-ZH#0c@@E58hH*qW}> zqVUahALFOFzU{mX!Apv%&!7P7AK|~VrZ97KEi$3DT;u&c{YBLWcaz3EdqxR1$gAVT z^}hWGKI}$&BU7tWmS- z1E^OkLp7$${YC6m&B+O-zyw#B6Us8D7*-SmOzY{9G;af=B$;FI8)15EkzPHPNy*&B z2|h=v-90@uO-->Ccj_QPSJ|xzdy=zXgHJYMO7fdH3&d2Pb)uqIc{q?oONnTd_ULfJ z`L~tQuG@=~TFb?OMl-?R>YUi8F}zyH?AH00E5@Zj?E!wFnwd5))nsm!XR*+I&%;+%FVZpaPyBL4i6EK4x0dCV14#IOUK8&^@sAs&4-AZXAAAQ!Ni%59W%4y= zP%EfT-fJ}w8QES0Ns{T#3Vlwg0Gkg1ei~4Q5ZO>HIF-zL*@^M7_Es6^H1XnGSKnuk zD@whEDa@w)8}0oTinUb^x-}gxu~;EF!LzupL<;ka#AR)(oxabe%ZJ*h`R&cZW5wf4 z=}}c0Pb(28Cs#~V#^>xF5_AlGh{mExRn2`Y&bw`voE+g4|B2fPQ3`v@di!k_yT!R% zPep!No(b_tzJ@=bWkN#PK!QL-(tC#RP~ry%A{jJ6KFJy47DA^4Ig_|)>Oa=TC()0U zipDjixRXRU>;{e{#T&Zy{g0KGam97_-_TowtCO#jeV(e1F^^<0Zrg}v2eY*hR!4Q^ zpW~`f2@a>x@%UOV7lwKKQgTmRH!0K;HKq*zsm(Dqw*IDE<*YyC4?NE%pLzL|WNcX4 z=1c2K^Hvs${1Jde8PJI1Xzb@u=8OEvdHxp^tT$%S5sWJ+Zq7ML3_>D&Jzj)XhD<7a zy%CNOa8CThldut?X`)Wvs$mrt9uchXOJL56TVN%fp*v}%HkGKe<6+;S;Ol+o$3wzy z_aQ?nd^{r9F?(S=l6npkD$1Y>aEmf1+mtX?E)h9RO18SoO|+FLuv{P2xu36#I)6K2 zy1MHT${i}!>p`!;RdR1v9^tt~%V(nSz;uSVGYoa~s(=PGRq+ z%p>tRoztZOjB^(t)du3d73dZ;)Kc8JPFt5`Q)ZtraJ$!SQ_I*Ezi?ey9 zwz}~>WTHz^{GU)o7i=jRF*y(&_n$+ISGK|*$IVQ}aE;ts&uNGwsk+7Wbs3|~lMmRo zsBjD!+rdln+?(Nd`KgMV;-33R%ax^HZ?uCB(BJ4b$6w7Z*s}@y`+Prm9Ub|Oi5Xd; z+UskkJCANfs3UVy1dMDPe*b+#eMD|;kLS**j8QAFcXX(j>iCuLH$S(kePHt_LB9?% zcM=iUN6S5?sDmuH-iyulPLoY*SPcweVs)PDdkTThbQBt?N>+~q|c<6gguk-MU%PrO+uj5 z1-E4GSLF;nY8S8VpvwV+9UNxnJkGpcgGVf6ycs3tP1wLCcVS$^V z5l`moHF%K*z^O(kpeJM>qs9RUUJ|juFQgue9=i-Qi69A+iI!Q~h)-@n)=Ho1PwD@b zW12=||D!HX;f%!_4~w&9_u66i^?ia~uf+oGahxUQ{;bqP&fa{0@K%p(v(nn&xLx`% zP3pM$9xJP@tpIViW4G*h)wDqDc3Fzs#?LffjuY@8SS1dA6$(D~iR!8}k0k>(sgf8Q zR++$?t;Pcn{HQOgBL9w`8r&6<2ejDvMQ> zw(?iZQYBz}mo$RY;(z)N_~O|zD}cPeWtJQ|oHCzFa@C(`R%X*y33O>-rOAvpE`m-q zpv>amsEyz%mI;%4PE(Gta<(_S^eXFa_A2|=(TSRENmJU5=Qww7*;F>~U*y@X_lxJs zhWCE8dJ!tGjc=)a=V}FV*BK4YEZ<_cr?b0kYm27ubc|~!JQ}!!jwX(<| z(Nq22+Ya($F0TzOjnmo*m*G~8=n)DdknkeWq$?~L<|rI|pzbS3`EOqM(9 z#)qR%U}65>-i&-;BEE=gP=y(S;iI7w!O6n0VG*3jO0b3AaYQrpDb$4iBw#_)uRT(; zWHuFi^8&qsf3eHIg!aHPZefR2vq1bF_U7{;G%f~r znw$~mI}NKgLBWhDki&vI9*At!7_wwW^~?<3Uw+BdRjh&*he)d)El_D#B`1N!HHN~F zEeF#QQ`9tWbSOqx1|2FSY+4_!HVqAMM7(B`J&u_o*h} zgP?S#aQoM%`67r5W>$c9-F~feie?ZG(uAjIgc&;vnEiIIMV`+;^VyTPf+}0@IwxJf zkY2UlZSgN!=&F_h&!!>*2O{YeHk?ALw_|p9ov+2;pUofc{fz56D9$0EAOSf9ku?*+ zqBg5QQ~Y*|xuhd?*{huAYMx!$`MFkxY_OVHf+lV(>4cvT9&!+Aj+K;#4260&5NNo> z#KDM`FRhuC9(&l6J2J|2VU?b*JqX9`=4iskV>ES~zauXH=-DPNOck+y@XQ$;)V4mPA* z=hcx!`5NA;jhexW^On=}aT@*0&Ufn8I=H??ba)Wk%@%?zRyCdzLitY9DHZ*rkR&x~ zEhHU|Rs0;by+a+=n=Nm#6*bo}N3Ok#z9wcpr^&vog$>~Cd2Pp($!&w8t`ggjcAAVu zqLx}pKBTA-5taw2F%PFX`0fc2ytw4y8WYhOS!Wg7l#Pukdj19L2^2D}M~c~_>NWGW zaoa#AzmMacCV^I#4QKj2VZfmGEtC^w% z+3ldfj{3wqhgH85qxq#1V?DdPwT{#Cs3*GH3ZO^NlmJIyAyv#Lou?d(}z&(*nBX|J($KYaNC-1)No`8^BnXkOFT#?0>W z744$sG4EWtyLU@P>7SHcX8d2jSJ$2U>*0}#CR+~YY0oU3`#~Kg(euuPUCW`+mN4NL zg%_4=N6zeh#%Xb7w+RO<;ys&`$~3Y@no>WcO>m;L_S&F0WA9QMd_@r%#W51$wpkzE zocTjWs;G;kL_ZqbblF(#C{D$AY-18gk=IH#I3Iy)voEK!0938?jUu2vM$A?)gVW;b zwkB$U77D6S3!Vd$L0NPoaYoF~2mRki%&ZREsggyD855op`fxWrX3)P-(?6mt?aQ`8 z3ZD1j0rRQm;teZ-QlIpmMdUtb(Ywp(&9Wdh<9rSLOxV_a&{eb5p>?BU>uWjU$n)n316#x)t`W+ ze%trDh@wpu!TC|l(le_RyWF$4$lLD3Orcloe*-_9!jApAA*+*y>S_!k?0!x+1=ooS znwcBOilEXDKy?^DK9`uMoVVlV8I}6Jbi7~H^>&q!;nP~W&Gco^Vn}`yx&@0OM|w|?;@@zEfz+X{~)76Ga;kP z$%>Y#s*%5AY{AJ(tFurr$u?nD(Q-5ia%4fD%el%DJ99b{&)3Ck9?A3v) z1oxl2b8rqD$Rp)}5|@$Tx?yt~#4;H+TLYk$Q89^>fK^IDY({@DqjM@w4jmr^f+Kns0z?rTi^d`msVzJV8P}{iJuYFp)UHQ1;_4OVxOyD2 zXQMzU)zqsURgLuKFJ*&j#|$cKpE5<}D=L$T9o;ioDo2)mbes7WNK-qH_O?{4IRa|h zw)F&L4t)ZczbHV#I{P0;@G9{93%dYFG1xJc9se-t(LHosVskIQ7 zyM_YsO2xjdA|6Q>dw7Nsj?5^GgW0B4LgtM|>Mb9S%gA<=Q?bib1uD%*B;``i)-``& zo(C0Ypql2EiYG(xO11}{HTW3Rjz=1Ut6Vmm!G|FMjit95jn2g*rID$a*hGyLBBi_0 zYUTup?pQBixnkwUElV$6)8NNf>M-|P{B7p<6iMaUmwo*v&)voOTTdU`-Ad}O`hDN# z#s4ZHzsqWz(m={f&Sd*<#JjbAmuOr!&E-N-7XoP6zKwQUOHcL?@z#yZC&F5Yb?wZJ zR#N(Zj~=V`tk%D~n9M~TM(PuPw!n|?^5xc2Q*}8;dk0iq0ev^j&8B6F$K%%`;Z|OT{B$g- zR=2XSw6DvWupJ=(vq2fXR9NNan(pQ)rOWX%>Fp0bi7kd{FPwjcCbnHB6_`F7hBsSi zW!JBFO7YsIwO$eQQeZefhN0Fh6GV<(8q{i@JwFabd@AzIU2yPhA<u= z7A2l>Umjhb4|zf&>e3j()!Y?Vs34Bvu@TB0s!Z~=Jz9y%q3?dVInk~5p(XN@g>W9F z7uIe2llFgP`25=yxapR!@opHptF7Ji=`jB6xNuD`7^Sz$>%Q#DljSXRJ#(~9muK*- zPiW5fabJ$z0qi;R(YyORb)%bE)8+RTJe%EL3Jq50ZQo-2EONs=flteoY~}~(ik#}N z3|W{5i|ECyZdxDvJ(%;Pr9eqMS)XGt*Yp2o_@n>ePbTLl@6TQR=U-g4?{}vfmgma% zgkZbQIfG;MU!DxWTXp!92hMlS`(cBDFO__ z3XrHB7qJ6@*M_?&2{-1&W0w3VZFlIsK(3i(Y*ad&XCsr;kn=C@yBl7bmx9gf;lsGv zJVeZ6U3}=Q*CUU#ZsCO;D&###t5&RBBd!bN#toN9ch^Ze81!`e>t8a^#t- zES-ACU<3zUPgHZ~hvoU$vVFnR*IN|N^zhQv;fq$_`qfa;AjM-|ftdZmkn!SEPBO9x z@fvocaJ*)_*@B+9MS|%igXQzNfj4gm7Vwm)L^yAQ7%rzJ=7tw9Q(i4KolJr<4E^EK=Iq_45)5IDD zq~)YV3Sam>-be}JaktCPK%>_E?G>|BIp$=9cT=xeWQMdfH5X%#6WE4)&F85+05>Wj zxu#f!O0ool;WMYL4<88gU?2lmKLCtwDtF@4`Z?y43D$5b+qoc9W<~Oz_)&nUj@d|UJ7IuU>1Uxd6AkKvl zgG@HUraJN@PwO+jB})zJVQo%ASrJNIM$gQiUQZnKHt04**uy4pylQlDiPD<6uIRMQ z@V-#JSl7~%=o8>`BsSTTzDBy14SL#LgopUpxJo*EJDOTY-94v=9NNgzqlnl=7xfzc z2|sziW-UHV;S;$^<`{w3rRN3zaUf&7Vir}>L-U0E#<9ylh5@lRxMot+ z>O7Gc6Jlf>?*%5aI{Vp_>(L(FUz_71?SA*GqC_1qs-z%5vT`Hc*k-gAvESF8vdV7B zr|*5DT4*!g!))#`qs%6-SP|C^yxoqTUf+)~i&x?gjhg6~t~!m`q+xw-&l|-NZ&Ged zKetKhd_J$6$$DHpp>ZBCEv3^pg*_M!=s_9(NU44a*E&%vqulQ{WkjkES+bOUD65ym z@2;FFdP&%ek38TLF5%T?M`2OTmp8G?Dp;e?pUdiA*43`W{c5^uhLQYQrt>Lyl+h}> z?$67n%RxtnE(%PyB$Lm}Koi!zK~4257}Rw=?Yec?sO0|Sn3yMy<~EHysaB}T2TaA? zT>>DXj5ny0N>0SW0w|T$#4OHc6Bo8zDO4!M?tfQtZLw-3706>0K?1cVFIm0UD<#Hi+Efm! zb#ZCMGJt;n7@+M8GZa>;Hb{&9A}1N9kU7pxZ5g}~mZnJ)e&nWl+Y5=o6`=NUC=}p3ZvS zd9Vb?fBvDw{Bfv z?7F$^W);)ocGp3bY?*N;DQgbot1h`Qg}(l+`i-6}2*|Lm6iao9(`cpU%2TuMSMRuq z|1FosLS2Risn+MIbEbzlsS}{a0sIJ6^xKD16c0Uq)k7S@Z=@WC7i=_foT!(+NJ4(S1DN>uN9jOUDaT&HG(&w~u z0X`)Oym_DVQFF#sVbzpw>4TO_K%%Ehnf4c~UWvoAcxj#dTOE^&A&t$=@S0o|jg=jr z%Yftn#dUn_^s*JWXtALdwQUo=s66?H{-)BZ4}Tg;MWHG(Z%l@KxhSmIpiUrShe5z6 zdd3{d)KcRumxPww4ID?)wux5!asV>!e9r7dXaD(MqJg&(ML;Bgy0@1V4i zfzkOLnG*_9@MtbZ88J6TB88U6aqOAZ4ir;UjPlQ%s>0&O$b<&WRy9bd9_R=Y0L5t9 zoVUDk2vu>;f(SIlErnlIn%*1&j<24xDST?ZCL*YiZ-grIUa zltLrerXaz&WO!vqtdR+&E)}?zM+V6OYU&#f>C{ z*o_eljfgX?XDI~85Mvf0(?KiJfkY};%VMTR1*279`Y01L~)g=&e&>MkAv zi=es$Nesi$oCy(~NZ=N6kX2T?frNu_jv>3?@-8vN>P?ZQ zk&cL@WQ}$hVQ>TyT|h~$lGg|s={HKgp#gV;#vo5TXcVQc#Rz@6OVeh7SkQWiD>tA4 zlQ``JG&Vvb5S5|Yd=@RYz*H13^QMLj%pMW57v~DlO=U#lfK!bgv9o0WT>3kR083-W zDpAk`*lcgY(iO?xs1=NM9CHQ>w@HgdV%nOeMx8u0suU>xnTwbWa-$*`$y0AQiVyd! z?GYzjV{T+E9tC7Ch?=!W5}{Ct=yZlGR+OVf;g}O9rZd2bbOtLCw6O?c!Enuryy4NT9wUXJ9-Z;- zkg!PCxT@iSW-JE{8e)_2?pTxf0Ft;i-~~)l#ALc(iA72zb6~&_h^GKCvNcHanDNd` z+5^pM?5aVJ*b3pp9L<%>q{#_R@ED;$oBENbp4CF6F9?-!nzJ$0)K)Avl+{9$nvJ`5 zzSoVIx{(bqQVTlTHAfFYQrYmB;R&o(?|>18ERWS%HV097+Yr*Zh9cEy&PY%gj$)Eu zP_2ZSK#>>%3z8er1)97GqfpvVpm%NdQ2|-;z?CZo;Q*Cb?*PFZk)syuNlR`)s>a}- zXtkp8Aq!mKEii!H3~7&;HH(#}2~%@WG)v9qK&B`Afs#0!`bGi3Iot&3PaQ}mE13xc z@SI33L>?EMV7HT79Q|Pn4G;ti09e8HH6TLE1j!>B?Ko7Bpn+__vu-fCXsuA^?I!jplGu#`21Wi(fTp zwx-B+x{$p|YtUXqjZbCliN<*!js22p;B*x_t5$7TtEAS5HOFL8Xwq{HD7Fh$ECm!s z!<2PG-mq8&U<^x$E6~2b=)D>RcmybLpc?S3j29L(=s?2|5PWZkNI+usxK>)TfT@OV zapRDdk(-lIWmsOELyjXvx?pq$XDgioy(QTlm(nlO7g7II8zp}XRS=-#1HU9o}$ z^>^zvkCT|IFGmc12QZ8jrvNGqmB2@Ji#(~baBmWfdS;utid$uve4ShLh z8NQB4HiAE;bi#@Z|MyF|lM%hq@4w(?UxdAE@Vzgkyh5)kIY#@_I2?{LcTv{IbS-L= zNUe76VTmRYy1;*#Shwt}rcEg?3d3$O$Ab6;@zYh4g+_G!^Rr65(_miul7MjEaXGV< z0mJflgcN&PqsL%?Vaj)EgxdGVM9+E532$dJOO6%dh=+xFj?$iFxuz!hL~<9Ts#l;W z3BlwSj?$>b2c2I{s+oMnqarc~7#)}r(&_~{2b6+vppl)@F(}!ZX7^DP?*x#R6!TN= zMX2C~OP$cca8vG6?sy~+O7y^75o!V9$BY$Yp2)8~pJ3bv#Nb zQ5XQkl@c&oY_WnD3U@+7;AG^El(m}qMM%o zoRzwEZdO-ZKvdO>phgnVsu}NRyw`PDt)J`)ozF5Jjy&jm&y#+M({Ye+`$k4oYr7nG z)pea!-#B!ysv;rtg|F4G9~+-kZZy{VJ=avNZ*wQ(vH8u+%Nw*6{YDm`&E>?;)>pcO zOxMk1x$Aq~%zaj0Q>Vw&SI4Xm>#e?J;jy=Jt4fPfNdFt*3?Rwy;|A zz)t5XaZ%Ww#xePs^EAt~qyg1Ba*A!R8;pR%bde~`-$~EXXDY!O>p+TgM$}I;BdmZ0 zczMK3Xy`8g<=^++)>cuP`+7;*R57J{z@XObe`#5|roJ_>bFY16wNoj%ZCv^Gwsdiz zb-UjlZgSIS{%l=?LZ9Ajah|+r$9ShNzVyn@J z8-4C}%bOc?_4r|nxsKloSe`JtaK`1VVC%#JJUBCogOYVL39{esllqh3 zkJC?%-&}w~zuoFiq!nPR`O~SrsE68UP@U1vCrN&kl~$|=)WECWiWcT3Or?Uz;7qd{hnoO#HWfb5!<(d z1E--R_^8JnEmR~f_hIET`_7f>u8*IoV6-ZiS;V3`|66yD-NeXbBzOC1Ni0TShtsV@ zR8A9E@GCIWcacf>HW?RrTLrm*zqMThzsUlFw+3v2_*o5Crt~~b!-GBLfIdrPrgV7* zn5O(VMdp?-Hm z89j5~Z~eJU{rTH_oZEHR4VhnV)r#r5?qyc1=U*AM+A=RaZ87h^tE7QWFW7dmMGKbG z+wF5*3sU1TJfYpb)0(uR>pHsSx0&3lX4cSh_1J77zFK#E`Rn$Tvr^;EJAh07kUCjK zSSu55Z>7sN;^5oIG&(wNr}nYj2OzlS^TXT`EM%<#liPV=2~%8ju;hja!iy z_Vlu@{4Q)aU)W4GytzlUt9RxNj<2Qoa(2;|Zgl_F*M7ybIlHsD1-jbBhdC>;_7Nj- z!$|pQg-9krk-Y`Urfs*@P~mb$`zur{z33}^9LJ~MvE)w08*5(p;gSu5qXG-_ehN$3 zKj)i9xxs4Y$4%tE(kzlgoB}aO-$?EjmIae&6wp#aODGo|9tuf`zYNOc- zIw2Ms?r?-PC4C9(yfvLwR&$%l3V40=SH3r3ri@7H?*ufIoh`9md%{NzLou?JdrNYJ z7EAF|&LZ1=x56HJD2AqEk{PY+4sJWo(Xh>}E@|wOgSl;;6{k9g;I$IdOaAVYJZDQf{mU1iIKG$Q{qAC17wtDKsjE|wX&1NQ5<-8RUmYK@I z>+q&W#bESNRKDa*D$KCsYZ+aO;xUz-jTUdI$6)&X&gR{_?i&_4La(#R!lb~zbn2k0 z34@jFcr@|oPywed2Wu@B9t3AzSzg*|JeSf0)Oil&w512dP7&r{nTwTNG)+hW;mD<< zBxsw8wN6dJOnk0IXTFpwjuv^Bk^`Kf{MukJ6d4kIgB1s3sbOp>ZKHqEqq#kmJ%wl| z*(xCxA~O^ra1|74ea5~T*8)}xw+O@2uAOD05lRwbN^nJqNZ)swSj@Sm(IV#>l@QQX#E73mCHL$+Z?SEVgJX;5B%SSpA&j^AgYQx*Bhbck{H)?&5ZH-iIvf-A3YZ z8KtwmfgzT@en`=$d;oT8H)p{zd?0o8TXAZBs6{iPVN}%ce(gr%X?;ucrqGzx6W&O-p;< z;IH7@Q#!w29JllvEtY2~o;3$rx*2G8Aiv9-Ho8!PFr5OMtLR7+j#xK{;DbsK4n#oc# zB%%()6TzsJEIo6BWtAicwlp;%lDrrL0i(dMjER#Q#)OEdhL_VwBo?Ld_`ALdvT!e` zG9l#{uD8SMb#)Yq&Zs`{`WC{3{5BSvJtnb*`1(ql-qY_Uj$gO`mfIVB-A$f)-2fP^ zW|1AQ^Ca;HTdO>ag;2ey(N=E~iux@prx}kcdCJoFOt$LV%;fp^NW87jMbmjcuX?P$ zciQ|uk{C3-*L9J$zw>XZ-j}JLwZYd=^r)lOxjZH*U2dlVg4?RD>QX_Gh1m6-rV}EtHm|Wl~%r&|6%E_M*nLiPqdY}3==me4!tI}-{br= zyiRXli0UjR-YWM>@3zga{XXWQ4m5Q?f~9aG|8&Q5GG&oB-OqIAlG~?ePQ~0+(iS?d z$Mx<6-k+tv)amOxO3}D|CXYu-ukW$#Tktrrw^m829&tO;Pkf~$3)#Yj6mkVk=scw8 zK>)`BM|=g5woG9&8}wtseq$-o8JW7S+io;ztrgq;_U7u!_rSEpVYv+Y0KW-!slg+h zyk{O)8l=wu;*+sj4e4S!n_Hp<`d%GOvEAgSTYmcftg z);$a-1O|Gf_@N@W|LN-SseYdZ-`{Y%4L#w+Oy&1dzTN+5iQVnS>u70noeoQ%5J3OM z7P$LgEc?F4k*v?*)#F>gG*J!H{IWz7@>*|;0d??wVV|&AyGnFGkq~M_o{M7Xw+~!Fid>wa(_viC2cxt*%FlLfK zS-*|dL0>_Gm308{Zy4jL+@yjx7y#I~gj1Bpm5k(b6Nww5t271isFNFBfUU_!N>ZAd zU~7N?Ov1BrHZZ1Gpp;Mn(USCu93&?Y>}NGa4)qSG5?xnmS{ zfF>i!xe$k_q1qJDxV_Ur_^K0lel4YOMn(RmSlEPbg7Es9-cGWt^mmyJ)*FSo`Pn)* zop0AV#YacpvSp-q>pdRQ5ROz;$6e1Z5r6IJIFbrv`gMMZVOCpX0Um!&eMU^E!aml^I7Y> z>-otY&}Mv@f%j|)>rH&$+}^^S`CkN9IgLJ_>E*}S+aKQ-Qd{jdBcT@F>@U`CKwLbI z=K_0E<-hq(H|5iH3|-_&$7=%;nYcgk$d%ah=Y>{bgy@m)kpX=0nvc5m7h3F>3uzXxR*iNW zT2Vh-C0Q)D0zqfL&uVD59xz7r97jn1lRa`S+aE!3>#>7Xr@-9TW0gL(c)aivT`Tk| z^oSEc{ZyO`4zJdbc*MSSSTp-D$~l*J>PA>?ov4V za>C8@3+U>Hx}Pc(4p&uyPpU?ZFt@u}aKTj*;`G1)=*uz1mTk#1u#rbd;w@w=2joUA-D4x%YfS4eh-HS6dG&Q1q zaE%O>q4W(!0eu^OKnecWLLaOj&D`s6IrtUNYoq1vdr>a#dzrn_8?qj+IBTfyr}U<( zhhB8Ouam3Iacr!!jnb%G%Uk67o{z&n__@O?Ll=KJ+fzfO-1`9^fVqYnyA0tUslFPf zz(kY}Q>P(SF!0SF*hJuZZQIYAZ!xAhb5nFU|?t-qj~Ye z^;(E1nPpTb5{B_J3X#_h`nrrYKFh)3s=OH*x7AiuJaHM5$42l^s8>_ROGx`N>NLwN z0@)@3*|~!>Di=jLL)?uy#2M#8>A8pCaVP6LKBE}D3)$E zpXXQN!;SaPsmnjMHTq1Ku*GOB?$*#nzCJ%N)L5#J3CKu}O7(epbW7Cj|Qzvh#ECYz?NN^!<)ZUc8ghNRFzcB7s2hxfa z&v~FzX%o9AESnWiF(XNGSKS^ zN=!o=diHmETeklP03m?hf3I&hjwmT<;9ACvShMiP?>_(C8yB)v@><^rx%s+clXuS; zF=EE<$*X4Q>-4wYc;l_`nz8EkEu*?FYV;;TrKO=*naf?@SQm@cHP*XbWijHH@HSr5 zHEPT4D<0i4cI=i%>HM$Qp7qc(C{#>6us5XKBT3aIECqHc!vhD^6?10BQ@xVWV32>P z)uI%=Dzb-MhDfbUp6aDmetQ%vlBfr20e?D(M{Zn95etzL_UDX6QqgkWBxKG;AibL? zPR{_>4(tHs_Oi$Yf&3TjEAx!a)JHS!BbQP3kjp5S>2Pkh`MQhAZu1?89W!a!`Xkj> zJcN5pHq=A+d3xy$n7vS~WrkyP5BiFClI6x@sP5|r+m5X7YO8o-D2x%RxUATx$m`)o zRf`a3g^?5kShz=50PGjQ*lQv+f%pc4$tF`AqaI2A_$)x?`n!7mYXQ?Uu%pB0bv4)| zj8bZ(Kru={PGS0z&;iKk%~>;x(CKK>j>gB?U+J-*Vytc#HJaKdH z=1HSV_MwUUO4c9oHFY=ny4H5l_k=MBaXL-M+UAg6&Zue}zolE)doDR};F6BZj$E|Z z9P4=5zOuD@^XBf>mG+n0D%P&8XiFVgzp$)^4DOn;g~VRQz*onPO5NCsSdC;}e9@81 z*tb=Mj{Mnj1sBr>D7_@GKUO>E3z7><)GJ2mwhtW<(3ZZ0qKi*uLQ3nAp;08xAQS3HX}&sO+}JJ4d)37+sf_Y<$tlK?xcqI8gITkepz z-~H~pcki>meUO^eC=UV^XOl0W(z`=8_z0F`azEI?x9$6==e3UIZGal}u1{rOm2k5m zMK_8cFpmzrQ#7v%rP@%B<}{+@UTW2m>+NUKiV75F_AN<)CzmEhF zH+QE}-Jc&9nIr2@GwY9tsdw*A?OQ^uT@oS8-R#KT&2l=Mf$}*m^eG>~7w#jsa}C%+ zAHj@Mr~xs5!c^%}w97aZ+be_Jd_HCYwS&`>MpMK8qbC)bQ6Q&S80rtx#IyT|svV!n zreRq0e@X@ctA~Mt74xt?R2i?g*!?-ZGXuly&HDB|tL*zK=T{_H4HO%=v+0cnj^a&r z(ds96q9S#Lw+Jg8Z{Y&q3XJPgnJL_o1CSgZxtiT0zwt7-DodXL815 z!+kkdp|8!v?eq3jolcWn1iA~~AzxEwK%)((Y#c+#fm00IliM^h^$zUronZ#t;`qh)Ru_k#>-+z8`g6rEt}n3& zZp~?14za~V?v>7yX#@7UnF05i0yldW|FgOOZ^XxE@gEE`v7bunMh#;zg}1-=m1&*5DEry|P3c@F%XI!ug?_9+BhfjTgeKz_lP`7ZN2=F|W8qvU_mOY?de z1^u-Ii<|DJx7n~Kg^|lWWx5HPSbwHW)whsdh&`@ihIPs@If?%+!qF-BbC3$ob0`} z5X(S?yRX!QYmS_gX!GT7j|k+hkZ|N%voWCYLn31x3KzYJ5coBT3L-(}ML zSj0R-JzfTCoo;n2w)1mNa#v+0w_i)gjYoP>N_l#fT^v<}2OKUIe{9fYAE)1}Z%97G ziR;PsPj2Uy=ydjaQji~8S+hup$RCI>O(#0 zgBqOj!GB=GOj;l6?ek@P8h6^Qfp;J3^=SzsnDTi?>L~w^QuR*+=!JB5f{?ime>_R? z8AZPZJLOa+lX>@UluD)38DD?jpgU8^ z%_jrbr55QuD&|3`{lg)4fT$jy%naOHi*q-p7Vh0uEs`Vi6kB5Lt%10Lu>&+-|Jq~bPREV#lJ0@(yc>-K#t?n@1`0=5Q3o!^_!+4Xq z2>KVkh_)kvN{foGTZWFL#vasf*pG)t7Mzn``JF9Pq`%B=gU$PNdh^{dh;;jXT{d897?~=?oEs_9|wZdfCkuORvR( z7{z+1V*Qrw84z$w{j;gCx(8ONygoRm&^j(y+4FQxXjrTjiVPGx4-cvsFtQ4=25jN2 zrUHaMMWWnKAYfk|q^QR!08qJ!OVLI@Tj`jhU<@k0!T`Na4I(jTfU09?9pN`aP|%A; zcEw~ykv_z_mMM0VC<+vLKReCm^YzmR9QiF=fAjzk!>BjawjpJ6GJnhSP5Db{4;>nE zEiKnuaB1yx!`XUJ*K|L<{b!&)ZFmgIU38qkhOF?qpW!30%;s)6-MyJ?@zd2Twf;y` zRbTgJHhq==oFd+vyK#o72GFJN$a)}tmFUCxGsD7d!Ub#&(0X*8F1)7bizBei5WqHf zqcnm0ECF05n<|DFQHamtPe9fHEuW(DLM>yZR?*1#8>5~zQ0(Y5=1&afP8Zk}@$0~O zgW+Q+T6@^k8IN^!uE(v)=K8ht#bxPL0qZ;aTbAxyx^y3RT-|zC44PfBZwa~eaml_P zukR!g<-aJ@y0Vd;y`E&)*~y+DNtb5tQv#JE3G!AYWsZ)`_gSXU(uGiLl|wS_dj)QnVpXa#qUcAKv*fxmRKy|MRGf1irk!t)v53or%PJrw3d(`d~4qM z%z=xmZ=3Ykq@%SLA4n}fbk(efXI*t@d8)59eD&cU9$7Ly{m_AH*8AJ8DUEKtf5YK> zZ`!x+{teO6YtY*6IUOBy2LJ5d`LIK;cRajv!IhmOOr{Z?S0c?Xc2C>f63_}#b=%6Z zm%je--Ln>KTRme=z&C69>TUC9_6{CbF479>yhldO7tX%QZArk2XHx^)&*akBAr~n1 zVH%don-s(!7T>6(++(?&C-+!J$O$PFQ;gUFhN;nBlnD9b#ef0h$`9PUR0tQ{F?TtI zPvfUERf|3HZ*6fdRkfr9g>9#=Wtp7qLIN~m>JIXw>*e3n9vXi-lZP8PyG&w{(~Qpx z)Ksy2cmWNA6{UOpM+#M7L1G z)Z7TQ2i=CsQL#}!#!`=cCTuCkF!S3AFDbtu^mF;=A&uKp(x551`r)ffG$R|`vQE*Z z=~Q%SI#)mXvE2XhqpRVKxQ`$Gp!lNoS1-Bgrb{3L$fkS6if)hF(tv)kUP(=dzD$y> z9>@l!>!NWxeBGSXjGwaKPc$ybaQQFlrg1lpRBP2x;&E$8UFGC|SGQY1HEO18(+zi57KvfWG)d=ATMXZ&+&JCj(@M4M@h;|0Ij<3qgUVLsFs zQeNtx+)LwG$obR$GXa(0b22r|JVLGIbb~}Iy(fg)20%sIhU)HM?sObc zH0AQvBa&3@HFshRCinCs`)9SUe0b^OAAI_3^86Laq_=ML&eNL$Wpux*EC79r&jfVh zZ*N&J(VLpMxp}qx=`yp;V)0c3=7076DVu+^IUL>ftW#T2QGx!B*Dm&rO76`*vc()K zDK$CSErDk1X%pRlJ85kuo7&s6e8k3c+X5zkxpzUcRwIS*2LZdIwl&4^#JVZp@fhLg7G@C5l<&Shvb8acFGap12GTY>$=WYQaV!x67&{ z@o2FF3SKl=!JaU!vSWj6-qxF4^D@89w^R5b~3|l6*;#T$NNUkDekXnVjw2G}SR? z28`*0J%>*zXaN<;HU6l@}Mafj1 zv$aWRa}2Xd6Sd&4MSf)mFu%>`S9K{AMt9&6>Lm0&BFCdjFC*~mY#N@&xpZ!;qQ7_0 z&ILRBGw3f`?Z4^94n+MeJUs=w8*ER(4#&T>T8RBw|Km1By}yVXxJRXPK#pQ7(itbZ zN6H;BWrzyED7%-;&2tVi_W@bV$5jtR^rmuu_-Xn&8mq&7r(**K29qW`! zqnLs$9~e{^nGbqkkn~fzW{aZNIcVpb%x0!SU#jS?nuVroDN5S>M0qvi25QDle^5(B zWKvzEItgE9#}(7ZG@jQwwl*-?Xfqh^H}aZZG_w2ND`p{gE`b|QPAnbMQtEWgDX~_B zq!F_Z2TGe8YEoq-i!7Qwx^g4ZwXMA+$7^FUp3BKST7{M`lxuo(3z>tAS+;m}ODi(q zuqTzuU4;#fv~m}XVu&nn_5!8Vjj?Pd%&n#yOUl7l%q)kW^8CFcMTJPL!cRxouzH5O zF#B>ZijdC;@}dygnGGRd9|7P8aAK9

c|x<-U2x5)&IMgb_QQuB>aWonSW%1Z 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�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Π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

7=<4)?PWHfATONu8D`xR~(;U#$vGxd4NxA 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

l!+;MBkiCO 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%0A_m@>FQk!c=H>9r7r;C%8SmQBQy6oq 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%0D0=)-v#c(x4Qi?9-c)qAB- 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

dQnBG`I`yrlVi)u+F2mu^ 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Ξ( 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

lENKl3&{3DZBcCK>Dd_;d5_%7A=sEp;MK{Hm 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

+JWt{1Vyg% z8B-TZfVh$-;Q>$w2A*Bb<3{5-4T)8+=)rV5j(h_TG_f7jUA>(l7Wsl)nnJ1SqCKYK z@+&Yam?kO?BjOIN$_3(H!g#V=Vsr)1F(X-}LY&yDqI$&fi4mXmKBXXY4a)9LC!4pu z?QuE`!$^#9IeJo!E}kmG;?mOP7-4=|{$yuo;9&aqsI&an%#TdzjiOpot7G zyh|s5f9@1Ea;T==4RW*7`}woe6SFhmt>CG}(h2B_3F!Uc1XM@HaqU=LZM?CfQJ88i zH`#hP*?Ps3t(Tc>y~}#U`{23b*R6<6J(?Yr*QXL;zu-T}!TH>D^K;T$b544z=A@UK zlb-FRBi#|ah>f+E8*BIHkF_f=dMg_1Sd6v%U}hucutzTx@Y!`~L1ep*mmlI&tKnUo z77ejypNb*=eg{K*dRcdAYfWj;Tt2Ke{=h776U+}AGtRRH%d>sjp3GEm*PIIOs;S`S zrh;p`bXR{z6HZ=N%1z&$F1}&NXv~?k#AU$g1Gd*qepg&D)J~(k%C(MP}>VX z`NfnUmRyi(*FOP9>Fi!QW%jddV=*_gID1gef0t2Y!_IhLL~DOS2G?C+N|c;@Vif5k z8B&V;xALMny>%C{^F+L4&!R4gJD33KQ(77Jz+Tae5Afz!c*B1S9GU*Wu z%8y?vZD1EqlI4=X;C~T)kh1oVLO9@T8<+U88>;uSMq-EeF^MUrhQ^z;l~;>TOOT&)F-uBhD(f;T_^J&&f_+fgM`U@^iHAyE;W z#LfV7^?<9En5Z+xQw?|%LnHYU=tULr6IyT4TLajm*sy4ZPOYwj z|7K>;@7UFBZ|R7hkt7|_PZ?cK=`@%mX%)7&l?PtQblSX0X^2bP;< zyf-nu6!sQIBDme&W`Au$j8J$J;`X-b&HEs_CJ{5)(lg8LZ3I?jm;w+xF@K9i=xlGZ zzsuzZ7!KIvi6h3GheB2GI%%GTR*px2H(=wkjEGEU3th9AT?OoZCLB&LVHuV|wsO)Z zmc%^OFSy(QOI?vzaI20hz!(%UB7ZIJ&W_ANj51!m44Wej)CMIzf?kZhZ-oEO5W0vk zS8b-K%26@RKXIZ|$cacg2R)i5U+GFY12O2o;S+6n&|YAY6}7}rS^LhaA$)bfJlg0D z3}_EJ_6AYVb7K&AGDQg#mGMgMRQ@HIT@E>ILT>`jUS14e*Do{%^)~LfAYfbKSE5jk zX%q48No|qID=6vks`HLszbY;ozQ9W*W^P!CiB)aa#?dM?dSu$Q>OsQDu2a^;!sq=LB>E)t-`SMDb$9O@m-$-igasozZ z7X)_7Smp#I8GA}_>%tv6T@OQ&?rVhJE@|T@(uCs?Vg}B4e5fU{#!VHMU(;~6!%}$ zfO$E`ky1EPO&|DMcIi8s(84)%KxBLD2YngPbU^%p-Nn;HD&i-n!BWK4e9$nu^rxU5 zP;rR9IAFg;okppbzQk?j3JtJa_R_$4xr%{;WtOxk$wO&Gl|tDjb^f# zs3pCs30oi6gQ_>&aRy{($A+JD>N&9U5&qkbKvt{rX~*ugyM3zdOl-cDJ|8@_pJn-Oq#zBPQmlP1Y1O>v*MsYI5va)LwwlPRcYFC-5z z_dFC|>|Fxq4=#2=;s+U>O6aH+qm46?x{9wP*;h7`?_#EZ=NwU;mWh>ToQY(XnOVv% z|CteINYXuPp^leNZ6kCiHEb#9vtQ#^S>bPm6R|PQ*mrV_N$LDP$w=gjOAa9cuCf4q z4d6Blu&)8^X8~FoK#Noqk<}kl?Gkp#EmF<+G@+lBJ0$wm%}tiDxAeN*D=}D?tqm8j z@Q$(n!&CbHOHlfS-hF`Xy=1ucmtQJ9){wopH1y&@Fpu0Z8KQWM*CPz)tj_b8JRZ0) ziML9aKLRC(QnTAD&4M8l#fUqsGQtO-$Ss0-NiH-%2EM4&N@OE>d<6}QN%VNQfMNFr zzm(vk1~80*hc+}A{pJ+5CZDQE(?yBPF(r_EOQN-)>m-xXFKoq@{wizT@mIP23yd@n zCuuc9sAM(0n$J8KbQ+%#`zt}SpB6H#upc}vW4697g_Rk`Ec<{K&=g^y;IapiGt9D^ zw16fDv+Qf*oj|H_XE$TqfftBL)kv0KjB1QPnJSSiEg3E1AEZ{7G-DaHCh?j&f1o`{ zCPw4hWt(taJzd8=gKrneeVpS>~W@*6vALXDkh7432hgc78jZUmun_jMjRolK!d#Hi% zH3_AhX^~aNNVO%EGg$e@#G>%ZQ4`5t@rWnb$R|*(qzAm9RVv56R{ld#m0IN+{4YF@ z#Pv-zUPhG@wKbN~33b{3TdDFQZ>`TR0umN;2O9UY1AoIMlh6Hg!nm?w0h_gs7(_ z;#wbmPLkcxaLa>2)7*}i1SL>{q0A@+56r80?M)d z9)8*{iSxw%NSvqkTjKm`e;V3K zYJ2eSub@0Sd%xMpSf8bQZ=UdD!U!6MmYXWNp3!6k^zuOYgtk_Gn2F0AMfS>?&_1w; z2ox&N!cx%mF$b%xwrL_6X;P&J4I&TRi5th3yv@iVfBw1m%#Iv?r}FFWzkk~%^mfR4 z@I0yqV%B?3LbWIm9_zqbJ!o|RqM!T~ieHMTHAuvugSwqlX^{;IWnDBYTc9+|w{-$m zu8gax*sniMm=l2>mni#c#~Vu5pr(w;FyAFY6{r1ydTshC`DFTpz_ZkXOdo7WOl|s& zc+TRlZnR27X>ll9jJwJfUPLQobJ}Kp$3yxhwIKH$iK(iClK$SaZF2FRT;gr^v@l&z z@H<^GxS|*!Fs4F;{t8qmlb-GsrX&5iv=51eR?1PJ6XVg z;(qE?hk;MgOs#Y@llO|9f@6| zmfHH!6fA85Y3Xtq0YYLxNQ?-0!5=q1Glep9@1p8>$G4hWmLyTVN*0SUm-~tC1_^?o zF&d`Y+%JN{+cJ6PMJR0~;tRC|@#H%bYNGDHggehI3R|FTm|;Y2ykH*Fq=sVKmo(ijFy5-S{%7M4Gt`cg-&k1R0wb{yA=#SkH;Bbyo zYlfn3EA&c?ML2l5w84O+Oe^J3fKG#3ynb*WHfOt)z|MY_z|Q_PL4QMZucb16#?`Q^ zeAV=&2D3vfm!xJq?BjNuM!8%=^S|Q2nq=huSrna3!+x*MUqkd zzpC%(x42SG;UxV=wr0qyYOq1k7zs3sXKhliGT(siJy*K*oBHzUli#2HzOB4{ltD#d zGJW?&+b19Koi3^Sf9}?;2-K-K0Y&ifV^Q;nF6sA){W7sXCidIJ{*>5n68m*xe@JZN z+lg=czEd$BDM#eX9At#1@6D)H>ku7~VH-6SFPC^PjW;8~JYgPnm4qm)F7i!#d`4I0 zDiWbLd!|Rzs8EjOY0NZQ^Y0D$>0u+fxMY3>`)4EGQ4D zNvQ=IfFe(+IT(~WPAKfBM1{TK9fYMYD2@U?R+GsniG-tLBJNnz)~BIu2vY&v_D@Wi4wT$R&Eo;9rzKQ(9lMaL6~&NyVRs6kd6zc=)ZZ z4+E5b=|D{$pw#k&QtskFAXXEw6zkfxnnggtYE!JH!0P!R&!$+XYOsrfbxg5(nL+>T zXIQmtU9r<$nnR(Ddy)N~6ZK)$!_2{@ zP47DP9h`|&HTEywLg#+~?dAgqhG$!8#GyJA(&mM718Dr9!vLkMJ09I}2{IgH!^m(* z%5V}CU|XO(XW4Ft4IDf`T=mB*NQSF9#YK+y2*m3aP{Ju_`P&M!-k))p;^XG zp(DVYGpKzfJ8zEsl*zx7qw~(EmQyT#;X6-$`^`T0RgZvInNfYjo=}*7jK?U_Wa!t0 z2g?`So%F$^j#?f!^U>-`A1?cwUx}#nfOlxaL&6%t%CA5$4MBL~h0HT8aK5mb*q#IX zN`U$a>=FT%#7^!*Sld?!B+V6b$CVO`J%#2@pZ`&xQYY(pXL<>5J@~Vn(?4>6;oT8* zeV~RNeB<3i7!TjIv;V2a*hd+sPU@kNt0+2>g)WNY=y1b+<@(Hk!(Brzaxbv1jmLYn zT(PpN`qH$Me)cgx95Z}ddd?W%*3%6xxp)H$EpqniJ`zMvlpL%D8!ul%76abdk#b=p z2fd7*Ki_+{tN^j6losyN4HO{$sO?&{$I9OIUMjd-8I3n}#k}}>S!W#v3VDSUIOn(v z*O|f_Y`^efGVMKo?!im~$;-3n&eJFGXUeTt^}Q#5Yg#k-2ENarCY;a&*(2! z`kO5MmHraYPi6TN1$s}E;$Nx=HN9J@D!*Hgo(rkE9-;9-wmPC# za2$%jx{8Q2BhyjDTt9H=1mesuqKA~_ z9nj{e<Y{(x6X7~WCS{Q!&& z;Mn^HUx>BjVt|X*YE-6-j{;F(ZbRVz$lQh)won@YmQ|Xdfd2&lZ3JbZM=>IF6A*a@vmSX7U@J9?I+^!WC+oGE;L zQAQ5W09WCM2+M1BylC-iO`z6EBKhp3G5NpDy$gHOM%O6%R~&!cuJn2m;y@|25#BTj zZCW6dKrguYaui#(1&-wEk`S=ZZ$IlYS4mDn+i&mlK5vON8qIahnsr~KB|{%RcRTyf zqK4AiAhf?z)3#5d4Z0@Uf7UgT0WjN7Xyadf9MqxW9Rh@*_}*XP5nW%1?F5L8wRB)<$u9v_Nnuo#Z}ioOmUy$5g~xsq>3PTK!yIE?B5S>f(5c02?^xnk)t;Z7gYDDT&iD zU@JceK1B*E#Mn}3lsn$-ZF{EzJ=pCd-$eP(TrdO46c~M85{}ug26aZH`-s2r9h>fz_J)jFb!%BL2Mkb`NcS>}5 z=8{X2dTo+n0(dnUMZj`e{ZxAK#UD4lM(gH^q_fDZ8&M>|8Onyq91Z_m@t;@p?^9Q3 zul44Mf|H^CRS~-+RwvM5^ZBvn?%VEqj@1JBg%|yXbs@R7MIU6QPnZ@9jffukTvN9v zz5+l%-bPI>e}w8>!FNCuqJ*um$5(mWaYG$YcX*EiK3QaN#sDeSalxB;q^|o3+4s=r zt*bC6i>7H>CKI%fL-U`|B;0Molz_uk6abmQJ0puKBeR1o*dwd6k&=)jE<_5-X$MJA;)iR+XsqwFEZVN~F3S=I z;|#d1OlL@MU2YqE%n za!2nTqF(b9#3Ib>0#TyBrt_(>pY=c6PeG`!Pv!+fMMNV@2+fA0#VNG6rXJX43?2dO zOGzG@+c$!HcRZK`6UihYmXOM{B~E`rQ(6*mWaw{79YSM0IVfU!Q*pmpdc zLNB>8VKOVLN*3ujT)al(>{_snxEYUZ!XOJg3Qz^$ETvN+0B5{G7dn)@yo*rPYk(p` zpg^4~{!P`^r3|u6m<;H1q*VPKJw1_HOK*%;j0`rDTtAA@ZHZ-`-RX$K1V0oskvpAV zBg4%cAG9$xIFx_U>NWaU4EayLL6U&w)$Lwn4r9skN9~w=3y0aQGMH~r1jC94dt#|Z z5m4c)sG-JJiXgFPJI-A4#nv*RDe@$fPL;dJ*2p61ghSNrwgopTsf9A8&pVy8 z+eHsUaxg@DB}>xnt}@kk6%tEl)!5#J>lrCV(M=rL#5A+r{n2c#fb}fu&i)0gYXk(9 zy_Mi6gPF^Z|L^X%mH zSuro4XLO-g2NJ+g$R~is&KDV~SvmA%TU=-4eaUo;ILm_TOq^%Rjb0~R^2OCAdeQ%U zJIU8n;%~v|8{ot>`b%3xW>`W%eT*;(>h<_Q#E#w8!)IHCf6oH zP#u=uN8UNQAfk0qEeKQt?47^?kt=nWHN20Qp&~*Q=Zt(6vs%$woWK{E_?R`3^ziyP z!vlAa1s^lU8AK0kq$#S?RqVY;|Uu07N< zayj46gfuRPU(=)y>jHdo-apP{R4ob|0yBFVU10%3ecVbKEQinp zDN$$1YVa-GqD!a=6!TIil1r3U0%xQ@5=~;!dI>BYiga-q*_gVcrVK1EfbHP+`}ZL+ zPbGDatFw7c;{Z9X64(e$SoBm?5XsLviA0C+=H)4{U3Aq2;bK3Aps5Wp5czAD0+#xKegXXw{oi(=1Ad%firv= zP|{BV`*F}bMYot>*iTW>ndqrc9t;kccPa#3jU zKglt?l-`GgJ;I%7vIStLF6bATmuh2k#8D|gxP%CO7#T~!9iUMYj^&lYTF2QMg??Dc zfx{F<78-(BNR>Nd0!lK60aeE{P(uO2lKJnu5F`%%XJlVhwWKauXMYlwD^`r<8R23e zJb{{w&ka@F3Ur*rLZQUm(OTq2dgm>InEEZ?J8OIf2%$zI4Lkt_sD)uF>P^;lWV0CE zKN(-QX*JPp<``puNQaYyY`}bVvcnq(>~#XmEtc>HcS`_Ok`YU-apu&_+>!e$E`q(zY?#u_E*UqeV26XLG|^En#04zd#cK5czKHuDGSPz{ z|^)%O&x@l{yNgIWp4R#O4E3h6@3GlPvo=#@{fqoO1O z-&8ozYZEa9{c^COGCvNhol2EXG`h%6F~p(jo(fPlei7w)IE#Y!83jb>>JnHEi%7z% z(6pXiENWe`UN2lDy?k?wOU2RY%fdOKHK%Gzy3&$%1Hd$(^3fL(K`SnU!ce&3C#n+W z7dFR-D1M*9khL!2k1fKanoh}EVKRZ+jom(VsT-8zeYOD+G1VENeGD!vSt5+*VfM7} zc6}0s@6rl}`!M{_M<=GB{kh#uoqbui zDN0{vh0O2wtufM!7mV|mW#;9(eu^?p4t|Q&)8|U2xrJ}(%j%T z#X?~dBUrm+_KK5iJq6Hv+sv_zqMal1yA2ceLe)<)rdOEH_rsiH8mWhRM6VyMv$3@m z?Qkwm8p)?D_{_Yv$}iJzM{bq3|ypxnn*=C6>vs>JLqXzX?=>WSXYl)CHHnWm@i`4Uo{ZN84w| zMh~An+3pR=+IW=6AjR4e3JWbeAhZs*j8z=znC#Lr?-`vGR?y==GCIKO<6kn{?!>Sy zESf|R1L|(OhgM#q1UiIdpM!E>8)G1fxlba0(sq6RIrF$hSlCivs7POu75S)?!yh~= zyfNT0U3WY>EKZfIxFy|1Rg3ub#Qs`;Hj$qRyZ|RS)c|h4$!NbgH6hCuftLqVhS3zv z%+i29H+}XheJ+D{$SncYvqYHMG3n}HDCXgG@JBZ4VidJfs9!)Tsh*bvZ$_Fr)dv35 z?*i2X$DTvi4wWF|eXl1VD0> z5`ciz)Jx#6RwcZR9esycd9o>ij&h!XT7FtI=xWcZn2-L5PKQ+YkH}i&K96Tz26jY; zch%EHM;6bjbF@74uAr`eZgjEu*@0d%CmjM3A{QUH^57!+p5g^~T%(`3rKt4U+V%TA z=ff(dg)yht-&1Ndb$Y?I~imAZ1h=kn`Rz=;cR$-GbjK_f3D~ zR#M;i28RjgE#+}ikQ`|T{GFxnZyFDp*U&%{v9*Puz|k?G(bR#3EVXYYQurVov1O)Z zoLVqLgQ^HiJ?MN4dpjUls=%HEfjyxtdF?w<-#wMSbr5yzVqlIUjdxHC)P>3|46@dK{9rpu(Q2^`uW8cg zYPOoF5zEQI7-VhqL*4GNCu)sGMk}VFht6mt_EH6QkfE6}usoNE&poUs$Q6R>?VX+q z{Cgi49~MUGot%jq#%};7A%8YhoDUS0jxH&EA5j+tY~C*e#%iKamR-)tE~24Va$%Nu*sv9JNck z17)R0+ZkEgNk^5;#b{#(2AEQRn7R}r9_`F20$kU)PBRO{S=vIlC-VmYc`1#GY-_ND zDLJ*DAxu|!4of2q8B)~$Oz;uJ`jR)Wv^yvtYfFf-+x3BH0ygUuMkm2&t%S@EOoPUJ zOB%xrfZ2edFXYgHHCQkg0$g5*R?~6>0%k$Y(oF2QBNu7Kk_V|(7O4ggV4%_m1Noa_ zsSiL8{ZYgil|vJl%ftk8m?+6J+UQScMbx#Y6*X)Ywlzli)q_q>PkFGn>UDC_#t^{E zPG`wZ%TlO?j)G|%F`dW zUbxaY$!Mn=NKMO8NfDWnWYIA2y|&?k#Y;4;!?c}4cz6_3Xm^mBF{eD{3@MjUda9h^ zkmljplA)=>xZR$@in|2X`>EsOap+#d6aYRoQ9@4Ao1~}4LVcPj>vYzB6eN57=zQ%M z|FF7X$@yx7(P@*WaJm5AR;ILd8qx-3yMySl(~?@FNMW8LaNc7q26N+6gtnc$peV~w z40V7^ZE7&sbu}V?l~Eb-&>RqOzm>dsReN!);fNPL6$Yl63QozHQiXrk|5$9$ zK@GMs5QX57>KNK)Pz?b$@Zmxh7&+iw)QFA&^`<_@0;*x^978@BKO?&N@M?gIL59Yl zSido=l+XuOU;BJ{!*P9w;EawS=Bv$w51v- zB=OVKQ3vc=Tm7N>Dj0nuT)>df zfpa=S{g8O$p7hrh`N^a1gZ~r=B{9)97*UyjAzVyiAb3-e*gC6|bSRaZ{Y2}PfL8YQ zIx&*QwaPH-WsLkhY^(?gLvsjZAfHWBKu!Fd@(}O>!ruSDXCO0tC3OBp6%5`{Rgn)T z{ayNCcl`qwmA-Tb{FGwKj44lS$wn5_)rzJxMH6}H`h|W(cbDgszyVlF0D{+5GGsCl<_wS<4n0a(mq#3k zNK%j(U&<+h>O)2T!wbr|E}MUwX{C^_B5h+Gt^cFm)W=Nvn(rIG=1QgkTT5CwhA9v& zLyt00xpSyb%bo)qO0uV63r?V2@c~aLzCotX9q)#^{L&fUvkHJ0Pl89oqPyEK2FVcP zJfkre{_O3zo)v>J`Z>ezID zWjBeRkM7&^_{+sqJ!>$(=_y9!LKj&4-Ve^ZJ?GsYHOcQTCxVk{OyDB7+%y3rXq&gp zP`rwcgyq58$h7`TL+h&*AzY&s+#OPSy`t}F33mdw=q_H;O5Tf)DB82bZM<`)b>ErR z&n|dy1(=Ja!Ekn3)|VbiEaRUNOna_HBhaFJ7!7h z>#uDv$YKjZDE8oeTi7l?rqg`i(FVuzRWZa*R>7k_{&lqkVO*!t(eiQEM?%=dAVNNZ z{mC$+jP}XMwiTq%6vZcpwLdP5`69J7dGf%j7G4;D`XVDxA+ z76K0am}>z1z*!yph%8x83(Pcp0k_)3d@-@Un5ZvMGANHv!JYX+9X0hVH$PI(5-xw1 z;uQX#qz1q7uT*}MAeHite}&dwlyUWnlV*Zui7l#WSM*lt%1efOcxz|$fdE$4;v}3M zE4mMAn?(EIkMa!=S_2w;imT-jeouWMKX(0<_p5x`qo?Qc=>ZNa z#x~ca)3C&yE-V+rtt}2>haw3}nyDc~SKRBP#2uxY(7NSlQ>nRy7YGW=p>n4K_rtKT z(%_IQtaxa+&j)p;2&CN<_tMdUSKYQEYYF0i7WGk0s|&b;wBNbeBW zhHc}rBx~uaF^y}9wzwT5AB}Cyjd8kw>%wqUguUyLg0T6c#6xhS)iC<`OAq$Sk#?9mbf-F^cgS z64Eh8f~cu@3l3EW+JBweA=n$}npVYDh;#RRJwyhu=8 zVAdR!-uO=pixEF=Y_#UF5C)C)(7vxJVvDpNe~iwu&{rtElAGJ;cA*uFXB~VWb#tbp z;34FJOM7#gT_Wa*hj1-}TT@6)5qcReJX!*EyNF6rnE*sUyT7}3;}Y2-{ix#i64`zp z7a`rwY$NL>mW!sy9J=6g!(Eh^I9f`^piX*@GLB&Hn^h{vtR~1YE)(Y4CNE83Fflqy zpp{GEFhY5NRH5}lc%PsbEd0$-rY@y4R*W- z!kx4Q&|_bI0zYk1GQj8^+NYNTQx%j**p$L22pI711z@vXG=VnS1&I??>@H;Q9)W!o20#tD^>u5hNycKP`h?q$ywHbkV&~MI4G7~ z5?K$nFkC}{i3u}fD45FIKrR#xpIXw9Q$L0t#W$7a!05_Qt(yiE{*DbP#BuE5&{S|& z@(&k#ooqu$aGiZhvtszi^qg18bc=nBU@isBH;GD|`vzmz42K93WvRE!+0f3nYaw0WIn< zV?o&I0U%3T^z35~Z(@pZVcV`fjkUc$VWEP07$6)EF9>G(801vzi`5y$Fr*j`?;OAt zg*&9x$CTojU_pkAvhnzb8gT6MOs@IF9K{~7RW$hfBE-6if`e|}$6kmKkLpc9*Y+Eh zVrCSKEBFJD6$ZAzH-8jxKk1H-9BK_#1DDQHCMW(dkt=z~L?zTejD2ZO5gf+#_h_-` z6umt04r9md;Egq3+mb=Xn}fOjq6tC57DzxkOjG54Nr#`?Z4}n9m=zPTu&^Ku(H)DC zmef0He@jaty*tQ_t7Q&XF#5>ACF2|aYL)Y{(<$qP$gN^)QAmPP-GyjqT6tat&aeh~ zNYmneMX7@S!1j0H=2FQsMGV#K?|_CXky9-TZvkI%I!X8;^GD*cujA^{F+X9EAV7X# z&<;vqixTvj;!P2ya9l?P5Iwz9>#C0H&hv+qB?rO-#S6`F78 zTlv0eQgAj?eX2LiH!dty2Y3jgDpNJ8S2hqz-ZBBJY}p{LYkH)LJFq;o~bGiyNc+ywnIS|?FX6@r0L)&G3+)pic<3!m3bF^Q$)7M^(Y8~a{hm=e3 zIiB<*p{cU|!sN^?tX!ud#qD7{NV!ZGiUknHU>5CGY7vF|xu{Ws{ZcfrOWb;mlq|Ozrc}}Nfzfw^LOg4|zDz+u3ofWoPDve*A?o_T|S*G|a*>Dx9^c&(1 zq{GyM<4k?tR8QtG6^2!)Cii?FSGCzGi%ou%5y2c>Y;5RL9p*JQVP0c+{66y$V-IX! z7UN<~co%+^Qd^LvK*7*5!Hi~RM(Wlbxyi(7+E)Xz^rkpnr&z# zhN_h&yjXs|XD!1sxeSgG^A8xZ9Ys4@BI0;)SsBVzpqiT9@=(z+jNf0UX`yHp45Wgp z>FoMM;(oHdv{Yn<&UF1Ff%F?Vq^DwP?rW1&wNYsDhm=@I+e+c7GsOSTW3-)=UTUx+ zY~!mqKVtWR8z|_bj^PAbIF_OzaSU!@^38+_olv%(`s=?z4<(Q3fXo z8UvKlQPmfGseHszl`<@4L=HrTCP5NR)~aK{stm4pjp_u%e*t+dN#C9dnh9*Zt}qyr z!_s&}mhsi=#gmV8{tJx06q>=f<9F}U$5d8Cd3-q6{0@GHs3`7T!FOl>S2O8i&7 z;SpXIw7b5baQ~7}L9_oxMv_)3GP$SFN?osztsIqb{^gCjP0HBsMvv+;E4Ohe1#>9{ zaVfK(%~?57pRC1u9tDJQ`)q+;R&@W=izmU?W15<*mThqdCu zITF&0dr0AX`*^Mgsyzq4AkmUzb53bNA)YNA@eLCZT4+UcAUlsE`Kt_~95q^Ky-!w; zB}PQ`zmldSzIaiP?V&lXhC;#=IcTc{^V;iVE zprPO~7{Slewc&}3?L_5}GVJ@+3$Y?Up+n2a8-sQu`+UNC_G38y0L#o4H3wGib~p*O zJ34_gqs?~kIA{!IifsIp8bh5yGR(=a2R_P`)sE(%5@kYGKh={l#wi9T=N zK70gpPqn#V(}qaP&Nw(uCDBHKI#Jn38po1FHic!~zlFB-yMwVgCSx`LM#9I#IPzn_ zx)>4NY{4X$Q)C%qec$blb^M1V^f;QF!ZxW(RFbdVF2C4a$FRmhIbcZ6h9lN{V4JM6 zv4$1d!(!9Aff-%YFuF?^-D2o1;Ux}Bm|^9kOM6)8y)C2AT>1b%_;z<@ET%s#Ft&`v=*Iy@C0p{a5AN*vSQN8%tD z$KFKj8$sspD4sn=%Y_4RC_b_+2bN68N&|nfY~&q3?2@5IEI!gFE9EP5LiP^O!m(=M zqi*4&-NHv`LE#%}=sq@trpH%4T*<@ULuiLA9%G?)=1I>d$NG5m@HCjJ&?RleGU{B1 zl%jxwWAZl`0KKDN#n*^}F2wDxD5Z9R=Tiy>@yO?VM8Gi=y&5`1QCGDL&Lj*VI}JY95M}>o(m;^eWVO7I@SdGLq~ zv5=}mbKONic7AZi$)FEzL^9hFOE@S?bLN-QjEdSccVEJ$w_>i0aK$AXEy1r@@Do>t zBfEvxFPC^$w=MwfPT-_Mn~xWr4jSd2i3{ZF&bX0JDIx)1m^at-lFT75F@6(T0-oU) z7sL1Hgf|siTW7E?lEj(${TEz}g%3KH!?BdAsQ22~7x_f=L*n_I2i3^T!{-GPomT-F zZHxWj3N7()HJ3pTrm&AoBbl;8c)2_U6tL{}00Uf&PDo^N$ZwB>L)+rT`$%`93WR?w z^I>e^uUDyeCC)_&$NmK783Mlk2&|DYN0%ykw{XoC$}pu={ZL-#Yu`Iy6EH!n3Z549 zLpmYVBWe$A>EbVrN?TJQ=_V=!Yt=;JWfH?3NrH!HveP=5r{!Wo!tnD5>O~lq{rtLx z5AlF{$|z)*cLD8EY^6e@$hd|gYxWnwJ2C1RC@a!$ z$X}${fWLs9>`BZ01}aTi`Da3z_XGJjETnmVfo71Fv46>UWVH$doEiU(a9)cbmqj@h zeM^UAs|38TK$}&#YC?ga69P&{<0k^WI?v<{a+xLUnQ0rBNS zmqvkVfCO`T>yRrjpL2z5!YIQmKc-p^!e}FDI98UX0$ayarouB&{xLt-# zdc`>T+!s$7v7bxVjB{}S%MyD}#Va5^U~PZk(qmlPCG6$a0l$9Di2JF})t+%RT>Ud# zR4ZKlhk%TFKVlykL|$2Z9`P7H_~H$Z;R6S!q~TyO^z%j>Aq7PBWsh(Cff*B3d0iWV z9x9DRQWv_g4i}@iLM1c0Tbs?2`}9IO&UkwHkR;i9 z!F%?C_Kf^d%tF7Yj8RTPlXA57!3*3rxrPD$5#hX;oD7X#tcp zn(mQKub~`uw^D9eopYfFR0+0B)_2n0304Ajv|VDkZo+gKQ)tsSJ#sHj%#W ztffue;|qh6_LiidHF_r`*^DjxD8%bJC1tK5>2ivkBqg4lDp&3hsgqC-EInB8_$tSQ zH5se&)lMeviX>o1&fLoLS&1hAWN0zMcminUSfVQi1w$~lu2Kt#kxbnZ^rd`{bQO#k z(_Bc6hfHN*D-5#QmUEClA5*iS5h(6B#Y~7)bdHP`m_*V!85645C-2Du$$D!ihz^Z4 z9~mKeg=H5?u9xP~T3HqI&vGWw(4Q#lzceeJ=9EO&JW@C=V^c?O+ifhh+6r}BQehAj zl)lr>$-YWNR6Wd278Pp+owKE=MI^L-M58|15sA@iM>ECIs$Z^7zS+E(H7~^Xe$T3K zSjH(PgwWPD$hY6}DOMvJ6&t~n6^tiA0&v}HAQ<(UG9cy!T3=tHaZh6GSq`EpKC?!f zergpzlFs|og9OV+*AN2PGW)MeD5;7YFRskKOQHLgj zcnI?|h@}<~V9*Brh2A*icce#midkrP#po2ujUg*}uCfoPb(f8;2Ar_ee6KB7&^->8 zgg>RsAXf4s9+NlTVF|vpMcP@XA_&d3a|%rg5pjA?N@!7_1FD z!gv?9PlumSR5$0SUN*0{6r5WDrcxEODy3jIvFa;t5P6%+lw$`1^JrhCmK7G>rZR#U z#k?osy;6e6n|8|!A7{S2YGp9M*p1Q!BqVGt&e<|6%7@Ct`h5a7tQB_C?|XTmum;IL zHi-_UMQtWQRyOSc5fW?hrZfU%#l44rgBQx~np#Vn%=8*hBYvy|sWGE^AyE}fkK!mw z$fPHE6gZqBfExCiH%u3u%RQEnMkrmy1Hr4c-ShbuY>C(>iK=mAFo3wv*1sGl)EJec zi8V(EMeFdQewr^T(Dg{gYCK?n|nIwf1qLO7e>v1^Kcyfi#+)%A1DX^~8EhZ)!?1FYDB!2}@Ij|wErMT2 z!wZ4=>2d11-~?zLIxzNeKCur2sw5~V8K;6%)Gp9coGTQq4ufDCqeF;%!jmBVC!6#W zaKtHpR*r@SxJw_r%ALgfM&RwWh`~QI9nCiQLF615!}gafUp9 zt%f;`h4iyo+t}h`WjU1_qvAU3ly;T}qk4_ri&wGtmWg;*ziU4* z;{b3^Y)6m^_%Nn5< zBkpzu#+B^vTecKOl^sOa-k=BfiMd*kX|A+_(ZL80q9hrSz786&pK3X})B!a$mvsY` zi@O_9pf4Sh!g2}G8`(IO0;bX>!BRJIru5ojLKvM&!>u1+vG8*gu4rUJB`_)xng;Q2 z=66%4;TIL=M9DU&@iO=$1VThMj>NTgucYShi?ZH4{*C=^=ydbG#sdlM`MA&Q&o803 zFkKH8e5%GJCNQ$O;OF3>nBRS5_;=!W zm(B=(y-#dh-G;p~aDVzWYg zvolMk;=mK;$ed)oZ*4qDEb5`n2mWZkrq4qlH|*HkpK1;4yNv5swI=M(|8i*up|zj~ z(&8)~QQ+_W)TdvC&aagLNdbrzOMQxFooxjf+)5U&xYe^_eP7E_SZYD{W3$Q*?LuAd0S?7Lh3m02JO~S(aNLfB5y6?4-usx$4ifQ<5WmBw`RsIJX^rL*XmTFkzxNbf>vEX@zojtw~fwQUZ~tA6mmUXCGzl zH(J_w9Fqe12;3hPKi3Lz@|)aa7Y1x7{GmdxNT?W?OE2o8IsIy7-Hm_LWX!r5=R+hX zRx9fa{nBtb);|3~ehO7qtJpFaa3@pERBCdZiHOn@`r?no*clOvW~sF7v+;whXS;;{ zUe&U9~sLxS(1-+E8(O@3g;- z`gUnJSBMlX{fW2yJp?k^@Rm_-tMrCe@NTKuAd;ScqN{|mzefu+RW5S|88w#OCK+TZ z27m+3=OW8Rnv2+tA*zR@Ad!Q;&K|yCAFy%K(-43#Wl4k4N}1lQc~NYB0I>e(bSpp7v@9%Z2l_9y( zt-agfkYqPD^frTBr*j=z`{A3&OO=W;Ps*mZDjX`l_WhgSoARt!J-Tt6(&V5zbU3Nc zV;g3o$~PBb_TgEY(LHR>_%Phu56`A~eRLif=L@{|ZvF;S;Z!>TcwnNz!6YmiMWqvJ z<2YzVq=Qx*%W+F+#GR$+6cIhEi~CYit2|^<;zNs?lBH-K?F7?#N=&F82wa+ z^a@=^Lvy=$g(bzoG%S?tn`1tr+r@jASBF*{{7g)zad=RT`Ji@QMAK?UxM ze*`WEH-L-kp&9WNUxJS1e&2%QinRy$#SjM^=GBsYkX1{vabukBINL`g6U5RUnH=`K zN4IYXnM4!0o8%s8s~tT-DF-O6Uo#@BHp5L_XktN71#U3RoUtK)MMV9t3`qHo3}iEDov;$fsNatGx_qW%SXBF^2zCpJWHdLLUfV+m9#?<6hzPMSNc+iBp;7+((eF* zQHv4UbR?-rM7UNkyQ|X}=~ytML?t4zV*6+4tOW;+p%{k43Qg92#<;{ZM0*B~hLt38 zHxSYaeG{RoQUaWjg$P0OT@r%pbNz>kaO>`{|k21nfTBHNDoCFy6I!p9&l zp3HPz3?*}L{DMAcOAlr~alu7yMJ%?w(Di*sDmeXw`K2Z(sRk}K-C5w0Vk8hNLuN{c zhi^&X2dn@uL-f$>OJ%jyre(j8yCQZPoatpyuzpOc6bed5;4AHuoP$zOaSAw6Ls^Cw zHrHokVCs*A@I}RKgY*DzIdgnf0p|7$hpOSz${c)mKy!OQ4Vlboz?L4!HonM>5s9;l z2nvfFlm4kr&F&P|?g*=ft-0USt`TAwlLU@|XC8wwtf1+`?gCv%C>B4@Sp8<1 z6i;jwb@)C?F2e;31pvH&+d3-RCKRisp0`()+S^G&?AB7x=eF2H_i34d@)zhOY|SIC z;2k=c1qJ}iDD#?=kd@m$NbOa@V3+pVtI8aL~#^lfzB2kMtD2*cB(a*9LIdSEr>d zfJjlL%(>_{OY`POxEo|pleV}v$=hOXUL9z_Zi|^ImMY@5IG1I} ztRA3vwJn~8Hl=uy8*}nV$CZmlSNZ86L84YZpnIW6SU75Fm=!d;vPR7EEnC`A6v#6U zkG5KU!n7{MPOcmdrI}zFoMAAF0ZVeWC@v%a4rDYL0LI`MQebSzxmu+r0vNypr3*zz zO=&av@KOKaLs15=5G`p9y{Ke7L94~2YJ*9E_r^r-;m{U>O%>^(2Zx~&@KazGJr$im z(Fo1+~hn~4cbcR z2~tVKvL}*dS1MFXZ=c&V@z11De#hoE;*TQO6~Ca?Sb43HZa!3G@9Wqz=Eb5=rmzK@ z!WI=%*ut2?7PcuY%N1?I)>KAH+!gnQV}7ZI-$*cXls627BM>4u#9MC1aSKCytz4Bb zv2Tb;$V5n%v&rZyoE%xxLN$B}EOW_&yv{tR^=LNWpR!z~X{de~50zzIQK3qusAERqV3->@#@OD(mS_gW=QD|B?`a0tWJUIuAh#F!Uy5);nJMgmF z@P%m&-l}$eC0M{@l(x?ThH`NVDEAdwTZNPOw z``qaqp`)$}9upay3^!D4nOIFo8lj(q@z5Q{goiQaVe}`Qes5U|elMobtXnjgvTdEK z-dnnq9{KL0@UK5rez4U~WbAx#S?fW*8C*7WB;N(|%7iX?LUTExOWsil3-L{`5Z?$3 zv4#cME7F7STcH!9Nzhmd@ZMBhX#x>fP%o-}O!!S!`&C6`G(B5I`b(?K{?hJHJv-mX zt|TfA^e?QWW7}Ga7V9@w(GOHf_QpT>HU1)Sn8Bt`B|(HoXXYbOrBLN{U~#mZAH#<# z;w-o(eIVS?TW2t!BpR3^6+GdLoxca?oz6L+p(93I@POdB9)|^7iTmi3{y8GEi~Y5x zziWilCI=0bPi~~Qvn5_&_(V7CMN-q@duUxqhlF>X$qp@ z=XD={Eh3CR#7TKy0RMP)mduW&`A&Y;HeBR;i*c@Dl_aR%>%vXlN%wFi?2{cKg>qV> zQSA#1c&l!FAY7BdR@~{pZPz^Y5R>>czmlbf(ii~UV5(XpfyEzZ@e)IGh8#t6Q)kjI zROR3sG^=xv0w?7S)q@|vl;%U8(gywdC_M%GG`AH#CS*Fkf1#P%&l|N!sF!(>i_an{!Ml*>P%9(e6aHx zHd4t7(9P0Qe>&Zgbw{vOrwozG zILdP+`ogYY&=}Mn*-TiJKTr#F)2FW_BaPRz?@S00i+7%hA97C#Xe?8aI7iW%>Ns#d zghTDU%>Cw-xQRi|5J}NUnp8-eOk{w2hU5M+Ee_QBd46p{cS(NauKta@I-RWplLFX~ zEA~{8UCmT?reUYJwgU3)+BJKqYRDR#v(B;_blbLx8&`u-F6zM|#sst&BnVGB(89@w zczF^nrrNa7nIrGXzz({o6~A7cDfhAfL;ti>!pVkL&pMsVR)>86;_ekT44104PKa?~ zMn}oX7|=LH>-XXSfbcKGkbqbkpfsXT_IiNmn&n%U+RprXl7$?gTS1nbI81toSfOtn zY@cUr`>DXXrPckaFSHGrDv6y2!6wCsM5So?8!k|TbSe*uz(55J)LdcAH00aeK%Z<$(nm+M`J{lgz>oW3pD()E9{)rP;| z!_Xl8Xs660BEkIr4|tpWN--b^A7Dpt)VFYhqn!&tLa_~g4hG?zwtxgQNM!Ph+QE1c ze~czAdbzC@xCOYn)$ZmPCEE%cm2T=Nb)&?lf1|IW+s5;UeF5m275O#CSVq2r!UhAi zm+*n?a9syt%qcPe=0(Ul%D#KuP&28Ve~HQJDoq)R4W{}$ug`Kn&c@{e{hgwvS;aJVU-4fK#;MSHtD!@|064V03+3$z#Fu87%(TFL8n-8hsYO%WG9I~n3 zjQx;)vcL6fb}xTfOzJTF2>pvV&yk)7A|H7KYrR^; zSH;-#j#1t>SOh}*k&bJvLB;YJv4(AA>4ZhpeGM~X%!O|V7x_&lpoG*kVp{7s@>F>E zG0xGTrt!=7k*7Y^^{Nd>g=^#Yb_K~?MWVqJ1aJV7tV=SR@KqO*l~yC5$l9xw!Ovs` zz~5Obk|4flTyHPg!Q3`-AW73eM!eFeLXXJD;plC$9CmJDuaNet=LQj<SSa@ui}mWFN;)sa*Z zZAEsV6KrG@pXzqZmWS--lhfT?zm-eAgN4oj%7Nh))mTzu5-cpkwq;POf#vqq>|D!J z6X+a5lF|G$n2M18Sl9Wb8V`>}%=9ysU@+ksMIX+#ZNgWAcSEg6dXGp7G*yw zjRGA*NR+<7kzP=6vDv9!uxE;j_;;5W2898tX8p@kQBuzt44 z$fi^l-EaijQVY7Khy<3=wT1Pw@+RL$jN4_r zZHd3CnqCC<`^Ff{cEBmh&WoHt-3CJOsP9SM0LT>fkxex+6XypG6PlO*jI2oWTk>{D z*eR186w|Wd_OwbUvw3`nN`?XpOGC;?n(AfR(!kP^cOoZ$v`KDYDq07y#Mf!r0=gC5 zbc?k0zh6o&dOyoB?s$`nC#WQAYM5fIK(F{@k6q&o0K~Y)Tj4WSB7pij4<6z*RE-00 z1S5UCnahK4(_v$W)@h+Qx zSbA#j_ix@#J0#^ODNbc7r$Y16#h@+-Qg&r{a9YZ0cdvCdj}p@4AtM=&X%Ab#pys;H z{VmFBuoi~|YA3gijgJ+|BqWGkgzr;CIviUcMQdn@&adL6`l=^iEzxqsc_qoIJzu7z zK^Yyc*2j{yX{FcxcBi-VpzVv}jcD-ScPso`mj>HyTR8nqiB=SdW)`JIZ5&wC#^_Yv zdkL|-epFSXquq?8{XWC6mXt^iNkE-Omr9bgMGsDbD_1|hWNwBpKy0zb4 zKYexf`taq!;cIB|+0*?u$FKj`gPlJrQSu0Hg`xD}x8;GxS`+oGJamD2s zxzr%Vbdg%BN`%;lvPt0*t$nXj@eBaA|0$C`n(^>R#xc;ePTH82w>C{^yT_h01{8@kqM*wCXG2U*2DQyPmqyJJPxA)PZ69GUdnDd57Ra+vlD z`3^IWW0YDmIKLlZJ{~muwX$*A`AC5;*#^E4Ln^faEz>PfOHkTaNyeqdm|cI%g=CB( zt@nvHwR}cW!gF*Sm6UF4%luzI0wqn@V|YPSB@hChm)KOlN1gmFy4qImqlu|0+0vX`HOD z`JTD**Aw)_xolj~QjDJFr{sMzr6{Au^=3}&e9GQ8sr0_VL3|`6|GJ7ph@+UGd-JkH zIDv_XrIFjgT7BG6?!%TdHOIgSmOv+HD*p9NT$1bHzWJI6cQ7xjB#FbFGrYpc4LZdq zc9D+B^qq87`{#uJ(N3QAGeBL3dcZ-r!x6d;C{#qsF<4+3LUb#%D%x)1>>f|AD;Jaq z|D9__Io5581c7>=tig?2t;H82`%Q*EW(jZhveA}I)|zv)3cHu)z%|v5lx`MbCIy&z zQKIYO`_l1jd{$ceC93eEw4yzhY!C9jY*5THJsu^v5-k|qq;&!7Cu6@M27sAfv;cFK zOVqt#_dPluzuv%t8sihP3_3{1iU`LbFZfKvZBVJSqm!NyJj+Yx$2TvYt1rB^^gW~s z+tgayx0?Pwom?xfx8C8-IlLBD0ITXZjxfdjRK}{1+3ef%;$i{o(NGbnc!2MHJnqUS z@=jx`bbv#}sk!Yn4tm{K3S$s!FWLEEx6BIG1f=KAd?kMBXn zdszKzvDMrzMxwY@)T9(q+*}E^?Q+)kht1=!4|MtDG4b_J9>*86R-TQ6HjK$F`3RFC z91f%EgAkWZ2nyNZTDuVq$_Er2=N#%MCS0nYd&;{mVSTn{KukLzK&qY^I|}vNw`t+ zh%S`&M9#O3E`V?>y!H==Z`z`bL`EN@1>M7QIe3gZ9UZMUwZEyocT_fS%ZFO<6&<;YGjgqx}YNvf*wre{GbWk+tg> zg^^>f(1{8H!v9Jp`11JRaPv~7CN|?qe2&?RrJ(S68QlACZ`g48nxcOe$L@~TZ92xULHj) zT*Cgndo!S>?5%pxC(UCCn(rj=P>xVHK{so~_OP3W;Pj9g^-Ko0I~BoIcjVSj8x# z{Xl}o1Nsd-$jA$ol?j_xhNLo~UXGlX!xSm+<6Js5s>T*5Z!P_@DsNqIGN8pNClcl5 z8{>r|mv8JYA8_=tQ_=;7X88(UzR+2|NG@MgS-zMq?!QX$TNwa=w1J)s#d!wY)k4fO z0VI;RI?n)Pf8h5}KFiW_DJBy!Da0ZM{<$EMyqE}JG*Z<3!2hEV9`U_C1Nm@15sUB~-qUEp?1Naw zV|2n5e~GL-zZSH>A{Tjhu@w0Q?7PU*G8@BKmmv%kaKncP|D?$bhJ6nI!Oq1Oa89yt z{6Q3jCR&~adCmP7a!qj z`OwFDu<1W>D^Q+e=qB+y?fcIqyx?`>RYH^W57D&<7x65Ce+yW#BE|RuB|KLhcmhEwY@&i~5dV$8$0xqtI z)|6Jwt4^AvA z7eJbDpE-cs0&jPb&qI8UKk+}g1cz))L&#ASXhX3Ka7RJ506dBX!AFvF&>7tAGLLY6 zm%K}a+{7i%{3@Ola|E4eu~C!Bgo%tkG&xBxA}C2_7zu}7otIO<+D%-I`e16%#2-6U;3b_6$mM!n-1fB* zIcN_%wQ-W{s5%_kYudnRaO_RgChipJ^YkjpP%F+!9=6`qE=o%`y?LFtdILQu62G+{ zD;bk6vJxUDE_pB08#mYjB~09B=>L=wflowHZQQ@thHc!PQb`f~T#iCc{RPAuIz|4Z z3x4E+$`o2{xDmb%+Fy%offk-$x4)J~ew$aKwng036Icy+>1>mMq%YZ|rVRqpC2)7(#Bd7}C^4FKKX10y4sTp*Y$&i7TCljj1?fzIK<@%~#n zh_8-Mj@}#{za%~P)1#M%2WQ{^;j80%OSPIL_Zg5e(FASz)Lynw9MC$C#$lOro(~!0 z7riaUYBqgjJy0vke6*#JXWp(@1ouXNmIse^cemls_s^c4;^RI)K7+@5Gm$_gZ}i`P z{@3>Z+gfd%0!L@qC|XeCy^uw4DUT!XUI)HwcYxv;0B52~i$#N?wB7lycGv6e?mhUA z#~Zj0EA+JRcKz*dzS;Zkq2G1Odri(FWKJh>?oje;aA~yLg9Iuy$z1?-NVn{7 zFwxpzk|NZRd)eQE2U5l(G?b_e0xGoa57O;zz+o{ZhSbs(al??-S8)AAUPfN8R&ZgU zHISpJ-n?GCpstgJq)i?*G zeaiy#Wee2ocXoKq*aCW6v=zCDM~$=hjhA)%&Ebnz&!4_IWUnrTP1oegp+Y6~wJ0@Q z1fP-2kFtJS9{KiK-fhks7~V=67JO7*u> z#4n$r!^+6y!2Ue>{BVuGM}Ovjo}B(?O(LZ^HaU`$+361X$I$;1G1jGO(f59R`ufa! z_5AJYr_Wa>u<-kDeD4egG4wrb6dDsVJ-nmdqnBrgzrQ;3j`rWGdTOKw>s>6QB5W&i zW2&NLVHZvqNf*$)1JLW|^(lS}pcn4|10vJF0PzXrLG&>iBc{+!0xbSRLZQ7zS0W6a zNs;1rmg&-?DBYQ)K1@h>VA|M|&;#bkA1oF-K&xP;u%Wd2zecLS@8_rkS6(1V5O#Z< zm{cMfx8bthu>81GAIpRFb7}*g92kfDM238Ok zJ1|$vVo}MlY+Rg!Hp4I;q-40;#}-JMeuNaN92wjnqPOddHXwf#TpX-9+_c3@Q2=?S6w_V_eA@v9`ZQ3PN$}QZe*N#m+sx%10Kps)SDmvtTBN`-vi z#qSm5Qo`~co;%D}q2QvcKBTzAYQX0U%g{?1c;Pl@9M#2yxLO9X?1%?;Ul z34S}uaLsmaNZU@>uIdUMQd2-JEhV&s7-XFWrI#?lt%g-(S4cn}FewUx>e!v`FA$#` zE->x0p8knVxAq=Cei0UPv=oL#x!;o}LJKFU_3@&fUwP2rXQV^Yv;WWtGcBIl$5FxD z{$kYa9xgCJA+OkkBMwKkl;jwhJ7nk0oU&mI@pnH&x{8@@Q3g4ujZQIe?l9-G0UyGl zUBK#pT%Z8C9B`0Hm{;*+7e0p%;JdL5Yr!8qetdtmYxa7AtGC2|rgf&Mos<{AXaJ}x zCw;|&6FL|u7FwgTK1Mz$7k+oITL8Z(DPv#xGLoHk6lSQmMEk60cKC7WA!_*Z&wGFV z`JX?L0Fh1T^Nn3OS5*cq9{rIAb%LRpVG-t!rwRn;3Is2M>1Zww=^Uj&?R$8AToSK9 zd;(AOzns#ZXf$mN~k!hYk+T;NS#%A3iqzbneek9*&) z;8kS^yT~R)24Q9TP5#h)#peE0Ly1;~_yMyb;7i#v`>>_y?T#T;a1a+?c&(|?V z9K$cqnjo+Tpfr#J%NKBY>TwO&01@tSGY@g8aSq_7D?FFy{@{B!y5d}%i8KCaKUf-F z>4e*cb9wII9C2Sj=T4b8L)5n?_QjRh(pc1?$TDV^Ju5lQNJ&BF3#HgG%`<`n%jVOksArVlJL0S)k+)Z08=VC0r z8kB=sH{@)&X*hhR(nx+fIexjrI4_=}TZSH)J&r=*)?tSES~9(Wm(BuOiKet|NkvST z`EX!>Jj2W_-LN0Q&~;-ox3T6>n2FAxQ;ZTqxm(%a+7qOBx2013DlX5n;Jn4NaCMsY{7yyoo;dzX*kRf53{!!tLDPk$$UxSKRD>0zvcB#1~ zHFtj??P>r>K)1h_WR@Vj7)|Y$NE86hnkQZicM7d8V}%9Dk5I3|pac~K%q*TR#-?sDYh z{dITIHL`uVs%lO1MW4fP@DK)a@^a_C(at6NEFQv;4rUYmop6j!r6{|Xd1~=pea0d8 zGPirNz$2~Lf&oi5m*)Ndvn!$wI*(XbaXpWmYvhQ7?*YdH$MY#a$jk+JhsunU9MqAK z6{Rc3!|@CSqDtSB4R*Iw!ZZv!2CdO8X4*4j9HWF&$dx6AD+~5~W7(2mteG7DbbF^3DalAAZ$Kg#TVl}bl&cj{ zU<-;XqKU5|6ITnkXy72HKAs%-DHa%U%_gZ*9bW;PeF5Byc#kZMF^DJL4Jns>j9v0# zu?m2Ldk8BpNMpoGg~`569; z2TS!ap8sVtGN1aBZZO@9sHeyjOds!Jwd2BzN7?rD)QU4S52k?X_68F1-0w^^I)}}i z6Yg7{ii!N;yD0j1tTJ&5_xj9&$q#1%hS(7ocu40W)`7=hr!T7bNiW59Fq1<2QLU2l zn!0wprX<5MIy)Wci|Jg>;wF+2wRNgS zcy%hSrL1&6c)svvxFEG*2irXa?%_VM0s=1i?VgxP%sSeKg=(NCViXPl(z3>UzfUVF zm)BZY0Ti1At12=-t$>^u(bo>1RM)P8Um`fi{p3<+2ph^D$Ou)M+ zOM~6hpp8G+1Lcl)T^JFBd$Eu7dke0DrmQMVMR%51<5p$W~Ac8hnH8 zkU&&=%o}9!+(D=4X_ZI0$xrQ@_@jzSQArvtLdCZ9Mzktxx(rC|xUnqF2%uS1B`wn_ z`;8?4(Q@Vg9{u;u>3{y*8Qudf8*Oq)G&NnM0PplOJV)-rC;TJDCZXviBN0Mw3U29T zwcGs)b)0RIJ*-x{1HBBAf!ZctdRMv6tJ4mr?LPm=L-p&E{Ba&#=wG^Qrha4}<*#w1 ze$3R%@jO$%KAg*6k*XFg)Q?pC$kmTh{+Oy)(^9oG%dh0Gd8mKrBK6_>nfmhm#aRCO zpz444pntqqztmtpseWXtPL`@I%&ye@^6)S9D^ktps`XqAI9HVlwLnFrf2c}@YO_#d zDb*sB3MejB<;zlaauuqkKBiD#iD^l#^XmdpM<4&-i61c3seTr!i3`=wQV%cIEupBy zI#y&_%pu+$2fYnFs1?(Dcdojcsvc$vj^?of0zDix|4*eJ1?l!ztDB~kIh6oVfUke4 z7Glu8^Ua=m0L{#S2zw=z8}!YSh4C&7LB3#Ph@Ujcf(!&kkY{_MN&@H520)#2ua zI=E^{Ci>i}m55ZGsam9|Iw>=C24YnwQ6>4M`k@Z3KHAr@10g^Xa&YO!6+Mp(5WsAL zKuv24W~e^lH`T?EYw;x5;~$TM2N)Yrt;c5o5z#8uh&bh!*{;Da=T_WYWh!tZ%yg9 zru4gA3kvlr6DLM5qKB~Bn^r^}Tz$Rd?(vE{om4GVs+MZC3RPKHg%jr^d;TfUKULt8 z8gNMsxTG3fR3~;DA-55#HbT=zXxa#CAm>hctR|g*xbc*vl?mYJdFa%quB(o3Mw_tgWo{ZKtLv^@#ks{n`<)?axRCQbe3gFn$1^BjNGw;lJG_W^%3Y%!h*T|ooC zTcHXB3JUlX$PIs>TdD51+HkHe_x3^a&Q8_EJyqa5S9tV8c;0l$q|GZcjThDR@Ou2! z9{;&d>k7+l=DLMY!9O0VAK&qY#5{7U5vm&e{AU<}CNBCl2wMeS;2wP$`l zFh3ufpO1Ej&1bjI!{brSqZ={BUZu<$k)fgFjkm?fSoeXQawl=_Og(Q#y>z~tVdg_V zzYC_Re58nn#3FIk4jaF`q4gzGR(|Zd#|}PJAG=gn+aGlVs`5i_Hj8LPby0r?+i$WtZz$ zMy6QIauWbs2=sq?>r;gg{wH^|cl(a!^Y})lx_O)TEUKWs(7D@WBAeuqBW4dI60O5V zUZbZJeYt_E{AaYJzS8THC_Y`>P38fZtMN7A9mVlGGgW##*}5uUuRUP(x8I($MIohx zErrIVG4Ll80T0w0Y*fBTlgO0gddTwP%Bqi(l;zXt%9ImW$QKtV9#r<8=EUC&7_rh{ClOgPkqbF9wT?*KT=l@|B&V4IM^MG9~Tv4 z%ds8*ZKCqtEsZxB*gUM*>sE4%e-dtJ4Em?s+_t7p3Y6tBKD2Nv|l$4N8}>>D8sqpV^dm`QU>Gay}PE}x{kdIOV9gO!+;3{CtZhBY!koHDM!Zr z4(m2EMuk3$5>%6;6A*meLN|QnAJ$g+UDPrZ2%AfPAu3gtKPn(7Nm4 z(#PxqJUeOax&ZJ@l@X&F^Awu3{5@~58fAaaIi?Z0B!AD!FfRE-S_<&G>*vfTE#c4Q zXm&b8%R~M~j0HC--j;s*`LoNNTEhbi&Z=qiXu=WvWpn^#HQ zNve2V1PhAg!+=)S0PRZb2jysf3WGrV*-%{Ze4-D7(3sQmi|$?VRX934 z<)&~oHAawzvMO%p)xx{Nb>P+32D?`c2D?s~*k^;?LvbSZ_~E`dtnTe0?(IW-O+W@W zHF^_-@|@XR&V6gk~HKf2y!(p^h@S_CTmbAM3^lUQp*kjdk6Eii!Qj9g3bYadxbW@N3UX<5))iimFHDB;|JTr(FEd~KwRuDD60Q4!ax}=mr?q85QvjFhbj8XD-tmlzCooWkXwX8F*IooAnx zMdE_E2@wF%-nYLX!*cEgbFzgy2qv$>4DOEt6I3PobxN->oXLUt+8UMnW@z;t=6O6z zeDCvGRI8z#nC-LmL&XCAHNaRmQrmQet}(xbUM7;EjCGV?Qa6~>S0P1BQ|r109<7*dXzY7Sb)1`}=(UfIdwbekssm)q(OAuKxfiS5SSJ&~$*Q!4IrOl)c! zUR!Oyv)VS~qTBi(AzTmKJGLKo?~7QqAIlfq1N@*qpo-PU&rTm?zeaST+siMZm+Nt0 zKY90o2vt9!ex-WCa@Bcm zjooyQiLr11P}Lg1@3jGlQW2_h2xA<=qBaEB#03sPAd(p4AQs(+qEv$@ok`il5IGM7 zs#^m=KgjApgtS*2tD#JADC62tV8_Qi6oJv|CODXJ_gk@0gIQE2=nhAeJRtbQ&T`f` zARx0oGwCgdw8SAzYD2<8H6)nEYPG~cO}dZ7SPg1in{0JhXcLM9gU_siCF3SrcR3t% z5|z%p+MpE;>G2?UyCNBdr=08C@(YdWcykb5z=wFY`B+<>W@F2IOt9CVNCPw(ZF2q_ zdP&_$&O~_UENa@|Gf`BY@ra1XageBZMHH-SeBP^g8L{I7R&0Guo)BNRFxE3=1fygs zm|STI6<kUiunEk5{TGpMOl#5BX}

A{3_zFRUWmd{ZJc?9ho{8X1&rKgxVv{X^J8w?Tjj~tVK9eE{$58z~O^Og@z;+w#3Uld>1>IsU zt;raGSgn$w)gLY^yC}Oo5tmD8MrvKn>RrwLL015vQC7HJ!BM)P>&@xM6g8|3Ks9AJ zX~5Pe&aV36H6H(=cT(LxUnn2wP6zAA2cR@nRhfg+`oby(EVbdPK<`IcX|=LjM)yzC zdZpRQ1X;LN-ID9-W?b7_!ROG(9WKYN_ba(ZMFS-=8J!Mv6cCO+0wW1N;|+s>CxGzm zM?3fjqm)iC^_T zyqya9Szw|oq7*sQs1wp26O>~lP0B0LNofKVL;z9m6q%b@9-6%gL-5o5nNS95RE>vCREihv{&Yv%TJM)aFcbE=g zIGMq5eJeQ6q4l-u46CzWWIubd-5a7Ce!uauydS6-3#-)w{d>qst*C)rQwlfhWGvJR znglgw26JM8IfKbQxy%oY7~C8w^pC`LaalE!L}wE%j3?t^9Kh0~Jh>f`Irdd#s8TI) z>NBr?$d6nPr4>rn757)$VP z4kOZv!n=;grYkPOWfRfltT!g3h${5RG+q>yq&ZEWaz}z}$iW5`)vPcOTG|>L;w{-RIx*v~HIF6^ce9D!) zTDR;gdRxE7r?k4(n3`$RI&BEdPB9-*GOFOxTrDUTt$E@rzt<7YaieMM6mTtH2$ta9~>rmioXh}~|;}U1}+^HmK5l^p=lYNQ9s#;Bn+ent=HIUy5 z?bp?z5=FYzHz`k5H%7eSpw^u-(M-KpBj2A^$qC2-xNAED5^y{}LZ!k9Z>!&Xd&d%CqgwBlg$WT z*do*C*hc$D%I{^WysuX|!7O=poo5Yo02G#mUFl`L(%a1G>eqS=v;@E;A(fiX9lC{5 zqN`*?CN37v7A3M+>HBdL{=+NiSR+a|#atf4SiG;mPsa*ZYTO_y&Un*aa$9fOtD@z;;#%C4m2N99R(v z+yCv2w#Ck$?XUmW+17ux!tGB_x8Ln&`+@FBWd z!IhpbBZ|G?!xz7={#f0g_(NC!>TZ)R~f)X1T zdyzZ#M2E`lN+KDzF93&X7eCyw3pi?S2ZU1G<^fWw&Hqtto;0ai5n%UVpK93^)_z?_ zWWJ__P3MD}epT)}?|7L<6AZH)wldigC3d5@>>uwChQ7@=$}i*KbNkP7ckkP8n5h3A z4fOjn7@=LN&A!_GN#zv~6O1j|ea=M$Wk+PuMP&N1Qv_V%f&2N(*$Xl;YWL@rhEbi| z?q8cy)e$$kR_|ZV^nLye@L`$3*Y9)n_7z*eW#(O0s&{f|2RK_w*P-jY z(ceq!XlrC|WAzSmAGP}*^hh;#44b426J<^M5mxLxuGNKU0RYX(CcWLC)*F)*4zaJf zevPS}e!&d2&tr_P@T2Jug>;x)iSEk&aa??esqw|bcK`Rr7vHw~(YWcwBREx!FMfsdq+h^s z+b=Uz2%vPo-5={s0SJO)6LIlU7sr?qZ<#Jaxg>AG#y7Agubbb%qP%E+1FQ1B`3)?~ zv*tIjE-#zkz{336{03I$dGi}snxn7^GnncP?_LL6|YX8Cpplw<%dKC8hzY%9QI8O1S9OV)VaRYdzuD`9YAbfD3d7wsSgDNX01CbRnyAHP#{n)NF=+Rr}4OY{rKpC*&1NrDmt z7+YSEXOlo?kOcZ1M`TICGE-%7>i12VVy&xLJ)Go*q~Eog9G&(fDB6;FkB1|CIzCGSnUkneo*HN)8*XAPP_t90)!IoPa@^^{CnfsvuS?^d+kT`sPDSFdCZI2m;n4 z!I<@Ij)qk@*mzlB2nx4#7`Id63(FABKokzcJkcmDAEPSx^=r^{MP`w_zn07hOc0^X`hzXd%`BxGvgDhz-*OW zddpt9J+s_TOGe1+|oS2Pg_I5MAX*l(#Ab48j-u|^Pa)*3p09#5n3 z^>`7XPe-#>+|gpa8^ZvRn6=t*8=aM5Hpv?(sm~Qs1}=mR766FW74_@2)3#{K7wHa( z+y}MP(O=NiWv#hZ(7LQOiFrxWMjL~AlR)ah?bVK_EpJP<>9=Y*4gPG?n?Ku}hLy#w zldt{3pGiyp&mEWC*;KT!1HU%J_+pu6#oH`y7-h|WfG7yK8>3etT7BrB{r1kib~mrv z9AuimYHa_8uNIfl(F7>pcp5vKQZZu78oxYD%8LzfI4Vx7Ds3|G&=rPJjWALgsmcYj zzd#F0D1n6?@}K_5A=3++Om93~noLiSOvf9<@)Voco$ESE}rIYFqNK0i3?G zhGa&nm?bs}U#++mLP`Ll^nvaJw_49v0OG3jl=+r z1UYACJIPF4NNBL@Cp&6=F%5u9^58W03Y$BT>v(H(YQZ-)cRa2rzPM zGYCi(=D(upKu#wfk?o6+^XKHNRXM>dC`&x0bX~Dl?X4|vnoN{wwpMCG6HRWId=pHw^ujCTplGwqhq=G${yRsa zXtg>c+Q?T1to4dpThW?{CvvR*vT@)yn}=}4eOspBbgYSmy2M{Kyrx#SHA$nKe8>3? zgJWR;Tm}m(FiuTm=i@2ZB{-(cF}#IzsB-%vsN^?tVI*8gl4nFKs1Q6Xr)>S-;H z1JDb%*VX*1i#rruT9?|D$aMbP= zYFDo2@pyihy&(jS_r#7`B72lK#M`-jW>%BDCUuK0n30-eCj;-JY+;E;Sn1ea>Q;T*t+)dOtld9Lr@OJ3} zHSgoSui`7g$V~5Zo6Tqd5>4qwI|`85CQm>1t^BW-6B~6B2D1GB972JvyDhuNcO+Q( zMQs7nE1Ryv>qaLEzMlr>X5_4P}ZKcppvha3e)`a%2qS*_`p{d%5Q>r+f3B|kcVjk!+C zR#pPDm`qw%VO&s##joWo^h}i!HuwCmhZyBkBeGbA{`@m(`%I>WL35a=GfAg@R#WVo z*;0hSCE9gom(g$YxL}JVrZZ}#s}*vFI3cXSKUS+nB*G-Vkkl5+%+-UqjH4?wbco@D zE5!&qvOQlMBE9C`GB3iVb<5xr(C^_gFXase_|1M^t$x}$yugQOLS4SH$R+2Q^F?z0 z;3P;DJ*1c0CWs_}-BU}oGe=7ROsD7^EQiWgQJjz*sJ$D&;YcXWn^DW%KuulL&)lXn zb#?=Zsr@e{7z`4J6x4Q(_S8KRW>H)mA_xyGa*im%%)i?lu5A=`yKF`)c`VtdZtKih zk0wx3j(iQYH2!%i1qSFqtp5VPfS~mhhxo$Q}xA$x_ARP?N zk?9ZODtbEcSF0u!hV>Cee@JHNH2|wh$&2+<@L8gMAgvU_|GbtWr)YAdUakiS^cP+x zZwO#m_=hjBP=1P$-S`(5yUkFFY`ef`;yMEIPY=jPYp86rd%9kWr<33%@VHpFX*)lk zv(@G+8^uOzy^F6V%_vjdaWE@5MIWe>V;c6q*^9n3xtk;E21V7%*0iZFyq~Kb`QnZK z_PH`cZiLOx(IvnRe`VY!r;cmgYJ}~n4x3!pnpmWpF7wt;PyTYMI<+x+YR}fz9Iga1dECIZBkKD^I<`YI3wo9dxtl3y;>oT?V3N( z$+g&_cbnUhN5%>^yt%GAplsSq`)SXHK$gI5_rf0I|Ok&KXBI#gLrK0LFR{otHD^Oehj6JI>-+oP-Nnu(rskkRG0= zvl&nm=0K-Q$JM@AT4pM-`!2EHQOuUA$$RexllSdj#ppfan4dRc{6fkG^QEo*vh4qr z`M>nf4&>h^!+&5nCX0v`A*j>O+zf_q(w6hT z{rc2s)0;vm)>mgkh!$!AFE{v6_!wr7e<)2`)k>>$z)Zz!=?&X0uib6#q8GFCR{Kvgaav|HOxT5Z4E z_S^k-+X{QUtj2g76{i?r#Y@p-KN~jPIdQk$8i(W`bbgKEdC!TsN_#LYb}phk4`)#y z%`5^2+r$Kq!($7?V}??m%DlB(v`-d;N_W!=7mJo5 zby*`~G(7;ziEK_VgzU6lgdgAvE3>Fo%)^2jDCUvf2=LA=X)g~@Kylpp&S*jFr0Bg2 z7jVts32j+6>!g^WMk~su#>Vgh+L6HrmYZ;`4pEQG&qho#U}}s>wze9~p~#A^Y6Z2` zMvpj(ZImw;A+fzd9$D@B27k|@MkF>}QeK)_M%IWMwRP>Jyf}}t<0$}mzA^Y4G-lVk zLx3|3@-kf_i{ssVFTsvtlYvwOHQh_q8KRZGeae?h?O`-ftFPKc*^n`LZ@KSqfg)v- zfdg3L8CklMt+@ZFZz)g`UO>gh#kIrB-D#OCJ;a})yREb@<~J?1askY=Ti<@T4A0|5 zT*ML3dQEH2NvWKAj*$Px_U`H#cta~X-9gnpdV>$r9a?mG|2sL(+@V$53#K;KO|BSs z8Lg}O`a6CHH#J{vp&?A)X7_@d8s@KRBi`&_a8qM>b7Pxb3vOzRzp6EMlM}#=?dcD{ z(DMJrMy*f(iEF@ZT{z9?ufNcr;0~SO#|pF%QF&4pDlTuhLv^HipkUMms*SN_ocYT* zkEye3JK8)N`XQxe8{Jw?CzxMzt0z=sc)X)#l-~8i8BK#7e$$YYK?*bFi23B$F3Lp_ zE0YAE{u*ju2hB~8kRMZ{-ZmgP9EDtUTy|*-O`};mJjB^j^Kv3#|6NyrngvKKn8HC3 z%$FJuW4y;;e~Ed&NLb(qmxf+5BejNaMwd&qFW!=g66agrKSd`;Bi+Ep>}S!K1V~8? zH*g;0b!IFVok|8M4kgclnq676PmxwVX8@5D^7QR#TKt%nq+=+46M!EDbDc4h<57~dM02(yBw>HE3=iArEyauMGdKukeeftAA8IYo`E>^Wq@h) zzIMSEBXYYXl7@8&{EPTwi)yvB0F~(LESi-IB$>5XwKYo%WYkjN+}hoYdam@TW0%J; zi}-O?KPGBkG0ZD%c+C+?8;)0e>a&oI;z;ZH3klV%vKV0CYiC45xlvSKG!00y#G*Qt zekLkig~mPzm}v|15t7jm+vGohfbaSe`jR`-qUl0t>2|U9wLq~kAx@M0O*L5fM#$)P zO7@Mu3k63B^H^$|TidNPSzPPS@)o+wsFw&BZ-^Vqh$T#~qKSqJ?3j-XxmyBQqhm3i z-}5D##{rk1kCSXz`+ve-_i+vgaC3;j&j)jc#lAVuj) z`;$t_BrSVtIAPuH6AgYZ!jCVdIEb+l-dQ~G#gb!6MMP-Sr=jRAYb{&I!^h*6rv0zC z+Feo@R3q2iWdoYWw<&%-o=uYs!fvLaui8#lNF_V{kQJ6@6Y=M3{l-S}5H%hYN~$)0 zKot$&p`yd+U^cDYhHqcX$Jy%~6A+&EY|OsT{Y zY#s4KDK)z7KA+Ooq(u7)3&=?gJ4NcS+g8xsZSS<#A`VL1d9e!0%`3ARN9oIf=MY(P z26#|H2u>k$Ru!1&uN_*zmda3~pre;R9qzw5etq`y;U5%9r=Peq)X*IZx`bmMQKgDh z<!?tKl=NO4MJRvKg# zLfoR~sIx(8S5OJ4VpMKo+yHmXg_074G+wpz;UI;&+^9D9P>H-!qOT;6LaE+sQzR<= zF8UKo6Shfx(l$q3`#&4&uGYxbl)JJL`?{%<6gqf*?G;=w83*bJivhtO?#W~|;3pll2jNHTao^D9ONuPjN`)>hQ%G)2tZ zDdv&o_we*i-{=%8#Grj(2JM5_#_+A^34$#hVLZ=pK`~Z+akP=IvCUJMAAy?-Kh`Wv ztXrC3T610yOay8_z_wk)dBo{l__yu6g5qDz7DBu58zC%6)_xOLl9h=yeusQA8KqeM zP#K}|Hnqi``U4{!|I54)b~7+RRTU9QFsWw`Ze zzimBZf}S=zObOTwOC*>C>(jwWpjCSNbjac_6u!;|@k zfa%3D(6X>MOJRh#{ntx&EE%0zo=@*hdouM3@!$LNFxyWjk@wxVU5xv_GhL*xuzTP9 zhn})9nWU7sgZg}?$NOp#7MRz&0=+LADjY!hueu!e;CmI}LL0RE;(6oIcomL60KJsA zUc)DtJ^^Zee;2ui0nkM{bBF?!y#vZ?ECFWpXsk@BJ|ZQ0czZ{ch4M{)=Bh5n%4fz> zr??7?AD5n@G%W*)*T7!I7r+Ivp<<@og)tI&G?5k?pO)gQrTFX1)=0L#s0qWo`mUTNhE2D69&{=@OyNtV2+&a;Y{TaBaV;Z(>_ z2{pfI2v-}(@tJaf=^t){D9$8g*fdAa1qRsL{nE>hz5&vy-b7Om&0F{&9Td)=~^UIX(_5}}iZRFeG@hr)?4$tH_XhV6h%&9b!04X(CY*=)tBAab zUc_Te5S4$(^-XWR3~Mjr{DjQBbh^znd5iQh7IDT+Z>y)cmqfRIc(Ft!bgjb4rZ3qr z)GBZ5ScZm3dIx8=A+`zAb1h8`GSQW=k}Zq=Dq|oH=wr0O_6PJU%rV0^{(ObkbTm=d zFR*BA46ek#X^FyMCGo&S=hVQMvttN)fRlxPPnOYG@qMzc^&8b!AG~UPOm>GwZ(!MQ z7e7GXcWnz-VdKXbt*O(Y*9!+szG$S)pF-Onlb62!-1%0z&xE`SZ6V#8(IfnGoXgF@ z*2twY1!-H%6;?dH&CI@Fz2dFk-pvPt!+*q z&W{pnU700Z$`TQ|27i&k;5ntfee2h})nL z^637C6w4t}2L#^jmxOAl0F~64h(tLRIsV@tSm!ELopE|jbDRK*QP8sBch#f>@X-$# z^*5T_ah|gFrs=vcyjk2y_@39Tmh3d2B8f%e5vNYH2sosXitHKbI|Ne&G#+qzq3%{6 z*UEg`Q18XZ1+?b|cnS-iJ zPD|#)9!*bC5mraGU4ErKm>sP!o0@MTkR&tpKS}M}Na-|EIZYJK2JuLvxmYdzanrH5 zvHI2%ot!)2DooW&GqevtQEy`t1zaxkIn6whC;2td_<$!Em^Mgz9f<1&y()0+HUMTdd-k0=)e3LB zrET4zUHW*pP87)Ztq=th#JxZ#InV|RsP`$#(so6G-MDJEPDW$8P0MBPPp3n?eyvHk z#T-~_!mSluO~Yt63xXY-3>1_LL@3oAuuHc=32t`x!hN?)Q4&Bx8k7^jMURRY{&h4# zQWxdP`{$lHMgH18Q9WrrXnTL6dV?p82q5>Qmy(60D$h3rZ`Cd)=c|?V;9<@Y&lz`Q zj~ne^{Te{m6C>E;+_dpkG&pQ5HO$2(E&OLT+3y3!pdW%{Lr~>;$`aeYwDGZu1VtHx zlLmj*9Q)q&NSRC&@YF~`=`4>5$u!vRQILcuyFhxRK^_%q+3ZQ%Ta?{te_Gb6qcRT_ zPN@HvYc8@nFrdG+((c-jNcO1=Z5XIcwc1aG+H{Vw;K-ckQBpm%a`tF7s7_;buWC5v zYaCmvkX2frpboM)Qc^N$VLz=U20lVOgpRfoGO3ZHM|Q;w#q)PsM|rFLiN!1TCUIWe z!y#;|4p8VKCC|gJ<>|0?QcgkKfXy}m@)zU%iW63xY%nG?JjO^ShY<5yh|aUnC?mAv zp17FeRNth(L02hj{+o4UGEJtX(WnLnsCA;f?c7?w74JXQX_{QPVw4d>OlMAi2Vfw_?-^u=syxftku(16Ur5COtuNO7(9 zB?kw%w0R@4dJwR}YK4!3Y9$UnPC0<`R=irpjmwBq5+62RCyCS<*|bhPHBpNw%YmWs z!r%+O8^A8_XHp5KYh`&q~5+9tjf~VR?!`Za26?Mlqh#izfkQYKr8!kxMYUBlHvSnpeP=7;aF-@3E z=iG1=_D!a&njCE>X}ZKPqZrF|h*1?u^C8nok{{J_+V>OjMa+@mbB|{cz?rXZ>1e#cM9zi zsa#*i7^2J?Y$GM34mKMYn=h?+w0`&N))n4Cs-Y#iL`sdAPFo^F#kSi2TZLpa18ldn z1r=5XuxhoPp|x8a0KvN2P~uBe6MBQrBRF%wv~HRjs)L;?MklRsHc%s`20pBM6`2<9 zU;(VQ{Fdk`s@j(s&`zpjwuGDdnrz-&jlPkF2p8xbam}=Z{!qvB(MzWyXx&6E(=oKR9pZV zQW<;1&%6Ufc zbJgJz)8sp$?~Mg#m1;t-3(xm}+PbXyxg~=nXz+RfW~d2^t|hG|ak6ABA~7}L38hv6 z5EaqoSWmHHfZEnRhBsrG##)McbjWQWm6~bF8<;rbmSEv6BFyXepY%r6&9>kQEJ$>N zWJ+Gdiv?@<;KKw(G_ghSwqE}y1;NnDWHZY|x-#&jX z5D5bVY!aZP7_+yT(c3vI6Vx-9#740?l<2(WbT^&4BCZgVTRAo6Q@=?p@5MU{sjdR{ z7yYWFj2Lqy@w}>I5O`U1I?jzsP6cgc>lN#LS35k3E~7=d#D;Mzqn#G2MOrKY0Pd{hoa7}{oBW;ra% z;<~NSVXPS|&q%`3Z()kj+;4Rp$iMc^)$pAh0o&1^$$~$TUy@b3ly0l^AnFz`B^@*Cj>6 zQDWK+lw<>2VcG7pKdU>53Noor!>pV$4Ygus^feb*%x+cV2o;#|7Jex+bSDl5n{7E7DLXzsxDg zYUPDLfL^u6RuAm8CHHrRwL$nV2gE^m59COcTbB{Slh@xZ8tX|6@L>=y-1+6gVtdAt z)3L1>86tw+Cc*ecMJnYQDRJXuD^fiSY;JM;x6&-5{&{jkd=>L?Qjc=U-1H4`9QEgt z@2+dx*${40j>rAOfNPEp3z@Z=&kCfMM@%pjV2HJW5yxQ$D;;K6mUzd^&KLi zzvlq9I}0w96~er5UyrO0w|nx?kUFeVZ?|H_1k6D^z1HasYZrh#cx)KmaACs|9?;;c zAF2agz2BSf8P$zp-koz_VF}p?=KWpp@3U#3a?895i}|YzE~JnBc3W75C*_n1;U<)& z?X`G$gTTtf>0&v&Eun(z2xDIW3hBu%G;~;C8l)sj2^M+p<#;32#F!&XJRy&yP z>jrvCDg-Ub9S4qyR1U}gf@^XQIiVEbMuhOEr}cMQrvc207Y6MK$GgA;xn6smC2#`( zx3N*>5RJmq_2$>V;uT3gRGaG*X2qIxAax?jTEnI&VYe+q8Wgw;7<9jftI>WrldZLD zixOiR8nY-^+gTYKTy|>k*-g8fDln|xw61aY_LW6p>$>Jo^6S*H;A;wnFNFzsePKxc zgu?MB__KhY=E`T|oadXbd~-I=&R+g-cKH18#o^00XGaHTXANiiEskqhs&oH+HI7T8 z@(eYcq}?2(C@V|du;F?%Zd?{r9a9tqM0BeaaiUuDdbYsyB4JGag#wv2!xKdpAYC|GjhSTYEwtMK@EFZPR zhQi9&Su~q#pp}t)G2n%^}@q~Gc^8f2#6>rv%Ru-W;cgk)2Xi9 zEn|6>j#MjmPywyGShXHyo3|qct9Q2r#xxspQrx? z{j2FU4MS{gRRM(Ck0v*b2&i3!G3}w*o!`k`e3#?*27!v3*oZf~MIU!@t(9fSZzQ}y z6#Dxa9AF=qiXikySH&s%)o9b$9P2_;8rdMJoH&NIH zB`aKeKTdt|+yBuX|AHQW_#0;X%Dagz_r)JK8qetOQU6Emh{BQ+E3Kw7l3CQOS!94} z_EPS2oCx;6OwrmN9i%Y!wd*qU?^%S|GuPymEA zk;hqlUKZ+kjOjeoLtb1j^b0&TcqUm6;40}+if}s?skofhV%$e6a+2vwD<~s7`aF7n z)+n4!G4rb}T2vY_y#>Y5a8O6(3yYAb^vtvz^$edsofefmSvvYQODN-82ZP*!msG3y zatIQMCynXY<8Dvvp0ZnPqk1#aJh}R1ubi{U>AHEQ-$&5!4HWREnUUuO>!>vX#tcV# zL`BnxNGWb79oVoj3DD|Ab-;g>(G7_J>FraDdu-E&weO!g0ijL2)T;3pXVk%SSlHuh zQjOOxB@c@`olIL7sJ5(7&@%U9)A;yEe&HbN7vn9Xu8y(Rf@-@q=4M=4IQNM>KR07h zdxV=k$?b6!>pO_%>@@{ci21lFc!)B*ZJ=)!n@ysDgh`nGL8>d!vyX4v(%egC}~6AWl9+lh^3Hi}_US^s=Qi1ru>V= zwbYH)2JgPEeoYYvzQ2B!1QC)GO&}l-!ch@j)Nv8Th*$hRFP#(<2gRU3LpJ0-{iv3# zMz(qkIHT@vZ*mLR4eR{y_7cg|)09;R%^r35`7IRG5&GkZLnH}!9L_zK<_(K}BEkTk zV|o^O5Ia?oCy()R^Rw-3=sMx4yrxTRVltwsIZEk4yrV&jq+40H%L0HD^*h?Dstm&I z3>f@;JHw93tzcoMJqGr4{J0#9RfO$HFn*k>l-cQMeA>rjxeW!Jd{`nzVrEt>6xZuk@w-fwT zVmXlsD$2d^sb3Fy(cnf_i$IM{Y+x=1+AamIQz;W?Hy{@?g)-@$Yg+@$;9OWb-Bf7xXEt?uBL|>1eszkM%KCscP^d&M(NgSG9wa-bK5Mn4yP-iV0w)ns%bLEH~sA z1?ZvtNz|IrPDaYU3XnZZZUV#uR@Hh*Nuhn0)ofl$ zv`$Ezr9@h+XkN!iuA{Sv+(LB`1uTKG&X!P1 zn>!@e-K-{;SfY-9ne^1}G}5e;+jy?>ssSr~nY-m##X8P-TgquE-MUn`6$*3^uA;{K ztC5t61`&rSMN-DS)Kt0CWaB+$H6rgR_j(Q@m;NC9-9T<`q%@;V*BAC&+|r#W)Zplb z8&sOIo4%1^{c>XUW;(S(p6C;_DGKkvf?G^BHPmr=iHh%gC`qF|w?~h6kVXd{2gB6y z`y3|1_Qr8u5JN`1J)jQq&ql0J+<;&$RT~b0L`-D%gm`zuSSl=yJ(|iZIUZI*|BWGK z65qMQvLKva;0>S6$-b1Th^Vq*HSD=De)7LC(SeJ#(qR-d%_bEJ1~SYUZl8lK3O(+Y zX%AhB$%N-4r=SD%$tvVr<7UiJw8AVB-mqGJEl-VS&yye%rm=QVXJrkP(@u41WK=QH zjK%Rl=!o`CsfDIws){d5ghjqMSdau80 zB7_5}P^{cM7C_akVgAluX+$(oNq-4M<=n`M#^FF+M3)U4ka612+yzP{mkKAN0a0iD z)ag^hy^9H~*n`f2Nb2W7r8kaYXp<#<$**bi8+m{-h1LQkjnH5rWmpjc1l5Q{W79Yb*_x?QzwGo8stDN7 znrQAf$>nyIWx;v~2eT%%HEFPEabq3ch$-t1Y4E~n%sHBk2lJ+5S!n7Z(HPu4h?VtB z^m-<0Jrj3NihiPZtpT1Tyf;frt27;UAN8v^*@a|XJgm}q3W6Jvc~s9@>1;)#(D#NL zU4u|fO6veo6-#aaBcgxnmw^kyHnJNwTqX@13pu_!IFT-czE>%&H`XM!z3u*r8Zp{N zNsj{vNZXm9BO9pc;D&2)*!ac)jJsZ#jOkF!pEidIoS*=njsse*mb3?JAqpZRgO*I<`53;REH*0P9<9S8wUugcRL81>Z zRYQpyGO#6eIOc{wqXr{&#`Kaz?yC6;_Y@j5@Kt2jGZkvB*SWxAY1Sqj2Kya5RBxWP{s&n23`%5!jb5Fp-hO1)kTokk# z)w`l_ZVFmPQQJ0o=Hgp`1>H`ida(&Q0K+!U$gGWAZ)k@z^ZJ8iwemRsZ7RM0@FfaO z3lfth2y-=U;f6hRTQ?TB$uN;|It#x+)O*8b=%G8JG&6p4$x9jlU&#Q^1>xj7Nzy2c z(MCy{P6$9t6Mu@nOx9KNM$m1U(9w>gR5*7@$qKD7(6akLXTZ*61d?67h`+=H^52pITa&**4*X@1e|H76+`lirO* z=ZlTq+^*{6oBb{d!tsr|I@!+ub)D+}0flFi){+0+@;2a%zpsA;5Mu3PN~flxdt@C~ zq^)!QFRLOeV6VdwZ9rN&u7a(h%Ty|i1S9a%ZGeiZ@cKM@iu|35?vt>cr`xu%i!fde zq-X;)a-8iGu4c~dS(^PEU3(beb&zo8OJj9-jNzi7RdRN~d`o0&MduBT==hf-C2T^4 z1EVcW6o6%eEO2FDer7mfUN}TaR0gVzI=pYg(4`DG?YsslOBcp z$UBqSY)NL#aqUPw#tq`jag_^`IKdhJ-xBsROQy7l4I(Rd+Zx=_OpF?uo(V3YWJ`sb zw=J{c&88YicHO#BT3KNOB{H9`#K^oH)(?p4Pmicp!|zvmZRnJ#@yc3lI0W_OazSk# z=43ixAMwo6bwoM}Y{MZfl=xVl8uH(DU%4<_?PN<8?I-o z34J|RFhb-k%B@P{8+68v?bRvJFCad@l0rU_JiQNHXlCGPlRQbRKBL((# z!LJKto24Dj3N(uKn^r}OSZ|Q^H-6VR%=&6o25If*@Gd*7hqv*Dh#HuZ+TiMens67Z z6xUFbf@t?Ic@4_t6E%clvs5u;=R;`)B-6IISym`nHzZObR{&^Tr?$MXTD(y%*dzzM zlMHWzywAReNqjfH&7zrOr=aIfWVq%ktE(eB5Na?gBJ;HhUqw{43FBmO$cnmV_Z_Qk zorF&MF!du$h#^DA^zHpay1O9)oOCkhhFeF{cJF`^rQ{TSEiKXcoSi;e+Ud?Xk?VvQ zl!|x~E%W|p6bbC(75_PoPEV`$s?}I#L@_H7m01~zW>%jrP$WtuL9uuS*7|Ds-;E(= zR5F;BYzNs3<{gl`h%ovL`YXU#@flaXjWc{ zqom))Fts`;)P|TQkvF10^HZXv>10j*UHJR|HRJ(-MF;=?66E~@xGNOI75^0C{%v5& zZD3l?163%da}IVmH$W%mTsE0|%egNu=fOT7DReH)qP8$ecU~?{(w%mhd`Qx(q`emU z{qa=p#eQ~b70*?%UHJV{7s423bCskF6J;)lY!0 z3Ok!ON-Iav4kxJIJq=j8&=y$uTbN;7+Mox;@;ARYnkDFAw+H3?vyBV-d2PvT&*#?7 zH#crQS62DlD&L>mBU-K6QL_E^q)n9i;oQn^^osHu?V|@M{^q3$rvjF3KNI;^I0atI_8M!g<=fP*-2=|$)LuWRb2aFTsMwoRH z1HibYcB~=yjgInDf2H!_ypE>o1rT^y2B7y!`gT{#n_EMb%(1MI>rxc&JxwNWDLbrF z--)Dczmc(e>>?Rz{vcYqgFmob(bXFnLmRywRT1Z=1x^}`#xKq2xcoKTp;2b0Nf9z% z(arfw8R3;C->l6cc{Z<_a<&gY0ui0(@KzGTBqlj3ehl;PqX-INzR`rRX1`@BQ}P>T zO5mQuPcU)O6&2DKJ1s@Px5&)Duj2acv?P33BrXp*CM;iWuj(WqFSqAk%V!@n3dpOdkjBPn7>QvTJxJuG4a zf$c!Wh?0Bsv?!vBWr31&K)_BADO^3wNGUx`pU+(Z_xJO~>&AYxzz@i%i()6vf8*R&K!d^rg9}XGafQjJGL>Wjg9}YH zGNQGKkzfLZ+D$}keG=`YiwO}a`6xxl6z7@dc0qX)6r9m2e3}RCuf8f1*1ApF;wvhM zNJVTG;xB6pKF5>(r@7$B444I+euxN&>1AFnR0?qC+0Flr9sf2Dc1`;~SZl+*YVs~k8yX8T_on)#hBThp<2j;6RR(H;%P!hOfPBYO4CV%+~3CT3qtV=fF0? zB=&ZD_aA(_`|w-L=8LQ0e;#AbyIx+!{d7a^H|RcR29aF4 zG}91xx;|WUeQP%}YmQr6CjQ6PmUn;e+lP-j)#>u^O#`XjfTvqnt?u@DY_D;PTwj+o25>t*~kN?mWj_y5fu$) z7N2Qb`>~)D+^`b#_vh%k|8`Et)7tU!vSOMpf%laY?KK-@JU{NRu)V+))Y zmks0!O7$AD+B~1HeP0E}4k7{HHc~K?OFPc!eHoJwwWpb!v2_|f!cmN>F~&YG3Nk?y z3>R8na&x=F!sj~dzU;+xzO*{0Xy*Fb$%AB&KMpeTN|uoc?JFWb9rSvgQr&iQY^cPv zz0{1zyFtmJT_}Nyb*83Hm!`uI?zs?fScb=U;D!&3P^e#4BpXFXJ_;%658odBx#C z?sJlPeL4%Zl@G9GNlZN>D!}VKtQ2)RG~Cdv47E_JQokY{O2TTu?^j#wJ^c3DZ}+Hc zIZq7-^=2J9Xy+`l1OPce%kH3jto`guSZz3U`KUB&J?NPQ*eW#kK{~S2p;MCB9d>)p zQ(*&MZSyWGo2P;TtMfgO1V^F?jBtnT3pid@hC6l+_r?cBQiM+2F06o&JgqACp^6=H ztJ=hFKUOiHm~)t22KWBE?~VSuf7*r1Xs7Fcbj6r;Vmwet8O|bx00V)Z3Q#8IcjhtOp>1607L-W4?_P2{kN$Bx_;==aFSxz${x7G!_nVo@ov zg}uNk0QD)BPOl^xre73dP) znrgcW@g6KfWOq~T&WTxQ4FITJ4 zsiqvyiL_^)tdy6GFRtLSxO%Lf2Um(V+^_dij;>C{eP0{~``FJ3{DC{}BmCJr6~~RE zI-!(22f;CZ@CyFG2TxTnk`Ky&ORw;s#HYc>^*IbAkeu70 z0GK>rfP5tq%&DEk(>R*El3uwE~M1+5Uy_sCkEg<2h2J6@qh zZH3;{XS~1_+VclTG(hA};T#oVhCT&va0wy=O&Zx7TnY?W`%)bxra@i@07p3v%Wq_~ zn=&Bb8Yi6gDCM+A4I+dKg2O#cppYy9B?%%uH5s4Xe0*rgO1ifRfcU4m8iB;kE(417 zoPsUlNZ~-QR!WpB*KoCRtfWYG>#Oyp-il#+-0uE1?{@oNnV5WfC|}Jf+7{dDMlu8> zTvdWBWLJTr=YhZf_t3qC<|B#wp{suh;a}D;{DqCtXH_(w+GspBX#Cv8;y`4c`x=uU zIf(q456ziG;jaz;zB}HQJ}w(j_ww)H?eRay+sBTeCZ!zFk;=HNSW}f9`Z%NLpt;S9 zP(BeQ4%`Ycc2-Pm&@fktT(~)piv|42{eIq%*nouwT68ohJDuENY)X_xkXJ<-;fj_)ad2D@&~s)t zFG5s`P2zl+<`l1Qq{hjdae5lq;Q2~}XI0;?bxO9b!us;5wP+}Hv6NBLbZVu$%l3pP&(8DC3Dk9ldHzV(gitA*OB@CQnLK+tBj)Ir9i~N40EdK3KMGcGU_

`kfmHdRq_R0v?lRQwfzT8>!x6O^ZI;0-Z^>m$MZu(tPB~9UBV?<^=H(jWgusXX(H_fgN699KNz(fq6 z_S1nS_=SO)lO%Ygi(#7Bx%WGzD>SRr9+S>9K~L8LSS z)+@t&vy2#{280*^A{-zzK)Zm*UZUiVGFx&GNc41}_=>&VZ|{Hmp!aC+0o)mK$r6@+ z$*<90g(eWBq8Pn3<)=X`*G;8pl{}fc!@s{qeMw;oV4|FJ8m@N{=Xjg-Gi$ET%>AtR zC-Qs>_OqQgKfXTx?d<5;*~{ZMXU~q`zC4irJQQ>E4aK2B<*g(9)h4AhVmvDrWT0O@ z5sJNPeRRBH?Ff0n^VfJus}rS^K?)&;5)U3-GCT4{{(XI^WGkFg6Q!*YrpB1=xT`b@ zN&a2(_AS^uOja0`DvOeAOD_((t!=0qyd<52k6M5r_;5Lt>YN2i<>4}WrKaWk1PhT2 z4(0)|;qMr0Sa`W1tP0ISZl_LskXoPmPquq&4+E*PMJ)!`a$3%~4F&|?S2Tq^9|hTN zua&hk`=PnNZ+d&X@-Qiz<7;I!Dfl>!)uH3B*TPxH@hL1?t>`5ym~I(_CTkujz#5`? zN;6EYr*Q&=@Ac<57`W6r3@j^LHIZwgn;B?RA0+)LrZLp z$rFjbQJJ3_lZNn7I7Ph*EI5%r1S$fx#LL{d!+N`W5B~njqCav)27beu-f=zu-dcXi zIu>&Iq&%i!4ddHaZg2O&BUm}c>GT>0?9}+?VIMu7sR`{7LFkIv#{hFmD!u-e((6N6 z?>^jH8kIvGZ4qE@u5Zb(l`|@8K9z+)lfe?R9Y0>OZR7j-PTlSlaIE%|r`od0b8HM0DZVL_b*?28m@L?kw8-BFiJ&Ns z$O!|v2EQd+9K`UTj<4YqfdIdXNPTl7=rost>rR4A`!XR{mcycspND zEt8DR_-Az|utZw!xAJ*fE+(z>sHKRowzByhU$S4U3krD9Q)vXUds;U-Qo=e*&JqUN zoK!g<-~drnYlT$`9S+a1>mTrw-HMfxfaz^t0uhF|UwkZg zrbN->^nbX-Y@P7qXHtUXoQWtdeeuK12k}nHDC_wS6sL8!OnIMj8~vlA$d@@|yh^IKhM+l7^;2Dk zf`tL}r==ya_@gRr#KrwZ71EXU%cVUo+dbCGT*_x5vUfrUBR~y~N?qzwPJm9oAPkqp zJ-5NF>GWTM&M!-c`ac7mZVFB(xq5vhCY!H4ioia?(r|DKz2^pg5s*>1!0-}F$6z%Y z%K30u!P?wNc=8WJ^;L)KfQY8x2GJ8>TB7Z3rD**1(%NbaoP>0-@dqQrts4R=y2-em zK1b0hdmLMiMn79-BEVPNl3G1kTU7p?;v@1jZ$ULpEAxemU-SOk5L&ybst0%Y=d~Nz zMkaO7Fid#X6pT=N0M@7#BL_}o&IK2+2kC0%#M79RlqD=C>B-AX=NQ)>>X>{-IUqI; zGt?I@GE$*CUar#+u4zYmb8U35=WiXyFYJZg+8iL+YCD;dQ0J&dN`~+Trf;#?WRBAV z4uGY1u{PU)H46EB`ix7gHGdi;FWE3LFVA3oJw-i{*f>{E@6b<8> zS2-l{Mkv=hrL|7=T8FizloQw-DgWmA-Z6M??GA$bw0;e_@fxGT4I8wvEj8SszJFBQ zL?@E%JI6ATt4e3npEr_jjbz(p1xPEAURB8#kZhThEN#vcKDo5XiCu-hGX2l*Y;NurkhFn= z2hj<(zo~sgwoH}aTuM%2H9*Q-#m-Bq!XVl?k7hC1h0za>6?Z5&sD%M=2Cg(EXvQ*O zv$Ba-rS#l@0ru!r2TnAB%`1as#cgW?7s#!lOr7&)8-t)wy72`8e)B7p8os(A8+b@Q zxkLLw?zo=2is4vA0G&>Ax%}SS@KzyHYMK$cjSz1J!)IA~@syFxhN&=G`rbwyn{JJb zeW`o7+EZjjoUG2Pe)+zEdK?}B{)P)wi(I$3X}E%mwCVPBW)d}zs!A<1kB{5<(owMy z;^G>IhtVBi1r{+&grGGu!rEmJRWF{OT;ER|!S7r|m(TAvN!TnlV}pDxQ@YY$S<1$W z;s6MjTZLeCN$CcLr+RH_xuwhXaM(LN7$w$-rskIxj4IkzP}Idch??Ywu)=p1$Tbb+ zp9tlOwKo}C8yn4P8!IIMw6Vo(vp`6mRGX}j!l0&j_w^J9RqKX=RA|knA9&_Xv=<}1 zwz?HtTjrtD!8_Ji2k94*rBMF9yV58ia{PTsdR9v#kjz{?p&cQB<1r|PMFPBZzcssM zWC~Rf8fN-uKXW&AO;#+4Yq9dQ+O*|APi8N>dk=Q2A05>`(&G3UVmVqYqFK0T(Y4oa zA!2FahZK+kv(eI1i_m|o-L-?MWV6a?OQAqh1q@f|M!1qtg;AzwsP~8(lP6TIV>ia+ zmgU0nth{Mjn18wH+QxmTC#$pjahtW&>2POdmAAG=9YY?FkzZjO`MLESch>|)nPP03 zCIYK=2U>2XgTfdR7Rrzi@ETyV+6b-jCz5E;?_AH?q)MM# zl@`A;t&%+sqk?4*^jNYCl^u7h#r5%i&vxe&X6PuHrnT{Inju+H*J@Wssx7cdUC{`W z`t_!s$fmj8)25YS6KJm0*rTpc=`l_&fxM8NzKDu>I;r)F2T$5zMNQk^fJCO*tpe1E6CZcfJ z#+1xkl(cFoh1v4)9Iik>3E@&J9CEF6M8+Z0zX@?Xr*j%*Ihmo@Z=wlWRZFeGdue0? zPof!TvL&cU9FtYcYOydzqFUI=PWbgVgG}LE^wBU@r`hS?!R~htl@a@DW$f1A9a=HN zA2v))$taKbsk>0zj-B<5#CF9R`$M#I!1jeIrGk|f3tpalh?ghPVmi!LL9fq6@Q9j< zRq%ie6=_jFH`ChEC_ZDF`%ZdUrdn?n?2*}R1)%;NovgM3kP@!f%$RJ}6YKFT$}bf0 zHAs52OyCAh!5d)qlUa)=-lEh#N;O6+XPYnh-8MyhRMG>E;;7o*(Lw_2$n1(uH@Q3^ z86Ap~s1VAPs|Nl^)*#cwmYr4wpk{0~Dt7JNQ)0E^PAA?%yHVwF6x-IHg9h`^5aTRi zK9LwRErb%$#;AkBgnVS*D$mjevM183+vi4(F{s$vkR^taaMtxGQ zq65`P3N(&K7vjZe0u+U|!hgh`q~n_V^@JE8>Ev1U#O6YF#y0-XOF5=ek7}C?Pd&zYDg+9q=uE6b33foNJomma14iXd8Fhjr?U@V`C_0Gx6 zOLTllf}X8iVF(Ltx33GxfZqzb;z+kn=t;FF11TyOlqYv+n2c&F4!pk6&@)X`@$Ypg zB4s(7q0?$IB2OYZ=!6xvo-Pq**Dk*QeN3NW=u-Uw+;42Q5f^c|h(B=zVvLGxUxVcE zN@0?fsY$$(m*@Eyn4HMlx7Wk6e@$)Q;)?HY;rRXn(H8EMiEfgE5Qio+gcZxaihb_v z7kub!qW7rx-JZQ`Hl=wN4fn7ftoOupS${X>O@*KQ?;S5VRBIk}W!cOPd?6slu~8UT!?c`CMs*}!={(s4nxYK&c3B`G}6fkQb5F`8sbbd?z| z)eyQ_&WLy0^0qK^MNzlrM~NH;-|TdHR+|Yi#DM}V--|YB0WcjPr;wkhvO>4# zLFUj>z#aL~N+48+veyZB?6Bye35&ia=u}%VN=)32 zj6=Ae2C4XF@4?<9tMfRB(N0&!b7&6LpSZ!}GeCB6wRx9c<5>RJ1prP;f#3J6!0%ep zbVCm?(%6btGIQ)3Eep<0;oGtUtx-j(nHC*1M1SF^FR>jHcPs4Zhz78^N7yHfLX`+4 zE(JzljxB@G4%ySD-5|DNmiicAtp^(=Hwoc2wBnnFR^5Rg?o`>fbv!;A#u1;%6% zCV;PX3xBZWrY7`_6Ic}%AlMXJ)d~M#X`?9+1dlzbEkwc#QJM0(4){mb;CNs%4Gx|< zZOv_5mIg7*`aLD4u=3NeZm)!ps z$dWG4-5B!=vx5|38ZR)9&ZHlcdQ10`tvB=DuV+0ZI-qFh(DawfMkt zqOq;d&3R4iSjddff{YIC!*6@L0F@6qUiI|)3h{h%|KX!=cfafHnNTf&y=W13)bs&^ zQIwZTX@{~+r9K`a6SUg>oz zT#2<76iC=egZJ1^YzYpm-_A}z_q3IQ{39gJZ6GT&$wtJDS*pU~4ye-&vG3h(B15M5 z1N8OB;QXl}{xJp)Lzp^eKp6s~AekyVmbemNVm$G2C9vmW$HIo1y&Plu%s9)7N}Nx0 zZV$G0*V$-cgg?P}O%aQdw1}tI$B9aOY~$(o4)0|`Vibe;agYpRHOkO|su(kBRO9WA zvYmKxYJzUz$zdG-jIVbzdbMbUu*O~xkykBjz&S`=%hQV|+Io`t28hCp2_!v9g50qM zyqF38x;^+Wtb}LBWIusjXa$=OE5YV52;Pm3N*u~x$4Ip@3@lJ(utYbbi9c9&I!hR0 z+3CQ*CIF+8CKx4gIZLd|&7MZE9#bogz_ix)JeXom1L$cEJ_@fQhO0C&jvV3l z|1bsg=-<&g+=1Sy&`i<)FacCiFvxIoaIIM}Z7QUyi94EgI#U@fvyvhMk3n;Mmgla{ z;>Q_!uL#a8DlH$nJv%wt_q7l1@45Bu+HY$r4?8SyfftnG0x?RBZiFJ!z(xExvvGO? zn0%0qFa^?S5U$M-9zGC}BTo2HFOo&P>DF~*pIaEwL59iiTn%Wfm7P^hXnY6t=l|sC zDE=XP@Q)9NtCX`&M^;nHW&Xc&Kq_3or#o#shHy%QUUlO$@a9%(vJ!gV$O}F?OY+U%b*y|iORh+7kDrimy+=a;7)Kvd_f8Y7Q6*9JlhZ&j77K# zE}483CH}1DG`Lh$F^^#u=z_tlD*X-?!^I}acwb%?GA;mz_?$Un^`O?EwKkVcBs-1x z4pcj_x_`_(SRhfD3!@w8^-@$OQrVXkjknkucRKewmzrmr2A3%Q+S_}e3jNO$V6e&N zYU2t7?h0(I=UYuU%d`0l0{n}BoM}kxt%fx~Q7Y+|Rmo~~v3Zj)j_jo|5l{hTFZB-x|`T#iu;k^%udV_+jQ<`jn;Q(l<(y!J^ZdW3X9ELa}f}-gI8Cp@I}|Tw^{G zXN~L?6W7giXq+0_Jb8=Y+V6B=bPIpDaL`KMP)AM(Vl7KID^7KU|lzgSAvQ(*Azr@qubaCyNxN|%9d&{Zvp2! zhsl!rSl)tNCF2}8vFQ~Vms6JweRVooD$(>>PXD$6J%h%OYxt_O&X)grmF_ajH@>k<@^7`vfG_)gt6}^Qb5K zpxrvy2GQp2a7PhQ>~YYh@;Hig*;+)G(Sl#yy0^B^Pf|Bt(WVQkvi7J$*elBnz;Va2fn zeIO%zAcO)1LP_Y$aq}s*?5Nn1E6E9I?DO02ddyRj1MTTK_q(@y6HB9c&zd!Btyz!S z-QFuQ(S&{BYm(TvY29C@Zsr?;Vx)BAxl5*s+CfPLyI{R$mD&kxX;us$(4Y^hvz^-h zQ0=Ingbk`JX2=umy+%bBs5qpM{whVPOHmFgS$#br8P3CIGQrXTeq~9XYfh~#u_Imz zXKe%T_syI}x`==w&b@Iwf#X7QhJJ(3C&4k97gfM$jZDr{jY1!v82gxweY^MR429EC z&ITNi>assDdubkGo^L2W!a0okmXaAYqnj%TF<>by39_h%p`i&003j_^dlcuJtX6Id zg0qSTh5Zk{vB$X~R}Ev|rtX zoqR;VR^m~t^(}(Fy^L%Ta!4*I(F<}lq-!X6^~CysI;mRORI5ZPg-16EQ5pwCE!j{d z(uNAswL%nWU?<+%_WS-#VCFd&dF(839vV$pm0rn8edd$Ym;v7T=H_#{L4Kqp=EkEP z$W{#h8!`Cq{&(1GR!A4qZswPVyT~n1QYeF)_|3!)-tv>2a$mymnnat?dNxP6nYRy= z5jq)Jd;SDJAcXIK^Yz1hfB&2B9^C)>!PnpTru4X^O`PFhbmLGZwV{SCko~d=%VUpG zK%r~OKHHEzRz8d#eye+sQV+UPiK*}EZ2PjvD%>ZJ;UfLM|LlTpPXVmpguA8lol57G zKO-?cauIxWR}DpatbjmmKnti5J=r{6sDy)i)AR;0ui6~xFv6OLA-DW>r;&CM z6=`^r&U$x)0(wJDY+_W_q%@OoyQ^X#KJM)7Jdq*fQ;!5R7({3BxT`*NN$W^`*jFF+ z;Y2V#+*cp&!xl3>JWwAV03tL#e62ow?HA^UZ`6lx{H6KfTlL{ve`bF8PJQ^!ADJH> zst*rgR@8^ddgIJhZWF(Brb!5?r`x{>)kQ5FcNaL*B8Zuo=>>J<0%ux$5Hl@5?5huA zrsaqG>VueR`Qd^3AZA*A_*#7sGc7-Sqdth4mLI-VAH+<{58tT|Vy5MXhw6ivY5uTK z5?E8<+@lF`FI(ZCQ#bV|q*l+9Arf<+g1d@|5Q!Ni?sMXOm6$-{eNKF!5+g`_z=>b0 z!~zn(=EQGQ;t~?S;lyuM;tUeM<;3q);s_GIq*uA2PT*s;FY zmVN49s$2EN=b(~L=)Vb>wTo*2)P+8ZFGxl#L)A{}C_`e4DK6Rf77SmYT=Oy{9pZ(s z0lb6>n&Lu!Z$Wi6D_+KO)_s*#z{x$s+65 zDy!HX)vS;#vVNnoiv3c}3dthtw<@dHLDj5~EV6#5vWh)b%?imP>qC`Q?6PWBNT#fp zJ3AB7^ppxjm!AL4*Kkg1F~d7~IGeyBi%C`0Z}z(n4B-iWe3sE^3|}uk2e3^9-9J9U z=tJ*C2>T_{3u8qV8g9;F5F`*SpzwfIZ>s~yGie)TJI_Erqf+V?7(+LQxh!mdF-`n$#v1QRp}%vuY?DF?ooZt2q|$MK%@LiiBOz-=?|>KQeR~ zt#RK%W0_;GQ&m}*YpN>2`H*4;RA1;7dTa%ZO`PHdOiV!&li)!f@j;%eFC;n=orzEx z!#vWXFFn$;+m7_iI?@w+Hoo`(w=H}WT!?wV2z_e!k%o(iJnY-Yf?hbVD8`Xo=W>hG!va;-KzHyP&9RT@*>qH2M$*wX-IJ+L7n2 z3xP?N67uw1e;#ib5{FC+jakNv)Am5zz-SW$)AgJs@=c}4Hy5T?7&)8k$W3W%CXD{P zTXmB&Pb;9~4$jOSEVg)tDvQb#@czF41IE6J0lU(zJYL3O+xku&AtG&sxutuoXCRqx zLcz#y{!N+721!Yeq$59S(vqbjKWdVar6E6RQj(=0KWY+^r5`_P(vhVeKWdVZr5!(N zQjw(`KWY+@r5itL(vYPZKWdVYA*5+4YA1{BphE2dG?^0>=05u0l689ic2`e(MAJ^! zsx?ahIY7q05@AHbcYV(7bho%{imwk!WG=ChKTvc0pz%Iwz)*%^!~l(;;+ zFAJ%prfij#9@GjowIrQ@0h8y5X9vA}VQeL}A!h<{826IaC1BccbV(Ft9bJY89eG=s z4|}Q};Zv|bo->%`)hj4~89Z!^0`{4cx58}0nKNo0gSrI#ACAGSDyvu}C7~S6t+q)_ z*d!)l0~3KEkx>~zowPm*;UyWr+G2@rKtv31f05-T0UI*j)77eO`$osW#T+ltw8z0Yd#v2Pn0q()t;6ws z!skoZ>)+Tt4St&Yb}ZRoE>p}X4Z)dAwe%cc6JQ81v;Mv@-N2v*3ic~AKOmH&y4R6=Md)Xb6#Is0F%U$lT0=6vu(%194 zYUvHh((o9%uFmSTaaMnvHqPn~(}r11ruA8UeX(Iy;X`FsF{M7MY2&Px z_N*5F!mL)A9wUx7ZZ%t7S2$U#uR~*-TtiJwfL!kOpUi`gbL8u)3;5Zp)UAJ|qIF#r zDU2%#el0|^ilQhJ{KjY~je#NkW+kJr76a1GYygkSYNTPtDnLQLYLc0)+I(X=b-;qX zFs>x{je)4bxFOMR3@H^>gHXw=rt5pl5xyPGBs`k>jqISBC^HeW8UPA;jJGBg706Ld zs%w*|OfsRFR|?-xjni>zi5ZkI!}jBJwp0ST-=^+07Rksh4h9iLjVbLw^$V->i%?X9 z8~oKA<$P4#GJHqEeA(RGeLEL3=>IllwbKFe|H;sF!)i3E9XMExei)%nR3))kU{BJj zHmTBZ)qY+Cm(vj?_2HuV78mu?OxT}Ro>?7!A$BY+g(33G?$bfo(H&Q4CMtJ@vuPl~>%$EvNT@kMl* zWVuJazu9MZb32FgdNM)nJ2&%WAIC4#kixfqzBy>{i)Xz6n$hR&r-MrWt0E<46b`-8aXP-ghzQ!dwTste2q47xi<{6^_pZoFxkSK z$~DMFv7oOn)*e*h1@RgRu|tl7Ictzc3;$3*9;-*q0DLkuxN+y{4T90zw4?S=I%*eR z34GtF%>)czL*CMu+MS)lYV{h899jJN=+gZYokpQ!0eF^DhR$%4X7#bC8R`Zz2%%XON8`*hJVpV7V6JSRzQJW`r8g=RvAhy@N4sUr@P~0{y61 zP#U0eUP&X;QmYH)LhW04<3${k zi2W;YOPEL;W4h~ja_fZ+yTGXgoRhcGSaPzVq>ol)>pl7FcO zFXx8bm6#>cp1FEeJM~)2Ok^n~Aum`d-YuZ{oYKpDv*0!JE0>?9}GZ_y;x6H!#$;;jMYQ zK0t@@_j}2sD4#CLHqyLt%?8OXOrZLP61BRREghN^W7&T}LNVeHg1_{$&nA+}`M`g?Cg_`DIC~RVht-FFFkRm_O_$GFK zF2kE;%OG7z!58Q`HS*XQii?f|7elXaD<$brbEpwEBWq3hxf+ZPPaVF@X;N$&`;J_n z&}qFoK6(qg3tg`ylWR9(6t*v2x=;KI!)uTUY<~;VsIEKnaL*k)+5K(k?M*c{{*z82 z42Lec>ISDULZ7DN-|rw5K8nPxl31?6;rsVT?}uB5pGNV5x#o*x7H>hVP#mqEi#X@V z7Ze4WHk4yfA3x7)G!;=)HRqh0ueH_2Q9i?lVuD;C@s^h}1Z=K765%^NKsIVdAw=E zO-kD~b}^oA=;FT|C+_yZaOQ043Hg_LKr-XM)jpN@S6Y`G)CqD;MZFX9km|{hc0Bi* z^KF6|;P%Q#&0mZ}!(ELL+tyfYd(W}|j#N3Ako<3jHTKI^XnJ&3zVQE*>Czt5Hci#d zx-wNaKh8HmFc3<;|L;#^rF$gvsm|fQJBbya5Q6^LG@(_2OE2cI5a{yT@a?UGYtnn) zazKE&4V1=C=iJ)P(y|Oi+(^rNMce)xFoYH3^})tHzrSOiD}wAUIYcMnUh8!70{Q8m zAW18}ayBLZCe2bVB&?Vl>E6bTbSvCQ<6v9?@RtHSefuai7t1ZHu&51q7)s)>~azQn1>09Kq4P9W_}?k>m_lM*#aI`tL;DLg7aSX__z74eoLA* zWD|Ddvs$@vsGa(l^gOVqC@cl;hu`kpZNCG9$3y$g4M&h&*7&?rb zq66F4mSN+lu;pI_3RhvKEBBqGa%G1;J&&hJYIe@9fIjc+G$gu}ilB|n)xgJUC6H9D z;_4z!xvvw|=DX_!fQ;u!5z9+`c0wtlx&HFy>*R}fecLZKV)(;c ze2dB`wEKfen-|#9CuopeZfcRE(bgjolZJ^|kEOZ&!-V>UG2wyBM@b#IiCep`SOL4z zb5qB9m*w90u7%DxKx7kho6S>9Z?1tWHXIrrGpa+CfCa#d#q71HV>d8qJ zXf}6)oaX+!eK7p$Hm(-I6fDUrv__b?WGnOR+i3id54pQ z>H=AHhTNKnC^z)VzIIS`$$&R`@I72$Al?Cgowy8rFEFtXF00(F)qdRFoHM&F2 zj++*+(y2<9a8JylqSy>Y2t75>0giZt#faAUjsUCwd86G80K1`GSfAta zdiD>&punQkZqve3#kVecQ`29x;6}q6m)K~&K4{4v{*%TRTsGM}a?N};v_7M-_O*uL zcyw6S?rbY%k9vPZaizY3oBew_CUopUyFXl@u`Aj);4QR|s7B|lQ5-4YqT}Rz27Uj0 zJx1nQMe-h^ncS{TGv8SVptjhk_}XY6mF$}oXkGKNj2CNTnX1P?)5sycc5CHq9a>Y- zC6`cPauJyV720*z)->uqy4KbN+5-4aVm~~V4eOA~tb>IPKf}_`+Gpo*ya04X3pJ1; z#GuG$Qu`8^TS-jker5~1iED*r18Sh~pbsdesu4prAq3OVptQp&O6$f?iudHiv&|1Gf&wb}iI#)Zw=2YG z1@1`5dm3g=+uAqjb#pPjFn+vR9pvq|A6~y^4AQhn1l#4>{RxA)Yy=C>z8*vE##jnJ zpk`mmgan-YgXOJr!UnqB%s6Wh^-X8Fc_SCsfIDz=M9gjFG!d`no*!L*hGjg{%$4Tu zzd$^w#914qgY&|zwqQs%{}mbKS8!7J8d`&ce^A~{s`C+&3-XlmiG8!UWB{G z>XU+z8k>qd{cl~}Y`CnfIY@t-m0QVt!Q5m##uGESymtQOP5PM|r2pGq-FC6_FZSfi zFKk#X8C7p)e*mm(x+ZssG-;BC9>1Andr(nMv+ zH=g(AvT?s&TC5Xd39JQu`9zJvRQDPL4Xp3bTKHZNxEhW$pq2glYcm~#*?|Ff5Np^OUN5-eG9Ip@G19$+y1fG8} zOG>x!dNcGbiGQ>%=;YCD_yOwR;x1(*5&T~j!0$j`+uG84O{;ue)oj_@L}le?Kv>ls-}*=@AbA1p^BZI z>ELR(TDe9$`<{LB0G7oTw=pM-n~QDF;my-$?XmyKKSB+IXF&cvd!+okK7(_Xz{-6G zEl8kR44w_qUdkm3?`XAp_vi>;kHUAX62wJ5F$H+kKci?$FC|F+m*WMsB>#wNJjQ_t zUDQt=&mX;hYDuvy9iZcQ1cb_m_b(Nn?;gW3V2ojGj)7+KU9Ucr@hwAHa~i#!DbK9> z)Yd&cGJAUDNoWShd;u9yEVbjFj=8Q?lwUjfE;cAQ~7-Fj02MTx-QexelI zKH8Qcp~Te z&7(hhZ=i~k_UIzY4`7L&lb^Zd8! z^%<`IPoeAvboM7$mgg+L{R!Qa`)}LJw75tnCA^b|^0%T>kns%mkkfk0$joUwUhAy7 zCeQUp_Exf9uWwm3QTOBhufOg)PGEntaDx8?_NQGFD*HV-K6v@kPWMdUa%({1wOmCa z_UV2`zF|mDjZIs+r~VU(={Af)B1OLuoB)-;yup?^BQO-xc;+!exf~n}3D6LVUWOyJ z-%K!i9gYMT(caS=@3mO+ry;P#)vf&6>pcaCe+_NI_hJ++Vl2R$j6nFc$LsY}DAIp0 zs>Z{JxB3S)d?cC`iu_=1*N*=|_>O;J)&WPVIQprk7xqb{s(Rs>M~6-(Y$aRgkJeem z;nD1Vy!fJ{=}hKOrzODh9M(c8ILJkWU2A2l6~lwxx6_1rG`H=UCBkY(4Ue3gQVb|$ zK$BEBAEC=EXqW%oe*)w>YzyE80MY!HBZcSIk&Jap z1p;#{Qtblagx-bMROo@4)IN}0E%g>uCfmiYe2Un6NkJ5Jt#5q_0N=N)lonumPcwp8 zD~!e5>YfR27Cmc#)y|F;-CTdr7%>8H)MhCrNJ?!sb7>ak6P00!JHSF8D;L{GEZM5p#)#*ngUxe37znh!I!N$K!_gQG)END1krus0HP z2^C`29I}3eS#v9E9ztp>2U?i=3*QUtdlBL&3RDnIS}xi(Xfvq(S7-*+BoJ%@ytN0= zUqJP;0wk}U|Los~J_H~@i0&CvbQ@f|Jz8Z_oI)xU$A#RJ9ktr1i!}a?y zT4pNsQpyDTpb9#k@M@QvUhRZ~;2a(GqLX9-7x*RGma%P2KfdD-n}8@mS-}X2gT@YI zBOOa<0SJlJj@9(W(&}350Xx&_%^odfzh<&uqi{Kx4SSBP0s&!!kTe(#!x;XkTi*E~ zRSgYMZ^b~KsfjsLAv399&xVn#X(X~zQuG(k1lf96c!bUe`twkabX*ts~h^In-6uneoUiYt)^CIjG@Nrk*wZSH{no-?Gr(AgUCW&C}gwk zauXpiVML$-lJR=7S^3c+jbBahxcY^@Ik=1$M2K7{QV&1Kh92!#zZhe<5ab>7Oiz+H zV`K3E`T3ZQ`PXN72xU+4=wR+6rXOF!OKA3-pRsim=Ed~myQwi%sd2;#(6YYM;hNef zYpP|58m+25(+G;VNSC1r$PRImIz^*L|5}YRt`&%z3Y>-4tJNhA28$7-i%kAGaP(JJ z!$y-DMpmoA&<9@nA~c(fH)c(ZeYI`vU1H7;Xf_R?kxRhpf1;Z%VI*YU`&SfRgOBqo z1v#8RGcEwrH#f8imsD|VG!k2lAhh=JkC@s(gJ&!oiM0fns6n$VuDs|gvDnYLiFpUD3(ASTFF5!QEUtEP3Z2yYkUnKi@1zYwi8~`VF1rxFW0K5vXq+IgC z`+T*kN)npAg$X&zKcswPF?MAsPo5%`)fRJeB~gqIY{~YvD_5O=H8BSC;bWu;M7jVp zNaZa_yZo7|OH^(&r@nb#Ffv~b$k^l_6K^6_j18u+jt=_zF|ZIrUp@o^K{Ot#+gDX1 z)XJ5BI@?68L~hBN<<_ayEDwQ0oN{7dfc!)6{Kuh~bcqO8E7^m`L?8l-4PbZ(;MnFT zPeA6O{|PwBqfln=9X*C~?`U_|<03A!H8>i2{VQ586t(zWFOb#rT`S%H1gB*12^y>< zLwz(au+_HD*_aj5dY?Rv0l@4_!?sCO&uze7ocoV>o;2>>1chnoRKk@`$fum^Mf4qwe_Qe8D5(wMQp-2|zG zEB}x7lyTnUu*A9lw~u1Kc3psy!42Fm;qVf;3z9s?UXM-`Vz$tl437iFo8!?_8p3U# zymLxHu@dDd|4ERcCKEzeLH@HJPR?(?3^g4jdFTxGB$>zAvUF<~#i&1#w#RPiJCWnp zbsci}?jQa%PHPR)&5PlyzupTcBih(>=M{g#X+XdA;t6JCoQ>#OxQ}%Jw-ZztC15dR zmU?*fKRD?Qh-CaRJcykRe8kO~ zVh>77F^c7e-t?|gsTAN}0|5@{fc~qKWT zW6K^S@eGAv%P7KhS$a^Jnh-sAv;fi9_W_(%4QtR}3?}l%8!1XrERf&Ve2Q$j=P^pzTm(_|q0Kqr}U};Z%uoxIGrrhn4eyg{}o`;7T?}j&j5IGh& z_uCKJT?ds@V8<=VUFxCF9SJ&qnUNB0gO1kHP#0eNmX1t)mCVdR{HR01zkv`Ta%01Q z(}rsw_v&#OjXqjc^1L0k=W#w2l4GOO7$rktAPUKKDWpQIExPtGh*47?58L>Kl}b?& zVjeA;vhfikd*&XJ(wvRFOf_t&P3@-$DX3>dXlavI2wm~AS<@COm?U|z*{#H%KohNf zyh*$z3s77z5q~z!tFaOQf33LX(lP~_(5mz^1%edFq(^0+?%xLKa2No`gGx{1jiXen zBBblq0`kHKBfr3V9KakXD`0XJ-{=93$~Nm3hqM{RbCq^5ed`%oQAkmeW2r726jenk zI5E(dKAw5!SvHF!19PA~_biO8$_h~#kk)<;0Y$6TwHt}B^=J|fJ9SC2W?I(*3Gd?3 zl6+aAG>ZK(#a8tmVcn8uy`n!!=1rgL&d_q zg6I`x$&H|Kdi~rRAW$MW&;mhXI4xHoqt+XsN834mL|bh`DdQO`WdOOH6z|~(xyBQZ zl-w+Uu97ggsnaZ5m{18ss5!9uh5)us;9nq*0L2b?g@xMp5NBT^`QPKZu+D+oG;4jP2KF7Aj18X?w3g;X_lQwv%|}1 zR&jcd6u}Ks4R~0z=@BW>3YJtRW8`lEAQg`=f=dj%B7LGhO2tiv)F%V_0Jb0gc;ugf z3*nQz~cZJ+D{4U+1z%x00H148K42>7=Z*a`Nz0&e3@pGC`ap6DJ>YF zQi}5W^0Y~PX-s7h6L3}qu@{WQlKC;4MkZ;!P18PyT~+mWyTMpOMNFnt)KsOb`c9%H z*%n+0KeJ|^<~SZ?t=5oeGwni!^MsiX^Eid+xg`c0kk}d2oT!=s+ij=4>`_ADI=5j) z1{r#}fOU>gZ<_daOf!OZR!+|<)rm1B*#nV+qg;<9d6bju5rGYX&V=fdA;#;(trbZR z%Nm*zhNjOJ5dE8pvlY1sBwCiqIOzJtazUB{^L3+(w0=qEY5)C_22C)Tr&jyag zK%ph4RpN!|5W}?DeguhuI;z`EHM@}YC;o+h=}-N+f9;TxlaETfopZMp9f1dHryA9f}A^U6_lW{Act0!<)R#~u*2$(O!k0?m> zPw*Exx%cwnjns?r|Jdj)rsEqxmI9EaeCozPv|tyMG*D?dto`T0D{MSou|+jJM8$PF zT1Cq;o51J`dIE%Vy+U33Jew7(G1@k)#t8-68?P>s@i8Jh9>1la-nxCGgr>B#lI}V>|dfRgDxlZe+mg7MQ@jkfs`<>PHe-HbiCsO*s zU02umJO17sdiT7$t5c`?;ncw|r_M^$>#amBr>D@hry<~B)!^x=>$-oxYHwBj;(9R7 z;c(@&UPI0Iyj2_Wonq7e2fC=`t>Z#JVD!!ucF7Af-T9sR*rJMm7nKe@*$ULi-|vXR ze>D`o=kpJIzSH#C9XxLRH+B(TJeBp&O7~WeA@OH3@u}y3U#$=3?+)bqHN1KGEU>

(g*Y=e=KtupDJ8iU`;a^VKQ^-Z2LblFvLc!aWdbkZ#_h0$$Mg@$utsXZ7{h`wzeIyPf^}JNfGC zZ|?6SbDPKL)fKVbr|#tR)3=l1>i69~ECT%85qMC1**#r8hyQRIfMv)wnSl45(+*t( z!ozYhnT(wvRyt_FEVs~Lp%t4NoLa%u(@v(k-$2$aC*bTr16q!c7RcL1ad;j#SlMlN zNVX@>42-;x#Itb`mwZEsBEq*dP0F=@Gfwir(NZ(VM^pH~nZ;A!t{gb{(I?k?LGgSH z-!QRx#m)dJ2o7F57;nNM*C*)O`|yU!1yUonZ_nR}vMLhQq9xHr(ls_H*B%_Yf=q=U z(tQv#DjvIrTP|T=pu+?KnZiWM1rjGAu`StE8t2b6DN^=JB~uL^l7$}vBTx`^X9%km zGIq$d9PI2oCW2;peTp=ku+1Xj3KbjI5iiv;8fqlE8UZ8D$ zkyjTU(i}-RMipJm^AJN*h{(XRkff(V4Eyx@B}zU$t0O>Rj-iAy%@73m3=J^kb@4UH zDXtr;+Sxe+Mq>uQpQ{HuG)A>y@m+#Y?wegKo?f3sQv^)1IieoY;O-CU_RPvj?n2&@ zMnk#b%V%3tIdL>-bAmcNe-^-rY(E>sxcg8ocY6xUI&GJ6Q3`&X7DCHpw%`?=712j8HQrOYgHzSyUb6l{hiyIp8T6q#(y0IGh3*WiZMTJM& zw|X-p7oZ)`ih_p60lN0lUe(AG2~L9d7)}0x5PvQ7r`X@wRyl~}J?ju-m(cQKfE`um zEVe>MoTCFBV1m{6QEUXVs$PO949rMWAnI*0?9)h6%3IWonJa-4x8X{IkOkQo8X;}t zI?@z;-->N5C8%TwD(s_(Ly!$pV8MrGWQj#=$vJj*V!*u0N=f2JelLx8Xfj*oBesv; zEzLJ}w`QUv;rkjjM-3k=J(6Y`Ox3Q61{U|b!LAX%ePXVVmZ7UVG$N9maPxk}DWskG5Lj@kTX#v?SxJu^rfgT4w|aON1F z?06U`YjR1KP0$A=D%k3f(Fo}P+#v>y9+J{(2HV&r?=1N2QBXA_q@lIvcXpI0I&M6; z0N~e3e42&@>I#q~h;9E1bmsEQo7W94X8_|>h=JHs5)m1ML7;~p1+pfOgvA1|5-O}!yAWI{F+0;GNMJ<9{*J1B?877glJzx=xnr?5usFyt0L(CPEso+$4<<0_Wv#$CZ;>eRePwU)l&18|yZ& zt0xt2kfa~8-3(-w=?GIACm|U;D;9nRDw`U_3H6+IC^)w!;;g2&F(aHXe!Lt;%aSD*#plaYm zPB!$)GkYVcaP;+!m@x~>1~?(7mz`b`W`c+NXDw*2GHXxH!O4^F!{&WiVL&ZMF_rl- z3T@Yij{uI<*f=Wv0cBbc103-t^3+~JCWhLqA zL_r2g`>OL|@Kj$0Hg=gyWreL=9lzZRZnioJ^XIG(O1-5>s~|A_E+r|N)PG8tSoO_Sx?gRynA;` z(TjKGlfA%=-+A@+jOFWXV9uC62hOa*UL$D^95Uaz&`?e2E4@l~B*!58vrWrD+Mwem z*r1XuI#$;yP|H4@2Mr4or!>fhn$#!X3FKUm6;EZ~s2Kwuc4ITTf-h~SshWF!@CiQ2 zl79PMfNSp|0w9C)xRCiJGPn*eAZ|R$A6^S>0-x?*^xL4=#(hpBn~RZchmQXgp?Vrl)r1-H@u`rxtdO>whx4X9 zb2CpV=i`FH3IU@gY4dkkL2(|?s09dhBU@TVNm_XQhLa|IXmRWPxJsi3$kms&oI&y0 zP!?u#+uhDt#F?v#Ff~<8_w^(2_d&d=>pMH$Z+13*C5@u$d5N)eSVmBWRv(dGC=FU* zyVFym6#rdV_G|UT<}EGlf{yS@v%RrTyW8caPwJ>$t=uk}$~N(HXk<~B`C_cRO_NZ1 zK^J3Kq@=m_EJkJq1^OHN;ZiGkABQ(Vt$C|8w0J!75|hKowc8-B9aFLq3!J6^M@ii>Yr!C6qZ!Ob29%a)s`70i8#h(^=Toh0;*m7E;%4M1W zNpXxaw7T5NV4Y~!1Hwr~$mVBD)b0f;ukc5qK%mDZ(kUdB<_lRQSnz}U&hy8Du>!7r zkPu@RBJ70@|z=Z_-RPqF<3`VZUD_? zBWsteRuB27ORttAcEd~uFa1d;AyxR-N~CU6Sa;MvAVRRmao!DKyO*}Y4EZ#9{db?6 zeqf?g?kV{;Un{*inm1yFR#_`4!rjbKUc)sD)lc!6H~4#_Q*oX3|*wk*W(t+M~UDbsrG zL(+4S`vf=2}2nhEP2&o|6 zF5tyNr+D zK(?+I?B8=8)OO*@?vo|Vcr4%0EDrKh*>8u?{qJfS0{q$8skXS58bnQ7XB(S`-3+rM zVeQv8&4Cb*V;z0mi2)6$k2yno$^)Q7f9C8dnf-;4o05MJdP%hzr{}0!h27HImCxiR zlZ?>OmQ>CmMh3&iQX|D&t@{`+%%2DlLfxv*3lAGFmxNGA6S!IlWZeh}>V{xvXOkv~ z5F)ZhSiN7z;%;17agegQsR!i#t`yfGD=Yt?_7YC&F`Q~mwlKT~4R~#&B}~T4YPCUP zT9uXx8NEYh(0I4wS2nDrO0AMr3!rFtADs9xT8jAPDe!2DC28JUNLd7oB6oY&#@ z5{Tsj*zfHwp4U@4mJ>lkT=w{30i#-ki@_y}w2S^?^OlFG)@sY6%ZP9g^{2)uA56&`Bs~xPXlLh|J9mZ`b?z*5MG zf0z~WtvLzN#{YudTF^Y%6S1??YMnuT;w*1Q&}KL|fTcYfN>_rWt`gQ~4yyc@2IbS` z`WcHK+|LaIPla2Sdz+Sf+gfg*-eH_j6^??tzxW4T$GJI!?&3viNv?nd(SEiYW*!T1 z&i<2!Xli%1mp=|W>vh8^tFI@B^d-uypqa^0>dC|pBvjZNgJy7mUFOSgAnmyVChJuU z7#LO`3B@2&9xTv?Y!LggkDmF4zS&kqi{GuPTJ=q>fY>rbL8gmimQ{5DfMgB-fKR9o z;Gre}g)XJHwbyihVm%$St$|)69mo?C+@x6<%xrO@;bk5E-S)oRjLG&mRb04Soa z9t4^l=28xj`RECz&?X3^?FEcpgz8;HkrX(Z5`PlU9t&RX>2sGz7eAL_{Ls$Dr$l;1 zKV1mVc%cUKUmfB`6&0atX)xv}>=%6bhFanp#pBm2c1x3|ffEZES#_?(c&=envnZWz zXy$uC91=aS30|o@L91WyR^=?HDFpS#*$wF|UG~d1)l^mR`!t^g_yIdm{l@76`;!|z z8_rqzrbCy0YTR@_ude{r#;$7%N4=_6mZxQ-=!-eZElX=9Eao^7EUDGcG(y%+2&7TuG{GjHlXc8WKNE`GM&D;8Nub#W z-fH#VkPw}7#Ah@dri+Q-GIlZUoV=)@cVPa-B~~NteXB~Bp-G0lKy7X|>;bN3A#Asdc)pMZXGh-n3jl zC@my0Q)pU>)6$grw}#BD2=_mnd_$d1f`XBR;SNxRy>8@Mt!h)7&;rFYQT3zJ7?J-J z%X?bCFZ7VpkY%buJ!x`3joli@21u7MSLL%IyBw6eUCa~zS|TNP4oe+^TH) zrIqzstsJ`5SPP&$1?9l1ga*w2>EGnhILRom3hw9g?2{QgVF7I9RhEzOIhjXOj<}+U zqjDHdP_C*BsBenp`8=Vp4S5WNOg;Yv=a<@s*QnF1l@HHiJ75dY9j4&}de427_R3bv z%Ufj2&k|g%_MvJzmys1zK&Np6OdB2w0H{bF0bPggZ~)v5Nf`?LfXX=3R~sdxAI+8- zR0>|o(N&0`;7j9zFjBHZQ9_?Vw=r-?%ocPRw5+$$&_GgdGr>QVy~3GZFAa&7Y9G{}Y`U&ApHpt#HMqZ6B=0F!1N;Ei6#UuwwZ z06yEm8cTN-ctarwS2X)i-Gu5vR~J(1?$7928ea;}^!}i_aAQt^gy3dx1X}VI;?LiNf*CD5*nxOj*@uWL3|kFRhC!=mj3=AeHWz+_+g3t*D4hyFZF`x*Lf?#ICeY-4h?5d~Ay zs0RYgMayf-nG^Fm3!(hnpTN62^Kp6b+bEpLevXKj7z6Z;Xi4US2|OV?F%?f^&(H+S z@Dhw3c;qvjqLI>WP}R-3x*0Fx6ukwHykEzN!>7^#a;B3gvB!YFhQ$y_9NpJq5Z&#r4>jCTHIN(nOnJa$&w6r^QlA{tWo9U)7bMaqA4sxM zB@1W8U+lMs{rq(h4UMkO;FSk}Pq8qsdXGR6N?n^&VLDAP2 zTVC)9R%+>~sYmZo1?vDMvkl9Mi<0nJdSoo-wumpuS1@G%hw&GbV+ul^MF{X&4$>j* zt$rp?(IAmeJ;-xp-OCuZUP^>xc!+t77uMCo(jRddG^d3#2M)jM(CIk-8Ai>5uAgK7 zufmysh=*o|ipo+$8+DtZxPKfTv_fXDP(#LY+O%4=yZ)!}P!5g`3U;E!YD|D?M_%t5 z(A+0D_Sk>RI6NF&4K>W*=pw=cck6cEIP)JdPZ zV=OfB0hn$CSdV2y8|=(Mc=fT+-U_cVCIfbNu6hKm zm7=w&d*+|x#2QEK{Bein&)2xHXE3tW>YV<%_!GWlwGto>d*^ueoqKC}pe_A#IOGBJ zp(p2R6`^y=2@qmTOWy+OQThx#G{6g2o`1I1mJlQxKPa?=|OZ3US0uobxDLIBc zX%8_Ax@opVcD_DNmJ&5FbEm?bk*}ig*S6`4LK^V`W>;|=lHFbV{2cLM6ERr9ON~Pw zfgrQ8aD3}Pq`~k~(mKtC!@>Z1DXFgnT|{rg5=x0bosvs!mM*~+A;VAQ{f>}@F5oml zEaiDXv7=@b01)21e#Uy4TxgjJK;gMGghj{Eto|d^ZpnP;+^;JUh1=TzoaCR`RK?t2 zIMuyHvGo?y;0BF&#ltlz#(%|H@Dz%Y1XNl!SdmO&empS&;R!j_isYpiaWcIqS69in zym0&~Bg2PUv#nL>JL=}v=6C^d@3S?WR!ytvS~rf1q;Y#>W?_uPR zu4RNDZGUH9sLoSy^@9C<8Sef5h(huX2N)r<^Ee>yVC89knx0OE_q>7qe!ACx?Dm64 zkhlAIg-(TZuTCm@G}i!w{lhl;2ej$RT&r|0|Q8Nf;0nEj_OWmg~j4UdBl-Ii#aeN6)M`- zq+rw^iQ6Khk4+o_ub-ZY2HaKL8XjT1} zyhJ&xH&uNYm!9@!UwZ6l8!bQj;=wJ+4uoSbvNB=Gj%@Y(OCmQ5qpIC?P7zl{TnXf6 zGT+#^p@`hOwvGfEk17z`1$g@fc*EP*CuSRcM_%{EFF~Svh`3QXy>+=B5AV>F&$n%#Jwl zRv)*<+1{<3?fRk)k<~*9#hv;$;`!03gLtF=rw{u2vN2q7Xgm zN32jH)I+Ow4hXZ}65Zj&ht3UqHI2 zJRlQVmN*3wRv?fG;V$uDdBWiZ&oQDjxs^xbRf&Vq&5$3B$Cc&Va4ec5v!V;Y#s(IW zz|KSaMy&E_H7bEwDSUUOQ|gMp`=IhJffZ%WYvnNbra|39YFX5cJf&5Zi4%oEkl4>n zJw-QP=C!e>a?`Hgq-$L*Mjorvs=9{AjJw~`dG*$eBR1u&>i3GeVNo{@p`rTQvTtbN z^J6yKp+RF!Uocfwjb$ua@Jr*mymMW1kukP_XK>3DnnK~>#_}d}jhQ8)Zpdt?ZOYMatGFiTn_{`ea=Q94@HNU#-RGnpYi<6_^Z(GYDb&fojB}DD_!XRy zd6LZgDcl2o%;daUX26%%CRWrJluxy>oss%MUWtqOAm4L<%CFswW0cO50%(9th8<{+ zvot0OD@rhAK%nxL7jddH(qsa&#=<&YdNjlovzdF+sU2C>S98Ho58DS&(K(E~u&mDAe^QhV)CBs02_f zv&B*RJen0TU8u=&bY+HaP3Q4E%dhFi3e_1)yh+O_IChGc{uH5L7T#FrlmeDSXjhb0 z-7v^Vp4?iM75yjT#-h1ReS2qNw2!{LD8LJSAg(AXNFw#Ef*i$9lKs_0On3kv;qZmO zKoYq+6pb%Bwv;;qjr`EPVZ%5?uT3lU&LPN4nyqA!(^>DO9kwQk{+ zz-nhE@ldS@xVe&|dZ!fQmn*~~jn!>uq@5W5oRn6)4t)$|1bTzmmlrPL60b$F9G-iFlup+9g$kZ`C35oVh`AP(~}jbrO-u&AVnJ;f8Fk2)wLp1m`~kVqQ>T?f7L3-o)6-7|4z2pF&&+~19dP)@qnk}3Diln&*p9m&HD$zPeAt34DPCXp2EZXD4oWu_c(JgocJqt zq_QIY^$+h~dW3!N?DaOGm&&yzdFg`T#)x9YWBV$~(b{Wg=Y{EF*sErdA$(O!TdE~8 zngd3qD57bM4i6BckVl4k=+o~GWQ~MJ^oobzXGd>@ zvEb`08l%IyJBZpE^Rjc`JD%*T%TZ4Gr3p^|;+2LIpYgt#r8-``MV32J)2b@$VArSY zKSxO!h-YiVxvT`x-`y1zQ%<~zpbAirQN5tst!iIzO~SzML4aZ2H(yb zR<52=E*o#1KdU-sA|{z6gBolRP+b7;Jrz{~jB3ha^#bp7GMv!V`;#gxfMGB2vX3h5 zN!xQPNF^1x=1`dtg(91gfZf%1-qK?~41N}3Jn{{qznLNAPRVVexNTC_6D3*u!ayT9 zBy$=4ut3Fr`N^=D$l#cr^<_W2VA*F!DJakZME^4&p51w|yXSu&?(MRAfM?2|ezhgv z?K1nYSSZB;mF-7M$wz9B{p>qXx8djJd;eF~M)<91d)YVJ><7tw-)XnU)hh6*^+S7^j9aZW{f1rt2Qz*#IVEb6ln>0>Dt=FH*8XoK-E&RPigt;x41|oH zBbRF%cHhkB3$5c41+9~0y39#VK=;tVxK)g)ZM7(Fmlw;Hn_4^s>Q^Zs`pH z+U?+({3ZA7P>)$P26N3zGPxVE8V)KWM=s1t;2r?CIU2zku}R*ot0%Yi^`S^l{CGvx zS63_8!+>vE3Vuavc74OyPlM8{i48O|*<1GOXFmLBXblsf;2eF<^A zUV=^m2jws*EjguU>M}E-Afl1v0~A^g*RDAeh~JIStsD;hHn0=aps2I*71@}JsCX8Y z(U-%#9y_4b1aSuLd9SC^VBZhVkq=tJMrwc zT3=ObJ=<9AE2~d`6S|b(j^?bvN9zW2}p;kq;poleFjGG)fyni8VlCU0EVqAf5 zzv3^xBPJ1nrEokE$|+TbfxMX`;t;SMfJ}U0a$5ToV_@a0CqTeLiuyG&-!U6OQuyND zD}se;v!+MPOgz*iE8^am7+r&~X6TX;>b>C4YT$Y4%L0uL3~Z}>3o1+iqZadpiU5FO z%`Y?zGr9NK-cWG+wQzOn*V#S(vfbGPkd+AawUz`-siBL@asgF;F5_j~e8}QdXy>Hi zD|zIEWV$)|gif}oxI_0Dd9WXmYy^#4>G9x;r6x1PXSHem2M1786Z5oSwogydWuIIW@_tf5SI3 zn}z08VUB@#2C^;3Plp^FsEUX-ug|``Z*EZILH7}U9OBISDb8~h(jTRLxxNyYsX!8n z@Cq7%+=dRdt$H>Dh#laI#f@19UM?xpOQb5J*G+Gk2B^G!+cj1)n#EE66h!9w$Cg=-4sN+lV}DfsH{u#fcA_}*!I<(-aO@G^)G zhx7qnSKgiowT6L8tHEq360R4nJlAREsIg3J-hYPoRDjzg4hPOjwt(07XdnW=PqVVj z=J4=3o|MiIgOAqOd|*(T*f>KuuHrwLu7j4ydS&xPR>Wgc`HP4Sd!J<@teN`{s>NG+ zqY`&Xj?pXm#FW;IF2$}*@ooOXmTt#_3qbO+Ib$8EVQeokGC(I)T+~T&;BB%IFw;K(!D2{D6 zJ8E2fTa~e^aU5Z#Klo*nW^-|oT{Y~)3vtpCoqUmun=buD9=v1Drqfx|DePc0^f)qY zar=U!z=mC+)Q%0v=jzcv6Rq?Q`BxT{uUvMm4!BDpERZgkR^*h4Vwg|ilWnq8u~>pU zb1Z&m_4_;V!<@`_QOEK10C4cm!*wFQH&@5o3(^X05e7H}fm zl}~rkzEZ~!Lfe%%8gn5sC*|+r5l~Gw3kLh@<0E*V=Gk(=+0>g+qRg!VC2mYnDLtB5 zq2c@0tdGiEWX~TrlsOaTiou|RZZ#ceXrPfZGq9@?EL6hL)uW(o2u#R6Y`nlIUX2IT zZwL`2i^0yXNdDN`t*?|pW0F&+RnJzIOEW@#k_~^9_fptlyb)u(gL9^{>^z#`<(fn0 z!;Bru>Nn3@UjtfQl(b$UKSPrMIc=I_Oe!ZpVBmvXS9*^4g6o>pCZjQxxS-cDf%sMI zAH@D4Li1|ptN!U#tGB0@i8FW8YYk6A6qJr zucgV*V;7Q%SH1TDwoK0U!cPomM9DBn^mWIfkYgo6^bv*ROu>qeRW)=TCzps=i_o2l z13W=7D8r;z_f8)f#=-6q=5J5{wuWhx5RGM8hwY1UK6{tPLOD0_T1z}uM`Y2@4um2U z%t#-|Jw3k23SAF_7@G>url(Oj6Ici*+_}iXp>-<}m@+WLxKaw2qL+k=!9+Td$jN|6 zC=w<>bUohfdZddad|jzYo`rlLABC_@?a570fJwN_q01%M2N7NnvHK)!F&d1h#kpK5 z=^oMXl=*3*PL=Wc3JLm6P-V3pZCF_MKvz+XtyYbdCPJ$bZif*Z#Fg(dzMQX~8ZwE1 zYd8g0c5JqT7{hW=(SsQr#o-nDj)wxJ@Zwff1Cr_-1v1)3*%{0T6te0HFX zG@}L%xLCNoU293#ZQ6|!BKU-d)yMdH&p#5U-aK0t@oJGJc`&r|BT8Ees9CchumP>ZMQsN{WL0h7n|__RPqxe*$AKgF}7`s(V2#=;UvC9 zwwG3|>%Cs1xv}ezk5`fy8Pwj(ii0*%v+)c2=2hKQ-N@V58vmV=xD-8F`Ke;TOOL8A zsCsmJ>?a1rgw{@U&zrMn81yWUk}edM$tnWz0mWU_`=%6g=a5_G6|Y7QgoE(R%fctI z+QHkI@){s}Lo#JzDKd0})Wq1re#<5(Y($lyCjG><*Ph}9W<)>aCy(9_=?4%!#+s%WQ#ns?jv!v8wq` z8WfOTX<>7T>P@hWvS+^N2g;35fSuVLhtn$WTg55pGzIs@xYgQ21or6Vd>)SzjB8_d z&5y}u3$0-o8<3pmQU}vX^i71-l(-z0b5iouxk_}MpoH+SO}Y{KRvXogq=#l{yy@T8 zKcvGAF{6@lli8~c0PkYdkD;{ihAAfu&r>y%vjRkzRE!MJ;7?^U9*0t(yOg$oC}Q(a zhuxDYz#}HgRRsyCH<%_yF}abEnN^$kp*Ha|m=4N+$=8m#!WpTLD-!Vf_;O`~%r{+N1hmc@{9`bQgNv$)8bXRU?Wy9zk4Uyy)j~ovRMSkF zKxPkWgbz5&_$zA~dHzVkvxHAOA>`>m8BBj6EmjtGe_JiT162irC>?1e&D#+NY21|k zgKeoVi+6UcO$q}tc8`>|eIdX?1^*+M<>oemEiG^8=AQ*rvhyk^x>hBA(dlX1b6OIH z;0*|@_PtXSx8psZi%%HQ2=AA}h2d80RC>J# z`m@ky5b`roKF+REwIyVNEOp@L(l*q7nI|Z_UV3sZ)z#aig+M`I z3NYNOYMU$xB2{jO8`)xjbWpoRBH3o=C(=iz0-{Os2}!Oc-Ip+TR=txWoNSN;j%TL2C~Ry-3U z2Jq+-=oo2+U3{UKcG*XPcnULrXC6-QOf@q|jp~}{5To9rovU3TKrm^WDP{)A>YDq=EkwHjIOxy3ji(RP zfj?R~3}g1z2+l<9T|s$rMW|UWhT@46T#R%{VJVQrhgS2r0QxQ@d2vyv`ieT;s;~cG z>9V4fYqzswzguhR%a%x?izj%qVhn-&0KE{GHevwK#@HFSZsc$sEjta(7mT9@T&Ecb zA#QV|g~wr6sHD!2(m`i3vv6ivo)hIM{BD`m%38N|_y$s3o~Z!k0#t=zE+BUfTCgOs zo+4ADL53?xUQQM6lW}a};}9J%8T3N`&}AnoLK(-MkvXUEFT|fjc-fgcy8zh_P^D4X zx%M=zUI@Rj2nE4RuS2p{DmpV^f%T~TY^hQ@e4XuSGS99^+FZ~b?1@I*Grr@91#ot^u98qk}ehAdO`2@uFM zuE?emV*8!5kiXh^tg=||;;NCSz%Q9GBxchTDv~cRVz3tRk8$7olTYeordez@?tJTeAeZ@QZ$=#`qf3!#JPo%=u~&r!p$z_-`V*j z_3Qaa>I*~Qww#E*egvGP=0cS>4IGXtb#-@2^lc1(?*|Xy?|#q;L_vlHDIG;H(H^)s z;2qzIB&p+{&z8A(&ER~jyEC$Rka!qYNee}^oG9(ikDCaDdR{)}Ex|}>dJLm0D8w7k zOL~SAFL!);oW;>)ER&)0a?wS0@x}$jizp&Lec_1h?)g$~1CLB3*C2yzckEMw0v0IN zPx%U^>!VN*OjXByIYorv6$ge@vVVT6x!2|^8DEqkcjGl3VJps^)U^{GdZ|@(DSho{ zXK~x$AzeW~k+~otE(_(4Q!V z3A1GIC>dwMs*RU_BGOKVa-rB`L=Wwv&vy*|(&RRi!~$q3rkqGq#sv^ z$yY!RMRU)+O@oQNxq7F2kN2jD{{|c2TmID}QVCliuBy=;Y(E(M9u8L_ zJj)yGHflpX$17q;e6)=h#DjxpPfnhk4pzIn-U<_jr$c;x3_0$YhF5Rxn_%|Vh9?

*1kHFIOE9aCs<|FUG(!ZSRkj{*Qu@8Vv(HD+C*`dm454nuBH^o9tW4S!eCB@~+lGdRB>~{SNa;EKH zhS%-|T`XL#Rtt2eSG$9U!+G0O>Dbx%L!8eShHHL%A1hBe@ZnE*>s_MmKFVE95gK%o zbcj&?=6{IEOAH}m>d=DL%grc?j!(h8Y+YL*)zO~Ya;-?J0ETjrXS<}Q_`eg9$p=T1Q+!Xm3SwmMx z4qb$8_;?5lGN#cLLSrZzM9L#vb%5Nv$bXF@{ICO^DX242vj}<;L7kqdV6?3Od}(Xd zVGq@jJMvMAkMTkB5iB|DY@#p_lJu^%qe~pN&tjM4w#8zHQG24jh7MoV1 zrsiCuR7_39dzgwxce;-s?cLdb?65=Q8ku6Kd>G-!Dhg2mLxnU_-*&4SR6Hl9H9*%+ zU^{3ICV|dwJ-*3+sTg^}lQQgA4!%|ky%;7KcTvasz$;6H-hAk7iuwUOfq?Tu@BvGC z#D;}@3PhD`q~J&mF?vVM0!#HPEUZ_Wh>|=qdo1b(^g#XhNvqNvSyCMl97QxF8Um}m z(CIXi>n*0nfD$A66KW0m+hdMZX9CiQt+UdaZKW9kF(>N)i*_eaHw{2z1?@1t-_Wp; zM8jb^c%?1TDM_As+AD!fK_l3Hg&?Ddh4x(|X@1GO#-7=Lp#0Y9;1|O)for}>;;>G- zk15no)8=@g=)&eZ_IgIIAs)5JQ#HV?de$X-a*nIQit|F-o+5R7HTtzHZeptYsFL=u znuN9?Bsw#cSYvIF8`sPf(TO!FUN*3tAL0s^WDW11ck!*7PfO{O`w4u`KkAMo-0Y^h z4QUUnNm4eU`_(JkaK6QP`IMyFh#f6g%GgmBeE;o!Qp@I%P)VpY%t~LdOp~%vF!1j; zX9d8)rfaTIl^cD!VHRg23-wS9kZ!-Lk#pS2;TTh-4&=Kng=?EVY&fP21y>;*!tipX z@B~!$QOH1}K&q$F#*K(B%UT@|(l6ZA`nrZ#A->VHW3kvS3fR$w!B8mQJ4!*h(ccRS zI^P(f(YCMSfzrH>Z_~UVq9f+2UOfVJe$DY0ByT|%-C{7QxFX-YU?ne@(eDr|4LgR{ zi*+d=Od>Yk;B*JK83PF-#r9k)CB*|}`F0DWYuj=gynBWVVcy!0It?SkJw{glsU(<$ z4TOkvgN~+685@u4BnupVawOWqB=P9@=GF=v#uqa63GHTwHnk%s0NvF)#$+^z+A6-% zW6S!EgJ_YjsYJ!-Ll@DoNux($(uVSmmW0!h0=HycC%QRNUl-Hil4n4=CR zhCZv zArUB{g9q6hh`4xs%od)oYJXbYNn)W7w!-Lh&;uikP=_z0f=l-IND zV5DeMm_JxxKy69-Grc7E5`E$qoo=Mca$)3SPp?EyPRq?QnQxRr_YR5>jQUZ_aRMV+ z`}dZF>Be$2#n+}f;+~3~5tiNtf4xFLA~OONw{4y_velUD9(gx2VPZKd3N+yforQ?c z7)0mfur}_^;z=3ocJaT(ryh+r_@)Dob7(k8cgt)M;Fm=-Mn8B#r+1#^W7w1(ha9;! zS1;pm_Jna~KnAi<^wVyU{Dt*!ExVA?LqYmvmR$t}dCwCq2hp<3WMgIz%zpl-NB#Sc z<43k>%*-a5M!fH0210uWAQKTfPzS5$WD9>8cK7ixB8U6f7xV_;sp016EFg5Cbq8So z{x>2kC8I5|N}*ora&mS;N6tQ=IoZ^x%{NX2S9|w89FWP|&d_|E{3dJgDvdLkqX=h9 zI7P_Y((_psQP`Zd-m1i^){U3QunB5!{?HpKLu5G+^e!@`whm^=B6LJV3tUVD3fnNK zxd<8+k!K9zifJM2dP33(Z78eV*v$PK$azfg^gf;?8~n|qkzI!VxJ@jwAzvZ#$vCDP zvgLRfbAxXbfNaRST>A{y+}BM#Owb}>?J}JHik>Ncj?X_P=#=73_LqY$1)ZV)V}tD( ztrAa_|C?<-|AQ%ZCKGqWzXgTx_${U%H%2b>#~27gN@+YaOA3Z&dqHf)+T2PBzlJvaCbC_;dE`cygmOH{Jgun=L1^2 zQP{=UKbJ|7oF}sc2yf>i8IR-C@g>d?R{6k@NPI)U6CjuHfS*ri_d=mC%{;lAfEwvt`}mM!I$BW)!y zx@p0SZIqz(T~(XRysLe92u$nPg=Fp9^#Y=coF82;Q=nZg=LKd*8tc}nb&S}>N69!GJ4LSu)qu+u8*0ADJAAMPf*%iUrZU1#8`!zNejoK;|l z=pYo=0VPvISLkCI{l7cUPRYy=&89svXR`W)tJ9KO53pUc$q?%RhO!AjsXC{aGFnwfWL6wLdFV*{PS*)iQtDGqV}hF~P3EMh^Ad0y zJ&=+!>&DEMbNveJ?d(W&17BzHr|hCsTj)u(*g=bq6qJc12Hry`)Hb_>^UH)>0Km z9Gd9Sk=USOz`6qWD+2iMD(`})F`Na#W zmnNz$61Q-Z@NJp~Kl5gs?k~|&z8>N)#jpTu<++7!fYMJW|CHtV)I5>zl@rV_Z_gWII733GpW9F1eCQ$?12G|=8FVWt|YusCP|f3 zSgeBbtU`1ucGS46l?vdPJcxO5q!SpCnbE)a*0-~w3xBcEcnUZj)q?2EM2>HpyzwF$ zE-KvvO!J8*Qq^8dLErC<9p5$)*e(4=Nfv$fs(mM-{VGss!x{j6Yf%_aGKum8MQ{Qe z+gd_SrlanrI=)J$abr<}rLol1DQP@GnBxYSoTyp<2r)K`mvqCt{6mB1SL%aVODu~)5L=pGcncd5%8xHl({0G0=*=CVEN=^q0}hdc zHw+$3%&XOzk@NqHLFVprILgIpi=JaFUIHnle8* z_ne_89EoP?UR^lcq)-v4h$lk^qN1MCf;SwLmi1#FE4)BZ5*Oo!Q)$!jberR8nsYDR zAJBeSdvxDUOd&(L8M%xnIr3xs?>4UjjeXX^T$p|DF=KDA>qrA8G1 z3{qSu*Vb(O9HU?FMPbEe#w(*mX`}(;cq0_e4heOjEQ66qP@_H882d#UhzUM8iHo3A ziAQ|W1;FFT$qdwV%jtuyC?9>EC3I6Mod4mwVX~}6n}X z0jRlGt0k<>@ooi;&@3Bi?entiSC%&*+B7qbu6rEAdb^`EIMmXoy!2gtMc;S7d|`cH z#=M{~<59|FdEoma^a+5AOue|pK>>YFS%Qfpz^FvwkHAczV_@>(X%pNDOLh|U9K#tx zAOjL9l`M|Tn(Q@s|t`g0NULf?V^!Nh#W;zb8$RXcFI9!p6&$2r*n4AcZD^l@U zp-Yj*Z|b0%n~u(wzC;-)%+D>S+zC8Md{zjLn63=Qz95NfTG|^ z^e$(^Z0Rf$gZ(lwoQl8!d^!baej?o@^-MLK4w}99VKf+3W&1Dxj|RkAIp2UgaVvNAsN2;3wB^JLC*I=3U~cWOEye; zGuojW2A4qk$>H&lUT?~4gwj)@W@#tdp-Cu`2@Zr((Ro&+UP8PIjEsmOzWHJvsk#iD zQRrgY*D0-*zi2q3o6>Zl-CbXYT%kUSHCnAAJA{b{)Q5s^>6?sVtMUDk)K(!Rf()+1 zq$UYGVd-H`F8g?C8v~=u(?{j_89faGdoVRj`KMSlUfLundKN_+_6ee%>CVoSWF}g4 zkbCG2(_MxQ;k!KII_%Vmr!}(2)tFl-J8w%Rm2hyOo_+oJi}C#H&=+eyqrOQG=ZME< z8fLWURJ)URM-7n_s9YZomcYGW@6Z%$u^N;CPFTOGxX*>qHpVqB=ti(0{I<*YWOWe(9QDel@@B4-v!xjJp2B!$D8`vSol2bPsol4ihQG3#Mk+ zBZ(9I8>x?glY%}`Wr1+}((^BOc8o=>~-%hgIOq;EO|lb8qkXMn$t8^hzi1CG4x z;|2+Ufbth`CSr9{91QNBrI3_dl8F+^rDTfu4LiVo4K->fbfM}BT+2C70IjKa_z^$EL?osbZ-|{QFqKyzi38X&S{3* zmI|{M!kL{7M(97;&6Ib1%-~FtG$}3!?UqDMq8gim7mO#4-^0kq^NC~U(X1IE=ptda z!c!~0`;k{=Z7i^FQu4*@Qtgx9{1O8w-WGC;&A`pbO{MTCC+!+)@ur%s!?_dN6xcxuL!nfYDM>uqEBHzXw*LV5AZH%RH^?7AvO z)@@Vjr{+|lXXb&NR%b|2bnICk+S8l^s#3f!I}sKj2}@N8hlXoQPWO3Q`PVQC#xtkX zb6WD8mOQ7z00^hD6jRBT8gwmbOeNN$rm>`HWcgVKeLj+z3r0ACrNnaFS?k5XO%mGW zpw^ysoh?X6pNT}D$;axYwu}rnLEZA6_%#n3OQVN{&9H0@QDD+$O>ExX5{oU+VjSmy zD>f}4iW&6pS$35MkVz1^J|%uwP!jcDB%N@48cY_$gi{^x?#ooG5OE!AN!8e@_tWr@1`|zNo_zyZAapb}V07`g+Ef-ct zp1>7tfl9pMPE2fl870%O`_adzB{D~Wa4)ZQK4ncFnJW`61*VsC;2^8ElJ(%%hI2gq43d-0e4@JEpE>umoWX-3-?1Ry75Na*Zw*FM)XNtXj9QbdFGga&IFjFdJrRVkYz^#N|fq}Hp zJ3`8pOjRYqdka+|qX%FGg7rt~IJxVOWGB47h*VBgt{i^Aj^itrj?$~5369V@11ZO- zC3iIvpv93VKvn4gG=`%oIdHGYOJ-rDSK0`2)hjYGDpS%tr1EMJ%Gq`@%mz6{=BfLd zNeL(~Yd5WC1Z^U$(Z__fl6d`Zk11t&q;gVMha8R&D*C*4dez#SdX4nLv=rKXYT0^} zWOJ!j^vDY6D&qj8HnF~F=+j@4cL_a9QA*(qFGdsJ8;KPm%cJ< zu&*v+uOA0Zmb-Sx?2vzpx+~x+3gs*Q+fiu6qwwu0)G)9caP`lVPkh1-tEjZrzki5I zZ^4m<%1x-dgFuQmP6qn>a`eUufM1BpFf)ZBUPx3GowLeyvx-Uu<)Jez()l&4)%&Ct z_%cP>qucRB59&HEHd7*|1w(zs(fBBxU8BKP^yxK0BZl{iXER}YB;MW$ zg#jp%UBRam)3cd)S{Ct}2m=#OP+8)s(EF4Y3x{KN`)o2kc>XI0A>S6(p-P-wRVxs> za6t3bpz>up{9^q-+{fPL-Gl6e2zDv!bz_6oEd6uA@p{7N6i}*!G?eFYadOc1TgpIk zS$K{j54`fn6W)-@0|slIA$f`}(50_`3L2+t@E ztWfl-VLHE1ev#PSf-ubd-d#EycFjeA#kS!dl>JA45&stxPW3g-`s3X$EJv6t zM@#CH|36p;W^1dp1QC|iCU6c+)_wWW4skI z<*|0XM0I%VjzkQrc?*UeA%sFuixJc$q~{XStMKg#04MloAXl(lQUFUCWl)+Fb|ukv z0JPX?zBjemK%lTU;Rop(Mah*bo4F6CF+x<698nM&S+C}{2gSe4e`I0aw?Rw-A#}?1 zfROh3S%^Bu;;KWzeAdre_`%*J8LOYL8b#LR!AS_xaQR@m9lU%ZwNhx$&>I%fVXDc^ zZplbrMG!Wn>9$ydUFJK)$B-ovRmE&ghA;v=Ti@)t%6(A~u0T)EiN=k`H9l$d}rn4(cXqZ@6)FW)PgB!1ll%bqU=3`7DlxI?&jp+uJ{;B!w6FsGeU{FOL~}*F|trQ+|ht2D&#Qk zcr}F>hc0w5GL&3Va@=gKMF`o@e}F}k3VD_mpjBu^Yx@oBtT@eA&E!Kdh|)KpF%EQu z%QH*35@1Y;?1<*JTO>~>8?i{uDXxI)zLTYZUW7!>BidfL91r1>^gfRIH-wfC1&b^` z(9cRbB}W(KsO@}gccjT>e@|^p;i1pJsRt<`LogL<&W<#984mK*3grRPDJ$|v!44zerr{)9h7>9`^6y)oHksix-?tA1Yc*}v;x~GvnxJU6 zHc@SmHV>ypt1y6hn{W7W@;O!=sy!M-117U^ty)tQ#NHBiX6o1P`hnR48dU{O4YU4! zaNjp(0lJ{V9zwc~j1?N0`i;Tv=AR9A$8s4NNJZQ#_%gHy`%UL~9q8U$IaC|Oc(-rh z0iSd=7PSazQ}&03x5o=P`y!N?dRH!`N`bjB&K_i!5qaR{%$3e{<(j&)aAAc4T&<>F zYf8bvLet%s*DHFJluO2d1uBdby(PJxuw6_6c%he2&bKrjPNC0PuIgt1f$R!h8m!sJ zXQu~EUk(xx2rb?mS1l~0C_Z`I?azXRied<(@ZGVDNLLF-$EAic{!Srdqc7B6FlQ>kYw^c+%ijlE+s)0nb!&&b96xTIwh)#lcS_`G{Aui-~ zf@l<`mu|Dr1bO>67lR%`mjMs}YCN&%&{-EYJP*UgUxGm$6;thK=*^}X-`SbeBY92% z6$0M}ZBYc@%_W-x1aaYdAH@Dy%Dyhio1u#3R*2{%8#A%%k?r zygq8?bi7uV9LjPu&VSzUZnu~9t?Dx`aPvl3*1Zvmc7%x6lG*zNSie2XMrKEo(G=Mp*P$x&IM1`(Q1^x9#}wCjnF7HD zb-`!?ZhhCl??#xsHq(bfnOH&8n-JGz?-+(9ty+!Qir~do@A3 z?KoaVJrRHx@KdvQH8HiW5Iu>EJPwasNtj6u6;Q#7n_Sj_5ZB!-r;5e4(%d)RhiigR zhz-}C)RU}LrvxOHT{TV@&an{RBn1%IlIKNb?3V(dEjbDj3m;4E7MH({r1$ylOXV^b zrr#c%sX}FnjOc{0Y-e_fGfr{MRMghCHReAIi|Vx93RPOy?dj zBrh8DUn0|u>R;wnscl$SI}%Ez(TR2Uq=6`kd@Hxl)?F%JI;0|EZ5}2<80@rAR+9r6 zf&#`|c^v@^cF*zIhAbvy3e(0WMK5lZZ^Q?rW|)*aRm{weFi>gmX{kpa0l`h*m&&ij zpcu09BI68rrRdTINQxq}un;=Fn>1i&t5vdEWrNwUpY*qZP@Z{0z81J8MMFlOLaV6* z-5lW`wAe&HZc-d;W=1nR*fSX!H0|s}w9Ih4mnHPAXitF95@whx zE_TWXf);54vO~%~L)Q;+fGPwz%%A6>r5#25H9~utwxVe4;>YV3CEbsPpZM3*`5B=n z)}Z6hqN040jgv_N)H13+ml4^Pntcs!mia7@l@OKfz&3Dz(tZsD&n#e#gL5D@SHQC1 zzultDay;4FtzBxfKzm#~;PI?qT_t0RWqD_hG0rDppgziA);VSh#nsC*B+Muj1H4AX zbvhCuZ}G~L!lI!YX@FNEyY@cqUR_=7!c@+8q04-(jeA=d_YR$)d^mZ&`<>$>xrf%Z zWCQo1E-moDa@eUkr{JUGf5LaGrTNU?QWTc|M?o$qjSQF~a{LipMk2t(TJ{}U z$2#{;&*A6ve2<%iSNz@M`rr+J;Va%Q7H~8JiI>E)u_)}wL?FQ&F$$T4zISD}WZJ9a zqqp3H%Q!EE6(Dud37BkTqH&AHj1$eTSc?;2X(ls8G7db@BrUKR8l)Ly zRLc!I9AzJN4Q(8IuORCi{E4z^GnHaWV1f?g0yy+FidrG@B#%-UbzWlPQ;}F{wn@n3 zT3YfFwfa@j-G$!H%LQ3%qk`oPsxYCvjt9M3U9f16U(qng@N#h}NF_KP-AnXo!!pFV zWlQg0!|Opbo1uF&w4O*u@zxypj~tD-&Y<$5jLKzkK(WT5ALoc)ukg=7=x`iPpa}fq z@CLOIu8&J(t10gFdjSYM$3u7H zC(Ca^IoQXT2O&E8sApYU)J4hEMJWhAA9a;*AWvp9dn`?kd`JBxP+A-B+51Fohw8yutg9w30wMS~K0T&=|U;i2ZFqT7BdeFOKmoV`7?O%(AY+w-`*$bd2}MM$g* zmBLxjNKl@~p{rkraPc-%LXIP?F=2D&8JsZL9Pqw()8Ggji8N%oXMB{>V0`hyKfYB- z_@XkN7M{XcQEsyn0OP}q(gkyVgeHn+J%}-3R(VuAI~Q%^G}J-j6pbVEi2|YIaQGGH z6mNfUaif{%`F9Xi`WHZ&!D5Z1h~b#XkOcsYJC-tPY?_Z`U>Q1S`N_mXt3@=2C8=@< zC!%`1UPk`0UE9Goyr>tEOSaz%ri8Pi-!PhH1to9je$*<|-!L!a6jGpErVu!in!1Ph zEV)3otYQ-RM@IsKezY8YdA_jxxc~*^+S=Lh0k~+1Z*3-`BT071A2F-i}oSS6*_0Y>mQY^R%;^nXU31oM3R8y zRl%eQ$q4JXT}7I%^K!B)^Xwic7*5Wwl_b$G5R|u7@-|CjbZ0cWaCB}|6VMB+S6zt6 zE9+aDuU>OYqJrHMQg^m0@cgC%Pl!l#OcVnoKXyluj|2P5u)pz33wZ2 zY&pHHKf_MD({)gq6zFQ$kq?ZYPc^Thn+yGUuo#j;*F~Gdr5ppHFI_U3X?&Y_=^y(S zc$1*+Z;u6Pr%Dbm9s#^L{xyZqywDyjV7AB}8Ay*M$xShZyjonaXb`o;?jX@6&@R8a##j9T6q!jq9G*%%%;`Q7RydZd)@n zgAD1$7Jk6kdSNDNj3|gq=B>%+M1(CUUF&3<$G)?pyOMZ*I!K0V_X4&_1lXuLzZI9k z6hi}O?vXjK;&7mu7y&KJ;Tnk;GrH`}22qu|w1yN7dwg#?l1tM|NK=h2%nYUwI!vMc z8q$d>-3H*x@xBs!_?$Q<=68$)y7`eKAWs2_Z?uffGPESPGD_IZ_zmh`k`_Cy4ovuL zu%z`!(9;v3GkP?F`_4$kr$B{tDq@+%x2-1tPWpf`EO0j;C3l4=Axr z0lgh^AMw0`mKOn5$3Ae3Mj&lW3N+S9cOXtub=vLjN}8Ik*P1BmjMUX6KYUDlFA8Kf zSW0ajN}CNpRSwB-m{&d~F;p|lE6a#ED0Ng+ONk7XAAOAKRMs7bS1hCKFbODnW|DQa z%F)8zPn946xDksQWfGp%ectRrn90|voRKI zss`m0_(X6ULddQXQ+92E8i~e4DN_!yUi%u&R$Qg(DADZHcwN29y2_&kM!2g>0SqRd z&M=q#ouGb|R`f+#HL4{Y3h%nLNZuX>3GaADI6IlmihpTGyp%QjW%VLV#ki!~t6t0j zKm|)pX1+ZSJ6KOv&QDeNL)I!60uh{tmucD@v3ZlOy6QoGMsb!n?^qp~*Ezf5Z_SPqzJ{ZI`P@UrWi zXX9(99y3=Pny3JZ@^VndamSkw>CaFYR4$5mInD~{xv0SfMkON!W)krQn?E&GvJH!6 z#6d%fk6$@D$SpAjs2S_l<WHI#)2I2YC$hR3_1^KyB3TOMgxUL#P6? ziOwqa!mWXgpR=G1YhJCe;_cXyU`fit3InV|OA!~q-9vJmB0;)BNjoOVR?O@czQIM#)0}7tpTCN1M`IT?899hKl!j&M&)S zrQ-1}Mg2rW@y7Jfv6t5I;AAT540Ys_Qg*LV57~qqBAqd`WR}jdXiN`8xX=@^p!6gd zPkJV9XZK9tF$%F@j3S#4zs^_Uf5H9`1?f4?67bLDs_X~qY!Vf=} z1DP~Lx3vw~_*RFaL==jH5CSy%;x#BI895bNqx?G1$?M>T?tkozYoCHu)+P6@ z$A$=UR*@0SD|0Jn6wsL%xi))MbKlpikOz%(Z!9L#u7$yK3uChe;R4!zxvblV?eog9 zOrc0lLdHC1VGcS?%0@ThhC7fM4*10HP8_AeGfVh=m6wbb}fn$NXv-}2D9-R;2M3xyIN=R*V6y7L`AmWP#-7s zPWx^@+*#f6R;PW|mo(rOxtK-ZjKpOqUv4kt-Do`)#*ZcIO%qSWb_Olyj3wX}*&LIe zN!$oO*aqEyFC04_N+o0zJNs%=PJo%;l(9NYz1Mf(uhZb{KuEah&LaMw-dX52#m$0) zzii}-VnrSWEu^KyBK2)#_vMTtiE5{y(TSDdqU#MS#V`7(sY8+X)WyVad@<3=yr42q zG(X1uhnz2YWg&8smSRR*Q_ID~zGLl#p^46=x{g*>MX}&jRBQnayoCUSGv-Gy`n7M* zM##*vpM)u?VWJqss5uIiN#@$m8@!Av+>-Rks!aQvaAEXRUE;?qq^iz$S(!=%VAQ9= zIGYhF{G-uZ;zq=CMPZ`D8AudF>fwBUi81CScNeoAw^x&xjz^NZll4qPl#b_i>%@$g}L9_LfYJM=S?6Y~tc6d@=eVriq}5%fxfOe0eN zh8@0+b-+elIojIG2)@X4BahB+9UtFGvsf&JklX}igJV{XSm(SuIzGXDCLOSJ@WQwz zal!DR6`>33TnTZgS8;zEqhMccLp*&Tx10CzxEv>!kCi_$*8o9sa4=y9@WeRFy$dU6 zi-w{ab8PwhOI9mGz)o~?>BmFzdo6?%N>ZjT!+kBr^D8nyQ<`YW8GU^%Ru9lu^Y22AwUTATX3;(~U(Tiv07=QU~7d^QwT9M9zty3O+5bwJM{oujrpkdII zY}Wf_n_gtQV=oxd^o%(&ks)==s%uG%%O(#anye-vT$4PFK$mN6D_D_kNzubaPkU;p zxI#b&ryHa^{TuY3i`@98z<;z#7@VhKzGxaOq6y73{+0XWiDdqr9Cy1ZPkG@|1U2dV8l|ojs zP2So!r}7JJMQjndwHP=>Uoxpy8Hu1*t0-RE?q*dKGrY1?fb94x>KUgC(BEJ#Xl21u zpjYz~n^&E&8TDuzc!cpYl+-6-96YRo0Q!_LH>D9OSKZh5(bI5%Mh883R>9lc6kd!0 z2AQAsvmi0|wMWImY)x)?YnZI!RTvLzIx%h!kV|1u7qDw*?_}gy^A5}kmMbHAm!2;p zucLhoLcKmzpi&A^8l-E_SV$2JTSf0B_zpzSlDZdPE~Fxw5<%~@VkwddP^T_%GB^Y= z*(guS4YazsvASA_99HKI$#cV1vZCiRJekqY16|akZ98*DGF)09gV!oTv4q^X}6`r@T*1#DN;-qX3iKdY-h+&m$`F$0CtR!Seye9x1 zmiH6uO=gf`eK~{urW^O99SY7*pLaTrx$so%LYe~fa)sJO0MFufHlkZX1so3A{BDuS z@0PFw-jW8uTR^QQf5lte%PnYq^l@u^KI4aZwk%?_qUERMf`5?(;U^Tyizldy9?*DQ zq``_qMi!}Vv8Cn~TX=4LjIXI)_+4OhBz%DCg*H6Q>(VjwK0Zt08n@du*N&aOrh8d- zg%@OOIwvmD8?3!AaA>#Kdh4;`{?x-oorAbu9r`BNbRRFf7YoyK_=Hz?wIY=QlZh$; z`K23&&qQ2c>R&`o06L+$lqy3Z8>^0{jOLwt_Z%^om;hCydi6cWPsJ20^6XR9H?=Z* zB9f*m_+o}0wa`USf)puYBMxD>Wb#zAdHWu+*Y&eCmdu$j@Xn=WLA3^Qk=LFslQH^{ z(LX38!rxZQ&yfDT$Y$gBcoSgze<824kot3!l&w}E-Y5zLX&{iTV`y1EN)ZU^X@rLL z%%L*K3_nuY=c1wTnqJvqMtFu%w;|IEwZg(5(Z4#%p%1A1l`=1V@yZ>q5K{|*+F5L-V!P!YSG+dYZB3^$$hZE#U zMWxiAbTavEZbM{8|v33C}I7lo+=n%H;Bd2^%y zeXT5IukEM}6de$=kzqO+898$JnqZ{w!}PnBb9?_)1-a_CBh&OAJieZvXTVwWZ#w}j z7nNDwue=A&fBlzycGkB|O(v!Wm|=9C|NQw;H8jlMnCFq4XPo7Ee*8V&*W&a3)A1h; zGWqcQO>}{w6C!+GET<vBb= zMyC3V$GD|eTqU?}Q5$c_No2z=;R!(-sV8``m!gVsH4*KzIXx+a^AvtPV-D$fdCsC- z#0Fe#l}5c80Xo>~1QF25MVX`=awus>tlZe6&)ooZ98;8LHReJU$ePp+vZDbia31N1 zuyo&T?0?#j=-UmYeoAWN5o-4}PeP|!B)-~$0stjaO;bie_?zW9-iF$*YAc?d@j+dX zY|J-8A`gmo)O3L$9Eu7tZY>~&h@AlKmLf^nE^k=&Y;88%PEmo;x`V?*RzU_sUHdF$ z2Yq%~z7D^wuxlsajB$N@B|>Q3tg$Iv)ECz&3%k`?mubN;eO|A4G|P$&wZ_d=7<;nP z&RO$h8W7TMoX4{b6KNKd6UJjTy5m+W+c<}2b$YHoU!n2sNeXny=z27>YByvE0*Cme z^;%e3W+IVsi9xvN3 z)X?*?(h5*HVcBC30m`j_P!ffc)pARe?*IS?%x;aSPyvYu&)V&Emh74b~r3||P+3w&bO%{hmFyh!^i zxDDskkq@32_Tmc9ywsqiCmU81<{9QbLWQwsF>rb#ykIy61PG`v1*VDcAo;)oN|WNJ z)sQ3e8)s)gJ00c6aYK8XK_>9Il(je_JVKw$aoZFYTM@OyR(;u9G(%FA$JFL&$Gzi-pp19&E&t z3Js{ZXIHacfBs-Hw2S}l3hGr+CT&%hXa;wwGKu>VwHLkh{}|{ut$X^#Yu%ia&D9#t zmdfE`)Kp>Lk%uubtQxehtYK1b!>WGqq=?l|t<_IAbW+Yv?T(x5!2WKN=r)j@n4L#s zQV0<`d}Y&^Q^S9nfQv6~v5yy*_FjTr*|3-JDj{&qsmMLLUQkZOHxdT7lLH3eTf?f8 z0LHN?yq#7lleIfS&hFEB_n&ii6O*(1=6v>Ca(1oq)dR`d9e@4HkCL-ne)H`!$=SUc zy}y*4-G2OTCONykpMSk1&JLd6jE*x0NeOr+ZW;Zp!t(!A=IwU2?5|*XilqhLUx$<9^MS zTL8zG$v7Tw!J?yP)d!9L-5lEB>?~U)Jp{%s+x=M47D!dsbjTK4d$$-m%LG zpQ8);TUoyK62%qpv5kgH{`X(M`X4}RhB2%8`+3v%q#2rF$N))}&WiSutpH?gNsf#> z{U#w;wN4W(i_t|qUe4kM(OhXY2>(MHl?*24<%g5=e?bsd-Nr%?ljtpNdik|)qY6{9JtAfJD-7BoOitvT}id>z<( z1_9~iqVxW9^M%(85?)T1o&9gWj?(E8&;_8_(Z^^S7f4UcvsC`XO>_H0y#9N&jGJot z^KVwtxXe%fZdV$2$@{-s%e1MMtMYHwGHI&iuUaj6JVhU`Ir%b+(O*YXxv4IOx{pzb z0{EtkWn9g9u*~6n9bGr&KCb0{%kue#yhpXX@8W!fSBVXoKN*?dPI+wfH~EXi5KU!H z>Sb=p{n5z%x99NPY?(*1rc7r>A80C`(@>A`Hnb`Kwa$+@H|9In`AB(xMgtQ{A`Q@H zR~wZZa~@PX%p&xrtcN=5&vE?mS=0;@I@dH7@NhJdQ1mRBCS}o7?pLdv%)hxeKU?|b z(p>{kCE2*Kg`?&Yc$d|f|5-!+H$Z=0Y%KAvp~TBZ{Pw9K=V2agtocbpeq4mZbo?G~ zubaxeY$)>_jaFgMM-wdFxG@@Msf-zp8aLjC5@><6xzwAc8TeG@ky^y}aKbfC#)r=q zZ7lYpp&0LEyrgU@@w%bJ?W20%P~vm@>W__OHn;P`jIQOH;&n!}MC` z0!-;q%TdMnDW!-$deBY376Y&0O<=uF){Ag#RTf)X= zYRI>#=|3CtitrJQsNBka5(700AaJxSXK`cx->m$~@Au{c&y51ljt)M&IedH4*bxJw zo}icmA+QmBn=lJ~-IVX6kq;m`sq!`Q8}$l%t+anU9Rj z5;tth``X&Lqh!8$WN(eEg6!Lr^(Q0iF`92|%J{;_sJ!!S%KXI0e3Ag1+?M&Bk@<)C zny}oayni%euiIeava!VHCi}d(o!h7Vy0Oq_7T~PLW4wF)VW*>mCnqp~vzKpQp1geW`sHtjjVl+K2yG;S z`Q!lF(?*V@FpxR`($go$hi5O|A3kr&yVQAKM8(CIR6jPx8kB6eSIpK1RxV?UEFlBvmg{6bZqHlk8)RYDS{nt(R$1aCgE_{EY0R-#^tTyr>2N?^&Qj9+dxF{xoJw6&T)la-0+ zitC9+&P4*o+AQ;A0ep0Vw;abnI9|9TvQ*tr9UQLNf}AT@QqffPyd6V#*)R|dZpsUC zL$t^i=yZuarNzRN7{_@c#YU27+MbZY*wP-ss+yDvwYd`6xsYWk2g?A40oT&qFcRt; zY0sF=Bn2NoB?9o_pUY@=k~J$YtA#5kSvKMiy)NiED_zwO078rlQ z?t;qIXcySDV)mtXYrU&5=wLDM!hx-2dj zgj3&f*ksLWQW(6m-_C!zakK7C?L&d9C?D6fkLtCFoNlE8vP1uTX}0~hi#A+GHmJa> z-L5ajZctbs#KMDO=}S>OS-<#kBk*qmp}qv6K0LMnNni!&E*>G7V7_wEolM-0zBPhq);+dg8OAH?FX} zhf;NYp|{xeym0TWN) z-_PRrIs7}O^2f^*zoR(AIl-$T=VuJyu(~IUoSv~4uV}QdmNQIWPO*j<&F+sz=rreTcIl8{T-LOV@@uXw7msgn zpK+zh%&a!%dat?SWl?h7Wz5_A@U4m^H1h6$O? zaKUd(-vp9OB#ZjVEQ3Rp9;5RDg$IBzF;tKUVyxpt?fpLZy*<2l+U^slQQ>X6%vBR7 z4eZR<>!E*%K70lGpr=ot*(IJnJJAWJ%g)2eeN25(>%e_TefhkhTTkCqt9)BcIC`oRo)(z$9)|6_ zr;o?g+&}B-bKYUXuWzj`K6uapVBW_M@0&ZWv*-JrsLSntIH+{-!@EktZ$B6-2ZQc*##Hp# ztEM%0_JfiAW6n8`Ds>)yZzLQ-uW_XhkKa|g_$_t)@B_>(Cm`~D{;D#m&wnt>ab4d( zeTQYl%i(Lg;`10&Up5qbtB2$~|DKxv{^UoU_9JHc^;vaxU;KdU`r-!(?JwRMExyKt z_vWmmnDW7Fs-$^(`AkER^L{~9zkGcxM-NAz|MIPzjPr;1`eW1feEGf!8ebk)RtD2f znl}Bb>OOjP)U*j-z5A6X89+}L{^7-YbGEzRj?bZnAKn<_=4RF?ZYNPYd}he~5(YV7q>0}Ngh98mHP=29S{c>TW8&g&C% zk&y~|{h?_`y#C3|M^*jWG>|vn8%XsDug{zBn`(UX#@v#e@oi<$QOxP@kD4m@V2_T{ zegWL(y!l1K@S9)FJczO1KB>&W+wb328vO=SUmh7tP5F-MIN|NP>IA<Ar5!Zu#%=+v1l?wJL`}-p!`z!|P$$x*`w7cGa zcv`6dy&}HP)0p1f_^11IK5ae}=(dEYd|llQ+? z)&P;?$w_61CqENNo#^xSrC(KzSDR{l8|8U+MK$sx*ZAc8JdZCE^2Lf(8tf@afeO z@K(TeGLMf@T!tQY!YCVz3bcCYoWA zF)`d^I$21ZcyCJS69KRkK+#$n;wUO5BvQ1JT0BKiM-nPpMk%bKUI}>>Eua!!iNRQ5 zIJFKfJfn|y_3_AZM;zjJKMVhI2l=2o^z*^~aOjsx?EaUVq3y3K{cLmT`&jzHt)<^> zF8wu@{^r)wPb?LUzg!yHw^%~w`B)wLcgE0PRzE&8KAtqy4q$3k|GqI(*Ut2&G1I=C z=?~MfC{08jrUL-gK{>>m96q|x!y_A+lM~bmuq%I>RPInBA1ZGbAgHfqr$iNBKG%JF zZViCD{{TCtv%IZNW%uhLM|jbBeyZj9rk3Y*EswciPo;N?80AZ~o2a{Qk^qOI0lr@i%|fcFMlExdf9&>-YR2}53Q9mg@%LTc1o=piq5 zw$O%?ZSLAhhJ`++(5rct$L+hu0)NnQzCVpPXHU^O(k*d3u+>(p!O*ka;;Q+mhsx;R zLA%uf{3S6R{-QViwbAN}`VQ+ob#v*JjJG*7-NEgK4_(@F*bjT#VT!KyFNO%|us03M zUix^q+e>$MJq4_!c9JUFX?*V0E)QQDi}d8(%fMPSbkqnZ1*#D0w(sbPG;aIQ^`M82 z1=x9J;CTMNoaCE}43KHi!U!z>9FD;Qg#9I zp|5Vt1G)2|&WMi2Vze=b%`6fxYBQsN`7>aQFl@rv&o$jDp;H&5lVt8=!y(6;?c3oR zMl^^45a;w4!z_e&5{RjEQl{5fxLgCtte*urM<6EA@Au)pK8AiZf&hhBy>ZtE_$dYW z_k8V&Q3|8`W$-;!_G7sByL&pmd9e0&`|xl&R=;jPI8jeQzv=O`4Ua9)>*N32-&XFR zwLA3qv&@E{?(F%$Vc6my!aWy?4SxUr`pxUBpT~#M`O}LR^Wylg-;VAMTiyyj-lYt8 zhpW4Hy?b{l>HC|m|Mhxx4L=Xot2g}int!g~XMer=`KG&GjrsWye!f|+BF=EmKTrAR zg0sBfpE>^&{BsOH_t&exxS8L$z!AN9o;x@#PLGH8ygmQb-y(zQ@%uL?Owfy$jim4) zU9bbKexJxkeo>^Q97c@?MFveccK>1Njavt$W@u5!IiA!L0*_>D%0z@;34W}0|p`Pjvi?xqal@syM zGgf(M^j3@RUlC8{$=p>D3e1=eTu%8;P3twMltXUm-BaEX^4GhwC&C|j^6=V>?E%$p zI5b;mqIF-LwyN=5oOr|CF44H&nrI}cK=`BT?t;9O@YGf&WgF%;@#<8_hZH?+ASECo zGf6zXm86guAu5mWsy-#?eZq*XxD}gvJ)bc6HZ=AdIv&SA7~#yv2jgfJui{X59O;!a zWzU#Sfm@ljPmqNtQ2haKbCB1owR15uY-Ixue`;q!j9_J%z^1md;5N6iP>+zO z!#wYA?U9{pLyzoCjXkonH225}c%^X(j6R~hgHEEMc|CM#;=VDu?hg_l!(`S*z_k`! zg)u0!c`(xI^@_pzgTh}9Yh&hWXIzDv1oZf$QtDOG)cAv$KN{9%h$|d(aW!SAf2LCE z71BidgR#FDDi5O>hI?a}3^QQqfT$p%vg}EU5#z%FiCOlTo_C}02aXa|da&OM4)P_T zfwtc=bc?W%o~$FGncIcz9MX<<Ke;d%vTKF$c+sgAq%576^!g6&LsXIU%VE2ZUzkC?{@FGW1Q#Q+s!?1?IwOM zf?ADmOG~RGRNFbUBFHGZwSxLbaDFHhK`)G`C3c7fcKF^2_*Xx`QyC^O2tI)PD^oUS z!OizgnNd7f%T>?DvOg>1HD=0U_ZLMb_+7u_Z+Fq}mzA+0=RW4_)N?juy}zN-ro0at z^S%+2^;#96V;j2LwezWr)tvjaoNx3LF%59b#J_3IUYq(i8!|Rb{%h{y<_`GhhSaxO zw5cri=JrBOrMPRG%Uxla8E$?nRVMFS$v?}?)dd`@<-q+~S&MPyt6k@zSkgoNaHz+D zG~F!=ci5Dt@GBmEFr#RP?VOV^{#MQQ_xZpqv*jC0YcbNz7s z`QBMDQeEKl%~jOkvZ?H*!VTbAE&fyt;;DXk`bDGR3zk}Sn~RH)Y%aH{pc+MU(F+Ct z#9{$j+wIz$;G&vkzn0}iwG#Vl^|M`guF)kQmX+f3dIr0KLVXvET&04dp24o*Sf2$| zp0HBY@oiZvmEM~7zLobk0X@Izhu^Sp6uYk)cKC0jZ`Sh3k)enE! zjeY;-#I8&i=9XnKUCyM$rSE#f=4NeDC#Z2qywIo>mi-b4pcJUHz`1)@M0~&N1ct4Z z`}^J1-8&wN^@#X}X)1TQ~0D_w}<)Y0Mjj9MMxU+-q z9Z@U=)NK%>YrI%DlPi9lq9#;CaJxbRmmops#*aFy6_CpDqp*X453_z8c6Z|dI<_05 zvp^vK6ule@^-q`{89Ve5P|s25bevYCtRkSAD2#-~k}GrW0#)rNtw{GXv-;U=h1)TV zF>?xqiUz?dDI-%GOj6U8nBK^30@pM~3 z>N8;$>pP_w4G4L#)r6$ZWhSvbtxO_KXR7VyN}aP=QdG+TO0IPN8a~RM(jZ#E%Y~FU z4D=r=3~LNIFtQQ}F+*o75 zjY;wo=*1p@eF+##LL0`z6|Uv~a3lXv-#=@s9V}7$Gmb~0!7(w!Sk1sFY3RG>xy z*%}x$26X&rOGdU7*(q1y9dKY7bYl=3ur}<;%t&3ytk0~hv~pHPan=Shc8Z2Q3Oa1T z8BDkcC5LffKj5X%D10Frz^}6gzE2qIS^<`nyeuW6!*fQb){yYby{D+%bknKld_PEnGRQI#JZ#rH;38Off@q2~m-V!IO7_pl@hQT>4 zCxD}@1)C%SVk)60WeAY{2dbguo>>E&$)XYmW%aFws=7uQJdZz@pPGjE&onRT3%P2v zCHqLT{DV3_i}6qdvqfPYCALFkM?#(=4mUkhdECFVfPbXhL8 zqL${QHZ1z7fgOMrR0v?Vi_W)=V<-!|Edw~*S!?O-eajo^hJ`zB6jrM*bj#4C*lfW! zzI6O<%Pk&-%ecRcgJsrv$xbk`jNh(Gu){#pqDVU;u3XMec4wOKq~uu*IoqKw62S@c-Ibe(W6K!M%pcELrH zr>#!c-|9a6wzJjg1oZzcbd0h0P5eMf)#>6P_4;Ly>V3Y5wX{slP6zLEJAf%MEOk8i zZrGgkIL*+~(u+yio5&FsX)pqBf1oMU~%#Gc`gCK!?dhj0<|t!~TfpSE3kaCg;B z?VUaUG7k6m{b?Mcxz;>Jde^^(pPu8N!H@6w=P}ys`&aOTwpWgS08jrhV!j>5CJjI| zszeA85zNx!wLnh_OL(R8xOk3AYOy*|4cl8Ynj@o)(6HEQQ7s)J-ho0XR7}<>RP}hb zOR;qd1?$roA)R757Q#r@-HZ1U$lK|=`J)ceIT^rCD{K`)@SU}~h$afdIRSvL=LIsq z3XTRq-RTwW(M6O$Dc#J2QP1OE)@l)5kzxG8Nayy_kjaLwj-4It?&=C6QGti4_%+`R zGuS|bAvq?`9)%HB4(vwDO9#nNf}YU>jV2yn#_Z*VZt}Y)ab`_Gh!zeGCfWm*FArbnc_eT;2Ck3QkE zK_X7VMBGze@J%F}=7*EoU1ZX7026MdS;gR?EkmJOGp}H(xpn8_7|8i^#YY;{CENR7U9@iZ&&YD@O*vT;6~u& zBHlu4(fM+|#aGl@fIWB)x1tF~*PRG%WXq)>2_BB^BAH&qs1*~Xq#6U$MO8qS6tc9H z(u-UVqJI*hKmz1gFvH=_n-*Z}kv zNdB);MJw9vKI&)I!k&!1N8Jvb_vLQ4 z5{b zOPd7N)RaK-;jb9hD3N$RR3ChzTM{2DuoQRwn&vNbL6H+zD6}-+98-JpQ(SRDMvbVB z3-f}8ep5GO^Rn3#uMJdNh|J%|Xb<2XK(kXvR$~|~ct&52ZtsiKYW~u`m}=>QrKm7| zN&uUNH+P%x@~N5`04?Y0Ba1XHVx8B+^1TgxZyZx89*2 z;@wAT%9x5?Dlh>gtI3*}7Yxjq`l&z@I^U$VsOMw+qbe<1vOl^4*(0T;W>`oV3@fo{ z0JB2DFrMr)Pico$S^CnW3(Vo;td{HKNRs#57@_e z0R#VNMOSO~=Bk;mmlX}gEObI>o5U5Co)lEL{ILoNPo#q>8P zBkMLJhe)YwTEES<7SztxJT8i8ik_-~FD7kkOTd1YdDatK?ep*Z^JDdGa^g4E{a^|%d;7!KEh-J2TCLc2SP{@a+ zc$mmflclU_T3m^zi%31FBw6r}sVw=&d?cPe%KRTcs)s-1lkCjLLOsYHf4mkCGnq1z z1Dr=P`&>0RmsQPE@sP@L=~zCtXFA(wgbOfF%5CC67p zf6Av=R$s{43)$g9W-8?bm9ct|nMzq_Df_aNldzOPaVaxjE@dNEk*w-d2Kfz#LusG) z`x#pq3r!%|%1l-;m#r*R=Mq&<3iTM93U4ogeFG{zeH3;Z>zA{o*6mz2G?DdBB@A68 z5&%?Z z=L>bas?@`WeSszIjuxfdta2*GYOl%}h-IFMoScc=9a9PSiOiGAl;To8$c?JD^L1iD zMaFKZlBStFkM+XCNWxGKX&Xi-3h;;OJcwy{9PabOqwoQ6a;}`3eLbNMJYz<~u(Miy zrpB*jjSo5N7q3G1LE|c%=eG<}J$|bnAKF9T*V*;sxBBtnz5!>A<8pam_tjL%Ie6%q zlh)BAkwbqReydZz)u|6V2JFcRMp;fu>G3x((an<~cd0r@3VSytJ3E=2rA*G!Y8A<} zr~)2V8FTCzk3Ex6l4&T(G?ZitN@N>m9TC?N$vPrkN2KeBs*q-lcqB($e7tR6WR>1y z*SX)+pv)@gIcc2T(e>ZMO!vhz*7}WjuGcz_Y%~vq$Tna18<;Zlnl|`Y9l00yR9|OY zRGxW!s;?=+zxpl#-Tq!(bh+vb@nV4=s7k8qD;Jovi?w{vw2~8f98VGX+B|^^*FZ?2>9U}`S6ezBH>29m-W zanX!XX%9ES$H(I0^H{_#A!&frpiboj(#)R$H>Ylm#Y6LqG;1)=y{Nw6x<`^$TIACTDbV@5B*sHV5@OHaj?TJWeKtLm zvsfoVtQzez7Cvp8pPCkb{&B0SjG4 zReo-D?ZvGf1i9n_mzyBgz>ojCE1t>C|G&AA-Onv#agp4{^ENN;zCPeyw4QG5??N24%lV=N)p>upEvF;vsj zNkUgYj94klUmB`PPDsJlYBu+~u!76}pzs}M7z_#(KxgUs@?}Z4Q2VICJVVbRsJ%=g zN^%x}mvK^LKaOid9C_>Yh;&=V-c1_ba0H|=%v6#_v)T0xPCx{kj7LMNPDz{VgC)pW z>YjKiKlx}8BL6nkwwBU$vOvKp_`|xiU53zEtn5P z#LT2X?|`q9kMT><7iZ{Iht+TFZ6g%7VP?nG^6e39cT@=u8VA=1_P1B`1#4{u?wdZ# z4lZIl6a`-JH4K6ASll?g_85Muo$6scKfUg99yxpqYH+Tl6-?7W<$Y|^x8~+bt2r6_ zS2kAy%CpAan5`kK6kRID(lF%7cpQ&mDDws_qph-iR%X-bjJE;oALur;IpX+?)Q(3h zAS&ZV|F!Dg(-y2(M-gr=lWbW~84T6dQ1N!xTYF7YR9U!xI7Nnk8x;Z}ZUY$28)6+X zuGtzz7?O5&y~VxVIygSw8ZoBWia)`i;Ay-S6R+`mu4aOq=^q_ESxl zw4?D@Oe|9_?KCQr%lMFEaiIc$ncJA+jRn>sZleEuBY`Ck>B}U(I>^#8f@3~^A5Ro* zHIk$uCK`w8JR2`(u}qYtlYN97rA?SYq4jE;?a_?wV{UC3$PM}7Xj#tU(mD@nUs;(Z z%Z27dy-|z`m8xt=Eywj*-cH}pc%Mg@>Dp6cP}3lf7?l7t6JVF@T8`(lbxK%5g%US! z%g<1ij7FvB{EKRoXMYM@1&>Y~tW7H@oL5zc)vu09t%_*meOzR-%NT8RxZejGGI*$8 zL66lO?uK>kHNe3p$f1#HHYW2oWE3hP<%TuEyr_R!p$HI^pYd|mLvwuz2#9_7_RAQZ zJINe%d6QD^!gTsP%a10Ku^}c=GB%@ZnU-PxH<*`6lB0X;o2f~zD~w3$nyQt5g+o9s z$&Kw9BN7eMh<3aGO4IQrMnn5-)Bo8I!_L3bU^X6aYHyp`!ybJBEso&w)2-mrh`JTt z25JLi#>I*m9t-9;Rm?HL)UyPJ5JDf!Toz9MA{LP9+QG&}{+HNLsPiO`MjxME z-@f8!CFgn$>rm~lBoKinc@|#+I*mOSMN4E^gW;TIW`kDU*?|rNX44Ptt0+(HH`fuZ zZq1iPxpj_VIb~h`*7>sB%HvTC$M+b>)K|wxZ`+DCC6hMxetc1uiz3+D(;koa#@VRY zD~ml`?4sO@7Rer9%z2h_EabhnI4`^7BuAan%a~##f3^M9h)(8Rn7~CeWkYS$w?x0m zWSxY@{*c&~q2TqTh4H_*UII!RAP33A3Mj|_Dido0VFgeHV0L>ZV=KOqqdRl60Ilbt zRLt5y)}CX|JXXxO#_0lHJt1?W1E9k497HMFk6{()yOL_$Dwc~ymZSIot&FC6>#oy^ zTh3jy*&>5`cz4mGrq{+$p+NlztxEubH;qLU^Mjm9F<PAu*ow}0sYppU#4?qyO4Sgc&3N?=_=~O1E0Fpp$zqRVCR=u@0FUT=Y{G(LGDr~hp z5nnXUahM{4ZaT<^ZEVJ;CqNxpKK6RKVcwQCkz%UeM;X;E=eHpz52u%)N69k&BoxQP z+}9~g*6IY!%~Qh<%kYBja5Bqj_Esu_d+BDTH8vRkuN;Rxe~YD%ug zN0cN{-T~+OerZLEHQXl9xrk)I>suB6sRT_3FOxiEakycL#sL1)Tj+?}sR%I?0;~^; zw77^Ty3NLThz$Q&7?@f;#lceSPg%G2_~(JejZ&#K2&7>I9Q>A%-wYa8mKb*`+o&i&fF ztyWEfh>8^A%ivSfD#o%jR^D*3G*xKtKhKjF0Y-PesQb67CJ5yA|_&_>8Gjgc-5V#oQ~s7f)d@wjjb{4 z+V#cAjnrej6Nj*E)y!L5U7c;KYbNnsyjG<$cQ!4C?6}Y#_)wUgM}>t0qEO`Ip_t^$6)M>rmYeyW&!p{ zuYA<7dV*gl6(3@L9h5_B^W!p$E&Jz}NXFEzNP!uWfU8bMqK^^H|HW9h`3j>!fS`-p zy|dahK+yhxDW1eUKYxz0$FZd5)^UvFRTd0T) zR5zj`wvVLitke$h6226RXpYX8 zqcf*h-dUiZoJ%?8YIo5+qupEGqk3iXi67hl{c3D0BF0~&hZkjv_3eKJN5Sfm1Aohq>Y@rz{Ns34S=!U3kVura_OxOkNmx=R zeJa4yG~1Rkd)_o5wjLEb)sVB3@a*U$t{2tYsd&$VdnptjM8ohlIEL?10lhG$u&}2v zL5HS#3iH|&=C@CwKzu*M;oy(he;)fk#s1S65FwBq{+$@u3n0ybvIeqesHI1*Y_G<) zx1V>(B7Txjmxx*e6b6-e8;4h_i-fP^Zr43T>5vc({jymeq0uhi(1vvqtm2;?Hv|)6 zx!5YBYg$M7@}xMvo}XtkKMGacSeV}gw!)3@2l9M|=*-rO` zo5*_ZrgXo+lPtI%q!mXiYvr;j47Jxc^hl?MS6BMRAgMf3UuS!kz>ytYhf&`tXgZw0 zLE{LA9X`WQXKf~7*$=*3`h_PJfyEC9P;n`vmR`SkJ$`X9FQUJGJG}b-k5{*ZEIn+k zu3M`&t<~$+YTR1AXss?bnAFb8AwJKVx=>Nms`#7|XBa7qzO7QK2_+nB*eG;zi(Y%v|P8@#<-$6jEu`SZ{Cc4JIlJ0ygAC7`>;54E-98LEcJoWoHGvM`Ox(+ zi9(Zi_!<4js~7ekuU9*h5P(d!brdV4+eM8I&oAZ6TCN_DxMfGe33U z6Os|X8bqVdrLPa^s{|lEBGB?Tgo^RSEKtkeFzaX}%M;}gqWJ|g{qRFK&6}WDL&B8P zm@1%SFJUM`$kMeWcSN#xdO8Qd8UZ-11AxiiZ@)>TWI6a|enLdg&afUy5Ybob2;i(+ z`ij}JOv^4=g0g4b(pS!2`HbCyLrPLs8#0to`OXC@pRqmFuUKi&P3F+$*KUT`Pz+Dk z`<>n>MyBgsTp&Eu+|N+02cGkOi*a6l23X0a-;4JKhYQoj@ z4n7C!+`DMYPpaWDn_|2PCf;fOwOV5BPBV97o@1y|TtvxxqA3p>RwFSq)-fA< zCnCtSdljK27OVfPTJ^%51ImVl@loc(Vyfph179X)uDg+8u#Biauxz&(@gYw}aXBb% z@G(Vupm0O7t&ycil*`LF-%nMz`>@pn6_A=_?C%LrhF=@*tcg)$X@oUn(buFCp4au0 zxj!HJp|Grzn^Zt)eO*T(b+A8ubL>G6l;fP~@r*rT`G$^Yefk?N`JsviE-n94dzf(% zrcK;x@lGfnILJ{Irb-4FH$sooLfHmv;b`O0S4A6d6fRoPU84v+UPKy+Xcvy7jz<)A zoPDMnk;TiO%$5yOQ7rPn08p?Cs?LYe|H_ZB5*tsXZQhL9ZyD%<{YehJDvBI5S`c2X;Z}Vz^ld+5o{kD zjE;T8p$$|Y;czK;TYP=ZXtiRUuVWBaakmv~oft~7NC8<$W-gUiqJ9U1k$7YOp({O= z5BUkf7ZK5vl<<88XKeo6AGsajN@W*u-ZQD`L3+@PLAZQNlw#;qd{5 z@Sudp2St#Of5=$`4`-k&?3)60>;GxZN`LIhm3KGt%3BfLV8%Nkm)}@+itJ}N$r=ML zEc~B)v6SS8|4M9x5BCC_qi>4Myug&s$Gt7b8VJyix*QEKisRzc;Uf3Kj;lxBNu4nB8}o!xZWNsrGwo2awAWsnjIV8 zSYcBE%{Gxgzo&MDqe^n7w_W?59Q|fw1HJ|Ub?GZFBef%7?(IIkI(hIR2v+WT+ej)| zM*)%>h5Zb^HA^5FeFX}2j&7A)zF$kLjoOrMv!1|}D!jD)a~e!0B18KEUYeC$fLv3Z zCKn7Ix^w!nT2&Qn`7}#Ht~-S;SRgF-zjzJDpib_Ij|GATH<=|ZV-1FwLcq8e&u1>L zix!YXw;UtuSd@*es-8yPrO8>8g?vCDRhezNd{fQ5dz6LgxpYWUxP0-#*T$7P<<(Iu3`34V|4KjaBq`Zc6lN~FbLOC1&!W_+ zOJNcA%(_M>FA0?VHV!%%y)8Un*y!%}SAPvwfB*EQ-~aSw^D+Dfe+O%;pT2B8f&ZSt z!wx*`zyt8cphLe;=w*vuw%6!o`w{&P=yw}_A3mjohfg2T?-TlcO22(h*rMMZ{C!5r zz&-(N`px>j>=e!w$VXenP*`@%IUTdWQ8s z-Xg>vZ(}u&clc#z9e$sz)60`bnDXSwHvJ;VCr_#TldXsJi}gR*=HDmuOIf!m>kgsv zWM@FX_~~h9jegfL;VI$x^wAc*^byF@O>D!{0Tp~oXg%F|M8A~0gI}Jl5pK^qkLi~_ ztv{mQXZZVwlONN|6MlI@x%&LFNtrjF@C(xZ`Pw6VdH(P@{nDq$YxGMU@%#zm^_<)O z{28S@d(1Bb`o*R^e@+R{sc)Y5pV2Qh<@qM1Y_8Mq6aGYXarFbF+Vd>}wMAdHb|}*} z)w@Hbcla4I_1CEK{#u`YvGP8Vw%?)3`$UQUI#u3(NGT83>GvW1KBnI%^h;T(<^9Lc zsla2Z<1r%De@cDTC*JLIoBPkU=$BCJKkv{l*GrA=bEEsz=sq>Nze)9Oa(QZcpPJs^ zqDri2)WXe&T%4Mp8Eg5i22Gmyr?yCXy&w%@9K==))e+FCFt^xJWfcj^!!@o%EEyjL}u-{_r zw+Q4eYG}X5L<-QMye$u}wU&O+2y9f?@j+*9Cn@{(RX;J*uie@tdV5wtgZL)_u&ryKITu4AJcE2U$*cU zi4MP%@Z<^oZd3BpHTr!_FV85~vu*tCGpqp>89b$50=2~nJ5=uuqTgA6^o)M{{DRrm z8JBhJdibSu#%P@|T7San&nV>?r#z#S=bVB>gx__3c}&00_yrMMA5i*$(+SP>0jFRNF%o>Yaz&Xqsx_m$U64QjdtyI!~}4;CF{!ka;^# zo^cAwht3lQ@MN1_b~t4RoA{Kw>nV;N_$A^$?I69Mu5-#mdU?bzkLiVJ^pq-n${qHU zI_xQ9{S=w2^K|Pe{bH_X4D1=I9Gz#J>lv~<{63`@lmzgL2tM27bZYK%M(}wDiTj*; z@A(sK`}3##g406hIm3L8{N8!a0GB5gM}i7z%$>F5j?{$L%;4@i@MKbUR6j5R>jsxx2&2gF!|?dSA@ z3L5+p1xcpCFTvbFWVaad)+Pem=9e8}l^tf4oeo0Y;Wq6&qLfFRLd?Fynr0i_Q(eL(3v@^(-igI`YBqH4A|g_^mu z!vJ;&zz%0aO=5iwCqMYz!Cx9>@COq>iqP*<`bA={cRCO0_c8rG=TBSsi|QBrKB3=d z^vfmIIeCX(aPorR0l#349qMxULn$~vtaqMKCCH!a+`TZKF=6nKUmnxT6MosIY}=ds zLMb>g!7oDLPF&wwe@wqm=@&8DVpv;G=o2coAR71+PB`mZeSYcl%QJpK@LQXlvPmhM zoU%zN15O!G%79Y_l(NMsTa>cJDLAjLZ=(wQaBb}|{XW58QrY1TeR{Y_zXSYz#0k$S z*YhoYq2hf`LFxODr7!%!lnxCq5Omx4%aA+I=!F{i5XKb#?(hqhc|H0do;K+sFO?ttO=s%^7fIm<1mzF^NXKNk$eaJ75=~txm>32Xc z>+AT-=sbJ+5PzRhJ@dt7Y!u7OKB@2hJ|ozFv`)W|_yw`)b8UTGO2TiS zez)lp%E*2n6(#t6Ouv+A^EoA>&e8AVGzq^1cZ+D+-=YM@vQORJXDakjW`HV>%maU( z(C>48L6kQ;oYJ8b5{K}IU!L&`Wn*e>;sgu7)DN4ed-OM-a>_QM!y_Iv!H4*}$uBsf z;CGW=use2mV%q8BT(r}F$}d|WM0Pegg%I80wF3NkO21q5yF;Il!aKZt*x7tYnIAsm zmjV559@}>Sn19dr)*Km7N=|t z4z7WCuyWpqKZ3}EwN3inq8IEk_`}~6I9B4hg?BJ;0+F7SMcOFs7qji3Hj=v0g=jmhoWoSDnBer%J+Ror1{XXND z9nr3i-Y&{NVCEU%%m}~SE+qaI&k9>KA8heV0HPVQZ3`rkAGTQM28;-mC;al{si<(> zAmn5EeMY~1rXYQK_>_L1Y1Cvo5>TGRfIXgQbi{QeOdEoz>-77GejjVNcj#rEUvOUC z;`wW9Ym-`qOtMAF3pNUWJKPx^YG>y$zdWVi=k)TBQW&M}r-Mpw4)|q2Wd>XZ#hL0_ zYOrmaDTUQoT-+S=;V@1Wp^ZPdw;bo7FAnIaAD)@{+65q|spX^Vb$ zm~`~=oL~BsZBvYjZ6Y0Y#12lJ@JnN(LxX}V+d(k}zkMb!r932JQg7`%xQ9Vzj)^k%Ma^Vg0p2e&1{ zoxc8+q!I6h09m(*7x`s-OY1S}Q8}6)5w|^Ip2T$|{4$3<6ZmvC_qD>r2!a)#bE)S9 zZ<{`C3$|R>(S?|)+c>IL3P+=C#)Qmx&1XQ0!NS~y4|2YpJ%1YaOTeOV^zckBk@+?cU7Yr@t zHZ6k ze?tAdO>DXSgo#ZfeVa%6HjS(8r_Z$s_$dufIoD8C&sah}ry6PHw?!L}*unfl+4`Jq zQ&9QIbA3#0k$zK>C{J{WB0Bp~Da*FrR~=Hb*3B$W^;vzpPgK|}W$7EEeocJUVQ+V~ z4%|P`z5DZ=9ZK`mEz|x(rgOmRkCTZ!UTlTJPP^H0O9zkg=&}FjX`O+(K=1QS zmM3>NhPu0yo6u-Na8NhZ{2biXJ}cMoODu6ZBz4m-GFd-1U~ocG|EQeiKaG<>g9el!jP= zq;w;tyW^q?TUqZIS6sLXXbb)&>teLglvG+X2(Ij-JH}_3d$prkC!2Z2M>A)| z<{#u_<(on!evxjhcDfziF54(s{#KM+<@*XpNiq(D*eq4~Sgnw6g$Q{PZ{v~smx z+!({@6iv!|{CSDV94Im)-Eqb>VB*J(pPPZF=h|>CB7mT-@j>@>Q&(rRJ;`Q~7oh&- zYR)DKR?Et)R>;~-{YHyb9j3cdbz?+iFLY-b z2S41e-elDeS*K?gS<=HiHmgRZ=SzR$c7Rr+ENW3@sx-a6E{Bs6a^m;g-~W=s62{xj zL7Vb^$i25YNI_V#feeAQ1L)D9O@j7w;C*Khr|NQ+oRj@?kxW0cS$x{&*g}xXep-?hXrE+zh&Gq1#=kw1Z2g^hQfwma=dxEzWX&|2dYCJqG* z43B*keuG`K6^U;13b^7tLJwha*GZEkcf4bcA7qL1K{& zTSQq&>kut`4UR;QNwt?jNPFVs_&5tK9I?OV;eBq4S`68DONHc=C4iMVd869KaMlgY z(Q*>zd&4vtkKZL(WZn%i?;(g`#hKrS8BmcUC%7B?S_9h|W%!3z{r1a2mz!q}S4#Vk zRO^?`tFKwyA~0(CkTh|#!VB>Zo4u-jJUmTOtKZW4x{Q!vvUA)2oQCP;9+~K)W1qh` zEta|}UM{Ht3|iDKe5qk%U@iVd9mIVM#o>!c9S06y{ks`>B{&8!$PW=V=d#kayAVQ< z{**ye)J%bkRt8r=)vtcVd0?p#R_|lLubat~qK*v45k>fd(F&pi)-L1lIB)4_O<+3y z2ag(B+~momlKzWG7r`lbEH#Bw&N64ks|oT}3V*8HRYNi3mW0wOmX@>%U}j&k)h84U zB}JDyQjJX(k(4(Hk6TNE+YaA_hu_!nD$`=-{cZUET)UaajtQJ;7Ls-f3;$l+9)b4Y z1ddmgZplopwu6Hv>sc~c+w&=|5o$Wu2S^ltz}|`J zNe1K@B_XR}!z9JnOXJH1I;yA9(BONn?WDM}qwN?K_oy%s-OT&(`Kw?dk{sDcGMr&7 zn0k_pbdsH=d*2hu;Q7hXc*nuDF+A_=>?RIHm}xqb>B$F&d@(egXD844@I1xm>6>7e zf|kSc>jytQcQ69EPI|@Jxkh#N*M|Wtsv#pd)AP5-(Xma6V*ZJs9~RQuL-CLj3g%*hipvfGr#J!}|a?}0ffIS9=r54hy+{N*tl%gwy z=X1R`gtn&j-dgX@sE54F5|fH5FC9*N4@tQd!7jFFuM#yF59#vJ1* zrvOY8zDeTHTo7mNs&eI4ppKcRwL-lXqlmBY>3|Pm%G|4h&Tk-zWezkT86u=qqy6US zBGnn}wb2yp*(@^|2*q~L-hT7$!!P2Zt|Ac@Drm3gYnJ*!1Ti32gVT1vZ6P=DdSe3Z zil^Q&%p6!Y(W#Xs({#v819PjFSE7LE_r+O^u-h7trU^>ZNv-tOJZjYn)U+hMQ;86) z@)r@1RVk(G>;-7nQ)Bj?yQpB92a0lQp+ZEW8u&L4aBZ~e&_j$0E%RF{D0pQdCN>sy zMA{AQxvk&E?ke7+-W{Q%q8~ROTsRfAqNE8x|BNuI7)HHIjL&Cb9*lxK=-GX$gSG)( zn{hm1$GhSa4|HqZWB)z?YcPzzmr6x+`pYj;sdzP6doPuWpZ3U!94QsqXzMppDsY$K z_1k9-PWbSA@@fcWdwF}%f4%*7tN;G+r~d1Y+lT$ZV0&+G_q{K-4!WcE+wV(>9_Ufh zS8g}L)0~SS9lZ~ao7K5_0;<&6beu=n5NgMyMsqhE;)i276^)X!AA)!^#`7rtQaGs> z;&kK-=RbJcnH{|O&e_?6(dfbDr6U6XkAc`K7EN}VTEt4PoRtlc+I? zR&gsj9-+TSStQMW34?Sn&0(43JFU)|NJ2MkvflMaGJhUUet-nOQ@p<+7l!(mJ#t6r zYiRM8%tSTbfdz7bCbAJK(!MjIP@tTVR?R?7jKS(V8FbHBrsc^fxZIrPc@mS4a}Lbz zOrzB!`nbw&5rb6Hi{dNXra%Bx`IRH8NGy+nEd137vhq0$C&K%$YTqfa*={WT^YPMO zCGvLc?y=~mjuxm-Z+ar=gEBd4Z=b`0Vf!q~^Dvd^o8xIZCwYL=+MINOR(*z7@nkwL z{R4IYEZK*j=VF2Ebweg1g@~hApNklEekOU;b4Aguw}Q*v;)hL@bN%F+#@er1eRekKnBKO7y=j9 zO2W{ga#V~;Q6VZrMW_T6AQ!0;{l5kAlz7zH36E0o_$Ej(GL+Mwq|un(@$28FaY%p0 z_|~7EOfdwvvxmnwbSB_AyTd%;r?<(u{J0ek`BAT0wiD{-y181eRIie2{Z`UC%ay%NGU5D7knH7vN3diLDo48G&r+-MM6x^tqAwmw`iNdkwcH$OMK&JWd zh8WV2qZ&P0C4sz`Cwb%KqzRPBDOfKg(aBw$G{WO!+$O+dylFJfSEIP`@xwrd zP3H!>$ZT~qk?BB>!Wc|L7*$Wv%qWh?-y}EjoWp)dZ=J$Yid_Yf7ITbqz&*vnWfkLw zrgEmbhDw7JPwO(&Q;->?^RN5w$g;PyS3tws1uMmwLt++WRngvcMEC%Q9u?*VR-C#6 zJp79mj}|@7zYWf#6Wo{-9g5%H<2)~Dgzvj#tAabR4SH|tlq~U6@ z&yl-V9N(}>?!9qIjwi$zxR6IhR|to0NShNffDazVipProOmo;&C~zSYw1F-Jk>DwF zIp=XC(WgbkPzj;RjoMmkKLimF`cKfW_gc5r3T;S=Rk^u6TCjfR>(3g#F`yK`uq^O< zF(4`TNn0_VO83&2oetR$rvKIHtak8Qt0TIZL2C`s@M_`}gz_1?mR>@;zzuDb8FLiJ zikMW0b~C7eJTZqnNK6V$`-&ImoF3WI-=*QXmM8F=G7~Sf8NQ2QA~NMr8@(a-rZ1lK zrjj~iq$Y?dnDnOw>O((TOPxedUHCDc_)k~I zGT1FPa0oOQzL-$EbaVrOZpet{cB}&OFFzj@&I5CQ&}y-p^P=9TOiv(r@KU&>K2~&n z8-B^>(==F31e(V>RgV{@Dguy2j~Ahml`Gu3{`*VqcYNL0On}=i zszKETYI4TP5h}HyNq|Hs_C~S9hN(F4E-Ncr^qiH{EwSs$Rv*0ITFOB?w@zo>5ff;! z#k&E6PDf^=v)l`x&4%$>c_s_aH-q74+<>oAO)i@@ zI4U4Oks*=Yu1&+)5b7)l$upsCVb1c(f;e@kO- zS{=bWC4F%Am1-ob_$F1V#NFY;jr*c)6qjh*=`2cIc|Z~0L|Yk3{m)HXgGVY#js{G! ziftXFWqVOxp}?Z1G}Nf3O18?%hUc8sih-L!`FR-24!8m1m$yJ=p_Z(bF-~aXQ5;>= z-X>cz_?avil~fmu7-etp3~w?Pz;x?VISEi0(+zEl!7m;`B^`slT?#ZKjQU~#fp~8J za~h1ZrkI1ZO$pk!)&NVU=YXwTJH;KzT{5*Src-gcOF6XDzOo3W@s*3ovPx&3r0=j+ z&2$tc^2Rq$nG4aOoknGGGe%By%gdb8c4#JV@2MqN7NOaLJW4wYvd{7eojV%{3u~wR zvgy`t0@(&~xB9JQz*y=S%NhJqJzrg4FA02UtC$pL`AzIyRnlK-yvBp3JQApbtV2Nv z%VMa&=PRo?6uJ_sFPGhpt`6arky&Gzl+^_$-;~wZTE1Dhz!js3!-~jm*9)tii+aLp zHfXpatdNXWh+*r7n)Y*880OL;zg~V7muXNQZ#Gr%p$(|2^q}(kvkE<|8HaPdorB&@ zRG^KlSYXjuZ8$Ak{ut&WF_)SrUZFk;cA_ze!@Zm?yJ{z7)SGI1L+!9uQp}AHDROSi zsLRe0ekBewTV=Czq#K07wn-u&)zFPxr={4C>o)T;g`3h0Lzz~%rs|D=k=h2W1w4#% zn3s*4tx}<|%;ZX0=8F9>k9HzAb zi+w!b;~jq~8ORpNRjUqVhG3nbv|ETq@p;o<9q9V`kn0mYQTRC!eb&@_r!F*JUIq^m zShA^!OXa#z&Bmcs30EgZG0G4Ue;AC7Bo6NsiZ^vKl&k9pVt29WvhXc$BPzqvm;Td@ zboFUBt)N-nyR_T7K3rcFopm{mPEPYZSk}ZR{n2mJEN?2QoqM78aNTtoZeEG@Q?nIX zyEK`|{+BRWhF?qyd_p6MG4YCatFO^lTQIt#IolXab^J>S%K^m^oo9l_ybgqq1~AK0r%yI*U+THZzec zPYN4`aNn5M1iGCm*L8JyI+Z+|VSW)}d@=)2xk&fsn!9W+Q0_%-fmG^BOq7vD`3NKV)) z7NoDl1O`ULRw)y3DF<2Nc!dBW?N!|}P}BSiKP_HL+JKfaQ@0<>1J4{m)ln{OfF*$q z3*j;}lcg=dQp~UztjfT&fIAa;7K2Df5v3j|Hjx^ozOVFqZ0qq#XBWpAmA>XKURv`K z{E6@N_n!p94#*gHbEe>+ay61KegY2XE}*q&Cp90l6b5x;S zWU#)PYS(JThSu%{8giLc<(r2$kCg7&lm4varjTB^9ialUi=okL5E8cYY`|YRXE`?R zJ!p3!1k=!$lI;g);MGof*F@CDM)uWH9cbQ!40bq!thcz_AQ^qWol85zI}`2SS^E;6 zvZ!2fC!*D8wZ`qO!j|TDB31dIL?BG}7wV|f(Qi4(c2{m(2zA1;$*V7Egn@W9NGo3k zDHE=An6L+y!z>|pySvSt>C)78stOj-Y(&eIEiY$0 z=O)u!zsnTMoPKcq$mIx=xvnVyJo$m(vqq(Z+&e|N!QAVv9j-v;pGTTu__!KWikoI+H(|O z=!0(noLCuYvV$v}N#bxTO(qDZd;uaf59oNsSwy|pnEzjNSXyokeq69Iw1~8{rMUd_ zuWX7sFs1Fon!BXh4x<-WKJm7Oyh*3Fa3bV7{L+l^$Pe$_Rn0Ui8<_D+fBn%$yt@9V z8+Way9msMoI_t~JG25I`^5jft43jg9i3kAgJOrSf^=@oz)3NSuJ3y;B2w#v&t2dD( zzXeJ17i$~qk6L**uO&!l-D+6A2yOBg{@O-o9l?JUY4m1UC<6jR-^P=E0IDZV&C)rN zm=tabA{ji+1S zyLu;lVGKQ4LnglqkJn=RAJ65n#)iIM!}Ha_ppKUAG#qS|R|ZFQ)TqiA7&qdyYd#-x zrefUiyUBhxat%=Ja8?i)y2|8KZ%}u_fU7Do1DOE zxBuqd8>?lw)Ih6ZRTW#0`pZ%1l%T3xNOOLTN7l?N$sl;raCQa{0@#Ti-e z?4-$=+z1lq@;Zgg#ly!}P3dM?dPFfYqfG$YFddVbk}q~O@DM@xw-WTGwyCW!v-LLQ zsv$?Nuj$;g4asLsSK2t}4!qd|^4#-#jT+i<`XW{wS9$5?keB+2ukJE>j;o#N(V1PY z-3Kyj#G^gY4p-Pt%(3&hVxRY_Dl{mAp3~8Z{Iys9(b6CF z23_p3OyJ^}2jI%At65l4F$+wR$#kp?B)k~MdyE%63oBZAg`$LZGgc>z73;4G)DA*j zC#YpGHVd*+!!>BOE$N!I>5_<;;)o5-23@P}Nx9&>dxK|7=qr74Mo)Uk3c`=k2RiUhb*njDF)@ho=$+DZ{j>wvPaVztkQKQX%?6$XeW@X8alzgY{ zOfIn5Uom5r`^I(mP}QcSbmeDUJN;K29th7%@FsnxQ{!GopryxQTAl#)yR(%>=6DqF z@f9mHVQiX=bC0Tf#Y|D{V(?LxjG^zOW8B4W2j6HSTfK#xhGWX`Eh;nVWl~|@tzk5` zmlpZ>?5msCJanb2YG)LkJ4#c}K3jXgxSD@U_HkF`DnRd>(MZm;EgdiGfe#(0C(I-(`Z4rjtMejP)_ovoPlL3dH{ml`MrdKlU=Vrf%=AxQ zz=b!2(g4p~XN8W%RWsb{>$C|U-Ho87f9?`ETFoeD6e>|Vqj0)VD1q6=@iYq?Z{1}H z(4$;ilq+h&gUqF@DoQRQ$X$sw#ekT|dK1SZ$15pDFK9N+-5Aa1O;wd;Oxf2HZ=63tf2$U0G^E zx7?=x>a4B3=&Wr3%XJ+G!;V&xb=dz+u(d5NJ#mQ=JK>|hY8hH$J)qp_=p|O1ZozW+ zmZ>?TCq0{(%qW+(fo*VC*0q+Qo#OzB&E-K_UJWEADF@-jvF!(~e>2;YjkG3D<%_$QU0({5TUt^_XPIuz$jWX`0UxL)m%bF1v!V8dy^ z+O_L6`fr@-Vp%R+tpP#`7f-YyBZLabk!BgwjfdTJx3qxHX#vd}EjRmzszB6otRIN| zZ8T(~uw5v>_$h^__~rUTkY_I+KZoUcZMUs!*Ix?)Gn53NBv9VohPe!Ztbn{ARJNs^Xwtxs2)>maq%b6H=uzj+2Vp60oqBAv%l5TpN1$ z)^6B>v0vG96Y=(7PFaH~r4nCNQcm|;ykYy;Z5G?$73tD4*B+&!US|#6POo;nG5!qk zXM{f!RQ`_dW0KbHhbUV!j4%Wo3F6MDErv&35N`CizSecv?G*snfbR)^2WCf)X3);} z;mP)wNz?hCPoG9tPOB-hZ=~Ih+j2Y@)-7j7Q9NXbXY7N(1*MTAEK+!fNc8KQC_^J_ z5jU<8Z6bl;&J2t<#R|$iFh67cUiyvNxpgTFTBTXc;C#_D8Dg812948mR{xG4I={)mJ zO6##uGFIT4N|Y<1g%uW{4%7*?aDrIFg z?3{G4yD45H1f4i#Mb>gFZ^cV9<6fgZt9I! z(O$pjjzN46SA7aQ+>GR9&w2L;sjN4wa0LvqDd-MHf5Er0_{LoZABLs57KtY{fksr? z&9Pu&ixm-KND_58VCre>8~S@|y$f?;$ZC)6KtS^-P}#x|$9Tn_WO40(dD(H6tSRLk z?+=BO|LT^vdBYwwZ1Vq=YimJaB&x4;*gCW{bl64M(pt#@Mz4AP~6_1lFtq)}=1bJ25^(w$P-*D6(g*kK~?<3&>OnJkUx9@JGQhn>?u9-El zsWx|Q@GaYU=*4#n1aO*EPdetHsy5te_b})BVdb-vacPVGwtiPeAORo|LN7LP4lw$nc5m?!Y z*xhk^HN@~Icj2PN0oc1-imAJ`1!nwF5|1yb*q!hxZ7$pmEwMlm{`c+%%W&m)r#@58 z*zW|T*vz_HyQCS&f>7SlCP!7i^IeoX1L6JMJA>hk!n==8vEg{v!ST;&lrAh)=ZP}D z)_Pa*OwM-hHlOSF^zYPLx(mO%6NncEo59@%s5MgBogi96sokx)g-Ow!=wH|q-Aw}t z;&6OlP17zc-wlw>MdqETWxA@r6UERY@Es*L+h&!3>`rq#6f^!?8CYT!Enf``Z=v58 zELx4;7ceUmd^I$izVp?73uo|S=>}EK@_n$2ErVwIc&d6VHnE* z8n&ALJ`K}LT$fkIiVWa!r{SLmN6{@rr5v|f!X!w8GfV|U_C@+Zxf+V2$6HqfUu_9+ zoE_eXajcZ)&4TygafQyM-Gx#Uv?>aF$XixnF{E6OP+O($G^m7$6%whid>WbV5xR_X zw*Yjq&aMSdsTKI8&~e|qmdnK|`C5K0!kH~liCFg4)xpV?Dr68bt%5;vHc4W%pS@yr zG)cS8L=V|3#(a0>Q``{$USy!DH1^{YQd16m=jzkSw21TjX{DQ|)6i=eUso?ykMbDO z8gk8E&VY+3T>oMoxuBXkSP$t$2fo-tYwQn2z1oi0%K|+@F+N$9s3U||$B=zV?1q%` zQhpkDjlUGbuYol4LFRqQp~fK3({?lhAadVJe8Vj)_)0rj;*(sez-P5;Y3!3VqAXvW zJvfafxdU;1M|a@U{En_$xsd!>+?-Mw#MLP+3vFH(8ECT7l8-=-C{j_YP>EGa;J0~j75i)_v;$_+O8XS&8Wg5$xNBGShA-$1h^b7e5S>G!E0%U_3@#aJitOt~Pfo(Lp^q(r z!i~h?ku1m{s14&$KF;d;Lz3TjRy)qi7Z13;@}PX6jmmP`C^~QarD#RLGv!rL6tw9Y3 z>*zj7lj)?&-40f~lcc@_!l^<1*+`E0A?r2pW7O~)G)Q}Owa%~k6lMZ_h-n|@j;ndK z>GZ=f%1Q_fdI20|Ns)XLpumne-d!%C)HqE;=%v4Ctfhs3Dws<2W<=v;?WUFx5~Lgn zJSI_N0`;DT=V=nJj>F>|8-zJ-YRZG)D;pb&N$tkQijYi|w%X(gw!Q-+1;rx{A*P2d z=W3^xrx&DBN-o##jZC%doJaZCsteA=)gn?A<(AB&5*qm=WS0yf>%6?Wsu+Lm(<6U4 zn9UYyJtIdWW)buj#15E*HWEnMT3o^jhB2<|FVyFRZbCtpGQj|B3y$k|Zz0}<=eH9*x#P|g%tcAQX zsYw|Mf+B`UOY-Xc%}7~0#0)|%nUs`0+?Kd4Br-rE%$xsiO0N|tO4(M*fWlj4G^0=tee7aD6jO#wLr2$hgR5GDt2B-=pv(ieU(o zCwx{)pegVH+LCDFWp<=TV*f={@V&;sO*Xfv|9 zRN;&x_Q?bP(oViv0>g&}obSh(LG0(%|HTJi2hwNPVkoL~cEJQw<>605w&Kzp?1^|P@bp~d@< zEZ>Ogw&n=(>M+Db*-eAIQHmwfjNFCf8R$f_*-e@5vaFidi*;!?vVW=TardOWrKjyT z=!;uz|5P~Uk;Yhy?X92<*s3@VoY(5WvWzxdGpm*KO}tmX_MJ`^Soq%1JMwVGz8|N# z4r;t;bk?+;IZT$DZop}40uiZaX(boXwXEbad^Fz!xp2{RCxXpoWs^;^5Rces)v-{k z|Mg7pvU{6e`uFGszEFJU;VN7a{~HZh#`x=oESJ6WpuIPu{cDD;K2b=M)c+gG|H_^r z*T-Tge|_&*hPUvT{BJb88RM@T-dy(1!~5Qd_D3>Na5gzBvru8wj~i~C_4%s-D^Uth zxql)if*zlo5qG?MBTg#&@bI-Af3I!)W_@1!y>_X{rUyqsb>(0PnZn9_F-|+V#i8lR z>XRF3X}1s=2S?!;gv6mZ|De4aW4&3voLrpWNrMt?VYzR$!au0B&{%}>-@MIqifpvG zd|!Efo2~Z*?%w8GbEx%L`#4GR8;-Th0F6<#;stR8q79F2y8A&}82dCG-T1-rAceLQ znvQTR=mqT0vU!zEf?;nvM;}1j>Wme$;+@!s*Sc=xmatIaHjX5#|})0)hl@+Gf@jufz7< zX^@5^eucWfh+>nQa>B$uM%9-&WkQ&1Sk15zGtYVb;HT$Kx9q>qnWDcHV6I{A^y2oY znR`y)c$QYpWMBqICKle8_AbwklJN%rX*%hbz3EXlOrs;TyzV;x{oneRL#M@_?Vt~m zGsNx9_nUiPk6EHH1ExDm_r6C1$DSf~ORNVCPNA4v^@G;T!d=d&gdZf9pVaol!*-7(xt=68o8XsUVsV2Yyq zjf!)w*$tdE^WKK1>HIpwwipurRh029p>EaxNX4gUIP;>6?WAqlE2u6nOU}T8Z{gWe ztiis@iafjN$9NPTgDO9&&kif|nfE^1IybUt?fNbQHR~+sI;VL)={|VyTLu~ze`_b{ z$%9cE9OtWRPap8Nzc}7^(THl@1LXiLGau8 zgR=mAmOdCqM-M<<%pTx1$2QgmAc0L_oYL8U*Lf4>fxw_~oTQEKFlPhG0JL}*HkyCi z+kM;E;|w%DGGq&2%1M$1W7qMJu3brHPufX$_Z^jnU^(v8Pl0-31v@=g-FuxxF(Sy;5CZ%BfuBdIP11Wot|MB;G5gV9~*4kK^n#9P%MK27PQyp5CyhUejBEuA7Jh_VWWTQ*ZA;$hX4wG>^vU5Jyn{ z5`L5X5Nra-vX!AjIOU8An?d{__kv!@g}|l zaI(Wgd^z?-ZNp@OAppEn-vL?0NVi(lQ|GF%_>PXy$WQ#Mk#`1)TN6DON$=#2u)$s<4*_NDUUZ`tzK7|& zS9%BJ%=e`=DtP1v=qKt(#Z12N2I%*0+doo~e0qZy+dcQfKiVI(e2jL_)ZyOwA;=J3 z*1Ul4??1lY-b0$Z8_i>p!N2g1wVw2|mb34)1}*0RMuORU{*?M};2~`q(9j~>RP)$v zA@fKY`zLOfaxn?di6VG<4ixbQ7;hUBqvJ-C6PK5nu5RPXBxq03bDtiNzKC3}F>8<$ zImqvw0x)zovp|Ko{27)A6W5 z&K_Y32!{FivH@)n_@GlZ(IN+(BN04U!W@C1E5M0~uOZn+FrL%OB)+(DRhP+-IF6tk zwq=OCC%PZnBv|hXn}<)m1~J7scLg0R)0L@)`qJ138Us%eM~ScOHWI$OJu&z}wjjYu zOtQQ@<_3a-nO(-i4W~iw)*9$j>?dvm2wDOvaR89$##Xg3lz52rUPDeOVhnKO6w5bM z0TNF=qkT)NeOF>IOps4yvsi2tMfEl-u{CqNvV@ksI3sLey7_6(P|fstL}}=tPQ$t- zNzt`hVthUWl>_^)$4Xn9)v99l@Ep*@GhX~S-WAzDqB}L7i6ewH7{<5=2=F-@ZT$w% z89u+7ti5+|_R(f?rOJkyvK@}4tNOyhzb_+TfMWG7$J1AYnY2gv_68HL;pw6z853Bt>1FJu8f zX0ltL_ahkazlWnrNFAdit9uOv{`0Q42|AXUwAEDP-Oz%(Q&Z$BsQ9wM{9f+ghDkxK zJG=HY$pMWL3*dbyr>oajF3veBpTo0Be(8W_Y?l}2#aM(4LIcRut!ndB`61<*d0A+# z7qvtw8?=rqJnz}U&f7<-(>7ZI(hvWLi~PP;VKIEA^F#i=QK?i9LQ+$!oqY9yUls#H zo#VP)o8Y<+bZ*};fe|@bjA7)a!tbUBWIT>ert*E}F2XtNI&3cEV3sQ1NLfzF7S555 zM(-{^dtb+ag}`$)$(YX(#G1`3q?U-$-Nhi7YOxN6px}cTytDzaLb+}Yn-qhafpfOoK$mS_ zG63HO0;zNch{fn-KcyLL!*>z z@joL^_van;mpthR##QQ-^hmKdPwLE6=AAiK|79=+-;~*8E}@GtjYU66n;ZFRw-M4U zi$2X;eSf0M)4Zx);Z?QG0IFo_;Z$`9A68Gs`T19$*lTCs&rs=S~;*f$IJ9k z5D%_Yd-S%oI(U-B)t`8mkR;Bx4t@I(P+%MZQ6NX_Ay=poBAozT2DN_;GKUNeu%%eT6FBg74WHvuXQuLZhx7iP3=&{ zJC|GCc%b}_&yzE6X^nT9FZ>~$h@In!SdY5`i}llV|Kz|wr%VIiI11~jW3Wqk8V9*{ zhr=lyr)SN9cjmrW=Rv844rF;BlE*Ae_b%u}O+Q6D6Ngq8xNT2oSK@#}Z1bPuHb2MU zY0U5->ZUF_5+`}$IE%_(IWsyD(BKwCMmGX$n1@=u?QdUS?;rHG`KTnN&|`}pe~HUu z*&lQQ_7z860>ehY@~Z(__kJokIXdnJ;h_K@pzZspPUST#&@!hf%jkD{o@0?%PAN?q3!{naDJ!v{>9%e_?^ZW zWr1lH=cf=)CO`_IX$*Xx?hU?R1LEl!)%E7pFYqc%Y!K3qohb(WqnaQ7`t~Efz(AnF z;V+Ng!TVY8B|78s=Z_wuht#tuE`JHWypqM%f6M;PnJS-xFR!Ub@Y~tnf9Z3!>bKyF zX5oX8e_H7S&TIcJ&eWKI|NQX7E_{p=ZsEJ1k=%56jqhkh1Mianm(ekP8Gg+FfnN;B z=RchfijN#=j(YFscmKrEDlMSkQ{D=&zG)o&a~i59uU$Msf33cZ5bg7ye~o)N}OWqURp^m-|O#)T30XLz}tI(HwJ~qlL_MJfVw7a~b>#Q!wd0 zy@qM;A`NbCZ10(biWAy>*vya&{PSuIY#fs%XS!94!1>RlH~eQ=#WemvvzW$Bb}_zP z6(DG1-R=$dfoL$fN_#`WKOE$X+hi9(Ya8Nhvp9}B4YJ(}IU8QKhk!2?nAOc3Xu=-* zF^Fv65jHkgGYZCB4xk)fU-K4&h;1t)Nm8l6fAFdG;G`F-pxZe{eRh@|UQcCyCw$mT zmX}4`h+@|vX~VSsV|a-a&3yI7#ipvdUiNZrd3pL0vrYYs>f8`sOF`=w$U8IM-icP%{#}*OTC}B zI(YOAIdDqD$=^rgrcwCu{i|XteF*B4?fVEf-6L<}Zjfj4c9hZIX0$&!a5wOm$JVji z#TS1cf4$=aemj<@P7!j+^h0EDiEdtQ3)b1b2#+Sg@bkN5e2JH8uCHMQ460xn4ogut z$u0#X2}M)JV8I+`fC|VLNUA+dN3Z0;2oH9y%)?{*kveqhto~%)bE3roMKd~(F16I} zz(*k2ufP0u!@v>-;1inx_*n?BMTURcGVB)VRtxe=4Zx`_!-pUr?~3%$ zmL6&q9NRMFT80x_hFHsRWXq6g8B%M8BKL-gQ8#B^R&h9R59?FNiPn?06q1;{78G zw5{YK7O(i|cyC~+cbx(I-NF~g+Z(3I7;5CduM<37{W*eSyL-@^kd? zH|RPK0c_WK1gLeL$Bwttb)Goh_g&|yK=>UckPofg#Ebygkk zZP#f#-fkCkX3zQmpuua@_UCKx_;z|mHN$+k?|hoBtv`KyGERlK=c>`B^` zESKZg*Hsz4wAAc8Sr!I-XQ=YYsH^Wp>~+ZN3g&`I?Y=L*u>@{v_ut&=1vm=GUAl25 zbvoAM9LmywrF8>crjdCLOa^p??JW2l4%o#(B^ofO3kW3l0+?xFeOkKn2Fi?_6-t-p zr0_ybJ2VSr#S*r%NDg7;>&IsPlbZa62!%psktjY-K8MyNc+$gQ=Pncx zZK~<)MzMclJf}TjuTjIPW~Ry|R3o)N9xnt1@>KvOadl{+Ehw3ys94arx>)K|iuU8t zAc%+IxB^2VPzOq%dP89$Xs^?(6g{=zBAxPNKKc6oWpc&|wES5h&uSEBT$NvZ`2mDP?78`tpzY; zRuN@(YO&R{Hi0+EGL|W*)2IZId`gp1uN{XXz0_7vU-qJ-aTK4_w6@4FD{D7sKga!N zFUwg_tt&NOnK9eT73p>5`WZ?tQ>zpE8o94$^kUMKc<&&WTQFYgul3Rw^1YX~T5i0b z9{4%@$e~`+cgU|w6=^cq*6G`GL&FAJPb-N??cPg8xSDrj%yJs|N;$*)yHbv}bgBh; zBGQv_La^3)Q%|D;UA&o;z`cc%LYM)MZ-zj`s#<6!H{;68&dD&()&Pjx@Oe8Jo)!lm zu_4sT(CzT?KH37v=_92CD6I;qY_a3^wG%N)^>YT#3kEu7+pr0iW{LO4d0Oz9?EzrRB{wp0K_~ zlaP1qq=m4lPRQ;LYxI|jge`PV-Yl-Izl?yrWg_+MUX5Paq;2j+D|x$T(ZS8jfp=+& zx?pH;%N{xD_z;{_+QPd`w`)t&*&Don_3ndq=wRLeMf| zTa@(5Eti)ItCCX|!7O!J#SJAnSEVpsPP3HMI!XeN%lHb2Ox)_V%(cY)mOUs&rdrA< z<2Y5uwUj8hRurr>(2gAo7UP0B0YqaCrAlt3z8`l}p>MuiD=i%=jHJ)>oLK5&DT3Yv z<`z<+1*6&vsh|LB*)yT}#=7Rq8*qNyMoXn;idN##7tMsCyLyR;!6dgn^9o&*JglRr zp2x;HDzSDBYLxR?^wSefGS3;4^_b|1^Dr^Vbq&xa-%^7PVRuWELfeTTT$ zR+w&G<;kSG<{c$@o}9r0-g1FIbV&vNUPPn(6#kxu{9!h$AVux05jvPuU09R~h?NC> zMWcn1pbeSWZxHX$J~J#WiLRI0Bdd1H%P_&6aXDO2ipM5ORd~w;NV(NYS;`+p=8N#? zbCg>OSQDU7c@bFV$~pX7ZiMq;`^~%8{SVs?*?-t~o3Mh4UR>I4`ha^&zE3Oa58MCv zaQJq2Yr70atX~#~G}wLfX8WxjnAViVfNj6tt^tNK=UhcmZdexTBJ@uKRD>M2yOZMv z4pD(n8P6M3P#uaKw>xQYVgW_hn_k6v0{LvPbSVNk3oj=X35OdU6?GKQoYaz2!B)8{ z>l@UW(TTOSGmL4?L1)(%@kN`~KZchE2)SeSIlM&UC3eY}lY<6+Zi>`bBPbmmM`7v; z3nu4d9LbL(2bG3ANb~IHC_imFA6pKN;@oF*!S->QoDEKclq|gH)bkad83qm zz0MO@tUP2}sbok(dU<(Nvdw}aN`Oarhf8TCLwJMbRHf11)8R5T{R2gmw2C2zkGpV~ z<{SLnb!4aT*Rbng5Ge7|#%KFJ^$(!rCh4VRb`WQ3r<|cu@U>`ieMw1_>huz1VTC)W zYeD@xy}oXq7XE+Cqb>(6S{>KjIJGhnHL<6SQ&3~cElwADAoeBzdQ$6JC_s-tlakLQ zf{V*$=K<1kLgrJbXtsyI9{s$z=57=p(Y&BlyjFCSjN4uj&F1XXQD1u4ws=;OUkWos=~P6MbnMK!bXpLmbV~w6@!RC0p7>fmbqK9}gK6ht z!~VJHcAL27!5Dllt2bw1dDB8RbC4vTqtN0zYH7_vT+C~us<2Q<@_+Nm`H|h%kiC-B_(GE#YN0(5|Gz~c?$^fL*-!o9gNiI z3k@T{_^@zdjy44(7f@~G-K@&kA4TVmC)?o4sbvW=szq|_IjSzQ)N)-*^{|L0Yhbys zP5pi6XHwl9&v}#l4!^tb-&y7ycnPd+lNWN8-AiC?Yp*!nPYzm6zf}8`t$G-6n7f@P zuak=~9e}iH0^L`g9$g)r3DaLj>4TzC*SRQt0jfD3Agt#pXc}VbuAY_{MH@*eZ(a*# zCVd3LterI@w|WW!>|h}Zsoj;1j`qU?JQ?BDM_?sVJ&P2Z2DdSsLeUsyLh{W!D70iO zk9e3Pk})h&&yA%$WA@ga-6B?nBbtU~dH zB&(7DsB2WVW2;*irB11eSoXM8>bwo>*REyL%;3jb@CFZTSiV(2OB&6YcN&`Cy)vqX zQ$DjQQwZ9eBO!N8(_#1;t*}#C&**HsfD5$6Oq~Sgdfqx`dPXMnrGBGVv02k~@iG_< z!*f4rZ|x2~;$p0@l|3mqbjegh$%>xBX3Y4OR?VcL4lXRShU}#FA@HmZgQ|UqRx(XI zdAQBEr&4g5l@-LYP`usFJXe?v&l;zV?-F zExOG$nG+qMk;}B^x$El1rQ2oK?);B)qVqq{xSL7)-8jf`O(I2<>s<!TXqvh0Q9@jM7G>pF3sS9dgq=b zdXgUSjdmPL2i}oirx6tXsLS(^ViU5i$?%@YILa@-56O2NEjw{tr{7)xLHi;3nZ&Lk zt*h4_NOwD#j)PPKU6kQNM)E@k^oT)6kA3NF1@BLyKU1yXtN242^088}p_jUqn+F5B zf{Ql~5I`d@Adn9kv3K9r?^}9y+{fbz`qrhj*ryzijeIy>Z-9&Ht~^Pf16I#whk6V{ zH@ryF&wE_|?_ruDhLqAlWd}*NQrT$V!kD-Et$WKB2@_;E; zSAi?&-Yl%&ZG$CjU%)`$qxkgAghz_OtX3YX2!CyVSX0XtBc2#z15oT4%6qzzcH<3H zR`gwa$i@?josC0JDs@SQd2wI8dt-jXG*y=3?LbtP3$^%y_gb8(3{zCx+8yk^dH3q| z_SW*Ud;(6fuu6Pl>DKt<`ub|-!qORNHDi}YSDHM2A0BrN0SzC#w;bDkrdN6 zK^&Zf>AUgtB!afO-n$xkt=UrX))lD&zoV&;@b`a6Ch@qr1M4Y*r;H-Pd6NpBHxd${ zwa7Kbgz@pkOxQ%KoWoGZ9mc{6R+s*Unq6m1z`&808NnSof~;!kT&gm|XgdGb*JJ@= ztq=I>SHlpi1p9YlTD^o>U7h7*wVOzR32FXPq9#`t*JI!4l6e*_Xw3~k61B&G_qz@xT-lSxwMd|>^8n0i+zEXL`C39HALyPn; zi{AwnflSaPi!Sgn7W4^6q5(M-hIXVa$7okxvOp{|YAP8A+y1#$)ncqjWz6;Wn-;#NOojk8+3DD{Ce^WOUp{tI=&|9WuZz44vH_yp;`%HJICH~J(@*5ubhW!sT* zyExFQTtyPo7hOg&y`LoR1_DTMm!+BbiSp9&-Xr-%3y-8Qi--&5?`=)s#ib4|vxQYf zyK+4-FI`V`S%>>+o>smzPZefIx>^(u?E|TAlKF-QS94Yj7xHUN&V`m;LLweR43iSXT zs@^~xTXz?B&6dQOIguZQxQ5Ue-%Jk8V=*y#zrH~Mw2c$oa`eSMGjlYpysaERstRcn zt(&hAHS!I+4bR)X<_C0o7`ojWBcJlN*NwNZN^tZ`S5-K5_uuNGj#W0{ZgIgivP-o)36~!Su~uL zR@ho`8l#B!1=&4c5MRp8z-*;Z{!w@tsuw!=ip`c3*Ff#3_xklOt-PP_=RPdp+@@2r>}OJhfZ8d{m;y zyE-pBAIYJbNJR&j7L04J-WE;^a_W& z@5Ui1Jn?Wm9l_vF>m`Z`TSJ)m)wE%HfS-at`w_}8Rr);!dqq%6?UbT9TQBADqv;bDA3|^}U zh=|cG-&ymu>wP!3Q_(Fb`}MSTYfxPR#a=)p*dF^SJQm%ac!72$0@ixQdIUIsuD-sJ z;;lbene&(C)ftSLt^>j)c4lrjwcPLZs@TcRk*1DH;X^b7o=lJ@6OAXmDXeIxFQkvy z-c+t=$Mr#I#cs~nP${zg>48B5LuV_r;ow#bi-K}Dz2V-7FCtEI$85-@hbU6Mg=SH~ z?TeLSC#YEhxrk>F^A@5tv(9r^LAkMb7*;k!w=27Hnyyx-=U=G4n!AY$woc3ZHLbHL zp(Q)}3K+W*yFl%(E2YFgecPcTo}Vl)<1ae3yF5Ee#)pSC|Ax*X9jB-~FmKJgpZ$L} zo$^EqqUn45ZgJ`bNx%5882r0m28T*Ua6%GeFHeAdMow=&zWY$c=Ij38$HUjJ_C9QH z9d7@${r1D2;~p$8H-CUy*dXCo%V=6!`eAwbhw?2RT&n$O+0OiBpB*M0@ad1XOAOjj zPgj}uIS+1M#inoNX5h#BYX@!{8@=TFMDQW|QrrmWYdf7nHb9D^YwgMRK;qJu zc8RYuVCGk6XW=M<+2viq zt#Zz>$Vnnq2z*X^2I2nC2iX5?k^t=SDi+2n_}+A(OMXSUXLUW8pfxGo-ViF$FF1tR zWhp+Q*y_Li{^RTZd(zH#`mgu49alO&5BGxu&?SI2nev;^Lwg-gLVFw${}xf$AOtaD zT2~)q*b20pk|11RoO6X8-yM5mjCGTlz*LU(AzIvwV2FuV$_5a&lSwXIt3DMvFlFOAqyN!dxGC1Xw3hWpFhZ-Dg8fWFy_NV%$K`bPViPG3Mj!0>1hImidm zn|Z)iOzmJ}jTB)igN+)0q#C;mVn#D}-}V0CUrmA-&2ZrlU1=512tz!As1r{^^2jM( z=n6hR@-=*Zo=(KW2pu@%BP={m)k9GSzNuR9Mb?AQT21&G6_AoC7f-`1Qx9AzFbM|B zQBSHaewCH+o2ZRnit4h9XcDRi*+zO%t)w@uk{)GC^8mlW56m^Gh)q*; zB6%F0V4VB;+4;5xZa5m&C{+uCkgw_NABf|8n9qb+d` z*3f{F46ltLp~4^22DAVQhH)dCghRR$-(GP+QdO-DZZQiJ`oh>q8elcqFp3QBG#Ytj zN@#?TT@E5QFtjj`t24u(hx0exifK3sd!qtZ%~S??9VD-y%n$uHZ?@kbzTWL`ZNG2e z&IVdIjJ(FtG_MjD#TJ_!Q`qgMfhkPS5h)HeTZy=l=(hQiqCT72`#!(9?{lpg3RBV5 z$3Zma?lp0o8Agvm(^XO?K_!28nrAR-g#uN!yN{r0V$kV=2+wZ=W7H6=@25eEHc7hO zKU-N8LzouTfq@fzJU-^HmK%qW+{sv8R*%?-ic1u25Z1awk!@iatRlyR?#tDVoNJTN z-*zRo*ZU;7@iM9p?_{8=-#%S-O^bU^I=r)>DD!xu9^inZ^N75a}=#Bud003#w zmIh;sBK;hPtWfK%+|bg$7$ChEh6q{X2!%I>X~c_Ke%L~sXY`zSYfBoch?81}_N9^8OjqHLi4hx_S)%g&+l7M|fUE#R3hml-TtVej%nD-rjk^p?U$ zpF)77H4;|xG~c1XN{uczZ)LI-QOI^fPM8fHVM2q?7yw4u#YllMlVUNm8Ce?>4NUjb zc`|5mtI*qNaX}pA(AcV7mF;4PNdlN%_Ci>dNBO0QSkr#H`*vHlKJV3JLg!B^lkU%H z7;fZky15#~Cm*13o46#*v|AMtR9C2h=s5UolJ5n_d{l~OpA-#9-T6~jISyr0(YGA> z@hI%5MF2$H?XAOk@53*zx2;Hz?gi;RJ};@qnlm8UbC4w8wrG`QU^oetb=+cz_W1mD z4z}c!mzHblh;|xhkflMcB^#h`jVShGBcrSoOBzsgYH|Pg-p&)JA@I5W;rL$Y4b{z~ z_Q#Z1WC6x_zrDBn@%>=?5F1dY{OP?@{=IN-!1&)xe(4UO0R?0yG@4l$HiS{^3Fy-g z;*$rNz~C=mvdnb~6FR?P3f&u(q2jF-i0E#c`0i6m!GoZZdjq5ggq!r~td z7HgaV);Lfa`_e$?z{g;5P!5B~E{?-Oyd<`AhP6|CN&UayxMdpeTWCTPCUp!9EN}E@ zM3HAdh2!K;i6c*n3d!R?Ba%38C=5^kj2P-OoWk@xG`uOG3)Y?8_iqkgZJ{Rx8qi(k zv`wXMzTf?MZ~Hy^V>p<3*7BxH1_q?dB|T^#jNhX+yTO?i{s#)URc{dplMF4pXTpua zxsJ%W)eVHj_b`_|m>qa0p|7q5v&oIDQ^0W{VIn>ak~H+3BesEafQXs_9?pWgbdK6I zk^aDkG_^ z6VCwr2xjpiUSY@@*%Zx{v&P#KD1lqFZ%=lTw1F4vU{W6kzhBDz+cT=sYp|VYV?dw; z8mKq`4!E|Y#je`O@Iwrj8|9~bGG2JYvdmyt@d<atW4UvbX7eE?Q zlX19vjGKnRm*{MI22bIa;dq(>N4!y=&R`gp6V)du`I@#(IHP)=1nAr&hNoaOqK*#6 zuk!FL<1*?oisj=pj{Z3fwLIcDBML=E<2@BBs8NBD1DyiFA98Xjwn($wIq2C#k{371 zVt=g{7dOgcv_=X2zwPb5<*l+NJ+h&1bc{PU;(*tS{Cqz?ko#i~DCllTr(22N=_SQU zExJ|={9r%YPYw=5hKldSD?Z0Z_le#VGG_<9DX;`S_*X%ExqIB*pL$o{rQtE(y30Tz zN`s5`35>Go5qe)0R+wlN`5>Gmz)0cmpQHFe@Z0%=vj9eF`d}O#Jpc&V1H3fT{w+)5 zzc{mlS+Vzy`zpc5Y-bU!GH%-et81PVfjBorjkk16gYN}g(SZ#fWlPfx-k0+-4}%ut zO?+<%f7oZsczJn9MVgt~;d7VDMovo|qI&>z4_;)wfX~jCphC2ph~dXAaw>}u1i$1D zixk9TYNA3srJ#R`NbP+5R#?uXWY0 z2={o&KQ$^kUS2*eDw0Y&*Hpaq%8P35v*qQu`jHv*+)tY9p%ln{UXU9;$L>NTk9eCc z_RdYB*LBa-$BfuVQ)?f|FTl4)Kfn9ue7>~{gW@33X*eF*n2*EraO~l!FOHMf^oB;t z87!yI0yON%)Z4otKZP~$G>^u5m|x`5sZW7(_lkVzp*aU8UJCI%JZl3fXnxOtqse8l z(`rT-8~_#zz5``5G-phJ!9)$iWJ0^g6UMRC671rf2jggj?w{#K3vDX!E`0QBmW8iIy|e}Wg(x|# z5!B~5C`NJCgFZY0$*CnDQnFG2AcyNg^3jH)68Z1-bwd+kO{X<%!Ng5I9hwa4yyXCs z^1}-%B!xJC1I}$+iE2*^$orId0GYau4i2+Kaf2&@f{v%qChHSm4y1}!FH264o0z8lg(tWMa_tUbl^uc%$eMfJrTb!i zgK%?NMV9yCHUy-51Kjy>x*FLpMf(RW2dT4%>E2BkZZid<<3@AIX&p0JG>V--2biSk z@z)oMKKLg3fd|(8RUS(V=B44X;5=3?rr6Xv#0oq_=&GAy%ngL4MRpkvK{6C8u%EaM zFkA3iOu%+|G^-Yd5)YByYskZ>05Bq+ButrWbHjXXZU>bYWRzT^C3KEqpjZ@44d`p?Yoa3_I`f#VerG@ zPyN>)w-5V+!S>$X?t5RY>$3LS?@NiLm7ef@`93_h96pX`Zn2vn>|blv-GwWLvAS5E zoQXBNbiI(ouY)7V;OxRuhrb*j%TLG0;#-hL0ew_qFr8QNWSZ~M5ntnKZ6*uH!b7dt zCBWm=?Xw7%QeJUR5suIliQbQsA)Y^|cUp*t;aLXm4BUuD$ z+whG~D5fi3o_b|-I4mO6g(9k3IBv(}B|%*+!@DRT5%$-FT_M}5`XvgJi@H7N(y<5> zQwHRrm;ClLT8)sDd|JB7upH%pXka2U2fRYt3K#ups{XwU;tQ3OwXCr?>ZFhA(WG$yxWhWW8U4zaHUIkmm zLgd56%S#NulcVK%PfHTluL&JLYB`fHj<9w?&p5E?m`4)<-EBQ_SEJQ{3UA-h3rPD;* zbjyBNxcZ71yk+ms?E$^3Zp#MVt$1=eLAACom6@^>R^731bHAR;7Hh8tzuHDE@rH&a z@ecNG)%~2(zShbGHpkO+PX3Nf8!K0Pk-}P}8d~1q^RP17V6m{YCNE&i@nepKZe{e8 zr_&R(b4_<+OS}Y&niaj4`QWPA{_BQ2d*GtRi&hzFb06>KfI`)T30nEa#}+ukKF&SR+vPa| zOUL8mA@{3bh{i1lWHU){Ia!7xNxvWzu~%FI!X69m(inn3$Gr=J;e)g?7<7P*mcw_# zg>>Uri&Df6qryEUXrN-)!I`VXD&Gu5a1sMr5$o(qI|pQH4G`}OuXRi^(u4AGC z?Icr}17GlKV}B^xt#RK=vk*~;viXi>xmU_fC2)yVUxZg$FR!lT@SV+GJisF5iXTAD zw?HPoH7;?1O8ixr%wrs}a&Hv9&o+_Jcf=)gJN4xPjXw>?6X3klXfz7rRknnPfTgTt zAjBGf!Rv@HjC_Y!>nQmGEPw%~NY<|sIiM|S=vGsKV~;NNEbw9T(rIvx=o~;#k}*v4 zvS>7d+)|!2n$$wzRiS|hW_2Ou2owxTKux3gjs_smQJ20WpCn`{=>WbGdJk^sIsJV_ zH^rE@SLaRJTWWQ5Fmq|nYtsH+Azplpc&EMdCZfe|pTyN$VGq*0Vw)4dAZY7$Cs4;1 zkuW~+Mj>>2%ATh11L9y@hMS?Pbrc^BjH^n;S>V-oVoO_kv&D1qRsKdUZAWQvoUg7u zeZb%T;&|Uhqg&*rpx<2wZHC0|c>_0FMIpzdoz{pOaK#_#Ouc)B{MZG4f)~e=))U>1 z7tvo~4e%FdHuK^nejA?9j@c`azb9cTOGo@l<aN}H3Ugd zHj)TB@HbIl=4rMic&}Qbw~xj^ly$$TMWS@zP1GqP5ElB^gzB+nN!OXC(JD|Tq@yvY zOfpY>cFcsdTomAt-F#M>#cWjm3hDt_M?(Kt(zxY#Q5^)tE(i#jM|FkD(*foBOMso1 zS*eW6p2CbsW|93?HWorI6LvM3lt^tT!A#wWzHR-Fc-f2YGB4ucK52x zzIt7w5dEits9Lz1MOj;?|G}(+R8gEv`%tFQ>|z&H`ebQN2Vx2+qh;b!%wdSGZOXa1 zSUm=8VoAxpz8*wFe*`{GSr^Ou%Hf8 zwt8qDyI%9mKjRQsWOEVmU2eNAO;om}K}PtaOlXkj&~ip(=L^PEBx`2w4dyga*_>t= z#GgK`Y&z0Mx}>~C@pPE7N6&a#pj6cD-1mn6m2STf>FT8`#Hgt&-4HXDv?%is7z;jN+9IvC3InM z5kxuLZyF;;+SwxW_B0_vj)WRbVra74G_MqwB!lY;sR1x<8rM=@m_xfTvBQIUsJ$uk zsj;qQQRcbTh7^W*QXH0(Gij*<@O^Vcw#_;1BZEI-Jwnk-bYa$2!cldpInfzSRb8oWIOq9*EnEfJQd0b$E zgQ_WtcxVH!jYyaIJoOz_-tDG-CQR!m8x936=Ia(s3iIc>P8Wb@;X7V>!K~avERY)j z)C4+*kmB485O{_8d1HCGAugcF)W!-c@Sx^^Tyk776`!IE?4620RS1twqTA@3P;w_S zVWUBJ&Fa*xq++_vSbrmpYg{o}7P};9TMf7XL80MYr(VPH2;+HrSW?!*vQvuD%yC#m zg^f>+tdQ>|q~czJR(DA`qnba}XlRM4p{dqXw6Ey`jT8UAUXvTKCYLBpE-^H@b3c*S zF%$n(%p!?Rp&Kr$(4F6)(48-!(4F76LWiwJMj6TuQUcLSP!j(3>(BSMlpHJRSIEMt zAq&Tg$iiWbEF4*6;Y7*808c=$zl>#JaoH#EPK!%IpzoE0jMPlJ&H3{3fa_vP@A(6z zhcab)nx1k&*z(OKb~U)aLXJpQ4m99Bk-K?B*OXA){UjILfUsyWz*05!9Hsd$H4l9f z>g=%(2M6nuQ&0A(7rOEiT2EWZtHC<4i2h_?k)cd z(Slr03H?XEv?TNu{sc2l4^|JVyI`PgWjN@JXz%n!c+jR}Vse?l7rIn=x{#y;*OTxfm0WsVG6(j{Yc6C}uWu~8 zKC96uzW4fa;Z;EQ`sUJ$O1`@BwpQPMTkC^|PNl##N_x0O*KU1r= z%(iOt-arm>y_VV6Yu<0gTJXJS%^UhF7jX?<#rZp8@)a}*^-VCvo8CKtxLAGBnEZ_w zXShf6ZbM4K<`>^#3CJ^q5^OY>#Trh+m20`*_@(E}|H__3DWgT5dL2v7A_d|sqj`9K3?-Hy}j+&m%6?-kT9a^1g@3aj%nZFJC zmbO8~!0mAiU+ZS*Xi?qy?G3u~+XZyzxA&|&YqIHVLkT7aU7R{gN>a(b&~M@Hwj5t< z&eDr^`F7X51ieLrxwweCOYP+G4rxl#mX(Kc>H@5Z0$objwp@QYzE`5&zc2C-Pqk8N1LG@Bfp= ze>!PQ-@f(TZ=p(j)4SgbN&+*2J?T>JV%yALko#}iU;aW1soIU@e*-BqSAg8J{E*94 zA&T{Lg3j1di(J0?uWyj-H&g#950`_vzUCFRBdnf4`yC0G4W%s*cOZ7do+SY z2eitWdCsVnK5+i;bm5Mt3*Md13)te(I4?N%bI*2WV0yH{GXpW+aV=T$yyp9`oPPz%2OkMnV0pK13We>;ES(Izgzug2{IdY(?yMka}agG3krg0jahhl@-LZve_ z66iYP5bq=rnEW(|8}$bc+~bYHDS1Flv&1KO_9`aQzAkTscq|UL@d=pF@VFW5{I%k?~ z@V+AelUK?~<{Ws2k?YL+nY@Mm?`SKjp*x6C_ew`7kg>pP>Q%AA(GZqIOc`}<=53Mp zD)%zr6W@j&Ow%k$%f{$tbEA=^iCR-knvV-`h5fC)7B4J%r}zkCei**Nz0N4KB%ekn zr(+5VSZz`sqQl(FN{VLjtbYqZ^aSH-6|5%g9=}JIPowNz2-7M|bK+jknk0t0KQV#S zEeuCkt^+Tba&W;)QWpI_2V$N~s%Qz`uO{FTS>;j(^u+WmE`OetJ5sReJiG2aGSH@s zb!O-V$D6yp} zL%2Mu1fZ`G2(sf$k$?dnt;|Gj0$&41@n!H@9xY2mMi89|vnZ~Jj57J=%>eA9KuC3D zkSsY1mG5pb5P&6$3F1#8`YnAwubmt=HY5K3>Q-41tYB7QwRw1DAq-B+-Iz$uT!_G? zq_5)@K|;=KLA4M#|EUwGd5MX1=_<1dVK*0BQ`A-vkHarH`H_FMHJ5E!ae&89swbRWJcy2vUf5gK|rGB4zXPRddxgaWeP2z}%XrwNhuA)(L+<>K~a9DN{ ziX|ZWE3X)eti*}56hj6_<%ltb*B#{Zt{zaVju|C0V;R4}C>TPt8l{d-^+J11^00(ZUNOCi12#EU^qK2!J*sRB;j~yq>DE5!YfEyJkfS zOliAHSY4Z&vOrO_nu}oZ7QK*bxn2azHTDiu;I$teNYoIX9_w+&9@rQ+=(1NMB(1u% z0~8CEmt|M0s0BgQ@JDne6r#{ON6gSrNL9BjVr%+ITSei6>hkOBKsw7hWGER1o3BzA zqaiP?an=g)-h_EzC7>DQREI~A#I5j5>mOU^)ACs?R}FHd7ILLka(yQ+;R|8~1-WPt zrG6?ohBjx!-85|F^|c&ghhi%!4?KHTUrHV|NaGE?t7G^2I_{Q+>#4hO+LfGa1*;6u zWDMfsmWiWz6`&}=!Fdpk(UXew(81r z8tqX29mv?Vru6dk@=641Ru)YudW<+mw`=3et7^Rwnv5(Z%gdto17ESb@>i^)N^$!> zz*NEB?HwQwvO+;gle;Rs5x6~_tfBa*LKB;;s`||m_fv%PfdMT-I|`!ZBFLp+4i%ZN zR#@d6AWt%OSMU9Tab&I{%!$lslb(sZX-Jk`p?4*n7~rysC>P5>%ds?lL_v+FO*qNP zt4?E>1_X%6%cPu}DzOtnU#7tc8Rwx~K|%-3E1dmvPp05?T~UAJVGZ5PWBA>vC#lj! zU%unnOj31b_5`b+md+>#xMM4RIfM>{Sk&bo##A!CW55hg_;)OIri@rxrMeBW1+J96 z!vM07N9VLDYBD;#%u|vHgrihZeiV+Id7GYp3@N?u1dcb5zTL1_Mj(|Aq093c9+{QqpQr}M$cAHdpvIwf7GfDwnlMD@tFpe7 zqYmP0*E(`F4GQ4{BoS_(&58;UQw^oK)C_$&euYjWIL&#Rh<#?KSA?EXMrjzK{`&fA z<^qZF5F=004F~VB<;4e}xyql@3DZwODy$j1>I0wCSo9JhJW(I%1-!eRwgPohMW;Q1 zJQ``mg~)4X6jyo8TU9|-Oo|-dpgu`{Qd4pW)3jV)6d!BV8gV286Ey=uT~!u0d9B2x znICOL#H1jzbT$Q^Z1NrFsgwlM9?kl6Or!yWrhUvp(LCWnyre=ITu%4vKn)T4)|l}d zqGf*xvN;i<59Hnmew#xdAdLM|ElS_PO?_kjR2mg%Q$4;Ip0uM;rrn3chs8n^~b2OQ`D$cQjAQE3W8d5I>uP%n1n>aA||1ncod0q@!-WX>*B3X zbVa}a!O1&Eawxn%cCQ!e|FKXfhUOf3>{*kit4s4=ZSl2;sX(($UwYbb;itHHD?LhGg6 zmDk$+EBM>p^Kjh(e|XzxZ`PA{X^NSOCR%jalAw?5rDkPSggOjD#XkrR|Au^1xH2Pf z<-BmCtu^Gz27L7zSd1g709H;~69 zpGWxnA|M0Zsq)87Nfw&Q3=Cv!dLg`CjfB=4O!Gu3yaU!9qe2BfQjxC3hYRR{&?U*2 zOk`AP-+aBk?mSrY9O?Xr+>cO?ZV5#N<0Q5ZjZe}Lh{SghQL)ejsEm5^6$eOBZ9l13 zql5qQR z`{_Y1Aripw2i-Ad5s`vaM?NT)WQk=>2!&x0t?D|`L`{fXAqZ~lFA0SlQXA|gWrP8} z;1$~!jS6TN2DG`rOjr!+I~~?QF5?+121hS=?+Xglts4lXz+vsNGp<<*gM*9ruM8wx7c~Mx_oN0gvncM99gEG_HK%(}J4c__`^Az3`_!8*$5Vb48H90hx0S*j%j$ z3$~W&mZM%oP4u+W)Rb`iap`f{>(kkT+Z&E~7RaeIW(MgvE8 z<1YgQh;XB+e-+|s<;=s_qBp_AnDK>e4@W#@+a3|Ilx=&C#yirsC(4d4rESmmkN?(@ zwmrWm`I)rsdGr0|p0w?G^7NMnr1=`le5vKnN#)9K0FM+o43(Ot%)HfRhFjfx?TMhS~6>nf$kn{gRec9{+*mUp@G;h zzvVE{1pj}UuB|_P9KTnY*7>{0{`UJ) zC^cLDJq`Tsn|Hf=uRgrmeS5h1ac5`y{o$M4t!-PWcSR{-S8!uH`Wj*WzLK;*n?JmtdeU_gtq)SNMnw|R4Me?C`3VNt!=DktHt(%miK)y zijqYc=cl3^V!sH3{}fuwV1OK3_U}vCZypGnr4qEDtONg@4SZeZ9}JRmSM5&tHkL&K z6qz~eqD1|^T=0zuShgsDAFGl;S|*5{`I>TC`?k-5XgoLfKeXI$WXQ6)B~neUzL5dT z=9b8{62eRQ-29Q2f1xJ-TI&DJX*3?$rCyNNN_1QH3mY3+rK5d7*s>06+-l3X9U3CK zzxT`A0Sf9@Tm28a@Aqs)F3UoFPTsR3ucEG1bRKCLx8Lu9)VJlzaN2n!do<5 z+@YFL$geQPD=m0y0CF5hCsX+j?OP0uX!LbxM5FsdLtI_?3Pj|kmwQ76Bf8Oyd23We z$@@d4h&O&~Tx8MvLne&B78gSA3vIX=Zcpnk7obv?yoNW<-7k{ zUioY5(}T6u=l({2_1FJ7{QrX0->sH{M5cFi~HCA-iJ@{4ygyt;(7JpYR!An znQ5u+1_E3>xBJ)c9(YGL>hNLvEQ)P+57Z~Ni#=)PEP8-3u|Hg`Klt*LKMB$-+!-fm z!!GhlPY_Y|Hh9~N-R0%@MYwSVRd(qo^k7Xg4aQwjU^e4Xgv0YJ`0_{M^%C(4zI5ql z9$wP#hz&WwK-92trTmisOH0|H3V%qap#^}rt41I;uuRtggAhX8X}Fy0UBq39dTVSbbyQxj^nxhh6vPsj{ zt*Cyuc!7zmm?VmPzwsO5X-I0_i|GD=m-@iVFO;63jDlJ%H{MSVe3gPXMHrsNjYqs6 zD>ggeD?@Cz?0RVBE)$oRh2jyQ(NMgz^t02RM3b;73J$TL zrHS&csc;{GbOsFy@3XZ7TYgL$QLkZ#d~G*Uj)7}Iahtmsl($0fxF~Vyk{_0?sBkX} zILW>^{)#f;D)DVJr~B|b2K$=uio{(_~=3HJQ{`FJ#U(Y+h1rq;iN06hj-*If^_sgJa%;->e@-& z86F4VjOXpvXhYOuc^xz!g=v`jp|~z6{5k@B;TfWx#Ju`41i(zDec)BBUem15wTdOj zMH=O7mS(^)v1n)d4V@A`Z8UQ`54ZV)=M3@ef^JlmRyS#Q0#pmrT^r(Nlft@^m1Y%1 zWm2gupuQz`=kW0F-kMqL7E(KLwY7CeF6kRw@~(zE2jVIReAzw+RPc-tShQcyRLcId zw=i=Z4vSi_0zdv*rZeHOZvkFBSu0Ww2g(S5o*~G1+)mx5l4ksdOW=uMUotFMQ_As_E1#oilI?EQcATz9XdTJNB+=}@Q#(pL11 z1F-`5w;KEghrgk*R#GUZvGS+^rTFUJZ}oeZA~MZlTbD}jY#;K4OLonZ1JY-qd_LC| zKKb!54K9j(IC5G+-%1;FlyDy#r00dnL(R738?@oShrQ9jXu;j8qfJt8=Z;e2Cqrty zt=%tV)(b>WA?>UZF5_Af#afREKY|(%jBfy1l zxA@|;K9ca#J8L1TtdyxTr>7BUAiKk2lqGLhn<69jbIp;Zw1 z8x5>~&A9r3C_*uQZb6Y1gMq(_BA@;ovc}3Njm7l=Igcu0_|7mQKf&4@Lb?7*W59RD z7!WJUFL7kyU-o_{1b)^7R7c?#j8GTZr=iklJV57sdR^L-^ObY5!b+Q!*|o`jd8Yle zvbXbT#XWF)x0%zKLfukr#f(inDK#~W#3im2>MSWd8Vg^RYH@?kh?CD*V;p@Bv4JZo zvL$kgi1|q{wMC6!S5t6myegJU7{*MM#t5S6G?bNIoQAQ=1ntIVHAIINoF^l(F~z-l zd|+I#Q4h>JM;t&6y^ccmt=%_>pR5<)wi`cV=r;_62HLP{DbycKK$#APr!>51vu$Na z$~;td3`%)J>_4msr$KGSLS=EGJ`ic@6*bn#s@m8U-ydqMyoKR;x#Fo-cZrHKuTg9x zE1NvmE8qgXEMQl*((q!%URai$NxpP+^`XK|p`D%PFq51m6YiJ{r67@qqQc?mrI_$- zLA$-_1bv5+3#@`0i>Vd|w)D76qE007@~aWz5jS%x!>i%e47867cm~*U6oTq84A4FW zn5WNoz#HdJ2s-iDk&GEQ5&e=nO7=z1AXTZ0LiPrzTf=Q|oCQ}l}Fuib+w1I+M01ND7nHU*;veWn32 z7)a1LxW(N>4W8p&W%@}BoAecSbMqpWXkfJHVzQ`*n^q_;!wA{lY5i?)_idYPMWbVi zEZ3_xFTCA#i+OuFBnkb{@L7Knii_ABrAL^B$SuUL+T`F(-Ei~@RSCyi?YP1;_-8tX z>)m}{DZa~2b(QJpe1?gWYZT!v<{0R!Hn0EvwwUzoT7_;!!{(9FEDh6E%hk+^OTaY7 zsgm1^Df)>#wM%^MOqTa*UEzxzopLuzVuS4kT^AkmCG1qq?JY&^5oj>I;*<1g7YXZS zb?&DPp9*L^@d=Mpv2wECyM>cdz#J>f;x0`0lRezQAs*&zx zxi$A(^~PT2fCsV{Z{3ABKK_13P3}j#Cim+cO|B+lowEX|E%=3Y+)>y2@&9za|4>~| z-Vh;`M^1`D_w%a3jHO#z?-B2e{TI3E8O_T z4e8ne{+U%~eKx(9dgQF~=hMy$efl4UKCOw`Y=ZH(T(rN&I1T&Zffj-*6e@3ceVv5l z_>a%%fhR}m7zMX^QRg;|)Mbgc2^*j_qzy3bwA1Ez34prok)-~SyhGgF*FJlB@q9p$ z^$a`lq7+%cV^K2$ls7*dRM0jID5W}3GSx1XDC<~;Z8NZ&a0JGD9ec$Wp>0w4T={J) z;$V$vgo>%O^WL74iNP+$|KuK_Yr0-uMy;ywm97BKYpv^1e9`kLy!epN83$W7$XmhH z>gp*WbRK=ZSF}+oMA*us@iZ;Bu}mS=Y8YzMqq7LZWtR$^1?lI0CTlJ5En`?#y0C14 zwM?pzuG-WxARGlo7})q=0L`4)U+XsgNys zsFpW6?-#vEuT320Kx{c8jnU*?g}@EOsvnY{fNvS8?ox*uZ{cLKylWYZodUyHU?_GU zmX~jof&UT_Rv?^)n(mh%_Ra@9@k3jwIMI)23zLi>&oTZbotzs|Sxk1KX+a!`j*LimiqmBv>YQb!#405D9DE_RmUc9iYlF})aB?)7!W`9XPS2k&mdx?-B9QgPz_ zE0}2ZcfC#Tz4yKMqxX{*7kgZcI&9KA!TiF+1uu70<%8w~K`=*83Sznyqs>kg$&Hg} zWfN>|ofFpoT@^Pz@%m4!DbTXx>QAk8T z3C|m;d`QGYac|EiP$|Sv4};slKuf1|o5%P28?m2vn-MI5rXbdmv(UDy6qQPaGk2qz zlK6p^y;0#E(R%7=8jbVSC@w2mWZ@rXRz(X|U~adW*Z~fwS)QET23+E!eL4KSz6Px? z#*jq>mo>j=w5a|^5f_U-AL()iquI)BGq)GNTq7t+zSixZ45g3C-~jcr*m z((rdByOt*Nx*aa+Lsm!_yPL=Lap~fpe(Cg{9p>ewWlYW0F|<@->%-Jd%eBCO^fTZ2bDWJ2ZOr?SaZkZ0HOYC{hCC$npW2L5V?F;Z9#l<7B1Y`rw z`>A>{uZMcQ8~Te$pF26)yyacvC@i)%glhYTUOoz#&m z`)z6*;`Z`w_QD2e>G<&`N3=`QhsCJmEL8haxTL+8O)Y`ihkHQm8=&>>1{co@;U%3t z-zQ>Q^V~fzgcUh{zE6~Xn&-oPA(Uuj-zQ41<~x>O2r1!W{$9CizLWXIn2KR6uliV4bc6)aXWmJzR;9b5sYWKfS%;c6PvOtmw}oFU?k>Y(t#*XZ8`{o8)>S?% z%ZsKBoJ-wq4w|g7u01qV@S~6ph)VkpwP0g+BR~tmZd?X?WLau2FE5o(-z_#A>;dSa zb~;q%8O1h?(3wixEXqP79wg&2`!B2Yu^_owgHfS zNBM9lMvEhTDX??*KO(A!^Xlz4tNMm09?rY%w_C5?e(&6W%{K+@aJF9U^*3K{f0Jh4 z5Tv81d+A#=e4avLjH^E;sKSyybnmB1vF~-m$d%bP%vU}+)t6LaMWr&xBcR(IrSfLE z^!;SBa~Cr3vg#rP%9fo+RREME>0uQL#x+lEASx(S%^av~Ee>`Rs!)vMAk$RBjIVGt zb4wz9%~)f@v=p}Sn(lnR-8popBS5uj{)S**SJRu`LtO5fgS_`E%weO3!z`(GAznJ!Jg}IuI_%q*q6u$1} z^b4I{iu#(Gs%$u5Han{5Deb5deE?NRrrC#9NhWW}w4TDq zwL)`gt>XNQ=lWX_oYk$HiOZmGOWT@LU_G~|DBablKD%#Xb*i4?N}w%fK-Lk^G=@M; z3qx}dRmQqKS=laBr)1t7ti`cxSZYUWAtsc z?@f=gVH$}WEXI%)c2?8En4oELri3>hPSKZzLPc<_sjb2?QOZ0sK|1DzicE!~sWF@T zM~wQLrD-iIS^4%u8iot?Ycalf-+BH>FC39ps}c4scO2MNLp+1qDvF-L55agW&#C3` zZ@L@Bw9yspQ8s$k_^f)ZuVHGW8|Et?@pLWLxD}?Vv#ggE$EMC|wofszIC37?iU^BW z=}}WlgG%+$hKBe2dSu$7ss7DGJg%%6dm4{~WS~=a!&f`1tEYi;kdpj9Crf)87kF2t zAY)v*8=)AUZ}%ucCL~R0NH57fqU|*9b4?Uff}Pn+s`dJ{pc>+CFuPuB=E}Y%Ip%G# z>uW$Sm*&`Q2W3Mg)ABMk#S8^8H}FKL!`Kctl!ZoCHbco>Epb0TAg1mb<@fl|I43g- z!SgU3@up;16xGCn6VZiu9Eq!xG!7)4&=8(`XG1>hhXCPm{#5 z(0rFGzuzHOav0S2#jJ~y{lOp)d3;z(DOVTRY3vlG)`~niJ ztJPqidaM9!LZwoleO?wkLKZ>wRh8D{i&UcD7~ylkIq)sl5pP$6+=H_#H($A=uhcEg zNAGJ%ZtCf`+Rv%rrj-5r+KoAkvd!cRMWwd}%&VTHfE-qqLhGeyM4_wVT8T>(QH&*u z-Ry|Pp!IUuoFf&ra=8+2Rnrn$?irO6x1gZkq*wi+ub z6=avz<2!2lG2JEkzc>t=Dd+(uXZ{H_QJw{P@JhB=XgkE_;<<|-D{VxG$t^W(vUW}? zf*V?z+{(&JT3Op?bZlImw#Ao=j4idFjQd8C7K*Jj-K%20EjeEmn!CD>g}ZMJ;!lOa zDMPqv>5`WW(k5u_Xr)CB0SW_kuMDdk;@1Gf@`4!5tAkzU9J%%^ZAIqB=VJdiFQZuW zn3pU0Q?`LOO_VgUm5xVirU;7!ssOdj<#khv6gy?g-sB{?U?IBB8VOHJ*fjW%$0(YUv|b1nv~ zd27RVfMH}T=D;Nj6S}e{lW$AcKgt5J<|+u9&z6|a7*iIq>+>lZQZ#Q6bYesmz7aQc z&YdT^yV_>jynG^KJqlzkcmd*J`^E|GmUEe0Hu`zZJX1T9@ptWd!PiZ0x0=V~;1ac3 z*N;Z9a$JCJls|Nvrcimm9TB+2m z%ui@OU9DTxthL{a6OUi!wq2KguE%#-D`dZ?MnJF3q24!dgMj)CdkL!xqPTwXShwvH zx|Sx3o%;$6zf%2U6XyPyLmh)k0xD08Q4PG(qN1Y6fh>weq>NX`f^2WtDK(_w)h3B` zdY~y;@K%-mEH83nyZOG>;`#-Z(N3XTgJ$#xck+75~I84v*1#BFemBM zKz}feJc6eta7h~-qND%j57AkeOmkQHSaw_rJ6)EU)#m8efGgM88hoXdJq*V>@&W}@Q>khVts0sxDuRTLF1(J$a`{f31+k-*ChXHT)s*;75o;~mpj zIeALh$y4!31vONhpD1$g!K?~HQ(S}Va%Ct zcOCXytU_%k2;PlL&j1F#tMBapc~+eD4I-p*fyvnGOUr-Jx^n;Ef6Ka3@qLZ6*s!#a z6nnKRBLW4SBNPiYxZIzdR+QO@-CmI8l?FK5AwaUz`9S;n?g4_Ia#L`$Zedt(l!4+Hn zO;*9G8J20dQs19PotLbJyAv_*PE>l}o>p|`!sq5ioLIK~>sD zi{={2)Snlr#nzXw@V9^dHU9RuXu$1;J}7u+QATrkGCmKRY=y8jZ!uT+Lsv_=(&8;` z^TBb>x7C0diU?SER-U%Wh8S|#Ob1i)CPOLPA#RG$y>ySRk-J`cOP@u3jHQN0!FJb0 z)g|O&D)8bCbMD0(&2UjCMc>>J(f+}GHYmHfMQSA8ZV6#MN;UUZ!*+fe#?6vUi_s-K z&dmef@C)vWrDDbr~ZEv5B1yJk{ZV36akr+D*d0V2J0)ag>C9f({XH_GCps*>8; zS)n3YVT*Pwdh~lIT9Jvj0b7s=Pf(ji)4Xb{bZ24rhLe{TLIn`SeJ6BxTi2B-MgUl> ztIFt?ypjD8RJHJhz5c~HgWFE(as9&7(uTMKSF_)#AZl6bn@X*=`Ysivn zxf~DPkrBPywvfjwt&gph;&nIm8WF8zKdp>7{HY2fE8CzV&FXFOQ02cmfBy*yWbR;xBxLbO)k(!sa%pcjeQeO z$a7V+Lxiq%N}-j3kYqD&1Pos+#`t|R4+Z8H%d#R;cfnCwXR9dlA35BO5$s)y120i4 zqRgwn?`BMKJ-&PqU0%kp7hsrc5$7ZIjoH3FzPwS55ng^_La)3k8UoC#LY4z#as={5 z9-MfM5IzB^DNL{77g~jy!nn){=fGkrwzXIR%WSNrk}qHw3W|X~tyG6XHB>uxij7-A z zN=4ea9>ByOhRpzw_JUh`0++XXtDD!<`7jQ|)#CCgH69FTdv9_X>v~S4_L;>^L;Xlj z-Sh=qIMM=lKf zfxo9w?{<61wsS}&qN_|`cD0n(HDMn3J1X=QQ`|Xvz>?ubOP}sPsM{)*#N%+|UET6s zGM^RZV(NuWv#2zPHZE$}(dcy)#*ztX1z1V7k1l~NW?G!z zv$8*+$_;AkUUzAJt~a?3+r=pq`_@#A2ek-8q+&`p<@mkN}NdzR%- zzzj<%9sHKE>fgkDOKHdYo9pe=FFrUR3oL!L2wKG=QEiwt7hg{-FcoY1Vm18fcdEntd7i4Z-0kMx`HF6o2`=C) zBf4hS49mw1C4sH+p)#(S6Pa*WEq3^<8&tHc6Oo-qnmo-=oRV zj;6dv15-lT)~0M~!^Sk|KlcW+n{TiMa3<}q@$k>yAJuicXj{qY=vHzj?^x=e-_sf* zB{zZ@xlR2)EU%W>I4oHm)n1yTE|_qs(1KLcE%WDYrFCsZu1q zB`Fp+CAoKt579n4j{L*hSFP3BzG}AnuxPOsHq2J;)$-&&!0^Nr%kzw@%PVDX3ho`65!h8$>DO#dBA+rW9<%#C zs-kQqCszQ1W( z-3wU6WphMa&Gx4sc-RG_5%0icb2iy45acF%rb*B89;4V)x9|7v9mfZCTr97j0SDEFkj^_qVq$x$mvkKetr=lg?BB3l0$OezO0= z4JZ5GwRJP#Mb7nqm~*bbIVbJA5Z5C@`?~4Sf4;#?js7VY$#!MbVh;01oDa%bYHguY zkYBX9_v~xt-d|zv_0Fc_JVFlg{(e_@Kbr7xmY9q!fUu~Ri=9MQt zGupa3xXuK@IKcje4~ zn4I~Kd*RIREQrPyO^Z80xJO{q84zbnYy8*2OCa>^kLERr5>T5^{|1Z}=6CF%*9#wN_fI35cfLdo}W57zH29^W+$ij)yct^e@Q0`<5pGu zMzw$MbDVvBCkJ2boh%X8J2|;)Cr4%{NB7jpu(Sc9#eZNI|M^C%paC~tyvTkFZb#>n z(rL6MeohftDK`CJOP^#Rd2T=pmW2OA;@q-lO2X^w0&?lpVtH9hQcc|uqYKbTh2Ey6 zW*hoTS3_W_0w431zH|kuvVb%)-zXlt;`p^|t6r~te&v| zqfjh9&i(yq?)~EZ&Fg#by-jb|``-J}`^h^Ay|WP3YM^VuObl`wRtumYA9zD3@muJ9 z2)(V)`wSmO@ZqP>+YG($L+^*s`wqTM7ODGqj!d##)5Pn`V(YfrKUcIWo`M3Ldt!cq zfw8aVs(y%*)lb4_Bi{7I4Ly1N*1V!RJD3ULp8kOt?pQFiTdynpVETOhNt{eM0O=1w zJR0M6F*XwCu9JmJ6hdPLjfs9uHs?2k(FE@P=RbZ39PPLwk=a>i39~GKc{IMhPUMRg z%0--HgKFZZ?P)r$ChZMRVG#tWG0+<%?C;^L5iDnqVFbPlKt(En0fj+f5}CeJq->GF z8Ck+Ki3~-mTbA3<;3+a8GSn<=hhOk&dFEgJq{1$Dqh>{eknNTmnuyOatmSZjgff^h zm4n~TeYpcAvir1fe4|+A%Znr(WeV`Izt%f` zF%go!cid{ZjPzvx_`r)=&I6}4qTgevIr2u(nqzksj)7hUY+#*9reI^G6H5yxs@791 z08&7$zcx`dotibBg3>w}2g9)W;Qu{1@tps+=D5YDPY>u@2c{N@&?zG%vH2_z!Tb8b zcno-DKwFubeU2syRSL#HNJtDMP#5L~Ob9*4K}*hF0oT6@MxzKjI2gam!?O%`KO*@s z6pXrhq5PsEN59w^a=ILUdjX?Bx;rNBZ%cFA>d5MS~`5{LAFrHl^nuV`P0 zYSychm9t82Vl)ad5F88|en*%(q5Lb{>k-Y%5LZubiQzM>(V{a>hc&r;48IJ=(=0j< z-xSHkw;~@c!zN>Hji=Uu0$TAR5XVQ{5)X2bUG)LvR?pKo`sXw(l7cU0gCVc+0VTuf zFTdP0i>2sHQcPxjXaNbW&1p1-Y1B5irL$`God6~4WzAHmvVZ)rd${-Em)G02j8Ty> zAh@9|S60bIPGN0X&&yd+zFG2}7Wrs(X3H}z^1zrmPLa!P`6fj^=qo!#&Wb!4a2$$t zTeh*5Ee}pk?7eYm6ren4fZ~7AjEhRw%I%yVeO$9C*9cSEoDu}GZrV!H6=9vtl3Rvf z2t6vaK(DS`+0sZas=CHr`ZUP)L{HV7iHn{z%S9zCT{9Jy09C`MqN=8f_$;X+_u9qe z`z9I!tRVZ`ltFF^ep)lDDwn9aT5xE;HX!+iodc9us??K~j$D{uv{6%{Q~;VpJt1L? zmys|t9M`bD)-WUgsKzR-7@n$Yv;iwdirItK4m=jMT4cj5Mwc#6D(57n`%z{x`ruDk z&nsOrGtMh)xfC*X4jaJA?kE_3Ho)?JvqPN(3+Qm8+~M8Q81Cf@kU^~S{WY<#cv0{9 zPV@S4E1_Kxy$cC!tEj(GXbbL{P>#$G#VHUhP2s-;{)>D)gWThQ87bPZjoaKDw_T&K z{q_`7MTgaD#Q-1Ogc!g)O`w|D(;~Y}m-%@F7`c-ow-_Hq)S`ki2Ig}D`83`H`6-^T z;>V&q42?DS&pjWO=ZPEpO0@<{R>kty&#$!t-8wH7(@kX%eU;Szx1Q{+)44wE#bm%; zW;S2GFVyFlsoLk2Ir0_&v1k>dWm;VvrYKy6dh=X-3sM}{=q0rixGt8;j9+JqzR;}y zb@-1o8Tp6l0=MeKFxM(tWObrVk&7uEJUNGdHKl&op^e76sE=bjkE`t&Ai|K{yMqUNhzA2 zG@aJ-^hXEx_TU*0Tk#ABpPzqu@&%qVeD3`H^k+01@RRm*n5_%juQ4VCAF~}u8v0SY zIEO6u2-W76JZ4If4POW&tmJGGjrp3m)CAL3OI}T_X4+5bNG)k+d=`uQ8c91%lAJa) zlJ-%Mg|9}wAG?aa{IJ?FcFnYNN;<6*CSn-Yz2TEV%KPwS`^yB#lfVf4`!vB5>l`C6 zG;<6a-*ViZW9+dR07v0*FdgR-pm@#p>BE6uvTi30D%o(HE|?Tu#py#niG`& zrI-HN#ubOjOFiZ+G*Dbxn{}HucC+xHX!L=9#Z1@@J!HUc?lJRqr18?7v#T>lzgLl-UAn?0JJFvA<`@GM&21$a_KJx*Vn=F za-d{hj{PoQm;6{fxvIkm_@O7^5UKZI;4HDRq#(dMKWkn^*@t9;N3V(tqwGC$^QGkG zGv@9<7MrCFZ3lz>21YvRy1>wZ4T_%F1~ogB;8liP%-Rg-ZYQK-NX|c z-7s{-6WW{5HQ{&Sr1>Y0%!o*!c3%Wk3+wejY?khk!Jc@MwrZrq28zX%u#`7OyY29rh#- z=H8w$825NE4)_7b;RQb80KDAT1LoNU`t8Xvh?m!h7fWMsPmaMWs{5TZF37suo}^Xx z3#ejy#c=rzhD(AzR1;yg1+UEUWRv3$_7jqmJf$r8{#1^Wx6Q!6*quZJkHAS#u8rU?=%xsodgN?#|N$lm3Wyuqclcq2zZJC`UdTg+@2o) zb;y;C{IlidGpuR^bipD~484Sdp*aG^RBxHPG3u%jKO#w+yY5WKa40b}cbhKu2cTmd z`1uUb9wMqkK()7|E1sip9OhvIGtSWFOObs?j~aKO^Z;?}ydMKt4@>#6;`dfu6n|@I zU}c*myz+FEB;zp9thvGs=8D`?(=JniCU2R>9M;9VdZ5Gbn|7x5Q?WYO1MGSgt&0xD zFv;H*jqF)n7;9O}OA7f&Y|3x}LtKRoaQj|ZirFGGgKlpoB{y!UKyx-);# zs<<)Lm%_6f7S#ax@4xitL$0?bCG`%L$47DYvH(>-+a+HlC&KVodOMvsjfp#%I zZsUqjz||{X;}%xeOm0EIE6Mxa#tOhZ2Ff3fqq8U%kOACE!)r*wbsJ6jh)rC9mbQrG zN*9Ley@sYa7adZP^JAB?PJ%Qz%esIFRofNBoHZ2IL^@%3oyi{Y8sZD!ot-Ar@u=~3 z_XCCqbEpSPv>7KcTD^5K1Y??`?HEDHPlK2XOg5mMEm3(3XaOpJiNOE(liIq=((!=@Tg`Ogy}==MbEN+DyEIifGR%t3<3h+J-$J9H*E z=iE<}Uo-zygfB&g4274xC=XFYEiVr@LcV;pffSJvvZQ@CL03EnUD53kzbZ6&o`QiV z(t8c5d!erYnK^AhJ{q0pIPNg+XY+hp6opYmRz3~&rLhm$0Tju3@l_o9z{u@2xYAau zCwd#XWhi@s3Ni1axJ~!Izl}Mqx~qSKVeH{y0E@d5t9fLkXTt-P8_X>a4@coJNpCiv zJv^l0a)Y(&;o(`B2P8}9+o(btE`lhxn^F$-d?#TXrtFtxuB|Fk4<{JhcD}*Z_VAEA zepu;zY!WcA+6tfQnX*Y;w)0ARZ?I@RWLIS0&uj8oCHodE98T)8UskgJRNMALqa%aQ z;Rg}ck+06&U|f567@f`QfQxEYv9nNPhg&wM)s`{MR9@%FXx8U*id~pPu7FYT{qV56 ze=yT-0@7Ch^0EmnY^&_BHq#FRFjZ~C;>C&F&C5R6V+vS73o!U`XD$_+l`chTmL=+V z#<*ZKOZonjepyMZJMs7_vo3WNncVmQ-GiH4|svbi(BS|q99_FEkY$@)Oc0e;x zTa!}Rj9;X^xYbe@SP~*hkq_H1;2X!{8o9(i9IV2LY6(&;IVko%XRh6|$*f`o%`4%n znc62$5u0!^1TZo^8j#So?(T6jbziLEVhyjU(yi2u)J&VK0HQ?Tq}JC4NYy4U#sqH2T?W0KX?jTv0(pN;>c-IZWoomvm`0@2a6t--5*{wVGuWC8EVtjygbk*ojz)y z3F+n4w3)VJT;oG#v1N%(K+oI;GZnc>C!3pn$|uUBBo3iFLiVNQc1ai+$K1I}oC%|9 z+O3;5VVI<1CzCqe} zVHdLXf}V>#jBrrgqx$NvFGoPF4Rq&D4Ha)x4e(hL_k20Y#lv5crK#(!fry~qa`B2` z;>#2-0wP04B4bDm|$^2S5_+GuqW_tkHH}qti|NsCNX7`AqwB zjYo0^FKAQuw_4s674KrD9#)A*fSmbpx5$9A4zcH&4-U#+!#l)^#K6ItCyk zI^d!waz!Cbz(O}rXcmD^BIemZN)5ab>+e7DvI9KKRtJ5t4-+L~^O$%*aCB4*RMn}# ziTGJwi02Moo6Va05dd{(vx>cep}K`O)eQ}^XhW7%H`BO4*tFCS@~|?-L2)Wfel{cx z+%5}~ssI4pB7UjnJ0qHeXg2zK+XtOXGIThbRWAhzD}mc!N(U~=W`m7}Nu2tz#2N(a z{sEo0k+>-KF+n`%tE-KdYc$$nI7vZG!juZr zhIv$o7=cXWs{F{eQkwJPeq^I}tSfnsvjijMibmE>*)Xq+$W3=LplnltY zLYNNeZ|A@@FSZH68Drdl883u`G}t{)4e=yV~Mi=~Zf z_d?1Vi1VCS$DlL+7vWY$ekgLk_*Je4oweX}uwOWe@T;L4h6LrKCe$mL^- z=Tk%K8mcZha&lLvEqYIpQ#ieX;bdKIZPd8y^qe#RZk0I9+%BLST===CiQNmq4jgIcFwEF} zk2!&1_h<`uw>1BY`tADxw2f2f0%~xzg|>$xy+CJR8j0#CZG_z`sUhNQ?KyF4@9)ln zcA~;IH1Qw&PxI4=|L3kY^*`S|Al=n_*zwk%;qSvW?bmn(ElvUgCf5HnKea!NTJA>k z_v`)E>H&W1Qo_b}4?vxQQv1Q`?`x~i51JcY@wj?$wdOtP%w!6b-spa6>ls(!0bXTB z@#b#0e?_oUM25i~h*GUjtL=mTpS`Q`PTN@a|B9_NL^1*dHrN(klQgk!eR`YZJ*T&) z*APDp0@Q*;g+%Nc^>2SOv%Att2<*CP&Ux=9=fvn^KW2AUv$M0azuB`5EUDJ%*5Eg- z5Z+z?vHMNwg>LMX%{H@ptLMDTQSZJH8+$J~30FLq$SV`n&4buB?pyK7E_&XKSNW$# zr!eIKr7U=1nX--B3)tUWK;uybG&UEozg|E#(Z-wy>p6|Jgqb^0RHF$`o4r*7ehy&h ztgftjuY;qfV|1(7+y@dF8)<4j(3*`ITLq0-UHxm>laI^EKwTeIWux2sTy0xz9=`d} zi@gmW-5wvrwJqcRxM2peYwY znD=A%*0L(y+lHmRI5~aZ?SA~9`&FFFw(8zrm7i6+wRWe(%-xr(o{hWpODSi>&9Gi4id5_VK~29bR(;Nc;4%*M&aCmPVd$X(W)*s$vT4nXK+zJ z--W-&=iS>^^-4FYw+_$o?-AXcpTkYVvc9e0PvemOzT!7$_;=r;npC43TuBI*{Ok7*Er1`wmTGVn#?aMPRCaktuN9<04?@YlzUZWX$0)9XWc4e#n# zEqF!Z5PtSi8XCn}lwsak)#;aKYG5XDiRJ8z60r1+EC!}QE^@Qts(wqMgjonjQ`=zSAZYy;F8Wp4k^ zlukH%4f*Va8wye64sD~8On*mlMb+mH;tGnURF`YSSiqbY!29vzAKhAS^@p|kqmCK` zEQdz$`dLo-xCW&lRS9gC(>>Jut~uf5TdP!jkY@61wW(HEg|!uHql&vc@aK2>^2$Mj z>~u<}A^DZ9jrxmFQw_~yS)>tUY|D+LS||suy}ne=u9V>;`Uv&W_|+goB>{ZZ z>_o?1&)yN4`3KzXE}r$UoM%0uRr7~E@#Rv%p>P1w>?u$-wFf4JCb1J6L3Q`pH_uBi z_R8HF>wLUMHTsWAul({!CWK81#h2n6>a- z=kK6$8=3pt$UN9YCRua7G^vekq&ByZy8p#Vt#2c>wT0A!zn4^d3t5L-$ZGz5WMP)) zRhS<@7NOJ&oUwCje=Hq&dq>cLj(Wbh0+o?-C<<0}r{%{VP1KZ=uV>OhE$R1Y}c6S4JD&OBG=lP~``bWHjYMgeESnVLjGt;;FVo z_I_2Wzbe&VmFllb^;f0($x3ybqsY|4Rd)f^T(erYwz6yH4XdGXrPuBLTd^HV$Ceu@ zgHv-FxkjcwKLQ`iK`4*Z6JMrAPZRIgpAVmMw7c+-0zdbO9xV@_{GMCx&C?Ot7Rf0u zPuE&E({l-whV79+Y5(?)-bkRdiyuGSs9~oTf5zJr(HK-OPhnntODCtR@84Zse7N}6 z+4aTS^NY6^AAU9k;7Y`ttMp(>Vt`EoZT1a40?h(XuW--kG?-iwh@4s$IlYQ(hGDNI zjxq^Mad>A@D)FP;a^Zy`>=duZpxW=?BN+?SMG`$j7q@-9b#T+$G4Y~f5H1-evv?Tt;3&d1at@2RxSE3m9Nw7@c}lm%qTjU5vE>> zfnuzmyK_gM<~&fdyp5=*=#9bCix&%gq4b)c`t>1PBOXsNVvJ(y!5>>+cLYSYU%iP&BPT#v0-yE(tiLPS_ z^YTt|ogyGJLFm8br?WU@CMP6C9L|(460bvXnj#D=(OWLlR1z|kCp4&1H)r(=qhtu# z>UwnkUck5nMy!xuE(_RJ*YljGh4Sr&D5f}CKoW75iGv;D1Vnp{jQ((l zhmBN`n*zb1dv>da8+qx6kR!+QLwA(t z7AKsXsq;nCk&3Xekk@Ms%Rto&s(Jqf&dgsr9g$>VG?`&CXJjyqYX6Go(HH9WRs zA`oO`NfAKN>Bxz*tO+=W9e+Td;&5jeAwtMb!cB@WV|Nj)G#74H6@ukD!KRcEKv-am z;3>ynKr_^}uD62_8JdUyi3@Y4{g|mhfXvbROoYfddUOEGHV00Nw$9gsSi%Txm`ddN z^r^p40h&2bh!TWAJXxrZ)E0>sX$)}X`(PrPP7<|Moodu{3XP=SfpQ1BF>R5jL?!^r z3R$32WT-R;Y>f(Y&I-tGXPR&QwdN=1(?_gQHzzFWL}KLGR@-YEp8Q7nDD_ymJURhk z6J3pZs}+?1ja8Mnfgukxb1iP5pj#TK8CLr={bQg(=B!qzs8lm2Vy2xTe<)$T>?^wM z8Hsoeu;e+9y(uV9;$sqpZQkcghA}b~5=kyEb0jWRmI`v0f>s!938`0H9Un6yr#;RR zt(?>v>SIYeo)@6$aSW;~&=D%9LntjYd`wDL zSm-tMzK~1&v021YZTcm>;^8XBzStW?JM0&cGjg?(c|I=JbQ1|H%_UXQ3(% zV0NjLTGb?efnM;@q(LIGgy1=1VzY+`B55P!casON$8T!W44M1fY0xAP>=Jzeq-g~a zpgaVM5MZ(%g30Cr03?)btWC(Htat(`0|g_(RLAR7a4F|0RpZe|q4U{UVRPm5GEW#m z!qZ4)x*keCD$>g!Wjliqp26zh92h0}+`{aKD3OV6R8TN*Ky3bYxxdT!C=K{X{T!{i! z%}}xP;BH5p`WvwkO)(<{$PQuZcK#$#T}tYg!lqM#13w+0?#4;V*})N!#htUE)EEDE z;N>PNyxi!sz{^b@fR~#*0$y(Nh2iBeuEZl3SFdk>w&dbU#E@{6BZsuOipFo6a&d(r z;&Y2Db?MIMAOdLiNdJ?_x`}-&5Xx1WFz88jCCUN0L$fnQg4zLj5fw&;!sEk)Fs78b zD8bGdfyOEjwbRfB8Q5m|-VPF&R#~=ySJeYyNitm%mkZM@YJB4FLcCyuq&~PL%=-mg za1eLsW_8BwcUQyeA2;~drsteE)B+@;(`ue-*n|seenr6ChBr7ap*`jz9Ncis!i2l>; zK%j~e^y7r3E?n}SZ951-1HH{5$C*m5pKz#8-FBzDW*-loD|L9lTc1#zj7-fD@)v=B zGki0mjbkMOQ3(re{2XbR>$>a>IZ_w7k*Z(<)h2;i5qK zon?u@tqXRqX?7SRW)oaYXaJ&n7@n)2GSyy-;12gdqdjcaWsnJ|A?`qI9$E*)Or0ESaSn?wnCu5MRHN>;c+vi7}k?mHU#h^cT&c)WB zJ~E&kYlD1Z+)vmNTD&CeB!1R@X-*7#Vu<~~srXDL#h=L?P?9FP>lr3Ixs!~e5r#m5 z$&+;~X_xS$C*>E~j-X(HE3cU!I2>r!_Z%^czW^=^2!%h=MQ`b}JVYrtkU) z5~9tyZtqeU2LTxWUVY{OTPgIz+yTYd8}O$}v~-;Gv-o0s^8wKY(BL^?{0El+ruM9c zCpzdsbwO)F%WN3w{-d9~BqvF&MpJ9O-9M3lQ0=}9xU^vYRlmnU&F@vDa9oaGEufi^ zmm7Wy131AK&|Fwz(a8rdG2qKlcY$rZVDpu zTjauGSq>?6)Qr?sGil|x0jB~c@klTo#mXutW8`2a5*Z=(=Yn^sai0p%25}n^l`HsO z9proB6p%qyoa zP^1EiX7!pS6+gJlHq%{irmG}Is^(WNXriECODR}bt*cgBt`}9DI6**1oUl*~YUSkA zq;O<7Aaij(TH**JN)R_)`!dMIE#j&8K~+a%^g}osoeiQg=g0g)!5~kl>qQ zGdQ}q*uGxj0HH&IwZ*Q%rO3~N*NC?hRzZIASA6<(M|b2y@WYSaYM@4-U%}Je82myv zh6gsN^ZU;0yUyH57lNMeMGpy)l!MQ;wajZ%HXFGLmey>Fo%ytKQ{5=$ zuw}W8R9cQcP#0GT1nk*^o1vTcW;2D#tww!Isj&{+IzNBsYX9=&xu^>6yqQi=c4ut1>EM*ZOM;Ap>fa0p8Jehc*0I;gFU7OWNbkIW%Ev@DoQ z4;$u))f-3VglQEGbkN$zTdz{7ff|Y)V7CoC2z+?ftC=%+0QYBfaJNB+bm^#WtKO@P z%{zAQFP&gC^*`C#J9!1tZ61Z7hdIN=&L?;1AntMKjGchAFA*;bW+~{y3QV`|0K~$@ z6w$$_BJU~Nv2Ks79UYOe`a6_}qEGFR8=C={MPQf;WxxXXJug6u&1<%(MCJ{TPYQJT zf%%DX>s56W__NoOet~bGcHpuBDumuTXx1Ct9W0*{EgWP-()GI4*e`{~$w}P;QBQX;gSDE?{gz?t zA{mHhzfwWuR&iU%c$r&D4p2Orjp}**1*6~xPh;o8{Mf5 z4ch^7OsCB778>oGUhhre5$INIVL0^oI_ZlWnE&-_nEdygn(mYb>ID5takmjz#JDP5 znq!Q<2%iY>{Zl%E&tM2#!fNK0&50yp;js07~iC^cl#W@p>_XJvM9K zviJH~#f4?cwe;_(n{=k!ywT5q->3b`Wj^O64hDQ_o;`<|`daSxoxy|%JWH%5@APYh z{l7lIe)G({G~b!8P;g;)Uo#kmC>ROlRz!0oB7y(P*cY1ViEFvUl3gXTKx+3`s@Mea0~0h}$zZK4C6!dwj}V;`X@W zLMz9}?WEmr^jTSd$Cj0u@m#+I=Fbpu8r5fD+q>E&#yL%rF8M1L#(@VM2yl%hg6) zu}vh_Wln0!cpuW;yQ86Qpp|hn*$yEu`akkGO@E@eWm4QLwD!^HJuqNR{ZIcBhU|tF zhQW)E&D6>eDDiyN;4v~tgJ+`Ni6F_TO)xNGJsVFI_4DY1s~H3lZ!Y@d_m6e=qTts` zn9_pnU=hIBmqF}EyDoNZP%PwAzdzg%pHB1nuD_CIC*2_HCm8D(ZhGB~*dx=w2O~Anh?95(>mP(N z68%kF@t?w#pqMMcHm(GpnJdAATnP%f5Tpjw{sXncc}Gcxq7_a?s2v z2gwfY^pJ{Vzba{#xJqJajm^gTv(3R}aD{eoWu+ zDv}jXskG~&4~pn%&*%udg=^lUoeaaM?^=ePhYUtLuelh$SvRfZtR>Ynj#ztBz!fb8 z%1t1Dcdb}@@Z&c1z=N{dVfBqa`>yW|r%tfJPgT09_NRjg&*Q=v3jFExrXT#|4#Np~ zUltu?fYJ6E^zN+75ymeW;M0G)i?E|yliPWSPKNa8ZGYx)f17a4ukZ(9FQ(F+eEGDW zkQAGO6SGh*DtEL*?^g}Jd15>YP?Xp_A6-C7I+jr6FZXA#S*T$vG)3z0di4#OAjY6lnD{zNDY~E+kePa{6;g|#Df%Fkk=`6VI|lhG z>N{z*LYqq4lA~ea-e3st?53wwD#_xVrX9J{&=HR4j<9dN1?>(NRPJ;LcZJ7)(6J}Z z)e4`|u(;K{PPDr~6~9H!|FZWiTx}am{}rRtL!@irkoKnij?KoGfRnflg#u~9b$vLp z5k|q5TuHWZ!2kW5nSE#_t$8<1b8`;INZQxzYi4$K9`XFZ$4Ej^yop?zW2oo=;2-+S z1~FF$nIY)qxu`NH8I|%5R_-D`CB%XoE;EQ)B8_31hU+s%*BP}CN}_-F)zz?C6+3zD znE{sf0bqjgbsSB`g&ygWBr{+XhKBAULj5j+;^H7nk^vSs@I%c@fsX~si@H{Y51q72 zR(bR}gFapgy)+`-LwzLxx&XZjbA(!6r>7X^j{4BNoFRs*%ddp*+%rEIoTcjH8+u)E zWl_NUZ-SE(KWq(syhz**;1`cONS9rV*P<74J@tWCoiGX!_7e5_VBu^H1E^yk)w@v% z#FkCGhuMf`91S0mMwU$ZJ@9A9*uycTk-)iRTn(yGjYIrmA|9GN1u)v$vwz9dOeRtf zSpd_8=A5S~l%_F&!t}rCt%)!7byR0a=R-8a7_+cyjV~!FgN8|?%ubAHbOhZm2biX3_6e3Qxj6!ozuZwS2d^0 zHrwh&@rfV9UL$~sI}4k1t@#R$4Jk0;b)-JGt85I+A8c-@jZ`-yy`l&!Lgn~nSl}8A zPCN7@>XS))trwllMfahlHQT!`*;$L%0-<;>K9PofpQ;zrks%;$SK^r`*;sFCCE28! z)RSue1qRS7d|w*^LMd=Da0G4_(X^c7XzcZIg4d<@RAlI+4$4cj#U@*fUA?txyn#1NGs3Pl)FA=Rax)A@q` zSR}lyXaY0rKKl_Exkh9g#sLP_xJogM>+^MhGGb6w8(mbunM*%T+u<6Eoed_?w%Z^2 zUaT@kj#KI&921|fJ0(<5ATA}lJ*JkBd=O|uYAlE`8hZo(XqUD#D#~h0&6ev5-mb20 z00C*(gJAejgaK>RfWX%>6yzGWboAqsA==7v%T_~K?CL74&HUbZknZpgk_E?vQS{05 zH7R{8A470D_v4I5Gy#(8T54 zYitl#86kQZrD-%WfMjM?%X>+%p7+~KMX=;|0o65|=~2eYJbgEfRX#1xO&Jq;Ii7AJ z5P#P?G{K5xmiL6pE$fIpkd-MMr(k$VE6_WdofgTR8*^?@ye2Q_hu#3?T*$GW%q<5) z;|lWwdA!Xq3X&a81I25szh-COAlqqK5&0hH-WTOPK@(z}t0io#1Q^)WdU_qx>f$M~ zo{Hn9ArDT>q9~{#j!+C3%A1z#)J(`EyyNo-fm>eqB&~>ADn749(?$|0TPT+zZNJih zyi5FebC5GL&O!ou(_nx>25S?Ut3VEtc5B&MsToRVXEkY(Z0#JhTNTTBu};^)>hob7 zz{xFriYZM!A)eMPhb|PfkFAq|Pgx87^Tw#1PrWZo&AEbNBE}xYnWa|~No)S_ z>Wco=LK3ZsV%a>9(i;^QM(SyVhM0|VnL;b2B|#$d+rz9CxDU*{ID!f=qpTOfH$k0m zXHi@UBAY>WT~dR5bGY+XWN+piNN5QdqPSELMYa@#k@?b1StbrG*}m{Z#6Njh)y+=f zVn-bY{y?ibCId!kU_)3e?j3Asw=dvd|etH(=mn>f9p<_H1H8?EnPdXLyBSKCz zN)sT^2wpA99FF0e?bQ6yIGs1INwb~0IhFSx4kx5Lnyjua$%d(0KpavG!fwt3uT;rq zYOm8gi zr%41aTtLx1uA(2daIGcsqUoJ4U!kB zd0O)?{65UZ)zwp*gL+K{l-PObYP9w*F)mlv&Dm6WMQw~W<_+g^z^0v1l|AErp^llM zfzF`YI7ZlL1bFfrFG1%IiG2(Mu>bCD>i{PJH5t!3XQGWRLx)j>yw5m5A zdGBy%Ov~_s8Aiz6l3$~lW`an1T{yaG`h>z3%^!Msm^qhFcb0BdPibOH?lKZ>23t({ z?yxttxvW|p__EEc0A66iyQozG*`DC0AlSG;&$d_=av77%U3Hde>l|KN7vtFOxtr2E z2>LwU<1UZU&wvK^3BjGl6LgN@sx^xqF>-5GcU0pP$_av6u~+iugIWbnRz`T@;C?YI z0Sv6Hip?R~rd;a{@wmYUSKjsWuhlC0fsr*@)jo~lDg8onw_EV6W4T+hXRE7~iVS$3 z(^4q~8K-L9ie9f%5db%Me+dGo!VP@M$BP<4c*D&01-n4hE}UWUB)zO~XA>`VXA>9Q z*+|RQzsQ-*q~y$oFMc^V0D)C)Rbee(s#`+e z_spC6<@CxQe{g{CKTXb)ipeidocD`k+Nuw5f79pgZ(`;CCeFFPIbd-kW*5TmO>FXe zGrXp&PhTojB1YlD-DPySu&YSPHWHFOwwn=>?Tx*L z(`LJ!ZKNaawwyZd|B4=Mtg&i;Wc{kW!we+8?Kn;mYw1V;>RP!I5_qC^3penm9g{#i zun!bcaL9v~PAha;U)W{_%-n3(cO1kCP-BBvc!~a-a)cwRUeXEoZgisD>=N36vY;Nd zVO2NFnCu(Q`g(De3;4?YpTk!u6qs>Na}LXJczI7^_F@1$0O%Pp8nf*__iJHxg88A zKh6Q;aysWc@44c6+wLK9z5DDu<9ZJ__8ZP+o1J$KmH1={YwLbwc8i(WQMX^+aULKz z0K(F~PH4cH`Rd2NgSq~;JHPGDd+knZvCvn1PdK&H86^~CIVg_GoN6rG$&Wv6Kazi< zR``F_l7AwDovCL3(ur$c*LE5WX%j4hjBwwcwUa1Bqhl?GM}x#rAzD@PcFO zZMID}*4y`y2I|gTKNnjz*7>oeOV%~AZ@ZKNP$#6Tf~_idMHWw3TJ1BYTpKlyF}~xm zFrS7~D6Y@D@r62TN34=wy`^|OGbq@+Q`cPZF3YDw$T!>U%nvI!R8M#Xn9_0VC%_bb zS!^XO+C933*?ttM=H3lb&AnSlHTND_s;S+&kPwDCy~(ldroy)8ZX5CKp>j$E__n=q z2z=%_+w8Q}@pB1Mb$6J(Ydn6QK?Jt_CEBlESqpt&=Z@#g+KMa;5)u zHdl`{6p0x~$do(hunC=Xa;+&>@-s2lv?Ap)vB%g`Y?zNR`zRNLm?rHi=&UNBN*g}Q*`2CPADlk_f5;g3J_DLHm~tk9q7lK!|emH`C4akuz8+9lv?i@&xL zuF;C04%9^~oQ|R~4uL!z6-KuOC9@Ik@v)n;GZzlk$C{#pDrQw@n2A4baZDtGwb?y6 z=%QMh3%-xGL?E|b6yd&kg7_!hp;j&%!u+FQgxBY>QSe`UOv*(!bq0~XnMy168&xg?w9Us0awk?Dg{xjnTDd*_^CSr zV1b{i+a&ZOkM$j(Gov7cEdV6U>e^F^mNrG7xGSxztJt|k)vDSV%Ki`do8xL@?mqsQ zmj`Uga7k8d&H#6(B@%Qm0xu*a8Aj~yYYwjLu9q(RUZM&Ps%Q*KOKJ&w`+s@#XdJlLW zX~Qa%^EiEeb+ytK=aJRb_BHlX4$jpfQ^=3vowa$yOY>bG|D*{iEO%440<)^el%@zt z1D4O8ytUhGS}F(s4+vTxE|N#UR@0Q~kYCA zmLTN9B`zyC$nF%$p?i`|jlA4iu?eq0X1N;hYEnMGctv0hPYgKI`Ea z?<;}z4vMQkvi(e4y|eML;T*C3&JJAYd8NZgvd6uZpo=|8$8^{sL$EmJq*VlZFY;nlOvy z+P=?xzi2rnHIvdW#Yf?9&)*OR&Qmjb?O$KaOxU|j!YV8Ptt?RME`>)t^@1Vyov|(SAPi(f-tK>5 zg&}Gb-hm^?zr&eFiJV(`k#m0HjP%0OH23;6^Q(iRL~pQWvU zb>VG|5f#&wz)cJ46JNhy`=WAl3(74oD7Ubf+|Rg}a@RI;K`8{&(8>1O#evMc(6I5% zcRv(A^t~Kr;9s`=Q*Sa%6Ru>KLqZxe$GN4~oI!i7xTPcaH{_T8%U);v(r+98Z4mEx z#9nuPBbLd0;ph3x>m228{CGRRm=q9>9QS8tNzL(-9*hrp_(JQbI#G$Jd?D@s3 zxL@vc?RMl87G_RgL0@V|=A~9zT+3L~d#*X>@=vyGy%Apgz`ol>wZH+oc}5tSOrrX}oBBp2m7@pgr@UP< z%VrTm7K6IX&i>=fXH)-6Gh#r9zEmrQH)KHjwe!C@T4c7V9X9PR2yJlHkqkx*ubNTG z4+gD~O-*a$ZjM841sqq@a~c}rC2gCV=yzF$5&B$+5&DWQ$G#i+NSOnlg?>hxBYz|C zgOgMPtB*W|Vt2H^%K)?_3I9o_eRO#M524mm{vdlS>u~J&sZ)D`0^bv2jpb9n>q7^+$_TTDZhrf5_svT zm0*c5^6(@lOb)vmFiYsuAUr_nfs25uV6s|X|17ia3(33>d&9*4+Q=K{(n;Zg;FRY#~Hd8CGw-U+%chJlKVt)`r}2oWmiD+Y?k;DXA3WI6d#^2DJ_A$Kvjyc?he zBss>eM~j8XU6TWvmC43f6jpf_Zb&0c%s&lvhkxiY3~LEBiaKx#C^}u=OJOcV%toBP z09PCR(A^UJPlFUA)xZ)&qdbaYOK)^Y{v=7G5jheC40dri^zLuH87u2e zgFWfNeAJ5o!}9;a_z}HBUR_!L`A_z0E!_DJFXs=kA$3K1&y*hMHm23d2sKcZRcT~r zcDFwIJ4}J{ryE{8AaAcy{MJY@G-D_2GL-@^a;2jXy(0slRH!vit9e=#T!Bh zqEpn936M==h(C-Ky}+;@uxLG)v`_EC-c7@WfdCs)2{wz=xss1kb?C>VAHM%-omu#c z5<>j){QKwd1%IuD9iuB8SS}8)E?5%Zli(#g)M3=80}SJeytT759kbLF+mk%^ho`}y zO!;(+UT$1V8Jl~Bc&A#LQ&-Jl&FG62KNBNF)K-+Wi(zVW0Vz2=sVg5BrU>4M?IVnE z77Zu@Y{CCB6`aIg(fu;-S{7W(*cmk_wqpPk%|2mt9Ap}I0FA{!kOy9WPLU6ol85=m zbn?4t_?|@>_tCxY=6Fn~kUz4^5XfcSdQWeeH(F~7tHaTY_PqW%klT0rZ>5E@aLO!K zMC~j}QmhS@WHAXjpoU%tvv4NsPl3M=tH4m>b?MWAH=cRJ^EGsR9q^J?wzB*Y_pps? zH~=KbYz19fN^GV$7F*G%7lc$%vZ+Et*7@Q$6?2-g+9UN?Z6KEi0A0Xo-_uOl6MPQO zkAAXHMg-68cZWT+i^b>H&wqYqVaPvt{;@ZFrK6>jEQSJ#1^P8Fw+w`hKez5zJ^->% z#A)p~NDkmU>c!*>n)?F49hsr2@q;j*^iz->EW3?l7N8?+&I{N{&2xC*Vv>T?WfXST zS0~p#95E^|j2viDZdmJKxdtUZlZjzdBu}tfbb4NgF+w|^h9IhiYE-_(f@{E|-FxzW zT_5GM9GVpcPkF%vw*Q`vo_a{wOpD4A5rY1w-`z?EMR4 z+cvT=4F46GXV)Ruv?AHgO^T|=Nu1W(B+lASZ?2DDT7qphGO3bO64%!E+rOE?g#ZXj z@+E1yr_Xt|u}BaY3q)(TTOnP^u2g(D>MYF&{oCS)&q z=4?uUub$TCD#RICJFVJSIj$kBzAj}h-2_D2o@gHnRCmiA&ucI+X!YKOV z;@x;iYeEId`|9yFD5AY;p@+UUFjjAjKx~wqGFcP)SCp<51)r5wR#bBIjz_mM$v3Ss zjYm%DDX@S%2!+hb@*b-O$x0ifVHTfbLVP%&TpY7KR=hDL>}ObET|tW0IX?~h zIN@a2HkC?n9aXnz`pmHlm?BtWUxAx_nT#h1nL*}BfPBccI@r>FF21N7k&vEB$W=)$ zp%hp=XTT1zg)-FtRRN5=UZ)K%TrvN6LRJN>K9A|+u+!Gdy7kV%n;<=6s zo3}&%=3YliMcPDURI>#_Le*VCdITXJU1X(uQ5K2Qb&VY0;Dqw%-}7PQ9>1>bR~Q!1 zHrL2S`4JL~qN-3PVq)Ms4{URO7`@YdX=W1v{butw7I_Nki6$@v+8}(=vXc3#N zZl_*HWX;;QQq23+?a8-cSlByR9a{Hlv`kP!9ohp!lOy|{UATngC*Nk$yg3!dUhIP* zo6$di`EGX`t3Co7Ns5~9YX_|B0T5B1@IL8Qyu|T=Dm;DvpBt_Fr*Y{0KTm(SzDW-| z#>2G@diW3X;d6Qznx8+Thh4KJf4E|{d_fO;=EIltuy20OAKn)(U^_F87Rs!HrXV!` zaU~9qfS}Y8-O40(6Jn0JCJKqYlW;1ZaU7z`Fa84k2)O+o-bp}9?ulIrBumRrC*%lDN@)<9UZ2^O-sk0b>dios`wP0uDpLVYo(x1Y<56S3qx=jba^#e!B*vuuY(q7-`+ z4AsnzmjwN!gCcG!*)NTa3iB;aD>xdRRBm=Q!OuyPFHa(Mr;lr#5z1a&CxROsW3WRZ z2X1z{AXl%uIbOKBy7~FS)m!y|QKWnWFK}z1uLDP!dAX@ku3!VDY(w2d(V|?$qS}Gf zR##x>uh{+Yjay)KcAjbo*og7>;%c#fDZ1|HY^${SCK}r{xiCLb0W*=D+Th!BHDK2n zOW+#mxz|&>M;?4MJ_5bzB|jxdvZZ=pELHhbESihu7;7U=huW9rim4Non6R@qp|ck= zbatUkW0Sr{5ly06Qn&ssUJXdzJWOn*8EdSSw-x-mOa7hIE5%46)vvUm*?=Gb zWJ^=oVMT8|D{Q*FoXM=PY1r0{PW>vF8CC>#z%ZTKOT`bVwifk5D_E->>%1j-)FIaP zY;tmf)hvyowc4BV%Hr+p-ky!pW2+l{RDQoX`}>!mHNT*=HAWxuF=70Dz5QM@kC(bp zHo^+8R0}g5UTFFdXk}@J-fyQF%X3UiK#ze8&z@%t%QVN)sC*8MK=aJ0DsRuDJ53>8 zc!gMGi|>H{OVgmQw3c4Q`;F^(;&c zOqBy@*fX1evL;VOvbD6Isu$RX`$x+r{8vvtwhqQuS7t|~zKSN|1N}hEA1S%UlYAo| zh~?2=(h}A(f6Iq1%HYaKO9hP@f7jJ~g*4D!)Q1+G=xL$u?fM{xI-VD-#8d6aD<+7L z?}V=YTzXp0vY3vY&v4}(rO!2SfyB|r2b~uswE*$FHGXXxzbdAZvM2RdNByPm;hnO9 zhUZSjp-HuZ!KC|?>!qp9mN52lvotxFa6Hl8bX)+~YEl8fJm+pbNSogg{Va?~9a;Q| zj!Yc`&^K2`4dnB0W+2%s*r(z?oF*|HOAVeq?QZ`5r`3-iKdz#K;3|+0S6PPL!C91{ zcKL4qzr9Xlbn_`HCpj?Y=!$@yp@wa~ENyo(+;Y6tQVe-SLmj{aJU~GL4J5)7Dxo&5?+kzrCIBJyWRmSV@p1Q2AS6J;fx~U7z@qzWk$8=nePL zp@3;Wpfe@k&~FNNbg8AK?|a(E-yo>s`hh=ry54HhHT`a_*Tf9QGRujAyP)>Atu=+i zndz>g`A-B@2MUYJm2_4$@DZgK{-q>sRY;&|873KP3@2nX2DXk7j})`x zt@uK&d;Ua#1U~~0v_<1v$>-;Mwc=s0U?E_jRB(lkPT_Bau7>!pU_J|w7~;7+Xus5r zYMg+IDusli1WiX3qX~sbV?vDE@{HMvfg#?QsodDIj@fz%_knv;fA7EvI7)^iyee>= zF)+M?<)&#;PxvdZCMCcWKOUp?-S*zwhG&S0dvhDIN$ zh(ta4!&HvtQ|f8Qzbwt=9r~%~k>&P#V^4{3bg623LGvDdkkjk|b|MKfv%1>mh1&qu-plhi|7v6$4#iekA=hm9^ zaz4_jYb2w;*EoojC3OL(6@54uEz~Q|d`lPdQCxC9A;sF3DH~N8sZT z>og__-x$M&pi)XL3Nk{G?Fx_hUHCqwss>2|BJoXMn*Y!_cIGwNb^1grqN77(PdDt5 ztdWi`am~gvZjw|7+-eCu$U_@BLGJ|OmJFkXsL9du%~!9UZ9d22hLnz+Ihd@HQ;U5U zl~QC^e#1#hJF8=!V{}!n2syjsQnr~Lzunw_{vCGv5|6d^J>fWY$j^nl-r3u)?|E{I zj^A1R;<4(7x$g4hAub%fDcX6!#s%tA?u%sHY%{KH)%WG!(rq3Gl3=|e0i8Ct6XX)m z(|-D%B|x?N`)`l7-|TPgKHqw~zq7jsMD^@it~F}dI;Z|pkaAGo_3r=gufeZ}zfSLk z{a=&&;dcu-mH%-qn2sm$Xy~#+0uFw9{R*|>UA~F}rr+l%c%RO)m(c*QeBsvd9LuEn zOQFvk-`(WeCaxVSe0H-a*!j2s)>@<#u~lS~LDBd(GLVL#x(4bs=|ntzK8i8KG96Av zLY)`^XV&CLB@{n*3 zuZLI;ZZg2vve1ne@Q7C3uiM)kAi?30%ki;%8&<5UVWTt$hmC*T{}&MZlGU{^X0KAn zYETA`)R?*fX+r$-Ysv~RMt@-%Ovzu!RNnZ_iuu&?(9B%-X)tQsk2_pnnR3y-PA5 zbjBf)Z)XH3oDTZF2v{O#3}II)jn`@oVtoxFT7$f_>7W~08Dt1x$OtLu^fzCOd;MOg z;lRP+jZT^DN^X;@tCrrWwR=np(iC`!fE496Rs9_s7e2$QD~X^9ZY!+a%a=Fp@#GWR z6;pYLKiIHSH2ELXuDnS_-_S{cYCYyX2ZjUU1IUp64MNUU9Moab9(@W6j%=Sy)#htl z3SQkAW_02}p9I^y9FRaW1vGO3Er2Co0s>kL2IwoRD@ViO79Q1K#W`?dWC7Tx7mm=A zr23K;zzYW`bWBSG3A*YBV|D#d`VK{irU^}{{A=d7Cjs|*1Vukm^N`5FYn5qWWC{?e z$7_MFX`rU=oSgHM#pgHYb3VoB7)JFeZjI|+Kh~(GKkeCX!&mH(OL8Y48nVLFh?IxxKgZ-%9R%pgtQ$Bbfy5*Y!LgNlGpg~Olc zl`jZZ&7X$2dL-K1rWGi$a*SYVU`3*W;(@nK~a{GSnl89^wtR|0UIA;TB3tX@ptE!5c593 z{>VGeriWx%!{gRY#ga4YqON8TrtQ$a8u3RQk+yP2Z!ql~9IB(3`Ng;T7i9zdf*?k8 z{j>l}W~}D}L;wA8jOH!)i@lh<$I3?-ROoxd!SV0-9IwoPZW)FYWNgmio$|RjkL@z? zNrmVH@6ywvXh}z^Z}n6nm2>?bG3>?=zD6^zKv`pw(_y|LK5f9aVPn99MJUq}9pWer zs^RosH!$dRc-zL=3~?U6Sn1(kB5gtzC3!@%%-^Ax=ZdF2!X#5=ju>yhd?R>}2GfuO z4rAioprdc;YHL7xrwL%Ff06z##muGB6I-SPe8%zeTHLUj?dfz7k1)+dV9r~#&t>LP zq$FUGjmg+{edo-8me{ogWv@)wb`qYSuaRO#LQ3`qLznqgCX)g%=Sth))wAQ)MYZq4@=z#B4Mqk5KWadS=E5*o=ghC(g%W{Jt+Tw(Ac=yzte= z4=+CmZb1K*F%e->EGz~wUs)ygSJfkQsMTTxa1NAeVmH(++ zA1RYeYNt!fCO>y;_tQkHPAaxGi^U8L%&AK&ya`tL%GiL#9|Tn|&De<0rC^Ze2DvAi zHPC<{lQQd@ke{y`-n|uTEAzCM`*iH9A6GOBR_=NCW-$ucF0{al6Kdc1jhBnNx5B6= z#ywyJqhDwa+U1@VwUSdBvzpKU^| zm>tC!0$0~LT_vKg3Y`*qo^$G9a+kcg2+{A>f)F=FzR1p*)a@LxagJi(q#0h|FcmkW zJ$nw^`IHUG=s_M8szqFEt5z_M$W2$ZFTH0M@Ipr3q{;W}0_}s%;}|cL;aL#4wykPt zVBOXguPg1**VdPk)lGv_W$^$PQrxOx>cyn5ya6D5itE2d2`(tpDBQ zsSK&>CK5sb?I1Y>h06Q2?ZjDGaWK?S`y!wV1I(_> zGV+{RYK2O$@ZWT=srw0@;=avxl5K0;YACn^G+y_>rfQQ_=!9LFwTFqxm03}3T3=rV z>$JpsZk)p_awxUBF#E> zIPn+>b1mW#VrJx6d=OvC>NyPuWEg4PpZo`lyV8&EpKM3)V@y9DpFYMs?k8qPa~zy2 z&df(VA7@ee`Bu^(x;J#8Z)oad_FjfpJOq7#-D4zPRJkJ^;poiS(D1TXQ(azOqQLZ= z4KbNUq7D{EA~ZUg8Uss!Ei=71cjf%h#Z^{*F2z52u@n__%ZJkxTg;7MXe4}ab7V8s zWP!og=1YBoWhcFYJG}$>M|x^eR;~m=r%{6p+~vnZFG(9rq%g-a5jozcCj+^^xZnHM z`M9{?_nP#0dZs}q?G?O^kk5xxZ@Du5f%VQ}D7wlvGo-1oZ&kFX)Y={%QKqIz; zqFdwx#8kMMmad#XxM8|dc{YZAxkx#Z7c|-crLZwNlXvcJ=B;-S7AnQK3>_|b%&?xi zw7kRTZttA?@#%{jg(Bq!iD9qkO5Fz38c=D9QkUVWExGUj9a*}{Uf>4ch|l2vFuT;$ z+F@xCpIkhzObhS?Ap06TtG#yMNWQA2I(BsY#zcN7k`)=D)_f_@UBsAfKgRk3z1|V) zudbS}I@Zrtm)aKO84_s$<{Dw~P}`#-yVy0JQ`S*?Qp6Htk=iE+Y$~X9GCLiv35dw% zMvKC(pa0egs^E9$Cck^mbUT_OWi^o!K?(xIm#}0OEMo9Xo}+w~_j$m0KIx90COQZ- zCW2X3=%#3kc-b$>;}?3$<~@xgi$1of&$gDk|I^}ZTc*Qqp#LD|aYePnVA`9a#m=PI zIoZY6ItTxBO%A@pdY_nO}V>f<3eaXS>EAlqM7E%s)%)0HWviD zTT8H-s|munlkISq{!Egt2)2_qY68#6?Wp%P)1Ac2LA4>x0Tq3}o<-lf^qNKEF-VDM zOyci7aI}#B=67k@10{GXjk2pNSG!a^7EEMYaNs^jt0O8t0|UmPHac);^zPSQC&p_+ zk1-Y>KasJIE+|T|&))}Od{bo%#Uz)^93m}cyo9(Elf^<}vZxc26?KkP?luj0ENSBa zh%E#Va{#2?%x5zOOmYnzU|kz1{rFX@(+Ljp+amGOFJZm+(FrHYxu*oi0Har^ZIzJ? zu)I_#htpeO23n(~5NwS5)oDStns$Ku{sSvDhc~PqR7#B%I)t<)kblqw@(=S)ULv@R zPwSSV_myH^dasH@y}G>wHlRg89OrbN#nL3VI#{WG+Tntm&`I)IS9KL1s`#mn=%VCj zB>v8ypBdF%-Z9JVFE|d`0ul&@M1Mj^3tl1s`)Nh=fsi?g~pTOe6L8yV>XnS7SZPXBxTIaFO1m< z4xO4@iP^(ylS+l`IGQ91kDJMGmkllkBj&3zYJl1AfVTKYqN#W?tMSrr|NO(v&ozgepYQT;bBAXcett=MD=XUBB6-?VRTLb27Ml0m z4NA5s^6ZqfCCnY1SC*^)pD)NBf4nw({AH2DM|}||!H&{NHn{b<<9kI|?wU^eSc>Yt zznde6Ug9a%N<77KZYlgpx3NH!T7#>rctHhzhPkko3KupR)@^{L_BD%3(G;aqzd-f1 z4Q;CCi9Tb0slBlJVt?6k?W=z?othjaJBza9lU~V;cGSPMtwA!;G^KI#93@H%f>|jP z!crbl$q=GA++2ZPdC93F|D>_?pXR9$fHfTcwi*O0$}L76s(obT6u$}gmN1e|EVjz6 z__wq`38FMfIptolSQ5`|e09@jCY6FXNm#ZwITl_#7HP`2?!-J2EZ#XLlIqpf=r0SSt;2LY5s~1)h-$Zs z7#%4J-Ff^$XrvPVVV`R!#eiVhqlE@N-BE9$=HcdpHQd-Vb%%q-jGh^4Wp#c~6mQJD%@hPqOeiome zvW&KK2BeUJ&bwEjVxN{BjdZl zNXDWZMEz$$!*fg{H@fappWMyFxJB*rEH81=#THn`+3=_I3j?9lY|m~apdI_!McOf? z$GFpdyqjWu^j$VcPZNxs_&jtTHVAOlGyO8~_Tevvw{Is=Hq4)&vBCSr8Q^EY+vz;K zg>i5xQy`$fBi@zq$zBD;%7(1G$j%Uca-MaWZhX0(-ORv&s$cbVc6=w<*>KF4>o^g0c zF+cty&>*_!!}4(+EO`=*VgJ_H3TJ@x{47>`Ua7VmpnEdRL3YkzV)?mx+R)-c)$*&ptEWr z1-x#l%GtC~0n^)!*EuK-#c&6Q3&kU1k)B#ppHaxC1YwaNK%)TRW?}iIza=9amGXo2 zPfqRgDv&Yv(k}bhF3S5s5hGvsl?Z>Ai+}LGI3#0a=_j^dm=_}nZCe@PdfyXiV}&uB znZ@6EIx@_mbpn6zWcm2{Yc%^&CK6aYV(A%Xx59+3!s}RdWb`CGg;R|8iF>VXT*j`( z()Bm$p|@`cv=9H_;E|DntK$VhdJt)GtL@;hms5;M16yNSRDx0;T9C>mh6%!YVs1iN z_*g;^gs{hXp4?6<9Df%ywh=$eB`Z6pOikS8R<7!6d7)rt>BbzKX6Os6MDvOWnBOqD z$V*g7F-WOg;@?Ei=)=RR`4xUm8ub6RMG_1nK>|e*AoRp4fv0sETM2n!u#62Gs%j-~ z)RcYgpJ71~wB&yG_#k0B?Qln5`7KJPWAp`#D|6NHTieRmo!*I6vfHk4(5i82SU?aV7R777Cwy4C;h~>F> zEi+(CNE&I@&;gN?Ig363Ni{ICW!T{GU@9j*FATSqRDtly&TbBD*&mg3A6U>FV?Gi} z?G57NjAd>x^m*JFC@$pGfiuun^KO7qh`25&)&faNxVsfnn`{msxNQ-HbL12(yEy>Z z5e+SRnmusol5L=3@f~?nK%0%7gf*yiCDw`>jna>pD(ifb6R0A+&ahKrQ0K8>?Z&K3 ziz8NhaBB>6k-$Nv{m)`VD6j#-eTsicccTACp1xtw5V#?BkEs7L(gb>P2op6?n z`NHauURim{N3fpXZq29*T)0M>j4nu4f=PTle=XLbp4($YBa&`GPrTlw?3A%elU$Z9i z9DadF;wM|f$xH>Z+O6d2VJXo$laGZeO@4%x?WBs3=qdubr~GhnOn{i>j*c#2>8^uvhv~jjLov>a#&q zh(Gt5|rP(6If8HKBit^0kaS3h~@&Paft2}>htgPA;m(b zGJ$iP@2J>(O5PmwS*O}a;lO>szQ6=q+eSOY zJSkO09`c}mA7qEdI7^rjNP8J3MpM;xst5~}o-{4Og8m6QPW+g}E>FwWrVx*pm#x<9 z1K`l82BQxCluiK2W_oShTgO^*lcgIEOy8_lL6W(>BXQZV{Ge(lkJYLnbOp>XGff3u zSLf(iBEOO(Q8t2p9BcqrHM3S#TdKISs>aJOGnzV9m0KiIHLVKJSfWL~uDtgnF=>YZ%LRsEk0eyN88aVqK` zxL`f(9Ask5gnm!e`q13r`~`!?)}TtfF13OcAJ1R9GUX@Md8LwjUC4#n%c~^lC+0`m zzQi7Q!p?;93kleky`W>fOE7*(ps(-sv3_gW5^rQ(1`#RW``-UxCn621U%sGEW!N64 z>R$>ip36M`#k+nQvmFi{Ng90r=*gQ6;xoAasHnhEzCLp|2+NK`sV%9IK;ak z?cv%6HvEVA>^U_I_0gFQ(A(euKqzWt(&` zMDN;>npQu9Wk&A!#MjdD|GL5lY+-Ir^?|+|Xdz03IaJVfDU`xFG%dR5@;*2f!e2<_ zh9 zv6FDbe~Mp&q)sIe3IRI5t2BS-QJhfGqFUaraq2qtO57mw`Yq9jC_D62=2bO{h_M_q z#$7PQ^=01+YTo>h2b=+u2oz{=xSR%^@|RR1a;EWdyMnJNRI16GE~jP6N_!FjRxnI2 z%W=w{kOn`VVZ9Car^~qT5}^*5q)b~Fp@;~_Rxr^k$`e+HbE(JDCTn#e?u4h^+JzOR zxIo^W$lw=y*?fx@S+xrg{h?nP&91JT7LjjS^gT-Qp4bJb zU{d7y%l9!fFM`~ESl_?8H z7^oH{D1L;af1(1)X;!Zz5a6Grg6P`pdJBUMYDv#)NV}`ZNG=ZT^I6-N+BkGyHts4ZVt7sO5XwF*Tq&#V-|8LDse8##7+Q^sD7ENJh|=Ds`14 zR0=`)bxT3#BS4$sjN&IeckRJBhz`k^*8LNXpjQmp58sf5& zmnGRy8<#X^Ev&&1Yh4V>b<%vZY!5?gTt{b1PBF)VGS98l+3Zo3_m}cC3n>eQ8S_aP zw!IGBMCfqCxwrLc3}|LUSu&`3Pacnk^Ayh`Zfw1V;R!#OV{pPIO_59dIu;{gQ><=O zWi)%4rRS*pYC=F&if98@Qk5ar4jqcuprUiB5ypv(rX}cgR%c#jIw(z49|KJoT|D&x zPvR^uXk%PwNW6hnV=CK&W;kda@(~?V%;RJ9x^!{7le+Qb_0C%V;IL!haPg_bR7apz zILi*;{rI$^8I+6Z+PyZga{;hTiQ~k$&n0<7c0`_FU&2NK^ntU>yo?vyY(FJ9hj6tX7T~lN; z#-if40cHfDm>!U)vOURr!3}s6<(M61Q`d#;b*|cNd+60?=GeOIK%7{1<3R- zh9TIh2;f;QgH*Vn&6S;y@Nd zN1%( zRAu7DTMG zh&~uN?TZ=2EaO;ltg6vzY}~Nwm#&F*=_-<|45K3IrJ`m75n3-UlR0w_n@BM5lL@Lf zdvYH6wUiAN$1_LgFbB~CfadEUcct}Uv=HTppq09lak)x#jgk2W>U!<=5R^L1HJ~Uz zxU6N2j>0oLU+S| zf|rKP&2BWq&*RQv2)llr=<9edC;ari;$m|y{ozQ;K`VfVp>=R48C`hN#$^&E$hQ`m zBcjpA=psi8L_swZFc?ev3wE<_dhM<>7LmhQjQ^~*$&`_rF_~n-Oe?{dLAJWeYwf@% zvF3DtoU!PA7v3s0)~WGlY&aP(-xT}8NX{v_&WThII={w7mz@yhSZ!;332pHotN>3= zhqaBxduV?o{v5u*52v7i2&kYPjR*hA-YzkfI=WnuV-^NXA!?5o6y)I~9EF1~E6%mm z?8%Z}FtoI8PsF29loxMdv9~Gx*+`z{__TY2yEZudEqebJy?-^)Yj|Dde+`NH#r+<6 zatj}`g=og^dUKF=Y}9-@ct|})FsNvHjgR&12Qt{fh@Ss=-P5z3b|vFE?)bquxx<6= zmbh}@rn2gB`MC@N7M1~hcc93aVOS{5c%l>CpKi;zCaRh&y~ZU5ew$XrtwgR%*gym~ zrVS4-uay6XuwSfb(cyd2CeD+0+=%KiS(^7ueOA+c{Ro;qT z)QW$yES6f_Mn#ERUPiC=9)V7EHV|$M{;4>MngJlXXHj-g9O~|`Q}k`Xz+^7emwFT? zg@59uk9vM}^@)2c;g3)?(I&E^dnTo{(KTl`fO0Y#E#W=?lC;?6^tZUZM-{5T_ydjQ&t@a#cg1rhfz$$z#*C6;!xZqzn!TZmkB#yw#T4tPReQn(s%qtIsqy4 zA}w;Q5Dmu8CHB9M%snTpaEes7^SYEY8W{LG!inREZGK&XS=E?XxID5yq5< zoh>h;XYn&EB~yj!QnbaB1%N|Qj>n85A5kT5h?#m$xBVhD?_*2_p+xBNa$CA7Nz5t# zY>H$xUIF@K-9lG1fKIL|21MZXTaZ*^b*jnI0n5w4fO&xFF;)vQ}ITcJFj*-k1Fe!mx3mqQQEtFolW2HYYC(tmZYAr>YKW zRfJ;kbJ|UxR$%B7%y4c`tc#bpD>E9(FAh@7XYw8?K08Dcb@sG8`uE}CiU=5_vp(() zWn{?3;T{HkRJ>2$2bS2M=KO^izH@u-vK|LWjnvi3LkW(1lb?klzSrvgSLuzdB%6>~= zH)~=2__N$~oOWO1PS+lH&85pgU{A&BrkW(oM4$w}1=H9^!9#9B-YkUO$<2J6&%EcO zQ6QqpS5n1SqUGhBM#_V}Z;lg%zu{x*x3?B_DzAwRV`bLz5?s#XQa`o4c3!Yjp%;>Mi>YG1#D^4EVR>|ZT#JzZ8CekF~#Jnet!ul|DDwahe>b^AHQ=DT|q;y%s z1-9e|JS=zTT++)ktA0b@&9vbJOe{pMfud^2u#`vxe{#N)+7X%d*P9^BijuQa0fgG= z&77Hl6E%>2p}8E9ltiWwkhm-j_);cf9=+$hA}YM+(*)V7%1FAF0Y@%Hqc~8`X%G4n zHA^c!yD&ilY!)8O_Lg5k&F&E?jxnVc)_oN#tE?1#0T;f7?)R{c0FAXbIW98B{Y*MF z!0!;^xY@;myRJW{Gen`Uhe>=qvaZaOQRd&{zr|2K*O?S;rwNDcg@SqLix2`AiV(^Q zZo*4NIJ@kmlZEtUhlQe+E~dA$U8U=AM{v~?wt%kMYnMOYirpQI59tDws2mQw;VvW4o2G4rOGB^6FR6tsfC z;ClQx&+8$U!A&aFJrHxD%17VqD4w z?WfH*;sNX_r_q#>Z&joE^qW8Gn0*>Yps{J>lH^t-R}sk*3|${MAAFr#O*sO$UZJDIl%2D7o)4rRbtAqU`*c6tZzq*FH5LZp;; zoSsP1;PYZ?i+k#`=1_TaG%ti(?X+&;77mUUPG{p%Tw*#=QJAP;5*4h13cZ~xcA^?E zM#yVK$%V*W*=)Sqebo>+;ycmcbF?k3*cpA|Zfz?}s}}HYT3WEU52wb`K9^xQnU#qo z4XcN=>VjIsYk4-fA+lnHPb^!fMktzcjzcfxAz03c90fa7x|I;9BqHxw%Zjm6xsBxh9Q)Gf8utL)2>+9thN&bpyQO3X=vLPAC%rV}Wz-#;3ZWc< zny?tk@NNMk5rS^YQ=!D%dN&9*2xWyaWKiL}6Z)JyQo4(8sr6nuIJcIQMucO^b1Yx;izu;MMsn?79 ze;~-^{X?c@uH|fncx~OvB3?R?IQ5#MvtQ*R`seTRI60M#4N~n8NDEHX=%$ABg>wC` ze|a=Po(#4G?nglGb2zQzL4nJ?S#WZ_O=pq2>~u1UvTM!JHM?uT;SdMTqxQpnFX)46E~h<;6PA%;D&`D~TJ3GYDo$*T!?;~c^kLJA zsEGxpmfAsO6I~1EGk7647=ZBjHWB+9&!sXvSpt)TynqQu!UGkANLi958qq4rmXzmG zY?rclFwrsztl_LxnS}br3kM20*_<^Q)~`tx4ri@NsboZz1t45WX(h94jskRAaji)m zip+4F~Kv!C9r*!di}Lv%niw{XUIy@9IyaoaIXF z;s+p1&zbAE@E_T9dHEN7PKo9y^DR8b57K9jrekvk9dEB-bgH$0CGS%i*bPl0s0!`;?J738U~lCT&tnERwL+WB-bj2 zan)MIe61$NTBTyGQfsZ;(J?$hFjoeQ^|O~RnRZNMvuX>>Gz@YE84U6gy*bF6xM_aS z)s)16B8rK1AWZGkAVNC1)@d*ohe56t%7OG@`-)$ZFHF#}C3zBpTnh&n2n>hCYYi@i zPf3!7(-55ms)f}w7P`RkvvledGubs9Juw@5Vag)qeNvdR1irVPn0d%`lLCwoB`C?1 z{sUND(j1+P6!GaSw3WM3825M{B3B&2^71S4{oz9c@y0=rqB!FZe060*{%NmJ*{d)7 z@SK0tIK>LR9v*>Xeiw#81;!!QcUg9p$m3}mx&Q`^=7is!{lb7>ugZIvcjgtsglpCZeuc=gVc7?IW+Cfz%(z=H(ee>b-tj9B< zce%rsmJ~SCHZ5l#HFW~;EG>K#E9tY_S654!;aVs^Li@g^7K0+yGaK61$u5<du^A#_7~*R}L7b*i zXO2tFJE7h?EaMJ+mCU&4O>CDK6bN8Ooxv{pD)ul77r&RIpXAT)0(6dLwR%uCKBN0< ztsVx7JxW>B>RR>;6=iwT{tnP`2Kk$+t@Eeg+Tp zOZ-%cHIjfi%XJA8;e=l@_KxXFBL%*Ht2Yqt?4>0k$T_o8rx~jP$q(ER$#d8=pWrb^ zSm7}lIwGd$XQTgF3zqPKC%f7%iuB#myLRiR&^&iqG0Tlt4pl}*qlqRcn4)9S#>LtP zB9Lo8@3qMd+nYkJ1hg+fSzVK2%r8)WS?rYJAB5hZH)3qAtoS1CA5hUK%^Ck>6q#I_ z*Trb^p(NFX5Ls0+m3}tchTzdI^|2(kbu?@urFt@vCMKs4hQ>#2oSDj!(z(g%3w!he_k$7{Q)|38;-y6`=>Dix!-=jb7 z$w#l;k0rT$2>7h3CKK^R{L4i@F0y?vF$Hu2SW-A7kFwE3CzPT}$x`T0JBID^n!{aU z7qda*2WHi9KNp{A2gYKd6aKk(U-B)teQBrG z^LXQ*DzdAv-0i_8D0Wgc?$|Jxtny_V`cvdQ5-~TMSCV=z-b+)5Bb2b#$n=X=knGnB zf>3rN5t~)c%@diReBwGh4o(rF;7b+@bFF9@cP83u?kt4=_9b6J;izIp%!Yzu4@p>6 zYgpt?_6hF{QPmT8R=@}YgUj3?`9Onb{2~Zp1NR7=Ck~hvo8}Zt@i7 zac5^+O6)gcmXV+kSDG4I6l-HXd5@%CkqAD)uQK6)C;>U#gB%SwnVgaSRe7D|tzamQ zqONeKPED{NAIZdaA|D4-MIU+67kyIFcG07qd40q^byBi@OQCOv_q~4oqlF;K*=AG^ zvkW&^!D31(aHu;{zAdQ59gGUVewV0}Ssa(F{MvkiT{)nlTn)@>64fm8_m$?MLYMvx zQOH|-YS&X%O|W}XKCY2y+}$1daNv6ExnbY>+RCbn^4O+Gorcyck?jr52Gb6MCrPYZ2L z$H&Yj9poM;qU}q8VU1r{X~@)f=R7DGQp=~#X&4cA&2t0Di~XyrVqLQgM-2;MlL>96 z!fo#SNR0x=^8RKkJp?mdnd`N9nQ4(yZdp`#!Z_Q(eB9;uC&$#-3;Ct4@E)6_DtBV& zPb|;ckV0cWEi-Zh{E1gf*Adi0iTQ$~XeOK@}8lzHrYj!^~_c6taP;tc3vIQ_c!X$gWj+ci6G# zcn7S{~OU*5;_5dW(Mis%;l%{ z-te34IHW!GNz=DXGrvxGC$7`v!1V+FWYIygL)4dwW*oA(Eoza$+UX-M>V;ZcnQIh7 zsH~s=$Mt#wm9n%Jxl)75k8=sFdJmd3^hTfL96lft9MG*K?eS=>`!yk}J3}SR274(j zcIrsYZL@GpoRK$CjhjyiELcp)7ufd%4! zI|-^3)a5WjwQ2>fGV|I~&7qA>7iLB67lrm|2`B#V+zrb1-ty2n1W+rKE0Yyd1|DJU zHlY@O@_h|hQPvE^iTo8&VHq{Ca}>65C8ca2%X_EB{_`iULRvW)J0tSmlqGI917g0w z9Jdp9Mzz~3CVY>)_?yZ=Gs9dCRSy8<#KM%i9ZL3x`u3-1^A;s`>?U@jol_EgA)N3n zyq+t`f~U~w1!l0O3kk~T$dtIwA#czM+M|i_fF1jUco+5a>|Tl6wcLpm8EFXKo#d{S zLkr8kX9xeBZY@a~>UzK#@GNKIu@N94+wC#(NtSQRL#%Y#(cO`_xKUuZKvXm7+KJn0 zt!TcXKABXm>u42l1oq+z?7qLU7DT2vQ}zK7JS?-Rq`eI3RgAWakaT}>(cXEUS58vX z`Q(Ep@C7&&%z>SXQb}+Up23w0=g?1$B>ccaG{Ki@v!#=4^#|>z_xC0>LZWvz&8g18 zxm%`;nZEd%TcJbOeJ1*}@sVnxaq3~2yAZCqUPZ08eA1|=h0Q{}mABj*3>=piT#CFV z=cAC_gjCef(edakaJT&OUslz(O3`AP>ZRmZI=8tBx5T?f)@i9X@(;W^&g0W z{(B#bjB0sn!3$5jXr7{i zmQ9*{Y>XFM_kLFl{#!(|D-C^~Nh^LEYNf)o6KLskpgq`3HKmbou~DF;`fd+=!|^Y$ zLmrG1_I<}g>c6F^cJ68+o@`KubbR@=u$}@%!_iD6=3g4T@egHT%?{qtDH`vTiD71P zqfgQ?xG|@W0lNdQT8f$C+U`u!dLdKIb)rNO~9Za5Hc5y(;6vXvNo4hHMk4NKqq$mKL0#ih(i znV|rC@`_6!rp4tJgB2F~@=A2&lzQWNys%;e%7nU8AnB7Y&h@>(w}zB2Z8MdOFZ02PqUV$5NaEo zo($M~0esQ{0K$@DQR>EVS2T_Hy9VGZO$8l1>szWFlGFIcnD*6Znpj1kT+_m@L}t3d zmMzkk*@{>y@TpuC7_pSDE{s%g{WYl;PFdZ4`B6X5yw;$0Zf85ctGVdGb7$$TAsSx8 zO_>y0uOA$EDH^hhP$crN2vsz^26>o!NzKy`oo@IY5Cq)TdsM{1ewtz%+F$4n#Rk;>dYFo!9@ zreMxVC~r>|#y?c@?Bl(T&=z(0J$**Uu%{kqr2aQOI|Tf|A3w!&n?yJt;~pM4=cd3U z?E54U?SK~}5X56P`64k`w1An>67=*X6CH+YX zIGls7fsunk)0CI$3Wsi9bAMI)Z4W-G_NZ%*?n9zE@Z_FkCa9 zeT_&XpVtLA8}&dM(r&i)I77TsRlx+5xrK15z;dpf%}U5 zpJ$u3-i3g78GC_Th}d|^)DWk$*FU)tvHGrslr)s7e$ycyFNEyH$cc7io({VuC4J?# zc`dG`nT?+nJwdDLUS|aImZ6J-kXxo|O!%`e_myM;7aQ$SgCO{W=HdE-5F$Zk25h?0T z;W|m|N;gJK|B~L}e*$6|3wjs!CsWf%Gn2~y`0qOKw45W{v@3GrFFd>Hq3LNWh9Rbk z3l!M6Xqr`Df)!C#6;GydBq>B0*S1Y>x>~7pKxtdSsq3iM2YoDOVS7@L@NE5+hVx~O zSxbQ08JL&(71xkgOEF$i@;I&_Wf6VjYaZ{L*@I4C0_`z!DgEU>0<(*tI3RGLktk@3 zlG$3crZgX%!r<8AC6l_6;15hvY>W_$Cz21)_v%X0+$+qfeRY|5YZHL0f_HopRKkfB z!l`#=FSJ*kai+YzPKKm@k~avWiN_)>D#QU>RqH@ni~L<=JSZI?7=U4=BFHMmE$rv{ z-kiVhIW79?W3dKkpGgZm6$v6jET~8=D~Cy%oreHcchN+Y)lbI=!3a}V6#dI^hnY$# z5q{wV{bX;blGyH6k^HCUl)_GkXznXCgF*R98p|-BruAEUWiGsNpxSZ=%?!13&q}y^ zvBx5Y8|IfA?yGYwMW{26d`Ak>wam-9AXeuuSHmk&PwNp1R7qSTf zUq9+pD<`(>dAB&^uItcqSe9a=p0O`W5TY&wr9x~DUA_dpDMr(M0Enl@y`j7DjHOQq z$_Cry<+xd>DYGM<9A`nKJ24m(GZi$S;>|YE@@V4ocnZIdr9<|K(c#QWYnSYbW(0gS z)VtJ*Odjw5i18%p+N=;9vq%L8M5Lw2v>mBJU0H6~ds=*Z=B1#K;xHx#;9msa1BDXz z7!b9v^PjU_(ar~(OOnm=L2SCUF0C|?edNj4qRA+LGU_9i8?&S6ryY|=eRqnqU#M=V z`6p&J9}kBYpOj24=%nJF9M?rg5{BfA-&IN?*Gu9gLOfasyP$mJyvekoEyd-kg3QcM zCRh)pCPBQ{U|0s^V=kS=Ty1z65lu`^F|aG7>w#zBo$T8NNIt`Pk_<_Ib~O&;j5*y{ zx+UvyJFH2#l@Y-bP)2022}JWRSqwinA0oSFsN~E@RF6WMu&6db>nbVkH}?6+hDIe) zbJ+_=8TdF2%H8q;{fxxHA3gscpVtB|OA)kIChP?zbT!kLI6-AjQ!A03b zUX)2yXz(8h#57oNektI?O*HL`_)2={X)|G5h?311hWrSe*NuS;tR7gmqFu8vD6XQC zJ)GqQ(!PtGp>vF6mhH%m(o&{+t1mf^rOYuPcUsjSOCN4_g~w0>}Mnb^QY4=-Vm@0|^ zDZ|?n)5e#%Gle)V3jU!iGM{2sc4uT}_PYF03#od4x!c|p1~f= zUcX7O3-<=>yOQqJGAkQkA0-f3S#c~8k=Fc{ru z4u+31cqJWq$B!7@N*}ECUS;&3e6KVtx#e=ZI(7(oimyJ6UZmH;cd&yB?b7GDbT?7( zW8c&G@Pxqfl`VlLWW;v%dU!js9zdFQijzKY0z0nU0QfUayK!MQI7;~VE>;+Jj=aS& z^!U%mAiuInjnPokdD~zL!INEvqzTC6U?sA#^-cXjucAInrWP#ai+@2`J_-MpV$Gg( zUO6^*0=HiwlKY+-0;Eg=51d$8Tei0`oz(ZV_f?=~`gSID>w6@Wpr_a{M?X14QbtsB z9eq2LbVN}dBrAW_a!N>2!47&(p5l!{t7f%+&sxb`36Sg|c<8N^ zT)sMCsq_-IED}_!_&VJ9{)IS+Cd@7(t%-kiGwu}sq_UgQPAlI4HM!t94y*qB)k`^Y#XZnjeQGZqUEVZ=Q zWBT;VyWha+Z7OmqE8{FoXg%SLDhqI)fWG8Qx>TBiU(lELZmRNvkmNo<;*O^`s4~By zTddMX0$cSU96z#*-|p@_KIp*Fd=+yUd5;rt<-A4J)D;|mab7*?@RNkp+9s+QGV&5`#5cjs_-0+;Jd|D%5!bF8i zQ<|y@Y4dSg2Lb`2>+*Jej7tbc*g7^c_*}AUDOV+eh?>8GV%O23$^h7Tm)W%r8S(-lj^J&N)kM9~D-3DsmDo z@t@Mqpmz@_4=64P2#NNp@vc*-oATV8X0^nOK{{qDBSxj8I@LVYaC8$^2&kb8w5Jgs zW)c&d}4KZ|yC|HW< zk%-i=!ZZ1CZ+}l5;|cGXqoy~6Mcs*TXaqN&)KzDFSZ`B9ut~Dx z$D8p2`0}~C)|D#XtwKsTWhEFjHEL2aC3iIFkbPGK3=y^Q@jC3$U2_%~;(h7h78B|Y z+SGij_(;pi8ibM-0SWB9|1VDnx1L#q%_3!`2UpBj(tkI~3<7)!0X$oMn?cfmddsLLCE@N4vA} z*ECfGyzM+t zyN(Kvj`yoa+*-#6^_-8tQR9Om9jiOHu0={PSDcj|;-S)+k($GoaSMqKjAg|xsC*uY zUZw);49*1`n|JlbXR=(}F1cZ)p%#k#Q3rubwS_6Lacr}7UDA(U#br{Y`cw2X`b~3{ zsPUt|s;Y!kRLyJ4=`r*^8k(oVF5^6_3Gt?l!mOA#aTdFn_d04BcAMNZEl2*}q(q}$ zUXpNbhR7z&`I!rgE2si-!k{@f$f?uqmQoffIO|wWbep0}^?jl8v?8MzA6?_WKFzgd z3`K1*jG)VfEzt=YghhAj`2@`iEm!IsxX@dtAfUx{Z?;jP(_7!P2Oep(byNJ6tpAQF zN=9Qa>@5If&Gl5+32|OxlFs@DW0KWKAzvnawIhE!C+koIb?hHvU1Ku?wUm^BQYVSi zaV)*MAl_k*`h16Go8v#6imCG0=O~UF&f)>u`_0h3PM#oCqDS zA+?!vU^Bx&jWuhsO3POv&Tt#pz}&W^_W3RmF$`oUupBMmOVW;I0-efosq6?Q9BSRA zHTAe(?NDOK71dbj7sC?l7A~BKEA;3f4PkQ&lh#X+wM5nf?gfkFJz*DR@JMPl#@^sX zDRI_kY3h8>-DC;#TM$<#Kkr#cb*%?xfw)aarW@$e2`KCO5Z`iJk;`g9(NPlT38};p?Is!hH9t zkXlS>iJO+%7V6M!P)YcJD@fq1DR#_y*Jd>J_Jwwpm3b;U3brdXjdsc^fjJ5bVdCzk zE{Zhm<%D=@yP@ge3^ZiEsV&a|8WrP6$IZkGVCvp!Q-m7p+FGj0?7h_;NyvOs+mlW? zQS@;((tG{deofXXYzu->g!^~ZMYaqxR#$HULo$*lKNxUkfmr(D1Gj1bYqvP!EFv1O-|5)<25rU$Io zi)eZ$QeA4GDObI{&-AuhDcu*_Z&g5!D@Wowj^7C4uJ+1uIb##!8JxnJkLiYbOABwP z9jEO)kk~6sD@NE?+hQzMOthUtD4xT04@L{&FU!_$7+qN1n~ zCTkQjO8o^$FG3PX1__{JXS(;xDo&vWX8<2F-y20GTeb9u+sjGpQBIFE z_j&O8{w9_q0OGb9o`tQhbr);g&Z$+Y!94BhUObY6aYG|`(g8Qd*3SL7W;yRW9!au= zapu(kD?t@E`&zdLS$FIT{*z7SF}LpW*pGrKU^P1h;(DA=6T*`1wZ{;;0x*$1^o)7< z^nCov8q*?}e+w`yM#cWJhMwOueCSi#c!U$x^8Dw66?Q*twT9d^`AX@D$<-u*{UvVx z?ZIpD$5qX=87IMZB7$iJzA0HUV~5^w%YKKUD-Hc-d(?}Jbswy0wO_HIhcRzTEqvfL z2v$;F(O%xP>#Uk3r*Areuva8(uaAvh6jobvfj&u@pN(Pwx_eJgSP{5v51-Fi#8}_I<`p;ArrC*AQ~eRupS{ot0iX3Lo}gn|^68aIsmBo%G!x#y;U; z)lYdu*~izM`P_HkfwwY`BU>~ zIlsCjx6)a2B9mYDMqo;!@9~oK=Kz@Z zOb+Ihfn;UQa~dZ1BvF9iXt$&CyzY)3@UU}mE-6+U66I}DA9W-!sQT5g@5MOx9iDC| zsOA|J78U|z_kJCmo^G~^%(A?+#P)7%dtj)JAE(t{)JD5~=_PB1et2p)qBo=S zY7z$Mfxj+Sqy!AZS1{hMG;B;D=Bbyp-WiU}-stNlPuL4y$<0x%@Og)vgE|Av0RW_&>`#?A`pwjQ1d}Ey?kCGPwj~wL<62 zjw+0>Cf3MMI~^Ym1~Cd?CvZBE8U;U011(#XN~YrqBf?iu2R3e}l!+iXI4?GDBahU7A^emIhG-JQ0bQAO{P^%K|IfQE)7P?iqIrm!pHGXbfOc z!tTQ0Bl=;FF*)FAeIop*a$I*Tl;d}4Hc=QBWpI+m%G%&d@Qv*K??&!Otz`0cQa8I6 zL9LWhSO?Xj$lKUjRi5bUNz0^A&Rc_Y5jh`+poNDUb_`nqK5mgP#XA{4MOEp`^9J?8#}wjS(U*PHNAq%XUqyDaI} zh}k9gth&rUW41bL$QRIuE;ZQ3b4#e$Y7CU zu3uzxA2^G8*Y;IiuSesUHj9uh4fp!ERv?}_-ZMcj^GF`VQ{bH=eYJLyVDPw$r+?N) z+p9xvSPTONsKl`vqnqh1L49;;bX}O9nq<0(ODZ!KQvs6Yn@0i7t`Ir}`ypt98Tv%N=On)(xQFA*` z9;1cMuRbwHj-%m<@_6a8f1qj11t!<#@7wp6(svV;8HR z_^;seoaOdcE+w4t;^?@tFwBvB$NZn65ljr=7-|gPCm`)of#c4rdCh;EJX=rC*{ri` z<}hrGjE*#me2gD1G!`%q{505jWy8>Gcjt<(S-@I{XRk7YV~!*giX)y>vZKjI06U9u zX8nI2j>f>Q=Zc<;0QkRCOBg&^VzT#S8*!|%%NTj)IuFT5*=4N&JFE4}qncfzmXl!A zKv|+2ZXKY&pR1GhN4_|)3d8SsF#If=wT|QtPb|R_{Sw{S_9tZYFS1Mef$6J`;AKPO z!h$gIB|FaF(G1Z2L={K?BgjO!LTV1qs~5~U8niN4Y7Z{sVTVaU#9+%}SE9uuG9$=E zxK8^R=jJFn&xa= z8?+0_wPI9(UrpRVEGMWQidBx2$rf5W z@sA7~RyDT#akaNd0oWqZ*Nq>As)^yZb`ZHK^%348p#-wv0VE;iopN&6HFub2eK%*q z?rS?A*Fu-I@p}8=%0q_;!8L{u08C$i5aLT0hr!{T>;TjJ~OBbO|YL-jykK%RFnyHGD;q=q<&A1<2| z@OHPPLl?qXb;~3?>AT-7nZm;q{-Ko7;$H)j!1BoXPV1vKc@Z|pfmyiUd2me_as+f6 z;NOLu%}embf>~eUa>=13ZB@-$#r?Cx@B>Ks=*Ql-$wBudwYA^IJcITEc(&tzR@>@E z|@q6{;cQ9YX5e41r>8vTBIed0X}Ujw@p1Z{8G0xGi@iqQ!;=mL0YfV@PG zq{nO63Y;3tVRqf(isB6%P`K&7-7jowUC@H&n(CcqS)H+{-n$up5@nCLA%x-UCIrIA z;^l?lJ=AX=P$=V(07u?FKG_Qcpa3PvD=8w}P4{ZQfrnc?SLT(7bPj~0$mMv8I=d}9 zimqkNcyY%t8wq)dzHVA=;&9-_Z2~cgcaO|pSmxQZ{;{6_9z$7}()H(1;cXB*c z%UWC0SBaIbrx+k!? z9jw+EZERt%i8O{YX8@KAi964Av&*7$%I)#`aI|_mf0>P<)d{yWiesMTTN`elAIP$c z`@j6dEAyw1r<$Ig933%Pdzx2lyk&oP^_;Dw`-7s_B3K_sJC0TZVhN+%qqs0xe|@^N zvv-Fx0C(n}lY*zA;9FqsRUujGB^@gp9=bBGNYybK)b7iCkQ%PI7FUy)`^1+JGarQHED?kS0`OqYP$-IZGZV!GL0R8B)Mrr{=|d((9_)c_eG&DBfL@pr;gA~ z#i$u8bIz60^=S)3Um=yCDM;wm0`SY^7zI^L=_-h|O+jW((zO;h#rGNOmOg>3HX(*t z>t~>m<7qVheD~}PA#Lwjuuy2_XK8t}h=rW=gQ&#TW5mG*W-^O(?wE(0*U_P|xD&Lv zMTDOTI;5G82QD?3WS|bqdba_He=*KYKklV1xK8D?wszCsY2 zaZ}V~Okr)_WAs(&ANFY{0tcLKGT|GAqCS_v#dq8bF*c2T5gB?{wyM{eA%MtGQ%wPn z`>3exznYWH5391PxjZMFm=IR>qz3%+&38hgi45vw`%o}6r+7u z7ygTefM@i98S>3$f(qk(wY8CvTW-$*J0Nu(p=w0~(j?TLnITG%F7ii!-v1=BR*%SZ zkFAYT96!`~Dp-p3MF0H`Z`{L{9@l3cHc1`@qq=H6lrOU2W(^(P?bAsJUe9xrAay@+ zee`*psTe_WcL7Ubh}Sh?=XTgIrpFZp%WgM=;NfN2KgJlr{B)Nn#FV!RhLP8Tq~ND5 zeh=;JACDM!+$tQLreZ2C_=wJ2z1NL*)9wc7ZO4ZL$D%IrA&BHCXN`h?d2A zr27@!6&go&-0t65*lX8kDvqw zUbrkdAM0ateFh$$nGaG{ipxD~6PpwLG3A`Wkg~0!$q?mT`|Fy$IewVA4O*?4@scVx zyZw8~{ISEQf}yK_(LhI%74@S(N>d;0*`hxpCIp4Ie|Qh{yvlQV$WD(&@=dw8_b>I! z<*p99I{oQ)c$&F*h1A{P=+1iE_`ryri1tpUM>ZE7}1BSAIbGa|Sy@5=SGB*RJZ=?8&F?V_$}21tu;>6Td1shCP!5mB(`4SGAo5 zJCt-m-T|}A>6LS0W|*Tgzi=Eavc~sLGsbbZ(qkw4<&xXIoCzvbri? z%l$$o+xyk|67{CU@iU4+Co_$0H5J~lQo15#KDW{q$IKOuB8Mn*M zwz}T9%aehLVN{31Xh-xJxpXSO0XH=I+$*}v!?ydqhz<`r3Ilc=71U)-oD{ZSsO#rI zK@Ok!UrEanr_`JNk(I(d9#1zl=$&8)jt&%FUp6}`&&RcD)0t=~eaSYj^-hZ8TYZne zW0`@B+AZE+&9)Ec$?d_W4yD`rQcVgs(3x#AcUP4bwcDVJBjNund1c$Y+J9OdRYWHT zf3*K;j_MRTyp&_~+glvp-sj|RWpO8WiemmuPi_~A>O?xco{wvjyT(u*tCeo&L2D~_ zAIjR)?inU7%#^S2>h@AJ-`tG^TVxNU)UG#c`dGW@%Qkp@?bR}IU!ARHV*5L=XJ&6N zWm&i*^)$rWytG@gycu_HABOr|x~LSugGRzOJwy=(HsiRyF@tB6D+OF65M-SMjzp3foi(CDIDR4$@0g z$MUujK`OC{~e)P={DmEV;ITs6--f9Y9`+LM7Vtmp1$QrFtk>K_d6-FV5F zjW;P^b)LlBRy|AMT)du#fjm|0Z(CW>90H8@bzx%Nh{2O8^VfOyhT36`{S>dgQSmir z!sGjuz+_q!-q#ZI)GAxb#|r*>SPnlW9+voo?29fk{EqIIBH+SJ7^+@6=7pVbF+c8! zJCzCz2sG?1w`23JMP_#8>|c3ES^U|$>p=EFs*Wjh(uQRVl7}rSuB#cR&Suf(HTrHv z8x`4u$Ls7NBvEpWNkv+^M5Vi9IBYYpJ9h4Si|uLTJky}11(`7$|L3uw*DC;ggVbFE z#{R)j2p9tA-FcE2b`!XJw9a8j!~2Kv0U|{YrqA>7!ZqVOL){Dz?P3%Rky80X+^VJ% zn8ui{pi(M7J`D@R3D%LGb@d!(0NT_}iFJd4F^U6=`!&YDQxrs-@vWr^?d*#IN`mD> z6!8o}C0w_!COtQEGvzHFb&{d>)k?PiP|Eio%E|si;s4=39bEJ{!z{bnR>)Y`74w66 zckRH@&{)*If|W{?Sd9!XUW+KJ`?BWpe+q>tF5P0OzcNLNuW%-{1v9%=-N*S&L2dO?$}UPg%8mot_L73`H` zrMs12Ii5*a-j_0#h?W4x`pMI;E3a2pO^lY^bwlT$MIj88tW{&>tL9*$EvhaUE1Am% z%2tYT3b+JfDxo>t69N&3@n@ON>YRKf2NOUe7^AU7-ae0)>s<%pt8@NBk5>AK9W%{DYv~3Dr02h9h|WutrLKs9 ziQP@73Ypi9fKh^s-ZM|wgJTl<=%VEUEJmG#@(9&#YPCL3Br~l`*v+&`ScV)ocJy)THQ#`%EXqFC1-FaI=RC3`P=j z^nbmbK!;(#Nm_lGV4B{6 zoZ}{*ZxTht@!)|9G(6nt~4RFDJ+R_N~-q-;exR6w5HEZn;*>-p1;G@jAyN9159qA}78;^DwJ;D0aAL2%U?Gmz4 zLY(KG!@3g98=RN*b7U$g7(YA|>wi2p{z8*8=nEV&N}FTQ(38(RknjgtNGHTI^I->b zf{M$1s|TWpJBx+ia)iSZ;bvD+J4sl)!E8W|`w``k&|+O9Q-YMi4w@WQv;paO17A&w za$3npMkDyf zx{R(^y-UXR`UFtIMZsBUu*)qDw;-&SQ3=;zR0}cR3M9@fWrWH;k)`j14zyKw)iCpd znm$X>DKD}$u62Pr9>SjVWE4tMSUkgc-p_zQks9j))Z7!!e{FF4Y}rD8x0poW)B*{| z@Oe*A`I6_8SMz-9vFJB(<-Wi;k8=-orwdW1d1wW_{>w}CdjmLR-QaYmTlVc^SF*GH zo_6c|s|a7+WN$t?izJ23Y9ZTEP82oaISq znJM#5G=`j{UcYCW4FC#B;|f4y0Rjm8>OGMW`{w#JKsZNW(c} z!rWWoQJ3`e1pRw9byK58|LO^j7q$b<3s)W1tLY3WW`EEJfbt8BFu)H2_f4%oaEgQQ z9rX{;4-(RsCp9O{B3%UEA$m5;8H+D#s6X}*Xc#(& zs?CG5kC)6+eNfyh=_s)an1yaO#PACEuHY=bYPNP9T<#78)Vn2$Dp)3--Mi@uzw9Wa z7nf=Inkp{}4ha^eRT>$e47Yj#x{i$T!ixDgN+Lq0J4l}r zVdh9$188;nFdZ-=HLSk==$r8RsJIRHB;jVex9dfhZbD zO*f2oHmGuh;SyJwf2x&Qo=SS13ID5*@;dyp5ICQW#N}t>TJ0h_!)2TH60e@P==z-b+18#h@wPEWW87J^UDF6{&tUzqfTcwkKlFy zRIx+AySN-2J3SQZqrXpP*Y|nvMQfNjjuidO7Qojjw$nWGaDF=exqIUbO`H$HPcBYu z4b2$agN60_x3|Ij-1SF_#fRi-K5(ByiYs4@3-nMkc$`-Gn{~Cwh#0G<g$*zV%NzXBJTIEjf53Pmju#(QmZpgtU2ys=a`Dsq=q?<5Wbg+#A-S) zoJ^{=c2AdaWAB(>4{c%(Bbxfmf%;V_i|H9*S0Z$-91Q;{v}>gMj)GJ>R* zwd=yKmHNXw_2+XrTyU_Es}`4)5w`*#-WZ{w5BpMkRid~PED5MXkrw>sl!zd%3V38k zS9z{WGrF#)xI*9=EtUM6EmaQjhOgnN3i>WWhY;S}fuv?6TK~wXxqkrVGdi<%3Ws>9 zxT?__o1h`1$td-LQMNcF)ZEyQkMEV_AG9Xom;n3sml+k`>xz>E&rCKznoNWHpzlw~ z9xNm1+bGLHX4CJ#Uwg4SG)L@-AN$$h;BO*PZC z+-P%s!P%OJ2X!*+Pg-BX`jK>`0?V!}g@iDff0b~37ks08X^yNu%j{6HiOlpLR%hzGU8mQ>I=4iH4yP3eSBF`6YQiCse6DAfh0v{=`nWX3C*``KA>&LfgJ-*)EwOQ1yG@n3QEP0K3 z)0d7o@UL3w{a}Tpc9u+0ecpEj$lhZradVc9Cf}MdZkK6nvp!DR;ehXa_8GlrQCkD` z(>my_jGITptW-1HE?VdUSrFw}zDlpV9IIAax*DyjS8ke`wDR{8fVcGehIo?YpB20z z(`fK*&KzWN3FDD&9wL3~af6KW!lPOxR7I>gwvO<==pUdxctQbj9`H$&)lYO# z+)WfljPNe5b_ z>xqCL>QQ%nKp?aSls&fizXY!tjxxU=o_MutjyyLDHzH}fK@fCVY2r)^rJ*R(p={HP zwZRAjapq~u0$Gg$1o}nX~%e6Aka=_@xy`hwv&3;0kuss!KVU=ehZ2I zb+maDWki)A{F2-5T|e9yKjA9e!s6}a^8$%67uEw|S&pEboP6S#W$J=3$Ht7_EB$}= zGQ>64miqd4NzX=#yS0lyxv!j$bQicROUhK3H%?c)1ZefL6s;PL)wqn6mP!#Qz!o>T zi%`WM)~^AJHryu&Eo*D?qWH~l3bzaTK2x!t%^%}e>#ZtZ2%Ji`%Xg4;Hl$vyY+{Go zI2k>hOgnQxG3*fr-Hf2I+T)yFpgNVNH!15KYDn*rd(;grYR^*m(N#^Ziq#Q7IC-~R zQcr!pEyr2^K%K+y=|dD(3<^x(Mf8>?N2MPU&6o`9?hEzToiH^dgBW*l$NAsQ+P6C! zn=?A{E5JFICM*p;ed$%Z%dk32tHMU~>Nu!F>Ik_wRjbryrcbp3Rp^r&s; zg_5MxTGYW?L470l*7QWaPDhkeA!nn(`+AY|9(1jfNc0A73Hz7NLIN^n*=D%HtGE#o zBj8A0jt*7yZo07Kf!Kce-+qPn!FxsA=$0mRh?qSJCF|annbQZL=icw!&m;T)VFt6x z(89xf4|^7G`Icx&QBc-Xi7Ut(a^(jpS1M_H4y)uK#7;9@T?1VJ-6)=y4e^ropnh{v zq)5Uvlfu^!piQFxP4H69nBokdm?%X7TNL1MPsGWxRktrqm~NNQk=#WBdNW;1N2ZJb8wQ8!xM*~^N1JjUe*Qms8RW=)oc>=eB*Yve_Y3c1Ov4E%I$(gE5my}-z; z=6CjPEcI(t_z-qY%o`y;5xY7Odtm4FxAoxk-L$H!nPN8V-n4D&Ix(wXPeL_E2!8*O zvNI8KljLK{cX|Zv`Rk+q(F>y<;J*bI)MJ^1-wexnMFtuOGn>=1vALB5cic$_h4^>G z3q5~?5BTkRH8LA#hi3hGTT_PeP0G`jwR?~i`gV?ia+eK@-P@K};||Dm5m+rgwsm%9 zjZp;boElrS6s|QN-gqG-b3FPeCCJps=kPKhwv@pZMv%={F6P$5|zhvFs?TvY6^iZUjR$35MkF_tDeuG2ILXqLPS3xoaS+vX=wHTU!V?R`+)iewDU{7Z- z3zD5nu6^^XaFuVtnFPq13`YsfBa(zr+nR}fV__)9Pu#&1tXpynXY4~t|AYGr?A(+H z8z-=0(Gn+W(=D{nmwVHz=#b9rjj13y=NdxEXauX}7Fst8AW^O^jZakzZC^s~LyCA< z@h65A+;=57k`BGnXFNfG6(l?5v{xH)d=oH8DcsZR#3^!zA;H7H%QxxSlj#lFw6HC) zTY~wKT3=ZtP7zvRx5k*1=%D>N*a}iWD%edb&NCtRA%j`-d-HPd{gSVxI`r>c zyRB~3*6a+KAFB{n;HNsGQ~5ms9IVPXE`A~iZs49RGGX(SPoLXVYa?Sg zlp-!yJ%2f2j{?y-O3C3If@8J^j-`yK`m<^t{Dc`W`RK}y6|M(7qMa@J`ErQUb zRU}wGSd4)EmCQSN@^rm-$Yns8Xy;C{*=((%E$%GW>GGpBtBfdm8;D_EX~Y-NY1jiO z`$Zk-U!R6#U`1s!j#GF*zZ&3Q9%7P}l^!SxwjUiz+pevZ>c-Z5ls2}Ey*$PNjS>0% zw_hzMF5{*Vwhm(qnu$ZRCmMWM`p+95vd`5@(F<_eDqw6+9two3}x<5Z8; zGs4YH<2b71g3{P=n|xHdKlNFB-|9(ZNIZaf>?5azDWD~f`CjVVC;b~KM|@hkaksVp zjIh=j1D4UCLvUAc5N7zP6e4~0QOB8HB?sY^^PM_3NL`|ISin;=y&y@XkF45(AxS#v zGpzouzJ8>BemzT2yxP4DDC=n*Kp23Txy87$3{#B{DD-_$?%Zs{!?7;?e|bg2<2mKz zs-R&pb2Yg%u~FCr^R{Bpn^&Ss4d3q*|yB%trpI034kqc{Q8 z8+m#7{GH4Z@9P~qy}BrUhhxoiG5cd~WcPS;=^sPp zeJBTe85}lkXq*OUVr7_Jx&f|NvmmxzE$PF&a!Dwu0i=3QNZnur z;AR@0vsinM>imC_+ZiynZD`1Y?MR5AbU&=BhDk%8dtRq@TC!x=m(z08?06!;P%46P zQOy*KPGgka;!6sMPW-t1rR} zs_Yjxt&|mYZYjTCAk6F~6PEcHqU4^Rh)gwPyH6xl| zXjTftXEc39A@6e}y)y@|eFZdkdCS^dYZ{kXr~U3dRs2)%%{{wtYk0iA^`$t94bIFb zg#DK@TcA^gM~GgCdD-OJu^Dz2rz!VYGiU!^ZOW`(1U+z#&J z+a@JPbAn5bWMo$^$=0Jn6CWRzUNs4@bAJ3>M%$Mtm&y#5Eq(2FB_|G#{USL;w#QMP zOxrQp>*jxu2he#2xq7j%d-qLsdANJgURrdB{Z7=}S>#h+hP}t|)kZZzYxd!MW2rfi z=_OFyRU=xmw~0R$!+v_(E!$j~wLX}L%?ReDu~!h@0vV5#dOCkgvi$H{uLZW=%&!~1 z?WOr2D7=DU+I;nv?08SER|lHB9H`7PBQID{s`~0H9?3h?dA&dP0m09%y^-wt%4?dL zW3P+L@^eFA2gd!0b1i>pfNh>){A>X|obESbH+{pAyqoIwBfs50x;@JHYHn*YJGxtO zcs{7qFKwI6;!h(e8pFRCt1$n#Y=in?EJF3z7KsO{vbq|*fs_U(LS zRgcmDHQf7}G`^!8BOMH??d`;>4h)hn0K*2^d1IvSZE*a_`8?$+VcJ@EuH&C9-Ym$p zdQ_7SoMJa;ntLsmHrE@WK|mir!G=<2=*d2ZsE#dKvItz3Z0;IGqn9=}*LjqI^PTiA zASg~W1`bhu`5G2ADg~$5xn3;v%`8S|G49!Nv)Dt<$)+(pbXW_V)IySXF&-X~606~% z4;-`L>6GCyhVBs+ZJ`!HBS|>%P?O&u>5GuChXy>^BqBzNECQKAZ%r?Js`m~WM?73I zg`zBxetE((qg{mqiSIaIw%KFvW8m+YIbkt-M&}g+M3U~ggU#lb0AdT)-Te=R5(8KcY=8`$sfWc04GyETz{UZ@rM#gFW-=;=aOa3v?Yy&HR z%cVhr!(j8a446i*@ZUhE{IiP~99D?4c${M^fcD@?3mihuY>P=r?g(Nrgi{)!c5_P$ z5EB3oc)+Pn4XH^_r+TuywLi+%m9LxKPw-|~c>}wx4B@E2LI2wE(ItR?$&nSj`567y z3h(~*8_Whu*QcK`An7vnf^8xn=$z{is0rN}TKJM6omR+oE+IMW&_q7rxa9BtxkE$soZYW@2eCdt@HO*@lVqoY$ccdK)QB z&UO0#o&x>p@m>-^3yZ*`romzq*Qd*yiS>9Z?*L0Pj0U$VQc( z%->02`__~|;QWbv0@VEP_$}NyNB;Z(vaa{mBp4!c;60;`(~>Vv!DomIJdS&$xI$gK z&%|vr%JWet1HpEqnjI2kvG9rKS)x#?u3^?8@CVY5chcW_;`w*R4EJ`OKDVHk-oD@F zXx>T>_G=Zje(iUbQ~&OJ{t!|9B3f2ax@rDcxcgjbWoZiChHz3>({4M5x*^^%aqx8G zap%F@T^D*Kp^Wr~qN!9cCQZ9v>+su=*RYNhu}rH@vsACvR8H8(skA?q}#FQaZH~%j7D?P)*Eu zHrlJ&^#be4+29KmQuIe2IoK{{DiLesRFoB$@ma|wIBBc2#`ayFXRbcg^MLyUe;rFq1g)O`p}|cnEnSG9l~MB?M`o!Fiv0c76GAv1bn4=G>!V zI@+*Xj{IJanZ2bj!Ouy5R*>b&Jqr}V;x^OcJYBOUKPBYFt11_3+%7OfG^Kek;@*`v zB=2&?J_^dqSCafx_`3Fd+a2R_yxxSYqkON7c3b}!8`>eZqhu@U2dP7+a~S15u)ySE zDb!=r)quV}2(~g1!;j}rG7{vry9`lZMs-u7!{C#1`Bu6_Xx>bsB%3g0OktMD>Q07} zIpKv+kE3qIn=Y#z$*RGR%f0LN==h;kRj#pW`7!nK^LkR*V2bie`#3%(`CWeKw$EmK zSknhNYq&{br!+?&*{^O|hD(T>Y6|@R;hNktf-NHC>o0%nVZ_!4jBBC*eg!P6oK>Vg zW+&R3a94B|zHt2J7^rLGQz!^Zw;Tv1+M)jqynB>11K*|Mj0?+!|AS`uBl)iT=Sy4A z2J|=d_vME%0Px5CJm^*LyUWWl7To|MlzN;qrFy3LeNK?*xFX{NcRGs?qzv_;c?tefcwo5zr1e!laPA_Szmr4I{-0e)MEt#?*KR%}0>dbn7 zY)`kEGVGo-?8=sI6DKs@T6b-4ZEx?cU%Rsh*dq4R_W|WRd!IgEP7_{JFCFkOZFH}% zuV_Op3VQNB`-;`n?(=p}SoT{ZSlA?$r-%WSEO!w1)OpFE*)BjffCGklyD` zK3UrLPC^ELD9*tY=q*j7fqcJto_`m>c&$gi#xl#GOjBNjz7{065&c~D?G#dRWa}}} zHcyf;nqYc@tZmetN262*g6uqNPE1~|Eb4YFWu$aCf?%`9R2^(IRHNl^TFHHo(>Fbwa@y^RtdGKa`F!Ra> zqok#O!zXtT;`WR}1i~j8ytsU}=s(b9eQkWttQBulIQ7)t-9AoE!zl0!2u8F9(q`yM z+t7-|4JRxG=Z1ZW0Zn6M=H9(ze$!)`(NAhsnPx8K{YJFX7ALJW`P87x@;*n87C>Kv zt>{bds;g$8UEbZl=hRtX=1ZeoVvq>f{&iqUKN9h#>5%rbfb1m_3)Z=^(!R_N6g?jf zmgAE3q*fn=NC#QVbzT-qw(IFssEQCk`-j6W0sV?r!>E9N&lQV>WQp2)0y?gtX{PSq zMjY;ZS8Nk4_ik$5pbvbCm4}phd9zE9T|InC<(7MrNhOXNQK2nqX+DajKpjM$IqWK= zLilyYs`w7?#R;%pdDM{0Wp4h->m9xPyz{+*$h`m!HW(9<9KqMYwWp5>VHGN_3|ubq z|9RUlD}S)hQ+2A^Nt`i(9p8mtGqL)qN3t+ zU{J{S1F%-=Q%#PgG68&EH_6h5DYisKfBYth1GX^ag$blJ6_K$-Dj5?NOLh@16U(+)?kVp1#e!YkL7#HDr$r zj?rA^ZRW~V&vpAvDv>a(M`TeMWNu^*oSk z!A>AeukOV!gi`7rR+TBl*pbVZM@JHA=G$Ac%{xF}CyqXmq%Bl{YxrUz_q_;8oXUUeVf$IEwSu{?xA@;xe(rzC zc}UPDRs%Hp=x--XZi}@tY-Q9cuveE*&HYU)D|B2&!xOeSrlJ=`oZw^ z7zQgNruKcv0iwY2?`-=*vsZow!tz~{S&yF}5bN!=Dg7({RQf@%L?D&bBL7lc>rlL> zrlOLPY-<8*BkG^cb{eH^8W-8#Z#9y?&IH-h`zv$ms-2nle6v7)B+5`v1vxx66Oq}1 zxhTodd1t5sLxp2l)DBT^OvZdEXQ12z<5r%3qH=c_An2vN0%P3M7VN>m9;}Wc6@3Te zwpZ0tr(3GYU(H!t$%ZT!>-a90-57>qMMlQVdQ(ShK(icFhqEd6$!Nh#H7xGS+09v& zF*B@R)YJwC0sVp(mmjpS$k(IF53$xTmxH7n*C~^AD#zSOzjjz$1l=+xza>4(5G9049l%B)erm-~E33T|f*5Zd)3-7HRaBVAr&Q$FFX~ zx1%|g@+`8(MGL$dj75uq8EMQ#>0NO|p3)Hw*9-uSl@|B(rWnX_!dI5#LUzVlaLA1% z8`(*N&q|s08;F;tHARt1^4w+ymC8Gaq4d>`GM)l_P9VNPb<5ywH%+Aelzc~Uird8| z>&T2K^RQhgT0c16?4<5HpJO1*IJDLExa6lEl{@wQlvL#ZVGmhZ@14IjN5kvW=g|EK zfUwh}Q zD9oTJTAD5TGkLfYGIgn5g?bVGgh`7h$>ErDN34Y4jkis)zn3Y|MYa2pTyB%wONrn? z=T?wCh+pr=cUKL%7`@x>HU3ZgkKrHpMGwhtR6W4CVRkpU)rQ zP;T;&*JH6;K25%L;_|zrIYbJgy^TA)z+_yVU=2CWad;*$s>uH0JJ`bGf5}4yc>q%O zP4By#2)xzhLApq*Gu8h~tH=aKi~Fwjm@V{9Z1DN~6+4gXf|F9LxEhMEP9tx<-Q68d zvSe1Q>1>aBpAGJNj}(8(G6boo9m|LF0dXjq4&Ri@0}SXxg%!{jH>}=4T%5^XU3$Pn zS8dl&0I-BNMrV@4Kyif;KaQIBYHIr0ObQiWh&{x9Hk~2zN$~|i#6BVES@}lLJGQy~ z%+}q=TYNVYAR;D7n&0yHXtZ@-u^hcO4^PBnd~b6nIhBbDE}%$4JY(G5+R5=@LS9I8 zVn3>)wsX4ky45Y>N5ADwWSlf0Nxtk=I+hiz8|?jnw2KnTy1uD2DQngEUwxx$YfN># z>lUjUXVqdz;>s2?+gHXitdA+1pj< zZcS0fr|Xqh?9ae1Z9(pI9DEPQ-0O*|o8B;h``i}0`#U!+-LWr^tCgx8`~&!(9j))C zqnp01pSiA_8(wR*C1{}K2j6d7FTbhFpgxa=7sscaDxdU;l@$15#z=1{kw=UT{Q#thH|YZxI&nHiKB0=BTL5bonJ z$cjat1FnDOAV!E3u&@)FSR2=yx^y8gRI>~$~cqrd4(z9HPlgSw@S7VZh27Aq)HL}*1oK3*%Miu7@ByDam zWmj*zDC-DkVEIRFounN3%};3g4rIPq&PypN`BsEldTm@cbFfPb8OBt|)Cdv;5il?lt07LZ$fxq@O}sIon^ZP9=I2tHg?O*p zE_`vSNvL071ytHedbbP+ttmSP))*1b1bXamaaCm`rMRR9v{4^%&b{2fU#zoN?byXg zV9QQDh!HA^)NZgOWf0p^sfegm*Lp1^7UfH^`wAG4VQIl%MR;(`fN1E3A5288RY$EBMyHp5auiQFx{0BTM-JDngy)nm+HF_bWyj` zUYEO7=!uj<1(;$~B3rmx=rK2^&RN;i&XV=R=BqUjeee0IbfDWYK#4J^d~Y!gLi#ci zE5saAu1r&90^`DnPAN=K3qdRJrb471Pp=X&o~dyaEr+bg6ojLskoENVRH*+*%EV%? z26f(vtcr_)JCd1zE9qP?`%vK?4ADJYu0QHd6@4MwDSdZ^{bkA)+ZtGSEKM2-0s#>N zzp#5vCZomk(sp8=cVAMq8$)8AAf*>%6bmFzOh#rKDgxTj@#K;NC?ZO>1%$AyO^OM^ zdZPyLflE3##+Mf*1a7Q+D|Ar&$D1&Dc9!Z8cskIM; zX7nL-<0|H#zz_88KjYD=cMl?x`{9V=dr+Cr^&h1RJJ<+1hOj!vY2`|gFsV7aEi+2s zTJ_`^wr*Huo}|*}jY3{qVw3}}`u;OcFm<#yC7#`y-$>wBg=60YhDxHyv-hsbGh*3E z=D(QM{^h}wX?#TYz;#F?RdmX+!{B;a`T7cO&?VON{IkzLZU3$YpCL}avmb8fCAD~b z91t2#xPlLJ_Z6!!zUqCiWoiTUU+673>Mo)m9)0oLlnlMi$dIyiy&UT-CEL#DX`@!r z-qm~8l#(TzEj2DvvC*+Ym7*>d1|+YtByL2htmSA?(Q;_ZE%uc#axgpMo{H3x)w9a0 zfx7lm0eMR;Icok8QX=*!oMHJ#u#!&3&`)d#Rqfl=)YjA2^K^Q? z(UnHu<{GDa*S)@oEBQj@fcciIgM1_eZr98EY4EhtRZ}!`HrMw0>gqaF2`6MB25%|A zQ!RZX_gw+-gLFKi4>YHBG(b#WcNM}&WIgOb_#c}r|)1=wZoebSBi%B986 zrv(6i!LfxW{1l;62JPtSp*9)Y9}7esyZAG6FTdsi+IMlMC!T&R^lM*5AOC4LI(Fe7 z=KlePv?-s{+1?#=wLaJrhTTQ_-KZgYFbrMnP?i4_UncW&&D0k@;kqBs0UQl<&jSP( zzLYa^$;8#_JZ)mS9hQ^3@MM~!rpqt%+Vr%w)$MlgdT;5D+x=qQzBC15Xh!Kf)`+BA z*X>lxs(aB<$uW;2A*Ze3Rs~KeB-az!(%{sEfAZh&gD#+waPcX=cacQ;mM3frBT5 zIl^+Li}FmK&y%+k0^C*rKdH?0q}F+$slAl$x4qM(N9okNin{c*y4j-iV@EYuOLVqM zQIyV;THFDwjzcqG%hRE%0q^B&%2y zDAHJ`n8jE%4Em>S1daN3dZ=KxRte)Gl~SWv@^nRd?9vo%v!y`z8YTZYYG}DIYD3{+ z)T^ny!oYqjOilD@!#4SM77i!x4pjU{= z`~ID|aP9Q+Nz_=l(z&twjU2KcBq_L4rv|~-tc)X8nn6zlfB-N$`{|jW@ zx#Rima)0p}*o)9+xO@YeO<0-zIYDdo8_Cm#eIa3l0oca}-OE#EOMi;s!0poc(DG2L^;er~hSMSNF%7{_?pK#`?`U?fH{B0Ie6Q zVdqV{7Jd^$Zy&e5+dd&;_|?k3&b{HFEnGC3ZsNdY{hqITGJtNniVdwp+G$2puN=Uz;`)->=mFph<_B=N%z6O3vP4Y`w?Udfr80Ck!jyzA|2cu%6dnn@8h3 zYx^ewUGud?PjF=Zs?w1fXO8!TR9%EJ0Hz-0ZeOHHE+qC)#J%U!#LjAC$ z$6OB`QshJ1ugWy)J=3pxZKuarZo^|d`ba2;FC{lZoS8!I zEy#l*&*Rr$MyMMe25&)iNTz5t?F2kdE%|WII3u<`&@##+se(0rf;C?qj4En1JycTc z5z4Qvb!2`P2~|CZ{NSyVpWBB3KT$DF%m(r^8OAe5$6Iqeb)pmq7Kvd3w$}1W#A(r@ z+9F}m!uFzJ(IU!fVbOxd>hT|1A}n0=+x-zx?t}+}LgMfB0ZDk&K_KBzi4F#|{~H28 z!du1*a8gp$;MdS6=eYX>JP%(*9h2+kW#zm3*oGdyfGVQYbtMQW?4_*6<4G@{nXRRCx+9}6D^r*m+J(IDP&u1+k z4g!n|gl7F~MK?;g5pg&6A|%_$og>|P+A#J) zQwfWH>FAh#A$u8DuRCT=qY6nfYQ?7+W_mGw8F#OTSX$OvAv_w;ZmnRi5E~7`8lCvr zth~Xe8|L~yhjxgk|8qFde*Hg(Auh1b^%((t`qBUT;D3Es0DsObKkkfqek_V%e#`~t zIYMj1nzq!a6-|Lj3)&*1=EKs|syBB-Q+UC8g+bmnwWd{1FWl^W<}#t77h-PyzuAp^ z=;r?0AF)wSsF{6{V$09ysL=R)<_hsYD;8i(%_=TqbD7Kd0@ez#P`G%3QI_;dD0H#5 zI{SrEWS`l{SE_F>yqK+8O>}ez_uJ0bup_^(flQXv?^LWju+Kf^g(LO4b4HE;yvm?| zSaY76giA57Xdr7O;ZPWV09ld(p%u8{8A6>n=TCZEXyk3iA?K%s0O>g#bB*)A# z%`u%3yJh||6nhnsy@tkJKg(M?!(T(^teIP;XuTCK8jqsD6y302QBSE<_r?oy&#O}H z&Ms5ER#|~!2bo_=t=01GEU|5H^0MX(ri_0-bMQxOYl?zcxPo?4(`o1%F)K+#{Aw1U z3Xkav-u8aqBV@z(OTgY6G2RB-83u}RKQMCGc#Gc~8e}fJ)^yVqq;Upr=m#ApdV_bW z!#~~Sqp|;BP%`gnM=nSa!RI`!aa5fHEX8&+)pVZ(0}%zUUI zttWgwC|_Wh9V{6VR#*)zA&I{2_pXj-7f?EJP z0<69@?4u4|ysK~BaOZ~@Qec`24veN35%+E+N@tVg&0< zziEN3RRvZRY5H^Bq;_cy10(vwY)?_f^}Nqb41oH>{g#%rzu3-M=Rl@*&Is_Fh52QB zgAju`1fq_r@+VgDhxsqL(PSSQPaLwL?}RW&{bR2J zpCHu07v^d~_Sy$_HoMPW6){sqgkrQ(=wJ~{pjrk21AGmD45gQa+^HM}_}E$+siwVS z{6icQ<&5EpfY>qX^@s}Sy7R1Q6*WnN2^a}rmxBTkm%UmUBacjZjp~h@!iGrcnr5>~ zGZy$AXEO)Gv`a_pcW4_Uq%OhO&}~>9&X6-Pm`H-JtJo@!+n~4w`-7OFqD5h97hsfz)%XuTOAiFHR*+lX zu&Sa2BmOe}uO`*>0f8})sn)j=tI~^chM`_a9$C*J$71vOY0@j%rvR6Sj8MuXjBE1R zZ1n;z7sO53p&&VY*b7h4`9R($Mp=~eM_KLQK5Mj4;>b3Kn7DU(qbyFF>lK8BiS=9r zr)u~ON*HJyX`k5P)HiAToWeOU`HjZfR1@89{+rNhzwzcutVadwbq1dQhyo-+El}UQ zTgAy-lmrA`G|a91d0n-oZ1bVDGQRzb!wN77GDm*V%g-gzW*QLt-|i8cZyFV5If$<; zVdo8*r4t&6SE%r&HGt%yZsrI$X4Rj4KObm9Apx!|PR$-94!{Fgaft9KUO?J))T~xv z(eo4e14Qp8TSM?!!7|(6l>SCjs)A+*`CM;ALU2L6Y|jDvWw^QJhmZ zIcEir8>-`^%YwYde1ooW*e5PrAF<5`7aky-50iFh8Gj#_$nHA5G2he3wJUCwEpWi~ z8K$0jrMPH7_63nmhi;02EB!R{H$q=GtJWKcTga8HpJ{F_l(Z6+fGPPjbw~f$_<4Lo zrCN0K@#_<-Ma0sE*>z(A;(&J-3nALN#Ay=fW7SK63LfPy_lor_TZ$<^j zq$)f*z=oU|1eI_p$fO?a_)b@&?Akm}&!?u|eAswQ27cN#{BKW&2I%=lG+4>+J)cnc z(0E+^+`dLuvwXzB&pf7U1-9@Ek3MjDy;^=wza-hEeiy~!3oph_0nT4>T0a+?IMj7r zYet@Wc-?DGN&e6f9u<7IJzsxXfj4I!+=qRQ$M(iXXyi@uK(4n3THRhNiAU^;4phEh zVPu2v<+!@}omlp~dfL{Hudmwgf)1&xNRyVPo2V~2h{dPpH%?-dVE?s z{v6HTUKU=X?ine|p58~@qV8k(#p8qekM9Sve6G=FyA&ES#U!+~s{>)My61ZC8<~{V zxf4oOQTE@(XyXK7qnbeZ#+|T?s0BeNU7eiKa`Kw4Rj^<$>Z$Ng>HWF-a7)G(!u`sg z6}%HeEDz=^#-7zWvj{ z0@%7Z_QGVEQ@ja!6!2AgDmZ%}jHP_w=HTvE7QQIB<6>iLYt^6HDEQCZmPN;8i!XxG zhw}we;4}aI-aI}6IG3WZ)Ws=)Z5@1&OzpQ6qP_>6#E{TpnJs{WnQ1=gG&R8gu+A1i zbDRLpnI99NVr5NS7=tuc2#vXi(0Ix#N4Y1bgNS@P+G27ay=PtB{P5AkEcab8g% zOs*i_ZXaBFB=?wQpa;X*XD(pCr_2ck;1n`VqN-uzc>^y!%x~Tl!0n)r-A;0qBrU|- zLs9cP6Y?3s0@ZG~=bVN(N!Y*CL-W93Q!lz_n8r9=6UoXhf`v1t9vljWEmLN)%aZpK zamO?jVw~lCz0HaI&4dRnMlXFWANRiJgVADg%keWrq*g>BafEHnvhxc+K(H6f!bsWr zQb-6f(fU=yia{Esn{OQFO@(n8^>$`VxfUxWrz|GR0IRFMDenXB0;-e$p z?a?ispMhefxZeH^Z(sYHc`v9+J7=*L^^ZY&aR8DV5Xr6!roWts2|D4#rT97p-&C2g zZ0u3Kj0O6JN*g*8UT4{}+|5hSK%B?3nTwi`11u+61P&ZIVmO7O9aJnc5;!r5gkD=; z0nd{@vZe0dIMyhYk7TtvWq+1JM4l+WqlM#7gW@zk)_vd6GgcsV#K z0&x)vbeIgmu7mLBudxFG+t(uyRdL`*;9RcT4{(4x*DqJl#QHvop4 z;|n09S~@iB>WBY|BAO6H3rrVW02yFDYaY~-cb&uK!gU3uqyU)T=-Zc%+hiuvL$2?V|MI8gI}k$v#~ ztaEYu!Snyh@T+^L4#nl2;=Y9;`xbSNi8@cL8OaVo0UWU^j?FLP%RUB6nYX zVR)o@eU?w_zxC+e?X63vcP*F&W3gc(67^bPopNq`fF|V}#f&RDx}=0hrS-N48z{8W z6FddMwGF|J_=Ev2Wmsy99%4}H2(<_ zf8dUJd&DlPwFEM4Do*z{1IiHbb+{YV)}ZLpDR=ORi8v2Ksd9=a_vL(^wX>Ae(-bDs z(`gvOI!CQIB%fT9mQO%@OMYePR&^807B0q5z3a$?m#XW!kq+k+AfyorLXIke94L~} zAI8V3JtRu+(3u>Ih9EyGxRv>OjYPT>0GkV4%J&;DRBI)$6HFv(NCrEDCg&{#)UF*~ z`mSo(OyR;pPz&t8xno(se_3?x-InX&1`K7h2?(fBG3fnJ?z#;r0ZpvJ4TtD#7P(wB z%|dC(yt4*&>a1QrAl5%h3CWkCIySpC)(d-QB4_Pk*BD=;tQ1tAMwVY)BVf`sBa8J;Ze;_`1uDTGt@`r<7U7$-9CfZMH6`$P zVX3>q!7OD$+M%W^frLtf_!{Wsbn*9Zv3Jilj;TT`2T^AIIf%BB@oFzerm>y)hCl-n z(`ZYup*)@tFtl2T*%kMltFHM|SelHq2edqxwdm^9 z@DTNPq_-L5$p+1?v;C2laZf-a>}q%(tTJ*4t~zTp75cx_nA?{!dJVDWlThKSm|2-& zdJBQ0@~Sw>Z@yMK7kH2v=?Mg8i5?-bk;v?%Qi*}uPN+RBJ49<5maj^n!=iaNZPs2V zV;Zd@Foa(O{R3xcLYVld5=O&f5WdpZ1X@B^$q3$~C=1^mW>R1Ay%IG?Ug?BiTomtw zn{IJF1E(`;mSF(=uaY*Dw=Vo+_}l|FQ?x7Gn;X_9DUrhIfC z5AK;7fc-=M8tg8;<>8H`v}40IVZ(+MM`k=b+T>GFa(BVI1S|ZU9MQT8Uennc)^0Pj zgIJRUq|xh%LhmG=(jf!c;$zF8e3wF-Zwcn>&Xoa$#By9{Kzs2br61PzEkG_VjGv#v z0IdQkc%_*!B*5YVddThef2YN%iVfajqFQ%apS4f4d?a%sVey_A5}#Lb&o&*wi>5lC zD$rcMcXR+W4%Ana3rV>ER{i?S?@2K=N6**kRift~9XhO5`e~J*A7n<$%l-cd`DSQg zm>}6}+qP}nwr$(CZQHhOf7iBc`@Vl)w$UbY>P&Yq!Blm1QmA!r-~W~klHfYw%406a zbM6D%E>GK_rL~>wRv87nzihL{dop=!wIzmJ!Sp7{QwH^MTmU~v!+;AWy>Q~zB?0{p z`3obA3(%=GGZ3-fyHiDqNTE4DlPrIzFd4Mo6r^1>pjp!HN~fiVj4NVyJou4vQ3t zsiGo)=sIs)705BS)#bje(J3Pk0!~bgS6C9*plJ>yewRe41}FxH#Fxd7XnEHU7>NNf zH6L)=Dfh>wJ#*@xWf0;Whj@8r9>BLlSNT#h8?xC)yu@`e=Ni^^JjOS5W{ZjtpS&G6 zX!G|mUF4iE-{I~rdT0)w6G1q9A)LIkOO4Y|(fimc=c7^0dhU@lVxj@0{hf>j1muBW zh=ieTXo31(PSkb6WM88g z?ED&t0=yu3j=3rRd1+R(wgUxuSz<^xp?S+UuY(MkFu#B+BE*>k)7?0{7?jJBAnnV; z7}5+agL-V1Sk%db4&=^){*#3dm4h#k&mEJbrF8&ygG^`f8_0i}EX){$Gz*D>U`CTw z9$SczBsWa$#xP@FI#t~n`fM>Ne@tq9ENoLz?wlca7tH4wlFb886pOc#M2LK$z>0VL zNmPqBU@e}kSWg4#L5NjrC^OpU_^ZLo8~p*Z(DaJv0?k#CzS;%<7xQNtzJ1|Kr3_fD z;Ik(#JK;ywxr@td0AUCPn?Bgr%wRKr}mUIjct|XS|zW{mZ922JDgv zFt#?1cuRXKM2RS3O_>IWim{$BasDvJsX%gREmyEo5Bu(64%Ub{D}Kl@%^MGq++9H5 zBN;wZF3?mNZ1)OEUqOs*>0DWq1>_LIzw*I|9TX*W&z##IB6H(&GnHJ#;3;Aj*C_Z; zX5gY>hrzb-vV1m0v<7ZXXFdJ3g63SQ0baN{zT==+uSTMj@J_~@tL9V77_N}aUN)c; z5&VoYC*x8NyH9x~&CMX)dQ_JSOF2cA=)1txLX2EftKc~pg#-6BZIfz$f|BWURF2B>*%t$$E$XMV7hYUs_q!ElDbT%9PRUk(O6P= zeo&#JCYEEcga!Cz-JXZ3NPm-U^XchJr z^OI&OGce48!QhCR@ z!zguTD6F#ULAQj2?y+-LZ_PP$)vG{Z*TNBo8qApkt`CS^r6F|N7 zA7FYF>qcrpvjEXP>vR8;p+Ied;y}Lp{ELb*qwT3s&8s`7DaJ5y2{#G8y}$M zDqZTQO`|Fl>SIZB{7KWyULkH0@CS_UrtvZWptB{tBhPIYM2fNdDN~rqWwm{f3om^ZN+mkh7{CARWB8MLHV!$0aae_K zL5n;+l~h>D<*cD7cfMfIt1+mXxNzYxBjDgK)-oC#f#a_19PY$MZWHWt(=k$)+$V9> zj&dh;;C3Yd(|k5 z^qLb=AynQldI?k7sjHW?kU(OcF}{2K^N5MZW*3$k?_XK%su)M0FIKD_IR-@KD&2=6 zUrO?wzdClAH&>M$*5adWdNobh_d)g=t`ojwkTYX~E;+pKs6rg`Dm#+X88LEW?u1do zyvt9OPxY77C$%m!b;-S>=&Q`z>J~0{qGoxE=UoF+@x&YX+&t!Ccg4ZcyZgMTFFGaK zKFSg0Z`pJ&`4d?*b@c*3-qqwmTzWnd7{$18ai*{l!WKm4!I_f;iE;e1#|_SzmE*F| zNvHa8oqixVb@2Qy4Y!+WP8@l0!M%N}!!l(LYIiMGIRJ)(jV(SCQf^vIh)c1#g(Hn4 z4K4CR`O2W>?USTjo4ic{H)g-1SgO*Fhp=Ad5b#4hrsTJT%ARYvQC4<@P`^7L3S(50O^~ zFn5(lr_s4*cY5}{8~PK`R@P;O#j7hG@)qa3a#TdaDk%+!rt~+H!<-hab47z+hF~sa zuo&ZqffkYA7>&&8;fk+*s(t9X5YYeR9>d6823ErAGGYwu`^?eL%QRUFsw+TQ-0(@l zJ2VgQKeJU#GyZn3KeXj8FD4~tqwh=XM~&k` z^94YY{juo%==8s32K=+Ydt%%qlS9lSJg`Tjgj4)-C(1@kt!5te48>w^MX2O+z_9rJJ;@SYf-4*dd!TaL#)^>QW^-w z1(d6<`#t67!m9z(&=u7r3^bU&X&fE|0hn+Gz@nM zGE{K+G3AFzcx|b56GBebLNU^xV1LbBSq0uUgRd1_Wfm&C5T^PqLDN^rI-j5J9#s@k zXU}8oGB4CBK(uQZ;PH)U`{a9g5ZrBO1zevnFsWVQzt{ zZ|3flePkEfIq4&=*j)G$-bRHSS7A`co-S9;Ysglv7NoAK>~Ec`MQyV%x~Wf)33E_J zwwU5$S9aT+v+`Fy@^zVoBkSlW0MMr7m4I3K-+g66KKy1W0g9K0DP~l!{VA2lHgQce zqab${Q#iS+_#L8$1-0z1k65O{HV=r}NCRSmfKBtN%{n~@S~((3|Iuhs1u*6S)Hra> z?o;UP`i*vGJf-63b*Mcv^qV_hy=?vD%aVwYF}2&2LaA&hJUktIx>#M}qO0JKmYU<4g$7|H7e>>52C!{UUM-LApSPP(7Nkij-6Yc|%D`Tkm3Z+0cWl_bB(DF z-hO(id4JX20+Z=hX|l3bMx^2yOQUThlnni?aKxR@Eyu)l#GhGdn*$4;2TR2K#e}-!2?a6UODU~`o~Q#@cO|QTs_A<%<)W+4)o1o% zdRgJxyHc@V_e6y!WtO9K(E5=|$y;6iFv^N6rG`FpscSjb1xA)U+#U94Kj}e5<(au4 zwMOW3I)7%{I@EWG1eJ#9GQolkMi+t>4d}$rC%X^9!_>lOHBJmv=99sm}w+b_Ck)^%#>|jQMx1mHzQ6QhoXjC?!$fQgtpzmxh6Q zu^hnM@%S-4BroYBSG6`x!)5M!8*3?a zH9pE6!|VoYFO+jTI!;`*a=dzJ757B9V*J{sSXZ&CLitrRv5lA&aLBmXP_|Z;eN1a~ zCovU%=0Ue8v}{YJwjt?iE6fA-I1>E8DNPP)#(as!S~vT0g-$0|UMCBpB{H-E*fTl; zQ++&sZQz%47RoLW2dpGB%Lt9%qUEx6YcvC7siwt2>t8V<>&`xwB3(z&Su*zzDnnZ% z-rRXNP!%qZx$~7sIgPQ*hOs-L{xRl}hH*w=L)gq>XE0|bgtAOWL^*8ha9 z3DGFhZk^3suWn-C92Q|mZsjsn$9EL2=pGG~yS^Q7xK{#QM7jXF*?*c(giYnJGPg z@{+IYsO7(wP>GqW`k@S_3-eO^&|f*8q%^Lp*C2CIrkn$+H@3y2GSlzhPV>0{c*DKG z2x3N@OCtbyXpuKx1)a?JC$WmfYbu!s@UkcdPl63d7s#`V7YadOgB*KniCwY04s^O*9z38v`L(31sQGiY6ajC#~5#S$dPu%la++2V{6juMAx& zteay(aR+lGD~lVF!ZFqJNE~C941*ouiGVSGSs`3A+-1tt30czvu#-WGripm(>YICzh=ZDRH~GB0Nmc&D z>fb_lHwPz-yjMP!T1jW^mHw)^PM{b1zu=_1fAK^tjkqrI{g}hsW4%ib>t6-OXRK(h z68U?bYX(AfB?X|`Tka;Tv;HsF)p7|EFWBWxo^qJA^@L_< z(o6;ozLwln>F%DM{8fCY57TNey%9Kp{30}v-=r$mbI6)V2k;8ea>+MAxo7WJ?UJ)g z(Mz0Fu-a?+NJ`GZ$eu|FkZ7Y?|8=*!$SUk2KWwcG2KR#K{x3#-c$TMCXowG-m* zRFb?45xIJcXg6IX{ohVOH(*9<9qeoFFg{hpy4r1^YY>+h z+Wk>J;?E4;S_P#bQrV_L4}GalJ;U(wJvfH0QuH27&A5gd75JJg6~eI#b8}ChADwOa zzAfWKS4S1=nSn7wHd<-kPA;~L80vLyD(j8cG`OqAsf9Yj6-YG_PJpFTNv zXvF;I(GG^0g&eg#Xdls)s_Yk$7+AI)eyfQe`1JgNM&1jRL(k6nXFO@?NpEXhC?qPD z3yFZUZJirj@Ex$TREpa5AcTsI8b2#ShsDKZh5hX1blUD(xKE~hb3!Tu?Gxj^%DDPrUUg{!GTr~AiM+!@?r!}zL9CGR#;`!hig_u z^(EoVd?>#1LJ1T{yZidWnYvos3oc`ZKO1$#^2kl}8e5JYNa!DJR!_iS6NY`=(X$A| zPRA8y)pr3ze*%;-H(gz~N(4pZ2k`biLn;87g~2-cgf_t5AaMIlt` z*!&cChp4d2>?KzofqEPv%Z2BcQRTof>FG!1y)oVu%f?b{;89U|uZvK$N1Yl7PjWz) zaLgbTp{19Cqqg6WD0_pp8gH}(@pp5ZVCX#XT%u+jFnEgbOhewjAu@}XOBsJ# z_`15aVi7szbfs1Lm=#MvDy3HD0{q|czaU&wh>@6ARDqdVrC7%UI%|J`A6h(7(a?Ds zfxb3AQ5DbHYb%xaAu~aiv4|UW6-uKy+}&caaz>}StngR;@)~Z0*mhMaI9qCQpST&|5Ryw+vrLvEbMzAVfk;fE#MNdQ;jyJ<~G_cgh z^;h1K)BTR#bwAT9dohZ1o`Pz#%?8?XCD%i{WJJ*0qLk0L=w(%AU~(3&2%nPnH~PW* z*@bGOyIp`9PB~>2r;M)*J^f;4JWzM5=D)~35IGGc$UpxmCIC@02S&)xVkG-NTet}M zG>JAg@MDhy3{XUbRF}k#Dp=+O-Ieb<)w%YP{=1?z)wfRtdtLoUb4|yf+m(sDxaisL1gNn2 zv!WW%RXT*is-)8$kO3Vu=5u*?{OqA2;ASS{|8e~ z>~%xvu99(AdhhOYJJ(XqWv7ti0~Kv&p*{6vw?Ta)xIwv>uwEYhh?MPfjau#KND@^F zjV@T7av-;{aBY2EDc&nS0Yz6d%n3{f+2MH#3hARTA^dsjDAzzB})7& zR6X`F6^r)Ili#Pg6?&AhbWORB`S6{1ME7Q}?8wRxCqAezr4zaq)D~GMNS;FE_((!eB05ca-Bag}D~nuWVdV1KgaN18`T_mP<*6!x~e%g1;Gcy9lOrCQT5GJCv~>Q(_R^-G0}>oEFG1& zUfp%QrD(Zk)@F1ytcZ8s6k)rM!k+x;U9xh_-*x#ZZsXRx zcxSF^XATV}mHRqtDl3)SC_E(&CU4&6BL;_R!Q55q;sR}%HJOc4@opJWpV9r5O@nI{LR5*#=-1q)a}zq=)7!S z6eUTAl}%#(hintxfXsI~tMYKp|0{4|pE!2F1yQMZw%y1x_9Kh^5CYkLpFCGTiJ}4|*{t)O zl$Gi%7D>gV?-slybF6nVPgK{Y}}vHFEILj zOYr+AU*e8v(N;1iy`ggm4v?-!=+yu4-{oyH8cqFRl9BNRSu`)Wv6)my7Mr)+Y2uGq!xY+5AIhksluSe7Mb#<_M+q<{}pA_ewQVqJe?sUGed)D_rf8EGDET} zPoF^9>^3b!Oohv%nM!;VA_-SiohUXj=8vu`mLgrg&oO*XDRwe(DOQ?TO7_&;*T|}_ z+7M6*U(3MUtcRNo)!JCT>-}r>GwV{&mRf;r+|Z0Ju5z)s94s^0hieo%Jke9umd8h0 zQ6v7>p8Cx8om�QO#-=HSGpD!?hId6&-4IRB>F3XlK}fBB_RHvhiF*6K<0}gl5F( zslOzgu|a5eyQJ1$f`}HKq`ep+8_m0GgjO$v-#F%dGI_~B1^Jm`;Y%hfDAq5f_0alr zUh5a4JyDS`iMSQ1W>(M|S8Ds)Qw>_IPBc2>%X#k{zy?#_&giQgJY8-2NSL-2HR{QUyL11 zYFcA!?PiiFIT7rrXo>o6h0pH=it}ImKxaR=_i#`kYu76?n%c#o{!^DBmq(S-=X{Rs z`R?X4iwXZ=f#d=udH3%>{H@VMkkSGl6YOK$o-IQ^J0_>Df0>oG48*LKwh22KfQ8IZ`+Y?--CvJroM&t&6!i_!pB%l?1=(kAbe4O?G2`TRU^S%eq;T~>c|+?#x= zgsJImTbM>KkTiHxS)CPMhwTflpSVhSJ;JP6rNoy2Bm2SGOLUDuB(po;WCQViW5zs& ztZYrhXd5~uDs7=G%+@v;YgLlad|FKH-copcnXIgPuol~z2ZU7g;3m`Pu2|N}u_Uxx z>VvzdrQ@%Dbyp>Xvo_hGAbFnw~xp+qkX|KK;%j z`9{dD4!wpHaZ3u|km`a{mIbrc1hbX}yDEcO>VjFSgI%&)i1)tcd^}%vva>I0*{w)G zK9HH1G|OffE&>WO{C;_Y&)BJ}DXeZb&5mKb*|C!ANm>ZKh>yRpC*p}*kPG1vxgzIj z1l9ntKq}A+3>k_rtmA6LAaE)c2j$&0Tt4wx6+26&QOcdWx_36doSq5c$F~8_(=q!# z!upd!;FdG)>myKYWMkQ>$a{a?Jb`tWuDM-Wxghh_7fJmEq3V5GVScH)+)#|UVue0} zdlPA|2J}$Z6{qgJwKB~MKGWDpT)5E)_)E6(29ydY0PZ6RbzFws>ebuf`?#ir$h%Ug zF?}HH>?L!Sr5rD19zwo3f>TGGm0Fd{~76!6U6|Cz1dmy|WjtVpaJIn!zJZnHS|0{>Zv}{qR4lG$S`Yd1D zz`Mwk26b>%JnNDEBr>`Z{O)#oMs^$H7y=>}8KTlpIwi3_L zHqu>)_m70530Y#40d-jr`ud$hIuehlGdg}Vk`CL!7!ata$-E`)bccNqt_0Xv@K8XMsP^#L683@Z{T+-_{xtHLcUHuj5U5yJ zQ`@tlA^z#;^bwk0Z#XTzG(@9j09dD6-+3FPTDxE8)Z(|!6OdffmmXgtyg<0xEB=3QFda(@{lZ!Nn{G^ zsFa{5cKKct53anTp1rd>km_~Xf{{sHt|rcf_nVSVnb75$L9Mf>?YCN^ zo_{C{OUsYm>}!yo3`l9>-V_F)XP-IVpoD{Th!m_s$LJZ7<;lH>mQ|*H#}XF|z%EA~ zV<2`35@4G{{XgIw1h~!dKQ~WI00CkCP&(Z1q*I;%`*N=Y|9v2x|LNz3QD|Ho{tw{7 z?2mDd{|Ag=6b6+Xtt@x=b?FOPMAAdl)-p z0Ji!6)Xn~@?LY=tx(lZ7TMpFj&~G6O0gR40LIrM6YYe`~%ZIxpzNE8OIv?x8e11s} zFD3WZnGbUnXh>u2LfD;|FRI;M=hDd-sw9v}*e|Z)>VE5qD?%~NYa04lZIclwknf*I z=j?$}N}ji+l3br|0`ZDoxHNZ=*#CxfqU)@KuvfODwv8F6f_jIcdNd?}6%K`=zun&P zmbow8zy5XVDV{VO3ZTL1Wv=rsVUEpEpyT`-qcxKWumd}f%As2)FBl~6MKNg|m+fM- z*grJ_jD9w4fk_If{R2{v1_nU^004jhAWJV&vCM^L4-^Feh+YN&AOyexaIm-WG_$m^ zai(MBFk|3kFl07iF=1pkVKXx{WM`+da#mG=1OR@Ib}-t0O)zrxfCc~rNsLu-2AS~& zc5LCXw%-zK^A9})r-hXDxH007%!LZPv1zif8h*Xi)1daSv@&5V3)ga@5N~|myW@O1 zye}NFbqri3I`cg3!5;>p$J9roUx4;rC%IVKs}8b17ufRS*AH1Jt6LrP`CSU?`AmLX ztL4{S;X&0L1Qr81IG~PRUz1ggih3N-zrFokgD*BsT%C)Fepu((D2vWHm{GE^np62=Y};)GfOtc3xO7R%?%ZwcWak-ZL!2AU60g1ba;n zRlqNxW~PmptE&yg^Kft{$`f|2Ce<-SREa%Zf{6H-{p2-qvNAevK&8a10NJBFRrf1 zo%l6yzdrG8Aa~$tHW=t6O3zm+phNvWhi+FSs-1!j)#l5uv<7dd#>zAKr27FUlR8xf zBj>+gyv$R-OjU?M-e>w0Et$&WSIU+V9tmM5R(Uj*ic5E~+Qm=bl)EiFA z>#==fY134pux?GQ2hy1~7F(zRwBa+F_z}_d0D%Iw#;}XVgbBHsOw~DX14)hwQIuN{ zun0DiQlUz|0es#mikeUTE0T~x$PSjS5=wkh{bfR1i+m_BWwvXdB`Ca zQPVg^inn_4#&kzphmo2JCsN=Bk0f*M4Tqg-p}qhtEx-;o(KZ)_-GFG!2q>8ZBzu6j z@BkS_dVo8`m@WL~x%Z~CD5xhRM9a&xaQ0j{R?3^Mw@H!QoO z?)!GW;VxFh>)>lTWJH+p;+KR|Rn%%`qfF9)&>AU4>Dm7KDvsjsWNji$94YKB^1Cu` zBlEnL=eGv1g>3ZnNHVTD(jw(ta(67vfZx0czlksO@%8m6(~g1fxKmoRslj`nf5lDRDE*`r94WBZ&U(%baOlxTIzC@)cwq4( zpB8({D!#O?SDTOu&bWRzbxRLDDGu(XWPa{dKB0XR#a9T}sA`MJ9p9PaoJa9SxarA~ z6K5wz03MZN3${syv6J%i%p9%=Nhy6qvSoepP``|o4u{VbI)tB8qfzIc11Z?y{Qd0p z|Hi!@$*tGDlqCUQt1@ph1ePM9b2QuDcX#2QCUW6Ruw)t-jnY%%wH8X5&^XW zjDiD|T-(6i_mhW3nR{R{+h77p$#4TF6-nU?@UzuGb*iIW+uq{l^-jBa7B~fqm34M4g!fut?7mZ37Mqw(m^+x;D5+-aCQepftDu;yJ)#lE-d=h9%PPUcU?!)E14I2>Ql1 z&^ie%o1=EhMrSV=s-uo%);9_Yt9J@Uy)PK_Bad*FY!KM^{uXS|x;SX-r7+tvzlva0 z=G$CjaZ^8vC_gKiE+EPFcILB^^_+@Y>y3xZdePQiL2`G&()vyo8Q)c01cjQu=PTR6 ztXKV7eHIQQ&~WNx7=>|V12&6q=&F-08?YcG4U$rCOu3;946M&$gq7&vF@pvMKM@YkN%|Ye ze+Go#Naur9tTan2={^@QZv!qu&uXd|0JmrYKu1jHQ?}j_xcdlI>@M;&`zuQuye_N8 z3v^Q^U;{;$Napa9o-Zis;l}FI@UiSHFeQYg+Z#&(ypwSPzP#iX=aWoHY})E_ahXI0 zVG^+dMWGA8%m1Yul`QaVaGD|iaMkQsTFjW__lDbMBk`irXP=M32AjtA!0u)nt=VOW z48+ZC1fe{Jry*1JkIs?%rv1j8NatvJ%8)^tAf`Lsg$jlnI%pE`V=g%Hg!PB6N?E@> zFUoKnV8&lR(c4vk-AFF&hS>5n&CTZlY2j_8;3m*B^3=tv9J(S%F(rk`^$k6^d0ou; zvDl+T&IEl7NQiyVxOVE1{byK7s-m!H5NKDhPYo@Fv?z<W<^k7I&&# z77@BzMh{g^r;y+2tEgYwGaXXK6(Hv>(x!p+RdSVJ@0SP8^BTqAG}54706Y z_p(%nOf_kXZhBUH|Ks>2e$_L_eXNOF)y{zTqiv`Ap|}4+CI9FE@*lnOoXKjoFJmPf zaAS6W7(=O8XRr<+*SF+=d7pa9`aq-M<=4Ro`L49mhAoQ9e00|^DuY6B(-flu^}=K; zo0^Ctu@pcMUST>_WCc$X9Ye)qgi>vOTC-oWE(=6?mh~q#m1h#rLg@J&dwT!Nf#>LM z@bs3&uOoOa86ihW;1(dTF+B+(8`vx<$)j_yPDD9^mbdTLV zYAOd${e_QUn~Tfl_K6TbXeMNIAwku9^XkPkLRRum-amEd0(qeaLMlzwV{NpY5W+H` z)Je(HY|)w0;8c+gbTDoteaMXqYgC&&`XJoFrcIBY)wlv@W1Dh1yx6v`DS2`7#y}D^ zY{ss*2M9-HMy|-wxtSOsUlZgG=f(uC==K+6a-~t~u_n~?dV}7-K~!#<)EWb!$9vUG z+Lnkj)1(Jy4Jd~=44w&T!+0|JudPyd_m8bme}XyPY)5%tTj+pjpGO1z#;3?n0IYQ0 z_GR@f;l5sl{!{rLj|0BWg1**#zRtk*kv?6ey-lfnorN{v4=H_BAx|%{=N)Vp4!#tK z%Yh%fnT@u1{vWYV^6)XeM)NL`l`fADaQWmU=lDgfCwUo#_J8t~co8v#6~J|Fv({A z5fg3a)PIw9!Gk#Q;dDk=fr?1SQScHD%57;nl%@KkD{$#a+$U*1fM)HBkFWsNCTBC9 z6q}uVkegox^wsYod+j8bTEze00Pi!H5~feHBD?a~@vf}Bz6u#pr`3-be|NIIeHxJ# zepL$qTec<6$Bfz3c;Z$?9w)MxwPFf9dW{z9=(15mM)`^X!7 z^@6t|w(ciQ1k)n+5P=8zMm~)!obzQ4CVDH+k-Kv{*@)_KERX@WFSePv%vH6_usMJv z&kL>unY6^BXh=jwbrxn+ms$I)M01r3iYYI4(j=z>k{mabm3O>|Z01wP2wK`b8w<3V zKw!;AjMAtSV=^9pZx&z8N^p5V*Vd*v)@kSE1^9DEL~8h-EL<`ej2StZMDBQU2FI17rk4*+3el&vMQqElxvRuX_7 zn^GZ!eC&9+c1#6{t1758|yopCU z?UOTtWE7KwS;dsO2y~gmt#?w(sI&uSEmFq16tVJ5V2^vtyszBwar_G{`&PF@LIeuj zJQPlp!;ca5OF)LEnfuNQ0QBx2R4w^pO;*79COl?PUs#b^)vdSxYp>n|EG5fp^I6oPfD86e0_lHv2=EBL^Iy85IAB zO_j)M1RbJU(<4`?`ZmA@K%Sk}ECbP{S1_YMb-}busutAg1VXEG^!?E?gdXPCSNZp8 z4RpyJ9e~GROm=9c<6?OGYoVSW3&h8`vETL zI`)s9aIv$y9|#-~vkgItc?8)HEP}WXpuInJI4pWwr2{@x2=mz1l9Ujr7I=^@%NH*( zxWKu7vnIDB^$fEqrTi?D{Udt^)M?F}v1{5B9cL1gdI6S$T5hDbzF zBH2>JaW{WHhF$UEG`XctY*$*6S`M3ZaQeB}-rq=6w1L;xg>b7sivh3Dv_X`p zYNW3aoocJqgv-dWKNU(+f@7DG#gcwHiA_6gb;L;MjpW;DVN9_II>tlKA*!nGjH+DF22iDx{6#|gaY5wTxaM8~GjL`<@Zj-2Vt1=O3Ii{EyZqM))6>(U z(G==_&j?z4b2_l*WPtrp03lRx>(+m+{T3y-$8s_x1K2IC8%@s)L$)MyQ{zV02aqUN z!NI|lCiMv5A0Re7hlE8}mz5{-N{|-ovz#(mhk&$nLy&r1GSLdD&*_^=$6Dc=-7ShiAhMJV=s;>yo&fsUp<<-Z z-l=E6lkKDe*G1|R<`E+34-|{Q^aH{-3mGDbz;!|kRYXqhTbIg9MZl=GSsj%+jM2e- z*$HqYJs{ERogM@5uB=?yl$G1REMJuKoO{v*$K?Cd$J)nMHO`la46NuBP+P&c0^dWpFWsM%2frdieV-w#9&gedprI3hDFe8Tl2;HS`W(upkNjgsjX#}S)UKS`b=#cvIN#A~el)m<01^E4lw z`I~vv8OK0p<>MDR_N^61XoDr8+|&-$S&#npE1m&KH$zTLmWn^AqntEfsHW~*-HW#I zy?QeByk1>b{nYsC%T)XN04kDdFbMB5;_j_jnI=WUMUs6}Fa{Bo5EEs+O00X1(p9|C67j4G3Wo}EKArKjpN_z%1xQbfjb4&J3I6C|d|z0CMd;M_wz3t!*1NQ_ z{@X!N*$Gw!cfzX{LC#E z4nIn1;Or#bL^gslLm(~^R&QeI?^dDddknOz!g!7>z(n(Z!evx2yEWB2 zLbzsfnLl&c7}ZxlZF08vFu1OTZhpN5WMf{6`=CE(w(8?T$h33~rD!5{ENXgD%%Eq$?iS17nO!|L!t z@N>BG>JV*Hcgpf|Gmaylydcwq*cNa#;&WEGyDwO-hw41AiZveyh>4L>%s5bm6<4F_i4i+TCWBWIcWFtorhw7+(0gS4(#b{CZ?K<3hL==zK;^V8i-*F#pu< z6Y<8^Vy34l$%T`s4X;4il_D>k6gGu8zb2ij<<(jZQj9PFoDS^ZhjXK8?rW6W??Dv7 zFpyw7V`?hUzJ85r0GW&vO9u8PH4y8nDd~!y=H#*$P*JEUv%jDpAS7MV(DC2PYpt#=v38L^sCDkBgm5dcPWhVOCwJ_h z4@|?9ve99;7^+J8mYRz(=)%|#V-G1BL~8~hu)}1+nYVCSOhNqZPgNP<5crR6IH-|Z2JtY_x$6jSsYNl@YwZNxlYl9ZSABSIL9Qw zllDbgs>N$=63uez51>oe5ip_qZ7Ir8YEdkmVJf)w2G2Hs03Yu*djMnLIf}Z#!A*Ju zm3&~}U3kN>&xXbgP_9-LkZfwNy@n*>IKUF$_X=Z5LPX|skrmCg*f@{`~fZl2@7I^nIP|QcVm-t zyyA_P7jNQPMU`Z;34r4^U(LY@1nUTEiA{N2L^UJ_Q4seWBHxoYwea}Y=(DGDmDSO< z3O4aQlF5m%3rWK55D&(%^~CVH=3Zk(c^*)LtsoYP8mNb zr}YM6iK)y-;Ybhc3s?QT(Rn-v^3;z}#HxypD@_f(*|A>wcISPrpBr+5n`)=|PCTzc zaoZ%l&AaOeRN^mc1L2ylSBtVQ2tgaK(+m{7HdO=!$DdTK`jyq-+_croTD)3lzIxYh z2%{O@Cbc?ujSS z4?QFzu$tTt4Pe=xKlC%g^kO);b8~wpC_pd#{ZSYkF@EcXn8)?~yuhG>0oUFuQTHZF zz^ktr7nf*lZUmUy22TTi;(dD!T|gHwvoarGf{T~fs0HaNce@j=L9BWM@pR=huJjw+ zNeW8411vK#>_FgvoU>#1WNw4DBOQ-0xmyXD*HxzgTY%_0YE%&C>OY+mRDXBOKh)Mau76bf$jO*YaX;;uCvns zC%P5Dxm$pP30SgL*h*ySsHH#&YNx8cg=ara1!L&*N==Xk^|4x1(pmllO2lx9B2pt& zzrl*xDag&Zg`1-WASdy#z*%?moe6C)=4TpV@XzOeFfUL5-24pea7khQ-b}5vM^D2) zu+ZzVpTW^A83Ww(G^t`x7Rj$4iMZg5>+^g_xm;=?j}87Yc{TE`k=Dj(foXcScB}X) zy;gi%`7__>94OdkW?P8iV*cv1Py(Y?>Zs~4-r!9oqabiWPFI@%@jQ$>n?^mUaCrnc z>ZsVZ`=LEyM*N79q9Sy>@4bq`vWdy3tM+TF9GV4iRyAvDlww2D~v5wb3yOup8^wrx%&pNHA+ zrx2Ruv7+o%ld(EQ}fDv)PH-XP$WEkTOz{-F(?oZyCk)h8pnjfK)q@V*p`zl!QAWP7nm~P0$@! z%4USA$Dj5>3GOLsBrvg5&g&VBo6L!^5$!d3p;ed&@W}jGDODAiy#2*z(QOPU2wOqd zF?1Iq_A+-H2z~_F84|yF>j7AfF(NE0xiA1M)mb?f2|}N#X4b zq24ap3$|=X`sZy0TSE%zextSTUV;0ml=J@-Cy0pSv z!PXnCgQ|B;*LV;%v=|qYt0+`V*ht;9zP9_b+dtOl>9mGCAi-!}`-T8t^J~1Y-pZV? zDOJLhq@?31TqkH-x8wa)wd?VQ=m*XKkjFR+XtcRkMsfh<-63R!w#MklRbhhI@v-q! zIvOOq^=c_QH8s^}hiYOj6`D`f&1Q9hfA3g4y9qgd#juWJUnWR0<-otyC;I6aa!rLl zWc`!LHIk{(?~Nto-z|a}1*=jx$*3k8?Ry&b@w?Z3{XASe{p)+(+kY*82ZuN%*a((Y ziR8z`sj9KL9dvk;6Sx{Ix*$bmxr&OixhfPZtO$PpY6zwDu-dsnICD*NEo&P+G$4Je zQ`-lBY0VB2l3DyOP1&F&Pa7`u`%)YO$X5KTBtb-*p5p@fgE+OLhE#l)K(+y?mE)dC zW1ltd5~bIP)BEwNd7UP`P2i3=#qe*;VJ@J;OV$k8I)cCS#P#jpxVTL_Vf%A2=YwZu zjz+4RAU+T!^+!UjwYEoK2_iUMf5$rA?8Dqcz@${qDy{S3XKy-}vbnXD2R_DZAvpLq zxIk6%ZFXK8aY+#0;kU!O$JGxeeu(OJx(CyD@vPZL-Puh4T$sDU`e2%!$qa%#l$?_tdb(z2YXpm-zfEqGs|N!_Z$y`f0BB zf()*uKj=O;5q1<4`cLHx6^r?hdSJ2F5`rI zs-WC^Etj7b7ZJA49U3Ayf3LIGo+kJ&+C>9IpXsssFuGRB#EBXyl%myjJO z?p#ZUWEKy$hC2Qt0Xs3>w zG3IMYl?zJki4udabhEmWggkiVlw}bCb*1mfR5S{;BG^el9Pwge+*1a+MGebJ`^1>g_1xragjXs~?bYg?RudX8>gL6`GoU8D!TRj4FDSkK`Jc z%X!oY$@aMSrp`!qPzcGm^&{+rj8_4^ExlAEJb-6dn2WL&sojADx-fQP^bzHE;iKT8 zqSC4NUv7h;x5czT0~;e zy>lb>)!hglsAr`5F=q1iVJF~PPeVpV>~SY=*KhK-UOMPbLxYg7n)R(kbikAT)^-Imj{O0AG!wxUb|4R_AdB%%^VSm3R6tt3&W-@YIMYIG|H2OeoTRXBNrAXjS>uPE|Pb_=NXYmSsS7| z20=&UGH2(@IV|0zzl4okTb5N<-Ym+k-%7uiJj`=-mpr^{>reTu`qKO2J)l=d8yL*U zKBs=7zKBc1?tc=$g^fGvur7L*qGHeFK{o`k{Kp+orzkWU&5)k(R)Co+Zo7jn-GwXdyA7BDZ2YwE-VNGi| zCuk&)0`Q&62C=&!lbkR>Qxe0EmIq8G#Tdvs?o#O;au*G8)95(43mvq{yXqFD;on}( z6wAEq^aI21gGB?p7Bc+TYctFFyiXSLHgAW=!7S8ZkaQYV`VzuC}U`7*wxB$LVsa{(S?RObs^B)vGHfh1u4+h2}}@iZqnH_ z(;eKu`bhG^oPo+5h9ET<&uN;9-nWP!z zYQSevH3l#eff)mDI_fb4TP?2_`tY8$HXzTep#*Dq#4y`%L)rF^{lq$8nHU&KoTxA~ zNq+i}(_Z1X3mp_X$eT>T3^HD3&&i0eGc`w~1od#rC@fkL z4(gQTl*QAEH-<=VS(ElCFBW<)1LHO}3mM>eyZ>L{KiUd2Ewx;o(5hDuw#4rvvJWb8 zYg+w1u+APBU;B$`YaZ1^x+9Q3s66x^(4n>#zj>;^wf&4=OZs_KVPu0~D&`(35{V(x#FPQ6AU6EjaGTgZ&G*i7=%!O~bjE$y55z7tWg&Je zqI0lN0oQ-U`_rbH`CMY^?9TZCLj!GIvq(H~NPn1G_whWIG&|goijR73^1GFAQ`#${ zuFzYRB8v}iZHL%@ms}IEJ_Kjdy9+Ux5ahHA zPzQYc_M?Ffaxtv;LFDl2);U+u&O@Cdf{`QwnIe)|Am*bhLo;F2hM{PAJUZxsR*VJ0J*Ity@3FR?-J@^c~rXOs0p)EIS-a-9?Kipl5{4>)Rl$!VPGvM2R%Q_ ziI3dU_697uKKY(X-`X0Xr0mN@*J$U18QKx>3ycI*#cWC#%4#*L`16!{m^P@ASY!bJ zNk})!c+^$}fs`h2=rQetR>zQ1dIC2Ehdlnd<49yK`CgH=O6U(uHM z0~U|wdMV%nJKSCGGXN}TFE+b#kDRmg3?Y4 z&R^76%^>F=wpto|!NZeFS#DrWo$KckzX`%^s`49t;q2{fUmv$2KAMm10^63lI!w?O zF0?@*sW?8o8p|qxv2&5N6frE!?k=LJK+-c}MHPOaWLqcTV+y30CoL}c$l7Zne=dI2RrmCPY1y-0eVE}&3Hscg%U&_!1vlPf-1Weg zzs=Ln-n3VPpW(ydQ>&bN9j6pU!}q2HNUqw{UnHT6RcHE{!tEJyT>as$G9v*%fK<~K zJkUx}JP$Jia9XhvW4r#1*$ms${4re!dx3k~#Ul#a-EKKxbv5t7s)`IW|EHHJFE0@1 zRRzb@q63)TcKQI?l&?n{SEyv%E+Lp!&F>;2IK28iSiw+QDa!0zK6+9>i~X{VpQKI- z9`(wo(TB;Mz;0|fUplV38-_!3HWu7*&?}M1nE!h5}^q>>&ahF(mOt4;(;;X-i`Mx;cV`JxtU0KnRd)} ziN)}Gf4>noGOrPexXI#T+rFVi28Ec$hir<3IWp~&AS9*(bvoY)?0%^dAXCzZo4p4lH&|X1!uA5Y8`L`VLX6!OkJ#}JelvMQ zyUOD%QUG^&FewO*oWo+#%!*Y%5!{d&D@{hq6wl+(A0b6W^#*fGZI08ic7xfkfEorU za7tC6A3jRe#VDZ+;eQfIL<`?~CGfR03X};518#E{q(a-H=mkYINy|&6il8M^(@Wgn zAJLzG(dE$m<>9&-o??IhvzfjLE(jK{wQs`OI5Yn!qT16|v5Dj_46D6dzWDUGhKmD1;e^V@njW2&Q_!GY-XN$zOqMd3H z-nW|`h=;{|oSI`r<}RSr3Rb?vUzJs}a%OYo9N+Yww{x~{MD zf$WIzegJ}DASjD7av_8e138Kr?QVXE8$tRUtjKfsC`yrGjv5XvgX|o!iu$nIpZ$@@ z!G$8en~EPrj9)8wND)yt+L#V8*#l)XeZWq&Pd-k)-g(H87lC|9+D#gfO!CJY8x2Bl zz%(M6c%&}ZyPRFB$An&98P5qW*-igTbGVIuR>FdIRx*No=2J54c_@0w(+^zY6~&JsRqty>zV)!l@>;(0)(+@=olmcBstoU=015_(CQ) zrydloTR`7Oz>ti~1#u5UXAe|dmT63}Wm?K5AD^gjpHX>hnR9w5%oE7?MQL*mS_GyT zB~LXO&XErs&t|xq&-IUYMZH_V)r8KB3NAJ4qXR&)hJ?N8U0wInL{*4|GX>9HM zhPLUk6Mx~z5zBm|l%*Df75WXgb1Lnlf}VaaFV}|;yzln-`25@H?RfZOa^d&nBRlvf zI3C|kdr3K(l;Ev&u#`U4{%SDNw=A8h_1ZfMDO7f*XUus`G&Ln1^RXY(CLG$B2rHyR?2G>+G^4!vBa|H91qJ(ZY*^ zcL7_tn4CnBC1CewhD3UtwO$=XL8V#HuvpA^evzRL!gG(2oCmu@zK+S@ZeAEm8q>Iy zpID5+xJ1`i>2SvtMx|1w+q#Je8Gi)b{~u#q?KokRz5dlCIU0h63~6L1h?z?bVbw3& zAw|!Yg6@2t>4OU}Lo!@V4FuHGWNQ*ZI5BhUZ~-w)d(SH~eWHK;Bd#jB@CD%>N`^tj zO(l{-#4v$Oj+MTD$`6q?{|d(qseKp4X&jw*jX2Kth5F|`eCEtMB>L>?_N4z}teOI_ z|Ae%3+=iyz+cX=`4}@Fkt(h$kU}t^N`)(~CVr-&x zzs_Z$Qz|pJiN}0qZq|sTF~e0?rx|1ft(`Q@QF2h~hFPutO1N8+hyo&f%ra?4M|IUw zl^AhK7wp`39;Qcv^FH8peD(08t*GKLKb{wXi<>CwRGRdgfByC-H5lpb6*CFy7>jMU z3LgDNMopcSwicF;pzwuc|Bp{=QQAs?GTw##ty?ua??jFh6_~U(m|>b}N=AKNxR+_Y z=2QP}?h5Fk5*kculUXepk7GH87IS!ikntT7X5SY@Z*Y{mj{PZC)tlepY)2<1)ks9G zW(TbwVftxh4k?K43ZaAolgF=FlokUIbBr?K^aMJTqBI`fH3;3sQbn}0NPuLtBx*`j zCF>gzxk=X!_eaCsedQU~8nYkH$)?O|m&ye5&8pJu{-J^xmXf~G zAx7nvO1IdckG^h8=pFBBlgxG@r}E4a;=#4TRIdamnU~S{#TBE09ipq+1F3_`Wra9Q zGojt0I{EnJ^SY0Hi$Guw<;hK(CuSQiZbeqg5-yM|*pNtTfEuAT;UMP?U|HtuRU|0eE5c0e77DcHR;F1o*xnD8X?>Ef$7jKdq2HLB(MFe4_VWY%^WoQy=zx4A$oI$7h_>kzO z4?99e4^5nxq9@lblm~jNJSB>KtJV|jqL6%^^AHsTrJMFSWDP7^!)peQS3Tm~A;%0T zr1jU`+_+jjoxa4wLfh-lDEFq5gRj%)rTwP0!;NRNHXkb}!q!)CyboWLt!+Ptw{2lA zRNbB4&UcWVu-iN@`f4V>ssE%DT@P&kF;TFZ@^yVZm}h+wh9Le*CU=0^5MY!oFSa~I zo|5tGKr?XRtUWG>4d0a|8m~a4oj|{gsjxWTb?k$Sg2fuvHOoU z&tu>i_uoAb1oF(qbn^Z{73n#p_39!;t4X5bgKa6?z+MwuP>fv4J&S`o4Y4b~&+Ce< z-`j-Jlxb0E3Eoucv1w3g%Ym8G+X?;j#ndPfJ(U<*Ll0LXG3v9j!Ru`M;_aZn+rH@D z-}65wsyh3X=dp%SSd0R))n`=rjA52@H%efT;DES}shnL6M=?&!2**DC{9d}%xpq?n zZN=6Bq7$~bVTH|RPlU{EZF*pTHcfYO{`T@gElC&K{~e9fH|!Kzw?Y`uE@JXJ;cmrU5p;^StL zg<6B_jAeI@Bu*|TsaZj$m=jn^AZL@8ag3^}FcWR?A!1j_IygA42HJp+dPjtXBzw)c z(q!lTZjo!n09C!}fsN;Tg$9)PaOItNSwn1B;W15_x(^AHj%I(!`1<_qjUGbTb3g-o zaFi^xd;=5rEI-}7$Bn%~c@UIwJ-$1-9_;|gKA0juY$=i zKu*8LH_KPEANBsZJsnDglHMDPJth|~RRiU00Oai>c8B`fzp-(9W7u1B{Wm>}p*HV( zRYW#=O&y9MGDtka&#hx^iSS+iLIMy^$EcU$4{HLL;G#B+VYQI(b)z~InPVb$;jl^`zv)l7L#i1yWEf^1-%OQyGFI+y#~vR%T5tVhXI6m7 z5g=m&*tQT#)X%H+7=j0vSl1T$B{)V`>T*kL7@17zEjVfxd4ReHTwv+K>Q0Gmxzf@G zIda%3D|vjpB&dUB+^T;(gNOo&NCjH!6!@?ClM;z7*#Qlls{1HYk!f|N3`dXKU?<9D zbG8f&MfGqt4Aa*+v(^dZtSosEIdE19;w&xvXq+#KdH?PuaNj*yol4BRc^D*>MV7}> zE|Ca?eq(hpl*s$T@Azz{nIx@O#J$}I6b$lqepF5lUFJ>j3h^dt3vR*PdjRuH z@{DfdnouYRLe{Dj$Ph4Btc06q;2DwrLcI23K@hk3Tvr69di48#IsO3f=@twaYqPIq z<}KW7mpKIEAhU;wXSJ4;U2Mg}k>h^Wgg=RAyv-bK8SK9pz0=u{}}AZp8Ni^?r_3=%lfxU&lK z&upX)C}oew7=jHevG|dizLBMleb%gHY3Arz^w+1^+n2(>Ef&5Vg`{;4En|5%eTV6b z%*Nh>DO=QJaOEv67mUgQ7T68-Q!mSKsHG5V)(ZK)URWezoQo&xej>;rSP1*PSa0p~ zl8*n#%mWoTSVY7)rx>f_#}ehxRe{;c2tr35dT)E7?tjg$THsCS{#yI}o;tIH2Rk|m8w`NYcT^^!8?wmWNHMLdt|^QmJ7 zo&mxTU*L@^C2qYj?dr`Rh3Dp=Lix!n9Agl#E+@a_ALJTfYs1a-#UuTpLJpLV44r2c z!4@y9V&qq>-I_91(KCQ6KB-k(E&iZl#=F{0w~-vy4g&yV{CRqJMw8R>eEj?h!vc^t z@&;$zt9rn-%@G`-OxO~u(AmS4jH=*1qwllQtOV6$jeoSbU83@6hjQej4pdTdg;!|Y zvF3GHRJgIR`z#YGc(hSa?Y!!Hp{jRy0|U&JfJlBUZ(q|Xb~}ko5yVA{x|hg zRe#ZqORy@c7k1AoIMBCgX}9))%7Pa0HPQdiyXO%DK(h0*CRX?d5d$6S zr4}NX(`Cjl_O0gdUt+Tff-d~O>5mKXE6Bc7!9h99NhlSx7KZ8ogDsUX z>cE_HW{y4=3thdqK@?Wc2t*@0KIR=92gD)WW;`y2aDgFujDf zbwLRc#q9c^qjzL|)F*o6zO24`zI)V6sPm|n9GB3L_<9NP(VM`5VfA)N0`0i|9*%?R zt9uuDJyCrBMwxv&PE|>0bs)*JCl7N!T{B zx(^D?I$-!1ZuML+2}MO|K5oFWnar*>+^*b@)6*G_R^T1soIw~jTr*GE`V@y=9m#_ncQ6!f#N`3WKbDkxVvIvw0WcP+@K0$`T`zD2IRL=sup@mRK_aS zZipH?8iT`a-1nayU&#KmTkCgTSO2iR_S;$hgS+N0sC*xnzsUI6?c8*JYyOfp*5@uXYZDdVApKW>px)y$JydQ@|S?D_*=dX~V9 z9*FB+a?HZlCnqq8gC{ZaD$o4B-f0ib%P#I*eQpeE1!CYAP-XmcCc|2(mZ|bX7+vX{ z&gnkE=EqJ6EaazmdY9{fY{?ZmO91y1!-VP(OZ$+~>~*UAH6SOB8w&nNd(+IX`@;Pf z^E!}}Z)JvBG6Hzx#hYsE1VLYJ<6@TH6ni_HSe$_MfY16{gC@{@KAzyYL0E?+#}$ui zw1iN-T7nVRm&!_#?o&_Hp+H6LQR%AQM?=}QJ8vVcMd8RW^jP~J#$x+al^Bc=_kDQ* z!i*jr!U@a#jl#F4c;k65Ocq%JFhYuD!o zfks9TO$U(%y@lJEj#Il3nu#RG;A&jN664VUJ$trjOqe%ZB-UX3a$|E#LhUw&lI$Ao zvDJ;8l&)N!#nlAw&un8Mo`xLQdToV-uwK?w3FipLoV}W|T&=WR9}MwjVblW?Hxd{gy$1pb_+UU;Z{VvP~ zE$Uc_w9?}Bak7*gX`c}1;o))?bBrsUyruI0K*{*V!EiEl4QZ6e(n#cIdbE5a=>BCpw({FC_-TXdIPU7qRy?TG9=>-tl z9;^pkcn?x0c6cpNdFDhZD}Y70r7MM9Ld4L=Vhnw64Oa6&P9=d0&3q-J&Suw)fYxP z%z;1lP!Sl7}{z(L@z~>Jq`Ha z1~t*Ex8a+nBzm-!`{!n=2#Y0QuhASWH{21$${9ly$<@xq($8r zg~h~#!-$E&)R=*j)5whZ|44R;RoS!NVnFy+N8-nbtQ?~B#&8?m1uqW1{g+Y1aVC;Y zg{f(UhV*yG{h_{D7b+MbzqoVp)yKWl1zGkwg$4A?vqdeAQ&&Sgw^$2foq<$0Lsj-5PbxFD z>}^Y5!F!kMs+PZX0KTc4KMQ}hZT~xRP06|_v(QqifF*VQT|6AdHmePy<@|Koa=bg( zil;CH4bI2G3>6GSr>&MRap3qwi3rZ+0==z6V*!l&18$G`%)df73iDAvrfjbyde*aiaIBxQ7 z-+6Bd?}_uF2|n3i>|D1At&!5E*^7hMwpMQGVY=7%UM}-TzEgfF-tK!XJvYA;E`faS zhR#C5Yl;s_4iCRDd;7G(m2K#y{v2L(qlC_lLJf_=R9}f*9RiBy2S*;6TPHOl6S>6l z`{7D~3xJC@W3={Odb+xHO!YX&foD z;CE*9>N>kfChm{bz(`o0*{SkD9GdBKU*!}|`s{GMtNqel`JKrj z9aQ-=G>{^z@g|NGrA|xaPaPY8uDnDp>?pDeuz zT{0mB;zZFX+iA{mQoY*E&%AMpAVpW~umv^R^1>7~G{MsUON+2riyCm{;XZ!+Yv)Qgdy~cP8W)DTIN1{lbLyG#Homr_zXNx5SXqoz&^6OZFH{^BAl;gd;}w>o-@< zTW9JSR2t0jeAnoB__76vutuE3)pn@A&VLBybxoI6rnhZm4b*s`VrPYp>8ac%j`W32 zTB(hY5|iMD;C+C^_hz#PSb|DAK`Q3Podld%#o20x?I(wj>mEO}kctNgf%*gb$mvsA^ZxA|S{=J^t}NoJ+%( zGVUW#F|wYM2=J-&dcBU*_rr@la(uizsa8MgKI@faul3E>ot^f57Xq2b3TodXL6k1ss|<~nkvTA|n;kwTU8%vRqZ~t)gaYl5s%d3l z0_z|V)wpdrZ^xqkN=F93%pY|^32@lGF`QBQ6)sHoi9y`Qe&5=JoX}r)oz)^cbb%^U zdw{9qD4}sL10!yA6f`-4DGTAVpIg$jp31_zE71E8H*NGz3+{#kk5-SmbziFY3bW-( z-Uy~XmC>udO6-)E?-FS70$aDd*A6Patf*9d@A9fjW&S{Dg#u z58%vfuv0f02cwWvM!jCg!fMO`2`%l^2a=!>UF_{>2)k`Q4frptbR}#z1$>{@)HQU~ zz@tAggW+fzy>wW=Zy?s;+%qOze%+Ppd41FG+wkHu(5(3a846KdDu(Vwq}UYp0Kg~+ z;}K%@#6iFSRvejJYKe=(1q3c4Zh%T`$+HjF3`h^Sp&8P*er38rNq9bMT0!SF-!mRy zG*sBR31Rp=E0giE&-r91uEN<=3+;Q*>q0Knlhe%>4+{@xLgczus04X z; zKa#mSNOi+llUwMV4#Gd040SR390FLPvoC(DoElHjx5-V1T=_Q z6C77~XFFsDVl_bnmdt=U=c3cL&GbGG4VuAt&=D(joS-pn7`m@{rgW$X|9okwRRz*C zOP6lq7UeYvO2d@zs4-_$*AAo+bAJI9{xC5Z-|S!>am^#B4^$(u037s0gPX0zV6y|j zfEqR*x*>kF1dAcO?+LVucHyqyj(3`3Inx-xol!0@=cBaLkohmch*BnN3yE6dMC$o98MA8JV#N()Kf*+3kr^;Aj@>$QvUvPZM_PMEZ*w)voh|3)85 zB6Mo*{SjHTDPibC@+)zzzKYN4qNm7}Djpmar)96e`_3oDDgE7Qrt5+mwf4F~9(Bodl@w24_OZjnsfsOyQ=!DH)B=9J1i$_{>6uZQLZ-pVx!_62KF*D+agR|s+q!=alvcW zFdRB`+<2Mg@1CHxW$$>4z?n%B)((4sk6kI-SgfVxYk!W2Qgs|8k3cVDcv??Y8+JZw zoG$3QGnk9fNi{&xE&nvxU$5aK=Mub&zx^efxcbf>q^OU^=)Au5d8xX^ckSl;rV;7`zmPQoW+o&@Y+|$8;EokjDcn3yPz8 zE*nt!+bm@x(%urM#Ue^72;O1@Qg^#~I^P#| zKMBZ>LGHv%T}enfv~aSSK*p~FG zI_wR&vq%^K4%4{yw-7=T*npAJ<1`{gkBJc8M3xfWdD@xY4B4CSt4VzYMp>2!MOIOO z3sFMPLb-FXJNTUQ!|}tBxO@~r!M`6C*aYs+34+$SW^=`kF1?Ng*K^3FyDG@ErFBo& zmAle-e14zLkQZ-weAn;ihh%Yh%FY)-D2A}s?yI>m_dn+Bl6?BGbr7CeChm+EotR|x zcX1nmDTGNgaFVdG4)Io$|0KzTE!#7UxRsmH8)ni8U5BY_;)MA+kCw15AxTofETbO6r&^VCmnG3J=%-Q@rBj&F!>Nesz=$O0k6@G-BB~fvM~u zq`IYa2dv0*5sc`F0t&0@8RcjuA0#nR1dpG+x>QKYy5j0%>5^v^zVA!sI4~ce1u-w1 zERauwMi$hWoT+8*EYLBtAmnIFEsd(uow)+Y=f8s$0OD&b6KNiVn^YbygIcQ601OJ71`_C zy6CAVZ&HabGQwV-vG!RTO5@CVZA&F+ zAdkMb{xCm-Asp=i*(scIIdfuJMao=lglXQ3A4GQdwyL*XihN|Txx!}bQSsX6{F*Oo zUyhdi4?q?#cYaXdwid%K9Q|U9s;t_;>)wKIROZ=F0i`S3%9#|<^C=v9=i8$6$Eyk@ zPSr;Y1mqfO{8!MxckR(~xpClMiS!W&Gp~a=0JotLiP+rx3L`!w&Dx!~HsoUriJ)k| z)P3{TIn5u0l7@lJ2(z#*SUvSv6FqxM4z>RV-gYE0tSJqJX>GyPq;YZPi7(|l<^utG zYJ|vWyROZ+HT!*90Ujj>j1{B}A^asyZd}L-ticXcxX`PjfAkc48cebU)$TmvMref} zrLvbn98hX6JdlA{+}T*a?oc0`3Ttzcitcl?(MZGHzzDj=Y!$c4>U=aa3n~fbcS|2q z^ok}}MOA~7FO=O_9P&I9%Ri?b05#!plgq1RuWJ56U>mIkNchf#Dj$=V`t1k!*ivum zG%u5rUZyhu0mj66$2h*9chS;7xT`6&bpbBlD9OBRGj%octZHA>t~1rHWGM^f$a)WS zzVby>hW->sDhSD{(c>oAOjAa9XUTZUMZ#?!oKa+^Taxo0+fQOuw@9)G&hvht;(vj& z!yKoj78~as1ovM>K3ERuhxOEgE;ZPT?f8F3J6lJKkl~}%pume%R74wGo~W<-nT>70 zG??{xMQvzi*Ue*0&Uxl9wMy)G9~fqv_)9I=(Oa`$`6To zk_X$6C~M#pLIjAXwwnKuFy0f-eG8$HPFYiN|lIZJSG?*%dZ-2rBa&4D0|NepF zz6hB^{0y8m$nF8u@gN1>bZQ44fjd|AV%ZwdE>gS!2h_QNQ-6ET9}uNiukf%^Ldngi zV>VgqK*Z2dY`4saf2fD#whtg!_FLNVjPV-c7XR;+4Znj;- zCg;z&Np*{oYhR^KwOK|Str7sgKwcd7+&0?v5^!<%4HkS|o^F@=oC|M_Olnr=eb}?xk4I`6+eqw5cv8t9WNS3iukkk^6ie@Z6mlUj$Zaxp_^qb#V)-RdGxpm%|$v7&k^Hkkf<}JKc z=dI_k%KrlpfbW0%2fItvL*+4R+be7PxroFJ>}(bB;)DF{aDyBB_3m9(wr_AEIn(jE zHK?c86q+ML)@Lq?)T;Cet2Ug%F${lkY8$AZdrh*TX6n*$ahw7u50yV?*ccHgA{!tT zUCeNDUI5aO-V_`|4tsK$62O1DP7|1O=G>txpULcVhxXng1F)jhSH$`F+!*ZmI`2x; zwY?R$-+cM*a4dDK!rvNN!={mOt&yxtP5J`j$~1%olH#fHe3#uOVCwv({2C!3hMp_R zHW_7YZm`!R)pI^C7*?r|&$F6KO0nIBZ<@wzs$+@}Zf#G)6(wqUZ2lpPeL~w}w^Sso z3=5>|2eCD5@HG7CLAE}W^%&iutiD!fC~|Gg^%3ToZC{r-{Q?lR2F23D@)h~LBTu2; z>GYp;PWGxBMRk7(Kcw%C4g^2Ik>Z7FEYR)^ic$)D$Lp@14r;5Xv`Pzl1APF|K8e#s zTb$}DTy2_~{f_B3=5tumJg)g#!_!ODUFx4vlkjR^1&BN8u zct=&+J0>lpRooS96L97xVx^J?F=cPqX_?`*Vt~L2<{V+%^^PR6b)q zk`ublAtt&^4$6y~vZAO!8hAzY5jG)6lcQ=qI;&m{vP(v)!c>)>*iHgn`wQ|x;%Jat zA2f(ZJ{|VEbUnsG+*%015DQW#qb|$I#@!LZZvNhPdV4mroY|fsJJ1I;crB*>%opA;)ESkd%E&~&h!N3>hCd>xU5(Rc6M72WGCG)X^v54J zJ8aHfOO0f$B#6W`oCp4I!fT1UbtK{#Go6;v%|IrBkC5UfjGF3JmDEXTJq!-SPDqH{ zi-d0XBFc-|lxGI?MpB%js?z#EmI4;)FyC3s%MvSO?W0g7R?4FwtyIOTEUOBwO!-yO zTxNHORRNLp3;CR?Vm#fDi>UYp=6|9;duX^Z#SKGQ#<1d;%PgBxyD&|k>PKIFs*dBk zgX#|})SZMt7B;imsL+;JM%_P9f#5(6sG(A9w}P&^c3K?&JZ-6< zsv8T=y>VqY$EVi%Ry$o*r33V%el&NB=16S(Fo`qr59a=UYS4bq(DX{xeVluB^QEaa zHR?||{nTneOpYE+5Fg+d=414u`h84)J5tf9Y$)YsN(dj45UPoEjz=%*EQ^&_3x0&U z=u0*KF7HpY+qROnQTSFQbfN}KP=oCx-JoGEC$Q3JE7S=kO)bLDL?^0%Z|wR z+W&g0_6UHooqoUXoVET8BCxUNp?1x6V_!TN69;8`E)CEpUDKUts(PnSG`$|q(eb`T zRT$^dSU*R+Fo&r3(9U6w5mRHOlj5${9YSugp=Ap}x9a`O!$IMaVhULV*D8T*26uvy z5C9Ag%dHd>Q8dE({d%Tkl z$$43?w{T3m+)~A(4SUAQ&qHtYLLGfX-l3mO}JpwQf zBxwo+v`lo4X}!y@|52~B>!74lo9$IbNpQ=4bU)lDv@!U^{U*D}Zb514e^eIe^^R(@ zd0qetvMy27t#mCV_a9LpYlpJy}XWJk{g0f_nKhaIU#v0P>&t#K@a8 zbLD9r!1*rST@tdK5&6A)g!}r8ujNYN5Em19IHysar{}W^VQFX6^X*6OO@e`+chO*~ z{xZFwnJSlTqeqDI?jlQ5l{@zq1$l1iK5xLLcg9oMEb&gmkjM3s!$Q&AM3WPpoxT^+w=Gwc=4H| z4mLZT(`<}JK$q!1niZ<_I6X}dBd};Lt4jiFkwSaU9gg;BbWHh~vb;W_Hq+TFTH53J zgzY*uo~{z=a|f0GFAXYY;rg+#AHw$y1GmBr%e~9Xz3VMEVed3fstTi!?w|jOu48VF zsk`Uk)f2L6v=ENRX&ng@=lIhig{j@~L2*Al+-wGJSu37k)R!@{hG(V#*He%mO6ZU` z4$cq|xh%qOLhYpjLF@H7uW49QAc{$?>9-@;kj>h-jR}(G^Vn^xqs1S#U3$sY3TQn; z6cAlJq@FGSp{(g|^a=U^5i|ix(C7TNiH7b^)N=^i8tOIhK$)22x~$q{<+BszwuCZ* z*qUd3ttKm?!Cd$Q0644dAYgV_Xg)w4)BYs**?QVuMCh@RA7dmLMw8>Giu|!axM%NO zMqT0p&=WPo&L!qVekH<*_cH`)H2>WpZdFlHx|R-M4rafi%eU0h_As8fUvZebG!5NY zAY{$G*5Y16Q_HM8+tSRJ3OQtaVB3D>^1NH)ez!VzK~EuQvZ$_EXX#>^?{iIE1;4i! z%LE_Lf$ld+SI{3e^__h#$~T8B^fTk;`+0Lkpf(RfpE(+JwX!118>N|Qv)Z$?Hq2t$ zTNTmI%&E1{IECk)+*$5(MicV=VnO6tRSjBhgM)WTNG}XswtYX{&rU$vDTXvyPN!({ zFU{o80EshNU0J*H(S^N$0WMG@}5oP0-}PHzP#Dc{6wqtQ2V z?N+s|O=S>evGY2&3Ng|-jkgN0A;a$%1@e%Um zzjt$35@uH3JDirIJSjOR(d7Nw96Pp2c`u)oqx5#vcGU)2Do-@}O~sGiQ+(MQifuga}FahWDd|bW7 zGg0a62<4K<$g8Se;JLWS&e$VLWRatMo}Pj&ZVafeo7M3}0d7)U=Y+`g^IuASt!?-Y zI?axAl2)I4ITwU?xP}iwFv;(glN^?ZBevxi4z5-EFg0DZzL54weF;oQOgMgU=lSVPklQs)W6RZX)1-%w{YMTK3x* zXoPMmRf`b>dK}6d`bUY3bLWC{=LYA_J2-dlS_X;#lwzJY5b z0lUjK_^NeT0WQu8!)V&MOS^MdsTf!1#$5#@6bf;L*?$>UTn}7bXs&y_VzD${vdH!R zV7l4Jmc7E~dy>pe(ipTm6xFWGJ_X*JT2Kk~GSl?`)eGtT2v{JBhxgO3X^$G3x| zLq221s=j8cdO?jL9xNRmd5D|qRuE@aK2KAUWQ^&br7$eot!NIW7YR-FMSM;~5_%ZF zNy{l6->{mt$tCfT6oD_O)ddZT(KHQ%P96}F;| zu=@1&(o}mr{f(Aq5hdqHB7C1xtJw#0>bHbva5L(F&R>oFggOeMrOKBN24X2 zMc@RxP1dRob|RrWOUHP5pZ0=ufFE&x8aCt-)|KMDExZ;T1o*Ijmcq|ZR zvcGHLGYH&|*E!^-9TBx++PGdA($|_}kGsTZX-*H56C(&^q$NvR+MPIw=ztb+O)|yJ zY}l%SR)d!2XE8y{BK8JEJ1k2xJptJN>WmS6O^cy`IMocbdpP=`8h$r50PLr=w!Vrh z$*vZujM*_ASL!Uv4yzB^Mh!1q6o1k02>twe*36x*uIN<;fG4aKb^pDMH?i8CNxh{} z)>kRT&&IlP=$luGW>ht6W|X0kFOf?@l= zxU@G;$-py9X@BOka?WRKTI*Xhsr1u?@;vn9GLEg6Vc|F)V(vp=-MuX16Db38TDo)S z@_UyChe3Rt(qW*kU!nhR(^dQ&mu3w`Wv!tN-DWBtKTBVYQX#LPA>%o1TCewy;@9bO zJvhE7#EF)uF%hUei6-v|%)O>-PyDwm(&w{xb4n#h!FSZ&o|5xlQvayLqNn?G3XW^I zz&h_yAUxoYh!JdUq0vCdWd=Ki7ZpWk6&k7;D<^%egO@soZhY9)jm zPOfnGT}2yxp)KPpy5wo=Q%|nUDpKc+6CglLPv3&-G5QQLG=d9nqxg7ZEg=YJs%Rr^ zXb;d?ij0UqZH=nV29D7*YolZIZ!NKnyO?y?(!;*z_Cvq;jFQdy?>j?ohJ`*3D7QDLRzdy{J(e17%#9{%?-38KfoOx_rN(uJ4TqHh^ipGAReTi1yR?Lw*-n#j*Gc* z2W)2HjKo*6=Ti`{%f8?}gO;pj)T-p*APEq>mlbFyLYpnJ2Gq7CQ@-RneX_dps$1Xo zI>e;o#GQNL4$t!Ww9}=8eVq;K_7#q9U*YQZ(aqLwpsskuCq8}74iqnm61EyzDrrXO zusCGAtPMtbk+I5=$<7k{J)ZmIOiWX~M^>p^zQBmBzuclLqmJRMgr=bfC0PBC8@jH!L?7wH^{dJ*zsd6v?0+C+hbtK8he8b!1?) z(}JX|2*g0$307FbUes3{E3~)+V^pD|ea#9+(^&z_(!|da;{5Q4@}Uv=JB%FzJC1C_ zYgU^a(4T_~JI6(D&2JM&xzswgF`%#Gu^8t?&7337V2Xs0+5BE1-09QM9(E!R^Lfl} zn=K17GP?PG1K@qRHOag{gpEoZ3&;CMQx_~jovJkYbweA-Z|9Nn)yzob?oq_!MCZX{vKDdGFxZ>-@TULWce?QPih3D3EM+?j3kf`Y3zC2s^Rdefc{C;|8 zIuq^=D;CU??~K!;^?J9SA+ynO${_|9_u*3zvt^_fI!by@opbYz?L4&WBiD;J?SDeO znjB~a=ZJw|@6hgRv+{%k2262=lRVNoUVJhK95NNWs_|1 zoJma8LkREoYACEsNa(BU?Txt)-;wX8>X+x9D98kE$(7UFQ0j>wLo-Y(?6vs&^a^q|?5+p0Nd*UQ z*3h$~*PqL_SgzTs_aOcxy=JX2%E7`mQRZkk+5p705VlbqEMpLL%Vk6Tkb9P zQXE}ZM*izD!FsOfjV#K8*I**B{s1*U2zI9f-jdZ-jtPm?PLH$)WC6<>rT}0i3YakL zQV*^t9JSy?ON0@-m51@FhQSFl+82w?@@=^m-I00G1?XTC33=e#ivgRckFJ+ziZ-^eppR#`4gR0cunJP-90D&4NwI5N5U)Nj+Z z?iOQ@)n!**LuJP4_jF#PjlhU)dAs_(s%~1;twR{7{-*3(T6q7M-FA4;sObZys;jY# zqK&)^uFGqf0NM#gY=Ow3mN_(qfy0C4UE&&%yMY(a4KVtsB14z{jKNw%Bt4k0_yZs!)&afDw^OpV;)ivdrzr;h$v!~)_niVMPQ zy0E5TmYAUu3Kso1@EW|+@Do;#^$vd>#SbiR3Of03@|t-GaR+A9kw)`=OAm-1b1AQp z8}Q{@7erVAj69h{tO>JDmL7(fYBq~VJGEo0`fe^7>ec>NRM9bwyz$Ki(*Zc&hh5i(1+7D^ z$h8#y#tc?>gU}&@>?6f39OvMBBsN~eCRSFPMsGmwT^6*A5z?b`_1DmpY4;J@0H*R( z>qPH?2}-Ejx6w@7$!L__Gb+as>yTHo%!ohf4vI@bDrqaW)#dl)<80aFEKt+sSY!sb zrWg4|Rlj4271SAXNYWsCtI`ree~wVFO0T_p%0|~w+7*7?G{{EZ+*Xwp{u6Pqcy7zs zKUo*FzEdqIfIy#+D~<|MX??4t0Q*UkzZQu}kLe>}-1L`FqR@t-iB-pz`eeY!5AF>I z#-Vy;3U{D^VaH5DgeOv=6NqwV5B`MLOrlD&qf4-(%X_f&$j0N1Zn}#s8XUw{*Txm& zNCuxd?5S*e6VI|wRlQ;X4&&7XQ;>tSedsQY-tDjRQd6KU?Whtm;9fFgpm~_l5C=I=v6=r zRranK+P`uu*maTHp|?&9@ds@t`1Vk`9zb`BORoX(rVV7@gus%qm-Mx{uU1n{5Z*beUy@S~ z4(Fo)n>?6HV>JhRu}#A7WZa4q*T}X;H`KX{ow@F-i3BwOy9tfa%U1I$_Y|M zS4DS9;?+b1n)j+m`H+A+1D+zNiLou9?VJAQ3lX6_{s4R|alVg61365&Qmq@7BZ3TtZl-VfR#Z63 z5{^is7^-chUR2I3ldwUQN9vEehk;nFLI>@!yO-e7NzPUQ-&ECW(9y$RsOKky1JI#< zUS}t8={q{Q58Vmw;12^GEY%KU;HkPcfkqb%%4vnDPDV1N`Os}7-I6U7YvsIsUR>nW zstr$2_YDUVh#u|n*_}DltW9_rw=toPv~bC{aqG=EV?5oQbjb4LTmE>v_mL2eBKaYT z{F9*`w*_+AO>twZOQEF=z!qCoA9*YX6knP&hYe#!KcCGf^(+SnNtqyzGx$A4_nh@F z(u~Nz*`0Aar*hi8mQK0jrW|q(T*I-RGQ80KyU4B!FKHw_qUJ8N@)KQ}@H=w^d zcigCR74Om_nER7m-|__tWhC0$L{`uZLVpEB83A!4_nmSS!b(^_aqbw+nA)8fQg%}- zBJc^As0gyQenKR1UDCr(S$USPf5Ob=bmOnZk;pM;VVDV zIaBvi_h5|+R{4TK7&)GnZ@j%@Z@(8ffyyI#$3yVL@1H7T!EdW<0f%)j0NMugigVx> zk?w0KQBLJ$XrF!~D@}y6zyv14RTFlQC^m&)$IxMG0U!9;=Eu zCnOPE0rVKn3*2t)GB0Lt&&z-RaJ~Mfb10y1t2l<7kB5}X$Pirc;u8Mx1D0WOhG#ee zbYEk(6kX?jVQr(1V>x<%c2ZZ%<$qs{0Wo zON8)dHU#we;-3ldj4zt;LHv7qFc$TI$mKu%%MW+6-&Q|gUK+&$lkE>r$wzCC{Tv5W zx8vvL_xN9;jqv5r@$x0x;s?on-yJz}Z`;MM8E_yxt%L&=wF*3qzTRIIi_vJqzv)r@ zwHv>foe~Xk%4cqE9ls~noA^uS?uD*rMZZLvCyGZek;|bL!KxCQg{0H?VPch!8fK$L(K2LIwPZ_zo%z`MWXe7l9 zOw0KubY}wa-3i?aHtWsXPGN(p&dyhmG3QzHFl)09-}83t1m?T_$$?&>_^)iJ@OAv7 z`u(@kTeudbgz6bAJV!{ef20Sq2jgGoE~NQqPa)2(c{lP%#BrH|1r25l1VqD^ zf5gG~lf9s8vftfM9D3GM)Pws`ChE!oz!bFgif=?FTfwglKGZSrK9wI0N5%8NIo$V{8Oxi)b)fT&QW!t?)G-lW8V~CK# zzdCQ5c;T1v&fkywaz1q*)RB4EEfQV-s4ywzHu2R>wf@?z_0`sDfAy+mq18h5_K+yGI6@r0w|`_nQi%#zdsW{XfP0kpmY`e&wyuZPoRKS*wRWPelMDlei8_ ztu~j6O&=wXyCLVb7YmpjIB?eZxu+uzlyA@nRMtPqBy%hCDF`(4s(?5lnL#+}f8KtLv|%U4>9Cd&Pavx5q3#6>H# zoi+PARS{R5GR1hzR#PL;x{c7N-Zjbe4VR4l!UjeyXZ`Kx_36a^z-Yr9KWG9OMB znlK{*937{h!vVI{M01W{V&IA_NXanHOmZ1ti%4cWx4g^6alp<@w-v&Q6kW{%9juDto!4OVip%(ME(8|zVJWN*U;dWhZU;%!7T`-~;I2N2lE(W}Z_ zUfOtEz~!Aw4p%V@V>XPC-LQDF7;L5^Jrr+J1oqS|F>7eiyv-^>OL#*9=8s0PdgDEq zSpqE!U2a@%SV9tYbv&N}lUm$*xxbEHE=Ke+%OB181HG=J0~KSf8=Lh%Is|T%t|MqF zLsgmSyHDr0Y-HOuodwUUOM3kYmLc@}W!1LT1wDM5pSHmqAya$wecbWRYxt{HE3Ok* z6BtO<63tazTvkoKU|qk0k+7etO2sn^|3tMA&pVZb6?;VQ@7 zZA7r`-IAl0acu6jGCc88_x5Vh@-U^Tn+%5nl_Ow>#y#$Y(aEK)dM!Jz5~8eu+XvMQ zV$j>iG}rNTD&bF*CVDF09$*qUxlxg&>MVx6Y==5=`;d-F(f262Q|zCt>d^K2?k?AG`8MoVZ8w4y|8niI?0 zlfAtYYK9Hml@Ef|dW|Hie-thc(%ZBzj^vPD$-Ho9Pe!XK4v)rFbc_Cm6}o+}T(9>D z54#5sd0~^nPt-wLP26(f$t|i9g_R&&BV)M!smYV|dPLPgs}r)0>B%U>@8~GH1@T5Q z!e3|_5#qOkn)V8I-fc$v{e+(Ac1hWcoLM8QmiL8TG$+g?`-AZhK;f7#QR}PLCFsRb z>;7@Ic<03fDLW=<>?1?%-`v^1@l63J&Au08A~=RnBY;~CxYVn?;GMnLlt6ez_2Cc@ z+ZZq2YbF&OgcR(ETOCBU7cczd7sKzV?g3Vz#>N+DTsT8muf?YUeWlsxRFZPkwLo~C zozva4th*xh3h^B!(&DbuqNK!vwmS_A4^E6W56!qlOjV1Iag4CjAAH%S(%hU^R|6+; zq0ni@lh2FAkhEXrfpEDxJ6jIj!U4jd=UM5I6GBj+;ZSL_qXGTgz4{x~3alFNs|)H^ zDZ4Qj+<7Z(0_}Tg&EA+ec=;)P@@z4;q*KgUIY@MH6 zWKnZc7nd#NyP)GFPTG>$Q5@(HLKmxLTU;*l^soBquQ05%!GmD5l4lDk#CD|eT|E-0 zsg}v?w)uFE-p}f4bt&1*n^U5#y#g%`rmB=5-K^B`oo?29ZLPA`_Xo=6Dm zgJAA}kux`_@fCLSdhajOmsg|7fnAcf+ngwA zM;`Ga%@wHD0RM5FoiWUgw1c9<_|i_p>AlOzshB9Rlcm#nB)%i7s4MUwvP{qRd0aVO zh^l!~Svkj*GPbT1{NS?DA;mHX%JR~blo2xMXZFRoLrenUZrdk zL02IiQ-5+Ra4#8_1uRvfa{&FxNc<+D#b$QGEne!C(tZ(x$k?4$=2ls3-T|TCwyV6h zi!BQq9@{FqLDjlJ(o{?}hV3+hI9OR@82HivfMi3(ktbSx_2JlXxX1X=ZSKy8#2H}I7dOLupBE!nzVgK-7~ zuW(tt&fgux&(*DWQLUPMeOVQd_peXH?3ZS8wO-I-(4XouTAwV7lh+6FGcGgx&pzFJ zpa%ED{ZT}up9LkaTQ?AZNq*=gJ8`qWYJGDSc+v1xn+yfuxo5T7PMZzvjKhGPyE4bf z!Ssf0xWGg)6JLG$eQ)arGHj4}ZsThNJVpL zqENTU9t^T2lY%f_0kiQ8z*h&CZ>viPQ?s*7#%kuj8PGiX)iRs&xM7B=?pdt*fy)Q{ z>)P))-B!iaE6&lTA^b&lyVl&JCl?p_qCh|!w`+0B##%6g5oo}Co;Nm%jw6Tgno?3> zJtwV9U1(U>%pttmXQc=$&c+tfu9>yfW_(lsfQLJ5M#JT1dslx0yl$Zw!)fWYU`~k3 z)3uNDB15=XjE>9@pXp{IiJ`!flzp|Mn9PIndZbfWpG^CxU+b`D8Q zNX41-zk!N|ePfTFw0X`{lcK<(-#nG2t~BJz&XZcAe8Hx4tr-2wCs20m-9htf9IZ7K zBp8g7Pze`;$Q2j^Thf@_3h2#gdXch!FTtwv*=nvl3?0EuWtb5@B(*4qH~ZS-O%x*r zJLbecX{UVB;(-rzD5eYV1SX69W14*xy+D;bNv%wUou{3~6-@`{zYw8gVPHlXV?`2K zpIEPKQpc|Ei-gyCi(?FBmraXpVA7@X<+C5Kupti5)1@H3p?ZWdh8f9M)rz+9Va$$Z zR+oEwyRd*%Z`MV{W!x}tv8#RrFw|2?I;G4J)kq&O%lOqboka18-p_h}`U$B_2Y4{k zb8V_}?)P^ziVvx(L?NXo7D&r+#2_6>*`GL;R#d#V=N(cSkaK!8zwHAzELHGd?OADV z>$c_PO~c~78bG7hWN30(B@<$e^5^d6!&La_F4y#%`*a=s8x2xSE6a(eD~*_uQr zgzQ)I7;efgXbYX}>y1ws3ovi2DyPe`X9yr8`}btuY+qb8dwT`v(+2{W$*o(gXt!SP z+H`E`bI-SyTc)#R#$(!$vK{vJ^po9{(WIgNoZCAH^h{PSs;kl*37w!zUB(WaymECa zApx`>wUCgHp>@c73f}cH(ral%Z>J+{3f`u)hbLV%lO^v+lRJ<`c4R{aP;1dZcG&BQ zc8+N_(P{A(DA$tZB|@EbWpWIY9h4x@tubCQ%fyu$@2ivE<}_awdmrR!n#Fl~G|BIE zTVg*az<8{tvxuCt9>`c&7etL_Z(5Lq+QxLaAdxZ+lT7FkJSo8u-+cRS(&q|Fi)unHjZj2k-EXv zNI61> zaP9*J+S&-3fpud~>oDnb^j;7^ji^pH0z$hlAr|hZM@koU1(qMY$gI+pXL8P%r*gRE zR;z2>wQ(C*V|isFldG+&EOH6BOSFO|v-J#`+RSRKAiFm;uuliDh3^%3UUKk-=~Y+@ zI;?zMtk{lIITn&nDz5Cx++76hsV1l^=zs#1fs>hX7>iwytn4~e8>6AKQl?k;^7od? zwbw`XZp$b&_DN?|hm}ctBtYE8*Lg`WMC*}u^-5X4lTB}2OBSURg#%EO;E6gBMf0I= zoI_z3xX4He{(>B2!pk|WQCqSR<^Hv*GD2JJJ`=SCcyYpD{%l7sj!NtEi z9w4=11Tj}6#s8UBsENak6&DP&q2a?vHljG}rk(Ygzh`_)ALn$w^HnJm>q0rd2UesY z&<^m&+e54b>!s{VKbhZV%2AseF+(wEN>Ay2&@coI4%v(3%C4nfmGYN`rSZH@NmlFo z)!l30kMP)9k=uaZ9Q|XRVsC&%r%6RVmeBg|l7$`B<_nX>dsm`HnSwYM!cYwS97fK5 zTU_MN+U(*ol^NBq>ow6dFx$Nf70bt-eRzoIvr(X-VtkJ!>T}$maZJ?^f+XoTU^HgN3Y}*H~X;Nu%)o0TRCZ&s(5UBI9l8^J0i{OEuDIWYx;QF6ZCdd!?N~%at@$7Qp*@BBu6{V3L^&Q{J^~c;2b&XfKCT zWBPk1xl4an(|NCo++u4C3SEs#dQR-H&}gMm`PF&eJYxVUU(b zMrr!1Z3sd?uUzvUVoxw&s{w=|g3JmFIoP@IYC{+m4RmWpr!J!~z#ff0mD`>UCHo z6RR@pXS}B)>;<^fx^}8VPp#%Vr*Gn_?6c~&Wsi?g;PiBxMHp+X_W?ap%+y$=b|(@3 z={l?i5la=8x}FwhhDO1DFmgU6_7ev$5t57^HQ~%qbx`=HLhP^~%{CH1Pwm3ld%MM7 zCbI=#B4)ftSUF{HK2 zb$)S7NY;71E-ud2i~z5fMfrLSNWLa~D7%Qln>3i%jcfGs;Qql`5r2mUM9ROu$0}j# zd#LT8h#$}=C8~xW*l9BRPdZwCO)ZvL6E2oNA%Gnt7o>mBo z)KPtMrFM|`A`jRklOO#)W$BMjpO%jNW&7fr@!V1A*xP%c?&mYdC%=D=jf))m z@H@Rt-avOBeAhFFg+`rZ9U}1G;-6s0qyRB@=$zLptkbs`K1cQPb!`b%hatD;Q;}5x z9OWX{whXQ`5TH$<+!9g{@lSY$5Oh|n=eO2`D48to(f_oVtF(?GJUHcuH&>!*60Tyl z^ruw=B_zsCSxnWfY;|y{qK(2A2(q?_B%q>b3}v&-xPt2rPmAKk}l~YYW*EHB& z@DiVLDb%Y!NQLor2`irjdEhByz3PAyPDTWV|xYFox`^pln&OspUnF|KUw?tfyG zC2WlGIu+OM+K)Ve6sR*#R3xH8Df6=0?|OZ->-vOebOh?Qd@9dG1G{j@Xz|@wiw^Re zma{lZ?B(?ovz>5mt!p#tYR(OE#mrQEPg8O4lcW3h4nDbkKM+sGJv7Cte7JGPIto#= zhiWZG+zq=LR5B;7HNcUdAO_G9MFL)KBavjB!8ws~p-kuXj6EXvVlJi?0xsGh9}rnC zQ@BWuwuSrH+tX~WOwj>LeZ{7keo9o8Vx$mg4KaR)W`U>rm1f>6PlUK)j)c`s;DP%e zvsR@$vZ_0xA7EufL*gNb+6&)KCwjfr)Hu7u4g1uFO}tCwFRKAN8|g%>v&x=rr5pRO zVCw)6cjv9{+JClYx6}B(gkdAD!#pi#zgiP?PSUrYbw{96U;{htAY>e>(3dr`=9iW= zPTU3*=C>(lKRPZ6Libf8hkew2!7+Y@4#yLNi4V)z`x&EwK-4Nv*Z#KaQkRX%C7_BZ z&MR$u4$&R;@Yf?HiRqmqKke_`BoIH$I&+j*TWgTp_RJJv&BThA10?59ZHG$ohWF>Y z_=}lOPw7+oNp#Mi>W&Tv<2Q9QkoNa(lIBg=eogXyy5I7;{gS!cfR3IIWpq>+-yhvi zZrQyOItkr|mC_e2(`h@%82I0B&Wn75rh7h7jsJX>Fsr*!n0inHWa)P|WKP(*99s_2 z0lM2$xc14zfosZ9a8=wP#FfjH3!r@3CW@gBtY^^1jgcfVD9SG)246tZ1fJ(fK3iK%iy*{Acds(E^9TXcxEi$ZrJI@X1lY! zCyujUIokIQ2eu;47+d|98evj45GuqCJWRVhHW}6PDhcE%&|nKm>M@Ajqm={#FLdey zKFt9i>OfBb{L}}|WDKy{I!@AC&-zZHXR(v1$^_?wZ)iHC&AqgmG(cNZaWZJ_&*eY> zwYv)ISwlN2pTosnrs%-}I+%!g;GIp!?RjB%D&KU?m9>fTbocUYBzDRpZKnL9P5TSj ziQZyRts=j2f;E-<)g`2N%p7VX>EKt@1tD?y;u%|b!b!nnuRBzm=!2~hc8+>rIVL~1 zgBY;3+ttVz+ljtl+!V?WOzJc#H?9TTj1z`XTqywx*K0{pbXwt- zsbi-U+&dUVu$eZaAV{1r?Z0~*rfbi`l!#4R6Kc-{%}DcTi=$rc+el?3EN<7mZFH-- z)O`|Nuat@9Nz=fDCk-xDV8$dnW>2;GWSO6~$@mEWT)v&~c$3c$>G6UZF3NFRT_*T) znJwS|FFBkXSM`Dp}fw{Vjm+8@MFi%5x zutHzp4InbZt>G*n4XE{i_WqsERaQ<0NHHngOIuFQP8#Uh4`{QgrcU-n;>7#v;7)`A zxwP#H=Hu)z*={fQ4wmr2)rxKr_O6UCYE@Nr%so5Y~@-8>A>}%=kwjMUHNZ5q3PyYqa6fg4Q z*9DwXJgxo+;7c%=$A1jip7AQlRK;KV=JQ{>Y-cuc2mEa~cE^`3|AZ~5&_7y22svf& z(#$yun(zK_)LN5^GW}QUd4v*g+W&$n>L`!60mHrAFraT`WB$t4U9clxGwYph!12i} z&*stoC_0FL#OLw&ApSQE%s?0C{Jbfe;<#8Agm?$%#bS|{L9AhpvdZ7Y|DeJIISGe& zcA1?3h9Fe;Deblw91=DO?j9Zn&bKGL5{;H!-5e!wMgf$(zAW%3M<^2txn+-o7 zSL5Y48^d)5R-F#Hy?t|k?=T(&b{%0dJ#Yo*$|d}$*z3^qreX>NV89oQu+p8O@UQ}A z#vj&WY$%I0b)p?N6WWNlZUY^dZ@8~}dxS|!Mrfn1*SpSD16(X9N}`5`9m2=}*u65Y zU{<>LDL-i&6L(Cx()hrcfCCeeowAuB%%&qYXY%@l)fwrdN6@YwI!`ft&^6HrXV$r0 zodauqt>*{YTypc~t|I*--fGp`)AzM?q4u zQlD`elU!$Ialv{zPYAa011mX;Zp?CZVPA>7U4E~+f!AgJ_UpR3($CM%iK>3hZx$*- zXSOaD59qql&tGw^{@bH+;U_$UZx@~PlQg0poxJpBGGfzwV;Ze&KLz{ahs*O!RCfqs zR#*J=#}f{rho`E#5G_@8#lb|6ufzcr1JM<@(_z5>t@EyE8pl}>9X2>PCHVZKp*dKe zT!pJfC&~p<4KNavyocZhi`he<76q{DFEBw^uQ8-@#Nk8w&W$qb z+$icJbdYNSpwk&-)Y`a%vfb%E1}d1yNGkTRcLySgov2Fr4~LWs`MRV5*UbG{-%;G7?KyLOSR9|FEWE@_{U56Hs1$6dJ*3u}vqveLMCNW(hxko@Z^O&|KFt#k+-3@ea7G~)o2||6mccCnmc*F%!L==u9Bu~o#Lbm#B6X)b zYJb980R5@h3G}F#3<_)Pa}&)GX-7CDB2BZ~&y|d`{PG%+R|ecGl-kO32X27M`J^Ds z9rDeZYA)eA4E00Oxn9%X@ooM+blll(Tr9lRKIClY01eZBa_|LDyw?SU+gbM=_8wdP z3q8{H{4Jxl2(Ae#+}x{~g^Ca?&3tb68YBF;!t{VDt#07BEq7hdm5_ewjk;lFz`m*Bc%`0=gC5Bs zev_Is*NW6|aHj-lSE)7#(0bPJdRNFJ`^2j{H*0BcR=UPkb)Vrcqr6mWue)pZN~?gb zII&W~RJV-jzWu(5>(xNy8~FWuPh*@?(cn{eF7_8I!Ahrk&SuVB&O?9ZOzvB4d>9`M ze}kflnbc5E<=9SnbSod(H@}jm%`cVU#Z9tGQexhy>(}A3!AGZaH7$*!ifuD#z5qu+ zxW7y2lTF0rfwLRkt*JMvRFYmBlcdfqtX9EzR$)999d(4YS^*r%vsM;IJAqM|1^laT zQ$H(w_p5`ZrhwC-7Q}ZZC_bQY(;Q&9>2!}E&0C&GQ+qE3p5F&MzUu<88~P1S7JrVq zeP^WoDluTg8vuVBar{m;iHa0P@Eix*T|!CbtM0lxzD}ocusFffSQ_e-HlAR}aSb9T z8`eLfIlaPN)c>~s*;r7Biq_^9KmPC}I=JmvumxN;KvSo0(;jgeo5cWYkO4c90C`;H z;)_YVBCg@Da1Aeoh)~ebH|xUWz5mh8&@5{yu%8bx=m#vdVgyXeRG<(FL z1H23YB1sST*dXYOHV{*EaFI7jZW6zjn=UD1Gnt8*ZasZTX=XB(S%RBN<@^utZct9c z+Ehpv4SIzOmBWs!$9-=EyoJ>V8GxC4vs%j9JTAmOZXlj5^hfe(XL%FGO>5WadLqHA zcMpvQhgtekmj1{zpHIUNU)Y$4F``i2K$JRJU-;Xsgif#ByC_0_QCpkQRT!gx-j5ERugniW>Unt+o2EbK0 z^t+0Kt5Wf-yQ8DXsmQo070(7-sx)~s7u|*H=xiBlkO3xdvWg`XfjeZxM_X;K_RY;| ztr-@1e625ubqxgK_iXKX{g~sF9hFsx3sx?B4Q7?pviqMDH zIm#yuL$SHYmlP1m8Hj+u4FuI>h9@mO&B?_SLff1OU70>EC(rOSNaVqpW6FPqsv)!~ z%2htOfDQX8K+oCU-Wl^uEbE|%;0-ferUP-iBBnb0)YHgnWG}k$w!k~z*Geks?9x2P z_VM4&^DpyQt@(=krahdq5s2M0mUU{~$%iKckrcSxlrEMeT(s;Rnu9EMgEG(!8xIwa zr4VdmLPtP%LJJ~qW08|1O=z#(bTt^;;S}6F<|Z!L85cu9XAfN(U+$|-q~>77gLVgK zaz$WqoUr7;_@wuG#MV4|R;eC4#iXvDzz&+dr942x~l$^O?k2Fk(ueCk`CIvoGb%AvEf^MR{J!et-b85Eb#d@t4 zGIkw;X~;wUbGCnsgAqyJiNd&;;(#QCK*i^DC!)GD3GUSXSms=@j*w9uoOA zw=lK?@$;!qCuq1#6ub}<3Y(lvIE&}-?Ofd&h zw^(hf@n-oB4^J1YD4088vFYxuPEV(W!GP1l#LB=_`}Qlxu`pTfBPLZyZ49lMI?pqk zYo0ji*2T9H!W9B{shb>u(Oe?{O1#NgHq54|#z=cBA$wQO9zGPrNDQmY9LNk(;zf zxmGbhd-0}*t;3}gyByfXm=Jhzo_OXNacw;J$C1!v;z$gCx$CqM*-KeuBeJsHZ`04% zXnZ2Fg@mdzwqZ5&%qkQCj=HN|9hjc-C+_Pm$F2-H0lP~UwS?b4NYb=V$vQrYqRB48 zzX6pP2<0U!KftBavm2TiSvO5-T)I;Q&&)GDt-+k5==ifd_oulaP-SReaU!g?B$Olk zaA;UtcDgUqD!-0VFz%e(&S@@ln#-Ij10YOguBK8fHCQa^OeJbD)0p!#3jgeIk`wI* zGnax&&{CqDbk=)uV3XeMdQh9l6K5+FG8QB;7WAqQNQkG<7xB=vzeA{ zAPP)5tcfkBTSGA@vhz$z#jXWJv!wn#tggz0GASfC=ER>bIf?tPlAcR^8YHV>(ydN# z_ep70h@_4Ur+>d{oex}-d{7nHZ>qY@`wb=fKwXbA*ASYAC%X}r6oyONg}H3?#G+=& zEVPl!jiudDx}HGk_^>rVsLTT7;Fe}*5oK}|O-e(KD9$$RKxXqQmajujdoWe^Ln9)Z zF`m`z5Xxgdr$=|3&+f=-+{ZP8MexFPL1sR9*+f}8cCP!BwnKH5e13RHtJJi~ZF(?V z{JV#T>dK`9K$x)4Z`0f=Z0fh{3EbcoV67>cqa1yF4Bz7Lq z_o0dc;hD1I_@pv?rFYaZ%VSBn;{hFDSu18u&-28DqHtrKGZ3c-PV;91anft6QdYaF zbwyemm9jjFrbQBV!mrRkM(~bMN+oBe66L*xtI*K{P=O--!5wFJ{h97WG*uzW8Oznf zPsDM2N9d@%D!SW|T9-{KF>2Xejo#3jpC?;&;)=(5;b?LR+^h1Yz=K$?ba2acMPxaU zV#Cb?me-3;F1C|tJu5gePv6%}$(!;#?@C(T_}PqDV?TK-St^;KQpD3v2NU$ARK5RK{$LFGzACp5+!?gstnQejX|FzMa4khrY>O z@Zue6rAXq2Em~#`y8{m#b?J9*4Zi52jiwM&_bqq*j`<<~F8i*4yC76V{5ONpjz{5} zL8xP3H*GcDHn4IFVBs|7wOVJCfb7$ujv_CBZ`lhEKV`ibnxt%~$0(5ORiNDh6_*Lm@Y5;ZLd^_6Ff z@5|*o7;I&4zvbPC@Lu_Hscetb+Yd@%fQnRC^r=L8wNy{5CV!eCF!3prCB9U8pW0&K z(L&rlyMzz!f3soPw}p49G9}m53ZyQ4#q%|w^5r`G68%4L*P`vG2jqkbcB$(PTZh!l zW94Bkij>bOA`ls97|-MC=HTPE)Pdyc6pm0>1S*j|iMd7ISO_gPBS6cV($8Gv+gX8j_uy9H&K`F~>WoT}e5eY-su0Up_g zGpPFye-ZyTCYge$MV|wUTiV5SI_xcOX%-jQ8Julw4|$&}^#MrJ#djVdW>u=1 zAf$wsc#*~_^EuoUD}EBfyqX{7C#aIu&5!I@765{A7EK4{-4MhB^Ln5T3bV@D0~ z5f!3QPkL^9!2T8bqlR^Yx5e}(q)vqqZLnxsr_eE0q7Jj?>uEj02mg@NqJAQ36!nk? zC&fs^^3ik$5I(V5DYfV54Xfxd-Q;1nWUQ~E5S!d}TWq&o9S2Ouuq6>!C1g#FJwi0w z)bB$*(1H4<*3bH_gTv1I)3zN=%N~Lo!kaFCr>_R^9dp!pMJ1M)tWw89^UzD(yF|xt z{xFnF^~d!ay~}#Lw5_#YEjEo3yk|?TdW&i`X~t(Yro^ZY!5PKV87s-Ia#fn84O8O@ zM_*~C)#xZOnu%gCP~AJ6E))91x|K^-`@roKGSO&4n*dcSIC}5i-fn3^r9kzxbX_y) z4+KBH3f(WTrIfhFa11FP*{x{B9!Fje#v?kM!f*;?&RQ9yw0^@gsY3$ zfTJF=9%kc=EVT}I>_$`-N*H&DrT}qRpo7RzdPUiBv$qy0Ws9rL#=}V!Kg%-EI=G^D z{N{a9oad`&@?i)>?HkY;2OQzb%rdM5j;>jDjC1=fvZs@+P^9M+SMBR*P?ZE;6h|&% z++MjHPwA8PJ`Q~~2Fq89L{=a8XRV!*!$mo?o!{nOM}}PXPt3to9{S?zo)2=I8aL#t z(lwGeb8pgFP1|`Mze|-QmbRz(+?`5b5%~Xhz8M$OoWX{EvT@?*gmI*-^fFzhHMC`l z7<6XcF=}<+cdry_^={OQ--xaD&f;$SjI~kPar(|_l?HIUFB1MJK31{np!Vn#O$5!x zT8-Y}63E@KGr1Rb=3U$mi@Uc+Tg?VeO{?kcHsB5X(#izn{|60w{O>HIsaYd#R21Tw8tqwt{w@-{&=O4G~ItP)CUUxo;JNL{`N zYuYuDT6F4cNC#eq5#pEkppA-YPBisq+l=q+UG^h+z9Uc=#b_&xZY((zAV>=L`=HLx zQulSq&hbnvw?;)L*`gF-;I0ER2+j)Ayc103aD(`Xe&FCj{ORRU&*N!7$dv0eaah3O z*Nu*f-CSfsQhd`35bbN*0^@fKs&|I!EZNhld$)ZnD2 zj7YilI-#itqI4*wEw-xj0fr#xRw=Gv?P3BX{jJx^sAD&849%RwXmrF5WhENtpKo}4 zG^wXv^>vhl#o%7Hy-|vGsDSOqB%nQ1bC%VK*h@TjMcVN*5Q5VKnmXom{`={-eeZqD zy@B3wSAEBLy~L(vN0epCJHOq3`2Eu#P+=WO#gFUi;u#lbOoDdx!P|>v5GgN{MRcu$ zwriZWWHg%AS&2iNFW)`S&Or8r0asb)bzRktx-Tt1Qo`U#NeCC!MWacGMCRxpJQJ@m z+S$uFVNnm60-nAs562zMRu02>EzQbdRi=V7GgZTQQGl3e|MIb zkt^AFWZbf7DtHJ{Rp%vld|yK6gHFM1E-6Z99^(;8KGF_o`ZLTPy!LLTeKnI2vTT!0hn_SU=(Bf|9Q|0PdIlg(PE<&i-hMP$1N%pEU3=+?- z8qyP`NB4KNgk9 z+&fI7GMWm5s2pGrU1K1LAm}PurFFdjkboG%!ys5uRTHa*fXSz~4+#Q& zM^As*zeRBA0X>DY>E1kgmCpXNH@|fdf5I?l|JIafsGXPX{8l*o4{Ds>B9L@;5&xoK z($|lkufKWp;30^_-;nn5;N`(V{A~`~kRSN(Pk9>LIta9FW^juLk|zWDFPZB`^&3}I z>MQ#6uLPsfiMl7+Kol(B4!g>erHas@R1s^7v{KCAU<6)GL1+jVjD_(!LJ;g$5Q`02 z%f=M0jZFzJZk=yT2b6A@lowsdERHZ*YVe2Lj=mv;o4+rOUyE5b7v)8P8T880rJXIQ zimcL1>G*EbfL*QEgn`$y)qGk_cL`BmMT)PK=xbq_F3Mx)VF5;ln^athH2trmvSLkmL>r^VD{|# zp-rGdP|*BE5iIRE;;$3h%e57Su}j=;p5!baO<&2ctMhXLPpk={;91i?tro>;LD({E zO52QWOWnRE*QyN4(J#JglT_E2+uMRje}!CHrGV5;Qw*cRyA(+{n41)Y+#Rz z3m$j<`l?uPEXz+01me6>2I?mjkt`B3h2!eg6%aEH#Q@#9=3RNBLf%5;$zjppMw<33 zqg@AY$5&TZW17l~F?Ct)wZ&uyaqr*+<>%**$A1fApnI^cWgEDkatTZz=+Y%FtU#Qa zO9~!?_$}VOmM)g@j=`|v-x_v7>105P%JEzFCQ|_>HoEWBI_f-lc}zbqj}N3tdd2U7 z)JJdlrLT}KHgq);idW>zg(@8AL_)y=H42>s-@Ce7I_)3NzW+{o@FuTYWd+Dx3=%;b z1!>&jF=L|T6}1EjN(-8)k}>eaqO?S2*exwvMlaP{xNzH;O|{yh!;w$v)bPRa&kC4_ z$z$-U-BgY#fdm`Ig<$Bngoh&Wd7YIs>bgbZ4=S-^uspCVU_+scPVIU8dOMfgwj(ks)ZWZ(Je-iH#y^%Y6QJOqq_5D}f&dmps2=|Sl z7L+O(C*5*%%Iac~KP@gKnB!K?_6gguU8sC%t81`pJG?w>Bz_V-)8=mN?3vmRu02IA z=<_is^%?%g(Bbj?^w2>%##tFKH(9Trn=2W{0-O;7jo0C!mgjDmLU>~w8$1J>f&f4o zhO{gBalKaeM+D7DgSY*b#}4ct1qTNK%8Fl{{foRkuNKhumXKJNCPlKqNKoI$X=q;< zaf!BLLP4OdG3jvD72Pn^1;PF3dcYAjkTek8E4fN}FtK`(pV+G;ebO1v2)A(6w7cR2 z!1=J^bVZy$go&bC4|#d4;D8Ax9tT$Wqe6! z6D`(>W-&ZtG~}E%Ot{cIYBViZGLa02u>2I{VKic#!{by13=^RqZ091(GphR@UlRMC_O*(8_-(MTBhARwS5v~86)@^jE&u1l%#i>RC*{gz!6V4DX>e+r5XokU))3MGo zepVoyT-+r?Gs?6ce=;S=GxuGUt7uc@4Vv%>&w{%~l;g(bd{SrO zLj@i%k{GxkhERTHkqi1b^S{ieTfdAz8*sPXhznwiO<-UYVc}9r7cFE+Xi8S#deimOsl3?Vw&lG6qN}eMg0lfwB zI}V?DX+2obY_UBup&l#dn<9n1T3iZi5Ptt&0O?ZTg>i^y`xgI5k75K~>p%^T`!b_m z%{_ob(*d*}6W@yM$$j?Loo@5=HVwo*~T= z)1~AgO$ty!*qS?8`TfJ`T|(Jb^pxH{q`~L+?i?Pj*LM!@LJ$?h&&%7M*|g(1$^>N5 zv`38DGkbAD`;01DLJSctjU3mQb4b|e*5D_QW%cmK&IyYmM;8tFM+Q_SW0Ow&73hRW zpi4t_*U{vd#{C+%9y$Yu8Brzu!UEXP$fcmAONpqvZwZ=N4ZLxL5A*1{N^4bP!$D-~ zXv01y8nj?^t*c!b``(`IN)^Q=fuT)!Nyh{(W4iO(aT&}pGzjNDapzTC4m=YlgbPc! zMn=Y*E=Q|bUoY1kQZt`OY{V12G?R)o)xaooiNcu*?KhClSm`cpz5@FXJ$%d*6J(sJ zo4}GEJp%R=P{mHmXjXPhg_SYPZh>!9|B|)Xd39*QSFBa{tVseT0yHi1i1vPc>8*LqSc-%}I4*r|4dHjlZ7~H_awZn;7&@UvTp!o(f z!Uw*I^3>`(0!+xe1rCa5*)S31$wy-TNt)@y1Q0@&4?K^ZQ^JX{C21UOg$dYfHhw({ zj0Q309RcZS*S)2E2UkPWuyZ?yuhM5jr|(<3dCi3^?m>Fjar%m`)h*?5@#_|sc;SqL`u zJcf<+b2_F}gPu}W%g*6yg0E;MYzW@zM-DFpIm>g<6f{?FJm*{&@$5W)9zUB$$s5-@ z*99(_=ke*>RtgF$JO(|j0I_#Ht)_B8sbxy|?UD2m_Z78#o}fDMf#WnnX$$u4;oWp! zshiZ?cH^gi%+luBPeXXH55kA+yC&YUfJZY!Ijln13U*@-t>b4U@dOj8<;3 zQBgf5GAKXBi0ah#9fx-;qx>)lU_G~dOrBM@$i^>oGTqc&DLP#Pd5wVaVM zR%a$*mlRz&6P@Tt^;yS7PPdGhTXh=~#-?ddPeIHGx5I=yGHl8tpP|OAF;&XtLu@v& z1+yJjsWwWqI5pmMMOjyMc8LggeJ+4Q#Pb~%UMSH{>L~hxR}Bl?E9G6c7s)$9knqFE z31_FXx&BPM5ieEEao!b#nHZNWy_&QV0929GZ00+O(7}GPaeivUAF@`tVu)ZKo|NTq z#O7_f_KqQiDes$6L^mtf8$EjH_-Y&~v_|LCa$hYFNb?MQU9v!wct5m=JkUbCc)(}IIb4&f_}_gYiMEuC~D!Lj^hqVi1ufw3@R_1 ze6^?=?YU^c1x6<$2WEmZBHrIapN1;grNwgMpaJ8PSBVaCLyQ4##*@0dJ+D2ZcDm%9 zATI6xzn^~lP1{~7B1_%;IZiLLf`87_>qEBDKe~PU4n5r6#J}fV(GE32y8|Rs-K4v_ zzr#xAil+3dI;VMRi)`6I8})bauTU_hDv(We){qz87FL2Jq3}@idX0*AbB}|iF$*sY zu&aPdJ6O60betnWhN7iLrx={AT*xiF(NSkvYfhV}X|Aezful~P1+BE`tecp@a@9%D z=&Q=8X$YbM_PhMip|sEzLF3L)A1p6EZ9rsKl=TVfCT6AV z$E7k*+Al%Evg$ILV#Z}@&#K_M!~A=FVqpPr^Zi zYo(R}_zYiLL!+FAVNJ*AL&q6)1--{v1HQFLb_=7*Eh65$594TA5^9ZuiV<8RC>B=f zQ_+oRqi8zIJ1xLVdqe}Q(zoK=72Y4QvU<|?_O3!>?H^(aFY@{<52@zHeTG}0lM5okIxue zu~hvtt!SVD zec%{r$(0HItHSMZxN!i@cmYMD0JwT_f(vV9L)AI)(selb00D1xr1Vf6zpAR4Z5l6a z!jc2c#i1ARZw1eI#ap@)@FF7lrF;7#(h=+)r(pwsI47nPM6Gaa_!{s6;ouWL)NF-N zv-H(TT1sqS@i+`CNF7+9^t{k!;CU-U?R|FB87}ZEZ{rMqM~%&b);SLz)H~(E4=&CC zhCyd+vpxl7k7yyP-9?m~@boMsGLge|th#H-gv&M$BNnY@CfpD|jkm7Ux^MQ1c1y}S z|JGAO#}xt`oNnRrOt0ZTmm&X_z<<0-2+mXZY){u<5hgTe`7hF^7!#MsG>%IC@^AS9 zdX`!{lpKc}ZKoe!4n&6s_OFMvU=HfQnHEN`MZ|QTIgow zkdJMh6pmHo@D% zl3ttvCUsm+>!fneb;QNedc$scdyuT-RT!5w-xxOs$mKAomvm~EKj_G@t_;izma8Lr z=TWR9ufskDyWURKjp+MPF`=Z>pngU{Evnc?Sw1@*9J7s^P7OG|X{T7!soHx9c` z&>KhPIRg^PdMWmbmQfIWIy2*()A?N(IPXKPS#ZLDle7JuaT>h`5mq_x=8sMMv7CV+ z)1I{HP(H4_H=RL;^_2|%n{7POb|{#isho6-Ig3o}Lh&GxMH`R{w4b%A5K9To<_KW( zyTc~GJIW4tM;id|5Vl(Uk?%+^cc}G~*E@^jr950zt0spPtvszRO@IcioZFrj3Rp97-ycflFq}x5$j)zl= z_X_Wd1!QbGrv&K(*52nB+6}hecC0v`cDPV#Zu`~2H^DY}yzXABOwZ{PM0dR+odTz) zrUd2JZXDhdaY3+u6*+6J+#nOP=XQ|u@i?dtpq)_WZrGU+Uo%(k9LxfD+BLBTNZR{U>AA&XRBfX zKQi_QOd|Y_MsW@N_qLh( zrSSZ(p?db)kH{JSisw&k{FSo$swz(jK(*-*8M^-o5F;iFKS_VhIhuv8%Y0FB$pDp>2ge7@^n17W_FzwQ@9*pN5ex&N>+yFy z9L@3N_Wa(_dX41!cm8a@ceKjd(f;4}k9Mkh=bR9YypDH{3GgqWphy5FD^0$;L9_{@ zci74J8uOqNPh^cj@ zvEQsNA+~`zgsKqnXQGXlgX)>!P(oA>^%-!h?HS z{o&@Z4YP{$_wKjKE4ov4^0r&6+1RLiVsr`v9^>Ls1z0Y%bl@8DDZJ|-GrLDv`Ju^? zu*a^4kp0f;rPtbvPqJ+}V%KBQ_FUrB$BPOIlG`|AV#9b*ATl0#q|Eonzp1BsIGP7z zSDR2lg6(@;&huYqU{;P7MRQR!O&VlWFOdy@b!BXH;{w@dF&v{_fpQfCt*eIa_er_` zuSY*UdqTHGaA*JS{t;cV`_F%R@ZGZ~&nfZM!=Hb8fQR(xvqSn~BRX^W-kGA~q|}zc zo)Xuu+)J68fW5AOWo|!%)y+zvwUON%?B5Ef>0f65dD+ZweG(mT_;0E)_zQ>Z1INDR zNg&ECTo`pSX0_IlYv3JSS47&iz*g;f47l$L+9LZhXO{iF$%lL^#g*|yLYR6XV{ZT~ zRe9tvI3Mj~@hB$kIL(MJqalY(q3;cq2#R3aPItVh28gi|z?JGSz#>RC1PQ~z6^;@p zLa4ypDT7h&_QXC8UW?l_*!-=4O@JQisSxiwomBXyrwgRi`gcP(T#aBojAa$#?#T3R zpKfm|usUfgs>l5>bg?`4x*1+!fU(_F=H!@l?*8>xB!;iJb7e*X6PGd8(LHdw`HAiC*N+t?Gp5a3U)lsL=jEtN`EYo!7_ z^`tQnx?=@Rq|I_#E3d<0geZ9I51tiY;JbkiUJnl0QKr{R8QgO=H&-wF`}+ar!Y+WW zap0;CjH42D<(s+YK^KjQ$ufnD$3V-2Dm^37Bp;=LSh$NBCyp!-0JgH$6J(O8omoAH zM?wclXoYU^BE%z?s*tw!)LnG2oGNzS7dR6TK<7Q|uKHnISpUhTQr$pM3Q^WzH&TkC zGNrUP7I*W+g$IdB4I4S|g;U!RFm%~9AV=I~kY(;8EY!!`pL+vI)m^4a2C~N*y37O_ z)x0t{TCk~u!M{aS%TT{7*E4}AEVFP|RiX6Z1K;;~pi^VNSu@!tLzGx2 zr``5BbZe&rDpZ`U(gJo}rRk%e(RJT#n~%FK#P6#fil<2HxLs@6M5>pE%DNmdl$5<#X@L`@y`b@V#(eRcHadw?F@*Hz<&;Aq>c( zf)-OaZUIV5b#=uyuv!Om{3~zdnHvjg9`Cq`){*XCBX$DXLsuMl7HcRzE$lKglP-vo z!aX~Q(uP(g^lK1_#=MI^sq&H1@8Z{iY1;vR@V}VO8z$1mhhV3tcnwZfr9KojbjZmAX8*p-TUaeS<9vhQ>C< zgoCq5pUClXQ;IgfXq*Jq&i?EC-Eo!G3+46R^c0Jy7^YYz-DAWelY5G@s~oXL%9w*0 zDA=W&;4$p&?ZR6~TdhvcIbI!vzuWlX(NJ$J_w$Ahaa*c8wiI(oZzy&0?qsP;{V!oi zrlpAek`E(j3VqmuBC-4O4whR^%cSB>kaut|J2VgbsyK3Y$9ujYTr|3*nL@ohM1%#s zkAQ#iG}5u=i3zviU_-PZ0tdR-nXWbYEWZSjlYIk{DMA%9m zh#yAnfbpQvk$40m&<}fzjH2u2s(^-byMJ|FoDhz1lF^aA^M&9#fQ_ND!JNpKzsr{r zF6i|a9sE!>!lv!P)Q#V3p0goxDA&&a)uA?bx1D*m#D1b)L+_&xADl9~PMrp8(=dS$ zOk1710&L~2&P&q`^ zpeq_|_;FP~Eb9EkXL@zK*LuB#`K)F%W8DId7jh^OR)SJcW*|Bm-;zEFPRX9_cfIMs zo}K22n>YVG49k(NemXu%2m}7KUtbRw9tx+-##93X@c{eat%9Zuo+{CI!uI~quxPID z9s03;)V(t8!d*m!rB6QabU+}6!Iou7sWol7&?7Mo5KOvXPG#B?nXtGsmCW6DXNfEO zpyPDd#VFOh@K)d9V{81zvPH!puh7Ry-^Zqn?fn7SOXonR?>*1{SkY4#KgANdtJ7OC zS{i0`#d`9Z5jI+57GZ_sGKCb-|`h#CE zUOHQDi`-|~-#WMs4nZdk@?i(DEBGd;w{Re;q5gNyLzm(7<|i4pDsI{5>n1@7Ku6!*z| zTDh$Z46_=R<_>1IL+~B`aV2O7TqthCD^?Y-rd{6gGpsxq)TVa&=6~%QfGcE37Fn}K za%CJ7GR^+~5;y%5b!yTcXY!<4F0;!f59Twr*$Dpf*HO7&EJl9~=JD37&ffD%{8hDQ z!KF|3Tk0BEw!+)w#bA#=C=6UMFoF*c>LPnkF1}LD>sWyv&)XYihdPk{D^Q_X_8!IT zIE2rKPZvif>&W-Y8;`3M!FSGN;W#)h{u^RlFUOxJ)+f6)@@F7}N)1faKE)}rtkP1S=@ z2<_mKG$DgHskgy3y*1DbFIKF~>_6;4$Kkpc!TZYl&`uEe%=3`(-VtzT z`(uFDSs6qS3^sPS1v}yuE&U~B%ZS|}oK{mJne~k#tFdJBZlyjK8XeuZ(WvAYc*y|y z-NR@#A1Bj%&W}JKF@CQNB8_ItIjjc!<9hBAV-P`;(@7j+!5rHGO5uZ69 zyUS~Lm-lA-aGSQA-of>s*umY6+LtJ!&e=`-aw1G^~504}D! zY{w2cU7>2hUq=H~2m+`gO>`9la)%8=DA43)91UlJU&O#Y!l26D%Rb=A5fjD&E2Wd|I?E`2|U2Xk7*{`W|i@4HV<-Yj0 zHuOwAj2ZXoI7O%O8a8P)gp*9QxHze`Hi|+Ps<`s zFu=m2%OU^tr_1Dx9eTkf7iz17Ge|5-uR5l z{)vs0Ps9hOY$g;sqHv|;TSW@19^7s4l02lZs>vF=64_RrRfQc)%AQ)tmVH668{4Ar z?~85Q!rBv(>jmv-FF&4c-ZIUUtkDm$wIhNybeD}~z zy_XreCB2PC@&7Cd#4J-H88b)>m;IrDn$aXMZg}1AiTCzVD$AwAIV$ZvY_=e)!VY~< z{G8&$6qie@xU6gNu$!Xu?fuw|8Ex}E?8a1Tv774sS?sPraF+|;?buM5^7mI+4nXp# ztC95Haw_kK6zuHmV6dM5MoFxr)%6K%avc$a_&D+@Iai--QDn>NY*^@eQ7y9NSaKN6 z3Vj{8YGTbZz)hEfOsA$Ov*nl6_z#(N4q+T^i*9v84~Yd@T!Nl?|9P=&o^?BojU7DTralwO*$Sg{)Sk z0MTCcF4M5X%2XEpHx=sW_7a9=18x)g_{4ZZjj?#yeFeg&!lM zFrefqTKp62-o&pV?CucvYO5 z$QHar6EPYa@yE+MuO}2R8`(pN^cCD&GK&!RLGjS|K|;2gB6BWe-N(f3M0a33{af4X zj8D$ew((7U6%)xk(0Az~+f)C1xj?iR-A`K{z3Nsl0DgGe^$pfgUk6u^DcODpwd!*B z&b)uWi`n1J2Z(NrZBK;EVE1xr8l!^R^OX_nX2xxKL7gNVP*Dd3%`luUgbSR z>}Jp+zex}nx!~}|)(u(d`w$$ft#r}!>?4?KvNXEn4m|$ai{2t@AA@=govm%O)$|6U zE78D2yoRr8peAzR)0JhNwGB?%vk%B|r4 zCQ2hpz&g<3y>z#2Q=j;jr?YCiY=WQ9mX2k{E{cYUteeol{M$b>?$rhZbES%8Eu9qD)o3#YT>vi_u4_G5T{+_S+lBh=Wgm- z-ESLoE^cU_l&u3yd2RzWnPbuYXQ#DChl(`sa;^M+E2q59V!(C%#IX+YhcVfMx9-0Da1Tk01xx_B2%fV~G=&G4eKS^- z2Oh&lhuBg)U@t<{xOLBy7iEh}1D>i&iaoivQJj0K_uPYtebh?#{4%8dARpc@9FW@H zYx6GEZB=?O45SZN(~q|+-*5BwqqTvDmGk2)ZF-DXs~chYufiryb`Sodgnl*r3k~V( zPeeeMLEt_h(`%G_23H?8T~n1UzTU< zwm3aqU**S_(fSSHwH4>QK#q&cyKCAU_;?Ymv(=)|AMa3l#^0*TRf8z4S(AT$H=bqV zKMu!#AH6)7kJ4M8928beP!WhT?r3x4PtlK~iz|J6#O}-%QUSGwm?k3Hx)p4la^6rUDW*GKq$eM~uNIIC>0X_yUY#(&Esj?N_B_~NgIva^>1?h& zmX;jweZ8I$5ST6aA&M`lrx)qD?&;;di^(PRvm-F}(5!@ZGK-?IAGJRL!j87aN z?B3;fVxr1+CwkLS2Ir|2%`!MY>6ykjDS62n3Qmd%+GbMND}nfka{Oj!X{_sSqnoKH z;T^N3v)UGyfrJj2WIZWcw$*uF=7`WFA_lA{cMoH}1<`&Y?!U#MaaAMAD*@h15Rb`U z5oTnE5th{SVu!Gm+`ir)$TQCBy1JrI2MAL#ltFw~>kRz&ud%v@lpBW~@>zXC0tT$_yP0?qUm6=6P4EM zt#%sS&91ki;#>Dx@sIsAW5w9a;;x$>_z2L$#&3_%dgpqz1cyb}yWS;qPx>Bn{~!J7 z|JjkuI~S{_-8m+l4o*!G+;@KdsQoq4CJl~nbZ9xK8=xAGCmQpqXVsh?Y-`ojCfddub-ET0&VkR%7d&3E zBqy2=7+hrKiZJJ0YDk&j8W%*()bafjB!TumAM|W&!mw8esCumnfn_)fKDNhPh0jBE zn#?}FLLP{g32g=o$a#1*WXbC0kFO03R}*M27SPg(Cg`67FoCDzLJd0Hil}J@$Vz*a z^-3v_uthjvr$=eAo81V1z(vFgxZhuuP$tXk_8rr09ki#8q1_B$y)EsJS*@e>z`1*O zE}UV2=p%GH+UL8Au+pBtB>g2+Pw6#lw5YcjEOY(BG?~7(xP-o_)5dwBOy(|g3Ot5q z%yMAD#r<$^3Nz;?_xr^= zd_cq6qbj%!2jszd4q{8XB8$ip?#`KDyjBbVI2LxNqHZP5s(N$9HeVmsBKAP+_g>Tr zcp23NFf%{_WDSQPRRp;(eBg816P(p zU2uW?Kt;=;ehC9v`aXcsSk(|h>(YTScvzi5!E#okal3Z6G`udWQm}aT;++6u-D1hT zN0xbDe~io~#_J=}w{dXNS$lMg3-}xoFB=M;f_LyQk^wdj9hIOBTWleJ(+LRl+16DV zVQ5)Pk)(Z*Oa%p!h{O%{oBQw#>y--yq37%_BEoLsE+=2Qx!wa&jR(9Ips4pPDTM>= z%|;4N>r!(B-51M;vmSGSPQi088GE$|;*px`R&&jhwn>pS%N6);o#r z@YyB+x&pTE{1<(9c*@S7KYfqA|BkUZ(_*6gCwzt*|IX!`7%{aGX9$ zGffm!E0jcIFsda{D7gICi5mz7JX7}>(nUjr%J>X()Ru4ld>~;GAvJq+1%A#l5E9x@ z69j0a|4K>Z#reM|@7$k=L8s2EmYvHQ>M!J$OSxs?974^n6&esJR3m6O=&H@H$0G03Z*jE9$Y z9=93?gKt#DssyX*0+)^+tEq$zNSDSf0X%4@806P-11kH;*u|G1181{&GEsU;R2)$R z3?LV+oz&%EYxu2DjE+_CFei%7`ObBqnyR><)s)p!93;pj=G)3#&=xNTV*)}iz_HT#P7C-tY#HZ+gT_}HJj$6!zMkqPy&Xp2 zLP@>CTa40GnKO6GrC1d|1dz(JPfPo9ScM&IKPT6Qb~(@kSRWcVEjgR-(?!}Ww<3qL zB~{>UV1Ku{vM))9=T;B7tgb0v|lKfTeNIWl%wV09k>9S98kd|2sC ziO814tSwx7<-WSr4a6U}HCti+`Z4O|5v^lKVC7x9VZg3Kftd~ zNnyDZXN8@l!ViAGWZaW{egDjDMa$lSDo=tN5T;oO0wt*+9#6W+<^sg3aET_wWVw3LPO6@&ZE+8%-R@ZuPQ`Tac+xd^aOJ4BUz(`Y;I^LJ z)@zAUy^4EnX-;}!Rq8=mvH=c4u1|q8niu|Tz-S7Bl%`^K_zg0j=E(Y(CCEg^OC8aP;;4?0j8Bt=2*o}?SZ+ul(rOh2@<|Bc<2 zbH^M^|2_NW81S$}s=vFpVW`?kp_I{9NkKvoM=BjU&9g46g}w_wt-B9&KJ~GH*xN;; zoks+;Nk_QM+25S&S>U?UaH#DjCyPOu^TJXYUo7kt$DdFc=ImW0tE92`@bx+Q<=Y;i z4XrJ23Ok&WkNB;x%e<010-9&K>5%N^1IKf50(|@d`3)o5U@L?s?6+GZ52+~|eogET zn9)X#i{iusp@kv)bjQcv_h`esz}5}x5e&&(nAOKhS(AWK+3M#-Gqt@`45v#2B_M$~ z`Flrnx7FB8m3_Rome@lMh4Cht#Sb+Vy`!+N#_e&!q8>F60(z93ve|GD@<&&bVu45DKk@|xa}2V&!JLYjO^D58ZNg5#@V zv6SQG#0ps5lH>x3dlW?AcZ%_$yP=NC`Qpl8Jv7772eW%+D;~0a)~42w=vwGB zp^B){)r1@@mpSshzQJh0{XV1niq*mVy@W0aM5nzuYP#HTn=!p^qB2ZXLR@>|ApDgE zyI~V1g2leq#~bDN*?9JuwmhZ5E%~o?@l9`0=TdWAiaX_TL%jTcp_M}}^SEOEf~zS( zhJ#wuI3vOx=cODIiZTDKTlG@_UdE!g)XvO02Vw}K?bNbkTPbva_ImuPXyCVWg{&@J zk*3>9FO@*u??lYkW>11maCplnIshfw0usriajK~$7QI42kH)=Xchg|cWeXd$8H>Hs-~s;)S!S6ZoA&`1 z#NE#qeQ?@9n=061_0@A`ohx2*Ha_gLT+&UV4?bFtyBl+~o>`r4!!Di3!W^4j%Ytk9 zE|&nWd+$T6Eq@^TOxELdqCRc-o?{`>9JAUeR#aW(s z8R2E*!pairu$ql&Sh2;(+3se(AMY8-*jm-++SF}D*RwnnTHgj0xEDtl@ePHcmO3Gy z=izN_T2p@;UZ9EZVP*d3(H6e|jZIFB+;lNAcD@H7+&SFxnq7Rqpz?Id!i-o@; zV$it>dG&HztCUA#NfE_UtwD!Uw4u~me`mRQv6C7&IEn$)9nb-kzlr5lg453bD=ZVn z?6A~W)R>a&6AI4N9R*0{~V=(Ug21LHAe%iR7g~Fiu z8|5E*cY=OiPw6upa`WUOo5Fe{DKCPQx?NpWz0*l$P`0e=<_@%RVezn<0T;*6@0-{R z=kJPsF>?}z?x)av=3V5irIHqu>K^+;sdl9iUN<>4=#u6G8Nyz}bEyAhn{@DprZ~8B zQSdME(=S}+VX4S0F1HM@tzpQoK)EWndFU3x87uZ9^XKAM%Z-d8yu0}m5t#SeC zVtjsEYRloExbhsb@Z?05@1d&9r6bL9M^Pf^nJ{ZLf|{{gU&Q9#y=%w?CT160>#&HB z&&Fqkk1Na+g7tiInSlN>bzN9R zG6sSEe2SVxmeDQWNP;oF=Wx=Quj}8kDjPK(jz@ca#8rD^A!o~v+Y)tWs*f$a%328# z)ol~0t3Jx!itUgC#OMII)IO}G$$97r`MMkbnJVfIDrzT#ZHybC@vV*ifC%eKkc*rS zIbyM`{o^*DknDG23E||j{1LxP5Y7C}KC7%)CsWxh+SM(~k)w71seJ-%t&t%<%i%w^ zD}c*?_`7l55;j{KFl_WF#@cr$Wa^A;jHZAUzUp-bpfvYN|9mEzhHZ~hUP7m}$b^vA?xoAV=GR>a{ztD_IO)gthc;*NbE0`W7pzpye@{#iIuagWwR3&^DjzG@CQEbAGn;iZoKd^odM90w$oGF#ybhr-=eV}u ze*fv}S1`)H)xSO0Z;=A>Q6i|ytS*kW|uDBKDsJ>0w>b5~)vM~1{H z45lkI7#Dj+CVuKr=c<}`(XNF_dT6hpW11C2UXdk2q{63JQhwLhYyokdhDGm#V)c$+ z87ds3E2{Z;I)2%;*%9BVAmt<5DBs)^7Qc-4TjrRiJu)``1_@=pjF)k3UP!pl zLJ27Z?%f9WKPmN2D1q(LPG#PvUdR`keU``h){dGA>R77zzuoQe8Amuc)McX_>ecJB z4?IxBe7NyaojNN%5&8uoH_X$l_>>VSCa}T$J#%M!}Iu8&# ze4++mqtG4QmvxW7HWF5rEJde;>RE@C;`3x1Vr;AS#*L`JYDYjUcI61Eft-+u(^#; z5%4f;LENneQ>E2!j)7k{B~b*V*e7?ZMcC9zb1=UPv}^^XQ7 zd(*YHxD%vzAzQ=O)Ic}^3qi;|dJae)C+jDq<^kKaUGE6$stoEj8hc4lm?)wEBB;aq z7PDD1FBi;~k8npaD1UB?X~S%0do>-%`}Ev3*Rr?WiD)3a)OMM&;3_hIumw1KomuKt{<1WEfxO=8{z=X%XcuRth!&cF(92Mp*e0nSOC= z+r1G{#mYP+c;Z)6?)2(ghsh1te;qgJmkx0a5!^r|$YHctnC#BZ;9 zulBF!_bBe-b4{=8>gRl)+Lv+t!7h(a%kRtk=cY~RyGvK`pbOjh5A5tQqzxgiYcS4m zaf=2N8GQ&V-#H-^=Oq5IyWev4I?g}0fSw+o{6$C|UPvhrP7DCC?d)1Omx?0Ha$ku$ z9AC>v>v^mZ%j0(E$mHZdX3(IfyDgYSnJ7-5@2=+q` zsOvHLp1n#e4Vfoli6%0C@*)b;_f+X63*j;_Onk+jANsS=~6vx0`#UnIP@Q-m+Vn3?$!x;aQQw|{w+ngKst*3`kvTvsHzzJV6{==|mw~QtFqRGaULWV%O61%O%E5IYYW5 z$*kF0*OOi5Sc!RL3`_+l_K&xZH`>nc^~3aa&H8(6YUSV{Xo%s*`}LjS=jRZC4!*B{ z>ZtE&>L^U_;N-x_*TefA^cQbps%XsVlEPAJuKf8-d;i{v(kGuUm@Z38>96P)<-pBJ zepus5Al;-Yz;hLdpSuK>#RbxdEuCQ}YKd`z4Q{XQMfQqvT642lsdg%{y5S!va=s%H zI{`?H-3dCKUgPm74<`su5sNQ`dvA6Kh{TzH$-)$eBIc-T$?&|=qE~u&%}b|x-IWYV zNA>8c$fC7Z(}R@d6JOpomdslOUUpBmp4};X51pQGBRT|S$GzEI_lpCA!}VU@`~b9c zffY8JpbKiPJGO!(peKJjVCyHfy8IY)rX0d(MG#j`Work#tqmjO$Zu5@il6#8AQ-9c zdls|}-OMLdvz?tCDs6qZmlw2#h+vDZiLy=Ach*4sQMF9mA)AdSm+xAs+u;#w54K** zh1tUv>kqf@N~zxP+}5+5YiVvr(k~X>5?7vI?)Jww(^lHr?x43P8>qPj9}g$V;7fe} zT$vj@JcZ2@JB%;nq0pz>y6jcXISKY8#}C&J(?91D83-E8fV%he`#6nzXcZ@~+qI)z zLq$Z+eH4L$E^?H8r+wdix;&c?!93nLH~5`8ctMXs5YI2wK3ow7T*>Hq^A%#AKa9Tu zz5C79hqc!nq(|1@6$yHZW-jTy=Q0oPg-3Li47#96GjtGeTPJJ8jXvP0@?qj}({;ry{N*1iw4K-?j@xf#qXYU$Kff z9_ypJ&1Z_1&-B+1I_@Rmjt$t)63+R}r!nnR8QPwaj0k;xnNWbQ={VsKMl z%Qi!HeWe*7@}pRoG+V5Be1fF~h}MmL9S)FWj$T<7;TXuJ>;ylq{p1Zkb`wjpC9?=Z zCqPvWsNG+#J~|8&`5g<}b2yNJO8ak}t6oOV$K69(?O)j$==ILQC$emzTo^jHuwBy4 zvc)p7HZifb3-4W4GauoJBSud4PFyBGbISbF*S(}IKdD=sm?^ow_vhDBgRLV4^nSTs zzMF;$70*29bn1LmK{-LEZ82`XBm3mmPiVGZE z28co=Ij;P=9>Ay5K?qNct(fwvk9W^(N<4yfi-`uZT&R1+IzMCr;grAf++5E7C@tJ( zsmYyQB;Rh!z6q-HK$K!DorcR%mI`E+LNevUG99h#>!*r z0kvnYK;WU|>`|viB8jzF**bDcYCtA?Lz|o8S@IZy{JOq^c zCeRp=kH*7$o#m0Ku_1jKO04cQ{9c=V=*mBV>Ob?PGT48?eXhEB&G%lldz-VTYTvFt z3U<_F=B#9m=!_;q`-bu&`AEsO8MK3#IC ziq;GMzLnESYg(q7InC4Eh1Zuc6^>@+ZFi2Rl0LQXP2tWs7zv!uV)uFU7%Gu#-J_0T z;Seb13X14NB|V$p(J)}4S`~cdDOr}}V3ze?4_T{FKGE+`ey_UXD3$H%Zu)OrG19%+UBXHaopASW@oFMuz7EG$^dhVkTJtfp+5i2_JP45QHv&Hg! z87N0(>D$L@q-Gm7B({e&JefZa(RS{{f=_)ID91pd9J9vD!jg8R;LBtrLBvv8$Fu%z z_>l6IieuuA$YjQF5K6`ezLEEWDT`OSC-i*%q8LeGft!78;A1wUETPj<1A5C>rV}L? zr59Be3aBn81<{>ju_4uXi7gS?i1xKzk0@MX;ycJlIQ_lJo+uGvW;w92w2Fv{F=Ks6 z666;M2+R;t7~*N&M4!FQN@k=KVLfms#+sMX&aJj%tT2Pc>#6bU*4Bb}bW|clL}D36 zlDP-i(dmx2p}(s#uRwoDn**B_e?OM;DaZ;CA3vFWTl4yoy7#9DP|i0CQ0k@|H&0HK zwXfIBPot{g9xct^Jd3G#CBzGdzsHoe9P-?W~RqW@1NGE=oZQNFe!Q*{4nc>0Qr<~)j#z5Zrq&& zF4*5}M-Oj({5}Ts>kbc3o7{RpnAQ*xHad0dFHqzcyQgTxKOvQU?~hS$gIj2on9s9^ zF4YnM%wo?jw)9bDhX9$!4X*q0yT+rgq2l>&94uVeD!pb9i@%`|r;|l0XBYd0OP#ql za$Enj3wzy`@E+ zQh458jZHoA-p8b?nx2nSKddZMW|t?5?JAP#T;$64N$;+ zHwk(#-G!g}q?V@~yF75^TbrsSI!gELCtg4YDGZ+Nj0@>Cy6Z+C*ge7ldI zi=~{fhgjJQlAH9xZ%Et-w@^lFL$MzM$mGm-ICn#VYG%R2eI-GS3~5u*^|!?7H94Zj z&#f$A2Q9!gp%IZ>ghw&`Bunba969XZ09(z;Pbsvse4a0vg#)4;1u;#rz z6)MjVk0)8JoBmRVGV`+igv$iZNt6ymf5?S2&Pq@bT82M)5}OoM2zai~NO6_hc4rXP zf6a*e5QFw|)VL^InvTJYML4z~Lfka7M9z1|+*EUqxST*ATZI;g2%0)+ooH=21DaTz zbWuw>n`U;R+~{9*#l)ia`OR3#Zzvb;#)}ove-?PCz!ADNtE&;L zN?@WDYHbNZ$~~5=SM_<~!sH53KcpGgU9=XCNvx@-N#4Y#e8}z4YCey$07@i#VR3@2 zegZA*(cevSO0VNh$t6QkxNUK)hOsgcsN46Lz*@O+$(1@4e~wsg0}5pg`u;Y#`q4%8 z)MpB>oL2+Ri-qoMlj0qbJAp&a`dwu(#?=rhE#}T;U^QXPEpjOKCMo75Lb;(XP~mJ< z;hkzQ;DMH#VY1qWGXH?LPX>~DXZ{fyKYoQFCnyxzsY3IvNnVxD3ELXtBg>PizS1G| z_d!`*k`N+4v+_p9UKn@h9v?lFV#P#Ddi6dy_oBNd9$*ES&Wd-uzK+VT`e)=YL>T4l zAsLQ)g70zz4V&ac*=c;+~ z!?RG~5_h>R)UJK}u+^Ni_8C}j&%kO|2vplGxaV`%fj!kT4x4E!tat>xc@r?*~Qq^qwi}a@)PHyTACta10 zOOX||C843Yij&H)1*B`6jQjzAI8RZhY%nnkYze@1@PG<(~kNXcTw7tAu*1#Z5FhbU8!hd+Nwy|OQMqGhuxH9 z+S8L>VEBxwpSb$U%c8xYY08u15aX@f_u&)c{d8~?mB>-e0y3f`z@Y5lS_riQ# z3YgnRRSKn-!fz|kC>)O_opEQTMp-+HS)6tn_8Qb&;V^3)c%P|WewUIuG!2BP4cNe< z!q{+*cAU~UD?b$UOa9}pot{=5 z5_sYDDk<~t{&*(mkaqTgq523JI4SVudflz4zff3+sb^YNA!sKL%?*7$_FE#= zdF|DdI!T-7hyS~pLE4)Jhi#_E9PX*DW)ng&5=*D1#dc|HPAEyeCglv+yB@XpYuBIF zFDRanL#>;ls7oqzsFGH{xgJ+Gi3BYUNLC-cevH<=p=$^HED4sptB;*w)3R*{-)EGA z|9xugKn-0IX6~%x+pE@iDsxfxS_ zBF}v6JGeeMH<9!3mg#v%-Q(jRaJ2QRQ!ca4U0tkCc2z@`7=oFSIujwgFk&BL833H`^Nhy0r+$vAeu%|k>^eAjk{JbK0!DqhV(0|0=^ znTz2XSIpGJd0)E}#&s@~vbbb3*b|gPfYqb)bJ41|GyfYJL1Po?t0a4I zvC|Pe&o$*DMt)MND1-HlWxd`Zzyn1ENr%Y#joml;d4a$p%K$cE*YFLX=Ui8pSNHf5 z<=x=x+pEb}8}-sut;464qQLDV;Vxf}5wb8v`Yonfi+?tDRi@G7Yp=0%*Y(1u`tPSt zn@>HbChsKe>P~L+#cd_)W#}73#Gce3U@Q(~2I&LPJ*g~QQ$X&&eSbeMo?fmO)a3lq z=W=9Q1-rT*X-?Qor`z2jda z-s48$rizKB5TGz^968}IZ|pe@H?En;nN6GK3Kr96di^=Rqf6O_(4ze;S_)Z@UrbA- z;O=aLy1wdIbSpZ0c>blb=}~$|_|qG-xsAY2WmU9L69_xcIoR}U`S)(nD@YG z1TKyVA1?9$#UI<4TPp)*17ff_1-}wRX0pGXzd}!=`(We+DGVubesw`I*q3{EW;iGU zFUv_w=Ah9#Eqv;Zw8z4o|E!*c6=C6iY-t-5?78#y&J%vzGnC^1>z=AwysYqE zwkH_|N-~`&qfza*4C+ehg^;EG#-WEgN1?{OEz_XNphx!dGPD#*DgCi%50@oOKqx#h z!_ci5xkD{lI=~OXp%Y{A%J8D_n-kMP@Kf_YEU+|(8=m5iKzqqC)}!sR8u4}4$r)PG z_BNZH7C2qq(}s;rsg=QjOL&|!$X&faCf!Ym!(tyy#ynN5?CSQ93N20DZ#oFOwiiq} zl1COlIvn4t&_bSCiTu1{AYt@Rx*Y^6CDIEa0jG0Q45~2iOez7%D+NDQ>|R^y2hMlc zb^)lf=q|oo6~S>0bbHC_Bw=wLQ_v4GIaC{5s1iC2P%O`}qE0udb*ssmz2LON>Ijz^ zUTegxt0ej<8cOnTcK`Ej{_O2D{GHEMcF9$37(9u5>FiVs|1k%hQ)h-^pQT#6%FbY# zu$%;Fva21&Hc-s4xP3rRs{WgK9~*l66?{Xd;Bl=7!>!GIl^O3+;ik~wkNcr>1kFO@ z``XVw;e}3l9CL9Q;Cggu)y6X;t0QEPKQ(iuF3L7SGjN28W=@`Bo~EhCkT1O1AbL!Q zPQ+4a|DX|5BRxcC0j*5Ypsi*x;Ts;1*$tQjFTm*$n2e6|RvYb5d^t!yX^e0C$WOi7 z-L=PO<6bt^S3oq>|C(lqyJKFq?H}&r@MdOTggAmCC z5zwKihpl5ym}4p3Q1aD;Ftg_t5o}$@cpmATz#I>0s*9~R$|H-F$56WWk=INb+#z1N ziAl$Ce1pRUR)58^`0Ts(@+PKlVx~8!*r{R>*IrytNNj!Qka7AZKeKVJ4^bQQkMDm) z!d^3RHo5=A#*3JAF~tn-q{}$+ByX$i1@@(i+gCE1YAl-*e2DLG(onOD6zN^3z)Ce< zdN$!=vFU4Sd=E;5oCC^iQCi^&4ikWpl2?@qbCZ5oL-UnCnSrYeGyiB4b=5<;)6PLB zJL?SK)I$q@>`BU5R$021FUUFS?6iE$)SVoG3z#hRhrZ6aD_30k1;iR#P~ge0cIj;* zhtRFPypHCKEK~!f3|dCoO-AQVcQkYHP}Jc^@=5qnB_z3LoXhm~I|KhMd0XlhjpLK1 z{n26)A= zVd9*;&&i7Ale^E$YGMvk;r==AH728{NPFfyN-M?8J3aPtAxCTE{QR|M(b$HmJZd7V z5M9=>M(Ov`-Nn26c^m5I&?2#;_m0;=8pQ9(afd5AHqN$TMH@DUBJ)=(xP=|E7HPQc zL$$|!>}#x&XQB25(b5@3y<&}U@5qRKBsf!4JJuKC@62!Tb^l3dwQ2UF=O>vI25S}D zlKwrV)g4I2lKXFx)>1t#1CQz???~-sx^rk;5Hg5!97+Je7G9m5@5Eqbbd=~UjGIT^ z5Cd@^C!6E@Hcy*AF_gne0d=W>WkI?>)UhamJXa1Qm8m9#QB-<-gBxq(kxxHw&Rmhc z!JoF-21+np%x(w>r#d1iXk|(0T_NC>MWE0kCmI*Gl}wiGfMX2{J=}&xER{=xNEfAD z_JE;C``(GyhNdL}AR_|j(nxz9oxRb(7n#fH1pUcI`AxbG^Np}rd}TswW2bGeo$K+u zNz2IXjlM_QLun{#+x+S7_SF^=)H~hLxHu7cxZ-y7&g#$9Z`%4k?dW9+ zF@ajizSvHr=_iMysYh&KD%g);Nl7k#Zd(zkE3cy&}bIoYE1dz_gnQjO8J6} z7gy4oA^ANXIq!|n`)S~XHz{_L=eNsE1*$LB96IpQhPpU>R{_ShlcXAJ7+$J&9#$OI#_3;AIOHf+&l?OqxpG>t;e z)PM2?QXr@Gkj&HuVHG9!`iKf6`Fl~7eIvySf^jWMFO^qdeF*CHSLDe=wvDVuY{}#k zJYa~uXanK{(}T#*XH@Dg$DG0?DCPw@;F!F_m1#kdBIasHW_n64h1KF_&AIUpMWQk` zaKUBJK(;X54Qt!5#UbBTFqT;U`NLd!J}|`3<6aZ_^0KlmbA{oj3m*ftPQL4wkX%c& zExYOozOJ`Mh#4a{H&gp79mzwXkCB7ewfGkmhzmoKFn@~+BBGU!k_d?e zMeKM9E_AesB$$F6^bog#VDk@R#Te_jojgLegmkodbYsNd*KvkA9>{Z2;kzYrSad!X z&W-MR(^;7`9pq+tyJ723liZUG$80yiN9Ge7!wu%wp5#R4<|^XsA7yn4D>C7VOZLr8 z12Vd+TnTPcbfeaCoT*(Lt_&#rhUZa&Ppl{`qq1sV7~RQgUozFPLEU7pQgVAiRbKh- z-qX(#YB*IEu7KUWj}AR{ zXIO0Kj?$sL4aPXzr-&pX(&yFKR;$BG)74rHUCY4}`rMWVQ>sD9)tCS!PhIK{_b-I{ zoZo70egg12wN0V73$$MyF9AeSpq-imIlp#-A*VV)fTJwd>R=w3<+h^R3kKeIduE?9 z`i7&D>IWBw6*kwNW#?uF%vurIWw@;(b7EiQxmnv*60oHGwBE4My1w3ybVtsElw#1r z(|P@TD_HAGen#c4YO|!-uwV2OYN2g7L;cz=m=wv8=%i@9X0mZRu8!oS=(-xGai*{E z&=?k4PaEB0rB#b!n91HMT`jUi%k{+m-ha#7=O6Mz$$@t-)s9=9stPF+{#>9Qae*=| zJ9fuM^zR9{P2cJq+*G-;Q~jR`ri&!rgh7RYe@H`%_+PnX1ybH;s^q-~%2MzK^Kh^{ z?TsGfx%!*hUV;X!>q0jtAa;Ifu6S5e7RfA8_w}2H(#1Kal5HJkppb|QRg)}H+nFz0 z-P90|7TBj@=i5S=2W*pTW_=&oFU1C5l+ynA8cG5WM3;#&dMBe{U_7Ts1(}H7y93$W z%1wp*p$t7*G#+MVZ7+;AK%g+lQ%<$MMGLYn>(2buT3^4dwS`Te!V5k3%hqT zG9!KKs^7QZC}od+TdKcJ@Dy^W-#%KPdGKoeT06ABG?GPZ-ASI$9oFoY`+5Fh-_vw{ z=jgsgL+c1GgE|?^nQrcMKU_W0E!iO(|FMFz1tME+z(v?FAp`hIbOHj_?!p9&VC58u{Lrxe-cg6o z&1Kr=+q)4rnPbP!K2L{M>c!Jwr<6qp-ZLrzRAsV+RS?i=R(!XO4+dRNkRY#XWWqgB z-INuJerKMEaIv;gn@_<^;op-}2fnN30eU02Y*Cz4$w7TVl0`Y!Erf32SwW(Qr}_aI zUq7>FA7-{-*2rJDSZRJ=-?e!m|LlEp=iu*tXN(n-)rodXM?+ZgY06X_QB@mrn+bdQ zWb6vv23bY8v8<)hl`$mA6(Hb{)PoCK+uchPwt8clYXe`m#!gl+G-Iy@pV=D$7$xqE z*}QhF3Oo}ld0v?UZDhZM%@!pTdASzzTHLtqrrpDi8!a_m!W~y4Iy=R~9Gc*`@<7pY zuhRqsu56z!?l=M|m?kiaE`#eCg}6AKNpNGIRz$#7BJJ7U%%=ws@H(sZRMdp7DCPrt zqh<`LKsPV_Jd7EMa*r?loQ!Q;mfANbu~#&9;Y@rebK6Y#khxRZItuqXiY?y<=x_-$ zo~U`pS+FJWC$>=wDjFdAe*TbyI?mumu>pdp>%MGtxsp@;r7~V4O5WR^Pgp>;*iXZxk5*+X{7%7Er(G;Z}k`;D5McuyUzeh*HX6+vUnX=vd zUF=*J+{}E37JXv&y7X=Zg6g`{dd+mY75wzzb5QVi3GmCPo=0khZ`D}Z753E9Gz674 z`daVf<#40Hy$7E2qF*UW&-t>^0jis666_OtWctqJod3$=-XWtS3%R|zr)M(*T-gC~ z1F04>$<9~c^gI>YSQ|C}`S56+bSwr>+7@Yhz-Xk1WFqi0Zt<}!{r!_cGH@o zp2&S3t&JBAscB!&9}4D<<}}ZZLe>mDRyZzH|1N(>9WFGxgiOypDv@I&B+osolk;1A zFF0$L^IIlpkQyNj6Fex^3$(|yCHqdm6Xgvo;nh;>WM-VgaB>{K-tIUNjcK_E&b6$i zp6eZ4S;Tkh$mF06?dqu+jnVAPaNw~K3dHF9qM6I~KFT-{lj(A-6q=ev<;`!lva?Lt zaTNmQZ>bs1Z-qYRH~bv9N^2e!DAjB&cEO>w%&@#-*M1JJsp&Ia5OqOspGNzXMB(Fk zuTID%o9k6mxbpfu4pL54xSUW@Z4PBs;(h671}~S(*4U(2`K~WReeup4BKpBeb>MxG zZZn%ZtA%7F;h2!Y^o1=vu5izCJ4(w8K-Az;Vb9L@x*d}j41|@QKX)2AaS$KS5)O5V z)ROqD6Np}zw?p|i+rGv{YBl2-EFQ630lDX$kZm zC#obsG7%k6P5t}1N;SUN?&*3FzUpMevMEcXvqnT&2t{4PQ;^5W%_3WA&**Zc2(m^l z_hxU`Vt7`3gtr;JGTe5fgJGlsVXcaGcA1wo=!MFo8g}AVr?iN8yNp)VG0YVpP@%np zSH&wrZ^_PsCcpKeIN4m_XXJfW3r6kvvRb;*Hw&=4fv>KcH9E)DWX94ipyCPCGf&Jq z^ibB%5L8F)C(X+{7SJ# zxf1P~*!EUuMsX=%dO4H)MIDx#n~sw;2AMSHa*&pzz?Qf~t=VcwvMmCxniW>~U}7Fy z082o$zgdC~4p3Y&bWCDwSo*=0%fWp{agp!P<~YrpS2%fZI<^;<^jK=}Pu?zK#>dQEQ~^w7gDtZcI@o8h0UE$>gDXjWX` zymRo3Q1}SCCA`&z#osVz=iC876hC|4(SaS(y5d7ajyl_&7P$UV#iz}pBJz50T-j-b zM3rK>nf^|NhvlNQxKmVO85wTLFzOk7dGZ|n;$$eNaZpc@9fHetJ7Q>HcFSl@)%{k> zX`dKWR6-lF^3U$VnPCuqYun;n%v!t-xbgMPN%h2=OszXi16QQ74ZcYN#1ycDccnZ( zwFph%gQZ&gS69bjX*W_$1zCLtchysA2B&A#O?#r@brlgNEr7D?eNZ~TbzD5FeBg{c zYRIL5CJ=j-uw1`r&5NpRqeulj3tNWV+A5G|;ZVTg?=#*=<|gYP+zw4HP1qo-yH{AV zd{?+tNL#dQ)~OH-9bs7N(BhuMB7=|7VrbQj>AZqTa$%NIkEWzs{Oa?#quFfJ=|Cep z)f4D9?sM#ls}lr-YblYcy?E9!{jDtRK>GR89O9kY&}G4RWh39)z#OziXJ0dJw=d>GMoM-#A zS_(N{%ZK6FS))IpZR>V`Z(Rk{SzCZ78Q--r8JV+kRcF->WRG;~>dI)QfOcAffDg6; z!pKsLianZ+7=quHXlDEY*89OIRQyotpX8(wCpWALi8UK1Y>v-E!)RIghkg`N`oQU@ zdsd^SQvE1LHS4^+oM~^wbb*JfZuTMpz35vHmjM1jRF}nAjPl}wGkAa`@KdyvLxgI< zu12fR-RTn_1?|KO*xF^rDhUBXLZej@gl-s48(O!{hB_586&<(q=Su00(raYXXveAD z;*YOh7x85pYb+2LFJ(!`6XTDs_`-2B`gfEJMU^w)b41KCHFS4wiqpAWyTYapnVd{H z4*pU%h8O^ivtl6sSI&x)6_zTD{e|g3gTOx+GN<5rB zm6qwI#SvQ})YD$+Cw4ZUX{82@U}{NEIk)u~4l*pJql?LNcV)B%IXIeC6;9yUqk0^Z zV8|tM5S^TGH3k;rhmS{4FHa4@4duz@9LCDQlT+^~#(3mNVR^I^3oyTR-^Je5w}lp7 z*eG*Nh`7L!h!Ij=aJ<9O+jY^tzQ?8psaG03bF)8hkBT9V=@<+MLv6vaA)1$x5|_o$ zeLSnryMrN?LLZ!L*iJ$PU1fDASE&+2_=SWoyFPzwJlY}@{WfBA${-U^;#zSkSj#n` zi^5~IqVEEv?QOmaK{eV*aM_}Nh!KY~BdlvUDAb?acafMe=>Hsu2pEUT0En0oO2`yul?vuf2deag z*+7LyrU&Pd*e>zA1QrIf9`D$KIdU-!i!S{lMF%)BGT7-kQ^d*;!e~C1Lo78icw~0k zG7?~Ckm+`)gw}$sw_iR14=O3CS!%$@!0tnn7bd_aF{XDY?JPH~?Dkgoqr-zbyw~g5 ztM&lMY_Rjaz2|=~2CS{>_a^Vx-EHhvshzD3uj6)+5KH{M+FQuK?8T0;0JO<`V@mdS zI5iq~r9zhYp*wQne9Y-vXVIMk2IquIip0>K%%w238&d763`JG1(Vg@GhIlTQ8+zIe z`lUIhdA<&@hNzHr0yif{?AeY;iPA~8`wozDcsoFUjg9bkX2($8&kf#cl7x49+Z~P*G1jO2i1a!(dVAUEufZ2?F5Ng)svYGgu&V-z?_m+dMvIWb(S~-Vw zPoK+H^)SjTv3|swH+%5^?xcmubglnVw;2DuYT4;#@BYo_WXn4BV1D-B-fK5t*z5bU zNB5vSi`1xgPMUNiE)|}}2kRIJn6U;gU_<&mT3!=HXk9J8@9WomFI2q+Au`wX z|6xU*u3QpW_`ZEZKabqEMHOEABy_z%<0~u~^hTLWNd#GS9Q5sl)xC7BR-FzZ^i^SB zy%P+_70vJYM|;S)t8aTjy@G%EZdY@4?Y#1Kmf>%-@U2zxu|WUbVAx(Ri>18tv1Z(j zCH9C;>$IP6!{=0AgHzYA^M9ZCJMk(ptr-MN{WXM#$=(owBXvHNjuSjW6XCp;uWloKSVhXcZB-Hsc{#EqlctT(V^X<$ll^}$7boHPZ8 zw^9Pz*O8^vcQ)%GChlrw7&D^g9ur}5Qz_LrnTWL7c{1kjjXcgl79CJ##4H}F?mUc? zcFR}FxktxvN#^KzAGHYKx$JqIUGE+&uSlusI%>SFqoU$>h1~wa<}$*?-un8!ztLIe zQnAH(7i*7OKXto2Sr;5Ng#yFsd+Mf8q#(p0&z)e#%_%bu`b-etguWMW4=RnTJ-Um; z$(`ChupS`i$l&w{KhP!i zLq$G+W_25i92f|lsPb+d;veU{D4f5PEhy#x8pCT+DHi8y{e zy<0dsH%IhgZpPDPKZM=<44LCB<`T%WITE4p^)B$6^rP)E4WacwUw=MlEh3=0R<8d7 zB5J&dokk9~Bx!wNO4ki0?oggRlfb1;$tk%Pj_N&>3h7+}2lrVlel9(qyJnY!k0%rB z%6KQHDq#e0)9#)|-N$0HSo?XhCzcyXAPh^^5L@M1cu|iQply<$g$;!nx;o|3p2L6| znbVDwT|~*|MLZW2ixfL)Z{l!I-@ZYYfw{$UelWMQ!w}3SoZK{fX%rKJ{vaUfbNyAq4v~TUm$z(V1mxQr?h?j*YJq! zq~+N$MyC)~+-0RdF0yVH2F!s^uSGtf*v)~NjlYQcp4$C$6Uknjq^h!WAKQE5V!89e z&vC91sfK!pYL!y1_%@$LcTrtxCC_vq;fPz}g3jC6iZqL~y6x%;%Le|{ z$?4Hsucou$+Rb0=4gos@3+7_d$J z>M@U-oxd@QY9%C;>Z!bRE~FbhbIV_B-Bx;4ZDH&Z@GDUmN8TmSld8Uzx_$>d-{E_^ zMuV$8Qar|DqSw{+U8Q+=JH0MnO?`W_eE2&YpV4TCPg-_8BH;69T$nrZ;d1bU>*FiH zT$tO&OYA5^*_#(o7r>{*{A3nKb_7MTFM zD$jOh2#r$uNw_dG}c`f9Sra4&S43xK}JoNmNGXf^FXe=!;e?*LEGnFyG)6 z+8p^G{QDn-?F;^ZI@>RNg(*OOX8+vQ9RP$rD`24ar}`rc-Ys@FDDxZc&fMp&xvtC2 z#j@VY-1Roz+}!yjuDmXgGp|hT;&Q-OpI$n9!%$@9DVk5>?tKyOp?!My*P;k&$x9US z=74<*=FYx7@rGebj4z*v_R&AP_t!)a%#s_G^YXyH1@rPAuapY6$xTXl`-aRuJNK zQ@u(TGZS|prz&Y=9bIF*6LrvRTCEESe6>ZlTODm5*GHA6fh`+L*osMw6 zF1S6X^Y{k*O#F4W7rof2*Z<`KE}B-%r0*`A7CFqUbu=0)RrJjDX%_8`u}DPgXzYWE zVqTKnpwO_|6lD+~wNAK$jPXTTRaP2)5<)J?tU%o7IPHU=Hy0YF{NnWn@Ncry{isO3 z_7m@Zq&z3>)8GQ=-ay6bEY}Njxs`G8%dpM1HfxaV-~Xp`#D{z+?Jjg}W&H$3X%45oXKM z8JBV-+*`1eea_iDF7t^e7=}8uK};5?a}Q`##V1p`gYC!LGAoSi$(IQx)w!Tc&!7@` z5U>_TkUQxmmZ;IQlM6b$nEf2?1o?=kfczHK)tt`^nwo`@a8CbS9U} z>-lo?rpNQndI1UqVaPXDWfs@_`P&sX_sM}wK#?;o7xvUJhB$lW3ul-t4YWe5W~A99 zWB;i{CSmFIaK6B&V$+2FgiaUue(|=)^Eb-u@3AhN^oK7m1q^}$00001K$=#lEXKq} zJd_UrP~8U%fDeEJ;NxF1e9I4O0DgGlJXRitu_}YxR^#}-l?b!mHV`BNf25XqXl=MfMR0jitAQ2c z{QeHU`o5pz`oc-^3(8bg+Wt{J>V2@@axSQtU1|N%P{_p$(1kdU9ChmN6zSewjaAb{ zS!t^E7C*9|sh_p#ONlj<+)=?$kX!c4N6!(`zHwk~=Ev^bRQE2GeNb167Me^8j;!R=g z$fs8Obdh?jpq(9zs=&M-A=(v5dhK1Oae4t``r)iw-* zp=nnt4Rg{;iV2og-tzgz2B6#MIP3A!kW_Xao<&0w=4Ef4QOhCe`fNOR2Os8IwPSNJ zoIf%}|0b`@@3!E1E`Ti?D=hooKK1VF)hg@^=HHaxes$t##ZOD~%hDhl@lJFQRbF0~ zBB%m6yBm@+0NO5;+I}W1(2reSGEV-Q;B44d>IVF!b#vMb z@zBwnf$`gtlF0%-^rgLt6wAAS)1^R_hD^y!4!C>Hr~ z#2WF4vP!R#QviAjx8qc;hfcI!mRVs$`UB;K+2Y^C)8DI?*kgf|T1>a9$=^ zmZY=Vw`qY3pOd48T5YRw$LoixIh06JN867N*;C16qO8eg!t5}5R95c00zRXU8ddT_ zIZPT(Q+18Hgm0xRg!%9a{cLp@d7Zq&;$cz+#FlShadm#RY{2^5vMCE*9m`a5nr<)_ z_y@X>Trt?$N+B>Q(KtO~5;(E@JW)DVONAbc_#wvAEI&get$-#R!wd&#Pesyc_TjPu=QlZ3YU`!?QZ#wVn946E z@|Qv+(#4*tDJGd->1dSiI^qeW!u`YOdPm938y51Z@8eyszSo8?azS== zuoP6;7-O!%J@D_~@B8#%XefA(T7!?NUeO_oP5v!*eMknYTo0^1To8EXYS2cvrk3_` z_|u*n&j3lUKRLiYPrnrE%F}SpC3oA?KnR^{IjY4X&U7W!Q}TRFW=~hxQ zi%saMCXsDRWd4PfMaOn4P^6n+o!EL-HP*Wn@CAC+`J0(cnGwlipfFu2!*KevbcwmA z$|!DmAWe&sN&|DDi9`a0vh9x4j_NdX@8y2&ux7$B9Wm#HO|_U_fo^9A6K%u7JSr}& zWO?>fvFjwQK>vny=Vr*rGdj_{4|*s(EWl~qvEI?I`m@h(+#|Ekw=o#h@MjDh?(@IK z)o=}VT610rK999e!l#XE_%{~R00}Ry!OeMxXRCMF;<6_AWNuH0+GN-F?qio1Ht={K z55D(E(vY)ePbji0j9gM^O@`<6A!lxJedD!9u)+@f*GtTU9S?5o-rnBri+lt8ivaS6 zrX2@=Rr9Z9Ig_%62Jrr1$)-!c?kzXr-dA5SN22f5O`2q+414B6TF*%Krc1BgrTlWExM!mx(4_!ii)_gWM;gpYz0HQ@=h=Ir~w>x6GcdD zkO+1(%vI3ldHb`s@vL6GO8XRbCH$--H#92BQyfD3yxr5R(oDC%ks#metQfvfz+@%%A;_`(R&2LkEbik}|WM(z+OhkzZ6gt|Luqh8~3PyAjN7{30E z!~h&N^;AS+&{_8_0~Y#5Fg%2-HYlHDyr(G5jl^z#xFRA0jv!}&hHgNLIDiZG-AX4- zzfr>2J`Q9oIr!2MP(-58Il#F-%y8HlG@mxHy*HkmBq7y>q>M)gM?)tu`azo;-aMT) zhL=rV=&>BLVI8nk3b;G35`f&AUV_&P5R$B*Q#^DOV!0$yZ673wU59*7b=_fi6pR&j z!8^DIgo9*HpdY0*y%@(whu^Rx{r&h#5UDge_(D(;T2z+VFDylU(Rkk}k#c!WAZljp|jc7LIfiatCutk)~>dX*jqBMuLpuBWtbG9!i z;vE5UrG%s{l0+6=ep+&u5vd$nY*d?k9nYnKAZV&?Ri8}YoqLo6*j~I{u3yWj%?(5o#Pcb+`9#3J?NvfO+*t$Y-zlQu4B5gd zFR>UPtES-B79+K^D*vqp-kXpVZH;`I;RKeJv{U91A<{GkL79K2xaUwHgp0;KNtwa8 z$W*!kbtjB5f6Va3HroeP!K{n@E4G$(xt_XIZPR^tF^K9R&-bpt=N)c&ulMK^5K!q< znZdqCB0GLeH7U!7Z`iWD)wP~I-}Br4dIs2RFZkNYh~Fs#hukYT_1{@5YgNWiLNK=4 z!GM4u2IqxDqIz=HKSZ3-xa zhsTy~{{^%mNdtYJ2@VwL^QMAm&Y^4mgkVUkOdRs`_<>@!OMP@u6q5D)9UT%;Rld3_WoarHD2mYe)e^2ho5P+%t~ zMHupLf}_Pz@y4h^1QA^YE-Z900^#WJ;R{F0P+F^Tgz6|k1R*ha?X%y1g<;iCJyjMq zF+fm2reb#cSIn4E=0X00Q0 z_U8MA_rfE3*J<5IZgk}Iu5yQ&t3d411LO69QH3a^Z$O|FAS|6KC_71Ik0kfuBenpA z?ZRUh8x3QIfM(Y-vg1$k{9Y)V?3FyRaZ>FM))ONIkty5}aOBMrNaUJ;Xv7m<2TqGT zYbUI_Zbd6lv1%|r16qqP`SK&~@S#9>x7vTA+5{yT(Sa!X5z(Q*A><^p#ZmJ9g>`x` zJ|b9+W;_)r3hISY(GGIxBL5oS^38o<6S|*;-vC5_PC~F8-t7otZgvQGMu~__yoOEX z@`1PhHLUMKTATM95|hSJlbw6;>gsrnA7{N9Zgs9dYvK zUpq{W;l_mmqHN2L4T*D5;q_9}_m~pY-|)C}QA+!FdDJ`RWLNkbqlYJUoR4MmI6TP{ z3sf?8$K+dpoNC_6;3A#OSzsI3;CH&_FT2?;r-xWo(nBsZa)cW5TPoYW| z@-Zd@*_^OL_ugLE%-$<9B=vmk zS>bGE73f^#JlI_SmIZLn7Xx^rUftxN%EV$HVb>l<9V&rR2e-yf)xw>6PGpWfC$zgE ztWF-12}~l$q*MVGGvW_Tb;rJvZdmHt9zM9tBSM{c{SKRc74F0>RMxk;XM$PGqW-d;7HTd}!%@SIc-W3E0ot=4j5lKQxX|d!)8aZ%wm2?$^Tl zxZbh*_w0c;j->vL2USxu*Tr8f2>IjlSno8w`YSb?*qjjliISWpx0!lMmG+r_N}bxy zY|~^6WMWch9Ask3W>_6bZCNczO<4^|by+n@Raq5DWmzRTMXkN%1xqK{_3c>+repHa zh*QYRnXg{F8Dobu{uIId>^TZAd>GuX$YilTSu1$nVR`+H9e;!kGximvcF$@5TS~JO z8Shte8pHb%WVEVn!yW_Fk%v7HI0eE7VsRS|ozlc|3W2gkyRqU}9nTWv7Ff<8H49K= z%J!30n(ou`@7j6}elDV~ErQw%o9~iaYXCGMsWoSzK*?K?{It?suI7VuJK?sdmwyIY zMztEVw#XeVJ6KfWC@R}0)}J^QNnq32&Cz45$7NNQ_*i@`F`3bMf(9<`I>rMrvQ1)c zAcq%BCi-qmkh?JBs(*2pu=r-@vHxpL@j+g$o1`DUs}PSpj|^i+ja>^|S!6Jy%%y#; zJW*N&!4UH)!C-im60REwVD#3id4zhca~p3l4onSlf3CVLcVJ^1 zX1MF@=#P6V$lFd=W%pw8EWO)MX;-WZ(* zJF+%`lC%*z15@ysJ0g#_k+vqJ$7@&fwg!4In_*z-cUxfK+--e4d35Jzrt8;m!$n61 zNJZF29!uPm{<8&t)VefeLa8KlAg5A9M*}$c?rVGK0a>p)Y`^N^%me_)(Y2PwV)3Ov$wH=v9{eOp_^4_VM-{6xdFpQR2Cd zt2*~q=G<i_$TJmCuPE7+8uC`qR#QdvV{uu#|va^ zwcKZQ?LEp6t+5HEPc)O)`rvg-KZk@#Ynh@E32Yz_%HfS`_K|3V95jZ|Po8R91|5`L z1LvRF=W=W!Qzo&GQV|B(8P$@l@It+t%%(2mBOgWGB!&e6D+U+gdC)@eq9WhN2xSO-jo|v#t#bl~n&2h@RcBaurEpyn-KSTVSnD?faK)FH> zshhx}OA$m7{!CoIkrPs0uR@=u(`u`-jC+Mk_2xf$?5CLm6q9N?`qhW3e`Ob2|3nx} zq2gR8k^3kxK@Q;&10#;o<6)ww7fJ3A5;%XB6e{CjS4{G5xe7yXo=pX;A}n>bBcn_X ztH_B;nHYxA@n#xt8uny~uUk>0!cS5TVKY!FyC(Gq#Um<8HAADOw>nyCDEQ*LO1_}R zio{geZ(&ij=N!hdYPnQ3ps$-T9*_U5o3~nhJ1p6?YB)KyYoFVPWezJ_>4M%B^~=;8 zXFI2Y`d81?v(0^eV5Nb+pf9_FVDd1m4baiIcBm=LWGFj!6Sb9o6E|rp^d&;1Ec=S# zq%PS@Cyi}2i?dlOjy@V+lmAKq0(0TByv($R9w_%XQBQ7thKcKY{~ln{dy_x z%__=MByalSh5YmS$L`PK+4MTtRay5-NSXgpndlWc(70MSmA!cWk>{S104 znkSFL?D~DWZGo2hpAIPqV=apgUg0pV6wDz4gqbi#F<|%+#C!hiROTw10vQ_@`}(;8Fe&dQ~G%d6(&=3_Yz z*@QHj6Yaz?$;8(==gFRJHxMQuNPI?h=Tc%^S#hsQ1U~^00zU{4pnfSJ&<_DXDHef? z1(*P+1?wYJqII#zC;uJEq%J{&<~AlkA_79I8i2DP|Hdstz7)ECpxLo9Rc?Zk zF-S~yA)EQJGE;0qlJI|~n8o~4(Ksl_DP$lRU&^P@B;>Ko(4n5Y02=Ect-MYXHrd9bk?BnfU*Q z;UL*-Pp|^eAx4MI{1&9LpPQ^u<)$hdhtT8@v74W)FvX!Fi}=q-Sj|sLq-s-xV6Dw`ZqolOI!#Q}}f>IiVC!9fn8#o_-y?yLXHwC2A||HEDN zzf4tUC;u6r0Q9#xRtC2?wvw2iPz%pb0tQ>1?0fwe`TxWJ|JE7~Ak{d@UaGPv%^Dma zi>4MSae_3a7P^HCZ00ZnzS0JrUZzSetG$9Bufg{vr z1l|1?0shDTt<6Rd>7C?n|2t^j^b|onD?=#X#nq@5H3_b973;&XfYwRQ$x);disS4Av-?(y)Nt zuOPfNN9#sut~pj&Nh30Ij;7gW3d!AV2+@|2L*Ez_rCM3#^O+y_*$+1grr7#2;l-B5 zRGKpjq=4@3Ja$|{&cdWMofOBu(5`jy5QX8(t@UEaiaXX4*i-ZP?XMWo`~?6@N!wjk z^Xp8SQ|}|5kd|sSzLQh$pfE0FY#R>Gu^6K{FdYD3EyX2PFU4&O&JqJ&&va!ssCwqs zT`yfN`mjVLglah}kY@O|5MZHBuyZYN1Bv2hYVglbyNZSNjD?-0L8Ll2T~StHn`j=q zl%_6xB?UmRmS!IE|L8OT!DZEVd6+urV{vJ96P$XqoC0G;Nul|WmeQMUSze0Ot&lR- z$6iNSvu8I|17pN8nq#i>pr|}wvy|YWqXTeU`-i2wYD0T>06wyImxQ}iz?68G&1b-& zW^!Pnn1x_41$9^~jN9qe>h#;vT)1>2^=zzlB2{E*iZU2m#AmLhRJCDC5dgw9v~z&} zqs0LTEvdX$W7Ys27ip>~;nbsA0eE9u;w#4 zpQo4W%1Pe49k|GlV6`iO!}Soez04T)yV{Me8PR*UH4>X%_A*p239KCE8?tj>)P(H2 z>h(4ek`pefL$n(ew$Er8ctT>5hJsZ^2JUztjTgIws&iohV|`CGw6JeQZM{rbb+66w zTn$0C?{2)vv%_Sru;>Ml+f~?YY$ChQecHysvX5=8kaXZrr;n$~J@`AvE5s6u+ie}j zENR`95pBO@gS@@VHWxq70PLE^Ck^ijS;NNU0E>T}W&JDS*E%M0Fr+T-dOe-jzRtg+ z$rV#Kpo4j#=SAHA)PF$I+NYNTWVfJ67r*PQh@5@IS1AYZLm*19PWWKgM-S~ge+bo_ zU{Kc=!E)x{w3N_UR`yN(mHxRwACHi5q^5Q&zLQlp)PZE(hxkHSK3DY?-^7h=9cbpB z6%b&Q2%B)^l`dO4aDUiu{wXJgAiT3_P>W+6 zxS_vlG1s}p((U6VmHl^tMD+uu{Jcruxmp!#F4UKY*ymUOfa&1Fe1Gw#xqfx&{5~nm zp$wlfBBc;)9EfEtGCfUUFGmbI%mmQ%3)mnDoQ0lu>@slnDCK}rk%fX!22W>>G~Q(O zfGoi0EV&k7z&?!d=Kr-pv%ed3O!irmT%WOk5eQT?wzlT{#mbl}Z z;9t*kP!%vAh6=y}X+4{&OIk}3uLJedw>*effBe#WPVnTZlk|=MK>jY^ z9K#3`J>T%iE3nA;&aw&Plrj81hhMRhM?K?I#vUq}Rz(IiQHdd(P1ookP@%^w9KnVRBPN@ehviEXFg9{ZFri(w{zz!OB^ zA%$G91TrRrZH*A{~We zN7Mr?0?pfJq?|3&3-{ZZdR|j2gBKXsr^7kJ-`Oa-xC`XAYSksi+(I3@pNX!Ymx=Wj zg$IdmABHsv(co`jxsI#QR)0{yeUib#gJPYT?TKRKm^343bp!x7Vd?nhj|*kXkckBh zg1fLE>l#)X78~rd#N>%DnwF*`6mqFKpQFut9Q9flZ$U7Sk1lDziu3IuDahg|7bKpA zdmlqm#BFPD(Y^aEE=ppWg*x;pnMQRE8bcZ6qdv|a_HK~I_+0i`;%#QhiDi1P@7ha` zya-L^lHSV=Mzt4fKt-O<7^@%^p0;QO9)JhsIF$NIvs$ZC5K(2hp*J-iG&cffa=O4? zxtG=?YK``75EXcLNaF@>hitL-2W9v*^2^Rjoe?Kqq!fQfy$k7xD#ueMMfUHJu^CEi z8Utk+VE4#S-X=@a+WS#skz{G1H#J5urYgfv%X==BYV{darA1x&0slDu+bQHRmw05k z9{O&VmgMEXJbsas0X}dc>8ohE7je;8BbSlErUlMBSd1?JT(2mD7R~@NPGTV;~mt?3QL;j8LoW##lB3PmIA>=Owlo(9i^`TxAs| zRtBAb9X%{8Lm`1W7+JTpDE$?XiY>t}qTm*ou(gWN&?4yC*H5mNn0R@?P(*e+qI0P3 zj$B==gJ6jd{*dT7y9CN%%k~P5oOd^8d|s=bxC$7qc25>a*Act*brd#?QKJK)9+*XO z?Y0h%WL*KNdS}c6)7R%Rj75c8*(NHHzkf;N!9}W-2H%bYf5*I@$U2obH9z-a_!K;WpyhyUHB76#D#yc8x`DpaF-`6WcE8Q;J9|9u3H~rK2uvF zxzZ{Jc*)g+-aYU5JMfaJr}ES4X8iedapzJ`S4H5z=K+0Ut00>rZjxkmv=ZlPkLpn{ zJq>YJgtQFMbl!I&PmraBa%Zu2Y2#CyD%dlvA@5ZtU0RndeZUXRRPdLHze65*K6b2& zeqHH&>oPA7hPOJ;xeKcqrzpeF*l9?hf`(n!uI+{rqr2lxV+6*TjFoYoki3{D;Y74( zk7GKNHYe}`cW!QC+8VTejh;`8Q&IbSX{L15rUXxN?NB2`c zkx(p~{oDKFt)Q0;*vj|Xl2_ws?v39a?gOap;B?Oa&LZgXJbQPlPqoT+Hdv`lwE{t< z(z)wU#rU#no-(TNF1&li&p>!oTJYLSuU4!(ON$RBK=0e+D07BEnVr*>2a_2ZjY(0< zKq~l7BCawBT4$3Ymu_nOZ;~YAa#stj*05X^9j4eb9Frm`j>u5!;s-W86bl+{0xUC> zH)khYarb7IfmYtV2#k5o8u)vO-IA#DI)IDF8=X4|)a%P9hCCgfM_hZPwzNYDRXrI{JyRiCA9g4!Z!X%V-ic5x;jYCv*&X=@E{Mbdbm1t_Mq1L zxLzzQX*%C%4$acq{#PAaR|b>s>qAsVb*?#DK8&6J&9S^4t@zx0};=4jS>PqXZ+JQ_=&IwI%qq};P zO9FC&{3%It;Z!;iTU=qN`k~kj15T3Q$}g;NXBTYkFjV=o-4!G&6%^kep(qT6#wvUj z6!mX*6W+;NDSYZhcKNMAGT+6{BX-wQgmTneA-I!^qPOQR9TJ+RnMFTsxJ%d@J7e`p z__*7!SA-$ci5v@6+di9BY{Jyr%lShBA%SGsT%ZQWM}l2=!p@#Q={QS z)-?@K#2N(z!QLLRIB5P&|4;CbG{TFIlOIKxELK{vWzi&v?^K+1u#Yro!QYcb`h4Od zx5HD{poiJykPpCsr5i(U0DGq{-Kr%ySZaj1J%cO`5A@dlZN8VUI$i_+Kec*}fazUI-o-h!%(xXd*Bbm`<@xMr6fJ{JDG?&rK9^F9RU z<31n4K`qWB#y>p0Y?lIl7PLPL_}XK42O&D&N3+6i3LF|n2IILgQ3_RN6jES0WZ8ms zC#8gXaKi99ZEHcJC=#qfAPJ0Vx&C170Jxvhaws%9#`Pn^caamg**Ws;gI;B`OfqAg z^J>FvuZ#UkAa@Ob1rXyJN1^Kqi@LFze~QAHAp=yHNL8veJv7e)-m z;^nx0=kQ&B*u;+yclIv=-vo+P@OR9kL)9~dJx-s!z-sz1ui0m*Zz=%6#X9ISAY-0XF z0MT<|;QXmswQ2ss7g79SHaqulIB7 zyTuIs0vGa_fXMCZxPH#H9*Ua7S{Pe~9l+>^+^Sm#z8|7v_JnrsW zk}wM|z1fp(*cO4d!>V6yH7!9;LunHq^#5Y7o0>@B48dP;v$aF3lF#}7#!ArtjoRxew0)QehZGl?Hjm(pMCVSs z8lO*ZbsJJZEz`*e!;5fjt4RT=WXcx$Tnn)L1mOWa_$VxfC6Upg;93{($N`?{1>3*x zpaWfZC70@)~LW4APDfXF&?-mNxy2zj-MIi?hn{ zb!FiY_ITN-)%|LotX>sS9cU#;w?-?fpd%(dAp^pbiiC{eAb;Bu?e2gZ9OvLO$JuiU z^vxp_I%V>DE$Fd3WOTD`6XL?kh67sTme#j#caB%TB_petrRKCzj_UJ)R$>iKQIMIbD8u#Q>ob$~xByapu7v{EbZn_3V{Kd?bpsbBZl= zi%6I%W|y8H)9U^x%Q6xlk$heRkFeWIJY?PTCy!a(h3D>by$A<*gpY1db|a0zf3{>+ zrgC(6=GY_X(QaL9GlQM-R7jE~R;m`AmI0_^W;|<;X%OBNbbV$^tB{3_+*seGM`H!~ zDdEkj_{;>i7Q{1sZe}ynv(D72MPsqm+d!F8c4vvIBlv(5?(x}VrSClNzzX+$5|9{R zIC?Mpn_zo10Ku}uj+PHb)0r(wQ+I%*4%MI}wU9+41glai<5gWPU%GRZuEEnCS5OJ+}LxVGzo3sp;wo-Ce{?R;72WtSa^Bmrkn8(A* zKm!v66~O0DlltRBZ?xMYfhHofHga15)k%!Bk}zP z-$A^NVzu@>GhBoH_0Mz_o833tep-l3wkBvvarF$NH~SMx&gao1XjvizT;#Bee@f$S zh+cx9)tIxG@kR}K9!!dMZ2cgYaOheiRJ5w%&PpAmSk988qNQyMd$v`@`DEL5f3kf9N3@rX!8Yw=EY$04Wik=W-xYZejEr`@+M60gmwqOz2xjqH!N-6UHiX??yCp*x@^$_oP1}`+ROti075{$zx$}%ozOKd4PBSfoXp|E z96rt2m3y-#74Rs$q&rvBZQ1l<{f=W80`oou0W^$=b%~Lp>rdYn-K}ihZ&Y0w1_OsC zu?a(e#0xh|xNYEtuU5V&CXpd(*Xrx1NZNB8at@H0=4k5C7N`Efm+q5v_P6dZP3%E9q3Kfv@t@2m>@S#Ai45+zrJE3pa9LISL=y}!sS{UH z3+|eKwYGx!2M}^>J=N8Awuih1$mngS4L#CR**-MQsE{i>P@?ZlAhVNYLPqs*q* z7{pM-w*Hn}YD7;&uVa1;BdQ!*Q{`5gF@HGTaa6w64qISj%i1M|x(N(;GgR$Fov*j! zh8?eC1o%_6JGI9ZcXr$0??t&cbNv5R_77091l!s!+_r75wr#JrZQHhO+uf^e+qP}H zd$p~<_de&p=iBFg_n@jGD(9S$?-Mg3GDqeZHL|uA1maYe#RrCSYG(TdA`_Qm_|6Lj zBCu4q9OtzFhQ%dG@5sWCJe6pKR$MvMG_?6>f>?ITUyrsjVcIPiMpaa4e%sejR*Uq+ zur;MEwLD(6)(M=W4wj~aRKvAcWK5uA53;w#|2;xT!-qRMC`M>Ebd-G1rnQ5Squsr9 zcHsNEFiMd25tiep#d(^XN#Er+Ccfdqyp%^AI`@+fu)2BG;wW+eD!?CLQ zFat4SUZ8~b^e+awV2%jlnqPJ!Wv|7d=h`juFEl|-i4>|d;6zuECI@jGTdjG>Nqx~V zv-Z*j1}(-&VSv1$644(PGU9+0eY_VPc32ifu8lWAGyn zUf-5DPzh@S8G&xKso8Jz5Pmn;C#{J2eYMs^W;-9X{n@Q>uz-e|?VAYCUpc{HuU6MU zu~6yhhB)07Z<=jTg2P#%rh&p+Q=X|;-#bH36}(=RqgNSh{k2%^({Q%b={|5m$zlt& zJ80_OaWv1yz2lVBn+TsZ-?mV&?xkWC+@$S@yYO_Z!hVkuQ3gWy2LLW18epbiv?K!+ zklyZ5*A-67Jdv3~P)hX1&Oa-W=g9o?4E}+H*v=T3iBK5cc`RsV;6smpteVX#ej~92 zmc#8TPwF9eXuY9*c`5vtsZ4s*PFb!|90B9*5oI9m}BJUP@C4$U}+E@rl;+pO>U$aIzWP;qqMn zgm(9%7bO3VPnO3)iTjW^TAZkb3I6UVVziQia~I)5xJ7HIf#bk7EkIbttk`WFj_C|a zyDIKCqmw_!(5`EM)b`j8!yA{C{rsn=z#cV+&RMvFMpwCfBy%31Osg|y8c9rV%yC~M zzS`ClqG^=xc6b@OHagqYps)T~ofX9-(Q0M`b)Dq!4q|*`1$r^0GOrPWB z8$>ikW26d-5M+SQMW<&jZD|fUR^1!Y4s7n^x+oV{{Q@j{Ck0pSVr+`&C=>WZQkkz( zoY3us+*g#6n)O+gFC$EmUMIt{tQ!VRlJs~vwN~=KK+R)|ELdgHE&UwudbN!sz1sIe zu3TCui{bP;Dp##q;3#vNx9Y`M9nq5rZR^s=qGwOJGS)m;GmCJX&2mP+^|OYPPq{KqTJXFPOD_1>8O^)cq@^!Zlg z3HHw#H(gGs6x8R3e%y2qHj(GvCr_>ydMPHYIwyNp4}L9zG9P)c;z%o`=~Fn`iy1Hb z$AH|pOn^7ZGRigtP8en-H{?t@E}(3eWh>8OJ9msLZs_igC^~0=Tu69)zX{h^qzXlA z)3qvOex>E9_r$AdCT{BvKCyQVqx6|*m` zG3Og9u(}H|=b0diGFD&OX4Pi{R4rCCstoxCUPro^g}iZTRuFHDf)@OB z_Z@Yf0;q)0eBHIi0WGS-prW8tfaDmtE|8cT0mt(UP&S~-ZlEYB)Wici2RXYKc3L`B z*VuuL0kc1Bx9_-*W4dI^3*W;c$H(11T&HlLbHuhbb}-FgA$>^LRItfAEym?U(u7&S zEgvdQcjN}Cd!R^wFJK-I z8j`{A2NUwATHhXX7G2I2icM%58x|u}Bgt>m7S<>&iz>+*!-}N^FZPJ&%8fFi@r~M0 zT-}Ks5h!M*y5YCQU&mh2x@4Q^-1W_n;=xE=DjC_bCmq`e$C-@DK*8H{`98A5;J<@) zh5pQ#ds5CZb)G0ea9pBNnmFTP2J4hNrJDGFa~tW{2+xAYiK;qhhgSsLr*z zQck}WF<2F z2RX|)6nV>npRVX=N=3yveh)yqoB1N6*kjB)3J6SCbE#yq zq|`Dd-l64imN8n_Ld&5uJj@!#A%N5?*)Wv% z(kOVS(%ZX$lHJXjF8w(wAGlJIL4Er2aAclV_dfSnx$_`5*uQ6_ljG?if9g3a+&Zqf zCsUkJIvCqjUTPAb8)oxrx}2V`=t)DT*GL#j=XMsD0WXvjdMTvX%5e0=7>pJ6Q0qLa z1lFj5^Df}hk5RRkKH%>OP2g2nmQXO&A}1vDIzc>#qpit3D1rodpE_XcT<16o8S8rg z_HK-fI>Ub}?akD6w7L1@AKsoNIfo;Xau~1_dsEFeGnPp25plNXP%Vj+uu#?w5Q-e) zp?@_;q5593wcIso5q6~36&gL2)G1HGHR8GOZXL&^d@J(7AFQ9?BL1r~pSZ5`;KUw; zk}bWhc@t>)rFypOkD=)s{pG{vqp=ZwbMM1*pg#!@N|zpcuF++P^ckw$VJ{ zd>n@A=&1Tr&VYOTnh^1%VhFc{oC8d|3EwAzh$t2AzGf$k-hoP@2Z z0Wx=&LAyFooMWBHK+AuA&Wq}v%>jl?8!ygfjY;UDm?Y7*?4 zeDad75Pk3&YwLK!`-WY1Lb}c$?Yt>O8eXT|Dsi$lZv4#Cyz8*-)-5wzH9ryj8l*A3 ztP?T=~yN zvBaQ%!GYUt(bx#)@sy719P;Y{A@y8Ggkc=#AYBK{FWCrb5Gd07UFd`>0_}-Wd$NIo zL5{w6OVSaAc}8>qi>R)L)bjIU$DZrx1G^8|D;}<5wPg1)uUSvg7$HA*L*t+Iz8fGV zaq~a=zv`4r@}vQI52jMY)u1WCvaN}vm2D{NMiFlTjjk@3D$a#td0C4bM7Y8Hikw<` zjC90b@?wxV*M;+RqDcA; zr}X@NM7kIaCvj2^56i>Jy`j|MG`xdeyh|(Uuz(Dzh$!McfartD<-nkEL(BgP)4@q4 z%t%fKob1v@1#f`BV-kAL``*oIx^egR*m8EbH}>(xE(42ex2*Ur;2>`eeM|N9GJM?1 z;Q4n#>#q@bMqrsdu)Bct{bgPk&Y>4=Jtvp-6v<72;bX(|-0QouSLNL$eS$4*tLdF| zdRs8UHm_4CQkIi6>HQdTH|$&oI{0bOb-_e48gkmwyjnLYRH~x6pSxP0 zR|`CN($-JRWzT2qzp!#klg4jSUHnK4Zyw|`u~UurL%9Sur_%UlF?F4uj#rc5_uw_E zBJ~34l$&y;Iq_cS5A?NXcy7VWn?-zn$oLR@5)^(ZCT%4aDFFx zyiIZ=8stJTjF;&bRrDcr>y(7u03&q$jdb^_Dj#U#W&*Mq{_C*+5;~4`U2o|A^7c~k zt%bvjdiNIJ=SyQVR1@-ay?1R%IJ+l2Sydn@pUP#pI3-N<$iRir!RvVC;iy{NE!0X| zAL{|;Ec5%Ihi;{^`%VPw9c(Ie7^c)Vbf2K3KNX16A}D@S+>$rii`i*x)MNX`K^#{GP#Lkrz+s)$Ko5d>o= zb%3DQC~O`0#V~2f`SCSaBdP6XMckR$K2w~3CzYFE?P7H^uNeidMZojyCXoxh|B=bo zQgP3AZ@%a5_=|PzN$EjxG+}$a;DKlr$y}NY((cNhG59#Eq;cR%I!~Bf!JI|Q@g}Ni zN6$3*7OSAbte8W^zLqS=BhK_LhBXlP%yKGo14WUqYn3Cr6}`FUZHJsfRaUAp$Kep0 zNXQ#GnLtv}!$Stu47%VWXXUnyvjSC%Tw>R~9NJVkFsN2*H<*iB^4nMFMMVh1z57u5 z0*4Ie_R!N3c|=nZzjB!TJsdnqr$&InJr`FS2mEMQg7bQv?P#1{Ar&*#7bDQP*Ypty z-{AD)GwrInvRx7VuQnK}^*k@cGZp8xTzBvsf24U>=0EaOUBUn?ReTcsu!} zxGJw21_bz$^{Z~oGWcM6LSHCeKl&X9LIo-ISP7^)T*)SHPZixM*p39M@#eIT{r@=1 z>rMxE7ZEbJHaaw>W#SAUk1M17?gkwO)h~H{u7^HSb9W2qm8(Sbo}+{&%!P+;WH?_E z3kq$1imvEYWFSO&`4yzWSC;v{SregslA(onAQ^T7u^$H=z3rnv*M;#MMx`324+KvL zA%+3THV8W(XGW!_t?qCXrK}p-of+-uMdSNU^YQgJ`JJ+Nzb`jUzD=%3M&B-#jwXM( zqpW6$Kh_Lu4@YVgoPq8aJTL{nWOOHF$0Yvu!1pUW(ly_J9LBd{TUCW*Q%8(7w#C*R z_}J=^#`hCjkB;=iw+|BzN(m0CR7OA#Tk`koMca$D;BO`L6T!cf<-Q`i7|YHjLRS6V zKKD+!%*^-5s)E-f(c)rQ70>Y@TOUq6uAUZ?f3a^ZPD3cSRKN~S23GEMctX0j&~wkv znH`3GK;~Ik(Ub%@kg;i^CT-_|gHC%t!hKh!HA%XI>q7GUG`HGTw)ly0 zg(2k&Ohieu*>90>A@ir@V92<|Y(95=rO6f^YySMMcdplsf90cVSyPT8Dt_-9%HAc3 ziAI^q)hjvW`nqy}uwS6k5`rIK{Pj9B7;|&ZBd{+$YoiR*5s)C)_b7Iq0Lla{=k-^2 z#rk+imQSEUpoi!IYK*Q^QoZGU*TohS3z*0Mk7YO)ypwjsiW^Ed761Fq?aEgQvfiC}?8Q~I)$ z6`61YfQMW{u7zC)mk%Zip2N$m*Mfk*K6G5p33F0ZiETZWYLF~IGY^EQiK-7E#(N8B z9z2x>`$+@%UqFqx5Bhag=hp^mb{L1q`FA+fMFVuyGx*=63<&&zjtF^puOfhtXdIx- zI{-IH-T@A;RBzPJtAsqr{&6#K?AEb9g?T8$XyxdY`BL9=C;~oaiZ(p}anW37y3u{V z=#qD572&O&A7&TY&`_Z%#X_e~-qJ4=7NhnXp6DdF#yses=zfzb>n}PI9|}Fh zX0gdSb*`Mu6r?5l9vO>G6nHwcrFG+y&)Iu!Av)yLWkdeOy#XogsIa8t%f_iAk~_ZN z0K(KvMaP@GA&9-UQnzR7HApl zr$gVrZ_X)-p0i4h*`(2;OCB{bhXt$`l48Nhq3ZQ=La-ni!U!Fw9bNEh$#xG0EsZ40 zxWTv)Iea{lR|ewv{(cNFw;UF2oY$#ACc2uaD`-U2`@K%9q_!@o9N*aGL1-SR(jvK0 z?gDPkHLwe3exb#sx-L$Ht}M1W(pk{@(|Gfz@uoqH!2Z*D@F47hd`Ih5)}p}X^oMh3 zD{``B0EnmCUvf1N48%%kRJ2NZV6j@At~k9ugGT7(jA*z3XDO*nz3AXUC9VZ$qi$B` zId06#4SN|zj5)2@m^$N4%p|cL?IabKlXh-xA-!UKSmaWq6)q@jc^)wON^d9(DgxDw zIf2k4nWqfHPGSEo6C9Gib26E4_cU8GD?CEv>7-w(2}fxaK1zF@!LfevDOnEY3&Tt)~%s4B1% za%mr*ZdLHRMWx583|>#%>awnm6S=i%8kSs|$6Llcm}tu{z8}t7A{Ij5Exy~SgG|5p zfD-(*dW~1EeG6okkA$mbcC~tPB6ql9ghm^-7^#jE-J5A6ym-_9s$?#`I5uq*eJ6&h zddKXpqYfF!QztTO8Ye2tUmjP4_YW0B=&ehkRT$Sxs)i4?iJOXdW9Zhv{IT?=(ooYP zGq2O8zB}?t|Lao0tUkSbFi~R4|759DMw??BT4{3w-MYi=wic}OwRho`dYf<3|Wha zlWI+h&$VSdACv!)bi4Rb!=8W}bn8Id%|4SKgX9jOxGUB}fMag2gkSP;+Ag!>d6I?Be?`PXm2pjjjCA7MW3*)-wc5g10R|o857S) zneNsK7mIXg;t1xOP^WRnHqo2UtgUZQZ8&vnp&yjLa>80+nl-NaHsAJPOT;x?xiey5 zhig4AC(qsielVDKV1O>|kNy-V+=vC4A0>Ul31Nq>7RQQ0^C+6?=zjj>(*YR6w`Sw# z_bl1BD?=MN(ZsIXt;;i5JJPG;3vR}Trn{tn360Vv)hz@`?d+@^N`kL*)ZDB~pIvjm z|0=-ld>t(2P~8)~oQRG&%J4qXW3eOo-Epa4qkQ%Z6^t-on;5Fg<6c!oR?e`fQtuHv ztWeG1ziv&V-7RXVSk29ZE_z&{tP^QSNeBUVMEmIz}%*GjREV7ZBZ? z2_yPPo6!H9Q||?jlY}4rZQIQMTV8DOo7`!^&WP-Cf(5zSgncey|2^Y-;MPMh|t`NM`W z{X+r}$M#RIy5DbLt-;0CtpseyA0IMZL`V5n%(n9E1zQQjx(Up4PY3}%$D>JssW&DW^q^Dt3F16&0zdnfqE@R zLG|b(=g6-PG(#ve`=jl@!VN zdIXWSYQV=F%q7aZ1TjTL*7lF1l;E^9f6sig@-E6SlcmvGo)P*A%asx{Y`pj%H)*!sGC*;9?~KdCGtieY!JIA(eR6#^ z+P^TOp3%`LLLl4lA}J<4j{4-c^0O^gBSab^=uR#NE#85S^UmGS;BYq(BZUictzMBR zNTC5tWTLv-J8SVq3}6dw;M3uXg_+ItnNQnboZ{!Qh2raYcMPB}g8g=*a!_<%_xsUe zX$^*^JWwXWXXct{8y4>USH;}ye;Tg7J`N()2epxNp_F9l>d-_#jbcYqy6|*nsgtmS zar=`<@vhyM?GmE7Ae5iQsJ8 zq+rA3KMkqX(y$H?ACCt4jX}cHUFWIrh|h7^#xF?9Ir)RB*_1zQ4 zFIxonOTJ(BPQzEQKpET?8zr;oBb*sG(9^>vm&Eoba}TxaMV{i1wcI?El$j?AI!P>-W%`^ZY zU_`l%Uw~?Fg5{-@mSN~pF|Mk`H8G95sNL^TX)+DW8xuyoZOY`ck704=YE&y7!i-Ad zZ=U`kh!L8?{%DfV@y@xwn}|BMvI!mNE?0jX*YnoJSuNUx+cdH~N)UAhKNd zpxj4PN)5e~nc&n41|@sqF@j~B{yXvvmYI}t;;lQ^7#%3r@x8U8X%c!W4W`(+p%@TH zc{&3su%JIl$(q-ZUIe5wn>t2;wMhZE_{vRIL!u<$ePtRkTx);6+c6s;bU|>N8lEjB znE~O4W?M3PEj*}p?A?O)UL`J&+%i5l0VaFf(Hwv6b4R$uG-<<$g zDEGA^pXy+Os~RpI$m`Tu71DlX(b3eGN0MmNQVktm69t+n!ZCycv|jqmavIBX@t|ug z49geY?N-1Z?SZ(5n(naa-`eY~v4CWYe;KcXbSL%!c-pn$g{P)9xH|1CUBXtIUGhX) z?(&de+{p{L0v;PSo1ysq$=pzQD)C@<{i42bB0mhrWURQtEX1@CdG1VkCF(c)a9-=0 znLO%a)55gj^h--g)&w4uL|TK!w^;Rk+5NpxfN(N~ki}#OXD@%J^QS-o!b%N8{;DwB zC8%P8K_zvF=>uA%A$JC>k0OE`xQpMx6ekEhipv&4i0dQLM$g%Wv3e6J=hJb6&%Cyh z7PEmISw|kVmA}poGR`zCt+gV|u~%V}uqTM?M2f;9i);I{f9h<{i?D*_o43^abVd)+ zgCtH632G2VJsH)X1?SizoV1XpY=RO@Xl%D;FEXMh& z=B4aH?FX@c78;d{jV#6?k6=+C((N@Wm{E~I!a!!ZEqyyy@Qh)V^G2N4rtI?J7+{5pJo`5c}F$jPkxdNxVBF92mDK!(V-M@Mp|JRl`ezxs?k1DpU6%CF7^& zv~+2N5Vq(p{lS$Pcfa#2^}|>30xmPI!droTi}lyvTKjx`jGq$|+oajMt<7Zky*Jo> z?*@<@9C?>>89q$6Cj~vGMW{Qdus*i6+IEc@TOud<-!qG~XmZsFaHtf~RsOW12T$^d zp=cK5fr9a#TPe995Qu`#^@VYZs<=`A5fWHae4$SiFkNv z7KTxdSxNf)`gg-9lGvU=UMHF$DLfDihezCWAb%h-PvL{n2@_vBzu?TtUDCaIHDuwP z5m`PT30FQ{W>zG2g-+a1;>wW;a+)e(A}fFS%aqd-XlqH6M0;32#qkl%0)S z(U3=Q*Mz_3tul8mw^Nm;4e+;=xdR-QoRbH=DnsdFERvTW{$LOy+K}iHvDv< z(s}B$u6m;9f~D)=FaMBaVgiPj?hWH{(z?+(H1Gp3{H`sgYSsmo=mZo!b*UOfo0y&a zvLea+%dZl$aw$0$Fo4;gp*w8D+UyBrI-LOfB0f~Y$ff=2b!cRmYSp5MClN2fDx!XO znPL5cy90vMu&8mD1>S!W7hROM$mPbZ7SS6dP4_ajYQ!}ZJ#IL2{`CZK0|QvmV8iTh zVd^qhjrz>va7VMYZ*6uU$H4AGJLCTbt@WLfiUV363G|p+`c?O){iR-hU`V{ZJFqN7ckQ&OVD*OlbYS0<{!M)kEEvx!R1Cw8~){1@e%9HgvyFoh{ z$zzTnA3*>d#=4Qf7lwko={U9;8*VvF5c!vCEdY!o&1(X8UPsRjP!)8#z&4bJQR#(q zGk=g@YB7FATesXbaV_Tu7cu}kD3O5xmtY`?VI%vwyRWI_x><)#G61IFLN5b0o5D9E z;#ohfsvIHR+Y^l9E1FyMdFy8Kn&iLy4Fq9yMuvh0z%E*PwWPlUXfwprwNNU2(HO2D4UnUI3gG7`UMU{x-Bs>7s9tk zA|`Xk9ODiO4^Gq#OP$hQSZMQ9%v5hZ?R3&7orE`+&Dx3r6r>@z1eYf(6)182gul?H zdJ19?9hXD9tw|+QSG}Nx3Sv+lNh9}r6H0oV1*cJNkq^OeS+h{ze-o#`GP^{L558#3gdu60M|Hx6MAKa zqWO5^1i{i$*8O8QisL{{;B6w@yEaoQ>EZ+vR2@G;lwC%z->A{>Qlp~LiWRx+7dwFy z1zl3H81v;})U~0=o%pmkoBl#__|?`_e-y&H>*S8Z7(>X#4U0ko^a5UN95Z#iCdp(T zKHUwkn~1IVPl&h27+GR2l}@kR{gS2B2EqcO&}KBjZ)G9KUN2ZSb#HDSr9;;-dZO>) zCi-w@9&qXxWfNWWI=K;m!cfX~c&YYe0E{UdaX4DBpg0T@h)xnhX8+0&JjduI(K24( z)by3OkZpZqFG^X?@uxu;=V832sP~KOU}ChTbD$R~sEF>I3C%(-vXcaIe~6J7Qz<_?Lg7X(rV<~TyU5y(Pe9H%CL z4vJ0XTUiSMBVIh=bZRi-94VPTyXz{Wz3zol8abKUTeJgk3g?GEn#qs)L}46Zo_0)o zU?J6x9Re^4A%t#|ofzorl5tK!_lJg19L21NJW-h5zm)e!xf=>nEwlMl4h5uoN-~9l zG`uv?h2k)nnc3SKK}i@eVkVg2OZKM#zw0mmQ1VWKa;D^Sm`g)(=!eiVB7{2ApXq<* z39WBa9EE$QjuT%X@iFWpa7ezY&mfyIv0wRUsyOQp`LvWD4c1T?g+?w;kp>haB$P5= z7PljX`6~c$`v-K30xsCgJ?L+iuKEm8!r);`)RNdJLgqwjyc&SmA-f6RJ@k9g)E2$_ zJ7s~twRJjs9w%}}sBBOwtY8h}vL$>=WCInB9_RooKUhCB<#fJ{M-i-fHn(4AP z5QhPB5ZN#lsj@4$k=}7Ob*DxqH60q&4Cc?#($A%{I)LZNQQaLNr{u>T2N!03i&dGU zh4W_#HFi&Fwu=gWht;;~yG*;brxs*c#!}H&lE$7a!Rj<_w8lL`f+k%ZVa)V{%%nQ7 zn3Y0OTdCD6i2hAr=-q}6s$<>;SkG_U_8d36R6hzoty*uFwfh#xk~pwtj?IV)FYFM| z3{HOHX3;BH8DSc>8#ROiu9>69xLYy3_rINp&3tyNOu@`GGp6!RMxy8v5Bm)>3ZvJI zn5uW<-&d>%w0_Jrq}sI1g9KX>ZFGs(PGTqPI1<}j!B#X~WpoV_M}2HxINDI@n#VB~ z>Po7iyU`kDT_fU^NAR6*f<&n|GC{~9~Cdr=)8r_#*|dNTxXG^1g7HH z?~dA9*)-3W4!h&z7OiT3+BWPVd~-9lnPQqAd|fG#Fa*J6k~jMd0goZ{1`hyqp_szY z;z0ACtf3xH5be#$Q3}UX`pr#PC^QYj!q6chjZzg|M7R!7Ooa4BX7Z=NMoAjt;zRZ} zi>49{^DiIen>r83?9}C;UX67tqR3$GCaT}})soP4I<6k&Ps?!_li|1K)shex=UskP z2z6~CG9+R*Hg;Y%#QLWLF)n7Tu)V;fqcAQ(=mC(O>bUR2E0nOR(##kGS)D4pqRcPQ zYvoNv3EE^&$n%0W`zng551^hgzAdn}ZU!5%qSC@*TaKCt=>dAZFruIV&99AXVVwFM zfQ?zXSHaAVa&w2dBP|I5`QxyauqKC>;pf>y6_@YR6i&G%?ujI?G)=`+rov%bIT)j{ zhbIcAWMCvb%Ikg$4HUKZ!lwUWM0=he;ep+=fzK5b#I8;bnGGgVjQbm+pNNnk#*R9_ zPyg~Ohzvue3BBOTID;4(a9XTE8ya!rGdV}B^Vg>OISS+Mv~oA>%%GqO+wtPOv?ru`9HK4D!I_i<$lET&ac=SpNOFn_TIA(P_^Z?F`LGk8C1EwWXO zI+t>;YiM3}16##d2Z53ZEf+tb_SHQH8eKqClcBuUt68^%YDXByhttbA_mT1T4X3X^ z`oLk$4FEAW{VRKd?v;S>XZ2NLdw@LU$a7-;o4X%47Fo0K9*&hQx^s(ObMp3M9EE%j zOQZJTg_WjIx(DcDT(J)uiZqtPBy?8>9^^eIuZgO4l86Wj-3#bKuy>yl4_F4&_Dx0e zw`NmW_0o;%cN@DG<)Nf`;J3zRgf1-I+8L26%LJ~?uEQi;s6eUkQvd!3=!%@I!;obm zQ)#_y$lDIlgt1`U*TvhTR@v{7nn3SA=VPYo;PvaVihVPA+2B;8eMWI=P|s!N{M5SX z%?ew~TFor(j+%;Fy+_UQn`5A==WHC-tBK0KQmVG*4#zC%FVfR;iH>WBmo(DTpJ2zO z{zjc*#@LBp)`iW{!8^l$%nf;Rs<+n%i^qEepG$X)p$5*{=D;5ZZAHad$Poo=h~wf+ zw#IDj;HNRTK7x&$eDu|~Oenwfn1$hNe~ZU<&#z8$MHi&6aMLVXOC?K;iY)qix~yoK zZ7t-_J|E{cRAmi_9)x>XVz9ABF9d{S4Zak7$jVBfF{LCd77gOxG`8j&k&5nDe(%D| z?L!acLYUbLjVqNORDPRjOlHhEb*YG^YpH2Hc1LeM`6Tx5fQS?{bXXbsaIljwD#-GR zr8fB2G~6j1g7BMC_O+z?xFBh+VXCPc1`TETQ?QvA2{8d(bebyGH2-PVj$t^;RM~w~ z>myL`ou7pHv#NFxqF^q)$r*lS(Innf*1b6rTSn~#=6*fc``JnXcWAwY!lId@+a9J1 z1b1nBY%NnkEd(cGB7$3Zm4twX($f5Mgl|Q;)>U^HH_}W#TyR?A;RDT@c`IwDXGEJ# ze(hyrnXuv)DfgY0(0W+AD&fPL``^4zM8K6b%hYcaDCFeTukci7u_v3#anLmgJw`3I zw|p1hmWrkreYpJkqJayEV3UHpM;Nk^Tovec^hxRCx-d}n!DK%`0MxSK0`g9{dKc+i`!xDDWN%xOJtOSWC|1$^a`-~>l*(83*iHy)wdLI$p*rM>qb zm*6#Rn&pH~-n>GDo|%*yIXd&|5Nxi{82{Q`mP-U6@AIR1G}6<&4Qi;d*~kCwA9+#a zKBo0a+Ud8i+l{Yo?TK*;K0Pw=3jDC?#F;bx?Y$DZ#aDjpy2fS>PtD|45IiZ6G);#-u)1j6M!u55-!lf&~Q`-==-?8acwq3DM z#e=Ke`XZM)Ixd(zVF116T)$3KXDfTm5#IjO>6<-vD`Q`zJ;)LrVYw}!MQE~EX(84F z9Lblyf9A+53A9j>u7)9|Ia)Yvon#i?lOs_b1YiTT2VLh8Zp z)V;5kiY(()VS$y|rGYN4_;u&5s{`$QR1g<*IJaT6BFow*+KTW!b}7Maa~S*~%ZNc; zssNeBSxDI3DF5u%{`c|9btl(H41Yb$xi>rQvf^B8acU?(ZUjYVbT*SZqmN9&miQHH zjq5MPD!@L6=d!6q=!2}Ye0g~#W(Ndgi>mwf+3TxxzEp?1nki#+`ej}z>t85VuEV*! zR6u$0j$;|P1hLr`8fTgW_Z)S2&N5HiL`eLpZY^kzG|~5RTHlmR-B7~UFY)d)Dv?WX zFNj|z8mE6KptLH1+#eIrypeF|H^VLzXpTMiNIWp{I+pT-eVR zo=sP3ZSmmiY-+XK_xN*gZ?1`3{#NI+ZA3cf)TzO%_Azcj6u85M8QsU1i}`UrUM`sP zx#qL^Fpc46zylKD@N2;!IBXP-bj^k|bFt6blIpHKX-2lQwcV`2@?t-)8mV{obYLc8I0Y_u3Q%nk7Get{*^sS@%V!7t<8NIukg^GuVI9pxa=Cv`iC!JBgVI*U`rYR0zr=8OPLDFDn zcTCHxs5|>r3ND=y0^8@ z(r_PMCG1y(8Z$MMvUKM=x#YeP(!QuG$h|nJoJC7$uJH48cs&*8(8H8JD(t3)kkRipyzVrWBB6@1K)(;Z#@va~wtJ6%|) zJ1%i!(M z%awK)Nv`tgtOXIYDUkDO?m9Ymm*-1tI+6+I>D=R6+PZomh)ifk;{G7fmoXC23+&8M+w|)>P_qD3KF>?R5$`}t;ngBX0y&6$l-fCUjx~Mf zyWL0(nk92&wyCF`)_9EM5nt+PgWv|iPT3`<%l72h5VL4xS@#~y-t4brR7+Jk(kxc6 zdcJ7?UZXFr`|@bdB*RXeBfG9)*WU57YRQyV2^V?dsF1Z4V9As&fi@)sk^_EIuaPw{ zXh&)3w5T5dqwkfFK%?apfjnv^oat?a|1i6yT!_ontJri;K5 zeh@1Vf<2(I=;YN{M6VV^R)_+4XoYzy4UQ>tfo#Bv{A%b>4nIW3Gxg2wE}wYBJ23=e znZgWQX>m3X_ntKgw6g$S6CKn{Xll9V33Es}W=qLXq~&<`zDQ@7A!VMZXvTPyk%Ye> zmUu5CE%QlQ(no4MMm>L6u9(QATicMQXUa|1ERMPRclLPG)Dh3hak^o?actDj+;OgC zO4u*8c+RF@dtOAq%gdKGUq1EMR;9u#sOlth=O5Ua{5^`58_Mk)l%Pw6DVEMBY#k76 z9mz@a&OPCg5M)y{jo+Hfm(u~#GkLLF>sAZlJB^otSCiUQW**b5)+FO> zRY{)4V5XJ}&^_iwBmT|k1oL(q3*sxysZtx_tyd(Y%=0emP1dH2nk|i8K>2splJke* zn!>*=H!O>-!(9)Tm#wKl;Vs)NJm>1J7Srb*vRGhQtI1$*Y(IvVoSGRO6)g|MXNHwK z7R(OL!yHS76{~O6TkR>X&bYVT)|>22btEej85}AuhD&D4ybctwO_-QCnpt@duyRAO za|KF7uyhBpW~NW%4-VcDVHyCUXbzX6?F)pGkA!J=3SPp1t~iNmu-dgNtV!4^s)Kn$ zRsvzazRbTw&8zgv@6_`k1gaT&fIZdUFryxTc{14t!lfNv?WANM5>y&KrV^0qQw zw?c|sXZm}Sc^}G)M4WAB^AP^6X0Sf>wo#a4(ZLbUqj|0PBEya)Y&m0=w28>`_kpTv zRt`?>(NnuFcjF5Ja)(ha)+HJEg}N)+g3@bKEJ;T zsnc-mQl5JDQTZGSr8E8SW_O|8-Y{DLFkFj-y7my2EmR*z1-6G~O;>kkO{7p>Gq7mH z3*WH-Q$Vc0@#n^y$BVfgA8C_u=`)&W71G)ow|)fV%Jpw0Xi{Mm1Lgp6+w5%5Fq@_1 z(e2VYYR$KmkuB0qwzw_rb-1Os^glN*34gJo=pMP+9DW_eIpgVx&nt8}|6DB~te^}5 zQr&l#)|xa<6bU1H#4UB5XqKJx%_e6YtvEiUAWGw}t$&w%Q0sCOn{}Tx+(_?;c=Duhnuwc_iu5tkPR~ zBI0J`eoxpclHqrMi@%J17b)?W-Rx2jOMaKT(&h-E<0){r#4FM#kiZ0A`F)>27F&8% zl>+i9@O8T$oIau}n*p5IYL5HWl;BQ(_NcXuJ7_WRoF-CDa|B$-Ybt#xzk3^n=0#kL z#LM~wj(A*PH%?AjQY!#i>HZ=HC?Fz%CH0#ckFzIf_aQP||H$}c`Ub8k-(Z?OtiEZ5Y5H3dlzqk!V+7 zxokGAYh^@?;2_|RrJ)*^w(l?~X<`Nq0a&Z{#1iTdn%JVNSANmvruk}fE}^z$f$=&R z8D~>5y;VVO*{EQ!Wiq)~RS!2B{q67{r_v|)gdaUqg`)d0*Iwn=#w6lZHQI83$*$+p>5Vp$oy zouBg_!rSz-=xs3R0TV1-M{D^C=wRP0$50`(Ubd;lCDR9ujKMH)lkuFYRxz@YP|gA3 zT)}m~j39Qsvy1hee+lqoDw>ymP3xHpxqvTCS+pCfGFpH1LabAFE1z<23fatlWybrV zm?#YhEKOS=lLq?-PZVtjOMD1xbF7A1IO2qzJs1%A8lWrIrfvV3$5|h}<#kzmy7)tG z;MOkl>ne~cfPs2Rn$}lJ275uysz8KCex1qxHZ#k0JwT-*)wEFPb3%>#?MC{yqV-cA zXCiLQ+bilK9V5@9Fdly~8Mb%c97o4r-G>A~y}7d;yMV)EfxK7IO?sMHlWNz{7d#`N zRBa)_+}`P{6LriF6BD956Qbb1KCGL~M`&B%gH;8x#H^R$b6!)6x{qibvG-W4WX|{7 znJyF)6AOhhwFk4V#?PFxpdec%LTnhbf&g}s*vXZ}@XNob;F;fqj0m;$66XXZ89i%2ry^BZXwJXtV|E^eaUBFqgxi%? zR$N-g_p$D!y=>7z8|=NZMhd}vX5TvN=FW+t znsoD5_IZeoFWScwS@5e--D<{g$-FB=yNgzD%h}c-_M6HZVdNUU_=@z&lg+p0W6#CD zOA6Js`m@z8jY9TRNaT?nuO+HQ>8&k^g8xhNmT!ez-AO{PzbF!mzn()ck6|X0;%#ts%IOChjqkM%g-hL0m zQaM4(E#?=Z)0Cr1YI-(-k7t$bkSu&9F#E@oG$-wDi}l>^aw7D2!AbPLj64EKE!l;3 z4e|y&35y`3F07S?f}ZM8#i=D)Fg2E-k$5WIF5XI~D-x2dTwAnGFY7obb&d>Mb%TSU z<}tU+*mNljzo91gGd;0vb?Ya%^_t6!zJ6ceUMI8D=C+7_q9HG0E00nKTPzRh+8A$b zt|Au!=JldO(rsUTk-sk zYQrWgxM1c!nG-4cs!Y9@b5tbthpxLv1^6f$9@hd4`Fg_XZ3_XE{%C*+qO09XSKEtn z$BZA;nQ*n0_uN-R*T8B%tBWSf@C?2g9O==@(byoIj5(c>a#(;xX5NC{n62bpM>Qt_|O?3YGS@#c>yTb$Hw} zk|?gD%&H2|ws@$D+DTv|B9n|iS!Hzim4&-|iUy5E-t99UrgtV}#a|FKy*rrpHxdWa zuwY2K9BMH)`NjQG7klpw?&wnJO@|m`^mU3FLb!{&y@)o z`rBRC^x|BOajN1F^6=W(Y4HJ1F@*1wPChHQK&R6>}v_Eud+uQ6uuX=hn) zMfUG-3$Su24-C5iu_ak9fIDVk%u7N;OPvtoC5lowd{j@r^2$WDgu83rh{uFGUe|*S zo|U}X??lp?Vp_BJaP3(7wecW=Y;er$WG{1OX$&Xxpri(!yTL8%Nd)P*hOZ7C`|`+G z>cWv)q9_mFY}^%`_v_OnR=93mPp|G0Q_08PF)cEYySms7cJFsEtjJ(V6q&L^74b+W zm?d9fG1V)ZMV_DoTxk^|Q5%9ol*BDtKeuZcD)09k$TQ1fTPa;XRl*n{)(zpdM3z0g zCQdp>G2+lHBf5KOlf~8+pBgxDtEWq>?iu!j40?5kOU$sd>CW#Xve45{o`Y!PujP#D z&wZ6wu&()O+ZEpUw7*yJX`2t=Sm!sMMEodKUbZ9kIgT20KxYYcX8D8hrwK;nCktRXKgb^F68=4B5a z!tIYRpt*2+ncgD9xb-aD?}Pb!z}6Uesw8uCQM9#VQ$vsHl&f)CVNfdaLQrO?EHw=? zr0UDRBDQZ&Q$+eThTXnO%0tiCcW6EF;H&4zQ_EZ^?)&GyZNG>JE#8V|9%)PQzB<^C zgid6zii2N@SieAN|FW>{4ez*^M)whW($-WknOo|5nZVbfKKf%QYjL*! zwH=X;q+15gR^xSHr<;}9ke}>|>GUkU`BT96?FQ6|?5u`%swJg{(kJ4f&A*%93=-uc_Wfk!108D2C*YpLj^@Ib7BLMxw<)^YY_AlP4}`FgPXr$z!|Y|Uk`WA-`kYZ zvN>1{r{54>#-uMNZVq!W#Eu;Ws&F`}r(`L`u--4$EpW0WA+3cTdn!j!oE{h+A7xs> z?vrD1ctLIc==W#TCPV1vfL4pi zpDhWDZPV2F&f5dQxX~8PnbYgZ063jegliD?EXTKA*fkj=`|f=MTCKF`M5@6$O;!w& zpb?!xP!nM3z&zti=gNTb8GvsFX=?j%4?o1=-R_^-x$1XsQ6L>jnHJ)_Y~ch#1C41f z!$vn796oN!%Jy5L3K(`8sJSZHINm$-nwEhkvg?lu0k071cpnRgE z??nk!#ev3Q`w;Spjk>da9xBn0;UOH547EtT%YoyCB_TAPl$Gz>QYjc%s#$LA> z1ltTY>cS~bbV`#cF)(Tap0HJCrW8NtFYvd5OsJEN&c0pE44{QDC{9)gE-<)eEgulO z#$UvncEwl_$g;&Gz9yfuG22OAb;X>qO|tyulwMe&UoRy%kd7x39z_CHOX4-jatJq+ zGv!*k?M=W&c;JdXOqlcxZvcM41+xb*+!7V;nrMVxcrA9?0kg$6#`JW$`TN6{5fWC* zYnqDDhPyV!8>I))b@I`ywaMbS4~uc7O`)bfivFcY{p)%XsfDCCo))Nt1a|^Yw3a4rwjMI8#$?h-&Gn}|JSF; zIoGavq(c10v8gK@2FXH!Q!?QY<)TV3EX&z^5^Q9w_uub-o*yhz(Kmb;DDc$yoCvbM4L zu-Be%(ATTWnO(uN!0|k3ZjmK&%HZw7L~j$(ln19-%;lD3rMQ>)$4G)M?sbx zEsNl}6pYS|Zu>1e@NH0CdNz9#xh*Xk$Dv;WUvq(s+}2=N*5J3AH}DCGhK7V@2qR*Z6>p zw$<#`RhM5(h#f6{nb&|OM41lVI(xZQfB*8+Z4M=>z!&Db%sr%l1Ad^W=pkFe%ds2z z%;(fD7jnV;I({zU=0XYdt&~}^4e5EMYq3r@1=iML#{Uv`I^E6f$%&j1+=+N&69UY& zuGq8vlG{43FBR_b{hGQVkJFl7Yj%6nI$rraV9Z|KetTq2<*PZ^p#%TMGn1VUC(wyh zH&N;ty$>$9l;h3CJK8A*9+X4E3K@Su*DjZd*%f>gNF8fno^eixcM?4R{?vTECA%`g zzU_sMq%2{dq4i{l*OFkEhj|N^BYU(p_>!LLQM|vN{NQ5yrk(7OyuTj*=ve+HMSfZN zO6aAd_+SjyHMyC<@lo%klYB7-?cs;^n_)HX;Ri1J1l5qpFGBf0s(^JxGjk{!>3q;$ zXfr@60?;flV+;BsFhn`1AfRl1QaQ-qK+*g}a$rG#+KPd;7B|wc-DQ1jEHA}iJBz!S zm|jeQwk9`IFx}~WY)mgEU^|ol?zFj?g6(eWV`FTbfB&N4Gqk{Ia9!P=65x*yd(o{&2MO6yNmi-nE&00=|vT2YkX4$)1BPc!uX;B zwln_kPV1X0*zTsj7S@+#u$}c?O>8gAe>zv_I)sw7ml_usWit{kU8=rBR#VHnO-e2l z5%7-V(Rog!yFC-ga(-Lp;y)Ybpp%(a1KBarNy}mXbtX0H7PRYEN9FBo3;dn2RO0AN zu~anbY%iy(z(?_`esVSy@_9ks-*0d8JF&=CH>WeZ*nRWw7-ddCk3{; z=(SO>RfT^Tq`Ptt`VTdrIVr4p_z}Qd3IKHYClJoBuyznNF|0eJT_S-8l3o$0pGr95 z4475nH$Hs=(VK$apo+AAG|F7+dXCwtq<{R+77(#w9vvuaaacFXY8vZ9QST_q0(g|v z6}p~b#AzlF_CiQE1wEtigS3A<<}4d1t4UZlMJ*bGP%xNYd_I*edKWefMVZNLYUtA zC0&6~3XxBdG6?gA>8B~7Pq7k6Lr5+KYCp^^Q;}fW+O-l0(+{W*=2j?}Ug%@86ydmc zCMrTN<|SPoaT43dL}#i;lGnEpLk&jB8gHmqbF#dJtqL7x{ zt9C1H*<06+Qp^&`kF9FU;Y5lr8&$T0BP`#Ri-6m#M$7DT1_8sZ^IIeT9?cVv&VHly z#}b5DDBl*|Ew_l<4dYV}?mnaSq0@haSTE+r+~RkEI>@Dm6{X6w)1Y>K5f;*B2B79I z(KeMF48fqUqCQ)34=t__Suo<0rD=7Tpn?_#TpbO$`FAW-YX^ri4J@udR@m7gNm)mz z99T+KX^)d$FqrpOPmmp85-wLy4FL?)H&JQI*AACno~yiwOKw)Vgi~!6ViqscIxeiS z|7b7SM2Ocg*}S+Z(KO^%oHV57GJtiwcWGXah;ALc1ntgO^xxs$6Qg zaS{d&Rfh$Gi-<&OqecQTYF*B&ahj;fxVTe)Ff!_0Qo3^%5D!-;2?Js>y0md;FAy50 zPWHzW3k_Fi1!IebOyUSLjmD)H#DV?9F?qCq;;IV`khqL4!Zc9JKWSE?eGy4%0T7GX3~0JXuSAjP|1Yu(Bp-TY3KBC~a@(+=M914j^<| zlAoOkc{LXp4ABo9t<)|Zym<3}T92K?Sl3bAw;5_(o_qaOL+|*V%XK_NyKoZYU03nQ z!9wrS$LmTxi4+_-nx?)Vhmf*>G!#6VRu}owW@vmV;qx~Qvm-+nf+?_PLoVLXScO&V zP%V9_k%BHVqDc?XuOqUo4)sVvmYBX4BeL7jkXo)T0SUI^aGKWLe(45b_uOyYBhlR^H z1_HWtyf`Ni&%$Vy02xseFQ2GpYJHZLG1zV?IkNm~SzlA$Fp;?fB&JEca-ms5>w0o{ zS7C*(!JmC(_gD1Av0Bz3r!CdU;jd+H&8e{$@yhRJ2P+u^+}316C!~wMDx8W$HFTS! zwCuq*JF1btzm~%_xkAY5bT-%PxWkMfr0diX*-6Rk;I`K51i~LrmtznmDkVc#*mNF{YaBWO$m>LP zP?9i6=#V6+6VVY!j>n)Qkg$)0Me6eJ0tyB-+zAy7>O09P>NIr2Zg zCSx-aSQ7C$Nm!?#bLSru(S?gD$mtR!RupvDldDTR<0!RN-Q$((+wTG@oT86})y^a) zBJ1ZLQ_!u7Dro6;C6;w`W|OOXJA0|LL)~vx+p+EqYMrEyK@HBvC!vSuAJfqjr5V;_ z)hwm+imUx8l4`GK`qX(rX!cloEgkOpUjiwqAwId^U+mHruyo*rP2a*A<$_XM_^=JdGLtM_{l?03RE6An2un2&^8ASps8Du$M% zlafkJ)oDzlW$X&O#o2HpGm%2i(%E$To90gD#qE08i7c4I6|x;pJcBEFJ(zG3Q|2l- z?r3q5U3$04@FZ!Q8yxjf)Uy(B)b+rsH9G1_H03z5%e8mhW_X(&$E4n^;_!NIwHfE% z)R>m>nM_Rs4u~!Eq(9Uxu_C!57O4?q9cuKr$`LOZhw&4m@{y z;cT_K_`?ocugLrImFA6EcG}A?1ypgL8k%}rUB1Y3U2>V&xo)d?q^oPB!|;3eunhK- zOZu0OH}1-7uFFv>(RU)HuKoFGbhaASs9W1nK+7*H|P|0&Zb1b)Iiw6 zm7G5J@+@SZYzsd@Oj+M#k45|>Zq`l!_VOX0-csWWOZ9EZ3M62Z^nOwnxM z^U)1sHMZVI1$|ADj_4a=gxeP@L?2{XtNg)sFO{~JkHgl5+uHWAs2u;^Aax5auA;gf zp5oc9Kt`?NyE}>(Ju~*mIVpR*fYa_RO$Y2eJyZ~;{H~Eo_NWPie7A&_zorK`>E9m< zjIMpd_-aFrx>uB-(Bb1PrE_vxGj?%t?XiNvW=gblR?xYs(o{T~(iwCAMqJKZZCete ztpm^@8Nj`{}jQ_r>x z>AAb)EyZj-H6&{klz0bL)yCiSP4`-zO7u6)JY!`PE38yb3qpntYd%TEEeNlQRuz2U zs*8HP`@+@u*Oa|akBV=Hig8JQ^SEpqXdox%BLNL=gjhUX@NTqFp?ieMWr*LtuyO`a zfkv|qqWJ9TUfYrG8*u<+v`Z}jfbG<)ycEMzmYX&gCHpQ_SJ?6{dKoi-NO{a+LBRZl zangselA#Q#(@vndz)t+;ad6;y$~duab<9_8NvK`Ed1({)rTKWU8WC7Le*Q6LOju|Z z7Tl#KH4^+Y1U1@-ptR)i4B~o!DUcor~Hld=Uw_4sAg8aPGXj zo<8GP(cW4~09n=Og25dghEsbEx*O$p)-oaErrFu3!-QJs+|C~xss0hFPAtw3Ho4?99wX9xuZJ6vR~xN10?#Is7J=ScbeE`i%DJQ8B8PXE z<32-#myn+q>^Kpay1%Ma3*KwLMQ|)|qnY2~5*1Iy2wvgOmr2 zQe`$k1^PQKG}yuTFz6oU!P@WM^n7BC9MTfUwV+X#XjoJMM076BrPfYV>-?QGl3mVs zG+jPvEIh0QIDiS!1l%u7Lm4!oJ_(t|hRp=}il8F5x|Ry+3+=>JEBl z``ksXqzY&7g+3yv3Qs*6coJxRJY+TE{F{z0O67D~b`yD_vFYx&cb&G*OSc;Ea&l%V z-*6q$?I^Q&l~?1t5n4GFIzvyC;hzdqw8Q*J+mPM%JH+Q1cA0ihGXWhOd>S(#Pd9Un zPA)nIS!u5sjG!o$U{)VZOb&2q@A z))NtrULA+}>%#%+E*q&B6Sj*u;y&$)@$BqA6hCjk60ZI_HJ^Eok3TOC2`R z)fT3e@wK8ti+O5mL(yysw?r?nGz)tD3D>CFMR=O*uAAO0a1Sg&n!$m$xSQ!euXr_A zFt9=Y_6ds4&`b(}?^HQvP5J-r6H$eyofH+tuU4&$E}IK1;my%XtD)`IdUnf%-VV&3 z#?wwqh2zyeNy`M@3XHGL(N2ROY1yD{*~mI7jCDna?*wfNcX!LEb@9Q$r?Vn?cXPkp z)r`wcD=C4rJUW?@QK9}?uJR!Bt%*EYB?KDzBabmy`Sw_!Y?}+}%?m9kZ*q5%3^>MmuD{O8x!5^GWx;aWeM(@jSD1J@ox`!S{Ln{{7O! zH=+Ao@G*n`b@T2U|NWsmlj+M*R)Y`!ecSW-{QU$!@_pc&{Yn1S^8P{R`|UdOefQk+ z-EnsG%qQc+{f+PY{rC)ZbCdh^dce2!wQ&pY>xPlWgt#ldq^`3~8+*6Z#Y(I8jUrwh z8Tw`$Lh(H=TyLsh*wlQ^6W%ms{lfe8wp42gi0}X3M_7 z(=PR?yy$Ag>*7PDaS++QvhDI68PIBAL7XYBKKZ4lWq1W;jky^Ui-&!xV@u0B&YL9`2788hK0p-PvaPX|<;PbPVK`+~YAAm% z6t$^teZGwVcJtq9MPO69b7NmM{cRr|h zGOQDz7e>T&p9(ThxSI`?Az4~sQ)$!q8`qNG~LT^U~<}qy* zftyvEiY;-z&f*gDIN zbYCVBHhgP2N0wzfYmAh=v`2ghk3Rg;ei_X8Sy5@SQtCnex<(b&5bC}yZfrA13GMTM z*aw(1rVGr+m?If|)3+uqFcRezzEORz6w*RY&#^4ZE|N6dAGN8SIWsGWwRl-UxJLlQ zgrfhps%S^v3M)pU`aJ899@09VA#XEXbFO3ae-gUS1nvy_Jl<+YCd;|#95qQ)*~OD; za-RVl-rsH@t%vqq42^-!`)k8oH5*wKhP~ze3(=Ib)H^%d9B3ypvzBQ~{vF4cGqo;` z-3&ftpVry0C{40z?4m#QKyBpG5`JgBY%a1U&GyIDtNNj~Kskj?oq6;J!oZz4K*p!J z+7{l5Vv}aog8&P^;X+IYr@JcVM97{-{lbO{F?U-V3WDrzg^o?Rd4)5`e= zyZvtB{tKtdM+^$2U2L0EH~2XpQof523GNBHhHrT_?hLD-PFVHgGT@3bMcojuwT+hQ z%A{h7&Ipu73){MuG4s7gz<5M-IzND~p+xmvieu>DuR0R^>Vz@)mA3&FvKKU7-q*3~ zI8~{LAk1G(;W}Qp+A(Q;eMsH-IoNejy8`VFLrm>j4VG=*V-pjvao*n4vgJop`RhJP z<-jWohMXi@j=47O<_@H*E3T0R)w!PI^G;XYn)eFh9MX;sfqFM0!pPxN}+BjHm zAH<(Ft*>N)`&$-AMM$_+L7}az1b3?J)DqM1as%)!vAr^VnH}+m4?Ko?F>8XrLi@; zyZFOcN?DA2ADa;n^r3UQ?(^rEd`y)TYt6C_24OquTGOfIXaur=@D;|$r$P9)iHdAhg|Kbjx9LpQ{tBF;s9$< z?|JK&C2L26;WLc6qQm9tEo^FW@_s-jQj)-?{GY7IPeT zQu9s=C7B!VC@huzj^`wZ>j0hB{mz(4_Sq&AA2ycTlKOG1!7wUHrE`DB_v3UUEEVbX zIBWj-hsI_RdZJz$)OS`QzbR^sf7a-}()~@DC|lCP$Rl$0GWjO{vvXa8!$HJ)F^9FX zRYMSoSwgRu9gO^UTOIT|{$%c-aY8QL2>8`9*3+Qdv%q>)+uE?ku1mp;<{(;UXP=LW z+{TO7fX>-6tu%sXT)xY|@{hB)SqVd(2~C`7g_w@nI#2<7Xr>5g7nfe`V4s$;0y0%rj-KQSSk>j|@{J6V(N>x-ednOK{(0W&<& zpcq)$qnKO^RhV}rieAbRC}^o*$^!X{JVC@?k41{kuX*-*BZOK!V|z7qE|`Zs>q`0x zdw~Y0I--dAuMlQM5LmGH(O?CCl1+hp&%CR7vP{>FFaH<>^;cY zv$Ph6I2rQmp&7OWZ1!}Ir*T}GsiZd!YdzySu8lD=x3a7UYoFWRN0}+#qh{Dzz85b~ zIXs2|Rl6iY0RKa(stAruM+zpWu#QRgOA`}Rv?s(AJS%IapxvxDZqhX=s*`7a6B$aA zJIuXSas(gR6n|!u6$TB9qZy9K25OF)p|a2wxk>M=2mz6i8Gx&dZ)Gmq+H+$52PPT3 z3Mcd{^0Ke>MwOGP^r%Y6&Eaa{%%p>WHsm2}UWM6}!?Z=d{fqs42vTTJsT6`*Z%Y30 zdKzw&Wd0SgPfENW(AsootXG6`-}t$@dv!>8(q=@wz_}mV21OydMa1f5K|xIes!YaZOVO; zX2rizelJFpgVk8=-Ma9iKeBe9l!u(lFZKGd8j=d18K@E4?)2->rkqY&h0l)zG#|!YM6#D;Ti^;*rPT#@F-OAk1*v8S=k=Du0Nm&UL0Qe=+&cN9X8UPR^ zK3d5UWYQDZ{@;|L{;3cv)}aLOf4m_7T^RrX0pLpD@rNfZtRz4qE+azsPr2x)xc^Fy z?5CsuryRt;$g%$zs=|W*q4xG)ckVx{f&Yt|$B&`!=xFTZ_}_^A+Zbm4Wa?>e$d~?O z9sU&Pe;LD$AH&er#>Cu|*22-&=AVK^|6jTO$E5uFdL~8%0s#2S`5%G+{}fEe1OPD6 zcQOAFrTwY?>$&(3L0LQ8_A);}0Gm)C0P24cyvP0#w6$^4cQtmjwKk@4H8%K%Nz2N{ zY{Eis#K_L3&u+-fZe+;7VL)qa``^s|e-Nv0xpW1PfdDo}!2TcNzl{k{HsJr2$icv9 zY{<%L#KywLXkx<7$iT+TLF?#Z`adO>44^Bk(EtLN{S?}N$+4^!`2R}OH(}E^W}#=% z=P))lVxea;VK-o>b+t7yVf>#mwK{(f$^MLMWypUXSMzO<|0~mgo|T=A!Gw{W!Nk~@ z)qs(i!HAXC$;sq@O2lCD+%@$91UUUEH2*@x(*^s#692(rHD+UA)MwYHXE!!BVPU8L zXO{m{q|51mzLp38fYnc7`xoTp7C3;ZmAjqUKh~oojhViciIusHsUwYpv8l6_z5^{Y zGrJ)Zvpx%}5i19WAtMI^1DpQ;ZiK!54v*EC0RZ%u0s^r7%Q|ZN1@T|Q**VzRIat}* z8JO7&{;{f9j98ieHw!8QojYql697P~4&eVm|6ATG(f=l>1bgqe+%!-T`Y$bgNRmDRwQm4%-De{U>G$R+<#x%*hw*mbpNUS#^fTN*rH7z6n$DfOtpX(S_CKe+WCPM~emY-CZ^qJWim`rF5 z9sdgmDA+%Q(0|@+kN^OWpGZH}{|``00|XQR000O8oQS?uBob=798CcLglGW(B>(^b zcV%K>aBy=kP;6mtWpr~yWo>UQb7gXNX=7zAF)lDJFfMmta-3QNbY4vpP8-{5+}L)~ zG`7=NZ)}@Q8oRM=+kD?x4H~PlZU6c0@5eo7&%L{6X3m}G&d$!WcNL_;A>hD%f1xJj zs(}5?1^d=yMO6gpCFR5z|11UrhVmvR&zAnd?yVQ})-e87Ojb}%QcP4?g+W&AQg(Di zMw*^s5>c9-W_ETM~(n`wRxlxdzL%1byouS4h?r{AcCLaAL{M4o=rO{zl5s3gGBy?D!kf82>`r(AN4lG>HC<#+xH1#)eMjF2Cgh z#eY^duyO{N{+11f|JugyA+<7g`VCu{|7`2+GuizXVmSXo#qJN^@wc={enZR1+1kzs z-~{*$b?W~{{Xa(#!~bH&+}h6SH*AsqTU&p*o7>p`h5_3D&cJ{6is^qd^dI~p{w-?` zwx$jM>;Eyp|54l7$=vFHjW9<;2Xi~8|8*ui+W(fP2!EqtWp3~{>0Bf+SA|$SNfY?{ z$bAO}#{a*kF*{pphBt@pj2)cJjUB&430eX_qXeG%Jq5q}5#%hW`JVd=Y7T0T0i$P% zjhIH-iiXMD*XL_les#y^&RdgJD`7tfR_8P4Z&=W9)rcwMq>lK%df!_vwIvtRnH)=K zw);(0yHzBWsxqE6e)9UNs+rXHIksP^u2`jDc!SO>a;b9R7Kf?`)13jnsw51EUF#m4 znYqpP9btTm>}vd`GhZWRF!%yvmwN{z0mx`I zs)dY+o&9m&SNOjN$Br$YDr#6N(R1=xa{tjYSbcJ_!a8 zKD8beVyeF%&mlva$=P7UB{etn)q8iI+S)8-f}%ox==tov?R4CLU#yJ8k&2S@J& z{OM5SY4=Qqa&?a;Yw4xD@zYHshva1)9Uo92CTVVC)C|5|0%lR8vM$ZIcJM)TT4bZU z6C8^`XV$X(9&pD{#+b1}1?fV3ko)j`{!r?P{#u*4Nw$kmpRVSInLS2#7g7zxaox`a zQ~7Exgri)FOeeD$A*x?e%jbF423=inZZa90MAP1dn*Uf2Y6*^*f&f>@XOW#nAk?dc z*ef6$4c4nsVM{h=FKAOw$D5;PQ0E<>DBz)=+}8;y`laIn=!I_dR9<~6$g7)80z-ij%b zjQNI$rOiQTpY8kw9rKWQ^FFThiu`tMbKu>eb8-f>{k(VWS*5Vk;FSIVX5g6EYw)1> z0E}ZP8f!xdY9s3dQZYWVfQycwcK~IUoH0ns4cv6dX=E!R6^geW_~G-=9lGcs63r1% z2VCl-LM-b*;pqFC$l2j$0+1yCCt4bMQIhH#q3`CTrb;zl12M5x{-@droYj(Ns!i6TvglrGa&SRzZbc{w%y1x#o%x4`2MIf3db=&? z3)aU-n5);AJKZ#mp+2*DS!O4cwW1gswkFLwaA?ioAl>nC_xuF;+5*?r{NW4l)_&|E z)|{pK3^ikK9G8D6!gD1-aEW7)*9b|p8!Eq6JDgbkzQP*LI7OygP4x`**Jkf-|p~BNXwq~RW$1aFC=IIw*_h- z;`=8qJsJ7r-UzdV%cAcrKhkIL&3n zN%usUvUBZ*5`R6ah47)c`Srrl9v$2C;LW$6ojHJwHCWRtVWW5Fwnu(xL?yv0Nj$iz zoh4i}F&s0>pwB4ji2YFLXcB^g;*byl@Y!%u-vX%U;QVF0T@trq4AVxq zH?&kFF!;WTlgzq^h@#rlR+#LX?Amm83VeE}oxPhQ$|ZlH5mV#6(R%<1ZLe7h3+>1e z9&e3Oq7t1jv#>S0xRI$Rm8pe{w0@;Q|MRfQj%H4<0GGX2>A_4zv6`e=jc3|LVvi`0 z)*2~_)ZZ~9dST!L$C7%m^j;9pW}5?6ox6hlaDZ+yB~4`f(D*Le3EbcG zg9MlMc^!mrd=kYvo=!*CYtf~~b|82RL@AP_B+Y)NjBtHESd;HXR3xV${oT}a>I#-I zw3h$P2h2raju?THWmSfU=`Hl%1Kz5K&_VT<>EA(ufr+kz(iu=#~-@$U9tE^E)2F1A+%x+sb(q{id%} zn@6keSV{_;pyQ+C(c3Xj*0wcYuNSyq?`{yuV4RnDnRQT|0tp6dn3l!|4`3aso@z+n z*BNuy8bVGvW=T?_boyZc?&m*f6&kkiUsijMeg?+{mh$jNeh2W8TuQXExXDPUx@ZRc z^qWJ~Agf9K<_8H>Qf}SY-pi+dnp0gu4M-?7)sh>zD0qlQQWn%hf_)tGonF$0=ho$M;i4(s`z+N? z6bhI~-X=g&PfK@ZxN0p-RbU(mYcypvRxGPLwO2Kw@P+I`y>l_ceDG1rn9eCN|X5s^} z^>_(wBDAQ=16#m-xqd`Yc+-LGwHDR>-4@=3)f@1zGm8n^*o_?A#U`+Tq2qC0?r28X8WLv6Ut?&4Ojni3VIed9mVNn6K_4Lx2aG0FCx*( z*3*CKdS3A}^9K*AOk@W^+shSQJwW+)D&C(pKW)4kCY=0W8{?F?=TzBWgS zccqRx3a(WTC=41Ns}K6J`0)yZm*~cBou{N`>%)WxlB^Cl?i156&(K#~T%l7@P0UZD zl%XjsGQ?tzE~(-?o!UoK)xKxL1^5p&*|>pXNb@usX4`{-&4#|+wi_MCAyB+4080Pk z_H1fjuHY{P8P9sB*nb6O_N@>D30t>0L4bixGQ0uvZ^@jDpq!|RvaFy2gOIE;gN385 z&2j3fZLS2)z}jt9@|}TloGvny$h@mdAFncPr9iDYL&peJu@UaCWacISH$ce0-MZID zMEx(t;6m!Ri~4a;nWiQS z`TA@>kc@A&q021Z;ls1ew+z0%xf5*G%4x8`^rDY?lXw>t8kJoh3fVh>p_yUpg-!-E`U>= zb{xrI>fZL%tn9f&+4eee%**1w*2uP+aD3s?wh7T<`kmCtd*wFZXk3az2^j`2=bJQ@Mgc zP9v!|x9ErtP8Wse1d5e^KlhzOXqGCugL`-%1@X|l{l;jdv-YZknqoKJv6GdR1?lb` z>T+AxTKl>BYkvr?F7dp=FHzoOZY0hT11$3Fkv(wl+tWw_t4qVzSVrJu^_bD7tymH~ z^MtBf?V#6}2hfiq3*3OT2@WS1YZ6PrRmq%?fFyu zE-wSY22uQl3CMr39d0+As|w%Kxv=hhH)S$QTj=B9nD-NGx86A;@3Xo4K62R874-VH z`k~CpV;&K#mfESa$+vyT-gvUi1?M#;I zul!nVW~&>epdVUOLy|Wn4O8!wOiyV}~@0xrfz?uD<3sUT`Tb zc}1x-?CjMm8b@^?FtADSwg^YRxdVzz5?Exq17ANT+;;2ZKfIQca9>C4w zW;NyL@_D_3{e=odgF`6mP&eCGS{;wo)#B>O+70HM6=9KGGuD*W0%CxGQG4)m=Q=N~ z4Wy)MKm-tIkSv{;$0_F_wrNAgiTpHdH8aGu#hDMyeiXLSQj{gYFgYwe68B)N%k$Yl zPb@`Qj5ESzwzsC>jn&6f&w8*}UQGev69W?_v^=1uw33KDsuXaC7XA_mVk z0V=m4ax)J9FRc_-&*5Q?9xT!(d1v+k&FNvKf)Yx;k5~?CksdQR57)kOj~wVV2gQQy z)8442vFn1FoP48rggc0r?dzfK2;ovia(fb)3ehIcy?|miMDrH<@(Ujy?(I)BLS<2P z>0H6O1Zn#kOv^CUUoT&rXuI*>`?eBf2e3LehtHs$5X?AQ9KSosld?j~VFMMxI?2tv z2v96=RzIy8al|qvoDN^~ZV10VyNgmrsvqPh^b=f>*(T?k*8lV&R2#s^fElaiM!l|{ zHzZxc$U;6)&#}Qamz~xq8VPRe!U}8K z$YxjR3kuiG9?>tN?ep=S$$(h6;Pki^_vHcCF3;1^m&?;EU+`vd^5;u*2yN=dIv?f8b6G-0&YF#}aiR@Fy)F)^8!sqn$4*g!FIPlaHh z=VcL+31h;7Ts%#cZI|pUN6s_D7WB)7?lpyN5xgX1;DmBz$d_L~W}AxYxV|;fMY!~~ zXih4{Tc!7L2LU)IH6QG~zpvAA^HE8ej2n&uA;X?$R?8`K2m3{}4Y&mS?xp_|2jkCMk6Y@l($~)rH7)0LpzqDSu6k*bAM0by;}yF#xI(1w(CA|oEQWw z{`eVdhgeOGr}xz(R{*0>4A%vjawlZPE*6H)YhhA^wgwfyTMYqx%!NIMXnxQz5lfiB zit0y9%d((}&Ut`(alZ{mD4Do1OLv^Q`*D3EE!jhzX8n9}f!6?c!hYK=G(yB#@GjRXw^e)~ z0Z)Y+wN=pd>tbxWh*@-!Xfu8LZhKD8B|)l@<&osZKq*Z)jZ%NsDYX3o!+{GD8z3x^ z>WB1tT*Z29gaN@3!(cPo1R#RW2lxYP7I$Y2K^~H?R3R?D6-;NgCy^$F@DZ{M!L)eb z0-9^EGJi#&YINJV;E{mcytc=#%rjAMzn%qBEf0CqYa&z#8O=+4OOJu6`etri^m_P`8l zaOGK4$(CBp;R|9%B37T+fQv}Jdw#;`ZW{ zr6+=JWg(r4tDk}QwOv?94Vr)Y}rmzbM$mxc~FyO^AnodoX0Ehp1=JT z`cwJ3M-YW&N1jyyRA=-O`*L0au4aootzK8}^5WhTVQ0mnnT;@42Id{mvcXtxgve?nuu{t z37#3WvB|Ng`hvo1!-swUVfVv5AiVFb2meNaKK(ao=T951|G0KC{81sQO%7ZTL9{9^ z22lmWOT^4hI4M>f6PAq3kj zw@Bj6u4Z}2)1UV}nZM|u!8pnYH@u)GP6rmA;Hv8VJwRx3A5gZTz`zdPes7BZF97}i zr^r8|B>6V>N2Dr}7JTt$Fb90qYUwoyDFtIt61x?$B{cZt4A9U5MQe=2Rl+9+Z3r}n z-JB|9_`;KMxm~CcCjvX@=<9P7_Jqv$#iT3^7O!fMpS>P9uPWq^g|qJCk#{XHOwT^1 zax}81w%lf(^6xG?j^n>x=OMo!=tKC1kpQck%q=)>`3qKSQ=P}=FrwQogT^sI7O7H| ztUT*HJh$!dBl{*m)!X?TRn%mQ3N);gEhhsL12KyzjbWe(wepDQ-7jyI|hN&mKC%FOi&Hg!EJ$587xs`c^JMJl0i}a5@b_D@A8whFPL1QEImO*Xo*8N-71kPjWQ`*9Ou27Fr_3Sdl zVaI5VB!Zd`lnAxfzUQ$SQXIGHsQ^~KcuiXV=?e++AIeSxH~0QsLO6(-tfDJ57_lh@ zaZEccEQXEsP--7EFXK(dsVl2uUJ7INetC>=;%g1IM488K@0Yw=2ICIG+gDM06a~uO zA%L>iF^@DTZQ(}_k6F112k6^Br;ea1y+R{5kT?9UB*n?qAO$W9kjrgSJV zplGOnERlxx{l>lKa?u!|Q3fr&dGKBDJWWvBLX1&&deDrgX zgVd~SsM~xtexD%pEs#vB-aOwA3*08p~m>C?J~bd1X#+z$4cZDMpK2) z3RC4&sKJsg%%**U+t$^HLrF72);#)bKS@$319Yx7+)}5S37YS%G%B~H14d^l%I?7)$^&*Gu6FED9LFl{ z%Z7BuY+C@=2_T6&$GKqyr2$N>a6GjnL+;xD+qUS9v`NPa(Wm8z0 z#i6!Rcc?zg)N3UKoI434c7XUb1>K}|R(tz--xUb6DA9^sPqjO*4<>9xXa7#;@~ zG`J29)rJ(_+U;4Z-_J(IwK_!Tp`A$()#{+mET1@n)+SJ2evAbKxQgPj{koT{Tdbul z5y<6?J7FweLie^%6Gkn4WWbDmE$SlS{h~L$E2UXC-At}hw0+<;ih{f}XWkzau!&Pi zg6;*{P!2MU(VuN3&_j1B6)njQvOWYB>rQs3si>CFa zp{TNN_6BCpd?_qhXw9I}b@#E^qhWBiF$9CIn>_#pIJf@rnd^Z?Cy(r+YK^2Nf&jsk zNup^eEy>;zqAfAzM8p5WWosq;5|`Q6bIo0(C~xT7ffI5C&re4}S2^*%2lC|=Wr1Kt zXV^_?s*>pr$uBznMi|(ruED5!dqG^8bc~yRFc5{Sn5;{PjvoV34#R3%0qH3H$6@Df zfF0rFzRKj_HUJ?kfbclXy&Z1{k7N{Ghgsek#D@;_@?Y76; z7Q;p1{jiFp^AV7DKGN3^x$WBvEjMD|GbHG{;8EnyYQ_t?8}V^NvJ1|9Qr`i;K><6a z3weAC%2a$ZWy;Ck6^+`UhSOEhDK-1+gl>bm<%Tf+Gm4?*D-x1zr{64n1Nyypdfw@~ zk95Bn>`M*10pzxQ+|3J~TG=UAvBkZ!%*Wko4{wQA{ zAza#t_JK7l&9K4awd6Jj@3M+D0H=^>-%}}M2FdN5@E&; zI~RY}*oa%K;2eskVzTmCYRqk)cbiWiD*zfSb)uURn3zvt_A8cl4IKQcC|6G`iW*@W zsh$Zz)2c}P#{md6K=SLHnqa?+C2O={yBwj69w{zLTUIT3hPt>%k9I^~RI zhLZC$#3$gDaKS0BE0SSVdaaLdHW$CCek9BO#H>T_r+1kEdhGjOlj0_AJ8)6MVF{yVSgBuNDz(MM4@$J&S^r(-+@Z`^l! zL&IOE63vkNVVlD&jY5G#+evv?ep1J@HWRI)miN3TSoR?*6!7Ir0@tKw2?!Nm6DD=j zu3C9c>Y~_x{lgYh*N^!&3Y^o%n$Z`v?}k6A?+ji5jb?cG$Ad?FfD4wLj(7TXyUkkwdTilIKYzr-=eFoRu9T{E1U*TMz zihdGa_4E!-gnf2_798CV;cVQ&< z^VLvS5rG&cxKO2wOA1jrjs=n9tp~W13JJ1oRoKS~gJ8(u+x2KmrBvE#2k*QLe-)at zT(%q;n6UeC)1}(H@pWP75O;KiMIahWe4vm~!1_J&wuYY}tt&Zb>lQWBju?IIqq3w@w-4)`X*(fST6-o0Ne+Ow=*_7l#D>yOJEIaX{6Ik@jx z@v(hUGt(3r-dg@KXyC7LBm{OIQ3TVdylq}S;*0BovkkjksL;G^MrV>mO)V%>#NJ)7 z+c97BNci|VeDY2xwtjWWy2|9J3^xBrZ?RU&THERR#;a znc)ujljRx5_I@Bg_nY^b=ckIS9rGhR3C0nY%8Lwiv#00jl`(wYbpHTt|4#Uguea^I z@##K*D(H=pdj)D)cKB`{5U#$W6V2FBiiJ0<0un3yPB-g55KfL`9Lr3P&s8xsakN(l z+gjdb{w%am_gN76o{icpNM$1?F&ah^jz8v;eb24Az5h5m5RICBF2+{lUEaZmHfko# zR3pa3??(9i@*xGUV8NCRE|$7HZ!O3=&rEo6zFM(X@df+u6Adl4CXzdj0@#Z z_sJ0tFFXWtd&4R=RsAY-X2nf%zt+;?Vq3#4fN|;V<|?iAxH@`r6ksLu{^{vCb&Zkt zvg5Slw&StG_V)7C`$iP(a!(i#05f0`n_9B8p#EZ>ygN|a+Rzhn$V{3b*}v%R)|L=; zxL^e@45Ffx(Jr!{Flb*P&{}Mfi(UdmP~hJ)AV8mejIhyJTwZRDK(Ut9TB)(BwOnmg zw`^_GYC3?$yxf!ou^mAM)E=Z_23+**2N3pf$-o%$0bW52EW4e$wnQC z@bh4KGzb=eFVAIyJcua=vHSB%iG_Z;%}LtTdsUY|{-upuhtnE#63I?+jnQSHddkvR zaN_8+c}W%s$(54bd)MdHX{FaYx7u0;2akybU?wSVyZ<4^*0MA&EayI&QxM@Mv94ArMo2Xy=e^6e7nw zt9J{I8oUfc)ew;rv8sLGxw#6@CXg|v+F&=tU>7aw18NSAQH6hyT-6BMhm0ey6({IW ztbHq3NFAP~`EnZy&E`PHNtXAgs(Ywzkjf3oDfn&9+QAilbC;b<7o_UZDmX)c+l+A) zRfGaoxJ#HTg3H&U>G+?1ys|-M;+~dEv4O|V2H2{!@Qv!~2Lz-iI(fK96Nsxh1d$^v z!kpAs!#Urdax_*FsoFoU3u$l3`i-gbB&}1pZB@UY0PV~#`AdVE0~GkRKLn20aRWXO zrBta<(<_@oEXqt1Hm1BAGv=>UX@*mCe2-U{;S-%EWj+_8a+*}=@OEN!=vVuPK1fcg zWh!%g`$&sL>yrGhwyMpd4-ZB}+H8&xO#n-rCiI=?K{8!)TYde`Mq3a8zNMH8DsLR+ z&mGj%=K50$RW*Iy_3WGcO5yHbBy*ar z52?xmO2aXRBgCl(6*`T}+)-iPk@+o(M9I^(hyAGDy#Iy3DJt~ky8GUeSma^T^3Dq< zi!}X{2;8pvXguL&c-(PR4e;>=ZYln#6{=l=4<{EWm41#t>L73voDx;Z~`=< zk5$y|QB{tu=Ak0rGTD@ZDk!n88!tdp&DW;VBAbM4t*DaJQLlx-CNk_Vu3dKCh-->> z44vX3H`vYJZebTQ+161t&!7WB6T}*)WR`rG(R+M~&)znXcNugFM+<~q15p=^;C)KZ z3iGSC($uo1lx}@0&*0m)Q%b3=3)s@=f#5IIVOjFsluvM7u$yxM+@!?HcNJM#()Csx z3dAPAZsB~pi8}7N1SlkG2v5B5iA#_-<-MdPTj-Z%TAihZwi)4k6FRvyp%!`zVOIOs zFkk$99Yp7|$sHf27=S+y67^BX;_9Z_&a#+Z_{(c}iKBtO=SX_bTM{?AaS3vvH!N-y z)b=tjW*i#wR^KOAvIipL6U&LDMT`M(s5kqO+KSwf8$F+By<@J|DpIgYiLmE&FjQ3p z4cqr~vn9XvR4gPiqTe!BAkK~HO{$BA_1m9r7^VgUP)=VQU_~E8h@uBtvkj_p*3mUi zh+)cNEy5)wuD@TFpHvY@{7}DYM4ad{$tDUNGE@Y?ZP8KDx?p_^b1xW%gyq0pTk=gS za3%T$MKl=h`6n2^Av?~hD*y-x$_2q8R+*Q~n9t*u5k-??jA0N?zvt8DqhF}h65}D! zF2(rrsGYc%YF@9 zKqw_ORl9i~7_G=A4`(V$LfYam@rXe{nIL>bUtO=CnY|~nre6u}%?x7eTDx7<1;pCv zWbYaA^ciL$SH`Y!A;WN@8h+31`xq1u;h9YJA$rszUjgG$9wr$(Sjcpsiw>^E2v<$&GmuV%pse*>99q}IY`#385$qiX^(v9nMm5yx z?0I5HZ}JshBHcdweUOAIMO)oKBM-v@^Ta|}RqnkbHY|0uwyk@$?K&w-hs?}vUM^Kg zq!Cpuu?WWGbrFCramHC)MpcM`DPPXdc6jE59Hk zsvSn2Q%6+v#&%Bcm;Vl|_>J+-+j2sD;<%2ZgRQ9YmV57d#=M<9-_fkSJG|~p)cWGd zbSHU#b$4Gq{r$GV<#$YODv*5mxK-ZdOqJ*S8~o}Qh9tZ#O?UN2ZA7v0gM_cB&8YaE~v`-d~F_=S!bY%I6bM`D$_JF7!?)z!U zX!|!gcOV*V6#=t7wv4F^3E##cWGf~8u$F2-9d84d+R!i42};+kDfAZqYZrpuFl?Vy zFQ-r`5W9Yy`Sg25d(ZSX z=WiV$LEBcWOW4A?;P>{*KAf2%dXGeJC3gSbteWVq=|d-bvtx^g_;w38qJgkvK*c_j z+t>a&1Y{ZE2`&PJ)pz?u2|*) zN3QtF?4$rguh=OBAC80Y%9a+6Q_R^=&|=|QlHa1SGhMd(!zy@^x{B+WasC>oko4T1 zA~l+n4-)@S4_d`eSv}OA175yj7gJ}#ya_6Jk2@ozF#{7j*poci!!MVoL$Xg84&(A@ zL3~fts0RFK4`0pgi#j(LPBd|_Y0YQ8KGDgKa@F57&%~+-l`dz^j*urh{1`z?s=GHy zj*|{n8dR9e*+Sz4Mu)_@7dD;R!eq2tHZ9#k)_}HzuE^L>858!BBrD=gU1R`pKrXW! z*w}t7y*c;lP@8&Bnn>LlQNUtKvXT+oFq5kjOy_Wn983qFP|?30<^lAvF+=^ND3F~5>dS(%bz4ydU$ctO^nI2$|16ApEv|pIUKJF47i8zeKWCl zspE)dm=jZv0J;6LAMZo?Y+vU2mj_ojW2u!0zKgII*=sNtXTNYgH{CVQep;?=LVFI+ ztHBU@Xv~0VW3VBR=wP?Xm<)fD2ZcJND*Aluaxyr)mOUJZb%E>C6(Hf3s$ZRhpDj$x z8%WkMD*wnNwr2Uc5THxhuR03z;Eg(3G%w8`g8#LACjSPL59D`j|K>yVo9x>^8BSOL zXt+-wz1hf*SMa~9_x`2S`*WFR9kU?`&iEyeT-nv~{bJNq?hABpyN*hrU^ry&^9qN} zoJle$whE3C{XGTqAyGn^8U${3+enC3|Ap$ZYqO*>8(MhE% zsARC1no((t2(&3NqAB$z?G(X~i(7PSH(Y@*mTo?(SUfE{iUuR=cF=-7PR2bfvN0IS zHN9qGr=ls9spi;_3vn0A8X39ejsCsY-#TL-Sg77}l8sK+4#xBu3^50&PICambUZqO z@*D~Z^&ij&wQz>HA`Sghd)LW8N?7FM+hTnf)Aavt4$;=p$<)DEQC>>eT;Iyr@Gocl z1Lejf`}t9M=0p_@pK9nUwOcLQ8RWEJ&;$~y{3sIr#>|+ZvCp(tvV1T-f3Onqw=n+P6QPzdb2oBk}cA_A!#6o;NG6)~;r5LC}f z^xn2LzK%|v^?nFOPwI9(B z)YjkdTxy$#SJi6n`9A;Sj^IBLguH(21}fC2Pjvsm?B8Eo?0?=6FQqjF6oD^1D0J}p z0wL=VBB(PE0k__SA%Ya;6=9NC;rIH?>SAm_&3N_s?yD<;C%wm0G4(r}BnUx<($mwM z8_o^KHlWYj+Y972eiN+`W|2@fbRSEG9JTCqTRq-FKNb7BAbtO_hj$O&)kVgV$FD$3 znj7Yd*0S?2C8AL71Q|ShyIFSJ_}<%ZUHQ^dE(GO*K%n$u92_9ocN);jG96w96Hy_N zivu_smB<+u-ztSsG{US9r{5-<_0!+kKl$F8sXSxBvnQe!UPor!UmPP&>`eQQmROx<0z(>43}W{ zOLnbOYSqf|f~$=iKw;31GmU3CP*QG@H_Rg7Br|}fO;II!7?OVpE??0NJx;E*_>}{a z)>xR=N8gbYIWijpEen=lZ|hs4Is$P3DApd5L=tK^kTmil`8ic(N>E)#;Us&Ho?@}^ zc+Ub1>kaz)1U4`~l2qlrWRIH}g|s9O9DI_01~9VTRg)Kv=0P`Gb71B>q`Jm&SrmDy z7%DXo`n zIeUhH(D4~*z76tPl&f5r%+nT1rHc7J%b4L z4S9>!GU(0GqoYUMx~8q=>d?^4Rk@RE=ljK0Du=QF7@NWY)#2JJF}3&tIZ{N>g{||- zLqT6PD6T0{3ygS_K9kB7pce|{>waTmfmZVT{;hzo1hCtR=_mcXW5g%O3ywL6sqSDz z8Atmjbs&mp|MmsLd)oo3yVfpb&{pj&?st{rRB2rD6JYql09>A(hA?7f#9~+Bua}njKOOCH$yY7{1ON1i=p&FA{)0gJTfX>fC|N4b zeQ28|zArLAmF<^aQ+PrCUT6{2vPllbueAO5Uz+p@Cl=43Zgd|X2%dT`>-k16$tD^K zX`AK>JRGN5i;p(f_tl|K1%lCXm-jd)Pco%`|PYQ?JFek6)GpnS~xGaPoV3XAGfLk&~6}mdaN{+|$hvjYMH+ z6)82$JeLz<0cO_BZqF8TxFGE+_yaqVrcq;A4wsTl{dld!(MGD7e4^fmR3-8xA(U}G zi>FL)`4(Tea`sP-3!wQCF*k#4Mt|jUo$^(J91V9($;@W(EzaH10j|Yi3$%w@mbw(9 z^QM)QT&H?>Ky$ibvel?t<~4$~@m?RGnE6bFOg+Ze;eq?!di> zNI=&^*L*B3iBnf)CfWpA@{?j}e12iwjf7xQP@+l{ueSKK=rrc^z0Om+B*A(NZ;I1- z^dxw~oIf>Yo_H9MdRSm}?R*bsRhHo{bQSpp4*Qh-GY)!}aE?eDS^j|hcUgVPFh7b4 z>{t<3(fg{$UusqTZTWgsekltO>mYxaj<80|4pe{O)a8XEic8h!HT8azS^@Qit%n;T zkSYy}qtU8^)vmgh595$a0aRKpHNtchW?Iknaa-US2R-x)_&>%IV(P*r*+(p)e%SA< z|3N(cc_>|4-%iR_-{`NszDyNOMO@`CZCQlee}|&(>@GrWH8sKsFP6&mX{uC2$LBKktP&uF=@VEsrgLPa@2M|1Kbx` zO4JyhM9B)!U`ejMf)Q_T;8_kjbMyixm#bijf1$xK9T!aBc!8S6hws*HrXu%IrO&A? zpM1~IhaRXnPasVJ<(^hfw6!_eQa&S*r+K(_LLLLL+EqVAY9%RZn#ebj^s3Yk3{JZuHZ_1`qqsC2g?h8#s>e=%a$pjBdPKybb3mO3}+ zr}KmRo+an1!qE`LXu_QF7kEw>wh!17D6?HRWg?gb=jIA+XC)s0Y(ct5ao`jg?@K`~ zR#+ZcvmYNT8?Q6W%Kv==ImNzhR8(h?a1miS5}M_d5Ix+o%8>r9)}#q|So^TxfHm8r zaMsw7*Xs~jUuc_DI?x%*n&xyjnfvd<{Bd*d7I~Gb4(aB6&^bFKmLgG^7ppkPm zsA=}H#f~Pb-eL5OtS$OY*>W8qh=sLrpbV17MVTJz*v8x=$S!lx=e(X|iOSdQ-vgVV zBAsKev>%ZQ6LDxAe@6K+d5qaZ@GP*O=mqE0tc2k6sM<(}AcbZk4nlE@qkNW>-nLtS zc=I_qc|pyZWuU2f-m3H;PN}J!#-tpo%;mFzDGSaVnv-(x5`f9DX-(x&8A@EtWyu;0 zfpXNJYelR;{LQ(EYwS{xO)u0hsMdV}v%L4RCtZnF9>ihgE9&Uvl(YZr3lQRzM5Kji z%EQ&IVlLP-m_|yla*kIdP-VY^@Wn792U&{^EvauZ4|e>Wkh|_Zw1~e zEJR|pHWgYNkju^5qsO0;W%$k-2b_&Lx|-|NhC7BO=UULwAG>{}|4L9Qh-Oy4Yq|2G z`*pdsZ?rBC9!g*~6bGPrATisJXT`G$T89{3`Pt0 zBtFKcZCFh3Fruvn z{~La*vJ~;3aNBsJVGyNHItSX{XE=4SH*{w1wN6Acm&fgO`nUXGtrYmAcgZJRB!50; z?57=S{3ZeJbdKF>c~JKDBYgm^;tAi9e$eFS5#aZ=TEe8?+auAK{mZ#3E!!i;4dM}M zLv>VotetWr(kV-O@$4Zo1`<=)91DNDBtJm#e9J$BUSDvU0yL2@_@9C48Z5Y~tu+`z zwIjDUp|!>**YbU{;Z*MAYI?N5{$S$?qv{%}XBPzDe7GTH99xX^i)b5R? zJ|0`J9h;Zk6Q;|Qu>jCf^{{7HikL>QxOM&6ErqY!R;x|2+Xo7s_3DE^1z(`^ zZ9}}LWhcAm@vor}w?SHRY^Ki$hBVnP$y6e0Y)0#!>Zxu>e?!^^yW26%dX0Kz91d33 z6J&$FLiY?;y~Gwc>q~dTv#p`=S{^xSR=d%!=v#9O?$LyJ)9w)C($XW`1VOL+hySh#QC2m zo{x%O-_-c;lTV_`nJSJk`a92OCc@NJbj>xVWb3jfNVte_8;tlTLCX2XPl-wiKf;8r zNTh({My6zi742<5pP$!Uqd`bn-d92kLYf{juSNLpB++6oJhB9GF!)I^?uYKJ_pSG? zKKGk1FKe#NpSc5M0Rs@{_6ZmiC)3cd*^uTDw|Wx znYC_1Cs!DFtzoZ{^lHw=v(h^p9weY})mPzOar4cJxqne5mbxm?Nc1E2 zj(cQzA=5U%+?v>Q+n!83K2xF;CZPs!;=$(qZlXx(2ZRxWOjTVp5o|GPZFMj(KuBB~hWOrPp zXh*UvuyU31FhFX%i^PVmg~Tp*$q#ei;PAJOK~&26UC!h})}M=*X5|K|7*_XjXu?#^ zbU;+ii8P5!YO2BP-uj9!<*mdQN=tWUjab#5%)t$r7#AJBM~g>W*m7iVxpAG9$4`Wo zvj8h_`YQZ|A5&A1Z+>OSWG3=Pv`xPi3RY?$9EXvxJuiW(?A7|mhtJo{jz-eA&aW$! z>TP6q=#79UZMB(of=#nTIe?7F*^ub!XFAny^yz9nXntggk6=8~^ERO)-4I-=dpVw% z_xbYOhl$u|GdnKse9Zh+z9xY(=yP3(4Qlh9`S+%~4GNaTH>7#aF)d@uMRAPaUO zS5=rcO0uQ$i0iG641Fp5xgkWI?{|PQ#f}H%y5DmHniU2@dz4+l=(0^!@xzvbH+*{NblGH)emM;oM5o8c0(UzcXxV);bg1kO&7uJ^!8zAAOk2W~cVV zDbMg2DyVu-s_7N|YHo=!OS&ljvZM3Ia3&fMf(RCQohovt$`weFHGQFg6`xbqswfQ#u zV3+kNUv4>61U**$Ap>FC*t=&7Hv94#`BJXLm=(Q~dku7a!yJdc1l@8)a38ftgJb{M zzoLZmhdV@e{nw4dw`h*iSZ^KBOEFr3w8blu?brFsh0!%SqG!0bF^bz=#TTUNE81|v zj-Vy1-TLKd_6xE`RI@WpxAdKNTxiNmMB*Dd=f#*bhMEUz1*lEUqPmvPy{a&;15BEh z9$q8-D)S($S091O$rrzQ2}Ga^&Gq3!Ci%jCp|M7{fO$kvx9scyw$fvc3>xlSz^*It z^<q=8!nw>!zU2=+ zp~NSFlU*?WYR)3daBi|C4s!v$c6@jbZr$`+SfXLB+`Td3h{kH0xe=90G)NTtxi`i) zAv@Zn#!?!~mb|-&0@}rRlqc<_+za4PhU~|o?hG_)!$iqqP)D>W6bv1bv{&8r^i2iy zSs?!?Ir<@O+9p4`d&HKw?|k;yZ3}<}r|+ZE7Po?_&%Qn^FuQhQ^;wd9kmfRH=W_g~ z<@$@U8aXh9wudfPFpUB{vhBpFc{j;b7V-?|Pqal}O0 z!eU8!W!lU48PcSdVgoJJjB8{`BBrpe0`7=ck_F`zpA_zk7%G3?H3_to_=!H6)?gP_ zm#KG$T$PwAV`FL2RtWN5f)}K^PYprz&kCjL7cFbAkrVURH&;Q~Fe%C-@A>}YS@7&T zH=xn+F`_t#6?+Q6V{fwdU36p?h;lT{C%ZTnx>Uu=OQ2hBn;4;RM_h5gpWaVY$tei7 zr8lSHpIfUY_*J~ZxPl~tjV^|jw^LjtDUVLyIqm?~-dw3_^C4gs)-~&`$5rrM{9$RR zr2BNMT7elyMZRidI>q0XcxR(NZO>=i+&WR|urOk(IVnebQBKTp;E z81dfY_#l$w|00saoHV(fYR%J4XM^v>{nM%>2Nf_DV0fk!_R!EN}$ zeGj|e;E2;X#t&l%QPvEI{M|KxYLPYtfHdnXdn+^(uV3Ich5}eQRtp;B30oE)yo%An zm(UfB#^OyJUdD-9t=EqEa@Z$c9yjQ=4~?tMPm8@N3VvTYrxAxeA}aY`^u) z*&q7=DL~f0U!JM3n&gU40qKQ43#8!pr8f`@3H@kV^>&Fn-oWGb1Z&j>Vop?>v2b_U z79QS*o=(@QFefx23E1|D`%R-pQMM|>O#L$&@9P}zkw(X*gQiiJithb)K9_y3I~(soIFG-k=TLNR7OH$dHa+5^HrBH8kls*3*uNwxnAN#?&GskHWi!RfW>#HkI&! z&=9+Yzn3Hs&E$lMv5gFA+nv@l`9DE=A|b&H{OP8GKMG{7IJ);mR%#}vsfo*3c6ZnN zC%bPh=~MptAh{RP^S zg-D+kq^Hn^G3tvNR>TtG)w&Xg33r`&jJ-sw)Htm{lq!?K&N%A0x4G!xlrYti^%FY5 zk)Y48J6j}EpLoVs-7IgghFg~$&%LauI<)bZyWm+XH%vpl)8u`Ka$7&;6H<+!fUc3? z>gX=mBL-||>Ua3aMU0flLzTgjg6_U2sV>O`dfrVW}A4G8r)f$Z`ai_d2bh{cJVE05jHdDU^{C^^;Hw~ zNg<6HF|2`+9M6bs=B#r0GR-h(hJz#VL?3Fo^^a(-<5d~5eW1zvf1%0pk7^mu@h7$X zoCao1NI6mNEU=P8#D)eVH<~Ac_8ZyA0G{2cnH9z@`~yBZ%zz)#cK#RFj07q|adaKG z$xg@f*67s7$DhwgpR75^m;gZHKdNPBES%P0unevQy;GD3=0F*FpG?mOnQLT#AkfKh z@?EW+F(&2aErbv+SG>M+Hj|4&DX!cw%E{O0p$Mnd675QyMw5k!Jlp)WKOu14a!XKZBl-aiSlPMRb?Bc z^K~j5_%7&!1aQwS7rJL<u4!v|V>x0-rCuL!(+_eKA|;6pl%EZPGOvZOp0x?O=zJ`@H&v!C(2y=o z8+1W_{RC{lE|D*85BO91CjFK5&p^JSz2FOd0IBqU0m=GTt^D&3W%?h1j4z^$xl$%5 ze6+}zRe?dXhgA}R!_`O-vQ0PIqvLQf0*btVzaf68Xb;l%hgh;xD$f$Bb-Q1? zxGetZS{FTxH8SKsizVEd{5J6Ox79uIwp=d~K_A>3;pIDbU5G*+6sZ1sw{6FFaSo;k zuuW%3Aug^&{Za|EwOX}1%7fM$qZ_{+M@|zNtz{4IA!|RbJ9|{|sZcb|QYXxaq%911 zJ++1yK`wuiDouvkfgZ#1m-nlc54BvotfBUEjqf^K^Nw!E!xul0^$)UO6C%yZnZ;-I zs2$+hdSxiSLcdCu`8NXwQiYzPHE7H2EKg4R3iNX`5E3AUJFk7`qSjkdTBtJz%+QBP55MQ%F7y&}%o>?f2u z%DVLW?4wA9G&MeQd0(;R?XMOuc~T*2HE>FkpOQaO=C>rx!%!2D>+rV;bImKNOlT+S z&%gY%ky<2Sb9TW((?C#?53anAo8~yiSD9hC_@|2uWzsjUhd-7t7@t1L{?By&b**4* zYVPRdpl@Jh{AXSp)nMI}7SP^wnMQEp#6mvT$`=@ZiU+7Shzvpq49JzL$M9S2D(I5Y z$NP?SoTS5kfmpK`EOcq4)7vPsZlKEK{p0g#%$35!p#$+>fknAoq}o`a8lej&4rZ0CQtxp|vzSfn8e{o0O%oE- zNjZXo{)@#X1LR}1P_sIgDLZM2W@*524r`g8Q2~Y~4g)(j<#ndXQn$4mE`1ZBEfLVL z;f*6MY%IZ6Ad9GFb0>{thppLtITFTq2!zHnNPUUK(S)&5N`&hlR}VQP4diYOi}zo~ zW0#c{W=Uh!NLrQpMVukO+i@tqYZD(|1iEw=z9^vBG2f|F7t&Rjw{xhk3VL@SIKkeE0}0q!*? zHFh$lM-WqI@aIB@ZDo(+QO(R~XA!p3@)$={s84gn#RgXHr&S21DywE! zE18(mjF%;GVxhRh9g4G7f{jx}5G$B4N$#C$t!Prg_=M#l|0;#j;NQ9F6{netETf4( z)7sLAnyZn54%Ld~G2C{dS;`SZw(h^&FUix;#Zt+U2Bl)7qb9I{Q(w|?nFdiP+*18s zo|ESvzR2FZw!;wr6GTN;Jcp>&LCc^=x-wJYTjY=tiHLVrv91LPo_S0JPFyRHPP<*B zoH0YBE{^5qQ8}^;H`KP+YRaa3IF(N#yDxLsVvBy zre5%h9IL&jhq6UZ$V*$FGTCf#hX}k#ayBOQSgA_Nk*r=jHQjPBP6-^?#UM05-u|G@ zrUR~)QU4y-x5Cv4G!J5nxwa^GxY6(QMF?R+Rf$1G-;m8s`!Q%7LRjUG#m;m9wHb_} zJt%`sD+ET&6*9im5`c2oEwZ%2f|{s2Jc&vw>!d`I`5b7B--CtFBk!$&e9d zgaoYa)CD}d7f*{#?>0Js72@4PRUNp$oIX#evX#GAKfp9N64ALr2!)nRU6)#sOT(l$ z7#G_cGKg3(GBT4Tri(74!y7<*kJa+69h0yzbH;``)uTynVDa|T8hUT#7* zWzmFfyw_+g^fTZzIZI_UBFma`ro}f{WWTrs6cJS-a~tBDT5`3=sDoz-M)}Jjj_`M0 z{cU)^cH8)q0SNEf1Vom#&rqw0vTsRI14)#{+P!$A(d4NOF?cu;0b=XR;x)yW%6L;o zsy7tO%vRg#=ARS*<#<3F&JlUOuA&{1(&`qAh48+w!k{q!mU4lpt-zoQ)>- z>CB#-v*F97`GTJ3AYA*c{Y)Ap_^C11772?k>uq;WkhL&Y@!Ly(^7j79HYgk$Ecja0 zB9@o^@lsnwG-@nXjX;8@SD^s>YcSo)B!$rBo`+GwJU={$ZySN7+lIn|4B1|%Fkv!U z{JEhZ5P|S(vtUJ{990SGFp1k!M|^ln&>ffoZ3?8r+GDG)?sjs#DyB>Frr@uN+h9i2 z->xcbbnv6ahzSQP(W*iMpDjD`_Smu0-q@ujUdlVdk3Q_{zP{T%R~nhk-dVBU93Etx z7{KEtG#e#)Pxb`{o{tRL?_f@?dnx(cqVHkd5=*i$Jso(92gE1y&%+TVXG6WGvG!Id zjgW2Sd#rT@K(DVyv^3Cv;OrWMD`B!|Y}@%Jw(VqsiC*%>=Ei)nC&|Qkaq?o@wl%SB zTN8U(tE%1F+U~CY)qlF`+*`N$_BrQ+rgq3g3pY}G5-B$U=c{b`T8R1KGuaKSmgL|Y zfc4-L>psYbq_la<`<63uisCtT_w>YC?{{r_a&r=;qa%KFx1Sa-3ZBlWqQXxZ6E_R% zok3SdjynbeIS#CcFz6=sSAH-LyDdij2II&)mxF;u+{M=9%CAee{3%)fipE5E zxlob6N3)D-n37HIyb-~e89vQBe<4b&7RQx}Ba$T!_px`%)YuoP(sV7;?syK4?l~0f}JNXKkTpv z*&Fx?frU}_$KVArdao8Ah?>aFXc02wch_V|Zjd{^DGD-Qz0TJof-<7vT8)0}<1+-F z^Zw_zX9HA0T7x8o=fry=3bajfc}M=|W>QE!agd(un5Hq}mR*aqC!X@N_KBxP;K8xX zH&3lV$Uws&@u~0bEaNj6)UI@%r0N2I@(d$sUjZ&q>Xj?i2#g)RCl>E2@`h!jfEVqI zy)hjoDyfT~)}S*4fc9%qUBT0L|QzmhlWu+KV&I5!uy#P-T6nI%bVMLXe}Sn|k7%8Hv*`*l}r!-Arn| z7SX+wK`TOIJ$lNStKhU{A9Z{hbFQ}0WEFSS0?qe)KvVz zc(ZU-GQ#PyjMY0)5OWZF->J3=f@X$Bx!mt$nX((U1@V%n)&Hq^TC7a3J8!yU;7qa| z2O$(8uz{5K5)=aMQC5G00f^tuX7t4w>>Nbh=T*YZ%hnVy!&NyeL+YcFj_ zSB=7%(X4ehxB~v8E$-QE zVwc!+WYjse*SixOWlCYBJK;xFnj2>NS5bpKZ@e*=xv4p9HzUhKx)T;?0k>V(Xz*0o~WS2lbElD?>kMHV`W|-;iVJE|>)!I)B%j zdW(s8VcHFfau~Y$R9EPy*CEd%wxz}KCVO@|TzE=UQXg8gLt^5g@eVzgu0DdZ?$Xq5{z188?Xc1*1knq|}4rj-K!P|To zg<;*{rOGB91x9Eb1K5G}gTsu!$tIMXqaix#kZ_fAlSjz}!vfnQ-FVw_;m9mP4P}Qk zWD*OVI-AIDUwMTSLQb|=Y z`>0kOWe25DFh;M#6&pKdb(-kwh5Zskq;s_d`BIJwQmur9l+xov|bi}I} zTSjBU1SJE+M_8nMzU+J&lOmCON%sD8s1Lzh+9E^_3pl)%2^ zU~X?OH3F?#zTTHA*YvQdIqMRqs%dvcJJM<8y(}3G^t(3xsd&dzG?AtlD?7&hN!Ac$ ztJljAE%S4XiaeslD)eD1l7{nOxUVs>VvaGNg#o*M?<$#|dkm|Gmf;1)e{Y zuNr%|9Enu8=NaLc#P;WTq0E~e4q6lzMx_v^B|`QR388vNAkAz)UKhW^8IWS6&C^lv zHeJP^`v`N3Eu16xt+M&pC8?xEfct@S@-57HONM1~PQL|`CH4uojZ%R91~*(CHBaKX z#m|2yL`P55_B=KziI_ef6wciCO?kaH#qH<*qV2}5Vlijck?HHZIP-# z>`j}WU4@5#vLts8=cd%EU+rk}@b`XgQK~TO)tMo)wt;{0Aonz}Ls+D|;Jk=zf)?5g zE$r^A%CiYUC{ zP8Yzr8uRK9tR8&j0ySgM+H36ssmNshwh?*2NzvAzVA#h#cxXgK>K0iY+BgR7HiPqWe#gs-TYiLa(ct+s zBq~1$!zY=rmDc)9eE5Ln1PgaJi!4v`EAzLVxwS_KdlTm1pq@ta{)dd3!n6QG^mD}p zv<+$br1XHZ1q)wMpJ`j3^)k}7E?yh&EbM|<9KO5p%{tuH#f4u(oW(>%Y)p=m=%;0a zRi7Biw|(eY<)~1<$CdZ=@{MCZ9sq}VR zMhiQCahC*-;6EapY!~$86&TM3R)DQg3bnkP9Z zCDL&7vX_1SquQwkh?D{gx~OVhX<94c4+yXds5Pmj+vA9HKeju{b-^sUKTQiiYY~UF zDKcaAcB=l~)6v_IC#p z^Dg2v(<#zk{ZQJS>Ao@}JFhBU?l!yr430hOb=r;!*S|{885$pm@bEnUMwUngJZ{ zIsY}d=ZO%oG5-|U%DDfX#_^xjr7AU_-HHG7jF@%cfn_E^f{7AP10P#wiNH)HZm%N4 zrzi#@6$H1@kIg;FW_fT?noGMunK8@bTOv1{zb@jAI)R)e0Nzij{aXV&UA&aq=?7BJ z;%U6j%~vc}n~zZZNN><863X>aGY?*>e!6$&`YXc zvmtO;-emLMJX#1ycuV2%)R$f_W%QKfv~nLPK#l$70Bj12*IX%6&?XYnc`+}m_!$1C z+-j>!gU+;6if#JsT1sNk6$(gWL@?es_lJ-_{8&cPsNKEkU=GnK;6(BLftSkn6GOg; zhS012vLTEzL{Wg}x5*lQ3;tb?!bJQ{+0r28eZ7RWg!TG;@4H%FaIH_sMQdUHw;>)d zCP_SBf-SP16qjM`xz&!8+^Hiu8e*y%ejO1@{TEnZe}sFrlevL$V&CvE4n1#jv1v|mUt z{m`U+cu*G{e7tOTyss3bE4h0#>*F<96dE0gtqBfhPpv1(C=3ySY|u6U0?+oo$UeGX zzl54CP_5xUP#y;w*txDO?Bx08u@qt=O3J9wpwkOdL}yBgHvnq`AiDixdA}+wbxmLn zQS})IN@|tMU(JzIxu^x~xlJ-AYB49|3(6s4rL6FXQDXFSCRiy;qj<|&-;h$l@q z5!hPP>{idoQOSEP;@rP^3&5o=X+`%33eKBK6QH?D&m&HDI!O=4C2W|W>=6N!jVtM$ z1ZW)Nhwzdj8+LhX*lcBaXccra=YiyYBaW!9tYl$$9x_7Bk{u{}BQz)T99CM3R%V}? z0)T~l`>IL#2@M&-hsxR}f?bV^>p`~p+)(vf=EIWKCHH+`Z}Ak`ST&(%%j#OKj)c{q z{@FfopS?1G=gx?C(G>wDG{9!#oG1dtouysL@_b6WZX+g`mWF=f#P--OC|Db{SaxJp z5QIid9U_mAyUy@oxwF5*5&RzVhjjWaEj{9$U1L-=_jDoz0U>4ey9r=Bg%XM;7mn*< zqumLk-7lC8CY=XSF@RTq6(1f;=R1tmKdO<$U>_Kt|fYmD#trIXt_A}O2DM})~ zY29T$gYZ(jtL!ID<5Uk;7yJ3o4qgv_jeM+gKSCJMYY$IJ7|u(siKgydb=2?qzTIHH zu~cV^;JCfQH!fOfgKhI|FALX>kfoCr9i6v|33hAR- z63Tejt6{k#lXayU*2!xRLAYV#haw%bF3ltp*+ophw;vCu13P{^a&^crjj21N1Ai|d zr2O$DB9aqvGv9taREFzpS<1N*@nB*dU(>x2gN`$) z%X}LJ0m{UgvH*J`9nnEA`_(7V>>rV#eCyFbNqQJB*t+ORzBYlQb`KU0+(gPLN1C% zvi}wM8;1|?&9|z7Dgr{?o=n5NX-&R6<`6vBAzYcXr)YuB@U%^slZi5|_28XvS7^aM zGN{ZZjvwfmRp9$E-vW2N)H=y2xxP#Z-zDmR)MoU>Kt94hVh=X! z)xUm0kWuNVe}0Yom^#*F6-JLW$)d{`RzR0_%ZAS^=oW{_7)~XlTiuIr^HGxY=Exfn z8per&9A#va;1>a15J<(Ny}SY?dRGaFN_z$Ti?6wQr)%N62RUIVWD_l{aQmI(h`(Gs z6J5AVo(*0lt$kMp*%q^YFE~OjI2lw8dwxoY5q*6^Hpr`HmGRpAt*ZI@i-<~j%#Fia z=z0jl+SCnfS6>r38xXV&B4%E{x%fr9#~o8Y>rtj0tMjINmZGxoIFdTO}72Ne5@y*G|&K{)b z>TP`jp@9p12I}+_Iv$>(WQ}V{2FGPyY2EdK%|A&%CPfNg0r2!ceeU7|ybRkM;2S(q z<7SZm(CEDdasD_$I+sxh6}zWkWKHUn4~+Ouu%DbrSZj0OnLLpM1+ z?AFYLyyR3yI7GD8@m40;RUxJDAdA`Y5G~nyG1O&^6gCenegy3bLpGt%KrlVR%x}!W zpbdp(F)5rgUJUzers88K8WfFt*x&cTB)$XJV*8aqS79G#Uw)8C4MjE1edqJW#cwSM z==X0U=KfG{K#msKzyl;+xf)N~R5y4&+dPWyW5pQ)L=-aM+-hO3r0&X}&KaIOrVn>J zE)U#b(WH#T%piX0@^JDK%!=LljsNvSv}t`WxFZ@Cmo|Uo=H_N;nsMC*px_`=V5zzi zH~#3dU}VGWUYDWTZ*&BwT?GqndJ-BINWM7|!1F$Lqps}PM^4p?x>>q^_K8LLfSTJP zOjm3NkY5W>D_$+~8eE}E$0WmBTv6?8!y?wx{~^X*;o4`6hGtzne9`Kx3)+o$sIM=F z8MV4S$BgKFwX``n0J@uO4V%v=8e0aQ$+DuKGxA~2Wy6oS?><=&7`gD;_o?mi+6na! zsLMIis|rxu()s@h>dff>0qQ_oR-mhyla-k>^Pd^@CdSTYEOy3@j(@5vFH#gE*ZyJ_ z`4JkRhvk^;)*Pzxvy>b|XS6AOtqwJXX(kWL3{oVz^Wm1|n@`S!Xf|t%=Dk-b_Y2wJnnfAKL&Dh)--|9fMcGf z&B2Uu<3siK?0rv8VaUuzZ)>Uc4a95OC$(}8`a{rUTIKCJ?Oy2c~7AalC zvaK|M197o0qw(e412y8dqZ9BNZ}SD$JAYVrWZboH1!m2E!HlB2t}JTZRc&ILXUw8edFPD|iyd6U!c-s_|!o zSfQ#&RDxywCCUW?KUyaBtCP)2B39lPoZ@X)PFPVL>>!R~nxmV{ViI|ItNWuCG<$K) zu=1KXlOicU$M$cb6w`%J88`zKB|fQksQ8bK6h()#2R}fDg_H1`#ZdB|q3zE%(VK}{ zaAp&*KD8j7Mp?_qD&vp$!`msThWdsfRc{jRur)$*LtSzwB;>hAhpKH=b!%$a;ecwb zt9%{}YsYpfzQK3QEXS$0b}%c?_u6MlC7DrHNxqAt9>f-_`j=v<^~&z0Il8A(xhr#Y zKRK!?-u=mWL6uxOxp=c~)bj^>e>9G&l9k`OHz&QQ-=o_z5ZkO+Li_Z&TY{>)ARVvF zJL7fMYd#G=A^wi!zxd}n%0BL96hT15H$y-${Hy2kzqkXN*}GV|{29*dENp+8*2Yd5 z?XX(Zit#)VT$g_xn|$!@?)-dQm(yC%@a}&akM`@iahGfLf{$CzhnJ#)-e;v=3>=)B z-y$OtBh=LW-(b)mnvt3FzhR$~v$TlD#3vRJBxKZaMV@Z081*WD)|5IP?h1Y)LVgN? zKYtcc6*18=7v_#sQ2ADKahI0#3<$*(^hk65fQHI%q#X7<9+?CS?B@DKpHOy0cwgi?B8y+H%uB|m&ZMc<$wcXvaASU#b|p0=Pr zq9as3(0_immhFH32VJsg!%P&ok7i9oi03@!>+rZ_wjqPo#Of#5!H^B77 z3Yo{n@QzD)#wTKbf2#~d@=?{LNLp&%P2RLX0nwBQ!-BwKLcCS6vTCEZ*-B4I`_$4E ztVE>9L>g@>uQ0JB@tDY%P>qgzmM}7l+Nw0qsdHdB^+SAq%kO$9mibII4m}M90VDj1 zjSNlY8pb%ruR2Ppo_ zDE28dNVq0=RJftr&wAGm((~fEsB<1|_JBsBtsh2}I&;pgr_+ep-Cvx}Osj9aPc1)4 zRPxy|l)A1y$r^MGRj@jb$?y$Xm2)Uu%80=hDt5yb1Ujsfjh0_lj36TmRIQ<*T13d< zpUeqOGIg4rvvV6U!Ov+a(dgHRxIEhQ%RMYZwJ>wmHIoy< zPM5}0ApV7b0AhMNpnU2Kv`cxWgNFW`HAJrP?5_~k3On}@?$`2yZ>y`zr{EXgD`;JW zk1V;{bAqWVeIwe)Gujk5WVj&FkxsXSmKQxyC$@Y4)jI2`_SX-}xk1|^MX}$z2=^BQ zoVPCP1QpWPI;C*N;KD_$g)o*_sNn=r-eqZR*cDvVh8X#(`TLHt@RKeKwFP?}H1@nN1ukcofXt z5+C;fcao`HWHg!B9k$n*FiDt&+45hqSTC{FF&8@Afo!aDkM-&8c5reodE+O_S0}E5 zkRoA(xdq#>5v05(z_U|l&3uo9dDh3jTRk?1qD=NZpDT15O_*aN;Q-$4D0Zj2b%=1X zP-E`;V`BMDc>EfxSyK>^XnG}AqWh#D`-+ufZ=RDTg%($!?b39t22pfwLgbVuxvk(N z02Rs;7)Q|coHw4CI9Q|z0yZb-D`e4HJ3 z!%_2w9WHq>AU|2TVLmy(fcYI51)gpLM8pCE5Z`t4gZH;osXqE=JzLV+pfgBPCoU8> z*2@;6&)Ejpf>q9E5b;R&ASNaP_N>Y=$@Dxp zMS-s@X5G#}IYO#{q{T_O?(u=h7UrG4pU5mHqKxrGCf1Y{`Psogo|ZooSGrkb<}jwR zCmn8GeWo7gs_~>gD{NrmTqM8XQOSy*KZF=&Y;j_XXLl-z06MAthqHrUA7XXdWRpBz zDfz_TPISYOES&~s@Z-O7=t_a__RO{Jv>!V;A5~am3<}rpWDj*3oB7{b5qp$9nKt>yxyR+%n8S$i0rY3YE zQTHwU?a(!ZGJn^AmF+^|rP{;c8=a5Nw&_t?N;I+WQC z$xlqp+db9AuHwxLRw$@52F{&&{I0wu9Sia$qm!Af3@I9VSa(mTPUI;e#e;T3^%&zA zs;9$5p$7<8w$u9e=_Q|0l-Vgv!!$>I5uk zHbffPtcve&_O0%?d>79dtlh34B`%=?I@f?XAzs&L)1PO(q(UmVO}NEen6C@se1 z`ZaP-We_A(LugBjm}WjiIO5*#j5p5UmVpWjobi0Bw))7i_M_md zD8wC*%f`DuPb4k*_{FpN^_{|iM*IgvYCvkIZK2T5TVhozGfJ&& zP~=)f7zOxM$kuwv))^C&D@rOd7fU7YSlXWwm#j_j$}+E7#X6*N$XbUR=R3YmVSq9x zGWUB)jaa~JbN&)OJn{Eykqh{1(UqMS$uGOV;6j79vISq$fQ;cR;NoLP|A){Bv)uiC zU74vcz^d_RW4p}QLilnQo=hE_gbFQqPSD_;1c}o$p^}92S829N`iMN*5?hYja)MU5 z*tlusk9Ka2b$P{a{P9gTX6{4HlXsY{^trGew4sjHHpx1`*Oac8Y2Du#$k1N`==lGRaaXis)S^Q$c##R5|Nv&0|9 zmqH;N$C$0S8TYxLlx%Mxj?GZAY`HcDWNdul(G<4KVB@~F*>X}f&$;f1t#660eBC_r z!*fSCos|TT|Mp}NTm9R#s@rr%plX3>=@*aQN=V453cQnG3{k|5eb9ZvdPdOK) ze3If=^tt69RC8@vfk8}5r-Oz1(MRF4lyKj_tZx^0b{s{TbVQuWXnsw;>Wx*BGOc#S z?o-V8Hg)!L5$Dl+|Fvo8anJm{DafBa8c8Xp3!9K~Y*AT#$bPlaD){#zkLhkJqFKr@ zN1eN0eWj)wCYBs<0uVJ34U0@C`DmSOQpb;$*D7E!C&~_?WXF-^fY@>Je*15_YN;d= zb)sH3T1bhcD5HzNL0LYQ_skp@e2m5jS}bOieCwZ8Z3&)k`JPu*V4zRUafqD*BCMhy z($xXpT~!uoKM1?fBEnE7g13{u10)bu!%32TIsBQ9^K-qw)(ynyD&!o0%+}O+$ghHM2R`>IuGp3J%h>48fCg7F zNlF09u*>Tjr_2}1VaEU=xmI~~8Ar#J#hEEwhr8j?H02C^T?(ZAdQMIZFWPtH6o4m0 zvRo#5vvauu@!B5og4iQ?c);v)#=aBVv2=o1Ixtpp?>ZFX3Xg+QPaxXz%Z6 z(290y*&t+*?!tUy#Sy%82yVBzE2RvX@0nNi3F5DxA;jHs_AvJ)OYs}ic{v`un@(y< z3L4w|^@Gi}=b5FXHwJG5%!G}zGajnQ9i~5g8Q0P;X3gCqnqcbi3q9qK1o4e?35l0e z%zlm;ti#qVLC0z>EV;T37cIc+23hUJ{qFcOgfoJew(IW(*J`nI$cH!7KZ2exR}-i| z(Z7IC48F`%B1OptEd>BDlZ0=Ub}}=>$fnmEs6V5oZA$xMuHU!9I=?nT-!?WwT@8rW z#E$WDTzOPhu!?^t1)zsNEChWpAwK2w^uT;*_LmkErnfToJa?O$6sDbl2yDR;qsY_9 zilV>CQ4(eB&r1)o%88{FqHoU@EDx`duxyc3=EL67$JlgA8HXG81nuZsCWOT#0T?dIpY-#>6XhYF-vtCKVycWW1Cx5gx>3{;@H_ou!MyWyR7u^Lm|Clr z+Ol8rZ~s2H?1tKAc{@AZAArXuDSRT#~-y>_WN zCobVFfc;F`<2pUo?dh8uUPZsVnwMTNWhh4!d-G)xxirwTk;8w^S>HT~Ob}kxWYoGBf`L+>X}MA(7|3e1JfzUuVI__~N~EXmekv@_*BB~zA`@PV1 zny^0nyO+#yzGp64E;K`x6E;@2|Fw`{SMJWLiV&Mr*S&2E9lyrQb<0=1_aNdv*Zmbh ztf=X#c!g8RP8YZyXyfL{+VkBD?#6(4e}RvS(?H#}SKT+cwCmk1i+a$4=s@*rkJo?^ z3ylSC3qHHz%XHCagSzHOk)>lF-Xd3T4uV$A@kt% zOl#)jZUW^2>)5AEW!3RMd1xxt+_K!+V&exb71K$RJ6fz^-Vh2$mE$GK5IDH-=B6Ir zpJlr~mrX7+t?r*d%gN=Az73q?&=GKS^rThO)JIL4(GA|*XNKUKG6tvyoH?rypqy&8 zaKR(v*jviFX-4_(*MIfVZ+nJ>f}4uj(!}zQO2j?!Cl24vu6kdXcbsDhP*WeJUn*M} zP!97WkRCii{1LOsdC{@2XGY945_-*8K&JDvH!oqM@15az%Gt?vI(WYft|eWftzkDo zN2!0Fbg)kxt0p>uWBaA!XVr+o)}eBW`r$qq!Liu( zq&P0AZP6!ftgU_~=!hw#^_b^sjS7o~jyVQ8+Cyd!iH&jsPg(xa=vlG*O747AI;If6 zr6ZJd5BUY|=j1sxwHq*~(7N1!s5X+UXiIlAJt7mja?`w>NQXi-2R6nz?PD%cxnD`4 z{5{l?L851pCmzb={EF7HHJyd4M^p-!8}EVOMp&;)Bj0Nt%Gji4F+2>C7mAqXynvqH zkxFinvOi?+Fas3YkBw;CGh`i3e7)UpMi*)Pysc3xPI+Y}V{_U?oUf>6oJPKtdEM?X zGnY0BFV3*xcvC$tu2&elkkbgi0z{~#N@K^T# zRBMM;Ya)yNJ}GnRQ5wl29c>vIbsW{#K-sdy!$+!}5C!)G8larykI_mV!;s9*svtc! za=8o5ec&1(Wkw&62b%(di}?QD{M{cE)YAsj9r@Oq@YRq+Tnl`Z%efcE0HQu$;ay44#|k7q*+5*l2Vme z=QYjrZCVu`CTGTSqK2w=+vhb{n;W*(4$I8U1=V)D&pU3XI|6*GKT-2f&+moaQ=WI8 z->=?!PQ3!38NKcvR-Z*afr0f&Md7B6wq;){?Sd4+j1n>3%7 z^x+i7B+xh7!M`MyeOR*NL2N*Wgp@$EC1|Bf)i!jcW!ndaj8ras zImBw&c7H4Ff~;k0tH&(8fWMF=R?}yRlv6dY(Cb?oi#Y{N^e#5ZWQQd?tp=yJhh-yC z!<4e#H-UPS5^V!xa4b7{OK9F(JqQ2Zm%Ngo_}17rt80AU+lY}5Guq1>{16)5sJ>8k z_W&_K&cDEhoO^DNv{wW_x>e>4rWg)gI`vy+NQiesJAy=Q6s3Xrt?^W{+h;~%0{%=f zjoX&TuYROGf-AAbBHz9*m0M|Lv{ zqJeA_$=d0Z*G8cbW+v1v8g!4#xFHQ1Vf58CorH5Se39p`m_zu~MwVg2&w~>f&R<*M za9s{q8Y_N^g*p;bX0DQg<6LfC@oZuydoG0#T~o7(;*wT7f)Hrqmn+*5_dv@&-l zMi|`FkHyPzfK9ftoq&vD2(E)>u5;L_wxzo8BV=-q=BN$W|0obQ;1Fxh(vG!^Q>uTe zyR^2@j4m-=*sdLn6HZVwnm6M~sn3s^`1HNR5QYaGhG$< znzn%8ygJr%^pzr@-I<_=4a+hxC<4Y2xcQ@909R4HTR^|r3l0~C9Op`G1X63?_U^;5 z&->0n)P!|!(Z3ktZoCyP7WT!zrvcT62O(2*2L=w0dGQMh!dirX;@4Ubs4CPy5sns2 zOvopf{*_9(b}6M);m2`Ma!4gRCiT`L1pJS6YdqG=eiOJ%*#w-qdBuc`Pm1KD3~SRf zuO|uIu07PB*^lOyYoRdJ?zPX9_0q5(cp$!gx%PUIEv;=J7oFKfSWC-w(m3u3F7OY+ zWKHuA8W4U3(fj*e24SGJq!hkKRT59FN`!_yc-Gv(mqlKzP!e%B&TN$|~GP z2MdYLE&qnitTFje=*$1~Mp#f?3ve(Ione8Rn(Mr24(_hQ6NpPo)6%dQftsQ;NneR@ z{xW9G2k}I0%?uuvmYV4E=|Vy{M3^y_zi$L#EyEw<`@U#1w`-MXU*J)0lyVSl`D2U{ zwyNR`9iq487eNiE)GyXNjAhA$ez2LP9$}YspSig%BPz0O^#P=7I}lH+zWq;Fs`Ayt z*@P0{OurbxEswTHNZ=wWxlFQxUGMgHC?`!WSAF*}RK9A0VqPz9SYbV&j3LdEY?VW88f!! z4TOONY-iH;gyEvWeGq%~05dpDQe$NJ`LmrN3yw4EPiK-8Eq%QT569AAiLup4iIVPW zM&>=$yFKC9dCFOI2-~rc(ZSr7?56~6UzfF8h?6s-fo?IT=EJ8xEJVOZKUQ~wVVQc6 zKbBap_8S1=Y}}6@LSmzHXa5Ahv6ZKPo~fRF0U+Uf7OHl$gl))XI$RRy&nwS zEh`Gi$1?AWITw8XiIH;Ga;=!&!MO&tPL?E>1i_|++YrT-U*GOwHE%y=uEguO3?jSY zgFo9&+*04f5p_;nIG4FGEG;c9`yLxScHDF$)2{d>I2id(C_La6AhbjNRpWZH7y`Mh#pLT; z_Bl?g7w2lqTLwhJoWOlaFx4mT?2|$G>Rf9mMyl0XR+q2*-xpu+LW3=j{G-p1e{$_I zKqOG^+GW=&rl8D3$Rs&2D6RKTeBHsxMM|V*nFjWsf#9d38~53cO4jR^%HEv01=Ib5 zipE73d1k`Vx>6a4#$5D9I~@E&|%%pE)kB+eGVvSasimnzqV@ z0rAMvE~}vHH8(uvOUHIKDq?5f>lGN3vS;Egz4{;r8j2IT(LrJJ0t`HpJYaIw_?0#s8EYqK>Hc1S;>mE zr_{qyLclQ`XSJ2PX-VxI6FgvvKdnFf+iUj8!qY3YeQC6spDz#i$5IbW`r6XM!j|@i zV8(k}&+vHSxxr3ocFV#F@Z_g{fpZc;@Ui#A!5e%J$tV^x3my?ZvHfz-*z{&k;eyEc z{61?h8+IZ$%Cnag#${5CuwX7WC$hWDD?ddv?zV#U%3KU?zM29->ple~@z>GynQw^L zS8XXwVX>Zjd_M*1DuU>$e?%i9qsh2^C+zp8LP}5UZx=8N_LSA)Wuf6b^?JL@CjQcI zA$Yl3BHYs=ogssvb~!leCG>9R>VS2?@jjxE%BP zweSVIwPbM;C)uX&yVeLs7jSl14l+8k)0bABBqk<GC^w%m59wMlspsq$pc+>5$q-bpDGXF}b+-yzQY;Q`=uMR3+)yvYoVC5FUd>8*kVdT?r>RENsAsnyH>U)OX zzk284YP?dAU9uP3R)5w;m)xZ6{u7{t`1G4ws3hP^t~p77kSL%Y|D4k`B~RS1*@Kd< zEFJD{hF?t{=c#V3UNqnb*<1~Bgc@3>o_BeQh=3kD7JW7zW<`aq^F4t}65-;(KF>`K zRIgNyrJ0NQ5_}41O(TYY&=@bywR6wwMxfqlR3j?=Sk}x%BHFe3Gtw(5L6QeMjlN*I zqc4-=tIxErwGr$2gUKPI3U-`BbFBs)O*P(~bZzOJyDpC1VrA`CMb370MH~qvlZvut zbFn~$yUJXkL`ti#SV|SM!e`URLx%-Vf$ij$>35@ryLSsN2!do}qz&aU_wUD8>v@35 z`pciUy=zgq8R&5&k)^~pEWQwLPX)R>n8{t~ymsk&)Zyw4% ziyIg@YUNa3X&K}$Gk$HVM*@VBU{sP;IP06_Qh&hMMBsA%*-8|3&|6l~I3;J9qtssau9+nWXIP^4Olx$0FKmZU*^Jp(A z0W_0sQg?wdO`Y-rS{s0cE9%Rug)6d4cffP1CorxvqpN`Ka%bU+;<9JqipHV7iE3dc z*|VkTZL+QOu19gh6~ItZow`C(ZL$&EBnFUJ09tO*`_kp(Z=CfjFpO72gL}?CjcKLE*fCjk^P8 z{q?Pis_`m}LwY|K$+;(?17(IJf&|;p<|{M%7EaO|`d~Nmc1DulwpE+i_@`&u_qM%c zHQiqDKwCh&W3<317d($WFed|ZiyvNO5!Gu06~on#ZfqO+$k-1R!=)eux1ORwJt`jh zAdqGV68eCQfP7Wbo((l|168+z!45O9&@`WwRb`!Z-Ku&PH|o^h!V*nq)((kfV=Q2u z^jQn?H%RVkas#r~K;QnT$Mnc|5m=Y}W&nAYE)*605*Fe;n!p`ih4g$DBJn zVoUslopt?*7CUM)_-LI>k9x>Xbc9d*4rz>;Teb#D-A0spom3l$pqB)`u?#)Yf+;v1 zeBpRFb(E>p>S{P~ypQ%{fC;tlVIyge$xbR&{tg-{%nx}zxl zB`ShgASAkbcsP=5Gm=@UPXajK7VKBS6s75|GbfgN`C=_bID)yCLDux?D; zE$m4)rF2}`EjHCvB zr!8k^@iI>@O&P!7AdO9WMnx3rAdQ_Tpqlp%?lk?8N$^JWl#XO}y1sT-=VedIFgubT z*==n;J#lZM?sqzU@j->*DzhG0eBl&vQ2@P9q5$@W3u6X3D1`79=P06dD>CuRXsn0O z)WpfOz~S?*F4zbyYA8qa9y5VBawzmTH>u+vl}@rI?edh=hG&}*JrW@EWJ8VMmaK`+ zv>=VKhYbrtYOD;&vKq9=X})qK{kF+FnVfoyC;c|1=bnnU|F#uYMmD1Ww&vgsgz!db zxUK3Y$Zxbh#Peg$ug%!Y;*UQ4u5f$Ng*H2Ba2xkd^=XY5)htpR>pTQz4)?ZXj9q@(QTJU)_*t`R2;iWZ` zd$Oz4yc>@Myep4L?v|HGLVEY6J}dQeIUeLg4J!knDzxvj8}N{NCjBn!e&Xz%*uch& zLAdqP!Ltj2{i6$-J->CQ{)+X2K>%Op;1517XK7`W+%z}t+!Qy0+>Cod!!P$}hTro) z;j~Zgn?3vMo?nG3Y+DZ;Um5JnKQ}t3yfB4; zD%)?_LfL=nGTNKz0^7>-;@!&eLf^`0C6>M;j)?cU9{BLt?Xyxr6a0SLKbVi~J=BO# zd~b-9=tm5s5p){V*s=E>5kSbl=kCAXG4}5FL+<+CO=x`Q7@pB>u#a`Ea|6mmu8qd` zHgX@V9nQJ|wqdozSno023cu_5BL?j^I+swNTWbsFTqk8{KhQkli8T}RQZ_8=HCdUPi%2NJ_Q$i zVJAK!`}h)TE*)tcY?!?#?fv3tzC|W;A5=4p$uB)(;g2k$D!d!IenX2Sb@y|<21YRF zMT~GR;btQ>u1|t>2^?We9Q!ROgr&snh1}BRd<1(`aN+jPz-pG zojTkNqICo{v{_lY)LJn+LSwh;01xz2hXV>}9n%}yh9?es#taRquumsdw@g6?Yl>1X zFto9DT3BU51%+++jE;`LgN@W-CUwkKRXxMbhBm3JSOLUXyJ=O!$c8pkDHnybVGsIP zf*C`@PqF6{s$2UL2P+IQ1{I7~uz$+Lf#XGpoiV1mg>LDR$PgnSr?;j4hq7jNM8fuZ zZN+W{vK-1x?7@%$RehS;vxEi`t%)#N=XW~}uBdp?@X=&QtD(iHCY_oKddw9Kn~#7Eq)LdK1tDqz>U# zk$U3^O=UR3LQ?sOX$j6?@8rSe+FEr0>wThLzR!l9%0E>8Wl0RK`+XE3-zH!B>B?1o zAVZ$Yuv#4gN=^r2R-4{b==ZoT)!aQ!+;L2z4*fpa(_Jd({KXm7bO7UJ-R~QyXN0+gP#uRmVH!_Q$h|Dzq7rB#mr0b|2$`!^SV``MWa;0)s??2ON?Q2yWd`ASWebtOu)x+w>(_}09 zL&;%jGbWH( zUKqWZI#x~^XiTT#;0zJuE!u8-RH=g$Xb#jm6gvhb)#`J-T409n<-~Z(2&+LaP(+{|LG*ab5P7{2N?59*6B-;SWN--Bu8!DPAZKhis6v zv?lcJ4;_ZSGyXN)gf>mJTyp?McQ_JRUYAQ6E|DQk^?OOUN~-)zsXAN)Je7Z`<^YB~ z6()V!-h>+czFa9fJeIuku|$nsXc)S-9F<_Hrg)M#9CKu~tnEd7_43ZsePKZkRuG;Sn~?+8{ZY4;i$zLM_0)fhoajWN1JxA^DyBP;)nSY zA`8PK>$Dt7n7mL|(b6Di1hF>5;|<7lmUS91yT@bwG_Qnhc(J$%7`@4GC(hR>R23FAm_E166jl|((yN+Pq0s5U}FES zHa>-RpRM(QOshL?2@4##Bsq(L>5lEU9_aF9B* zj@t`w%ne5w2qpsWf~?i7C7wM*ek}ZUb?;@p`|@JLKOM)yuvF+tL`Z*(9^yfj5pO8(@1%SV`{_qAn7y41AUbRQl6Mp5_ z{5p*16)v&SL-gsJ=l;&i!Q?F%!B-dHhiy|48}()p5sgK7e6@z*Pwfb!hUtm*eyxVf z-cJKk;y^0zp|d&PXwTK}*MVRR&fVz#YE)odB;UJ5hUGs#@hCgLohx=AMA|2gO;YxX zlXr6fx&YbuD-3?E@<$72#QV@U|Kt)dF>~;F9u5plgW#`@D*v_u{e$mkrjI}7G2UoU ziYT|ebTnGhXEC#WYJw^G2s1b-xdF6}&tu}G(o8Aaa_kmf)_GY-l0QlpCXKZ(3m-Ip z6go5~lSV$(Rab9lY;LS9Ocu9nNchPry#2V&%bLELQBH>XNx^a5b1yu5AF%uEQ*i2Y zfAbqz80<4!0+cGXsT_Y{iRL6?rxTNhWgE|6hHdtKW`4s`o_3r0g+b*aMjs{|&gg?h z=0||-)BjWvs#`)15s1XlWfXgyT6LH>qd2jU462k8PqS-Qs>g)eACqL2 z6RM$ZpcVhBCoa`nXuS|i87_}%WS)qne%k{s6`Mi5Y?WBL1juz{PgyXFDg9BA29!Ub zqN25Vj8R)nB^zd?TFM~Z8BR*gTqz@v8*b1vE6@pDJG*e6(01(st>oaQ*3~uPZ5Gq% zNy)J}4Cg!0y)C9=e0{F~;xER(&|h_wR^+;PSahehUy2KA?Flpw$8=NV61s);_F18seSSU(C zEoTvX*d;8EHYit?ye=y@t8gu8DwcX_?LXQef6fX|*Qrq%aqS983U+hCYZ*$=UV3ig zd1(6Nf~F1a%vL<%QXLY9-K1W~_l;F`cTqgeJp~}WQWf5kQje=Ccf;jaWum(f*gkJ; zuhkg`Mqe>BMGr?#Zq=Pn)~2b1ERmDLCvWcT7WsLN)*L?+Ic$+=h`PV7of25Jjb}kC zPb+9kwU22{F1Er{49~8WBMb^_Qxr93-Veo?Qz;{L%E&txry|=}S5}?xSMIOS{LBv@ z8ij!ByVPC^NFrT)Ix}2B%=q+WGAC3#g^g%g)AFPOo}5fI867`Sf&{YWP{fhik$yQW z*O1YsCe;PswtQ@g4t@Zg6_45Z$3`ycT6)2z0z&A|bt6=yNnRq3T++;ErYIwbvuP@* zG>AA+#{RB0zG-d4Yt0Jnl5ee(-U#>+{dShQAz4~$@m|n3$oR}vI2K(9*H-o%Oty#6 zdBb|g(!AaKLc z*Jsr6ngXVS2lnUy?oMN$Z6-V>G@W>P|9rFlBKFUEtWn)<8mSy!a=gVoy4A8towrnY zCL`O1&eMiziUxz8)vf@ffMW(Tw`h0CwcP zuez1)`byE+TPV(kon{&+lWjy^ng`%;mKiV%w_GbaKGyy9O$d<@?Sn<-3&l+6wxi4A z4Rp42_5F|X8`XpK81fA~HB%xc10W1W`8x){eudwS5gtk`y96%iZnv2Z4$+M#kxoFh4a-x&!U64G<-|+O&F3na&=a3hgBHa*ge~oJEJo(rd`IR3myfkw`ua>z(&rx-Kn)D&u`oL!`{r%4D_4U^^p-} z;X1cY3DNDmIYI_MOXIHb3P(ONX^2mwMnmTUmv+t1b;nK>)xil~y23e$n!1yo_+9cp zrqg9G27$e=IT*vy7U`)vp53Cy`xUOrbpnjyWKRo@Tm8$>-yv!u&0+M!n= z8E%?YA+xM3_vq&J=n_Tfs?sNBZg%OmzM4J0nmI5G#rV`aQmkC2e10t4g|X|4^(bRm@ieIl5w8+sS?M0y;DOVI z??BPsi1ir5nY^x@Gvxx&DdY}|veemtqs-{fWrlgnEMn zuV1_6u;^nR&E8yqY=eZLUliGbnFIO84?ig8Tfw(^YuxdIVOMQL3y-tGj z$srLwqoHYLGp1?Xfhi^m*~V^#CMTkPKb_-RE8!_ zO(PePC-;olDb&k+a&niZP2`;UD|j?O(KfhCL-BUn0j1RSAdR$h{3?yHMS~BW(|$(6 zPuyC>n(?rpAu%|sT-T!)XMa069}jd+;h7UI4hcFvW!II~_}s$$+D?dcDH zdqCAs&|;?>rpfGM!U4g+;iN;+y64kxoN?n5b;4nYcbIA35&yT{uHzrBaKl1RV#FM9 zy9c%MvZHmR!QIPZYO9z;)oT8u=c6+42`d!dm|s~DNOip94Tz`U(C%T1U!wbdL6N-w zwD5#CE|s}YovBZ2ARVo}P?Pz7@cBa(xXWuf=5#Btd6`@Bku-TDD70VedG7Qg@GB%} z10$`CR;C@d`S(A~6j7RBPWT|ez?7iCz(oGnGsXXpTXUY~rXxNZst`1~zPLEE!$!%o zK*_{wsaKIKnghv(*7d=5XJ&kgWrlCJ=&MdZIq0d7WG)fJj}Q(fB`?OXF3cf(c#Ajt z>(~7~PB09uWs;fq#)A~8($HHYys#V1H#uoEufe{tg#Byio>O+$W?OtLXgv$ubQDPi zXIH=XYBy4&!8+Nhjyp4^WFy2{dmek|gVphB{bYeaM!|8Rd3%K4Usl7>l59Bxv~<+( z(YR|7i`fT9B6(RsWR>*l2`tZ{q?|@3LpMXn&7;NNv_o`Oi^w($g^v<2#fHuYxC(_2 z%tZJ6>ftu!C-r@7&)#$&8mP_;6<+Es+I-2?OKA)&H6xqs_z@E?e|)+gEea!kf?I)` z=cm>WD0)OmlBX0{h)*Ge{$^d4DoH?miI5EJ#XVFfz89cZwaPGU_4dWpdHH37O7toW zrvqZQpf^=I`7-iTP`geU9ZO*u%5caEo8W=dIw60Q%Fs&pz67rqY*4wL^X+jqls-=e zd=e2Vrzr@7hp<8f&NmLR(o>dBD?%IYih#q)Wd58{Men6hnPQ%!WGKK)f}5 zlY@hYBf$JW7QJGwmZtx&ce8;LffTL~Ml!Ew3xLfbc;O4M^0LWD7T<9*9e-4Lk=Ml~ ztW>b@*7rbpJ$7B8@*UC}@>WK)C_$1c)jAOKAm{dgU)eZUH{H{^CyQ@){eC+4R^<1u zN1ou#@-o)`x($~$nxZ+yorSk~`;iB9Q=5)J1zxLhukE!I?!=O7EXaP1Op7+Bw;DNy zrwF2P>j8UyHYbF}X@S}H`>^!`G?da!m!lrc5V|f|X&5V`wZJ+0bL2sby*D(83V!s| zvusn$Ax})0fi2kgHgmQvN0dbiZ)fJC1`5N2=`hI9f*uMXylwNfnRsa1x1ApQ(U5Oa z`p6Ge{$Y}|Nn?0jKm_Q8u@dK`LT^Vgc2X%si(6<35L1yy_Mqzcu?$5)>gDb4J*EhA zOV&t+m`lOIkto;PgiNQYJtm-iMN9X`_Ka0UTc_S;yIxgBEd8n$L(f~jYfPQTRsgbF?&tJivuar9AhiE`y+D?9e z&%*y5Rj%wl+^?Pi0&uNP8b;;+b>fEXvS`byC#j!YSUZGpu$E%QGO7i;=xGZhgbRPh zWx@mWMb)sHxU*7z!xEBis+`Dov5zSe@rSCUOIgkKS6AT!ApupGbF(x>dm7Ii^0i|n znYky>00u1i(<`?ZzTg*7!6%wx8g>ia%KU!VaU5nsfn7wD(Nko^-ne!hSWi@ZVPk4(+sxe4=FaEfzj z(mjgRRqSZKD)X@0IS;v|J1UrYU!Q$Vf1*n7Q=L4)8yWHs9be=abp?dCm_AL;kX6z~7b53_p4X5aHSRanj6urK| znb5bF3>tqopr%X_VXtz*wWJx-r1^|$F+EZ2ch!F&Ki;u3)bO_?&`!1Kbv^x=Tq#F) z(wkg+w`ST{m}2Qh3{3un7%9RRh606y;1Qf-Iz> z%E`2E)VDWQA5qUS;}Q?q!cA?4;24j%O%c?Xry23IKwcWxOjc%^iB^%+O~udb^|)QG zHQ$`5$LbZSa>|0niWikEI3h&I2}RlMyWVgDe$_SD7!l_E(lMZtL(ps%IRpR{`isd( z3eQ~R%xKukRm<$(8=zh!m5T~dz;7U*h_&48op!b^mDPch>%#tyDmj!opIzjJ zF$`Bu?MsX7=`4kmNUn>&fsu)v5et!|lX^^$ zxS%=mx=&cV*|~v`8eKdD7k3cUKqmO?XH+~&Wxm>gBj-$;TYH+*vpBtUYG%N{NV~u( zgt+WnRB}eOOslRgb2nHrAZ-^XpLi0@!dhT0=kryQf4ZVdlYh%U0hC>(VDx<8grK0o zu`Rhr5MbpLXH8>WW6(lax8@xK;u-m@8#l9?!P>Jg@oEf>OEt}&XH{k(PP05vWP&7e z{^0({xu9d{#F+S*=)7axFK4frig?1~&CjaHFC(8-XVX_bc>a=# zaU{N`2)#U-tbr5ef|QK49=a^Z1+DO_%r&Is<@+^l;vtccAB01We=Q0^hEBMMheSi> z35T5iCToW~{-ulWcfI&3crK0KKX^eRd6~JJluta4cH+_cjbaRtR4!HS_1O2aP`evo~rn!`S4@+HB9#N_@>CcQP~rr`wtV`FxlquP3iF33Hh9V z1rrchSJU_=FuY`fDd+8oD-87T*whTKny}4z+wWQfdT7y?FpBzg%$!dkD+WEyRc+Rn zFhL--RfY^V{G-@~h9`M;)X|benXWF{91uiR=3qPdoaEMEQ{H7`J{wA@%1lf zF50QY_dSrY;LI_EvJ5GLT2bF(gT9j_;()C<+JEMYOF-h3v|_JAw{JF2tN!d9`u1IG zbVYudJk|5@MYvisi7koq4|5bAbd;}9f80%q-E6)Q6qS{mWZ|qk`X=Lfc3VA>YW*)t z`*oNKp27@WU-W>^2lWk2%ehszlp*}}iVU7iev`yhBMp-NJ-RHtQ%_Qje}5;m5Aeh} zIaL_Sl9fWknO-E|u)KXMUHb1Qa_U{9;#sU~^FVyH4+2PC5=HV!GRSqGXQTTmcECmo zJqK&BUo0O8in>d53@PQ$e@Zu8neCIi>R>z*owsUj?%wII(qEU;kjHIh_)K;S%xf$z z7gb}@b@#=$>AQoFC;--@)bG}Z#L8TEhn!A5ze+I))MT(@s+!cql#X{i&l8J)D3{~8*6{SUpn zy$K_cd_@pMp1(h_C*8$y2`O?EldF{Ny5cRJx$^TBlm{4rrg1^i9t%5eUMbLGIU7iYbJU9-Ql z<-30V&Yr#2AIP4+)|axuy%v(Pao!nXw(;CK+~1Gg-*2v~o9XJZZtJqXy$Si>puEoP z%|#x)Nr=*!X0~hoBxrDkoN)jrIN@((KJSAt#!SQ347fql#3_zj*r=kaA)Q;Qsv(K{ zOQn!T=3M2lo|CvypotTS(I3MtvPxZ^d>YRgitAH#FApXID@Q)gYI8X2cp@vLTo(f+f8lGUcN0>4*ur+! zST&^huz|g;-tB_7kHnA3@6I6y3%x6+c&&lS%MSO(bkVR)!+#ZsxudbFNMX8; z&6n2g#6Gr%ou$62PGNe4ZLGR#PGP!*ZLDDn!>Y|*{ZrKMlpMUeFX2e zV*lKWzsU2hhW+yh{+&AJf>z-Y{+&5y>W6M(j*}1A4C3#sv{%*e?|x$kO1*P=c@j!7 zyMb*D@77@dJcIw0<(-MvY5>PcDfY6^yP*8;Q1Uk`*s}hZjB2YC6n}^D@3b&&K6J}+ zoRHv$Ibhxvbbn(z>BPTV#qf=>Wl?!U$s&ot#tSXZQ)QQze3{0_{yvuRA6=RQ`H}*w zO!`0?`#3FAc)F?_1r3~ILrf4%dmPAR&-oC_a|{JuozSkcEQe>0fjd5Emua9CJ2E^= zhtNJ9`O787YehUiZOyqM;GC!9nTX6<@}P0w`n=lbj1!3&njP#;*j9N$P~%b{*l3WT zgKz7tdBGW`)u*$UHK&_nL?2nq_j45XrJuQWx)3d)gA+W@zN*touZ;IicKQ45nRdLK z(rGQV2DO$ftL5o`DhV~PLEOgB*^xN#KkorD*!-G*G@2mDa(!&OgVz>)-pZSb(1^ME z|L=OR2|OV4u;2V{@#oJ2iuVier4vNQbM78CGCSXJRmp2HO%RhU?$1o1oK_#4F5aF) z;rc2}KaaC(Tbwv*2Q1=ujfSum4GWju)4@#m+duhh1z zRy11CAU#_{3|OfWl2eR39wc0-M@eJkJGx<+EXjq;8RLAC%r1{K8{>QjD^*0M7wKWr z6b#FZ1`6&~Cp#-4d%MAWB9b@&-aZg)3~dN*dO@SyzT-@dfb7plrX<8a|L!Cdv{#NsyeSgnZ=4BW6wn3mYq^qFMSWW|BqESV&`=sGdhtAv8tLvt840S2M6r%>K7|?EA+5&B$pAHqpi$q^(e@Wx zoXG1jFt0!e86dV0W$u0f5HZJqO|u|_+IOxjlRLPO!bK>M?FE?#ff5oni+%>4#DUiSh(xJ^Ga^9?pY`xX%%8$qn300+{$G<&WP@mT z@Fa0Eq!1-BR!&c=6$MHv)RPj*{SFegN=`8Z?Iw}x{XqRwce9@p#I7&<`q`SAgPN;(paEJpUQ9v4l zo2Y3IV?ZYI$j$+@tJwUZy?=&~IRVTX4-{I65&~aHiiO|+tngvhDj=_V)B+#qJ_BVm zhNic@cp_p>3|syV`lN)cDndyOpxwl7`g+U137J2E$zp?6l#p(PsQ9sgi6;Q7Xa8Y7 zY8MAfetAKp3*sq4xoETMh=ZF50O4`48+qh@A=-BM2x@HdaE0cY|MxbT9x8 zdqA;cU?P$E_+;)`a7Ge}$;lr}WS%6sPXXCH29^_hG?|)c&~2KY46T-*AfP&VS_#P* ziE;<~vx?k2p}j6dX^o-r94YOQID82;-nujRC8Si5UXXhe7T{6z9jr)>IW!kF(rys#37({VA%h2Nkw-4i zqMg8xt9=iayljgUw@NP!NS03d_)QVpE|YB@-W%tThIia}wy%Kt)Juj8_{?i&2$c80G;^5=pc z9&Q;UY5$9Bc{jWHnZ&$f$j-X0T23w}RVb9Q)|d@x?{o@D=?VY8V_G`A1=}sLH0J!V z%T27yWFhfEHa@r1oxMs7rrI+t^I0bWYjMVHH8Zih*ENX{0nM9_)Iu2$XrZG4iK3iP z&j9sJ<*~9=v|URx2i)#Z_XCy1>*5c$3)s@({k}CP3_T%yH08VP9#s_A(oNDP{6wwE zVbLu%h;CX;d=?6HT_;xwucFw`uzA9j^U+7#~Lk> z4~OUoRkIWJmyw;rXz~#UnN@Bju**yPPW=ov7m=`cjf4h#LBOQ79m_+Uh+hGcAL;S! z+UZ%>Qb18g?)n9Jc2nemL#hUoU6TT_yOdd+mKzc>T$Z+P@}CZoF`K+u3(N-2FYz9M zQcif!B?2718L}Pkz9BZ!LqB*qeom-!Qb}1$jlri$tHG>49i-|?BXs$;De0uDS_86K zqM@00BH|hzKn5H2h@uI1;>s%cp@V*Si0GEk>G*b6J*?N+fX6dA?eKG zTPnhS=pE}&I))Pwl_8BYSUGwj?M1;CRG0z;MmharTZK7+>xG@ZnFuUIuF&;9aZ8McGGrN4~z>{<I?dRq5*3TD@I>_6Mcqgd- zFK%oU-QL>ZO5!o?%}2K9w$QF;uagV}RCVyFPig=LVW!^$c@2b^bX-s=g4C7a>d|xtMO(Z8ACdKFaay1j_V18N0 zsaYe((N`=-DxEO1k~}l|XC^zaUXs8k^r?Ly#wls4eFDo!R+^?p!WIL=@u4shmx0vJ zm2-3V`|>#DGEvEDh57kJ=>Kf>?BtG?zlbm}CdB{8p|<}=R`29$@9y^h2DC!M411~i zN0*2k8{6eof85?{V|FAUz+t2fYNi82Y`9q5OYWXOemILCc)sB@rZhAJ8k$#(t5Z=~ zG?@w(BD8qSE5Y>;kD8ikm2ln1s%8o@x+v8+=NK`g!+M93`y2Mx(fPN8-_iB&oSe>` zvkU4}X>DK`n7TAw2^rM_mvjH=z%Yl~Gb95$Tzpagp-gn#F-CfM`z7eJVAHFDagkj5 zgr<<$&vQ?IM)MHrIFv7~*uOEq^WeEJa{9;~vB>zWr6o3MM1gfr@W-ibSaVt5Qy@a? z<+ePs3Cu=5Q{MK~r1s|+MUu(_*6E+}HLfJk`~rcf`p($;_s5S*yUJD_n`4u2(?2w1 zH{;PQc)6(3^PPR}vOg;}vuP?r3_9iNN?<-NZ^6b+g!vEteW`2l^4XB=qH9(MIMQUA zT(q}%z_j)wIZPQVj!M}*;I-{#E;24d8P-iOlKLC;DKubh4C&{qQUfY z?-^-AOkPR22qedcgNbo;G+E4i$vY-nK}K}Clm*s20$?AiD(HY_nEWT8!sHC20Jmks15xNhBo zDi`7Z7W92+#HuP^9A7ThGZ(~>1lB>7S7#5sli8m6f;P1F^4eV_U&%kaUdM0rmn`_b zN>BNx6_DTB8@#1)&vVBh`;*uHt-zxGtVTWqkJ02ncm$I*Ktxe1mgcLY%id)CO)14r z`^79>vwv=lo?2a4Gr;HDE`L|Y$cf=C)=+Y(n=9rhit()Tq8Kr<&KAnY-6cI7q@M&OVv?TBqhpDE>1j=zDfek@dA9F*Ow~ zS22Oj{LpTmHVh-Xmx+r*<>Ep+#xM@ya-Q6-v$Q9*l_IKqY7VW*qMi^ z!Nm`n&K~ZmQdT@}0&Yj9z{~Zwz0=@x!MpnhK+>bv_+0dQVci}|(90hQiXd$dfsxGA z4~z;z6R+L?NkF#0Oj5q>Y+e0GEIPQ>`hk33xvdW@h5(syBUha8C5lY++0#C5r;G@e)WW3Gx)Q`Yt>WsjVW zs+vTDBZwQ*p)yV`#A~W#d>OD=?v2Hxe^|3OMXv!E(DV__%jIhPnVBPW%UyH&TD6KZ z+Q?kl2H6aY%p{2&c)W>yX$5-T?HuOf1V6-U(mFu2bvX}|FL zjd zkD25;n~2J1QGpgvxG71gguPQepc5Q893Ph7>AllUd+b)hwLXON!9ILU*PuG>i`e*Y zyfP8a<&K+*pbCoK%%QrXJ3p15bro|6$!+VF@|9sRr54XQ=RxCa54pKN*@qZ&&c6Z+ z-5Z_qSQjkkh~FRD&Jm{_>dq0TA9~NFzz@?Ip;nZ^DL>E$AjVB-E(EFQnXoV&an1vZDeP`ef z%lPd&pdKVy;2K&1<_~Thk{p;(bCCg_A9xIAYB{~v3Q)SSt|Z$#&j@+fnS|@q__U)< zw}P6Z;+|;t_d(=t4=G3^12tYJK){9c)_K#htOCIJRlX?sbTAzI=A z#x@lXrQ>ynwLxn4RO;Ut_UrU-h)g4D#=T-tUiy0@y5Z^iUhnq2crK00yNoJY6)vwb zLZl2=iYBEBZ#+wu@u%c;_pEfozv&;x?J@FPGL#?b?uC0t%OWOk*ADtKJ18n6N+__8MpQW4)7IuXht7Jn2Z%PA&tx9E7-I}S%&vh%C2fitgD#+tRot#*dXV87e_I~!xgB9btduIco^5y(tHD%#@(45saz4&xTCwb7KcW^&+dH+Hs#S$rw*4l4D(rh29Y}&U4 z(_c&Ign;^`lpfzFFiRgCXi8qg?f0BWkEAMQK-bJTa))k&bsLEB%N5! zV3SZuJM+xCAs@TEWsZPBl3nRvbA_C7yVB>;ny!}mkRErTk|E8@XrRUu)C<)~MrTNc zRcRBKfB}|mY1X{sU{6l2XL`k3Apg9`wub8l3^p~o+%sO zE&1BltCf+K?QkB?p#X+W0CxMjm?gE)jIx*|7Tb*NKr?~2s6s9CiDS(V4jycsY27ys z#zpB=JLyxNehm$qzW}({;9y>sj%esn6Z2pe(18gRBJa=726zUYc0k}UpYH%ZmB z(+qRB5pMe)^9-{^E%!h(hA(}?nt8Y7&Vskrd&?cA+MdXLmVqgZpjErCSb1y2mQNp{ zCaj*XSgc}F-VKZIl77-1Mm=Eu&u*dol-2PlE(XRB)&G1j+yB2?2=emvu=DqK`hPb% zm{?^Pm{9#A#$rovC-lcQOeASTUP4SW6k=lTx_O$(n;ER_#F30zW z_lMy}vK&_r=l^Ul4tf`!RNJEKD0$;UjSOHde!qsN!K+i1X52f$sN~G0_glfzjNR&S ztnI$P*hVl%ga3$#H}>X=_Kt8>`Oa}$i=1b<7#-@DfT`V&au-kCz4|oIE$2p32XK1S zTP^>*NMV1D^D@hM%Fj)rZrk_#gGH@T+zVr>_r}eG0v&8kX)OGD)mc(X@TzBe3*5n& zQiBDRbTv5$Qb&mPN9^y4gCq0Sy;Kuyt#oyUX%oJ46_RG-(za49K?%$>)|Qs-4F;df zAhla_PW{sJUjcgsg^TnhxiMq!E^(*V>M_KGfLZzdq%UM0RvTx3l73jX&hUR>zqZ_q zQ&(9~5xs-+TlXpLXEWffM4UsCW;{cE5K98TfPbIXPI@LBpI zE4dv7x^q#Mbo?SR@v)a8AG5r3T>22?e6HQ33tXuUnY;`~tO|zrV3JpGN9kpfh`o?_(O1MyQyqbCL*4#cWn@&)<&%W6xnZ=Dxr4%VXN>BvXc-#?*t!i}aAyC#^v7p~@LeHMZcC=m0e zS-A+{sJ4f-?v*xBbN(*E=<5AkOBHocIT()-`nx;m^y{~Z?(Iwa*q8cCjRJJ@luw3K z)G3mF_pvLfw23oxi>e=D?YC{5avjBaQ>}=fU|BLhv>06RhbSzCIKAfky=-(h)=jin z3=-wd(8q~`v8li6E{2<0PU%VKnEUO^Asq?sD(ciyD{*qqiniPaD~h>4S=AU$S!m+c zZtwSYh2)A>1c`b~RL*~W&%TF00~voarai9!yHH_RnGS%4w*<6b1)wG@K{ zfY95Uos){LFS7!3;z>HAYo{MaN9~7X+~1HafJ1K`S3Z3{6Ye)Fh}YdY4O`b_YpoL+X> z&QO157=lkul)u{uhM_Y<_4@*U?bYvp@ATU+&2E;opt!{PX1Jeeqgf3K@ar&_&9 zFOKMCxQqU$c~2ef{*1U@fS6U~IqiK6D~UFbAdhY0AoHNFb>fU5w0QS$YbgNkgl++%K~GXOcIuvm~LE73-BbKs(qI@yE}*$ zR&i1HL7HLk4?MM=6p}2qGaM5N!8ggcHyG?%XypKzxSVzdnd|1WXB^=U27Im7MI>f0 z>oPnDTcb{LOZ_c9*PTS(K!dJQ9qC$|zQ&1u{Wx*fQL`nwm^CBHTgT`YOw_s-5dCJ! zy@#jxO=snnXysaf%FuqwAMBJpoz?w$ioX&KkRmqAV1DQ}TES=&CvSZG}_DwBSvG z^g|61QZx~@Zw@LGN&Z*sbiu=mGzbAbObUf44WTnqQ2m?N>0-$pR7mmWI_ZmZJ zUXO^^6D@Lg77L7TYYs_VF7DrHetF?G!8l#{?}XO%eBpmhl~}%`?^&nCz=#O>KivbU z;_DUQE%^U@8gpIWP$^IM>s*aky%%|^Kt`pY%j_Qa*$eX>2EL;({uj)G&1G-FcJW0v zri4V=ql9OCh2?EU>yq%*zCxCbADohWtm}Pk0+K?n5yC==UPeJi{NfMW!DMn@kIzqD zE*V|Q1^lkl`E*ok5q!8RoCgI*)@i{FV}P*a2y6-DoAuB-X8g zooyW!FsGod2ljXRDwgz%Woceu{~oGFxR0{B3MxuDHLcq7)|gtD@I~C5akgiHphiTEwT;)@B{hAP zksPWhiS^rCBfZX+??N<8p|A4(HK=5BEb17&cD|+Ilzf%<1ffK&(xYf&=wL=jPM_5) z{~twab(f&AlZu$>A5*bt$5cL@4@R6H%M-*VU%vXn9QeseV)kg_(7@A*cG`jHRoQq* z`I3tnN&T(=?d0c_euv9?0%v*=;pLg5rs4Sc@Q(1ok)6FusA)i_$48GKq4UC=>#o2u z&riAE8z+t9J#OCymU(>g2-^Eo;lm>`JYGZ-;V&0vYdc8U_$ueg+xf>VfE{f z+qs!})WS+vRLb&`v%Sw<-3j1V^8)%sKZbik3k~}m(!c=@ie9$A1_1l+M8|@$GRXc0 zya>QGIt=!FJXoPaz9^sdt#w(NBDHH%2H&o$;MY%T1tfibW0%}H7oxfLZn;Tx;1!yf<%1oQmY6E$O%v1n1rJ{H9i@iq=!*>h@ zn)V~VL8xaf9#CMbeU%2{@QweJVAr$Y0w{1Ke$YauEG|&n&w5{G zf;i5(9{41QfT>h>UOnWV*D|;iZj8SCIKIOpzS-Uu) z;VYW&9%N@Vj5;t$w2qI@oY)W#C6cIxWiA(**7Q%>twg54`{Ra^|2T%yyS z;Y<(KH;39CsY-y53}J&Ui1b^%dDqGGAclS^zf$TKZ&PN(F=x&Ga))w5Zii`L81;u{pLEg088y8D&N0xmaF8aCV3 zxGa$Ww%y{rUuho!iVMmHzR!+>SQBRj6p6~P1Wg8e;o7(?-z}Wkz+~^!&>!dy4Kf(&si)F^```%t=V<`Ni8xP^9W&li>$_Lix_v!qReWNuJKkNwfNY<{4lwKaqDk%Dz-!P8A->&&3 z>vlFm!#@UQxe89J5eT!cMzI-um*pmC8y$M2JSTt=TrZl;J*wYLgnRvdhUTtXkt10+ z%(_mmUSfj?km>zNeC~0a>agEJRIL!h!SH3zNB&i!+#7x?u2;0O$K&PsS1UbLzP@&A z{yiI=04=edFE&W7#f@m+#gi*I$YA7DMI^WHUWU7$$Sc)Nq+s->_&_wQKK_(&`3vek zk$>A^1Ta#JA?Kj8*~nG!sh;CZB7;HyfTMxgNoUin^qg8GcLaxjjznGQv;pL&i4#h< zZ+Tkzri-Sh&dtz{xY5PuCF5HI+4SVoR*_1f{<-wm!~H8%spJkHWa3!2Pw)Un=W8Ur z6x}bJQ`g$JPdEU|*C#Fw5SY&&x{od?5k;u>usfbFeT2O$qLqSF2Wpl>R4emTcAT?~ zubsIci{Df$3s-eTwmKV<2H!vSowu)Z+bdx}i{ao=9EFMc-@o~MR zfFw@Sop6TWv^Zr**T;6}CS)aXX^i3u3ZFc!AZ>E4`#DbU4FADC-cf6z;baMTf zaja{=*Tyve4tYQu=X1I7buXsUMVgTzLZR;ky@*ND-y-ogqS)K*THkikZi(~jraK=A zzO*_-d;}PNVK_=8_+3^}R&l_?`IE2rgEEnwaqPR{oNF296g7h{RWeZ!_N3dO4$j

SU-^vPfjZA*`AZ@pxgjvr2P#{2ba1&z0%KrofHnrk}b?HUDwBX2fR)z zCDw~~+k2Y%AVdlK#WlXiYho#=ZlF>nagfNj+S5xGJKs3vu8=gB?A;H6)Jpyyj`?uZ zHk|e3^y^8g#;qcVj(Xe~#)bvOvDPgp*3H}WbU~-F^`FgTaNWtE5DPR=Vpdc^`o4BJ z{^gz zl-CCv%1Z3>lX*JLG$ zecL$RaIZz^dVV`Mk6E8cXWj4u11z*qH0q#P?)PWBJ|SIdsK<8yY|Z*O7l?T#h;!Mn(xgB zYIu3$)qXm?AJzvSzLEH^r;tWbv+%Y++AI62S93q-6@)dbvwDhglA6D53p_s1{IltT z7cs?>(|A?6uYHkC;RV7ADgMr0w^o?U$26v zvx<6tcJvR+{Cr-KVUgs_?KEUJe#Vean@XIXFjTxH!`}Lmp1tFLK>YOVX9Z3NF6`f4 z{bVmYZ6MvrYU`EKaE~xwPf%K1FL)^i;(eTd>l+v7h=B&3M}2;xl;-;^4xgR=_XaKz zuX+m@H6CHLhA!Yy&pacC&+R$W#|sFjNDz2yM`7{QI)y_xvBqM*ldg3o`PamDZfM8Z z$cxq$E#8c6>$))UUV8r6O^m^x?4K|76TW=x^tn5L{a4Mf^34^G&C3Kzudml~s6C@_ zbDKM5gMJ|pn`0ZD4+^AoUo@iT#Y)c`Pw7aI@*H^ni~M$Kn&_8TLc<#egpjoCV8o@G zc*KxIbOhRf+Mb7u(x->BmP(rH$GpFgFw!eFU@?`b*P?l1nTYzrV zD@NplTd8k0l)ps3{>YTVL2$2zSkgo5JU`T4pEaY?A-my2EE%D7s17H7p8ES7uwN`G zOBtX;69RR74qm2o#&)HGKQUjJA(l+&8hh(Mja^Y6K2em@ZNh_Y*!s}1Tqr4rei$R6 zJ|tUzQ~ElE@k7sC0=`TRXNYE!m_e7kLQ5YViPZEvc*wU7T{l?j<^6D@y;FGj?$dk z6;<)vN+N#;;idd~{Yp=#rPlK!i%%s}6AR!Ge;47U&a@+^`>UjXcx8CuG$hwyTq75% z!ZKN>ZzyEiV~8gln#~sLb=5u>B+WONw%yqtW%?}r$*H-omDWZ z%J6zmo=e=VGp{djD=#dbcCvU_`-FsPRkjZOwH90tRjOR^t_)JWT&Vp!KY+24wsB0) z()~>xr5zOcrFev|Y$&zl#(-v(kF|SAzjLADpJnAYf4o_>g# zh-}$Vgxcj>npIiWZpM-um9iT-{qS!3)q49o7m2rHQr&?B_?d_f7DN4*wD;>LbK3Z- z!KyLk#V4ehB3wFtzeKsbi1_WLN???Zbld|DC6%301H|KQc-b=)C0~(*4bfzd99+kn z??16@S*^vom*unLED=*VmKt9A*2IFFQc*m`h2R z7G)Pt;2UEI^T(4g51~IilLQU=Il+-Irhbjofm%v;Y!Rr6=L5K z%>Jr9NWq{Wruscf2`BiYA#WgFJ21p*{Vb#?gFjP&PcZ5$aFE~U7k~Ph6N7>^7mf)d z_kddoq+M!&YJ8s{dxo~;&Y5PDfOWv4`0jc3ofwzR7IA|q!4W)4G@jthv%-9z_)K>9 zQZ{=AuQ;rL@JyCHE5aDUL!sD4!V*#LjOqH;*v_+2i`2&T;S&YN^V$op_qRVAp{-C-XC z5kCj%ps;8Ubgmkhm`$vvwV3iROPV$Jldy1+9i09!TAxNTH-Cn4sV6x>Gf0zBLaA@F z=*eK7i0+(5bcPN1^L$!dIV-rlazdavC9Y~_;%NX;L4~Xi>r^T@ zV^jqh?oN;1S8)iF5ScDBs68eJ>{zI5gpY`Pzmna$?kc{^z|hj%)lSzZs9@T1=hie+ zROXt|^%-O}eBV&;Tm70k^M;E1JgCSw!Y22CzliJKwa8QikJh=I{KWkNIPSqJclY7l zZ{nshKTKAzu`T%salVEhW|A67H6pRQ(U9hEawX<1C!M=enypJEaSEdSy96Z>A2RrR zroX2*>lAjYzQ>7QV(c9y$t9v=OdyvrR{^SD?v{toks9bAWE z<~e^}FTHPx_SCpd^wc3i?Opu#SGfV3r^{v@smrAvseSu6T`H%YS}Z;hl39nE&vO%M zZVn-IJ8cw$ShUzX@Q8~lRWIhw4UY8peU$C+mHOXax8FK__m_%WG^{)B*U;mK4~OF( zN;mBD;8#o9g49maoFXsr{!-;1o`;dyAp1;S@ zrE^MF`o$%o=rimq!}NJ^iMB(5wzrT7J2~KNtJoo)yI#CVMb9+H$XSX**7Wo%mvJlm zEX(IysYV-(`Aur{bHyoY+w;o17irNNjcp=O4>{XEPz_ald4#X(1q;jGkA#j8Qm3bgU;iaP z2V;N+wxS;AmFy+_)uk1mb6eIR`f<7)LX*hcc_<_ox4i|cRuAqbIXoGdUx6=RAZ%OO zg4CpH)XaS2xc54(A_tE4kQc!rFCc<0_W>K3P!f*_Af+8}iUHXF3}FUG%g7r(gE}iA zt_1X0|4U>pD*>qm5YJ>1B%iX-lOJLOvlS2ordm=mRlDYO!)~SddI!s*@sE7tUpEAU2|ASQf+y7IlRnN>GBQC@aI`=sL7NKrj0vS6?=Q(_{uD}V zkC26fYsi!#oCd3Sq5twjct^xS7vyJ3b}iHTKeytdiMF=Vbb z^;8qKZ!Crh&1MINQ{nhg#r zW<57x(}!T$mFV(#rVea!CyYlNsszr7MPY>l<%72v3o@RMI%_K|WNZa2iB7 zer$c?SeZI7DGD#=VVcK<*2V&@1W~kbw4~}J6lrmQNnw)CA3GlYHWf1X ze9B*Vb8q4OP&RS9@ej?**qpQG=$sB5=Su#8jAJ%}YsnDD%5MXcHE=K~(;flTGa48z zpr@niFU1CkNw^V2{9^!O;h?xxMF>fWVu4l6C;`n3Ea*`ru!mGnmNgfxAfigTgbxK_ zBFI&naE&Ka>mX-Z(Nq4^)um|+QzG$3=|_56(aNGrMD4y$Ohh+3@SM4+UAT#bo1Z@d zP7vmy$zX;Y0Jl&8KU?n81il#Hl>!3#0ZhZz!APzJ1P;-lE*XG5I4CT5`BT!G7$Auv zf<@DxgUuWdnn;SePewl>L6AkEnN#r1RF!Y$& zZdlpOBcbd{2wph&35#Sr*~l5wAO(llu7;8g`{E-!*xab2{Rj_RLc?wa9aBDA>$#6Fg&pb@B+O z4`3>`5GrzBC7>G(s*?d28-*5C^%rFdc}m_%46W@0>L?-(;b;i(LWDJ>FS=Zn^qz*C z7Y}H`grfbNn-yw2!SgwHIcBP95t$qK84@yt%uQ4lJ&d#z$Ev+zp0N-x5Z}-Y#}vL4 z8=f5DG_a}HJbYA#8H+*0J75(C%3Ae;n9V#E`Zfl5tcWm5Kr^x4OhuP#l6K-jr<>T$ z9@qaZ98AP^)*1zjhy}V~q&>VQxLyb)&3uL+VM3Y9Pm+-zK60O~%DpT54!I#Uo-nu6 z`nQ~MbiARbmHs%AD9e2elZb&!vf)X|{E9UJ1I8ZB8l@b-kWl8MLMm7cKFK5cF;GC& z3of=0LW)d9#3&QWApwlbn!BqYVnuow2V9K+-b=FG(6WUPP$)B_cHn3(pvWh(m(mH& zPZ9iM-!{3mcpqNQe0%!%y8ZWZ=Cj1q@|IxqSc&v)yp8g%FW>H~=Hgm?}wuw@fHv`3o1-$2C0v4!Rr*e24-{ zk)l+R(GDaCZiNdOHp~ao-3L1I!+79dMwb7pwX=YVBiY+N?(XjH65O3&!EGQo1ZQv! z!C@e{2PU`%2m~1<1RGoe1W15j1HpnP5G3S--S@lM@b1~Wd+!S~=T!C7|M#4#uCDH$ zuBqqy4P8c-;R|lc_055Xidz&*cX88}2#P;$BBK@C>2$hKXC>(3Y&=Hugz@lqayDF)%|pfie(M6lTtoa^6|u;b$+ zCOD_Vzs~CJa#2l3h1L1SXvh9zkI!IhNUA zEYC5W8d?z^gDyIrIZm7|K7Nae;+$O3J;f3N2GgNfw<9_yJjLx~Hn`ZEF^+->!?Ng- zPKQ&KNLF!|e6pBE5fe$r*$pP~DHQJ4r-kk(`G{uZaB$UDfA@z~|IX%+N%l$XBjEif zE@>tNjB0f72qt{bP!y?C>9Ls7L9d?t7rgum%Io1;V><=I20O4S}!f}6pg9=;6 z3E7tt`cu@OWw_tJYAC@3)_b^zKJYgYCE`X`T3h|Llln>9!J@I+a1l>6{`4ypeYAGD zTKlS*i6jZfyC1cvFtv5EGwhlJVH+{U!@}00xao+FY>c??(h~Q88{Wa4ZC(ry3KGnW z3JR3hK@hr3w@Zu-cg!>GXz0se1sZ@M$1JtMah#!R9LbO>RWkzy>T3CvFtRX>oWgey zE`O;+4|CYPS9J?w(>+Y;<4xqdNrEw}$4e^7H*p(~cEsQ2J?POBbt#Ht&F5G_W5STqe%bp0v8Bb!Coe7e`a}f&D!q@p@Opf%n7plCT9zNNHHf29f7m*Jp>NBE)V7ECK_ zC#a%s5)o$CpK%ZrCBI=r@Gl;5h*Pw}givf+Vc4JTgIsL@n0}o@mQ=Qf)fW7Nu(5W3 zKM<$lTR*ad&CcZ&MmunWF0bEpW;fD)@N=X6qfD>m19FY^&ZL(~V32N-;Uz8Ey4S(; zZ?IBgD9!$rU_=Duq;Bhre+QIda+yqHZ9LR6rsHwSCodFKM3~W!UdsmGugnn&qMt3k zxw!gx?Mm)n<#rdEl3tIk1ieq7?jHtm2H47zYpizOn~Zvrl=eV?jH*9BhiZ!xb{-qw zy}CH?HpcD28||)q82VcQ+A|GX?LjG2 zD>1u8AYVjf5#>4_%C!IV8J~fIk033YCt1XH5$QS_ic&|D?BL`9@lm+|+o$pEZ?Q7k z?7>hhH3;q*i{nPdMiD6uO6lU}Odvhmp&%Qq6Qdha#_36fi0eo5R4Y_T){CaMAWy1Fa(R_lg;A=^W95O0bpY<>Y z2PdR1M~?ZdsYrMD5W5o3u0>E36!c(a&@*Wz06&6bUjjeAl86^gEUtTU(FcQs8cm-l z9wSR2yF1_946?BizH5h-xGKFkP(qxM5jS3A>A`jObpVWl|bH+z^D zTjC#l=oEN9OPYuMVC|taP_46M_0nPg*H!F*=&kw;T}FoMX+pZ`7cq} z3%cl#Mg-W2G37B?W6SurK6PT59Xapd)o9k;OY8RB_oII<)by0wrzUu(C_yf}U4_77 zM&FNUW=?pVc$bkHYKiPV)SV`;4zSVDG*@@_fw^2`O!8wH9ybG#l!b*Rs+^%u4}0c6 zwUtpUiG$^E-Sbr~^%Y!wY;>Gm5u1o=EnOq_GmqC&+&DW4sxub}@-{ znny1hd6_?=K#(1~O3;3P(C>OSnW*LEN6n-{ z!Tc}pUrWJp!uU-!9abB|6h}>|agQD-A;<4xkWP3`Qiu=Scdp<6u83ajwJoVZtX|?t z!Uc{R(pE6hu^~D=hPCCgAhf zC(}L7Gd3_CnUKuq1V+yDyrs^?<82~=Qvp(5PIu$TTfTE@ettpoE!*V?g~l7O{Q(fndbYX z)Z*=@kJ?5>VP5hp8z7&`2*2<}h(8+vlzeXXfAwhvgR1GtZIbZj~8pV+62T?v#~DoN?LtZUsg zzto}Y@8mP#uoZdgb!&N;ua6mq@Qffj1bfX&%fVYnN+EiZXpZJH`8SKGl;>S}U$}x> z(u!>cjXmw6Ko4}Ctd6ESC$=aq5XlF0bD0xg$WzC-7etpbt$aFx%j|;==|wdSu{&~+ zJ|39a0}Sk0ccwn92q~R2CfBnR6wcxg6nibN2mahj%-LS6Su9Bwy5po=SGc?0@j^<- zu$y$V{{<}Ca#V8Cj#UUh``R^7^@7R7jyi-}RwsiG(T*bAtVd$}K9V0pG(4}Qoy zPn)XuFw7m7hvW&zg31S_XI9IGM|hee$$jB%@*AddJB@O)jLx=+`~eyty`L>!p$ebm z2Xw!fe4HdGl_S_O)279o7d)0MV#?hb-P>VI`OtMkYf(d>d@2;@o|KsKOyYj_l$6>P zh{e4ryg%2xtZVf1z(V$hZv(q){Lx6s_BqfANx092qEBnk3N&fwj`i=9HdZvNG zGJ@Pune5!6gqB`Qz0u~lS8hN@sFtelGlHjTZVE;&+0LMV=!WYuXOPe&P1MtRcSkDL z=3bI=!@%pqXr^x5_zXfl(J@}Fh*QGGvH0nNAF{5GfdpF8ZO8roz-Ux&@`tU}bMB*F zi<0M7(SZ}g|g^Oi)NGF~!hFhhg_ z{8<{@TWqnbEI`Nbs!RgLGv)*HskSh53HkYyDSLGZwfV`ZPpZ#2_sARv)Fia}$I{MV zrTKJwijF6xQmXU!r)aqLY=1KPGVkg5dg`L&t2$*ekaInxv{B_gfO&6nYCQRr%rPm$x2$nyYCIL_Fmg%Z=v4b*foCsH2f}5JG+YIHfVZR7z)_ zc?!(5H#7xiaMhkKo$?)qm`_Dp=Dhqk#giq>wTIzoq_)85TGxp0co}IP?yfD92MR5Q zWAs}A$iu(i)GNo9bJ;N@+sYP4E64865!=M-Icw?evKOWONb0Q-LN-nt9xvR>OtE7H zu|?w>#L6Zfv$-1h;jwk7I}(?g^;cj(_k$ldsx7Ux$-J+Qj>0IP|K zdF|0FG+~g5aI%b5Rau(1^th%GWU($No3UGo89aQE;8a) z3*$k7l=cPreHkCmH&aIzq%nx&RUuo%m3mxZ7B3^HLlpbXeHcuPO5d@|s0Wt4PjRhwq=hVFNwN4Pehat1%?)EWam$7h;X$H2zxbQH?xW&uH zDEg7a9>#bZ)3bz=>?SieC#U(SzD3}lUaVA*CyCAYTr1Z;%t!UxOV?=}5p6v;3Q;z1eim-h%;#v2le>;_LE&L8$mT z0cPLmiJka524>&ziGlbQ1?J%BNt3v3M3j)=giOP6aK!kD^7pu>EMRxMq(v8}hT|(6 zsbyD^*r?6tTiFsf)y4}6lHaeF*TDK%t+3w`<0o}k-ZH(Umep^WSw5q@w@qoWlRQ_0N2nm-GYDwL z3wfik)GRwHxqC@{3`VxzFj+oM#^s_DoVWnT1iM&`jh@gF25r`?rzPs-D6I1;tk<=! zABe9$zYlkgg=#I>Ert1E%>9k(p^V~nj(R5z(~l)(Uw4)u4Y&{@(Qtye0vt?vobV?l zyLjb7v0;N#_->pG++k#ej17Bu#XgF)$SIC={X4OenDUzzmMmM@!I&%`D|}KDvt3rX zG80HV(XZq$?o?H5_LVNqn>z&x*8Bj0WNh|UB;1=7&z<*<_4$G zc6%N1NMeR!!+Y}Sr{-uYwOOLH!X+|`^lAv8y&A06R=9@u+A_{oLF9YxD=Q^MNU^PK ztol6M{sO*ns;+P>1#>_GRM0z#6i>}>yk?BcD$y+a_6WyY{8W~0k8exs8RlxEo~6?K z_S-aHY{e;*LK#<5#p%v4{|ow;93jGa;7+V@)i+4vYHx7I?}x&VYlh;^mi)jRAIU~? z7OYzBN#KEq!sH=LFgFMn%nrf;qxHz};xdDAh53xPzFcZ0s`aXk+RgXtemYL=k#?d7 zVHQMn8~f6|mlMBIp5xG)pF_D)J9@ba9^LbB|75Xp{bKSZ`v@kk9X0N=SL06#Up#%u zyzBTr_ba_5xCs^PvC%D@g$nj<>V8!_bJ($~>_7RH$;IzAuEgT@At;EWW5?~u+~UW> zwo3;8-q-NHZM0z`AKO>B&qNM6g~=a}RauelMz(w~^^f_8e9(}!5^?|rEcw%l9^4}x zAv0Ymstaorbp*sfjDzBRzgJQa4;lirX1^QDGsm9gGcIaM0!u?0YQl`?&k+)Wd0mtW#i34VUEi8;jsN0_-6S|;QOxXP?-Y_JbfWRDo z1C`Aa>n#L3;BGXjiZWY#wGl}Rj}Or1C8VAmx#ubCS-ES4@WJv06(2u- zCEhb?4dVP|)h(2YL<)j(8VX&BG$t=#F z2W|31G0Pl%Y24_z*&(^s;P^B>TtuF?fRtlBL5@dlf6KQtFI1H`W#V%E#BJ|fo!IQP z8^)?uB!pl;gT5*)dcVpxd?`%hxHj+`lbrKb69=<)j2b#^nRZWLn-zpWv0}Qpn|f&S zI#(WjZju(;2tiqo-AaUGRh^RAdwMr5-6KK`{hd{Lq?8)-VudaOZt4r9+)Di(<-lnV z=EF^1>TzP~8vUNJFPW=qc)_fkVOo8o=fY}l(M%OWU+9PH6(Wf%va4{p zbvj%?-F}cJS~jf-|BCSTbx`E@EE7J4O2FZo@e559O$Dycy2!SbBEveGvDQJBLgnr% zd?`(yaA1L8df@w#cM*DpF=A>`lG$uU^3pQ8LD#xMHkxH@jD$Kg;goji6w{n+{<;-w zNJM%uzd0Qi;&K|S8dfr7%ikIldMs31D`6O5aTu&N>nUMLkhSP2`Db%Pr{8>1xu#Ld zL8DXEQ=<(%SG#q`>v63Hjiguk>sMm5Jmr`z<`8~g!N6ruZ%_$x$>4C)Dg+IrS1UIM z&J_5S84J-E)lz(@GKg^N;hGTX+{boUECc*sKkYhFArc?|k`~xWt=8l5jiY0QD5q%1U4IV> zUKQE^(=XdktQez@PTIV3*rINB@HelF36_xRyJ-)Fn^Y9dxbBWsx#vW(dy9j|3xj>~ zCH;N!(zhT@V-PJx}avDVOX)IQ_8WVQ)S&y!vWT*S~D-@U|FcJMy*=2qcl(~`OO27 zD1*bLnITRt_`z3ZwMgCIIL|85gof}3N2ehfLs(e0Um0%Po3T&N)J_dDhz zWaLF_^GI-TJUDQ0Tz~6fjiHsN*Y8hhpoZpplm=vvaZ1)BxJ&C-RO+A1Cv|GI@EQOW&_Dg)HeYll?otO`VoQ?;D#>0YypW*e0+dLs> z6%?aA5SzG^JPy$HM*K}b#Lp!82W9V#JTIJ0A6d)ktGPaZ=*kNf34RGjM zd8ILJpRIm|#2oE8*1Ut})g zYCcWZ3tcHw{=R@ks}ks?&-XOduoh5NlM^jDC#G8@h5@Bg5{Z1Am%@iOl=KSg$R>sv zDLRWOuNN)i&FCIdjg_i$(d!gHT;2r)UJNScNUIL6_nkd2-`a?F;1{>TJuEg}U(0zR zOPh8m&hz#@nUj*@4=bkEm2TAn=Hm_TtI6$3RoKmSK%13yB%e$AzZMaccxbAMM#0N0 z6^Q1K8XUtkqZJ<*6T4O8fM4rv9Je_hu3>zYhs3HgthrBXCY0#zPMV>m#eyoydU2&_ z|G77@yg3$=hurfkn_@rG|F62=}Ph=CrMgmsx=bPFMhb1 zY4}L_6GknFZ*=NwTuJ2S+13(M7A+TZs191-~Vqo_Tzmrq_=ZD9qXeN}cp% zNjgpUL7Z|e)XnFR9y%mwf#?*(1AoLa2fe`%bNryJuPDEib%>rx#^gD->Rhm$Par~| z8Rvt`w0_90@B~ZDpl&+XtIy#L5$~o*T>9DoMem32+v!#(0xj~!PzM5Ol}x&O#mM~H zUW;hE3g{MLG%P=w`M9&ll-XmZW0I+6kMT?JU2rr@rf8!y3PcAUncIghejLE$;I(<3cb&+Jw=0(k>;F``G z3nXNgtAfA}T0hFBF_sc7IXUHavsD_i&P+q%B(So0EK@Mq(UhxXMifCe5$P2sZ>2O zY}}}PG@_TXR{AJLQsz6U61`E%#^=iKh(E_jD}y5aqBMj_0R%X>6%;r)k(;fWO8Ro# z_qCLHU9EiW-2V0S+RoMek7;f@H*ZI8N4uM`)ZLZG-_>O-!`yj+k0`oMZz~kdz9lnH z=p_NwSs9kFDam_rUnBkVJ{?woeCkQ}R_JnlNlDzacf!+piRTZbHjN+WThuseJU=4Az{8$|RwX$!C<>BM&UA$AfQsLf z{HCaY6UI&sf*vLmFpmF&RqHSh1ec`NYBo6qy|s-l5800a!b{iY(bMW)YD3aJmhSE< z-)&YZTh!+nB{fHZBmP%ZL2IC)2p1FNy0?ZJb=g;18u6IbVX75m%Xl4794Ds0xFyfh zLfPX|w!%@zmp`x{UFaPCNUXF?G|_Qp|Ae5yp${sx{BT5ik|nD{5Swvw1mpCO1`BXs zqghWRK3CrieiW5JP+$ir+=2FYWAxLz5xpvKsjpB8eL_owyBteG;77rcs1k6U$urpA ziDH#rZO>CR>yMnMm1ofujW|5ZJWc~{p&!sd=80VMa#6C_ikkl_c{CeaRb*NY@Z-jM z$Z997w58l?JL}u?F6q+MT_iq~gQBS$AoGV`VY{am>HD8+^tj#R0&m{Z|6w=u@O1aE z^SsUK`92s^=T_souc@P2rGKc&r9KAR&^;ZSKy2V7#!4W<;(md}U6a5?oM#@PK$L)$ zkl^1stQ!v!JUMZ}{)+Vl%fEFh{#YGTQqKj^li);G9b~TSbrR4@5U(aMO^~Lp4fWAG zQ4>%X(2Eafh0|7tM<7DHtqU9+{>^0v+#mkX|CPdn+q?Bz{#mo1VQ6r8H(?L%n)EM%DSrt*{WtsLFF<_1 zfOz5m`HuY~-Te+7?H76o{Ld@Azly^DC93!jQMNv=9=2BAR(}~z@k{vBpN0SHqVlge z48L$N5dMnuFK4{J;L-iUQ~OKa|IAGK3mV}sv{-~cy?FjB0M##m);|aQt%hRyg>>?7 zNPnlPerkmikZ7=7(iZ(g9$sOEu0PH`oOTv6^c(z{LHow`V^8~oM+zpL> zxK`bBTQT_G$GV@PX-NO=$ah!k?&SSO(ue;~ zME;k3pF*ZY|Ni(@aQC^<`~NqrciH@}703YOaB$^TzpwiB zlO0a>H^zp$vlj2-heT=HZudFdO_!DX1_yZwIGasH>A>%ITVfBvq}UBl9! zLRr%PwSDPbvAaH$KgGD^{tH*iyE1oe?taP$Dg9H^ySwbWP6I#LIQsvQ@4#JwyNjCt z6hJcm=S!U5rQcl}?eRK%VNCwKf#29i>toP{XbAk z0|W{H000O8Zjz!@wEm#m@+JTPf;0dCCjbBdS4BcCNlr#DY-wUIP;6mtWpr~yWo>UQ zbZ>8Lb1gA0FfK4IYGHEidSz5x*}5$f+}%m=puvN?77$#6h7|6FLvYvN?(Xgc4ek;w z5ZrqPo3rZMvzF{V6=a|vAwvAttfI43ApX=4 zz8-SoD#DD?FC?BR{2m4mVfi&oo;{V&=4&tD>w*2}Fgf8D(h}mzDok<`r*gwXvNDWJ z6DTr_bfd##HA>9WY%7~~41m#o1{p>Xc({#RwOCyG4oc^yQ~(rVdtqsLGX5d2?-BJyw7Th!Xh$kf=u z&fvGM_#fw)3@r>mpuCt7t0^ID|1ow)n5rUdG7^(`uzh5iBtRGp^jIEUg5TV|zn*Q1g)vS(G2q^J%w!Ibik?~0G$u?Oo6UC7^+BlGAkiSg|0 zR}vKztR+gd-swSk5Bk*$(uL4qX5-v5J@#$ttx4Y8>|TE=}t+1S+7?Kg4(l zl0Vpsxxz8>berbNHNVPzD94b_*l#>%4t77+IDJzt+m_YRI?HZk6V*)~NQEknN)OfY z0J?+fS(bE(dL(f^|SOd`|}io`02} z(7!D|RV$E#jg7UPJ@EAp;!BHJ`YJwj|1r+r#fS1w@wH__1*^TI^%Pg6l1dJRr{p}0 zwvyiO*KM%r90J2?i?98zzA!^5#3H}9dGqu0HOuLmAD2DczaZ*k0r5})#A@7&D>gCR z$-Xa9t&oP_(@j=SDJYh9ujn5|c{wvN*Ac;1MR}X{zsTO7>08HJ7JQ?D)o;BgltSXI z{pE#d#{vpkT!+0XoSEQmy^2ag8LH}5ahAM>v`w}~hJMTEK%Hj_TV?+cUr9`V z{U72>|0+Hw^!L&gcoGsM0{5y*m``I%`cA}LNeF7+B?sG&e|q)og?bN*?G?EF5mX$@ z$NR$R$ZT+|Wj@2l1ZmmaE)D;VS6_z9h#p*D)C`D`S@ed{5;%2aUYS%~(20v8jW?r>~CrInttE1p4 ziln#Ed#P{*p0YQyr*y!~#l}1inNn$z%*mW6KO++;h$aYO3h&@!z-E@2-w^WS)&^uv z%fQZ&QJJ5{oeNM)AW$vTBx5q6sStSAKz$G!)auu8>z{z;iaQS%u*<2usofPud`ZwB zz)a(7TOUNF#8%HWn#}=t1HjElGlbXA0@?npi9+Nbr&R4tEkOSi zT%4kuOt%nrs@#->;Rmhu64JA2#AZ1DB4_ZPiba)a=Q^j=9$+!np5mTS-pA+Do#NWZ z!Y8C&=sB45P$IJ_kfIeGN?`XvE3lJ4q5?jxoSt!P>SMVq)I@kL zPN*n`gIKo315ERl77Bqgf0%Vsd_Ik6&LQQIMA426X>ahxEGuEZ-(#S{$3hb++QoDQ zjBf3^3kt&=H__8G$JV@StweUR&^TXx>sXLR84M)Lomwh&7N0Vw+-_iBJqc}B-=pqN zk9RlTJcW~(5L~t7mxc4?VmbMIMg*L@o-NSqQw5yxGIzT>*b~*E&P3(tKq2Eeg%P+mFh=TmEdUq0)O#Vk$Tru9W6FUw--AtB!f~G3pP5LY;oWbXMex$JzMHf z^-a*Nxskal;=Bq>P0}H;!|A-~D)jf)Q-1kTcForw#@B1g|8HH-?yl>g&uh#A-$fUF(t41wQ$ z`p+8GsVylJsbW7^N;y6^pfv?}Lwta#3J`*SQukQD4hkn0jf2t5^23M`7H&6FP0Ma9 zoZj_L&3f3I&qQnjTxH6+JF=Dz0oN=%0#^#g?w1)m8e{K>61Tb&WZyJxFScwud0Z}n z4x4UH1(z2gnNit%98*!Iz-Es~65}T3!?;_iSI^0HQ!M{MU3rTXf3d|wr07VF{Uxb*ZM@wSoTR(;P*ImOUuuz zePW0u9$~XIkFSVwvYo7zJ*xF;67v+cm|Ix?l*vaurp6Al3!twuI3E^I0n4v-1AtbGu?og$NJ zwsZ;DtYTD`pm_57+02F!Z3|%fjKw6wcp#X$DuHAmovEPU9qU5)`MaP<)oR(9{CDyD z>=Sjb`Q#pg&==93rH5iNDIzEmD22Zs_Q`Xh3Viy4l5kCb9t$a;uiH!pd78eT`OPwt z;<4qWVF4{K6T%TvD0q$Ayc*kari#$$Mh(oa z0wW2=o)XABdwPYQ>}7JUsC0t;ItvM(H)rc2R2leANQb^DJ()wL`%Dd4vJTLbZN^)i z-%QNQKvvKpqzi#`DUK*h z6_;zqk8pD*8EsxX&nk+y%nPe?ur`d;6Mmlaxgyifg@6zCG#uxQ`J=mk*>d-NU>bsk zbM{>pIp|(Ii)axYW@#m4GQW38pL??At^Vec7~YGH39$nm(!$va^5k+NCVm16iu?2W zG?4|ytv>asQ^%|hJwKCk!gHZ+TZ`yGthzg|0}<9Gf_SL55~Q8H*)m_<5p<|hc4?%_ zu8ryz2Dij8iFy94CMkM*OOt&VzjkRr?X|I;4U+c;XL7)+P7*&T4cUWi3J0_`4l!%d zkO5wJxXR%A*PjJ8G+tvVeP(*k$d1;79l?bY2In+^hlaTWvhVRd`(j?JEovUU_mZnJ z7f z(ciE$t)YkOk%tilO0y zuSf+~pWphxUEz$qZP0uGk4J7plvj!3HpX{AkXVJil}64E<`U>ZHx)kdz@VKJ*Nxv)!fu30TGlBxJb@B5Kb^@Piym!J_~fkuyBNF)<}1vqPA%T~G)fsqrMIu( zI&dbM_2ua$iN~~IyN}bgV$j{mhR(^c70gjo-_dyv{*f}+Lr`TuArkGWvy>9?Tbjoz z;L694?oyqBIPUKQBd=MI9xH=wA5T&}?Gc6v%uSWtSW|?F{89yR^JZ?ldljOLfVPv* zy(^Fg0H%C#1&+PF%SFqGZqK+_W%F>yrFrA5)wz9p#g`t{)t0%UDM)xM4x^_81`3WQ zkhhb2wttqSZ=+srW1?~w?RigWFQl{67MK{Z zr!al9NQc6xVW}|0^BEWoEN5St>SWrS&RodxLkXPJIW*XV>o(TnKgFk8CO9=Lz(G$W zrjM`Xrs0lq6ih3=t37pa+~E>ho4FV8TMn;EUYPjj6!`y@nw6Lout zmGs7#c9Pm8GQafvz<`1jurmXZC+W1Cb+4gCG%ae-JuNEg%21S&MNIW_|6Q>(xzJ6n zzxZBGaABQrhjNX3i&w*kpdHL`6Okj?z8i-c^}Wbl$Jj0{ixwk^&4r~iEm6hh>a9hF zoC{43tfhD(?6VZ8)3lmGjDfxv?0syDWoK6fyAGyg;m`+6TA# zni0g@v97=bT@DcUaBkh1bQKDvoZ1bF;>-U{~*VotmIh%E1uB>@Y;!R#)u*<==E&DvT6H?hQ2E*H}pBNHDiIh zT`li4P}9uPm9q+x0(WAbHNL0T*;A|}8S|i6!n=oKUD-w(a*&Bq!`p*VwpLj+JbZ($ z;4@!Bob?;7Ek{Mq$g;7jT5|b#b}0^Ipc9XQ`1mbuA~9M9*Y< z;+*|M4jRLb)3Q5@8(|s%wCzT@dBSdW&J3{tlkVobnF49K_D<^}0XQBUbt#zkn9s%$ zRBA_WP50yFWO|N{11EA8dl@S|LMEpq2b7vN6MEX5V@wH+Y%bA{(Rz^?Mc{q8pTF_7 z-;HdY7%S>ky+!ae>e||h2qCg93u#}e$g!H2WXvx*h}$L>C7*ZDsh?mjjRl$wpe_-z zk{3;q-{S?H#!Qg<`Llg`42hF{E zdHq4@?B~ofJd?y5D!oq>#pbWd^WZD!5XGZHc#o-#EFBa22lh++y5jkOk%Yi8vlyZ& z#eyM~ts&N3VFerk#Ztufr;58W!S7R=)G{j44`g#3-Bb=IOS7z&5VGjrV22E8)>(o&nl^M!cVA6PR#wf_PZgCm-8%h8?&`hGFI-EI_ZM=*wytdNl$7pSMZSDci9@AKRtK!zzcaoUqL;l zs!mzaM5&54ox08}crP%LUJN@KTuB)hR%E}}#*X8dBB$jX1Z_AHn>*QBecZqVT`+Ww zUYO29NN_ZOF>y2HI~=`~oYY?y`>s`odm@%=Dt^he7lzSEZTJq=fyY1Zs7i!H_HlOI zJo9=o5RH0tsF|<2Je4Px;F!(KZkvQgcOW-iKYb=6F3M^zyHcrnZZd=Qm8ndEP9K5U ziOIQU!0G5-1Rr-y255lFwsD{bZy$QuJpcyGjL zK|p<4pEw$(HZW;nbyI9Q%GO2qDvAy_G>`7EH-%d~yh;qKCCq?-+A8uxs#>kLA|ust zRUCQorsocRuMH0^*rNW0x)2y0Hh1HxB~!BvLB)Yp8(wDoUV5nm)$BXXy(hB?#$|Y9 zPvBhI;5Nob?gZRC;bzs1%JhOU+fIGG#!8xMlHF2qGpAt@Bf3ES)UF&E9`{fVPqUK< zmsJ9h@8F^9gMuhT7EzyFdbgNIcD>~F>1xY)$|D<0kJ|m*XHDSnCNeu$)c!gEC+8j(ggCF(Zdm3$%~vl}86 z&|dZT9$Vo(|5Cq%`ZD(D(?lhO^g&Rqu~~&2Zm3PR7m?4q0mo#li=~@`^q#Y7#+&&l{N_vlcbu~tkx?6 z+e1M;4%7T7;>7w=>aWegMw<$7n~n=wJ`sM%xSm2t}RxUA=`n=XfMFXZkEgsED1_d%3VI_3QXfi^$NVNK==Z@Ok2sLyELM33;_J ziuH2>0^Y{$alMSJWntG~OPr7wQ-!k9iyeNI4@(dpR5wT)dbYTS4J&F5GB}f31Y@g0 z2P~yr!GK`tv`d8POBbj*{=RYj^=@4pvu)cYc*2`RZhADww>FQq+0;s)N+MT$a3m`O z1SKoucWXy|G1$*p0@`v+1boin(ooOrTA(Mq%>2gt1181cD@NH9wc-OF_4Q%v3O!F4 zzc-_nrtsE~c4`5`DlH2y@Un#isc>1j8s>X=XEXwI3KR5^tY{LZH0V}zYzWyFFKhxW z@U6Ay25^N*JvDyW8_Lr5FKsnQx}T2T~-T9}Q`zg=!D33H7jOpFDk^ zWxH`2d~{bYZB2zbdI)`M8Q6Nj->71z>_Wt{=Y=lwo>j3YXm4%jA_6q{;{lGE zjs@`toclvpCu2|Q;F{NI7EhS1NHqE!>&I7cc?IQ&X)Iba14|LmGnrf3TGE~QYlepx zSoBSXJRdSWRo)baDCF^}6a(nF@hSb@u0R$kQGIg$EUHHz*Fdf+*UsDW$$33osJOQI zG95JbW%S)L_vNt1?XuG+XdCzn8XKYzvqb49!8HhrfgtHv=9Kq$TonOu?0m6e$aw60 zrK?f+q;gNZk9xt0$&b~2ixvk7=@4?UwGcsOZ_O$QX{;CnzTlTqGQA=TXimn%$xrk0 z4G5rl6rDG}zHRh4C7Cwf2u8_2bSpZkB*l?Y{X}P|Tn^D9#m-{vx#dHvrZvF(%KmsG zK=fqz7_OPb4%^WV4>iY7IjSdg_ z)*nE#jwZyW3fTi4;mDX%33Sz~FLMFD^qEbQpwBXVHq;+KO6skg2{=@17=UMN$rj>f zPZ8NgmhAgB_I+nCG{TITv5dWB%aSE)wu|f~sX>K8_Fc9%H@ao3EZIWt>28^ltDehq z9_K&L^S`h2egFBt|IBjcXL)re<06Ih*Ch+e4}e=qoNOTiAr9A`tlo4T85LL-CN3>1 zQ$BP1{*=ipIUFTCF0i~>Xf3nBhBIl^+PW`Z6jZA6uc>r zSS3zOgL_vWE7Q)DlzeSA&2Nac^m94Wm*}ieeI&)AfOh=C zQ$jEPVe(w)OPa%PQ>uHx1MSmu3$?FHXWFuJdTOo(%+xh1uVfCI9hhceS@LC_z0T13 zaBH&TYH7WF6enYRs9H{KmFqYI!^Hu)AbvEt`6)*A2!boZ$FMz5C&s{fIEiRR3&nTy zr6(2y;+0_~mO^PnMb-)%l2zsKryBf)y}S_Tdz7a@rAT8!UoSC#!VYYR8Y5Ky;OP;` zo0J?H_P=@^aY@obw$dR45q4*9^yF?q662sv>m*}sSKA89vLt|HZcfoqW zT+?@wKlJH&TKM)beD$7F>QuRb`pAn=pNgJ2rKF}4Ey{jR9Zp!y_$=rRHdf2GX+Ahn zRQby#Y-@ory<5AOzH=H~gBCp2HNQVtvX{L_BC}ea-H_oGXWYk466+F3XrZWev{+|K zpCQeerUKmWWez&!@6T)~KFaVrW}8j0(y3zQ+akH7YQ}Yf;eZ0}@Y5IkThn3Wo0RX{ z73Vh5C)dlJI^-xotHp=T<`Z%kgI%>wIVhc+maTs!otr9j@5!&K*y{sR*I0Q4X!Y2S zXR2Tem&0W=N6$AdifxYxuNAKzzKG>Q)=H=pTfMpThT%F@_rm(`0Zp9>1t-qPYjJ~* z>lnDuQXp`db?nVn=DqGT{BK%K&Y`&Vf%*$?>(Oo}9O6ZvODrIXbACjryxM zlakT3lX0qWDb)kbq6l>!m$dY-R<}duWwQQ<48qqm!<{1LG@hwk`xqc)edkIYPYb8N zIAj7_82OqLSERneRI*tb&&QOr{_xbafKBN^;zYA{B`>O@OsHWB#AKD{<&GfQ=a1xc zP8W)&WS{TPaDV1smR#8{-Vt=9p`UA-H*Ktldkf3R|3*-Rt9RmUEkW?nOmx^0@L}s_ z-kyit%)Fa&<~;t>QK8Wh(qi>@p>E*L5ZAP*H~yih#V102xFcduhRhH;0qZ@)ezk-* zFX|C>!*6%ozA)H5ZyYXXl=AzLezNDeP}=&w_N8vS>y*fRv9}Tpr6b#U98{tYrnFkT zDBiFoh>4%VJh;xSl1Xr=>I~o|;;?ufb1uX`|rUl)XLF)rl-%>nX)@;{)202X7NRVGPKs3JTWE zf4qJnl6Z^K^%8LcE#1BGg06^EF6@Y05E+?qx}35cuP`n(;)XA!iU9YGLOZQFm7bP< zQ`9AnY>tOeQC8*;x3Da+7g?YA`n^!@_6l;kz#E9`0Yh4NE@(eM6XrH(iwIv29E{S< zENJvoOQU zw0L>83Q=@4sUy>CJOdkS!Akl7CwmaxFzuX~uEpZ21}Udk!cXvNW0JTTVipO`%yhf3N107ouw19eS$)a`#tAVkMpmynu{WZyq05PCT`)a_B&BeFa6j za6OqU9g#}k2tD&gupy%hBwEVk%w8=ZS`HbnySHJYAgp`V$h{eKYN=0iK#`Xz%d_@Z<)KY_Pw}a(Hpc4C=ueE+F{GxT zy3*98gI6o#eCEP7%BAx8nLjwOD(VXOFT~hJ5?f4gOy={Scyhw_g}NIJJyXO;I@1XZ z_OwZ{$`Lr~ox0UzP58~r$5W&NGFUi&^Uq}~;ntaP_Rz|c^@9sG4B0^QKg#JdeOj4M zvqPn%xQ=&{OsB^S5i*=LO0R!zQB|$?^7?hABi&d*qa{0XI`};MZ?##nsHQgeCeAqH;G4TUiyd8X{JjY#argbMWhBb4@ zZZtP1LKbsdimDD zobI)4(35nf65BVvT2UfCwUf?cVpqo=d!p5TV}uvcYGE8KBctVMivq2?(+f!;qL$EK z2xBF?B>g14mxhJ6`*Bmer|cWimYi`LsDes@KU!^=*x2T*A1~aLP?x28ZRf8`9qg~G?|tQH0+dKtqmxIA zzAWT-1}C*)iDW^wmfW&w&-kXB35<{g#?Hp@N+YiT)yk&$rpC;xB*{w3qq=$m`aKD~ z@mW{7l=YnA*RBZUz7^I>c2dGzQ797BN&6Kv%+tld7{+!WJ;_KvvJ+8nsd3V6D#z;L z_E_IBs*A_i>qRNH6IMo2UdmhEkf3a~V~z|~-JFu107uGG)XVoOYzR8OZ>XpVN{-pE z5s`bRiexI0@8Yr6NTRGOL4uNOv zm?9e#x01uwn6EHAwqv*yoV^*?@4kI}T{?83_dG)bA@8Rn3c*mxPb-KuzRrcC0wWun zMRz{tFvJJH+UR%u7~9MC`n|Mnu+v7r(OT?VqIdErhEE#v`R#9+6^}HI-@d=4v78?| z$2=rCv3*#6?6Tc&>W(edLde*aYBwf%+AUw^Wo84`h3(|4rSi0&YKT9nomE?qkZ2Ar z{8;vORDu^?+8{==t?^-!V2L^5*m5xL*`{cdodC4qRJqL721W24-Sw7SQ5u76f#6aj7^BTZNe`fo3l5`GwzrbxEKlsfx-wuphG)8Hs=F#5cG9-%QEWpXcVTF z32l~FIb(WDr{kK^F&2f)V&f>>3?*X~XJK4c3)lIEiphCozNtocyJ+@U)}1V0zb;jM z#gf{@B;m#;VNmX<|JoStzDH*gd+RiTeO->`;{<=365?Bg$B*f z`iyJ#R9#n}B|W-~Ye&i^(8MW8H(Yawrze1SBt4QnbX*gyaZyX+N+4}v!TEeoCvB;` zxc*EsjSOmY{q%`sp0|}7T-;M>yu4KL_stJ5$VOPNhkI9PLV}vz86MsNAB0)WU!Xp0 zJbMwg27w1;6G$hDmMelpOK(TtqP3qdXGKtj-|8x~=}tK{{TTIj%Y(9VveDYFdUi$Q zMagegKAq&PEzRT0zrV@lZS`KvihacQfY~#b$9i(hq8s83L3M_qHb8Td+Z{e9iFu1F z3$)vmwFBn7KKP9uomrgW|48yBUr-=l$kXYFNdge41vn%Q9Mw@ZR{S$z?oe--$IeeW z?%WqZ!%*IEN0<;2;r=qYe#Xvjxk|{i@v| zPxE`;PdcH}p4r$0HHFc0W(f+~Gv3*c--A2ndIvqSwPYHa62f|OSWx!ZDqI^VF!N^Xk~9#0H=Gq| zYLZbtDmC8bwUs9zwWGfcr|cZ+E18e3O{U8V8qH27(m zikHtxMlPh2Qz^GWnk(|uo0cqp(O}J~r1d{}E`344|CGqNDvq?Q$Rq!xjf{QE`C|gw5)W`JV_npX*017=G~+`lf3X&4^UU=! zIZQvxKDnM$`r*Xt_+%@%%_}YIfahr7t@#_un6?4?R{F4Rwe5&D^;S}JDXr+85*nQ7 zN2+3$L-O7>=L0Wt=jg(kw0sF&+A*E4VlqgiZ#Ob2w67gjZKL9yYqTNMItuYP$a!| zdGhq&;6#N&d7F?~|7{u(+ht2}N#e;@F^2L(;uPKU7owuWmC^KpzGL=^x8pV7=9O^F zN_98Q*6DzAxyfaBsbP+HQ-@LFRznO_YcgjZK5hy|G`=*uKwh{u-aAEEIiC^KUUOvP zZ8=jBv(GUK?<5gDi^vpYd-<~2Y~PE7=c3U<1Dv)uPj2nFY-m#Rj5CJ|#NB}w7T9Ee z?y^Cm5J(sb1BaoFy!E;v0$Ti)hB(JmQ6F4-8Om$0?8(OM#d zv`G;CM_$oJ(H$a5M%Y@AJ_JlaNBH?nK!2VIXvfdNfA^?CZxum1&+AJ!QV=!JP49Fj z6B1~J0~_5AM8SFPo!xX4bv4ygjf@3#)OL!IiTL6}c;fbN1G-mdX1vZTduC%#kPse7 z2>ioo-3v~N2M+-MTN?N5MUB@hZ$~djHz*nnL+{y}4zG9LF1;NQ?t2oB;t>c4b|(OV zaE3Wz;NE+OfC~>M|KBhNH!rBm-b_I}X6U||pHt=r!|chX$7A>I!ghxu_s#$Ve*6f( zMIiqiM|)F_;ZY>_pg4KCBb}fa=$<$pJe<#daQhkI_^GJ>5iHyt>9!}E1CLEc^gZ^! zf8idUdjk3JfROzG_Y(zSJn)qt1OI0n*zxESd(lw{7ZlX}2QEl<;{T?3Vc>2*GUA0W8)AE833ICHcdQm4Ec{vy{1q%xD#OYaM8eEkcKc%FBlpl_-Eg*wRi0( z>P`YN0|UuW!P9P0{Hzw?p$2!uz)(AlU+#;ZWDuR}16n766XnJ;MjZOq=!S4{fI6Pr z8NIL5G7O}?N!k4#2DoPX1pzP~G?V&!#YJ0DSJl`^M^Rr;NykXg6^-!tIyg(MGFV3- zINCsPWbmk_^!u2DRsP=5M023q|34Hsq=-Ls8GgWIghT;J zS3)2#+E6bK$Ftwl8DlR-KLT3hKn~>abeCB6q5Jz9`T7KRchTxHQU6W?0?h!~RmXFc zvHpPT^9262P!l+|yHsM6{+Tn7xj-Ou3V70G&VAJl{eO4&k-diA(J3|{dquz@RXkfQ z_Yd0kn?cdzfv^Zl5QvWp1cKlxrTF)y#4n8h9{V#Jo~JB>u*^ zyAR`_t)dFJ7=dgG;SW{mJ=S~(G{yx5GcwRtfkWM3j^CO6*gmpHZUJCAV0;SV!C7Sg zyJY_}8h2-V=bIFMUX~sQ*ur>hn8JUvzeHzuI#v460vAB01IBbmE<=nxY5t5M0Quz(D2?+095ARs5VW0RwcT->KW?|M{z(U z_l+vm{AX3CcUNuEZ?Y)^D&ucdC#`-~CAPat_v-VdHlVqA1O(Eb(Al^m!>p`|GyxufQ02PYMF@gXouf_Dourvy-c2tP7+2r)$yLT$of^!Og(PGO;(LnB`10b0Neq5uid2hEqk0LbQyeS(q6a7`6bh64WptlVM9E z$TX;7i3J5YnaPPInfZCTNPA55Dsywd_VjocV7CXmqxn%By#Qz()E?l;Hc5%e*+e=1 zbb@>EmZkO`+knnw02-l&;`o=ChC&TT@jwOC1A4CUiFg7EWY>l5E(ZI7R&fDMmP4`Y zKNE%rV0M+KCh3uBhdhcMVk|iA$W6@5BgK+SPx%7dfKJw8V_;A~u|$s*rzNE&nK{LT zZGpu1^MKtbiIf#;3j+fvk@9gcFl1#W7eiv%iFG3OqytH!Afpsbge01P{%27Drhm9m z3=B&eePKrFxdg`tm*f|vf|DaoGa=54tyzNNJWjZoAm@qmLY-G!m;-U*r2j?uoVcZG zNr(rJUC{()28Q`O3=E4kbnFXJ5z5*v Date: Sun, 24 Mar 2024 18:00:38 -0400 Subject: [PATCH 115/126] r/aws_m2_application: Tidy up acceptance tests. --- internal/service/m2/application_test.go | 57 +++++++------------------ internal/service/m2/environment_test.go | 8 +--- 2 files changed, 17 insertions(+), 48 deletions(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 1841fa73a03..867d1c761b2 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -5,23 +5,18 @@ package m2_test import ( "context" - "errors" "fmt" - "os" "testing" "github.com/YakDriver/regexache" - "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" - "github.com/aws/aws-sdk-go-v2/service/m2/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-aws/internal/acctest" "github.com/hashicorp/terraform-provider-aws/internal/conns" - "github.com/hashicorp/terraform-provider-aws/internal/create" - "github.com/hashicorp/terraform-provider-aws/internal/errs" tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -30,9 +25,6 @@ func TestAccM2Application_basic(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") } - - skipIfDemoAppMissing(t) - var application m2.GetApplicationOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" @@ -69,7 +61,6 @@ func TestAccM2Application_full(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") } - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" var application m2.GetApplicationOutput @@ -104,9 +95,6 @@ func TestAccM2Application_update(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") } - - skipIfDemoAppMissing(t) - var application m2.GetApplicationOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" @@ -153,9 +141,6 @@ func TestAccM2Application_disappears(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") } - - skipIfDemoAppMissing(t) - var application m2.GetApplicationOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" @@ -187,7 +172,6 @@ func TestAccM2Application_tags(t *testing.T) { if testing.Short() { t.Skip("skipping long-running test in short mode") } - rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" var application m2.GetApplicationOutput @@ -254,44 +238,39 @@ func testAccCheckApplicationDestroy(ctx context.Context) resource.TestCheckFunc continue } - _, err := conn.GetApplication(ctx, &m2.GetApplicationInput{ - ApplicationId: aws.String(rs.Primary.ID), - }) - if errs.IsA[*types.ResourceNotFoundException](err) { - return nil + _, err := tfm2.FindEnvironmentByID(ctx, conn, rs.Primary.ID) + + if tfresource.NotFound(err) { + continue } + if err != nil { - return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameApplication, rs.Primary.ID, err) + return err } - return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameApplication, rs.Primary.ID, errors.New("not destroyed")) + return fmt.Errorf("Mainframe Modernization Application %s still exists", rs.Primary.ID) } return nil } } -func testAccCheckApplicationExists(ctx context.Context, name string, application *m2.GetApplicationOutput) resource.TestCheckFunc { +func testAccCheckApplicationExists(ctx context.Context, n string, v *m2.GetApplicationOutput) resource.TestCheckFunc { return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[name] + rs, ok := s.RootModule().Resources[n] if !ok { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameApplication, name, errors.New("not found")) - } - - if rs.Primary.ID == "" { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameApplication, name, errors.New("not set")) + return fmt.Errorf("Not found: %s", n) } conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - resp, err := conn.GetApplication(ctx, &m2.GetApplicationInput{ - ApplicationId: aws.String(rs.Primary.ID), - }) + + output, err := tfm2.FindApplicationByID(ctx, conn, rs.Primary.ID) if err != nil { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameApplication, rs.Primary.ID, err) + return err } - *application = *resp + *v = *output return nil } @@ -338,12 +317,6 @@ resource "aws_m2_application" "test" { `, rName, engineType, version) } -func skipIfDemoAppMissing(t *testing.T) { - if _, err := os.Stat("test-fixtures/PlanetsDemo-v1.zip"); errors.Is(err, os.ErrNotExist) { - t.Skip("Download test-fixtures/PlanetsDemo-v1.zip from: https://docs.aws.amazon.com/m2/latest/userguide/tutorial-runtime-ba.html") - } -} - func testAccApplicationConfig_full(rName string) string { return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` resource "aws_s3_bucket" "test" { diff --git a/internal/service/m2/environment_test.go b/internal/service/m2/environment_test.go index e935c3b2a36..2f68f563318 100644 --- a/internal/service/m2/environment_test.go +++ b/internal/service/m2/environment_test.go @@ -116,9 +116,7 @@ func TestAccM2Environment_tags(t *testing.T) { PreCheck: func() { acctest.PreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentDestroy(ctx), - ), + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { Config: testAccEnvironmentConfig_tags1(rName, "key1", "value1"), @@ -167,9 +165,7 @@ func TestAccM2Environment_full(t *testing.T) { PreCheck: func() { acctest.PreCheck(ctx, t) }, ErrorCheck: acctest.ErrorCheck(t, names.M2), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckEnvironmentDestroy(ctx), - ), + CheckDestroy: testAccCheckEnvironmentDestroy(ctx), Steps: []resource.TestStep{ { Config: testAccEnvironmentConfig_full(rName), From b8b1a2b13eece8b73a11fc560f99eba2a7b2455a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 08:14:03 -0400 Subject: [PATCH 116/126] r/aws_m2_application: Corrections. --- internal/service/m2/application.go | 16 ++++++++-------- internal/service/m2/consts.go | 12 ++++++++++++ 2 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 internal/service/m2/consts.go diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index a3d1e7729b4..b4658d9dbee 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -127,9 +127,6 @@ func (r *applicationResource) Schema(ctx context.Context, request resource.Schem }, "s3_location": schema.StringAttribute{ Optional: true, - Validators: []validator.String{ - stringvalidator.RegexMatches(regexache.MustCompile(`^\S{1,2000}$`), ""), - }, }, }, }, @@ -174,7 +171,9 @@ func (r *applicationResource) Create(ctx context.Context, request resource.Creat input.ClientToken = aws.String(sdkid.UniqueId()) input.Tags = getTagsIn(ctx) - output, err := conn.CreateApplication(ctx, input) + outputRaw, err := tfresource.RetryWhenIsAErrorMessageContains[*awstypes.AccessDeniedException](ctx, propagationTimeout, func() (interface{}, error) { + return conn.CreateApplication(ctx, input) + }, "does not have proper Trust Policy for M2 service") if err != nil { response.Diagnostics.AddError(fmt.Sprintf("creating Mainframe Modernization Application (%s)", name), err.Error()) @@ -183,7 +182,7 @@ func (r *applicationResource) Create(ctx context.Context, request resource.Creat } // Set values for unknowns. - data.ApplicationID = fwflex.StringToFramework(ctx, output.ApplicationId) + data.ApplicationID = fwflex.StringToFramework(ctx, outputRaw.(*m2.CreateApplicationOutput).ApplicationId) data.setID() app, err := waitApplicationCreated(ctx, conn, data.ID.ValueString(), r.CreateTimeout(ctx, data.Timeouts)) @@ -277,7 +276,7 @@ func (r *applicationResource) Update(ctx context.Context, request resource.Updat if !new.Definition.Equal(old.Definition) || !new.Description.Equal(old.Description) { input := &m2.UpdateApplicationInput{ ApplicationId: flex.StringFromFramework(ctx, new.ID), - CurrentApplicationVersion: flex.Int32FromFramework(ctx, new.CurrentVersion), + CurrentApplicationVersion: flex.Int32FromFramework(ctx, old.CurrentVersion), } if !new.Definition.Equal(old.Definition) { @@ -313,6 +312,8 @@ func (r *applicationResource) Update(ctx context.Context, request resource.Updat } new.CurrentVersion = types.Int64Value(int64(applicationVersion)) + } else { + new.CurrentVersion = old.CurrentVersion } response.Diagnostics.Append(response.State.Set(ctx, &new)...) @@ -494,8 +495,7 @@ func waitApplicationDeleted(ctx context.Context, conn *m2.Client, id string, tim type applicationResourceModel struct { ApplicationID types.String `tfsdk:"application_id"` - ARN types.String `tfsdk:"application_arn"` - ClientToken types.String `tfsdk:"client_token"` + ApplicationARN types.String `tfsdk:"arn"` CurrentVersion types.Int64 `tfsdk:"current_version"` Definition fwtypes.ListNestedObjectValueOf[definitionModel] `tfsdk:"definition"` Description types.String `tfsdk:"description"` diff --git a/internal/service/m2/consts.go b/internal/service/m2/consts.go new file mode 100644 index 00000000000..ace006bc5d1 --- /dev/null +++ b/internal/service/m2/consts.go @@ -0,0 +1,12 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package m2 + +import ( + "time" +) + +const ( + propagationTimeout = 2 * time.Minute +) From ef871a590e3dc380c41c2366017c8a9f842d99a2 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 08:14:24 -0400 Subject: [PATCH 117/126] r/aws_m2_application: Tidy up acceptance tests. --- internal/service/m2/application_test.go | 231 ++++++++++++++---------- 1 file changed, 136 insertions(+), 95 deletions(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 867d1c761b2..228ac381e65 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -41,10 +41,20 @@ func TestAccM2Application_basic(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccApplicationConfig_basic(rName, "bluage"), - Check: resource.ComposeTestCheckFunc( + Check: resource.ComposeAggregateTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttrSet(resourceName, "application_id"), acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + resource.TestCheckResourceAttr(resourceName, "current_version", "1"), + resource.TestCheckResourceAttr(resourceName, "definition.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "definition.0.content"), + resource.TestCheckNoResourceAttr(resourceName, "definition.0.s3_location"), + resource.TestCheckNoResourceAttr(resourceName, "description"), + resource.TestCheckResourceAttr(resourceName, "engine_type", "bluage"), + resource.TestCheckNoResourceAttr(resourceName, "kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckNoResourceAttr(resourceName, "role_arn"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), ), }, { @@ -56,174 +66,169 @@ func TestAccM2Application_basic(t *testing.T) { }) } -func TestAccM2Application_full(t *testing.T) { +func TestAccM2Application_disappears(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { t.Skip("skipping long-running test in short mode") } + var application m2.GetApplicationOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" - var application m2.GetApplicationOutput resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccApplicationPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationDestroy(ctx), - ), + CheckDestroy: testAccCheckApplicationDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccApplicationConfig_full(rName), - Check: resource.ComposeAggregateTestCheckFunc( + Config: testAccApplicationConfig_basic(rName, "bluage"), + Check: resource.ComposeTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "name", rName), - acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceApplication, resourceName), ), - }, - { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, + ExpectNonEmptyPlan: true, }, }, }) } -func TestAccM2Application_update(t *testing.T) { +func TestAccM2Application_tags(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { t.Skip("skipping long-running test in short mode") } - var application m2.GetApplicationOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" + var application m2.GetApplicationOutput resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { - acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) - testAccPreCheck(ctx, t) - }, - ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: testAccCheckApplicationDestroy(ctx), + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationDestroy(ctx), + ), Steps: []resource.TestStep{ { - Config: testAccApplicationConfig_versioned(rName, "bluage", "v1"), + Config: testAccApplicationConfig_tags1(rName, "key1", "value1"), Check: resource.ComposeTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "name", rName), - resource.TestCheckResourceAttr(resourceName, "current_version", "1"), - acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), ), }, { - Config: testAccApplicationConfig_versioned(rName, "bluage", "v2"), + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccApplicationConfig_tags2(rName, "key1", "value1updated", "key2", "value2"), Check: resource.ComposeTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "name", rName), - resource.TestCheckResourceAttr(resourceName, "current_version", "2"), - acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), + resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1updated"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), ), }, { - ResourceName: resourceName, - ImportState: true, - ImportStateVerify: true, + Config: testAccApplicationConfig_tags1(rName, "key2", "value2"), + Check: resource.ComposeTestCheckFunc( + testAccCheckApplicationExists(ctx, resourceName, &application), + resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), + resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + ), }, }, }) } -func TestAccM2Application_disappears(t *testing.T) { +func TestAccM2Application_full(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { t.Skip("skipping long-running test in short mode") } - var application m2.GetApplicationOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" + var application m2.GetApplicationOutput resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { - acctest.PreCheck(ctx, t) - acctest.PreCheckPartitionHasService(t, names.M2EndpointID) - testAccApplicationPreCheck(ctx, t) - }, - ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, names.M2), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: testAccCheckApplicationDestroy(ctx), + CheckDestroy: resource.ComposeAggregateTestCheckFunc( + testAccCheckApplicationDestroy(ctx), + ), Steps: []resource.TestStep{ { - Config: testAccApplicationConfig_basic(rName, "bluage"), - Check: resource.ComposeTestCheckFunc( + Config: testAccApplicationConfig_full(rName), + Check: resource.ComposeAggregateTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), - acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceApplication, resourceName), + resource.TestCheckResourceAttrSet(resourceName, "application_id"), + acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "m2", regexache.MustCompile(`app/.+`)), + resource.TestCheckResourceAttr(resourceName, "current_version", "1"), + resource.TestCheckResourceAttr(resourceName, "definition.#", "1"), + resource.TestCheckResourceAttrSet(resourceName, "definition.0.content"), + resource.TestCheckNoResourceAttr(resourceName, "definition.0.s3_location"), + resource.TestCheckResourceAttr(resourceName, "description", "testing"), + resource.TestCheckResourceAttr(resourceName, "engine_type", "bluage"), + resource.TestCheckResourceAttrSet(resourceName, "kms_key_id"), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttrSet(resourceName, "role_arn"), + resource.TestCheckResourceAttr(resourceName, "tags.%", "0"), ), - ExpectNonEmptyPlan: true, + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) } -func TestAccM2Application_tags(t *testing.T) { +func TestAccM2Application_update(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { t.Skip("skipping long-running test in short mode") } + var application m2.GetApplicationOutput rName := sdkacctest.RandomWithPrefix(acctest.ResourcePrefix) resourceName := "aws_m2_application.test" - var application m2.GetApplicationOutput - tags1 := ` - tags = { - key1 = "value1" - } -` - tags2 := ` - tags = { - key1 = "value1" - key2 = "value2" - } -` - tags3 := ` - tags = { - key2 = "value2" - } -` resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { acctest.PreCheck(ctx, t) }, - ErrorCheck: acctest.ErrorCheck(t, names.M2), + PreCheck: func() { + acctest.PreCheck(ctx, t) + acctest.PreCheckPartitionHasService(t, names.M2EndpointID) + testAccPreCheck(ctx, t) + }, + ErrorCheck: acctest.ErrorCheck(t, names.M2ServiceID), ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, - CheckDestroy: resource.ComposeAggregateTestCheckFunc( - testAccCheckApplicationDestroy(ctx), - ), + CheckDestroy: testAccCheckApplicationDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccApplicationConfig_tags(rName, tags1), + Config: testAccApplicationConfig_versioned(rName, "bluage", "v1"), Check: resource.ComposeTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), + resource.TestCheckResourceAttr(resourceName, "current_version", "1"), ), }, { - Config: testAccApplicationConfig_tags(rName, tags2), + Config: testAccApplicationConfig_versioned(rName, "bluage", "v2"), Check: resource.ComposeTestCheckFunc( testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "tags.%", "2"), - resource.TestCheckResourceAttr(resourceName, "tags.key1", "value1"), - resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), + resource.TestCheckResourceAttr(resourceName, "current_version", "2"), ), }, { - Config: testAccApplicationConfig_tags(rName, tags3), - Check: resource.ComposeTestCheckFunc( - testAccCheckApplicationExists(ctx, resourceName, &application), - resource.TestCheckResourceAttr(resourceName, "tags.%", "1"), - resource.TestCheckResourceAttr(resourceName, "tags.key2", "value2"), - ), + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, }, }, }) @@ -308,17 +313,18 @@ resource "aws_s3_object" "test" { resource "aws_m2_application" "test" { name = %[1]q - engine_type = "%[2]s" + engine_type = %[2]q definition { content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = %[3]q }) } + depends_on = [aws_s3_object.test] } `, rName, engineType, version) } func testAccApplicationConfig_full(rName string) string { - return acctest.ConfigCompose(acctest.ConfigAvailableAZsNoOptIn(), fmt.Sprintf(` + return fmt.Sprintf(` resource "aws_s3_bucket" "test" { bucket = %[1]q } @@ -332,16 +338,18 @@ resource "aws_s3_object" "test" { resource "aws_m2_application" "test" { name = %[1]q engine_type = "bluage" + description = "testing" kms_key_id = aws_kms_key.test.arn role_arn = aws_iam_role.test.arn definition { content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = "v1" }) } + depends_on = [aws_s3_object.test, aws_iam_role_policy.test] } resource "aws_kms_key" "test" { - description = "tf-test-cmk-kms-key-id" + description = %[1]q } resource "aws_iam_role" "test" { @@ -362,7 +370,7 @@ resource "aws_iam_role" "test" { } resource "aws_iam_role_policy" "test" { - name = "m2_permissions" + name = %[1]q role = aws_iam_role.test.id policy = jsonencode({ Version = "2012-10-17" @@ -379,10 +387,38 @@ resource "aws_iam_role_policy" "test" { ] }) } -`, rName)) +`, rName) +} + +func testAccApplicationConfig_tags1(rName, tagKey1, tagValue1 string) string { + return fmt.Sprintf(` +resource "aws_s3_bucket" "test" { + bucket = %[1]q +} + +resource "aws_s3_object" "test" { + bucket = aws_s3_bucket.test.id + key = "v1/PlanetsDemo-v1.zip" + source = "test-fixtures/PlanetsDemo-v1.zip" +} + +resource "aws_m2_application" "test" { + name = %[1]q + engine_type = "bluage" + definition { + content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = "v1" }) + } + + tags = { + %[2]q = %[3]q + } + + depends_on = [aws_s3_object.test] +} +`, rName, tagKey1, tagValue1) } -func testAccApplicationConfig_tags(rName, tags string) string { +func testAccApplicationConfig_tags2(rName, tagKey1, tagValue1, tagKey2, tagValue2 string) string { return fmt.Sprintf(` resource "aws_s3_bucket" "test" { bucket = %[1]q @@ -400,8 +436,13 @@ resource "aws_m2_application" "test" { definition { content = templatefile("test-fixtures/application-definition.json", { s3_bucket = aws_s3_bucket.test.id, version = "v1" }) } -%[2]s + + tags = { + %[2]q = %[3]q + %[4]q = %[5]q + } + depends_on = [aws_s3_object.test] } -`, rName, tags) +`, rName, tagKey1, tagValue1, tagKey2, tagValue2) } From 42fefc1b795af621091b335baef6c0477e5bf00c Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 08:14:29 -0400 Subject: [PATCH 118/126] Acceptance test output: % make testacc TESTARGS='-run=TestAccM2Application_' PKG=m2 ACCTEST_PARALLELISM=2 ==> Checking that code complies with gofmt requirements... TF_ACC=1 go1.21.8 test ./internal/service/m2/... -v -count 1 -parallel 2 -run=TestAccM2Application_ -timeout 360m === RUN TestAccM2Application_basic === PAUSE TestAccM2Application_basic === RUN TestAccM2Application_disappears === PAUSE TestAccM2Application_disappears === RUN TestAccM2Application_tags === PAUSE TestAccM2Application_tags === RUN TestAccM2Application_full === PAUSE TestAccM2Application_full === RUN TestAccM2Application_update === PAUSE TestAccM2Application_update === CONT TestAccM2Application_basic === CONT TestAccM2Application_full --- PASS: TestAccM2Application_basic (35.77s) === CONT TestAccM2Application_update --- PASS: TestAccM2Application_full (37.77s) === CONT TestAccM2Application_tags --- PASS: TestAccM2Application_update (73.73s) === CONT TestAccM2Application_disappears --- PASS: TestAccM2Application_tags (103.42s) --- PASS: TestAccM2Application_disappears (50.82s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/m2 171.607s From 837e49191ea4a22eb7e5987a7286eb91dfb52fef Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 11:29:52 -0400 Subject: [PATCH 119/126] r/aws_m2_deployment: Tidy up. --- internal/service/m2/application.go | 70 +-- internal/service/m2/deployment.go | 498 +++++++++------------ internal/service/m2/exports_test.go | 2 +- internal/service/m2/service_package_gen.go | 2 +- website/docs/r/m2_deployment.html.markdown | 8 +- 5 files changed, 257 insertions(+), 323 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 2799e11b10a..63666d203e5 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -29,7 +29,6 @@ import ( "github.com/hashicorp/terraform-provider-aws/internal/errs" "github.com/hashicorp/terraform-provider-aws/internal/errs/fwdiag" "github.com/hashicorp/terraform-provider-aws/internal/framework" - "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" fwflex "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" fwtypes "github.com/hashicorp/terraform-provider-aws/internal/framework/types" tftags "github.com/hashicorp/terraform-provider-aws/internal/tags" @@ -212,14 +211,14 @@ func (r *applicationResource) Read(ctx context.Context, request resource.ReadReq return } - conn := r.Meta().M2Client(ctx) - if err := data.InitFromID(); err != nil { response.Diagnostics.AddError("parsing resource ID", err.Error()) return } + conn := r.Meta().M2Client(ctx) + outputGA, err := findApplicationByID(ctx, conn, data.ID.ValueString()) if tfresource.NotFound(err) { @@ -275,8 +274,8 @@ func (r *applicationResource) Update(ctx context.Context, request resource.Updat if !new.Definition.Equal(old.Definition) || !new.Description.Equal(old.Description) { input := &m2.UpdateApplicationInput{ - ApplicationId: flex.StringFromFramework(ctx, new.ID), - CurrentApplicationVersion: flex.Int32FromFramework(ctx, old.CurrentVersion), + ApplicationId: fwflex.StringFromFramework(ctx, new.ID), + CurrentApplicationVersion: fwflex.Int32FromFramework(ctx, old.CurrentVersion), } if !new.Definition.Equal(old.Definition) { @@ -293,7 +292,7 @@ func (r *applicationResource) Update(ctx context.Context, request resource.Updat } if !new.Description.Equal(old.Description) { - input.Description = flex.StringFromFramework(ctx, new.Description) + input.Description = fwflex.StringFromFramework(ctx, new.Description) } outputUA, err := conn.UpdateApplication(ctx, input) @@ -354,48 +353,46 @@ func (r *applicationResource) ModifyPlan(ctx context.Context, request resource.M } func startApplication(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { - stopInput := &m2.StartApplicationInput{ - ApplicationId: &id, + input := &m2.StartApplicationInput{ + ApplicationId: aws.String(id), } - _, err := conn.StartApplication(ctx, stopInput) - if err != nil { - return nil, err - } + _, err := conn.StartApplication(ctx, input) - app, err := waitApplicationRunning(ctx, conn, id, timeout) if err != nil { return nil, err } - return app, nil + return waitApplicationRunning(ctx, conn, id, timeout) } -func stopApplicationIfRunning(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) error { +func stopApplicationIfRunning(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) (*m2.GetApplicationOutput, error) { app, err := findApplicationByID(ctx, conn, id) + + if tfresource.NotFound(err) { + return nil, nil + } + if err != nil { - if tfresource.NotFound(err) { - return nil - } - return err + return nil, err } if app.Status != awstypes.ApplicationLifecycleRunning { - return nil + return nil, nil } - stopInput := &m2.StopApplicationInput{ - ApplicationId: &id, + input := &m2.StopApplicationInput{ + ApplicationId: aws.String(id), ForceStop: forceStop, } - _, err = conn.StopApplication(ctx, stopInput) + _, err = conn.StopApplication(ctx, input) + if err != nil { - return err + return nil, err } - _, err = waitApplicationStopped(ctx, conn, id, timeout) - return err + return waitApplicationStopped(ctx, conn, id, timeout) } func findApplicationByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetApplicationOutput, error) { @@ -547,8 +544,11 @@ func waitApplicationDeletedFromEnvironment(ctx context.Context, conn *m2.Client, } outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { - return out, err + + if output, ok := outputRaw.(*m2.GetApplicationOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } return nil, err @@ -564,8 +564,11 @@ func waitApplicationStopped(ctx context.Context, conn *m2.Client, id string, tim } outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { - return out, err + + if output, ok := outputRaw.(*m2.GetApplicationOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } return nil, err @@ -581,8 +584,11 @@ func waitApplicationRunning(ctx context.Context, conn *m2.Client, id string, tim } outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetApplicationOutput); ok { - return out, err + + if output, ok := outputRaw.(*m2.GetApplicationOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } return nil, err diff --git a/internal/service/m2/deployment.go b/internal/service/m2/deployment.go index a134ed041f7..178a8f72bb4 100644 --- a/internal/service/m2/deployment.go +++ b/internal/service/m2/deployment.go @@ -7,35 +7,32 @@ import ( "context" "errors" "fmt" - "strings" "time" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" awstypes "github.com/aws/aws-sdk-go-v2/service/m2/types" "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" - "github.com/hashicorp/terraform-plugin-framework/diag" - "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" "github.com/hashicorp/terraform-plugin-framework/types" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + sdkid "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry" - "github.com/hashicorp/terraform-provider-aws/internal/create" "github.com/hashicorp/terraform-provider-aws/internal/enum" "github.com/hashicorp/terraform-provider-aws/internal/errs" + "github.com/hashicorp/terraform-provider-aws/internal/errs/fwdiag" + "github.com/hashicorp/terraform-provider-aws/internal/flex" "github.com/hashicorp/terraform-provider-aws/internal/framework" - "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" + fwflex "github.com/hashicorp/terraform-provider-aws/internal/framework/flex" "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) -// Function annotations are used for resource registration to the Provider. DO NOT EDIT. // @FrameworkResource(name="Deployment") -func newResourceDeployment(_ context.Context) (resource.ResourceWithConfigure, error) { - r := &resourceDeployment{} +func newDeploymentResource(context.Context) (resource.ResourceWithConfigure, error) { + r := &deploymentResource{} r.SetDefaultCreateTimeout(60 * time.Minute) r.SetDefaultUpdateTimeout(60 * time.Minute) @@ -44,21 +41,18 @@ func newResourceDeployment(_ context.Context) (resource.ResourceWithConfigure, e return r, nil } -const ( - ResNameDeployment = "Deployment" -) - -type resourceDeployment struct { +type deploymentResource struct { framework.ResourceWithConfigure + framework.WithImportByID framework.WithTimeouts } -func (r *resourceDeployment) Metadata(_ context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) { - resp.TypeName = "aws_m2_deployment" +func (*deploymentResource) Metadata(_ context.Context, request resource.MetadataRequest, response *resource.MetadataResponse) { + response.TypeName = "aws_m2_deployment" } -func (r *resourceDeployment) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) { - resp.Schema = schema.Schema{ +func (r *deploymentResource) Schema(ctx context.Context, request resource.SchemaRequest, response *resource.SchemaResponse) { + response.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ "application_id": schema.StringAttribute{ Required: true, @@ -69,8 +63,8 @@ func (r *resourceDeployment) Schema(ctx context.Context, req resource.SchemaRequ "application_version": schema.Int64Attribute{ Required: true, }, - "client_token": schema.StringAttribute{ - Optional: true, + "deployment_id": schema.StringAttribute{ + Computed: true, }, "environment_id": schema.StringAttribute{ Required: true, @@ -81,7 +75,7 @@ func (r *resourceDeployment) Schema(ctx context.Context, req resource.SchemaRequ "force_stop": schema.BoolAttribute{ Optional: true, }, - "id": framework.IDAttribute(), + names.AttrID: framework.IDAttribute(), "start": schema.BoolAttribute{ Required: true, }, @@ -96,342 +90,263 @@ func (r *resourceDeployment) Schema(ctx context.Context, req resource.SchemaRequ } } -func (r *resourceDeployment) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { - conn := r.Meta().M2Client(ctx) - - var plan resourceDeploymentData - resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) - if resp.Diagnostics.HasError() { +func (r *deploymentResource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) { + var data deploymentResourceModel + response.Diagnostics.Append(request.Plan.Get(ctx, &data)...) + if response.Diagnostics.HasError() { return } - in, diags := plan.createDeploymentInput(ctx) - resp.Diagnostics.Append(diags...) - if resp.Diagnostics.HasError() { + conn := r.Meta().M2Client(ctx) + + input := &m2.CreateDeploymentInput{} + response.Diagnostics.Append(fwflex.Expand(ctx, data, input)...) + if response.Diagnostics.HasError() { return } - out, err := conn.CreateDeployment(ctx, in) + // Additional fields. + input.ClientToken = aws.String(sdkid.UniqueId()) + + output, err := conn.CreateDeployment(ctx, input) + if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameDeployment, plan.ApplicationId.String(), err), - err.Error(), - ) - return - } - if out == nil || out.DeploymentId == nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionCreating, ResNameDeployment, plan.ApplicationId.String(), nil), - errors.New("empty output").Error(), - ) + response.Diagnostics.AddError("creating Mainframe Modernization Deployment", err.Error()) + return } - deploymentId := DeploymentId(plan.ApplicationId.ValueString(), *out.DeploymentId) + // Set values for unknowns. + data.DeploymentID = fwflex.StringToFramework(ctx, output.DeploymentId) + data.setID() - plan.ID = flex.StringValueToFramework(ctx, deploymentId) + timeout := r.CreateTimeout(ctx, data.Timeouts) + if _, err := waitDeploymentCreated(ctx, conn, data.ApplicationID.ValueString(), data.DeploymentID.ValueString(), timeout); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Deployment (%s) create", data.ID.ValueString()), err.Error()) - createTimeout := r.CreateTimeout(ctx, plan.Timeouts) - deployment, err := waitDeploymentCreated(ctx, conn, plan.ID.ValueString(), createTimeout) - if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameDeployment, plan.ApplicationId.String(), err), - err.Error(), - ) return } - if plan.Start.ValueBool() { - _, err = startApplication(ctx, conn, plan.ApplicationId.ValueString(), createTimeout) - if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForCreation, ResNameDeployment, plan.ApplicationId.String(), err), - err.Error(), - ) + if data.Start.ValueBool() { + applicationID := data.ApplicationID.ValueString() + if _, err := startApplication(ctx, conn, applicationID, timeout); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("starting Mainframe Modernization Application (%s)", applicationID), err.Error()) + return } } - outDiags := plan.refreshFromOutput(ctx, deployment) - resp.Diagnostics.Append(outDiags...) - resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) + response.Diagnostics.Append(response.State.Set(ctx, data)...) } -func (r *resourceDeployment) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) { - conn := r.Meta().M2Client(ctx) +func (r *deploymentResource) Read(ctx context.Context, request resource.ReadRequest, response *resource.ReadResponse) { + var data deploymentResourceModel + response.Diagnostics.Append(request.State.Get(ctx, &data)...) + if response.Diagnostics.HasError() { + return + } + + if err := data.InitFromID(); err != nil { + response.Diagnostics.AddError("parsing resource ID", err.Error()) - var state resourceDeploymentData - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { return } - out, err := findDeploymentByID(ctx, conn, state.ID.ValueString()) + conn := r.Meta().M2Client(ctx) + + outputGD, err := findDeploymentByTwoPartKey(ctx, conn, data.ApplicationID.ValueString(), data.DeploymentID.ValueString()) + if tfresource.NotFound(err) { - resp.State.RemoveResource(ctx) + response.Diagnostics.Append(fwdiag.NewResourceNotFoundWarningDiagnostic(err)) + response.State.RemoveResource(ctx) + return } + if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameDeployment, state.ID.String(), err), - err.Error(), - ) - return - } - diags := state.refreshFromOutput(ctx, out) - resp.Diagnostics.Append(diags...) - if resp.Diagnostics.HasError() { + response.Diagnostics.AddError(fmt.Sprintf("reading Mainframe Modernization Deployment (%s)", data.ID.ValueString()), err.Error()) + return } - applicationId, _, err := DeploymentParseResourceId(state.ID.ValueString()) - if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameDeployment, state.ID.String(), err), - err.Error(), - ) + // Set attributes for import. + response.Diagnostics.Append(fwflex.Flatten(ctx, outputGD, &data)...) + if response.Diagnostics.HasError() { return } - app, err := findApplicationByID(ctx, conn, applicationId) + // Additional fields. + outputGA, err := findApplicationByID(ctx, conn, data.ApplicationID.ValueString()) if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionSetting, ResNameDeployment, state.ID.String(), err), - err.Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("reading Mainframe Modernization Application (%s)", data.ApplicationID.ValueString()), err.Error()) + return } - state.refreshFromApplicationOutput(app) - resp.Diagnostics.Append(resp.State.Set(ctx, &state)...) -} + data.Start = types.BoolValue(outputGA.Status == awstypes.ApplicationLifecycleRunning) -func (r *resourceDeployment) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) { - conn := r.Meta().M2Client(ctx) + response.Diagnostics.Append(response.State.Set(ctx, &data)...) +} - var plan, state resourceDeploymentData - resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { +func (r *deploymentResource) Update(ctx context.Context, request resource.UpdateRequest, response *resource.UpdateResponse) { + var old, new deploymentResourceModel + response.Diagnostics.Append(request.Plan.Get(ctx, &new)...) + if response.Diagnostics.HasError() { + return + } + response.Diagnostics.Append(request.State.Get(ctx, &old)...) + if response.Diagnostics.HasError() { return } - plan.ID = types.StringUnknown() + conn := r.Meta().M2Client(ctx) - updateTimeout := r.UpdateTimeout(ctx, plan.Timeouts) + timeout := r.UpdateTimeout(ctx, new.Timeouts) + if !new.ApplicationVersion.Equal(old.ApplicationVersion) { + applicationID := new.ApplicationID.ValueString() - if !plan.ApplicationVersion.Equal(state.ApplicationVersion) { - applicationId := flex.StringFromFramework(ctx, plan.ApplicationId) + // Stop the application if it was running. + if old.Start.ValueBool() { + if _, err := stopApplicationIfRunning(ctx, conn, applicationID, new.ForceStop.ValueBool(), timeout); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("stopping Mainframe Modernization Application (%s)", applicationID), err.Error()) - // Stop the application if it was running - if state.Start.ValueBool() { - err := stopApplicationIfRunning(ctx, conn, *applicationId, plan.ForceStop.ValueBool(), updateTimeout) - if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), err), - err.Error(), - ) return } } - // Create the updated deployment - in, diags := plan.createDeploymentInput(ctx) - resp.Diagnostics.Append(diags...) - if resp.Diagnostics.HasError() { + input := &m2.CreateDeploymentInput{} + response.Diagnostics.Append(fwflex.Expand(ctx, new, input)...) + if response.Diagnostics.HasError() { return } - out, err := conn.CreateDeployment(ctx, in) - if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), err), - err.Error(), - ) - return - } - if out == nil || out.DeploymentId == nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), nil), - errors.New("empty output").Error(), - ) - return - } + // Additional fields. + input.ClientToken = aws.String(sdkid.UniqueId()) - combinedId := DeploymentId(plan.ApplicationId.ValueString(), *out.DeploymentId) - plan.ID = flex.StringValueToFramework(ctx, combinedId) + output, err := conn.CreateDeployment(ctx, input) - deployment, err := waitDeploymentUpdated(ctx, conn, plan.ID.ValueString(), updateTimeout) if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForUpdate, ResNameDeployment, plan.ApplicationId.String(), err), - err.Error(), - ) + response.Diagnostics.AddError("creating Mainframe Modernization Deployment", err.Error()) + return } - outDiags := plan.refreshFromOutput(ctx, deployment) - resp.Diagnostics.Append(outDiags...) - if resp.Diagnostics.HasError() { + + // Set values for unknowns. + new.DeploymentID = fwflex.StringToFramework(ctx, output.DeploymentId) + new.setID() + + if _, err := waitDeploymentUpdated(ctx, conn, new.ApplicationID.ValueString(), new.DeploymentID.ValueString(), timeout); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Deployment (%s) update", new.ID.ValueString()), err.Error()) + return } } - // Start the application if plan says to - if plan.Start.ValueBool() { - app, err := startApplication(ctx, conn, plan.ApplicationId.ValueString(), updateTimeout) - if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionUpdating, ResNameDeployment, plan.ApplicationId.String(), err), - err.Error(), - ) + // Start the application if plan says to. + if new.Start.ValueBool() { + applicationID := new.ApplicationID.ValueString() + if _, err := startApplication(ctx, conn, applicationID, timeout); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("starting Mainframe Modernization Application (%s)", applicationID), err.Error()) + return } - plan.refreshFromApplicationOutput(app) } - resp.Diagnostics.Append(resp.State.Set(ctx, plan)...) + response.Diagnostics.Append(response.State.Set(ctx, new)...) } -func (r *resourceDeployment) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) { - conn := r.Meta().M2Client(ctx) - - var state resourceDeploymentData - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { +func (r *deploymentResource) Delete(ctx context.Context, request resource.DeleteRequest, response *resource.DeleteResponse) { + var data deploymentResourceModel + response.Diagnostics.Append(request.State.Get(ctx, &data)...) + if response.Diagnostics.HasError() { return } - deleteTimeout := r.DeleteTimeout(ctx, state.Timeouts) + conn := r.Meta().M2Client(ctx) + + timeout := r.DeleteTimeout(ctx, data.Timeouts) + if data.Start.ValueBool() { + applicationID := data.ApplicationID.ValueString() + if _, err := stopApplicationIfRunning(ctx, conn, applicationID, data.ForceStop.ValueBool(), timeout); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("stopping Mainframe Modernization Application (%s)", applicationID), err.Error()) - if state.Start.ValueBool() { - err := stopApplicationIfRunning(ctx, conn, state.ApplicationId.ValueString(), state.ForceStop.ValueBool(), deleteTimeout) - if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameDeployment, state.ApplicationId.String(), err), - err.Error(), - ) return } } - in := &m2.DeleteApplicationFromEnvironmentInput{ - ApplicationId: flex.StringFromFramework(ctx, state.ApplicationId), - EnvironmentId: flex.StringFromFramework(ctx, state.EnvironmentId), - } + _, err := conn.DeleteApplicationFromEnvironment(ctx, &m2.DeleteApplicationFromEnvironmentInput{ + ApplicationId: fwflex.StringFromFramework(ctx, data.ApplicationID), + EnvironmentId: fwflex.StringFromFramework(ctx, data.EnvironmentID), + }) - _, err := conn.DeleteApplicationFromEnvironment(ctx, in) - if err != nil { - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return - } - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionDeleting, ResNameDeployment, state.ID.String(), err), - err.Error(), - ) + if errs.IsA[*awstypes.ResourceNotFoundException](err) { return } - _, err = waitApplicationDeletedFromEnvironment(ctx, conn, state.ApplicationId.ValueString(), deleteTimeout) if err != nil { - resp.Diagnostics.AddError( - create.ProblemStandardMessage(names.M2, create.ErrActionWaitingForDeletion, ResNameDeployment, state.ID.String(), err), - err.Error(), - ) + response.Diagnostics.AddError(fmt.Sprintf("deleting Mainframe Modernization Deployment (%s)", data.ID.ValueString()), err.Error()) + return } -} -func (r *resourceDeployment) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) { - resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp) + if _, err := waitApplicationDeletedFromEnvironment(ctx, conn, data.ApplicationID.ValueString(), timeout); err != nil { + response.Diagnostics.AddError(fmt.Sprintf("waiting for Mainframe Modernization Deployment (%s) delete", data.ID.ValueString()), err.Error()) + + return + } } -func (r *resourceDeployment) ModifyPlan(ctx context.Context, req resource.ModifyPlanRequest, resp *resource.ModifyPlanResponse) { - if !req.State.Raw.IsNull() && !req.Plan.Raw.IsNull() { - var plan, state resourceDeploymentData - resp.Diagnostics.Append(req.Plan.Get(ctx, &plan)...) - resp.Diagnostics.Append(req.State.Get(ctx, &state)...) - if resp.Diagnostics.HasError() { +func (r *deploymentResource) ModifyPlan(ctx context.Context, request resource.ModifyPlanRequest, response *resource.ModifyPlanResponse) { + if !request.State.Raw.IsNull() && !request.Plan.Raw.IsNull() { + var plan, state deploymentResourceModel + response.Diagnostics.Append(request.Plan.Get(ctx, &plan)...) + if response.Diagnostics.HasError() { + return + } + response.Diagnostics.Append(request.State.Get(ctx, &state)...) + if response.Diagnostics.HasError() { return } if !plan.ApplicationVersion.Equal(state.ApplicationVersion) { - // if the ApplicationVersion changes, ID becomes unknown + // If the ApplicationVersion changes, ID becomes unknown. plan.ID = types.StringUnknown() } - resp.Diagnostics.Append(resp.Plan.Set(ctx, &plan)...) - } -} - -func (r *resourceDeploymentData) refreshFromOutput(ctx context.Context, out *m2.GetDeploymentOutput) diag.Diagnostics { - diags := diag.Diagnostics{} - - diags.Append(flex.Flatten(ctx, out, r)...) - combinedId := DeploymentId(*out.ApplicationId, *out.DeploymentId) - r.ID = flex.StringValueToFramework(ctx, combinedId) - return diags -} - -func (r *resourceDeploymentData) refreshFromApplicationOutput(app *m2.GetApplicationOutput) { - r.Start = types.BoolValue(app.Status == awstypes.ApplicationLifecycleRunning) -} - -func (r *resourceDeploymentData) createDeploymentInput(ctx context.Context) (*m2.CreateDeploymentInput, diag.Diagnostics) { - diags := diag.Diagnostics{} - in := m2.CreateDeploymentInput{} - diags.Append(flex.Expand(ctx, r, &in)...) - - var clientToken string - if r.ClientToken.IsNull() || r.ClientToken.IsUnknown() { - clientToken = id.UniqueId() - } else { - clientToken = r.ClientToken.ValueString() + response.Diagnostics.Append(response.Plan.Set(ctx, &plan)...) } - - in.ClientToken = aws.String(clientToken) - - return &in, diags } -func waitDeploymentCreated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetDeploymentOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.DeploymentLifecycleDeploying), - Target: enum.Slice(awstypes.DeploymentLifecycleSucceeded), - Refresh: statusDeployment(ctx, conn, id), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, +func findDeploymentByTwoPartKey(ctx context.Context, conn *m2.Client, applicationID, deploymentID string) (*m2.GetDeploymentOutput, error) { + input := &m2.GetDeploymentInput{ + ApplicationId: aws.String(applicationID), + DeploymentId: aws.String(deploymentID), } - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetDeploymentOutput); ok { - return out, err - } + output, err := conn.GetDeployment(ctx, input) - return nil, err -} + if errs.IsA[*awstypes.ResourceNotFoundException](err) { + return nil, &retry.NotFoundError{ + LastError: err, + LastRequest: input, + } + } -func waitDeploymentUpdated(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetDeploymentOutput, error) { - stateConf := &retry.StateChangeConf{ - Pending: enum.Slice(awstypes.DeploymentLifecycleDeployUpdate), - Target: enum.Slice(awstypes.DeploymentLifecycleSucceeded), - Refresh: statusDeployment(ctx, conn, id), - Timeout: timeout, - NotFoundChecks: 20, - ContinuousTargetOccurence: 2, + if err != nil { + return nil, err } - outputRaw, err := stateConf.WaitForStateContext(ctx) - if out, ok := outputRaw.(*m2.GetDeploymentOutput); ok { - return out, err + if output == nil { + return nil, tfresource.NewEmptyResultError(input) } - return nil, err + return output, nil } -func statusDeployment(ctx context.Context, conn *m2.Client, id string) retry.StateRefreshFunc { +func statusDeployment(ctx context.Context, conn *m2.Client, applicationID, deploymentID string) retry.StateRefreshFunc { return func() (interface{}, string, error) { - out, err := findDeploymentByID(ctx, conn, id) + output, err := findDeploymentByTwoPartKey(ctx, conn, applicationID, deploymentID) + if tfresource.NotFound(err) { return nil, "", nil } @@ -440,64 +355,77 @@ func statusDeployment(ctx context.Context, conn *m2.Client, id string) retry.Sta return nil, "", err } - return out, string(out.Status), nil + return output, string(output.Status), nil } } -func findDeploymentByID(ctx context.Context, conn *m2.Client, id string) (*m2.GetDeploymentOutput, error) { - applicationId, deploymentId, err := DeploymentParseResourceId(id) - if err != nil { - return nil, err +func waitDeploymentCreated(ctx context.Context, conn *m2.Client, applicationID, deploymentID string, timeout time.Duration) (*m2.GetDeploymentOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.DeploymentLifecycleDeploying), + Target: enum.Slice(awstypes.DeploymentLifecycleSucceeded), + Refresh: statusDeployment(ctx, conn, applicationID, deploymentID), + Timeout: timeout, } - in := &m2.GetDeploymentInput{ - ApplicationId: aws.String(applicationId), - DeploymentId: aws.String(deploymentId), + outputRaw, err := stateConf.WaitForStateContext(ctx) + + if output, ok := outputRaw.(*m2.GetDeploymentOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } - out, err := conn.GetDeployment(ctx, in) - if err != nil { - if errs.IsA[*awstypes.ResourceNotFoundException](err) { - return nil, &retry.NotFoundError{ - LastError: err, - LastRequest: in, - } - } - return nil, err + return nil, err +} + +func waitDeploymentUpdated(ctx context.Context, conn *m2.Client, applicationID, deploymentID string, timeout time.Duration) (*m2.GetDeploymentOutput, error) { + stateConf := &retry.StateChangeConf{ + Pending: enum.Slice(awstypes.DeploymentLifecycleDeployUpdate), + Target: enum.Slice(awstypes.DeploymentLifecycleSucceeded), + Refresh: statusDeployment(ctx, conn, applicationID, deploymentID), + Timeout: timeout, } - if out == nil { - return nil, tfresource.NewEmptyResultError(in) + outputRaw, err := stateConf.WaitForStateContext(ctx) + + if output, ok := outputRaw.(*m2.GetDeploymentOutput); ok { + tfresource.SetLastError(err, errors.New(aws.ToString(output.StatusReason))) + + return output, err } - return out, nil + return nil, err } -type resourceDeploymentData struct { - ApplicationId types.String `tfsdk:"application_id"` +type deploymentResourceModel struct { + ApplicationID types.String `tfsdk:"application_id"` ApplicationVersion types.Int64 `tfsdk:"application_version"` - ClientToken types.String `tfsdk:"client_token"` - EnvironmentId types.String `tfsdk:"environment_id"` + DeploymentID types.String `tfsdk:"deployment_id"` + EnvironmentID types.String `tfsdk:"environment_id"` ForceStop types.Bool `tfsdk:"force_stop"` ID types.String `tfsdk:"id"` Start types.Bool `tfsdk:"start"` Timeouts timeouts.Value `tfsdk:"timeouts"` } -const deploymentIDSeparator = "_" - -func DeploymentId(applicationId, deploymentId string) string { - parts := []string{applicationId, deploymentId} - combinedId := strings.Join(parts, deploymentIDSeparator) - return combinedId -} +const ( + deploymentResourceIDPartCount = 2 +) -func DeploymentParseResourceId(id string) (string, string, error) { - parts := strings.Split(id, deploymentIDSeparator) +func (data *deploymentResourceModel) InitFromID() error { + id := data.ID.ValueString() + parts, err := flex.ExpandResourceId(id, deploymentResourceIDPartCount, false) - if len(parts) == 2 && parts[0] != "" && parts[1] != "" { - return parts[0], parts[1], nil + if err != nil { + return err } - return "", "", fmt.Errorf("unexpected format for ID (%[1]s), expected APPLICATION-ID%[2]sDEPLOYMENT-ID", id, deploymentIDSeparator) + data.ApplicationID = types.StringValue(parts[0]) + data.DeploymentID = types.StringValue(parts[1]) + + return nil +} + +func (data *deploymentResourceModel) setID() { + data.ID = types.StringValue(errs.Must(flex.FlattenResourceId([]string{data.ApplicationID.ValueString(), data.DeploymentID.ValueString()}, deploymentResourceIDPartCount, false))) } diff --git a/internal/service/m2/exports_test.go b/internal/service/m2/exports_test.go index 1b96724bf72..78af08cf6cb 100644 --- a/internal/service/m2/exports_test.go +++ b/internal/service/m2/exports_test.go @@ -6,7 +6,7 @@ package m2 // Exports for use in tests only. var ( ResourceApplication = newApplicationResource - ResourceDeployment = newResourceDeployment + ResourceDeployment = newDeploymentResource ResourceEnvironment = newEnvironmentResource FindApplicationByID = findApplicationByID diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index 2330ff1a216..1f99d3e13d1 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -35,7 +35,7 @@ func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.Servic }, }, { - Factory: newResourceDeployment, + Factory: newDeploymentResource, Name: "Deployment", }, } diff --git a/website/docs/r/m2_deployment.html.markdown b/website/docs/r/m2_deployment.html.markdown index fcf14e6856a..dd59b0218d1 100644 --- a/website/docs/r/m2_deployment.html.markdown +++ b/website/docs/r/m2_deployment.html.markdown @@ -45,17 +45,17 @@ This resource exports the following attributes in addition to the arguments abov ## Import -In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Mainframe Modernization Deployment using the `APPLICATION-ID_DEPLOYMENT-ID`. For example: +In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import Mainframe Modernization Deployment using the `APPLICATION-ID,DEPLOYMENT-ID`. For example: ```terraform import { to = aws_m2_deployment.example - id = "APPLICATION-ID_DEPLOYMENT-ID" + id = "APPLICATION-ID,DEPLOYMENT-ID" } ``` -Using `terraform import`, import Mainframe Modernization Deployment using the `APPLICATION-ID_DEPLOYMENT-ID`. For example: +Using `terraform import`, import Mainframe Modernization Deployment using the `APPLICATION-ID,DEPLOYMENT-ID`. For example: ```console -% terraform import aws_m2_deployment.example APPLICATION-ID_DEPLOYMENT-ID +% terraform import aws_m2_deployment.example APPLICATION-ID,DEPLOYMENT-ID ``` From 93a973caf91a32aa6942d880f71e0b12e0e37e5d Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 11:39:32 -0400 Subject: [PATCH 120/126] r/aws_m2_deployment: Tidy up acceptance tests. --- internal/service/m2/deployment_test.go | 49 +++++++------------------- internal/service/m2/exports_test.go | 5 +-- 2 files changed, 16 insertions(+), 38 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index ab5bbb7d40b..de87dbe2082 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -5,21 +5,17 @@ package m2_test import ( "context" - "errors" "fmt" "testing" - "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/m2" - "github.com/aws/aws-sdk-go-v2/service/m2/types" sdkacctest "github.com/hashicorp/terraform-plugin-testing/helper/acctest" "github.com/hashicorp/terraform-plugin-testing/helper/resource" "github.com/hashicorp/terraform-plugin-testing/terraform" "github.com/hashicorp/terraform-provider-aws/internal/acctest" "github.com/hashicorp/terraform-provider-aws/internal/conns" - "github.com/hashicorp/terraform-provider-aws/internal/create" - "github.com/hashicorp/terraform-provider-aws/internal/errs" tfm2 "github.com/hashicorp/terraform-provider-aws/internal/service/m2" + "github.com/hashicorp/terraform-provider-aws/internal/tfresource" "github.com/hashicorp/terraform-provider-aws/names" ) @@ -175,57 +171,39 @@ func testAccCheckDeploymentDestroy(ctx context.Context) resource.TestCheckFunc { continue } - applicationId, deploymentId, err := tfm2.DeploymentParseResourceId(rs.Primary.ID) - if err != nil { - return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameDeployment, rs.Primary.ID, err) - } + _, err := tfm2.FindDeploymentByTwoPartKey(ctx, conn, rs.Primary.Attributes["application_id"], rs.Primary.Attributes["deployment_id"]) - _, err = conn.GetDeployment(ctx, &m2.GetDeploymentInput{ - ApplicationId: aws.String(applicationId), - DeploymentId: aws.String(deploymentId), - }) - if errs.IsA[*types.ResourceNotFoundException](err) { - return nil + if tfresource.NotFound(err) { + continue } + if err != nil { - return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameDeployment, rs.Primary.ID, err) + return err } - return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameDeployment, rs.Primary.ID, errors.New("not destroyed")) + return fmt.Errorf("Mainframe Modernization Deployment %s still exists", rs.Primary.ID) } return nil } } -func testAccCheckDeploymentExists(ctx context.Context, name string, deployment *m2.GetDeploymentOutput) resource.TestCheckFunc { +func testAccCheckDeploymentExists(ctx context.Context, n string, v *m2.GetDeploymentOutput) resource.TestCheckFunc { return func(s *terraform.State) error { - rs, ok := s.RootModule().Resources[name] + rs, ok := s.RootModule().Resources[n] if !ok { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameDeployment, name, errors.New("not found")) - } - - if rs.Primary.ID == "" { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameDeployment, name, errors.New("not set")) + return fmt.Errorf("Not found: %s", n) } conn := acctest.Provider.Meta().(*conns.AWSClient).M2Client(ctx) - applicationId, deploymentId, err := tfm2.DeploymentParseResourceId(rs.Primary.ID) - if err != nil { - return create.Error(names.M2, create.ErrActionCheckingDestroyed, tfm2.ResNameDeployment, rs.Primary.ID, err) - } - - resp, err := conn.GetDeployment(ctx, &m2.GetDeploymentInput{ - ApplicationId: aws.String(applicationId), - DeploymentId: aws.String(deploymentId), - }) + output, err := tfm2.FindDeploymentByTwoPartKey(ctx, conn, rs.Primary.Attributes["application_id"], rs.Primary.Attributes["deployment_id"]) if err != nil { - return create.Error(names.M2, create.ErrActionCheckingExistence, tfm2.ResNameDeployment, rs.Primary.ID, err) + return err } - *deployment = *resp + *v = *output return nil } @@ -248,7 +226,6 @@ resource "aws_m2_deployment" "test" { func testAccDeploymentConfig_secretsManagerEndpoint(rName string) string { return fmt.Sprintf(` - data "aws_region" "current" {} resource "aws_vpc_endpoint" "secretsmanager" { diff --git a/internal/service/m2/exports_test.go b/internal/service/m2/exports_test.go index 78af08cf6cb..98ccd25e91c 100644 --- a/internal/service/m2/exports_test.go +++ b/internal/service/m2/exports_test.go @@ -9,6 +9,7 @@ var ( ResourceDeployment = newDeploymentResource ResourceEnvironment = newEnvironmentResource - FindApplicationByID = findApplicationByID - FindEnvironmentByID = findEnvironmentByID + FindApplicationByID = findApplicationByID + FindDeploymentByTwoPartKey = findDeploymentByTwoPartKey + FindEnvironmentByID = findEnvironmentByID ) From bd8bdf44931caf12c66364669b5d14314c7360c7 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 12:51:13 -0400 Subject: [PATCH 121/126] r/aws_m2_deployment: Tidy up acceptance tests. --- internal/service/m2/deployment_test.go | 44 ++++++++++++++------------ 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/internal/service/m2/deployment_test.go b/internal/service/m2/deployment_test.go index de87dbe2082..95c6cbc314c 100644 --- a/internal/service/m2/deployment_test.go +++ b/internal/service/m2/deployment_test.go @@ -39,7 +39,7 @@ func TestAccM2Deployment_basic(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", 1, 1, "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", 1, 1, true), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), @@ -74,7 +74,7 @@ func TestAccM2Deployment_disappears(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", 1, 1, "false"), + Config: testAccDeploymentConfig_basic(rName, "bluage", 1, 1, false), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), acctest.CheckFrameworkResourceDisappears(ctx, acctest.Provider, tfm2.ResourceDeployment, resourceName), @@ -105,7 +105,7 @@ func TestAccM2Deployment_nostart(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", 1, 1, "false"), + Config: testAccDeploymentConfig_basic(rName, "bluage", 1, 1, false), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), @@ -140,14 +140,14 @@ func TestAccM2Deployment_update(t *testing.T) { CheckDestroy: testAccCheckDeploymentDestroy(ctx), Steps: []resource.TestStep{ { - Config: testAccDeploymentConfig_basic(rName, "bluage", 1, 1, "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", 1, 1, true), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "1"), ), }, { - Config: testAccDeploymentConfig_basic(rName, "bluage", 2, 2, "true"), + Config: testAccDeploymentConfig_basic(rName, "bluage", 2, 2, true), Check: resource.ComposeTestCheckFunc( testAccCheckDeploymentExists(ctx, resourceName, &deployment), resource.TestCheckResourceAttr(resourceName, "application_version", "2"), @@ -209,23 +209,17 @@ func testAccCheckDeploymentExists(ctx context.Context, n string, v *m2.GetDeploy } } -func testAccDeploymentConfig_basic(rName, engineType string, appVersion, deployVersion int, start string) string { - return acctest.ConfigCompose(testAccEnvironmentConfig_basic(rName, engineType), - testAccApplicationConfig_versioned(rName, engineType, appVersion, 2), - testAccDeploymentConfig_secretsManagerEndpoint(rName), - fmt.Sprintf(` -resource "aws_m2_deployment" "test" { - environment_id = aws_m2_environment.test.id - application_id = aws_m2_application.test.id - application_version = %[2]d - start = %[3]q - depends_on = [aws_vpc_endpoint.secretsmanager] -} -`, rName, deployVersion, start)) +func testAccDeploymentConfig_basic(rName, engineType string, appVersion, deployVersion int, start bool) string { + return acctest.ConfigCompose(testAccEnvironmentConfig_base(rName), testAccApplicationConfig_versioned(rName, engineType, appVersion, 2), fmt.Sprintf(` +resource "aws_m2_environment" "test" { + name = %[1]q + engine_type = %[2]q + instance_type = "M2.m5.large" + + security_group_ids = [aws_security_group.test.id] + subnet_ids = aws_subnet.test[*].id } -func testAccDeploymentConfig_secretsManagerEndpoint(rName string) string { - return fmt.Sprintf(` data "aws_region" "current" {} resource "aws_vpc_endpoint" "secretsmanager" { @@ -244,5 +238,13 @@ resource "aws_vpc_endpoint" "secretsmanager" { Name = %[1]q } } -`, rName) + +resource "aws_m2_deployment" "test" { + environment_id = aws_m2_environment.test.id + application_id = aws_m2_application.test.id + application_version = %[3]d + start = %[4]t + depends_on = [aws_vpc_endpoint.secretsmanager] +} +`, rName, engineType, deployVersion, start)) } From c02762074f2f3708d2753a59616d7e1c4e1e9688 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 12:51:29 -0400 Subject: [PATCH 122/126] Acceptance test output: % make testacc TESTARGS='-run=TestAccM2Deployment_basic' PKG=m2 ==> Checking that code complies with gofmt requirements... TF_ACC=1 go1.21.8 test ./internal/service/m2/... -v -count 1 -parallel 20 -run=TestAccM2Deployment_basic -timeout 360m === RUN TestAccM2Deployment_basic === PAUSE TestAccM2Deployment_basic === CONT TestAccM2Deployment_basic --- PASS: TestAccM2Deployment_basic (2728.86s) PASS ok github.com/hashicorp/terraform-provider-aws/internal/service/m2 2739.670s From 73641d550fac062cc67d22737ab27d73b2ab2efd Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 12:55:11 -0400 Subject: [PATCH 123/126] Fix terrafmt error. --- internal/service/m2/application_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/m2/application_test.go b/internal/service/m2/application_test.go index 1789fc042b0..c01b4a0b39f 100644 --- a/internal/service/m2/application_test.go +++ b/internal/service/m2/application_test.go @@ -306,7 +306,7 @@ resource "aws_s3_bucket" "test" { } resource "aws_s3_object" "test" { - count = %[4]d + count = %[4]d bucket = aws_s3_bucket.test.id key = "v${count.index + 1}/PlanetsDemo-v${count.index + 1}.zip" From 5aae6b885e190b76f0218a99bf5754ed0b62589e Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 14:42:49 -0400 Subject: [PATCH 124/126] Run 'make gen'. --- internal/service/m2/service_package_gen.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/service/m2/service_package_gen.go b/internal/service/m2/service_package_gen.go index 1f99d3e13d1..bc6f58f47f2 100644 --- a/internal/service/m2/service_package_gen.go +++ b/internal/service/m2/service_package_gen.go @@ -27,6 +27,10 @@ func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.Servic IdentifierAttribute: "arn", }, }, + { + Factory: newDeploymentResource, + Name: "Deployment", + }, { Factory: newEnvironmentResource, Name: "Environment", @@ -34,10 +38,6 @@ func (p *servicePackage) FrameworkResources(ctx context.Context) []*types.Servic IdentifierAttribute: "arn", }, }, - { - Factory: newDeploymentResource, - Name: "Deployment", - }, } } From 8fd8ea485e756635cf28fc2a886f14c2bbc68ebb Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 14:44:23 -0400 Subject: [PATCH 125/126] Fix golangci-lint 'unparam'. --- internal/service/m2/application.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/m2/application.go b/internal/service/m2/application.go index 63666d203e5..f6998fab422 100644 --- a/internal/service/m2/application.go +++ b/internal/service/m2/application.go @@ -352,7 +352,7 @@ func (r *applicationResource) ModifyPlan(ctx context.Context, request resource.M r.SetTagsAll(ctx, request, response) } -func startApplication(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { +func startApplication(ctx context.Context, conn *m2.Client, id string, timeout time.Duration) (*m2.GetApplicationOutput, error) { //nolint:unparam input := &m2.StartApplicationInput{ ApplicationId: aws.String(id), } @@ -366,7 +366,7 @@ func startApplication(ctx context.Context, conn *m2.Client, id string, timeout t return waitApplicationRunning(ctx, conn, id, timeout) } -func stopApplicationIfRunning(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) (*m2.GetApplicationOutput, error) { +func stopApplicationIfRunning(ctx context.Context, conn *m2.Client, id string, forceStop bool, timeout time.Duration) (*m2.GetApplicationOutput, error) { //nolint:unparam app, err := findApplicationByID(ctx, conn, id) if tfresource.NotFound(err) { From b4288bebd52822e9b774177aebc3672c47a3fdd2 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Mon, 25 Mar 2024 14:45:59 -0400 Subject: [PATCH 126/126] Fix 'TestOnceAWeekWindowStringSemanticEquals'. --- internal/framework/types/once_a_week_window_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/framework/types/once_a_week_window_test.go b/internal/framework/types/once_a_week_window_test.go index f0094ebc779..498e32e43f6 100644 --- a/internal/framework/types/once_a_week_window_test.go +++ b/internal/framework/types/once_a_week_window_test.go @@ -93,7 +93,7 @@ func TestOnceAWeekWindowStringSemanticEquals(t *testing.T) { "not equal": { val1: fwtypes.OnceAWeekWindowValue("thu:07:44-thu:09:44"), val2: fwtypes.OnceAWeekWindowValue("thu:07:44-fri:11:09"), - equals: true, + equals: false, }, }