# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Dict, List, Mapping, Optional, Tuple, Union
from .. import _utilities, _tables
from . import outputs

__all__ = [
    'AccountBlobProperties',
    'AccountBlobPropertiesCorsRule',
    'AccountBlobPropertiesDeleteRetentionPolicy',
    'AccountCustomDomain',
    'AccountIdentity',
    'AccountNetworkRules',
    'AccountQueueProperties',
    'AccountQueuePropertiesCorsRule',
    'AccountQueuePropertiesHourMetrics',
    'AccountQueuePropertiesLogging',
    'AccountQueuePropertiesMinuteMetrics',
    'AccountStaticWebsite',
    'ManagementPolicyRule',
    'ManagementPolicyRuleActions',
    'ManagementPolicyRuleActionsBaseBlob',
    'ManagementPolicyRuleActionsSnapshot',
    'ManagementPolicyRuleFilters',
    'ShareAcl',
    'ShareAclAccessPolicy',
    'TableAcl',
    'TableAclAccessPolicy',
    'GetAccountBlobContainerSASPermissionsResult',
    'GetAccountCustomDomainResult',
    'GetAccountSASPermissionsResult',
    'GetAccountSASResourceTypesResult',
    'GetAccountSASServicesResult',
    'GetPolicyRuleResult',
    'GetPolicyRuleActionResult',
    'GetPolicyRuleActionBaseBlobResult',
    'GetPolicyRuleActionSnapshotResult',
    'GetPolicyRuleFilterResult',
]

