From e87ba894402f8f6e137307d2293f561738b94d66 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 22 Jul 2026 13:10:06 +0000 Subject: [PATCH 1/8] Add CCSDS Unsegmented Time Code (CUC) library Implement the CCSDS Unsegmented Time Code (CUC) per CCSDS 301.0-B-4 Section 3.2 as a minimal, dependency-free, heap-free C99 library. - include/cuc.h: public API (P-field / T-field / combined encode+decode, sizing, validation, format-independent Q0.64 time value, optional double helpers behind CUC_NO_FLOAT) - src/cuc.c: integer-only core codec, big-endian, 1-2 octet P-field, 1-7 basic and 0-10 fractional octets, checked error codes - examples/cuc_example.c: encode/decode demo - tests/unit_tests.c: P-field, T-field, round-trip and error tests - docs/ccsds_cuc.md: field-by-field CUC reference notes - Makefile: build static library, example and tests - README.md: overview, structure, build and API reference Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01N2Co4mHGZtbWkUCPNM3KLQ --- Makefile | 49 ++++-- README.md | 192 ++++++++++++++--------- docs/ccsds_cuc.md | 72 +++++++++ examples/cuc_example.c | 50 ++++++ include/cuc.h | 195 +++++++++++++++++++++++ src/cuc.c | 344 +++++++++++++++++++++++++++++++++++++++++ tests/unit_tests.c | 160 +++++++++++++++++-- 7 files changed, 963 insertions(+), 99 deletions(-) create mode 100644 docs/ccsds_cuc.md create mode 100644 examples/cuc_example.c create mode 100644 include/cuc.h create mode 100644 src/cuc.c diff --git a/Makefile b/Makefile index b52ec12..9d582fd 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,47 @@ CC ?= cc -# Minimal Makefile: only build and run the unit test binary. -CFLAGS ?= -O2 -Iinclude -Wall -Wextra -std=c11 +AR ?= ar +CFLAGS ?= -O2 -std=c11 -Wall -Wextra -Iinclude BUILD_DIR = build -CTEST_PATH = $(BUILD_DIR)/tests/ctest -all: ctest +LIB = $(BUILD_DIR)/libcuc.a +OBJ = $(BUILD_DIR)/src/cuc.o +CTEST = $(BUILD_DIR)/tests/ctest +EXAMPLE = $(BUILD_DIR)/examples/cuc_example -ctest: $(CTEST_PATH) +SRC = src/cuc.c +HDR = include/cuc.h -$(CTEST_PATH): tests/unit_tests.c +all: $(LIB) $(CTEST) $(EXAMPLE) + +lib: $(LIB) + +$(OBJ): $(SRC) $(HDR) mkdir -p $(dir $@) - $(CC) $(CFLAGS) -Iinclude tests/unit_tests.c -o $(CTEST_PATH) + $(CC) $(CFLAGS) -Iinclude -c $(SRC) -o $@ -run: ctest - $(CTEST_PATH) +$(LIB): $(OBJ) + mkdir -p $(dir $@) + $(AR) rcs $@ $(OBJ) -clean: - rm -rf $(BUILD_DIR) +ctest: $(CTEST) + +$(CTEST): tests/unit_tests.c tests/cunit.h $(SRC) $(HDR) + mkdir -p $(dir $@) + $(CC) $(CFLAGS) -Iinclude -Itests tests/unit_tests.c $(SRC) -o $@ + +example: $(EXAMPLE) + +$(EXAMPLE): examples/cuc_example.c $(SRC) $(HDR) + mkdir -p $(dir $@) + $(CC) $(CFLAGS) -Iinclude examples/cuc_example.c $(SRC) -o $@ + +run: $(CTEST) + $(CTEST) coverage-html: - bash tools/coverage_html.sh + bash tools/coverage-html.sh + +clean: + rm -rf $(BUILD_DIR) -.PHONY: all ctest run clean +.PHONY: all lib ctest example run coverage-html clean diff --git a/README.md b/README.md index 329fa00..ba05a99 100644 --- a/README.md +++ b/README.md @@ -1,89 +1,84 @@ -# ProjectName -Project description. -Template repo for minimal embedded C implementations of CCSDS / ECSS standards. +# EmbeddedCUCTime +A minimal, embedded-friendly C library implementing the **CCSDS Unsegmented +Time Code (CUC)** — a pure binary count of seconds and binary fractions of a +second from a defined epoch. + +The library is deliberately small and dependency-free (only ``, +``, ``), uses caller-supplied buffers (no heap), and keeps +its core encode/decode path integer-only so it fits comfortably on +microcontrollers. ## Standards Compliance -- **CCSDS 000.0-X-Y**: +- **CCSDS 301.0-B-4** — *Time Code Formats*, Section 3.2 (CCSDS Unsegmented + Time Code). See [`docs/ccsds_cuc.md`](docs/ccsds_cuc.md) for a field-by-field + summary. ## Features -### Core Protocol Implementation - - -### Design Principles - +- Encode/decode the **P-field** (1 or 2 octets) and **T-field** separately, or + as a combined self-identified code. +- Full format range: 1–7 basic (second) octets, 0–10 fractional octets. +- Both CCSDS 1958 TAI epoch (Level 1) and agency-defined epoch (Level 2). +- Format-independent time value (`cuc_time_t`) using a Q0.64 binary fraction. +- Optional `double` conversion helpers, removable with `-DCUC_NO_FLOAT`. +- Explicit, checked error codes; no dynamic allocation. ## Project Structure ``` -EmbeddedSpacePacket/ +EmbeddedCUCTime/ ├── include/ -│ └── +│ └── cuc.h # Public API ├── src/ -│ └── +│ └── cuc.c # Implementation ├── examples/ -│ └── +│ └── cuc_example.c # Encode/decode demo ├── tests/ │ ├── cunit.h # Minimal test framework │ └── unit_tests.c # Unit tests -├── scripts/ -│ └── coverage_html.sh # Coverage report -├── build/ # Build artifacts +├── docs/ +│ └── ccsds_cuc.md # CUC format reference notes +├── tools/ +│ └── coverage-html.sh # Coverage report helper ├── Makefile └── README.md ``` ## Building -### Build Everything +### Build everything ```bash -make +make # static library, example and test binaries in build/ ``` -Builds the static library, the example binary and the test binary in `build/`. - -### Build Library Only +### Build the library only ```bash -make lib -# Produces: build/ +make lib # produces build/libcuc.a ``` -### Build Example +### Build and run the example ```bash make example -./build/examples/example +./build/examples/cuc_example ``` -### Run Tests +### Run the tests ```bash -make ctest -./build/tests/ctest +make run # or: make ctest && ./build/tests/ctest ``` ### Coverage (HTML) -Requires `gcovr` installed in your system: - -```bash -sudo apt install gcovr -``` - -Generate coverage report: +Requires `gcovr` (`pip install gcovr`): ```bash -make coverage-html -``` - -Output report: - -```bash -build/coverage/index.html +make coverage-html # writes build/coverage/index.html ``` ### Clean @@ -94,59 +89,108 @@ make clean ## Quick Start -### Step 1 - ```c +#include "cuc.h" -``` +/* 4 octets of seconds + 2 octets of fraction, CCSDS 1958 TAI epoch. */ +cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; +cuc_time_t t = cuc_time_from_seconds(1234567.25); -### Step 2 +uint8_t buf[CUC_OCTETS_MAX]; +size_t n = 0; -```c +if (cuc_encode(&t, &fmt, buf, sizeof(buf), &n) == CUC_OK) { + /* buf[0..n-1] holds P-field + T-field: 1E 00 12 D6 87 40 00 */ +} +cuc_format_t out_fmt; +cuc_time_t out; +size_t consumed = 0; +cuc_decode(buf, n, &out_fmt, &out, &consumed); /* out ≈ 1234567.25 s */ ``` -### Step X - +To work with an implicitly-conveyed P-field (structure known from external +metadata), use `cuc_tfield_encode` / `cuc_tfield_decode` with a caller-supplied +`cuc_format_t` and omit the P-field entirely. ## API Reference -### Lifecycle +### Types ```c +typedef enum { CUC_EPOCH_CCSDS = 1, CUC_EPOCH_AGENCY = 2 } cuc_epoch_t; -``` +typedef struct { + cuc_epoch_t epoch; + uint8_t basic_octets; /* 1..7 */ + uint8_t fraction_octets; /* 0..10 */ +} cuc_format_t; -### Building a Packet - -```c +typedef struct { + uint64_t seconds; /* integer seconds since epoch */ + uint64_t fraction; /* binary fraction of a second, Q0.64 */ +} cuc_time_t; +typedef enum { + CUC_OK = 0, CUC_ERR_NULL, CUC_ERR_BUFFER, + CUC_ERR_FORMAT, CUC_ERR_PFIELD_ID, CUC_ERR_UNSUPPORTED +} cuc_status_t; ``` -### Utilities +### Functions ```c - -``` - -### Types - -```c - -``` - -## Memory Usage (Estimated) - -- **Library (stripped)**: -- **Serialization buffer**: -- **No heap usage**: all allocations are caller-supplied - -## CCSDS XXX — Notes - -## Limitations +/* Sizing / validation */ +cuc_status_t cuc_format_validate(const cuc_format_t *fmt); +size_t cuc_pfield_size(const cuc_format_t *fmt); /* 1 or 2 */ +size_t cuc_tfield_size(const cuc_format_t *fmt); /* basic + frac */ +size_t cuc_size(const cuc_format_t *fmt); /* P + T */ + +/* P-field only */ +cuc_status_t cuc_pfield_encode(const cuc_format_t *fmt, uint8_t *buf, + size_t buf_len, size_t *written); +cuc_status_t cuc_pfield_decode(const uint8_t *buf, size_t buf_len, + cuc_format_t *fmt, size_t *consumed); + +/* T-field only (implicit P-field) */ +cuc_status_t cuc_tfield_encode(const cuc_time_t *time, const cuc_format_t *fmt, + uint8_t *buf, size_t buf_len, size_t *written); +cuc_status_t cuc_tfield_decode(const uint8_t *buf, size_t buf_len, + const cuc_format_t *fmt, cuc_time_t *time, + size_t *consumed); + +/* Combined self-identified code (P-field + T-field) */ +cuc_status_t cuc_encode(const cuc_time_t *time, const cuc_format_t *fmt, + uint8_t *buf, size_t buf_len, size_t *written); +cuc_status_t cuc_decode(const uint8_t *buf, size_t buf_len, cuc_format_t *fmt, + cuc_time_t *time, size_t *consumed); + +/* Convenience (omitted with -DCUC_NO_FLOAT) */ +double cuc_time_to_seconds(const cuc_time_t *time); +cuc_time_t cuc_time_from_seconds(double seconds); +``` + +## Memory Usage + +- **No heap usage**: all buffers are caller-supplied. +- **Largest CUC code**: `CUC_OCTETS_MAX` = 19 octets (2 P-field + 17 T-field). +- **State**: `cuc_time_t` and `cuc_format_t` are small plain structs. + +## Notes and Limitations + +- CUC is **not UTC-based**; leap-second corrections do not apply (use CDS/CCS + for UTC-based time — not yet implemented here). +- The fractional value is stored to 64 bits (Q0.64). Encodings that request + more than 8 fractional octets carry those extra low octets as zero. +- Integer seconds fit in `uint64_t`; a field configured for fewer octets rolls + over modulo 256 per octet, exactly as the standard specifies. +- This library implements the CUC format only. CDS, CCS and ASCII time codes + from CCSDS 301.0-B-4 are out of scope for this initial version. ## References +- CCSDS 301.0-B-4, *Time Code Formats*, Blue Book, Issue 4, November 2010. + ## License -See LICENSE file. \ No newline at end of file +See the [LICENSE](LICENSE) file. diff --git a/docs/ccsds_cuc.md b/docs/ccsds_cuc.md new file mode 100644 index 0000000..70a7e95 --- /dev/null +++ b/docs/ccsds_cuc.md @@ -0,0 +1,72 @@ +# CCSDS Unsegmented Time Code (CUC) + +Reference notes for the CUC implementation in this repository. Based on +**CCSDS 301.0-B-4, *Time Code Formats*, Section 3.2** (Blue Book, November 2010). + +## Overview + +A CUC time code is a *pure binary count* of a basic time unit (the second) +and an optional binary fraction of that unit, measured from a defined epoch. +Because it is unsegmented and continuous (no discontinuities), arithmetic on +time differences can be performed directly on the encoded value — which is +what makes it well suited to spacecraft-clock and time-difference computations. + +The code is **not UTC-based**; leap-second corrections do not apply. + +A time code is a **P-field** (preamble, optional) followed by a **T-field** +(the time data). Both are an integral number of octets. Bit 0 is the most +significant bit and the first transmitted bit (CCSDS 301.0-B-4, 1.5). + +## T-field + +| Part | Octets | Meaning | +|---------------|--------|--------------------------------------------------| +| Basic time | 1..7 | Integer count of seconds since the epoch (MSB first) | +| Fractional time | 0..10 | Binary fraction of a second (MSB = weight 2⁻⁸ first) | + +Each octet is a counter that rolls over modulo 256, cascaded with its +neighbours. The value increases monotonically without reversion. + +The CCSDS-recommended epoch is **1958 January 1 (TAI)** with the second as the +basic unit, giving a Level 1 time code. An agency-defined epoch is also allowed +(Level 2). + +## P-field + +### Octet 1 (mandatory when the P-field is explicit) + +| Bit(s) | Field | Values | +|--------|------------------------------|--------| +| 0 | Extension flag | 0 = last octet, 1 = octet 2 follows | +| 1–3 | Time code identification | 001 = 1958 epoch (Level 1), 010 = agency epoch (Level 2) | +| 4–5 | Number of basic octets − 1 | 0..3 → 1..4 basic octets | +| 6–7 | Number of fractional octets | 0..3 | + +### Octet 2 (present only when the octet 1 extension flag is 1) + +| Bit(s) | Field | Values | +|--------|-----------------------------------------|--------| +| 0 | Extension flag | 0 = last octet | +| 1–2 | Additional basic octets (added to oct 1) | 0..3 | +| 3–5 | Additional fractional octets (added to oct 1) | 0..7 | +| 6–7 | Reserved for mission definition | 0 | + +The library emits octet 2 automatically whenever the basic octet count exceeds +4 or the fractional octet count exceeds 3. + +## Implementation notes + +- The decoded value (`cuc_time_t`) stores the fraction as a format-independent + **Q0.64** binary fraction (`fraction / 2^64` seconds), so one value can be + encoded into any fractional resolution. Resolution below 2⁻⁶⁴ s (i.e. beyond + 8 fractional octets) is not representable and is treated as zero. +- The core encode/decode path is integer-only. The `double` helpers + (`cuc_time_to_seconds`, `cuc_time_from_seconds`) can be excluded with + `-DCUC_NO_FLOAT`. +- The P-field is only two octets in this standard; a set extension flag on + octet 2 (a hypothetical third octet) is rejected with `CUC_ERR_UNSUPPORTED`. + +## Reference + +Consultative Committee for Space Data Systems, *Time Code Formats*, +CCSDS 301.0-B-4, Blue Book, Issue 4, November 2010. diff --git a/examples/cuc_example.c b/examples/cuc_example.c new file mode 100644 index 0000000..1bf1513 --- /dev/null +++ b/examples/cuc_example.c @@ -0,0 +1,50 @@ +/** + * @file cuc_example.c + * @brief Minimal usage example for the CUC time code library + * + * Encodes a time value into a self-identified CUC code and decodes it back, + * printing the intermediate octets. Demonstrates CCSDS 301.0-B-4, Section 3.2. + * + * OpenSpaceCode — https://github.com/OpenSpaceCode + */ + +#include "cuc.h" + +#include + +int main(void) +{ + /* 4 octets of seconds, 2 octets of fraction, CCSDS 1958 TAI epoch. */ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_time_t time = cuc_time_from_seconds(1234567.25); + + uint8_t buf[CUC_OCTETS_MAX]; + size_t written = 0; + if (cuc_encode(&time, &fmt, buf, sizeof(buf), &written) != CUC_OK) + { + fprintf(stderr, "encode failed\n"); + return 1; + } + + printf("encoded %zu octets:", written); + for (size_t i = 0; i < written; i++) + { + printf(" %02X", buf[i]); + } + printf("\n"); + + cuc_format_t decoded_fmt; + cuc_time_t decoded; + size_t consumed = 0; + if (cuc_decode(buf, written, &decoded_fmt, &decoded, &consumed) != CUC_OK) + { + fprintf(stderr, "decode failed\n"); + return 1; + } + + printf("decoded: %.3f s (%u basic + %u fractional octets)\n", + cuc_time_to_seconds(&decoded), + decoded_fmt.basic_octets, + decoded_fmt.fraction_octets); + return 0; +} diff --git a/include/cuc.h b/include/cuc.h new file mode 100644 index 0000000..2fa459b --- /dev/null +++ b/include/cuc.h @@ -0,0 +1,195 @@ +/** + * @file cuc.h + * @brief CCSDS Unsegmented Time Code (CUC) encoder/decoder + * + * Implements the CCSDS Unsegmented Time Code (CUC) as per + * CCSDS 301.0-B-4 (Time Code Formats), Section 3.2. + * See also: docs/ccsds_cuc.md + * + * A CUC time code is a pure binary count of a basic time unit (the second) + * and a binary fraction of that unit, measured from a defined epoch. It is + * carried in a TIME SPECIFICATION FIELD (T-field) that may be preceded by an + * explicit TIME CODE PREAMBLE FIELD (P-field) describing its structure. + * + * OpenSpaceCode — https://github.com/OpenSpaceCode + */ + +#ifndef CUC_H +#define CUC_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* ------------------------------------------------------------------------- + * Constants + * + * The P-field can describe up to 4 octets of basic time in octet 1 plus 3 + * more in octet 2, and up to 3 octets of fractional time in octet 1 plus 7 + * more in octet 2 (CCSDS 301.0-B-4, 3.2.2). + * ---------------------------------------------------------------------- */ + +#define CUC_BASIC_OCTETS_MIN 1 +#define CUC_BASIC_OCTETS_MAX 7 /* 4 (P-field octet 1) + 3 (P-field octet 2) */ +#define CUC_FRACTION_OCTETS_MIN 0 +#define CUC_FRACTION_OCTETS_MAX 10 /* 3 (P-field octet 1) + 7 (P-field octet 2) */ + +#define CUC_PFIELD_OCTETS_MAX 2 +#define CUC_TFIELD_OCTETS_MAX (CUC_BASIC_OCTETS_MAX + CUC_FRACTION_OCTETS_MAX) /* 17 */ +#define CUC_OCTETS_MAX (CUC_PFIELD_OCTETS_MAX + CUC_TFIELD_OCTETS_MAX) /* 19 */ + +/* ------------------------------------------------------------------------- + * Types + * ---------------------------------------------------------------------- */ + +/** + * Result codes returned by the CUC functions. + */ +typedef enum +{ + CUC_OK = 0, /* success */ + CUC_ERR_NULL, /* a required pointer argument was NULL */ + CUC_ERR_BUFFER, /* the supplied buffer was too small */ + CUC_ERR_FORMAT, /* the format has out-of-range octet counts */ + CUC_ERR_PFIELD_ID, /* the P-field time code identification is not a CUC id */ + CUC_ERR_UNSUPPORTED, /* the P-field requests more octets than this library supports */ +} cuc_status_t; + +/** + * Epoch / time-code-identification of a CUC code. + * + * The enumerator values equal the P-field time code identification field + * (bits 1-3) so they map directly onto the encoded octet. + */ +typedef enum +{ + CUC_EPOCH_CCSDS = 1, /* 1958 January 1 (TAI), Level 1 time code (id = 001) */ + CUC_EPOCH_AGENCY = 2, /* Agency-defined epoch, Level 2 time code (id = 010) */ +} cuc_epoch_t; + +/** + * Structure of a CUC time code: how many octets encode the integer seconds + * and how many encode the binary fraction, plus which epoch is in use. + */ +typedef struct +{ + cuc_epoch_t epoch; /* epoch / time code identification */ + uint8_t basic_octets; /* octets of basic time unit (seconds), 1..7 */ + uint8_t fraction_octets; /* octets of fractional time unit, 0..10 */ +} cuc_format_t; + +/** + * A decoded CUC time value, independent of the encoded format. + * + * The fraction is stored as an unsigned Q0.64 binary fraction of a second, + * i.e. the fractional part in seconds equals fraction / 2^64. This keeps the + * core codec integer-only and lets the same value be encoded into any + * fractional resolution. Encodings using more than 8 fractional octets carry + * resolution below 2^-64 s, which is not representable here and is treated as + * zero in those low octets. + */ +typedef struct +{ + uint64_t seconds; /* integer basic time units (seconds) since the epoch */ + uint64_t fraction; /* binary fraction of a second, Q0.64 */ +} cuc_time_t; + +/* ------------------------------------------------------------------------- + * Function Declarations + * ---------------------------------------------------------------------- */ + +/** + * Validate that a format has octet counts within the ranges the standard + * allows. Returns CUC_OK when valid, CUC_ERR_FORMAT otherwise. + */ +cuc_status_t cuc_format_validate(const cuc_format_t *fmt); + +/** Number of P-field octets a format needs (1 or 2). */ +size_t cuc_pfield_size(const cuc_format_t *fmt); + +/** Number of T-field octets a format needs (basic + fractional). */ +size_t cuc_tfield_size(const cuc_format_t *fmt); + +/** Total octets of a self-identified code (P-field + T-field). */ +size_t cuc_size(const cuc_format_t *fmt); + +/** + * Encode the P-field (preamble) describing @p fmt into @p buf. + * @p written receives the number of octets produced (1 or 2). + */ +cuc_status_t cuc_pfield_encode(const cuc_format_t *fmt, + uint8_t *buf, + size_t buf_len, + size_t *written); + +/** + * Decode a P-field from @p buf into @p fmt. + * @p consumed receives the number of octets read (1 or 2). + */ +cuc_status_t cuc_pfield_decode(const uint8_t *buf, + size_t buf_len, + cuc_format_t *fmt, + size_t *consumed); + +/** + * Encode only the T-field (time data) for @p time using @p fmt into @p buf. + * Use this when the P-field is conveyed implicitly (external metadata). + * @p written receives the number of octets produced. + */ +cuc_status_t cuc_tfield_encode(const cuc_time_t *time, + const cuc_format_t *fmt, + uint8_t *buf, + size_t buf_len, + size_t *written); + +/** + * Decode only the T-field from @p buf using the caller-supplied @p fmt. + * @p consumed receives the number of octets read. + */ +cuc_status_t cuc_tfield_decode(const uint8_t *buf, + size_t buf_len, + const cuc_format_t *fmt, + cuc_time_t *time, + size_t *consumed); + +/** + * Encode a self-identified CUC code: P-field followed by T-field. + * @p written receives the total number of octets produced. + */ +cuc_status_t cuc_encode(const cuc_time_t *time, + const cuc_format_t *fmt, + uint8_t *buf, + size_t buf_len, + size_t *written); + +/** + * Decode a self-identified CUC code: parse the P-field, then the T-field. + * The recovered structure is written to @p fmt and the value to @p time. + * @p consumed receives the total number of octets read. + */ +cuc_status_t cuc_decode(const uint8_t *buf, + size_t buf_len, + cuc_format_t *fmt, + cuc_time_t *time, + size_t *consumed); + +#ifndef CUC_NO_FLOAT +/** + * Convenience conversions between a CUC time and seconds as a double. + * Compile with -DCUC_NO_FLOAT to omit these on targets without an FPU; + * the core codec above does not use floating point. + */ +double cuc_time_to_seconds(const cuc_time_t *time); +cuc_time_t cuc_time_from_seconds(double seconds); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* CUC_H */ diff --git a/src/cuc.c b/src/cuc.c new file mode 100644 index 0000000..bb3b42a --- /dev/null +++ b/src/cuc.c @@ -0,0 +1,344 @@ +/** + * @file cuc.c + * @brief CCSDS Unsegmented Time Code (CUC) encoder/decoder + * + * Implements the CCSDS Unsegmented Time Code (CUC) as per + * CCSDS 301.0-B-4 (Time Code Formats), Section 3.2. + * See also: docs/ccsds_cuc.md + * + * OpenSpaceCode — https://github.com/OpenSpaceCode + */ + +#include "cuc.h" + +/* Bit-0-is-MSB masks for P-field octet 1 (CCSDS 301.0-B-4, 3.2.2). */ +#define CUC_P1_EXTENSION 0x80u /* bit 0 */ +#define CUC_P1_ID_SHIFT 4 /* bits 1-3 */ +#define CUC_P1_ID_MASK 0x07u +#define CUC_P1_BASIC_SHIFT 2 /* bits 4-5: (basic octets - 1) */ +#define CUC_P1_BASIC_MASK 0x03u +#define CUC_P1_FRAC_MASK 0x03u /* bits 6-7: fractional octets */ + +/* Masks for P-field octet 2. */ +#define CUC_P2_EXTENSION 0x80u /* bit 0 */ +#define CUC_P2_ADD_BASIC_SHIFT 5 /* bits 1-2 */ +#define CUC_P2_ADD_BASIC_MASK 0x03u +#define CUC_P2_ADD_FRAC_SHIFT 2 /* bits 3-5 */ +#define CUC_P2_ADD_FRAC_MASK 0x07u + +/* Octet 1 alone can describe at most 4 basic and 3 fractional octets. */ +#define CUC_P1_BASIC_MAX 4 +#define CUC_P1_FRAC_MAX 3 + +/* Fractional resolution beyond 8 octets falls below the Q0.64 representation. */ +#define CUC_FRACTION_STORED_OCTETS 8 + +cuc_status_t cuc_format_validate(const cuc_format_t *fmt) +{ + if (fmt == NULL) + { + return CUC_ERR_NULL; + } + if (fmt->epoch != CUC_EPOCH_CCSDS && fmt->epoch != CUC_EPOCH_AGENCY) + { + return CUC_ERR_FORMAT; + } + if (fmt->basic_octets < CUC_BASIC_OCTETS_MIN || fmt->basic_octets > CUC_BASIC_OCTETS_MAX) + { + return CUC_ERR_FORMAT; + } + if (fmt->fraction_octets > CUC_FRACTION_OCTETS_MAX) + { + return CUC_ERR_FORMAT; + } + return CUC_OK; +} + +static bool cuc_format_is_extended(const cuc_format_t *fmt) +{ + return fmt->basic_octets > CUC_P1_BASIC_MAX || fmt->fraction_octets > CUC_P1_FRAC_MAX; +} + +size_t cuc_pfield_size(const cuc_format_t *fmt) +{ + if (fmt == NULL) + { + return 0; + } + return cuc_format_is_extended(fmt) ? 2u : 1u; +} + +size_t cuc_tfield_size(const cuc_format_t *fmt) +{ + if (fmt == NULL) + { + return 0; + } + return (size_t)fmt->basic_octets + (size_t)fmt->fraction_octets; +} + +size_t cuc_size(const cuc_format_t *fmt) +{ + return cuc_pfield_size(fmt) + cuc_tfield_size(fmt); +} + +cuc_status_t cuc_pfield_encode(const cuc_format_t *fmt, + uint8_t *buf, + size_t buf_len, + size_t *written) +{ + cuc_status_t status = cuc_format_validate(fmt); + if (status != CUC_OK) + { + return status; + } + if (buf == NULL || written == NULL) + { + return CUC_ERR_NULL; + } + + bool extended = cuc_format_is_extended(fmt); + size_t size = extended ? 2u : 1u; + if (buf_len < size) + { + return CUC_ERR_BUFFER; + } + + uint8_t oct1_basic = extended ? CUC_P1_BASIC_MAX : fmt->basic_octets; + uint8_t oct1_frac = + fmt->fraction_octets > CUC_P1_FRAC_MAX ? CUC_P1_FRAC_MAX : fmt->fraction_octets; + buf[0] = (uint8_t)((extended ? CUC_P1_EXTENSION : 0u) | + (((uint8_t)fmt->epoch & CUC_P1_ID_MASK) << CUC_P1_ID_SHIFT) | + (((oct1_basic - 1u) & CUC_P1_BASIC_MASK) << CUC_P1_BASIC_SHIFT) | + (oct1_frac & CUC_P1_FRAC_MASK)); + + if (extended) + { + uint8_t add_basic = (uint8_t)(fmt->basic_octets - oct1_basic); + uint8_t add_frac = (uint8_t)(fmt->fraction_octets - oct1_frac); + buf[1] = (uint8_t)(((add_basic & CUC_P2_ADD_BASIC_MASK) << CUC_P2_ADD_BASIC_SHIFT) | + ((add_frac & CUC_P2_ADD_FRAC_MASK) << CUC_P2_ADD_FRAC_SHIFT)); + } + + *written = size; + return CUC_OK; +} + +cuc_status_t cuc_pfield_decode(const uint8_t *buf, + size_t buf_len, + cuc_format_t *fmt, + size_t *consumed) +{ + if (buf == NULL || fmt == NULL || consumed == NULL) + { + return CUC_ERR_NULL; + } + if (buf_len < 1u) + { + return CUC_ERR_BUFFER; + } + + uint8_t oct1 = buf[0]; + uint8_t id = (oct1 >> CUC_P1_ID_SHIFT) & CUC_P1_ID_MASK; + if (id != CUC_EPOCH_CCSDS && id != CUC_EPOCH_AGENCY) + { + return CUC_ERR_PFIELD_ID; + } + + fmt->epoch = (cuc_epoch_t)id; + fmt->basic_octets = (uint8_t)(((oct1 >> CUC_P1_BASIC_SHIFT) & CUC_P1_BASIC_MASK) + 1u); + fmt->fraction_octets = (uint8_t)(oct1 & CUC_P1_FRAC_MASK); + + if ((oct1 & CUC_P1_EXTENSION) == 0u) + { + *consumed = 1u; + return CUC_OK; + } + if (buf_len < 2u) + { + return CUC_ERR_BUFFER; + } + + uint8_t oct2 = buf[1]; + /* A third P-field octet would be signalled here; this library defines only two. */ + if ((oct2 & CUC_P2_EXTENSION) != 0u) + { + return CUC_ERR_UNSUPPORTED; + } + fmt->basic_octets += (uint8_t)((oct2 >> CUC_P2_ADD_BASIC_SHIFT) & CUC_P2_ADD_BASIC_MASK); + fmt->fraction_octets += (uint8_t)((oct2 >> CUC_P2_ADD_FRAC_SHIFT) & CUC_P2_ADD_FRAC_MASK); + *consumed = 2u; + return CUC_OK; +} + +cuc_status_t cuc_tfield_encode(const cuc_time_t *time, + const cuc_format_t *fmt, + uint8_t *buf, + size_t buf_len, + size_t *written) +{ + cuc_status_t status = cuc_format_validate(fmt); + if (status != CUC_OK) + { + return status; + } + if (time == NULL || buf == NULL || written == NULL) + { + return CUC_ERR_NULL; + } + + size_t size = cuc_tfield_size(fmt); + if (buf_len < size) + { + return CUC_ERR_BUFFER; + } + + /* Basic time: most significant octet first. Octets above bit 56 hold the + * high part of a 7-octet count; the field naturally rolls over mod 256^n. */ + for (uint8_t i = 0; i < fmt->basic_octets; i++) + { + unsigned shift = (unsigned)(fmt->basic_octets - 1u - i) * 8u; + buf[i] = (uint8_t)(time->seconds >> shift); + } + + /* Fractional time: most significant octet (weight 2^-8) first. */ + for (uint8_t j = 0; j < fmt->fraction_octets; j++) + { + uint8_t octet = 0; + if (j < CUC_FRACTION_STORED_OCTETS) + { + octet = (uint8_t)(time->fraction >> (56u - (unsigned)j * 8u)); + } + buf[fmt->basic_octets + j] = octet; + } + + *written = size; + return CUC_OK; +} + +cuc_status_t cuc_tfield_decode(const uint8_t *buf, + size_t buf_len, + const cuc_format_t *fmt, + cuc_time_t *time, + size_t *consumed) +{ + cuc_status_t status = cuc_format_validate(fmt); + if (status != CUC_OK) + { + return status; + } + if (buf == NULL || time == NULL || consumed == NULL) + { + return CUC_ERR_NULL; + } + + size_t size = cuc_tfield_size(fmt); + if (buf_len < size) + { + return CUC_ERR_BUFFER; + } + + uint64_t seconds = 0; + for (uint8_t i = 0; i < fmt->basic_octets; i++) + { + seconds = (seconds << 8) | buf[i]; + } + + uint64_t fraction = 0; + for (uint8_t j = 0; j < fmt->fraction_octets && j < CUC_FRACTION_STORED_OCTETS; j++) + { + fraction |= (uint64_t)buf[fmt->basic_octets + j] << (56u - (unsigned)j * 8u); + } + + time->seconds = seconds; + time->fraction = fraction; + *consumed = size; + return CUC_OK; +} + +cuc_status_t cuc_encode(const cuc_time_t *time, + const cuc_format_t *fmt, + uint8_t *buf, + size_t buf_len, + size_t *written) +{ + if (written == NULL) + { + return CUC_ERR_NULL; + } + + size_t p_len = 0; + cuc_status_t status = cuc_pfield_encode(fmt, buf, buf_len, &p_len); + if (status != CUC_OK) + { + return status; + } + + size_t t_len = 0; + status = cuc_tfield_encode(time, fmt, buf + p_len, buf_len - p_len, &t_len); + if (status != CUC_OK) + { + return status; + } + + *written = p_len + t_len; + return CUC_OK; +} + +cuc_status_t cuc_decode(const uint8_t *buf, + size_t buf_len, + cuc_format_t *fmt, + cuc_time_t *time, + size_t *consumed) +{ + if (consumed == NULL) + { + return CUC_ERR_NULL; + } + + size_t p_len = 0; + cuc_status_t status = cuc_pfield_decode(buf, buf_len, fmt, &p_len); + if (status != CUC_OK) + { + return status; + } + + size_t t_len = 0; + status = cuc_tfield_decode(buf + p_len, buf_len - p_len, fmt, time, &t_len); + if (status != CUC_OK) + { + return status; + } + + *consumed = p_len + t_len; + return CUC_OK; +} + +#ifndef CUC_NO_FLOAT + +/* 2^64 as a double, for converting the Q0.64 fraction to/from seconds. */ +# define CUC_TWO_POW_64 18446744073709551616.0 + +double cuc_time_to_seconds(const cuc_time_t *time) +{ + if (time == NULL) + { + return 0.0; + } + return (double)time->seconds + (double)time->fraction / CUC_TWO_POW_64; +} + +cuc_time_t cuc_time_from_seconds(double seconds) +{ + cuc_time_t time = {0, 0}; + if (seconds < 0.0) + { + return time; + } + time.seconds = (uint64_t)seconds; + double frac = seconds - (double)time.seconds; + time.fraction = (uint64_t)(frac * CUC_TWO_POW_64); + return time; +} + +#endif /* CUC_NO_FLOAT */ diff --git a/tests/unit_tests.c b/tests/unit_tests.c index 8ee320b..ee532a1 100644 --- a/tests/unit_tests.c +++ b/tests/unit_tests.c @@ -1,21 +1,157 @@ +/** + * @file unit_tests.c + * @brief Unit tests for the CCSDS Unsegmented Time Code (CUC) library + * + * Exercises the P-field / T-field codecs against the encodings defined in + * CCSDS 301.0-B-4 (Time Code Formats), Section 3.2. + * + * OpenSpaceCode — https://github.com/OpenSpaceCode + */ + +#include "cuc.h" #include "cunit.h" -#include -#include -#include -static int test_case_0(void) { +#include + +/* A common configuration: 4 basic octets + 2 fractional octets, CCSDS epoch. + * P-field octet 1 = ext(0) id(001) basic-1(011) frac(10) = 0001 1110 = 0x1E. */ +static int test_pfield_single_octet(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + uint8_t buf[2] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_pfield_encode(&fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(1, (int)written); + ASSERT_EQ_INT(0x1E, buf[0]); + + cuc_format_t out = {0, 0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_pfield_decode(buf, written, &out, &consumed)); + ASSERT_EQ_INT(1, (int)consumed); + ASSERT_EQ_INT(CUC_EPOCH_CCSDS, out.epoch); + ASSERT_EQ_INT(4, out.basic_octets); + ASSERT_EQ_INT(2, out.fraction_octets); + return 0; +} + +/* 5 basic + 4 fractional octets forces a second P-field octet. + * Octet 1 = ext(1) id(001) basic-1(011) frac(11) = 1001 1111 = 0x9F. + * Octet 2 = ext(0) add_basic(01) add_frac(001) rsvd(00) = 0010 0100 = 0x24. */ +static int test_pfield_extended(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 5, 4}; + uint8_t buf[2] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_pfield_encode(&fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(2, (int)written); + ASSERT_EQ_INT(0x9F, buf[0]); + ASSERT_EQ_INT(0x24, buf[1]); + + cuc_format_t out = {0, 0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_pfield_decode(buf, written, &out, &consumed)); + ASSERT_EQ_INT(2, (int)consumed); + ASSERT_EQ_INT(5, out.basic_octets); + ASSERT_EQ_INT(4, out.fraction_octets); + return 0; +} + +static int test_tfield_roundtrip(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_time_t in = {0x12345678u, 0x8000000000000000u}; /* 0.5 s fraction */ + uint8_t buf[CUC_TFIELD_OCTETS_MAX] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_tfield_encode(&in, &fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(6, (int)written); + + uint8_t expected[6] = {0x12, 0x34, 0x56, 0x78, 0x80, 0x00}; + ASSERT_EQ_MEM(expected, buf, 6); + + cuc_time_t out = {0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_tfield_decode(buf, written, &fmt, &out, &consumed)); + ASSERT_EQ_INT(6, (int)consumed); + ASSERT_TRUE(out.seconds == in.seconds); + ASSERT_TRUE(out.fraction == in.fraction); + return 0; +} + +static int test_full_roundtrip(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_time_t in = {0x12345678u, 0x8000000000000000u}; + uint8_t buf[CUC_OCTETS_MAX] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_encode(&in, &fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(7, (int)written); /* 1 P-field + 6 T-field */ + ASSERT_EQ_INT(0x1E, buf[0]); - return 0; + cuc_format_t out_fmt = {0, 0, 0}; + cuc_time_t out = {0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_decode(buf, written, &out_fmt, &out, &consumed)); + ASSERT_EQ_INT(7, (int)consumed); + ASSERT_EQ_INT(4, out_fmt.basic_octets); + ASSERT_EQ_INT(2, out_fmt.fraction_octets); + ASSERT_TRUE(out.seconds == in.seconds); + ASSERT_TRUE(out.fraction == in.fraction); + return 0; } -int main(void) { - RUN_TEST(test_case_0); +static int test_error_handling(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_time_t t = {1, 0}; + uint8_t buf[3] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_encode(&t, &fmt, buf, sizeof(buf), NULL)); + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_encode(&t, &fmt, buf, sizeof(buf), &written)); - if (cunit_overall_failures == 0) { - printf("ALL TESTS PASSED\n"); + cuc_format_t bad = {CUC_EPOCH_CCSDS, 0, 0}; /* basic_octets must be >= 1 */ + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_format_validate(&bad)); + + uint8_t bad_id[1] = {0x00}; /* id 000 is reserved, not CUC */ + cuc_format_t out = {0, 0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_ERR_PFIELD_ID, cuc_pfield_decode(bad_id, 1, &out, &consumed)); return 0; - } else { +} + +#ifndef CUC_NO_FLOAT +static int test_seconds_conversion(void) +{ + cuc_time_t t = cuc_time_from_seconds(1.5); + ASSERT_TRUE(t.seconds == 1u); + ASSERT_TRUE(t.fraction == 0x8000000000000000u); + + double s = cuc_time_to_seconds(&t); + ASSERT_TRUE(s > 1.4999 && s < 1.5001); + return 0; +} +#endif + +int main(void) +{ + RUN_TEST(test_pfield_single_octet); + RUN_TEST(test_pfield_extended); + RUN_TEST(test_tfield_roundtrip); + RUN_TEST(test_full_roundtrip); + RUN_TEST(test_error_handling); +#ifndef CUC_NO_FLOAT + RUN_TEST(test_seconds_conversion); +#endif + + if (cunit_overall_failures == 0) + { + printf("ALL TESTS PASSED\n"); + return 0; + } printf("%d TEST(S) FAILED\n", cunit_overall_failures); return 1; - } -} \ No newline at end of file +} From 714c1ab2e0fae4d3831d8cc1498c6fd71dc9395c Mon Sep 17 00:00:00 2001 From: Michal Pogorzelec Date: Thu, 23 Jul 2026 18:22:02 +0200 Subject: [PATCH 2/8] update test structure --- Makefile | 6 +- tests/test_cuc.c | 155 ++++++++++++++++++++++++++++++++++++++++ tests/test_runners.h | 12 ++++ tests/unit_tests.c | 163 ++++--------------------------------------- 4 files changed, 184 insertions(+), 152 deletions(-) create mode 100644 tests/test_cuc.c create mode 100644 tests/test_runners.h diff --git a/Makefile b/Makefile index 9d582fd..509179b 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ CC ?= cc AR ?= ar -CFLAGS ?= -O2 -std=c11 -Wall -Wextra -Iinclude +CFLAGS ?= -O2 -std=c99 -Wall -Wextra -Iinclude BUILD_DIR = build LIB = $(BUILD_DIR)/libcuc.a @@ -25,9 +25,9 @@ $(LIB): $(OBJ) ctest: $(CTEST) -$(CTEST): tests/unit_tests.c tests/cunit.h $(SRC) $(HDR) +$(CTEST): tests/unit_tests.c tests/test_cuc.c tests/cunit.h tests/test_runners.h $(SRC) $(HDR) mkdir -p $(dir $@) - $(CC) $(CFLAGS) -Iinclude -Itests tests/unit_tests.c $(SRC) -o $@ + $(CC) $(CFLAGS) -Iinclude -Itests tests/unit_tests.c tests/test_cuc.c $(SRC) -o $@ example: $(EXAMPLE) diff --git a/tests/test_cuc.c b/tests/test_cuc.c new file mode 100644 index 0000000..13ff453 --- /dev/null +++ b/tests/test_cuc.c @@ -0,0 +1,155 @@ +/** + * @file test_cuc.c + * @brief Unit tests for the CCSDS Unsegmented Time Code (CUC) library + * + * Exercises the P-field / T-field codecs against the encodings defined in + * CCSDS 301.0-B-4 (Time Code Formats), Section 3.2. + * + * OpenSpaceCode — https://github.com/OpenSpaceCode + */ + +#include "../include/cuc.h" +#include "cunit.h" +#include "test_runners.h" + +#include + +/* A common configuration: 4 basic octets + 2 fractional octets, CCSDS epoch. + * P-field octet 1 = ext(0) id(001) basic-1(011) frac(10) = 0001 1110 = 0x1E. */ +static int test_pfield_single_octet(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + uint8_t buf[2] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_pfield_encode(&fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(1, (int)written); + ASSERT_EQ_INT(0x1E, buf[0]); + + cuc_format_t out = {0, 0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_pfield_decode(buf, written, &out, &consumed)); + ASSERT_EQ_INT(1, (int)consumed); + ASSERT_EQ_INT(CUC_EPOCH_CCSDS, out.epoch); + ASSERT_EQ_INT(4, out.basic_octets); + ASSERT_EQ_INT(2, out.fraction_octets); + return 0; +} + +/* 5 basic + 4 fractional octets forces a second P-field octet. + * Octet 1 = ext(1) id(001) basic-1(011) frac(11) = 1001 1111 = 0x9F. + * Octet 2 = ext(0) add_basic(01) add_frac(001) rsvd(00) = 0010 0100 = 0x24. */ +static int test_pfield_extended(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 5, 4}; + uint8_t buf[2] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_pfield_encode(&fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(2, (int)written); + ASSERT_EQ_INT(0x9F, buf[0]); + ASSERT_EQ_INT(0x24, buf[1]); + + cuc_format_t out = {0, 0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_pfield_decode(buf, written, &out, &consumed)); + ASSERT_EQ_INT(2, (int)consumed); + ASSERT_EQ_INT(5, out.basic_octets); + ASSERT_EQ_INT(4, out.fraction_octets); + return 0; +} + +static int test_tfield_roundtrip(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_time_t in = {0x12345678u, 0x8000000000000000u}; /* 0.5 s fraction */ + uint8_t buf[CUC_TFIELD_OCTETS_MAX] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_tfield_encode(&in, &fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(6, (int)written); + + uint8_t expected[6] = {0x12, 0x34, 0x56, 0x78, 0x80, 0x00}; + ASSERT_EQ_MEM(expected, buf, 6); + + cuc_time_t out = {0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_tfield_decode(buf, written, &fmt, &out, &consumed)); + ASSERT_EQ_INT(6, (int)consumed); + ASSERT_TRUE(out.seconds == in.seconds); + ASSERT_TRUE(out.fraction == in.fraction); + return 0; +} + +static int test_full_roundtrip(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_time_t in = {0x12345678u, 0x8000000000000000u}; + uint8_t buf[CUC_OCTETS_MAX] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_encode(&in, &fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(7, (int)written); /* 1 P-field + 6 T-field */ + ASSERT_EQ_INT(0x1E, buf[0]); + + cuc_format_t out_fmt = {0, 0, 0}; + cuc_time_t out = {0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_decode(buf, written, &out_fmt, &out, &consumed)); + ASSERT_EQ_INT(7, (int)consumed); + ASSERT_EQ_INT(4, out_fmt.basic_octets); + ASSERT_EQ_INT(2, out_fmt.fraction_octets); + ASSERT_TRUE(out.seconds == in.seconds); + ASSERT_TRUE(out.fraction == in.fraction); + return 0; +} + +static int test_error_handling(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_time_t t = {1, 0}; + uint8_t buf[3] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_encode(&t, &fmt, buf, sizeof(buf), NULL)); + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_encode(&t, &fmt, buf, sizeof(buf), &written)); + + cuc_format_t bad = {CUC_EPOCH_CCSDS, 0, 0}; /* basic_octets must be >= 1 */ + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_format_validate(&bad)); + + uint8_t bad_id[1] = {0x00}; /* id 000 is reserved, not CUC */ + cuc_format_t out = {0, 0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_ERR_PFIELD_ID, cuc_pfield_decode(bad_id, 1, &out, &consumed)); + return 0; +} + +#ifndef CUC_NO_FLOAT +static int test_seconds_conversion(void) +{ + cuc_time_t t = cuc_time_from_seconds(1.5); + ASSERT_TRUE(t.seconds == 1u); + ASSERT_TRUE(t.fraction == 0x8000000000000000u); + + double s = cuc_time_to_seconds(&t); + ASSERT_TRUE(s > 1.4999 && s < 1.5001); + return 0; +} +#endif + +test_result_t test_cuc_run_all(void) +{ + RUN_TEST(test_pfield_single_octet); + RUN_TEST(test_pfield_extended); + RUN_TEST(test_tfield_roundtrip); + RUN_TEST(test_full_roundtrip); + RUN_TEST(test_error_handling); +#ifndef CUC_NO_FLOAT + RUN_TEST(test_seconds_conversion); +#endif + + test_result_t r; + r.total = cunit_total_tests; + r.passed = cunit_total_tests - cunit_overall_failures; + return r; +} diff --git a/tests/test_runners.h b/tests/test_runners.h new file mode 100644 index 0000000..49ddebb --- /dev/null +++ b/tests/test_runners.h @@ -0,0 +1,12 @@ +#ifndef TEST_RUNNERS_H +#define TEST_RUNNERS_H + +typedef struct +{ + int passed; + int total; +} test_result_t; + +test_result_t test_cuc_run_all(void); + +#endif /* TEST_RUNNERS_H */ diff --git a/tests/unit_tests.c b/tests/unit_tests.c index ee532a1..b67fe55 100644 --- a/tests/unit_tests.c +++ b/tests/unit_tests.c @@ -1,157 +1,22 @@ -/** - * @file unit_tests.c - * @brief Unit tests for the CCSDS Unsegmented Time Code (CUC) library - * - * Exercises the P-field / T-field codecs against the encodings defined in - * CCSDS 301.0-B-4 (Time Code Formats), Section 3.2. - * - * OpenSpaceCode — https://github.com/OpenSpaceCode - */ +#include "test_runners.h" -#include "cuc.h" -#include "cunit.h" +#include -#include +#define REPORT(label, r) printf(" %-14s Passed %d/%d\n\n", label ":", (r).passed, (r).total) -/* A common configuration: 4 basic octets + 2 fractional octets, CCSDS epoch. - * P-field octet 1 = ext(0) id(001) basic-1(011) frac(10) = 0001 1110 = 0x1E. */ -static int test_pfield_single_octet(void) -{ - cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; - uint8_t buf[2] = {0}; - size_t written = 0; - - ASSERT_EQ_INT(CUC_OK, cuc_pfield_encode(&fmt, buf, sizeof(buf), &written)); - ASSERT_EQ_INT(1, (int)written); - ASSERT_EQ_INT(0x1E, buf[0]); - - cuc_format_t out = {0, 0, 0}; - size_t consumed = 0; - ASSERT_EQ_INT(CUC_OK, cuc_pfield_decode(buf, written, &out, &consumed)); - ASSERT_EQ_INT(1, (int)consumed); - ASSERT_EQ_INT(CUC_EPOCH_CCSDS, out.epoch); - ASSERT_EQ_INT(4, out.basic_octets); - ASSERT_EQ_INT(2, out.fraction_octets); - return 0; -} - -/* 5 basic + 4 fractional octets forces a second P-field octet. - * Octet 1 = ext(1) id(001) basic-1(011) frac(11) = 1001 1111 = 0x9F. - * Octet 2 = ext(0) add_basic(01) add_frac(001) rsvd(00) = 0010 0100 = 0x24. */ -static int test_pfield_extended(void) -{ - cuc_format_t fmt = {CUC_EPOCH_CCSDS, 5, 4}; - uint8_t buf[2] = {0}; - size_t written = 0; - - ASSERT_EQ_INT(CUC_OK, cuc_pfield_encode(&fmt, buf, sizeof(buf), &written)); - ASSERT_EQ_INT(2, (int)written); - ASSERT_EQ_INT(0x9F, buf[0]); - ASSERT_EQ_INT(0x24, buf[1]); - - cuc_format_t out = {0, 0, 0}; - size_t consumed = 0; - ASSERT_EQ_INT(CUC_OK, cuc_pfield_decode(buf, written, &out, &consumed)); - ASSERT_EQ_INT(2, (int)consumed); - ASSERT_EQ_INT(5, out.basic_octets); - ASSERT_EQ_INT(4, out.fraction_octets); - return 0; -} - -static int test_tfield_roundtrip(void) -{ - cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; - cuc_time_t in = {0x12345678u, 0x8000000000000000u}; /* 0.5 s fraction */ - uint8_t buf[CUC_TFIELD_OCTETS_MAX] = {0}; - size_t written = 0; - - ASSERT_EQ_INT(CUC_OK, cuc_tfield_encode(&in, &fmt, buf, sizeof(buf), &written)); - ASSERT_EQ_INT(6, (int)written); - - uint8_t expected[6] = {0x12, 0x34, 0x56, 0x78, 0x80, 0x00}; - ASSERT_EQ_MEM(expected, buf, 6); - - cuc_time_t out = {0, 0}; - size_t consumed = 0; - ASSERT_EQ_INT(CUC_OK, cuc_tfield_decode(buf, written, &fmt, &out, &consumed)); - ASSERT_EQ_INT(6, (int)consumed); - ASSERT_TRUE(out.seconds == in.seconds); - ASSERT_TRUE(out.fraction == in.fraction); - return 0; -} - -static int test_full_roundtrip(void) -{ - cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; - cuc_time_t in = {0x12345678u, 0x8000000000000000u}; - uint8_t buf[CUC_OCTETS_MAX] = {0}; - size_t written = 0; - - ASSERT_EQ_INT(CUC_OK, cuc_encode(&in, &fmt, buf, sizeof(buf), &written)); - ASSERT_EQ_INT(7, (int)written); /* 1 P-field + 6 T-field */ - ASSERT_EQ_INT(0x1E, buf[0]); - - cuc_format_t out_fmt = {0, 0, 0}; - cuc_time_t out = {0, 0}; - size_t consumed = 0; - ASSERT_EQ_INT(CUC_OK, cuc_decode(buf, written, &out_fmt, &out, &consumed)); - ASSERT_EQ_INT(7, (int)consumed); - ASSERT_EQ_INT(4, out_fmt.basic_octets); - ASSERT_EQ_INT(2, out_fmt.fraction_octets); - ASSERT_TRUE(out.seconds == in.seconds); - ASSERT_TRUE(out.fraction == in.fraction); - return 0; -} - -static int test_error_handling(void) -{ - cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; - cuc_time_t t = {1, 0}; - uint8_t buf[3] = {0}; - size_t written = 0; - - ASSERT_EQ_INT(CUC_ERR_NULL, cuc_encode(&t, &fmt, buf, sizeof(buf), NULL)); - ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_encode(&t, &fmt, buf, sizeof(buf), &written)); - - cuc_format_t bad = {CUC_EPOCH_CCSDS, 0, 0}; /* basic_octets must be >= 1 */ - ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_format_validate(&bad)); - - uint8_t bad_id[1] = {0x00}; /* id 000 is reserved, not CUC */ - cuc_format_t out = {0, 0, 0}; - size_t consumed = 0; - ASSERT_EQ_INT(CUC_ERR_PFIELD_ID, cuc_pfield_decode(bad_id, 1, &out, &consumed)); - return 0; -} - -#ifndef CUC_NO_FLOAT -static int test_seconds_conversion(void) +int main(void) { - cuc_time_t t = cuc_time_from_seconds(1.5); - ASSERT_TRUE(t.seconds == 1u); - ASSERT_TRUE(t.fraction == 0x8000000000000000u); + test_result_t r; + int total_passed = 0; + int total_tests = 0; - double s = cuc_time_to_seconds(&t); - ASSERT_TRUE(s > 1.4999 && s < 1.5001); - return 0; -} -#endif + r = test_cuc_run_all(); + REPORT("cuc", r); + total_passed += r.passed; + total_tests += r.total; -int main(void) -{ - RUN_TEST(test_pfield_single_octet); - RUN_TEST(test_pfield_extended); - RUN_TEST(test_tfield_roundtrip); - RUN_TEST(test_full_roundtrip); - RUN_TEST(test_error_handling); -#ifndef CUC_NO_FLOAT - RUN_TEST(test_seconds_conversion); -#endif + printf(" ------------------------------\n"); + printf(" %-14s Passed %d/%d\n", "All UT:", total_passed, total_tests); - if (cunit_overall_failures == 0) - { - printf("ALL TESTS PASSED\n"); - return 0; - } - printf("%d TEST(S) FAILED\n", cunit_overall_failures); - return 1; + return (total_passed == total_tests) ? 0 : 1; } From e61afa26ca52db18d384549b303943c09ae6c26b Mon Sep 17 00:00:00 2001 From: Michal Pogorzelec Date: Thu, 23 Jul 2026 18:25:05 +0200 Subject: [PATCH 3/8] docs update --- docs/301x0b4e1_time.pdf | Bin 0 -> 218354 bytes docs/ccsds_cuc.md | 72 ---------------------------------------- 2 files changed, 72 deletions(-) create mode 100644 docs/301x0b4e1_time.pdf delete mode 100644 docs/ccsds_cuc.md diff --git a/docs/301x0b4e1_time.pdf b/docs/301x0b4e1_time.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fb514c340d7630270d6c9d296377cc777340e676 GIT binary patch literal 218354 zcma%i1ym(H_9uQZjwq!<%LCQ8R=LNNVj(;W)NVR7?=qe2yG0^5xBYOrOm8?`u1k-KqEp% zdTBxcBRdldGrb%k69XH)2q6b6Gb;%Ezj3p$3$lwc2r-HXunKW7vIw!V z3Nf>C2#c_b2s1N_3NY|;GjRwDvI~eZGqSOKq|5?>g3Rn3tb!aYY^=fp?2H1u+Vm3E zMnKnZeRTbenywod80jJF=^5zhWx#*M{>4usL>6Ks z2^!7^9%H#g7^{sgjo~*$QS~6j;K7lU7O6*W4RT!mDQ0zwaQX}^+Q{(^D)ybe;-dj0 zJ#LVOaNih^$4uYLar*BdU?8OIDAEY9AHx49xqqs`!BOAd(bXPki~!4k082_LA}5Lf z`=6>I{Ll>(E?Kdgb7iJ4xBkO{!@VFpYbAIka{lcz23==gzb zJp;QL%v*gag1TU2PYPA_$o_nA2CKi7N{rAqhUtNQ`(PX>^65(*3J{W~CgM;SapM-> zWUcZ)_g4anaT>RdSNUVWu&La{W4MEjv?GhN6PzuSr#P?hcuf>zg*O)afrx3g<}4Pt zoL_-^fflB#m{EkYGvkjAVM|CX(!ZwMJ^7!-!y{)A(N$wh3@`Uep|g1O@Ts`qK}|*N zZ`wIgu?lKjW`-nhBDRBn_KDooqhI8Pk+A!@IE55e3b*@YELUq-Upkk(268Gz78ziN z&~*le)734#m6M^~K}2yFeC9zq)&zx+Mps)-nNK8rB?BPUt>L9c4bq-*cDy>2nA}&Y zgWH9t!mC>|Mfi5-Qb@s5o5l+7?Rs;Bs${porcn#&DxM8x^i5L+BmIrq{$cX}bjg3J zM9ER#+DPBt=wF&(1bk?MqOkiREj7qgty_R8LkNoY_gJL-WUH3_Q|s4=+O#aDT{lX4 zc|ux7CIB;a7j5QN6Qbua3BOQvH#@>^7Tt0A zRp&1!5&CGx(#GUJ3H>SkCm{iQM?o9cZwzz{gnxdljDU}njpHNLrWdpX0*(G_sgRAe zBhcE>;lr0X{!k-iV*F_1ulpY>|C0y&^Zu86f8_t5-=F7yvGj5O%cr&Jh3su?|0@}3 zeFsMw8zVDgGoTTLo0^q_5of4kd1_rUgiVO^#5xc9{~8#(+{!y zQ*>rPL*O6e`M^X8OG~E@m(u@(g-n3I82JE1MWBO?lf5DEpQveLuVkxl2>b(~N(>*> z{^H}~{|E2@{^I2ihPpb6eHf18pITyn)%uIOj}p-jL47<_R{rzqUp@GEC~t3Ls04KU zM*k5a=#_!4j@o}7*#hky&Hkb)BgF8BoQ!B=87Hs#{N09UA9gC3!r2Yiy|Uxuq^LdjagzE_nt0R^CbRK>iQIQgQrUg zbp3st_eLJIs(|O2!=&j@CcUbg@Z))kOMDae8FL^C?vw&%CT^hU5iZMGnpqgxFNQrv z{z-x8+Hv@%?;!6~th_*|Fw}Fl-$d9|?(`@oo2j#>sVXnhBmQ?F^HtvMe%WCp4|1tkcvnari?HIOP{8BVT!cW2~B#B z(>Rw-&QPl(oa_W5e8Dq?-U;-?-}dX`Mf`(Ie_K2XR$Vog1a77^3+}$-&!%HcHy_sd z96={RANB+ZutO{}K0x`);>JP%TI6Dm;yL3VKtgxtT$%@CHV>GLj~8%svl4Hu1N%UD z9B-r*qZ&???>FrF(b@R>QHIVgpKHJR*$!_?EptE4k3VH>3$3-{;y#F z56JuP2L8{H4C4pX{o9Z)E1v{;60Oy9Du*0Ve~%ep+vGV-x5Sexwp7dKduOPCN?V7D z81spIT2ooZj?Me2$9wPNisd`kuk-+w%{IrE*`vkh~5f)dc;dxlIROF0~F21SJQb7uE!_%#xS)Cn%a76GiVd zb6#btF7K`NdaRYTek-o^3qTLFYgU#jmVzUls=4sf3$)UN2DZqAI{{2lyZpfa18joX1UDIJTWZ?cLiOab%uQc%-O!561!o z3&(W;`X@WbSlQc9<8LgOdgcD_MhOP@iWgu*%czY5t%P@tjKr)uK0YV9yVA5^UJbQGW_RVtT5*i_G-30ygQCY zP&0a<21Sb*MRQjJ@y4!+?B!JSY%~~j-pLDNkO<@JG6X>Y*$@LQHphwymV%`)+PW3% z%K~e~ySv?Xw_9(crP{Gb_r#~>ledZ1-=M2!>SusUs>F1r*%^ye23d4!Pm(TjFH!WK zoiA$Uj-Q4Yt50Mq#ACcLdd;b~JJ4=z4*b63EF&gNTfHsm^b0QtxiRcm+-6mzn2{2% zn$S{H*chyi^>*EEO(3Xr*SoizI@ zD&w#Z;c3z)Yy_SmjlWhq$YZ8c(PkB4fbtpwh60m#MZFxkc8!WbNMmAc?EP$5#!HM>sL;FOvYk4qWE#JI zvc_j>t}$_?odYv*_wYZjB9|1RH1v#-JvGWJQP{vJ`0l3fJupy_Z? zVtGR$(A%Uo!;gz7s}97{PLd0{XXQ+r3=+`%>6zg?xs`Ve84)0OD)NlSaCRrC8i~*)48McQC?6M>h$*cz`6IbX4H%Zk*=kiXIBp5Bc&m_V;hU7P7 zeFM&9$qnvig}7U8d0FZmecR-h5wOs!KcF&X#r>=x{ByNCRMdrh@bD>nVsYlGgp{%!0nH09_dhB(y!9)!c_FOu%$6G0r&M#kYXfcn%`+D)P*Zt8G6V*0JePa2W zNtUQR1{)TtLM(-Ld~Q1wbivc4x)M?H#FYxed2zVh-$CtPqsspoYS~!W{tdNWmXu_w zwOpWDR!UzZjGi|uy)IB7pH~fQ2)kWQu^m|+b$?OQ<*M|ZC&%rcNHUOXslv-IRMTJ= za#3r}fO<+otEx_0(*%@0TtNPUg~R7n4nXDkU7?0&1`UME-}J9rvAy<18yD)!Vj4JX z#xA+j%g>9P{y{o?%u6(+gY$X;*7sWL{i%p6aXmvbLch#^WU!Km3f6KfS(odpo!Dxp(l2&n-tC_C^)Sry0TIKEYdNVM@DV z(O18RHmRYI^D%;lxQ&DTNuBwCa%x@$9LykR1MnWg!k9kXzF~5kl14@YK=KZoG3FZu z9j9SXTc87L^NH!+=DjBh2sM@BqG0gZltWn#Uqj21?D}-O$Am?Ek%L||H;xiZ9|rF< zRuSe-s>#I5G->n+cZAf88i==|tJwm5ax!cLvq7hMMh@%LdbyUZF4od*p7fxLvV-VC zv+VYh>?&3a!Mvt2Dtg16Gva-E)ui@N)3+*5CR(+E?XtQIdjFgkNAesi2mIW4i zBZH%%*K{XLocg;+kA?lgY1$of1FbAX-`FBB8y2YxHU7r;O$2i1OcfSkM;6v^I`{DY zIM^rg5Idaa;5%yFnnzQVbO^P$a9Wu@_K7%83N5UH)H?VtG*>GExyYO`Y@3C+c6Yo> zT26}u!NOHp*NxFd5zq^l)$YRSSc~o(=53-Q`sC~0RB|Uz(+pNktQz+7RUg+{!TQVv zx!Vy;f;;7NtisFDLvotovgnGo2l zfm;7P)ZGb(AsLpX+xR#{ThFUKcu7Nr>)f}wH+KGeTDx2dKOy$=Vv4UfK7OPma>7 znO5U=P(%VAI|}uyUmOvq-ggd=!Lc0&(cA$7 znZ$*R5gQoUDHETR((0ftPdD=p6C&iEvwUx?bcdBD4Cml8;FcLSaH zv)u7l3*!%JvOh+v_z#hf=YW%H%l$8;MbWUF*!HJo(<$I4%wNDK%2tgJ=xptv@LBpd z@@~1NNL0rc?e>`*fmY- z*a8D}O8Yo{+sZA+Le_D1yFH@pAa=f!b$_#Z%!86ktK}AqAF!B>%Aas*f1X4_+nj#~ z^9L;9BJuy4C~;qfCe}J*y{~qs^TKj0?eVCGlVGV+UYTyB39Dj5s7+=aeSVQw4C=sh za5#buwo^$vvF=|l#Q)Swnk|<+V>__MvR+kqvY-ixZR+bhq?$o5NapHO%%ebrxRN!+ ze6JjAUm=Y7dej?ex~CV2DGA$2uOP8#uS8?{Rc-ub^J+5PH?bU-=15SAQlp=5+_EJt z4s8=Y7A5FY0xCj96z`z{{2G} z4)v;gREUz_tj_zU398JhC=AKk_Y1f^m$;1P4F-+)Z7|d7f~hTe;1+dS$WBQ$nZPf( zG99=B5TE#@n7OG2L8h~K(6!^QdVFLC9`h=-H@@Mp&H2HO>yASf$Fb49lV;au5bu!@ zlBn1^y(4r+))6xDL2E8BcMFHIt#_2r6THQPu`i&*q&$sVm5jkA*NNaW%xj4} zc&8_N2pGD)xGn(&rRvteEEBZh-#0Wy)?3BY#ce-{a)KZ6m+b4TkJEdH$oNh9*@GQr z1I+kM{B1B`=kC#@5Pz;rtG?K{HZ!&bkT_T}$9w~>cPvumR)X=jLGu5-u=ua}2s;zg zzk?*XX#OV+!mosD7h=O$lUNI|qgWlioPIxPy&gE^9sXCvKlixp%lD6vHC8eyOg;tkzh3ngyxY2+@Y z;qrcntAvfYhoA@T0c|hZ>(puIi2_tVBv`G!cjSM%HT+!e@rA=>AiVq5wb6H3 zLCu|Nfmh|rjl3i?vW@~@Dhw;N7f^xU#n;%B1l2DT;FLzrZrCwQY0T6==T^T9I$XIh z@C#~<-~py+AxnMIORyY0wj|#92W;yJl8CAcy7XRDj1O3<$#@^0DXv@ff>j%U5Aa#b zI=?^#8tg~91xW`0RYXQ-<_#f5^yEw8iBq;-=BCu`^9*tQP83dNQglK^c0kk(Jo7QN z@jma9y%SR0)}h--pWE<|nQF<`Jj7FE(Dqe7+<>X;hg0`oWt5|OGy}a3j0rZ8YptM# zXG&r=?7cWCP;*JXrDtoRVHPge_<7clW^QLW#6qdym~k1Y=i%hw_S^Z zTs`vP>}W2*J=B)u$}H79^pEtr)exx43*)=0d3$J)>W0w94?6m8zG)3^AWyN!tsIj| z@~|wPUwLAP8(W66BYwQg{|nG7Fj_9gC$+#sYus1oA!k1b^4Q{2r+o^4)LfUyp(BBU zI7u70ZJT9{1K@f}iL3%T8Nxy2s@x0qy2IL1vGY(%TzORE>o#3>p}UofPtNLIjW{II zzP92>3$QnaTJYVNe`7A6hWfRX_<4qg(!EUUO!KjakKVNJG8D3v23-QO^IchhcGQ)g zq^#0stB+y|+)0;;LPq*xCL=EVJ9F@cbB09<;U_CGDxp!Pn1rx$QrJw5MV&9|&niTF zI}w88qfWKTFG}rD`;Dh)vkiHYCfe$u;9vsxfjan-`Q+NZvO5lo6cWfHV55xzFe!Bs zDM#^DL~t4>9rEgp6?Ekc2#||1U5T6Ui)&u7Wi)EXQmJXcyo)JDhmN@Yh+uF%y{#&C zwi*abVRH5W?_-&{p>MNL z^1@OYBTvP1&!`NXNxQtP`PB}WWHg$w*tdOY4CbrL%_c=5ZrVEMih93K1)yH|#-WGf z5;hca?G`JL9=0Y>%t{+G#{}NrM3F3YllAfmskJmHDd;=Rin3h;Y1qc6p0ijtdR6~2 z0PJeWXP!yCYyJmSi;}6@4Y68dZ0RfwWUZt^@1l2|790VA7(oK!BK0o<0}FW*l(y}? z?ev7-35tl$i6hH&y34aR=bcK*73av<+wwV3G2G7SGI$dw;z!}58nW@gO00ivM65W` zlq!kp#V28Olqv4(-6?K$e1f<@WJ~9cE+k-ENnDX8#p@63OlJzBN{DUlr~?%j3{0^c+~!y*vB#Bvq;W;Llu#2Mj@ITt&<8`oZh8p_-hK zd63;dX-Mh07YoKXR57rkW&?I8l(u@uj$S*9B9A5r?7|sl z?j4=-9TubAa!u1*gEMUvF;9>pIo;0!008L>u{?nXlN)Y37)p4=2KHXTVtqNK{g z)p}rq5#cb>$9mcHN;^jB=1f9bO(orSNb24RCJXBXYOy?XuH3snuREWv*>3s_PgwzB zyr8VelHIbLE%6~97XW;5KZ-0BL+Q^72vnF1-_P4r>WG~cz$hZ*ji}*zT|`dI!EP*I zY_v9p-hNN?zm?a{<3&``x(PUh{cXVg^KIjQo|Uq&F#kK?f@__LmowKEX7=TG_x+Sx z2w3Tb6jW23%1gc$@vG7uP0g;yo{Bc2*d6}u3^2z7;4Q`lkh?0ijjDLNdE-|t3@ev zd*mEhgt!VW3ky+#GoFU3B@vU=Sj=VpsA+Qfg*3aGEY>Kx9S>ZLo7c1 zCeioAf@8lgl&wOvM8~8vnUtD2yC6u;QCXrt@Lbe_HI54*nx-V@9s6O|co2+T+f?J# zGXia}i`SNH9r-M`=)g-O3Lu&LH}%piXLB09O^!pj4tx(#^)rv2m^kNk;a&<#``GWvC1fSi1Io zRH?iGq89r%#iyphr_+17S>qs^Wg|hS7Q)__V(^s6Fvr!0Z-E%IS=`reDW%XzE0>d; z8syUtA%Oum^F9MDEeiqjI-szA@OTwXa%SUwRJ7VMKGrYBP_lVF(}V2`b0Q=(aJ>Y{wXR9{WbE9gWTF3Z z7agQd_V&#y^R}+w(%+;Z967J%!`Nj-DA%L-iLS$J4qYj3RUaK9vt^&IW{0X=i#r#J z1~bj!^>QMURlvB()Rzo8m8+BgWiOKpGfyHuS+(23QHkS3nsuulv!zX!EJNRnw?Ns; zeKt-=?fn|D^K3*N+#9Z_ah9Aqr**=xu_ehcRu@4u;@LO z7h>iVZ0fT{KcKFl{*vou9{H<@A`!_aK1cCa-2{? zm1L_WLUW5!#Ur)1`q8b?i(|RwNIp@R89r2xJY}+obbeHduL;VacmEJ~UeB zH+LA}2-X%}orCr68c&w3>w`*>l`WKT3N00Q7a{bVY8qXgO{SsKdO{BbuWE8?S71+P z_F5oU#t>99gt}2(4DJyzg>99_7SBIOO$1ebJQi9Q&LmnKm)!oemfP{+WC+XtlF2Nk z$4s?6vzeXrs8x{!&3Gu<=ETLW33(BsZ_2QW!biqc*x2(!=asJpP%j6ciJ1aiUd0R_ zzHAMXtEd(T!}WA3-=PJvBlOS&wSIdJc4~Yu82erosG*MgAm8$BO~{DZ`~A)AX{>?l z_qkGi(i-PVA_r+y(P9&_7X}0Fkf+I}jTr>LzO=h;+q2)_Mwb8BzwM1RLI$f`unOOFiL2dDUf~UQaTmTT7VLGO6GkxhKg!4Fj zyZF_OixQS*B%&HyLkknOwzGwxGX%Y`Vxm+8Z&2-rHVI-rdBLewx8xClel2~9dw^z7 zM!ZgQhPbSLp=l0VLkV(uw%Q_jnV2Dqz%I8Nqybl5R*ZvZRyq|jn-yh2#*MYi8?ZaC z?={T*JV|$e!6d2ZD_=DqT-JR{$~8wv?;v^~1JjT3goF0AEw7ykXC*J7)hlly@gbeL zLUVZV+imy2oK}UXDn3J#0HJFo4HsTH^2qB?C=(Rq&9kH{!@}75BTuhOilqP z=aQ2AG~XPD)EQW#?aQn9a;OAkl4^Tf(Mtu`Vhp1C33TAthHtkDx1+O8guPsj7+e^;rl#2cK_h(A9HUPjwWLvALRhMuDB1V6dzy z!UBdm1^e06Pi!o>Bh_i)T3Y7ypEy{qQ6(48zuj{J-Ow8AdJ_WF-Eb*chT&PCz`f)I zm4;nus%W3(I%*SDI=LYZIqC!|eZ~#&u3z504q?;nsaXoz3~>vbY0G`zK6^cEBv%Qi z+s4Hz+i?*m|4ze-y{NQ8gWB3}9V(}EijNOU^I|XXA8?c`NsovgL1a2Ywgrc|*bo(G z8gK}}R!ZGs99vxceU(|*ukQpBp+8yI(|TK3=w?YP==Z!ajUgCoJmE`Ko$%`!v7tN= zM5qN5E0L5GmxRZw`%6qY(;Raq0;{%h0u{>arE3Fl_;A<%BxfNdi#s~$NAj`90-)Gv zN5r^*UQW*J39U^LU~eBeASycL8+!L-c9=ub@TH3RXB{W0dx>g9U~`umzEb+iEcFvE z0lcEO<@}Ns#-bIH39~|9>tiKYaNOoEBVAd+Rcnp<91+tSb-S!jr3RlNc8W8Aw$_}# zJz}s9?i5dBm>Sg-n+vn+Lt8EqnU?S+*>InDWuTX-obOfUQW~JlZ9d7Y7~62NgwD0e z1U)Cuypz&9n~5-#T~TG1)mUPlv1*Z9nCG>13BJv1J^EmCE~Qf+Ba>OK**pzsZ_0#F z-G9=Zr%2wG#ed2~`sBCci)Gul&Wcbq1Kr`k^IQ)WFd5`KsE0BQTyfJFIdcAjj`%Hr z-sH)=?s>XY|GntDdyDVuRnoOO6lj!?mdBAvhF4zwm5Fi#ml;OXuVB6mWYhzlpIhf6 zC$ZWOZgS@?D)yCH-=!+2(k!6SDd#+gc*rcbSUHZ}vS@@&eN(vBj?4Yziy?9|+J+`U(=3YUX*Lfv@D2hY^5 z9lgS4{1f7iP_bd_S6`91^%*vhcJbirLiN4%!1gB##-ZrC@G|B(#%xH+2C$zZ_r!CJ zuHH|8H$2)F*W~GAxW=z?J%yt&`s7Y-YQ8Vrh+m9$s?x1)p0hAzO=2R$QH18e#cqvN ztJ7%{V1zqmI=_%6n~GJE0gi0Hxmzu@iJj`zf>tTBY>UA|b0+6#`efc{6G()qGZDP7 zDAGGKN)1=!PY@LeltF4X{tz%^wDN|?ZMbU^cRONTm7uW|EBx9LJ%lIww?O|Nn?e5{ zK+n$pA0M`=g4bA&7Zvke-&Jy>a#PcuKV2SIbYETV>ryg%nywN$_nPN45_g+GG21x1 zs&gWip-hfzsCL(^UU!^JnEJjnf;Z7CHVSG~UL|Xpy3`z5-1-C*NHPssE2Y6!@tVuo z?tjMC*^u}_wY-DQ0EALdj{?A=NSD~EJTeeKuw|jWcv-VlN|Da;FM;0RBEimWLTe@( zVjpswO1rMSZ}>Q5+D1I5es6m>gP>l{uTY*{@S~N1FCN6LMK^H77Lld|`1G{+2rw7^ z+B}p;Ew0l-r%##fNZed4sXD{gnzCr)i<5I1!rW(WfR0r|(T(pM)Tz|e7NOe&NmJ=n zNy}a8Gjxc6%*8Pn=40h}Pj|{T$-PG9njmXJ<^YALlWKnHeCVE3RSQGN1|%~BTj+l` zG^3~j+5mgkEYo;iJF3wpD9Em@xfoZ#YJCm;n2INoThi;ApH22D4uLVX1D*nzDPq}R zhU%_J3~F{4Ys9?OpZXrduC8u2T|+;EGp#VTt?c>tr6^BXaqZcg zoxD}6R3(%LVo7^Dgh>Oj}Ao#5q zdS!)!-T{Y?!oKupN=OB^Dh;b_dFjFhR~<2b^z?75G(AY16u1E=hjtb+g;Ep6JLy!X2|eHtv|4!HQPtk+i!+g*9n~6h+neEn#}EB8W#r~&sP9=>H{{ls zQgRD`)2iu!3@<*rebk6_14a)zW$qgqMn)nYgJvg08YC|?h*=vMwaHtl$Hb|bfd`ZI z=_r2)vTicR{_nD65M#a#X}=;a9bqU zHA>iBllg}Av3Ut|QJd$Y%w+dtc3t&0+}hYW>=a)&%0|26v{$xm6z>_kep>s+#|Hb> z&H*e1@!f##CAhB2${Byhps?1iJ=%=l|9RbnfY`O${7lqTiEFq(i@u-o{y~l+&EER9GM5lTFf`+?(Zs86bph=$fEHN_ON&N z)1>{um_J}=j0V$zKF^a%wO$I!LZ(uicbgy@>8UUZ-N_N9n^%wR?qzt^-a;a({kPHk zzx|d23XUf4G)R^?-K<99`hnt?)t=OP+>22H;YEeQ6`!+Q10Yw&gdAZeDXN_~zJTp= z`jVP*(S<1R8=Lh!vVu-IY$DByLnh9%A3&Hs4i{=l3?@$!RU9-j{veoOujV-TZD$9I zZN2HTV6QI}8(HL9e>_&Wnv!)M-3GNZ*1P$ge~{t&v6R^B(!umzu{9qdO;agiKp^Z@ z+te>{`tIjug$qqd_2Abp?yk}Wc}M}2w%36{Dhl`~)2To1!Me+AnnwpErN1?$IpDK- zZ8xprzV9fNOYg1D)+c~hFAEqLI&Z2{X?Xv-ffDmrqByrxvc6s0 zuh=GDd z+%DmlIFe}h#BImE9G#3NKDgM-MCzeS37+6_XD>2T&Y^I(#lT+1@uk6U1+j!~cm1~5 z+k#Qwl9?43)L^p*Y1Dq!i2S6u`OP-niZ8p%L3lyjm}kHIB6ou zGGHcFE#9A!Mm5QGm4WFij1ou$2Z?HiL}uu`UZ4_8 z{7=FpuIB^%3dAd}974(;J+0$KBcD;EAR{!3LZ(h5nPkzGq9yr#nr|d*RC4sCd5&-e zVsy$+I-K-~wS@+XV>LqjghtQp{5Bhx{fCz`cqfX_bazru5l1b$GDy-}x`W9hS@L}K z)!XyA`!vPHo}_+ChmoYVqtb7n?+4T8#3#k@#rf#k5kRN*ksORF{b(!K(yU}$Sci%| z%W0QIjMvaw9+V%h*7`j|rzJ~{@)&|{H@veMAUBQJR7YD)?5RdLrU`iSTwd7zHW5YrayRydEg%vH-c$Q;!}OmWzW?(|A1forzvp9F3#JK24;E&H z{(&iT3E)DX;_8W`Qg;>jzS9asUk?K|4yWYvkUCH#tq-T z*j@91Y?)|p$(>d9z=su0BxKbNOf|p>_o-^Nphy!#poSPK1wCYmYk=u*@RWJmrH(I*%0IqH;UW=KA)J!N z-rXC*0rQ@KtCXa3Fc@fVdc-z}elyS}QFK&l)#YC&I~N(M7EAaPULOo`ISWdvKEFP-f6xdQlYHEI8nSrB2O6wol+}RVjbTfA;fOb34J+=)tEn^Yup4C>l`tjuklw$)l6>#H^02B#39v8lJ7+$uH}Z9$59IQBb0sdU#fx| zUHlfE?DM_qm(Q@_8^*?WH5-_RAdrKZzEEKbb4OpeAc7wkZb=GRhP?Q+m3P$asLE3(4g3lSJ|&nN;rBmA2-KL4ADiZh51OQBX&&tsiWy zPCF5BnlB+=WYv81RMl7nyvpzz8YWE!RKX8sar-|$H#mPTTIv_=dT*dJjyQ2mQB1sy zrYX)xKD!Z#@chQI$_#Cm<{ERE zq`tYFw;<)Eno#+-@}-J0bynnxHy6=O_2j zm`E?9V*AO~YwS{mZ%Dk837+Ujs!^b_uh_7p2!6m7Y2fnva* zdh!{)T7*z+xrSgo9nu0kWTMOzt%5e@A9St<^!%Qr;Lt8I;_JDr>^Aa}uMez%EKSnl zR_KA~iD|_-h)0PB1@(_@)Z&gv{D$BNzY80RUi)oD4wI6#BzL_Q-PJj@?McJjF2 zAh{LQ3BA@qf4SYH6}CyuF?99vOVOL=sJV};V)1d!ihNAi&#=emWirF&$$R5xxf3T)4`<+9TzW*XKn#qA&*F7^c=x}3$o3G=eveY} ztzdjAeI3sCX|9|Bukb^dC!w2=VJYOe)^`WG#1~xzZ9n&D+_EJ@T00Rv;er@z4?>MPT+J zM$g<2BeSDhrV27qhDb{I;!fD&2)eb?2KvL@Wpw+yMTxRA4txD1H^<5CXLAZD$Je=Z zl*yPo00WhYZAl2PiFd)%XStA}b&A<17}7WIoyAO0xYyL@^+9^vEJoer(hJy&mG3Jn zk6w7Hh;epEorU61#VJ1MjlQfss`|c;B@um(B10v#x8(*g#RBWsrvqKW;P!2-4eW#BW$P@ArzKP}F_>yM zq-SiHdU1Kp&T{#0!A?!qwDwpxkHa4t8fMzl_m z1sy^Kpsnj6R^+k&5c4Ltf7~~+*M#8!anUSY6{%0rgfF4HN&kdgqq^&{a}FceHv~AC zL$FnDk4xwt>UKrM;-|qVv|VSS4OCQG4;S%T%5=IM_S_EM0=Izcb3PS>8kKC7q4x2Z zH*yy{X1Ra3*)EOVGf+c&+6a0fjlt#fbzW~`AGbnSx7meG$(*Dnq+lEBg(3?&kT;Am zTZwO)_j{e!$v3?6TH#sUQdibyH1m6$5wlofu^WrvFt8u-wYYpzr5UpV{aL}U zBjsOS@+^^g;nmsv-QlzMu6w8lj^oQ$HyK)pf@qSMeR-b~;Xyq1eOPiZ?t_YNyebl1 zBYNc3%6hZv<7Y?brlWP>Uyfwr2Ky2~Cy(t7OzhKLXQV7?0@kU(i0Bj9xg=2^Q<^nH z(xfRiej0DWMQe)PucD+0d;UiIaul%GM4tcncx^0hcDjA%J2(;jxcSM@28+U>%~&&A z^M@cT!`hY&fdUG+oIjdKIynbyC-}q=dqv+@=5rfO1|g{On4gBxjo-05(Vt-3m-S+a zDtkduvtIfuD_XULMsliVEaGpoTJXuBAE0cW5>%3*C6Xys?cNwS8cLd8>uBqZ|5 zhLzW{pNH?xR)f86bSet)8=?_tY&sGohWvlv&6pe)Zdzq?^pu~&Mm7&G{~)v{b@Dl zt%X3np9nfKRN?@!^_2csA(>LfR*w)_X@c)S5JyEjU4=~i%Eu$ z6ZVip7WGJ&$`DQ$qLxlVMV2zk7eWBfV^fd>P5B9 z*NpN>K#Wk4ky8b_p(PQDiS&ZOR1~eE;BRr|5>Aw*wKEbQ=J*s?8RD+?^fZrb+>~Uw z`YN)t;_y%8ti0_F?mGFZ{H&utrGx#lj-_f3%?}SZEO<4D{9z*R-5McPsmem&tX$tN zsKYD!xarStiBcBh)zuQp5R8Je0$Sg-D!dfD#|nwZ5lcBk0w|`LMdrSe&xlH4p;}PA zUF*2itK`hw|8D#QFM@`ee;}=YJbR2c-xmBzto?p-?1~);fN?W8= z-d9N3y;O-pc&30S%%33 zq5FHiY~G2(zJ#Z%Vm97YfF&%cP4cXF1hk8liHbTAzgJaLTr0Op^{!JTXFt<(@0AYx ze(pX5VU^1_NYX6$n)Mn@!vj`=@fjMGCAY{>c)*1-;@I;BDVob=>BVD6i|pm(VV>m( z8$6|z@+X^2+E=5A(#TkHLhj!l2$5O2lNBd50rNlKF3&=*!pM}#b0`3xLtCV53U2q} z#UVWqDCA-ezTBBb2q*1wVh|9^J1Bf|)&Lt2aag+mM)LC2xgZS9QW*Mhw|VP_{-kG3 z%H;JsALU|n{=R)k*7>akJHG0B1$-_BQM8gQXboPrKx3G{r4*B`mc%`_}H&Rz`#MkWbL zc4S?z=Msd*0h%a@x~VunzZq_lmuGfEZ>WtOhb@^#`dnVO@JYsu{lphi8?o4=ZiVW2 zSQ155AW0l3O~*e$zg2_0F-V_3)a>pYZ{qQq$Uu#Z@JlQ6H#!uBKc9=^D0OPw2J?KR z>fQ**tBmej;h17oZvY=K=l4<{rQ)I8igQIKVl7ZxE4QhmW7szWEVdmP<}O>F&$}z> zgFk<#Np6!-9~%H9y6@X}sc^*1m*cWF`|2|!7&HD3^P>1FKF{6(aaqaED%JcAocsO= zV|%*LQ3Hpfge28**YJ%bh_`{vC{f7$3!#NB0pc`PHCmg_bZMAK9?@@ENVNJX=+M@y zDUX$n$OKk=zn+oI;CB*<12pT|+(e`#yTpVshfJ@hl6PVYL~Sq|G0FJC^%H-YoS!=} z-tQ@NeWAV@I>3JAf!`*f&S;t7YP@dPhQlT63LL~Hb)HfrxIqKNEx;KxQ9v*leb?eu za`mtawv75Fa4R8994YC%ty$~!bQx;PmX%c0C9s#J3BEZ; zJ#N5z)l&`{wy^>i(iY=oGo5-}Rbvj;Wy2bR1;a)wleQS)0&~MYctie$G^?zXt~xo( zP${y0U%TaK^-__%#?;@pp*X#Ycn+_oi)kYvBwCP{ z0-62h>9`JzP%*;k?}1!z#a%(4AA?1(S`zQnA}-RJ=g2vE)?Z<#oKxvA*+SUt0^Lhf zJzehYNjTy9=0_2_3F7^p#GTX>M_7PWx;;9d?c#sB^7hvfSX?;|ehn3zfw2z;{a>=!Hyyi7H6@ z-&P0w+e2)g5KukMqfoPA9%#$@dxUSK`H)xA7Ut=>-H$rx;Mh;>(6|-CdTe6Eqezp8yT7wU`cI<^Qyw0FO2z4>{I zS0MIf^{%3YMayj`_4{RzM>FQ92h7|r!%cnnV%MJAttb{G50_Fk{_-dUn`6LIXu{kJW@fKcEL7$kevkq z+0y<%c>=)jY~;`AA+mF;PR<+7ZEoYvIE>fGW)!FM)rp_ve5+3|i63j`5xZpFTei!2 z|9{tmXB)0jwgTi^qwQefymQDxtNXP%c?wpN$9T#z@wI?`Wp){e1^FYv1G0uxU(w(I zr@|jC#J$owZJvh?F>{>U?)ZUpwZlQOefX&lTr!NH-wTPNCJU%AfT>GzFTq}Wz2V6S z%{$t!a(dT!dZtRwP~&W*4MD+%@~oE)K0F$ettp`}omAiw0p%fq}mCV%RYNzMs5 zd8k{fhl?TI+r*vuIuvjD3>A)~dvjA|omU;^Of}?w8p4eTBPqdixZC0jBzXOPi8*DJ z4m8RwS?uHdYwk6Y)lPpG`rsu>Bj&zeeibHT(e@}$qrJAz6plOWRyuF-S3j_O1t=E4 zzLF(6=9MOg5$TUYCkes-o~;rjNP=Z{31CR(`G4H^BIx3Fhe@cFQkAztnTs4 z22YX>>fz)Hv8hmQA+0OWcp;o!mtm}1y17+DV!{P?c(f)_zs6#FfFaR3{ zj3Zj;6u$s22B%JNQMgiXfigLrsQp4f&vr)`VM~#M^*k4aO|h>YJ9nt}!o%@!UrMQi z1vI4h=Xi`dQ;EtD|BCfFCjORpTo#JOzt)&pA`5kAn6#X7OG@PPsVk{k-A~3jbosDf zdk$xAok6Yp^Co@^&fEG&Y&W&cLawu&=|SZ*2kelB_8B9k>DVcUqbCvpd+4bwXEm~h zPwNs9QemPnA{!3cY+M2IkmE7o#lL8dub%xtl{+!O8Dz${-2oSD zL?~rmEY-S{T@JwDVQ{ZRO+w^Qi#Q?PY~rEXi$#ihW!>V$#QsPJ>%tWrg^Tu?^i1gT zIQZ&-01y$>GV0u>ewcMI+4P4rK(&{%9z*3IA3{)s*7gCewxMYJTh!qk!}WVZ+9OFL zwQ?FB8I@AKn%rB^iUIW~@}1jqdZ@b}3VD&)t&H z7zoQJsoIyi){O=Go<>}9W*)EmpNZH$Y+eD1#n@*l&wkXL@@65t`EtsgagF&%tZ}@Y=q`0r7oajPs9@~pX7zpEhF4?{oEuOcDt@BY$+Z?eTiI+n zB-2>$(sP^)N&&oJ5i$4Yd(>PUvrY9Qe(ha-|9r7*bQcF=);3thDCkG8XM?CqDhuqF zcWc-@%8F|I+bty8LaRuvYx6-|6*a^x^co(hz}z6?mwmc*OpM)Tb*iGK4`_4umdg|9HJLQ2DyoVta@0-`KXCx#OqR!yN( zDsWlhRAsbw|rdNo+ zp^h)rpAD@Sz6_uwma(r#IYM=_brS$u^H5Jj>(5xQR-I-S?ow1sB(o+u`84*SI+}6Y zj%OyzzT~|%OwWGX0^E&P-ek@gL~Kf$9WyFFE&`KVUiLR1$pc60xXV7{3sgS(C^>si#0f$0uZlDtv8kt zwLx9JQ0Y-b^>^;*^RU?mG>5y)(31s?Xfh0>nRTzx3|^UH<5}rTqB_T!H@lIDJG>tH z)QRj}iiC)yx(lZQk~1DPq$Q;f6xr#c8YI*sBn8cWgkjxtD^7IJkO-znDPz#tvh4i8 z#xT&3heqG}Vo5Slg9=wer#-Bv+O7$jZZqxgIFG^lCye!MhrBW}@UyF6 z1R*wP`U!kb*QEM>3{qG;*e2GEJ=Pex_H9XAtB!0Nw+a>gfd>{3AM-$LCYJi%2{q$# z+ec`LT0@~^VNDAZ?ceMX4T3PbXFSW9#-YknoW|35E%iR)EqSnnrDNJmgL7YlW8KrD zpz%cyNjmh|a0A|OltC~UxsjXjw&<{cUI7zcquEYCpK5`zWDS^`G{HeDgGUr;V|SmQ zZbxYNd8c1TFvWkzqYQlp%Mju7YpzWVa87zn=Db%ENFxbR!s8PvuJ0#9lp@n$ zvc8oQ`fmL-0l`R253@-W*x_!!*?h~tM{)o&rlAOwQ(?W>`&ACdka@0GjH$tji*@T2 z39;QV>8^XohtHsts`~i2J4zl9>ObW@wFM|?NAC%gX&)Ar*-zyoV@!WXYS|E7Y6vLR zj2fuZYfWvbrI`_eb0fuhw1ot}2Y7#(Lsj7>U4c>X4Zc1&mWo_QaWU#$w6wO*nz+Gx z9{4fJ@L?Y-N1@XTEGgf~9PZ$|v3k0Br?9 zByzOH>$q9chh{-Ce~?tFDxfU9CBfT!jD*>jn#m;=oh>iAMiX;Q09B zpYx~pvx{nkNIW#@(6y$)t4M@z(yKi=sUT-zU5h+O9S=z*et}6EDuO~%Fsu~{2SDp- zllK%N^cJ<-VmskuE7f0=fVraNKzNl*#Kv?pFts}7ABUhYm7YwlNkELLx_!Yd*Dk3o zznqvIsIi}RY9kphs`VM@-ucN&GGD>o*J4W_0acPVh%|Q1fCfhCqJ5y?JYWqgI801P z8sL6)aMMc)n@e{Hkb<%j1{rXnquppK!@}6nQJGd z2+@^2BDkH((Pg$&i3|-g9$xnm3$ya+^=$lRU3eaIYw8# zt19DeSN%OR-G^@w1rD`yfShE$S0B=F;%LaIGy8!&#^HFztnr0dx)nf7L^Sm2=&4z& zm;llO)3DUr5+9>Zq(pc1e{PVYTe9cdfuEc!X}qeq@UoMpxlz1xty=a|2%pO6D!X_) zo{Rvj2no^8T(5{1hGxG=I26(LakD!DXb@0lIVtvkGm+v^9+hQvo)|5~#KUddj2;^D zq6XXCADC6P5Y%H?oxG)xxV_FIYF+ClMK4#6xqruZ$&jCdTH`oAEy$l4R|TEJ|AdCN zNmzN}R7}14@gy^uG&3dBCo?S<%?u#b@_TV!-s4CWj9PS)vEY#h*OUsx2HA{kB*gvx z%aguH;4>JW1Rh7%g;0?wC#WaLwHf&Ts3P3-c*#9eKKmY35FHh`otiIlNwSY9#DKjD z>G6{}qXOJe!%dYb-Jt$n0c3;ip|g|^RSHZIL@&G2MB@Am_`(x05w)may7u=#J(KcP zbBhhS7arkQZf8YvyQAzpNXy#}s7t!|`y`Me<=8aRGU*gzYS{n;PspoWeQ;K{BB*tF zHjo~3sdP-?^x&+;qP=g>O4^P-flo58pGkss9vjth1zeh?nRkwS1IF0)cUI^pb&fYB z3%D)O%AOK>!%I>9j4UP~JQG#W0!yZ*ISnNAO`ILWG+2fwTKoRQ>Mt&cZ6qq0k+ZBH z&TyCs7yN$1phthp?f^e+SWVA_EaFuOWL<3WN?o<2ME^ZTCOT)y(X6!(c1L^7TJkv_ z2HTzTjP>}GWAiPIK;_s%9m_UcmnHXGHpCNEc4;~=oqKxT#V!E)w4q#VbBp)NK0}-Ko3!_JtyjIss^r*H8V!F+KZI|F63^ahz4p zLAY$>4&e=FFu-B0Gy9@x|4cp|#j*>gY)FD51C;Lvln~nYSBX8GbGJql#uXN)wqfo- z^q2uyS#!gvda+5-nPZkv&cDV{2a63Q16=t!}eUj zV!lR(GQqUGF(sq~*?E-%A1P7&V=-HD66&<>8H_vzlJ{hSltL=*s&1HsY}F z@j%aYEK7CG=dqIBg^SUb$;I~}?9t={6tfPq66qk$S0zye! z`3j8?2jVI_oG6?;``RDh3r%$g?>uxa$=EsiMe3JzuY*?-NJg~X4Xy?&XOgL0G+4L# zlsg>e>dNXkxXzNVUS{r3{^Yk{3^3^)9>?_fvagHPJbOuh3^{_^j=5t3@pI`)Kn-_S zm-@(kNU|x(iBy9t@6y)NW~Q#4c&iDnQFEfU-F**a!sNJ*jtzfKr=0Ob;wb}_L#|PX zdv@P;b%1pmU*z{Eh=`fR6GlC}Ze?%|-$H+)xcoD95bh#vRv6@D$p6-kuH7b<2?tn4 zF8F{nib^;g({vSV*#$&l4%GIS&p-?7IDwSiRY*#ugbvP{YzdR?$uNQ|c`9PU<^3dD zWzo{LlIqA=;$e}&ky+)o;Q+77%S*$s9M z;UpIKrY$Qn>#~^!7|f7@1@j)I5#$ON6;Rzgpn8E?`Z3)jV(pb*G5ft7>L3wd@H4u zDbUlUMy1EB7oPOePbH9auOnWXt@_Y1Ib`;~Z5>+~&_)s6%&VgrXrz(H?dIM&2P8+Y z4xI2@&Xh}Q`s8s;Dj?1IckbOBWF2CLf^~(jWkeLrRH5F%b9^703;LP3Y87GB=+1($ zSUjpTnq%=s^8{yk`BbpCN7JYWX>pT5mIAnUXEXI=@d!w_Z+;1F;S`?yURNg_+%7o5U8%%PCK;3$Y4UoYOC*+(2xGIW9NT$|RyTT;Cl?GuLPK1v z2Nci(<5cqURPv)`uP05lM>&^dGZS+4*Mtw(O66nTox;>&p68w$D;Iw{a`N%CN3N(r zNn^i8UbcM)f}J1)=m;LafU(ht4$POUGwW^d!8LNzllBy*v*4*n0nsW#VOa?^iqpK@L8HOphoTJ<)C2@|aE|bT< zh$U<(KpNIXDdRVhR-_Aj%(1i$V1%ATe|Lk(oaf&ErK1%j26?lu?3CGXigj$eu#;G6 z6t!-LKaTC0OG~bnIk8uyqZ| zg!#E`7PQ)diHVG1lj6AwShudaA5xc!A)NrZj*L3s{G67Kl~prE4sc_x3oDR2C} z2d|WNBksn4yN2_iE8La~#g^mT%v?A7b5FgO{rRSW(b@O?k}Q}GHjLx7j01`#BE#Ii zt7;0z6q!Z`jDJP9rB47*gpsqquzw<5$MWlmZMofg;&C$HCC~AysT?L-jDTyym(Qwv z!qA8qOD<@h$BZJfY=}(YGp+Sy*g%>@l%Nj-R6Og>=Pd2MfNRa78`mM*$b!oQjPOp; zjDbt*Wr%Z|-|qS2Hw*4Ml#IO{iE1Z_tvHi2mNs_^AgA^f9UcOmJy7uDNQdRj-^JtIiR{^U}CHLltaXwJ4joqO|;t$H5z{K>4Qm+pw%Z>R{Nz z!hk(z?2|wu1aLx)r{lz8+-;}y;)I%Wsuug8+g0o zD;!H%7|BFAOW-c~q1X?Ms?x@U*=XsogqY4$0=?d=vRh(jy+=R&H4_|aYx5){4Em2in4U6c$c*I1!Ob&v@3Mtx3^upO_YuWyp71x_85c zym&+k1$k7Ws2EIbN^={j{modgBY?`pilV`a{A7Ukall-rH$*6_)4H8^eZU>|`FO_Jor_=BttK_PYh?3*3g$0R|5u>e_^<{~fdk z(b@@I$S{gEK18qQoL${^xv_V&%sy;}nm%Gyk;#^t;t@+ByR@!+5pZ`K?gjKyuD3Au z`U3AZyh?_(%crD|Jsa7FzL_BAHzZw#e|NXb-C{lOeN~JDDxSeAj7z;)gDKTrEh7S> z%7J9n6=NC^V{ZQR8C~1+7L^oEe$XaidBK|eH0^1)I&kDCxonlC*mO3g+?_+__hKQ`v ztf4b{7^IpG@HQPnCSR;U3+#ZQEma8pAKNSeMBWNUK8>^5S@_QMTbas*CJBgY{n3yw z(z5(@wB`AKRWd#!W*E{?y`p4+%OWfi6!OWTi{D{b2t$EcjP`->SdZ^hTZL4zq|>R} zaA{TH=EjPyMsDR+XMGx_?H101>n|slAWXfV=fys=CezZlcn?6FEDL?$>p=hY8U`Qn zZm#o|tQD=m&%Obs?t$|J$`5!#a5d&qaLQsj5)uJK93i+d^{s{-*&cxmU7?r89ilwD z{IjW#LHXzGn?P{PyX=+)mqiu{);5?K5MIJrkFp96axuXrJroVi^32Nh4$e;Qin(5_ zu-r%1${meKj)(${P>W0gm4c+wSU>GyoI3f z{1%`B_YWC>FhS>-(xYfZf++yrY|H&^c5_MwM)l*1>DXdNGC2YF3q4nOiPLV;-Fq56 z&6$fhshdpK2xB4@{3{On%f!tPDNq#@T*{%Y}K6nVUSNoC`DA%mL2mI5AHMu zGMG>^|AfEFM}FSR!^&wOAu%EC!%kX6QsPrZfJs@BF{1$`bU^%=2j!D z=J}xK$KXn>7X5#pufgsh@Yl84mC~yJgD_}=W7UO;k=KOW8XJi<0-_782NeVxh`frBo=;2CvCyxO8x$2K1&_y)DZ3sr*l?ys1 zeYmbK=iAG|_`mz{)8H_51fq1_rDBTK1lPl9m%aJT%lJX^wiM-vpQO-~b&vWOP}*N$ z9v$r*EM+Q5Ov;i^GjBe2Gj!jddIFLu>j^7QrVod)*985gBmMx?aMP#EA+d=`-?|Tk z{W5Ff3WWgapwWl~b>zQhp4UF&z=agoHfW5U>>>NVyQ!nGI+7m-j;ql5v8Is-Bj^Qm5Cr_iwcSA z=;CP-Ij=54EhET0#3uEDi@mv-3}x_Y#J8v1Q9KNUb}CUylxcNJwQeIQnMz10|1*PX zoBKxINpXcH(m&V~)(6eXWt|1cFnlgH}VAl4?sqi)Z4+9y%fxbDlf zD$$%J^-bl`_*;a2925{u9~=Hhd?{I5)wpTV!+61U1sl9F_K_^equK z+GE10S7bl8!24yURej%4_3B5nMLK+-IBwm*tnDehiaZmzw1a4jQe*DQri73VTO^Y# z7p{fT#oJk~Yza2a6;~U1H%G>&7^w~5jA99_vzb?Kk{c30M@%TumNte_d{TkJnHk(I-qs|;5df&p1SV7KCuUJ)H%f~W5pw9wSgX(F?z25;tCJ5^<66AYJ5c* z?uV6rd_q}ou?a&{L&1;r?Q;^Z92 zaXI*~TxTz9hRkpfYE1HZBO`7s$2D{;DU;Vp(nq%%N9R@Uy7?B?u@oAv5aU~U>^jBJ zH%OH9cSC(%WS)ZLv1=9i zGMzL{YE8N{NNhlb8dI%aTOT;=ggIrn_$}wZ%HG!4*np-7&`TQ{?H%YUA3vZc(smId zj1&HJu49vWL8k_LV&_0 z_})`{{XrK2<%`VgkPrw17hSrTU@iL!w=H}KO&`&t1k0tCpvXq)bMFXzzmgt8Pt?5?3S2yK$-tN%(zLrD^by7})_tnH|;v$Q$p28~zYXtp7h-(r7dS%k|92KSb>?B|)Yu3fjK1|d;7 z?prGojgp0;$-yQ&epKdbS)Y$p19S_zXr`txKucm}#HoP<$n8sQ&!b&Sj z^YToxAwhzfD6Q+{@$}9MmE2b@IXp1m?MKDXc69*(NG8ACokiGS3tg!Cous*mut>s# zZa!>@CUVkPACk=Vh$KisKz6Z;l=r3pY_XGi^^HBpuli;-85wLQDgkr2P8M0ra7C?n z9Nm<4=Sh1;c`F`;uM}buwGmwMQ#}%-n|Jflv>u7A6RB6DkAQqeV8)UK#3i!eQP==b4e6nopK7SG~0=q+Rr?^ zmbr3qncW_8IyIq_>ZR9o;cP|oAGM_BrtL7vBv!9T-0H?(;7s&aeMWJM<@dqMj4(s2Tr$hZqADwNDQR`bL2V=!e`RuNoJ&m$-tAOz@J2i+cUFTPxO_dC zLrwSnEa}4IA6l1;|JE=*GiU2yNs9tQ&!9N%j*)KU!TAe}sg;{QP2Rp;$>c5?H8x|A zAB1$&2n>whT!LzPpT?SBY@v@G_2!@_ts%_KCTG5kO+EY>iaCq$_NjVq0CL2|VY$R0 zBuj#cm2sk0bUEj!a!4)1>PfW32PbzYwhe$*~ng(4ondXWu0Qj!J zGFNeO$p^#M5K~RDxEK`Ng*!$%1xQ91(@6kexuzqxYH0Hk?gSdvT<`LB@%!36d2T~F z3cd8<b*-g{R!PQrimG ztTt1>^tkJk5?FF!c+nZ3whKwN(EQMWl?ENqfBCk|tb1R$`NJY6OO6N<1$M*w;dJ&? zAK(xn+EH5#u>Hq2&JLVyF)(~_y_eRR4}waW4&tD#IbT5b%|6JqVs7y4Nwz?Yo0C$~ z1A-H}fy9`TzL%NS+Rfs|@CIg$o)5(Y*>YBxGd9n93?A*VNOnM-U3&54h?ig{1gw#C zsD@QRR1?jmy#b-5ZM>pz73{$3z$xAM@53{{L{9gAgkkDUU7Qb3>uUZlQ^m^Nrufpz z6B|wBK=_BUFR1B#CQyyUuX+in*IZ+F#DfZ$CtUGPit!AZ56x${to8pypq^7pVa586 z_iH7w>Es4?4G#ZwwFeR=@fnVbhNlF9KB8>76d|tTPfTBZM^9k@O&|kA0`BV85F}@( zvm9p5{5jt|h}NPf)??&*bWb?HR1@L3K1QM6)z?~!rQO6n;fmy?GuFEO1Nz?lXr7I= z@yv^8XF>&bXB3?E#?vXK2l4jy4cU$wBN=;B1>~a76R=lZ!rk=_M}>aX&GBTy~Ra+N$43&jtqd|_hJ+}F8ptVH5Wkzni z`F?X^+XikyJ@dhqC5ZBmy^tFVnl8t4y3c!o-~PvRy$QB|W0uMC_N@saxi%F*y`$p1F7v%?y1k`!hqihH<0A+$Bz~NYu{0T#TLn`pOJ?YBuhq+N-cN}3mn_mfegG(;MHQ#+O zykPpc!I^DK0}=XNGwg@+tI;2&(R?y%$enMY${>x8M(d z8)7kc4nc4u4=YtS)4vA}R-bHAZ=*GXk2VHeq10iu!DhswQC7PY848>4*rA5+ftkI^ zXrj$Ry4CaSg@i2UpJmJ)U*vD}fLrBCAIm`~{*!ScY6kIDKOVj)}Tlyb~~$k!B^- zEqgWKYc^}R8svjB8FL-#`CRbBoX|3TxEJY#x=FTHsZhAcXuTfQ@cM@%2V`Jwq<;~U zG~#N1-NwtgZD0Wlc>wAW{nA3UxThMms-#W3e^NXzNG_MVl0kqr3i44*x>vP5!dX`0 z*R8-cKDc0@LtolhQ42PoPkAjz^|{z&KtHJ{+WT4a%Cco%-cJlPjtBC}hb+}0wsgo{ zjI*-_7=S?HEs53SrPv9_h`9mFPuP6=@t$;A{*=~Ic40IqD(*mFp{?}H5KOc5iBHb$ z(icOmS1B-;E{=;VcL8_QJJZyLih$GzHnra8u|Iju~swTg=WS!u}F8`Re0aC;ZE< zrzY^gDU)nN%hZf=9BhKY_04$Zr{6FBT3hEr4sKoT&tkshSiY-@3H?& zHAOG=;AEHl!31aY?1YM&*78SjOT^y%r0pzK&%rQRBIR#GYmM=h)bGKf=skg&Y&vF8 zED|wjez`U&Qs{kOIM5XC=)~jk?9dh%Ht8;Z@|GlOuXw2qXxlwpEedNQ~)(Onql)aOo~G|?W5b9&M-jK6;k02BFOkV8#u(bk_!9sUJBF=P_}pA zHI5EHOI1=*74XP&mE^+u=B{qQtLl~>h^jg{w~DOk-}7y#c~DMRO%6D{eGz5iMYh_! z!-R^Qx&x$b1qZRV&IAVLr5f-{U8(;DKCf=uRmEYb(FUngPl)whg98gP7f znasvOGFKRuQXXJ~BDqEPM7{OA0y_%Ix88{#(L5~S(^mt=pXJH#K#^yIhxR@ol0Q~> zJ->Va5hx#=Vtvj$?E6L>jvk7pX3jG<4BpOGE<&4T9~TauEhORfW3V#wbu%1|OgNoD z;WZ?hl^|ykHGrM9$n(7!;2NE7Su4!gkS9)TJ6xlV?YkXsv}`d$h#8AWcW=lN7<_TZ zP)Z(hh=+K76543I6EMwk5N@<#J&bIM* z3AFXbr&$8__^q@K?&$EjqO;D*LJ!{k2IzpjhCmt7E{)AItd+E_9kMJ@YICu%1sAzf zwk$xbvwKR31+VwB_&y_a;J4OuFaA>vG1z6$mF;#*jIY@)3J4iMy8d=+0E^q)%aY+j zv6398%yJ}g$S`TjTAoH14`&u0O>zwv4dZ=Y@qH7ff;eICO7ofwNYC#Op}eF6T`Jz3 zk|oUCg8E>QI@z0m@}GBcIj#5YXWxL1mjEdx2YL9$7#K%XZgpAexryTHJhcXA21rJY z**K3}5%K|vM*^QBu3j~6??@1F2Mp*eANobB*PaUIaq`n2^-|ylxe1=*oO#Mt)e!$; zwJT80FT;f985ME;V;mImEXaAXko!y+X}3|>QWiIzVrMHsVS+0nGH{0iULVjCNmwV< z_L<&F66fSZyN_#A_`*v!!hSOl%{_c-FUvMAiYYMuP`TXICF^TlucPtdsEId1DT#L7 zpHS`X7i{vRrDRYkF6Q4-t^URnikjt%O$vx#!56qF< z$f0#iNn$qyI0X|TBxQa#{8Uk=q|_BpVhH0>NnG%UEo_EqSMj8VhRZ=$!GS3_GWPR; zrq=@2hE;amylY%IcNB~T35f%Kp%t#*>D5a&4S*!`FQ;AGwbBIVrj2=u9&cocPy2M0 zS=%uJt55WEj9^goxQy2prH1M1SLXb*00+(EwB4MLWkQ@(xNlDcr{;H7VY1UHq~kU` zdorANBt`G5O5qM36VUEbmVGyG;|@}_VXzEyay7kw7+74HFBQrE;h;veggNEAP$zRjG#J|J8`CkG>dqSiDwewg-+ftlAW?@XkGC=v|oq)DeB-_`CN?nJOv&d+I8Wbfj+In{aY9o7e6Vzn#(M3 zGK}wGK41&rcfa@eyNG$@`r!t$gJSb*`!2dDT9t2)Ti_h!r!a7R&=hZEo-5pO;G9*$ z%xi=&_RJX$4aY9fnJiB;rxwH>o$%CsHiJMl8L#Ety>ZrIeg(5v6X+Mny1D5Fi_K#~ zVY^{|1F$*4r?j)^xPK?_$|8|+cr2J52$dA=;eDF$(WI!4MjO>?Ks>_PGU#;G>c{K( z8@u42A#$E%yCuf?6XIc;EFcai9oT;}=Bt)1n^tEK?onhieJ@f|b&LQCh>q^S`&_t; zz0LqzFt=&yyeoWnSsJ-tl$ZZmtC!7y8ZIg$qKY5C(mhmU#s(u>gdbFdDBkj?5ZV-0 z{4b)vC+@g0Sb;jz7M{L6L@y0Gxv-rr6X1Sz?On&wHwaoVSbVmG(LDm1AbZYZPfC^2A8T%Pllw6)wN1hpED7~3co1bCWQW8WzTu1Boa0I0zq>#cfw z@R|zxQTPdz0F~tF_GFwK+u46 z?;}b|a=XI4^nx{&`80R}KQli3)pfZ1|8}@|%Srfj4ZF`#xwznp;bdAeub;va+pp9? ztV$Vd62HebS;w8+cILZxjd#POd%08!&Z=a(Hi$gL?VJ1P%-QZ31Ns6)lvX((n)^{e zUevJUIvy0y?e7@@h0gC1v_PsCU5N5yRRJupWJj?}z~|MXW9y6p1V_6F9N@|14@p0d zY4FiRhWN;wG3gZ?4pOQw(eLuo9_UdEKcH0T$HcWKrp9Z^fHY{Lc`rMUvDt1L)%tbt0obi0V6TMERRkF^L zftXt(<{20O^;|JHM8A%~XIs7ITq(Y;k;uo*Ay?;l*|+&v97&RXceO$pr#^GpT_^R3 zR#fAG%5h>SYA+~nz8p~l@ZnE6Lw`t~l8Bc}^Xu+!e;wpZ$t;b7PKuLJZCQk~*-IGc zakHEqVt$ZF>vXvr;>R3eyyT0(AGzb|w1ePqWMQml%QhXHl80|@@$Wjd-lhvAlyaOu z%|<9{qOGunTZ$ufQ209P{aOO8wFSZSN`}SMDc*H%A*x|kyW#NFDvJ%&2!9{ST4wpQ zh>vvC;#GJU9H&&r;4)BZVu|CQ-89k}VClWeLQvf%pca)6;0C5GCj{EI29$F~!J`b< zn$6gGG9r}B;dC9SN+q}lJnpO8!-nDffk)FaorRuz8v~%GbkIGax%s??qQOkqR7J9f zt4C+6enSvuXM;79r(xk$y02+K`#PpF0V3>N81`Mv(Y+9`Jj@3Y#GRInpa#w4gNsIo ztahNwYVR7X;erKdVp_mS${=65r+*$^MchJ3sT{JygyujtY~`HofsFRh5L_aX2wSEwO{6CA%O23tzZq44&-@I23N^LqgJp!J)NmfMjvSMH~L z)CnJ5WVi!Dh=HNJa{NJTD$nN4zkMlHxHmvMrJb|KHNSN;Zek-`wk#B6-+nkvfHiGM z0=hFlW8OP5jlO;c^&u}^AoYWmTeL|5(NR&3DBRq~_H8XYKU}_LwH={{YOJ)MabQ8< zY$lgGaW~&BbUaLpH69@1k!k#;HUIwLHzf-3>EzJU`)WD5w?BZlDy+tfA=NYhlprnJ zra~=V@DB;VNAwmsr{JA}lvi?3)LS1zuJ@UowfIu311yuc(IGE|c;d9xqSLp*9$B8o zPCAVYmWkD8&}P#-C1ee^iE?}|!bGFe&Q{Qk{<{h}=~$@uy`fWTP$5 z(2{uME9Tj<>-6Fvgi3}2jVxNKl94F22>h6^#5<6heE*)t3uy`Aps}5NQ?O3vuPSd+ z5`wXd3PGIEm{52BH+;Go4B6X;y!5WLk;cz_pCUe0vB!$x*-XY+yJ>el;~d+x09k$1 zTB^#qZ&)G^c-Wdb2iI^jNqB>YNV1(5@{dDD=tLUeFlqMPWy>zdZ2u%*TO( zTA*NfS3lFiBC^t$z){l7nQqo=3&U_SIs7A|oe2`$yf{+DD%A1jrl~9Jy2S8Lvbu%O znpwwb#pbi5GY}5}ZT;46|7RT2P+G~g0}SV9R(4>#ac=XVBHV3x zpVp%iny~TqSi>lZx^K+D+Vn7(KM4>QpsZxpC)WB{i_hWo=-#tCB(I=Q&*8VNC-VML zBkoa2)-79PXRKIW`RH2U41joEX%-vc+N4aSR}zq#|Kj0cI59-)0yUPLI0olf*tPwF zFhF(13y|-^w>VUp8;!WIM??uu;G-FOOG>&;c9Ou0cQAQgl$u)cfoqL15cX!lr)@jd zx0)FScV|ddD~%giTV<-=cRlUgtK|`)B3_E~A>R#)O!Zs&C;_2Wy~D9MeQ)|dq-vd0 zPSzHvP%8T(cZ1OYomMrHUMvjSo|dlDz#kTu+*2ARo8zXx)%Xo!i5o)4gZiVM5rogj5#LwW4i;;S? zvU&rbnBx_sd(i}TBTqRMmm6;KoIXLKQ4 zjfj==z**wqiN}I}=f15Zt^W}z+k^MZ@BsG|krEx_2X<}MH?82=O%c;mj%HW^(U8wf z*glH+7r*%gvE1nq2x_c|M%_4w7!S#h){pE1W(9(|UfMlL4+{5&ruv_tUrTi3k}ke< zF1Xlud{Tt9^FauARnI|Aw*9uNG`7@2x`ViRk4mso4RR(J)ux9^q^!Y!LiiVO4oQ<1 zrz!e2zJmdcKT@R3*Mo5MUWKufx#-4ZtapWUgtjhLCkKH}ESranzwulecE)^z1N}X# zM=^}F_|Wswj#&~#E!U&<`M*ykWsrI0UrwgVkJO#PdaZ+e zW5)6@Miu7WAUnHT=7%S$MwukAN{Y|*Gz-6D z;4B8ZPEe2tnd7^H=*gZQx~zmB#QA-4jZRj>L+Z~L4ZYe*`u_!2_x?2;$TsbK)I=kM zC{J34tCpE7=XPiK@wIh+WKZ0bM;s3L*QgX_VN2)9mSX%#bVA4grFO+2Ctamu8R{W-yM%vblwGZ=Czq$c&1+h-kTz1TenY-gCbQ z`sH&|w1pz7yT$n3G5nLPUhTpN=2Z+-LD4{9JS8A@(kK0qpS+OYA!vae%cQZ5M2Fi^%$*;kApCY5Gg*l!K?!;v? zwb{JnpAOQpkj90?`dX4j8*S&_Z*{o2JoCY|C_FR&kdUTKIR z^kTHBweHYCls~q^P`|c$|DRL(EA`)*OB4iN&BYZ2PsqxcGvb)LC$0DQ@+x53%IFDi zPt{s4#EG~^)gp$w#`@s3^W6AO!O!0@8CT^)a?fKicaZ586g%zY=qnvZWiZiUMZN-f zlP+me#;hQz19rlv|CA76d@(pSD*u-k_kPP?E^Dbs8x$p#LqgJ>xn9zyb*YSfFA!wmd23274M#D``>-`3 zjFV|1&nr_$CBu7SCLoBLfT=ASo5cf_X|iFtq-eY{(=2>9!do$j3d0hpA|MBhX+$`V z&fG~ux99UoYu9oHe7?*cui(SI#QAZ$C&s1o;uZDw+Rd&=RT-+=0UEZ{2|-4; z?p^6?GJ9S=zhi!YS4;@>)4;3u{_G8Wuqdy^w=_Covpdr#g~eD*eaYRfKYkSY1AE*b z8Odz{-|nncuXyEw#1ok%D&C#Fq$wucHXK0S`XTWvj!We<&V)sxkKy&sgky^WIPr+N zp?tIY-{)5JlOP=la1hoOfNuh^#|&LOR`_F|8qbZOjw&pZj-?X#G8sPLs=4G2^*feO z3zRAmG@3JhTZ>0e9y#)Aci11h-|To=TgA4>v&@c-=9YhRYFMoq5ruk6bNQ(k0T9N( zVp$KQEmZht1b^3s`}l}Yf0hlA__EtKQp%Lt>BB(wup{RsFm*d4?HhQ43R}w=1edDe zCLjZobDjS3gxxk=oYGxALZ-d{H;UT3xs-hIGg}~R4U3Hb;dmHS*1P|F#$2-9Z zSQuf_HpjdZ0!#Vs!5n^2>2|_E|BLi86)9j>E6ow{RiwU0l!f)#X^U z#ro9iz5Nz%*84%_gpLpB7ugY& z&Ta?NpQ7RoQOy-Ytt>^LcGI8x4$OC2e;xJ5_KZs@;@Wvy*|`;vK^ahizR^o0P@f(h z#&=e8jmR{O(!?H04KKI@P#bCdhfqO#OGV?W*y&)-D( z4-Pe)Ax9-%4u0%0h%K-yqWxtZ5Gopjc&Q4U_MPEMl%{|{bXVv3zzyU=Sf)o|MVOJL zTF@2Rz5gWhWW8V|?O{&cweVIY^ulr&#$D?MgmIp;;E|#yD|KN_GYartU?h)%d)H%6 zw;*=AN|t@e4u=Ao5|X!RI5wjTTOk91ajyJ*1pU17kFN)n!S+J0+ zkDM_MBR>>)PSM0s5QR5+)PPE|9cY7gAw%#s7^YuaSKi-_|GZp24mvRCQsEs?Ky18& z@5@}LF3+?=X5>b?Eoa4mqjSiB2h244uah@S64qK@jIjD>1aYR9Y)n=w_=>2r+N%lp zsCRebFkx5=o!ub}l3L*!#f$+f#N1o8JeG8FevVue0Smu(!Zz1NjzFAbhokI#iT(UGDg|MnAl{{== zLWAuSVAfa(el&vORaQ%LD2`W`YyQTPbl58i4tu~5*Apg(OtMHk-eAyoerRt z#=sJ!-}PIW1B}eJyKfPV#_a7_Q2^C3q!Yeh&NvTi3LMB-O414KwU}8Pmhk$cuar;o zo;=H2TS5y&1Mq&gI1R+zPW`Ka*joS--|wlgV5xPh#a+mTP4*5O z)q{_)DlR|<%T@2|Ik){1q}a+D4}xn07r^wz+4a@^N&-FdDzfcR0Y1*^OI@TIt&rMI zw240mq&y^EKcDnvyl@55Lg>PQYEgZ0kZBK${I$qcdhH|v9=GM0tp!FR?h%Ceg zWgdz)xftOmKL_%W9{K_b0Q}9b?)pJqRJ}lmaS3~Z?b8Y$W!*~{ziNM*O)Th~t?aHa z$Ef4*dKhMB*~4Tc%81$sWw!~QIZgKpSeTNt(j1vVFat2i&AcI;;x6))JP1C66HW34 zj-QOtf5Xc1tpxA@p}vvh5)W;VLFncn_oe!g@tCfD9vYHqX)XBXN}Vxs%fd92`<$M4 zWDc_^BixSP=<$T^9oZ%Fg|G-FLeJraXv7~`gWrM?Hf6NW=01vPAfHWggGW%M3A@Hy zl%2%@oLP8_9d%oHpN0M{4|J;xa0aJs>$sCvJM3%01Ud*r%9zd$o{{5(-sx%Pp#-k9 zhf2^6Nol{W%y)1N(qIJxK?j+>uoR1GYW%RxGPyUJCH0X;2L`ytS<&4&dau#VAGJO$ zzAOFR>I4eCcZUjPKj!cjw2 zDvk+71T6l)hHrV()aqeR$>?Bh{Qbc$dJo)_wN|?49&U`TtYP&%T z{L&~sUh=;Rkkb%D(%>JN-TNGacyj`ikt%46G|+UDuOd)DXwWI4C+e)qQTK^7?qc#n zOEwR}EC2qL8g<^o6DX8arbsOlmBmqKRl^;Tdn-$3gq4|y#m57RrkmY~%;v``H=iFX z+x6@`@{lRs)DMt>Rg`xer_iY*6|lP_0Bg=ty#|=c$$>5jM8H9DZKz77-UnXvN%7IA zG*DBKr5Fy)PGDO3Tg;!3B%MMNxTp`$Q6b6RbYYt9xXwiKMSI?1-vff)>drlq zn|z$w(@QRotkt^+ML{`b)WUi1B-5+lHL^nDAlEcqTxZ52vbfk*1!*=w+|OLGhe zVYZ?-g#`#ZO=r{4( zu&G7B-53e+Zu{Hz0OxS$x@LZ}B7n#-PwFNa6s@dn6aubW6_kQ4Qr>9Ce!-GxQyTHC z6z?S&Cpb>GO_Q0z-(>h{y`iM)<69gY2-P(jCkJ28Dk@}U3pUDWL3=UE{QI_fQ76fXnWseO0D*1f+41de{d`TH@OGKHVgy&a z{IC13&97)&&dEFj36VAt$z=eMEg zan5V71H&>vc+8+aolnK4_Ann*GtZV}5lUd{elG!cn>RCuNaq&ttX}-41{s_{K_rsL zx|?a7&m!r$nfmSJE0(4T{3`x$Z@=9qPxURZi7~}hkHd>G`pXJj1-!1l$rp=(jot~E zS-DI6_@!VHbdwj;7&!#4AuuZSUG-)e=n#S;ocJiXio|GJ;TJm=DNn!(DTClt^0at+ zcK!>^l=k2I3HcEj!4w*6w&_SAWNu#4v^uvmR48Wg)feiu$&8uNzOO9Uo(Y}cy?NrJ0kUGeA4Sv zz?#RJ0mN1O(!46_F(Gc=%*tvW$tUP=Ph3AqN)W>xt6lLS82J-rSdq=34WkG%=J;5b z37YRA{h5J4y}t4w3H^%`H$z%RQbQAgw2E%!9AWUTOr~kb-5Uj1+qDLR*-A|1#b8A1irR!c0ELKJFY(>MqZF+3#{%c<*yB>#q z(AaA8(2vYot&tRM1sW$1i=GlHM0T9RD&(C_d-P3$rI@SdsS~52S^1=>7Ue6rjfa|?xL;U7)cA1V(iW4g44UYXj;mMFku|+y%7;uZ=ZIJAiEKv z1ViKR8{f7dU>_?zHSVeGF3A3ZZM3+US``?!f6F5)|Jh9~BVD&`g&Y61h+_ovvLO0F z=gQz6v%ED#lVDkm{&y^)ZV-b16#6?0`oQasC(DxhTCj^p-K@-(fhG^79UQnlovu!4 zh`lZFntzWBfO2hwqLvRTcCA9-E~F{GuLec2uJOppgg^#;Hg-IEL8k7-7Ij#3}zr!#0 z!_%&$>|BWxrYWMht!Iuf{|sMhQx`I{LCp;R(9+o`^M5@0m`XVPh&nxxgVCM-KiOj?O9;Jg$EH@(D-=;k~) z#&|8tVG2DfgUPvvI?+(CFKm6tkdG0?kq4~>dX*m3GFZy#r?23f*}>6%$S68j%YPkk zlo0oG>Loe1-t-I!v z8Ry~&s-F;zWQL`##Bk3NioGpU#Bi&!fIe0Ta^bN|DiLj@rLj$s!>J9)*WUD?Zm?9J zCnQ1E?af|IReqT6g1v8l8-e4mBA`RQ*N7>|P_?((GOy+R(r2phWSTebSxf{*seILJ zs(9^}bXB!#^gX5CJ_;eXQs-xG(H%J7#LFybt{K4PY1$%Pv2d<$+9lC>InwT93enM& zeLJEFea@TNW(TP0#?v`M8W!J#QsMZTEitv^=wgy+K8?LdA!;;K=$-)4CP@4po(11f zcL8%e=vEZ+jq+Q@_>2|B|HPVW^?}WnD=q?w>@EX&*s+7smWtV>IR5zZC#&J>VV zuf)Ef$l%IuG4s5n`d)ImbgU2?bo{TuV<53`hNrrmn;sNCyN1=1Q84L0Gc%$@b8z~* zx@``Z-1qdHECLI%4!M5)K=fDi#=1q}4_GfwB;Rb)`o zF{-8D3_jw$enL5}V+sn<&_j;|=sZWV5lhHE*tzDGCV3#5E`^f*YQkc`wLT&YM#>P8 zQ?lWA18$$9A|-hZtO`_E+nCHkJB9cYiP1@AJzQu91Hr-Pu1pIFQabh1Z!B3fj42~s z+wn1itew)11s}3XJ~Lmxv81GDQOrZxPJ+DP65$F$U7}!3r0Hkt(9i1`dlo-yM;qov z&{-=-4HRb)SH010;ukf(1KNTihn+Fa88`L?HFFnrv-<$c3~u)GJvX=7ieO{N$W^5> z3%~GC=AWjiYMi%cRK6I$2~~QAHIWoeM-EemdnS&L%40+42o{}bfhd&s@ilyQZXq&Q zZIEU8Szn1Btq!~-$)IwhYP%Ock>wZDKRJ%!^#J34zgS5GDZ zpB8j6${Hxx;G@cLkBkD|AgTPNTA7)5(|&I5evh(X-&0;@l*gqlF(&C8ovJt&XQDgd zVsTVQGOIiw1Q&NU;s#?35={aS`ZW12xkfJMQgz$=J=?Y-WD#=}lSX_{xUDi?puos* zQPT7GQ0E-5W6f&{>gm8=LU~dKb=TCl-`3@X{}D0pGgt#8j*X}8Gz-p|9P~rA9x^V0 za=#e!4C}b$A2QO&C0Sdd(pY0&(j6(0%55@LyISPR1CI?_Pokwb<<&q#iE7|0shz{A zyPa+MEVB{qaNRQhGGTfR-D1#&ws{VY0f+EuJFC=`>B$*dEWVM3YXz8(FgV3PvlCgJ zO5U6zTO1nLP;f-g`dZ>V7#VejtCd)t%r8azwr9Z8w@|NIy_uy$DU?@0i|3x z+Xf_~4d=pw2M`$eQ?R85%c%gH7l=-1M53UYrEt9rZXC$^ErqL-xGxNjd1Zza3vlg+ zp7zQcWTBvQ$m zT!{7PBwCL5)fZBnk`pm$F@OBDkMBc|pqoR;uedgFCDN*y$|0X;e6~g>jiIK*Hb1kc(tvdO7eBG=~$`*1K27CA?+Wpox{hkA6A z$h@}?FU~bzwE4ua%S$pZ^%Zw<%57qmIfVO^at>C=ngR}xc`rdszjW0{x2S7E>efIE zfs)M;3I0&N;(4{UG;6FHJceLp5ugpiq4v~KhR*b&yz}1C5sHPCYMOB=@zVl7b6sH$ zTy}~>lAdFMmd*M%fEIcSK8C|}ta}514%M)ABDMh9k!CpzVhquFb+EKlx1V#gX}UIn;ic*V>ZB)nd^qhf)Su!YT) z=o$V{?m^!bzUZX;uZJ?_C2fZwl&D(eOTD@p2vF!hl7tL+QXKL;t)$@;)n|xCE;A^ zaO{;JH9s>UyAj(wVRhASQ-*ar^UHE<<8V;LeM7>gE6dEZs);08t@$322p`&Knwy+Q z*o%b*nv5-QXGHJnC5p}*kZ z9gsms5b_EN87N7x{y|L33bV*LxgQMml}~pohII#TA@1Tsyl+~=ymW~_atqWJm~x8; zZ6GeuaH@blWHYJRuxe6kU=?)op!xf5xz2V^HaKR_C+-K%jern+*i|FGRQw+N=g2wO zh>_Rh%p|Ir>3 z2lM|WK5d$V=+T^Tnc+G%ibgVOb#(b$!}G1UmsT+bH!HtC&AfVH1Fj!MGbS9E3o7m* zBOg#PR7L2xYic5hr0#rTTqk%;v7=L;dwLfEFM`R{MBYHk!Y#iZY~w&n-t#}i)y;2# zB7~^=w&_-e2fKWxzjdP9-p(cqJ26D16gvuV)&+&Z^tEL^OH>jh)7_bzn!;l{MNCS9 zwB?F|*~rhg`Zwo%0$Lzsh+Z`I(aMT?H$-PVHNd^bQ>%Z|Yy8*Rt_80PRVz2MA)>BM zVeBhPBdNqVwj1-UTJXjIs2={eX$oJ zk8m#1ew|R)PEnPybq#>a?}*J!OzM# z86tm7>+lUsL{}MqaqPpGt#X`PI4{(lwXhsveM~89&)=*a8r*wAZTIW;1o$x=*-{6r zzUB5!ZN6vDo$!A3`i{(vllKVV3xiVlENTMROUJtQz!MU%qy%7vQlDKED6WIT@J_o2 zblI`lx*ff6n8LokYm{q3JVE(mlIu=?8auW#2`OPN=9m6iV%zHW#J>wSZID4`OZDhus_xLsp$Q z6k~(WXd2toCoU3Y2L8th-xNOajolnq!GPFJ(=+-ct{F1bSpG^TcdZvb&~z#Rt}j&x zhARJK3kt9!Xv7HB1|h@c0lnbm85`l9YFJTAv>XpElRLA%(iws2jn0H%iq4-)Ftm)l-#6CS(QmOb6qb@KvV0t@i^x%>CiY zyr5Ll@e^Pd26W69V;Ta=2_ID;Oo;{~;{scax6ud#+&C1!>I(7&80u4PYtW+ZtBznB z$jYN|Z*+`ZWp&QKgLUz_TT?CY&BGEwXP_ZaHC4Kq#jZGe@4|Z+m&0?&hMs_G#&O^G zL_DI&vZ$tj5LdO~`{&L+a17>pTaA;8b(q!HsZhEUs!bW-{1 z51+=bKZ*y+XiMwydLt1mHLAS0;!Flbv*We9jL6a3eD=L?)O6#yI5u_zCA_xZMeu2# zEuu3qB9cEcO$dlPG2Ph%l1wRr?)TWrG7ed>^w=ErpqvuDhf!7|~Svp7~@N(SF_2IhGH3VCWB;drmHT&Faf&2q$$nyA$J(4`Q7 zJ=>BV&Jn~thv}mu_PAN3ji=+z_4x^Lv5v2g!m}F$Br0)%vA9XMS=U^81{rIKngZ$a z*Abt@`(;%w3_|IJ?6|jJzgY?EdN{cev1N=hPBJ4TGN!$=N4b^QbXpL-<0#YynR9(?bP0yjP&s zXU@^Ai$2_EQi!W>S8IueEsqJXBNwBB%X)Wv3^xo@>`v1lJ1cmHA0d8y>S@@4nDOmM-`C-rH#(b@FhYvh8q>2at-*~y1Nq=949}kHv_JTB zb2ew;Jt)6fcY%s#9o(+Uj+3UlrHD@qAv&y)3aCc>=hUar*Z&gB@MjwC0Z=SQf6&zx zE4B&;Gc6hY<~i^DxD68aCXi4QA6Wh~FUJ%={(z^MpECn-zYI-pev!;A3`!c!-*cb|iW{rI36*JJJ5D(B~ev11h73KDK`QE-jh z!US@%oQ9k;eIz^tK^pNwdPRdO15?LI?inm&p_g&*zbP(4eU;3;Ojq>v6V#tW2|j{2 zR~^t9v=V7f-PF(*%xw!lq{(IC&8CsQ z$k1@hU5#pO&l;tVEp}*^!GwR=@j8AEMudaD?RPsWLeMe7^{UtB5gW0j_+S(0N{Q}{ z&-8Qb)C?D@IlJKeWlLS~Lkk4t(n9!LcmlLCK}O2Czo50T4up`xU>OWwcGNoPj~f+v zGITgPWGXIN@onYzQni?=fYOi?%)H3DZf1}3`0(xiPXbQ<=IgfW| zs*hFW+LG*DB>zm+Ju1dlW<34V!aa$4r6L=aZMInFR7&VZOQqc5%I~*!i3#<|(;V}~ z3sMDdX08uO4F%xyW837m_sMDD=|uKl~xw zzZq(TLm|!|w5?=1Q!hDQ`W4k@6{44Xi8^CMF@#y0BUgurnefbVopwbMgrV62oq@D8 za?M@#GTo5t+ub>O3l1Q6aK^^A4EY6 zg~ZjJR_S<8fv9##L+Q*XHz(eeLQ0fC2s|^Uj|7(*lUuYq;VKP@UPfZ{T(i&Ni)^f; zkM~;eyk-1(36XiYKlA0^(+Fq@zFj+~Tyd8x>lp@BI*c=qw_%lOR+^?b^I(^U-EMHK zN`6jjZU9mtRy8{u3F5|Sdb+qjD%bT~ycPVQg4z>alYj}SDc}+mjq=qu65s`u5gb3C zh{+{=XM63m<|yiYkCv`aIr~IPyted{oq<5a*W!W50BX;OF(K#q`^!nc7VkZXld5NU zneQ_2yc~2%^DPIs{)eR`>()TJRSO~ujmIPCoQN)^sInCTa)AQl+=m^fvvA5?IpQdv zyMckWau{0d75Otkois?IVX~3g@ZY(K=kZ|4&5PrgETQ-Jbo@E*54dTMT@JVy0@gkrA6;*u~4> zsHQ;YPVTvgh#7nCvpKKW!YCxPDpc@&scbi~#U5qMkZ_8+nG=J@IB+NX#9BuKkV~5F zFqHdB#vv@{@ZNQ9-vse50%4Tn3hjNl@bU1h)vMj(ffx&hZ6~0lx_;Wck@-aNnTG6k zH{=VkGXrRnT_oD-A-3#cgz$ox~a|G?cR6$;$Xs-8<#hjbhH zm||)G&S}Ou`;sWIIbZH8fqTQqjqTrkl*Dr==#np{fcB{(4cR2QcK7{V{;>z;#=qJ4 z-RXxERyONe1HS*NxP9>@icc?$K}r#uSI;s8n|y_|LIt3DpOojo=un=J#?YCqt3JX< zB=Oes)ONL=!uuN2snW1M`}v~1XT+_;;V`%-NxfQE(R_jcY zXCA0%wH5uV@m7NR%Ekmnu@XSjDEW`XI%YWOaS$dbOTxzY8RV{`_3Dr|Q`M&KPf8lX z6EJMIRN^Ici)f5Za;GKC(D0iuJS|CN?`NUy3RLzwEeVg%+c2{hMF;~WUX;0j+4LTQ z7zPQ2kOwkW@nHXey?Kw_UEH$d-7oPNDT3s00$Aihj?EI7(IDv0+tBVOZs35NA`iejbb+eY)o~4dS?d{1ZS$Hs@&KIV#rfY{_*_i>J{n(M)tGR9_Nb$~s11t;8 z^4Bv6sPE3?i)o29Fj9W%FQ!=>zKCbCd?FK_+l(~9E_ncD?3N~Rz{`173y)fyJgG@g zCF>kKJB*&`frHIgPV=@BE7%v?c+9-_kdtnQsJpP_)6`3O z0?X6cN2xz^#YmL3F2oOp;xl{D((fL60$!`$s0N@}@!3hedh<~KzP--_w!uKAf)k6z19uY-W|LxD~vGjyO-p%^_5zR zAHYm_oPe~riTNmXr(81XfF1@b3u)%>)Hp|3-0R@IIBTQ(!wP<36_?$@o7h3LV)OIa z#6(P_T@zU@*UdWvGqce7xVx0~OK|w=bmn&-WE94P0`@J~>Ex!^I&-z@$}>w@PVkQx zRZLmZRSzi&=9a0M_j6~WLzO(kg1ZP~3d!4YrdqN#eJg3P%wXU4^be5ayVF@LqP3kk zvp;u#pB{XU7Bof(RAdLe(Te%w&P0kz+0vxlQVRCnF6TDx&2h_;$+j+j0`r(8N2aMp z5(7bJ8GOa~h^IE7#%Om`GpfIcQaQ$|;a7TGchA-Ax_0m-cu&M6!Qr>^MD=UcRn zqI;th?o%YVsPHDAv^JxE@I6)_dp58r6JaEsbbMLjLo8-#j>*$uZ%axXGi8o?mkitTpkub)yLlQub&SU)R?Ay9uO+ewkgzh(I2)x>m z^oAMF!Nzsz0_6|->yL{BMgSW>V|s4aer?&kH;w7ReKmVm1d?=t4V!x2WdZ#c?6;-` zR1QIli2i9(WbDjp@Yzcqj`;e1MpQ)LyMCF*uo*})sG$U_6c2WP&sq@?PdS0H(8$wS z`Oy^GXq= z;C10Nw7{7bjs3oeYqc))Uw?sC42o6VV?mxF&!pbcL}*OwjTv1n5u80HJ*T5I^_$$0 zE&p5$WbTcP2(E{;8Ptk)ym0^(q2pQS1I#dJK_RrU&uE|wW!B8vO1QY%yYV0|n=c!C z2xp{DwA~_4GU8CqGIu$E@X<10h(Q=$yE$8vG|S9-uJ3fGm9JWNDJy?3kGv5$)Ek+- z<TSbl#WtI z8#}*3Z+S}^G{!HcxXJdL=}?TB;Hn1SqeAg6x!Juobk&MZf!P!)w&fBY_PI3R&cZAb z`Ts5@cL+f6Xx`y_*7iF!g{I71CxgS-mPvu7X#jX=Jz;mWmK`>s>#M=_W_i~k+Li(x z^bS0`E|eZ;lL(MuY|HnR2a`UaM+N!(290uTQc~7lomFg$1IbvjSV~g>@CTx}&L>+r z4Sar1eR;&j>JXS%DoMI-FUrXnUtFB^chuQZxkvRA{n;km?TkSkh4F}=2^pQ@TZ#NG zMam-OS~*7>`jGysgmPd-_(a}u&N`;VH6K0P&nMF8iW3RNv!mo9?E`b6I_duYJH|8L zyRzVDUv#cltPH^@`{GeTr9Ha+j$L(nDu10kF=$P^t9*YLV@Tg_>*4i;Js1%S{NzvP z<(!2RUKYbNN4yIT7KBmQ8r{DY6-2{yg1fCBx_LWXMdvYaBb>z$P17mik_L|#ic*y{ zt9y`5-D?A%g7h|Rp3j7g`OhKhc1hCU2ZjxjaYkp-N*!bY)9KIzxs=}kr`HC6ZPJKDmYtYf z9!(L0ec;(P@@L*nqXfog&=vltsQit&4TjcEwcQ&Xe*naZAyJvkd>ETNJ44xWCxyBH zvh88oaG^|u^5LZu6s9X(m1YD7RCx!SVj*i7)ubmA68HyIf=etqV_}8flj%N_3ll5B z0Qc%2xDSm=Bt)DRlf&{qDrI|C#l$$Jcf~^cAZ73`X`{|(opkE++9imCG&84OffMKz z*BgjlBEM7;V9(9?xuPjBn=Jizi&A+ONO$_p!K~IGsQ(-`0zQ`Qw%Nm@c<5H@6(900 z%PhcP36{&nJPbGOda$Ed2$;*bn-2gr4NX%)pBmF{EI?#&LG6ksFhLvG|6@b_=`o}uunepJ}_XmX4EwRH|J;u~| zu~G(wUvF_T6rep05Od|8d#g1OL_UJ*=QA%D^KM z;NVFS5AyUj)q8-38+H*m%b2Qkuh57;|GKx9`frW#)WJuv2%?@Fk~*uwq309JpaN8D zf8|uf{RLYmNoFEk08dF|CX}N!9g78pJ?jIA!a%Wt{yh{p&gW+|G9VRMQavzVnsVC= zyHPBz*{3;}pigioTIi~H@cFP`GaV5gl_JMT1HAaLbiD%v2~5lO3ct9xDo89oXKqvE-K0D}11!lIsczWmRps1VFJ|(>IWjFcy*N zi7P45Vh=s;{ttdxk$Z5Q#&$H_SiL`Ld;v$6$Vj|MK$lZbFU@ZHXC6ZFDVC{_Ph#nA zos%}@)ULEdH0T{XsBY5B{H?&p1`%1f88E30RvS zZ?$hOBO+K3${*#Y1S0F^L0WkVU7PFAd14OdNp?@$vHpu~As#qg;Rs3dq!1oWvxZ%j z=-Q<|U2cg8=F|LqBxLT!?WsxU(Zal|A-^@ucUT|0G$lXn>8=Uh3#g!AdHv>(Rx9#y zZaW7^m|g&ZES-ec4_9$l+qEviw4io*Ky9~|Ghmj4+?zP=Lm~IvLLG2@=k41a4jXk@ zq@m>JASWP6QFw5S=A!WE$RHGmP;+WWV0~Id%9`*z!?8IQ9yT4>HbsE_YIMw>&>G7m z{n(>|WWCs6iyM@Q5uH|>Tm=h$b9ggjhuh@O=ny~^h@;bMkoSnI)rdH9)LK3^?1ZdA zzPPdQ621NiN*`^gNPdDrbTS0(dndbz+K?#I9>WqlyeC}`-uDb^gJgBgJM2bI+~#?XE2mck|LAPMNA!7I6K>uhRq+6leU=&jiMYijAjS&Q zZ>HgCT=$ywt@byH;KG7`m2wb5h7&}{AO&dIb1-EovX#Z1^(64m1UJ1#kvaCFngo?k zB}^zv;5=l>fFKA(#)aA=O}e-IQE09&ZwSax+ZAu0Px4nf{X=-eD~!lAOB^+}piJuC zgzVwZ@Q3|al;%_0ROODo?A7w2FV%GdUZUzqJkD3PrT(8O$A2`)dUw$ZmM|o4_@#*O~22l1-~j(dRO*=%ab>ZO2~XJ zlJ%*E%7>0sdYlJKT87xt2Fx!fml^;VpxEl8w-he6X=Vu8J5pXv6CO>@n9<(R*qz4j zgFW^mL@qXrD=dR~^}?lLH`4%Ta=M}GNplGG;t`E7|EIK@SB}nG>qK?;o9VI9IwbvH z#~PJsFHy0Cffa1!0z%gGPVc^s;StjD&R`nvja>ZlPZ^}+;ikVVSMq4aecG!Za74R8 zxU%N2_P3tBtO&IiW5tu7@`Tfx;(sUVa8TNjEeN0N+~cn(9=B$qG|J7S)0^qymYJBQ z?jaGkkQbC)mxxU5N7Su=Jcl6nXLnw<>AH0H8Xgl_fZ~D!9yF`AyOu|}J9G568zd6* zJtBP{qGz`xe3guilgSmjNfK)=CI2=S&EP&(6{`Lv`di)+epUJ*wi;GIZ!WWzpOF4w z-oi0pkREog@Sgg6Yi&Xu!I+iL8Tl&iCGTb~SO6Xr_AhWDd|$dQwSq$}g9%Xi(z}<1 zlA9c#H2t?PJl&X`*L_i6TciUt z7~g(>Zm9XsK<1<9YcmME7RjziJ&PKAG=ypF$a63M2AmlAHAMt>5hi;7DL#`|-hf_S zF|Y_R+nu43xwiB(uHcH|T=}2o;U;f<%HuXv?VztIKMS&fOiBdT19)(dqDw;EONevH zr}p*CHB*!@BF1wCfZ`Q)f{KgE0xqR>&wx>PnAu{E_&3N(*s_XQ0JGXFLx2d&dBzqPN$plaVR+>5Ha-si1!!&a| z#)8l}vn5=J!ds~!(cVg|NMITGN&1peD9{femL0 z30XZv5bR_b#@SlewSj@7YSV$F^v(3avkHty`;`;phWngylPTOGiC>3JJk@?776CnI z@HC>9u?q(~Gml2w`?jdoni<#%5|;3#|M$};M=%F^3y;ZwLj-eJGzB$1Q2rPL&kXOX zCojh|Mv-Puzpo<3xc%e|yM#e5-J*xGu#Q75iYsKOi6nZTiG>xNzhGg-g+j+ESMTER z5F|TD+4=p$nG(zRVYF8Ka5FA%j+JP|FX{i)r-`a%!!cFL| zMw-JLq3=wQl-PL(&9WTQGYguJF(3C5BNSNvu%gPL!JFxo_US34gqi*^X6(m*5DGBt z=5iB`A5(J819jBKxHE1@rtdD($1l10#6YgK=&Li>M_R5bjGsdIOf2~$uHbnozZF`; zXA&5__?+)Yd|<#8ivV^X>g|u~k@JqAKO_F@99&qo(!|J0KzX5A5nwuEpIp>&WWdy8 zMO0>}?K@0gm(hz-g-5Se_Z%qK_efwepZ~?!IV_8!1zGUewr$(CZ5#L4wr$(CZQHhO ztKY0AJ?MX^*cH2CtxO6|rY&XbgV=Vr&{X62S+iCf1Y0H2vG-B@k-G?F8J9seErIA1 z)P;i1$Q1*t-iQ%KfsbjC$j{ze6#|m@4-&i}yM!V0Bdd60J|I_Vlo<{qpbr*MS=hmN zn*l*!`FrtKBo1%EPo29cXIyes>BA(EZz&j%Le7nig^Zy|RCiQ1t&N@$&O@)CS?AJr zR;lq4W+G(e;TA^oFz3E}ED%_~kbPLW@y=EQswyty{TfIS?W>h#?^LJQ4vXnjJ<|iy zxyt`=+_0S~8^__jg9`1Q+KiU8VRpb1-Uegb6dGWaRUdh(VTnBv5p;UL<64oPK*6x+ zTnB+$PSW4d`<kpedMCzj5WaPSm~-iOc~rIUNea>@@5@KC{GYd{yy9 z$J?FXv?(!-d2IZsgxA%Tz_i?cc^x6H#V%FEI#h z`R6K^xwRmNGapS-xwfu5=ACh@x*=~xe##7^jVQZP!Y|BwBG2Q)g{>;q-jk9;`MnQO zCl5x?5d}BkhRdLHR|?pgMh8F6j&)x!dn#DGwIP2~h^i?iPafMie03V7cC<&x7|00X#spZBH#`GAcSDP{!>RTC) zWObB8d{2*}2+qv1;&5vNt%&C@g;>2tE|t;u7q#mn!42nqsl%7WW89yNuvBj6`Di_G z3Y_B0&CG%8RImGJRd;OInZ-wVCqZaxW)ECGb@C=C zI2i*U_VxKS5KC|Sk;r-q;MNuScLe;59^R84Ef2BAuRBujK!F}eO}WPu0{v#vJ=mcc z&L$TcL##X2;F+KbbUW)|?%%@OY}xHw=a;AhS=w!mIC>|&Dhar8+|>qS;kS|hj=2`> z(C8-sT%=9fVVb5mjI)hhr0skWLi&)#!A9{~0>!Lz{IqFdG>!3)=lSs~G12T+_i5SA z%->|F?QQ}jgt$k(-t89T-Mo-6D&Zi;v7{LNrYdbgg9B)e)ILF=GLKXW19UWqjM%rW z&(IFc75j*FMCs!_@YPK)nl^cG124V_-*H;RXmc zunQpXJ?0|~#Lj4pdh|oq>S1exKMH_Cbrc1Zkntn0X~nJ&Js4_A&jw&?bupd|X2lB^ zM%lepsResLzrvNoQJrj+_qKcMYa<@$L2HTMn^6t2=&NWtWvjsDL-`fUte>tZ?jlv{ zBSgM!goGU=5)<{{48Up+Qi6FkH@dW6(|FZ6xZ;v)DAEl7Xbeu!UzU)MSuKQRJk+zS zk*mxZFlsNBs+V1G6^O!E|Ie6R<43Nn%}>#gamQsdlbArN2|yt+Th6vP7?1TOrE2CN zg-HN7dR)mQ{4gT(Ck(SZkbno4%rqG4fSt$_7FgO$=@m$0azZ=%93EezUdAHXmGtHt z+H$E7K)jdiAU&o9*+i{FY*M z>q*xpuxA@K-{^6_=P?!P)x=u%aDaHm_cFTRQ!G1vUbLD{fWCII*BNQ`L-I@h>_Vyr zmsdMwA(CI*hilRzFgjYOp35a!!@bd4%9Mq;0kOc=%z8@51CAVp`bP>=_OZj|k-HbL+As zmF%b$h`Uo;gn0e_u&DU{REhd4x2r+Fpoj9~jDa%u698ZJRrWjk1TdVNMk@|D6mCHe zJ}nL_^vnZu30X8dk``$H@Jl2SE`D@KH3w0u;6&_Xs+?qx5_M#;gsy`95??_)JRq$bT zN{LZEun0Q*E{6;nF~p)sN}80gz#_|uG?*`$-NFE^nS%Z+$z?1RxLfqN?4EA>nlV%#a( zI@~#5Lazork!q*q`xR`fe)f|0GoyA9kxnYyY8RrI|L9=@UFb-%=Npsikbn%8E62JW zK-x*+Ey|kc1d2{^R;0HihKPOREe(cW;qp?y&a9i%A;j4@#P-Oc!zA~Rm*9;^+8zRpBy(GC+P)6fg zQGDkvlekHsl6z|q0wC7u7SY^Pjava(?D6)$&?k=XeN@6|#8^`*eFQsJf#NEnwt9}$ z0p+wdtRUs4jk9)DPjYJ_Q@5QD>8dF)13=>xb^7&57D*A1Y5XP+Df~ABbv)!9%Y--L zQp+pEviAnW^Yr1y6N|zsq5Sn?B9&#kGcvr;!`(AcY(U0&vdLK`s4_)tXGX8G#0si& z7*F^{BfE29&p=;vd^jlKLUM8s9g225A;$`DcM(95Z%3t8K#$kvu}MuSBHJ*4=IAry zXrdu?c%=%)1VdbtetD$1gT|QZ{rE42C6$S0DUq}A{H_mxvkIu2zDfa%joq>DbWv6u z-0*Xl7U1ZXSrTC8zAj#gZY z0`Xj0_%;vV6*!LU-w?#PA0i3d5`%xJE(rN- z3=lInm%XS)W z{N=*F^+$cH!^5~SNOOwEWK1sE&3@ykEs|bF%6&cOl#vPbtq@fF1OD7G>hCsXeugn$ zEro+UV8=1yMule~iJ`5BJ5Gmk9elN2I#%fol!a*1rLA&4v;O{fGjGVxhp?S;lFHp?>y1Zf9au`*u+Yk!l< zvB9lV<}w3VuQsV6Ho*&`y9X z79?wXbGamk3r+hpQ#@EoWZ<1qv5NZO7Q>_+V z1N%I53d()v%hig6mvaN+aT5BNmNn^tT7+fR5H=q4XVr?G1rI#N?z?caGp1%><=EAO z01vibAzfF1ZST>nJ)Kzx%XAmOtoC648cQN%#5v$iJL08_Fz=lo4(g^Yr^8`D6`Q~> z=_GkUIHZb|&6;khW~~l_Djkqz4ydo~175bQU%f@uiHgzS>drim0+bEQpWI9wA;~(f zz>q4|diVNw?JnYTPImiavX=~{lT<%JM6f2MkooS2KwWSe>tT!h_3?IyloOg&#IF&? z0?a>bdejF+xXVvXon2a@hO5y|n<+2@q==Kg1ZKCuE5!!Hv(wYoz1DfL96)9O^3l!m zR$)YR*x^h3pqUIo>v$B;74BDPwQqf0Y4{reL?k*Ax^Q5_N`%_uE5Q-76x~oLD!xX` zvCM+Efm2q1(u@3R`2G`Z5wX2|F?xtG*@?uZo(h1psrGO6IX-*U=(XpnKzAgCAp~ZE zKA&Y7+|~yq4tG#=w5Mpsni{?1yo%Gxbtm4HJ1$bF&H`>`5xFhGK_o%k?s>ue z(!9p8%$#XvB^Cribdvc3hPWcs_zMSp>7dcb@=FyI`X=^O`9uzvi809yLK-7I+@tBw zEOvA0!KvHBUrt*EP=e`p)wvg?a^lnDXwBP;9}ZIE-m*fx9*Y%;@qz`lXMz&f0$cQY z;bU6VInxHTSBDPHe)FYUyJ2?j*P16V_<;X~(S_t^d^N360=eo)SbwgqN|q zv!-3B8H`nA#+17D;D9l8yS_Mat-+A~6QSDXGcj$*j4T(3!vR-EHOr-DUE$zaouTKK zKLW*+o|K=LDtUaTJYM@(K>vBOc>$yt3a^dzC#x(YBFxK9k{a;lb3q}!B20in1bF5c zGpWOt8f(HpnBmDe7P99PfHT@K-&;^a=a+z>r4DY9!%LQ&w=cZO*?4;3m?xnV8S7#O zHXLr5i+H1i8%BWnIOI02Z(98=$ob}qqF7+cF7V6`O3$kQd*aWEG0v z_OVio?k_Uza&!5>Zcd@y7?=`C;zG>TG7b@LDNbVK#1dVO`Y|Dpo1C0jFtBNY4%Nok`FJ!vi8-KR`Zgt7<9VY-E77m5^S;3%&f*S#(8#QG?5BtRfWpdZLQ>__!dlh*@)U#nKAsRhk_{!@xkPPR4SD#^ z0dZdAUOuFWF#c1rMh;}~Y}OR}1bJmKaIT8yf(PM6SRJ{aYOoPYt;P=TBQ2!O7JT}k zCb8p`RFCPE3Km29kWnI0tQ8Jw7BT_g-F~8mKh)cCwF~5WIaJeI!U3S08j*RR9E;Js z1rP<U&}Gp6E2Lp& zbsz4>2QTt4p6QC3@+si?XMQ+}n{t3C`138NYTUT@mPMhF1cU$lW>r)0%w_Ph$~NP3 zHG!i*fDoKzXHGE9h&f$I>{yVt>POc)CTV3LFz)!x+$Vwf@X1B*Tr}73rLvhod?aEM zJgLP;XZ4?4LD1vfgkmo*#h%tL6G{bQF1cR$nVc`E;C8|tKSWUro#r*X`Sa-c(N*pV z(DTX#$18?h_nIW<`&1r#4uj85?Yd8y?7+9`X1j&mmB@4i{zVdg{Q;Hbw=gL&|1n?N%O-A6U0VVoifUV$do4oUszu=9JAp=)+6IO zw3hwdLiM=v%Wqs&ivnZO6S{RVo`?%?66I)|q2j*Im2GD;vO5H^aOMhfL2l6B+InZX zSYPYvd3Zq?RLhp>LpA*ZGgi?}A!RWcy|EoUQQGQPlZds-Ec`K0gViNmuLr$2>sy;$ z$~y>Kx~j}ue8KEFycO;sdodo3n3+tegAhV+g#bbB@WswKZZ1i*nB@LniB#S5&g&$^ zdHCi@>=P3v(%aKV3>AzBaOEG zc5O?crqiexxUFYn?}(Z3Hn3ao2{EKQhP64&Gj-IgtvpNk7ky6@lP z11VP>+Qoymc4bew_{~mDqf2?M&})KvuesSo%q3@+J1rE-Mdo9gPvP+VL{??PG#%8K z$uT_icp4@a2wOBPfkY^_N88$7nWd&+Tmy%O(|oO~zfO^9uN(&lZ_r6x3JCN~p8~Lj zEbU)?IuFvW3NWWj0#fm$4D#4tjTkZ1^K7%aQL>Pc)3F}D)r8Tky}|kr6l)aP56jKa z*3v3}+~vT%>8l!y3(qhyXaf@cTFxVj-fAQ7wNvaVlI9&H3QMK9(~Y8SE^qMbzYiL= z?QR*3{c5{qO5kDYUyC}%kg~-~p3bRa<`@l*czJ$g@s;PR4a)2) zOTXJIqr^_0oEEAP!#?lnAcsU{{*|nCx>CYZeSQ5qS*JHEM-v3xt7L$tq}Ei!*-i*> zj))lOri^=q^jie=FMi%GF9f%j(Wx|I(s`O{E?Oo`c<`ZPo8R7>_L@i+Ik{XAmg^YX;l{8(4Q{Gwlo#-$e zZ^&oQ1#p9#c~#<7+EmY9=x3LPqs=~KL~P88%9wi_E|N6KLegN&e&sWFapzGuv1Xw$ zoxXPt3$hEhU3M64J|}Yv6WDRUGk9yra@cn?R{(y4aiG+dnjqqQ2`VH*5d*(5jp}IA zf=Obu`e*oZ5JbXL;4Nhzxei{tAsCp3da<7~?2xAt4)F4GNtybE7gBT;VMf@;=7j4 zUfD$og)cx7c%^D1q(G8EL2^rWxmQ-M2p7}9@IVqT1f%C$t@Q&03OcoIZddZIH5K3H zYenw26ab>8*iH?HS%ZAt$F7v$iP_Bln!~U*R>@z7-)E>XWHvAV245PWJDJQ40Gmt` zyVH~?YD%_nU6%2qeZ($k@En+1(K*3XHuB^;=p=3Y>KV!pz?13@?Xj6?CiD1Juk7Zk zSy8UYf>q)dZ0+F&Fhy^t9qR+D{hKZ)k5h_Naks2?dE(5q%+(nE+J69rYI*X|^2StQ zb`0s$Yhu^~;sDVv&B>Bpw%3S`0hRW5=0;fnJ(;V^+i%hJBzRJ(wJ~=I&64$NYissQ zt!gScLxRo`_CMIdKI~>CMc}HopD@DOGNa?vCCJHmsv3X zIU?*34>0f5B6wAFi@($ktlx|21lBV`mLY_5i$VLW*2laBo`OJxx`p1yIr(;ZUNUqj z@|e&;)?$98Xq>5&hR{Yv$De!jl-!KCl-GOtfRUc;KNR*`zHhEf#v}UgcuR)$O8=}| z`Wy4*ly}1O290fpzz~!BKWk&{T@lkB|5zR$30d~TNdnQwLXP2v{ zjkDldIkMT|<@F_*e*oSDjMLHXm2YfD@y1(-Zs+8FC0Rml`7)_p^bXE#zPCtly(gEv zVSyQ5!TVIL?wM#EU==7JO4Wz01qaPSB|sDkaf?Wo2_MZel_lf{@@^&bvNyplKQ^0TK6ipllv0SPTz#jZ)RCyEMMuo3t#AjV$RGB?R|^3>_aybC zO)1lYo3&Mdvt4FJPZ|QIdKj`L0pd2aOV)|s(dx37Zh*>xjd<^Sv!W`##$=w9M8^iF0W3u z%+-p}%u0&ZDJy2KVNRxbd=o^hv2lGNdFv#4Lw8ET0SiksF^TZlJ$#K~ut1tO)f0i| z3e7G)j|#EFXVV02p%)P?2%R!Z24{`zaMRfLeZFJ?(4_@*BW;GHP9uFhKC!Mm<)Lka zz^0Z5EUky)iVV{;pXkeaaS1JAaV~zn%Ihc1jp>IspfHzCJ|f>Aohav-ZXq!Klt=)*jx1#`Orat854dF8qPKDPd(}@z>Hus?=xKdD#8HYr z)^nREf*60SfmY+12%k`kxK!ZDajl}tyC^d4jKIZls2UQVly(Xl=MMLI8oflW9LQ%P zF;NLB>Ldp*HZIp)YKxjQfY0(RrJ55Xca0HB_u8#wpr#T_o>~S@0ihJF4V&e&I?hb& zo8#h>oVf2=p4+y_lC1Lp$g@F>)mF5{yE`(vBxRMY~+bP_}@xNR#5R zAn2(`H)fQmCke$u_}{>USuaDn-f?nIOnu#YbdEc@UEByUhgV07fldJl^9)8}UE>t; zni5?apvngTUxu|_k{#yXB$gTu3$(3pX7N$)gK%Y#>maoQ00yFWpkedkiMd*HuV4F- zL=P8_fI3hZ#g0a2n_=n)ShwE}Fx}sE z;!5|c)1JN-pdjYFFvw~YjjBw^P1N93#E4iV!!$@xC>^&gaMWwO_bGRYZ`-Bh#c_uh zeGTBgQ_>I=-qv$I(-0C?Y;b-b2Nmx!=-c@`9H_@6cw5GG0Z2`o#Qfnu(yZvR`l<_` zXiqSBEnM~xH6lt_T-yvEgt;WpGI*{Br>f(~&RuZzrZm2R)RaWTc?5ZFb<)IN@UgGS z9fC#tgxn5y5{5W2B)h%)+nO=!js8v_c;OXa_0UV*B15()!-T*JZ8PzXhV@ReXFq+F z5WMZ-aaQbqv|&*dKNf5_SyesXHZp2ZB)@-PG-U3TyN~1MQgA)e!IN3af1-7eYCdLCbZC z!r`=H2ydD$Z{d2R!9WxjQWQByYlC(Cv z^3fWx(^HhK8>XAXx!oS7xN7(*aR@9c(Rb1&YF15&bh+vAMgi<-l4U95LpkhCEAqX* zAP6PK|4wA}_bez!@)VgE**YC9L<^4e7Q7raBxl$dz z{D8JxC9Z|#yF^#hB8a6ZB1M#oVIXK%Q9$R5t3u{QSnQQTlGF^qi%w4`(baH*g@RQpfRF!>5VMBbaF>9R>o1z=oodphI%;V-y=>ViTwQCt3TcIL6#vDjB3o>EGY*cD zJ?11vuqS6F9-6!h-L;~8SweF+2!NCxFxlQq+!Z|&WqV@}+iYAu#l zyNlFE6_@`P2`E7Z{+HB7kqKFqgen5llppe*^1ED-`=nMB#lX-ul*zHVo$6`p+Y{(E z28YA*hwKu(`1`MX=pSt6_r%|AbRzwY4|+mB_rJP3#21Z1@yc4&lw)sBT6>0zm?YYO zP~{w#(OculD@26ip#uNkPkH#qp-9tP?f+$dOC|b=tnnm_;aCy^;oY%}0fndhV8k=J zcFBQdN|=zUT_i)VM~>pFU3_@BiyPXdmzoiknrVf8V0yU%JFS+U1YfO7^KcR{)t;@e5q6brd36rCL>rMd2Ilept_-llg(BsjP} zDx)C7m5tzOUM5BZhb8ER*75hOTk;hV{^l1cyf#@fc?daz1qSSz7v7CKuD&Rar>|d- z;>)DY3GBxJq#BDcHI|YNxQEjs8JOgP;$k=M$Mxio2}`EaxQBW}n**f28Ut_IF`K9M z5oHMgZm9!k3|hIbnVdlAi)%&wufq-c`57MO#lGBgr@S}){_MkCJn+w|EL{2tPyk58lp3L!}At@a&8b!q&?)zt#Y^coeBB@%))*j-Z3JACc`;+-UMM*_*WZNLW3j;7+7 zUIx#{TH>nUJiAE}(RwWOOapW!&xpuuO5*G}95Gu`-;mR*Ko%U`&X3-vY~;$R?+8^_ zRbBbNZv8a{>T1F4W7)N&0^w{vxd(Cbuj^Whos6k`?^LrHIO1M|ISQ2#_^!9aNiO(# zZv}o&O76%SR={1qEFcU7^!BKDLEM~O9xndNS7~5_+oP5KXiokf@d~k{`{RLzdy#R> zQYCs=h_i9%Z*Bv1CWO<9^h0N3DF3K{g;_kKt!UUFkK54R`?4RJk&2bA*-Tp9O+RAl zpph|TiBO&!V1?S@cVvTKs(zCD0b3U|WBrsNlIm6d>w~TanzohuKl|Q{|IfZRJ0mOG z|DwEjy)reUH~9l?(wE)UslpdLY26oG5WLL7GEQ5AHo${TLi%UYKXYAs z7Q-TaB(*4S#;r?tKL#ZU1qhpWEbFy#lZYdwROja6sVh~IHWNk0@9@}RXDCE;1>^MQ#DUB+<)uRvZd0sXH5jYW7 zE^)#5rvhrrr&$HbCkd6w(0RBr>>FeQf%*VU(UqvPl%OOqtrH!=nDY=Lf{{~a`SJ6K zt*k;#Swsbco^OTjjSTLoVEq0?p>Y{xY-FlQy9WX$UI{>evK<@NPqpwgwdb7(cu_po z#UM`Xx@Oc5ba)5f*s5PsSV1LLhpnVI*AdEoL>OCk=RY4F&$<;0cD!1riOj{u7;g3I z$=Lv6Y4vXy=xzcJEla=+18sDe045f?ro~S+kd+|mR^RHv*>h{ElNMPzyHi|4-6VBG zgVWEH6mkz)RrH_6(3~Ngp@!;R;lVw_10uQoCl;;D<#ynN;oVfjCS$ZY=dWt3M0T^- zvOp2NWG$D!!T1>3l@qJ=A5M?lZ)b2>j^dey^AY%dgJrB zx-bEdcpBR{EIBAAp;67?3)CTtqZ`y}BY8wiX&Tgc;UmUr`QP~b_X2In^X{qz2wDc~ zxNGjlkp5K{#~h;)_*RqF6`Hbqcnq7(#C`)so_&?Fmb_S#{iZZ7yUW^@d$KIOJK#>< zn2) zI}UidbRM)F8y}}u4O-rL3&_~QOmH&$kBVg}raN$GAi@>&BNQmGAvJv?2ItuS(?Y`& zZ@zl-Sq5HvD&dCt3||WM(il(z{Y}xtvcg2)_kx6?T*}bmN~J zmNMhPFMQPpe|vsu!f}LjK$#~*^%CqAR{jsfPm`FY(5siHAS4g?-muZCV!D+_l#yvZ z*J*W*W(E{70jmC?=QHLdOl7dacSxWERfl7OV-<+D?4_xaY4sqQ&?S$$#qNU$2{yz8 zBxN@^OF?17+28z2d>A5yhYP)N!h4E%ZHHC8VOQo3AR)b6D%s>Uh8m-Wt}4wr?PQwa zN{k;d8ZDu@;peM1|G-S+Nyzh?dwsU5_%nZ;+}mYQd4L3%S#I|lR(Xv-Ax3P2`jgr_ zR~A$#c}#dMA}a`YOp6dn&8$l5vD``VNvUNJk4^}~{b;B!0Wp(O;j#{m zBmoi_gLB$+Y_pq9ilrI&k+Ng!Y~T%N&}0e5vueNRCWE&pn+B1Ko|@o;{2?y1Vt2k& zj=7zxKO|{!Icb13jlptSZyA|Hsj6Cns`7(F3@L*i!VR_DL9CJ>%(-dAQ6$?!&K)=2 zxO{GZri$2m*>GVH_t;m5wTbbvX|t#dLA4P0@p!t6M*kbT3JKXzRBI!!KVxnw5J&%h z^txE?h`xdEwBUG_hMeK8A#SS0jTl5FGu;r{Nnr1ji;CD-lG^#dbqKn8*;`LD8$8z< zEzVQrF3;QDGE#Z4lT&AxuIVM^hB6OC)DH(uvmzi3%h!<3>%owdjfj>kU|_`F)VlwA zh`%Y!k`-BcW@0I4IsLtk?ECfY|YZ&dgrzhX7bCx73h*a~tPzV)C zceSQb0^ATWvP_@0rVxXgVfD!}UmOQ2_u1= zY|V?YrnPdn&+CT#bqCsa)P+XvGxrHQ0O9QUyMnB{lVVRVl) zwIG2SYU15utiX5k|2jZYmv7-mHw^uN@Rkb&<>K_-{sX59uYJREuCAKiX_wt>MPC4N z`(s-5tHmR(G#ZsKRrU-@7l`N1p^HQP2&mM*-Hk2lzI=7+jz8nJlTX;{UmLRIm$zR~ z4RwYEm58sU8l7i37n5evgbf{%bp5QNzw=skZAhnjGW~pp-4EM4ivVv^f)T{~pG0c( z6n;39I_t?mX8{soea;7hdQXm| zBvH;mR#URAKt;Tiql;?__rVc+ZFScfy@UiWENygane0YTP$1`Y(g!%=(lyvBvLk6? z5*!bn5#Y!s>vlHC%xx}n9u5eE#LiZ|UIkc9m(u|=!06tZdn6r(B4?75e5W8k-!AVP z)^&hlIZQ;g9St5}_G)XHv|Z{B-yG|{OP-aVP%0K{Y86v8HBTf9{Jw5fNk7dH*I-rC zyN|9`h_f`1@J@4JZhZ8hdI?zmA_<&+Y4RJNrIL3{35HQ0+2s43?*< zD*mlg;{m&wVZfc>e2_mQgZXkDl=uf{0<25xUBexhL~jFb=AC!ta5$i^F_MWqZ>=8M zj;S2uu#xEqPSam47G<2bRx?Zisd=%`&LV|zH`wx+XnrILrksWw#m<(#)pxal8kQ7E zhuC?M#rUQiv0`8C%q7eD_}XejT$+Tpnw4TH$X$}WZC0OpUgZTbEuc$MV;EN9ATF<2 zc#H;N8ea_9s9*Oa5#ItPqNksO>Km-W!{b_v4eE8Pazh)bb5bPxgPS~^%lv$vO=Ej$ zCdS}IRgz&;NPscpfmeykT=n>VjaLfW$r0J`VNO_CcpUeSxJsaM)Y-9Z$u+>)ca_4R zCl3<%c`0v29p?LuN4yCp$#N}QsBCKHEDHS^1Q9F#`p$CdA#nD* zVe;FM=3yLdM+_AKqv>Fx&SwEoh|^1T(y3f4V-)d1;XCZQ-Jt*8{-KSkOpX2o=&+-^CB2F%zP^b&N8*Ei(y1`l_nw2rC9vTnwacy62Yyyhq=pLk}c8&qAB z2`?ZgpVq}SFwD+0C$gL54C`8vkyJ^~S?H;yJ|o;xu^N~vK#JBcsi}LRl~4wqJQrUg zc3}~9BKtPM3U3p}sP*nj9ZtHhQ+f=|x4dlW9dhRf2{wTyHzWF`;vJjN;;(}7(_7wD zK?>QcW0^&EHbYqegf_^k5c@6>mma79q!6<2!QnMgZ|THNcRcK7zoxw}IGr8eIsX8~B$>DOR?$b$p7zI$>_;1*Sm$P#yvYB3`#OPAOn!_rpNa|L z{t}m4;VgtjkWFMF#Q^ZHA2X0OmX@4z%@-(Cd2g!IfxCu)UtXKBvp+Pdu!AJ}xw!{e zu+l_564>=89=xZRAUqJ&OWnI`u+{QjqT8*O4gHY0A#}4fGmLZ!*rRYrPt<2E-;>yW zu-`x1nk4wq=9ncAUmgZhoR%KOme`uJR_q%S~EaiCFZpSvwD1Jy?QH=?M>dB9F4Wx^O zVzVpwzodwqk;;HFAod7O7kUtp&(Nx!;4HRUt3OWMiqt~SlnxGA%KuGsSgxfysR`ZkdDn^K3gkDz}Z*L#h8t&F*B^!$XF+C;A^%nj-vHyVnoV1Q+pvevxMRI**Yh zwj-1q;#)!~g?N*T_vOsFSd%j6PFpzS` zq#Lh=4~hQ0qEmG}4C|0U9=fohY1<4uI*Q@}_QoBkX?+a?VUL33ZSXc+ej)GOlKhOM zlku6?6^c;TfBjIpOwC_qy?-!mv@I-!utKDIR2Gf-OK&4iePm+j%#i?N5IHtmBWs+N zlDgK$uR@lR!gZc^%#AE0$?~g9t1bR0H9-%9sM*G@06G%XUnc*DxANK@s*J}Yn(9E+q$xf zb2Ctw?!X+Mo?%$2@$kd^Gv#1$H<(#%Ch)W(C~b)qa_a)Grl4ax(pGi}@$+E$%O>}< z_zu7|Ah~ybJd3>II~9fL{cn?#gpa?EHQo43W8dStpP~jskiN|&?cq@>AR0Exx$UMD zgV~z9dS^{l3M2T|7z$LOkcx<8mE8*wHcha9Fz*fgRE-kzUp4KBfq^o0N|3CoCGqQSh}$35R@w4H^9^RG1aDefVj%A=3zpwvcVjr|)XY1xrJS^y z^0I?AtX_x{2onxRFtzx6vy*2)2xc|b%yu*v@qC%D>Zr$lt0l{7Nw4Ohd47Xmp4lt! z;jrOd+?FSx9oO14&%bQE#Ra%AR2`)AqD7}MnGp;hyz;2DkyV;EdGo{Qn0kh?X)=y>t@s}^FLD!$_0jJM%-q>I&c zC7{}w6~i_(VDh9WUE!))et4iO9ccE&7sAjsi}~C%0et6OjmR?%coRlN%9l=r=H1{_ zWT)PHd6g@;rpqe4Um*MBhhP_U|JaGjn)*8RTCwFh$BkyT>iJ`7I-Zi)3hoh zS)43WA>uaIf7tTy$xDyg_3q))7Tf3y2Y!$1=Ae(|Tya66`(LZa0zRwvm-U37PbrPa z-0{IYtu0iF(9Hp!HO&}rbVHnaVTSST_d==7aOXfct|t3?12AX*P5nWBoNM%x6cZ2; z8M_mR_#%Q_$(BB6#4-gcXGmjzSOg}DfhcS|^97K!*gT*`V{!MBOfB zuy=5!`jeifZilA>8&Y%@fKz=p8y{2WSbg&^x9I4@%m;#bjHG5R1<)nbiYH-t2M`QO z3$# zzUC{`JshF^R0Ska0*B}3I}NZGAeu9BWFz6jzrtlw5%f!S7wihpdtg3uW-#^Rh5fSF z0EM!MFqyWBT4p` zd4Q0)#P;6Er@94p9k&WcXCdapbSSt&)8C&i#a8*J&L3|iJN ziK&90aPab?rk3g@i0E-4G*_j@>$ynOw;sHAg;yG^h}*}%a3p_($1Iz9ggz`-7F@}% zt%$Up0n7Tm2LL~JBmFnG(nz}saac8`G&tP&CpT-Nb;k*~F5Qk(&{2^&dAd%SKK|tq z%HV&rvsi=Mr4NFdhFey~x#gh;_>z*(`5_CVi>S7^uqZJ!ifj3CUDP5GAG0qC#9p)m z0DS$}b7ZP1LY+y ziQ4lb;8kL~TtCRAA1Fy zG8p{_?((#pigO`#b02M=AVS+gvWYLmSkU%Ugi0eYe^Jl3tx4b z=CUDS0{HJ(ouof5V6IPMj4-K}gwzsBiHieRP!7@I0;|+D9RI`EIc$ld zMalN0ZQHhO+qP}nwr$(CZQHh;S@*SGryBJWdyEx3V$Kgc&{`=+^9Gzg_6pk~&cA#o zUzgp?ID|b<&HY+FtC;?)V1!`y+bcXNX5bpM^YcZF+Q=eHkxz{L99IE6CDNwdcmv#7 zY?FG%WMK~8h?yu!dC;LiQA_DRWIX|&F*+;-Wn?U&NFvz>IH1qKs-Y(c?l@G%eu`~! z)j0_QGZ(q<>|f~`t`78=e`RE|-%|+A7C#!anBMb`4+OF$!{V~Ejv2#)Fju*k*{2dUt@5%>NeJhpjKsog2?S4R;GJFiUhRmnVu9#nu8%sLzinq@!`7Y z@ldFqno>$mPeR|6MU9C5tD5DSAaUtX>THP4_rOz|t6Y)~GKDG0xnu<=RK4uMGoEjD zP`~b;ED5T>a?R&bF`Zc|_N2vm1OHX5&f3I#=Rl1N)nh(GOLhG}_{~*Yx1B8i_0Gi8 zH^`sNo`Pvve5os@62-!$y?qZZP>Qds;25yF zqgH6Nsf!@VC@nq%ld&FvWZC{ZRe4T9EXl2`G$T2%$L{zZ<#KT9{Tzllucn(J!8%`4 zkU5R?(f+!Z)3)r#;(t1NMZmL)kr6L>#IM!(qnnmmy&?`H2}c+}{EM|*mBj?+|>|}3cOk^m)8i`=IKzQzy5SSYGH8+Cmtqc*j*eC9#-3UNB+o$L!X=jMZt?Y1%^w%KlD(>2$&t_s*O}JNV38vNL8eaWa z;a*Eq@C!dojn#1WVWNjKqkriyL2T(>nhGlB-W94dn^pKo!svQ7PwcJ;ZpUZF|6;IW zgD+9W-pPC^Dw|OV*SktD`IpFXV}W#mP5pa71Qi;xk2e>XvMe->N?tFBh`R&7DSyh0 zz0rgFKA6Lkd%|&atYZ{IeGBS1id@Y2j~reUN+EkYDBz64>(!SJp`xWK5Z9_5&b^PL ze%u>`h?F;bjRrBfEwsm!6y*k2Z#a6k+6)Xd@gIY&pd04q>P{ISx;N9xDxLgqm9p1$ zf=oScEtYGZMvWlN=<;mJAk{qCf~hI*npyuxR&G^nlKU^G!_RvKd`!?(V0?CBg{0=c z1oC)hh!&4L76hBaj2Y>XH)g!WvXl$q7`=GKw#)B189`{#5G#CRx^*C-ZW;d3P zkSgmr9y5l@c|tGxxjA}Llr6Mk7?t7TEIsOERk%5xrT1(p%XZ_Ti`k$-9PT?^6n=+T zhGDwya*yRuuXXu4F@P+9KjrrRMgQ4*igW?J%z^`kX-t-BJ-_8d?O(^t1pI(11g=Fb z3>-4!CdDZdl>N(CGR|7*vIv!eK8_kS5#Ov>E;4=8xN584;FP6|=2Jk^F%0fR90WXr~+TqTqH z9EcI5a5NK*)RM!O3xWfA>urpWH_5>fPIr`Lh$=h~btuM%td1zL5t11^nFIxByW zc>~eOy83E)? z)hA@vqy%gBtUKzi!S4RRy;kw&s;86qPl6U~=MTw1GBu4T4Mkux>PYQ1eEd{_R>mpn znf&Qy(6o{1Rh~b;O|G93(QlyHB_{YQ)VJB6)^%=aI9ubC+=unMput;sT@S)-kdr<^ z6OnRlh#>>=dvY>xZEpKwm*D*yL`3;&siPB1bfW0p0$5Y4Bjv)TpRmqvEZeh6QBiW0 zw_>Swg~wci05}c@8?s4nE9W@ zM4)Jq^hb!T{$<*T<$a(now8;Ezv!j=R&Em8=1=WY#m*D_`yxfo&^gylxN50!--8y% z#e3dS;DdrJ3@wLNvW_Jy%qZ#53)!i72=xbAjp5xmSFaAG%|kG^ik%* zf_WGbZCPDQVKWo)W~z^$GI26$ML5oZ;%G!_tsggkFWsDyxyrysGS%1rCKmI|(Jo8#8)dAK&GP-}ANxELp6fc6!qf?Zis(I#OXUy^8;Erd@ zA>9h^^WNWJ(r>U zoUGjs|4>7&!kvpT&NYz~)npY@uV|AVAs!}E$G=1&hP`tH{0pc1~7`98B=vRRai z)Uz=HNRSGL-P496QI?-4@@C9)kq~Dx>3>#2zmoI)Z|pf=5vulK*{9DiTo8F)@MCH%f+Cjts{)be? zP>~Rj#y}82S@W+yGHLp#rgmSEpT2N@CI%0$SEzEMz{Le|fnPzFlNHauI*tZPuYz@4 zb<(eIdH(@qzU__j^9m~PRZdr{-{qE1Xw9k%?*aFmv^d$1S}!d}jP!(3avd^Px8I3j zpxuBU{YgA^p6@rqmd4j$w~G2cVWJBd_Lwb5P_(!M8< z;@se8Pz25>s)Kp_M2D|WaS0`0finrZtoibm=yL2>6aP3$opiTkK6U4AfCx!14B( zf=G?LtLnz0jw~!=lOP3(b*@OI*%#M0eXA9dI+=m;LoWc@A;w5g*3l^QGpy%z^UjSMNntRLM zc{DiC1Qe?1A0K>9XDMB3&_q z_PQt7#7t`|zi4(KQwEuP8Ql7Hgp40qL>Rj;BfKV5F6{u9!8=R|O&_`7beFMu8RM98 z|6wDw+#Okz38J^Vvfmk}k9nNjj@-M^u~C@QcfXhlap}wtF|q>=)A% z-^?qP{ors3Qf0(+G1ZGnl5i^|uUu3f(JTH@@r}{ABVM?$+MH1;NRyUS28)k;f`dhz zbZf_iq_JF*=d=*9UeB-Sd;=ygcavs2;gjXJty43O@ODy;j=SBiTKg;8NDMv{?}I+Q zZ9plreHPykVQg)Zs&$YcwExCX5M^?0sG$E#3nB2-k8=%4ezYBFKgh&spNgg<`)*|d z!jWjX)-zH3x9cG>LWD|Zk*i?OPdt&Hfk0u$8P;}NKAoOdxYP)|*a(3andkFq=+Vr*e?{7YZYZ3i$84_1dGo8>=%0ahGL8 zAA09BaWfW;_G6$?7HVX1-!P~YX#3r-*=x4`<3jpKm$@vgU<@~2k_T!Cde`<}rN<|} z{fd+77+rKdW&tb1;rWIE{|ZY{phGfUv%Vi9J`Q-^tRLyu@aE5 z|1^u>B3ZA@$26~(-KKGi&QBc)a>>7F{ExsEG4snPQmVQ|qs4*qo53$4a)xfc_J!}* zCn!a5?Hs=f^_0$ZofMd09~0Zx=pm?N_wLbT`ZAB8AF-Ucmv?IP=kxu&{;VN_hi4GA z+Yfk2fOo<7AWG>rt)i3ATI%~i?V~)!@Q=Nm%b>!BsZwtjj7<%|FV_!>-AJzpFuaoW z7FBC`8^1NB>2H!xy0F%f?ETs$2hs8bP)a&Y4*>+I_!%&y_|}Nk&4(t~(AsR!u?m^& zVU3;rTI*l!lpV7`thG(S^nFx>_#UldH=}l)o3To;Z@H^c#iNg;ZwI|3ne5pf278_| z!U0WP0N6H`>OXs@sKQ&C5r=tI9fyMM0Qni4=OHZ!(Npf=Uq7#PAU1}vormA|n3u4u zDw~6ru^OFA-F4gA!Q8dc+0Ojo3W=|ktsJFv9r{nW4^x}Q4eh3WQV47-|5ySfEPUNv zwmBH@xv&?DuY61x2#n5)#)*9G!4M>l@k&7FQKA6TgzNHDS==WZm#QQSeJ@xh$)lx6 zO>1c*)a7S+&f+cTp@U+<7j(mU7M-W4b_CORpI=;Qf%iX<^etd~=L|`wClpWTiG@eS`pp5k zN)s)D&-<*;f8zA3r8?H-5w^&WjsQ|?_TtpLqZeKA>v zq-~uU6Xp5#LUmJc0pK?IJ_sZnoqT{L`*QM zCUNNFVoH7yx5;exk{T`3*9ZRXX}$?HVvYR@C9TK08o_^jepyJ=4*NJB9f`>}8?;8+ z=uLkE^Oh>Wj)nt4ut@?tGv4>^Raz}6+#DQ;N1X6bF+t+TK63(`p)lwN7z+CjdNoL!f=s|IEq@<BFvf`f0Ja9c#QgmZv+Ig`1dA*Fvibwht)uRqjq|I zpU#Ig7Y`Q11{^|Xmv(2U5$2@q0I6^Qa3NONgs>RNgDDzp`3kqWo`iSevx%EQgHZuw zN0Y&LXgLOPn*kU2FhOYP?hTGuTzUz}Ub#EW-ma~Mq}im{R2zK_B#CY!2gWV%RhBqS zdMis{-cqc6W;;OXPkq2 z_749YcIE}Hc~KoD>SnQiX~>9o(?cY>INJM>L1=wltIri-6N(N zzguDFzOGYMu#OAwLESz^g@_Xljx>QH;=TQQ>n?P?8P_kWt8LATg*Pk(LZAqb{eW{( z6=O*cY9EfF)GlBRl9mKdw_Uc0QFE);Vq#!Q4NQM=QCT>$9<81<5QMc~t7(~VDz`&z ztBTttZHk^J6hkq~uQLu^W#fKZNyJ`8k99Phwv|XMCH=k&sHb!(N*E#yT2^T%7Yf-N zO?_+GPA|CMmxWYom18|3I9O}s;wc7qhr4q)v+#57d+i_N!qb@7=ymsK7yR`Vt#=u5hFPqHP^W z=^jiYLGDwLT_Iie&CA}>P1V?Jjz+KM<~VL!j>ouSiR0U*s+6XmDP|9 zGs81}ZdAo-_)+;#Xe>me#-L?!9z%MaL`PgfgqfUHyRuvEni8IR42992-S2 zT$+nbz~F>&)^Diw(_0?9oX{f;mv(#A*^+bn9feA9098@KF=%+mk)%2{FJ=L}fuCoZ zWs&2mT_)9^Qo@zUvDs&bIq{5x!qCLC7|(@%lLv}PukFf0E}f@?th9pL3syzc7`mu| zAjb=sUYv^Y*Z5UldFibuJ-AVr%ahKdhVr$)|8teE0}p$|a5fOvMlx-eOG#-=uQ*Ez z7ga-r*|~MkOVsCMruDTpK`vb_uwBKqN2rP^egDt=)V+wYMY1Ta$T1=kZ{M0a24D`q z%Z|)dUkVdskDmnVl1POO_s{JM@{lae!t#s>?&xg`hUHn}8u=TZ{HvfGeq?mP$$OAd z8@wT(dbZ@TM6@rW4%SUqv9}5+kfNGO(-AE*_P?J@$G>6x_9HPV(d1QowQ1!f0{$r& z`0R5Co+g08jk$Lz43wtn_G~-6o{^T+Z-5(;iy*v{G_0tVr0o=ZXXnjvHwgHpNAtk4 z{1Yjuw};pjmH38A@Cq1ZS@shMfhjn10*cj9kE1=pS!T9BsO+J^cic}!pYHs2)+wq8f%|9yL-Iohl=frP10O?AQUZ)3oDGFLhck4tR!Bmre);@_`#M3tI}li5;m&$L1ur3bY|^ z$$~oT9woF$jw9vrt?<&T4-G>Ouqmu|em};btuqww(_$hf4bVD{@|DuqKNF$1n!C#< z-|rg@!#H301`>7?YU~0#sKE?R38CB}7ckNiQq;LGgpu41gi|`g71=@q)|g<(m@0?U%r|J?L^}Q*}aqfxfLz4DA`jP(fjo zkeLjUZhw0uT6~ZRK0G~K@duWMu*Gvgw!z_Wi{x#q{Gj&$b6j|Ey&#+Dk$-gh|gSp)T))YnFCJid$`Qy zmLcumT#7kcE5ClyiU3R`vEfqGu|#h&3l!~pvzQ64#M{&dCAq{t!GEo`3ISLt!krUy z$8+^%*)1zUl=qbSmeH3ga^4w^^oH7mU=ojM$=d|&IYI@>uABm<8XBfkidq{#wppJc zh&uI}mvcQ=t1)UV(6)Pk6~Q+*USP~o+EDlv-hZSIjW|n> zOP3Q|7dciWa^@?cUuHMDiAl&*15^Dhi;t@_@?cP`9R8`yZlL{rdHPQo}UDR1a_4ia+$83j9@F&b_BBDCn+9&+ihX zET<{Fi5Ct+3EKE)x=DMC6+DV!7;ww>20k1A7JhJTJ!Gl>{OKz{g+MG!SZr3_q|a9L zyZyE)svD6sI~XG2ZODHIp8Fk2#o{bZ*YmIF!s;EYh1DtH`5ad&D3}F6U%VyMb>YPu zev0Ah;CUBVar+6fPq*qc!YF{2%v4!RQQ%vKD14FQI2d%T)H8K{ty89W;RZPJoXW0Y zL@ROg0nOz6tOAg(cGUE&ijrY4gKN3K>wFfFOGg%z(9#HGMP|r5Vc(_LJPF;VxQ#?* z02#kk8av?r`&x*anY{(oS&*bMYWHdxsU%#D-yyqGgCMzx(6GgSn3Yy%nT&>&rMJCn zYrZ_a@7NkstD?}(1wJYP2lo!0?3Xd<`FfOp-$L1TXl>>fgsb?^N1CnMY2a^Z5LD<) zYZVN!fm>^q=_qC~L96GP`T=|6l&ZIdv*psAvAvg;)Hovah=IL`hoMBdaI&|Vo{@e` zUiT|)EY}oOSHq}%p{s-kc(zZgL@g!Ks+j-|PvvIPpWuI*xqEPgNQq6s?JxiRl!pHW%Eu_rj( zZl&h0GP~E4FedD$QZ;df7!k^U8d}cVngt}?*2T=alKJ(TjKsH`4??mIa(rHesxDm~rN_H5taUJ9iAf zk+F2*8hHyzYK z2(0t|`A!mEei*1ROrHA~4M5sGG@VE}CI3|M)FU>@P>PcMZ?Ae4p_Mu+bD0If3kK(J zI<(Sg8)}e$=}s-b4N%k08^E#mai#HBk7o2cE_$X8 z7HdPaK5eIPxE^W&*IHbdaNRZC6zYPn5W73*Kj)GF-qxb7ps}c5z5h8(yo_d7O(rjq6i1pQPxUKQ~si(Fms$ zfFx((Gjp(giE=%CI%)NRU*80RNd#ZYG&*R3fFOPldkg0c-G+N91gS=* zx@ul-&$gC-Cz8a>`d{sQHOd~t$2p=e6Kv2+B(?LM)UZa+o%SFN9IdQ;m6_W^-eM5q+#G{QHDxL53%f%>I>OQ>oOwc$e zfo-$&NAZ-3Z}h$mXJq^S1X4-e{g@B0!nAf+(lP?dD$93;#=;B9Msreob>wVB3@iL7 zC^fi*wKYDf#7>*g?4Rpu;{LFyID6eZg?c!pI3g^zFQ2zI7e%Z z5t9$);AwT>u9~~4tDb!jc*((BhF_UZeh}5#!F88)mM6TaTeRH_9a^FX|ACxfyMqDB zItEI8yv}Ng;c!7Tx{-~<5wvfL*S&!TY@o_)hZu*r9LYyz9Vf#E#x(g9eZT}$hP9+_w~(PSI@% z^KBTH*X{5}?|p@IIK-g+b?|4wTIq}q7=Jhi=`kILrj|pPFeEU~NdyjRdeJ|U(P!WRIDLCa@VB}{k_q4apsMkioQT!G7t6qkZ(dgr+Jf*N zC~sCSX3vFlFCC9%ys^$d#}!Clt7DD(Vg3-sON{YcL10jb_hjgUTY+qWq!;j^kVt57 z+0bnG@#p!CT1^V#hOWWq8lP|R5z6fKrn3q_4YrHbjIE7z{oC#A>}$Wa1FNBfkbcZO z+@|isXd^1dSYyBCH|N>8QHL_tWfabGdjqw1dk!NP$H?7`l+@NrhSKdsC?9Y89hc_myh zS!)a|BDpbEXC^mp&~tB;OU*!dEcPW~!q@iIC?!{<#yDfIWz?Lmj6HfM6;?!NtVWNa-npOoE|K(!&G$F zw)+JJr?%++@Ya82tGL-Y?_nSI$Iq<3qER!!#b6BZmFT@RSM38wXrCw+OGKlnb(PG}AQ3UB zkZ9x!(b^|#vLDbcCtduo#_?_xu2~*j?)1g0Cd3AnoH)V=&Upizre}H_y-(&Fpol^k zSeC{KYmjKcgo)*g`!`C42k^z$1SppG`#DiY{|JS5AnhhuNHd?}cBi^OR>r@D5G8IL z7Rh*-H@ez$ph|~6!Ap)Z4jO_7Ej!e;;EGi#kgQgG_*p|PRG9Q`953sTa$u(Iv=mF6 z#w7s*u<_k79>`C{@F;#i!8N{%tP?mpX%OE}VL^Z2cbYF@6nj#;j68Y%W2bvHm5nOL z*jQ~UT%P)9k>$pMV%zlJK23H33lGuV#zG?5G0IML_I+E)MO%Ei-752`-N6Cn$j<~) zgZd<)PL6i|)IJ|WR!~6hwrBUS3^SP&)KBr=xbf9C1wBpc=vnrnD&*~sqr~$sfciJK zand&>1l6Anmwr&#N-76O$QF5IOoU`EDPJ=ruAA007TY zU`t=n0~`T}U%=>fs`t(dhkLLWuDYrZSSu71Bh$AoFY?MB;W(Av3783tgA^Ts6|YXh zvG*7M7j>Ch2wL@key)-v>)LYlUM&vr)79|+I3Y4HewDr#-&)M3whuN^uLjDx)=4?( z0-+P%CB)9CVZ}J43YSI$pt#;9pjc3O1zcB@adqyu#u)grub=}xC+;^XfSd!goQW!h z^%}|a;`N|_;Z9l|o&*=Kb*O&)q&sy#1?!{apCA4UkBfnEne^~h zZ7kIUz=z~3(6K__60($Jh)#mQzHOoMzI=9cCIhe3aZ)5OVBY2cMuJY`Nbd)&l&utM zB)|$YZV?fi-ioPxuI+&@dU@TbmtIc9Ll!FFmuOHdjivjM_*bYNzn|7-;R*5;cKCA? z99b8&cU4RF92gl}7F4eQeFyB5!&wfKTsctoEsY^<`#P~kngB$x111C!p!@jB|BBOK z{6FF}*jX9a|36N{H9C{)uUWbCb|pD7yRIPpO;dEpx56P9_|0!G%P!EX@IOART>vbP zm{U~bUjsqHyx!9^p#{D%djl6Q=44|*x#l83I1k%g>5dEhz_75K$O5cc>rBaGyLU>Z zEC!barm%DlzK-#noNIY0ZN{!Z6PT!6c};C|uNy=u&~%??!S2r^5!>>L8@Uk4-#qMF z|1~W7XoB&{p*6i?9r_Aw?Vca5>xtsoDNlD0%JQVQNU4p4eT@Kb0d>0Dpc74t=1qIk zgdTMJp|6evg?X6Hw@40aIbr?x)(nV{SbUT87t@)rtx8@nRJKtusPfFze1&AZZG?0? zLNR=v!?@3|ML5=tTx-8@ZvfEkc8a2o)?($kDnBf! zwKd63{;nLZHn&noxYJVjFTRTJ*2_)BS#t4OAG<~vny{sT45L?P6?mfcc6(Y#W>$^} zVHbpm5DPitRQ^^NbJYI(cts9%*g7vFpYIl?M#7=353)^o*lct^0{09u971E=(6v)p zBk;n%EGJrn&214~TMgPaSp9mdre1~ztLaSJ2QNn)j&F)z?g5`7?Wn<1o)6&k9&ZZH z?Y0vHBpz@2SK@mFQ0dfhj<0Aw|(}ke=R;y-?-Ypo`lHl<}av-BCpXmr>WTW087uko6w+vtt(8H_7&dt(hThC2_ondvlG+xBpJfXp1gxBNkgjI9Rsr^`xl+jT0qdIqBz-|jx|QPsH* z!vQOFUP8Ef;zt9%umm(P&5}@X^a#twiOQ7oB%(E#pA*QGCZL}hkul9u!Wro&E*(@Y zXPziWCf}JylJCe9GltO{U94c`q&!c7#8eP8*Hn0cyHO$XbaYzmG@sv*iZl~;3PYFR zX;KdJ%K^&~$XjVYt z`iO_nh5^<7UkF$cqcHM=zy8fH${A^8 z2QX>2Nx7iS9n*#UmzCeT&SU>RT~H@!=BOLcn4Hb4S1aI;5~l|SH9#Np=A)xAx8D5P z-efi=Z*;-wMeEEu2o34IyJxDLFQozFp=e?1cOZE}sbO&C&G<31RM-VT=~WCus2ZcL z0F-6l%KLrY8ZSDFJQh&~J?nS=SKt=v9v0u$_s`7>(xBD2s?BR(|ID8=cSb}QqrQ!3A$^xqNgofO`3O=y`qHb{Q)K!3S2xQqNwfnu#IU7 zAMXJ|qHfCRryj3|45`(9o20lqP>@r8?%kjj-#Kpdg2iuL3H_n&lQshby_wg!6W^J~@Ao@cZQgCJhbP zo=R-1aMGRJXPbJOSgZ;M3uSjeRR?Aff=}?&lYiK+0|KE*BQ!T!hhDdTJyN;4#rTUb z^80YXNg<>+2;YJW`G2#RL-`5sczbMO#`ra`LW!Icf@H*s?>3Gyrx=5cACwB+uT&oA z=|&s2c=ncAH!MltZ6iZK+}JVYeA{&`+#rTG1M}HvPz7?`}b9oh`f0Vghj48LB-kkBAGNFV(KZ>-Bza5qv?R zC5%eRxgIZ%aYO<3exvzJ*#eRS8f*j1J(D?FSjsE4*V>puXzSw&G z@?suQ!>Wh@*k6`#+34ytRied34)!8m*Jb7g8&?6Ah8h`|QfQOVY)77;gTol`Xh&=| zK#3J^L+wZHBGlKBdllu6!;H8iI^0e%1YJ#tnN-uVM&tMu*!JbW7YYY?-otUV3=C1E z9_HaI8FOkpxMo366Vjx`$PqT5umH5YC-E@v(WE+Ry(C8}b|WQoJxXGVM-1;dYQp}0 z+2xS%-jJqe^Ru1u)1MkPx~vJ|yRFbR5@T3BT$|&+Bli+o>&UJfBHwR_nHj6I!D8xr zV}bSNiug@KK`oW4_RPNz?Z6JV5H~@-I#}Cy%iwi2-V6;@+fEj|P&O*U4)*UT?UOP; zNHR&W@>!pfBg2;;%sDbex(XF(${U|;|K@L!&0mIDp20+m8>FTk1hx4G9w}lznk+Y~ zX##IxS!f-7!abck7ost0-_Xg#%R2XHFFG1*jtm-mtE`@`Fx}HHda`^CWHMj&hkd-q z#)g%iUHN|apu!3xK(H;JHJWF-mPDkW`OFoIRiSSLojN#x;?m?q7xZ-N`We77aHFl8%y`A`O09UfCF&Ru=5#BgrT!;th2i~Y7+ z$-nfQ9G9!-Qe+{%cr^KBD<+!M2C9nq-&X*feH_{WfiEMlT>Ws@$$wA&@(==Q)jL8L z^6q@_97q>4@8}F`krsgyDtssIv$Gj{4u=bI%70L^Ge9$9?pjZt(;@*35(`jpygbuy z;m(%zOobQqDSX;~j+;oc02;yGgoOX{3rA}o>s5&6AV)B|i?=_D*R`%ph!xCd=qz<) zhWcLy-6w4QMfLx}n?4eu0*UAK~>jTB|$Ng?KS1xt{nWQ_*-#s~J91i$fl_=A2|G z&AW%*^_wqK;rf*@SOw;pkDx+03$15k9WR7(WGfL1G?4?K{Vh!Jw(QQ-xAZLXNZ_)1y$!|E6d z{UhGiD&!b2faEsw9JJ$Ro(r7qX3n}A3cH}%D?CkbD+;D|uo3((o4jFJmtD<+K zefq{=rv)TM{kKM?VNFF%e$=UR0i~rm0=UMsVct^lc9+}n)S12x>NYZRi-!`h@d4Pf=ox8kug1eJ@m2K`=G9TX*9C0M{1mG zv33L?P{CcPLQso}_3VTKhW2lj{hiZQS1P3MAOx}zAn@bQ{c8=q8xXw@#LH&`UGnEY)#Pu25 zr`1&~XTZss+QT7UPOYU-6%J7>5tt+sqxnDetQJYb%%gSi$TL~EB%{;Ek7FLw2jVFN zM3&dZ_RYlSXengAo!8@Khio6wqp>H1)CsN<(@Ly^POE{d*L`UVR<(m}arZ}?xn|3R z>joO@;yCgXFIYUxD!j(>jM#M?tuIR_-Y+6>BL>vr6cm>22z2C5NQ6XIR5*Wo@;FM6 zsskSn+eDw^O|weBHpI0IvOYhTBKx0n{o11F3gV!U)(^7c$-3BjD>tSQ6M|@A_p3|E znV5g#WKM+y(l~>{WnI#kUR`r%cKFG;pv1w4&`O<s2XhSRS4R5wpgQVBkW zy*{Oe=Obt$q5*ivl?f0y!$Y)H6Qv=}ILx~9NZ@-TOGrGA7^9TVexqaJi(bwk=IZPb z?gyvUe&*ZfXBSI}C$8-NGBWCzZ`0JO^i##i@HLgKj4zdXp7A6$UQ&Dk0!blq=zH9(6|G4N)e-=Fm?t8!Ka z88%?JpQQ9>bXUL=u6ofG0D(Ml6$f{z@;7G}gsl&{qBbDFt;s%J98yhtnAbEYq3W)DnpIJ9}X5|Z-pT3C9Y#eI2 zq02N&a7Ty^T2Rv`GwMW<M6yRez>d3e#+ci4LtfP^ZnTl^lC(ZwF%n%?TORayqeXg?CCvpn`7KK51A;?OeKf_(mnSNVceL();k zA;c{zFi?*{N|T%Mc!dz&N$~R@l=}IK?08M}B&?#3{**KqYGutbw3tNAv3$Ko&+q)3 z)t70l#j`Fj2NQ?7>$knwGR~r2E+0Uz7N*$e7xA;F)qlAuSU&wJt$1`KJg)(*Muv*IhV?ZI_hRuS`qBEo;26?IQMe z8=k_T@kScICm1|paY)1G#T)O-LXk3L={rnxmgyLMGem7Idc%zgu4<@)+l8U~W9LYo zu~eZ<9NgV_nJ^w-Oq^p>DnBg_5B9@Idtc4=1o6&MYv6jN^R0>X09I2M}n zvQ~N<#&_f5%Eba~rL)CPzGt5EOSfQIbhyWYp`*RvOxPJOG7~#9rTaiO!(R>5L7gow$8hxM~ z?fJ8x99L3469a71EK)Lsy)!~oDZx7f)s^L%-JzzrMtUz`9akUST7*7=y>}7?zfZdY zQ|@0X=jecTXq2efo|w71)(Tb<&P|?7PXe$Q^K$bK7qkxV*dz;_@AmTzOnf3~cgVqo zh@ShX4cdK=xQX=pri~|GH%}#C?Dze;=wKkZ+%hX=CAqM7hBD-T@n;vWpP^m$LsEKj zM`x1w{8kn%9Z})Pgq|#UdIW6DkX&j7sQV{11fny~Onq zTT)10w!9w`P&LU$>n&D%gGPl9tPM2($J7O|$Vn(^QX#>s+RL?auc^_)_1KdR<+B?G zESqum;+H?Zty_3ILO9~0X^vD@S;>T&1=A|80q`qHs;Ws2>^Dr9F-#SYjp8VyJ$spq z^&0jziyH{WAsrs{y}@+ETQMfi$n zp%BH{F5BS0~ zH6>1(6LQaGi63TuFHP`ry}F_784d;Y#8rch;@m($3KEspn^wJMIF^dqo9~AdYbKYm z?z|x}lq<5-8$;qA*4D+6-dHx&!nJ7A6%AZ1x@#>BgdmY;Hkv~upfH{gW=LBOUp^G4 zlHpmbxKP2*cg!{-9Y{MwoNj5$nQj!mg1wI;KQA^Cj>?Y}rR_Pj=Dc1}o@UFaP?0!N zSTdBD9xn7*BHNe7h>SA}S(ka)*=}KvI~@tEH1&GZttZq9nBGe9Zm1=j;jWGr?3bs3 zD#RL6jpFqC0?1gslyYu%0eUI?9N~gRQ%xS%BM2%k($FvWg90}6?ZQ1Wmxw6@zE9@4 zkkA+wTg4Tr&eU^ggI5rylKAlq_{CG8d95dhQPPNB4N^688B8+ z0?>#5-;`_K5#3|{m)rNO2JConp<*`*@0vVgh1>NJOyv z4!#J1`J5$_6TcqtMZv{^JBQ{Ru&L6bBeLbyJ|JurfMz+BPdWL$!HA{Fk;K^p zN{2eJs1>~vAA`eu;^5=PPZ7tkJ2a&_KXyDFs&ir^w7?3Di2;Y20_?zn5I?nwkT3G% z0okiCF({n4&E5a7bq>LzL`xREwr$(CZQHhe-?eSqwr$(CZS(c}J^6#~*{L0wRdFI} zum_oIXMQI;P=^n81+Ggf6yd)Wi$e)mYaC^=qNJ&J=GDvdGoKFiCM)IE`K=+O1gnCS z9HAlp{#ow8^#*-?SoTG#H##9(e*N(ny^XwLWL3fte@WGe5_aDcaQtPXOb0A4R5l zo?Y$Nfh8-HSe*2UtbrDFTa3T&%HP)Fs({@OgR-7bTjnh@&`W<%M792#lwN56t~X`) zHD;8U(vU7eyA5>cq|qR2q1|JHfPV36Jk{K1b|tyKn7C-?Dpl2tmOS$p^P|U&A+Vh& zRNUls@^I!{^%N4}yoY`g;8em!j|EE^2|1T_y~KlxY9k3->ZROnYfBg7EgcA0uSQWk zqI_#hGj6L{86$pGO=xizJosgCF}p&8=TL&ZrV`nvxRg!PYv0v8JVeMWS;MdD-Zz?m zcfLyz=!9w0YoZNG%b+L&%{Q`9eC-__^`)WUb1t1=24&S|7e!5Ln3|P8cJ(Lf$<}(1 z%XLmZ))ic<4?70NYApu$24;jcifgyw=yildms<(X=s_3;pI=MsxoL+!+G0@2XrOBC zo@)*?%PGqFyWU~QuA98HAt0HM+&=e@%|`4p+Xk41sDbYRFlrPtF9~OOiWtZyB%#@k zKGTyoY_>JmJxd*llcZb|W?=_I>*8O$Izt3pT(?#9B0Y{tc;l;4meAuyJXKdp4rb*k zY&~YVkXcF6!NZ1g2<)~%OIcWsm5%Z^t0gs~qTbrrOD^ePk*O1fTbCPZ2!sAgl1))R z`%_V90qS7CNR;Q3%fjTw`XvJ4Sra(C+#VqOVN=+Y`D{iSu6>_xy4_XsmF9BRifIO7 z#(jyJjpBgJd$YfmVncRKJOZR9hUwtiLe6WvJ-Lpgl0?MNU(yvmf;A0C!^%FYkMaIh8u~)JKU@ZMDHNQ{YXFQFSeE_U`f$Fwb6WEa3B9|TuHwO@^Pj%UP z;M^R7d%`12QoMe#n+tH^-bu24#fpHqXXrcQa_@s-#zjw zE9qi&*-k9UIvD%-PdZDFU|$nv*S$3)tF&BQp-(iZBXzGEVmmWa4sIGC0>W&k_3ol< zDCr^3!($>{AmllmBGR3f4RW@milM7T>Z6-!nFG4oI}OpIHb%I(#it<@PUn&h>N$O> z=au$ZKHa(|KAQnAAlmt0(_w5Ph*fXE%=(Omq&_B__BVhW1kTjon=%4nNcw`T_tP#t`~JDdO&-cGe7r;6qiVLyDd7maVa< zZ|DR0p}e)XHNQq)5z|O+6g0(Eic9RG*w!Y*NoXGcqT|l8_yaP^1~Q2;fOR@GT;MVL z9Ee7EzZTjMXhN0<2FeWj=5@CFg|ZEI095DG*;LwK(ecoi*XB&essSBsw(HzIBAQxj ze|w~iu-;pXR$X@<_krj4tL7-Fte;nYlrklsv`KpM>s<)ls~(K!sPZ^0q@pJMSk6Ge z<74M{*Rv&L34cnrV>57mgeq`)Vt4h9PJ6NR{t%mAW2&c{4oo}DzDIBLq#v`h){AwZ|n z!}08Zfp1sj#$k5|^GFETRx$|p9&H>DaV&%xDOmrkspiAg=TYa}go2qaW<)}-=r&77 znn6~HXNiJO~cNq{=)`OyQz}ACLG)YQ3n%H7q2`+f% ztJWqxi)gciuKC8eORbpqNTmxTIpRqplId(pQEm~Ikl7Br-4Gx2a|Eb3^bg2$7;_I`hhQWGnqVKizjACpNX{uPHf+ z#^du{pXzALU(goB)z%$TB^oiz+ubJ*@5aw**zpEc-JGO-iOBVW&WNZM&rt1;2p9no zNWNP8Luoz%fJWqO&WHM|eFf6)@QNzQUTY8GJq<$1ICDm*C+T1_U+XHHJES9FaTgkn<$3S1jh5JjSvGcdtiw#VPUxd zBo#cF#@!ayXV3Vzf;+9V^M%Ny&o3hQ?3Ys)1fpHD#X}L}K$5cGv=~YVC%NNvLF=Fy zfROQ;o9c2&us}~5i2MZW;F`1?8)YZpsKgYy>8bL^k5-ANOo5Queo4Z#7n`v?BFb~}0W1-!4jPbaVaKNi6BH7VQC3_7Cu0 zF-7DV*ptO$xr9xoh+V?DbOcepypM@L;_Q6wUL~mrT8h4kv?NoW+*P@fd+H>3xD3Gc zbYR#^DCD{+z}DjtIKS2lg$>O`0y#4)e+!q6rx!+Bz*J}&ydTbijEhIgAt}rT7}&^$ zkz?E&hRp925B~t-3_uHjT*MOU&46wR2lmym5J5OJen|1}jcGIZL-yyw_LN&<_G6X# zxk<^qjO@F?6(AtT!(58<$nD`Ux8=Me3#iPc+`?VkyRVNY5kO}Q&)xXr4gaYBuASVw zHzaq0{_Z9eq%RFxkdV&5{X}6syX){hypcGN-YnjN$*@1@T4IQkO>0g}9_WMirk_JF zn~a5NIZ5L>NGV@TeJiyTr{yZPz6Eo&at(ByMrI8rxbjW7PHZf^^B0Cmkdv z;k;Z|pB=%tFIl`TS1S*J$6+b3xvjXuN3k^b%|`5`+Iqk$f-)i`@UqNm%>dub00or%9T^z0yj;cfu_)vY5~cmeW3< zHnFpy0f%zauUj8F7)OoEe%lv}USOn1Z@L|{r7VQqoABo}pUI7)Ibh<_+2Z6frPj zC=|tgg`?Mb#t1ssi|$0`A_RsNlW{sH4>L{!+=Y_Z;@jMl8Qu{6olHz|PQ9qTg+ff- zny-q82a$$TM7d0y>BfM1&F6TP$RHk^li{6OFe^t@%TNrhQ?|Rkxb(6bM*K#<{L%Qj z(Ul{uf|v~ZIA2PoPEbz!77L{%2nvFQYg8^JzpN<4h+cB4!3*yyp$GV1wPs+A53@ib z^&CZ~82edP_FC&Q5s8_y55W$)`TfB!VLhAXF|Pe?UwMKW4VK8o8y8zawT1fe{#0yA zQAH_(9CIstB%0PcrIJP48q9X@$jHxz85Q602QY={Pqpqw6c_MfWv`g#H3Rc2@T%?c zC7jA%-L~6mYr`5(Bx%RL_&QTA+D8vCibzAZo<-y+{IziQSU?K|-?`yuHa5!^I8^)D zo(tIC=9&b(bajFn^RrDP`(dFu`DX#qnmc`mF0YHNUOS{o2XKsW0VDUATVf8=bp|oMAAPvy~Cs7b3+;rG|$!-%ZnG;=6uXL+gVtau^qlE z$*REA^7$dhnW%9Go2&WOvdjKWqMHVCl_!cy1Tb9`W6SfA(-i1jPB!?%a~(~n2kIuS zPEX$~_dXEy?QRj+P+?|k`4t`*zjDqiMp)8tz}I;5^IIW^AEVaXX9s#0&grQWH=06o z@bZUXLEt3cg_D;v3b^vjksqg%uOC&PGO>vPHuqcO?~^f}A`qZnNHT7d zN!xE>AYdy_ifZMO9|suR*EG=C=l61EaQt1K8V}?wu>evY*cC0JFD=IoqbfXRc&l+) zaXa8s5ICYCqj;2Uvt0=>K}lu#P&MP&T#`ry^93OheNlBPVRj6JJYehqI21D3Hl*(J zdUFjO$7!XjI}XUFYwi~Ge{+S1*L9@CuSpaL zG#F|4+S~m4zRlvJM9;%8SY1>%CO1Ik6AXf!!cupK@_KhqWss<|8&q@vCWKkOgD+0N zA3yosjOWGyJ#y2WN*uC+%X1z}z#3I$(CLVt^{*E)M>zc9Cc^Q~{OABMarWmq3?c0p zE+5uT+P}0W@TAGbbS2eDhNfK>4Q?5(Ut3CHyAgZ@6OeNG=0BUk%AieUro>QnlKN8G z2<)YyhAMG6Ypg=_skbSun2!Lfqe}0H?{aW4^c#p}qP(eG1@8s<}*7mCp!TG>a7(wgT5BX-(vEzk68%VftjZVgEF z%an-c+nyLw1yGyRC#vE;&e;X}!^L+$ku&pm#qZ0Rlsw3doWXxl7Yx7 zox(TG&S@06Cx7Luim9q%E;mS{m^8Py-%L2dw6)}kMKYZwgPWy-A3ydIuVXsb;2{Xc zxUa_;L2#s4hyNMYGFnpyP7hl{Eq^|9&J+S$&z}D|`F^|dh4M-6by|hj zclo?jT3>__<(}i$i|eZGdRPjN?S}=@AU7>nM%=Dcs3tcmIhv-0NTn#Y%1seQ2s?fQ zt6p{BaogKas>hq%8F-&?0{LojD1nwq7SpRnb82V({>q|tRMk85M)-`5Ve5{sbffVR z+D35I$!dOxxPwkFR*AQ4&()15efbwHVV657ul~wmxY1`0us^f*HKw9X}AyQ*)&VQbuRmhNO@v+ zqC5}9?bPU3n2&JJNKQ#u-HI)yI)nEG1T^=2QD`y%+9ObmZ>71r~2;98q6yg&wk<<(OPyy{z2%RjA*oyQZPYPF$op z#<_W`$?j_EbA%kIrokMz#mXIa+_vtiLoTZ@;yLz*MJ% z73Gu-QofU|jqFL9I23<@Pa&iup@3Hi0g+-uu>=BEH@2d`o`J<2gd2)@5<7z5HbtL@3cDwnzRD z^WLACi{tc_T)Ul#so?Hf0|=+18Gswh!Oao)YvOr1vk<23V05uPHDd5)M5Z^?D?|V< z87P*9VTg2H7)}o42-bCAB?EHxE1{|TGRqLc0o=}mx};$sfAl%R3wc}3g^mMF|J?Tq zqB{W!naj&ZLxg`AK7m+&v zaTm?~Gx~WbmSqsd*&J%}UEHv|dF8tCGf6?3vjLGuCFyZG!@W?G^8VD!H2y}wWsM5} zG-dWee?wZWlY-w;Wt<3%npFvzVTuq-%XC2|@l2$j&v8fCydz%E^T(kAjv5qG1j0{D zULSC`C-Z}rJH4k71>XdfO;4ouUtj+@$ny|6TZ*S1!EZjW-vE!Bp`1KR3OxS6PK%U^ zDST;qiAZD8=9yCu8glFkel>bFRag!@pt6@n05|=GNI{e@J-Erqv>XWrJ8;fw*1`qc zMx>k@7@VieSwMOdsDcT?I)2W-c!QWgpIEQ8lnYa{ND|IEXlEy7PWToiDns6oiMT0J zXKDR*#Oe-a+~C7~6U7<8Dj#LKTc-0Z@_9g$?L%g#nXD2kUT#96e$U}anUcPS z+Bw|3%)O+Or|Ikk0^m0ky%izJ(u&4Z`sZKN-i+jfVwU)WYIfujZbskL>KDI%B->KU zrOu(;y{L52@M$5=&diAod}69@*nBg|D3$g~Aus$r&p|(IAoY6f(~sL(*4q(kTbCW! z&6BosU**K9n>2RAbjzZ}>+pNIi_bTq3yxyt&Jql#Kifd5-+g#Q}={EK)l3Hm|@(3*5*HRk{J_NJ%jm3*Bic-Z1P=shAMsqs4$CG_$(cOY- zR#Zw=wPujU&3zMqFH)qsn!Yo)k?9@T8mbs!6L{hy^Uovd8^>LE6a1*$eR=oZ*s80+ zIsx~e8`*R{aoNC{F^?_#kze7c3*f;aWm2q|0R{6hO}U-W0Xb6k(;HuVn0t2}&tgV} z8U9V-kF~6&4qE<;wqSmbb=S0qlc$IrV>aU;rvVBw&^PmFwhn}lXfQ7!oMa7vK2=e0 zTCpS`yFhVQ!txARIY*6lUb2xNldn#X~+%GsNOl zo`aYdlY`H_?Ec;nHz3tv`B&I06%B;3{88YoE10gohQqm)`Z>`L%Dqok$C0E9h5?0% zPXlqfn$Q?G2&bRl;|_;+;0sHbQMH(q<%d#VEs+I7T?>^9I=PnSbXP>{$DeLb+cGU{ zXm2#7%IQMmnKXM8O+mdR7U-(uSPdlJ3d@4`T37wO9$Kd$$iOucKgu^_)s1RV{^Ynq zMnfvWN#N(L-d}pLX~?MTBqT`Z1xhc7f=WdY;Rw@RBU8!UjkLo*@a41k8)6*{*WA5$ zP>4MU9A+60F6H+t8uY#Zzf!SAStnw|*=_s;t}`PtAgkK@CU^PByg}IL$X&;N6(C>C zfJo6qZ6F@^_Y!&##=(FHfIk4k9NNN3XRd5V)r8%`XE^XW21MfevyZBJ!uN)&iQ2AU zjaykP0t5o#=u%_5jUHM#iP$vqDD;sqmrg>3wI_F*Np>(&j%VtTSNt1sgNT&Cg-CBl zlIY$3$x2Nd63$dbp#~i;*tM+zTcU#xgq8p(ca)L`@S^j{j-k9ngxXyqNo`hA5gmM1 zQS!nO03QXym4d(m6EBmgHU>9sbIecDmwf%11bVv2j8Z_v6ODs2%2`2Z`nyvQv|L7k z_l7*eIhf{jHJY74j44G9SOa_)3b??b$~bD4YBuXi&I@3137LPZb!4OowMsZWR0woi ztkp+0$%oSmLTULL{qc(J1Q=c~bXg@jKIathus2QjdR?6N1$#UfEVTG>7LO4(o&Fhz zf~i>E&dE7`gG-k3&zHtRJ>t8Pc_-TYX$NEP{H+|gxPkMcBw|%)EL`k@r{OV_a7- zpy2Ti4G#wWdQ^MOo=T>P2EvZiK$RRI``&;MqBSNbs3EsfHPct0w%~lN_5fKNu$8?) z_O+`66tqOYIYA|@YY+5~zSo`)3&G0f-gWF^FC(iREV#aL(G1b$s*BQ_Vt>z1`)Jl?75b(j2g zsvWFLMu9k4FXc(kM+@JiyjHMRz%#plgr`5R9nzu(sFVczuEr#-{&Js$zA#j^>XvJ4 z6uk(5qHPz1oGERjm_8l_&Jdg+_hW~GHn<%9u#dL2Sn+rz#yW!;`~>pds44eYuAUaG zs()`gHQ1{*ZM87lU^G|E+R^Y`vc%m<$xie8MAl2snczG}sVUE0a8q)~gkOSxc(-Hl4H|$Y^>fG4D>k)>+@O1o@ z3#R;JXs}jlyAud6Eea&G3F!a z!NssAmvum~KU4z@yF46{c-D`fuPE`Y4c|7^wv1UHw_yKK9)Q;?h@E?*S{r3W-=k*C zIk?$+e&j`^f?MsR$X1!J%z|q#X&zuSid1CSh2s81n0IxOSr!2>lSy*YcanCFIu0Z1 z&NlK<0;~YdrluZjU!eWlcKAQQ-K( ziyE<=W2Oa>DG$kDhvX;GW-_B+R7Z~gdm)5#(44T+Y_&i^-b^goC%XbibT`XlNIBxNm z7&LZyMfN>(ST#sI5)Ivu=%_f>36k!-t}srH8dBr^K~^rtxCbGcP%!VZPR~tIKp^@p z9Nem+`TMea!|@}ZRUqx_50yacIAu`Ntr&HROBZyn7O%s*unPf3V_Tk4X0v-lE^_F>gU6+Ga6 z24*++o)BwTlKAw!P5On3TwdTs3+=(LtlxJ>I3vx4T-5MBV!80Pk31O*dyHZ6zfvwC z(o;kS+9fUULn6tk9baZD+LV6rPhbD*z3vz)!nHVjDgxF8@24X$!|{{ zf=Ph<&fLWFU}L#j%a6pZyS7pM(Pmn@D^_jZ!2oEp_+TwH_3bZ7W&{1=lmp|` z8VF%Y`+Dc^C_t&78j=@-x)*54F8m}FoF@W;P3d4(;HQ0bGXKJLuUp~&)X zf{PaPxnUUQD@5)oFl+G%ERSqvbT)~1IokZPDmXO-$-S+|s{_eG(0*~uyM~@Bs&}_@ z@^Ln%`0M|$57IhO7C^V&HzpD@Y8Az2B=vJ5*d**+qb5#9t**`#cpm_7oKGyUa|~&y z`^pNQWtNkcTTw6?-HK9tuUzdUk8#ySir4{F%8pl7{?QFz_Ri+3vTFiSQ|2AUK*4z= zl*d}?sW%WzG_|dP_EGr{y_O>gcL_7_r@?YbD}CbD$eC3m7}mMirgzwnUONAyw&rx= z>`_@_&q=SP>$IW1=VYw(4UQ&$JApX|?rMc5(u4&O*jJA&I?yt+_EZwuf=~X3Dexk~ z^wm3*dwl=awLxL?QVJ-vhls1J;PQhN_)ot1eHpnD8XXurVB6vfSpo&f2;P`fOmOjz#2c|=WK^;!dS|*T%I_9_Q zu#V*!(WH>_&!i*c04YHzHGKK3%z>k#Z^o< z2J!XkGJzB1=O((kK(mT;X`Gw(#tIOK1x_(DMf2~QaMtdH68co-`E>9358SFi8N-!w zpc5X%Y??}R@oxkAyvJseN+sFC;of*Lo!rsf!OJL?@OJ0L!E$Z$195J# zSX$GW#&4r<#`#7qrV=(m*_@&*Dn~U+WlBp8t~+ZNUM|;w9o^k>#p&3kF4=hrSOMWY zJlM@eTC`;*J)uT8r&r)$-@T?~rYx!0Zb=>BNw&xP7pT8PEXYGo4yy%ghyWoQF}l>% zYa5wvdq#|+S=#-$*-8)NzyTmF`=q3cVX0i>5T6%D2sXaEL~TknamCzng71@wq4rKK zEL2?edH2C-(xeZ^2PLpfq-^Id(%>BED4VJcP0>>JZYw{^c~lVfAbSGGw;zl=T>(ME zPAXpk%YSuDm`I?<^?apLXj@lhG)Ge)s5Fe`ld)%^dhOTt`&epD<0LC`P}iD;PEu$h z2CfKh%km^3357YUO-ky4JuC@QRIaNGQP?mXssr6^z@y#_n@vlfpT zxlIp-)EtC9Ylht?4mBsj0@uJmKuIulNV!;%gC`y;(3yYHT72t$0rnPAlOpI&d1p@E zrd)AW=8VZRJ#(#dhZASWD*^nyFTzjbVeQVsYI45)Wt2nK<0K0CkFm0WYM>MLw%To_&3~2z$sIIGJcF z9k*G!_-saSf?CqS#4c+GoEQb>;jDbbTOF`~J{ALgSWd{RzH4jlUAJSQzkJPMo(I5X z!B{dAzC<97Ng8PJBu0Hv{7C}k5d#cfvX)oi(1>&x_AD!>B4a43)N@SF+MN8T1JQku z>~~ylYi6qbRf<|zbzKc=Ce05Y9(z4V#>A|xx)T&q~eQd1@QFSE6 z8#d3-M4^Bt9#mdJ*K(&b{EmVfFv0AF;ZrfL2b_yWADaly^*Kw5U%}yMi*93PwG4+s z0cUeY-4s$9QL#I+$d6;_er@xXabBH8?#ek+GGI@71gYz)P5qKLF4Z3w5_$x_Abe4Z z)U#!9Ekx%yuO}b1-Mjs`^!1E?$mMdxJW5~#LB*2oZW+R4*uiIZmqpPix;C#5U+)^8 zcVw1nF$I}x;$oHLPb%uw#aAitRLu;SpdJaqH^`xT_%?7W-(gOq3 zA(hi654!QW3FtbM39D!e zW?bb(5DIzG86|{aTb>cHCRk0~03W8g{h5|CtOZxrtlZxWkP0MUn*QUDF&a_KtEuKi zw#%jzJHXvY0qMV{`WCz~KOYMw6Z&j_3*M|D)fE;PG#0^m5~p<`_~hByL;Tso%7mWo z`DV!*5@wi%=z=PoSzfI==fmqzS{Z`6?&c9)tn@~4kcoWu=Gb0~7bPa?Z!R7E>jc*Q zGMVL44v~eZ0~hxd;m>6U?uc(V=l|#kR3qVP$8>;fYN#71C(iSJ@8A;gQcEVPH& zK3Y~59LZqW{_H|cv3oEvDRS&uVr`tLV4pO;F;>5ZIr->47ip2n_7y-{SaeyQ$`2&P3!~bh{FJb$$%XJKC6v zH9U8S2RPW3^g9n{=#3EV;cQ&XuZ>uumO4v?m^;8 z_EvDeO4zP$8wM|tNnc~2pNjg)pS`Nu+I$DIw>-5+KS-rxbD~Ux0IT0*m)&h$3z-QF zanjlS^ImrC6yJH+`Hca9w|UTfULQ|4&2xd%_W}v`==AV`Y@&@Ac93k7hZWmn_wk7s z-E+-P?boO}UFDPW(*0JL97o&7eK?D+OqWWEIIWcx0ORanu_*C| z_HC-8`)p)TJqs~$PBf`0Ozu(uW9$Z;57Br$+ddoBv$xhHDz5YBYMjn2`?i{w|GU@7 z#HFb+_7IU1AG_n6Way$MavCBQ;QF@KV|)$NwHTR~OoT=uuWq<5^ZMYyn5$%F!%%f@plJn8v?LIVS7mzm4^;+as3mQgV(S>3k*#j-8619S&&uy z0ki2Ra8v`4p4E^Kng@NwVnUC5mt~yT)v=lS(F-rkZjMxSCTt0aR>0+OmXlTe7s%c) zo^d@ic!0GgYTEtZ?;C2`$fHSE?U`(;Z(1<0vXDA-u*e%I1WfHLAndA9nrEL}pR0wJ z&GRFzIbIRlws$iZ%thw!9oP)Y;azPXI-I>!;qkXEjj5(veqrY-+b$*?fxqKJf+-QY z+5Uto9AX0XOso`f8-8LKq2&v%_sB5to2&>}us)iVh^MpOzM3z}@#7fw&5?q?bn@&1 z60@kK0PT*MvAj|<%*bj@$XEUw#+7P81kpIl;A0}tw`Vq}sT(w#hA_n`e*n8o2rwF& zB+lP&Rw{woAYLf36|_(LSs#D?_5w|#0Gd9&5U0J39YrYF_`olwbm+%4@_9%oDUC`6 z=l;>gMw0^zENdO79~6IZXzMr-fT(TySj+sfz&zVzdaw%L(5mL#|9r4fj*WYV6?1@e7lUjrg?`pmfi- z7H&~vHUX9zDs~NrXk8sWO=nm^ZXnGat25y_h#jioOYI@AW-(-;KA2tsNobzRLMkoi zETE0F%3#oc)0PwYUF*onZ#tK+fqx!+fQ56Lcb!pp1w#a8TMu6Q=|N|}c5#mNz_r}z zk6&#LRgevgq4!0^4nv`BAgt3X(q3sVn4cKI{37DYpkMCys_HDYOQd2S*GV~%j~)FE zP7U_%5?`-#T`n6LA2T-9o?@Qs9Nr%>xv~l_sh!|-2x1UK)*b^EzY^Ho!Y8qLn$tYe zpg2=5{U!Zb?g=BB-8s_LQjRc1@AF0{a|Q{-k@5n8Gkqho@JNRBFn)RdY*_`ot)5aW zS3cp%v3w}R*@hB!j-=)Mq|lu=eF<4eqiw+bGIm;)&qEi7RGO5vuvIYDx`u1?}9*3QvPrxE^-y@ z{yniVG7+$IGU?LGnwnS|{vTDr(CJ?*0TU<3|8^>wI@`NC8Jjxu@X(8TxQHve7`mAL zJBuqb5HK;Z{ilYHk6!HG2mgsGD*q8#{R>V`^va zVnM*f%*gg%niDSr)<1C7~7iN#K zS*_eIvm@0@Rs;icRwca2EP1~VUD@zS4QLR@(8=-hIB)FL#fqGKWU zI{LuI<&BiEP+6}wfvIe*2C^K^K~c`ddJF2`CeouAPzGy>uf3>@qbC>=*Nva_+wt%7 zd$jYTH$CT%HQaq{N6C3DmAN`Hw$KRk6IF1O0-2ElIH8(U*!yj_t07`Wva>C-W4Qe0 zB8n#NNxrIm|EH~$b^|NLII;!pj4izEh>3C-Lzy{-&OL6iypun>^yy5Y;qCtEuM%v~ zwZ7}(mjprrCzD$GEOK3@>|=;{KlUY~Do@i%M78s1-W-wh#`$`~Q6g}C?a9fvoGLYV z@Ha*bxlE=Bz^3fK7eO?zmVBD54~Ge5cdP_<6_C&@C~e)urhJ_3k|w`@M5BqcV!rOV zEK-C>2BsMt)_2ZOL0Q=8w{ygEcp;^qKc=V|IRxdc&^#|wZ?{?3(Och%m3||W*JbM) zOw&!43}^cWlhBTGlN20;h^eU$G!=H0+nHjt|Bzb~%_=gQm*BB8+-dAE@Wet&fuC`* z)-jSh8IcIuVC-{o5uc(hZDXiN7sG!9eFGL(-%y%%kMrAE{m8k#45hV%BsQQ;M2zfQ zheMC)DT0Mkh|kxh#;ewKEUku1B%sqo*}l5FEf6V@9@EVLLc!1F^mz)l#wdv2B3F9| z69TtWGb9m^HdXq4SE>-?L4}+sr$Ay#Y?~3oVO|j)N%JlsjGW%p z_T8%y8G#M%yU-}=hKw~{GHJADV&aad8X&dGd~rB8q{;DA1lkpGYTog=c{A|%H3I5g z_pGmvkN6i9$PZaQqkP?Qr(=cXw%%KdI36_7pf{aVN{kRi@=x(y*M7xiYRR^bBAykOE2jw= ze%x{#;W~g{hnfOxN9Ue|UIIJD1*qb@f3%a@U~=MeN8`PdA4*KL?YtZ@CUY~$o3bV` zHaqCyV7e8MKFv(w^0&_p3Di$hi2e9Y!`qs>hqjXOIzVc@wz|O6tsT5l28!v3$U9_T z2c_YP-p1xV02$IxKRX;zrkHkO-bC+R2N$xRZpjCP|8aF}%TY+VqSeO&YbssPlCdkT zKR_kJvFsuqzTD?vZ=Mt4?fa$^=w_RbHK@5`=BLRP>+Gn_I962A8)m6mUXav5s4zNG z{VChkVyavP5cW<-mCN3vhNh`#*S5OZD5(Y%JV0 zol9-~{F3P|YP{bfv+88mh%(n-D3(v38o9`HuMMgI(3EaQ?B*|}^DCvBE%0;l$TvgU z(~A5M9%l-&jIxd7c^1TH2r2n^2osw2~a6`=fAO0nQ&d0p`j%hm>~r4_+|&b zEww|)2dqU~KG^V`dpSX@2F05U996PR_>!Ff3i9#o+d7S)V55AoRk4pOFs4w(@*X#h zqm`HQl&^H78?k{^+JC5;Sj1GM>G{jn8?x?5u@dRJmuReLK93KKTdPhE=&LLY!00rg zEL0M1B?&KWEB3k7KdarE={(04O|lP{W;cWVN`!`j2X4m`3$>uJ*~SV^0)!v5$u4&J z!Bt_R958~xCk-cS{l9X%E>KL;^}c((-+q+w7#h>@$Ysr#Do~0>JdE(<%e5ZauAE;4 zb*N0|EkxX^OnojVX79ky=BDLP`=Rf0$>s5!8HO_zZL53bvJ4di8g>*LeK(6cSuqA= zPfTQF`wI+VUFYq?wbGxN0H4@Q=JcbgDk<|R@=NExtA;ejAn=;`$J=YQ_!f>y%DTg$ zXy25ZayMF#ZjC0Y{2kVqr&79T&!9_xA}=T2o&QL%dI=FYsn_Y{_@E?HACxN?mTS;{f?fks zG#v)WvmS#t(0bHiyYS^7z*QecayKlhu`*tWrzo94)=nF7i zpLM5(zLo1$Owy|6Isb7A&qNXiPXPE%fII|0ZU#jK!bt&2JX1!OUHudB1m4*t4HoZ` zH082>kHdrld%gdVHTtW8-qz4BDL<#}pz1^)d0;>|Ua=}u(M++1;X?pTT98Qc5nYR+ zs^MtY;odWv;`k<&HNcgr>q<-Cg_AFl2|+S0sjX=O<}&1@Z{cA7>R@r8u-&7L2`rcb zZ~(r#4lO&Pr6}@`m?>d@B<6EF+0neL+tY!ZA9_x$0YM1@VYp8cx1qeNeVi z)i-wI!>ctt448i@AM?R|GFR`A8gqFDWZZ*>kq8BZgNB#I?P)M1yMOkH(M+WDBiES; zZKijiAPbD}-hYA-#Y9CQ9JZqm3rvQ)vHvQK1KJ=b2TZxh9FF53#-b{gyq7=x+o`H> zmxS^FhQ7Y}J$p<$fs`N46pMtI%Q9LH$=3-PnGBEgDX$KeNOaz&phEgk0#RF@?dh|1 z5DZEgn8Ae|c^?7!9dh_E%Zb%~^d_QvH5^_D(eL@*=iJjl4cL$U|M7>+|E$=5oYg;{ zCT3~lV(Rq&Iw}Ts&i^_p0c>bCZy~`q^fvpV3EScoYX=Qgkpgra{&HSe6T+?_$2Oxn zO%rOZ^|`KFNIn1y&$xuWRA-ld{U)PE+K{&4Ct zKtIt}RI&l2yc{w5Vj%yEuf!LgQ)su41| z$w2%Mez0UMTz9fmvdBSl`6ffIwMfni{-I}J`ZUj7>T^r&n#h-|OvSLu1_JH|)@BK0 z6e8OLxLj9tKd976rRTr+`e@hcw9%t`rqV%#TwVa!^ zJiS*+T9XR!AKd^|V}b%_8479-!S@xwnZOgp_p9A%dIi)ohPY`J|63G1^TT`n+8MloTEpXx@gYmqAwe^lGhpYby774Hagg0h#)o8P} zJ)-Bvt)PEWA->@8?`cUOEcPFz47mGMx5{~w0u_~_=d9e>jC-J?kxHsWt{IS9k$&1( zn&0t%*|r{Kz@`yvbZBW&`hBU9_kdAXne*t6^optPyGyNG1%U3&+Mp&`7bYY_m4WQk zEovt7r3(dab>vNzgn<``=5^KFF;aw(W>v$E!06=z@V>QeqsAx(P013t3Cx;CZW7SUEb#v&`%&QYxmB6@vZyEsZD6-V%D ztc9O0Uu=!3WgJPEsh(JqRAd+A%c?PV&|DoFg0kxZ*KyEem8~$)d1iPqxolq640Wk)IKs@mo*HO z^uS>g*9CQqi%+Z7CbaAFoG*m%twjm6Ye5shy{ew!>Rs_*^X}!8Rk{|20XHG^UojY7 zV_YT@GM?^$TY)zMxYVg@ZwF25YK>kqZa_@HxCVD^=;vv2E>wu`X?s+b=-GrSg&8g~ zVL76tH3(%71g~$6hHEJNulTtc)crjl60*^RbUi5#>$SaCL%}0RSri5P?PK5u2g_^iNSK_nedOb;F9v0Ue%~# zEpF3#vSR)Qm4eeCJjET}DxCY<{visRDvS(p6Z{3D=Swtp& z)VlNDTbJCZG+R~K^jcfVrha9c$kFL!matp}6zz3*_rUH>Xd|Wri0HLPv|zxGMSyMD zgL9_$hQmik%gRigqNb}R-`hP$S*yS~0I(m#&u)4hg-(p$C+@%^OILpzU__BWe^mN0 zq+m2dMADgfml$L7Wd1hU@Fnsh3T_@VMiYPVwSAT^Xgi#LDXI3E=0CWW#-*wUlTU=- z{mHATkpeb*CF_Ps{$W43@Yx#N7{g2kZ=H^3k&c_FnWFbKWu$=m$*{L&1^6rU)jq@d zu=4!4AsP<^+<%~GVc@MOYv$90ZSBiokpS3FEdG+ zkvE|plUV8TqKZ<69ypD>O@R{2$Ef{YD+4HItyAvnBllsq&URpZZ>D(*?oEqsxUpW5 z=ZJhVrQ>B~^8UN@ok-qQLKC70dcsPQS-~p0i_(;1Kp7`?bIJOoTDIV)R6{+}O(?rAqkuKO1yt>fqJ^&+SZ4Ro! zlo-Uxb`i*<>pB|!VeX1c2!#C~Amd-z&wmdYO!V~sh72$90q*(qt}j<{4ZdGcBfU%Q zPofdjEjqH6Nt;eCJ<-@?-e$j*!?lSov53W<>(biDK9$iOL{Sb|^Lcjf^a3~;H_p(U zpg9IZr6FI%EI(Oz`bl4;)s@E?C+s!r=uZn%?I{khI>w~OGYNsEOp}9x`Erp!@nh>V zV)&jLy5_;YlTjay<_n%-pfLt+dOF2y1h=(KMU+#p#vaKM5`rmMQBU$thJ`gXjXq-| z6-yYe9|FkKxd&H6|Bf7^n*%ZckDg8`)}$Iq6~aMR6n6#wPHwn8{#+;r)-03MM~!yx zf|3{Bf$=H=eWCQ`d6CNGaVH~^kX+*pg|Cli!wK)#xu4#7Y!dioB(vB>rA6J z$yyVPA3rKY>;wtB*bXVA%GCYS4M*ax)Emo_ad|AV29$WBl8)rc5@a&u2IPRPYhs+eg#idvXRr;O zMb&A|{0H)(q869CLAM_;E*T#(5zNS=Y`95^FNY`e%bAJ52>u%y;m#r1o#TS1iYjZQ z#JfNWT5YdBWW~GBYnRdQ!P-&c%&TvLMK>{J!$<2^_b7P*KKzC&Wi4p32H0zZsLINj zq!wpBZV#icPb|$k2Xb`O*tfCkr`TrYQBf*d#C%dnvIJ|k$eJFvZc7WT zTD;l=1ccnqmdv#uQH@JTsqD`}dod28{xTPVp#Z=%DMIPTbH)+zAoP*Jx07=3kDfe| z0<6?I4H(napt{o*1v2*`%;`NjJzqd-o0 zpw+{74PH$mcBP%1`6)peX}Zc>w|+C`(BB6YTQoog<>>CWl~CQ6!oGV6u4bGM*KJ7M z(Hd`Gh~?VvHAZIb4g#kQxxA%;$fv*!Owj~msW2+x*`dl!@$%zM2~e0xtMd7|e0L{4 z;C#1(lZ3e0y>HBH@cVko)aKy1W)dJvM*f0vb;Q+nQCVTS__y%9m}oW|ro>OG#)1Rd z_Cm60D|0-it!*h~$Fvd1IVplqFIM)Sb0zg7^wLK-n-Y);ef@_W&E{G?k|&*+bw#E# zLJ0&}Y8M=cjD9sZ*V>>DBFsF#EyeRO=@T(&A0!Zf(u({cjYhwE-nNioI9qhI{@CqK zLv(bxX72Uj$pO9-#u|WAg;#w?88Go|8f5no!m*=?dCOzg9iwiY%)k9^+@ZHiZK2J% zEraBkSa`QEiqS}LugF=ES7IxoGO?rY&d|XzZ5S>4RUyX>`9K^CPvO~<^{mLG!L+(< zNR5Tl{-6Us(BrJcL+M!4ORdo6Thsgo>AX)$%+-JWie~p-ae|8zK)7y_SfR#YaKp>I zs>~JVc{RP?Z8pcX+j@X#0$eV9cBKaiUhUjY64uioJxWvH!%I6^0vGHk-~USu(;RL= zuQYTu zL^YThmgKuh8|G?@`?eAb`yCKS%%D5P2fA`c?aP?C+mSrh_-|>V{B!$PxC`S)hUil7 zDHo_Py8S$b-6;}`n6ruo;43Eayf9B6%%&|VsQXx-!-AM^C{jRZrJ;|04;SrYl2@10 zb}dI?z5~0yGU~YA&C#%iD){k8cJG;Zut%YahepOM%hFa|j4nKr?MvAVe3F^aDnNZn zz|f{+r~KUr>on!4pOKPoSYi*IBhR@$A>mGm5l(ZpYoWA04c{ym>T7I(7q3DNM2HXh zOnuyCJkoGdKv{^M!iwn&snFswJX)XlB)*G_sWb+Xt8-tw>EZZ&pN;avVc!|je35*6 zh}B^btaDU}FEo(LHXwLzgUaOX-Xx{o@!3U4&Ge4vKbA8GFgWj@*3zx`@qL8_oRbuW z`S>83GqGb2B1Q+fj|gUQZ<-_O(0+wcTj+c55W17f74RyM=4fgw$mw(b?tDmLv_@`E zcH9E}43qMa7G;PRRL|s3g^CU<1ZqQ8FfhK5IDbkH5K~v(Htw=nRQbx|KPwz#0nqk` z%A&Cy!P%FsAk1zCaOpursSZOMpSq++7elieBZl^j;h7DbF-G|#-$piT#f|4EttN|g zufA{K_s;_-+8|P1s;7FlO_(pocSlAfNbY%Fux_D?WHNUO*MXu=J@yG9Ce>M@>wI=)6^HaUV6>Mq`2; z<3mi_MwCik8Dcu>=9I&aBH%dpoD#WVMIa2(0H)V8)<-q6)1Y)Vs3h0L9#s5E zG*lc(^}J8h!xIY;(?K*>|5=+4Q#o^=C7R1Ic)CNDvD??QUpB z^+XwVDY3cLNGj~*&jk3P2ItUtlbA(X4+oJmNv2anGFgo)6fqgAIC-DRyxJ{B7m0euYyO z%|UBfsO7&JeC~ZAjs|6d!bmI&=u9l+ue&CGjj{6{U=WP&qQkln&H)%c8I9jIuL1?= zX5tzsB34g7hV{9ued=6y=)J9>e?Ov`jm{Gw_8U7Mm!)MKoDM6jX{EG*R$w*nVPyh* z=(Yuk#hHJky==Uk_s7mGhe}c3d-rHJ^s-Xh1puXS-{Ft2HyVwq0Jf;9~!q_YhYoUBOB)WOdI*xcs>xNuF@;2Y0oZ z>g8esb0JZ)$1;(B5Y?jm?&nd_h2d;{ZOrX_BH;J3POih4L!1NW_0ZJQklYIM0m=H7 zxF-AHW{9^n3+arzU5O>*in~^!eZ`ZG?-Coi3?o}cmuKY$VR zoleffVwM&A0MYdwanj`Hva}CozHm;iOn(NuqhIL4kATXu%ca8E;?z*M+zqsW@5*P4aq0Oy4sdJGD*Oek z(z%H%f&yRIz=3Jq>C%G=%;{XWbqP-?7bnp3*kwVv*4@=mxCr^_CqZhef1fC6*Dk+b zUMlo3>l$@;JylpF8bK z3tVE&#rxfGTMnA3T`Ow5du5=*4HZ3tNwi%kS>!W$mX8eF8E@u8B8Haw>+3wxjaf=} zGn7mvzyY;_Bzcp7QZ47lH{P82w6Z>5Ny<-Vym!K@3pOf~J|EXIf zx%SvVH@W&cSS1STN9IN?yPbLk7~swx^EglKy~2Lfb-X6ofL|6{P^We5u1hw*cH@Q| zJ^VI0=D5(?PLbx`u>Hfw8)%ndmdPX>hkVoneBS^AwBchRWT*-z?wydL_WDfd^tb@ucU2$mf>^AFh~b2x|VQXeoB0yhA7dpghxn>5I^ z+>2Y%ZzIZr%11^*{rIDOE3{eio;L0efW8n+YBcw%ZhhFZ{6#kdrw)smtIZfa$rOmK zNoW<6J7Uj))TMDmXha0`TQ zn705=?FbJN-BC&F5b~DbXjSG$Ky~|&IRt>CBtj2a^(Zc>`u2|KB3>5s+W^&m)TeE| zn^dIxGJs(MShu!159G;KG4B>PkcF5O>69`J8FMEyL$(EfxHtMlzXhLm6oYu)Nhf+b zy95}X*Txwe0;G*}#IP${3PMpCWx}6< z4~>Ps_@EP-u7x`9{*;KUMBpYB66cowI(Tbil3Y;wS`C)!g7HdKmLfQ8r+!d9M-FAr zwM6^8=C^`U)*wWL9?n#pOVK005-A|Yy)fMIOM-3*7bbk-B&YNCNf>H0vik>o`&T3C zzYoBeS^uNA6mF~K-cay7Lx?JAVUF}hn)?LJW3rk93R2@>oo37o!lvNGV96eAbMukT zpf}B=oemB{gh-p==B(R~P@E}%HzjGlPLl`h{3G141 zqlXUL8BG1jsjc^hlN<2}Wz9m`zYS(D4clA>Gu?n!)TO<>J0s6E{$VFX#YZyO76Q1q zA%qsPz0|h(++3dP&jp=Mw@}nPIAF1sP|pz6-n;Mj)Z2y*Mb0h`8CwKu^?cXm;u@n; zMOdS1c-KL-B1){Nl|J8&MN=$XV4SQVDs)#IcKl>U`|H$;E()1Z^$9i{a(doH44OJu zl@(=FN1?S@_yMfGc$ivYyMBeH#7GqE?X^*grK}jDd+ewosbey5_{)Sj&qjLPKyR79 zqwS1EhZPv$?wg5&-ou=7{yWipkOG$YYta0f6HPLQwz4C4xhuk-oLO?&vAEMI>j{0O ztH+%-VFdaY^cQgiI10UaQjU!AAIv2Q{EX-m>4Vp+@21N7u@pr|5l@<#_G9>ZqNWIN z`CW>pznAXHz61Km=gjqj$Nu!gCo#AlqCB4jVm#n5$pfSx4-dMixg8PA0bexgvA5q- zhtHX<@RPKcZ~K$uomWDjE@H1$*f>t)D1)Gd?^J}&3hnK%tv>IkG}&QKD!{$hTu8;M z6sjAxBSDg%N&^(EFN4%81F%>(ph#tPFkwDF5qq=To-vH6meaLhP1p^=-FX+J0DF)5 zRMO$U9?W3Hp~a68TTzA}>|ZB@MLY!*zxN&D<%!DBu78oB=_=O=7b~_ToKzelSfLbV zFo7)Ye+1>QKiU#ug^L4DAZL2-F-&W+K$^=705A6>=KQ{JO7;hb-(kyrG5`g@iIr(8 z2F=;*L@>5Jd2zB0K_L*e`C};LO}CHCFvy5HCZa&G$=|jOMjP#`S-ry}Rk-#{oMCPI zFeV`_(LY7jk&1-9g`AMYB%<`HF*Ges8d_pie$n|RF3~oqV|9BGEi@4K-Il|CO%+j5 z^4dkPi&hED-7IvATPj?&AF_irohf|nw@Do*;c4e}D1ygu`1FA?BM}3?h61dn83mZk z+u#0hF1*~sXHLXM@)geK;COyQYJmKTB^XYYL(EC2&1o>o!ci8u6h@n`t%wyF6e>rwZF!N~Au_P&+d*b~ zMCW5$JZ0-=vLUG9>1#R5v@@lmKQ0;QHldQTU5`XRU3eY+e3Q-wG9jU|1{6q<(&tFV zfB`iMper2t6a3Q_AP_5MV@li0J>h%`u`U)S`2rk@pc`0~-u|Yf1w*GpYuWw-NIV;6 zuCl5UojZsBY%tC&Zy@Om|?=m10S`uQ?cu=SHhZ&$%61s`9dt zjyo)0VgBP*f{|KH?Bb=WLfpfVuZ*V1_lN(@);pk0pL_o7LHu|4XlzvzmG#t~H+xUr zWu=QpKV_2j<3|Recxi%`bri5ENg>PO-@Oad@qOG75|nhKI82kIBl!CizX%F&wZ{|~ zM5lRPqv;>j#XA<|hlSrjt*Y2z^eFFpkiA~unuP639}`$mfml!ol_IWi^Xl2O6Dmd7 z#^KOCTu=ufj4wWt?sOes#}A2;H#J9ElSe4J4_(>^g*- zuoGd0_YR@+EXQYhHpWd-zVtA&=j$mba+RR06%~rHBT2RU)8{rfzdDBCA9B=FHY78Z zkj!OKpaX^(glwowLJOPi!ycRE?i2Xm*fdsv0BJJ$K0aQ}{0?t+k@@p{xE zKV9g$A4QDZ5w$0N%#`x2wzu6LC3<6{J^kfhM%8z1<~&A3bo+A-%7BSgj$*xEPC9&F z{r$KQ$U##IQl){6WS<|7x7`{wXY3+?$%xxQlKhRT^sV8<<*9pzA9+VDTaiJnfl#-| zBqyzsSPU}b2#3qU<@+D4Jv$(ZPWHM%ZuI+IasrJ87|wv1?J=iqRM%!2lg)O18-U2# ze8gqlzRZ#g0b1BV+^MR=$G-)@QEtI@Hs;o)-n6fDM4x~1$SVQYzUcS~&38KQ?2l33 z3)#f~Z73!9cmKJzlAIJKR-siFoF2W{rwA1#S-p>Rk(s>O;pIe2S~Y$2*#dh-oc0ws z&Nz2>-h7c@(H#tLeSU(V?uTl)j2ScCw<`PdnOeY?u6|QJc+-gfaRrBP2q5ZFlUe{L z0bp|jQL`HoVh^}O)P&;B)#G3W+kQRE z8*>B@Lxe8%Sqy}nZz}L?a3?IpkDb>Z6%FEKe}bC5h<|g7xFjUHTORDwzM9<2hqF)h zjC~0luGbV&SWc{#V`l%dJUO4idU{ULD3q+otq4YGd~dj>e2aup?LHmyb<=b{1)5D%4Gk-Y?ogtxs%nqoOghKy3%J>{#Jn~gV@s6z z8#?|?8uHSvL*L};Rbx{wHw$-rPq)-#GCU^gxM&S1dVhY>)zhcUW!Yr~?i_JQS}W*j zBGD+_BI*wPO)HN)11MkuS9929+>UcOLgl)UTMfo0m~3qdjIOX#MmO^!evlBShzB3g z%+G6s^NlqnZWw~4a5V8!s?ZrpAOrfDe&zV_m}uyi4B#HD_-%>bMk$YTDL{B$$nD;a zL7g=>u^;``NBW2-r_yzrF7)0gSW6pVzMOMw%>K<2RKl@ve{VDOLjET4gIdp74mywO z#U;-z48kUMf>88u5)c&<1HYN6G{bDmMA2}m!g=MeDejb9_VG`M?>Yf@iO&AiH+R;$ zLE{8zi&a+K~XRy1_lP23cF^^)(Aae2aIoa2&VG zV*Eyr+~%>5*>|eXZ&{Pj#B%}Ow#KzR0fL-UE$&R_?5oN2_UsJyKON?Jm3xLDx7r^# zT-;(byO1w9Ab#13O=cu~&u3XvH9G(&LnsDsP{XDr5RFS9zbUHm4|Jyi1&Y$G3X%bL`9;B! zmL9fJ!-nUjCF3IsQ!Q-XhB|;-NToRTf4ZR-B23~H%0!Rb*(L}c@X*>fGkam;PK^8M zA$&-v=|rlxGbbbkhf^84ZOpJ+R%3ULjI5o=T~GkE4yIi=4VJUQ3k!RON~~s9j*$%q_AU- zEL5wjulW3Q&uBad#P0G*&~tpCP~XL;|Ben}(2F$s!aZW3;ma^t>Li80pF9e5Z173` zQe3StVY0*kgl%vs`o0*lBni-uciqp|y|b10FmOph`@v!Il6PDccRo)O(Vah--qX{g z^j!o#mqNf%q>KvGl*`x2u21KzNdSY_i|75VXYu7d(N zU;M#gNnPs%=-Fu^UMox07R*muGLL#_wxG-E(T9L1E%b2C%o|VirFEme6>@S1%XdeF z_JcgJjUf7(5&ozR4C1TliUZus5Or^?3_3%{ZQ>@lnqcZ?d!s4ZZ9G}?9SY~Us$vam z_Bu2jMzZ63joBWQ8GpJNww%TJ$UJGkv=|qRo1zO#CS(R%QNeAa(RMOGs6Q>zY`qb5 zJfr{Y!=IB4o>*7eKhw~RU0vX}k?_#Qa~|8aIt&XOH91@(o~j#}GVSb2%&?!M8>O{W z@O~8=-nOH?Dp~0F@Re@OC@C1F0}L-VcH}~a39MkiW3GoX6&k4Kd>7l8^e1(gWM1H! zM)r?Lp5LX?=kSn&#L|c`sOTtqvM^%??$U&5IE`-nyg!<>)O}73#FKxaPCo#&wSWOB3e+p<5#SNN8o124odr|-MNmemzD1wq5!e< zFnI2vnP#P%*$dt=7m#9#ki8(lk!4tdUWH#1tJ6oRT*$RAu~OV0*c%4udV(u{Rl%au z2c4#8@_rM_OyCT!-IL<&PN<^Gaq~VN1z~Y!rQ2U&zhBm^eyh*8a9DP1N7&vrO~qj& z#;CTF2atF5QYjCagy2QgFi-p3qJ%c1X`XS=p+Q#W<$vz7y^&y~R*bBBh!bif8>4iTdVe!vW=p&)N zn3RGF9rI$`{bDMzu0*CleJSnE_Z)8$`jv=STgB2IOOQ zh`jdh>H0QYwoJE*`Qom@Qu+SIqG%RzQ5Yxd9N7`)f)am1lTk~|$SGca3iCQO+P&=K zb6CxXZ>#6)6MsvvOuzE5dhyo+(Ehy!nBo{V#PSSd?Yik9ay6x;3Q^mVGmA=0mF#C)%b1u?voL4xf}%J`+GzgxS1-H?QH zC_mMuY4b&I?t|Mom;I;33#A0IqhShBV zGY`3Dxr*WfFk#F1yIQbpxofLpBJe3b3&IOa><1I4IJA)nt~DnJ17~bF5|>R5Bj}xk zU5)Kw(KyrMsP$RfR6tTK+h2+w99_^YK1D30IR>zTlHAec1Y%JKJ7EmCQkyq zPE-X*e3{)lm~usnSK_ly!|}V+kJ4M2PfSOZXp>f~U)Uz2JVfrKCPvzqrBh6ImI}3t znPO>KP*A6Mg*Rm{nLW0&^cI@;5b+SO=0^Q--(H_;yhd0>>=aDbw_X3I>)g>EqmA@F zz^oV)BMnBW57Gw}zg(o`!{4k4Mwn2YP`~}yIRk2%)S>s zjWnNorA{^Qib&GD{!SKO5}WcbL`0pOQ{rPD!ip7sqm_7mxfZEXO<;DU>a$b%ye^3z zm;xHPI`{|CdKPgy9Z_kF6MJ>}Z@RjzWZC;Y==EYuCHxv`u88>cnDcjBz(u#4-c*6D z<;VSjkL(S?8&0dStemAPaZ$x|+PRwQYWLA~Ilt5_9z}@jPbDJL^(>+Q_L5hp0Qzpk z56ZYfK8C8uwQDS67t; z0$z6oc?DK&XM2Wrne^X}$#+LBFYnhs?sQ}T5T8}>iGz%_>G8K8?{v&gH`V&xmwO70 z#Lt|^GvaBmv|;S7qp(mwU<8uxG||#)oG|z~D-`vDqU40B3PZMhR>6=Uqv0_pTFO&( zb$E-udi+M2pdEW{vY}T#;P#Jv&RU5JUZtD8kKt0`_(MI0nW=G+nLvlE7S4~W#$bJH>-pf@9WnR?S5Ow-q`OhCeIWy zrDH(uM|`&zZVPp(Zb2VrHzIz>=s&F~r#ggLp7iH3-BWQ3Dt9145&R*_Nt-yEO^Yf* z2o4_eYxT*5OrWoI`bD9Iyx^EPz!}~hRVMf%!<-bDM#rbp34CI#S+>jX+i0*gh*v@V%Umq@xewu`PQAAV3m1J+bF zO_};Ne2!Vjwg405wY_|Vw63MWI$qyHPAowYt=pLP=HO(aLA7A|NWeFd4xKn)-Hq^99I~xHTuzGApwxT(^R-~mp z43UY8gp<8w4NJx-OaPC-#Z9Dm2Pw5B(Ut@BHyfbvXM9WD1kPP5p;BYm6QcFT$pJ8S zyedEj0i;*VNPep)7F0&V$ajVB@45SKm5@^etTk%Zm4XF8gI##jl~B(GaN{ zZq;E3Dg6;VeQpbrF`51Ml?J_8U--d&O*yC>J_xidAdhOg4h>9pQ)ZwId3MZxU!Ema zrp1~v7G4v)_y)vJL5~8oZy=jE3r0$hMG3X%mMXLk$m_Hv->@V;^CML19e805i3v4g zaNgPpv|gJJEY2+c{z?6};8Hzj8k3jkm~%|bVLbnsNB)mouCPZuDwkUUc8)xKWqBmw zfxgpWU&&+}4FmC}nx&ZT?s7mkyi(zwUHM0)fYG0(>8Zk9c#3B^fqpee%Y+53IV$Mt zsc+Mec-EmVC1Uv$qX|#^anS2dN7KvXE1bY?Zep{Q1%j)64ISmjV6lVVDTQNeVpV9G zo^`_Yg@(hq9~4D@vv}dQyTHxW6&Vm``BitWH;fS$%E-?(k85zO*n(8p*F@PJkiM7{n!$Fb9+*!1`Yu)`5m5M!_}3ZG`5i z`vCBAH$cua^R$gTSSfF62m;Py>IF!$?vOwV1sdVO-YoUo)OX{eAWEmUupI66KJ(~Q z{cf$PPCQ!r0bKRDlob^rp;_*0IFX{dnkZ#T)%Cn9XsHvj)JlxYUtQF!*i;|)z^c$^ zqk#b2Hw{g%n+7s+fGDvrUFou24tCPwjF)h|i<S z+24pP=RC)Lk(yVTUsBvp3%nJwXdLA~TXI6G&0r^2mkqmqtIff}oeSz$>p<^k)^ znMMo%vPt)O`g+1M*b6vKrHQt4k7A>h&~~$q4DN(0Xz3@?I)4D#?dUTXoMrZ8%$@?e zj3)O&9>~>UNJS`jaM{XTK5<*G^5KU1E%bnro{3295mzx!e438Y^&~2<0EQS89=1NE z@V~_=+E7wwlmhQ|U&s9`f5Rqd0Ip?tMYNr9>ik`^Y`PTw4fOsk<|eBPACOxl;l*n7 znW$@W?=U~bD&qAzB|Iwp*k^xa`^WwD-jPTpL(b6WP zw8jbLI6^PLe+PG7%&nv+vSqtFCiQxk(Yjap6#EDftaVKDpy<+BV$NGRA08 z?WHXVDjFYut`T@pqO28$Awtj%xDH~4j0hqx2_f9xj2KF63f|3u{@cTvMJ7QoWR%Xd zcpzAcJU1#~v+V^3)~wa3-T3*pf{LAxuKvB7eT^p90JA*uZ?V6DtAvKnj^}(|!=3y{ zF(1fnJU_Vq_m{V1R2iBuN$95R?(CkAoO6KzOqqSG^ZAmCtfD90&>$$;UgQcWc1u7I zg~u-%lahoZ=p0Bnrv zkKURM_&b@C!3r^ay|hoU{yk&skE8VCHw=r774T>&`Nmv&d_&jc}0*)T3m@+BG-EFg-k4<6AGE6cLr&oK~!RWl~hZmZaxn4VcP zVz(Tj7#~HOsi$E&04HkE!^8Inb~IHp!Q9l@L(c=*P&IwO1M!sTk6fJ{^*q_i*|z!F z%&3}kzLSBHuqvnC|4vg+BIMmEE@-SM*Y@TKV!H>L!v?)Zemv90-5+F)2dz}!8-c8M zCb=u;_A*WG(lDiZ`^ue1TuWAk2xgbSlP*2X_%2oGj+V4yl8GLrpV04JdUcT=wN(Ur zl_-hX?77?$X?54DmF|tC+>E47G{^4lVO009qs@WXzz!Ltsg@VInri^}e4{db8l)RD z!sYd!(s;KdUDCd2t4<9;z^5KfihQFQ$Vog=a#86)yy1tdm>Pz$D={!ceM?}pR2KO6 zvo@LDOQ&SB4;1fcmlLQXI6WYxW*PXi3)OJ^|~PvEc=Zf~mO7P#rXy6v~_@Y(s^w_R@iN zNDlO~W=rW3aUC$#B-)uU2-qDAC{pxRD7gu)M9nz{7g&(gS$xJeZub{n!Y+|YqUza@l-|>8#={4@;Q*7f_q7xgJ9uy=0&^d2Zda6 z?q}X&1;1Dp)HE=gRlj!mg+Ynm?jm#vs+ffvF7jiG>rzYfn7XIA%&;99nvEm#`9(`> z8b7(d3Sn7Lv34MH0ymVfb6*CZQ?B?b=lCfrEdFT`e+^H9TLyLgL)aM^3sNN5@^bb% z%~GUpn7OaX7Z4@ zMq2gs5`V&mg`G6UYQydH2*{xM7VuKNPPOB9wnT}|9w?{C*PB30@#Grt|AQ+GS zV=rz2Z|!2u3ToDHYd6vhhHQn>wh=|-lS@nw7?}ec8#(T*Iwt6i2yZI*8s&X{j1HR+ zZn~ z6Q7OVdR7v3q9~18bm_#jl-e0$r~|xUELJ9y8SxI*|BK$N-g+x2K7FnFRH2h*h0}=H z9Q?`*o}U5oUDK~uEg8XmX`*;1noB0J6}>vpmCK+_KFCrnNhOKho%mzq1XlJcxwme` z2>`kb`r?2HK(^^pfIAr!WQ(QOlv69!$$qE3X1rb?h`;CY5a}Lus1u93T6>kiry3OD zFhC%nGB1T(MMF^i=A#*JTc(y-ZwhY{!!v|Pz9(m`XSLm+I;6IGe9iGl$vOQ`ueTmcI|?#1;82-juVo3by6pTF8_N}6_QM~QLtuIN@3`dWtFu;LY=9;2o>%T5 z7wm+hsK%u0uqF8;7_qY$$Tdbgwh4A+g&A6QU@?^gK0lU{B5-5Jq6e4e_jBRHY_2!- z^zy3?s1-28uTvyO#P!-c9)vmvl6I{Yh869LIo1ZX$`cd$>&jaXaR(NFMRHXO7=pgx z2483r%#U^q3nT=*!#|BTvGu<@iLMaGWm+YGMPLB7n+cqtiHfffQS%bl4$xS2bcTn1 z^8}CQQq^nJo6E&XjNd%@mig$e8%h;e3g)jH`KJQ7M5{`Gi5>ZsNvxn%YNMV~t{c`} zl}Ej9)K(~Uv+QZgLIh_`Z4<)S-@9PX?QeKHb{0ObBp&&2_e%Yxf)c9e*i-gG)bkLj z{kbOyWiaiXLKQ5|+NGf@J*IXH#5TPI&2nWDx@E=MlPqhS)z#TEnMCOLP_rwvD)$*b z0lHK~8TYzR-1;21t}Yj48!EYrV`n~x^G}taxUInzAUC(sc)+B+X4o49H<6;;sOy?k z7`nYQnpu2XQLJVeMvJ4(wbf0EAT#qn8sf{SU|f?gX!6g}4#AgIaq?(oYno=H9Go>K zdS;Xmav z4yBB}S>PR4({72HZ_IJn&we`@{R5CP{7b&||4pPK<_?Zd1g!tB+KQQxPKJQtzsy*& z1{R7=*8jdp3?GG1N7U_x0Kr+d6nGCbDF*ITd@k3`IZ?s}y(xt|ba&{uvg?kLSWo$< z$M{E2*#Gu){om7s{g?j~Q04?&TOsdC_PMU{BK~LBgn} zr*YWB zN0qiS(Tn6q$XYLB6k5)pzwwBX3TomU^(VWx=7Y_YO%61rhJImz2&hiq$j)KEusF-bf($wkujC!%6T%vMkX^!6?ul{9!M;{)0tZ} zznr0(wtWcg7 z-_A+<3w$k7=x^$>FWg&c^(T=D1VT*69pI}QaZ7wwnje|N+y@797VT()MKVN&0AK!nk7u&vPTYv zdSsE_j|O0Ye7xx~20QrW54jAf6><{uwMoyW9;dYeaoIp}lTAd`2RFQ;I;-Uxa+M*E z6^?bUpVU10N~g!Cym~AbUz%9lGh#63n@{KZ%)E9X3c6=h`_Vl#pYCj~KS^_c*=M<% zh3&bsnU@#+H4!8H*33{|PE)sn$E9{MYw$+)q*ltt?l-pO8yuAOOf$Z-6a8& zHSw2HgzcY)_MK8*40ewd)>$VQExZP#){oBD2vYFlMDIh8)CyP$GMekQ^iQ=lS5Fwy zY=BSS!!yPv-O7imf-(=htpqWtL2m9ujTjZ4f_kZK$zE*#)3eWt)a{SLB5GDJ;i9w^ z++h>$Ad3cbQ|<96ZKbH^#R7b&fOF~}VB?L>uFc=+oUuBjb*^MfE1AK+hJ0QRV?@wb zzHH|%kU&Zd!7CqCA6V};VxJ(+e$W@H0i0oWttUw;JKCwXQD5-v?uFx5J!oZkmv(** zUuvhR&;GSncWf@u*f{&%pxiE)64`o`^ldtOBBt9>T08PNvZX<}&C1wGYOD9hAXeyJ zR&iS7(s=D$4h-eIh+c27VDEvjotbB*cc^N_lH_#M06%*3NF*CI4|vVCP2YI*uB0tL zs#LJfy61g^z&M!2Taun>+OWgNGWfe=V-*U+|Kkb}q_xk!QW*6?jYDauespbOCNLkm zHNW-;s4y;qBTtVwcHM+f#nE0PXHZ`v zm}{M_eEr!vSTlF5I%1~_Yj~x^QhHTZ`;*uk_b?7G@=&7A&k~K(><2QgN43A%*gn9* zk#2(K#bI0$^FS4gzK;_2rDCa%n}K2B7-624egQWJ3#19AOE4cN1be^fpg#d6`yd#( z(0cBIvs?ny!mO0B!{eWv&;w?_>cWT~;|pP`0Ts7@I=ufw;`49G<9`Vk|F1b7|M%hj zf8uy#_@CJV=o#4m{qHN{7~b4{IJg)<2x@P)Sevepj_1d4ZDM;>T5uVu8dGV{{$Iqs zQ;?|Pwj@}#ZQHhO+uUW_wr$(CZQJIqs$DjEpVPPRJrQ$ersKxM^yB~dz5KaWX0FTv zmXWb8T~kW6)lP9;{}K4vzw}G}iPj;|_|djg!7=6|IBSvzW)kAEk^=P=^odZ^E<8_- zu+be-bss|AGyLD%1eaa=r+e6E0^9>23fazrwMkd^wZPt#+5ONyJ1p4-xn!Ien>jX1 zLMpG(Xo4Yss2tOgG;hldhu1fViSjZny*!8{J6^=}f>tTkdB_unf%@S5)b{RIj*)A> zCO5Hntpm4bUj2DdO9VIz71= zIb;5cy3+k6tB63)1_r9(16K$hMr!OJ00DH~VlD=D@gmF9(AlOL6^~FLP@v*pjTloI<^BAHa0R?*V#b zv@EVrBGQBDnhXn~UqR}S+JH?Fc`OTj2-r;*eB6+H7GfPEUV#*UG_m zPJNk(D7}l{wIJaWkU6V2+~(3I!FV!SXTr~t%wVw(qOuCeZHabv)w05kNjh+@{|7{BB&i_f;yl(e|veKo*&xTo~4!Z7x?$cj*a3uuUi zwf3)RaLr*R@|qWCTuKI(03FIytDM%93y!$j9k2H#r0yuWsY*t+TgHXKK{!989Q6Qg3Ta zmS+Knl7AYZUsfp|jfjsofCQxqRDsQfz1&+I4nHXJB!6~$vHMz0O9wI_oU2#j=dGB6 zL29XH#g~BC9TkKZ?TF8wIapjsLRbdFo#A~_8JGTg?Ipb&MVxgajO}vOVco-LnJDVV zn0pZ}Wo*_EVPj(9B|EZK_y8AT9zZU9VWhQ_U-Z!;K1f5tKBjyQPs7CfJ~vtC{%< zcaKn*7@_wQH&?hY7SK7?F^JA-gd48S-9mKn`MC4FHT71F##|dD)DP9-#)d^web~l^ zgkSx&cgiZeq|MSnW#OP!E~rqur&3b(D_kkZ`!beC%Iq0IC_GrP6Jhz|jg^VfGr%i2 z^8)*9_=du_f?~cX3(+Uir}}#NI^|(%F)!Bo$K4A*tqdO$t2kP}>4rDb<4rKpqkf4w(R_Dq&GK(n{u~x0? zsqT)@Tn^KF=$j=8R?ac_HUc<97P&hPbTja=7Y`BVsU%P-y0Sge76{3wY{Mfc$xplY znkcK*tJs!1>&yJ}CEZ_{A>E;W(lrQ`aL5hzkxh0x|GK9`z}4BmtuXW?Bcu+8N3PJWA#SY#$(W z6@*;ya0!4j%@!LL?+(SgA=QB3ciiroulBiCWmJ1KSY`X=OCMpaRxn;bWc^MdXO~{C z(7+VN;X#`O_C7T7?&#rHMz2+ff{Wo?hKbGF7EdD54r%)4R4zoTzzj5)o4DpDgYnYC zT~qz+&I>!UM-j>#y{)+?sB^HG`~rRoBI9e99Hewik(86(NUac(SnQ@V>w^c`wHIXc z#hd)aBdZ+=s(Wq;Nz6Tsrkg~?NSkRT-RHJ4l0Ep(7L++jANlUnX`X)mB!JJ(R&L(i zPxlA$ZeedLKcFZz@vd4Or@uSd)maU7hL;SH43TNLnrU0+TUHhGIgmN|tWOFZ!zUfa zPMDsXZRm7u8EG(ZkND15A4agy7VV&vwhKB(;sexb@9~K;k|;lwAl~r0BPecxY?U-z z?is)00WAFm#@%6F~$xwl;f02B;x_{zhwW(KS76Eg)2kc{7_mZ z2bfeL?Gj2q`gdc`zZ}I2+S=OvBiWkiAM5nrWb6Noy8dSt_5a}&_P;d+{coL&F)}m# z%M_HbfnGASQ&tp-#v$y*eiM|NL^(t5Eea~{-hpbdg#p_-bEKMS#* z6B>Btv$@-5w6Un8*TFDENNaST`Xhx!*=3;uH!P;f+sq$zB`9k;--16>``-uLEdjayn;RKD(9(d^ zCppXXkNuLjgUDO!lwG1+qmgt|lJ>1W`V}Moj{B1;A4}u&38%&jpY-bArA=pUFdV}b zYkq_Rvc~=DKtOAi`iHDTA zpolo96X{3~y`l}XK;c1pLeFh8(84oQV*(wbT7g2yCLglG5N1vQ=cT1^ZWeDS5C0!H^o~O_S(UGYOu^_q@uip|$xG#)W|j4TYz?A)m6t@~)YRms~I127#}nwPEnFWzpqEbvsL?=?6v67X{j*7R>2@en9dFQHFE&QO>vV7N!3NOlnZJWpp}d+1M9qh?R$PA0V?Bz_vu`0 ztiG`oB7qWLa50YV$muax!=m(yU?kf=wu09@Xn8Fj)1D(I0Wc8?4(qurVtlx?!EF_* zgociaO=A@J*1gJ_{YgK%5rHsghKnXFT3&)8V_DtSxY#WE);g+$H^51GJ`=mUp4sbwEEe7*^9`h)abs z2Vgk)La(9%NGCHRv@|IWM=h!-6zR{$$;;@@2N&sXmW`YBV&>Q=#Q?!(yh0=Kb-1Yy zgle_F1rf-*^$;ALRV4nsGpyE|-M|MlO&bCxpY{M84W8KratCFwbW2fK>_}NEhi^R% z;8+l%U5?oe19KrtGCh3?3r%`u3@_8Wu(>ErnG?;Ab94OYt= z^vI`SeGq>zKf~ExVoaS%yq0t#@8phqnIcN*Gx zYRwuX7AqdkqSL8%+FIY&U-0f=L#FCuCQ2Cc6WTljR=RucynmPU9KIf=CNv)ZW=B8?5j$|Nv`mPFcnB7y#9Wj5 zsj36XF!j(PS6|G03{Q_08mB21G5^*j`KH+0FuQfH-bD!&?@@&W(=sS!=Pig)J7(h; z>#}OK1>1Z~PoIk6{Az2j>BAEZdP5<|}-~TPU2O~Q>%YRV`SOfcz@30uZ z6;U+GvpY11r52Sz1fsaQCc-LIX+HuV(G~*X!=7;_heS=Vt06nusN&}IP%EDv?DPnF z)`NBLr#n0qPzErU4KyZuR0Ecn<{w^(tZFiadXb~xG0 zOf`bdBImq-*;E;%XMYxaG?;n!IQsQJ4)iAqy?&Mah7W(0Cr9Qh?&S*1%_XHIUvB`(3%(d zyjzOUCFbL-gmw#*X-=;?p8d!Dq14Ve9f8=;<%;o%lA96V&9~_z-@w+js2m4ZIMZL^ zjZ;JbOOrknaZ%u@Sl>(G4kn+ck{tUK#4#nj2Oq=D9AbRK`c%1hZX%XuS?iQGc2~6i z7Q*!;)zJ$cwD^yzc@MWOG<(%Ry88dV2dS|YoEwBJ?@9#5GT^L00+PdR|u1V%xIweNQX7_Ei}eu65UcHi^l7UqM|TMn+%ZGf$k#-XW6@ z?acifbY6u{Ed4@3{`1#PP`C$}&2#RCJRW3cCHv|D%?&yiA)>xxK3M*;s+niZLS9p*jg^#Uc+v z6x+uOINS6gMR^2K5wEQD%Y$5DWtbq!LT(W2+n@-H5VNWXztM;qqaFhnHS*~Zr)*v$ zH8uyfYZybB)0OMfh_Y2PkL)Etfs^WC{i5y<0IC@4w3t$gl))iwW<}g3D9oT)SToS1 z7;QB1uP#(_DUms3{q(9|RqujxH>TZqDgMG#;-t^nfAcALy)IPr>7kfzPZY1%3u63J z7vFVo984Ge=pmb-LA$iC9us;0Hh)cACL!wTk6Ed5`i1YdM6@yRbY;@hf5~e)%x)IW zkoKLM(h~acbQ%?zS(rpT^7=hEm-OQg1V4YfVd@3`(H&d`Hn{C!m6q~;!fO-6<;;QKe5T0fngp^`NaUC}PCR8>?XH`PO#VJtjw zvsk&(!zWi*2JVqbaE9B{x80Wh%h-C;@`~bO`<+r6#(5Tt!6ah=*G}4`uSSpaqBG#D zXYnmxb`Gi`b$zoOfagz&jd$mN;G4H$hQp3>VKdy1=Ekc}8y9iOuvp z16F3mw~nti)=mHyEd#cFOO&^JJN%m)Op3z+$=q*5y|K{h)%Cp%lkFB1YI_q!lqoKT zit?K1(;PeJlAaV+&sBr|1{~F~YoeZqwjIR{FAJCa>Ul-@NW-}0vLRJ>G`dPkTT$_X z^M$3rifKfO`R7=veFR(rNyqBs&J3WEl)?9L*Et`s%G@##Az$!IAM!Dr$G_hY!Vsi6 z^ozK5cr3c&RakJTiON5)(CsZt#1ZwqhBFs8yqI(%?_RWey7(;^G_1+WFntpnXU1U{ zK32U=Dc3cwGTo;b3}g0FlaiQ7%!C-fRi0Zzx0^A?W5Y-eE*z~>Q1z?P5vnU5BViBi z3fo9++eLheAU5fQ*+2p(tP!SrWhhuHdYN(~sCXm?m!7{%xo^i8j$8|Zp-D!8P|hDh zSg@)?$b>Z5yw?#6OxfM`N1<@SyEq>R(pioaw0y0m(XaPC`DJlVt%9f^%z3Vp0r78x zGIY}IL3uuLeYRw(FKr1a-nwXB2vkQ#K zzZn7kxkCSkBK@Bu0MkD)`2V9lTG-Co&QaOk(D)yfQNsVIjAH(Wg7FWC|8JB@{fkQc z-=7rz`M&>q8UBB%#7s>8(u1&Tp3DM`PoD^tfK~MH_rjh;Sd-J6K8#OeyF!P2pMx*k z(pIrG=N`u*&xRC+4+7c=ayQa+fd%$z?B!Id!1_-$Xd+ay3@0_#MaHMib!{49tZu2& zq~kn62TK(%jdefDmlBe+hu}OWt#%Hgy~qBilJ>GdB~Ez)44A_1O^lBi<_}B*5ys^B zgNULt5uB6$9q!yryUEtcq=_%`4mj`^ayl!`k2e=_^?dDE{Bo-BkaGe7tWJycA}q@C zl_&^xTaNA{zp&I-eFb$zA@J^YngLygHu0#tC>CfYBmJ0UmZ8Kb9Lv4rx6J%aC?ae46F93<@G1=;c8OO zkPrQIs`v(zpo;^LJ37)+{nk&{pjVO)%ghu3M^;CCyjCKxvvKq|n^ib1iEXNjIW;Zv zi0lqOD0!*I=hf-{kp-6{IYtNO!pU+Eo#-dx;&E{3E)tt7n02mQ+C$&eFRpD-P6I+Ps#)g z=u_CB6#*rNAX3lGXvIw3zcpl!gSUg@t~J(S!_~?#G8|c}a^>%9t<$~}MTr5X0 z*t(G8e{n(*hIS9GmY*)*L%V{xWrXC-Bv}Fq1u1#lJG}+fbnUDX%^s)yvOGJ}}cw1f!^skzI;NvCB3afjv z{Q^%+Ns4J&ZC?-{*ZtLCF3XmKF+$Jjx2)>;9JW-g?}}9)NY{!GeF!k;QI_a&on%FWPDT-By#zq5r5%r(!F5x(-kng{HaVxV%T~KAc|cQ%$txrqPX#tW+p<=EXQLGWn4Fejk2JiYP0%_a3mCF1HbDOP;}puXV{-Jcn%VCHPtUVr zEmwJ)c|~mJDH0kVp6ikC*^=X@K}YnBm$TZJ$A3Tpge@*&*@zS|f@Mgul4=Q*Z-u8I zCC)Qk%^MLdX4QWPtN_0mO8v`150diEgfIy#5H0mma9K;4Y_|oHRoMZIQ1X6g%^^OQ zj#9iIAp!+95*;oyW3$zst9le_H;#{3C??LoEP_Nd>q$_q3IfZHw@Gpgfhp*=>YM5T z_5U3Z{EKtuKl#;v{;2;{WyU&&0_5 zFCHO|EBZ&;a!qJsfIcsRbd~`LwcYFDj;|i#G)>{P*o@r+RQoazUNDmPG>T$-&McbTouU>|$DA*|{;I+5#=e%2xy zU-cvcH#Lr*xq%5{=uhD0ERwm1BG=<+ImQ#Ps`0&;kQ8yZ-X4$-is)DYo7}i-^-8Q^ z^4Z-OMp1&bnjrQOjTnpyvc$;MqrAiVfRlO`hybUJ7-L8+CJr8?8bc?)>Kr~PuNc7c zf^Rr7?fUWau@&0c2#AZrWpEI%eLrGYU2%y!%6`a4$`D!*5ETsf2A2~c?oBLETT=&7 z8y%L-+#<^yd-)0Nb>~;v@%5A*zUmhUtU<@KBX7sLsWA>x-J^Vz4^H#W5iP%}gJCU$dQ_@=Ba90FI7z|F(0@zG22%VvM!}B~_ekltz!j=JnzA5U+7PIJu z-H_`5*vRHJD<72VeJxSNe#Ou2x$RD_35T;fIGk}|y%W~@JKuF$#GVd&{uCoFk%o7j z5woIF%(KetXwiBdtG>BEi4+cCOYEKWA4?m2&)0H$9G&l zkgX5z$?dG*#Wn(27PdP&TFkECWfqe+Sig*3Uq}sCEg>*JfQH*7jOKhe-=IAJu0WI!?@0!@Rr-y^GHZiUgni^&}jQ zp+d;xt!R*MO)rVR?ymr>dg_!23sW>NrjJOLqFc(F;sF>+0;Nw6j4 zWki?q;)?SEv)-A#PhJE!+*r7GFqP`NC>u7B_N4Ol!XJor_T9g8=c*}nk(@m)iB}w? zS0V78)a!UiP`|gQiXWM4GEuFG9qdLu+;O`Vjp;2a2(mFzaeZYpH8d;Hv32ny8Hr>tf?rGq5;XJlgNI5D$$S-Nuxfe!EH zl*_YHx(t`z3ez|-_%XwT?};%ZQ;wq;zkZjz5$ga~OTsM275BC-G+p#!d(!TH%-I$X zDj1F5Fr!?ZC!NU%1M|pRn*E5(0_*ruwlPmCST_aLNeMUPb*pYHaA%yf@f$=>b>VmP z$nl5&&3{=3lHKyjv()w%2MLrf=E8X3RB zOLUYl^VAqZ#^4Aw4m#9!6Pf>sE)piDuoCwjOvR6(-r6(mD9R9i3B2!QWPMsGdz@W3 z$|4Bi15>BF0dU04nD@K7KXy1I{Z1?`m`Iy5=~6OJA<}VY$VVP8e~$7ES;3ttTfkle zQMEvWp!VKd=p&iXu`^mWj`3-qW{+Dq`61&kbI#B7s%J?m{cJpilRdI>YQ=biIczHp z3TPA|_!-TSvO6lfE5Lq&SMjLGkj8l}<|D~H3?MAzNXLtuwCt3Dn929EYl2%7{{(R> zPU39{f0$kx0bLMY)WeJBRN;bRA~2gLM~N-`!U0rFQ6<3k8Ri;H9!|dSYczc|`a?ZB zuWua>(HGow74GJV8lAaXpE#IBJs?(8hz#(YXppy=km-H3=ovxF&?miu3!`WKT_viS zBtHn_W zk|8rsVA)B1{{h8A>f77xds;J5TJs0Pc9ysB3u_NhmFk%7MxD<8r6i+1hOJ!*{xqmU z@Mxd~VFl^giECqnEpkm8X!XkWbyh@a$fGHH<-0*j0m25mOjSy-91f(Bbkz=(6MiLckSlhn8I8AcLlIrg@t>V{pZ&Y+gRR2{tLo%fHEYiwY|2Kcccdj`5 z*4J9tImaAYjKajsHF!L*q%^m86Kb!N)n%}(lO2s zK!|we-TE2BGka&l$-inMHSS!>Ib%Q6??J7XylV-@daIWPB?<&n^D8?}gj?1>g=LLM zHJYz1J7ZZMp?l4}kz?IQS9uj9Zu~}xb+GK{f zX4+f);P`7~W_p|yy`UY6BTqnnj%=&iCMV?0@>ddP!OH=R_oo>KF$rzjdhHYn5=_6( zRe=882=>3_h2vmjS#mYbMP%LLp(|J z$VuzA4*{MOVpG~kiP`?51VF|fyC*s%4+;L`+&9$*`-`tTf&|)r&`-HzplaAO-J{fc2f|MLx-OY1o0Po>3&1xtpaKC=Eb~~53W}A3lY#8g~Owa&Ul}K9^Nw?orui^;SLjc1J zrzpbO5~n(`ZXF=Nwk?loEK|!044i(D1u^Oj(OSAiIxEiAEqPI}P3jGb;H0NAhpHsx zZvccvwDN5&O=C1z#%^+rF=IMndXa(O0{`73XFvY7%JaB4kY7(Rre2h8 zcH5D;?0cT$#NtCvWT*K~#0ulgjYkkf*BlRXYA10@-NY@$$v`EHE+ZrMMDXh;dCa7> z=gU0H%ZlA8=vvM6$vMwT=ybx0p*ZpQVqY>lTxq6Fy7&1w*qyXmz)opz^75stbf*#z zI_@G=`qRb7uUOlivCSnJn~_KJq!k(-=LxqPs0YQVKrlEni-hdgL9J|z1avh{%pYn2 z5OOdbst(~Rhznvv4qyx`TqK|nSuHcV_O$4jBy()5Jrv5VSkwq>=UHm>oTl8WBhMGM z6T7#5pmCn$`=Gi;tJ%bx8gXgFbY$fmguc@$gqQOLi9ikcvND&%^khkx)whyBMv{9N zyejTJExqfs=4h|PT4g>%YIJ?;gtndYUm7)Wh0$RJt_%du_%&{{)IvShM^*&;E>GBO zR!DVwV82LM8|zFj`ZQW^g!=_*<&}p;C19YPGjl7dj)<)byQV`~ebZk9sD4pZFY&7`2dY0-3%KVR zK+1nD2DXCy5;D|Z9oKUFDds@3n%*|Wkw_)g)}wazC1LQS=GE~HufTix;wScYV+o?P zrL~qtPY3k~pDLMymPGsw>SlS-9Lw)gb<0ni?1P0EL6mt=Bk;UdXiannc&yAS0GnEC zS>+J=JFTIz`WW6ax17!SxXbtK@wX~*4I_?`ly`7{iI%!zmCQxKqp2WqR2g^nwaKur!y|bv`45f2_Q}Q!)y0NCS(QA?Y zBP9}S`8En6vL)ewptb0&vy!`0E*ZI6{DmAd=(Z^UO6N7}6j=`Kqq79<1EgQ>4fwl* zo9$n>QbL^sC8M@qBwv?Y+l)G(29-1Wwn-_`6B{AL)Bp?62x)|&zS--AS2cdF+=0c{ zFF!IND|Qn!RDxL6`?@jqYFCu+!JY5n3kcd}T1%B7yB^|Z#AL3v)Gls4R%RGdcHfhq;>bZ{?5S4+5&)BCyO19HIOqsgc%PBS#yqYNAk4ors&bc6QYAk!g>52+*$Q{%bNL6;H2gn3ynT3zD)FP z=kq`;oeh7_GOPx$v>SSDona1MAO8#~Se5jJ{)PUtj9)_yb8K!59 z9B%H{0Ykk#>*NW_qwk7(_UvTx>yOPeAg;SzkpPK2YaDz~#XK=ou(wiUlj=*O~6$`&163T6h1_*kOh z11=aVj9Qp}xNKtZIjSyGsXLBz9t3bP+|y`X#aSe^Qxmbk=*%G_M`~DrQ8kq0lR|7Y ztz?-s6Tj%u*}7}!p3_LGch~$SWbZ<2y^7=c^zxfAX$vFXC6vI$9l1&_wI3H7eAs!? zWB?cZ5eVw`)2%uwFDn9P_b$*XZ1OkEW?(mD5Os z3{HT>9sH(BQPs^+{mH9v68dy%%S9F+FzTKA=92Wn-WUNoK)uKio+coJtr*Bl0X z^3_^i^;#Zyc>G6PL$R8K4OCm4<67#4EPD^TsbG396G&w4~3Vb;V2Du zkotrsnPDM)49}PT;2O6%UGJa!r;o3c5yt5?wGe00r^R(tM5RptFMWP<@TAt%uU_$5 zj%&l~CFY~@`i#q9A^3Irp~W55Sqjj-wuIY&1yzW@W{=ZptS0EI9Oa2bKIEV(7Q6Kq zk9Dsm+=|V!U42)Hv(n0y%KV7T{js*?QMxH^7T`L5idPq3bZyO+>d@7(!E*zB5NYha zfSFkI{fuz(_C{Oe$f@7;X4?N+DSL14vM?9rrPVoumFnt3h=uCfd3fsq@_MXN zXj}q%S7e;;Dd%#eTC@k#_kN8X!F=WH5TGj{^QJ43>Gt9>8$k>;}dLL_4|>vcy2#4DmN$SYb0 zbK4}g|HGh-I=t`Jq^%LwG<~Ged|ZL2R4LfMj42~!ZP`xu>@Dq9$$ORju|p}+5${Wu z|0w#YjrjJ8T4L#)!6TD(RZBqJ@IY3JZqz8_DGFO-le8MO~r8ATtG>&-XJ zF-5A#rkcFTdWsShGqYG^P4EM*vT`BYy0yxqsqGT?xXp-cZ};gJU@c@csHna$d}-}b(T(7uU6n;jW@!lkUjfIa1K@Aw28cd=79WuV<5g7`F;s1IH-xwU z6^r1klx`rq017gkz!#VszP^0usAxO6r_>IC)-V+~2#`3Q8`A1iJw?lGJ}PNX0;8;M z+};ChhABH5q57*Fz85Lik-xLg3gOLPoC7-l0Ibkj*-{K!q)3$CFC zpWkt3(B!vfJkYqou`quCEDpwtWssqjR6D0>j9_`*hYKP>#D=kVIa8?r2!Q2b!xV@L zT$qkMm0EYalcKEGjzvrp(5Nu}&exm7Qvr8M>3-TxY2%t*Et*R)sBe=XrW;^Nk|Z{+ za}w|Df5`@`G`Vl3Z7;1uk@3G^TPE(c^fsieY};2u3fHxwdf@dv6RR$OCKSl9%ArOL z+!MCh?4mGkifg3o6G;^X`MR~HQP9R9C0DrgP`~OWlk<@cCzD#S}I$^m*d_Dt>0%*0WstdLw;UnXte#)L1 z^6=!!TPRfP{YHjs7&B()8AaR`=DdkpauUPm&%e0m8xuu_W2DG z<2LE)IlHCdbVqI&2X=1{P~0uL-^coY>j0txpv_k)e)%vfa5{?)n%V9}HAw}t74VC2 z0XpCEq!o`-9n>@~V>=qZDg2^@NeMD^md*7?qZcjLD&}5%yX^caC?{@WX#orCI(Yr# zLOgTJuVIje_^g2ldp}ER;24-&Hzb{wB+{q){Il9mMgNfav8SX!p^-9C7@0+P=C6{H zOIIJV@f~;^pUwfqgxFiaa&zE#SuO<)%r-bMMtdh<`D9z4Wa!Z1K|op+Ub2mWsws7HHD;LcB;h3b*HPzk31vlez#%KD9rFyPy6_jVVDqW zc_~A}-B>(rut*9F{wdL2FRs8Rlde7BA}FA#`>+iQEf=w7CCd8RU)^8rEU6`ZNNreS zXoCmP#QK5<55BPNbD!cof-hWC8YC%He+`m9tN_TK?*I%r@bR9gD97%RuEh5N~-qrUz4}m--#zOQ9a+S#% z4}S^J>g1x=PvGWCD9paPy2>`r2rgsR*r#WZsQQg5A2rvk#)y_aK~c{^y*NAZrVG<2 zo;5WT44?v?f*}cpC*Ihjef$BKBRuJim%w|cR_LTGClQddlF`RbuU}YlLfGApO`FQ+ z_Z>EZ7i7SKDO2L!XJS|i=Vt|}V}K`)`(=uO+%~N{Ws_p|qkOsaP^I_+_SYR++^vCE z!7v*Uav>69*CA?QyFylK{ldiSeq&S8d|e|#HD{P(Lo(Id-R=z~(ueqSE|q!wodFp0 zOuPBXYU{l>aivrY#y2A0LAME+Md^!&3RX*tGHD%;ZDls8Y}He-_W)xhV+Qg8nY^8Z z(JFXv&mFQr-_G4M&qWgSw|@?Elv@rNNcs{)TNIsxTu8dC-LEKFDGMR&k-0x7)yr%J zk&9E1aq>m?qL}9gSqH7C3q!^;@GFm(EbGB}d(bmCL^uEKse&$}W1A}C0Zt^=+ zcQ=ZCcHrH2|6qrK>x^-Y-JPBEAMY)8u{ytZw>7h1;kKbIHCTtw>~Z451{$i}S1vA6 zwyVgK;JOUWI|V~7Of*QBQLL*IKu0zL^;hq%OCJDOr@8h;MG`r}J5zdZw}be(M2g>2 z#E>LIa;7I*by>vAW3KA>@$omXeJy{`$$?=Gad)z*-aC`yuPg{`ZM0;n7fiI^dP=#h z^QYRoaq0w4(U#1I;a(@*j^3y`(^23T}Nld0t?2 za8iFn-k~qlnn#j#o$$dOHTnmKn9X7tG5(k9)8C@58vxg2;(?e#M1wvD$PE$fY|JgT zIyXK*H?ZEAi@IB_a6j#IU+4Mnpv}%it`<b4c5 z2DoQ`1FQ(pxU3$*as?d0De)^Gg&Zbx89vO*jbn}@poHJ|cm%G&>V<{?ZjIqeF}rua zV{VP7#(A&0Yqy}0_EcOl=L4soPt?dR&yVX8A7edk7TNc7ewDgjl3Q1^10+R`NNAT$ zmJFYQK4r;i>FY@ZRt^DtB>IxDcGIqE*PPNVL@Q0253%n%PqrGFUOeLixAv{a$I20O z|JllKc`}}-DP)l${@!}65WRhRky%q#Emp|pduUhwo!-&VYylTZm*z~zY(Lvl=XjCS zieEu{X-pt#|2(VS$l9pE$oxxmh~K?s69$$Nri7*B17XTY@} z+J}j4#3&|e5$iZc z(bJEW51vZL%C9#E4n%7-8h&3+AaQ~m<_b1tr!6Qqml$|{8DPwv|IM+zuFBNm^xiTW zY&%v(tF++Pyk>vm|obRARAEtVgmGLyM_;1pm$=R~e{iPOF; z!O7Q$BP}qUDBO|v+ZJg3K{TVu^C|O^(GKRg6Ol7KzZLtemI`y`iwSuRgkkBWhGC>s z;1uM#3Rt#l|r)iW}M1M#`s^Ie1i)K7MT0}xd2 ziP2CPdx{m7VlisXujiHWbsc@trl01j!be}r?(va)Ed2oi(7!N-Am3eU1UPsl2gD(j zM^ls}T-KZ_YkkqJy@PHgR8ca!>p{JX!w(@NKxK>T=DKcJW)fiMsn;Yp)+WvYvqFM; z_0qdg;8gxoLld*y%+K=f^}$lWJmgqD$H2utlqn28&V^b$9UG$60gxOar~@Pabr z>duRLPh9eYWOUJ8NH21$4kT#>28SswEZjN=#056LD+O___kodv03H7p?KdG2%u_%` z$Qr!%lUXJD=N>>+DR=1My)KisM)m9`=AcIv*N~u+AZ!y1jBd*`4~FqzhP!X$IsTyo z_+RMEfV8K>H5(XYhrMqv!>8W1cxPbN&{Umc(yqri7)*`u#9jYgd6 zWu8B3_=)wcFD^z=cPP52-N8Um5Iuv)x=4xxvuAcb^gU$avv0Sa-zoB ziu&w_ri&WvtW}8{+Ezfp1?0gp1)o+~SSV%p^jB@Y5`gN0sK=Z{L;dzL2l1$&i)n+8@kTbZTN~Caeab?dO(&GR=ZrBA&nUI6K|M85+og%{x)QzFcWi zV;`Czv6Y^9tR#CXnl2S`9~*j}$DR7pQv=R}SqAiC=@Z?Fi^g(B{WQfx5T>=dc$YuS zKy8MR!$o3`5T4|?hLbf6r8q7EMhx*Szj4GxCV?g@^SPK_*(f7LnkTAGF8t(C^3*mbCY94-IG@b|+$>ZYC55zi-r6?%LlH1I5TWqgS11K; zo@-^l3!V+o#Xu4s$GDC&g#tH;CKu;r_HVf;C(4z#lN7rH)9ITnwi$pbrkUYM z=&UyD-x%`1w7^L)e2#?drp*I6D-OQy{dHI{M8`KHUU;6Mn}C}cxK39zHt}OkN`m^( z$zPNr04DK4L4&EucO(59)e98|u2$8Tf*DCyr(Q0qKLF2ppto+;9E-IEQvPF(;#$cA z039LKq}&iH8wrh*K?6m8S8XG)5L>@t>r_Qd=n{C!)6e?DrYP0uJo`~8H!^Ni;d&S&hph8Na+Yd;@99ty#1Vg6pffq9{~ ziTzo|$i|6uh6?`?(0|3Mo|h$>w*}k&ZN3AJT^04I~MY@gHp)kKRCjbGkZ z)s&$*v-5D9Q4jFXCSd7EMQ%B)Xuoo zn`?}fK&F;#R0tNiXmDn90D}u4?mLvvIUBrNa}D!D!R^NxLEsS2r&nKX^i%~9R0t#O zA|M)>QzgZ|P!Gcuv6PPEc>j;3 z`V2ieJK3ozm@bTv%nztiHZ$pGU4BQT+1}k>W*DqDS@BO+M+J4+Zp_l;lYI_G$P7d3 zZj3{p|7Ea+F1jBpgVP-4ry2)!>?E^aq*(7*xq%Rkxr6Ii>YVRX~xa$LMh9ddXI=~Ji3VY0^&279Yk0cV&`9k%;Sl7 z`+bxlQ;yB}6p*P-&GAF9VFTQp4;I6^iOtt2&X{Kbexskoa1}4Z_S?YNj}QtFmUf{4%jy^K zFk!M9%R{BjmZU8LP(1tLM_Ro0L#F#p7DoLK>fR|@)@|F;9ky-Twrv}84r>nEwr$(C zZQGc`ww3Gbo#*UT@~oXFbKiTj+7^L+81(B->dh8$ z%`XA^xgdxsxE2rrha-tOsTSkS`Ez+A6$$=9u~Ig^qAbg{tbw&`Wj27W%>TB>%oqH` zG*#R54ml(To1guuH`m(1qhVUd z73F!}aEgn&0sS}DeX7R}9YuAGKRf(|kLfe>bLg%woi3T6$qyIR`Pf73rTskIjV;)l zyHmT)0f|I9OCs5HgR|cnpJr_uT->1PmZ>m$Ut!RUJ02!gXT8+tadf<#kGTx{XG}nDj|ZAcYLwV0kvm@6(B4-MW_Z-z-Q^fpJJjeqC8_l*6Lh z%&n)@RHEZ$a6@T|JK`sm`;I;lbP$g`MOrXu+ftSEyVaOc5L<8`)LakSi3_G?ej-*= z7FFQ>gpy)nHFcx)MUZW2kT*ByP#^f&`-pcX$qM23+IK(^T2-Tan3Ec4xc>Z%rfwm`=G`$Lu;;;$ zLyUoiX~GB{d2H<1DpHR4m2T{tlLn>0j(GQg6G&EF+u`Ce&xxP>sP)C`g0$26*-QS~ zxoE(%pX@6b8L9dUaM}w;mN_cT<>ZHcI}=>b?wJQF2wV`4rHN zDbd0ad@c9Y=j)p*g5K#QE>lX$bL;((q4r3*7-4#3I*mN&UipDG|7{7wSZw;J?M`@O zZ3mn*FYnoah;D(VGUSt(XPJ|F&xGFg#E=Nqp)@}0_QBB5*l)aC)_0MzP&;EJErf`% z7agBHbC19gS-Ac&=t97oI2Zit6J|UEA30KVJ4KH5p@a{P7RgBX;8Wr?a1RmS)M}92 zI5djV1DujuWr!yfo-ofe)pk2fM%24(;6|A7F$}Icn<3+yRSJ72G1lx5`78*UjbjoN~yZzY1(850% zqN$l{z6rP0g((3TP-=&K-6y*9FnvGHY)BBJ37m}(Cn$oLxuv7AJ-wKvzN4{- zv7wET@xSL*nHc{xfec393_CW%Cs2t=udNH~e!4fns)nBvciEmL(+>|L#&RhP&pFil z@cL^ov14`Nszm@{18OVY9gB_P!&f)a@*_3@zj?A>$J$=I*z{3$0vkx{fuJLya^yf2 z#e@g~^~&}ngy8L#I%1BXQ$Cg8w=Q~BOmT85e93Fzf;mkbn2m?|-0M!bF4B>NwUB+_ zz!|a!|8CFKRQN^34`y(#cI?1s`rEMi@Y97?LG;t==6Dymo<9hjID@OfM8yk}xRmp2 zlVE1L)@BK$6X1Kvims17y`TP)xqe}P^?3g0ScSjmds!Kn|NTKRGBI=fk?>_@|Lcfv z@-2?0xTkC{p}Z~8Xo4*5W88Tpincve?^!qxDq+R2eWD~w&d-R=@lCP3RS%LVF~i$4 zX7f4NC3to#u1q6Jo?Wngp*MD4bE5H^<(}DW^(NaKR{9~(cBZ>O{=!{yJrL{r>l|3% zm3bvS3guIrW&-M*=4)0~-n4vcuITri4Tj)NN^@h0d>mqNqI9f|64*==xE5y^^w+w2 zbI+;Gk(nDNy+L27xg;6Rec^WEs@Dcfmrn!tlx7e$#is5StEo!yM~DeF_apvzSx6}B z8STHxnVk<+&B(kF7MSnN2)%6P_LTU+>Cszu^%R-x>A3kvGpoG7sx`DI%;l;hdzDA4SGDB1aRRw#^#880(tS%Bj>pv;;SxJK&ZW; zBhBdbPp+k<`SuOVV&imqOt1a2RmEEvufVzU5m%~$>l;OH?EnYTI4Y2SEEuc7MU0(FaCO&;^j}#%eTwE#`GV=$qwqXIF%*Pwut#%Umx;i;olSlKK zYG({~xDMZ!)ILWk_`UHgk{9C-pd$TJ}tTVYkDw2>MfLDXO z3dz(bZw0Bv2$=%(Lt}9Z0C`Z0j2HNkQA}mOBW=(zM-~BEC)~1ZwXBqKnkR-!h}EIU zUX+8(rmOMrho9+VXf7K^00J2IaM|OTUIup3*0_js zxDJpkWA81}=T5y1-c@E1Qo$3;bXG!Z{>=1r1L;1L({LK3La~o>Gh>du(%bfqV3J4; zEmSyX5|!Gyx%iu9Vh!+vi&9hfvMs%BW}2H5QSI*roC-S)i}yDtEu8WsJHqdn3a>+e zH1y`i&dxtwmRU6 z0rhCwpHbC_C+J`7RvE<%1<CY z^MF2l)ftn#hhmlvY2chh28B@u#IU?$^p~e3IwH!FWEZ{dK*6kkW^U*EtGf9oF2X-T zf&T^z_ye}{e8A|! zsYke4==`v=ops*JU|Z{1u4>NAI*Xv%R7Evp!BwHJ+}Dbt&3L_GG3m!Tt;VVlOXS%t zJ*eAz7|(xXn0kp-5bm_18PR2^dn5ev~c(KbVTDI`Uu*tZoinUAr7DR zlAv-SbMTxI1VSo}wMDe#iFkxEC{*K4bJr3C%mo?&_+U538Nm&cqA*trC-%^@x~h6% z0D6d=fw3Z-VP?Mq(a4s2i#mTfw1Ii#vxC=LuC`^q)KoU-nGRN(|6}q70rkXE+DAm_6A%-P!+DHL=HPx3JGvbTuQG`f zURsJJ`78V{2j`h?*bm!qh3CaK4fq8DK69R&+_8`kYca#mP&<8hq_d-tWpT)TJ#)^R z;!iMC%LE=ar!13M%;4i+sCVyX0XJ}K$``cA3T=Rox?^6XZq@r;ScQ_@?&|$%KsaeI zV;F3t;~5RO8*BG{vzP~BN`TQjmktSCWS=+ZV-U?gu(bRhN%FNMq8$>Kh->a&CN;{D z`&anfuXbs7e!W(mZ+YxBP?N2tyBg3l{89FLVXvNdyx ze|J~>7!#)H(Go9i+cJ3_3#Ah35$Ozl#TMQ6pBmrSo9zlnuBj5Ualj z&74hz_=i9ISi2-k%(m%9I!aR0j>v49RG#LjJ6dgHB57u^P#I+K_Ej;Z2#}iI|I;CE zOZWJ(`VC|echHK|{fO|PU1B*@RgpnaMotrEX}C*2z_aB^n9)|xOfu8EK0=mG4mSik zCO(L0I!CcWvUD}z;gBI2O7juGN5k%RY8(pN1l;ncpTe%=oYfC|7g4AggI+5OI^}GT zXsRUtA{StgfxWNMhFACiLN%Jy#;-ejXZr$;4-|Y$*W0bn=4~z0ujbMs;hQCpkAZpX zrgQgox{)hE*g3F~%HGx^!El=7C^UhH=olbkf@a|U3DY5DbRdBg*d~JMwL%CQ;LAQ^ zWefurv!<@w^FEp4apl`=Vv-E0(w-;lzRIH=)i7REaKB!%@P{IM9$hLv;z$^1bTs_H z@2{KQeErw140XbW>$zL`j(t4X3M%YAC`qj6+J(Vf5RAC0 zx%fo$*iiiP<$b(zGp{}0TA>=8-bjpUcPCKv`{#L33Vxv&A9eqwBtqjiskR!6L-sB^ z(LPnrsooNJCt4`_?>$StKeTc;?iGOHD9T6MTL3%xh>a>h0~70N(cn8}7+Ob&c=hc$ zp#6BUG<7h2q2r2qWj-d@{qDKTVv)qE6whRuuBt3gS89Y!@RXixPAwC^ZwPE{zn3i~ zAk`|2qLu{ywyNp9tCsU%^QvvTsoj3(YXN8fQKLv>771oA7)vH3#O*@NwRPBlXlYhw z7S3*1nl0u{l6xH6Np{(%$Ui+gN`BMr)FQEZk zJgLQ_z+?q3@2m^|!!F^Ud3LkkvakWE>_eTYLufWXl7}8ILW;jZ^K)%6gJ-Mmg^)9| zR&v$*d?CSSk_z3eu=4b+9WT>c+oE6?$1d(A6=7>BzvyZat{rO5%8{E+ZjQ0@SY8;% zcx3U#cZ^2oDKnc<4K@>epzSqlKqC$1;#)N9u^kdWE8F0+?&CbQZ4rC{wqEidEjXZ% z2E5btJL4Lup9jjVHR( zk@u;|VEfvZs;uxP(uTQ>6G2idcN>m9BNs|VA~G|G z4h*Bn;J7Y#IxZ2!z0X0hD+^b6|0JTYywRn1AEnr!EX*D*S)wVF(S}nyj;9Qqc|g0- z!)%v%oDYM5BEm#fx=yCX`NRic&CI3=L6^+0*6NxeUrj}~1Zp%--_=vQJik2y=uk6x znQJ8USuDm03@~DafP0OFH;O0Q&t4%dv(lVRwA>RjC0+ygIJJj+8GIm-{~6;5r*}+- z{II#S5dIhui^A1h1;rb~`BxpnpIAHpo)+c!A835c|NZ^{)eXbn7V%$(MHx9*{)7qu zol9#z0Qsa(?*ut|Xf7g{l28eSC={5(C{`Sy4;|x&#)mJmc>(6>rjb3j%V5VjPO#|F zY?BS04O|;%4X0=fI%U`ikrzMC3nCF)YPIWpFrEiR2n{;d+)#_Hwk|siAsScKDIsc( zINz&hlcd@)bpMbU8CvT1piH!LanS7T(ThTX3&;y^ZFPTk&x%9xU&U=HMn3KbTHXxY zUJMei!6bn>-tI3wy43sT=s_sOnX$_eZfXbjR(KaG^Hx!D4JO*YJFqTgvC`>rFLXvp zGp*=LgzNChJZB$$>ehNBAefCnd)s~G|fz0AfTyN*X`q1I-szt^Tk&q_#(n?~$`hZ6U8QKEac zvxE$70{O^8KbY3g9O}1gdPw8Ln;N@_W6Z3(4D<7_lV3dU9MWtia{W7mrPzIT>W79< zcT~H@@gPWzz-^hRwf^~deT(Lk1_*0&9U=zTK;S48>H)^Ku#0b-mEUppAZ8tg()jYp zMLxftsW37yH1EX+jGG>k2J=$l>gT4B>s{w-C(PkxlHw-!)4j(a0G@`0kCU91yUmyk z|6)cw;B%#j8cKcDyHQtIgr7K2OZ@}x_W3}C)=VXOZcHyXUq%6q`Z%_&lag1PZS0P|1;;zP8pJQ5-O$}Hu(((;ODkpHv3ByCJ`b@ zw4*wuZxzjBj~)ij_Dl}rjgT-nS(%Pk{|b|gR5MEIei%+(OA$(&c8xhGsQF zkk!BgLkhRgP2@?W9>5GU&d4uRWs0kC8_1BDzkpHpmj(s&i2B^#C_O8*g~*ccrXO|> zYseT%R#%F~{ofR57^nqD)!j{sj*m$6>+j9fSu{MJI&wMXh!i>A9!TgAH;c}0`5UeV zIyKhf-WcQUvE9>b9IrKB9(;b#1#$+*$+}a#8H%;dPxj2d5amiZTi+N@Mx5snS?&)6k4md>Fuc_Tx$0W2`3Ci{@^nmq4RW8}FUyZO(d zlY`Fk7>9I;FgQHjNlbek(iLbeh5DX9NVr^16s0}Nz*LvK3=bS7(=w%fxcmaH>!148 zT|MX=dIvYzVHcK$R0Jb;m;rVVpL8?B>-}kgmXP3Wmry$vl9@_^v3>MWq(h*(;Ba$l z`x{0o6q)2ssbUPw(~HYLg-n&k5;bk;jm_%(Mt@7|N|tZKvuxX;~zX$-fJZQ`8NEETlBpk*w`@;sB;G z`-3_8c{N$_WO`k%@x7>dgS1EuA$MakgM$cGn*LTiIHeS8AR;m4l(}?H2KZqgmwdf> z?j8H1*=D0&yaH$6z?wA^YFlcn?=GvTWI2}c(L&821VMK8I_%gVsSe`+)@BdyYHt)s zKo<%Q_o7?MW=mfp5dBhfOski5u-4n)t`%8x1%4(a$oV}&TM}=T+6QQ(B5TW-6sn47 zGpBJG@K;f&P3FTGH@E&-?@VHe9%AC4N6#~40Qs*uPd~$W4^;+o)s#U>o9E=&8&9CGjZ|_OhX4n_;(do+; z)a&~xi4pAn{1D_dPi<-yuw9}irHBPi2xUxL%$8~HSVrn&XA?FkTz2W)?NjB@vE@fR z?9^XRqg5Yz__#GI`JI(<2Ac$*=?pFiNJ=FYj z<3GfggH?+g484jqd?eF4jlpKf2i3}>JzuuV{Cp&*<8A$Zi?kn7Q&!wH@E+x*8d1n> zKig~TXkYWDuX8ah6=*ffdR#;`*A(Nu;&5kSQEq2{KPRB%r#dx-(fJLnA0QEq&ApLr ze#}mC66T|Zl;A|?6NA{s@An&mt`a%VqfQgge>AAi+%@j&Gc1Z$L$8r#tZP+r;|tN`EKiY$??Ghe7x0{%uX*8qrb%&5)v#AI}& z+X*TO?iHKm6?0-dZNwnQn0a-~Vh31>2t#1mI}$a~ZaFTawo+QR`iVIa0eZ1nIw{_c z2jQ9#J<0Ifas<~xgTLk_V!u4A8>SBzHa@E%I1 zI>lFOz&*Gnc$HVLMPof~#Py>2%FFXPD~WFer@q+_^rShz#JQn)Kv7ehL9_#Tckona zCPX;^E16;ZkOL(khtTChsp%cs*)eX#~CLkaR>Y?h)ueM)+Y!ntv&;NLIE7LD~n7qf8oxzjX_*$ z!~G479iLJfvZ~_Cn0@}SCPs0A1@T!V$s>2yM77)H9+Z=}?E2mC`3)Qm}QX9qW4>F~%8F%?pZ4|V^ zN})XN3s4;KDZaD_v~?%r(sT3_^sFfPcNm z;B1Q*v_XpFwij9vMUjKqPyiHu_`90AqMp(?k(?eG$I`UcuPk|qLP{No(^)-9I7M(H zdlf?AzWOTLav!Ijv4d6XBEU}{7!ZX_>sp^+WPX=COXfu>TvGTbyR@T$$|mvkXw~=UA@y*jRtW(> z*^$hGaLIH)7zX7eLAu6pmOi+<%X}DXK#Z9G?auUH)3N_^`TYM3ZpZX5OWc23 z-+x_YIa&X7Vr}C7u+$B4tO=*}L@CigX8e>%uVZ|0cPI02ar0yyJ`4HN8CMNwfVvb+t3%ZoV$cJ7R$5va`0=zJD34Rt51tzU#<}?I zXJm~>bvNkI02PJACz)vU3$^s?AM<>Byq|h>!`X~iSR*ccbZNS24h`f%4s)ElLZ)2n zgKT}PS)5$y~zDJ!%4RRivDBZ2f8F( zClt}Rvw{UgjTaK&Bp8TN7{!*uIu)qpsHewkzp~eHPRy(Ph+|7M)WUwy*!n~nxdMv{zdtw_005y_m$4G_}3At#5Iv9@8 zO&PhHTZ^HIQGRgVX_>BPRBSGe(2f-L8g~aE;eR#_O;Yyle+mcDMGV1g;gjct4HlQ@bAZOt>@E=Rnu9pNp|@Q^LM zW*nwi>~+y~1mva8K*S`9Hl*L6xT$OzIV-=8WU)GiN54Vbu;c2a?mC1!REyExUGZ); zn=BoUjB!9&iBL5az0X;;Q|)|yCU=wfx#`Ims~W;0{-$Lds$i=v;4 zy>KeSvqUjgEq*nEnx1#5IvTvOkWdW(RQ8Y=s0@{HCKJE5uv3o0&u zXWX-*UV4o4arl%z`UFuw|_J%u_dsX0k8yr zqs49FWd@osSgfxwPEgv6f^+z_#cb}y_@!P0_GW?0C}zlrAXJ79NO~hvbl?`(GL04u zvet;VKaKEdOnlC7oL)wiKvj13+8&!8ziU;ls?W>u|GdJQoUgSXUjgfwp%jFx4NuCW zi9G2y^e{3St*1`EU?T9B8N)``zTk6R;??&7%>awDnRNn`mU4cV$LH zEqcS{wz9ot_r7`^sJ+N*=>TiUb`(j;+JJAPojb;!MSx3i0j>C9VJ3D6;UwG-G%Hbm z(OB#5K@rA9(4s8xC<~V_-z#V(JoelAC(d|++)>!CGExq|RTV0c6j5ZxnEvMYbYDa& zj7OxkfutWTK_bl4$013&W>8d@@rD)?(G1XvCd{4X_dWaJM8~Qkx&5^)gD3?AR#{Z` zfcnB17E|m8#^e2V4qwKcQ?T|H{rdO*qocIi;qcVRiy|B}x_rzgpiq(R3{(eoePSM% z@OSTB<{^1;+X^7_fcg!~e$$16;I3nmENjon{kjzZ&C$j_lA87R>S_|3Ta`RpR4&QT z41{%aZZ@e8F;qCBs7SP(3e*{c4fOzHylKkVGArMl8_W@83+bE{v4jOvL^fD$_BloX z=X`ehb0%=`2JzA>LzH115}q~LI4!Ve@6GFU!AFK+`hD8)N0xmy58`VN_%pC^KtpXbf8U$%z)fF~ z`hWNKsJrS1mHAm_cgt|~C<3b@9r8BzLA~r`WQdv0g{(dBz?`v{Ly$*9Ru!!b%6Dh# zX@p~-(QkLMl<7Q+Kr!k}{m9y%spLRcaWSMO--SQn0HG9WTTY4}XX9n#`hM-8q371S z?uo5=SC1Nv@E0U`mAxY6 zjRK`o0G;&Q%^i*s!@bwc3VJKbS2yY2*^duG=Q@z-g68F(8-;uOsh(`VYY&s9xrOY$ z$QdOW5LpwhXz%Svem=@-&URCN5mG3Kgr1sV#{O!gxej?HixPz=oXWW6gT3VAhuwa+ zf4zA(8Y;!`W&Og`QJoXY5T^WAFTf5l!AU1ZisS@??=DSL_r?k5v4s!4gkl+8xF~5) zLV`)B?ohR&9?0JE8ZGF0GaNBBymcJ!B^?^BwEySFoi`|*zyR?Jt818pwJb_UIsLS zMdHP>%ETuwf#zwA%5AUuv1;k(EK%s^{?)tl2P80rEJCiXJ0(R5m{dj23x8|mUv)hH zD;B3ek1$~P=jY?($9>q$Son>cz8V6}Yho(Q#(Qm)#EOqQXzW_Een3P6`4_FS;PKBz~JetAYKh6grlZ(hWdrmi&!|8aCQ^Ic?)Lh#W z2H18^;!>zM4{SP*HYuHdwfw(wDlq@+PKEzFI=ufi69WUspU6-Et^j6oIYTJ7^^k7p zb4mw{1+?9=YoQ9O*qmLCC7)i>BN%t#H134eZ|~M}#~|)FO|~j6eo&M^c9?8)*IA2g z*XS~C%pgKib6M7}sdH8WQI&i*DxfnM+a0QPPUDg^gS>!aLHGVLQG!r&z^#~}*{Kq9 z;Gi_>2rOEdnLh@glI=z-4X^l)Y022@=}x4V0&}_jCW$)^+%5M|_}*~w3-s%$ldv1F;j2Z0hD#t^S&;Jv<}mZWr^>jmGL%^m

vk0%IFa5Xt~ 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≷CjcfsrnZ0!1%&XM}xOeBG$Zeg=)&O;F3K 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 Date: Thu, 23 Jul 2026 18:41:10 +0200 Subject: [PATCH 4/8] add doxygen --- include/cuc.h | 186 ++++++++++++++++++++++++++++++++++++++------------ src/cuc.c | 50 +++++++++++--- 2 files changed, 183 insertions(+), 53 deletions(-) diff --git a/include/cuc.h b/include/cuc.h index 2fa459b..13e5cbc 100644 --- a/include/cuc.h +++ b/include/cuc.h @@ -34,57 +34,71 @@ extern "C" * more in octet 2 (CCSDS 301.0-B-4, 3.2.2). * ---------------------------------------------------------------------- */ +/** @brief Minimum number of basic-time (seconds) octets (CCSDS 301.0-B-4 §3.2.2). */ #define CUC_BASIC_OCTETS_MIN 1 -#define CUC_BASIC_OCTETS_MAX 7 /* 4 (P-field octet 1) + 3 (P-field octet 2) */ + +/** @brief Maximum number of basic-time octets: 4 (P-field octet 1) + 3 (P-field octet 2). */ +#define CUC_BASIC_OCTETS_MAX 7 + +/** @brief Minimum number of fractional-time octets (CCSDS 301.0-B-4 §3.2.2). */ #define CUC_FRACTION_OCTETS_MIN 0 -#define CUC_FRACTION_OCTETS_MAX 10 /* 3 (P-field octet 1) + 7 (P-field octet 2) */ +/** @brief Maximum number of fractional-time octets: 3 (P-field octet 1) + 7 (P-field octet 2). */ +#define CUC_FRACTION_OCTETS_MAX 10 + +/** @brief Maximum number of P-field (preamble) octets. */ #define CUC_PFIELD_OCTETS_MAX 2 -#define CUC_TFIELD_OCTETS_MAX (CUC_BASIC_OCTETS_MAX + CUC_FRACTION_OCTETS_MAX) /* 17 */ -#define CUC_OCTETS_MAX (CUC_PFIELD_OCTETS_MAX + CUC_TFIELD_OCTETS_MAX) /* 19 */ + +/** @brief Maximum number of T-field octets: basic + fractional (17). */ +#define CUC_TFIELD_OCTETS_MAX (CUC_BASIC_OCTETS_MAX + CUC_FRACTION_OCTETS_MAX) + +/** @brief Maximum octets of a self-identified code: P-field + T-field (19). */ +#define CUC_OCTETS_MAX (CUC_PFIELD_OCTETS_MAX + CUC_TFIELD_OCTETS_MAX) /* ------------------------------------------------------------------------- * Types * ---------------------------------------------------------------------- */ /** - * Result codes returned by the CUC functions. + * @brief Result codes returned by the CUC functions. */ typedef enum { - CUC_OK = 0, /* success */ - CUC_ERR_NULL, /* a required pointer argument was NULL */ - CUC_ERR_BUFFER, /* the supplied buffer was too small */ - CUC_ERR_FORMAT, /* the format has out-of-range octet counts */ - CUC_ERR_PFIELD_ID, /* the P-field time code identification is not a CUC id */ - CUC_ERR_UNSUPPORTED, /* the P-field requests more octets than this library supports */ + CUC_OK = 0, /**< Success. */ + CUC_ERR_NULL, /**< A required pointer argument was NULL. */ + CUC_ERR_BUFFER, /**< The supplied buffer was too small. */ + CUC_ERR_FORMAT, /**< The format has out-of-range octet counts. */ + CUC_ERR_PFIELD_ID, /**< The P-field time code identification is not a CUC id. */ + CUC_ERR_UNSUPPORTED, /**< The P-field requests more octets than this library supports. */ } cuc_status_t; /** - * Epoch / time-code-identification of a CUC code. + * @brief Epoch / time code identification of a CUC code (CCSDS 301.0-B-4 §3.2.2). * * The enumerator values equal the P-field time code identification field * (bits 1-3) so they map directly onto the encoded octet. */ typedef enum { - CUC_EPOCH_CCSDS = 1, /* 1958 January 1 (TAI), Level 1 time code (id = 001) */ - CUC_EPOCH_AGENCY = 2, /* Agency-defined epoch, Level 2 time code (id = 010) */ + CUC_EPOCH_CCSDS = 1, /**< 1958 January 1 (TAI), Level 1 time code (id = 001). */ + CUC_EPOCH_AGENCY = 2, /**< Agency-defined epoch, Level 2 time code (id = 010). */ } cuc_epoch_t; /** - * Structure of a CUC time code: how many octets encode the integer seconds - * and how many encode the binary fraction, plus which epoch is in use. + * @brief Structure of a CUC time code as described by its P-field (CCSDS 301.0-B-4 §3.2.2). + * + * Captures how many octets encode the integer seconds and how many encode the + * binary fraction, plus which epoch is in use. */ typedef struct { - cuc_epoch_t epoch; /* epoch / time code identification */ - uint8_t basic_octets; /* octets of basic time unit (seconds), 1..7 */ - uint8_t fraction_octets; /* octets of fractional time unit, 0..10 */ + cuc_epoch_t epoch; /**< Epoch / time code identification. */ + uint8_t basic_octets; /**< Octets of basic time unit (seconds), 1..7. */ + uint8_t fraction_octets; /**< Octets of fractional time unit, 0..10. */ } cuc_format_t; /** - * A decoded CUC time value, independent of the encoded format. + * @brief A decoded CUC time value, independent of the encoded format. * * The fraction is stored as an unsigned Q0.64 binary fraction of a second, * i.e. the fractional part in seconds equals fraction / 2^64. This keeps the @@ -95,8 +109,8 @@ typedef struct */ typedef struct { - uint64_t seconds; /* integer basic time units (seconds) since the epoch */ - uint64_t fraction; /* binary fraction of a second, Q0.64 */ + uint64_t seconds; /**< Integer basic time units (seconds) since the epoch. */ + uint64_t fraction; /**< Binary fraction of a second, Q0.64. */ } cuc_time_t; /* ------------------------------------------------------------------------- @@ -104,23 +118,52 @@ typedef struct * ---------------------------------------------------------------------- */ /** - * Validate that a format has octet counts within the ranges the standard - * allows. Returns CUC_OK when valid, CUC_ERR_FORMAT otherwise. + * @brief Validate that a format has octet counts within the ranges the standard allows. + * + * @param[in] fmt Format to validate. + * + * @return #CUC_OK when valid; #CUC_ERR_NULL if @p fmt is NULL; #CUC_ERR_FORMAT if the + * epoch or octet counts are out of range. */ cuc_status_t cuc_format_validate(const cuc_format_t *fmt); -/** Number of P-field octets a format needs (1 or 2). */ +/** + * @brief Number of P-field octets a format needs (1 or 2). + * + * @param[in] fmt Format to size. + * + * @return 1 or 2 on success, or 0 if @p fmt is NULL. + */ size_t cuc_pfield_size(const cuc_format_t *fmt); -/** Number of T-field octets a format needs (basic + fractional). */ +/** + * @brief Number of T-field octets a format needs (basic + fractional). + * + * @param[in] fmt Format to size. + * + * @return T-field length in octets, or 0 if @p fmt is NULL. + */ size_t cuc_tfield_size(const cuc_format_t *fmt); -/** Total octets of a self-identified code (P-field + T-field). */ +/** + * @brief Total octets of a self-identified code (P-field + T-field). + * + * @param[in] fmt Format to size. + * + * @return Total length in octets, or 0 if @p fmt is NULL. + */ size_t cuc_size(const cuc_format_t *fmt); /** - * Encode the P-field (preamble) describing @p fmt into @p buf. - * @p written receives the number of octets produced (1 or 2). + * @brief Encode the P-field (preamble) describing a format. + * + * @param[in] fmt Format to describe. + * @param[out] buf Output buffer. + * @param[in] buf_len Buffer capacity in octets. + * @param[out] written Receives the number of octets produced (1 or 2). + * + * @return #CUC_OK on success; #CUC_ERR_NULL if @p buf or @p written is NULL; + * #CUC_ERR_FORMAT for an invalid format; #CUC_ERR_BUFFER if @p buf_len is too small. */ cuc_status_t cuc_pfield_encode(const cuc_format_t *fmt, uint8_t *buf, @@ -128,8 +171,16 @@ cuc_status_t cuc_pfield_encode(const cuc_format_t *fmt, size_t *written); /** - * Decode a P-field from @p buf into @p fmt. - * @p consumed receives the number of octets read (1 or 2). + * @brief Decode a P-field into a format. + * + * @param[in] buf Input buffer positioned at the P-field. + * @param[in] buf_len Number of octets available in @p buf. + * @param[out] fmt Receives the decoded format. + * @param[out] consumed Receives the number of octets read (1 or 2). + * + * @return #CUC_OK on success; #CUC_ERR_NULL if any pointer is NULL; #CUC_ERR_BUFFER if + * @p buf_len is too small; #CUC_ERR_PFIELD_ID if the identification is not a CUC id; + * #CUC_ERR_UNSUPPORTED if the P-field requests a third octet. */ cuc_status_t cuc_pfield_decode(const uint8_t *buf, size_t buf_len, @@ -137,9 +188,18 @@ cuc_status_t cuc_pfield_decode(const uint8_t *buf, size_t *consumed); /** - * Encode only the T-field (time data) for @p time using @p fmt into @p buf. + * @brief Encode only the T-field (time data) for a value using a given format. + * * Use this when the P-field is conveyed implicitly (external metadata). - * @p written receives the number of octets produced. + * + * @param[in] time Time value to encode. + * @param[in] fmt Format describing the octet layout. + * @param[out] buf Output buffer. + * @param[in] buf_len Buffer capacity in octets. + * @param[out] written Receives the number of octets produced. + * + * @return #CUC_OK on success; #CUC_ERR_NULL if @p time, @p buf or @p written is NULL; + * #CUC_ERR_FORMAT for an invalid format; #CUC_ERR_BUFFER if @p buf_len is too small. */ cuc_status_t cuc_tfield_encode(const cuc_time_t *time, const cuc_format_t *fmt, @@ -148,8 +208,16 @@ cuc_status_t cuc_tfield_encode(const cuc_time_t *time, size_t *written); /** - * Decode only the T-field from @p buf using the caller-supplied @p fmt. - * @p consumed receives the number of octets read. + * @brief Decode only the T-field using a caller-supplied format. + * + * @param[in] buf Input buffer positioned at the T-field. + * @param[in] buf_len Number of octets available in @p buf. + * @param[in] fmt Format describing the octet layout. + * @param[out] time Receives the decoded time value. + * @param[out] consumed Receives the number of octets read. + * + * @return #CUC_OK on success; #CUC_ERR_NULL if @p buf, @p time or @p consumed is NULL; + * #CUC_ERR_FORMAT for an invalid format; #CUC_ERR_BUFFER if @p buf_len is too small. */ cuc_status_t cuc_tfield_decode(const uint8_t *buf, size_t buf_len, @@ -158,8 +226,16 @@ cuc_status_t cuc_tfield_decode(const uint8_t *buf, size_t *consumed); /** - * Encode a self-identified CUC code: P-field followed by T-field. - * @p written receives the total number of octets produced. + * @brief Encode a self-identified CUC code: P-field followed by T-field. + * + * @param[in] time Time value to encode. + * @param[in] fmt Format to encode. + * @param[out] buf Output buffer. + * @param[in] buf_len Buffer capacity in octets. + * @param[out] written Receives the total number of octets produced. + * + * @return #CUC_OK on success; #CUC_ERR_NULL if @p written or another required pointer is NULL; + * #CUC_ERR_FORMAT for an invalid format; #CUC_ERR_BUFFER if @p buf_len is too small. */ cuc_status_t cuc_encode(const cuc_time_t *time, const cuc_format_t *fmt, @@ -168,9 +244,17 @@ cuc_status_t cuc_encode(const cuc_time_t *time, size_t *written); /** - * Decode a self-identified CUC code: parse the P-field, then the T-field. - * The recovered structure is written to @p fmt and the value to @p time. - * @p consumed receives the total number of octets read. + * @brief Decode a self-identified CUC code: parse the P-field, then the T-field. + * + * @param[in] buf Input buffer positioned at the P-field. + * @param[in] buf_len Number of octets available in @p buf. + * @param[out] fmt Receives the recovered format. + * @param[out] time Receives the decoded time value. + * @param[out] consumed Receives the total number of octets read. + * + * @return #CUC_OK on success; #CUC_ERR_NULL if @p consumed or another required pointer is NULL; + * #CUC_ERR_BUFFER if @p buf_len is too small; #CUC_ERR_PFIELD_ID or + * #CUC_ERR_UNSUPPORTED on an invalid P-field. */ cuc_status_t cuc_decode(const uint8_t *buf, size_t buf_len, @@ -180,11 +264,27 @@ cuc_status_t cuc_decode(const uint8_t *buf, #ifndef CUC_NO_FLOAT /** - * Convenience conversions between a CUC time and seconds as a double. - * Compile with -DCUC_NO_FLOAT to omit these on targets without an FPU; - * the core codec above does not use floating point. + * @brief Convert a CUC time to seconds as a double. + * + * @note Compile with -DCUC_NO_FLOAT to omit this on targets without an FPU; + * the core codec does not use floating point. + * + * @param[in] time Time value to convert. + * + * @return Seconds since the epoch as a double, or 0.0 if @p time is NULL. */ double cuc_time_to_seconds(const cuc_time_t *time); + +/** + * @brief Convert seconds as a double to a CUC time. + * + * @note Compile with -DCUC_NO_FLOAT to omit this on targets without an FPU; + * the core codec does not use floating point. + * + * @param[in] seconds Seconds since the epoch; negative values yield a zero time. + * + * @return The equivalent CUC time value. + */ cuc_time_t cuc_time_from_seconds(double seconds); #endif diff --git a/src/cuc.c b/src/cuc.c index bb3b42a..a1f07af 100644 --- a/src/cuc.c +++ b/src/cuc.c @@ -12,25 +12,48 @@ #include "cuc.h" /* Bit-0-is-MSB masks for P-field octet 1 (CCSDS 301.0-B-4, 3.2.2). */ -#define CUC_P1_EXTENSION 0x80u /* bit 0 */ -#define CUC_P1_ID_SHIFT 4 /* bits 1-3 */ +/** @brief P-field octet 1 extension flag (bit 0): another P-field octet follows. */ +#define CUC_P1_EXTENSION 0x80u + +/** @brief Left shift of the P-field octet 1 time code identification field (bits 1-3). */ +#define CUC_P1_ID_SHIFT 4 + +/** @brief Mask for the 3-bit time code identification field. */ #define CUC_P1_ID_MASK 0x07u -#define CUC_P1_BASIC_SHIFT 2 /* bits 4-5: (basic octets - 1) */ + +/** @brief Left shift of the P-field octet 1 basic-octet count (bits 4-5), holding (count - 1). */ +#define CUC_P1_BASIC_SHIFT 2 + +/** @brief Mask for the 2-bit basic-octet count field in P-field octet 1. */ #define CUC_P1_BASIC_MASK 0x03u -#define CUC_P1_FRAC_MASK 0x03u /* bits 6-7: fractional octets */ + +/** @brief Mask for the 2-bit fractional-octet count field in P-field octet 1 (bits 6-7). */ +#define CUC_P1_FRAC_MASK 0x03u /* Masks for P-field octet 2. */ -#define CUC_P2_EXTENSION 0x80u /* bit 0 */ -#define CUC_P2_ADD_BASIC_SHIFT 5 /* bits 1-2 */ +/** @brief P-field octet 2 extension flag (bit 0): a third P-field octet would follow. */ +#define CUC_P2_EXTENSION 0x80u + +/** @brief Left shift of the additional basic-octet count in P-field octet 2 (bits 1-2). */ +#define CUC_P2_ADD_BASIC_SHIFT 5 + +/** @brief Mask for the 2-bit additional basic-octet count field in P-field octet 2. */ #define CUC_P2_ADD_BASIC_MASK 0x03u -#define CUC_P2_ADD_FRAC_SHIFT 2 /* bits 3-5 */ + +/** @brief Left shift of the additional fractional-octet count in P-field octet 2 (bits 3-5). */ +#define CUC_P2_ADD_FRAC_SHIFT 2 + +/** @brief Mask for the 3-bit additional fractional-octet count field in P-field octet 2. */ #define CUC_P2_ADD_FRAC_MASK 0x07u -/* Octet 1 alone can describe at most 4 basic and 3 fractional octets. */ +/** @brief Maximum basic-time octets encodable in P-field octet 1 alone. */ #define CUC_P1_BASIC_MAX 4 + +/** @brief Maximum fractional-time octets encodable in P-field octet 1 alone. */ #define CUC_P1_FRAC_MAX 3 -/* Fractional resolution beyond 8 octets falls below the Q0.64 representation. */ +/** @brief Fractional octets stored in the Q0.64 representation; deeper octets fall below 2^-64 s. + */ #define CUC_FRACTION_STORED_OCTETS 8 cuc_status_t cuc_format_validate(const cuc_format_t *fmt) @@ -54,6 +77,13 @@ cuc_status_t cuc_format_validate(const cuc_format_t *fmt) return CUC_OK; } +/** + * @brief Test whether a format needs a second P-field octet. + * + * @param[in] fmt Format to inspect (assumed non-NULL and valid). + * + * @return true if the basic or fractional octet count exceeds what P-field octet 1 can hold. + */ static bool cuc_format_is_extended(const cuc_format_t *fmt) { return fmt->basic_octets > CUC_P1_BASIC_MAX || fmt->fraction_octets > CUC_P1_FRAC_MAX; @@ -316,7 +346,7 @@ cuc_status_t cuc_decode(const uint8_t *buf, #ifndef CUC_NO_FLOAT -/* 2^64 as a double, for converting the Q0.64 fraction to/from seconds. */ +/** @brief 2^64 as a double, for converting the Q0.64 fraction to/from seconds. */ # define CUC_TWO_POW_64 18446744073709551616.0 double cuc_time_to_seconds(const cuc_time_t *time) From f4067aaa2540a6735d4b705423d44221165839ef Mon Sep 17 00:00:00 2001 From: Michal Pogorzelec Date: Thu, 23 Jul 2026 18:54:52 +0200 Subject: [PATCH 5/8] update if statements --- src/cuc.c | 30 +++++++++++++++--------------- tests/test_cuc.c | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/cuc.c b/src/cuc.c index a1f07af..b31cd7f 100644 --- a/src/cuc.c +++ b/src/cuc.c @@ -58,15 +58,15 @@ cuc_status_t cuc_format_validate(const cuc_format_t *fmt) { - if (fmt == NULL) + if (!fmt) { return CUC_ERR_NULL; } - if (fmt->epoch != CUC_EPOCH_CCSDS && fmt->epoch != CUC_EPOCH_AGENCY) + if ((fmt->epoch != CUC_EPOCH_CCSDS) && (fmt->epoch != CUC_EPOCH_AGENCY)) { return CUC_ERR_FORMAT; } - if (fmt->basic_octets < CUC_BASIC_OCTETS_MIN || fmt->basic_octets > CUC_BASIC_OCTETS_MAX) + if ((fmt->basic_octets < CUC_BASIC_OCTETS_MIN) || (fmt->basic_octets > CUC_BASIC_OCTETS_MAX)) { return CUC_ERR_FORMAT; } @@ -86,12 +86,12 @@ cuc_status_t cuc_format_validate(const cuc_format_t *fmt) */ static bool cuc_format_is_extended(const cuc_format_t *fmt) { - return fmt->basic_octets > CUC_P1_BASIC_MAX || fmt->fraction_octets > CUC_P1_FRAC_MAX; + return (fmt->basic_octets > CUC_P1_BASIC_MAX) || (fmt->fraction_octets > CUC_P1_FRAC_MAX); } size_t cuc_pfield_size(const cuc_format_t *fmt) { - if (fmt == NULL) + if (!fmt) { return 0; } @@ -100,7 +100,7 @@ size_t cuc_pfield_size(const cuc_format_t *fmt) size_t cuc_tfield_size(const cuc_format_t *fmt) { - if (fmt == NULL) + if (!fmt) { return 0; } @@ -122,7 +122,7 @@ cuc_status_t cuc_pfield_encode(const cuc_format_t *fmt, { return status; } - if (buf == NULL || written == NULL) + if ((!buf) || (!written)) { return CUC_ERR_NULL; } @@ -159,7 +159,7 @@ cuc_status_t cuc_pfield_decode(const uint8_t *buf, cuc_format_t *fmt, size_t *consumed) { - if (buf == NULL || fmt == NULL || consumed == NULL) + if ((!buf) || (!fmt) || (!consumed)) { return CUC_ERR_NULL; } @@ -170,7 +170,7 @@ cuc_status_t cuc_pfield_decode(const uint8_t *buf, uint8_t oct1 = buf[0]; uint8_t id = (oct1 >> CUC_P1_ID_SHIFT) & CUC_P1_ID_MASK; - if (id != CUC_EPOCH_CCSDS && id != CUC_EPOCH_AGENCY) + if ((id != CUC_EPOCH_CCSDS) && (id != CUC_EPOCH_AGENCY)) { return CUC_ERR_PFIELD_ID; } @@ -212,7 +212,7 @@ cuc_status_t cuc_tfield_encode(const cuc_time_t *time, { return status; } - if (time == NULL || buf == NULL || written == NULL) + if ((!time) || (!buf) || (!written)) { return CUC_ERR_NULL; } @@ -257,7 +257,7 @@ cuc_status_t cuc_tfield_decode(const uint8_t *buf, { return status; } - if (buf == NULL || time == NULL || consumed == NULL) + if ((!buf) || (!time) || (!consumed)) { return CUC_ERR_NULL; } @@ -275,7 +275,7 @@ cuc_status_t cuc_tfield_decode(const uint8_t *buf, } uint64_t fraction = 0; - for (uint8_t j = 0; j < fmt->fraction_octets && j < CUC_FRACTION_STORED_OCTETS; j++) + for (uint8_t j = 0; (j < fmt->fraction_octets) && (j < CUC_FRACTION_STORED_OCTETS); j++) { fraction |= (uint64_t)buf[fmt->basic_octets + j] << (56u - (unsigned)j * 8u); } @@ -292,7 +292,7 @@ cuc_status_t cuc_encode(const cuc_time_t *time, size_t buf_len, size_t *written) { - if (written == NULL) + if (!written) { return CUC_ERR_NULL; } @@ -321,7 +321,7 @@ cuc_status_t cuc_decode(const uint8_t *buf, cuc_time_t *time, size_t *consumed) { - if (consumed == NULL) + if (!consumed) { return CUC_ERR_NULL; } @@ -351,7 +351,7 @@ cuc_status_t cuc_decode(const uint8_t *buf, double cuc_time_to_seconds(const cuc_time_t *time) { - if (time == NULL) + if (!time) { return 0.0; } diff --git a/tests/test_cuc.c b/tests/test_cuc.c index 13ff453..c09ac5f 100644 --- a/tests/test_cuc.c +++ b/tests/test_cuc.c @@ -132,7 +132,7 @@ static int test_seconds_conversion(void) ASSERT_TRUE(t.fraction == 0x8000000000000000u); double s = cuc_time_to_seconds(&t); - ASSERT_TRUE(s > 1.4999 && s < 1.5001); + ASSERT_TRUE((s > 1.4999) && (s < 1.5001)); return 0; } #endif From a089a2cf48f7f971a1171f661c5940b72f0636f8 Mon Sep 17 00:00:00 2001 From: Michal Pogorzelec Date: Thu, 23 Jul 2026 19:06:00 +0200 Subject: [PATCH 6/8] update empty lines --- src/cuc.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/cuc.c b/src/cuc.c index b31cd7f..4c77df6 100644 --- a/src/cuc.c +++ b/src/cuc.c @@ -62,18 +62,22 @@ cuc_status_t cuc_format_validate(const cuc_format_t *fmt) { return CUC_ERR_NULL; } + if ((fmt->epoch != CUC_EPOCH_CCSDS) && (fmt->epoch != CUC_EPOCH_AGENCY)) { return CUC_ERR_FORMAT; } + if ((fmt->basic_octets < CUC_BASIC_OCTETS_MIN) || (fmt->basic_octets > CUC_BASIC_OCTETS_MAX)) { return CUC_ERR_FORMAT; } + if (fmt->fraction_octets > CUC_FRACTION_OCTETS_MAX) { return CUC_ERR_FORMAT; } + return CUC_OK; } @@ -95,6 +99,7 @@ size_t cuc_pfield_size(const cuc_format_t *fmt) { return 0; } + return cuc_format_is_extended(fmt) ? 2u : 1u; } @@ -104,6 +109,7 @@ size_t cuc_tfield_size(const cuc_format_t *fmt) { return 0; } + return (size_t)fmt->basic_octets + (size_t)fmt->fraction_octets; } @@ -122,6 +128,7 @@ cuc_status_t cuc_pfield_encode(const cuc_format_t *fmt, { return status; } + if ((!buf) || (!written)) { return CUC_ERR_NULL; @@ -151,6 +158,7 @@ cuc_status_t cuc_pfield_encode(const cuc_format_t *fmt, } *written = size; + return CUC_OK; } @@ -163,6 +171,7 @@ cuc_status_t cuc_pfield_decode(const uint8_t *buf, { return CUC_ERR_NULL; } + if (buf_len < 1u) { return CUC_ERR_BUFFER; @@ -182,8 +191,10 @@ cuc_status_t cuc_pfield_decode(const uint8_t *buf, if ((oct1 & CUC_P1_EXTENSION) == 0u) { *consumed = 1u; + return CUC_OK; } + if (buf_len < 2u) { return CUC_ERR_BUFFER; @@ -195,9 +206,11 @@ cuc_status_t cuc_pfield_decode(const uint8_t *buf, { return CUC_ERR_UNSUPPORTED; } + fmt->basic_octets += (uint8_t)((oct2 >> CUC_P2_ADD_BASIC_SHIFT) & CUC_P2_ADD_BASIC_MASK); fmt->fraction_octets += (uint8_t)((oct2 >> CUC_P2_ADD_FRAC_SHIFT) & CUC_P2_ADD_FRAC_MASK); *consumed = 2u; + return CUC_OK; } @@ -212,6 +225,7 @@ cuc_status_t cuc_tfield_encode(const cuc_time_t *time, { return status; } + if ((!time) || (!buf) || (!written)) { return CUC_ERR_NULL; @@ -239,10 +253,12 @@ cuc_status_t cuc_tfield_encode(const cuc_time_t *time, { octet = (uint8_t)(time->fraction >> (56u - (unsigned)j * 8u)); } + buf[fmt->basic_octets + j] = octet; } *written = size; + return CUC_OK; } @@ -257,6 +273,7 @@ cuc_status_t cuc_tfield_decode(const uint8_t *buf, { return status; } + if ((!buf) || (!time) || (!consumed)) { return CUC_ERR_NULL; @@ -283,6 +300,7 @@ cuc_status_t cuc_tfield_decode(const uint8_t *buf, time->seconds = seconds; time->fraction = fraction; *consumed = size; + return CUC_OK; } @@ -312,6 +330,7 @@ cuc_status_t cuc_encode(const cuc_time_t *time, } *written = p_len + t_len; + return CUC_OK; } @@ -341,6 +360,7 @@ cuc_status_t cuc_decode(const uint8_t *buf, } *consumed = p_len + t_len; + return CUC_OK; } @@ -355,6 +375,7 @@ double cuc_time_to_seconds(const cuc_time_t *time) { return 0.0; } + return (double)time->seconds + (double)time->fraction / CUC_TWO_POW_64; } @@ -365,9 +386,11 @@ cuc_time_t cuc_time_from_seconds(double seconds) { return time; } + time.seconds = (uint64_t)seconds; double frac = seconds - (double)time.seconds; time.fraction = (uint64_t)(frac * CUC_TWO_POW_64); + return time; } From a4a35e99174257c8a075c4a32af7ae07d6e00096 Mon Sep 17 00:00:00 2001 From: Michal Pogorzelec Date: Thu, 23 Jul 2026 19:10:43 +0200 Subject: [PATCH 7/8] update coverage script --- Makefile | 9 +++++---- tools/coverage-html.sh | 21 +++++++++++++++------ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 509179b..906216c 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ CC ?= cc AR ?= ar -CFLAGS ?= -O2 -std=c99 -Wall -Wextra -Iinclude +OPT ?= -O2 +CFLAGS ?= -std=c99 -Wall -Wextra -Iinclude BUILD_DIR = build LIB = $(BUILD_DIR)/libcuc.a @@ -17,7 +18,7 @@ lib: $(LIB) $(OBJ): $(SRC) $(HDR) mkdir -p $(dir $@) - $(CC) $(CFLAGS) -Iinclude -c $(SRC) -o $@ + $(CC) $(CFLAGS) $(OPT) -Iinclude -c $(SRC) -o $@ $(LIB): $(OBJ) mkdir -p $(dir $@) @@ -27,13 +28,13 @@ ctest: $(CTEST) $(CTEST): tests/unit_tests.c tests/test_cuc.c tests/cunit.h tests/test_runners.h $(SRC) $(HDR) mkdir -p $(dir $@) - $(CC) $(CFLAGS) -Iinclude -Itests tests/unit_tests.c tests/test_cuc.c $(SRC) -o $@ + $(CC) $(CFLAGS) $(OPT) -Iinclude -Itests tests/unit_tests.c tests/test_cuc.c $(SRC) -o $@ example: $(EXAMPLE) $(EXAMPLE): examples/cuc_example.c $(SRC) $(HDR) mkdir -p $(dir $@) - $(CC) $(CFLAGS) -Iinclude examples/cuc_example.c $(SRC) -o $@ + $(CC) $(CFLAGS) $(OPT) -Iinclude examples/cuc_example.c $(SRC) -o $@ run: $(CTEST) $(CTEST) diff --git a/tools/coverage-html.sh b/tools/coverage-html.sh index 49e354f..f38fabd 100644 --- a/tools/coverage-html.sh +++ b/tools/coverage-html.sh @@ -8,7 +8,9 @@ if [[ "${OUT_FILE}" != /* ]]; then OUT_FILE="${ROOT_DIR}/${OUT_FILE}" fi -COVERAGE_CFLAGS='-O0 -g --coverage -std=c11 -Iinclude -Itests -Wall -Wextra -Wpedantic -Wconversion -Wshadow -Wcast-align -Wcast-qual -Wpointer-arith -Wformat=2 -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wundef' +# Instrumentation is the ONLY thing that differs from the normal build; the C standard, +# include paths and warning set all come from the Makefile so they cannot drift apart. +COVERAGE_OPT='-O0 -g --coverage' cd "${ROOT_DIR}" @@ -19,14 +21,21 @@ if ! command -v gcovr >/dev/null 2>&1; then fi make clean >/dev/null -make build/tests/ctest CFLAGS="${COVERAGE_CFLAGS}" >/dev/null -./build/tests/ctest +make build/tests/ctest OPT="${COVERAGE_OPT}" >/dev/null +./build/tests/ctest >/dev/null mkdir -p "$(dirname "${OUT_FILE}")" + +# Emit the HTML report and a text summary (line + branch) in a single gcovr pass, so +# the console output is not duplicated. gcovr's chatty "(INFO)" progress lines are +# filtered from stderr; warnings and errors still pass through and preserve the exit code. +echo "Coverage:" gcovr -r "${ROOT_DIR}" \ --filter "${ROOT_DIR}/src" \ - --html \ --html-details \ - --output "${OUT_FILE}" + --output "${OUT_FILE}" \ + --txt - \ + --txt-summary \ + 2> >(grep -v '^(INFO)' >&2) -echo "Coverage HTML report written to: ${OUT_FILE}" +echo "Coverage HTML report written to: ${OUT_FILE}" \ No newline at end of file From 6490a597f9af2222e98063a623fd50cc5773a266 Mon Sep 17 00:00:00 2001 From: Michal Pogorzelec Date: Thu, 23 Jul 2026 19:28:50 +0200 Subject: [PATCH 8/8] add full coverage --- tests/test_cuc.c | 189 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) diff --git a/tests/test_cuc.c b/tests/test_cuc.c index c09ac5f..b4aa2fb 100644 --- a/tests/test_cuc.c +++ b/tests/test_cuc.c @@ -124,6 +124,175 @@ static int test_error_handling(void) return 0; } +/* Every rejection path of cuc_format_validate: NULL, each out-of-range field, and both + * accepted epochs (CCSDS and Agency). */ +static int test_format_validate_errors(void) +{ + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_format_validate(NULL)); + + cuc_format_t bad_epoch = {(cuc_epoch_t)0, 4, 2}; + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_format_validate(&bad_epoch)); + + cuc_format_t agency = {CUC_EPOCH_AGENCY, 4, 2}; + ASSERT_EQ_INT(CUC_OK, cuc_format_validate(&agency)); + + cuc_format_t basic_low = {CUC_EPOCH_CCSDS, 0, 2}; + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_format_validate(&basic_low)); + + cuc_format_t basic_high = {CUC_EPOCH_CCSDS, CUC_BASIC_OCTETS_MAX + 1, 2}; + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_format_validate(&basic_high)); + + cuc_format_t frac_high = {CUC_EPOCH_CCSDS, 4, CUC_FRACTION_OCTETS_MAX + 1}; + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_format_validate(&frac_high)); + + cuc_format_t good = {CUC_EPOCH_CCSDS, 4, 2}; + ASSERT_EQ_INT(CUC_OK, cuc_format_validate(&good)); + return 0; +} + +/* The stand-alone size helpers, including the NULL guards and both P-field widths. + * A format extended only by its fraction count exercises the second half of the + * cuc_format_is_extended predicate. */ +static int test_size_helpers(void) +{ + cuc_format_t single = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_format_t ext_basic = {CUC_EPOCH_CCSDS, 5, 4}; + cuc_format_t ext_frac = {CUC_EPOCH_CCSDS, 4, 5}; + + ASSERT_EQ_INT(0, (int)cuc_pfield_size(NULL)); + ASSERT_EQ_INT(1, (int)cuc_pfield_size(&single)); + ASSERT_EQ_INT(2, (int)cuc_pfield_size(&ext_basic)); + ASSERT_EQ_INT(2, (int)cuc_pfield_size(&ext_frac)); + + ASSERT_EQ_INT(0, (int)cuc_tfield_size(NULL)); + ASSERT_EQ_INT(6, (int)cuc_tfield_size(&single)); + + ASSERT_EQ_INT(0, (int)cuc_size(NULL)); + ASSERT_EQ_INT(7, (int)cuc_size(&single)); + return 0; +} + +static int test_pfield_encode_errors(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_format_t invalid = {CUC_EPOCH_CCSDS, 0, 0}; + uint8_t buf[CUC_PFIELD_OCTETS_MAX] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_pfield_encode(&invalid, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_pfield_encode(&fmt, NULL, sizeof(buf), &written)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_pfield_encode(&fmt, buf, sizeof(buf), NULL)); + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_pfield_encode(&fmt, buf, 0, &written)); + return 0; +} + +static int test_pfield_decode_errors(void) +{ + cuc_format_t out = {0, 0, 0}; + size_t consumed = 0; + uint8_t single[1] = {0x1E}; + + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_pfield_decode(NULL, 1, &out, &consumed)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_pfield_decode(single, 1, NULL, &consumed)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_pfield_decode(single, 1, &out, NULL)); + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_pfield_decode(single, 0, &out, &consumed)); + + /* The Agency epoch id (010) is a valid CUC identification and must round-trip. */ + cuc_format_t agency = {CUC_EPOCH_AGENCY, 4, 2}; + uint8_t agency_pf[CUC_PFIELD_OCTETS_MAX] = {0}; + size_t written = 0; + ASSERT_EQ_INT(CUC_OK, cuc_pfield_encode(&agency, agency_pf, sizeof(agency_pf), &written)); + ASSERT_EQ_INT(CUC_OK, cuc_pfield_decode(agency_pf, written, &out, &consumed)); + ASSERT_EQ_INT(CUC_EPOCH_AGENCY, out.epoch); + + /* Extension bit set in octet 1, but only one octet is supplied. */ + uint8_t truncated_ext[1] = {0x90}; + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_pfield_decode(truncated_ext, 1, &out, &consumed)); + + /* Extension bit set in octet 2 would request a third octet, which is unsupported. */ + uint8_t third_octet[2] = {0x90, 0x80}; + ASSERT_EQ_INT(CUC_ERR_UNSUPPORTED, cuc_pfield_decode(third_octet, 2, &out, &consumed)); + return 0; +} + +static int test_tfield_encode_errors(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_format_t invalid = {CUC_EPOCH_CCSDS, 0, 0}; + cuc_time_t t = {1, 0}; + uint8_t buf[CUC_TFIELD_OCTETS_MAX] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_tfield_encode(&t, &invalid, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_tfield_encode(NULL, &fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_tfield_encode(&t, &fmt, NULL, sizeof(buf), &written)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_tfield_encode(&t, &fmt, buf, sizeof(buf), NULL)); + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_tfield_encode(&t, &fmt, buf, 2, &written)); + return 0; +} + +static int test_tfield_decode_errors(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_format_t invalid = {CUC_EPOCH_CCSDS, 0, 0}; + cuc_time_t out = {0, 0}; + size_t consumed = 0; + uint8_t buf[CUC_TFIELD_OCTETS_MAX] = {0}; + + ASSERT_EQ_INT(CUC_ERR_FORMAT, cuc_tfield_decode(buf, sizeof(buf), &invalid, &out, &consumed)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_tfield_decode(NULL, sizeof(buf), &fmt, &out, &consumed)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_tfield_decode(buf, sizeof(buf), &fmt, NULL, &consumed)); + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_tfield_decode(buf, sizeof(buf), &fmt, &out, NULL)); + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_tfield_decode(buf, 2, &fmt, &out, &consumed)); + return 0; +} + +/* Ten fractional octets exceed the 8 held in the Q0.64 representation, so the two low + * octets are transmitted as zero and dropped on decode while the value round-trips. */ +static int test_wide_fraction_roundtrip(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, CUC_FRACTION_OCTETS_MAX}; + cuc_time_t in = {0x11223344u, 0xABCDEF0123456789u}; + uint8_t buf[CUC_TFIELD_OCTETS_MAX] = {0}; + size_t written = 0; + + ASSERT_EQ_INT(CUC_OK, cuc_tfield_encode(&in, &fmt, buf, sizeof(buf), &written)); + ASSERT_EQ_INT(14, (int)written); + ASSERT_EQ_INT(0, buf[12]); + ASSERT_EQ_INT(0, buf[13]); + + cuc_time_t out = {0, 0}; + size_t consumed = 0; + ASSERT_EQ_INT(CUC_OK, cuc_tfield_decode(buf, written, &fmt, &out, &consumed)); + ASSERT_EQ_INT(14, (int)consumed); + ASSERT_TRUE(out.seconds == in.seconds); + ASSERT_TRUE(out.fraction == in.fraction); + return 0; +} + +static int test_encode_decode_errors(void) +{ + cuc_format_t fmt = {CUC_EPOCH_CCSDS, 4, 2}; + cuc_time_t t = {1, 0}; + uint8_t buf[CUC_OCTETS_MAX] = {0}; + size_t written = 0; + + /* No room even for the P-field preamble: the failure surfaces from the P-field stage. */ + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_encode(&t, &fmt, buf, 0, &written)); + + cuc_format_t out_fmt = {0, 0, 0}; + cuc_time_t out = {0, 0}; + size_t consumed = 0; + + ASSERT_EQ_INT(CUC_ERR_NULL, cuc_decode(buf, sizeof(buf), &out_fmt, &out, NULL)); + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_decode(buf, 0, &out_fmt, &out, &consumed)); + + /* A valid one-octet P-field for a 6-octet T-field, but no T-field bytes follow. */ + uint8_t pfield_only[1] = {0x1E}; + ASSERT_EQ_INT(CUC_ERR_BUFFER, cuc_decode(pfield_only, 1, &out_fmt, &out, &consumed)); + return 0; +} + #ifndef CUC_NO_FLOAT static int test_seconds_conversion(void) { @@ -135,6 +304,17 @@ static int test_seconds_conversion(void) ASSERT_TRUE((s > 1.4999) && (s < 1.5001)); return 0; } + +/* NULL input converts to zero seconds; a negative input yields a zero time value. */ +static int test_seconds_conversion_edge(void) +{ + ASSERT_TRUE(cuc_time_to_seconds(NULL) == 0.0); + + cuc_time_t z = cuc_time_from_seconds(-1.0); + ASSERT_TRUE(z.seconds == 0u); + ASSERT_TRUE(z.fraction == 0u); + return 0; +} #endif test_result_t test_cuc_run_all(void) @@ -144,8 +324,17 @@ test_result_t test_cuc_run_all(void) RUN_TEST(test_tfield_roundtrip); RUN_TEST(test_full_roundtrip); RUN_TEST(test_error_handling); + RUN_TEST(test_format_validate_errors); + RUN_TEST(test_size_helpers); + RUN_TEST(test_pfield_encode_errors); + RUN_TEST(test_pfield_decode_errors); + RUN_TEST(test_tfield_encode_errors); + RUN_TEST(test_tfield_decode_errors); + RUN_TEST(test_wide_fraction_roundtrip); + RUN_TEST(test_encode_decode_errors); #ifndef CUC_NO_FLOAT RUN_TEST(test_seconds_conversion); + RUN_TEST(test_seconds_conversion_edge); #endif test_result_t r;