From bf94a3df5186d10a68b8fe6aa04cbeca6b4d4707 Mon Sep 17 00:00:00 2001
From: Kyle Dixler The Pulumi Python SDK (pulumi) is the core package used when writing Pulumi programs in Python. It contains everything
that you’ll need in order to interact with Pulumi resource providers and express infrastructure using Python code.
Pulumi resource providers all depend on this library and express their resources in terms of the types defined in this
@@ -19,7 +19,7 @@ module.Pulumi Python SDK
+Pulumi Python SDK
Like most languages usable with Pulumi, Pulumi represents cloud resources as classes and Python programs can instantiate those classes. All classes that can be instantiated to produce actual resources derive from the pulumi.Resource class.
A class that derives from pulumi.Resource will, when instantiated, communicate with the Pulumi Engine and record that @@ -32,11 +32,11 @@ Resources written in Python are called “component resources” and they are wr can be instantiated and used to create other resources. These “provider resources” derive from the pulumi.ProviderResource class.
pulumi.
Resource
(t: str, name: str, custom: bool, props: Optional[Inputs, None] = None, opts: Optional[pulumi.resource.ResourceOptions, None] = None, remote: bool = False, dependency: bool = False)Resource represents a class whose CRUD operations are implemented by a provider plugin.
t (str) – The type of this resource.
name (str) – The name of this resource.
urn
The stable, logical URN used to distinctly address a resource, both before and after deployments.
translate_output_property
(prop: str) → strProvides subclasses of Resource an opportunity to translate names of output properties into a format of their choosing before writing those properties to the resource object.
If the props
passed to __init__
is an input type (decorated with @input_type
), the
type/name metadata of the resource will be used to translate names instead of calling this
method.
prop (str) – A property name.
A potentially transformed property name.
str
translate_input_property
(prop: str) → strProvides subclasses of Resource an opportunity to translate names of input properties into a format of their choosing before sending those properties to the Pulumi engine.
If the props
passed to __init__
is an input type (decorated with @input_type
), the
type/name metadata of props
will be used to translate names instead of calling this
method.
prop (str) – A property name.
A potentially transformed property name.
str
get_provider
(module_member: str) → Optional[pulumi.resource.ProviderResource, None]Fetches the provider for the given module member, if this resource has been provided a specific provider for the given module member.
Returns None if no provider was provided.
module_member (str) – The requested module member.
The ProviderResource
associated with the given module member, or None if one does not exist.
Optional[ProviderResource]
pulumi.
CustomResource
(t: str, name: str, props: Optional[Inputs, None] = None, opts: Optional[pulumi.resource.ResourceOptions, None] = None, dependency: bool = False)CustomResource is a resource whose create, read, update, and delete (CRUD) operations are managed by performing external operations on some physical entity. The engine understands how to diff and perform partial updates of them, and these CRUD operations are implemented in a dynamically loaded plugin for the defining package.
t (str) – The type of this resource.
name (str) – The name of this resource.
id
id is the provider-assigned unique ID for this managed resource. It is set during deployments and may be missing (undefined) during planning phases.
pulumi.
ComponentResource
(t: str, name: str, props: Optional[Inputs, None] = None, opts: Optional[pulumi.resource.ResourceOptions, None] = None, remote: bool = False)ComponentResource is a resource that aggregates one or more other child resources into a higher level abstraction. The component itself is a resource, but does not require custom CRUD operations for provisioning.
t (str) – The type of this resource.
name (str) – The name of this resource.
register_outputs
(outputs: Inputs)Register synthetic outputs that a component has initialized, usually by allocating other child sub-resources and propagating their resulting property values.
output (dict) – A dictionary of outputs to associate with this resource.
pulumi.
ProviderResource
(pkg: str, name: str, props: Optional[Inputs, None] = None, opts: Optional[pulumi.resource.ResourceOptions, None] = None, dependency: bool = False)ProviderResource is a resource that implements CRUD operations for other custom resources. These resources are managed similarly to other resources, including the usual diffing and update semantics.
pkg (str) – The package type of this provider resource.
name (str) – The name of this resource.
package
: strpackage is the name of the package this is provider for. Common examples are “aws” and “azure”.
pulumi.
ResourceOptions
(parent: Optional[Resource, None] = None, depends_on: Optional[Input[Union[Sequence[Input[Resource]], Resource]], None] = None, protect: Optional[bool, None] = None, provider: Optional[ProviderResource, None] = None, providers: Optional[Union[Mapping[str, ProviderResource], List[ProviderResource]]] = None, delete_before_replace: Optional[bool, None] = None, ignore_changes: Optional[List[str], None] = None, version: Optional[str, None] = None, aliases: Optional[Sequence[Input[Union[str, Alias]]], None] = None, additional_secret_outputs: Optional[List[str], None] = None, id: Optional[Input[str], None] = None, import_: Optional[str, None] = None, custom_timeouts: Optional[CustomTimeouts, None] = None, transformations: Optional[List[Callable[[pulumi.resource.ResourceTransformationArgs], Optional[pulumi.resource.ResourceTransformationResult, None]]], None] = None, urn: Optional[str, None] = None, replace_on_changes: Optional[List[str], None] = None, plugin_download_url: Optional[str, None] = None, retain_on_delete: Optional[bool, None] = None, deleted_with: Optional[Resource, None] = None)ResourceOptions is a bag of optional settings that control a resource’s behavior.
parent (Optional[Resource]) – If provided, the currently-constructing resource should be the child of the provided parent resource.
provider (Optional[ProviderResource]) – An optional provider to use for this resource’s CRUD operations. If no provider is supplied, the default provider for the resource’s package will be used. The default provider is pulled from the providers field, then the parent’s provider bag.
ProviderResource], List[ProviderResource]]] providers (Optional[Union[Mapping[str,) – An optional set of +
providers (Optional[Union[Mapping[str, ProviderResource], List[ProviderResource]]]) – An optional set of providers to use for this resource and child resources. Keyed by package name (e.g. “aws”), or just provided as a list. In the latter case, the package name will be retrieved from the provider itself. Note: Only a list should be used. Mapping keys are not respected.
version (Optional[str]) – An optional version. If provided, the engine loads a provider with exactly the requested version to operate on this resource. This version overrides the version information inferred from the current package and should rarely be used.
Alias]]]] aliases (Optional[List[Input[Union[str,) – An optional list of aliases to treat this resource as +
aliases (Optional[List[Input[Union[str, Alias]]]]) – An optional list of aliases to treat this resource as matching.
additional_secret*outputs (Optional[List[str]]) –
If provided, a list of output property names that should also be treated as secret.
@@ -248,7 +248,7 @@ the resource’s options.custom_timeouts (Optional[CustomTimeouts]) – If provided, a config block for custom timeout information.
transformations (Optional[List[ResourceTransformation]]) – If provided, a list of transformations to apply @@ -267,29 +267,29 @@ if specified resource is being deleted as well.
parent
: Optional[Resource, None]If provided, the currently-constructing resource should be the child of the provided parent resource.
protect
: Optional[bool, None]If provided and True, this resource is not allowed to be deleted.
provider
: Optional[ProviderResource, None]An optional provider to use for this resource’s CRUD operations. If no provider is supplied, the default provider for the resource’s package will be used. The default provider is pulled from the parent’s provider bag (see also ResourceOptions.providers).
providers
: Optional[Union[Mapping[str, ProviderResource], Sequence[ProviderResource]]]An optional set of providers to use for this resource and child resources. Keyed by package name (e.g. “aws”), or just provided as a list. In the latter case, the package name will be retrieved from the provider itself. @@ -297,62 +297,62 @@ Note: Only a list should be used. Mapping keys are not respected.
delete_before_replace
: Optional[bool, None]If provided and True, this resource must be deleted before it is replaced.
ignore_changes
: Optional[List[str], None]If provided, ignore changes to any of the specified properties.
version
: Optional[str, None]An optional version. If provided, the engine loads a provider with exactly the requested version to operate on this resource. This version overrides the version information inferred from the current package and should rarely be used.
plugin_download_url
: Optional[str, None]An optional url. If provided, the engine loads a provider with downloaded from the provided url. This url overrides the plugin download url inferred from the current package and should rarely be used.
aliases
: Optional[Sequence[Input[Union[str, Alias]]], None]An optional list of aliases to treat this resource as matching.
additional_secret_outputs
: Optional[List[str], None]The names of outputs for this resource that should be treated as secrets. This augments the list that the resource provider and pulumi engine already determine based on inputs to your resource. It can be used to mark certain outputs as a secrets on a per resource basis.
custom_timeouts
: Optional[CustomTimeouts, None]An optional customTimeouts config block.
id
: Optional[Input[str], None]An optional existing ID to load, rather than create.
import_
: Optional[str, None]When provided with a resource ID, import indicates that this resource’s provider should import its state from the cloud resource with the given ID. The inputs to the resource’s constructor must align with the resource’s current state. Once a resource has been imported, the import @@ -360,49 +360,49 @@ property must be removed from the resource’s options.
transformations
: Optional[List[Callable[[pulumi.resource.ResourceTransformationArgs], Optional[pulumi.resource.ResourceTransformationResult, None]]], None]Optional list of transformations to apply to this resource during construction. The transformations are applied in order, and are applied prior to transformation applied to parents walking from the resource up to the stack.
urn
: Optional[str, None]The URN of a previously-registered resource of this type to read from the engine.
replace_on_changes
: Optional[List[str], None]Changes to any of these property paths will force a replacement. If this list includes "*"
, changes
to any properties will force a replacement. Initialization errors from previous deployments will
require replacement instead of update only if "*"
is passed.
depends_on
: Optional[Input[Union[Sequence[Input[Resource]], Resource]], None]If provided, declares that the currently-constructing resource depends on the given resources.
retain_on_delete
: Optional[bool, None]If set to True, the providers Delete method will not be called for this resource.
deleted_with
: Optional[Resource, None]If set, the providers Delete method will not be called for this resource if specified resource is being deleted as well.
merge
(opts1: Optional[pulumi.resource.ResourceOptions, None], opts2: Optional[pulumi.resource.ResourceOptions, None]) → pulumi.resource.ResourceOptionsmerge produces a new ResourceOptions object with the respective attributes of the opts1
instance in it with the attributes of opts2
merged over them.
Both the opts1
instance and the opts2
instance will be unchanged. Both of opts1
and
@@ -426,11 +426,11 @@ or as an instance-method like
pulumi.
InvokeOptions
(parent: Optional[Resource, None] = None, provider: Optional[ProviderResource, None] = None, version: Optional[str, None] = '', plugin_download_url: Optional[str, None] = None)InvokeOptions is a bag of options that control the behavior of a call to runtime.invoke.
parent (Optional[Resource]) – An optional parent to use for default options for this invoke (e.g. the default provider to use).
parent
: Optional[Resource, None]An optional parent to use for default options for this invoke (e.g. the default provider to use).
provider
: Optional[ProviderResource, None]An optional provider to use for this invocation. If no provider is supplied, the default provider for the invoked function’s package will be used.
version
: Optional[str, None]An optional version. If provided, the provider plugin with exactly this version will be used to service the invocation.
plugin_download_url
: Optional[str, None]An optional URL. If provided, the provider plugin with exactly this download URL will be used to service the invocation. This will override the URL sourced from the host package, and should be rarely used.
merge
(opts1: Optional[pulumi.invoke.InvokeOptions, None], opts2: Optional[pulumi.invoke.InvokeOptions, None]) → pulumi.invoke.InvokeOptionsmerge produces a new InvokeOptions object with the respective attributes of the opts1
instance in it with the attributes of opts2
merged over them.
Both the opts1
instance and the opts2
instance will be unchanged. Both of opts1
and
@@ -497,15 +497,15 @@ or as an instance-method like
pulumi.
RunError
Can be used for terminating a program abruptly, but resulting in a clean exit rather than the usual verbose unhandled error logic which emits the source program text and complete stack trace.
Pulumi programs can receive configuration that is specified by the command-line using pulumi config. This configuration information can be retrieved at runtime using the pulumi.Config class:
import pulumi
@@ -518,333 +518,333 @@ configuration information can be retrieved at runtime using the pulumi.Con
Pulumi programs also have the ability to query the current project and stack, as well as whether or not the current run
of the program is a preview or not.
--
-class
pulumi.
Config
(name: Optional[str, None] = None)
+-
+class pulumi.Config(name: str | None = None)
Config is a bag of related configuration state. Each bag contains any number of configuration variables, indexed by
simple keys, and each has a name that uniquely identifies it; two bags with different names do not share values for
variables that otherwise share the same key. For example, a bag whose name is pulumi:foo
, with keys a
, b
,
and c
, is entirely separate from a bag whose name is pulumi:bar
with the same simple key names. Each key has a
fully qualified names, such as pulumi:foo:a
, …, and pulumi:bar:a
, respectively.
-- Parameters
+- Parameters:
name (str) – The configuration bag’s logical name that uniquely identifies it. If not provided, the name
of the current project is used.
--
-
name
: str
+-
+name: str
The configuration bag’s logical name that uniquely identifies it. The default is the name of the current project.
--
-
get
(key: str, default: Optional[str, None] = None) → Optional[str, None]
+-
+get(key: str, default: str | None = None) str | None
Returns an optional configuration value by its key,
a default value if that key is unset and a default is provided,
or None if it doesn’t exist.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[str]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[str]
--
-
get_secret
(key: str) → Optional[pulumi.output.Output[str], None]
+-
+get_secret(key: str) Output[str] | None
Returns an optional configuration value by its key, marked as a secret,
a default value if that key is unset and a default is provided,
or None if it doesn’t exist.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[str]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[str]
--
-
get_bool
(key: str, default: Optional[bool, None] = None) → Optional[bool, None]
+-
+get_bool(key: str, default: bool | None = None) bool | None
Returns an optional configuration value, as a bool, by its key,
a default value if that key is unset and a default is provided,
or None if it doesn’t exist.
If the configuration value isn’t a legal boolean, this function will throw an error.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[bool]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[bool]
-- Raises
+- Raises:
ConfigTypeError – The configuration value existed but couldn’t be coerced to bool.
--
-
get_secret_bool
(key: str, default: Optional[bool, None] = None) → Optional[pulumi.output.Output[bool], None]
+-
+get_secret_bool(key: str, default: bool | None = None) Output[bool] | None
Returns an optional configuration value, as a bool, by its key, marked as a secret,
a default value if that key is unset and a default is provided,
or None if it doesn’t exist.
If the configuration value isn’t a legal boolean, this function will throw an error.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[bool]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[bool]
-- Raises
+- Raises:
ConfigTypeError – The configuration value existed but couldn’t be coerced to bool.
--
-
get_int
(key: str, default: Optional[int, None] = None) → Optional[int, None]
+-
+get_int(key: str, default: int | None = None) int | None
Returns an optional configuration value, as an int, by its key,
a default value if that key is unset and a default is provided,
or None if it doesn’t exist.
If the configuration value isn’t a legal int, this function will throw an error.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[int]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[int]
-- Raises
+- Raises:
ConfigTypeError – The configuration value existed but couldn’t be coerced to int.
--
-
get_secret_int
(key: str, default: Optional[int, None] = None) → Optional[pulumi.output.Output[int], None]
+-
+get_secret_int(key: str, default: int | None = None) Output[int] | None
Returns an optional configuration value, as an int, by its key, marked as a secret,
a default value if that key is unset and a default is provided,
or None if it doesn’t exist.
If the configuration value isn’t a legal int, this function will throw an error.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[int]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[int]
-- Raises
+- Raises:
ConfigTypeError – The configuration value existed but couldn’t be coerced to int.
--
-
get_float
(key: str, default: Optional[float, None] = None) → Optional[float, None]
+-
+get_float(key: str, default: float | None = None) float | None
Returns an optional configuration value, as a float, by its key, marked as a secret,
a default value if that key is unset and a default is provided,
or None if it doesn’t exist.
If the configuration value isn’t a legal float, this function will throw an error.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[float]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[float]
-- Raises
+- Raises:
ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
--
-
get_secret_float
(key: str, default: Optional[float, None] = None) → Optional[pulumi.output.Output[float], None]
+-
+get_secret_float(key: str, default: float | None = None) Output[float] | None
Returns an optional configuration value, as a float, by its key, marked as a secret,
a default value if that key is unset and a default is provided,
or None if it doesn’t exist.
If the configuration value isn’t a legal float, this function will throw an error.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[float]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[float]
-- Raises
+- Raises:
ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
--
-
get_object
(key: str, default: Optional[Any, None] = None) → Optional[Any, None]
+-
+get_object(key: str, default: Any | None = None) Any | None
Returns an optional configuration value, as an object, by its key,
a default value if that key is unset and a default is provided, or undefined if it
doesn’t exist. This routine simply JSON parses and doesn’t validate the shape of the
contents.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[Any]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[Any]
-- Raises
+- Raises:
ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
--
-
get_secret_object
(key: str, default: Optional[Any, None] = None) → Optional[pulumi.output.Output[Any], None]
+-
+get_secret_object(key: str, default: Any | None = None) Output[Any] | None
Returns an optional configuration value, as an object, by its key, marking it as a secret,
a default value if that key is unset and a default is provided,
or undefined if it doesn’t exist. This routine simply JSON parses and doesn’t validate the
shape of the contents.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
default (Optional[Any]) – An optional fallback value to use if the given configuration key is not set.
-- Returns
+- Returns:
The configuration key’s value, or None if one does not exist.
-- Return type
+- Return type:
Optional[Any]
-- Raises
+- Raises:
ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
--
-
require
(key: str) → str
+-
+require(key: str) str
Returns a configuration value by its given key. If it doesn’t exist, an error is thrown.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
-- Returns
+- Returns:
The configuration key’s value.
-- Return type
+- Return type:
str
-- Raises
+- Raises:
ConfigMissingError – The configuration value did not exist.
--
-
require_secret
(key: str) → pulumi.output.Output[str]
+-
+require_secret(key: str) Output[str]
Returns a configuration value, marked as a secret by its given key. If it doesn’t exist, an error is thrown.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
-- Returns
+- Returns:
The configuration key’s value.
-- Return type
+- Return type:
str
-- Raises
+- Raises:
ConfigMissingError – The configuration value did not exist.
--
-
require_bool
(key: str) → bool
+-
+require_bool(key: str) bool
Returns a configuration value, as a bool, by its given key. If it doesn’t exist, or the
configuration value is not a legal bool, an error is thrown.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
-- Returns
+- Returns:
The configuration key’s value.
-- Return type
+- Return type:
bool
-- Raises
+- Raises:
ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to bool.
@@ -854,21 +854,21 @@ configuration value is not a legal bool, an error is thrown.
--
-
require_secret_bool
(key: str) → pulumi.output.Output[bool]
+-
+require_secret_bool(key: str) Output[bool]
Returns a configuration value, as a bool, marked as a secret by its given key. If it doesn’t exist, or the
configuration value is not a legal bool, an error is thrown.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
-- Returns
+- Returns:
The configuration key’s value.
-- Return type
+- Return type:
bool
-- Raises
+- Raises:
ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to bool.
@@ -878,21 +878,21 @@ configuration value is not a legal bool, an error is thrown.
--
-
require_int
(key: str) → int
+-
+require_int(key: str) int
Returns a configuration value, as an int, by its given key. If it doesn’t exist, or the
configuration value is not a legal int, an error is thrown.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
-- Returns
+- Returns:
The configuration key’s value.
-- Return type
+- Return type:
int
-- Raises
+- Raises:
ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to int.
@@ -902,21 +902,21 @@ configuration value is not a legal int, an error is thrown.
--
-
require_secret_int
(key: str) → pulumi.output.Output[int]
+-
+require_secret_int(key: str) Output[int]
Returns a configuration value, as an int, marked as a secret by its given key. If it doesn’t exist, or the
configuration value is not a legal int, an error is thrown.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
-- Returns
+- Returns:
The configuration key’s value.
-- Return type
+- Return type:
int
-- Raises
+- Raises:
ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to int.
@@ -926,21 +926,21 @@ configuration value is not a legal int, an error is thrown.
--
-
require_float
(key: str) → float
+-
+require_float(key: str) float
Returns a configuration value, as a float, by its given key. If it doesn’t exist, or the
configuration value is not a legal number, an error is thrown.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
-- Returns
+- Returns:
The configuration key’s value.
-- Return type
+- Return type:
float
-- Raises
+- Raises:
ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
@@ -950,21 +950,21 @@ configuration value is not a legal number, an error is thrown.
--
-
require_secret_float
(key: str) → pulumi.output.Output[float]
+-
+require_secret_float(key: str) Output[float]
Returns a configuration value, as a float, marked as a secret by its given key. If it doesn’t exist, or the
configuration value is not a legal number, an error is thrown.
-- Parameters
+- Parameters:
key (str) – The requested configuration key.
-- Returns
+- Returns:
The configuration key’s value.
-- Return type
+- Return type:
float
-- Raises
+- Raises:
ConfigMissingError – The configuration value did not exist.
ConfigTypeError – The configuration value existed but couldn’t be coerced to float.
@@ -974,33 +974,33 @@ configuration value is not a legal number, an error is thrown.
--
-
require_object
(key: str) → Any
+-
+require_object(key: str) Any
Returns a configuration value as a JSON string and deserializes the JSON into a Python
object. If it doesn’t exist, or the configuration value is not a legal JSON string, an error
is thrown.
--
-
require_secret_object
(key: str) → pulumi.output.Output[Any]
+-
+require_secret_object(key: str) Output[Any]
Returns a configuration value as a JSON string and deserializes the JSON into a Python
object, marking it as a secret. If it doesn’t exist, or the configuration value is not a
legal JSON string, an error is thrown.
--
-
full_key
(key: str) → str
+-
+full_key(key: str) str
Turns a simple configuration key into a fully resolved one, by prepending the bag’s name.
-- Parameters
+- Parameters:
key (str) – The name of the configuration key.
-- Returns
+- Returns:
The name of the configuration key, prefixed with the bag’s name.
-- Return type
+- Return type:
str
@@ -1009,56 +1009,56 @@ legal JSON string, an error is thrown.
--
-exception
pulumi.
ConfigMissingError
(key: str)
+-
+exception pulumi.ConfigMissingError(key: str)
Indicates a configuration value is missing.
--
-
key
: str
+-
+key: str
The name of the missing configuration key.
--
-exception
pulumi.
ConfigTypeError
(key: str, value: str, expect_type: str)
+-
+exception pulumi.ConfigTypeError(key: str, value: str, expect_type: str)
Indicates a configuration value is of the wrong type.
--
-
key
: str
+-
+key: str
The name of the key whose value was ill-typed.
--
-
value
: str
+-
+value: str
The ill-typed value.
--
-
expect_type
: str
+-
+expect_type: str
The expected type of this value.
--
-
pulumi.
get_project
() → str
+-
+pulumi.get_project() str
Returns the current project name.
--
-
pulumi.
get_stack
() → str
+-
+pulumi.get_stack() str
Returns the current stack name.
--
-
pulumi.runtime.
is_dry_run
() → bool
+-
+pulumi.runtime.is_dry_run() bool
Returns whether or not we are currently doing a preview.
When writing unit tests, you can set this flag via pulumi.runtime.set_mocks
by supplying a value
for the argument preview
.
@@ -1066,7 +1066,7 @@ for the argument pr
-Outputs and Inputs
+Outputs and Inputs
Like other languages in the Pulumi ecosystem, all Resources in Python have two kinds of properties: inputs and
outputs. Inputs are specified as arguments to resource constructors, to be used as inputs to the resource itself.
Outputs are returned as properties on the instantiated resource object. Outputs are similar to futures in that they
@@ -1076,50 +1076,50 @@ program.
on the Output class in order to observe the value of an output. See
the documentation for more details on this part of the Pulumi programming model.
--
-class
pulumi.
Output
(resources: Union[Awaitable[Set[Resource]], Set[Resource]], future: Awaitable[T_co], is_known: Awaitable[bool], is_secret: Optional[Awaitable[bool], None] = None)
+-
+class pulumi.Output(resources: Awaitable[Set[Resource]] | Set[Resource], future: Awaitable[T_co], is_known: Awaitable[bool], is_secret: Awaitable[bool] | None = None)
Output helps encode the relationship between Resources in a Pulumi application. Specifically an
Output holds onto a piece of Data and the Resource it was generated from. An Output value can
then be provided when constructing new Resources, allowing that new Resource to know both the
value as well as the Resource the value came from. This allows for a precise ‘Resource
dependency graph’ to be created, which properly tracks the relationship between resources.
--
-
__getitem__
(key: Any) → pulumi.output.Output[Any]
+-
+__getitem__(key: Any) Output[Any]
Syntax sugar for looking up attributes dynamically off of outputs.
-- Parameters
+- Parameters:
key (Any) – Key for the attribute dictionary.
-- Returns
+- Returns:
An Output of this Output’s underlying value, keyed with the given key as if it were a dictionary.
-- Return type
+- Return type:
Output[Any]
--
-
__getattr__
(item: str) → pulumi.output.Output[Any]
+-
+__getattr__(item: str) Output[Any]
Syntax sugar for retrieving attributes off of outputs.
-- Parameters
+- Parameters:
item (str) – An attribute name.
-- Returns
+- Returns:
An Output of this Output’s underlying value’s property with the given name.
-- Return type
+- Return type:
Output[Any]
--
-
apply
(func: Callable[[T_co], Union[U, Awaitable[U], pulumi.output.Output[T]]], run_with_unknowns: Optional[bool, None] = None) → pulumi.output.Output[U]
+-
+apply(func: Callable[[T_co], U | Awaitable[U] | Output[T]], run_with_unknowns: bool | None = None) Output[U]
Transforms the data of the output with the provided func. The result remains an
Output so that dependent resources can be properly tracked.
‘func’ is not allowed to make resources.
@@ -1128,79 +1128,79 @@ and you want to get a transitive dependency of it.
This function will be called during execution of a pulumi up
request. It may not run
during pulumi preview
(as the values of resources are of course may not be known then).
-- Parameters
+- Parameters:
func (Callable[[T_co],Input[U]]) – A function that will, given this Output’s value, transform the value to
an Input of some kind, where an Input is either a prompt value, a Future, or another Output of the given
type.
-- Returns
+- Returns:
A transformed Output obtained from running the transformation function on this Output’s value.
-- Return type
+- Return type:
Output[U]
--
-static
from_input
(val: Union[T_co, Awaitable[T_co], pulumi.output.Output[T]]) → pulumi.output.Output[T_co]
+-
+static from_input(val: T_co | Awaitable[T_co] | Output[T]) Output[T_co]
Takes an Input value and produces an Output value from it, deeply unwrapping nested Input values through nested
lists, dicts, and input classes. Nested objects of other types (including Resources) are not deeply unwrapped.
-- Parameters
+- Parameters:
val (Input[T_co]) – An Input to be converted to an Output.
-- Returns
+- Returns:
A deeply-unwrapped Output that is guaranteed to not contain any Input values.
-- Return type
+- Return type:
Output[T_co]
--
-static
unsecret
(val: pulumi.output.Output[T]) → pulumi.output.Output[T]
+-
+static unsecret(val: Output[T]) Output[T]
Takes an existing Output, deeply unwraps the nested values and returns a new Output without any secrets included
--
-static
secret
(val: Union[T, Awaitable[T], pulumi.output.Output[T]]) → pulumi.output.Output[T]
+-
+static secret(val: T | Awaitable[T] | Output[T]) Output[T]
Takes an Input value and produces an Output value from it, deeply unwrapping nested Input values as necessary
given the type. It also marks the returned Output as a secret, so its contents will be persisted in an encrypted
form in state files.
-- Parameters
+- Parameters:
val (Input[T]) – An Input to be converted to an Secret Output.
-- Returns
+- Returns:
A deeply-unwrapped Output that is guaranteed to not contain any Input values and is marked as a Secret.
-- Return type
+- Return type:
Output[T]
--
-static
all
(*args: Union[T, Awaitable[T], pulumi.output.Output[T]]) → pulumi.output.Output[List[T]]
--
-static
all
(**kwargs: Union[T, Awaitable[T], pulumi.output.Output[T]]) → pulumi.output.Output[Dict[str, T]]
+-
+static all(*args: T | Awaitable[T] | Output[T]) Output[List[T]]
+-
+static all(**kwargs: T | Awaitable[T] | Output[T]) Output[Dict[str, T]]
Produces an Output of a list (if args i.e a list of inputs are supplied)
or dict (if kwargs i.e. keyworded arguments are supplied).
This function can be used to combine multiple, separate Inputs into a single
@@ -1212,21 +1212,21 @@ are preserved in the returned Output.
args (Input[T]) – A list of Inputs to convert.
kwargs (Input[T]) – A list of named Inputs to convert.
An output of list or dict, converted from unnamed or named Inputs respectively.
concat
(*args: Union[str, Awaitable[str], pulumi.output.Output[T]]) → pulumi.output.Output[str]Concatenates a collection of Input[str] into a single Output[str].
This function takes a sequence of Input[str], stringifies each, and concatenates all values into one final string. This can be used like so:
@@ -1234,50 +1234,50 @@ into one final string. This can be used like so:args (Input[str]) – A list of string Inputs to concatenate.
A concatenated output string.
Output[str]
format
(format_string: Union[str, Awaitable[str], pulumi.output.Output[T]], *args: Union[object, Awaitable[object], pulumi.output.Output[T]], **kwargs: Union[object, Awaitable[object], pulumi.output.Output[T]]) → pulumi.output.Output[str]Perform a string formatting operation.
This has the same semantics as str.format
except it handles Input types.
format_string (Input[str]) – A formatting string
args (Input[object]) – Positional arguments for the format string
kwargs (Input[object]) – Keyword arguments for the format string
A formatted output string.
Output[str]
json_dumps
(obj: Union[Any, Awaitable[Any], pulumi.output.Output[T]], *, skipkeys: bool = False, ensure_ascii: bool = True, check_circular: bool = True, allow_nan: bool = True, cls: Optional[Type[json.encoder.JSONEncoder], None] = None, indent: Optional[Union[int, str]] = None, separators: Optional[Tuple[str, str], None] = None, default: Optional[Callable[[Any], Any], None] = None, sort_keys: bool = False, **kw: Any) → pulumi.output.Output[str]Uses json.dumps to serialize the given Input[object] value into a JSON string.
The arguments have the same meaning as in json.dumps
except obj is an Input.
json_loads
(s: Union[str, bytes, bytearray, Awaitable[Union[str, bytes, bytearray]], pulumi.output.Output[T]], *, cls: Optional[Type[json.decoder.JSONDecoder], None] = None, object_hook: Optional[Callable[[Dict[Any, Any]], Any], None] = None, parse_float: Optional[Callable[[str], Any], None] = None, parse_int: Optional[Callable[[str], Any], None] = None, parse_constant: Optional[Callable[[str], Any], None] = None, object_pairs_hook: Optional[Callable[[List[Tuple[Any, Any]]], Any], None] = None, **kwds: Any) → pulumi.output.Output[Any]Uses json.loads to deserialize the given JSON Input[str] value into a value.
The arguments have the same meaning as in json.loads
except s is an Input.
The Pulumi SDK contains a few helper functions for logging to the console. Messages logged using these functions are sent directly to the Pulumi Engine and rendered with the rest of the CLI output.
pulumi.
debug
(msg: str, resource: Optional[Resource, None] = None, stream_id: Optional[int, None] = None, ephemeral: Optional[bool, None] = None) → NoneLogs a message to the Pulumi CLI’s debug channel, associating it with a resource and stream_id if provided.
msg (str) – The message to send to the Pulumi CLI.
resource (Optional[Resource]) – If provided, associate this message with the given resource in the Pulumi CLI.
pulumi.
info
(msg: str, resource: Optional[Resource, None] = None, stream_id: Optional[int, None] = None, ephemeral: Optional[bool, None] = None) → NoneLogs a message to the Pulumi CLI’s info channel, associating it with a resource and stream_id if provided.
msg (str) – The message to send to the Pulumi CLI.
resource (Optional[Resource]) – If provided, associate this message with the given resource in the Pulumi CLI.
pulumi.
warn
(msg: str, resource: Optional[Resource, None] = None, stream_id: Optional[int, None] = None, ephemeral: Optional[bool, None] = None) → NoneLogs a message to the Pulumi CLI’s warning channel, associating it with a resource and stream_id if provided.
msg (str) – The message to send to the Pulumi CLI.
resource (Optional[Resource]) – If provided, associate this message with the given resource in the Pulumi CLI.
pulumi.
error
(msg: str, resource: Optional[Resource, None] = None, stream_id: Optional[int, None] = None, ephemeral: Optional[bool, None] = None)Logs a message to the Pulumi CLI’s error channel, associating it with a resource and stream_id if provided.
Consider raising an exception after calling error to stop the Pulumi program.
msg (str) – The message to send to the Pulumi CLI.
resource (Optional[Resource]) – If provided, associate this message with the given resource in the Pulumi CLI.
Python programs can export values. Exported values are attached to the program’s Stack resource and accessed using the pulumi stack output CLI command:
import pulumi
@@ -1370,11 +1370,11 @@ with a resource and stream_id if provided.
pulumi.
export
(name: str, value: Any)Exports a named stack output.
name (str) – The name to assign to this output.
value (Any) – The value of this output.
The automation module contains the Pulumi Automation API, the programmatic interface for driving Pulumi programs
without the CLI.
Generally this can be thought of as encapsulating the functionality of the CLI (pulumi up
, pulumi preview
,
@@ -1457,8 +1457,8 @@ conflicts:
pulumi.automation.
create_stack
(stack_name: str, project_name: Optional[str, None] = None, program: Optional[Callable[], None], None] = None, work_dir: Optional[str, None] = None, opts: Optional[pulumi.automation._local_workspace.LocalWorkspaceOptions, None] = None) → pulumi.automation._stack.StackCreates a Stack with a LocalWorkspace utilizing the specified inline (in process) Pulumi program or the local Pulumi CLI program from the specified working dir.
Inline Programs
@@ -1482,7 +1482,7 @@ available Settings files (Pulumi.yaml, Pulumi.[stack].yaml).stack_name – The name of the stack.
project_name – The name of the project - required for inline programs.
Stack
pulumi.automation.
select_stack
(stack_name: str, project_name: Optional[str, None] = None, program: Optional[Callable[], None], None] = None, work_dir: Optional[str, None] = None, opts: Optional[pulumi.automation._local_workspace.LocalWorkspaceOptions, None] = None) → pulumi.automation._stack.StackSelects a Stack with a LocalWorkspace utilizing the specified inline (in process) Pulumi program or the local Pulumi CLI program from the specified working dir.
Inline Programs
@@ -1524,7 +1524,7 @@ available Settings files (Pulumi.yaml, Pulumi.[stack].yaml).stack_name – The name of the stack.
project_name – The name of the project - required for inline programs.
Stack
pulumi.automation.
create_or_select_stack
(stack_name: str, project_name: Optional[str, None] = None, program: Optional[Callable[], None], None] = None, work_dir: Optional[str, None] = None, opts: Optional[pulumi.automation._local_workspace.LocalWorkspaceOptions, None] = None) → pulumi.automation._stack.StackCreates or selects an existing Stack with a LocalWorkspace utilizing the specified inline (in process) Pulumi program or the local Pulumi CLI program from the specified working dir.
Inline Programs
@@ -1566,7 +1566,7 @@ available Settings files (Pulumi.yaml, Pulumi.[stack].yaml).stack_name – The name of the stack.
project_name – The name of the project - required for inline programs.
Stack
pulumi.automation.
LocalWorkspace
(work_dir: Optional[str, None] = None, pulumi_home: Optional[str, None] = None, program: Optional[Callable[], None], None] = None, env_vars: Optional[Mapping[str, str], None] = None, secrets_provider: Optional[str, None] = None, project_settings: Optional[pulumi.automation._project_settings.ProjectSettings, None] = None, stack_settings: Optional[Mapping[str, pulumi.automation._stack_settings.StackSettings], None] = None)LocalWorkspace is a default implementation of the Workspace interface. A Workspace is the execution context containing a single Pulumi project, a program, and multiple stacks. Workspaces are used to manage the execution environment, @@ -1594,49 +1594,54 @@ LocalWorkspace relies on Pulumi.yaml and Pulumi.[stack].yaml as the intermediate for Project and Stack settings. Modifying ProjectSettings will alter the Workspace Pulumi.yaml file, and setting config on a Stack will modify the Pulumi.[stack].yaml file. This is identical to the behavior of Pulumi CLI driven workspaces.
+project_settings
() → pulumi.automation._project_settings.ProjectSettingsReturns the settings object for the current project if any.
ProjectSettings
save_project_settings
(settings: pulumi.automation._project_settings.ProjectSettings) → NoneOverwrites the settings object in the current project. There can only be a single project per workspace. Fails is new project name does not match old.
settings – The project settings to save.
stack_settings
(stack_name: str) → pulumi.automation._stack_settings.StackSettingsReturns the settings object for the stack matching the specified stack name if any.
stack_name – The name of the stack.
StackSettings
save_stack_settings
(stack_name: str, settings: pulumi.automation._stack_settings.StackSettings) → NoneOverwrites the settings object for the stack matching the specified stack name.
stack_name – The name of the stack.
settings – The stack settings to save.
serialize_args_for_op
(stack_name: str) → List[str]A hook to provide additional args to CLI commands before they are executed. Provided with stack name, returns a list of args to append to an invoked command [”–config=…”, ] LocalWorkspace does not utilize this extensibility point.
stack_name – The name of the stack.
post_command_callback
(stack_name: str) → NoneA hook executed after every command. Called with the stack name. An extensibility point to perform workspace cleanup (CLI operations may create/modify a Pulumi.stack.yaml) LocalWorkspace does not utilize this extensibility point.
stack_name – The name of the stack.
get_config
(stack_name: str, key: str) → pulumi.automation._config.ConfigValueReturns the value associated with the specified stack name and key, scoped to the Workspace.
stack_name – The name of the stack.
key – The key for the config item to get.
ConfigValue
get_all_config
(stack_name: str) → MutableMapping[str, pulumi.automation._config.ConfigValue]Returns the config map for the specified stack name, scoped to the current Workspace.
stack_name – The name of the stack.
ConfigMap
set_config
(stack_name: str, key: str, value: pulumi.automation._config.ConfigValue) → NoneSets the specified key-value pair on the provided stack name.
stack_name – The name of the stack.
key – The config key to add.
set_all_config
(stack_name: str, config: MutableMapping[str, pulumi.automation._config.ConfigValue]) → NoneSets all values in the provided config map for the specified stack name.
stack_name – The name of the stack.
config – A mapping of key to ConfigValue to set to config.
remove_config
(stack_name: str, key: str) → NoneRemoves the specified key-value pair on the provided stack name.
stack_name – The name of the stack.
key – The key to remove from config.
remove_all_config
(stack_name: str, keys: List[str]) → NoneRemoves all values in the provided key list for the specified stack name.
stack_name – The name of the stack.
keys – The keys to remove from config.
refresh_config
(stack_name: str) → NoneGets and sets the config map used with the last update for Stack matching stack name.
stack_name – The name of the stack.
who_am_i
() → pulumi.automation._workspace.WhoAmIResultReturns the currently authenticated user.
WhoAmIResult
stack
() → Optional[pulumi.automation._workspace.StackSummary, None]Returns a summary of the currently selected stack, if any.
Optional[StackSummary]
create_stack
(stack_name: str) → NoneCreates and sets a new stack with the stack name, failing if one already exists.
stack_name (str) – The name of the stack to create
None
select_stack
(stack_name: str) → NoneSelects and sets an existing stack matching the stack stack_name, failing if none exists.
stack_name – The name of the stack to select
None
remove_stack
(stack_name: str) → NoneDeletes the stack and all associated configuration and history.
stack_name – The name of the stack to remove
list_stacks
() → List[pulumi.automation._workspace.StackSummary]Returns all Stacks created under the current Project.
This queries underlying backend and may return stacks not present in the Workspace
(as Pulumi.
List[StackSummary]
install_plugin
(name: str, version: str, kind: str = 'resource') → NoneInstalls a plugin in the Workspace, for example to use cloud providers like AWS or GCP.
name – The name of the plugin to install.
version – The version to install.
install_plugin_from_server
(name: str, version: str, server: str) → NoneInstalls a plugin in the Workspace from a remote server, for example a third party plugin.
name – The name of the plugin to install.
version – The version to install.
remove_plugin
(name: Optional[str, None] = None, version_range: Optional[str, None] = None, kind: str = 'resource') → NoneRemoves a plugin from the Workspace matching the specified name and version.
name – The name of the plugin to remove.
version_range – The version range to remove.
list_plugins
() → List[pulumi.automation._workspace.PluginInfo]Returns a list of all plugins installed in the Workspace.
List[PluginInfo]
export_stack
(stack_name: str) → pulumi.automation._workspace.DeploymentExportStack exports the deployment state of the stack matching the given name. This can be combined with ImportStack to edit a stack’s state (such as recovery from failed deployments).
stack_name – The name of the stack to export.
Deployment
import_stack
(stack_name: str, state: pulumi.automation._workspace.Deployment) → NoneImportStack imports the specified deployment state into a pre-existing stack. This can be combined with ExportStack to edit a stack’s state (such as recovery from failed deployments).
stack_name – The name of the stack to import.
state – The deployment state to import.
stack_outputs
(stack_name: str) → MutableMapping[str, pulumi.automation._output.OutputValue]Gets the current set of Stack outputs from the last Stack.up().
stack_name – The name of the stack.
OutputMap
pulumi.automation.
Stack
(name: str, workspace: pulumi.automation._workspace.Workspace, mode: pulumi.automation._stack.StackInitMode)Stack is an isolated, independently configurable instance of a Pulumi program. Stack exposes methods for the full pulumi lifecycle (up/preview/refresh/destroy), as well as managing configuration. Multiple Stacks are commonly used to denote different phases of development (such as development, staging and production) or feature branches (such as feature-x-dev, jane-feature-x-dev).
create
(stack_name: str, workspace: pulumi.automation._workspace.Workspace) → pulumi.automation._stack.StackCreates a new stack using the given workspace, and stack name. It fails if a stack with that name already exists.
stack_name – The name identifying the Stack
workspace – The Workspace the Stack was created from.
Stack
select
(stack_name: str, workspace: pulumi.automation._workspace.Workspace) → pulumi.automation._stack.StackSelects stack using the given workspace, and stack name. It returns an error if the given Stack does not exist.
stack_name – The name identifying the Stack
workspace – The Workspace the Stack was created from.
Stack
create_or_select
(stack_name: str, workspace: pulumi.automation._workspace.Workspace) → pulumi.automation._stack.StackTries to create a new stack using the given workspace and stack name if the stack does not already exist, or falls back to selecting the existing stack. If the stack does not exist, it will be created and selected.
stack_name – The name identifying the Stack
workspace – The Workspace the Stack was created from.
Stack
up
(parallel: Optional[int, None] = None, message: Optional[str, None] = None, target: Optional[List[str], None] = None, policy_packs: Optional[List[str], None] = None, policy_pack_configs: Optional[List[str], None] = None, expect_no_changes: Optional[bool, None] = None, diff: Optional[bool, None] = None, target_dependents: Optional[bool, None] = None, replace: Optional[List[str], None] = None, color: Optional[str, None] = None, on_output: Optional[Callable[[str], Any], None] = None, on_event: Optional[Callable[[pulumi.automation.events.EngineEvent], Any], None] = None, program: Optional[Callable[], None], None] = None, plan: Optional[str, None] = None, show_secrets: bool = True, log_flow: Optional[bool, None] = None, log_verbosity: Optional[int, None] = None, log_to_std_err: Optional[bool, None] = None, tracing: Optional[str, None] = None, debug: Optional[bool, None] = None) → pulumi.automation._stack.UpResultCreates or updates the resources in a stack by executing the program in the Workspace. https://www.pulumi.com/docs/reference/cli/pulumi_up/
parallel – Parallel is the number of resource operations to run in parallel at once. (1 for no parallelism). Defaults to unbounded (2147483647).
debug – Print detailed debugging output during resource operations
UpResult
preview
(parallel: Optional[int, None] = None, message: Optional[str, None] = None, target: Optional[List[str], None] = None, policy_packs: Optional[List[str], None] = None, policy_pack_configs: Optional[List[str], None] = None, expect_no_changes: Optional[bool, None] = None, diff: Optional[bool, None] = None, target_dependents: Optional[bool, None] = None, replace: Optional[List[str], None] = None, color: Optional[str, None] = None, on_output: Optional[Callable[[str], Any], None] = None, on_event: Optional[Callable[[pulumi.automation.events.EngineEvent], Any], None] = None, program: Optional[Callable[], None], None] = None, plan: Optional[str, None] = None, log_flow: Optional[bool, None] = None, log_verbosity: Optional[int, None] = None, log_to_std_err: Optional[bool, None] = None, tracing: Optional[str, None] = None, debug: Optional[bool, None] = None) → pulumi.automation._stack.PreviewResultPerforms a dry-run update to a stack, returning pending changes. https://www.pulumi.com/docs/reference/cli/pulumi_preview/
parallel – Parallel is the number of resource operations to run in parallel at once. (1 for no parallelism). Defaults to unbounded (2147483647).
debug – Print detailed debugging output during resource operations
PreviewResult
refresh
(parallel: Optional[int, None] = None, message: Optional[str, None] = None, target: Optional[List[str], None] = None, expect_no_changes: Optional[bool, None] = None, color: Optional[str, None] = None, on_output: Optional[Callable[[str], Any], None] = None, on_event: Optional[Callable[[pulumi.automation.events.EngineEvent], Any], None] = None, show_secrets: bool = True, log_flow: Optional[bool, None] = None, log_verbosity: Optional[int, None] = None, log_to_std_err: Optional[bool, None] = None, tracing: Optional[str, None] = None, debug: Optional[bool, None] = None) → pulumi.automation._stack.RefreshResultCompares the current stack’s resource state with the state known to exist in the actual cloud provider. Any such changes are adopted into the current stack.
parallel – Parallel is the number of resource operations to run in parallel at once. (1 for no parallelism). Defaults to unbounded (2147483647).
debug – Print detailed debugging output during resource operations
RefreshResult
destroy
(parallel: Optional[int, None] = None, message: Optional[str, None] = None, target: Optional[List[str], None] = None, target_dependents: Optional[bool, None] = None, color: Optional[str, None] = None, on_output: Optional[Callable[[str], Any], None] = None, on_event: Optional[Callable[[pulumi.automation.events.EngineEvent], Any], None] = None, show_secrets: bool = True, log_flow: Optional[bool, None] = None, log_verbosity: Optional[int, None] = None, log_to_std_err: Optional[bool, None] = None, tracing: Optional[str, None] = None, debug: Optional[bool, None] = None) → pulumi.automation._stack.DestroyResultDestroy deletes all resources in a stack, leaving all history and configuration intact.
parallel – Parallel is the number of resource operations to run in parallel at once. (1 for no parallelism). Defaults to unbounded (2147483647).
debug – Print detailed debugging output during resource operations
DestroyResult
get_config
(key: str) → pulumi.automation._config.ConfigValueReturns the config value associated with the specified key.
key – The key for the config item to get.
ConfigValue
get_all_config
() → MutableMapping[str, pulumi.automation._config.ConfigValue]Returns the full config map associated with the stack in the Workspace.
ConfigMap
set_config
(key: str, value: pulumi.automation._config.ConfigValue) → NoneSets a config key-value pair on the Stack in the associated Workspace.
key – The config key to add.
value – The config value to add.
set_all_config
(config: MutableMapping[str, pulumi.automation._config.ConfigValue]) → NoneSets all specified config values on the stack in the associated Workspace.
config – A mapping of key to ConfigValue to set to config.
remove_config
(key: str) → NoneRemoves the specified config key from the Stack in the associated Workspace.
key – The key to remove from config.
remove_all_config
(keys: List[str]) → NoneRemoves the specified config keys from the Stack in the associated Workspace.
keys – The keys to remove from config.
refresh_config
() → NoneGets and sets the config map used with the last update.
outputs
() → MutableMapping[str, pulumi.automation._output.OutputValue]Gets the current set of Stack outputs from the last Stack.up().
OutputMap
history
(page_size: Optional[int, None] = None, page: Optional[int, None] = None, show_secrets: bool = True) → List[pulumi.automation._stack.UpdateSummary]Returns a list summarizing all previous and current results from Stack lifecycle operations (up/preview/refresh/destroy).
page_size – Paginate history entries (used in combination with page), defaults to all.
page – Paginate history entries (used in combination with page_size), defaults to all.
show_secrets – Show config secrets when they appear in history.
List[UpdateSummary]
info
(show_secrets=True) → Optional[pulumi.automation._stack.UpdateSummary, None]Returns the current results from Stack lifecycle operations.
Optional[UpdateSummary]
cancel
() → NoneCancel stops a stack’s currently running update. It returns an error if no update is currently running. Note that this operation is very dangerous, and may leave the stack in an inconsistent state if a resource operation was pending when the update was canceled. @@ -2272,24 +2277,24 @@ This command is not supported for local backends.
export_stack
() → pulumi.automation._workspace.Deploymentexport_stack exports the deployment state of the stack. This can be combined with Stack.import_state to edit a stack’s state (such as recovery from failed deployments).
Deployment
import_stack
(state: pulumi.automation._workspace.Deployment) → Noneimport_stack imports the specified deployment state into a pre-existing stack. This can be combined with Stack.export_state to edit a stack’s state (such as recovery from failed deployments).
state – The deployment state to import.
pulumi.automation.
LocalWorkspaceOptions
(work_dir: Optional[str, None] = None, pulumi_home: Optional[str, None] = None, program: Optional[Callable[], None], None] = None, env_vars: Optional[Mapping[str, str], None] = None, secrets_provider: Optional[str, None] = None, project_settings: Optional[pulumi.automation._project_settings.ProjectSettings, None] = None, stack_settings: Optional[Mapping[str, pulumi.automation._stack_settings.StackSettings], None] = None)pulumi.automation.
ProjectSettings
(name: str, runtime: Union[str, pulumi.automation._project_settings.ProjectRuntimeInfo], main: Optional[str, None] = None, description: Optional[str, None] = None, author: Optional[str, None] = None, website: Optional[str, None] = None, license: Optional[str, None] = None, config: Optional[str, None] = None, template: Optional[pulumi.automation._project_settings.ProjectTemplate, None] = None, backend: Optional[pulumi.automation._project_settings.ProjectBackend, None] = None)A Pulumi project manifest. It describes metadata applying to all sub-stacks created from the project.
pulumi.automation.
StackSettings
(secrets_provider: Optional[str, None] = None, encrypted_key: Optional[str, None] = None, encryption_salt: Optional[str, None] = None, config: Optional[Dict[str, Any], None] = None)A description of the Stack’s configuration and encryption metadata.
pulumi.automation.
ConfigValue
(value: str, secret: bool = False)ConfigValue is the input/output of a pulumi config
command.
It has a plaintext value, and an option boolean indicating secretness.
ebV zK#s!yt3DSm7wdAs$_14Rm0lIDfnYlA8EM7s`&41hlR8pZzVzgjUnc=sBf5a@Z9*4_;n#^L)5XKWjgb#4msBnlt(B)&o*{o+ zRC%I&f1`LGlH4kqbKEMshHqNv&XwW$!sH6qL<}Qcwl;WjstEChNfM9cN3g!YaI;aY zqf24~-F$-RQ|f-AX0;>~miSZx68K?YHF{pTwsM{9TRM(mJ`mq2EY8)d9mOE`$@gUg zxn%|Aj>;aD$0ztrHjv+^hV!-w5QFEwL%(9819d06mh&J`!2ON3TWpmo`nj_c##U&?GhexMC3U5c9u-22H58!ydZ6-`ciU&@Yw;lCV_N!o88V_ zms}w2p{*1inws7gF(zC9crtKJ;4PC`5tEYymgbPGonG!Nn{d>}asUOZuU8cc)Jz4! zVv-|=)w3+YWJ7WtVagR%$O$e>-2$)zqRFX}Ss`~o6XH}g4e%&A{`7_0XzG oTT5usuZeI zEmxrDy_2uJ^}6eveS5FJ!nyd0>-S!B-81%He)&yT+ E(jFLApSB6iEC&ZkX`bOETHN0? n z6Xb`YjWj BQ^ixvesC@kV2KIofB2f?F* zZt<5Ga-dU!7VT?=`6Kp{SbjsbAw*PdfgZwSs tLR)6Y@=+=CtF-BG+GEZI|3SY$Fig4m7|PJxGGUZ_;gX z`Oz)O;_5>lpv4=}Q47UOTXh!=OwjEVt96KISL0^8ZY{N%2paf-4xjooL`UPcR3U%R zTYc^&yPv=Fyn{+(uNSX0+#`e-G_UA35LS@d`~=ZP5gXsF@K><}ndn+At_^oXE|`uY zx`{AFr{k}hH v%vGuujT-4J~%64f4sn5sEZ)x-G1a*Q=N+BBxltBWBU5v>>4c5xaw? z5+I#anwyhuYdqv4Uf3*NNSw}z)RZwHw8Hi2&S1pmA*|gruhVC;LGT3a8|b!^DU?1} zK%lNs#4OyxRIzjjvA}i(ZwPqKkh=i|GArH2oiJgv-Ypk8^K&}Zrrz8NHik&K^*LDh zMp=d8DAc~jZxL(z6Z}8*i|`co)y`kGWC_{V6NBcmdzivC <+rv6m)?XMF1+Pla@P6fkCtVq~Kc_ zXw#bXKEI2TgI8v&4frRm*+L!82b6z+ln~C^u;h|sE8G1}LNLl$F(Mm& ~ zrP}RO>%k`>T>1UVZ#Mhi=!W1cCm0C+Fzo=4U}FmftI P=uM$)G_*iUP3W zq2SHUWD?9*yfxAe!4xR{DV99qrG!;q&`8ElFPOCZeJ9)v5|ChgwTM&=B6=+X%Ib@C zszJCZkb(x5*@yMgE8G@cN>rX)d5RF>%2O+Ql=30>8`CJr?Hyn0(d}&YsEeqS)KU61 z9g7cnPU3}A{1^0IT%bYVB8Yc_y&_tQRcGfA^$0Yx*kmF|NR40v6iwcm03O-J 6@{W^(z#2cUy aEzyNM#M}-*_W{U2d4X z3_kWId~p~8-)gHZV=#sg-i4QUrz)r2O|PiFrSs9AC@oyO%-bG)Si!a|Cf*^4Pl`5H zRZt9VdaKv(4V&B7j(8_VK9Mls{gWdNwc_ETWC#M|gh(qbrRn+B$a87Y7Oq_$8z0*p z^g$G?cBf2_SIK@Bu6-(Y5tXr_xFSd*<6jH+d0UL<2&iBm0$XZof>=p-BftxVBZ)7^ zybZ)D jGi`B8%E%%Quj9C17U^=M@jq$Y2>H3yHn=V&Dwi! zyY*=q{<#m)+afjx#X=VA6mOeQz*U6gS{--^ShJG>C}a93g!en7NtEiRvb^&A`@Ho! zQU&TEDqPv_trH&<^sY+R8-ZRCvQ31ly$0UNReS$o=_~*52jB50wO9Lp{jB|qT@SmK zv}8wkjW!r7XL)Otykiwl`~Px31yqNcTTXIu|H6wFZdwrCkl;<585|P=-pMvxYj+ZP zAsu*K*ocNy&I5PY3EJJg?V2mDE&klm$$E7PPbpvH!iguGKiNjuYB$WsAqvClybq}| zK=TFfuAvS@ybPfOAtuS661%RN+r{w1ooBUixOvDG1677PPso@^{t!bwZ>U3sQ7X8i zK&y1I @8|vt-E_^?v78yjmbErdxCyWJE>ChrDj*N~k0^`hLu}wNu4AovVJYvBK zH>I!$m=ul@nU@6*Mj@P)Hej8Gu&EfOHPlhU%ox(5&t0@Zg#;i@B0UD0@ypxZh{~ZU zFVsE;J5>7w{vmVXt;a?NMI4ItBgOgl!po2iRG ch=);9o6JaD(<&a3>X7` #E%DkD`g4k* zG!Y!|Kd*fYz*n5wxA7mW9{&~p@m6E+Sp+Hc80JgfXeiV}KGgE6h~6MVLs@G86GN|* zUM+r&U>iI5gW?+^N{yCPGSg>4*miF<{AZCLgv^ixPx!^iidd%*uLIV#k>yL4AXx$% z-Es^4SwF-707p@7Q1A0r%+#Ax@NiaDs%5wb__bd3;XfFWp)NQr*Dmo!g$vYfHtGmf zBK@X#B!H?5#1s*yL6%qTKL}5&6xzKV(X7l#;W3MZLyvq%7mj#sC4jAcA0Kw7inSl% zzvR|DivI%dKN0`&HY&{TKGMRf8XI86+Rx+*OYt$@TQ2_7t!<^gzK15+>o@SrTSIIl znWIJzYTM|gljxuA_~+W?spBRN;!jU>p@#fA4YZ-uZBYuC-sXkBs-K9t?yLO)y|$Ua z5!^S8%vvNe!m(a;o6PUioaL<)2nWU2z^!r-q{ccAf6)FnWN()8Q`br~OAi$JmFiCs z=keA9V Zt(_` z#w^X6Tzl;ABWLp7+Ml8mIP0gH{(C_v_yX2 =~g?Gp^-&YyMG=tR^6wll7 zdhH$f$6H_S&LR}5bS+^>JV0 _nHF1;nQD7IJx!l0)e$ z!Iy%}*jztcg^MnDY$J9hWVlLN7JP^-T;W$P2$uKOQMdz(2D!fq%F{{{d$xYAPwj(% z`(AG?)P%qC0ZY-A4)$6^2vKgiEL^|ooZ7qb^1j-;Xuf|!^W93zKCylREBm?4P?&hW z`>gXXf_eGh;*lC3Hl*C(#y(9;#HwrW!&^{~5L&VEq6MV(etKT}L+a>{=%06rzyBEj z-dp un0(loB}pGPzhKlVtqyna4bE;PoZ8*zT68dLr+R7;6V#x(aCypEA)F3w(t}A-T_M9 zo}Zm+*8QAQ@#=|@hyL4Zj2_qMQN>4FjQ*h#5M=_RY>oD%T40ADBPAGWkc*bHt1nZ( z@5fYytFZyL6D*EY+qTH~0k}v5MIJH9h4FZ;|5(swtxf=@1X6r8S|&MFEM9ZST9EPR zPKm{F?P2_uj)v(3)V_;`%4J%Qn~h_lwKj>)j2FDkD(rouSTQ>{Uw-X^_B^ORZ^bPL z9n*R};l&p%2!BT!yjKyN0@#<)FS2y|gp~s;rWn^mBd5$7K`J}GKi;u-R?NId<8;E( zODnq!m=kkZ0}2&qV8<(_vvqq7yOy_9TqlMLXY8PibRXR1RND?B&JHEzI4YjtU<;`1 z9I3bsM`hIME&vV&nr%DPh9gls;at *fWLzBC0J%e=lYUI5Ayp@)DAS4nRlKP`hG6)YGU; zN1xCPHdcErNb8-Hf_X?)h`rtt=K`O-By~5+SQ%6bTz(wfF=_0LXiDng<>-3%+8FFz z8G~8y@;j+J;cLPHT+ph=H4WFwXyyrLnzu_x`hFJ{bCOi9C`shtWL*c&vKK&Bz z`-&t5rIpQEnQ _Cf@*MP;GII; zCY&3^=`5%1LgFg!=s~5#DZz_mUf3?k-^H;bZ9>^ko~d5ktzNwJV8P7Nbzr(6#gq;K z(QY_M!6c=G&-}hgFO4b<=S$X`fufL!^8UL|SXx)%`je+;TG$ayZ67^C?X4gdFm>D) ziL(Z0LO)O43AOVX{8DPiyJ5ggXHJ1eN}GZ*!f6WnvH`HKiQ;X^@?b*z?F@)Hy53ts z&M)FiDT8|CGk06n1@D|b#c@HoLf?$iQ8+WJ)Ml^AZ0Ghb>^`o{z=yYOPH2bS5#@lu zhYX1*EverV=jTG&2Jab>5r5vbpAZ+yILS}(6R{j^suAc>!I&_oUXo848P*_+F9&1| z)=F9X6wNZt z*TXSH;)x163Jul!bpypaSEP$RN04F*fYak0*8(HF2`Gr#o9|y&J>)vGI0WSAP0cp^ zU~v{U H`z2j~< e0qP%4S!N5i;Dh`YUMic^s%uS8XlPk)x)lXaNVqMtd$cxq3L!|b|3Yr z|KYza0!-z7ew;OeRly%e*ne{jc_zPaluJDyx8_h!$r#Flz28X^E{rqHK^y1Qnw*AY zWzBLx%4>^+#T2!;WZixR7A<=vkl;rwTqT3HC5OfkjAd)RJ}y_tAu%bBV<9>_iwszt zlyK$RmX?ibU3!H$W+3EEhAhQUqeW+~>Ox4c#*8d+1tio#cnk$4f?)8Z5rb|!$Y|=; z%Ornd;Y_6t+_Dr>ydvU^ZNN$r?7u)ObS#3AttGSe<#M*@i>SW_SD1*4>SbM|C(iZ| z*d6IeHQDgS3^uF{mg8^F7%CUX(;PI%|M>rB7Rf={leDZw*vnLDTa`*PUowZSEe4sB z6 G?JwAoDE=y6m0hp!#i*m&@s*CycO!FyiEz=$aW zFU*jEm{#49j!jegwrlB&V%;44S2G6BrDthYTF)j6VAi|`B!DOPDS-cZCARhI^?BbZ z#~(P)CPGl!I{U^Jq4=gFH?->W^pq0o!cvF0dD9n5h_vt!gi(jXqTB?WydF*R$0?RB z0{iHqBtmTtYW?6d4Mux{mPYUrcKSW~O*^B0fG>MDs$hK&(fdD-K|DYp r=`do AXnVezRZFM8>fUdVg^HqI$pcYx0CaUF+zodeQlb(v=FOH} znzPl+Hj0@Q8>qGHhI(iVf;fBAB#qBpT`cIKWZ|RZjG_0>vpJH)M(08Xe zV&$zt%E}&D!3v2Vpe&tM(XrSs`#t|d9B%KWL(PKpnQU%;4{|~%&j>yq9jg_E{U-c& z&4debn`$Zak;o!MPCg`qQWq&wZIWrV>ck|L|I{Ga@|EmJ-xzYnsxwq$QAWwv6DWe) z#NTe>)?4kTgyWwP31!%LDGe;>nt=V<5^5D2bN-Cih#4nLcO<}3IOG{THYU8)X2K&h zVL96o0)sQr6Sx!IA|^`t4M@OoTU4+lLg3#%{`H;aJwuWEbBfGom7GuH8^Kqk{6*2b z$R{`@Zv?pUw?XC$`DFH%HnLUG6MRbU#xE_2Ckk>Am~&LaubZUKm+px`yT^p~avNyp zvY~xu6xxR&e4)(+ua`EznGaO$KQKn-Zb+cc6%H@JC}F6ULl^qUlB!PB3&BaWqu69J z*}(S~q&*Vf8f-9QF^8m_U~dh^mdD%{DzBkps?(GggN#^dW<|SyWRs?VyhS9$&ABBU zC@&$~c?~qZOqxLo-w6JYAMR7?(DkWR#IMv%r`n}x%|vjNNjdg1rlimFp*lxERU5~D z!qgI3g2Lm{G#jf$DJnNp4QZ8+3`%)46m!FzfsA`4{Fg=G? ia|E$=7y}GY3g3 *ylxd=+vXET352y(909-skw=No;mYGF8Q}&^v$&mHDZbL}QaaT$gLdaz z(2gOT;{wxc;k?uWDu!?>sJOy;odr}3;Z#sXg>$_TXVMfMt7VJnD*2VUGI)-~1o8>0 z2E$rZe?c-3msBl_nKDSFpo-a?yEJ)JNb4>W|Myrx#b9eoT)or+Dn72V*%e8zIC*Jk zrq^14#bH)&If~t*ln$-FL=jD##}ZKF
P_4ON3#xKBkCs333{wP{SAB!K)tz?pIrMTcS& z_e?Z<#a*8j^tEo5ida4})XUHKh~&ge9!2*E>cuQXkJ#P%)qGc)VIdS$T*Y#V1yl^h zqM(X8KHHM%uPNKh1KJq*+|)n2EvA&j+-b4AcnIP2wA~oR-u6MhU6>1ajZ4+N7ARm) zRY4V#fF3^54Hi%_B)}3^2P~lC %h8XKgGB+;K{Js2*Mr6zlk1;Q9~ zR8V~sSPKWXdpSe*TR`<0jFA}_4!j{tT)oi(Dn70rir}h0H|QM}u>D&q#`^VrBqGze zH%YMgzR!tCsUU&PiyBEB9-~sa`UMq+RSyk^=VKNqV+iDj(Y=Mk^LY!X80ua@#Wjr& zSwO{LeFasNmN~<)k5~Ym#IyaoGetKM*XFlFP$!wk@f=33q96cM17a<{E>?SwO`w z29~%Qw}6U|tEe$pDH7pK<))q)x^0gIbotGJMCEYJ!S=KqK#i36`WIzlblRYPNt%Ul zgMq%AEzrj>4L6{B3)4`vfQn%n6jWT((6oSxAqWbp0h@*wSO9%YO~c)SWd>jxEUEk& z3xx5h%ry;fwt$LZ8Z2@39t)`WxUw}3AF+TgziE)D9H?o?)!A8;SI}RAY;2sr6=`^~ z#seydA~_MI$S8+ZUKYHNoTKZlQVDAQ-9#cJMs-i8yY;$Adaa!Vu;{XI6oy1PCq-?) zLFA&xFUHo4Xb9d^vFI-V9$5n+l-MgL_gQN4^S)qnLg~#^Vhab{QgZ&rVzmN(UdIn{ zyvIK&TvUgL d9`2#yTnkRXoRg%1Sd$Q{lmtK&V+T)m5{aQqYb(k2gW z6vM#(yM+)W>3>B5zvj_#n%KTfa>KtFvj#Va`Y5Bglc$cWhGLn}LE4#kZ>4xIm0iMp z2^KYXb4G8}Dc6y$h;V~JqYZ1qylb9uNi&2QG+Ia935j1rzeLTDKwiin3(sJxiA(T| z8APzLb_zo4${R0JUR1@7)(~b3D6T)7@?K2R&gwX0$a3A~?A|R(i%>GGEEtD_w=I2w zM*Ffl2^^Q2Lhx`$Uk4>?qqUWKWpqDbu*jbDk$oP10k>lNZkaP?ZaPq7pq@+;r{{AB z9fte# rtNBU-P* z_i4v!QQ7T3P5jfu1H+KtPY7hDm}F{98?}G=H6! sk+QkWXx+V-|YEbI}H7^{LyAw^a?gpw}1djRW zHR1x_IlO@-Fx9=GE`$?5rYe@ZD27dSs-Gd+#7%~~aJ(JYAvm~G7By~A4UEcfiTdYs zK{XZHpbA?w5cPBp^&FJn!=LnYQYdMCQ;>sYI9207Nsos7oC<#ged3Y `xg@S1}x!jX5SKq2tuG1~ukaY$KX+^y*8h(crNm zJm+VOX))74!R;0^<#drp!CgSp=wHDpGDLm4rTa~s;co+3R}TwW3ZB$tq9~v`N8fO; z^+N;XXAcYH+ZL6+`v*f`zet9ZiKPcj`rbJ#WQD~(YEUz!KGmT1{;IY3w!*|_CWs=E zwOU0;B7u>O2M>m<&cTDGP_7NNnFGFLu;lwS>Q1b|GiM@5)Li25tRrgqoAyyW=-Wb? z6VHUt!!$z6e(%(S2Llso+Se$mx2L^m4*&XNhxe7jB{0EZVdJzgHX;s16dflA=!m>& z0`N!24j*d*C&(}ZSvbk%BcF)5F7mRs3=g;+@{jeVkMw)m(oxn<5H3^@PO{46j=ZZ~ zWx5+dTx*gLx{fZ7`#Y=f`N8r)5Zd~TKzPd1m>L(`gZx&;m>l;nwnTnd%#_nb9uM+6 zG>!f}NJWN-V^(_>^%AZ^6m=n&uT7^AXR0x5DS-NRA!BDP46tLZhBi52Sd-X s+jF;*^{`7$v>P8WtmGPltdXd3;Sn=tyL z+C3BdsoK5wSK~$yz8CWvLY>ulE}=fmCQ@#po(j^jGX kn&T%#+9vQpV%_ls;Jy2fX)R~HtPvm!KN{C4*Zw{Q zk7Knjnl0Wsvjbh_`zw*xo*0x2*E^#8s^KV-Ew@_DrPIahGITxnIL_r6ouz4F#^D2k zl_x{76Td-a@TbIKJ?^;aS}Ku!A~LZ;V(Bd>`7qoE@x;)_&yG*dzi};v5Mwn51J%yJ zKgnz07%qeI*9o|+-A*9*b-tr4y+haJm*Mt_8@e5&1MElMtiO>r#;(_Lh(GHZ }A_ zskuy(VXC> zJTt%;5Gzl z8h&M=_8n^cA{vzs8646IX=Ul!KGDEG)Z6#)ZOGgNiX@s#Uc3eQT)0yeSFnvc_2vw2 ziL5)f-n36Hl*P?YZCr3(>R_#m+bppECL?C@3deC=-+~;pDHqFVB(x#>t2m7_6|@qr zH|J;RCP;rJEjecq#xrc_R}IXVzH*8U&5FMH$Fyn}QOCkEs-sc=#~6thR#p`LE>T>p zRZM~kuzN76K1{f5ZhnF8Qc-SVGLu&Bsyza5z128xNI4A)wI9--;_i&l->VzVYNPBP z#o>{4>L*Crn#bQ88%=fkkM8@VM`{kAf!iAjJBZl`pI?NkeXNm-J)EV=MX6Z;W4q!@ z7@3oZ1 D2oJL3GW@kyvj7r(e6 z_DZ}e#R_`I??JeT@{vKa@i-ED(Tr0lW(?g!mSb*PkE)D&ETCd|3<@f)mw&YdR17a) zK^3h;VH{QBdYZpr0rK(SY2GIICPiuR88GIwWt`!QIfubDDv!^EDhY3~&VsrC3F@nM zCXvfuP>0Uax7-dw0_{kuWiHlu@ne)VUYMT<_t4aZ@6nS8G0s_sZwKV=@9b^P7iwY= z@Ov0Eya>p!$ZBceJ-&D6W4rWadcoo$#DNk+8wgkaDY1;jL%g8F+i#SW7;xWvcS@vQ z;CKs;ylBYi>`GIVK*s&^oq0+?@a?6z3{t!;0|`2sj1w}W;!4>fZO+Z&-g|Mb)vdOi zQl;6XGc0<+LH97zpEy>6^E6})gA+D%PDNX5N0!xyEJYq`z#CTm9R|?`x2}22`B!T7 z^#=w%z{Jso?qA|a74gKugTyE8g9n|tVw>&?2TvY6Sini9YNt@Z Fn)oMy+K=98DOqiTe zi)3nfYkYK=eq_?UCLhh{IL(eHSxmK14AQU&Vo*#tuxmqP$uX~WVUn6t8_~2jyZ_>1 z%x-6I?lPfb5!3cu#y1yZ>W9P$j75?YLse$sFlPKS+(yN>K?vvrgg4>Kt(2BDri7Mb z&o(IxH&z=-ZCP)&c;V_c#-cskU`%*qL)f638o)wOgR(a(sbdkx37iO$+|x{u)1!@# zBi$QRuGp(>_PlTgLi#P1)K4Fpa-6W#J#DZP4-#!oM#ox1#Y)gnW8goT= rxx4*8s2y#@Gi7psAYV}QO^=c?6|EYnyI#J(W zZkXc2;Xnm-pq;AJaUSh72BISoxY4P?_rhYORcy3r2?8fktt}#YO1dole`es}?!n?g zm?gnO&lS|OKxM!~gv!O{p|z5SL=^&4(;F=Y4qrW390t7fD(W~7FB$5b8`FEofTk5z z(zUD5Y5zrqRQ0p|we(xjz15~yz_@R+?IK`YqT4_i*FuX233{d M1_9$&+K1jcQ?Em@+e%)95srdJ2^smysnY(@dHp7s1 z`Y!aB&yhMLnHzo4EXL3dj(OU8nEQMe>Ihlt=$vi7^mE{bJx+hkP^ym->3Ie^&nDjw z Ovk5NvT&X4n8ORp!+V~p|x*q8xr>7CKja;qJ^ zU&WNeJ9_EXS8wQ@*|Y1U{k#yj$tdK17zP!3J1rS7zMuEj8watUCv2o%GE>1j+Rhv8 zy`6_lvU1jT-i_UQced)d4b*&h{a~S7gg>SrH{7lJ2PD$UBlpA8k2NPsZREY&KnJ)t zx{>$i$7mzZ-zoD;D-LrP@3##!m`li9yLfNO=s3+%C)q^BZow`dL9Aos>AQHWdGUAg z-oF^LWAEazCT+Wm_o>C0`sqD(@yy*z*1S1e(f_m R1G41K)>K&+)PidBP_CYCJ>52HTJu(Xm#sv293dObgo# zb{ldmV 2imDX9p}+b{qH9l(cS(( zGt5$Zuy_b|bLR5%5TSChdC1soG!SgG7&v_SU~w4m(o3l0JiL@^8}fGtG_A0bu3dso z^K3)*(9&;2_c^yAf6KOuK=~2f2Ew=&T0Gc>H2pwx4QbJFunlQOn4%1twGAn#-*X$1 z-jdspU!-4R8&do_F1I1inZYG)NDw((ExWDEt;bWNXAHw%4s*NlRzI>B9&t=wCs~+v zXQ$j&aHLRIb!h3sZYnC+(!Dr$Is2LooEp`&PNLN<)`f@BugO52*<`5E?-Q{XZ{zVh z@!`DJ9A_JkCLaAgh3IDEmN+GStdB=FCNtiRA2D2SbnN#jT-r#RLCTTMY*KPIBv+t& zEQGillG`kxVr)n%sJI)FkGFt|u_39T8t8`PlPo|^TH%I0gT>g8yg=|x+5(fYAt{l{ zF`}_O#9%{mNhVZDc#CxwY)B?(wc5`})A`CHx*<8n*Z0}mmYbsX!i)+YTy*Afl-*4= zX!)zx+#zVlE-Tcrzy(A06;v@jd6%ilm)>Pk=!F(gG4!M*u3l~d6(3jGti3|`J%*|K zEeo)cWI9zBzI7E=Olwd^S{H_vK;+KOkYvcE!-75eo@ysH&cjej1KN|{svXk_(_a!N zYyS-N@j~TwOb1l&y`PlWMbdtINSVt0_HP<~B;1nz_uF4|rQ0c0=t?-8Ow>yVQInP) z%v2A%4M%!lxHp8H^zr!Zkrmt{H|63*^*w6vIPE#NRGqGtM*HbAvXg$Cz+}kSUkymc zVteF|0e@fZi+|Wa0k|x>FTP8i!4OL`Vv|NwvqZ}|0w&S?5urEZJA)>lHvlrD3uzu! zlHQBbr1m-LIJ}<~oBFZY&-&(ICmclizD^yBC|{skXnE83e%6J?DlIr)cZ)a!e`nXl zsp7J!NE8!1uxtr#w8Z}oEW|IGjV$ntU}&Vx;EbOQ7E!_e*Q4kdcoD15*!~warbQ11 zyZ?3Kmh_P wiTl+3uijssn#sWi z(`9uQ^F8|9UKe{||0$Txg04Y0m;^j$IQSva#gO*G_6?Sy1I>0Vb(}}D-9Zd+ql&F+ z7Y#S(wwtA@xYJhLft%_q;o2~A*vT5wf67g`T8(DMagX9|Uf&L?atbSGEOQ}L$Usa~ zr+6pp>vE#-reBm(rT)Vg<@8uOAIg9yg+s?`H=+8v }ut(l5yAqBH&lIi^;s zm1#0@EGZ`<=}sKwKbfS|R^;k|@sgp8%)w0GD3>z2gG~^HnLrtlOfI%EGPX_)hBsOa z9KHc?rrGlpUe8J^2$a(6sN+0JX@|aJYkySI{W7^@QSA`aL=fgM<+kTP8PJ@=Zb5Aq zI%Vv*2B0yVgFnI;TBf2`>QP%7A$y=HF6ah}d?KS~4vXYLR~$rJv_-C^%R*Z&9rAWT zD-M2QI)p@MAUeciBEkN)xh~ADWrO`~GolmK6 Fw=_NVkjsBFyFV2)tCm0E`VV^8^ zF6*{C%~{{!922v{ITp2(fO^4O)t-X+X5uEk06S%0n^7D1rRGp$9kF9SE=uR9p9t~H zwf8vJG;j?=TkX<2mk1wt9EJEgXp3$3=t)YW7W*o=YHJUQeK+gq?#g1l?e5ZB2xGPA zwGbBsH=PK)@vk{i++-;GG2)vvEOPf;&(G*AO*1m~5(rkFevIwt1qJILABWXjI6m?e zOpXjyJYE(_I#{iwMKg_z;rLGtLSGS|uP^T@v>B^yAXT*y|0EYYkD+%dy)V}H3Fxg| zP9XRjrqS${4bf?bS8&lrV`?|sOwImAm)=v0CXzh=*eVsx9%He3*sCO9!3)uRhNT_d zCV2~g8>p}HQP0UpanU^-;Mh)Uk22UtETCfSv?{2$+VMpeP%*Tlf+|YET)C>RvH&@0 zHzK?g$d{3_54SMP%aG8*zHod(Xr227zoe)$KI5f0XNe2qm@W)5QHlbpnDDJ>6lY!G zVrUtQXNs+$cXYE9LHWp#!uMH_iIJA`9tl5J3O{ZE6+;RYR9q?if(29zDO6AmR0_Xg z0rIhw!haF`G5{%*$Q-T|o|56+Yr%`lrK;p>1l^LV`>sDR-Mt IRFM zGDxMMiW!_933dl8pklDKC9V!xK*h&ZHoGPy*v(sj#bQ=|f?YqXnq~|b?u?~+y59m} z3_2>PK8m!&a9yLNmuQuw7GRf{I_HfRP<;kt6ce3T %3)ucG6=U8B?XI|rqtKo$wmNrqQR=qsU)#0}X+U8_rg3kQVDT3eXUbS) zX6R9KQ{1IlL0{`;wbT%gjHSlsEwIOs&Cj5F3y0<*3#b^HUqQvSl0UG3iXjCGs;EP= zEt&qBvc2|DH%2};)y;~ne1A5Hx%&?YoE|-85QWd$_gR9ufY-QG-EM&b22~YQT;Jzx z3#b?pV2P`XETH1!itYP6(*i6O7Z2L^k?2pe9(?`E<@q}-5XPXR(qvrUr)B{a!}qb& z`bRCG;^WHB_j$1eZ25g3iO4kWO%g1=@3TE^M>Vi}QA0`hDWf)`+bGTJm!#VhZZMpm z*IS^EA)K#4_ZH62+bp1BsD1?%S7p4<0xE_WD5#<|T|t}aJ~ew72Jx;z;7?iroy5QW zyEhVGYaiz0f@KB}NwlQ$*DVmnr!v 2 11)hO1(Z#NrGyE%)~o0a)?wS+dhKd3W5;W%`hK-MaDx-j0Yb_c_@ol5h_Xs79v ztJBlC9u-#$$^LQgVTvQZR~(QE{$ec3ixKU%26vKn;%#NS*5JT-}|;pnw+nX~og< zJa%FU5?o &X_H zE6Hdp!3s(}AJ6Gv>ioq;#@r$5X@@u&XPm+}AR58caDzdC>kKH&T+%e(B!dFMp@M6u zW05o)C^>SGQ_pbjOt~|0taeUHOYFq&SsnAJCtW}*FH6Q9wk=(}NgLGI`Oeyfl#?6I zU5n;S%?uV>!9mUvItFr*4{}mtU=&OmrJonL%EX#^&4L(6 ;%EvA9o>EOIRMD2)8*LC#FvOOMQX@Sgi4$K-l{wS$ad3V#|T z$?7WR$8e5u9%Pe5A?|FF5|OiYKy=Z+e2!5{lqsU(iMSQIFA??n%c}ZgVgTQbG9`w? zglfitoW4WOI9X1qF>Tbr%IU{4MzWY+Ag3P@^W$_8mebnH@p=Czt7?Bu)97DL!^n@y zX(sMd<+S%#LQYed)R5Dxu5!ugAFxT1TTY82vC0{fCm@RT{pD(@b6}UVd$+T N)N?rnp;e$%slM!Yi&5r0(RJH-@JW7??wi+Jcn zVc6RU9vhr>;z{XaawJu;MIh{((J}KdGgVzGH)o60#sXK^x6w5E7j{L4h!<0P)+l-j zBQ1Kka(r0WQUIj}CL@q~D@bUxuPNC{J~D`V@vy*s>Y@_&(t!}S9V2e!2
JlrA+GDr?+acIZDB-wu^2i6vx)BKZT-B55P#v|VA1RMJ7@T}Rm@ zM6OU wFbWqkluB z$PiKQy$#XZhJ`H!P~V0qmKJ2#&seLWO+GNJN&M-elKg`MA$d>p^toYSE368l<|$JX zq?)JRUu}viRx_O}vx5k4dZ+73K*`EEy&llN5k|xA-nQf(OxS+Fr$er)K;Ol9Oh-Ds zD$tM78NVu!8RC*vfzoiL76L(Spetxq6D}}l5?2Q%cVrk*Lu;6yo8gySKFB;9(Ye>c zQ$ebUGe&6#Vi|l(t1F6Vkt-p$+1m3B>`8U1B|p$iYhc=fl3Qfhd?Mc?)Eh2qFCD_J zlfT;(3rKt6bQVJl!VL!M&)S~u7jO)$!du{toPmxtBg9G#Qe%E^#LNH@s!KjHX1FI~ zEQ=Wi%i$-B8FISF 9#uaC^xe`@r{XUIkDnQ z!Zf^>9@CN`=FA9gVS)ES$Nqf^TE}W%G+VsQ3B5>fDPDx;i9rz>jYfVQni2h}>2Uo< zhE8T@>AxYPvo!6@NVXzad2$s?X$?xzEW}|wKKbfe6zQr(>$WT-t_yqD^uSQle-fWx z@6t2&^;r_oS$h|O;Fq3>mR8!K%QrQ<9n^T5xIz49f4kEPl^%?p$mmgo Wa$>@bm2&>lK3^5 s?igl3K&sHdivCDo_N}^j1KeU)XpIx#E6VK&Xd2+f>o~B0gQANOzkq=$V zMFd}-WkhsoWNYALi|Mk7!0`!rR>M?tv2k7s7R!^MDl=0lM>WxB5Gkt{0)t+(T9-#A zLEQ;by9jS6p$T$WL;6`}h5Wi94p4MyIjph#tq0)wVLgp?w7#36wHu|at1}HOq`QqO z3imtLT&{ML@uE&j^<(*tb4`bOpsj#%w}r(uEtKocdCCVxA}g{>XN&W=9mJWfqF-cu zj!`BmvOnGOF7*YHLyHZW4T_sY+_t|wmwb1e!f06Sr&-8ClISa1`)QT6mlJ7)Emld4 zPccT~#lTeWLB&mzal~4qhgisk#h5PUtyTvM$tCYlbn_+x_tACu=VtmP>WqqCoT8gz zEg>=+eRRNUkBMx?q9- JV=|&s;??CZhF-krI+Ni5Bk# l}D2_i(c*wq3Y J`ws>5T6AVtrg}*5OPal5 z8~~Td 0B{6sZ0fFIF9sN1UYh0>UEl|Lqs)CB^`y8==iXj1(xO$NVRD4{q zeV_X+z+!RnpnV^S{xs{s*RNcjf13ru7<5#cjO+Wn&jKoj?_;U;KW+gPA6It1&lfCU z%kTS0M5b|Xl3?+DpA)k;KB7hv=XGcYR_~0+ToC=x*jV~E3zRVg^4sX%!r}R;1yl@m zub|?piFKzA)$LbMMQLfCGwERr;*~}pX908)&-U-q ->md$iFi(l&pIXhMJLN~82UmZcd=rjS{hE$YDE0)$0L%hDW+rD=XHmU o6Nb+qmtcI!@Y z3R(Qc5)~U##Y0Ov*UPDP+HM_{hmh0h_cHEGb&>Yj#DI-v2aoUURxw~n+*~b6g^q@b zn$lrR9A-IOZKMD2DNJeF|C`Ry@Ko-#kme*q7EKd9-gBc=?&^z-=|cjJNdeB+8Bmx> zb!j`I8AJ#QaK4&47HO)1?33sCm@dHi-oaukINtm&bPVK(LoTu7&D0p^N|Q$YSN$>) zYs5g}i6N4IlQEJ7Hw1^9KQ89S=_2f&atm;Nilz}d+$?OAD8LyqPQkgGF!G~^n=^5r zdbqjwSA7@Y%<3v;-g_r~i)4Cn+USqiBvFd?Z2y4o+eH`0VFAt+r=?2_hY8h;136uS zj#K578W%@SPtF+0Vt#>~ZWHt4bP<-*+SkAki~^je&@}p&(=hU*a+- &KzNEFqQ=EGME{yG zCdZ1z4ADP}nR2?wV~8H6Y4mT16d5Awy>|i5pAHLK3ZT9XQLMzK;dI1W4c}wKrT zL$4Ug*P`R}O`)U+Qy!9UqG{wNc~A3n_OP%ORs~V>l&J|)%~S8MdKBQy>>$FM_60ci z5=O)4D$|Ne8eDrBpANYSa6TR5F_}5N0O$4Sj9-A$3~@0FaJ~{tOnKCGh1{JniK_!1 zeHY*~KQ{xGxqOhnW*ds!KFB39^CGkOrg|mVAM(#f>x7MXZB3oLVQ{y8XmImkJ~!8r z6sST);9#@_+om`e)R^DFFmoM*HcF_e`D+ R6A4OYzRDJg zpk$`GuV^aYA(hO$2s`b#jK^&iWJR?0*sh?2rrtF7tEtSool3Ke8k)Ow4bA8)6Vd(> zi>hQ!wErTO7sk>FV#ANAY3*^YX`sqqdsm>=qje!R#XvU{e7xC^v4{DJaI9uu72=`z zaNe7a)50P#qJ%1qoE@oMu`xm~O|ICH_OutrYSE;<)v8OsE1`t_rv?>&7DsEZ;w79S z6ORgg$v#B8{`7Q%o@OB#DVPc>ZgSo!7Emz~&J SS~er=m1xyTDfMR6$=w!! zCwXOIhax#33yM!gVGS_q%ri^z`KlBOy~_mt%G_5~Y7A*gB09lTa7yEXa&Y z&}_9wNGx?hpBT_zMQfhSIFSP VsGI{RVpad!+M(y8%7q=6t2%`7+*xND9 zIJRp+ITk^g#L(pB67Oq-4Z8%q*WIMdy%XFzpwuIZCsOX6Q_@p%P{a`Fbyd1byZT(0 z?)+|d#a-A_^A7&oEa8@K6haK;<&CzxQ@iyFN>)vzvd={%^U<3~;H$PM>#kcDf9sOa z&f#Lc8>^RioWp9^ji~{t6h(Z$ZsKFkrmGCOf`Jc2A&yCg+z|r`)1T&OD@BzcL#{&| ziwwCyIH8x*Gvwa9+^Bc&T_c6g8KbNI $Zl=7o24r9VVxt@ zPDNZo=BKXuHAWM{6tWA`?OCNB8r km`R=fbL0BEEb)yQ zV_9%Quo3@TVuqY9!d?S6JMMRA8lf-+8KGKwc3c?!(J)0O_EWsSTbv% zm;=DcoqG|RU`qOfU;#;g&S1fvwonAY0#n7B;$wlKpqQ@dUPRSgR!P}+V^-cO86-$A zrAu$gnzCP~U!s(*_{FIyD |@TvM{(WWlbDb@0G_#z$?m?q43tSNO)_tk{Z(~^Pd_f@Z9)}ePx$I zow1sIA>9N7*LD#Idfgqn1ZGow;^F^+kG=)V;$3Dn_(ZLB)-B)-0f6=t>1u zjEb;rJ{7Y=o$(_ fd%OplKEYMX|{b_az^?RAdPGc$y88rC3AxXR1C>f zP(>wkfF*SuiwWeD(>`_uvun_w3XtJoaY=QN#Y`EbQc%SVPLGnh&$NJw!Pb_zy3qnE zKCZGoyM&Uu?fD#jJxaD<{#PW(@dBlgsl*EfB__qf$@YN Gt`p0->{fc5_9(-5Ex!b-G7n1#--{{EKtCps)CB^`>fqLRF~coS0`IQ z#m5!f_c_M`EEX3J+V_#@PqQ9;{mSL}y%q>#&{1hJuJ3b$1yl^*$5QJbuz-q>D?8uk zkOge{eIJR)H116jEWYovJ#Bwg2T$X%Rl1(p#SP4j(!732Mp(lQMx6DREzrjh&U?_k zh4b?Y3#b^*kAjM;GTvYT6+;XZR8i;0JaX2 wH+y~$Z#_w9mZ(qeXe z-s4jFZ!8eTr!v kCuFir(1U+~A zW8 {$|_*ZA=>h3J=NN !%$fx4-3% z&K4WR8Mo}TtFzU5u~naUP>WY~;D0%eBLt;-x2*F2 ~ ;K$ zuvf}GH&CK!gw72J( 64s9G*3FX;$AcGtW6Ha0Q!2 zN*$l=mnL|o=;Ammv-_LG5rZ>8f#5zMXPhj!)R;EvU 86$C|PEj-v+_#GPak>Z# zZtXBWXO!9fLz+haf*VGDRB$tKpDMV$zv{cpZdO;h y}uexncb{$bJ?MTa4w|GG+%A)?-Um)X64SlChk^=*hYMoxd48;Y@3!}s`|VNK!-3tM4T5H(MknjqCY_5P|yncd6|BD`r|X7}@i(eSa$zRK)=kxz$QWp+P{@tD3= zdYRn^(HXzYt{L-Umf1a*Tyt>{cDdZ8F^Q`qm3^1lH9t3F&$)b%0vpk}eUPaj6C< {9I-Koch(Wl)P}pnFO7{ym23FxM z@J3dnW6cP$kTo^t_eRVF38A_YYVtZ6V_D2Fh<%+VX2|Ixj~B9&rqRC_5=MX20%T%8 z)dKYX>iT$1-aK4x@M+fQxm3goHWgD;gas65_>u9a+b))ZIy|(`#;Y%(CK43wJ op9idhdC9lW#1g8jDlxbXry1ZtJ3GuTI8}W(iEFUJ^^U zBuvj6FE>lrYNQQ(Y%Hb>?e{9|=00e~{tNqVPX$rw__0_qiq(1&h86Ii8lv@lzJknC ztM|F_;k*ZqY3Y)5^a>vb^^R&^Sz%VJ3-6YWvCpjjdK?A5Y^2!}Mwa7Cgi2!{gnYdP zRE(T11=aLQ1Cx;owF0jOcfQR6s$S8`d}SMI 6@L#`!`(7c@G z_~&K#2eOxz@fEvI{h-$WxXv8KRYegjnd=eC|EQo5|L3QEz{$p~=%__I+iW=Q(IVx8 ziF__+XYojTr^w0LS$uA{fv{Xq3sH z&?pks_Bc^rCGAbB>W5r63Kv{ooTLBl7li?%-xD1A#p`hO#r~uhjFN$6x9)b_!jucm z=@we zVW8nM@!%HqcXXZz^EBGP?W{~gj)10Vbr~W=#i_cxe}8K6##@Yz_O@o)V8A}#2G61@ zxdJVY$Zji{Mv5CC5e%Zw)w?s*Mxoq1(x^9! &&jrOfr>+? ziEilHlc-~V!TyWS?6^lEhv$^)C^db~rQ^=UWw%`_w5v0PHcUQv-G9Y7=h90L=>3r~ z=@uw;Z8)(foDCK2`!uG_X8Y- Vz1@4o84B)jn+6F zP?^f};}h<+w98YbG6BD}NdiGH3}TUi*#4anA&9jaY<#KB QUS+NcFRj?)jqhdbV_c3@}6O|kbLmo4+bhtVUptK^6J1!=(b zLqql5!dHEq8l5+ydxSb-l`?u1hn=#3iV;XuP;n2^&RIaka8MLfQCj+@OL?uDsAK7Q zwqmbqM6b`xFv|-qCXp0o3Gex3#~lMeGA_o-E`j%a$wpj)z0zW?41y`BV$9v61m6F$ zfQrG~mbiMS1yp=oWk<;qO5pvu1z0S09dsEOiT<>>8soITrIPxR1;Q9~R8VnG`#)>} z72~wOC9WQ^fQpZ+=xP7{O5m+HCw*z1wi?cV)?XqrjeC;>E4D}uYHD8x^uqW@y_zdz z?oT+r7zuf4%OwId{vT#QDKLXkgQ;?YsDJ&Ebb!JQh7)v}1+E#Ad@{PXaDvXWfQn%! z6jWTB`cw<37&4=viqiA~8FJ?EiKcxoKWU}t+H{hxwU}g*aP;paDJZNxq^nYRY`;c> z6oIAt&50H)Cd%M31y#1yAJJ4bL7TMzEgua6Ko*+}FR+;FpvjOV2QRaLD<2JxksSPv z#Y6{9fMA_u7^gq704*O40zd{X2mYplQbz|&ng58zT=`^(E!cWM_4kVc71t1d%>pWh zAx<+WJr=j$vw(_EK`yR-VgVH&S3S&}c4SSKUpvP4^B=3?eY(Y5htC|lEui8vM@;GT z5TvJBKs9_^U1I?iA6MCeln^EQc?+;uLNw?ok<_kf>umnolB*E!v_Kexj%pRhjS~H$ z1yqbEk>!f_B^FTeab*`JdW{8a`J+S Vlht!krY&1M`pz?zJtqPXiHpev4Dz?E4Cx!Sb)W1)j>Nl z68&kWfUhpOJio^RVGKGd#l&@FuC{=R;mBAj@!Kq*;^WHBkttiimfw+)h)m<&B*Ef4 zGGlN_`bu&SEL_wMj_5A*E7GkA9vgnm-4>{12 pWh8BkDh)yHpIK*bOV z1yz)uC*7!6LWhKysXg&SX$Awl)nZafyxzaR69>pTa{T*}y|{$@pv9aSgj7&*eV +?ym=eBb9r?YQ7{SkL2n{T$QN4p2Puv&J7vzayQb z&~w8`UTJ}JhDbjX-CKA`w^%^MFc=CduA-T;fQlhJ3aY4=bZI`0(QMEwV6<8dV{XfJ zET)_!GpRmQ%ouGjkF_pXdr)&Jtk)wI=w6E%GgwbSmF*S8%VfOL0xA|A4&%&)AX2B; znsGY|o`7NC$RF42s1hH>O?G>W#WeZI=gR$iEudn^eP1jQUs@Py{G%2i=HrhzKm%u% z9{DI=vY7MmndM;%sQApnU4cDf0oCwvwc@;?dhUG*)(Y~sOf9s<0xXs=#f;usW%L9r z1DB&77Vm6}>GF9a+v3HwiJ{&uvH+1qk(l|512k~5^iXeCTg;hH7OpM4%>t_7tGBWR zRKv$r%K|DsuCfIyAxr2U3$R$i6jN^!h@1kHwnXQzM!7uyY72xh=&06x+yK*?ETCcp zm@L=G@3w%7k1M+X(}yi!%O7Bph)m<&B*Eebn0EDD|3R<6;*q1RiGAqz<$5jU9m7_C z*#gT98U6=!ZxK=YmIYJ{3!$LmYL*{aK*f+21ywYnG@yK ;eo=Zl(MH3?`8^A)GGz9*(Y=L>^DYah7#2Z6#nmJqvVe*q9SW+bi?b=p z4Vt>Ww!sp@fuFUQK@yLr`Z+P `R-=?rpk8t3_7Sm<0k%B7QgvU3)9 i#r1$|7Em!fU`rc+)B-9#uIxPE7hAxV-vgG2 zOyk}p!Qy+sJJQRk2i{K9F mIcBXbW~c2>%?4W0TsiEvDDyu zEuiA#%Fc PX9`u6pUW=H+VDTg1E3PYv&; zVu4eJ#Fo*$g?Dq<0xE_*P*8F8$S+$!#gGjJRn)sVvk#Wgl vF(pPrk2g8M5{IIKr}?=2QnW^kB-D%-Xv6 u`2ws8`CLu*U5jZlG+7!;^ay4C*a9j(OK@>DI>~pp`MBz#DTD`L z=4WrWfGZ!Xu9Q$%XE3I*MUUNpaf^xa*&?=N?E%%EMS+UTtXEq=#b?$Su6hXeZ5B}R zDagfD*#as)uCfI?VUMC^0TxTHW6oI4Jqjt-X$vI&Vu4FX&jMi#Ix4rEyS#t31yqdX zz2y?-O%_n`ab>r>f42o}`Iq++k!jqUBv}0A{RJ6!vPM%hoJ$ JKK3=SL}Q)MJ^y`Fy_f&R`=2Rkn?fuQE@!fQm(g*djmQDl-lFJzV4qEvCswK39hK zT0q5+;WS+JaFK7YfNJ=-I$!}6A6MDpli(sBvH*)EKZACWB~zq18GLKX<@py`AdEpr zWw*F4^8FT2F Ioxo4DjwfacALMlUDKQ&z3zpy|ZLoh#p?k!y0Pg_96Q2PohuDbZL z1yl?XP*6o(+<|1Mf6oH+Bo6N1v(4vPeM|BUmqN=g;QO@<3Mr_#TiBZ|pki>dC9Y1l zfQpYRwiC140xTA%4%&&4=ua~Pd|k=q`Kv4t#-O9pN?a%ARtu;YPK>1nFIhmv$CaHE zbEgGt`JEVv$TaRv5-h$Gv%A!7cbc<>PIcC8b~`BHewlc1i~76Y-1Lo+eoX%+)@t}U zziNS9hU~r=-COuMzhMCt!!jtSxEkg6ETCdYiGnKX=WI=63Qgl);k*sz*Jd2|y%rNn zV*UQTpC~xid5`asjKwA4-&o9;K|%!;*Ae=X1yl@nx5U-M7EtkV#dd@qu>gz3w1akp zB>K}#3169Vd4AJ{Lv{X@+TuDwkF$V^;Rso(_;CxU7(B0_vU7y?SiqLw5t1OMac`1f z@g1SLPOI2xPd8h$#ZI-^fFmR__%18f>&2 dU} zCG?R^A0BIe*peFWv6wQS8Zm#k2akMYQJ~7^ksZlqg=~(=HGgjbEQ@Pm$r0zyb?e>P z>O{+JH@mHpJCOnEz!|E?CjQqgurUCJ>T&zi|6LTQxHfS4MMHJW`%;CcCi4!S!h13q zeX|9)`51k?KSo!;=4Ev*`OdPy2g8L))95`iLoT#{iZ6g%T Jha)Sj} zES8S>UOCSNrZGhitz5F0C!Z-|X1)hhcP 3#j<48pBl&v3`jKRD23@arGJt zsQ9>Ii}jl=z&Z}ZIxWb;j}dU`_?H$4W6)8p#^d3op@pd>{dOI?|?IeaT&U|2-uxy0Tn~l zE2y|CVy6XE47OKLMFVyNN%FeL0`w%VO^vX{R_OVXyv~<=!==#G7Sm) ~ ziowm6xGGyf#m5!facNnA#p2XKuSX>M(^NlSS8{pYvp^Vwj!G+W9hX;IK*exeEH(I> zETH1!%Fc0lw*_qZ9T$nnH116jEWYD%Udx@U7fWuT*(j7M#m0=Qw>LRwGPlHgF`b*F z7YtwL(-s(J$nPi6y@jvyWecbn) 4$A`IB?OhbN;Fy4h0)8r$cE5my&pkl~y z8m@YT@ounyYWTQ1U;z~$SJ~o|5S>3{0TxSsVoEG$bY3z=nm@s}rd*zXkp;pSbX0bW z>kZ#;0Tsg=wzTnYw1A3_D?4xa9Tu?V_l6}R)3`TDu=w8a*>m;oOtn!cH;**x&0@LG zZPi&}y%Q2TFg@YKHw;(!V;1OT2=9l{y@f0Mc?+l*ra?i)RVfcyK*bOf1y$4)9!S{l z5ev|hxIEPd9 *IXQ0xAYWTjJ__7EtkV#rAQ2VgVM5RR`_kNc5*!3BJ1I^886p8LD5e z6cg9SIm-enhL2;Z#4ogfiox>=Dmx!%uLW%ReH;mL8uum%mW7WaJ)3gjNVQYh _N~&h&BawU|T_fA{a>1b|rkIlnB~h)b~7TFjL}Fa;IY&v}alR1D^}#MOH( zpyK0-?dN>d0xTB04%*L==ufj0eAUV2`G2xN7=w;VNpbz0?^-~`@N+B``j0K3;^WHB z&l!Cx-(St|=SW1Rac`1f_4IRcb#~TDU}5EQ{Il`w7(Qx~^lUp?uU*=mij6ah)?)1^ z%a$xTurOBp=MlX75dLv%iPLx(P2MVbLUN%-dl40<_D%Ze88phb=+}8f6Z-ST3$^d) zrfzL3!S{s~_-7ma3PB}7Uq>A{)buj^19#|q_;%L|7VZXE-vW3T=-Ud)H{*p+i}!Qd zh~F?LN_jZdwo`PbiZf1g+G&bs#k$jWJDqA{rtNep#g0>IHaacD#)?i$ooGI%?M%6q z;^AtuHKE-H=^5TUkp3UM=QqP67!Kz77JQsUAcf{P0YL)I-UE}B=Bzt;s9Zf-cUzMa z^=7G9pKMo(EqC&8wbkhs>u%$4dvb2R+$_zwjosbbuDRmc;?EtOtXHS-v{Pv|E}VG6 z`IGHx$K5?wEFCH$nQ&5az@$dq#N7NIe2?TpAefMzc7|3FXhHJhGD-Q}#^gcyj03P-ZQD=2+tFLpJsv_%yMT+!&vQ{l$KglB7S)e1a5SkF^TYE-LGbIV3)Id zw{s0h)M_5Cmfi9= A5@=~La2 zqsH`^LL+{xcD@NWG>8CCzaXVdKQyRvaIjRF1R# #y?( `?B+tIZnG>sw#zqd9;AP8$vqF-bZlyJDd!BS+1psx0;QG6iPy(H1n{U(K8 zIxK7{fchu0wha*?`;QGG|JJa;eoZbS*M1eBi*;vzM1BKJBR7%TF(Mx@iTv(iVJj^B zOLv)rX3D-$7b~3y@44UMe&sHX&NbLAYc4TQQ2KybHchw{!q0p*o86S;pY5xq+e8=r zo3!68yK`=%+{W%^$gIgLhi+}4g4=#kXG=cN(s$s%cbd}fX!vgqJ zbj % zLZ!&&u)wV^Dsk_$A?^dqmMmRD|EsZe^sfvHZCon%tD|2vEPxjlmCnCuLuWpD-!Uv~ zamgEO8ybQfJT^4-2Zsgr`xlkSe=!gu_gsE{VOZEwM2;$zo&Y_xxBz)edsMjm{*dA6 z+Yt@ey&ox9_Ov1S&p!h`7SA1BLDR_Xj`n1_9mB$wtrVPdya9C4kO30w^k|rhu$Q__ zPYqM`{^~hKm}>Cx5yKv3fs-pf^^fdzfA09y0qlcx+){YYh0>N|K_{o!C_A^bx-M ?j)VILnn&ES(`nLfi%M6^h%2pD LFnD>wxdr g!Se zYxIw#k~$3IbgMZl_Fi;b+nKJqb(zQ@cV%RH0S%z$PRT$SHgrV4XByGqvB5K6%iwK} zVNe7Qtmu~o&!preP-Ch@^{rro PIZAAQBn}Zx=+j!?g@@2*WlQB9MitTwcMK*m^IwSI`N01?`Yq zAaf?JFV4*&(QiLe{>GiC+Q2<`BBvtu{D555hPegVwUiL34Jk4zQhW*FwUtByp E9e5=*+*Pc{C_6<;^Q~9goeAd}Y542K z4pKgyQn4+T*GNv38LN)yPP-X6=iaKihm(8>r`l<|_34SxeOS!zac*eT=hYaY6iDf& zDAYNJ+ eQ$Q<_5%0B(%dx$#VpH9nH`JJRHbo*UdaHCPoB_#4j=3OU8!pvJ}a zH;!bCnahH9#7sF| )oG;Q7PCmLht@N9cnMFBvjKeLD&LrJL;=7P!}< X?@f3tP!Lrq&an*BoyEy=lk*B_?DL_EOi&sWG{pU)_EN;x~&F zXnF9S*CN#N;61N<>;+p4pCt>axx#n**`8|N@SWF@86brz7yD;!L0!obisSK;OlA>4 z3+0vICv}Uc7j59F&a+}yTNA-CUE!2>3=(~Iup%17wEh+yr)Hv1W2%hy?a2h2Wriai zJT_+fjf^pKtpom5%#_nbo|x9RXd3-{G>Qxnf3^3y-ldnOQ;0Lw*s4hZ)Hjj)%S72c zEO0lV qhVb`#*6&CvFURkEhr`qM-Up=dzOq4#=t)VcohR$WZKFL-X zxvked)tLsFEp-W5$ZUy?CAy6)mLNH N}T(>pXY~%1Q zUhK}5iygN;iajD_#b!~?BI`Wv1`{;Xghd+-0^K@THV$mp&k3PV*^i;d#kO6wj4^X* z;~6niP8WG>SDmKOzj{+-VB4-24hvffp#E(a375&x2`BqrF)VOjwy4BiSRCTMWmwqa z61SgF{htmC*!L_dY2QB(()M&qJ~J$Ar6`h~0DX1H042sR2-sBnlIkb*{_6ISpEOw0 zZW!e(KyrCa`+ygoC!W`9x_t#gK8I1c3`I>s9uqlBvD97l8WLcl6}{XB?!0mxy6}q9 zWOU96a&0>m$30psq1YFt(T=v HOgT>PouY~n`? zRm7-(it9hEHV{;p6^X(Qe&ZFlJnE l5 zpuNBPMmYMf^xl6{eQ)UPEX?Gx=quPPpVy*$D6?8cPHH&+Rs=x8<;z40?p}KD0R9)V z^pxjHkq+GxjC7~vqLQt7inQ1sh2=$lZ6oWz%WBn2#D40h1|7V?3R7S|?-g`N33pKA zV%yI*W{k-(eu`ZJ`}td9rkpPF*w5dgY4mSD6&cv}^M4NuTMD4Q?Pq_PB_AIaxF20q z;(lUri2Jo+VT()Le(M)~e^>y2cTvgv?~6m;HP1-bt{gQL({ya|_E}@@ $F?o&dybeZ3Ot+onouA8?&HWKxoSV^K?*t zT|JsGwj1OjTnbJ|Y{b$w=)xTt;vX&6+oG_Qh+SaM0cUt6CNmDqo}7wy)B0q*XK>}` z1}m^ZMC0$!aq5l$HKs~z--}(|j=(oF#?0mCe_hO!(?uS)`P(#&{@rFphN!9Qd7NU| z-gF9arW#unDS-MWa(@wxEyDtLBRXEZHPMMQjo}mb++kshOWc0eM0 ?2{Ljv= Jess6}?vM<{_GWxeqXu5e(zs87yu5tM+P_ zQbksA&*I7QiZK(l33o4YZru44+u-JPc)jOT%c1lWxm6YTwI(YxkWzvTD&x+$Yc8iE zFxaC)X*QINtDrCou3l_7@SBmVo8j**tCmg2jvg39d| $iVjCJ~S+BDS-MWa=+UapBWawpI%h*es*!l z`^{lti%Z^qe7OG_7O+2DRMP% R6 zC3{eSw>azQ`){eb-~p#PJJ)P=&b`Cg Nog9D-{2Q2?`pO2)cYaH-zxmi^Mh|Bt;d0hgny63#+M@*o637LiCL zNb&;71LB?$7z7st10rf9hP;07Ro?4PzwSqOzbuLf&WM1mfILM69Ct>Y(Q$W19e2ld z9Cd#8?MEDSP)2bZ$L&Ao-dlC+)~#Dr=Tueag@5=yl1^9kz2~0&oO{l_a!M>&miITF zcdk5jxZV=ETr91EXTkA=Fj06ZGW3^;o<69Qnrsb;TI%?#@+M^ozzCcmIPOFFbug9( z=~bw2hUH6GgVT}~ ~G$9IWFbUB)*M#Gk;p#3Rgn@=;r?yro&VA8>QY7pZK `8HHL_9$+a9OjA`w2!1FoqcFiUlN4*J!d6rf#2cMb^?)-; zk^QT`Ft-#i=*q8W4JJyPi;)-*ZisN4KSkCWR(j&&Vu<{<>ZV?&*6M~9C2Ffg3(>{u z{GEYM;_ lFi( zxb1_$I<1h?qsso((_ 0!Ey4i(d{T05ntF! (8;8^tthSf G~Ll|Wgnz^4pdl9;(j@p^wvJKSg=10clw4q%QH}k z*@X>oxN#Sf3TktDrdb>J@x)YdudlFQ!dIxb#+$Qvyw{qO*KF{DQ(V>9YREb~b`Ix3 zXAu+^z;^j_ oaG8>buhKH30#sq z?G+9ugTun=I}tcMzI+BYg;OuyJHke!X=;;RFgWXl<%*%UyjKgQ ?oIAbx5!c26iUn@S#&>=k^w9$+%w1oP~_# t~>-Qqo+PMC&>qC!B+q u(S(EXv+?y56~d6Uu!(sQI00 zW6KSs|5|Nv72tTS+4P~q1X^2+ql8m7sSb|=WExHTu|b;emn%NnVt!kY#*swBhl945 zzfPHxV(zT)@; (2!{m6f$1lAnT37#_JAg zvL<$jX362OCp0Ly3R^4yp~a2X5Nro^XZ&$&4vZ9K!0ynPkB5^eVDQ+vJ$|#9V&e{t z!fo0&^N~ThTDfelZQFLC6dbk<9}e2K?M|7qkhboMl~RT%qW<>cGV-fGMFz5MdudhJ zQUK+)ZOa0=Gg(@HZLssJs{;GBffD&Or4TvO#=W;HY(<4XZsSsA-)ZBrf3;WIxc#7# z4Gv5Lw2hl+1w+Q^ NdixuB6n&M`f&RvPqfF?p}0_nl0Ih89ozVd zWA($0ubWT$VS%|?LI9q+{B5}Lz$FGE`v)udjoaaZFAX_b{zSKn;IOsB4G*SktcE}Q z#-AmH7A_WqS}gzi6Tsj2GyI`M<4Am8G)gV8r|aLmUynkLaYu++abn*>NVI=9MvRrg zFT5+fE$x;c7|h|uIWa0M+#EcU{u%t+!2R(yGBSIoFN8U2iC9;-eq4y_V_|rJ|Hm=- z7kV+MJQJ#u8BqNS=17I=NAQB=00ouPF%hQ8;dVTl0a_A+MjgYc+xkm8{!T2*o@?v| z JvG07DslU&Mxs(RL)Vn9X5RXXb)By@ry=erqTk=XXF2gle}0#Opn zQXH8^T=jn^6#N9$-#7*_6KGm%o tH8b`qyeR8(K La7;C8>JsDs6S1Oq|&D|$n4 zov*s7*A(ml&1uNPs|^elJ~QNR!Re5+Scn4)c3LE9ahov{EqSUaeJ@g8_%0@4E$Tac z?cx5SnSFEp<)Pm>m(0OaS2W&(@c#Z#_~X6!=?~$jKf QlFQvzgEIW>V*(d1^tXetek$Bu z+u>fS&|nHz_^rYI|7I{{F7_|ta(~{Qu0J=wTx7P|gEle^T`6NS=<~qoVP6n! Qn|)bX;YytnFu?!2pZIvQ_!nk_?vro09fQ@v{^3edD_*%z<{b=J^ynEy>Sz zTTbC 846PzKZ9 z<4<4#4fxq=_b=Qal$o6p#xq<5za&mpIMg2Ur$a_i9`cwmQ$Y{eB#88oBUCHHL%ssx z6&~{Q@RRV6#V4MJ9O9!o5BU@oiFI-%q)%|W$h+$kaIkIOl=Oz2KC&E@;UpiM;3TWT zTwe0B02QX2tiLvd;1+{5EBBLcwx{dAe7^a~5o(>El$<{1qE1`96A-7c)BF}2EoC~* zZ-U_&PV@U2P!T*31y#BSa(EoqrUU&c28bkY#B!i*fC@X)O!9n_v35FnsLu3{8Bh_N zX(q0I!+?s8t8`XQNLn9s9z7l+v2Rt*v?PP& XDODcUO#*m!i9XW@hitAHG?C^+Zhr=JV= z6!>uc7n~f~6)j|~c965~V7py+7EYdoVm*-vAA%$3YqQOsenXCGT*fd{8{bu%^koq{ zxau(ZguK7O`ZbIXewHY2hnpb81qw1v9=$wbtTyQlcYU~~0q>>_3~D4LC=6|Py%`H^ zJqS+bAmKxtn_fOf#IR-HL=L3<3NJra3} (kMKmEks*7kg1R@TH&L)Q|MvaZL9!9ZLH+M|4krLCu3HGR@ z5e@k(Z64$l^B`ogbN|ajbOi6nq(J0*LliDE7_{=Z=2CmQ{wwBXT%#zK7}#8VB~)lY zrS`~E;6y_B8}AO<;Ke=g?GWw+FFp;<3i9EWooz`k6)W7i+(v1cG0`*(&xnbh&wz^H zNGhn(9m%DNJZ32L5(Z?&e96O1Zka0_2&vUuA;&gT<`-@=SN>YY$_XJyE}Do&Uqb`E zodFez9#&{7V5p1;8)8J*U=rcujOEgaK&`X;5(BET#nsLj7<}?Q28hM@#0ID`rh&R* znWt36ncGdK`6XlR)ice)C)1;HI@4HME~6T7B?GGJakYv86&+XU_HbF?g_z8B3IjBf zU|GqPmC7K7@Kh#O85Z#@#?tA$l1>#{%NT0!DGU%v)UnK?4Nzs|$xwSW#@gxRq1wte z11h>GQ`O${7*JJ@s~0n%qT?!Ez!LJww=%#Y36-VtN-BbuK6Xj@>dkwiw2QT``*)5<7E79ums&oq1}LPmM(s#p>gyXvvCDo7bQ zlgpx-Ll#1JRK+u-m(Tb2`4isQJ}8EkIpP-FayT^Xk4%nuYifJCYu0b@;GB~NT=Eyp zF@e3{H4l$FhV*nx6j(Q*gxBwQ Fz*b9pg=}I$G7!E3yb3{tHW!_o^(%vqAAHV@;9%C&EED4&}dy&(Oh4Z>~_2AHT*HyOz z!tT22jsp*6hLQhhN&3i2NIxSKXO)otXJe*<329TLWI{S3cV#4`zmD*Vg!DJ?lSoL5 zPrQV5h>z+L(vOx^Sv$sj*cS44sN=kIC8sweC$L8nN6ek5eoUT3b@CL9r1eShq_tyY zS6R+csqf41*zt}bQol49z4FBNf7#RZUpKE3+YY=2w!We=_k+);=LiUH=^_}Ok)3`Z z11f@Bs-VhnOYJiEH4LywZmAXPl~m@=B*P;a>!p){8cChYfU0_yy_f+N9akAFYnQo? zGQc9SY*mqzWZ9A;sRZrcScsSjw5v7GPrzQ36iMZ^xFV{$3ZP1esvH(Ih_J4PUs(}W zWPvim`l(?92@zKR$&qGLX9@f?21L5*9X_Ii1yKxE=qNX9!mNKObzsB2xV9v|w> FM-L*@3-H|6osV`DR%^M}Np^Z1Z1ul%s&7o|HMe`pBGKN;*>xgY*sd%FH@ z^U4p8V=^!imIHolP&^{8(8d$*3)jzo!NyLRwIZK^;Thiew-`_nTpI;dhHHaJHuuGT z!T_t7YjcR&7Zb1)-gHsxw%p&0J+VJBmQ8Sfb5X;t5;^1ouqFCzfm|K2Bw|>hQ8`s2 zE+S;?e4W5pE}aO}ov)1ysOW-fF>J<$|6eemsvcM8F`%O3DnqH+@!B&PV3Fjgs(4Kb zk`+hsIw=yogvO^)?*+!#n&%(jX-V-~rV}OtwLL(ngg`CsYXuS7UU=P#&>~Bc5!$;9 z-A;+n&Wc268$9X5#P8aa_jpE*HijKCXshVKfrzoNtng@ti~0PLc-o4^-Wjrlip8!l zW-1tqnZ%H>ScGC_#A2^NcttFB3w{!@nE1qt#X@{k7mJ;|+wXLt4JX%riR%a-HAe2} zE7uV|!Jv$=%Q}c49Lp7NEseb)1Fi5|gZ 9P2Sh=Y?ts{S{P!79 zk^GN}{CFl2e#KZWod{HqdC^lqM-YRl>KXQM22^xhr88_ot=K~tV39bsDvw#RtmVn_ zJmv&t-}o>xcc5CWdG3U#C3(zl`zc)IGl4=0u5xHC10VS;c+c{YBa4te@>>j%rTEA{ ziFVp5+e5vO(%)Mf??E9J7HZ)I^FG`sKjEpthM $b`v_idG) y)m$;i$&QVngz<96Bah0n8 KFfX=|Qf3JAA{d?# z!raP$ir^6{sM0+`JA}ED0Tsz1tSE$G65#`k< sG66YqLf z *p z_J-OJ3BEPh|15(kD-S6C!k%uP?SlkZ3N4)#M4TSfnguQS+s ~Bz5k*Y0Prp%0Hk%t>1F< zGm6n(z*suL&Cf-ZB|;R;+Q1tbaFIx2#efQm!c~DxLcD>o;Iau}hvM&KKvj$k lQ1*y1tECVV!uF?fOA=ma~23REd zww$$+j+T)&$;yH8a%~AQQR6A7`JB17N5IpPa&7MDQsmbfK%t~^fgnl>a%#KaJu9ac zS%l1~J=)Ocl$_dG(Q*Mi+651lQ9$64GQEyp>zSMUcnl0|-@}nIaQLj5$|^jX5khxL z;$ka<^r(;tR0gSS%v3OgWD-MWkRlW-BZG7u!YeXJ*W)LVK@y*M8Ke*&)n$+#Tbr1u zdn~O1{rVRGDe2cfs(CG}R{=P!YTy z1yzREWA{pag#lJEuczEzNwsdvGtNj){fMz_f@hqI8g^FX*9@pg#ITZ6 Qpfgg|6;ut}~ |zye1Z5{M<5;>D|h()usq>+d~in4 zeL_6ww#IaY+AAGz$^hGXYKY5i1`}5vR^MVz*S~#Uh1C`=1N&_S(?^{nxbu>LIj``F z-B9&58#iS}(r +IWvkU-9?xz*T#lb1OWymDWcNr_E zlZF~Q{geR}A$DTo>VFte(Q%c|#tGYC%brRP%1O*yRqQ0mV8t}NZLkEZ(0DTvEYQ8y zJU7A9l47T9yDK85VW3n(#AI35AWm8j?^|(FWKl9snlspv5GVDAquXNAXoZ$&yxrPa zpY+C>?eSf){jdB#Gu(vJO5#(?tG+oTv+}Ap8Z#C2s!jAtuR215GQ8?1BD}(@eiD8X zUbXnd^QuF9ROeNnRG-MzviTr~BVC`!?K`i{<2%E640rj6xVwzQxIE-V`k{1+@e6~& z#|*Zs+z-CYp00nxyz+wsswCd*`T$w>T*_gavo 0OVJw$U z1nPds|6xEymr;vhGxm;tz<{cHT>XLp6&+XU`Ya*-`7;A7k{neP|42cy;u2o`li&?B zW)L&Z_-89TEh+v f0bNEp+YBmGqMV0Eqa1%P?A<^~ zpLgE5xTAuNt{dRU9oW_B;9gM6gQ6|i0g6RDydezda2>3&l19->Ln5o_=b^?-1*0Dm z?K1j_(58&&=S+lGL_cTYClURKPrT?S#7A|}&&l=anRchQBUcFIY7|vt H z49|#+p2L8O;7KT`(me^=A-|RZ70HpX;-YdKawZXOXDpXa1gh)%76w!V*O!T__cNfP z<0_qD6I|a zeH^@Ctagg`#jNWFLv(_=Dfz1*xZ~LC_TXpw+?nxadv-!kA*RFvs>%9p0Oh=MvA7DZ z6$>k%@L2#5OayxnkRF^J@3lKa;z}}T*_muf$m6fhb~;d>B>@ ;m)(eRM)t W0VU7Awt)jg>pB%2k>bADj_hSzE-`n65BurQ=Oi zniYR)h>M4;5E_hJ;!@ Z099yA}V1-}T2j}!)3(mISALrDX&DvPg-?r^a zwY3?ThLMX^~7!S<$N2)m~HmdH3=mg0Q4}MAZ3Psr^4`z@b7E}R0MBY zL6zZ6+nrSxGQdi*E%^`sDYvsqt=o#YGIqzt8OtU_T)C*RERZX6NBwdJXvHWJ9LE&G zQ@AjXNtG8emQJS%l~-;a2vq5kdz@R*n%whR2CyXVvGO^=3FSF#!dzvHm9Y=|9tKuQ zV5|*6WsP)O7H%+U_3?o~Mcp0#5(BET4b}0<>@Gb86N%qrfLn~=H{^4I6tHEnJe7>U zWZ;EPMoX7wZ1OL>gzTGB?y^#Lhl;C}45;Y1O4slSna))Vut=<3Ri@Kr{xh`n>5TQ3 zprtdQI%^ Fc7jT5XxsvnO4!h_l2pOQ#w+1{Yhxp_D7mrmAj3ivHa7a-yHMogYfaIW zjm_S%6c3j9)MjSzqAxh;YpUK2cNn~h*$$Qhg(+~z>x&(Uq4*HB4(ukt7 )!#II(D6GyG+*Jv0OFV;A|JT5}gp9iGr1L=4{SjD*w2tqiO6 z;(otcBYXKbC20jK*?(*(R4UnjyD?M2WWUMGGT9&D_%f3H??re;vj2VfNhJHlCtk8Y z#7A|>{ Gb@i)PF)m}2oGc|mrev~II)HS6(O8p;_5U8RCHXWGi*Y(;7kTsB#x~rTOi3$ zQaF*I=o{Zd4dV_UI0X2uHipXd$nS*V86NpRGN2+j zI0~u^2gfc|`4 T-31Rqn|LKA`zpa_{c?sj7^|F zGL}mx0(E2KkY~_?RJx#A44bjX`yd8X)#GX%11dVMGL)Kq2=F5qV3Fjgs;Es0Qb|!; zf~U}U6N+45jIDWI3QtRl+HyH%B8YoB5Gx^wOY*ydnC= gH^|5CKj>YZm^Jbve8}?u7&87#H=c-FYxZilb?}+D}r-D5^ z bivgJ17tCYwn)s*$$$JKY z)#Wrcf->`46J5w@ Xj~U4$jb!5(0AI9JYM$bLzxo#+EY zAl_xLY2`VJx7*Y8Z<$v)iYNvHcgV_3JX#(sC-2jaU9uhIoVG(tj{dCrZ2}uK+_2pI z&A~HCv4xvWZTu-4b7kf(J_f@xau@&3fQsPeE2z@l{G{{e?qa}2^7E~DxvcZ&)RHas z$VglKhOuBm6qt(;jtkEZdM4NtT7zI>KdrOp$)be@q;NSnlN`q~)?79@lH_771Fi#F zE;ch3Ts9$=1!ln1=ucvRR*V)JkjmsDBeC~v#+vEmu#{&8RE>c^MNK#EWk5x@tro5_ z(v8 Cm2xCnS?4(UuHm6J+8jb zfQpW*bb(5!y1JJE7D@%HK;rl9FO-{OKU@oBs@dsD$Eo@ZU=? +bapUf~TM+4@{ zh^iF!btdzzAtR|w=8?us1v8l@DP<-zLhmv%nHv#ak;xpvPa=~kKJhY{AwH_hWIhaT zafkaBu{dkOZ^HeJx$>Fo9Qn-nV7arJ56_d;v_@y-Hp9GFklVBeb!9jYcfBgJX7*!4 zXr5%Sa^>01bM5K+cg(A7r;W|PgjhMxL&n CF1_{8Z(=LnX_((lwg)dsA&ZTNcV| zTJ0WQUOf&c=K0VrfvwTe?(48RMLGu+jBj`s-!WF6%ezS2=&)S!zr=wB>nNA}o5oB9 zU2>CP(j|{jwG5a1R|v0g$$yQXgi9_y@m%r{AJw_!r%FeBVuv_TcsSYB_G-Oer#?2@ z^ViSyPfUJiBsx%TSNya*uDCHW!wnCQeG1%gb3m61erVEbQo_tfhH$KWR#YwI5{@Fr zgdSo~*S~dMx!xug1H)js-7AC5qr$HD8XF~Ly50|g;Tf*?X$+_cevE=D-H&l(?$2a^ zM)GAW_ge!}*ac^j<6_2|>Exig;G+zv2rf7iS1krqbX=vgZbFXy3I 65Maoga)qn9q_W{dPkNcUGHVMK9=jf zSGwNCUG5>M67SCV BvWTqzp&?0|>8h vd+dole{XNIw@wmy-I*J_$3m;k_>OLU zaz}Rt8say5;XB^CGtUeQg;YPw!SaV@TK21k(3 1A{k})$1tEGL?Q|*suDSg0Tn@sD5&C;JUWZ?>7h%Q*|<<%cV#Ns zM=_Q}iejwb`vhh9UB o|Bq5^^^jQq32$I0W)g%KdI pcvp2!g1fic_*ulk_i)B_%O-{zj(i zP146D&rzxSEe0wG)KySfl8|ANe!_r?APG!d{gwe09am(Nv}7CIzb0{WRVGQ2!DUIv z`qnj2(poc3QlY_43hi5V7 0dN5 zB`I}3!;LpX6GQZbmOI2OSg1cSI}YXfHLvCGvAnqUSi>Lh8CNsIMnezodDe9pU3DA} zoKz!H3ZtV#c$!TO?`noy73z_nhqW8xH}d^Wqoa@rhI}y`ezV)hY9fC++@eq^!HdfW z*7P#BrU;pJxXto#p$YEm>E^(rDFeGQDoI*U@q#|!1|bH5ivw=f *H`WV8iObrZk8Ag)L^DgsIpV-4 zAtJTbMC1`lLnu9>-VSQ*W?S-bstGv9N(=?3MCp-WfFUhP B8N3Nhzf3BZ^OyRaj9D#f^9O+^~QS5EMXyGd0EQ9g@gqm4us_h zjo$$E#g~^$F5WPR<*n7rOJkqnOFlhO6~xrvdk3-PC3t1eQ1KPzBI2h9v7%)lszQtl zENWSx0!)RSkSP1+AeOWd4`Iu%i40Yqrf^D9 9=NK@o;3} z#11@Maqi~1h@Uy-HG-Pfb<0f;^n+0Uf(@P#V+18DHMqA6D$BvgY`0`-%+7iXt^wO! zYtH(z0v*g-^ew#T3tRaR`!L>+cvBt1=-0sPfmaHHfy*hJ*%4(zJ9VHJ46LW?B7Y|Q zLd-g3*x{j2sN%N%0|)S`!bJ(M@_=56AtKA4T~691#T7hMipUa}i5A$ZG1r1{$RQTl zz&1jc6Ki(ja ?%rPv0uu{I@~@^O@8AJaG*=0FFi2WJy7xRmbXdVr$FrT8b{8@= z5c~zs#^|U%IuQd$FrUpmwSC}yz+E Zo5GBP{m;leeq3)%oQhqA5k za&T@#ilpz}KLEv~{`fQ~O#axO!jzWWA7-L7m{sOkqNiyX2F6dBg2662%Y(278sLI5 z>6;%#C5g~cQiPthA4KSpX9q1~c$PP0VkEz>!wktfY5Ibu#`X-BP-7l4MFJkd8qZ{< z$0Uz&*Hy1XsP4MzRwrC0 IBTqqxF0pdy==3|C=vT8f@vCcmPBrfLGZ(Rn5&|iXmuBsJQ z#pkLE)(5VF)HNtjS-ZMXz16Jm!c<)19)YamRpq(sA!!bJ9tME8Kgj>ZMiI$%Ra%Xo zH^Gk}A$SRdP|$@7CIR)sY}em8E6%_d**;)+0L)kUL9pT8bZuWWKj?Mw_GH!0+wmsa zU|>)fT0Y1DGzE`O`Qy8EmoH`z<7vW2G4WzD@|#i^+0xSMa^lpKxf65H!364UDL@s{ z>$uuLub+@Xc@rcOo{m ahGmO14|27!g)ysT`(MnVT= 93U*gxUC*6#K$|3Z~=92SeiyrL|0hF+%!s*-2p#l#*b0knx&4gOag;14&x zZa(SXYRoh|13P{#=+6m^p=uuR&hXIl+z^C-oz31w@({m{>rL>IyO3DjjA X|a%r>5cAOy;<5$}Rp5nFY% z8!Gn9SlBZ;3-b`r)%h28Bw=A|;oT^euAe`eC18|ct6cpd=|Jiq#;cqUmOl($kSrK{ zX%K3fPN)W BjaK<9C@nmjM-_PFF!iRif81pdu(y1y!7uVZo) 2UW_l3O1YVi5c`#v+nxyz WA`ui)14z!QReTD}i7N zDvP-@iqJpAfQrD}Ok91A0Tmrr=`5R2?(q! {^g4oK++HX z!z&0y+VGbQ%n=BxwAH5$Htp)dGfblc|2EXm!pq!Vt;6GKd>Q6QZQA`LydW3N)a)x6 zP| y*Y_1UwW) zq>GJ{B+T+VbvK?5tO#B}yc=&gIJz+_dJ9-;xDhvw%Yq?-SCs7wzc!ffkqlH4oSjWD zJj2;JmjM;Q9w?}C>XA@=T+D!qAQB3yI6aSXgz*7+hcmiU4v+ud)IJl8MJ4fie&@#q zi0uT8O7@}>axY`e1VSpPs7}x|45$c9&&1Un11dVM$WGAf7+{guwrnRzqTgjb=qi=U z^B-g&j6g@Fyr{m ^Kw|2hLII<9!W&wnsrEAIP9M7p>)NwDa?|t2w6=6{ z+qhKyBzQx*I^nm5r}Jk9;s|2-dl;VK>8#j6cm4@VUqMAx77u1XMGyc5Rh*hbdLJSn zXqI!c7=B{