@pulumi.output_type
class AccountBlobProperties(dict):
    def __init__(__self__, *,
                 cors_rules: Optional[List['outputs.AccountBlobPropertiesCorsRule']] = None,
                 delete_retention_policy: Optional['outputs.AccountBlobPropertiesDeleteRetentionPolicy'] = None):
        """
        :param List['AccountBlobPropertiesCorsRuleArgs'] cors_rules: A `cors_rule` block as defined below.
        :param 'AccountBlobPropertiesDeleteRetentionPolicyArgs' delete_retention_policy: A `delete_retention_policy` block as defined below.
        """
        if cors_rules is not None:
            pulumi.set(__self__, "cors_rules", cors_rules)
        if delete_retention_policy is not None:
            pulumi.set(__self__, "delete_retention_policy", delete_retention_policy)

    @property
    @pulumi.getter(name="corsRules")
    def cors_rules(self) -> Optional[List['outputs.AccountBlobPropertiesCorsRule']]:
        """
        A `cors_rule` block as defined below.
        """
        return pulumi.get(self, "cors_rules")

    @property
    @pulumi.getter(name="deleteRetentionPolicy")
    def delete_retention_policy(self) -> Optional['outputs.AccountBlobPropertiesDeleteRetentionPolicy']:
        """
        A `delete_retention_policy` block as defined below.
        """
        return pulumi.get(self, "delete_retention_policy")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountBlobPropertiesCorsRule(dict):
    def __init__(__self__, *,
                 allowed_headers: List[str],
                 allowed_methods: List[str],
                 allowed_origins: List[str],
                 exposed_headers: List[str],
                 max_age_in_seconds: float):
        """
        :param List[str] allowed_headers: A list of headers that are allowed to be a part of the cross-origin request.
        :param List[str] allowed_methods: A list of http headers that are allowed to be executed by the origin. Valid options are
               `DELETE`, `GET`, `HEAD`, `MERGE`, `POST`, `OPTIONS`, `PUT` or `PATCH`.
        :param List[str] allowed_origins: A list of origin domains that will be allowed by CORS.
        :param List[str] exposed_headers: A list of response headers that are exposed to CORS clients.
        :param float max_age_in_seconds: The number of seconds the client should cache a preflight response.
        """
        pulumi.set(__self__, "allowed_headers", allowed_headers)
        pulumi.set(__self__, "allowed_methods", allowed_methods)
        pulumi.set(__self__, "allowed_origins", allowed_origins)
        pulumi.set(__self__, "exposed_headers", exposed_headers)
        pulumi.set(__self__, "max_age_in_seconds", max_age_in_seconds)

    @property
    @pulumi.getter(name="allowedHeaders")
    def allowed_headers(self) -> List[str]:
        """
        A list of headers that are allowed to be a part of the cross-origin request.
        """
        return pulumi.get(self, "allowed_headers")

    @property
    @pulumi.getter(name="allowedMethods")
    def allowed_methods(self) -> List[str]:
        """
        A list of http headers that are allowed to be executed by the origin. Valid options are
        `DELETE`, `GET`, `HEAD`, `MERGE`, `POST`, `OPTIONS`, `PUT` or `PATCH`.
        """
        return pulumi.get(self, "allowed_methods")

    @property
    @pulumi.getter(name="allowedOrigins")
    def allowed_origins(self) -> List[str]:
        """
        A list of origin domains that will be allowed by CORS.
        """
        return pulumi.get(self, "allowed_origins")

    @property
    @pulumi.getter(name="exposedHeaders")
    def exposed_headers(self) -> List[str]:
        """
        A list of response headers that are exposed to CORS clients.
        """
        return pulumi.get(self, "exposed_headers")

    @property
    @pulumi.getter(name="maxAgeInSeconds")
    def max_age_in_seconds(self) -> float:
        """
        The number of seconds the client should cache a preflight response.
        """
        return pulumi.get(self, "max_age_in_seconds")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountBlobPropertiesDeleteRetentionPolicy(dict):
    def __init__(__self__, *,
                 days: Optional[float] = None):
        """
        :param float days: Specifies the number of days that the blob should be retained, between `1` and `365` days. Defaults to `7`.
        """
        if days is not None:
            pulumi.set(__self__, "days", days)

    @property
    @pulumi.getter
    def days(self) -> Optional[float]:
        """
        Specifies the number of days that the blob should be retained, between `1` and `365` days. Defaults to `7`.
        """
        return pulumi.get(self, "days")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountCustomDomain(dict):
    def __init__(__self__, *,
                 name: str,
                 use_subdomain: Optional[bool] = None):
        """
        :param str name: The Custom Domain Name to use for the Storage Account, which will be validated by Azure.
        :param bool use_subdomain: Should the Custom Domain Name be validated by using indirect CNAME validation?
        """
        pulumi.set(__self__, "name", name)
        if use_subdomain is not None:
            pulumi.set(__self__, "use_subdomain", use_subdomain)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The Custom Domain Name to use for the Storage Account, which will be validated by Azure.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter(name="useSubdomain")
    def use_subdomain(self) -> Optional[bool]:
        """
        Should the Custom Domain Name be validated by using indirect CNAME validation?
        """
        return pulumi.get(self, "use_subdomain")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountIdentity(dict):
    def __init__(__self__, *,
                 type: str,
                 principal_id: Optional[str] = None,
                 tenant_id: Optional[str] = None):
        """
        :param str type: Specifies the identity type of the Storage Account. At this time the only allowed value is `SystemAssigned`.
        :param str principal_id: The Principal ID for the Service Principal associated with the Identity of this Storage Account.
        :param str tenant_id: The Tenant ID for the Service Principal associated with the Identity of this Storage Account.
        """
        pulumi.set(__self__, "type", type)
        if principal_id is not None:
            pulumi.set(__self__, "principal_id", principal_id)
        if tenant_id is not None:
            pulumi.set(__self__, "tenant_id", tenant_id)

    @property
    @pulumi.getter
    def type(self) -> str:
        """
        Specifies the identity type of the Storage Account. At this time the only allowed value is `SystemAssigned`.
        """
        return pulumi.get(self, "type")

    @property
    @pulumi.getter(name="principalId")
    def principal_id(self) -> Optional[str]:
        """
        The Principal ID for the Service Principal associated with the Identity of this Storage Account.
        """
        return pulumi.get(self, "principal_id")

    @property
    @pulumi.getter(name="tenantId")
    def tenant_id(self) -> Optional[str]:
        """
        The Tenant ID for the Service Principal associated with the Identity of this Storage Account.
        """
        return pulumi.get(self, "tenant_id")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountNetworkRules(dict):
    def __init__(__self__, *,
                 default_action: str,
                 bypasses: Optional[List[str]] = None,
                 ip_rules: Optional[List[str]] = None,
                 virtual_network_subnet_ids: Optional[List[str]] = None):
        """
        :param str default_action: Specifies the default action of allow or deny when no other rules match. Valid options are `Deny` or `Allow`.
        :param List[str] bypasses: Specifies whether traffic is bypassed for Logging/Metrics/AzureServices. Valid options are
               any combination of `Logging`, `Metrics`, `AzureServices`, or `None`.
        :param List[str] ip_rules: List of public IP or IP ranges in CIDR Format. Only IPV4 addresses are allowed. Private IP address ranges (as defined in [RFC 1918](https://tools.ietf.org/html/rfc1918#section-3)) are not allowed.
        :param List[str] virtual_network_subnet_ids: A list of resource ids for subnets.
        """
        pulumi.set(__self__, "default_action", default_action)
        if bypasses is not None:
            pulumi.set(__self__, "bypasses", bypasses)
        if ip_rules is not None:
            pulumi.set(__self__, "ip_rules", ip_rules)
        if virtual_network_subnet_ids is not None:
            pulumi.set(__self__, "virtual_network_subnet_ids", virtual_network_subnet_ids)

    @property
    @pulumi.getter(name="defaultAction")
    def default_action(self) -> str:
        """
        Specifies the default action of allow or deny when no other rules match. Valid options are `Deny` or `Allow`.
        """
        return pulumi.get(self, "default_action")

    @property
    @pulumi.getter
    def bypasses(self) -> Optional[List[str]]:
        """
        Specifies whether traffic is bypassed for Logging/Metrics/AzureServices. Valid options are
        any combination of `Logging`, `Metrics`, `AzureServices`, or `None`.
        """
        return pulumi.get(self, "bypasses")

    @property
    @pulumi.getter(name="ipRules")
    def ip_rules(self) -> Optional[List[str]]:
        """
        List of public IP or IP ranges in CIDR Format. Only IPV4 addresses are allowed. Private IP address ranges (as defined in [RFC 1918](https://tools.ietf.org/html/rfc1918#section-3)) are not allowed.
        """
        return pulumi.get(self, "ip_rules")

    @property
    @pulumi.getter(name="virtualNetworkSubnetIds")
    def virtual_network_subnet_ids(self) -> Optional[List[str]]:
        """
        A list of resource ids for subnets.
        """
        return pulumi.get(self, "virtual_network_subnet_ids")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountQueueProperties(dict):
    def __init__(__self__, *,
                 cors_rules: Optional[List['outputs.AccountQueuePropertiesCorsRule']] = None,
                 hour_metrics: Optional['outputs.AccountQueuePropertiesHourMetrics'] = None,
                 logging: Optional['outputs.AccountQueuePropertiesLogging'] = None,
                 minute_metrics: Optional['outputs.AccountQueuePropertiesMinuteMetrics'] = None):
        """
        :param List['AccountQueuePropertiesCorsRuleArgs'] cors_rules: A `cors_rule` block as defined above.
        :param 'AccountQueuePropertiesHourMetricsArgs' hour_metrics: A `hour_metrics` block as defined below.
        :param 'AccountQueuePropertiesLoggingArgs' logging: A `logging` block as defined below.
        :param 'AccountQueuePropertiesMinuteMetricsArgs' minute_metrics: A `minute_metrics` block as defined below.
        """
        if cors_rules is not None:
            pulumi.set(__self__, "cors_rules", cors_rules)
        if hour_metrics is not None:
            pulumi.set(__self__, "hour_metrics", hour_metrics)
        if logging is not None:
            pulumi.set(__self__, "logging", logging)
        if minute_metrics is not None:
            pulumi.set(__self__, "minute_metrics", minute_metrics)

    @property
    @pulumi.getter(name="corsRules")
    def cors_rules(self) -> Optional[List['outputs.AccountQueuePropertiesCorsRule']]:
        """
        A `cors_rule` block as defined above.
        """
        return pulumi.get(self, "cors_rules")

    @property
    @pulumi.getter(name="hourMetrics")
    def hour_metrics(self) -> Optional['outputs.AccountQueuePropertiesHourMetrics']:
        """
        A `hour_metrics` block as defined below.
        """
        return pulumi.get(self, "hour_metrics")

    @property
    @pulumi.getter
    def logging(self) -> Optional['outputs.AccountQueuePropertiesLogging']:
        """
        A `logging` block as defined below.
        """
        return pulumi.get(self, "logging")

    @property
    @pulumi.getter(name="minuteMetrics")
    def minute_metrics(self) -> Optional['outputs.AccountQueuePropertiesMinuteMetrics']:
        """
        A `minute_metrics` block as defined below.
        """
        return pulumi.get(self, "minute_metrics")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountQueuePropertiesCorsRule(dict):
    def __init__(__self__, *,
                 allowed_headers: List[str],
                 allowed_methods: List[str],
                 allowed_origins: List[str],
                 exposed_headers: List[str],
                 max_age_in_seconds: float):
        """
        :param List[str] allowed_headers: A list of headers that are allowed to be a part of the cross-origin request.
        :param List[str] allowed_methods: A list of http headers that are allowed to be executed by the origin. Valid options are
               `DELETE`, `GET`, `HEAD`, `MERGE`, `POST`, `OPTIONS`, `PUT` or `PATCH`.
        :param List[str] allowed_origins: A list of origin domains that will be allowed by CORS.
        :param List[str] exposed_headers: A list of response headers that are exposed to CORS clients.
        :param float max_age_in_seconds: The number of seconds the client should cache a preflight response.
        """
        pulumi.set(__self__, "allowed_headers", allowed_headers)
        pulumi.set(__self__, "allowed_methods", allowed_methods)
        pulumi.set(__self__, "allowed_origins", allowed_origins)
        pulumi.set(__self__, "exposed_headers", exposed_headers)
        pulumi.set(__self__, "max_age_in_seconds", max_age_in_seconds)

    @property
    @pulumi.getter(name="allowedHeaders")
    def allowed_headers(self) -> List[str]:
        """
        A list of headers that are allowed to be a part of the cross-origin request.
        """
        return pulumi.get(self, "allowed_headers")

    @property
    @pulumi.getter(name="allowedMethods")
    def allowed_methods(self) -> List[str]:
        """
        A list of http headers that are allowed to be executed by the origin. Valid options are
        `DELETE`, `GET`, `HEAD`, `MERGE`, `POST`, `OPTIONS`, `PUT` or `PATCH`.
        """
        return pulumi.get(self, "allowed_methods")

    @property
    @pulumi.getter(name="allowedOrigins")
    def allowed_origins(self) -> List[str]:
        """
        A list of origin domains that will be allowed by CORS.
        """
        return pulumi.get(self, "allowed_origins")

    @property
    @pulumi.getter(name="exposedHeaders")
    def exposed_headers(self) -> List[str]:
        """
        A list of response headers that are exposed to CORS clients.
        """
        return pulumi.get(self, "exposed_headers")

    @property
    @pulumi.getter(name="maxAgeInSeconds")
    def max_age_in_seconds(self) -> float:
        """
        The number of seconds the client should cache a preflight response.
        """
        return pulumi.get(self, "max_age_in_seconds")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountQueuePropertiesHourMetrics(dict):
    def __init__(__self__, *,
                 enabled: bool,
                 version: str,
                 include_apis: Optional[bool] = None,
                 retention_policy_days: Optional[float] = None):
        """
        :param bool enabled: Indicates whether hour metrics are enabled for the Queue service. Changing this forces a new resource.
        :param str version: The version of storage analytics to configure. Changing this forces a new resource.
        :param bool include_apis: Indicates whether metrics should generate summary statistics for called API operations.
        :param float retention_policy_days: Specifies the number of days that logs will be retained. Changing this forces a new resource.
        """
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "version", version)
        if include_apis is not None:
            pulumi.set(__self__, "include_apis", include_apis)
        if retention_policy_days is not None:
            pulumi.set(__self__, "retention_policy_days", retention_policy_days)

    @property
    @pulumi.getter
    def enabled(self) -> bool:
        """
        Indicates whether hour metrics are enabled for the Queue service. Changing this forces a new resource.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        The version of storage analytics to configure. Changing this forces a new resource.
        """
        return pulumi.get(self, "version")

    @property
    @pulumi.getter(name="includeApis")
    def include_apis(self) -> Optional[bool]:
        """
        Indicates whether metrics should generate summary statistics for called API operations.
        """
        return pulumi.get(self, "include_apis")

    @property
    @pulumi.getter(name="retentionPolicyDays")
    def retention_policy_days(self) -> Optional[float]:
        """
        Specifies the number of days that logs will be retained. Changing this forces a new resource.
        """
        return pulumi.get(self, "retention_policy_days")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountQueuePropertiesLogging(dict):
    def __init__(__self__, *,
                 delete: bool,
                 read: bool,
                 version: str,
                 write: bool,
                 retention_policy_days: Optional[float] = None):
        """
        :param bool delete: Indicates whether all delete requests should be logged. Changing this forces a new resource.
        :param bool read: Indicates whether all read requests should be logged. Changing this forces a new resource.
        :param str version: The version of storage analytics to configure. Changing this forces a new resource.
        :param bool write: Indicates whether all write requests should be logged. Changing this forces a new resource.
        :param float retention_policy_days: Specifies the number of days that logs will be retained. Changing this forces a new resource.
        """
        pulumi.set(__self__, "delete", delete)
        pulumi.set(__self__, "read", read)
        pulumi.set(__self__, "version", version)
        pulumi.set(__self__, "write", write)
        if retention_policy_days is not None:
            pulumi.set(__self__, "retention_policy_days", retention_policy_days)

    @property
    @pulumi.getter
    def delete(self) -> bool:
        """
        Indicates whether all delete requests should be logged. Changing this forces a new resource.
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def read(self) -> bool:
        """
        Indicates whether all read requests should be logged. Changing this forces a new resource.
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        The version of storage analytics to configure. Changing this forces a new resource.
        """
        return pulumi.get(self, "version")

    @property
    @pulumi.getter
    def write(self) -> bool:
        """
        Indicates whether all write requests should be logged. Changing this forces a new resource.
        """
        return pulumi.get(self, "write")

    @property
    @pulumi.getter(name="retentionPolicyDays")
    def retention_policy_days(self) -> Optional[float]:
        """
        Specifies the number of days that logs will be retained. Changing this forces a new resource.
        """
        return pulumi.get(self, "retention_policy_days")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountQueuePropertiesMinuteMetrics(dict):
    def __init__(__self__, *,
                 enabled: bool,
                 version: str,
                 include_apis: Optional[bool] = None,
                 retention_policy_days: Optional[float] = None):
        """
        :param bool enabled: Indicates whether minute metrics are enabled for the Queue service. Changing this forces a new resource.
        :param str version: The version of storage analytics to configure. Changing this forces a new resource.
        :param bool include_apis: Indicates whether metrics should generate summary statistics for called API operations.
        :param float retention_policy_days: Specifies the number of days that logs will be retained. Changing this forces a new resource.
        """
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "version", version)
        if include_apis is not None:
            pulumi.set(__self__, "include_apis", include_apis)
        if retention_policy_days is not None:
            pulumi.set(__self__, "retention_policy_days", retention_policy_days)

    @property
    @pulumi.getter
    def enabled(self) -> bool:
        """
        Indicates whether minute metrics are enabled for the Queue service. Changing this forces a new resource.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def version(self) -> str:
        """
        The version of storage analytics to configure. Changing this forces a new resource.
        """
        return pulumi.get(self, "version")

    @property
    @pulumi.getter(name="includeApis")
    def include_apis(self) -> Optional[bool]:
        """
        Indicates whether metrics should generate summary statistics for called API operations.
        """
        return pulumi.get(self, "include_apis")

    @property
    @pulumi.getter(name="retentionPolicyDays")
    def retention_policy_days(self) -> Optional[float]:
        """
        Specifies the number of days that logs will be retained. Changing this forces a new resource.
        """
        return pulumi.get(self, "retention_policy_days")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class AccountStaticWebsite(dict):
    def __init__(__self__, *,
                 error404_document: Optional[str] = None,
                 index_document: Optional[str] = None):
        """
        :param str error404_document: The absolute path to a custom webpage that should be used when a request is made which does not correspond to an existing file.
        :param str index_document: The webpage that Azure Storage serves for requests to the root of a website or any subfolder. For example, index.html. The value is case-sensitive.
        """
        if error404_document is not None:
            pulumi.set(__self__, "error404_document", error404_document)
        if index_document is not None:
            pulumi.set(__self__, "index_document", index_document)

    @property
    @pulumi.getter(name="error404Document")
    def error404_document(self) -> Optional[str]:
        """
        The absolute path to a custom webpage that should be used when a request is made which does not correspond to an existing file.
        """
        return pulumi.get(self, "error404_document")

    @property
    @pulumi.getter(name="indexDocument")
    def index_document(self) -> Optional[str]:
        """
        The webpage that Azure Storage serves for requests to the root of a website or any subfolder. For example, index.html. The value is case-sensitive.
        """
        return pulumi.get(self, "index_document")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class ManagementPolicyRule(dict):
    def __init__(__self__, *,
                 actions: 'outputs.ManagementPolicyRuleActions',
                 enabled: bool,
                 name: str,
                 filters: Optional['outputs.ManagementPolicyRuleFilters'] = None):
        """
        :param 'ManagementPolicyRuleActionsArgs' actions: An `actions` block as documented below.
        :param bool enabled: Boolean to specify whether the rule is enabled.
        :param str name: A rule name can contain any combination of alpha numeric characters. Rule name is case-sensitive. It must be unique within a policy.
        :param 'ManagementPolicyRuleFiltersArgs' filters: A `filter` block as documented below.
        """
        pulumi.set(__self__, "actions", actions)
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "name", name)
        if filters is not None:
            pulumi.set(__self__, "filters", filters)

    @property
    @pulumi.getter
    def actions(self) -> 'outputs.ManagementPolicyRuleActions':
        """
        An `actions` block as documented below.
        """
        return pulumi.get(self, "actions")

    @property
    @pulumi.getter
    def enabled(self) -> bool:
        """
        Boolean to specify whether the rule is enabled.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A rule name can contain any combination of alpha numeric characters. Rule name is case-sensitive. It must be unique within a policy.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def filters(self) -> Optional['outputs.ManagementPolicyRuleFilters']:
        """
        A `filter` block as documented below.
        """
        return pulumi.get(self, "filters")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class ManagementPolicyRuleActions(dict):
    def __init__(__self__, *,
                 base_blob: Optional['outputs.ManagementPolicyRuleActionsBaseBlob'] = None,
                 snapshot: Optional['outputs.ManagementPolicyRuleActionsSnapshot'] = None):
        """
        :param 'ManagementPolicyRuleActionsBaseBlobArgs' base_blob: A `base_blob` block as documented below.
        :param 'ManagementPolicyRuleActionsSnapshotArgs' snapshot: A `snapshot` block as documented below.
        """
        if base_blob is not None:
            pulumi.set(__self__, "base_blob", base_blob)
        if snapshot is not None:
            pulumi.set(__self__, "snapshot", snapshot)

    @property
    @pulumi.getter(name="baseBlob")
    def base_blob(self) -> Optional['outputs.ManagementPolicyRuleActionsBaseBlob']:
        """
        A `base_blob` block as documented below.
        """
        return pulumi.get(self, "base_blob")

    @property
    @pulumi.getter
    def snapshot(self) -> Optional['outputs.ManagementPolicyRuleActionsSnapshot']:
        """
        A `snapshot` block as documented below.
        """
        return pulumi.get(self, "snapshot")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class ManagementPolicyRuleActionsBaseBlob(dict):
    def __init__(__self__, *,
                 delete_after_days_since_modification_greater_than: Optional[float] = None,
                 tier_to_archive_after_days_since_modification_greater_than: Optional[float] = None,
                 tier_to_cool_after_days_since_modification_greater_than: Optional[float] = None):
        """
        :param float delete_after_days_since_modification_greater_than: The age in days after last modification to delete the blob. Must be at least 0.
        :param float tier_to_archive_after_days_since_modification_greater_than: The age in days after last modification to tier blobs to archive storage. Supports blob currently at Hot or Cool tier. Must be at least 0.
        :param float tier_to_cool_after_days_since_modification_greater_than: The age in days after last modification to tier blobs to cool storage. Supports blob currently at Hot tier. Must be at least 0.
        """
        if delete_after_days_since_modification_greater_than is not None:
            pulumi.set(__self__, "delete_after_days_since_modification_greater_than", delete_after_days_since_modification_greater_than)
        if tier_to_archive_after_days_since_modification_greater_than is not None:
            pulumi.set(__self__, "tier_to_archive_after_days_since_modification_greater_than", tier_to_archive_after_days_since_modification_greater_than)
        if tier_to_cool_after_days_since_modification_greater_than is not None:
            pulumi.set(__self__, "tier_to_cool_after_days_since_modification_greater_than", tier_to_cool_after_days_since_modification_greater_than)

    @property
    @pulumi.getter(name="deleteAfterDaysSinceModificationGreaterThan")
    def delete_after_days_since_modification_greater_than(self) -> Optional[float]:
        """
        The age in days after last modification to delete the blob. Must be at least 0.
        """
        return pulumi.get(self, "delete_after_days_since_modification_greater_than")

    @property
    @pulumi.getter(name="tierToArchiveAfterDaysSinceModificationGreaterThan")
    def tier_to_archive_after_days_since_modification_greater_than(self) -> Optional[float]:
        """
        The age in days after last modification to tier blobs to archive storage. Supports blob currently at Hot or Cool tier. Must be at least 0.
        """
        return pulumi.get(self, "tier_to_archive_after_days_since_modification_greater_than")

    @property
    @pulumi.getter(name="tierToCoolAfterDaysSinceModificationGreaterThan")
    def tier_to_cool_after_days_since_modification_greater_than(self) -> Optional[float]:
        """
        The age in days after last modification to tier blobs to cool storage. Supports blob currently at Hot tier. Must be at least 0.
        """
        return pulumi.get(self, "tier_to_cool_after_days_since_modification_greater_than")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class ManagementPolicyRuleActionsSnapshot(dict):
    def __init__(__self__, *,
                 delete_after_days_since_creation_greater_than: Optional[float] = None):
        """
        :param float delete_after_days_since_creation_greater_than: The age in days after create to delete the snaphot. Must be at least 0.
        """
        if delete_after_days_since_creation_greater_than is not None:
            pulumi.set(__self__, "delete_after_days_since_creation_greater_than", delete_after_days_since_creation_greater_than)

    @property
    @pulumi.getter(name="deleteAfterDaysSinceCreationGreaterThan")
    def delete_after_days_since_creation_greater_than(self) -> Optional[float]:
        """
        The age in days after create to delete the snaphot. Must be at least 0.
        """
        return pulumi.get(self, "delete_after_days_since_creation_greater_than")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class ManagementPolicyRuleFilters(dict):
    def __init__(__self__, *,
                 blob_types: Optional[List[str]] = None,
                 prefix_matches: Optional[List[str]] = None):
        """
        :param List[str] blob_types: An array of predefined values. Only `blockBlob` is supported.
        :param List[str] prefix_matches: An array of strings for prefixes to be matched.
        """
        if blob_types is not None:
            pulumi.set(__self__, "blob_types", blob_types)
        if prefix_matches is not None:
            pulumi.set(__self__, "prefix_matches", prefix_matches)

    @property
    @pulumi.getter(name="blobTypes")
    def blob_types(self) -> Optional[List[str]]:
        """
        An array of predefined values. Only `blockBlob` is supported.
        """
        return pulumi.get(self, "blob_types")

    @property
    @pulumi.getter(name="prefixMatches")
    def prefix_matches(self) -> Optional[List[str]]:
        """
        An array of strings for prefixes to be matched.
        """
        return pulumi.get(self, "prefix_matches")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class ShareAcl(dict):
    def __init__(__self__, *,
                 id: str,
                 access_policies: Optional[List['outputs.ShareAclAccessPolicy']] = None):
        """
        :param str id: The ID which should be used for this Shared Identifier.
        :param List['ShareAclAccessPolicyArgs'] access_policies: An `access_policy` block as defined below.
        """
        pulumi.set(__self__, "id", id)
        if access_policies is not None:
            pulumi.set(__self__, "access_policies", access_policies)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID which should be used for this Shared Identifier.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="accessPolicies")
    def access_policies(self) -> Optional[List['outputs.ShareAclAccessPolicy']]:
        """
        An `access_policy` block as defined below.
        """
        return pulumi.get(self, "access_policies")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class ShareAclAccessPolicy(dict):
    def __init__(__self__, *,
                 expiry: str,
                 permissions: str,
                 start: str):
        """
        :param str expiry: The time at which this Access Policy should be valid until, in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        :param str permissions: The permissions which should be associated with this Shared Identifier. Possible value is combination of `r` (read), `w` (write), `d` (delete), and `l` (list).
        :param str start: The time at which this Access Policy should be valid from, in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        """
        pulumi.set(__self__, "expiry", expiry)
        pulumi.set(__self__, "permissions", permissions)
        pulumi.set(__self__, "start", start)

    @property
    @pulumi.getter
    def expiry(self) -> str:
        """
        The time at which this Access Policy should be valid until, in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        """
        return pulumi.get(self, "expiry")

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The permissions which should be associated with this Shared Identifier. Possible value is combination of `r` (read), `w` (write), `d` (delete), and `l` (list).
        """
        return pulumi.get(self, "permissions")

    @property
    @pulumi.getter
    def start(self) -> str:
        """
        The time at which this Access Policy should be valid from, in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        """
        return pulumi.get(self, "start")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class TableAcl(dict):
    def __init__(__self__, *,
                 id: str,
                 access_policies: Optional[List['outputs.TableAclAccessPolicy']] = None):
        """
        :param str id: The ID which should be used for this Shared Identifier.
        :param List['TableAclAccessPolicyArgs'] access_policies: An `access_policy` block as defined below.
        """
        pulumi.set(__self__, "id", id)
        if access_policies is not None:
            pulumi.set(__self__, "access_policies", access_policies)

    @property
    @pulumi.getter
    def id(self) -> str:
        """
        The ID which should be used for this Shared Identifier.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="accessPolicies")
    def access_policies(self) -> Optional[List['outputs.TableAclAccessPolicy']]:
        """
        An `access_policy` block as defined below.
        """
        return pulumi.get(self, "access_policies")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class TableAclAccessPolicy(dict):
    def __init__(__self__, *,
                 expiry: str,
                 permissions: str,
                 start: str):
        """
        :param str expiry: The ISO8061 UTC time at which this Access Policy should be valid until.
        :param str permissions: The permissions which should associated with this Shared Identifier.
        :param str start: The ISO8061 UTC time at which this Access Policy should be valid from.
        """
        pulumi.set(__self__, "expiry", expiry)
        pulumi.set(__self__, "permissions", permissions)
        pulumi.set(__self__, "start", start)

    @property
    @pulumi.getter
    def expiry(self) -> str:
        """
        The ISO8061 UTC time at which this Access Policy should be valid until.
        """
        return pulumi.get(self, "expiry")

    @property
    @pulumi.getter
    def permissions(self) -> str:
        """
        The permissions which should associated with this Shared Identifier.
        """
        return pulumi.get(self, "permissions")

    @property
    @pulumi.getter
    def start(self) -> str:
        """
        The ISO8061 UTC time at which this Access Policy should be valid from.
        """
        return pulumi.get(self, "start")

    def _translate_property(self, prop):
        return _tables.CAMEL_TO_SNAKE_CASE_TABLE.get(prop) or prop


@pulumi.output_type
class GetAccountBlobContainerSASPermissionsResult(dict):
    def __init__(__self__, *,
                 add: bool,
                 create: bool,
                 delete: bool,
                 list: bool,
                 read: bool,
                 write: bool):
        """
        :param bool add: Should Add permissions be enabled for this SAS?
        :param bool create: Should Create permissions be enabled for this SAS?
        :param bool delete: Should Delete permissions be enabled for this SAS?
        :param bool list: Should List permissions be enabled for this SAS?
        :param bool read: Should Read permissions be enabled for this SAS?
        :param bool write: Should Write permissions be enabled for this SAS?
        """
        pulumi.set(__self__, "add", add)
        pulumi.set(__self__, "create", create)
        pulumi.set(__self__, "delete", delete)
        pulumi.set(__self__, "list", list)
        pulumi.set(__self__, "read", read)
        pulumi.set(__self__, "write", write)

    @property
    @pulumi.getter
    def add(self) -> bool:
        """
        Should Add permissions be enabled for this SAS?
        """
        return pulumi.get(self, "add")

    @property
    @pulumi.getter
    def create(self) -> bool:
        """
        Should Create permissions be enabled for this SAS?
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> bool:
        """
        Should Delete permissions be enabled for this SAS?
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def list(self) -> bool:
        """
        Should List permissions be enabled for this SAS?
        """
        return pulumi.get(self, "list")

    @property
    @pulumi.getter
    def read(self) -> bool:
        """
        Should Read permissions be enabled for this SAS?
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def write(self) -> bool:
        """
        Should Write permissions be enabled for this SAS?
        """
        return pulumi.get(self, "write")


