From 3a9405b5ac93cf818b74bdb68487633074ea6ef8 Mon Sep 17 00:00:00 2001
From: Aditya Rathi This file contains error codes used by AudioReach. Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause ar_osal_err
-
Defines public APIs for message logging.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for heap memory allocation.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for memory operations.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for service location, notification and state registration.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for signal.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for signal2 used by DSP.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
This file contains APIs to suspend thread execution for the required duration.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines Supported Sub-System IDs.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
This file contains basic types and pre processor macros.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for file IO operations.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for shared memory allocation for DSP.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for string operations.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for thread.
Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines public APIs for Graph Service Layer (GSL)
-Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines
Enums
@@ -490,6 +510,72 @@ +Values:
+0 cached.
+1 uncached.
+Values:
+Invalid sub system.
+Used for MODEM DSP sub system.
+Used for APPS sub system.
+Used for SENSOR DSP sub system.
+Used for COMPUTE DSP sub system.
+Used for Companion chip DSP (CC_DSP) sub system.
+Used for ADSP sub system.
+Functions
@@ -518,6 +604,23 @@ +Initialize GSL cshm, must be called before any other cshm calls.
+num_client – [in] number of clients to be intialized with. If 0, then default value of CSHM_DEFAULT_INIT_CLIENT_NUM will be used.
+De-Initialize GSL cshm, must be called after gsl_deinit()
+Allocates shared memory for external clients. Send APM_CMD_GLOBAL_SHARED_MEM_MAP_REGIONS commands to SPF to map allocated memory.
+size – [in] number of bytes to be allocated
+Deallocates shared memory for external clients. Send APM_CMD_GLOBAL_SHARED_MEM_UNMAP_REGIONS commands to SPF to unmap memory to be deallocated.
+mem_id – [in] identifier to shared memory to be deallocated
+AR_EOK in success, error code otherwise
+Send notification to module running in SPF w.r.t particular operation on shared memory block. Operation is opaque to gsl. AR_SPF_MSG_GLOBAL_SH_MEM commands to SPF to forwards it to custom module.
+mem_id – [in] identifier to shared memory to be deallocated
offset – [in] Offset (in bytes) from where the chunk of memory starts. This is relative to the beginning of the total shared memory allocated
length – [in] Size of the chunk of memory.
miid – [in] Module Instance ID of the module to which this call is intended for. In case of invalid/inactive miid, error is returned.
prop_flag – [in] Flags to provide additional information for this call Bit 0 – Release memory Bit used to convey if client wants the module to release/stop using a chunk of previously informed memory. 0 – Default. Not a release message. 1 – Here, if length is zero, module is asked to release entire memory mapped to it with mem_id. If length is non-zero, the module is asked to release this chunck only.
AR_EOK in success, error code otherwise
+Public Members
+Cached or uncached memory type.
+Allows rouing shared memory access across multiple DSPs.
+Flags for shared memory allocation.
+File descriptor for mapped memory region.
+Unique GSL memory identifier.
+This file contains GPR APIs.
-Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
Defines
@@ -489,7 +489,7 @@
Public APIs
This file contains IPC APIs.
-Copyright (c) Qualcomm Innovation Center, Inc. All rights reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause
@@ -1327,22 +1333,23 @@Typedefs
diff --git a/docs/api/posal_api.html b/docs/api/posal_api.html index f183630..f113d5c 100644 --- a/docs/api/posal_api.html +++ b/docs/api/posal_api.html @@ -123,7 +123,7 @@
+ +posal_cache
This file contains utilities for cache operations.
-
@@ -269,7 +269,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_cache
Posal data log apis.
-
@@ -626,7 +626,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_data_log
This file contains the global state structure for the posal environment. This state includes system-wide information such as the number of active threads and malloc counters.
-
@@ -798,7 +798,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_globalstate
This file contains utilities for memory allocation and release. This file provides memory allocation functions and macros for both C and C++.
-
@@ -895,7 +895,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_heapmgr
Internal definitions. Helps optimize by making inline calls. Must not be used by shared libraries due to backward compatibility concerns.
-
@@ -1001,7 +1001,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_internal_inlineposal_island
This file contains island utilities’ declarations.
-
@@ -1132,7 +1132,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_island
This file contains utilities for memory mapping and unmapping of shared memory.
-
@@ -1141,6 +1141,12 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_memorymap
- typedef struct posal_memorymap_node_t posal_memorymap_node_t
+Linked list of memory regions.
++
- +typedef struct posal_mem_map_v2_input_args_t posal_mem_map_v2_input_args_t
posal_memorymap -
- -ar_result_t posal_memorymap_set_shmem_id(uint32_t client_token, uint32_t shm_mem_map_handle, uint32_t shmem_id)
-Maps the shmem_id to the mem_map_handle for a given client.
+- +ar_result_t posal_memorymap_shm_mem_map_v2(posal_mem_map_v2_input_args_t *input_args_ptr, uint32_t *ret_mem_map_handle_ptr)
+Maps the shared memory and adds the memory region to the client linked list. This function enables physical address mapping only.
+
- Associated data types
- +
- -
Nonzero — Failure
- Dependencies
Before calling this function, the client object must be registered and valid shared memory regions should be created with shared_mem_map_handle.
+- Dependencies
Before calling this function, the client object must be registered.
+
- Parameters:
-
- -
client_token – [in] Client token.
- -
shm_mem_map_handle – [in] Memory map handle of the shared memory region created.
- +
shmem_id – [in] shared memory id set by the client.
- +
posal_mem_map_v2_input_args_t – structure containing input arguments
ret_mem_map_handle_ptr – [out] Handle returned by the driver. Usually driver returns “unique_shmem_id_24bit” if client is passing unique shm id in the posal_mem_map_v2_input_args_t. If the client doesnt set any “unique_shmem_id_24bit” in input args, then driver creates its own unique shm handle and returns it.
- Returns:
@@ -1352,22 +1359,23 @@posal_memorymap -
- -ar_result_t posal_memorymap_get_shmem_id(uint32_t client_token, uint32_t shm_mem_map_handle, uint32_t *shmem_id_ptr)
-Gets the associated shmem_id from the mem_map_handle for a given client.
+- +ar_result_t posal_memorymap_virtaddr_mem_map_v2(posal_mem_map_v2_input_args_t *input_args_ptr, uint32_t *ret_mem_map_handle_ptr)
+Maps the shared virtual address and adds the memory region to the client linked list. This function must be used to map a virtual address.
+
- Associated data types
- +
- -
Nonzero — Failure
- Dependencies
Before calling this function, the client object must be registered and valid shared memory regions should be created with shared_mem_map_handle.
+- Dependencies
Before calling this function, the client object must be registered.
@@ -3568,6 +3632,11 @@
- Parameters:
-
- -
client_token – [in] Client token.
- -
shm_mem_map_handle – [in] Memory map handle of the shared memory region created.
- +
shmem_id_ptr – [out] shared memory id set by the client.
- +
posal_mem_map_v2_input_args_t – structure containing input arguments
ret_mem_map_handle_ptr – [out] Handle returned by the driver. Usually driver returns “shmem_id” if client is passing unique shm id in the posal_mem_map_v2_input_args_t. If the client doesnt set any “shmem_id” in input args, then driver creates its own unique shm handle and returns it.
- Returns:
@@ -1378,12 +1386,12 @@posal_memorymap
- -ar_result_t posal_memorymap_get_mem_map_handle(uint32_t client_token, uint32_t shmem_id, uint32_t *shm_mem_map_handle_ptr)
-Gets the associated mem_map_handle for a given client based on the shmem_id.
+ar_result_t posal_memorymap_get_mem_map_handle(uint32_t client_token, uint32_t unique_shmem_id_24bit, uint32_t *shm_mem_map_handle_ptr)
+Gets the associated mem_map_handle for a given client based on the unique_shmem_id_24bit.
@@ -1391,7 +1399,7 @@
- -
Nonzero — Failure
- Dependencies
Before calling this function, the client object must be registered and valid shared memory regions should be created with shmem_id.
+- Dependencies
Before calling this function, the client object must be registered and valid shared memory regions should be created with unique_shmem_id_24bit.
posal_memorymapParameters:
- @@ -1721,7 +1729,6 @@
- -
client_token – [in] Client token.
- +
shmem_id – [in] Shared memory id set by the client.
unique_shmem_id_24bit – [in] Shared memory id set by the client.
shm_mem_map_handle_ptr – [out] Pointer to the memory map handle of the shared memory region created.
posal_memorymapstruct posal_memorymap_node_t
#include <posal_memorymap.h>-Linked list of memory regions.
@@ -2604,7 +2668,7 @@Public Members
@@ -1870,12 +1877,69 @@
+posal_memorymap +
- +struct posal_mem_map_v2_input_args_t
+ +#include <posal_memorymap.h>+++Public Members
++
+ +- +uint32_t unique_shmem_id_24bit
++
+ +- +uint32_t client_token
+Unique shared memory Id only LSB 24 Bits must be valid. if unique shm id is set, this will be returned as the mem map handle in the output arguments.
++
+ +- +posal_memorymap_shm_region_t *shm_mem_reg_ptr
+Posal memorymap driver’s registered client token
++
+ + + + + +- +uint16_t num_shm_reg
+Pointer to an array of shared memory regions to map.
++
+ +- +POSAL_MEMORYPOOLTYPE pool_id
+Indicates if the mapping is offset based as opposed to pointer based.
++
+ +- +POSAL_HEAP_ID heap_id
+Memory pool ID to which this region is mapped.
+posal_mutex
This file contains mutex utilites. Recursive mutexes are always used for thread-safe programming.
-
@@ -2003,7 +2067,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_mutex
Lite Wrapper for PM. Mainly to serve profiling. goal is not to hide MMPM/PM details.
-
@@ -2492,7 +2556,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_power_mgr
- -posal_pm_cpu_lpr_vote_t cpu_lpr_vote[PM_LPR_CPU_MAX]
+posal_pm_cpu_lpr_vote_t cpu_lpr_vote[PM_LPR_CPU_MAX]
posal_root_msg
This file contains signal utilities.
-
@@ -2780,7 +2844,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_signal
This file contains utilities for threads. Threads must be joined to avoid memory leaks. This file provides functions to create and destroy threads, and to change thread priorities.
-
@@ -3059,7 +3123,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_thread
This file contains PUBLIC utilities for thread profiling.
-
@@ -3076,7 +3140,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_thread_profilingposal_bufpool
Header file for buffer pool functionality for small allocations.
-
@@ -3168,7 +3232,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_bufpool
This file contains the ConditionVariables utilities.
-
@@ -3298,7 +3362,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_condvar
Contains API to call force crash.
-
@@ -3315,7 +3379,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_err_fatal
This is the top-level include file for the posal utilities. This file includes all header files required for using posal functions. The user of posal should only include this file to call the posal functions.
-
@@ -3400,7 +3464,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_inline_mutex
This file contains utilities for registering with interrupts.
-
@@ -3476,7 +3540,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_memory -
- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_memoryHEAP_TABLE_INDEX_FROM_HEAP_ID(actual_heap_id)
+
+- +POSAL_MEM_ALIGN_UNSPECIFIED
++
- POSAL_IS_ISLAND_HEAP_ID(heap_id)
@@ -3602,6 +3671,32 @@posal_memory +
- +enum posal_heap_t
+Values:
++
+ +- +enumerator POSAL_HEAP_NON_ISLAND
++
+ +- +enumerator POSAL_HEAP_ISLAND
++
+ +- +enumerator POSAL_HEAP_LPM
++
+ +- +enumerator POSAL_HEAP_NON_ISLAND_SAFE_HEAP
++
- enum POSAL_HEAP_ID
@@ -3716,6 +3811,28 @@posal_memory +
- +void posal_memory_aligned_free_v2(void *ptr, POSAL_HEAP_ID heapId)
+Frees memory that was allocated only with posal_memory_aligned_malloc().
++
+ +- Dependencies
- +
Before calling this function, the object must be created and initialized.
++
+- Parameters:
+- +
+
+- +
ptr – [in] - Pointer to the aligned memory to free.
- +
heapId – [in] ID of the heap from which to allocate memory.
- Returns:
+- +
None.
++
- bool_t posal_is_memory_in_tcm(void *ptr)
@@ -3770,7 +3887,7 @@posal_memory
posal_mem_prof
-
@@ -4097,7 +4214,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_mem_prof
This file contains normal mutex utilities.
-
@@ -4223,7 +4340,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_nmutex
This file contains the queue utilities. Queues must be created and added to a channel before they can be used. Queues are pushed from the back and can be popped from either front(FIFO) or back(LIFO). Queues must be destroyed when they are no longer needed.
-
@@ -4448,6 +4565,36 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_queue +
- +ar_result_t posal_queue_insert_front(posal_queue_t *q_ptr, posal_queue_element_t *payload_ptr)
+Pushes an item to Front of the queue.
++
+ +- Associated data types
- +
posal_queue_t
+- Detailed description
- +
This function is nonblocking. The user is responsible for not overflowing the queue to avoid getting an unwanted assertion.
+- +
Nonzero — Failure
+- Dependencies
- +
Before calling this function, the object must be created and initialized.
++
+- Parameters:
+- +
+
+- +
q_ptr – [in] Pointer to the queue.
- +
pPayload – [in]
Pointer to the address (location) of the item.
+The item is pushed (copied) onto the queue, not the queue address.
+- Returns:
+- +
0 — Success
+
- ar_result_t posal_queue_push_back_with_priority(posal_queue_t *q_ptr, posal_queue_element_t *payload_ptr, uint32_t priority)
@@ -4815,7 +4962,7 @@posal_queue
This file contains the Run-Time Linking (rtld) utilities.
-
@@ -4986,7 +5133,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_rtld
This file contains standard C functions.
-
@@ -5150,7 +5297,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
posal_std
This file contains the structures and function declarations that will be exposed to the framework to be invoked in order to retrieve the thread priority.
-
diff --git a/docs/api/spf_capi.html b/docs/api/spf_capi.html index 67cca4d..b9ae051 100644 --- a/docs/api/spf_capi.html +++ b/docs/api/spf_capi.html @@ -109,7 +109,7 @@- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+- Copyright
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
capi.h
Common Audio Processing Interface v2 header file.
This file defines a generalized C interface that can wrap a wide variety of audio processing modules, so that they can be treated the same way by control code.
-Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. SPDX-License-Identifier: BSD-3-Clause-Clear
Typedefs
@@ -511,7 +511,7 @@
capi_types.h
This file defines the basic data types for the Common Audio Processing Interface.
-Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
Interface. -Defines
@@ -1421,7 +1421,7 @@
capi_events.h
This file defines the events that can be raised by a module using the CAPI interface.
-Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
Typedefs
@@ -2216,7 +2216,7 @@
Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause
+Copyright (c) Qualcomm Innovation Center, Inc. All Rights Reserved. SPDX-License-Identifier: BSD-3-Clause-Clear
Defines
diff --git a/docs/genindex.html b/docs/genindex.html index 83081d0..2b74c9b 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -1855,13 +1855,45 @@
G
- gsl_cmd_register_custom_event::is_register (C++ member)
- -+
- gsl_cmd_register_custom_event::module_instance_id (C++ member)
- gsl_cmd_remove_graph (C++ struct)
- gsl_cmd_remove_graph::graph_key_vector (C++ member) +
+- gsl_cshm_alloc (C++ function) +
+- gsl_cshm_cache_type (C++ enum) +
+- gsl_cshm_cache_type::GSL_CSHM_CACHED (C++ enumerator) +
+- gsl_cshm_cache_type::GSL_CSHM_UNCACHED (C++ enumerator) +
+- gsl_cshm_cache_type_t (C++ type) +
+- gsl_cshm_dealloc (C++ function) +
+- gsl_cshm_deinit (C++ function) +
+- gsl_cshm_info (C++ struct) +
+- gsl_cshm_info::fd (C++ member) +
+- gsl_cshm_info::flag (C++ member) +
++ +
- gsl_cshm_info::mem_id (C++ member) +
+- gsl_cshm_info::subsystem_mask (C++ member) +
+- gsl_cshm_info::type (C++ member) +
+- gsl_cshm_info_t (C++ type) +
+- gsl_cshm_init (C++ function) +
+- gsl_cshm_msg (C++ function)
- gsl_data_dir (C++ enum)
@@ -2038,6 +2070,8 @@G
- GSL_MAX_LEN_OF_ACDB_FILENAME (C macro)
- GSL_MAX_NUM_OF_ACDB_FILES (C macro) +
+- gsl_mem_id_t (C++ type)
- gsl_module_id_info (C++ struct)
@@ -2082,6 +2116,24 @@G
- gsl_shmem_buf::addr (C++ member)
- gsl_shmem_buf::metadata (C++ member) +
+- gsl_subsystem (C++ enum) +
+- gsl_subsystem::GSL_SS_ADSP (C++ enumerator) +
+- gsl_subsystem::GSL_SS_APPS (C++ enumerator) +
+- gsl_subsystem::GSL_SS_CC_DSP (C++ enumerator) +
+- gsl_subsystem::GSL_SS_COMPUTE_DSP (C++ enumerator) +
+- gsl_subsystem::GSL_SS_INVALID (C++ enumerator) +
+- gsl_subsystem::GSL_SS_MODEM_DSP (C++ enumerator) +
+- gsl_subsystem::GSL_SS_SENSOR_DSP (C++ enumerator) +
+- gsl_subsystem_t (C++ type)
- gsl_tag_key_vector (C++ struct)
@@ -2430,6 +2482,16 @@P
- POSAL_HEAP_MGR_HEAP_INDEX_END (C macro)
- POSAL_HEAP_MGR_HEAP_INDEX_START (C macro) +
+- posal_heap_t (C++ enum) +
+- posal_heap_t::POSAL_HEAP_ISLAND (C++ enumerator) +
+- posal_heap_t::POSAL_HEAP_LPM (C++ enumerator) +
+- posal_heap_t::POSAL_HEAP_NON_ISLAND (C++ enumerator) +
+- posal_heap_t::POSAL_HEAP_NON_ISLAND_SAFE_HEAP (C++ enumerator)
- posal_heap_tcm_handle_t (C++ type)
@@ -2470,6 +2532,30 @@P
- posal_island_trigger_island_exit_inline (C++ function)
- posal_mem_addr_t (C++ type) +
+- POSAL_MEM_ALIGN_UNSPECIFIED (C macro) +
+- posal_mem_map_v2_input_args_t (C++ struct) + +
++
- (C++ type) +
+- posal_mem_map_v2_input_args_t::client_token (C++ member) +
+- posal_mem_map_v2_input_args_t::heap_id (C++ member) +
+- posal_mem_map_v2_input_args_t::is_cached (C++ member) +
+- posal_mem_map_v2_input_args_t::is_offset_map (C++ member) +
+- posal_mem_map_v2_input_args_t::num_shm_reg (C++ member) +
+- posal_mem_map_v2_input_args_t::pool_id (C++ member) +
+- posal_mem_map_v2_input_args_t::shm_mem_reg_ptr (C++ member) +
+- posal_mem_map_v2_input_args_t::unique_shmem_id_24bit (C++ member)
- posal_mem_prof_deinit (C++ function)
@@ -2558,6 +2644,8 @@P
- posal_memcpy (C++ function)
- posal_memory_aligned_free (C++ function) +
+- posal_memory_aligned_free_v2 (C++ function)
- posal_memory_aligned_malloc (C++ function)
@@ -2592,8 +2680,6 @@P
- posal_memorymap_get_physical_addr (C++ function)
- posal_memorymap_get_physical_addr_v2 (C++ function) -
-- posal_memorymap_get_shmem_id (C++ function)
- posal_memorymap_get_shmm_handle_and_offset_from_va_offset_map (C++ function)
@@ -2621,6 +2707,8 @@P
- posal_memorymap_mem_region_attrib_t::base_virt_addr (C++ member)
+-
- posal_memorymap_node_t::pNext (C++ member)
- posal_memorymap_node_t::ref_count (C++ member) @@ -2652,14 +2738,14 @@
P
- posal_memorymap_pool_name (C++ member)
- posal_memorymap_register (C++ function) -
-- posal_memorymap_set_shmem_id (C++ function)
- posal_memorymap_shm_decr_refcount (C++ function)
- posal_memorymap_shm_incr_refcount (C++ function)
- posal_memorymap_shm_mem_map (C++ function) +
+- posal_memorymap_shm_mem_map_v2 (C++ function)
- posal_memorymap_shm_mem_unmap (C++ function)
@@ -2678,6 +2764,8 @@P
- posal_memorymap_util_region_delete (C++ function)
- posal_memorymap_virtaddr_mem_map (C++ function) +
+- posal_memorymap_virtaddr_mem_map_v2 (C++ function)
- POSAL_MEMORYPOOLTYPE (C++ enum)
@@ -2966,6 +3054,8 @@P
- posal_queue_init_attr_t::name (C++ member)
- posal_queue_init_attr_t::prealloc_nodes (C++ member) +
+- posal_queue_insert_front (C++ function)
- posal_queue_lock_mutex (C++ function)
diff --git a/docs/objects.inv b/docs/objects.inv index 89f045848cc166649213f83589a4e2438b2378b9..3de38408ebd58f73c4a391424b4d306e8969eae7 100644 GIT binary patch delta 51586 zcmV)YK&-!kfdv1J1dxe;a^pCcE_lD6A|u)nv-=`}}gxOy=w+%f~OvpG#D7CZG^j=Hg*88-aWWDmHWe2q1Z!nSWU3Er{fC zwtTcKpjZ2DE|!z|jM)I_5AIM)ox)1xZjLGn>h*AS0UF_dx^B;B)1SO{_7BuknLO5F zhJ49QOgYkfF@zF-HAj}c8r^4oF1z96{wu5=OlEiNFHh(9@F)Wt!6FT8fgBC={W;7c zZZseZoVy?caOO_uKS1w40GtGVANip#^Q8%}`2nj=ND$CqJ~kgfG39)TeBIJqd|#ON z_H6WE+Ea6XcE9>+KaBoh23eZ3CF;l^yvwgBT(Q4QR)}c%&Hnns9^KxWQ*$v|A*8$M z=pG1FK^RY#qc0GzPed_iJRr-jle?8zl2&6v0i5ugHu@Lo?a7Sw?Z+=RiXiOCcp2wC zyQtjIzMCunF<`-PGW$N7PR2Z@(-DXgWxY8D6dkC4G2f1?iH#$A)Hy94Myo7c_V=0- z3{M-|t&~D+P8poh-=~bt=mx~NhyFTc%+X*#9&$7ptYAs5MfUVp>5(MW29`e@MLb!i zA^t7$%XU3try8QRZ{MO}>CBuid2H ^a zJ*iyyj=@hhBkOOIw-EwM= zR;$J2%j3#i#vT(D$5&kDj~2D}c?x&zAaQ4Z%ZCz&OAr-b9`EkrjvRTWI}V#A*rwPz z!N#klP3>(7hLwyRO{eqQG@_x6*V<7U#$4^jOY08Bzw_@C?2e!!lG6Qx67h{PgVShe z{;@I_GgJT%VAB~A%gt*&F43U#aXJNC#zn -(-_V`dTXK5Ol&%F4%6%Nl6r^Mp;G5|u8Z+)N3Q)d7qCq*|X zqzdfYQOI$(Fipl+AL2&N@-nI>le?dJw{?d{G(WzjP6Gdh-9*+YaRPEeELWq|B(KOK zfY#_9jkx0$#XP}Out7o=D~Q$I Tg zHp_l?%d82d&Mupz0RlYSmtw|xZ3P05YHb4q@@}bqfcH#HvD-k!bw9JwpwcpbZzp#X z6JWlW&ryag@8K4yVh+Q N5x+a0*wguFY>&p{1=wgg`A?>N#PKYiIA(Vvs|D+~a(lA)*VGRDKVP dtf$%ym>rD>~9}mfG-1o(C06pS7FGfC;+| Ao`UTm+OWSLy3S$4{zY$Tn&0d%<~^RYKAndC;brd!PIL@truMC6oz 0qy4BR`a7GIpI+?T}O=Lf1L<>v8Hd&U~h#d(ITP$ce%$30PyK zoNDVyauKKs+!H}oN=Q{`sWa%RYPqZIkSoASSHMaISnUc}tpICX0c#cDepkT#3h %GE $uN;;zzW93TBDM`ucN;7Zuvs@(fr+oAaUnKL)Q!@>CjniTQEXT@nX1)DqSA z$s+#l-eDRQ3b>iAJQz*y=Znee>%-*MPFG-)Xv+%`^6mgXvQNSB gH|aqRFs1 zA>O!xY7(A@wr)|@k8Z!2tI2=TGMG%PcuwTln`5wdB0Exldd W z8WoztyBPgQ$^rW*ks?)E!6^zJXC0+|&;Z`T9j{dqqfhHJ75}1Oi2~}m)k#B=6$)g| zmV9I{w(hZiIURwjwic&0?%b1ltv4Z8n7@o>;~$eT{^BLT*drlUm{4~x{em(e{V*=p zbX6K~g*5)=x{5arrg5K8I*mr?R&HQ5uF@-V8+wC+G~5#6?=@pn*ypG!EYeT!LiAD# zc$J^l)a}A5P<}aTAI4Qx_j5MFjdC)xrXv&v<7JtD_hR{@w8B?3;6;MT3T3>4q^nxe zXJH^InL<57t$j*FNCMY%@?|kv{6yJ 88yuy#h_T$BT{vg6B83e#8PrSJR z?^2t0(W@AZ&=v0Vv-N+@e(nT%Os`({~7q1@CeU={oab2W-<@#y<#GQ}&eI?KsA zbcK6={ MU);=A&K#V-z9gdT+@0;O& ztprO^UX6-ercK5SqSG5vzlvy9H>Ksj#VegVnaCnR*LVwizdCVzDh=H%?x~x`wRyA< zoh6j?I%JV39bk#FXcfGiVmiOSkN0qi&zeYs8e)+q-hn7ep_I_f;>N=`mJtfm)iPEI zJ#EyhpOz`$lY1n*5)U5WrE|p-bJ>l5ORVFTC}U6E9j8hIE|KN~lVss)7vC^yuqDEd zX7$rbUPLU>;H{+Hmf@fQyGDJDs cMF1|7cH}kFxR~rQyZUOK<{{-f^}@WzIlJiOTOY|;=xj9X zg2WqAI!(&LRFD;q?$ZMelBGv~z%d|w8i4|CUXJcqCOyp 3Mpm?qri9e_8B{j;~^i_ UQ4ub@CyC|neO8R>zC-Rn?k zWKBY@mMcahV_g#0a$`0r5|ODcp>PW3)oV%4RhLmbo$~6nV>FNRt zx{C9%I`-rxOE`NMER1YU?!T_$?N`aZC^CL!A8hXYlIQD}O}v^u*=-d`{VFIXx|=^P zI_A+Tm}YvG$?ZeDXV|`fUyQ7;4H=dnWs>Dq4?VHny@&UE3~ES4_~c`x5QE$!ft5(6 z^QD=bae_zvOI{+C23R7S&+aDokBg+zCE+_aqtS>;rcG+R5UYxFWOxa0dr54;Gb$mdoV5>qHMMyLXweUA#PFSsiQ-uE4qq+E* z_}!)jTkR#IQ4x!D`5-b~0^jg~2H;|esAbxR`S-5+sv=mCBs~d6(D%hCW!SmJiz*jE zN}!KRtNCyMwi=ax;^ffFuMFFXYS2auje@k&UZM(MiGyKB4;#y%25A;gup3VnZQ*W> zN5(wyoRYT<5`q#|ji7D(*TSIJ!7>WeJKJLv=2)Pdk`;{aA45Cv51t>y+vr|G9Bx)X zi#!Wl4;CE}^{c36>4d<^INwW$*D!+fF8jcncr7AkjSv`rEtPoE^c0|K@W5`P3BJ&K z +BdOV+*{COpl0c%uA|0u?#P!Kb+bPZa%;UvDOY5D!u9?u}PFZO6pyW`rqFo#L6 zLd9 ?SUMZd|1VR75Ub+Qkj8*U<_b?K59(_-YxcfL*wYfg8PF#VX(zFJ0g!7}UTp zLww0dytCtBg^&MB=9WRzC`$4??mKtKr^_lFnG9Z|wQjp1l=@ZJ8r5R-;~G>5Hm7Pj ztfP4%DrearJ^bZSD&S@Cg$v2V36v6|nH+|h?$5w~E2g*-BPY*KdwU!1oP(DybS7gH zSmVo6=09kkn1H-04ZVq(c0>`7yHCe2v*X<`xHHDvAQ!N*9aOo`$H*rnzDz-&N4*nm znI#W(j|5Mm{bRD~j8!rS=qc&cLW5cBk>0U4Hy*_2o?h(TDM(i_mLV%7*wIc+)9QlB zAmFBdbn$869IaH+a;nr9Xce>~L3UQD2)
vlB9ZjH?qtMOyb5oY z&j{wJ Wnbo6^bNnV`NvR#7JRH7%z19+EV}J|iEJV3<&iUgCAML-O@6ux; zmK6$SmHkbU2zPdA_a7es7DppPy5a zTA(ZJZ&&k*M~hFVw;(bjd7j28<=m~{QV8*>{PqeqKqAu)8qmq)*cZ2)u>cUDNG%M1 zWD)=BcawaT25lA(gP$*cKH#%llWWSeB@OfW6x7%Cig?%>2mgxN&O*|XI)Cfyr_> zEfgdb`B7l_pfwclS{8NbAz6#kOP(jEaP3i 8xhiBxZbHPh>A@J1v2{rTt2hK;f19^S+dJqNzyp<1&&raO3RpcN*(_0%3c zjK6fkCo2?aA}gLI?t)Y%BNI87*78~@O`u7vx3ksaN~|d~iFG_(UMYVQWD;l7f)6py z%lePnFU!@H(wQKWI4>90b;7KFH{lcc7uRY#2{MWE`)yYZR-r%>S?BoJtkvY9qr6sn z%?z=IbU(iEmJB0D!my;fYpPK_1v`oBNdUv)``lW@qUCMwGGbBkHa8rxD0!QEj|$hD zFxD_hx+&XTgm-><5|yRno0O
-Co~BW4Yd4PW8KiSlyz2Lo~nWeyi)DS~a}Wl~Dj)Z*YxNtC}lc zErqX{ba%%vsb8CygBxv+hh_pJH @tum4^PZJw%F}7YlxKICNas4@0PME-Jn};-ccI!ayQC zB!w0Zwkd(1`{DM#eLJ$!{}!-^LsVPsQxtHe1IUDjB6clB*C7*ss0J{ic+vnrzbY5L zkQiDIuuTy=MT{@ms@!l~;t|R`e$wLx{Udr~QuO>y8844PVP)Ms4py#yUw0$#mGAIw z #Fc}I>A3)g!XD6YQZ5==XSz!KyGX9^ z5OFvYcAj)r9x$RUC!WDjt{SFYp1X6 $YgHS81$&dw;+7nXZm5z(`U7#w4&5 zvxkdekRp)4%aeax@J5b7B8Z$PerN?*mqB4IQ!W}7+vT3$P43y;$i5pl31sWQO)@f; zD-J{J8>B60cYFfmdq1(rXAAQAgZe)P)mQ#ICq%*979K2g#(j7<=6GNDd$I5Qv%h;c z@^{O0ypuhD^LlSi&k?>TCCl>#3JN3@> RzLau@VU#JDs z@#A%t?r!TJBG!rSY%EzYjVFBL#qj9`3tT6n$3c7nHD0VpKsDR>r}3>Kv@HzG0u%}? zgM#dOSZgu=jwA~zQKT05x+2i%#weEQe(MHDJKXs`D1b2t_Hj7aS4*|6@bhq({^7gF zg9jgfXR=bBoWs_I29+1fa{(&!gY(w)lPx@~Ykj2~8p5UCWF;EkV{DJ-KY*W#WQj;1 z_vr*CR8`}lfdEY^4W6n9Qk&&|HM;} Xg%Gd|z|K zwV*-@UN6POFcVB}8yB46aC<-v4u4RE%-PnHa)Fej0;Ji(esK1FH?%5-BGEnhk?kG# z&i1g|hLFms^qQfpCOOSNR+bYrkf2C2{ V$iL zBmj~N=5fF(4dfEd6#`g7zn1pn)|o%I8j^yBiEA50qmlnNxOx2+X~XIH2PUjC=J`h@ zE^!e5ymWDT(T|%j6y^kxO-fcvzaX_>v4w*bBhmP@BUK^l;x40Q#$H0Bq7X>S RtV7;QJN_Q`pF-5t}#;tWF&g*XHuA(lKJ(||zfv*7j s zu|;>NW02y4g%sLThjJvP1kb7pGEJaLq_U5oi!c)F?bE^8$;j3F4k!YZhzNy7kv@)y zF?G=fPs_)Df*a=*G}wD5{Pj*k0w3t#Wio_CAg1#1=e`)b$gEZg0z%heVqxTeVH6x8 zU)W`Zf&n7rPp%mK6YT4wL9k~g;!dL&tqt7wP>7!^AZG#r|6D@>fGsUz%|d`U6s#m6 zv9y{TY}jdS5##6TXSxs}7AE}VY$F>D{Df+L1_D%`neo@wt101&8oHHpc W+C XnUBnW(^(sAB~6d( zbfPE#4-Qoth;`{Qia#~+qC&nr;V)o8CCpnk%WDSf5DZJQ=m^6hK0P(qMz4UiHso~b z8InmS3nRz`cvn9Z|T(F#sGi;M4^)^LCaCP!XZO+wfLWMQ#IY$o1O0 zVwF=|OW0*56u|(z_{)6PdB7^A8$T5`wn8?3v0S*4q>kDrx0qsoAI2KF>x9T1Jl4mG z;|=V!a}3%5s>YSc;?i%N=Ona~#J4VRopVw!wc?#z$%D%YAcYt3eh1FuMi^<5W7p7Q z&;J{8PIbOhg8~!p9*S@5vcEju-I RvQFNNvmL*t=x~Z?$`%4R0= ;bDkH3noO2R1=c;s;*G zVkD`6-Kr INZ!5a?8=5l2(e=cpyTs*|rEx_DwOU5NMl3u4V`4!su zPOU4*lobk>h}IvA3G{{xHnA#=OjzyJ^4Dl& l}1KWdwPBip`R0pAeL; >EtJGt; z2n<%zdHxJ)=p{{% eu98o@ZZvH_Oj!dy+-HZly8L{OQD IRsczWSLGf(^xna{BbbOr<_q82t6#o8LJlTx(K6Mg6;lqdZ_2+VOJDS?) zkNE<6#9oht9-n1ML^s>@e4i{ $hJczkGC s|i4h(8=Ur-R3R9T^87`mfD%I=3L*TPKm@P<9Ts{fVQ3;JX{Dmw*tE z <3-!j0Uh z36Sp&0%mN!t3F$xtEfzX=>O_1um~xCqLvNZ4t*zZpF8GQ$CsWl#+Px#?xGj)LOMcF z8J;#a{<(htQN^f0#bSdmp^skh=4dB!?5rY}Vl@)X3{UH27-*nf#xN@s@$+mO6bxI> zY^#`i=Wij+auFa0M}>Dd_`CQ-2-Z?CZW^rHii2j1`h()%#HlB8A`JqX)UTp{nM}0% zPHFc9TJjjKEvsI_=opU>PJR%*G8R-aq;3Fc5zu6h*W%+#H5@d~$4`mlD`LjUG8s`C z)DZK`i>qyNT_3(*(ene=EYNORG1_vW86s`$g}Ve9vOuH4NmAkICH?;P5c#Mpa?ZYI z2hLx%d)%J_KMc{IMHseRQ3p4FoX9PC#RWVZuD22DQ+#I+%SLqoWRm(-CX-9<%O KOr-y8ZTW4D7QXgg79%R!%A sjh1XW9OD17 zdj3JpUd8`0%gD~|3Ge24-fvx$u{(#=Yb({9p#ildl?4Z{iopNa9_*KYkTLm6uNf0B zuFWwkd9rp6-d|fUdWQF4WB~RatY(jT{-ft#p1``V8l0q-;mii&xG8l *pAM#HSSA~1;r<0NVo50>R_WLFhRG{wmAr~eG& 8OXLBABD^i>HU;)B^-*M5Pkv;ZPq!vUy12oy#FDHX{Kt4$En7E_kFXnMrE3+1( zwey~3)_S1cu!FT#1xBoNi5>prj3NfstWn#6CAkP}GKxulX0MtILi7xiRRgesGDu*r zqlp4gHD%y$t*O}=?~L_SzF~!GtEEgxaE~RoL9)245 I<(R%O_rP~&1Q9HkXaCRPp-EBiMZ23n=~)h2lnPwNK9 9Rxwl_er*H4px>9oO9@>zhD-Ghwyl(2$^mSrQP}T$t1X z+B6xq_3Hb;nPvyD;c$36vL?3q9pBbIn%>VBlhs$eJaKGJN0g &F%5hO0TgO(qJ?~!^PO&Wf47!+=dR3l-|`XB&gSn z%_?V(N_Js?Kg`FEQ!zbK3wWy_bArlsF*Qfu&9VJBvqrby&_BM*_VUrP=8F~WL>o4J zY9GecDmPt^JegV3(XDCUejUy3#d1(-g>MseZ>D*Fx0pY4R@3?{3{29dliA%|$Sp`j zNEY(x #2dU@P$tdvtp{wXMaxi_Xeu zgl-cvSx!;!Vt=2ngi1q}$(U{Q`A0|I0?;a8ZG;czY7{q~(f840I{G5!aZ8zBhi(%y ze_UCQ*l;{St$Dt97_IC_3t@=)Sw&~#5RfO>m8%jnO`AyERivHW*M+(KI-ica=m-W( z6s_WaP&+i2OB?TJ5vyn_4V5n8Vf060Ak@IrGFFuiFwt3EcmSB@B%4AfHA>4CvK=kN z`HLL?7(|pkl&lO!j#1?Zch14H&&P;$QbMkNhN?rf4UZcU@cdr>C+oOarJ+eu;m=Ci z@c_{e!|V!VzEAQb5a=iQ3PwD`=^vc+&i8nKzKvJl;)%@^F3*8Y;Ozasj=?Y6|2y&z zc=6C>Al#Y>mkIwyoVI*uhXKq-$wnhmaW3j9y&-$+X6qiee#o{&K)y`9KKsszJ A&&}!F!4smq=WuaAKo$i)rBh`LYfCJz#}Ij}eG{c@-6Z zC)v_~Cx6zjkq=y8MMagA5^5ncBR|;SPYb99#>Zc|aOXk?VRtS>41BuA$yslATU_a3 z?u7^_$wff3g?#IEKq;51E|~|pzn2s4^?a|BL>2)l ^6|(kc!+B zGMD$D0aH@TnC0BSi&nRXC&npN6v751` f =F2uRS~QK)uLpK7X>}R3#^3EPaw=@hRX%joHUYD0Lsbm z4#@0eEj!)H3!HkOL9kCf5D R2?CSzwr;KlSwN9v{37) zl0iT X=oViyG2P5!(sN+gY6Z6C4m_^mdVC> zc`8mW>Gh{o8R_mo&aFpu5ca7EBF1o-{k?bo>lna>=|n_HDIuDy^mq?txAYh>r^l`2 z;QOBMk)|g@_$pF1K=xInt$3XC2 SPFsFOpQ?E>gW z&GN99PMvLG2CltsW3DZ^F1}MZ(V}JAO};D!t^=e~DfiR)m(dho(XgB>SFrE5vO>X5 z7iiS5%~m vp2g?lP=^b17C#T;46uLf1d+Cd_L|x;C_ul zvA1EdFDGw;LfwY{SK&F-H7czPvP@=Z%r$TbL (K7@xK6s{pkd7W &C*zKU)PWm?d^JawIJqPj!5RtUnvxv;jw C>TG#GqPqhxc#b`ZQZk=Ch@!7LAJBEM;k%)3_8z3sH|D z>2=69@^mAAizu^J!E2 XmlQgIywo%)+^RaMxl@eMbC0-_t_oAd8d}1!U zX@GUyRvEGX=uU@918xTuApVHxM)nL#25|aeWq&MuCL=Tip~P z0T?QzlTOEIL zFz<1Hjx9Pl#DUbrbv7C?k>b@l-4x2g)FL$=EiV((FOPS3<^s4HnLaG1fHw+Sn#-gQ z8YA_SyNS8zrmL;vHp^Jy`J4_MVmbo6;FV|rJ247N)GC(jYuhe{@$F+L$fXln1wqdM zOd2}m)bkp=kt5{z!Ux$GJ_m{(UC#)`eOP^e`c0AZc=~M7LAukD>uBIhtzkf8KQ*rz z41Nx)#(-Ksh_y{cVc~|~sg(F@;02mZ5c@g4`V9<_eeG2%9^ZMsIvY6UOkW03>CxJo zr;ZgFIWSxe^pL|=U| < zYzJ-zV&4u-#TgDMKfyKzQ}Jbm@>8ByA!=*M#&ndK+s&5e9vvzM`^sn%1inxxInENg zI+=tf^)6^;8*TQq8`|t?fi^iXvb4k!yjiyag?+Ow8DuytT|xxgt4oHIloI46FCu(* z0$?R=VHaM_mVE j8O4j)I*}k35nJiwKZ`qmJJB$x!7>U7QRRL*u%BJf zs6s7cwo1SYrP9m`yD5qyVk`Zh_Qr9eW6%Y)o`JQp#;pbS-+>c#QvsC{WU~N&_K`^M zh7E{4P@>}SI;b>2qT&L5)I|! Z0W|-AOQ5J L=Q>pY&ffht`GkZ2u}uV|B=RAT@$Q)LbbNCP=-Y&@@zy)O%;U{Nv9R!ucl+ zYJd&o(5guxrPt0l_2BbA2*xjm%RToX>*4VKlwe1Cl %3l_PJMd^Y?X=Cw^p->_9E;v-Gz{gXczEEw@GY~3E$@73BUUJF|0w9$f zjp6WxtJ}kiSYwt7Kvc4Szm9=WUaA kz12-^AnGGz$LYeQKLu?pXR|Hq_#DG%upyhLTYw|9b`vX z&yHt@@F~s-kP~u(W9aN^wZHypp>2DlQZvhT1kN9 W4vneH{Mn3WpA MB0D)51yC603K|B_XtI=sC zG;qH~O&EjgN;sk3i=LHj4lMmd3HM?2y2;?iF038Y&1PrTxbPRkLvv{%o`Pp{XuTVX zHIF~)k$_sfQO3sOi^zO!o~XzOC~G2FgBQwZKt6$gNJ8}p83pyADRz$Hfm4kn5T`>f zpB9&s@$onSN`+`?{zXRN3PErB84aZ26FKV59{)FSsfhcyqa960pioK |cPPcH4NTH|b2-IR5ntYnE(=la_- z>kP`EhA>D0Ofr1j>3PQkKY@`$#1!Gqc3f|NovvWq?$QrT#f*!;385DWQ+;*o;SfK# z%YjM~Nl18tq7Gx^C?<^u*Yu4rPmWUJ!B5!oLAj~g4Tt!DXT+sLWMN9lUeC-;I`Whh zG_in7QURhw@a!DColp59SWWdHPqmjUe#Q4|#g?0wgBxAed=ahtRZELlHdaNug=%wu zO>JF9QUj|MI@4vvA86lOT=K@p682ZHjqvTuu@&;T(er!j!#h%$TA_YZus~Vtc>!bd z&@(F)8<}O8c$h&xU$_}e>RoKhn3Scd&2X2+s28AYxhND%&kV_MlyIOWxk|~rjLZY5 z)?pf!yf$N%7rEl6E~ MJ_XL{na3Tp z!K2ZHdpvBmPcMOQ2fpLkxPAM{5)-yQUb!T^84Wd+C_Qexz&%sOhf+;y5WgBm=uFdXsV yQg6QNplGD+7J`a9o^*ovcfLopu?U1w+i z@?Y(92F4(^M}m^%B9uubO#aG$-a7_jr2Q&fkvN^PFD#ZMh8d;Y*?Pm_{c>vGK8)?r zcx>M &1Ojf3t2Bp^wOA}$vc^M_CfI)+QzneZTx$CV` zLZMPD%rv|436s1 TqJ{_`^+?p?i1zhSY8MaBp zC7*<{V9 #oSR-F6rZ1eEA0M>sB{Sr^Y2~twM8%*;c_)vtb~1Wj6$cFTf7W%5rj(c zxU|gKSh!}UI7OPu7Ms?YfBlANj6%y_XV%Giy>71{bCZG`f85JX7d|_?7xs@I1g7ME z_6i=2x^Sqm2&GiOX{8cRq1KSP{NzaY1&uuS$pMmV0~zC{4JSW;cr+gH+SEl! *e0JO$kbGuE{#gSEN C;TgTDmEn`777A?jM-0&38>-AI($W59xqS~ zfAOJ9Y8iz qeh4nd6Yl^ zNQ&8 ppe#II*G*6=I z3QBE2PGNz~ln|*Tr3A%B2$=^Vv+8v`Ds^~#3D9sn8=i|Lw_imo)8d*_%+=OGzH~#g z7n!P%h=@&76a@NG3lL;hN?>JD#!vS0O~op0=<#KIlk^MX!XAAeO{U;}CBsa Rbv?Eo8t?QcYxqFH;n<_ ;!;}iR19abG4DNCD`ucKa!f`IT?^=g*a52y+o_ep%0mC|$PW(b zF4=hDD#waBGDx;4zOZ1KbyXP|P?C#)CKEY-ctIP5x_5zVBQ6Z<#7O%IQpSgu**Rxt zyGw81vTO6dO@*aVA
o@D zV=Ly`)2Cxt-;&P?m(MTtCzlTm*$B=$GfE^Z_hiny_f%c}CiVO1j<=7;VRrcYh>iz; zH}PTkzmw)mjP^STw!xnr-%fS%Jv&)b!0g*3qIuc7=FF|MBEG(BC0tdkYZ373BCNm* zwrA8y=35?Frcn)o@wZFOt5;KU6)ae%*GKUb!qwHl8}U^nadnSZQBs~=dnYNWh+pRr z9@f_&3X408vWTRkY+x6txmOdEJlej0gPO#jJG-qD!o5ksm{1#BVr?kc;9+c)m%UPU zLvHWV10>!-fIt-8g$ftY6q7ZjWm^IrTWxd2THzJ6h?GQ^Y9fImiO9ssN3+OzVj}Ob zSUS?vVbKUEN^iRGy<`H*Jw))?g*pa!lA{hW9J&YIap9E&foG?#Er@^2(xtM0@a2S0 zfJ6{akQhiN+g~WYv3K@m2$4YOnyT=dTQB@Lg7B=-yNkm9Npya*j?pw9!9P_|=jmw5 z@I4bCK6m(@>V+o}-&efIY~lw{E;6n7p7Qatt@oP>|9yPT6Y3cFrg!xwlyZnd5X34+ zB!qe^g mI!SHZ>sF$*1mkjYGr3AYyVooXi{e-lR5d9jKrY9ofL4p8+^Q(U|P<8c(sC& z?wd&l_j_-lGPM8NM$cT$%4mckeybxk>$ $#>b>>Ifo${PyfXcL`(s4Lzt&%8~! zV0fvf#0s0fg%5cBuOn>Am!E2TxF*%^xOTwDBFp*ahtxh>-ySmU*Xq%%lLhzp)A^TC zwn~2VIG)Vy<@Z~AJcDeU>XGo1)0(LGCXcK~>$ gjT0kYK0BW*`!1JGpP1v1?0%#@zbp1l!^dP%R^~@kWfgk@f z8Gc@{@OdZOs6Hrdb2lv57gY8mA9B0&-UPtO{uLocZf{bsJ%5+pQNYI_X%!e65$MvA z3P ;vZ^bHh+X0X>4ioXIZz!SZw|Vw6 z{mRDi*ICdxbY*)5{b^E=<9`caYw R0DDanVJN|_*?S% z6mr7qnSCAGc7nivc?F(cRyBttISH7m2;_uk=;^2QP>4d$PzXGEjKsdnzhZq^xLbr{ z-I89hm9)wOlSYdF7rynr0%PPTRGw@xL-H^bOI!skBh8P@0)=qpITE0oDjVlhQYhvO zVE(EMB*{e}lR{Qq8o !K@h4i$xarLGFqPixWp((0=G%TZb+(I*B2b5Cp0+x{; zPyPWk0>B0=J9I4Ky+YVpVEbNY3b-SQjupIDF5oyBRP5M*_MI}nE2}m&gslpv1b`AK z!iWYqJD=m*nJ}?fy%J%DPR$DuriaC5C&|F})z!=^F}YT`WX(F$c#$VrbL=DQR6u+h zAbiH7dnJN@dkn>;l%}izl|pYqNmql`rkGpl1&Zccf^ws`l@lL}48CO5AQ;oH+N``N za7`(UH%xXAGp9-_7*%$UGW4ZoQh_+8V;$U0|0+7(KSz=kh|v+Y;9I33FojvP&Br7_ zkpnE=Ql-cz?6=g(wTkf_1af@RzM@LdnpsIL+qE@+(S|j?H4P#T> N&H8Cge@mbe9IctH)4zG^w5t^weTPNaSa(Z=K&yMTJo(4+<`$A0aQa9opBYp zqrUeo1&ejU@1RtqH-1aGJll!hP3T9iu!0+gLg4m|i#IBNSPrkXU+DS*`L_$bnKqkq z*U XeTIZ r|ve&`%J^`0PsxFIO*r z5fFHn6;e+pqb@BZl0%mlQfcc;42gVv%M2S5OId12+5^bG^s{1}$i`dlK+7U4D0&8B z(pU-)KnoN}Y*N39MxlkQ9n@}`Ft}D%CLt0LkG#l|LJePQ*~Cm*a!DZud6@>zinEDt zFad4kh%Ml2onkYNC2SpVqA^K`x=oIM@mL4sVp}c5xS@kOUdrvswY}`3M0<0n2NO@H zz()VAhXbi8$grOoqA?Es{T!`#cD;`znGWctEu>^iyzk2Ox98*%pnB^hAkCyf4MviS zFeaHP^ba04gNm&&@W~16XWuzp`m1Wp=LE;lAq UTnaCNEV4 zB{$j8?F$N^_QRn$x&OMdzx+gF1Qfa7Q#K|Oac8nb1eN+#P?OGoH-B7oOs`ci>+E<# z`QhjhJvTWEWimjq8I#`_4&y&tJXlAh+c4f5>W3k!pV?F9L@F8snso-!3uM661VzCc z3yJ^74SXj8)H#ic5fe#$RM!=MYrY&!?XTv@vM1wQ0HtZ Pm=A$!- ao07=@tu3+x*VF|yZ%&JIgKD-$ z#o#Gjkve__CA?)IC P-X2aOfOf!*pqP>5Btpe=b|4A@vg= zvytrO@MRl?k0>;MaKc~Wq>@@jth1kvJ8ZDq9^hdv0Yj?%)KE|bD-`wLCQmu5Om{+F z4(7pG?|hVNo2|d|-a`=E=b&U2QrYq^XB&x@W&s1BxnR{*X?7r_+tP#z!ly>Y?kc{# zCUW=oHr%0+ZSv)D{}eEne~~INV;0AK?Qa*nHGK5RscL_)z3q7m7*}Wh|6 Z6+iv^}*narAq2Jhg zBy+3AQ9l(DHtW>R1G4rgx+Q{4ql!+FR{qefgHbnPP5c6ptO8e;s!%OUzkmx++js zR*onlwZ#1#yKmO(#`VgUMyQAVOXUAe5R0vl6ODfc`q2*g`3gu(LA*V6cYI2|8G!3z z*}UF`WIi~5Z*vUxPDB+DuT8X<+><5U>q)Nv+eaTo5B{fH{VMQodXSX;9?)FnK?91F zxzhaCc*SfBcakOXf1B_R7~RNm zZ?_^&zoPt{`1jC)+)(x#+vHNAccp=}F8gf8z%zf|)=8dt%u_}h6;P6kfMzrI2@Um1 z4qBAE2uR}2ydl$qTjiz&p*8QD5Qf9){N5gqRwMiFVP$`rf2@|Pg*kcvt$n4rds!xf zo6LHw+isLd{VFWGhQ;W|H8dbtl7_$sOeq)y>%uHW>3IjvhnWwr4#toT< }PTRv% zCkiT CJO+HF5AP|000?zVz7 z9By{msSg|isi+5M?{^HE9UH}zZmnX8@Gv9+GajA*r9#ko@)v@?1AlIZpmUTX1AO?p zXD>>rU}c??!^8@YIQ>B@Do4ucn8+!jjw}LvfA`F?F}Ebb4Tt!jA$Ve>2^>#hkiNyU zEbA}WX1TGCPk17LC(9?}2$yRM0TWkoNem!8+3LPJ#JK?;v>bKNfRasI6@Q4DiPQBH z@az;6l9gey3W= S*Cp0yG&$v?X3aX7Oip&9nYS)Tpji)x zf6h6KzmhSJBC?Dr;TSoLNh4Y(s|NoyJw81F#)(8aG)66>QCYWPcJWej12yp|6$rCI zK%}zcx`oEDc6!Yf`EWE4I{}f-o-h31< M z)H5*!veAf5RrInvyN{>kWd#Cv7RW`Y3t#HgS!Pg^%Y2Jw!(nl)-*P&djUm&J*>ETU zlLj>~vx#qNJqVDgWu!)?*?cCPI$0tDGV af1p@Cc;d+HcNXoUh-mG&zkWaEd>b0xSu}bU{C=Xj zyvRF?M!_el)g0T0-&uF`jISKG;q#+!Dm=uah-2`I4;e(!8hA5)6`=49ruq}dp@>W@ z@x)SLS`N6@TIn?dwNpWNwJHN9yc#iNoK={qDp_ZPgEVkY#xB!a(2#&Mf2Eg=O)9u1 zK!r70F6|X;Whhz8paC7AX!iJEFCQ&yzF3)KVO5IM!T?bAuYNZfrP82lTB2b4^yCNG zpZ?!~p@bs0L7f@sz^%++M7)q+&TwFx4({KSOz~vQSw^U*m&lF}YGz&HWUv9X#^3EY zC{RqMJfq{U^ouCV5)h*ie^io-pk}* KS<#ih*3uppW)FJwUGm|ksmjkFkbq6 z>MHA%5-NiVJc$@S#}kQNX^;w-3<{F-jXNv-6pn!yOT<4SnV_|-Ey>p^xC}~O4% SpiKhV7gi#Qe|4sXu*BDSN0psQ z;NEe_OAnhdH3-&B6r7pMN4R%_Uw**clPWhY5Re(@8UnoMQYc8|KC42ucb>Lxx>{bC zQId;r1m44CAv %i*Sgh5r>KBL^}Y$b7Cn92J~~;>?Kf0~hiU zl$NR-h(Lz^jPSo)e|&Gi9=2^?QQN_4PN=`ey>G;%B#waMbs~Y|{_=tD;|=5;(HOzz z@@;P*4t^eTx0(W b=2RRcgaiTGeX*w$ixXD?SH=&WWo8DGVgWiqx2Q8Tx!tEq{xiE54~{^1g~ zCKNgALe%~Z%@#WCn3#ei+2X;q2}DB>o5rut5kGoA0ic8Dr3hH2R%4O03KW?y85w~V zcGjtS7nCwff4oAFxh4#5NXEmV`w}D<0WwP*)KH8Z#3Ym8nLFGEg(4(5NCQdI&x_Ec zcd;fo6sD8!{1VQy9HdOb_~orKvMo8g)lbXh+2mc?xKZ?QML@HKcRK%JTk{|0f}dHX zK{9jOGCzBt4%)`g|0%DeKyQLAX>d=k;N6FbS>cX9f9u aRQl6J9RRCN8}Rrg37M@O~2MOgz3@UAoc$ z&*^Ri0Owu`1J622{fI}92+o4Is-l;}2tUCW3w$hDU+|RFdrE>GK{lw_*4+W8%VEOC zHEaI_e?M${(122#Rl4|X!n9}IUSPWJEp%}#k$ekPcxvRsW!N@MwjIV255DjD-UreL zx-zWS4AidW63ArV4r_aNESDPL)Cff;wLfTDIIc|ls43xVjUP2R99z~uUP^?0(FaUZ z!SbI_*{~&iA^!(Xhz&jt=c6PBeD{am1k(~Te^=h-{Xixn0XW_(e5SZqvknnNhIO3~ za}AS3m aNNm9!D#(Z*9eiX&;~3@QfXjDj%7Ad?r-CNK0v;R&{-w9h}X<~dhquT z&S|<0qZwq$7oA+IK$7^A^QYreG2??v!Fw6#Q1yYiRra0OsAy30btF{6x_x%n{cf5| ze IT=%`drE z{|V{Ob^@g@fW65-ArG)ujdxP+!oU7Ee@^}Wf7jHD1WzA54^Gdo;nu~vtM|w=E`p|E zwe_;4m$~n^+1xV@00@uDH}L-Hy$sgFjEY)m5mJHr{NW?$3=Y?AfVq0%pm$z9huc z6w |C4oh&;gaIL!ntZf6`iy zDv}lv$MIVvPh?2+TO<&Vci>;ie~YB?4`qI@ Fe_DYGo9X6@pARF;w!Z#cPHxeo(RjSD(GzPjyNB$m zYx~r#445cQ5$*H4yQR6hih6^Qlt=&f$zt_*&8+XUFp4O@V#e!ioJ946`G2MbVTyLc z1~(k8ozTa#%H^(>VYL&}=L%_1!#DYq?XRqC4^>v4*6&P~S_Ws *YU=(xy~5;jQ@=omZsrWpZv=1K`*IDGK;7K#p-*EGsxph1dbHc-_T zGYatGlL9YjO{}Mx|92!xr^P5uH2IKHl*-7Fn(0D6fZRn+Vbe39CbDcbmoQld)I|1j zn7!<8kB7*5ehn9Z1Au8Yf2ChVB(cW_^yb?q+UaCskIH?GOdY}ktPU^Suu_<~;lD Xv5rih8agC);*13cApX_kD8AZl3k5f+OAp@pW`6D7QkxI<~%Lw6-s!s1iVeTj7< z>N+LHCoR>%x%s_$t;=09>BL6*AGuc?T3Pe?6d!;CfAt!v7Ll_5jS?w( z1o=l#U->eHe`pFRi?#kqsjS`z@lQ-+@y>~VV*0w+#_}5`w|JAsKQEp9=YZ6Ktd?6t zEXHUg`OJGU6x`l_WuZZBchd(I9DmqhkMxX298iQATL?vD-HQ>8!n=}`HFn0?ME#}( zCz(2iOw+bFp$yJ!e zw;xJ?ap;Di#E+kKD3JrG93B`XN~$9&tJbh*}LOYD7r=WYDzN~ zd*Iuie;uLt<4)3~fzu!LMH5x1caQC=g1SA`;WtPw-~A!Ke`88HCr5tQwDL}q{FdqE zo-p|>Q_D4V@>`~~le0j6=Y(@jr~HN~22HGJ3}`}g00cb2DVFz<+{t9i^`xWziRVfN zWM-WQO%n#_4HU?6-zLCFAadUWBL(i))*J`$u@m9*;Gk!EOM2bdl9b{@x(g`S@LpTn z8U3m7@U1mKe~-<~4^=E$S1HLHIAY*UCkN~9=>B3)R=;Z64la@&4m#w?cH0Bs$a{r? zz)U5OKu&VTi_VHyF(-DxE3CZpoBB%TE#lI*M6!j0_T>Pp$$H(Gg+Qb>b5eq9v_{1M z(1{cuT)=^^YcmMemZX-RQa$^ji{7nE1*hWEchCVoe;c|-GOw{xXmEOM{uFbP!<@vR zX3K(~H65;kgi|v128C0T54_!hM6_=eSm_bCikpub+AA0YYc>v{LI=^F&?w_C=Ib#F zK|s+E5 *#YiIRZ0MQW^dM^(eoFd6IY9kOQ7!Q#onC)e9SB3^}*6jqkZd6 z7P|d#e`r0}Q)_` 4xR* rie+P~Rp*L}=JyuSWS^eF7@dnD3J_{ea zYJ9hAiqf6P*zHu|OPaE)P}n-TL8%UH!yP`14pNup768Zw$SOdbmy_jmG#hi@e4MQx zsA9`98QWx6!*w4rRgX$T=TQW^C7G(JPsb;z0`+vna))$u4FDXyj7&x%cQQ4yJkvz^ ze LQ8m!%z+;sUjo+`PpOeZH4^^iY$H3|J{|DST_jekAXeD_eDT9b ztXkI~z}32l&_%T_;x$+6GP8I+D>FCMvof<-Ju6~S>sgtwi+WZ{Y)d^$H8EGR-c6Hz zYYn5C4~J{^?L$2hg1r9Aq=FYGe{IBQB)N!1XDmeEf`n25iq40F4KX4WL(mDro$sIQ zofG*7_f;@SN(rpQS^9 9jE)JbQng`da2P$-q$RE#eu zXaCA7lL5{|XzsmhBoIp))Mira%MeMH!(pMj0`Fw&T1%ndfp2f`P!p`&e|sczQmMzs zgeQtB8)R5^^-^#MNo%7f1q|R##zJzqPc^GU5C=k}0?$6or(Jzx1rTf=? QAU{S}dbk_JF;>(+zG&^oFoiw`=lCVcC zp> BWyv=m$<0NJRU*b4{M(N6C*=#^EsjC%ox) zApoCxLE3r4(oD%Pbbi|Q7cvfaw!D!#zT ge z&k5yCQ)11=(M6h=`23x}kB_qiZ#hlv)1y-pvUDzMdw60G8~QA8)l`tZ9nCs+(8-U$ z9{EkgaTIlz!tm4qiU F$8nUPER)1`Q}MPQLUC@+be=yzF)d zKja-E*MY#ye|(i(Tt#g{mSr_e+5B9Ah4s_@swsDbATn>(xr{>|@Q@c>OdP0 vx$s6+7O|Y1~tq^1?34P5oRNYY9s{QMM>vUF-jv1Ve~GPt!f#t z&K>$egs1BP_xokbaOx2C_9T%*J-P~!&uZ7z_2&mre-xi8RzGZqWo2y@pr!A+yvUbw zKGu`(|FSp7;4dfeIO}5(qL$0FY(_8*N|3{glKqncO9QW{uA>%n6>WchC{-{&CzAn~ zRZt~}6xkI;{rLgp90B+4lmj|!+U8!4yIlvNBNG!E=Yr1`RA~^+pCXHI3f}U}MUC$) z=WbRxe*h~HZwmQo(OWMkk@Up?6{7N5NPL1ll^R8#ICw+NE3lm)5KgzaoR>Wo;=G3M zrR8L=9gZ`7%jTRxSY|Hb#jm61&kvvk*vCpldr^LoqPdo$Ki^%;OZW_IHWJZZl)t;u z=}ys~A4ZG)*EV|2=R!DFKTyzEwb54WQD6lMfApPYlXCfkYyR_tW-?wdfM=by>z4?y zYDezVL73O()i;(<)) 0B?9$5?fYYKX4WeaaUwpNL=`AMabc2q&^PK>^LZ@h4-SI nl1Thb^Shn_z&f+{x}z1k`OR8Uq@i23}X%xg= 3x|hSlYx>@ov{j3cN@^Lf&K=sI%RLQ( zb!&;lZ*hlH{FLB;s!s<2F>;4g0s`=MW$^7*1zQ$;?lOea!Ed$-52pat{0)01sAa=! zJa!qNeM_JGca4PSQduFo%`w @tcRxjrqIzKPGse+eUd z=O2KH5+sCwWalRg1NV*i4(|TMQ)bxC`sNmDgiFOo>5;gT0wv-&GJ>B?elwysN>;U1 zvEn1UmU@QX;BrMAB!Z2ng(q_NrL!~e5hG8~o!E-n4n~^+XtEg&kHPi{Kb}C3F%nVq z9QclB$J6(C-(DDjzRC_7P%c&0e{w L ^E7jE5NSBgu7k zZv3?lycDSlU`aCm51wZZUhzSRM(Mryw}?ugd^SyuxmOH!t*Q9l`-<{>R7Lh^GCFwRW`kfYGD>0vSqktVsj2-YhM8c^h3c-oY*G` nzw-@hwSm@JXTJf6Fc+vn7#u^b+z-e2Q|fz#ptdiFXd7dIo S?>)bLHNO)x4=A4?-bzVpAaOeb2LJr~Gg!2uKKZy8)#kJ1$!^r2I z3-~DdgX1y!&C_sN{jQb&v_V-PM2q7~RQ)FU`=sH&SMie>JVN{ke<@JJ`YGjVavLrr zC@Vlc*Jgv)xOU+}KSp{w>4`r?Qo8G#KSXl6?5#gUf;#uWA0t)qQ#AJD-*ox$5``m` z (|}4WImo_hU?Ef2IM;ybB+4fVTPd{6*9m&B3$!BBYGVevO;D z^>MSsXYD5Eg~mZa?K05DFRue8Ji>QX`WIFj$Z&|iXX0(-$+MTxdE&X2?M)?L0 nncLjOb#R0r-AhTy$Ym>dq?HY1`YAc1&r*Vjo!{|(kf3WN7MhRb@2vi2p)``MO z61M$Pl1#K~rK_0@hnoOz$M;?W2j_|X!hFzcc?FC#r~#QZu5FlXiwa&&s2>luPrO_; zpgI@w7}3_nH%|hNBChZ#B@oPk7lPoM<;oZEF~ZAn_ICtPTaJPO{KHGj=(N$i_1tHw z`Ea %lH*F7_s$Vl*hqsKsL8^=T#Z)t=wbY&6BV*Tfd*)? z9=eetlaT>Rme%rGxspJ$Yq_1R7FW`eLbGcbPnTCJp#+&-$z*IljQ+TWk^~u`WVyOh zo+QZZN>C+Vnv3sdN7Y4d!Uw2YT&q H z6f8c(zx@xSvkZxouswMG-wD!9^7_Je+~-dtYZ79M|8Rn*(9TS~qnjCK&tu!7<$d6s zo {W-J#99uIB32@nw6BYlI zq-(zXG+KvI;3Q+9sq^XwRgj?**l|TbaU4zk1@hmV;4}W?Gk&{ZNkv7YN8d)J$c~IH zJ|l|?0+j)WZUFfB^`b2mcz1jP;NrInmQ++6e{>!pf|0@J<3(~}Pld hK@Wh~O-vTd#@#PAEOlR2nKBRDy_e<7vY&66=fJ!zoDBIKF zUqd_s0>Hn9pOHb?o(iAzC;<4>plnZvM}wvif*!wLvaVqt(F+Clxx?<0f#Qgq`NiyW ze`40`il0KVGe^%8PhRQ`2-d?=U(_fy!~C~W2b9XB^Wdm}*pa3`)Ou3$@Pt3G6gsZ- z&0-hoCoj>u&LVcP?@Y{UeP)&N=@gJOr;pQ|^$&iqbw62-`^%3$;qO8yAO7dPwfOfM z(9m-te2d*Lir^yfzh& 3qCNW8{}HmG;N*M`+cnwimkmBJpAj{CyJSnme|1qF z`i!W_y9GNk;_={}oq!cHeY<2!#KldF9HtS0@#}G%R< u;a^To@|HPW<+1n*sB5ra9Q+l{68+c;!IWeiDP-xPVyV8@Z zSeX*5l=2f1i_V8 ^!nDP6cFHJMIC!!~J zFR~#g?-uNci1GT*eaPx#@#~-Q>t$;)bhKk_67j1SD yb?`$5O}?)~kUz&3HH>DCbTI&wC^I9Y#gsVGcL|YN_B;vHZjbx@ zF`F2)f}`t)AqM`Rw }3%{IAc?pOOc40NX$NhbUyk zNnTFja#I2-%7&94L|dN~fB9mNp%) k$`g{TU9P22+0LnbDli@s$zK(&dKiiVill^{Al6$i5D~7!88Tvp{{9a${ zE0X7UF2jHxe{LmX5Bk32IO DSvLGl-&;F_jg0=5gs`2Se bxk|6^DUz-UVauxL>4Qz*aMwmp-zbu^b~Sk;8=ANAT}KnaR(l)Y^EG9op}g3r zveuI%Umo<<#>RCAe|<#=+mJnkFUvg_RgZzD^`(Bl*Ef{jz;hMV5W&_Y+0oaA>$~f| zEaR%^xSA)e^^M;5e0d{;-CrxZrfG&}=(6k%WKDN{NAoqWhZy{U5Vkk)HK*6t71`*c zf^~d^tmu7I4>eD791-lkEA<_{-&ZtO?<<3zF~G&EOWt}Qe|xATM6d^aPgQ$LU-KNz z?a3S8P~4t0=&v`9(^EX5vecFSz|mbz+6+*O@9AsV(0yZVr~@B0{=O%K?e|e`pd6Rh zo3*35s)AfqUv(9wXQ1*G$`fNCX}$G8Q8nE&R2S8E1lrqZhAW}wqzbi5XRvmAilKUn zwpLVBvZ&T*e;Zvk VM@+bBM&>gu}Z>1$WWS2-J`PSXu- zu+bz{M#zS|8Eo7&YN(!}2-TByPxAYUqk4U9qq#`GPRI&PEU( zHF2%C*`R)>r^~2KuDy-oAY6ZgLqv`iRDmCC*1oD4nl7W>Xk!=>iYYu 6sxPguBt8yf(Ej&MxC`Ri^6XVe@WiBo@3~aB)NvF%Dyr{6$eEbs rR`pcwdWufHCkY(aGq#kj~n_ybSZ4ObS;oIZ-hQ4gnV2B`O!HBWbuPa7BmS(edH ze*@8?MG$LGlMEDh^&Cm}2da+>8&xO;`HF$RxiUQRM=A6(ig9f}z6e^Kgm zy{GrD&F}UNLpOBE@T8uPdK_OxUc86mx1O&^$f;kQ9}R^ZRZ _SeVVaWWToF*f3F=hNE$f(fhGvAV+W67bkqa-sFKQ_-1j`s zK!Kj44wSxV>FKBrxV;`8d}$~kb5#_eqF71QduX6OkbOb;^;#RK=s((8#tszudD+9E zwX{|ZlvSdB$6cdAKu=zyarN5QR3CW+ccY>J({Kl j}jiT7{|hX*?Get@JamvqT@P;*r^*+F9t z6!;;J<;ZInjd=`L5r9_up4@XKe-z~?8`tj-21u)}_?o6VXr!QT1faE^gJNH=zt&I= z%bqhpQG(}heAQ45$L~8L(30dUn$+9)E*jqWgMNR2hD_`J8u?aV*9;M8&F^_V4UIt% z2?{$leH{&=WR&&Jz#m8=#fXs6=o*dcQ1uwdx}-{|p(4-kAy0rtAR>8
q@(E1aa9r31`4fZZ-atTWh1Gcgc^^7f^4O?M!gam;fO$Er;0|= zsB_bO$5j+(g90!Vu{(o-e<3OQ6`>u;=nr())lt8P-bAg+l@&u*QRi+b5=z@Oxlsh$ zmvm!*LzaOuaL~}`|0nKUdmA~jY|-!j6$BbMuz}&6ct8B*!d-r}(XMeFm%HZxcP@l@ zR_R(2HKJ5*pI?90j?5&JQj#K>CD}7=OB7@6$jFGj*NVrEs 4{<5} j zCvEXTBG3R4KWhV31A$AkUM~n8z#hDku?jdOfzc9(GZ$|IO3|voOWGEp3LSW@AfnJQ z!RD$9*HP1ylXvAsZ6}8x4bK6g5R%SjQ6ZB}(t^J2UedO 6Z3Abte;bh2RK znQ@8G|B|*{^4xM}D@eJh2uI3b`10a7hL#QLC2a@kHQW>UFE^kd5SF}Pz|s7KF~Zgt zwT(CH6j~c`r+B5&3?-u_VvQsk<%`;eR)-cc9R8UbPb%LsXe5wS7sDCrjwjfTPB^Jb zbc} d`a7h36Fl|gGbv3!!)g8rU*qY40<|$N!vw0F($30P_*75 zBwToo_z2BmW3(@7TPlP|j#rB>;;E}o!D>azh;TA`j$bPd%8Wxt2E-ihiYZ`^QVJUx z#8WukU0 681q4q84<}C=H9Db6m C6t(o zY#z8w9R3?oO{1GfPz|(3jdU^+qLR<7d9`R+^hG-611aNj&LxTD94j6gWEME>eF&5; zLaL}CfkBZX9Dgqzg9|y7dA-FZPBP4BCuyd^AxId+JqyBTF?8pFdna5 pl9qq7w*^ImRV9ub-y`wXT#=R)1ma!__E5>(5$oSddxG1h2GE z0l}w9I?}nFSW1-&|EF!3$6HbbE37J$2++##$gM=Rc`Z^pZ|8-%%(w>WGC {f#Qmd!addqcZo9bk%8xz*f*470zAaf!sWoTX<%M8?=T=5O)}-yaZ`;MsU`X z`#w(r$A62nmO)KJ2SfML4nk!!s;_k7VP2aT%PiwU^GuUzZ6CGqRu#}*bb3CIaTPj8 zi&m&E(t-rEMbs85K %s cB;oF&jJ zfgV_@2`_Bk6 #!R~-Y*oQv kr$ 4{SDm zFje^+T_96T 2?;i{E|mis{x5J_I421z@|oMxE?I3N5-DcKmy9OJ=( zw7fzMr~}}6eF0ZZaObq)$@&6eq`{uV%hw<)nhqj`At^Z_ugQii5P#6|C1$*yU4!Sk zdZ2`6)@2?vLV*<$dZ!Te^;KzzeEae>P#W5UHpm&;aAu-O&LrtWMe`W_8Aju?HK07y zc=s3x#_E=Cq=+0;W)4~yn)~Hz;0gmX7sAmNV2wslL`5O|1<#Dxv)bU{zWl4(c>ub| zEHDjJC7r)QV}tZ+>wm4z=gor;*a^Z>P^ubABxVww0x?y>u_4%)eAd2_4K|wIqFZ7- zn4BOngbyB463Q$kg$FtV`(^`9htZM)3)0aF+P!KONhD1>a?vC6EO0LH$`BPXd}t#m zlz!W}MSUD9M%7v1AmJodAdeuiS*2aiqR@^ic$#Egm 0bjCS|XS&srIv4WsA*;+fzmz9=N9zxTVlJScpes5;L=~Y4%p| zXc>)AhCXPybALHn(0#mOHVfNZ&@<;%Lim;%JzQ2gs-oKM06fgW=8n_iE+vB~rhxYa z>N`-05E3SHIS;!Ar4U>cubDR4#dc WlM3MVHD)^p zTcBkFL_Yu#o_O>LJcXveR250+G!GlTRye#(86ow-ReyBwhBBK EAc*SKFwxv@ObdWiD3OdYWI7DzrRV}>NtTvHwgtajt1Y(v;L2uUz zaw;oYg`L&ELHHvivP1(5#03sfW|Cnn&^in=v+CW*JZ)X%vRYm!L zl{1Idg$JyN7E l9B10TI5O1!A>FsjV_(QO*Dq1 zFMlN$61D-}T#0$uAyrV$;JM4zXAA8k;cg4`QMR?r8uQs}%Pn)1& `D%m=A)9135*>6uQ)+uOG?3K`9TbE-7>mU?tYq;EzxOElggoeY?)PWygAC< zNAt=cm#D7=H9>zN%?8;!Yg|@J37}Q*w110>Ltr|ea@F93l@2h^@>M|4*#ad?`iV|4 zfGaD7kP&FN^%>afcFTQt6cb_+0ijlKA0LepTnLTIJ4-3O)GTmrp-T{fm51VvoKYSN zfpCEqcaCW{3mgH5K~5%~G|L&$5~I}eOglvq=%$zjPU)C1P%sW{q8t)*mjqW@Ie!7g zW6xUS+k!*#fj2qR7e{=0YX@185PWmn_;@;1$D@W5h_ht3_fs6;JDXG8IV^wPGeXv{N7fCFxAL zLa?I<=fJ^J2xo058J%b5V4ajAOn-TrN`nuGl>Ds bn*~l&KD2&hm?dpVCxcB& z!oiT`BKle2DhUaa&%HI=I9+HqG*|_rh4S*xYZhYy1dj|NSHw#W5+R7Gcv0bQQqr@) zt*VZT u8_R2aUqz<*tg4h+1| z&N6gFklPAY6b;<22waO<;24IET1BW>RZyTSGFQl17Fp8#tjz kbxL$o9kP31(#5l!7JaLO)ajNv)K-&P4}Vd=y^8c4#i zn|WO^(FC?}3Ak0jn _uueTrsCFWrPp+`}28w=PBBM=xRo)w@+;FJ}U zfz(2iJE;Ar9c@QX%7Wfi7H5GM4Ta)er40kh(z`@wiL}hF@J7qL-hzSXyo26{tIFKM z`C3TXO4kM;W}ilIyC|_9Uqu6vj~1uJ0+u-l3xiStGg5dR$;1 ~mS$uX=K(Lp=@6XCpqeGTW=%k#!6i_U z)bjq*^&%l_%5jA@dDWVf;1ePiBjsS2qU4@Qt0ZX$R* l7HA4>Oe}Ppp9rtW3bKJvg(|DGc&6y?I6A^#Sfv#D=tZws z6Q95ZAhC?L_}PIZphkveT0FG=6}^46nv(oy2R#7)s(&rUj;Bp7kw;oTI=3d2fv>O6 z#r6*7HqT*b`Bl*s5x#JA(P~4oEj?LH{OloeTkh7E>-%z(N~cXms=+8q PbiO=Tyo^l5IjVj<4#r0j*6z zp+CT(CV%&*REn;#p}tCM)0*o-M~3Jyc;yIy<$PDRn;CS|TWHqCCA!4cBGyBGR|oe1 zISyLpbYh>^-1GJ*g*=qH@ElQ1p_5okSzh2enZRp`uV0~dn%72Eq>%{uRg{YNBm-sV zQqsm(uaIDrDFOej#Lv)`=v*qC2@9#1%FCZnA%9=Jm5B~vc#}2FFd8j=w4P+CdHo8} zb}?a{@rI6(TPp?E9)6e=p`FdIUm-*pjC3ZliP0xo#h`Nsg-+uX8(+VLq(GOplp|Xt zIAKfEShQ~dfza^NZi@Om6;c$ovoQ3N)pXUOq$ytwCS{qB_D`r#s1g78Dp-^X^3 ?QB4ULo86-UYYX@|3u z$*?AWIEGqK*+N_g>HdU1WRgnGb53^{wN R^_KCZ_euaz+h7}W_d7!*g#K__dojuSwjPm-7k&@1pDpSqP z_t2f*DblWX#vL7R`V%Ttq%|BBs@g=Ylcr_K8eC=gs{0dKh`LJ1*;4+7APQZ!ZI!2g zo6RJ|(Ce#?kR&*DwmeGdQ-*A%d*O4?2yIH~*Qc 5X`O z`a!p4XT!WI3YtE;Xc+#H=->)eyS#p )g$3;~R; z3C*l##+-Isx+ucy>#|%qVmoE4F&wlSL7pZ Lyp)+917(PldN!4>mdMdn2H*6qEk z 0)*X`DfTUwG;{p4caVKP-_rc^iwcO zEqPU(&WoG_X(W6 p5WEJy{#%{+gJei<`30oO(<@LrzaRL_F6 zk`4xPI>iiksB)y64@Cm4ceRwW+LC4~492ykYZ;7CGG#ba%dAQkUgs=G#Cj1B?Y+0{ zZc&qKM4xv863Lz8HUuqRah;9vG!ZT(m*i@_qlD&3oiiY%mDMoAs=(um5TYaU?`+NV z?EV~2q$q#G7UllUiLNiUwBOnm3>~70Dde*tv-jG`h`|VFiD%bv7?is+D>*s2^*p3( zcQ!jgX?f8XRZc NTqYey+MCx<(yJVoC8@aMogen<2uKJQEk!r zOAS^;VW#q$KMSb^Gtp=C?<7iQGSU2ea+IXcXLTN=i8*EEDX#$dr57n#W0}MtHRx7n zK}KaNMxWPSQ_5%y@>~&+z=4X?=A6+(m%M|Nd*PuqnKpRguJB5yw$T8!o&(twS!S8; zNmPFtFGL5XWG=F}n$IFI7LF(>x~|gTF>B39v8aKc7|i5z9^CSF3ztUa;MW~*OZt|J zwks;cbAqnLh^A|C;e0q QSV6@@^`lMVomDU>AOW0I8GzYF-5FlESu7lDB(LAG^JIez 22FT1~XZyNcmn zEL}@~5>rS9zV1cFiW7{3hFNIDlBs#4HL6C1*dR535jPXOOtga${#R25-dMp_bE1oL zq@@A$A~qp4jDWZllxT%pUmfiogQt##bLL;fW`Y-zbg>T07&Z_MQF=IbW9WK2`yzgb zlIp<4Nn#+@vKY0^oaWf+tX1XaC2S^>75Zv_025;z9!VKE1#~6Iy9&?rB0eEygxMNs zMjV=+?g*wU(sVU&ynb>iY`)EGdD6y6TI`0$M+F23JszKqvzz!L@3RO2r&GZqD_*0Z zbTEqP?7Rfk66!_9XEA8bNJ%NRm6|aaVwA D3R|Z+Lmg9pFXWgjo>5B)S&8M;dyLjbYFW%_WzpIzKyHv!$Awcc zPE2xE_4XM9z@5Ql(M4>ngJ wrI=(e&GpD?nL#%Meg_!X=d2)*k?@ScNMPi_R~u|pEvfE*r19 f>!=Zb2eMDd9Ov=L4Khi3cdBNC35wAj0o@8 qensq!lYY zB;>APjn5I}%!V@W^#m&;j^bFXb2wI$YE*l!9n8qGWa=D~7#x~ITQv_}-jT8^t8#dd zbwK4glZ67xF1A!`L!{vAGnRB^B^18)8FQXr9WHCz75C|alo?ikamBL}yWjFTXR@#o zw8T(AAwio3##nG*Adt0^eeGv3Sxm*`j^Yt4D*~P$Nm?cBGL8#s`W!wjUuaaNa #lQ51Jt#6z}{p+ZRQ+4S?7;i27oz+G%uLUjWw-v z)4AJOY~Y(dMQ4_ODMzOkrLC?ugP}wo35$G%HV5f79bpD7Ps%AOBC3M%t$jx%K^M*% zB0S${c^tc$rnRCf2tLwTTp33 +MK=w>WpC8!vJ8onxjn0epW{{3fet?hc1A;sKgEw6EGfHlM YI{9+-sU&*2mBYjgo2j(lS^Dqm&NvvDSy(#~?9`y*lqRou&gpgPcstfKJ%V;KJN z96kXwQ;Izh6c_ZC=xAm)(}ow;_6|75`0K0t-SS^9P) zJU6mf?W*^nu}oC>8Cb?Rr{;_yp(1LcUaYc?b660%jmthpw4=;3DGI^9W{hl=geCr( zu!M0Bx=NjstE3=vDvDY46ohJ0m`t_hH~_KG=QB)#t+BX<7&Ozkz;pN!50LVX!jcDb zOnUKu%2}4~Yrsa?8NuwPU?%8-xH+JCMCt@nhMYCJxE;J&0UmD=aeXv9%Vg#|5AYaQ zyY*CJs0na5wO*yqT8`loKgptIi8V{PP0YoPd&e-X$WLc5xd*omOws@lbcscb4c0}V z1O&Kxj@u~U4N+xEL*;~Ta=n9y7tjX%S+YNWhffZm6n(9QHPH( XBE{<81O&CT}XO%r~8 z_tM*wnSXfstskEM_F#vOc69WAU3`D{@%H=wasT0eT=eH2U$_2v?fr+%%S*o5e*AlX z)#UD?-1Lk4Qm^Ipn>c)RgRgE5U;XKes}E+UUoN)eqHS;PzuGm^H#gg{dHm*IAFloJ z@Cj_*%kIOrf4r7Uer>nCzP!G=`P)mQU4HxLX;U@6d5K>hTK#zK=5Xz1y7s51KTMwR zhl@Y+5C8bnUw-`aKYe#~+b%CVh9gaX?za~;M14#u%%P&IRyt`Nee#}SdTJa2WAAQv zFEt{+G&&Gsfk_q8Gt2lyVWlh=x$r&o(eornjrMY1raqa3W%z)(wfufNiBNvtPn4*f z% v-f`e$A+J5rmOzUZ(RKF>-NWsAMpFty|nv}JE7^ljpKIzcyT|lc=+ {|AoI?{M+=)clg><*nG5d`)Tv=hkf|`%YJ(O#81Av!63NbUA=oJJI?S+1dYpj zy={M!etEmy-QT^XNiec`W@HLR2P2!kk^gx4jf 9W&geXC*N& zhJY!;6JBdF8+ ElJpGEnF#QUH_wVub>+ zeZp^V_TT;)Kf(%r{O Q4Zr;}e&b`Gy6WoY-NnCuyy`NU z b>Uty_I-Ia uquKw|e$&=h)Eo{N& z>UbkAe)`j^?bzOot9R_My4~J?yuG-SdyeM26I$|MVzW1~c{K6kYsOz~4G`MBT$GDX z+jhUbxcX4u$q5aauHKZ*boFL`^^XrG|Ia6rueq0-DH`I6>&^Yu2SMjuU)9|{34Pf1 z6WX#jwRtqPd1h*VGnx9=y|Z5)o&EUC8Ir=Qt$h6L;ubUP?M-_8XmfkDac`WcyN@?F z3~uG-;t4`ue7plCy*r^h4rY*wHcw_Y4`zOOa`FVmFaF#9udlW2FqSSbtT@_V^vavt zbuhBQsO408-bEL`zI5=szg}(Az1&{t?=L {q z{qd` %^jk{uLrL`!0WT-e&+S7ZFYFv+Yh%_ zn9Cd{bDHUYHU|sSAbi#`*#7Zz+h1*r|NdfJm%I1V*JlOMsX=}-S(%#iJedA^@bPbt zKHd;j!5Tl3_P$3B;Cy;>Q$D}&uP=Xp=C9hzcXDHnW0b=m5Aft)EXL-I`SRlLF;u1? zba4YLaUi|8x6=Yz~|n{YNW*hfe(Axu3s0`uX8czy5sj(`Oy| z*tS#f(#!VDf=Um5_b>&YUEF@WzLRMtA&cYd?QPw$hbj2O=E=b3!N8A?)_>+7rwNF# zJN@yijrlfYd!-Rypfy_ib+Y#3OSJar^aM!q(&-E|^5C>z?eJ`_Ke5-ZryO+0f1e`u z-NiqDJ`0k#UheMMD?9WmN!LHUsfiD6HU~GG$<4EHe)l|f?!9dGUN#f8`_miR`7Ep+ zY3GrfpN+y^+}pYU?6GZs++J^Y)AW7neg^OD&9p9ebu&f9zqe^2;_He3Wpf`4KkxA; z!<(y{DHtCNAHcxBKDOprC;#|GYyRtxfBxxzKmObQaq%yofrN*fIw@nkX!Y?d@vZFe z;P*!U;1Y}6-o42gzrNXj{XcjmlhNG~v-so_g`(eN^zq9-AAUGu5I z etCG6f_ZSsp?+wCaMAvA g<)BF}ET?^~l;Mt~sB-QFxdXAA* z98FPgEP8&-a8|AaZiA1#a|@mK*@= UST99b2{~1Xw%Rmem1CzL z-)NX;@~T1qvO=zAIpUsFE+H3mh<{_f=3|C?P*z1z(Xj59#AIr+xPgRW*M`sY4M(MF z%Rx*u&9XjTtlAlaW?SQblAdokcY`tE6pw-_g(f%QhIxa*Y^~U{87|fv>P>OBXQjEd zGevFPaNHK{V>zGa d?A( zBhDYNQep`v;g+iBAuw01)k$YxnzgOx1%?q_DC3f=Z+IlZ@t78Wk5(IQDLct<0~(iu z9+an;b=9m;nA`|CgpLS-4ygsv?4;;8?UcB@-o87?$z>a=Gu0yMI93thQFFvdZY@e) z)B@Ao>0gyY{59I+*^Pt<)bLTvm2z2UG+mq|WD-_%kKEbX^rY*^?a)b@ul}6AeHtnS zkHM *W%t;(wSh`3|92|GmZd62xSzQD9g%_Y~7>KWaCMr+hpZNn9BaC FddrD z!#fFHM?8s8y;xO!4lJXbPK%yjn9e4cFihqlrIt1Kh9lLN5-B9GWa<+plLJPfQ1exqgmWAd8j4!zw4M5!pcn-?pf0R$kDcN$O zdGPz2XO8y$6F@ByQG+Wi4676 N9B2h_YHa7STTDfIDb!vLMwtN=T*V1MvQIo^ zl+WfEiI}CI0l*^=5b~YsU>uH0)rewYoXv4b0Eh{Rx>1tByWEgyb7;tq$+{Cm{wa=s zhlw`T9F;=c7N?>e+W87x+#HMd&UP$_38ex950|O>m{b=)@G(-zqGylEFo42*3ZV`} z9}EYcq-&<7#A@9=%(V-Pq3N0(;v-@~M65JOGw1>f+NEbd`CJXao-zS_tp<;v;}gtF z(AET^GJ6go@fAe#0Y0NNOE3ULn(kwNGS2wa`fR%Z(>4O|BAAP3^*EJ#t=cz>=_h8c zT>+v)2q!PA7+VE_)`!qjD%9Nwv!B~guJdG=j{zwMhAXljcz^|91%#YEeuqcTV&Z$S zM1y>6fHs`gP28x-YCGF*70FZ8=cWvZszC-QU|-!@ E10d-AxA}%oxF}x`;RltZOu2Y71JVEHJHwwWjPylSmp8K9H7| zVIz24uEj4f%`wnbh(vRp!mq^!bPW;+7jCLvU>f*CYT)51hd%I{!qmE<(?hTW!)Af$ z1oUiM$~@9+F|&*I09uv$3gC=?)hsYw_;x@Wsy0N$)h8Fhj$DW=4Xf2yV7mHhhPI{^ zWNI&z jM`JGKp;>S>n+tGtUNXjdwLnFE08yl%Q#1)7+GS%$?qXy~sE{UrLM@kM zfHRfzDfviYV?n|SvSf^bXj?#7(5~i?t!$N&{ZvL~I910<2;dpbwkErYnmQlRLKZfq zdLvRQa`!lGwegwRR1^?@1gI6JZWBzjqL5lguoiS)cR$lCUsL1R;c>YR{*2I^47hG- z7#}velhWSp_IKIA`n%mjrJt5Z$8%#X$5grG(0OV;B!HGU^dj3q1FV64I?YvoP+Zm` zh?AaU9WgJl&0*H5INEg1Mn)&O!Hm+whZ2-qWZRfd%^ArI&D3sxWl*afXxswrn?<%m zFWwZLw4Lh0yAoAV0G?@D#w?3$18XZ7j+p7yQeAiGpuxbp(?AA`Y@3{sM>}w`Qy3vE z>H}Ji= bwBJMc_^EJsOZyFr$pF zHAPqj31N}*76G<@dj*0(mWd)gvLu|t#B))yUt-%*XCCnq*%|OthF}gR-E;Lxk6POz z+nL