@pulumi.output_type
class GetAccountCustomDomainResult(dict):
    def __init__(__self__, *,
                 name: str):
        """
        :param str name: Specifies the name of the Storage Account
        """
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        Specifies the name of the Storage Account
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetAccountSASPermissionsResult(dict):
    def __init__(__self__, *,
                 add: bool,
                 create: bool,
                 delete: bool,
                 list: bool,
                 process: bool,
                 read: bool,
                 update: bool,
                 write: bool):
        """
        :param bool add: Should Add permissions be enabled for this SAS?
        :param bool create: Should Create permissions be enabled for this SAS?
        :param bool delete: Should Delete permissions be enabled for this SAS?
        :param bool list: Should List permissions be enabled for this SAS?
        :param bool process: Should Process permissions be enabled for this SAS?
        :param bool read: Should Read permissions be enabled for this SAS?
        :param bool update: Should Update permissions be enabled for this SAS?
        :param bool write: Should Write permissions be enabled for this SAS?
        """
        pulumi.set(__self__, "add", add)
        pulumi.set(__self__, "create", create)
        pulumi.set(__self__, "delete", delete)
        pulumi.set(__self__, "list", list)
        pulumi.set(__self__, "process", process)
        pulumi.set(__self__, "read", read)
        pulumi.set(__self__, "update", update)
        pulumi.set(__self__, "write", write)

    @property
    @pulumi.getter
    def add(self) -> bool:
        """
        Should Add permissions be enabled for this SAS?
        """
        return pulumi.get(self, "add")

    @property
    @pulumi.getter
    def create(self) -> bool:
        """
        Should Create permissions be enabled for this SAS?
        """
        return pulumi.get(self, "create")

    @property
    @pulumi.getter
    def delete(self) -> bool:
        """
        Should Delete permissions be enabled for this SAS?
        """
        return pulumi.get(self, "delete")

    @property
    @pulumi.getter
    def list(self) -> bool:
        """
        Should List permissions be enabled for this SAS?
        """
        return pulumi.get(self, "list")

    @property
    @pulumi.getter
    def process(self) -> bool:
        """
        Should Process permissions be enabled for this SAS?
        """
        return pulumi.get(self, "process")

    @property
    @pulumi.getter
    def read(self) -> bool:
        """
        Should Read permissions be enabled for this SAS?
        """
        return pulumi.get(self, "read")

    @property
    @pulumi.getter
    def update(self) -> bool:
        """
        Should Update permissions be enabled for this SAS?
        """
        return pulumi.get(self, "update")

    @property
    @pulumi.getter
    def write(self) -> bool:
        """
        Should Write permissions be enabled for this SAS?
        """
        return pulumi.get(self, "write")


@pulumi.output_type
class GetAccountSASResourceTypesResult(dict):
    def __init__(__self__, *,
                 container: bool,
                 object: bool,
                 service: bool):
        """
        :param bool container: Should permission be granted to the container?
        :param bool object: Should permission be granted only to a specific object?
        :param bool service: Should permission be granted to the entire service?
        """
        pulumi.set(__self__, "container", container)
        pulumi.set(__self__, "object", object)
        pulumi.set(__self__, "service", service)

    @property
    @pulumi.getter
    def container(self) -> bool:
        """
        Should permission be granted to the container?
        """
        return pulumi.get(self, "container")

    @property
    @pulumi.getter
    def object(self) -> bool:
        """
        Should permission be granted only to a specific object?
        """
        return pulumi.get(self, "object")

    @property
    @pulumi.getter
    def service(self) -> bool:
        """
        Should permission be granted to the entire service?
        """
        return pulumi.get(self, "service")


@pulumi.output_type
class GetAccountSASServicesResult(dict):
    def __init__(__self__, *,
                 blob: bool,
                 file: bool,
                 queue: bool,
                 table: bool):
        """
        :param bool blob: Should permission be granted to `blob` services within this storage account?
        :param bool file: Should permission be granted to `file` services within this storage account?
        :param bool queue: Should permission be granted to `queue` services within this storage account?
        :param bool table: Should permission be granted to `table` services within this storage account?
        """
        pulumi.set(__self__, "blob", blob)
        pulumi.set(__self__, "file", file)
        pulumi.set(__self__, "queue", queue)
        pulumi.set(__self__, "table", table)

    @property
    @pulumi.getter
    def blob(self) -> bool:
        """
        Should permission be granted to `blob` services within this storage account?
        """
        return pulumi.get(self, "blob")

    @property
    @pulumi.getter
    def file(self) -> bool:
        """
        Should permission be granted to `file` services within this storage account?
        """
        return pulumi.get(self, "file")

    @property
    @pulumi.getter
    def queue(self) -> bool:
        """
        Should permission be granted to `queue` services within this storage account?
        """
        return pulumi.get(self, "queue")

    @property
    @pulumi.getter
    def table(self) -> bool:
        """
        Should permission be granted to `table` services within this storage account?
        """
        return pulumi.get(self, "table")


@pulumi.output_type
class GetPolicyRuleResult(dict):
    def __init__(__self__, *,
                 actions: List['outputs.GetPolicyRuleActionResult'],
                 enabled: bool,
                 filters: List['outputs.GetPolicyRuleFilterResult'],
                 name: str):
        """
        :param List['GetPolicyRuleActionArgs'] actions: An `actions` block as documented below.
        :param bool enabled: Boolean to specify whether the rule is enabled.
        :param List['GetPolicyRuleFilterArgs'] filters: A `filter` block as documented below.
        :param str name: A rule name can contain any combination of alpha numeric characters. Rule name is case-sensitive. It must be unique within a policy.
        """
        pulumi.set(__self__, "actions", actions)
        pulumi.set(__self__, "enabled", enabled)
        pulumi.set(__self__, "filters", filters)
        pulumi.set(__self__, "name", name)

    @property
    @pulumi.getter
    def actions(self) -> List['outputs.GetPolicyRuleActionResult']:
        """
        An `actions` block as documented below.
        """
        return pulumi.get(self, "actions")

    @property
    @pulumi.getter
    def enabled(self) -> bool:
        """
        Boolean to specify whether the rule is enabled.
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter
    def filters(self) -> List['outputs.GetPolicyRuleFilterResult']:
        """
        A `filter` block as documented below.
        """
        return pulumi.get(self, "filters")

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        A rule name can contain any combination of alpha numeric characters. Rule name is case-sensitive. It must be unique within a policy.
        """
        return pulumi.get(self, "name")


@pulumi.output_type
class GetPolicyRuleActionResult(dict):
    def __init__(__self__, *,
                 base_blobs: List['outputs.GetPolicyRuleActionBaseBlobResult'],
                 snapshots: List['outputs.GetPolicyRuleActionSnapshotResult']):
        """
        :param List['GetPolicyRuleActionBaseBlobArgs'] base_blobs: A `base_blob` block as documented below.
        :param List['GetPolicyRuleActionSnapshotArgs'] snapshots: A `snapshot` block as documented below.
        """
        pulumi.set(__self__, "base_blobs", base_blobs)
        pulumi.set(__self__, "snapshots", snapshots)

    @property
    @pulumi.getter(name="baseBlobs")
    def base_blobs(self) -> List['outputs.GetPolicyRuleActionBaseBlobResult']:
        """
        A `base_blob` block as documented below.
        """
        return pulumi.get(self, "base_blobs")

    @property
    @pulumi.getter
    def snapshots(self) -> List['outputs.GetPolicyRuleActionSnapshotResult']:
        """
        A `snapshot` block as documented below.
        """
        return pulumi.get(self, "snapshots")


@pulumi.output_type
class GetPolicyRuleActionBaseBlobResult(dict):
    def __init__(__self__, *,
                 delete_after_days_since_modification_greater_than: float,
                 tier_to_archive_after_days_since_modification_greater_than: float,
                 tier_to_cool_after_days_since_modification_greater_than: float):
        """
        :param float delete_after_days_since_modification_greater_than: The age in days after last modification to delete the blob.
        :param float tier_to_archive_after_days_since_modification_greater_than: The age in days after last modification to tier blobs to archive storage. Supports blob currently at Hot or Cool tier.
        :param float tier_to_cool_after_days_since_modification_greater_than: The age in days after last modification to tier blobs to cool storage. Supports blob currently at Hot tier.
        """
        pulumi.set(__self__, "delete_after_days_since_modification_greater_than", delete_after_days_since_modification_greater_than)
        pulumi.set(__self__, "tier_to_archive_after_days_since_modification_greater_than", tier_to_archive_after_days_since_modification_greater_than)
        pulumi.set(__self__, "tier_to_cool_after_days_since_modification_greater_than", tier_to_cool_after_days_since_modification_greater_than)

    @property
    @pulumi.getter(name="deleteAfterDaysSinceModificationGreaterThan")
    def delete_after_days_since_modification_greater_than(self) -> float:
        """
        The age in days after last modification to delete the blob.
        """
        return pulumi.get(self, "delete_after_days_since_modification_greater_than")

    @property
    @pulumi.getter(name="tierToArchiveAfterDaysSinceModificationGreaterThan")
    def tier_to_archive_after_days_since_modification_greater_than(self) -> float:
        """
        The age in days after last modification to tier blobs to archive storage. Supports blob currently at Hot or Cool tier.
        """
        return pulumi.get(self, "tier_to_archive_after_days_since_modification_greater_than")

    @property
    @pulumi.getter(name="tierToCoolAfterDaysSinceModificationGreaterThan")
    def tier_to_cool_after_days_since_modification_greater_than(self) -> float:
        """
        The age in days after last modification to tier blobs to cool storage. Supports blob currently at Hot tier.
        """
        return pulumi.get(self, "tier_to_cool_after_days_since_modification_greater_than")


@pulumi.output_type
class GetPolicyRuleActionSnapshotResult(dict):
    def __init__(__self__, *,
                 delete_after_days_since_creation_greater_than: float):
        """
        :param float delete_after_days_since_creation_greater_than: The age in days after create to delete the snaphot.
        """
        pulumi.set(__self__, "delete_after_days_since_creation_greater_than", delete_after_days_since_creation_greater_than)

    @property
    @pulumi.getter(name="deleteAfterDaysSinceCreationGreaterThan")
    def delete_after_days_since_creation_greater_than(self) -> float:
        """
        The age in days after create to delete the snaphot.
        """
        return pulumi.get(self, "delete_after_days_since_creation_greater_than")


@pulumi.output_type
class GetPolicyRuleFilterResult(dict):
    def __init__(__self__, *,
                 blob_types: List[str],
                 prefix_matches: List[str]):
        """
        :param List[str] blob_types: An array of predefined values. Only `blockBlob` is supported.
        :param List[str] prefix_matches: An array of strings for prefixes to be matched.
        """
        pulumi.set(__self__, "blob_types", blob_types)
        pulumi.set(__self__, "prefix_matches", prefix_matches)

    @property
    @pulumi.getter(name="blobTypes")
    def blob_types(self) -> List[str]:
        """
        An array of predefined values. Only `blockBlob` is supported.
        """
        return pulumi.get(self, "blob_types")

    @property
    @pulumi.getter(name="prefixMatches")
    def prefix_matches(self) -> List[str]:
        """
        An array of strings for prefixes to be matched.
        """
        return pulumi.get(self, "prefix_matches")


