From ec0d7d63de617db476ac994099f9b25ee76ec731 Mon Sep 17 00:00:00 2001 From: Manuel Weiser Date: Wed, 12 Feb 2025 21:10:25 +0100 Subject: [PATCH] init --- .vscode/settings.json | 54 + README.md | 162 + ca.cert | 21 + display.cpp | 0 display.h | 0 docs/ndef.md | 3255 +++++++++++++++++ docs/specification_ndef.pdf | Bin 0 -> 593162 bytes extra_script.py | 6 + gzip_files.py | 45 + html/bambu_filaments.json | 70 + html/favicon.ico | Bin 0 -> 16958 bytes html/header.html | 51 + html/index.html | 37 + html/logo.png | Bin 0 -> 8852 bytes html/rfid.html | 114 + html/rfid.js | 570 +++ html/spool_in.png | Bin 0 -> 22495 bytes html/spoolman.html | 80 + html/spoolman.js | 308 ++ html/style.css | 901 +++++ html/waage.html | 99 + html/wifi.html | 12 + ...oc-esp32-pinout-reference-wroom-devkit.png | Bin 0 -> 261486 bytes scripts/buildfs.sh | 2 + scripts/uploadfs.sh | 2 + src/api.cpp | 471 +++ src/api.h | 24 + src/bambu.cpp | 486 +++ src/bambu.h | 37 + src/bambu_cert.h | 45 + src/commonFS.cpp | 56 + src/commonFS.h | 12 + src/config.cpp | 54 + src/config.h | 48 + src/display.cpp | 225 ++ src/display.h | 24 + src/icons.h | 126 + src/main.cpp | 191 + src/nfc.cpp | 503 +++ src/nfc.h | 16 + src/scale.cpp | 214 ++ src/scale.h | 18 + src/website.cpp | 334 ++ src/website.h | 26 + 44 files changed, 8699 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 ca.cert create mode 100644 display.cpp create mode 100644 display.h create mode 100644 docs/ndef.md create mode 100644 docs/specification_ndef.pdf create mode 100644 extra_script.py create mode 100644 gzip_files.py create mode 100644 html/bambu_filaments.json create mode 100644 html/favicon.ico create mode 100644 html/header.html create mode 100644 html/index.html create mode 100644 html/logo.png create mode 100644 html/rfid.html create mode 100644 html/rfid.js create mode 100644 html/spool_in.png create mode 100644 html/spoolman.html create mode 100644 html/spoolman.js create mode 100644 html/style.css create mode 100644 html/waage.html create mode 100644 html/wifi.html create mode 100644 img/doc-esp32-pinout-reference-wroom-devkit.png create mode 100755 scripts/buildfs.sh create mode 100755 scripts/uploadfs.sh create mode 100644 src/api.cpp create mode 100644 src/api.h create mode 100644 src/bambu.cpp create mode 100644 src/bambu.h create mode 100644 src/bambu_cert.h create mode 100644 src/commonFS.cpp create mode 100644 src/commonFS.h create mode 100644 src/config.cpp create mode 100644 src/config.h create mode 100644 src/display.cpp create mode 100644 src/display.h create mode 100644 src/icons.h create mode 100644 src/main.cpp create mode 100644 src/nfc.cpp create mode 100644 src/nfc.h create mode 100644 src/scale.cpp create mode 100644 src/scale.h create mode 100644 src/website.cpp create mode 100644 src/website.h diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..1f50132 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,54 @@ +{ + "files.associations": { + "algorithm": "cpp", + "vector": "cpp", + "cmath": "cpp", + "array": "cpp", + "atomic": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "unordered_set": "cpp", + "exception": "cpp", + "functional": "cpp", + "iterator": "cpp", + "map": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "regex": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp" + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..49cde19 --- /dev/null +++ b/README.md @@ -0,0 +1,162 @@ +# FilaMan - Filament Management System + +A comprehensive filament management system combining ESP32-based hardware for weight measurement and NFC tag reading/writing with a web interface for managing filament spools in conjunction with Bambu Lab AMS and Spoolman. + +## Project Overview + +FilaMan is designed to streamline the management of filament spools for 3D printing. The system consists of an ESP32 microcontroller that handles weight measurement and NFC tag operations, and a web interface that allows users to manage filament spools, monitor AMS (Automatic Material System) status, and interact with Spoolman and Bambu Lab printers. + +### ESP32 Hardware Features +- **Weight Measurement:** Using a load cell with HX711 amplifier for precise weight tracking. +- **NFC Tag Reading/Writing:** PN532 module for reading and writing filament data to NFC tags. +- **OLED Display:** Shows current weight, connection status (WiFi, Bambu Lab, Spoolman). +- **WiFi Connectivity:** WiFiManager for easy network configuration. +- **MQTT Integration:** Connects to Bambu Lab printer for AMS control. +- **Data Persistence:** Stores calibration data in EEPROM. +- **Watchdog Timer:** Ensures system stability. + +### Web Interface Features +- **Real-time Updates:** WebSocket connection for live data updates. +- **NFC Tag Management:** Write filament data to NFC tags. +- **AMS Integration:** + - Display current AMS tray contents. + - Assign filaments to AMS slots. + - Support for external spool holder. +- **Spoolman Integration:** + - List available filament spools. + - Filter and select filaments. + - Update spool weights automatically. + - Track NFC tag assignments. + +## Detailed Functionality + +### ESP32 Functionality +- **Control and Monitor Print Jobs:** The ESP32 communicates with the Bambu Lab printer to control and monitor print jobs. +- **Printer Communication:** Uses MQTT for real-time communication with the printer. +- **User Interactions:** The OLED display provides immediate feedback on the system status, including weight measurements and connection status. + +### Web Interface Functionality +- **User Interactions:** The web interface allows users to interact with the system, select filaments, write NFC tags, and monitor AMS status. +- **UI Elements:** Includes dropdowns for selecting manufacturers and filaments, buttons for writing NFC tags, and real-time status indicators. + +## Installation + +### Prerequisites +- **Software:** + - [PlatformIO](https://platformio.org/) in VS Code + - [Spoolman](https://github.com/Donkie/Spoolman) instance + - Bambu Lab printer (optional for AMS integration) +- **Hardware:** + - ESP32 Development Board + - HX711 Load Cell Amplifier + - Load Cell (weight sensor) + - OLED Display (128x64 SSD1306) + - PN532 NFC Module + - Connecting wires + +### Step-by-Step Installation +1. **Clone the Repository:** + ```bash + git clone https://github.com/yourusername/FilaMan.git + cd FilaMan + ``` +2. **Install Dependencies:** + ```bash + pio lib install + ``` +3. **Flash the ESP32:** + ```bash + pio run --target upload + ``` +4. **Initial Setup:** + - Connect to the "FilaMan" WiFi access point. + - Configure WiFi settings through the captive portal. + - Access the web interface at `http://filaman.local` or the IP address. + +## Hardware Requirements + +### Components +- **ESP32 Development Board:** Any ESP32 variant. +- **HX711 Load Cell Amplifier:** For weight measurement. +- **Load Cell:** Weight sensor. +- **OLED Display:** 128x64 SSD1306. +- **PN532 NFC Module:** For NFC tag operations. +- **Connecting Wires:** For connections. + +### Pin Configuration +| Component | ESP32 Pin | +|-------------------|-----------| +| HX711 DOUT | 16 | +| HX711 SCK | 17 | +| OLED SDA | 21 | +| OLED SCL | 22 | +| PN532 IRQ | 32 | +| PN532 RESET | 33 | + +## Software Dependencies + +### ESP32 Libraries +- `WiFiManager`: Network configuration +- `ESPAsyncWebServer`: Web server functionality +- `ArduinoJson`: JSON parsing and creation +- `PubSubClient`: MQTT communication +- `Adafruit_PN532`: NFC functionality +- `Adafruit_SSD1306`: OLED display control +- `HX711`: Load cell communication + +### External Services +- **Bambu Lab Printer:** For AMS integration. +- **Spoolman:** For filament management. + +## API Communication + +### Spoolman Integration +The system communicates with Spoolman using its REST API for: +- Fetching spool information. +- Updating spool weights. +- Managing NFC tag assignments. + +### Data Format +```json +{ + "version": "2.0", + "protocol": "openspool", + "color_hex": "FFFFFF", + "type": "PLA", + "min_temp": 200, + "max_temp": 220, + "brand": "Vendor", + "sm_id": "1234" +} +``` + +## Documentation + +### Relevant Links +- [PlatformIO Documentation](https://docs.platformio.org/) +- [Spoolman Documentation](https://github.com/Donkie/Spoolman) +- [Bambu Lab Printer Documentation](https://www.bambulab.com/) + +### Tutorials and Examples +- [PlatformIO Getting Started](https://docs.platformio.org/en/latest/tutorials/espressif32/arduino_debugging_unit_testing.html) +- [ESP32 Web Server Tutorial](https://randomnerdtutorials.com/esp32-web-server-arduino-ide/) + +## License + +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. + +## Materials + +### Useful Resources +- [ESP32 Official Documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/) +- [Arduino Libraries](https://www.arduino.cc/en/Reference/Libraries) +- [NFC Tag Information](https://learn.adafruit.com/adafruit-pn532-rfid-nfc/overview) + +### Community and Support +- [PlatformIO Community](https://community.platformio.org/) +- [Arduino Forum](https://forum.arduino.cc/) +- [ESP32 Forum](https://www.esp32.com/) + +## Availability + +The code can be tested and the application can be downloaded from the [GitHub repository](https://github.com/yourusername/FilaMan). diff --git a/ca.cert b/ca.cert new file mode 100644 index 0000000..9fcb214 --- /dev/null +++ b/ca.cert @@ -0,0 +1,21 @@ + -----BEGIN CERTIFICATE----- + MIIDZTCCAk2gAwIBAgIUV1FckwXElyek1onFnQ9kL7Bk4N8wDQYJKoZIhvcNAQEL + BQAwQjELMAkGA1UEBhMCQ04xIjAgBgNVBAoMGUJCTCBUZWNobm9sb2dpZXMgQ28u + LCBMdGQxDzANBgNVBAMMBkJCTCBDQTAeFw0yMjA0MDQwMzQyMTFaFw0zMjA0MDEw + MzQyMTFaMEIxCzAJBgNVBAYTAkNOMSIwIAYDVQQKDBlCQkwgVGVjaG5vbG9naWVz + IENvLiwgTHRkMQ8wDQYDVQQDDAZCQkwgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB + DwAwggEKAoIBAQDL3pnDdxGOk5Z6vugiT4dpM0ju+3Xatxz09UY7mbj4tkIdby4H + oeEdiYSZjc5LJngJuCHwtEbBJt1BriRdSVrF6M9D2UaBDyamEo0dxwSaVxZiDVWC + eeCPdELpFZdEhSNTaT4O7zgvcnFsfHMa/0vMAkvE7i0qp3mjEzYLfz60axcDoJLk + p7n6xKXI+cJbA4IlToFjpSldPmC+ynOo7YAOsXt7AYKY6Glz0BwUVzSJxU+/+VFy + /QrmYGNwlrQtdREHeRi0SNK32x1+bOndfJP0sojuIrDjKsdCLye5CSZIvqnbowwW + 1jRwZgTBR29Zp2nzCoxJYcU9TSQp/4KZuWNVAgMBAAGjUzBRMB0GA1UdDgQWBBSP + NEJo3GdOj8QinsV8SeWr3US+HjAfBgNVHSMEGDAWgBSPNEJo3GdOj8QinsV8SeWr + 3US+HjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQABlBIT5ZeG + fgcK1LOh1CN9sTzxMCLbtTPFF1NGGA13mApu6j1h5YELbSKcUqfXzMnVeAb06Htu + 3CoCoe+wj7LONTFO++vBm2/if6Jt/DUw1CAEcNyqeh6ES0NX8LJRVSe0qdTxPJuA + BdOoo96iX89rRPoxeed1cpq5hZwbeka3+CJGV76itWp35Up5rmmUqrlyQOr/Wax6 + itosIzG0MfhgUzU51A2P/hSnD3NDMXv+wUY/AvqgIL7u7fbDKnku1GzEKIkfH8hm + Rs6d8SCU89xyrwzQ0PR853irHas3WrHVqab3P+qNwR0YirL0Qk7Xt/q3O1griNg2 + Blbjg3obpHo9 + -----END CERTIFICATE----- \ No newline at end of file diff --git a/display.cpp b/display.cpp new file mode 100644 index 0000000..e69de29 diff --git a/display.h b/display.h new file mode 100644 index 0000000..e69de29 diff --git a/docs/ndef.md b/docs/ndef.md new file mode 100644 index 0000000..a71792d --- /dev/null +++ b/docs/ndef.md @@ -0,0 +1,3255 @@ +# NFC Data Exchange Format (NDEF) + +## Technical Specification + +## NFC Forum + +#### TM + +## NDEF 1. + +## NFCForum-TS-NDEF_1. + +## 2006-07- + + +##### RESTRICTIONS ON USE + +This specification is copyright © 2005-2006 by the NFC Forum, and was made available pursuant to a +license agreement entered into between the recipient (Licensee) and NFC Forum, Inc. (Licensor) and may +be used only by Licensee, and in compliance with the terms of that license agreement (License). If you are +not the Licensee, you are not authorized to make any use of this specification. However, you may obtain a +copy at the following page of Licensor's Website: [http://www.nfc-forum.org/resources/spec_license](http://www.nfc-forum.org/resources/spec_license) after +entering into and agreeing to such license terms as Licensor is then requiring. On the date that this +specification was downloaded by Licensee, those terms were as follows: + +1. LICENSE GRANT. + +Licensor hereby grants Licensee the right, without charge, to copy (for internal purposes only) and share +the Specification with Licensee's members, employees and consultants (as appropriate). This license grant +does not include the right to sublicense, modify or create derivative works based upon the Specification. + +2. NO WARRANTIES. + +THE SPECIFICATION IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL LICENSOR, ITS +MEMBERS OR ITS CONTRIBUTORS BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THE SPECIFICATION. + +3. THIRD PARTY RIGHTS. + +Without limiting the generality of Section 2 above, LICENSOR ASSUMES NO RESPONSIBILITY TO +COMPILE, CONFIRM, UPDATE OR MAKE PUBLIC ANY THIRD PARTY ASSERTIONS OF +PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS THAT MIGHT NOW OR IN THE +FUTURE BE INFRINGED BY AN IMPLEMENTATION OF THE SPECIFICATION IN ITS CURRENT, +OR IN ANY FUTURE FORM. IF ANY SUCH RIGHTS ARE DESCRIBED ON THE SPECIFICATION, +LICENSOR TAKES NO POSITION AS TO THE VALIDITY OR INVALIDITY OF SUCH +ASSERTIONS, OR THAT ALL SUCH ASSERTIONS THAT HAVE OR MAY BE MADE ARE SO +LISTED. + +4. TERMINATION OF LICENSE. + +In the event of a breach of this Agreement by Licensee or any of its employees or members, Licensor shall +give Licensee written notice and an opportunity to cure. If the breach is not cured within thirty (30) days +after written notice, or if the breach is of a nature that cannot be cured, then Licensor may immediately or +thereafter terminate the licenses granted in this Agreement. + +5. MISCELLANEOUS. + +All notices required under this Agreement shall be in writing, and shall be deemed effective five days from +deposit in the mails. Notices and correspondence to the NFC Forum address as it appears below. This +Agreement shall be construed and interpreted under the internal laws of the United States and the +Commonwealth of Massachusetts, without giving effect to its principles of conflict of law. + +NFC Forum, Inc. +401 Edgewater Place, Suite 600 +Wakefield, MA, USA 01880 + + +## Contents + +- 1 Overview........................................................................................................ Contents + - 1.1 Objectives........................................................................................................................... + - 1.1.1 Design Goals......................................................................................................... + - 1.1.2 Anti-Goals............................................................................................................. + - 1.2 References.......................................................................................................................... + - 1.3 Administration.................................................................................................................... + - 1.4 Special Word Usage........................................................................................................... + - 1.5 Name and Logo Usage....................................................................................................... + - 1.6 Intellectual Property........................................................................................................... + - 1.7 Glossary.............................................................................................................................. +- 2 NDEF Mechanisms........................................................................................ + - 2.1 Introduction........................................................................................................................ + - 2.2 Intended Usage................................................................................................................... + - 2.3 NDEF Encapsulation Constructs........................................................................................ + - 2.3.1 Message................................................................................................................. + - 2.3.2 Record................................................................................................................... + - 2.3.3 Record Chunks + - 2.4 NDEF Payload Description................................................................................................ + - 2.4.1 Payload Length...................................................................................................... + - 2.4.2 Payload Type......................................................................................................... + - 2.4.3 Payload Identification.......................................................................................... + - 2.5 NDEF Mechanisms Test Requirements........................................................................... +- 3 The NDEF Specification.............................................................................. + - 3.1 Data Transmission Order.................................................................................................. + - 3.2 Record Layout.................................................................................................................. + - 3.2.1 MB (Message Begin)........................................................................................... + - 3.2.2 ME (Message End).............................................................................................. + - 3.2.3 CF (Chunk Flag).................................................................................................. + - 3.2.4 SR (Short Record)............................................................................................... + - 3.2.5 IL (ID_LENGTH field is present)....................................................................... + - 3.2.6 TNF (Type Name Format).................................................................................. + - 3.2.7 TYPE_LENGTH................................................................................................. + - 3.2.8 ID_LENGTH....................................................................................................... + - 3.2.9 PAYLOAD_LENGTH........................................................................................ + - 3.2.10 TYPE................................................................................................................... + - 3.2.11 ID......................................................................................................................... + - 3.2.12 PAYLOAD.......................................................................................................... + - 3.3 THE NDEF Specification Test Requirements.................................................................. +- 4 Special Considerations............................................................................... + - 4.1 Internationalization........................................................................................................... + - 4.2 Security............................................................................................................................. + - 4.3 Maximum Field Sizes....................................................................................................... + - 4.4 Use of URIs in NDEF...................................................................................................... + - 4.5 Special Consideration Test Requirements........................................................................ +- A. Revision History.......................................................................................... + + +Figures + +## Figures + +#### Figure 1. Example of an NDEF Message with a Set of Records..................................................... 8 + +#### Figure 2. NDEF Octet Ordering.................................................................................................... 13 + +#### Figure 3. NDEF Record Layout.................................................................................................... 14 + +#### Figure 4. NDEF Short-Record Layout (SR=1).............................................................................. 15 + +## Tables + +#### Table 1. TNF Field Values............................................................................................................ 16 + +#### Table 2. Revision History.............................................................................................................. 21 + +## Test Requirements + +#### Test Requirements 1. NDEF Mechanisms Test Requirements..................................................... 11 + +#### Test Requirements 2. The NDEF Specification Test Requirements............................................. 18 + +#### Test Requirements 3. Special Consideration Test Requirements.................................................. 20 + +NFC Data Exchange Format (NDEF) Page ii + + +Overview + +## 1 Overview + +The International Standard ISO/IEC 18092, Near Field Communication – Interface and Protocol +(NFCIP-1), defines an interface and protocol for simple wireless interconnection of closely +coupled devices operating at 13.56 MHz. + +The NFC Data Exchange Format (NDEF) specification defines a message encapsulation format to +exchange information, e.g. between an NFC Forum Device and another NFC Forum Device or an +NFC Forum Tag. + +NDEF is a lightweight, binary message format that can be used to encapsulate one or more +application-defined payloads of arbitrary type and size into a single message construct. Each +payload is described by a type, a length, and an optional identifier. + +Type identifiers may be URIs, MIME media types, or NFC-specific types. This latter format +permits compact identification of well-known types commonly used in NFC Forum applications, +or self-allocation of a name space for organizations that wish to use it for their own NFC-specific +purposes. + +The payload length is an unsigned integer indicating the number of octets in the payload. A +compact, short-record layout is provided for very small payloads. + +The optional payload identifier enables association of multiple payloads and cross-referencing +between them. + +NDEF payloads may include nested NDEF messages or chains of linked chunks of length +unknown at the time the data is generated. + +NDEF is strictly a message format, which provides no concept of a connection or of a logical +circuit, nor does it address head-of-line problems. + +### 1.1 Objectives........................................................................................................................... + +The NFC Data Exchange Format (NDEF) specification is a common data format for NFC Forum +Devices and NFC Forum Tags. + +The NFC Data Exchange Format specification defines the NDEF data structure format as well as +rules to construct a valid NDEF message as an ordered and unbroken collection of NDEF records. +Furthermore, it defines the mechanism for specifying the types of application data encapsulated in +NDEF records. + +The NDEF specification defines only the data structure format to exchange application or service +specific data in an interoperable way, and it does not define any record types in detail—record +types are defined in separate specifications. + +This NDEF specification assumes a reliable underlying protocol and therefore this specification +does not specify the data exchange between two NFC Forum Devices or the data exchange +between an NFC Forum Device and an NFC Forum Tag. Readers are encouraged to review the +NFCIP-1 transport protocol [ISO/IEC 18092]. + +An example of the use of NDEF is when two NFC Forum Devices are in proximity, an NDEF +message is exchanged over the NFC Forum LLCP protocol. When an NFC Forum Device is in +proximity of an NFC Forum Tag, an NDEF message is retrieved from the NFC Forum Tag by +means of the NFC Forum Tag protocols. The data format of the NDEF message is the same in +these two cases so that an NFC Forum Device may process the NDEF information independent of +the type of device or tag with which it is communicating. + +NFC Data Exchange Format (NDEF) Page 1 + + +Overview + +Because of the large number of existing message encapsulation formats, record marking +protocols, and multiplexing protocols, it is best to be explicit about the design goals of NDEF +and, in particular, about what is outside the scope of NDEF. + +#### 1.1.1 Design Goals......................................................................................................... + +The design goal of NDEF is to provide an efficient and simple message format that can +accommodate the following: + +1. Encapsulating arbitrary documents and entities, including encrypted data, XML documents, + XML fragments, image data like GIF and JPEG files, etc. +2. Encapsulating documents and entities initially of unknown size. This capability can be used + to encapsulate dynamically generated content or very large entities as a series of chunks. +3. Aggregating multiple documents and entities that are logically associated in some manner + into a single message. For example, NDEF can be used to encapsulate an NFC-specific + message and a set of attachments of standardized types referenced from that NFC-specific + message. +4. Compact encapsulation of small payloads should be accommodated without introducing + unnecessary complexity to parsers. + +To achieve efficiency and simplicity, the mechanisms provided by this specification have been +deliberately limited to serve these purposes. NDEF has not been designed as a general message +description or document format such as MIME or XML. Instead, NFC applications can take +advantage of such formats by encapsulating them in NDEF messages. + +#### 1.1.2 Anti-Goals............................................................................................................. + +The following list identifies items outside the scope of NDEF: + +1. NDEF does not make any assumptions about the types of payloads that are carried within + NDEF messages or about the message exchange patterns implied by such messages. +2. NDEF does not in any way introduce the notion of a connection or a logical circuit (virtual or + otherwise). +3. NDEF does not attempt to deal with head-of-line blocking problems that might occur when + using stream-oriented protocols like TCP. + +### 1.2 References.......................................................................................................................... + +[ISO/IEC 18092] ISO/IEC 18092, “Information Technology- Telecommunications and +information exchange between systems- Near Field Communication - +Interface and Protocol (NFCIP-1)”. + +[NFC RTD] “NFC Record Type Definition (RTD) Specification”, NFC Forum, 2006. + +[RFC 1700] Reynolds, J. and J. Postel, “Assigned Numbers”, STD 2, RFC 1700, +October 1994. + +[RFC 1900] B. Carpenter, Y. Rekhter, “Renumbering Needs Work”, RFC 1900, IAB, +February 1996. + +[RFC 2046] N. Freed, N. Borenstein, “Multipurpose Internet Mail Extensions +(MIME) Part Two: Media Types” RFC 2046, Innosoft, First Virtual, +November 1996. + +NFC Data Exchange Format (NDEF) Page 2 + + +Overview + +[RFC 2047] K. Moore, “MIME (Multipurpose Internet Mail Extensions) Part Three: +Message Header Extensions for Non-ASCII Text”, RFC 2047, +University of Tennessee, November 1996. + +[RFC 2048] N. Freed, J. Klensin, J. Postel, “Multipurpose Internet Mail Extensions +(MIME) Part Four: Registration Procedures”, RFC 2048, Innosoft, MCI, +ISI, November 1996. + +[RFC 2119] S. Bradner, “Key words for use in RFCs to Indicate Requirement +Levels”, RFC 2119, Harvard University, March 1997. +[http://www.apps.ietf.org/rfc/rfc2119.html](http://www.apps.ietf.org/rfc/rfc2119.html) + +[RFC 2616] R. Fielding, J. Gettys, J. C. Mogul, H. F. Nielsen, T. Berners-Lee, +“Hypertext Transfer Protocol -- HTTP/1.1”, RFC 2616, U.C. Irvine, +DEC W3C/MIT, DEC, W3C/MIT, W3C/MIT, January 1997. + +[RFC 2717] R. Petke, I. King, “Registration Procedures for URL Scheme Names”, +BCP: 35, RFC 2717, UUNET Technologies, Microsoft Corporation, +November 1999. + +[RFC 2718] L. Masinter, H. Alvestrand, D. Zigmond, R. Petke, “Guidelines for new +URL Schemes”, RFC 2718, Xerox Corporation, Maxware, Pirsenteret, +WebTV Networks, Inc., UUNET Technologies, November 1999. + +[RFC 2732] R. Hinden, B. Carpenter, L. Masinter, “Format for Literal IPv +Addresses in URL's”, RFC 2732, Nokia, IBM, AT&T, December 1999. + +[RFC 3023] M. Murata, S. St. Laurent, D. Kohn, “XML Media Types” RFC 3023, +IBM Tokyo Research Laboratory, simonstl.com, Skymoon Ventures, +January 2001. + +[RFC 3986] T. Berners-Lee, R. Fielding, L. Masinter, “Uniform Resource Identifiers +(URI): Generic Syntax”, RFC 3986, MIT/LCS, U.C. Irvine, Xerox +Corporation, January 2005. [http://www.apps.ietf.org/rfc/rfc3986.html](http://www.apps.ietf.org/rfc/rfc3986.html) + +[URI SCHEME] List of Uniform Resource Identifier (URI) schemes registered by IANA +is available at:http://www.iana.org/assignments/uri-schemes + +NFC Data Exchange Format (NDEF) Page 3 + + +Overview + +### 1.3 Administration.................................................................................................................... + +The NFC Forum Data Exchange Format Specification is an open specification supported by the +Near Field Communication Forum, Inc., located at: + +``` +401 Edgewater Place, Suite 600 +Wakefield, MA, 01880 +Tel.: +1 781-876- +Fax: +1 781-224- +http://www.nfc-forum.org/ +``` +The Devices technical working group maintains this specification. + +### 1.4 Special Word Usage........................................................................................................... + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, +“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this +document are to be interpreted as described in RFC 2119. + +### 1.5 Name and Logo Usage....................................................................................................... + +The Near Field Communication Forum’s policy regarding the use of the trademarks NFC Forum +and the NFC Forum logo is as follows: + +- Any company MAY claim compatibility with NFC Forum specifications, whether a member + of the NFC Forum or not. +- Permission to use the NFC Forum logos is automatically granted to designated members only + as stipulated on the most recent Membership Privileges document, during the period of time + for which their membership dues are paid. +- Member’s distributors and sales representatives MAY use the NFC Forum logo in promoting + member’s products sold under the name of the member. +- The logo SHALL be printed in black or in color as illustrated on the Logo Page that is + available from the NFC Forum at the address above. The aspect ratio of the logo SHALL be + maintained, but the size MAY be varied. Nothing MAY be added to or deleted from the + logos. +- Since the NFC Forum name is a trademark of the Near Field Communication Forum, the + following statement SHALL be included in all published literature and advertising material in + which the name or logo appears: + NFC Forum and the NFC Forum logo are trademarks of the Near Field Communication + Forum. + +### 1.6 Intellectual Property........................................................................................................... + +The NFC Data Exchange Format (NDEF) Specification conforms to the Intellectual Property +guidelines specified in the NFC Forum's Intellectual Property Right Policy, as approved on +November 9, 2004 and outlined in the NFC Forum Rules of Procedures, as approved on +December 17, 2004. + +NFC Data Exchange Format (NDEF) Page 4 + + +Overview + +### 1.7 Glossary.............................................................................................................................. + +NDEF application + +``` +The logical, higher-layer application on an NFC Forum Device using NDEF to format +information for exchange with other NFC Forum Devices or NFC Forum Tags. Also user +application or NDEF user application. +``` +NDEF message + +``` +The basic message construct defined by this specification. An NDEF message contains +one or more NDEF records (see section 2.3.1). +``` +NDEF record + +``` +An NDEF record contains a payload described by a type, a length, and an optional +identifier (see section 2.3.2). +``` +NDEF short record + +``` +An NDEF record with the SR flag set to 1; the PAYLOAD_LENGTH field in short +records is a single octet allowing payloads or chunks of up to 255 bytes to be carried (see +section 3.2.4). +``` +NDEF record chunk + +``` +An NDEF record that contains a chunk of a payload rather than a full payload (see +section 2.3.3). Each record chunk carrying a portion of the chunked payload, except the +last record of each chunked payload, has its CF flag set to 1. +``` +NDEF payload + +``` +The application data carried within an NDEF record. +``` +NDEF chunked payload + +``` +Application data that has been partitioned into multiple chunks each carried in a separate +NDEF record, where each of these records except the last has the CF flag set to 1. This +facility can be used to carry dynamically generated content for which the payload size is +not known in advance or very large entities that don't fit into a single NDEF record. +Chunked payloads are not intended to support multiplexing or streaming of content and +such use is deprecated. (See section 2.3.3.) +``` +NDEF payload length + +``` +The size of the payload in a single NDEF record indicated as the number of octets (see +section 2.4.1). +``` +NDEF payload type + +``` +An identifier that indicates the type of the payload. This specification supports URIs +[RFC 3986], MIME media type constructs [RFC 2616], as well as an NFC-specific +record type as type identifiers (see section 2.4.2). +``` +NDEF payload identifier + +``` +An optional URI that can be used to identify a payload (see section 2.4.3). +``` +NDEF generator + +``` +An entity or module that encapsulates application-defined payloads within NDEF +messages. +``` +NFC Data Exchange Format (NDEF) Page 5 + + +Overview + +NDEF parser + +``` +An entity or module that parses NDEF messages and hands off the payloads to an NDEF +application. +``` +User Application + +``` +See NDEF Application. +``` +NFC Data Exchange Format (NDEF) Page 6 + + +NDEF Mechanisms + +## 2 NDEF Mechanisms........................................................................................ + +This section describes the mechanisms used in NDEF. The specific syntax for these mechanisms +is defined in Section 3. + +### 2.1 Introduction........................................................................................................................ + +NFC Forum Data Exchange Format is a lightweight binary message format designed to +encapsulate one or more application-defined payloads into a single message construct. An NDEF +message contains one or more NDEF records, each carrying a payload of arbitrary type and up to +232 -1 octets in size. Records can be chained together to support larger payloads. An NDEF record +carries three parameters for describing its payload: the payload length, the payload type, and an +optional payload identifier. The purpose of these parameters is as follows: + +The payload length + +``` +The payload length indicates the number of octets in the payload (see section 2.4.1). By +providing the payload length within the first 8 octets of a record, efficient record boundary +detection is possible. +``` +The payload type + +``` +The NDEF payload type identifier indicates the type of the payload. NDEF supports URIs +[RFC 3986], MIME media type constructs [RFC 2046], and an NFC-specific type format as +type identifiers (see section 2.4.2). By indicating the type of a payload, it is possible to +dispatch the payload to the appropriate user application. +``` +The payload identifier + +``` +A payload may be given an optional identifier in the form of an absolute or relative URI (see +section 2.4.3). The use of an identifier enables payloads that support URI linking +technologies to cross-reference other payloads. +``` +### 2.2 Intended Usage................................................................................................................... + +The intended usage of NDEF is as follows: A user application wants to encapsulate one or more +related documents into a single NDEF message. For example, this can be an application-specific +message along with a set of attachments, each of standardized type. The NDEF generator +encapsulates each document in NDEF records as payload or chunked payload, indicating the type +and length of the payload along with an optional identifier. The NDEF records are then put +together to form a single NDEF message. The NDEF message is transmitted across an NFC link +to another NFC Forum Device where they are received and parsed, or as an intermediate step, the +message is written to an NFC Forum Tag. An NFC Forum Device brought close to this NFC +Forum Tag will read the NDEF message from this tag and hand it over to the NDEF parser. The +NDEF parser deconstructs the NDEF message and hands the payloads to a (potentially different) +user application. Each NDEF message MUST be sent or received in its entirety. + +NDEF records can encapsulate documents of any type. It is possible to carry MIME messages in +NDEF records by using a media type such as “message/rfc822”. An NDEF message can be +encapsulated in an NDEF record by using an NFC-specific predefined type (see [NFC RTD]). + +It is important to note that although MIME entities are supported, there are no assumptions in +NDEF that a record payload is MIME; NDEF makes no assumption concerning the types of the +payloads carried in an NDEF message. Said differently, an NDEF parser need not inspect the +NDEF record type nor peer inside an NDEF record in order to parse the NDEF message. + +NFC Data Exchange Format (NDEF) Page 7 + + +NDEF Mechanisms + +NDEF provides no support for error handling. It is up to the NDEF parser to determine the +implications of receiving a malformed NDEF message or an NDEF message containing a field +length beyond its processing capabilities. It is the responsibility of the user applications involved +to provide any additional functionality such as QoS that they may need as part of the overall +system in which they participate. + +### 2.3 NDEF Encapsulation Constructs........................................................................................ + +#### 2.3.1 Message................................................................................................................. + +An NDEF message is composed of one or more NDEF records. The first record in a message is +marked with the MB (Message Begin) flag set and the last record in the message is marked with +the ME (Message End) flag set (see sections 3.2.1 and 3.2.2). The minimum message length is +one record which is achieved by setting both the MB and the ME flag in the same record. Note +that at least two record chunks are required in order to encode a chunked payload (see section +2.3.3). The maximum number of NDEF records that can be carried in an NDEF message is +unbounded. + +NDEF messages MUST NOT overlap; that is, the MB and the ME flags MUST NOT be used to +nest NDEF messages. NDEF messages MAY be nested by carrying a full NDEF message as a +payload within an NDEF record. + +``` +NDEF Message +R 1 MB=1 ... Rr ... Rs ... Rt ME= +``` +``` +Figure 1. Example of an NDEF Message with a Set of Records +``` +The message head is to the left and the tail to the right, with the logical record indices t > s > r > + +1. The MB (Message Begin) flag is set in the first record (index 1) and the ME (Message End) +flag is set in the last record (index t). + +Actual NDEF records do not carry an index number; the ordering is implicitly given by the order +in which the records are serialized. For example, if records are repackaged by an intermediate +application, then that application is responsible for ensuring that the order of records is preserved. + +#### 2.3.2 Record................................................................................................................... + +A record is the unit for carrying a payload within an NDEF message. Each payload is described +by its own set of parameters (see section 2.4). + +#### 2.3.3 Record Chunks + +A record chunk carries a chunk of a payload. Chunked payloads can be used to partition +dynamically generated content or very large entities into multiple subsequent record chunks +serialized within the same NDEF message. + +Chunking is not a mechanism for introducing multiplexing or data streaming into NDEF and it +MUST NOT be used for those purposes. It is a mechanism to reduce the need for outbound +buffering on the generating side. This is similar to the message chunking mechanism defined in +HTTP/1.1 [RFC 2616]. + +An NDEF message can contain zero or more chunked payloads. Each chunked payload is +encoded as an initial record chunk followed by zero or more middle record chunks and finally by + +NFC Data Exchange Format (NDEF) Page 8 + + +NDEF Mechanisms + +a terminating record chunk. Each record chunk is encoded as an NDEF record using the +following encoding rules: + +- The initial record chunk is an NDEF record with the CF (Chunk Flag) flag set (see section + 3.2.3). The type of the entire chunked payload MUST be indicated in the TYPE field + regardless of whether the PAYLOAD_LENGTH field value is zero or not. The ID field MAY + be used to carry an identifier of the entire chunked payload. The PAYLOAD_LENGTH field + of this initial record indicates the size of the data carried in the PAYLOAD field of the initial + record only, not the entire payload size (see section 2.4.1). +- Each middle record chunk is an NDEF record with the CF flag set indicating that this record + chunk contains the next chunk of data of the same type and with the same identifier as the + initial record chunk. The value of the TYPE_LENGTH and the IL fields MUST be zero and + the TNF (Type Name Format) field value MUST be 0x06 (Unchanged) (see section 3.2.6). + The PAYLOAD_LENGTH field indicates the size of the data carried in the PAYLOAD field + of this single middle record only (see section 2.4.1). +- The terminating record chunk is an NDEF record with the CF flag cleared, indicating that + this record chunk contains the last chunk of data of the same type and with the same identifier + as the initial record chunk. As with the middle record chunks, the value of the + TYPE_LENGTH and the IL fields MUST be zero and the TNF (Type Name Format) field + value MUST be 0x06 (Unchanged) (see section 3.2.6). The PAYLOAD_LENGTH field + indicates the size of the data carried in the PAYLOAD field of this terminating record chunk + (see section 2.4.1). + +A chunked payload MUST be entirely encapsulated within a single NDEF message. That is, a +chunked payload MUST NOT span multiple NDEF messages. As a consequence, neither an +initial nor a middle record chunk can have the ME (Message End) flag set. + +### 2.4 NDEF Payload Description................................................................................................ + +Each record contains information about the payload carried within it. This section introduces the +mechanisms by which these payloads are described. + +#### 2.4.1 Payload Length...................................................................................................... + +Regardless of the relationship of a record to other records, the payload length always indicates the +length of the payload encapsulated in this record. The length of the payload is indicated in the +PAYLOAD_LENGTH field. The PAYLOAD_LENGTH field is one octet for short records and +four octets for normal records. Short records are indicated by setting the SR bit flag to a value of 1 +(see section 3.2.4). Zero is a valid payload length. + +#### 2.4.2 Payload Type......................................................................................................... + +The payload type of a record indicates the kind of data being carried in the payload of that record. +This may be used to guide the processing of the payload at the discretion of the user application. +The type of the first record, by convention, SHOULD provide the processing context not only for +the first record but for the whole NDEF message. Additional context for processing the message +MAY be provided, for example, by the link layer service access point (LSAP) or transport service +port (e.g. TCP, UDP, etc) at which the message was received and by other communication +parameters. + +It is important to emphasize that NDEF mandates no specific processing model for NDEF +messages. The usage of the payload types is entirely at the discretion of the user application. The + +NFC Data Exchange Format (NDEF) Page 9 + + +NDEF Mechanisms + +comments regarding usage above should be taken as guidelines for building processing +conventions, including mappings of higher level application semantics onto NDEF. + +The format of the TYPE field value is indicated using the TNF (Type Name Format) field (see +section 3.2.6). This specification supports TYPE field values in the form of NFC Forum well- +known types, NFC Forum external types, absolute URIs [RFC 3986], and MIME media-type +constructs. The first allows for NFC Forum specified payload types supporting NFC Forum +reference applications [NFC RTD]; URIs provide for decentralized control of the value space; +media types allow NDEF to take advantage of the media type value space maintained by IANA +[RFC 1700]. + +The media type registration process is outlined in RFC 2048 [RFC 2048]. Use of non-registered +media types is discouraged. The URI scheme registration process is described in RFC 2717 [RFC +2717]. It is RECOMMENDED that only well-known URI schemes registered by IANA be used +(see [URI SCHEME] for a current list). + +URIs can be used for message types that are defined by URIs. Records that carry a payload with +an XML-based message type MAY use the XML namespace identifier of the root element as the +TYPE field value. A SOAP/1.1 message, for example, may be represented by the URI + +``` +http://schemas.xmlsoap.org/soap/envelope/ +``` +NOTE: Encoding of URI characters which fall outside the US-ASCII range is left to the NDEF +application. Therefore, an NDEF parser must not assume any particular encoding for this field. +See [RFC 3986] and the specifications of particular protocol schemes (e.g. HTTP, URN, etc.) for +more information on parsing of URIs and character encoding requirements for non-ASCII +characters. + +Records that carry a payload with an existing, registered media type SHOULD carry a TYPE +field value of that media type. The TYPE field indicates the type of the payload; it does NOT +refer to a MIME message that contains an entity of the given type. For example, the media type + +``` +image/jpeg +``` +indicates that the payload is an image in JPEG format using JFIF encoding as defined by RFC +2046 [RFC 2046]. Similarly, the media type + +``` +message/http +``` +indicates that the payload is an HTTP message as defined by RFC 2616 [RFC 2616]. The value + +``` +application/xml; charset=“utf-16” +``` +indicates that the payload is an XML document as defined by RFC 3023 [RFC3023]. + +#### 2.4.3 Payload Identification.......................................................................................... + +The optional payload identifier allows user applications to identify the payload carried within an +NDEF record. By providing a payload identifier, it becomes possible for other payloads +supporting URI-based linking technologies to refer to that payload. NDEF does not mandate any +particular linking mechanism or format but leaves this to the user application to define in the +language it prefers. + +It is important that payload identifiers are maintained so that references to those payloads are not +broken. If records are repackaged, for example, by an intermediate application, then that +application is responsible for ensuring that the linked relationship between identified payloads is +preserved. + +NFC Data Exchange Format (NDEF) Page 10 + + +NDEF Mechanisms + +### 2.5 NDEF Mechanisms Test Requirements........................................................................... + +This section identifies the testable requirements of the NDEF mechanisms defined in chapter 2. +The purpose of this section and the table below is to guide the development of conformance tests +and does not supersede the normative requirements presented in the other sections of this chapter. + +``` +Test Requirements 1. NDEF Mechanisms Test Requirements +``` +Message requirements + +Each NDEF message MUST be exchanged in its entirety. + +The first record in a message is marked with the MB (Message Begin) flag set. + +The last record in the message is marked with the ME (Message End) flag set. + +NDEF messages MUST NOT overlap; that is, the MB and the ME flags MUST NOT be used to +nest NDEF messages. + +Record chunk requirements + +Each chunked payload is encoded as an initial record chunk followed by 0 or more middle record +chunks and finally by a terminating record chunk. + +The initial record chunk is an NDEF record with the CF (Chunk Flag) flag set. + +The type of the entire chunked payload MUST be indicated in the TYPE field of the initial record +chunk. + +The PAYLOAD_LENGTH field of the initial record indicates the size of the data carried in the +PAYLOAD field of the initial record only, not the entire payload size. + +Each middle record chunk is an NDEF record with the CF flag set. + +For each middle record chunk the value of the TYPE_LENGTH and the IL fields MUST be 0. + +For each middle record chunk the TNF (Type Name Format) field value MUST be 0x +(Unchanged). + +For each middle record chunk, the PAYLOAD_LENGTH field indicates the size of the data +carried in the PAYLOAD field of this single record only. + +The terminating record chunk is an NDEF record with the CF flag cleared. + +For the terminating record chunk, the value of the TYPE_LENGTH and the IL fields MUST be 0. + +For the terminating record chunk, the TNF (Type Name Format) field value MUST be 0x +(Unchanged). + +For the terminating record chunk, the PAYLOAD_LENGTH field indicates the size of the data +carried in the PAYLOAD field of this record only. + +A chunked payload MUST be entirely encapsulated within a single NDEF message. + +An initial record chunk MUST NOT have the ME (Message End) flag set. + +A middle record chunk MUST NOT have the ME (Message End) flag set. + +NFC Data Exchange Format (NDEF) Page 11 + + +NDEF Mechanisms + +NDEF payload requirements + +The PAYLOAD_LENGTH field is four octets for normal records. + +The PAYLOAD_LENGTH field is one octet for records with an SR (Short Record) bit flag value +of 1. + +The PAYLOAD_LENGTH field of a short record MUST have a value between 0 and 255. + +The PAYLOAD_LENGTH field of a normal record MUST have a value between 0 and 2^32 -1. + +NFC Data Exchange Format (NDEF) Page 12 + + +The NDEF Specification + +## 3 The NDEF Specification.............................................................................. + +### 3.1 Data Transmission Order.................................................................................................. + +The order of transmission of the NDEF record described in this document is resolved to the octet +level. For diagrams showing a group of octets, the order of transmission of those octets is first left +to right and then top to bottom, as they are read in English. For example, in the diagram in Figure +2, the octets are transmitted in the order they are numbered. + ++--+--+--+--+--+--+--+--+ +| Octet 1 | ++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +| Octet 2 | Octet 3 | ++--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ +| Octet 4 | ++--+--+--+--+--+--+--+--+ +| Octet 5 | ++--+--+--+--+--+--+--+--+ + +``` +Figure 2. NDEF Octet Ordering +``` +Whenever an octet represents a numeric quantity, the leftmost bit in the diagram is the high order +or most significant bit. For each multi-octet field representing a numeric quantity defined by +NDEF, the leftmost bit of the whole field is the most significant bit. Such quantities are +transmitted in a big-endian manner with the most significant octet transmitted first. + +NFC Data Exchange Format (NDEF) Page 13 + + +The NDEF Specification + +### 3.2 Record Layout.................................................................................................................. + +NDEF records are variable length records with a common format illustrated in the figure below. +In the following sections, the individual record fields are described in more detail. + +``` +7 6 5 4 3 2 1 0 +``` +``` +MB ME CF SR IL TNF +``` +``` +TYPE LENGTH +``` +``` +PAYLOAD LENGTH 3 +``` +``` +PAYLOAD LENGTH 2 +``` +``` +PAYLOAD LENGTH 1 +``` +``` +PAYLOAD LENGTH 0 +``` +``` +ID LENGTH +``` +``` +TYPE +``` +``` +ID +``` +``` +PAYLOAD +``` +``` +Figure 3. NDEF Record Layout +``` +#### 3.2.1 MB (Message Begin)........................................................................................... + +The MB flag is a 1-bit field that when set indicates the start of an NDEF message (see section +2.3.1). + +#### 3.2.2 ME (Message End).............................................................................................. + +The ME flag is a 1-bit field that when set indicates the end of an NDEF message (see section +2.3.1). Note, that in case of a chunked payload, the ME flag is set only in the terminating record +chunk of that chunked payload (see section 2.3.3). + +#### 3.2.3 CF (Chunk Flag).................................................................................................. + +The CF flag is a 1-bit field indicating that this is either the first record chunk or a middle record +chunk of a chunked payload (see section 2.3.3 for a description of how to encode a chunked +payload). + +NFC Data Exchange Format (NDEF) Page 14 + + +The NDEF Specification + +#### 3.2.4 SR (Short Record)............................................................................................... + +The SR flag is a 1-bit field indicating, if set, that the PAYLOAD_LENGTH field is a single octet. +This short record layout is intended for compact encapsulation of small payloads which will fit +within PAYLOAD fields of size ranging between 0 to 255 octets. + +``` +7 6 5 4 3 2 1 0 +``` +``` +MB ME CF 1 IL TNF +``` +``` +TYPE LENGTH +``` +``` +PAYLOAD LENGTH +``` +``` +ID LENGTH +``` +``` +TYPE +``` +``` +ID +``` +``` +PAYLOAD +``` +``` +Figure 4. NDEF Short-Record Layout (SR=1) +``` +While it is tempting for implementers to choose one or the other record layout exclusively for a +given application, NDEF parsers MUST accept both normal and short record layouts. NDEF +generators MAY generate either record layout as they deem appropriate. A single NDEF message +MAY contain both normal and short records. + +#### 3.2.5 IL (ID_LENGTH field is present)....................................................................... + +The IL flag is a 1-bit field indicating, if set, that the ID_LENGTH field is present in the header as +a single octet. If the IL flag is zero, the ID_LENGTH field is omitted from the record header and +the ID field is also omitted from the record. + +NFC Data Exchange Format (NDEF) Page 15 + + +The NDEF Specification + +#### 3.2.6 TNF (Type Name Format).................................................................................. + +The TNF field value indicates the structure of the value of the TYPE field (see section 2.4.2 for a +description of the TYPE field and section 4 for a description of internationalization issues related +to the TYPE field). The TNF field is a 3-bit field with values defined in the table below: + +``` +Table 1. TNF Field Values +``` +``` +Type Name Format Value +``` +``` +Empty 0x +NFC Forum well-known type [NFC RTD] 0x +``` +``` +Media-type as defined in RFC 2046 [RFC 2046] 0x +Absolute URI as defined in RFC 3986 [RFC 3986] 0x +NFC Forum external type [NFC RTD] 0x +``` +``` +Unknown 0x +Unchanged (see section 2.3.3) 0x +``` +``` +Reserved 0x +``` +The value 0x00 (Empty) indicates that there is no type or payload associated with this record. +When used, the TYPE_LENGTH, ID_LENGTH, and PAYLOAD_LENGTH fields MUST be +zero and the TYPE, ID, and PAYLOAD fields are thus omitted from the record. This TNF value +can be used whenever an empty record is needed; for example, to terminate an NDEF message in +cases where there is no payload defined by the user application. + +The value 0x01 (NFC Forum well-known type) indicates that the TYPE field contains a value that +follows the RTD type name format defined in the NFC Forum RTD specification [NFC RTD]. + +The value 0x02 (media-type) indicates that the TYPE field contains a value that follows the +media-type BNF construct defined by RFC 2046 [RFC 2046]. + +The value 0x03 (absolute-URI) indicates that the TYPE field contains a value that follows the +absolute-URI BNF construct defined by RFC 3986 [RFC 3986]. + +The value 0x04 (NFC Forum external type) indicates that the TYPE field contains a value that +follows the type name format defined in [NFC RTD] for external type names. + +The value 0x05 (Unknown) SHOULD be used to indicate that the type of the payload is +unknown. This is similar to the “application/octet-stream” media type defined by MIME [RFC +2046]. When used, the TYPE_LENGTH field MUST be zero and thus the TYPE field is omitted +from the NDEF record. Regarding implementation, it is RECOMMENDED that an NDEF parser +receiving an NDEF record of this type, without further context to its use, provides a mechanism +for storing but not processing the payload (see section 4.2). + +The value 0x06 (Unchanged) MUST be used in all middle record chunks and the terminating +record chunk used in chunked payloads (see section 2.3.3). It MUST NOT be used in any other +record. When used, the TYPE_LENGTH field MUST be zero and thus the TYPE field is omitted +from the NDEF record. + +NFC Data Exchange Format (NDEF) Page 16 + + +The NDEF Specification + +There is no default value for the TNF field. Reserved (or unassigned) TNF field values are for +future use and MUST NOT be used. An NDEF parser that receives an NDEF record with an +unknown or unsupported TNF field value SHOULD treat it as 0x05 (Unknown). + +#### 3.2.7 TYPE_LENGTH................................................................................................. + +The TYPE_LENGTH field is an unsigned 8-bit integer that specifies the length in octets of the +TYPE field. The TYPE_LENGTH field is always zero for certain values of the TNF field (see +section 3.2.6). + +#### 3.2.8 ID_LENGTH....................................................................................................... + +The ID_LENGTH field is an unsigned 8-bit integer that specifies the length in octets of the ID +field. This field is present only if the IL flag is set to 1 in the record header. An ID_LENGTH of +zero octets is allowed and, in such cases, the ID field is omitted from the NDEF record. + +#### 3.2.9 PAYLOAD_LENGTH........................................................................................ + +The PAYLOAD_LENGTH field is an unsigned integer that specifies the length in octets of the +PAYLOAD field (the application payload). The size of the PAYLOAD_LENGTH field is +determined by the value of the SR flag (see section 3.2.4). + +If the SR flag is set, the PAYLOAD_LENGTH field is a single octet representing an 8-bit +unsigned integer. + +If the SR flag is clear, the PAYLOAD_LENGTH field is four octets representing a 32-bit +unsigned integer. Transmission order of the octets is MSB-first (see section 3.1). + +A payload length of 0 is allowed in which case the PAYLOAD field is omitted from the NDEF +record. Application payloads larger than 2^32 -1 octets can be accommodated by using chunked +payloads (see section 2.3.3). + +#### 3.2.10 TYPE................................................................................................................... + +The value of the TYPE field is an identifier describing the type of the payload (see section 2.4.2). +The value of the TYPE field MUST follow the structure, encoding, and format implied by the +value of the TNF field (see section 3.2.6). + +An NDEF parser receiving an NDEF record with a TNF field value that it supports but an +unknown TYPE field value SHOULD interpret the type identifier of that record as if the TNF +field value were 0x05 (Unknown). + +It is STRONGLY RECOMMENDED that the type identifier be globally unique and maintained +with stable and well-defined semantics over time. + +#### 3.2.11 ID......................................................................................................................... + +The value of the ID field is an identifier in the form of a URI reference [RFC 3986] (see sections +2.4.3 and 4.4). The required uniqueness of the message identifier is guaranteed by the generator. +The URI reference can be either relative or absolute; NDEF does not define a base URI which +means that user applications using relative URIs MUST provide an actual or a virtual base URI +(see [RFC 3986]). + +Middle and terminating record chunks (that is, records containing other than the initial chunk of a +chunked payload; see section 2.3.3) MUST NOT have an ID field. All other records MAY have +an ID field. + +NFC Data Exchange Format (NDEF) Page 17 + + +The NDEF Specification + +#### 3.2.12 PAYLOAD.......................................................................................................... + +The PAYLOAD field carries the payload intended for the NDEF user application. Any internal +structure of the data carried within the PAYLOAD field is opaque to NDEF. + +### 3.3 THE NDEF Specification Test Requirements.................................................................. + +This section identifies the testable requirements of the NDEF mechanisms defined in chapter 3. +The purpose of this section is to guide the development of conformance tests and does not +supersede the normative requirements presented in the other sections of this chapter. + +``` +Test Requirements 2. The NDEF Specification Test Requirements +``` +Data transmission order requirements + +Quantities are transmitted in a big-endian manner with the most significant octet transmitted +first. + +Record layout requirements + +NDEF parsers MUST accept both normal and short record layouts. + +NDEF parsers MUST accept single NDEF messages composed of both normal and short +records. + +If the IL flag is 1, the ID_LENGTH field MUST be present. + +If the IL flag is 0, the ID_LENGTH field MUST NOT be present. + +If the IL flag is 0, the ID field MUST NOT be present. + +The TNF field MUST have a value between 0x00 and 0x06. + +If the TNF value is 0x00, the TYPE_LENGTH, ID_LENGTH, and PAYLOAD_LENGTH +fields MUST be zero and the TYPE, ID, and PAYLOAD fields MUST be omitted from the +record. + +If the TNF value is 0x05 (Unknown), the TYPE_LENGTH field MUST be 0 and the TYPE +field MUST be omitted from the NDEF record. + +If the TNF value is 0x06 (Unchanged), the TYPE_LENGTH field MUST be 0 and the TYPE +field MUST be omitted from the NDEF record. + +The TNF value MUST NOT be 0x07. + +If the ID_LENGTH field has a value 0, the ID field MUST NOT be present. + +If the SR flag is 0, the PAYLOAD_LENGTH field is four octets, representing a 32-bit +unsigned integer, and the transmission order of the octets is MSB-first. + +If the SR flag is 1, the PAYLOAD_LENGTH field is a single octet representing an 8-bit +unsigned integer. + +If the PAYLOAD_LENGTH field value is 0, the PAYLOAD field MUST NOT be present. + +The value of the TYPE field MUST follow the structure, encoding, and format implied by the +value of the TNF field. + +Middle and terminating record chunks MUST NOT have an ID field. + +NFC Data Exchange Format (NDEF) Page 18 + + +Special Considerations + +## 4 Special Considerations............................................................................... + +### 4.1 Internationalization........................................................................................................... + +Identifiers used in NDEF such as URIs and MIME media-type constructs may provide different +levels of support for internationalization. Implementers are referred to RFC 2718 [RFC 2718] for +internationalization considerations of URIs, RFC 2046 [RFC 2046] for internationalization +considerations of MIME media types and RFC 2047 [RFC 2047] for internationalization of +message headers (MIME). + +### 4.2 Security............................................................................................................................. + +Implementers should pay special attention to the security implications of any record types that +can cause the remote execution of any actions in the recipient’s environment. Before accepting +records of any type, an application should be aware of the particular security implications +associated with that type. + +Security considerations for media types in general are discussed in RFC 2048 [RFC 2048] and in +the context of the “application” media types in RFC 2046 [RFC 2046]. + +### 4.3 Maximum Field Sizes....................................................................................................... + +The size of the PAYLOAD field and the values used in the ID field and the TYPE field are +limited by the maximum size of these fields. The maximum size of the PAYLOAD field is 2^32 -1 +octets in the normal NDEF record layout and 255 octets in the short record layout (see section +3.2.4). The maximum size of values in the ID and TYPE fields is 255 octets in both record +layouts. + +While messages formed to these maximal record and field sizes are considered well-formed, not +all user applications will have the ability or the need to handle payload content, payload IDs, or +types identifiers of these maximal sizes. NDEF parsers that are resource-constrained MAY +choose to reject messages that are not sized to fit their specific needs. + +However, NDEF parsers MUST NOT reject an NDEF message based solely on the value of the +SR flag. + +### 4.4 Use of URIs in NDEF...................................................................................................... + +NDEF uses URIs [RFC 3986] for some identifiers. To NDEF, a URI is simply a formatted string +that identifies—via name, location, or any other characteristic—a resource. + +The use of IP addresses in URIs SHOULD be avoided whenever possible (see RFC 1900 [RFC +1900]). However, when used, the literal format for IPv6 addresses in URIs as described by RFC +2732 [RFC 2732] SHOULD be supported. + +NDEF does not define any equivalence rules for URIs in general as these are defined by the +individual URI schemes and by RFC 3986 [RFC 3986]. However, because of inconsistencies +with respect to some URI equivalence rules in many current URI parsers, it is RECOMMENDED +that generators of NDEF messages rely only on the most rudimentary equivalence rules defined +by RFC 3986. + +NFC Data Exchange Format (NDEF) Page 19 + + +Special Considerations + +### 4.5 Special Consideration Test Requirements........................................................................ + +This section identifies the testable requirements of the NDEF mechanisms defined in chapter 4. +The purpose of this section and the table below is to guide the development of conformance tests +and does not supersede the normative requirements presented in the other sections of this chapter. + +``` +Test Requirements 3. Special Consideration Test Requirements +``` +An NDEF parser MUST NOT reject an NDEF message based solely on the value of the SR +flag. + +An NDEF parser MAY reject messages that include records with TYPE, ID, or PAYLOAD +fields larger than its design limits. + +NFC Data Exchange Format (NDEF) Page 20 + + +Revision History + +## A. Revision History.......................................................................................... + +The following table outlines the revision history of the NDEF Technical Specification. + +``` +Table 2. Revision History +``` +Document Name Revision and +Release Date + +``` +Status Change notice Supersedes +``` +NFCForum-TS- +NDEF_1.0 + +``` +1.0, July 2006 Final none +``` +NFC Data Exchange Format (NDEF) Page 21 + + +# NFC Record Type Definition (RTD) + +## Technical Specification + +## NFC Forum + +#### TM + +## RTD 1.0 + +## NFCForum-TS-RTD_1.0 + +## 2006-07-24 + + +##### RESTRICTIONS ON USE + +This specification is copyright © 2005-2006 by the NFC Forum, and was made available pursuant to a +license agreement entered into between the recipient (Licensee) and NFC Forum, Inc. (Licensor) and may +be used only by Licensee, and in compliance with the terms of that license agreement (License). If you are +not the Licensee, you are not authorized to make any use of this specification. However, you may obtain a +copy at the following page of Licensor's Website: [http://www.nfc-forum.org/resources/spec_license](http://www.nfc-forum.org/resources/spec_license) after +entering into and agreeing to such license terms as Licensor is then requiring. On the date that this +specification was downloaded by Licensee, those terms were as follows: + +1. LICENSE GRANT. + +Licensor hereby grants Licensee the right, without charge, to copy (for internal purposes only) and share +the Specification with Licensee's members, employees and consultants (as appropriate). This license grant +does not include the right to sublicense, modify or create derivative works based upon the Specification. + +2. NO WARRANTIES. + +THE SPECIFICATION IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL LICENSOR, ITS +MEMBERS OR ITS CONTRIBUTORS BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THE SPECIFICATION. + +3. THIRD PARTY RIGHTS. + +Without limiting the generality of Section 2 above, LICENSOR ASSUMES NO RESPONSIBILITY TO +COMPILE, CONFIRM, UPDATE OR MAKE PUBLIC ANY THIRD PARTY ASSERTIONS OF +PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS THAT MIGHT NOW OR IN THE +FUTURE BE INFRINGED BY AN IMPLEMENTATION OF THE SPECIFICATION IN ITS CURRENT, +OR IN ANY FUTURE FORM. IF ANY SUCH RIGHTS ARE DESCRIBED ON THE SPECIFICATION, +LICENSOR TAKES NO POSITION AS TO THE VALIDITY OR INVALIDITY OF SUCH +ASSERTIONS, OR THAT ALL SUCH ASSERTIONS THAT HAVE OR MAY BE MADE ARE SO +LISTED. + +4. TERMINATION OF LICENSE. + +In the event of a breach of this Agreement by Licensee or any of its employees or members, Licensor shall +give Licensee written notice and an opportunity to cure. If the breach is not cured within thirty (30) days +after written notice, or if the breach is of a nature that cannot be cured, then Licensor may immediately or +thereafter terminate the licenses granted in this Agreement. + +5. MISCELLANEOUS. + +All notices required under this Agreement shall be in writing, and shall be deemed effective five days from +deposit in the mails. Notices and correspondence to the NFC Forum address as it appears below. This +Agreement shall be construed and interpreted under the internal laws of the United States and the +Commonwealth of Massachusetts, without giving effect to its principles of conflict of law. + +NFC Forum, Inc. +401 Edgewater Place, Suite 600 +Wakefield, MA, USA 01880 + + +Contents + +## Contents + +#### 1 Introduction....................................................................................................1 + +#### 1.1 Objectives........................................................................................................................... 1 + +#### 1.2 Purpose ............................................................................................................................... 1 + +#### 1.2.1 Mission Statement and Goals................................................................................ 1 + +#### 1.3 References.......................................................................................................................... 2 + +#### 1.4 Administration.................................................................................................................... 2 + +#### 1.5 Special Word Usage........................................................................................................... 2 + +#### 1.6 Name and Logo Usage....................................................................................................... 3 + +#### 1.7 Intellectual Property........................................................................................................... 3 + +#### 1.8 Glossary.............................................................................................................................. 3 + +#### 2 Record Types.................................................................................................5 + +#### 2.1 NFC Forum Well-known Type.......................................................................................... 5 + +#### 2.1.1 NFC Forum Global Type...................................................................................... 5 + +#### 2.1.2 NFC Forum Local Type........................................................................................ 6 + +#### 2.2 NFC Forum External Type................................................................................................. 6 + +#### 2.3 Record Types Generic Requirements................................................................................. 7 + +#### 3 RTD Type Names...........................................................................................8 + +#### 3.1 Binary Encoding................................................................................................................. 9 + +#### 3.2 Percent Encoding in NFC Forum Types............................................................................ 9 + +#### 3.3 Equivalence of Record Type Names.................................................................................. 9 + +#### 3.4 RTD Type Names Requirements...................................................................................... 10 + +#### 4 Error Handling.............................................................................................11 + +#### 4.1 Illegal characters............................................................................................................... 11 + +#### 4.2 Unknown Record Types................................................................................................... 11 + +#### 4.3 Error Handling Requirements.......................................................................................... 11 + +#### A. Character Set for Record Types.................................................................12 + +#### B. Record Type Name Examples....................................................................13 + +#### C. Discussion on Associating Records.........................................................14 + +#### D. Revision History..........................................................................................16 + +## Figures + +#### Figure 1. NDEF Messages (Multiple)........................................................................................... 14 + +#### Figure 2. NDEF Message with Metadata...................................................................................... 14 + +NFC Record Type Definition (RTD) Page i + + +Tables + +## Tables + +#### Table 1. Definitions......................................................................................................................... 3 + +#### Table 2. Acronyms.......................................................................................................................... 4 + +#### Table 3. ASCII Character Chart.................................................................................................... 12 + +#### Table 4. Translating Record Type Names into Binary Representation......................................... 13 + +#### Table 5. Revision History.............................................................................................................. 16 + +## Test Requirements + +#### Test Requirements 1. Record Types Generic Requirements........................................................... 7 + +#### Test Requirements 2. RTD Type Names Requirements................................................................ 10 + +#### Test Requirements 3. Error Handling Requirements..................................................................... 11 + +NFC Record Type Definition (RTD) Page ii + + +Introduction + +## 1 Introduction + +The International Standard ISO/IEC 18092, Near Field Communication - Interface and Protocol +(NFCIP-1), defines an interface and protocol for simple wireless interconnection of closely +coupled devices operating at 13.56 MHz. + +The NFC Data Exchange Format (NDEF) specification defines a data format to exchange +information between an NFC Forum Device and another NFC Forum Device or an NFC Forum +Tag. The information that can be exchanged by means of NDEF may describe which services an +NFC Forum Device or NFC Forum Tag offers, it may contain application or service-specific +parameters and meta-data, or it may describe capabilities of NFC Forum Devices or NFC Forum +Tags. + +NDEF supports the use of standardized MIME content types and URIs to describe record content +which is specified outside of the NFC Forum. This specification describes two NFC Forum +specific types, known as “NFC Forum Well Known Types” and “NFC external types”. + +### 1.1 Objectives + +The NFC Data Exchange Format (NDEF) specification is a common data format for NFC Forum +Devices. + +The NFC Data Exchange Format specification defines the NDEF data structure format as well as +rules to construct a valid NDEF packet as a collection of NDEF records. Furthermore, it defines +the mechanism for constructing unique NDEF record type names by different parties, including a +format for NFC Forum well-known types. + +The NDEF specification defines only the data structure format to exchange application or service +specific data in an interoperable way, and it does not define any record types in detail. Specific +record types are defined in separate documents. + +The first part of this specification considers the type format of the NFC Forum well-known +types—that is, the contents of an NDEF Type field when the “TNF” header field value is 0x01 +(NFC Well-known Type). + +The second part of this specification considers the third party extension type known as an “NFC +external type”, which is signified by the TNF header field value of 0x04. + +### 1.2 Purpose + +#### 1.2.1 Mission Statement and Goals + +It is the mission of the NFC Forum to ensure interoperability of the NFC technology in a broad +variety of devices. The RTD specification is intended to support NFC-specific application and +service frameworks by providing a means for reservation of well-known record types, and third +party extension types. + +The RTD specification provides guidelines for the specification of well-known types for inclusion +in NDEF messages exchanged between NFC Forum devices and between NFC Forum Devices +and NFC Forum Tags. + +Actual type registrations are not provided in this specification but are expected to be included in +other documents. + +NFC Record Type Definition (RTD) Page 1 + + +Introduction + +### 1.3 References + +[ASCII] ANSI X3.4-1986, Coded Character Set 7-bit American Standard Code +for Information Interchange + +[ISO/IEC 18092] Information Technology- Telecommunications and information +exchange between systems- Near Field Communication - Interface and +Protocol (NFCIP-1). + +[NDEF] NFC Data Exchange Format, NFC Forum, 2006. + +[NFC Best] Best Practices for NFC Forum Terminology, NFC Forum, Technical +Committee Document. + +[RFC 2119] S. Bradner, “Key words for use in RFCs to Indicate Requirement +Levels”, RFC 2119, Harvard University, March 1997. +[http://www.apps.ietf.org/rfc/rfc2119.html](http://www.apps.ietf.org/rfc/rfc2119.html) + +[RFC 2046] N. Freed, N. Borenstein, “Multipurpose Internet Mail Extensions +(MIME) Part Two: Media Types” RFC 2046, Innosoft, First Virtual, +November 1996. + +[RFC 2141] R. Moats, “URN SYNTAX”, May 1997. + +[RFC 2234] D. Crocker, P. Overell, “Augmented BNF for Syntax Specifications: +ABNF”, November 1997. + +[RFC 3986] T. Berners-Lee, R. Fielding, L. Masinter, “Uniform Resource Identifiers +(URI): Generic Syntax”, RFC 3986, MIT/LCS, U.C. Irvine, Xerox +Corporation, January 2005. [http://www.apps.ietf.org/rfc/rfc3986.html](http://www.apps.ietf.org/rfc/rfc3986.html) + +### 1.4 Administration + +The NFC Record Type Definition (RTD) Specification is an open specification supported by the +Near Field Communication Forum, Inc., located at: + +401 Edgewater Place, Suite 600 +Wakefield, MA, 01880 + +Tel.: +1 781-876-8955 +Fax: +1 781-224-1239 + +[http://www.nfc-forum.org](http://www.nfc-forum.org) + +The Reference Applications Framework technical working group maintains this specification. + +This specification has been contributed to by Microsoft, Nokia, Panasonic, Philips, and Sony. + +### 1.5 Special Word Usage + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, +“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this +document are to be interpreted as described in RFC 2119. + +NFC Record Type Definition (RTD) Page 2 + + +Introduction + +### 1.6 Name and Logo Usage + +The Near Field Communication Forum’s policy regarding the use of the trademarks NFC Forum +and the NFC Forum logo is as follows: + +- Any company MAY claim compatibility with NFC Forum specifications, whether a member + of the NFC Forum or not. +- Permission to use the NFC Forum logos is automatically granted to designated members only + as stipulated on the most recent Membership Privileges document, during the period of time + for which their membership dues are paid. +- Member’s distributors and sales representatives MAY use the NFC Forum logo in promoting + member’s products sold under the name of the member. +- The logo SHALL be printed in black or in color as illustrated on the Logo Page that is + available from the NFC Forum at the address above. The aspect ratio of the logo SHALL be + maintained, but the size MAY be varied. Nothing MAY be added to or deleted from the + logos. +- Since the NFC Forum name is a trademark of the Near Field Communication Forum, the + following statement SHALL be included in all published literature and advertising material in + which the name or logo appears: + NFC Forum and the NFC Forum logo are trademarks of the Near Field Communication + Forum. + +### 1.7 Intellectual Property + +The NFC Record Type Definition (RTD) Specification conforms to the Intellectual Property +guidelines specified in the NFC Forum's Intellectual Property Right Policy, as approved on +November 9, 2004 and outlined in the NFC Forum Rules of Procedures, as approved on +December 17, 2004. + +### 1.8 Glossary + +This section defines all relevant terms and acronyms used in this specification. + +``` +Table 1. Definitions +``` +NDEF application + +``` +The logical, higher-layer application on an NFC Forum Device using NDEF to format +information for exchange with other NFC Forum Devices or NFC Forum Tags. Also user +application or NDEF user application. +``` +NDEF message + +``` +The basic message construct defined by this specification. An NDEF message contains +one or more NDEF records. +``` +NDEF record + +``` +An NDEF record contains a payload described by a type, a length, and an optional +identifier. +``` +NFC Record Type Definition (RTD) Page 3 + + +Introduction + +NDEF payload + +``` +The application data carried within an NDEF record. +``` +NDEF generator + +``` +An entity or module that encapsulates application-defined payloads within NDEF +messages. +``` +NDEF parser + +``` +An entity or module that parses NDEF messages and hands off the payloads to an NDEF +application. +``` +User Application + +``` +See NDEF Application. +``` +``` +Table 2. Acronyms +``` +NDEF NFC Data Exchange Format. See NFC DATA EXCHANGE FORMAT +(NDEF, Re-Draft Revision 0.96), NFC Forum Draft, October 2005 + +NID Namespace Identifier. Identifies uniquely an URN namespace. Please see +[RFC 2141] for a full definition. + +NSS Namespace Specific String. The rest of the URN after the NID. See +[RFC 2141] for a full definition. + +MIME Multipurpose Internet Mail Extensions. A standard specifying the format +of strongly-typed data transferred over the Internet. Defined in [RFC +2045-2049] + +RTD Record Type Definition. An NFC-specific record type and type name +which may be carried in an NDEF record with a TNF field value of 0x01 +(NFC Well-Known Type). + +URI Uniform Resource Identifier. A compact sequence of characters that +identifies an abstract or physical resource. [RFC 3986] Uniform +Resource Names (URNs) and Uniform Resource Locators (URLs) are +both forms of URI. + +URN Uniform Resource Name. A particular type of URI that is defined in +[RFC 2141]. + +NFC Record Type Definition (RTD) Page 4 + + +Record Types + +## 2 Record Types + +The record type string field of an NDEF record contains the name of the record type (called +“record type name”). Record type names are used by NDEF applications to identify the semantics +and structure of the record content. + +Record type names may be specified in several formats, called Type Name Formats, as signified +by the TNF field of the NDEF record header. Record type names may be MIME media types, +absolute URIs, NFC Forum external type names, or may be well-known NFC type names +(RTD’s, the subject of this specification). + +Each record type definition is identified by its record type name. + +Record type names can be defined by the NFC Forum and by third parties. In the following +sections, the rules governing the RTD type name space are defined. + +### 2.1 NFC Forum Well-known Type + +The NFC Forum Well-known Type is a dense format designed for tags and creating primitives for +certain common types. It is meant to be used in case there is no equivalent URI or MIME type +available, or when message size limitations require a very short name. + +An NFC Forum Well Known Type is identified inside an NDEF message by setting the TNF field +of a record to the value of 0x01, as defined in the NDEF specification. + +An NFC Forum Well-Known Type is a URN as defined by [RFC 2141], with the namespace +identifier (NID) “nfc”. + +The Namespace Specific String of the NFC Well Known Type URN is prefixed with “wkt:”. +However, when encoded in an NDEF message, the Well Known Type MUST be written as a +relative-URI construct [RFC 3896], omitting the NID and the “wkt:” –prefix. + +For example, the Well Known Type “urn:nfc:wkt:a” would be encoded as “a”. The Well Known +Type “urn:nfc:wkt:Very-complicated-type” would be encoded as “Very-complicated-type”. + +There are two kinds of NFC Forum Well Known Types detailed in the sections below. For +brevity, we exclude the URN NID and the NSS prefix from the examples. + +For a definition of the character ranges used in the Well Known Types, please see chapter 3. + +#### 2.1.1 NFC Forum Global Type + +The NFC Forum is responsible for defining and managing NFC Forum Global Types. Other +parties MUST NOT define or redefine these. + +An NFC Forum Global Type SHALL start with an upper-case letter (character range ). + +Examples of NFC Forum Global Types: “U”, “Cfq”, “Trip-to-Texas”. + +NFC Record Type Definition (RTD) Page 5 + + +Record Types + +#### 2.1.2 NFC Forum Local Type + +NFC Forum Local Types SHALL start with a character in sets or . + +NFC Forum Local Types are available for use within the context of another record. A processing +application MUST NOT process these types when application context is not available. Local +types are used whenever the burden of using a long, domain name–based external type is too +much, and there is no need to define its meaning outside of the local context. + +An RTD or an application defines the context for the interpretation for a Local Type. A Local +Type MAY be reused by another application in a different context and with different content. + +Examples of NFC Forum Local Types: “0”, “foo”, “u”. + +### 2.2 NFC Forum External Type + +The External Type Name is meant for organizations that wish to self-allocate a name space to be +used for their own purposes. + +An External Type is identified in an NDEF record by setting the TNF field value to 0x04, as +defined in the NDEF specification [NDEF]. + +The External Type is, much like a Well Known Type, an URN, with the NID of “nfc”. However, +the NSS specific part is put into another namespace named “ext”. A canonical version of the +External Type Name would look like: + +``` +“urn:nfc:ext:example.com:f” +``` +The External Type Name MUST be formed by taking the domain name of the issuing +organization, adding a colon, and then adding the type name as managed by the organization. + +As with Well Known Types, the binary encoding of External Type Name inside NDEF messages +MUST omit the NID and the NSS prefix of “ext”. + +NFC Record Type Definition (RTD) Page 6 + + +Record Types + +### 2.3 Record Types Generic Requirements + +``` +Test Requirements 1. Record Types Generic Requirements +``` +NFC Forum standardized types defined as RTD records SHALL use NFC Forum Well- +Known type names. + +When packaged into NDEF records, NFC Forum standardized types defined as RTD records +SHALL be signified in the NDEF record header by the Type Name Format (TNF) field value +of 0x01 (NFC Forum Well-Known Type). + +An NFC Forum Well Known Type SHALL be a URN with the “urn:nfc:wkt:” prefix. + +An NFC Forum Global Type MUST NOT be defined or redefined by other parties than NFC +Forum. + +An NFC Forum Global Type SHALL start with a character in the range as defined in +Chapter 3. + +An NFC Forum Local Type SHALL start with a character in the range or +as defined in Chapter 3. + +A processing application MUST NOT process a NFC Forum Local Type if an application +context is not available. + +An NFC Forum Local Type MAY be reused by another application in a different context and +with different content. + +An NFC Forum External Type SHALL be identified with the TNF field value of 0x04. + +An NFC Forum External Type SHALL be a URN with the prefix of “urn:nfc:ext:”. + +In the NDEF binary format, the URN prefix MUST NOT be used. + +The External Type MUST be formed by taking the domain name of the issuing organization, +adding a colon, and then adding a type name. An External Type MUST include a colon and a +non-zero length type name. + +NFC Record Type Definition (RTD) Page 7 + + +RTD Type Names + +## 3 RTD Type Names + +This section defines the normative requirements for the NFC Forum Well-Known Type Names +(below: RTD-URI). The language used is the ABNF format as defined in RFC 2234 [RFC 2234]. + +RTD-URI = “urn:nfc:” nfc-nss + +nfc-nss = wkt-nss / external-nss + +wkt-nss = wkt-id “:” WKT-type + +external-nss = external-id “:” external-type + +wkt-id = “wkt” + +external-id = “ext” + +WKT-type = local / global + +local = ( lower / number ) *WKT-char + +global = upper *WKT-char + +external-type = dns-part “:” name-part + +dns-part = 1*DNS-char + +name-part = 1*WKT-char + +WKT-char = upper / lower / number / other + +DNS-char = upper / lower / number / “.” / “-” + +upper = “A” / “B” / “C” / “D” / “E” / “F” / “G” / “H” / +“I” / “J” / “K” / “L” / “M” / “N” / “O” / “P” / +“Q” / “R” / “S” / “T” / “U” / “V” / “W” / “X” / +“Y” / “Z” + +lower = “a” / “b” / “c” / “d” / “e” / “f” / “g” / “h” / +“i” / “j” / “k” / “l” / “m” / “n” / “o” / “p” / +“q” / “r” / “s” / “t” / “u” / “v” / “w” / “x” / +“y” / “z” + +number = “0” / “1” / “2” / “3” / “4” / “5” / “6” / “7” / +“8” / “9” + +other = “(“ / “)” / “+” / “,” / “-” / +“:” / “=“ / “@” / “;” / “$” / +“_” / “!” / “*” / “'“ / “.” + +reserved = “%” / “/” / “?” / “#” + +NFC Record Type Definition (RTD) Page 8 + + +RTD Type Names + +### 3.1 Binary Encoding + +The binary encoding of Well Known Types and External Type Names for NDEF MUST be done +according to the ASCII chart in Appendix A. + +The URN NID and the NFC NSS prefixes MUST NOT be included in the binary NDEF format. +(However, if RTDs are used in other formats, such as XML, the URNs SHOULD be given in the +absolute URN format.) + +NOTE: This specification does not define legal characters for any particular record content. +Record content is specified in other documents, specific to those record types. + +### 3.2 Percent Encoding in NFC Forum Types + +To help define equivalence rules for NFC Forum Well Known Types, NFC Forum will not issue +a Global Type Name using percent-encoding as defined in [RFC 2141]. Any Local Type Name +used by third parties MUST NOT use the percent encoding. + +External Types SHOULD NOT use the percent encoding. However, an application using such an +external type MUST first encode the string in UTF-8 before converting it to the percent encoding. + +### 3.3 Equivalence of Record Type Names + +The comparison of record type names is done on a character-by-character basis. + +Two Well Known Type names MUST be compared in a case-sensitive manner. Because of the +fact that the encoding is fixed to US-ASCII, it also implies that two Well Known Types MUST be +considered equivalent if and only if their binary representations are identical. + +Example: + +“Foobar” +“fooBar” +“fOoBaR” +“foobar” + +The four examples above are all different Well Known Type names. + +Two External Type Names MUST be compared in a case-insensitive manner. Example: + +“example.com:foobar” +“Example.com:foobar” +“Example.COM:Foobar” +“eXaMpLe.CoM:fOoBaR” + +The four examples above represent all the same External Type Name. + +NFC Record Type Definition (RTD) Page 9 + + +RTD Type Names + +### 3.4 RTD Type Names Requirements + +``` +Test Requirements 2. RTD Type Names Requirements +``` +The binary encoding of Well Known Types (including Global and Local Names) and External +Type names MUST be done according to the ASCII chart in Appendix A. + +Well Known Types (including Global and Local Names) MUST NOT use the percent- +encoding as defined by RFC 2141. + +External types SHOULD NOT use the percent encoding as defined by RFC 2141. + +Two Well Known Types (including Global and Local Names) MUST be compared on a case- +sensitive, character-by-character basis. In other words, two Well Known Types MUST be +considered equal if and only if their binary representations are identical. + +Two External Types MUST be compared on a case insensitive, character-by-character basis. + +NFC Record Type Definition (RTD) Page 10 + + +Error Handling + +## 4 Error Handling + +### 4.1 Illegal characters + +A record with a type name containing characters outside of the valid range of characters defined +in Chapter 3 MUST be ignored. + +### 4.2 Unknown Record Types + +Applications MUST ignore records which have a Well Known Type or an External Type that +they do not recognize. + +### 4.3 Error Handling Requirements + +``` +Test Requirements 3. Error Handling Requirements +``` +Any character not defined as a valid character in Chapter 3 SHALL be considered an illegal +character in a record type name. + +Records containing illegal characters in the record type name MUST be ignored. + +An application that does not recognize a record type name MUST ignore the entire record. + +NFC Record Type Definition (RTD) Page 11 + + +``` +Character Set for Record Types +``` +## A. Character Set for Record Types + +``` +Record type names SHALL be formed of characters from of the US ASCII [ASCII] character set. +Characters in the range [0-31] and 127 decimal, as shown in the following table, SHALL NOT be +used in record type names. +Table 3. ASCII Character Chart +``` +Binary Dec Hex Graph. Binary Dec Hex Graph. Binary Dec Hex Graph. + +0010 0000 32 20 (blank)^ 0100 0000 64 40 @^ 0110 0000 96 60 ` + +0010 0001 33 21!^ 0100 0001 65 41 A^ 0110 0001 97 61 a + +0010 0010 34 22 “^ 0100 0010 66 42 B^ 0110 0010 98 62 b + +0010 0011 35 23 #^ 0100 0011 67 43 C^ 0110 0011 99 63 c + +0010 0100 36 24 $^ 0100 0100 68 44 D^ 0110 0100 100 64 d + +0010 0101 37 25 %^ 0100 0101 69 45 E^ 0110 0101 101 65 e + +0010 0110 38 26 &^ 0100 0110 70 46 F^ 0110 0110 102 66 f + +0010 0111 39 27 ’^ 0100 0111 71 47 G^ 0110 0111 103 67 g + +0010 1000 40 28 (^ 0100 1000 72 48 H^ 0110 1000 104 68 h + +0010 1001 41 29 )^ 0100 1001 73 49 I^ 0110 1001 105 69 i + +0010 1010 42 2A *^ 0100 1010 74 4A J^ 0110 1010 106 6A j + +0010 1011 43 2B +^ 0100 1011 75 4B K^ 0110 1011 107 6B k + +0010 1100 44 2C , , 0100 1100 76 4C L^ 0110 1100 108 6C l + +0010 1101 45 2D - 0100 1101 77 4D M^ 0110 1101 109 6D m + +0010 1110 46 2E.^ 0100 1110 78 4E N^ 0110 1110 110 6E n + +0010 1111 47 2F /^ 0100 1111 79 4F O^ 0110 1111 111 6F o + +0011 0000 48 30 0 0101 0000 80 50 P^ 0111 0000 112 70 p + +0011 0001 49 31 1 0101 0001 81 51 Q^ 0111 0001 113 71 q + +0011 0010 50 32 2 0101 0010 82 52 R^ 0111 0010 114 72 r + +0011 0011 51 33 3 0101 0011 83 53 S^ 0111 0011 115 73 s + +0011 0100 52 34 4 0101 0100 84 54 T^ 0111 0100 116 74 t + +0011 0101 53 35 5 0101 0101 85 55 U^ 0111 0101 117 75 u + +0011 0110 54 36 6 0101 0110 86 56 V^ 0111 0110 118 76 v + +0011 0111 55 37 7 0101 0111 87 57 W^ 0111 0111 119 77 w + +0011 1000 56 38 8 0101 1000 88 58 X^ 0111 1000 120 78 x + +0011 1001 57 39 9 0101 1001 89 59 Y^ 0111 1001 121 79 y + +0011 1010 58 3A :^ 0101 1010 90 5A Z^ 0111 1010 122 7A z + +0011 1011 59 3B ;^ 0101 1011 91 5B [^ 0111 1011 123 7B { + +0011 1100 60 3C <^ 0101 1100 92 5C \^ 0111 1100 124 7C | + +0011 1101 61 3D =^ 0101 1101 93 5D ]^ 0111 1101 125 7D } + +0011 1110 62 3E >^ 0101 1110 94 5E ^^ 0111 1110 126 7E ~ + +0011 1111 63 3F?^ 0101 1111 95 5F _^ + +``` +NFC Record Type Definition (RTD) Page 12 +``` + +Record Type Name Examples + +## B. Record Type Name Examples + +The contents of this appendix are informative and describe examples for encoding and comparing +record type names into their binary representation. + +An example of translating a record type name into binary representation: + +``` +Table 4. Translating Record Type Names into Binary Representation +``` +``` +String Representation Binary Representation (as hexadecimal) +Sms 53 6D 73 +``` +``` +sms 73 6D 73 +``` +To encode the binary representation of the type names, each character from the string +representation is replaced by its binary value from Appendix A. + +In this example, the two record type names are considered non-equivalent since their binary +representations are not identical. The case-sense of letters in the string, white space, and other +language comparison rules are not considered when comparing type strings for equivalence. Only +the binary representations are considered. + +NFC Record Type Definition (RTD) Page 13 + + +Discussion on Associating Records + +## C. Discussion on Associating Records + +The contents of this appendix are informative. + +There are two basic ways to associate NDEF records to each other. The first one is called +“association by reference”, which is amounts to a flat hierarchy or a list of objects. + +When associating records by reference, the context is typically given by the first record in the +message. This is the same association model that is used by MIME. For example, if you wish to +represent an email message with two PNG attachments as an NDEF message, you first send the +email message in one record (typed message/rfc822), then the first PNG image as a separate +record (image/png), and the second PNG image (again, image/png). To illustrate: + +``` +NDEF MESSAGE +Email (message/rfc822) Pic1.png (image/png) Pic2.png (image/png) +``` +``` +Figure 1. NDEF Messages (Multiple) +``` +This method allows an application to lift the PNG images off the message, even if it does not +understand the email message. In general, when designing your own record types, you should +choose association by reference if your message parts would be valuable even on their own, i.e., +even if the context is not understood. Association by reference is also a good model if you are +moving a large amount of data because it allows you to take advantage of the chunking feature of +NDEF. In addition, it also allows the processing to start at the receiver end before the message is +finished (this is one of the reasons why it is good to declare the context at the beginning of the +message). + +The second way is called “association by containment”. This is a hierarchical model (not entirely +unlike XML or HTML), where the content portion of an NDEF records contains an NDEF +message. This is very useful in the case where you wish to imply a stronger relationship between +records, or need to serialize information that is already in a hierarchical format. Also, if you are +going to send multiple objects of the same type within the message, you probably wish to use an +containment model, and then string them together in a list(so yes, it is possible and very sensible +to mix these models). + +For example, the Smart Poster record defines a URI plus some added metadata about that URI. +The added metadata is not useful to an application without the URI itself, and in fact, it would be +relatively meaningless. To illustrate: + +``` +NDEF Message +Sp (Smart Poster) application/vcard +URI Text Action Configuration vCard data +``` +``` +Figure 2. NDEF Message with Metadata +``` +In this case, there are two records in the NDEF message. The first one is a Smart Poster +containing a URI, a Text record for a title, an action, and a configuration record; whereas the +other one is just a normal vCard (using the vCard standard). (In this case, there is no particular +context defined for the vCard, so an application may either ignore it or use it for some purpose; +this is an implementation detail. In general, putting records describing different things and +assuming some particular context or processing model will probably result in interoperability +trouble.) + +NFC Record Type Definition (RTD) Page 14 + + +Discussion on Associating Records + +Anyway, since the Text, Action, and Configuration are so tightly coupled with the URI (the URI +might not even be fetchable without the proper configuration, if the config defines a local access +point), they work better using a containment model than a reference model. + +Neither of these examples displayed any use of the ID field, which can be used in both models +with equal efficiency. In association by reference, the first record typically lists the IDs that it +uses and defines the context that way; in association by containment, the IDs would typically be +used to signify the role of a record (e.g., “A record with an ID of 'config' shall be used for +defining an access point.”) + +Of course, an application is free to mix-and-match these association types. There is no hard-and- +fast rule to say which one is better in a given situation, and as designed, this allows maximum +flexibility to the application developer. + +A third, but deprecated, practice would be using ordering (i.e., record #1 would always signify +something, record #2 something else, record #3 again something else), but this, in general, is not +a good idea, since you cannot rely on any particular behavior of a NDEF processor. It could be +that by the time your application receives the NDEF message, records may have been inserted or +removed. Do not rely on any implementation-specific behavior. This seems obvious to any +seasoned developer, but it is easy to forget in the rush of a deadline. + +The advice in this discussion is offered because it is likely that developers at some point face the +need to associate NDEF records with each other, and it is good that some of the best practices and +conventions are laid out for all to see. Reading a new specification can be difficult, and hopefully +discussion such as this will ease the work of the developer. + +NFC Record Type Definition (RTD) Page 15 + + +Revision History + +## D. Revision History + +The following table outlines the revision history of the RTD Technical Specification. + +``` +Table 5. Revision History +``` +Document Name Revision and +Release Date + +``` +Status Change notice Supersedes +``` +NFCForum-TS- +RTD_1.0 + +``` +1.0, July 2006 Final none +``` +NFC Record Type Definition (RTD) Page 16 + + +# Text Record Type Definition + +## Technical Specification + +## NFC Forum + +#### TM + +## RTD-Text 1.0 + +## NFCForum-TS-RTD_Text_1.0 + +## 2006-07-24 + + +##### RESTRICTIONS ON USE + +This specification is copyright © 2005-2006 by the NFC Forum, and was made available pursuant to a +license agreement entered into between the recipient (Licensee) and NFC Forum, Inc. (Licensor) and may +be used only by Licensee, and in compliance with the terms of that license agreement (License). If you are +not the Licensee, you are not authorized to make any use of this specification. However, you may obtain a +copy at the following page of Licensor's Website: [http://www.nfc-forum.org/resources/spec_license](http://www.nfc-forum.org/resources/spec_license) after +entering into and agreeing to such license terms as Licensor is then requiring. On the date that this +specification was downloaded by Licensee, those terms were as follows: + +1. LICENSE GRANT. + +Licensor hereby grants Licensee the right, without charge, to copy (for internal purposes only) and share +the Specification with Licensee's members, employees and consultants (as appropriate). This license grant +does not include the right to sublicense, modify or create derivative works based upon the Specification. + +2. NO WARRANTIES. + +THE SPECIFICATION IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL LICENSOR, ITS +MEMBERS OR ITS CONTRIBUTORS BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THE SPECIFICATION. + +3. THIRD PARTY RIGHTS. + +Without limiting the generality of Section 2 above, LICENSOR ASSUMES NO RESPONSIBILITY TO +COMPILE, CONFIRM, UPDATE OR MAKE PUBLIC ANY THIRD PARTY ASSERTIONS OF +PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS THAT MIGHT NOW OR IN THE +FUTURE BE INFRINGED BY AN IMPLEMENTATION OF THE SPECIFICATION IN ITS CURRENT, +OR IN ANY FUTURE FORM. IF ANY SUCH RIGHTS ARE DESCRIBED ON THE SPECIFICATION, +LICENSOR TAKES NO POSITION AS TO THE VALIDITY OR INVALIDITY OF SUCH +ASSERTIONS, OR THAT ALL SUCH ASSERTIONS THAT HAVE OR MAY BE MADE ARE SO +LISTED. + +4. TERMINATION OF LICENSE. + +In the event of a breach of this Agreement by Licensee or any of its employees or members, Licensor shall +give Licensee written notice and an opportunity to cure. If the breach is not cured within thirty (30) days +after written notice, or if the breach is of a nature that cannot be cured, then Licensor may immediately or +thereafter terminate the licenses granted in this Agreement. + +5. MISCELLANEOUS. + +All notices required under this Agreement shall be in writing, and shall be deemed effective five days from +deposit in the mails. Notices and correspondence to the NFC Forum address as it appears below. This +Agreement shall be construed and interpreted under the internal laws of the United States and the +Commonwealth of Massachusetts, without giving effect to its principles of conflict of law. + +NFC Forum, Inc. +401 Edgewater Place, Suite 600 +Wakefield, MA, USA 01880 + + +Contents + +## Contents + +#### 1 Overview........................................................................................................1 + +#### 1.1 Objectives........................................................................................................................... 1 + +#### 1.2 Purpose ............................................................................................................................... 1 + +#### 1.2.1 Mission Statement and Goals................................................................................ 1 + +#### 1.3 References.......................................................................................................................... 1 + +#### 1.4 Administration.................................................................................................................... 1 + +#### 1.5 Special Word Usage........................................................................................................... 2 + +#### 1.6 Name and Logo Usage....................................................................................................... 2 + +#### 1.7 Intellectual Property........................................................................................................... 2 + +#### 1.8 Acronyms........................................................................................................................... 2 + +#### 2 Text Record....................................................................................................3 + +#### 2.1 Introduction........................................................................................................................ 3 + +#### 2.2 Dependencies...................................................................................................................... 3 + +#### 2.3 Security Considerations...................................................................................................... 3 + +#### 3 NDEF structure..............................................................................................4 + +#### 3.1 Messaging Sequence.......................................................................................................... 4 + +#### 3.2 Records Mapping............................................................................................................... 4 + +#### 3.2.1 Syntax.................................................................................................................... 4 + +#### 3.2.2 Structure................................................................................................................ 5 + +#### 3.3 Language Codes................................................................................................................. 5 + +#### 3.4 UTF-16 Byte Order............................................................................................................ 5 + +#### A. Example UTF-8 Encoding.............................................................................6 + +#### B. Revision History............................................................................................7 + +## Tables + +#### Table 1. Acronyms.......................................................................................................................... 2 + +#### Table 2. Text Record Content Syntax............................................................................................. 4 + +#### Table 3. Status Byte Encodings....................................................................................................... 4 + +#### Table 4. Example: “Hello, world!”.................................................................................................. 6 + +#### Table 5. Revision History................................................................................................................ 7 + +Text Record Type Definition Page i + + +Overview + +## 1 Overview + +The Text Record Type Description defines an NFC Forum Well Known Type [NFC RTD] for +plain text data. It may be used as free form text descriptions of other objects on an RFID tag. + +### 1.1 Objectives + +The objective of this document is to function as a normative reference to the Text RTD. + +### 1.2 Purpose + +#### 1.2.1 Mission Statement and Goals + +The Text RTD was designed to be used as a general purpose text field to add metadata to things +such as URLs. It needs to provide a lightweight component with clearly defined semantics. + +The goal is not to replace text/plain, but to define a clear subset that can be used in cases where +there is not much space to be used, and to cover the most probable use cases. + +The Text RTD must work well for non-western languages also, and it needs to include the +language information for localization purposes so that the language can be identified and served +to the user. + +### 1.3 References + +[NDEF] “NFC Data Exchange Format Specification”, NFC Forum, 2006. + +[NFC RTD] “NFC Record Type Definition (RTD) Specification”, NFC Forum, 2006. + +[RFC 2119] S. Bradner, “Key words for use in RFCs to Indicate Requirement +Levels”, RFC 2119, Harvard University, March 1997. +[http://www.apps.ietf.org/rfc/rfc2119.html](http://www.apps.ietf.org/rfc/rfc2119.html) + +[RFC 3066] H. Alvestrand, “Tags for the Identification of Languages”, RFC 3066, +Cisco Systems, January 2001. [http://www.faqs.org/rfcs/rfc3066.html](http://www.faqs.org/rfcs/rfc3066.html) + +[RFC 3066bis] A. Phillips, M. Davis, “Tags for the Identification of Languages”. IETF +Draft. [http://www.ietf.org/internet-drafts/draft-ietf-ltru-registry-14.txt](http://www.ietf.org/internet-drafts/draft-ietf-ltru-registry-14.txt) + +[UNICODE] “The Unicode 4.0.1 standard”. +[http://www.unicode.org/versions/Unicode4.0.1/](http://www.unicode.org/versions/Unicode4.0.1/) + +### 1.4 Administration + +The Text RTD Specification is an open specification supported by the Near Field Communication +Forum, Inc., located at: + +401 Edgewater Place, Suite 600 +Wakefield, MA, 01880 + +Tel.: +1 781-876-8955 +Fax: +1 781-224-1239 + +[http://www.nfc-forum.org](http://www.nfc-forum.org) + +The Reference Applications Framework technical working group maintains this specification. + +Text Record Type Definition Page 1 + + +Overview + +### 1.5 Special Word Usage + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, +“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this +document are to be interpreted as described in RFC 2119. + +### 1.6 Name and Logo Usage + +The Near Field Communication Forum’s policy regarding the use of the trademarks NFC Forum +and the NFC Forum logo is as follows: + +- Any company MAY claim compatibility with NFC Forum specifications, whether a member + of the NFC Forum or not. +- Permission to use the NFC Forum logos is automatically granted to designated members only + as stipulated on the most recent Membership Privileges document, during the period of time + for which their membership dues are paid. +- Member’s distributors and sales representatives MAY use the NFC Forum logo in promoting + member’s products sold under the name of the member. +- The logo SHALL be printed in black or in color as illustrated on the Logo Page that is + available from the NFC Forum at the address above. The aspect ratio of the logo SHALL be + maintained, but the size MAY be varied. Nothing MAY be added to or deleted from the + logos. +- Since the NFC Forum name is a trademark of the Near Field Communication Forum, the + following statement SHALL be included in all published literature and advertising material in + which the name or logo appears: + NFC Forum and the NFC Forum logo are trademarks of the Near Field Communication + Forum. + +### 1.7 Intellectual Property + +The Text RTD Specification conforms to the Intellectual Property guidelines specified in the +NFC Forum's Intellectual Property Right Policy, as approved on November 9, 2004 and outlined +in the NFC Forum Rules of Procedures, as approved on December 17, 2004. + +### 1.8 Acronyms + +This table defines all relevant terms and acronyms used in this specification. + +``` +Table 1. Acronyms +``` +Acronyms Definition + +LSB Least Significant Bit + +NDEF NFC Data Exchange Format + +RFU Reserved for Future Use + +RTD Record Type Description + +URI Uniform Resource Identifier + +URL Uniform Resource Locator (this is a special case of an URI) + +Text Record Type Definition Page 2 + + +Text Record + +## 2 Text Record + +### 2.1 Introduction + +The “Text” record contains freeform plain text. It can be used to describe a service or the contents +of the tag, for example. + +The Text record MAY appear as a sole record in an NDEF message [NDEF], but in this case the +behavior is undefined and left to the application to handle. Typically, the Text record should be +used in conjunction with other records to provide explanatory text. + +### 2.2 Dependencies + +There are no dependencies for the Text element. + +### 2.3 Security Considerations + +It is possible to write different text on the Text record than what the tag actually does, and thus +spoof the user into doing something else than what he actually wanted (i.e., phishing). Thus it is a +good idea for the user interface to use the Text field only as an informative field. + +Text Record Type Definition Page 3 + + +NDEF structure + +## 3 NDEF structure + +### 3.1 Messaging Sequence + +There is no particular messaging sequence available for this RTD. + +### 3.2 Records Mapping + +#### 3.2.1 Syntax + +The NFC Forum Well Known Type [NDEF], [NFC RTD] for the Text record is “T” (in NFC +binary encoding: 0x54). + +The data content is as follows: + +``` +Table 2. Text Record Content Syntax +``` +``` +Offset +(bytes) +``` +``` +Length +(bytes) +``` +``` +Content +``` +``` +0 1 Status byte. See Table 3. +``` +``` +1 ISO/IANA language code. Examples: “fi”, “en-US”, “fr- +CA”, “jp”. The encoding is US-ASCII. +n+1 The actual text. Encoding is either UTF-8 or UTF-16, +depending on the status bit. +``` +The Status bit encodings are as described in Table 3. Any value marked RFU SHALL be ignored, +and any software writing these bits SHALL use the value zero for these bits. + +``` +Table 3. Status Byte Encodings +``` +``` +Bit number (0 +is LSB) +``` +``` +Content +``` +``` +7 0: The text is encoded in UTF-8 +1: The text is encoded in UTF16 +``` +``` +6 RFU (MUST be set to zero) +``` +``` +5..0 The length of the IANA language code. +``` +The contents of the text field MAY be shown to the user. If multiple 'T' records exist, the one +with the closest matching language to the user preference SHOULD be displayed. To have +multiple text elements within a single application, context with the same language code SHOULD +be considered an error. + +Text Record Type Definition Page 4 + + +NDEF structure + +Control characters (0x00-0x1F in UTF-8) should be removed prior to display, except for newline, +line feed (0x0D, 0x0A) and tab (0x08) characters. Markup MUST NOT be embedded (please use +the “text/xhtml” or other suitable MIME types). The Text record should be considered to be equal +to the MIME type “text/plain; format=fixed”. + +Line breaks in the text MUST be represented using the CRLF (so-called DOS convention, the +sequence 0x0D,0x0A in UTF-8). The device may deal with the tab character as it wishes. + +White space other than newline and tab SHOULD be collapsed, i.e., multiple space characters are +to be considered a single space character. + +To find the length of the actual text in bytes, you calculate the length via “m=(length of the +payload – length of the IANA language code – 1)” + +#### 3.2.2 Structure + +If the Text record describes an element, it SHOULD occur in the NDEF record list before the +element it is describing. This makes it faster to find and display to the user if the element is very +large. + +### 3.3 Language Codes + +All language codes MUST be done according to RFC 3066 [RFC3066]. The language code MAY +NOT be omitted. + +The language code length is encoded in the six least significant bits of the status byte. Thus it is +easy to find by masking the status byte with the value 0x3F. + +The language code is typically either two characters or five characters, though in the future, it is +likely that it will be possible to have longer codes. At this time, IETF is considering an extension +to RFC 3066 which will cover language codes up to 33 bytes in length [RFC 3066bis]. The two- +character version disregards any dialects, and thus is used most often; for example, “fi” for +Finnish, “jp” for Japanese, “fr” for French. However, in some cases you might want to +differentiate between variants of the same language, such as providing US-English and British +English versions via “en-US” and “en-UK” respectively. + +### 3.4 UTF-16 Byte Order + +The Unicode Byte-Order-Mark (BOM) in the actual string MUST be tolerated (i.e. no error +condition). When generating a Text record, the BOM MAY be omitted. If the BOM is omitted, +the byte order shall be big-endian (UTF-16 BE). + +Text Record Type Definition Page 5 + + +Example UTF-8 Encoding + +## A. Example UTF-8 Encoding + +Here’s an example on how the English phrase “Hello, world!” would be encoded in UTF-8: + +``` +Table 4. Example: “Hello, world!” +``` +``` +Offset Content Explanation Syntactical info +``` +``` +0 N/A IL flag = 0 (no ID field), SF=1 +(Short format) +1 0x01 Length of the record name +``` +``` +2 0x10 The length of the payload data (16 +bytes) +3 “T” The binary encoding of the name, +as defined in [1] +``` +``` +NDEF record header +``` +``` +4 0x02 Status byte: This is UTF-8, and +has a two-byte language code +5 “en” “en” is the ISO code for “English” +``` +``` +Payload +``` +``` +7 “Hello, +world!” +``` +``` +UTF-8 string “Hello, world!” +The actual body text. +``` +Text Record Type Definition Page 6 + + +Revision History + +## B. Revision History + +The following table outlines the revision history of the Text RTD Technical Specification. + +``` +Table 5. Revision History +``` +Document +Name + +``` +Revision and +Release Date +``` +``` +Status Change Notice Supersedes +``` +NFCForum-TS- +RTD_Text_1.0 + +``` +1.0, July 2006 None First Revision +``` +Text Record Type Definition Page 7 + + +# URI Record Type Definition + +## Technical Specification + +## NFC Forum + +#### TM + +## RTD-URI 1.0 + +## NFCForum-TS-RTD_URI_1.0 + +## 2006-07-24 + + +##### RESTRICTIONS ON USE + +This specification is copyright © 2005-2006 by the NFC Forum, and was made available pursuant to a +license agreement entered into between the recipient (Licensee) and NFC Forum, Inc. (Licensor) and may +be used only by Licensee, and in compliance with the terms of that license agreement (License). If you are +not the Licensee, you are not authorized to make any use of this specification. However, you may obtain a +copy at the following page of Licensor's Website: [http://www.nfc-forum.org/resources/spec_license](http://www.nfc-forum.org/resources/spec_license) after +entering into and agreeing to such license terms as Licensor is then requiring. On the date that this +specification was downloaded by Licensee, those terms were as follows: + +1. LICENSE GRANT. + +Licensor hereby grants Licensee the right, without charge, to copy (for internal purposes only) and share +the Specification with Licensee's members, employees and consultants (as appropriate). This license grant +does not include the right to sublicense, modify or create derivative works based upon the Specification. + +2. NO WARRANTIES. + +THE SPECIFICATION IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, COMPLETENESS AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL LICENSOR, ITS +MEMBERS OR ITS CONTRIBUTORS BE LIABLE FOR ANY CLAIM, OR ANY DIRECT, SPECIAL, +INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH +THE USE OR PERFORMANCE OF THE SPECIFICATION. + +3. THIRD PARTY RIGHTS. + +Without limiting the generality of Section 2 above, LICENSOR ASSUMES NO RESPONSIBILITY TO +COMPILE, CONFIRM, UPDATE OR MAKE PUBLIC ANY THIRD PARTY ASSERTIONS OF +PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS THAT MIGHT NOW OR IN THE +FUTURE BE INFRINGED BY AN IMPLEMENTATION OF THE SPECIFICATION IN ITS CURRENT, +OR IN ANY FUTURE FORM. IF ANY SUCH RIGHTS ARE DESCRIBED ON THE SPECIFICATION, +LICENSOR TAKES NO POSITION AS TO THE VALIDITY OR INVALIDITY OF SUCH +ASSERTIONS, OR THAT ALL SUCH ASSERTIONS THAT HAVE OR MAY BE MADE ARE SO +LISTED. + +4. TERMINATION OF LICENSE. + +In the event of a breach of this Agreement by Licensee or any of its employees or members, Licensor shall +give Licensee written notice and an opportunity to cure. If the breach is not cured within thirty (30) days +after written notice, or if the breach is of a nature that cannot be cured, then Licensor may immediately or +thereafter terminate the licenses granted in this Agreement. + +5. MISCELLANEOUS. + +All notices required under this Agreement shall be in writing, and shall be deemed effective five days from +deposit in the mails. Notices and correspondence to the NFC Forum address as it appears below. This +Agreement shall be construed and interpreted under the internal laws of the United States and the +Commonwealth of Massachusetts, without giving effect to its principles of conflict of law. + +NFC Forum, Inc. +401 Edgewater Place, Suite 600 +Wakefield, MA, USA 01880 + + +Contents + +## Contents + +#### 1 Overview........................................................................................................1 + +#### 1.1 Objectives........................................................................................................................... 1 + +#### 1.2 Purpose ............................................................................................................................... 1 + +#### 1.2.1 Mission Statement and Goals................................................................................ 1 + +#### 1.3 References.......................................................................................................................... 1 + +#### 1.4 Administration.................................................................................................................... 1 + +#### 1.5 Special Word Usage........................................................................................................... 2 + +#### 1.6 Name and Logo Usage....................................................................................................... 2 + +#### 1.7 Intellectual Property........................................................................................................... 2 + +#### 1.8 Acronyms........................................................................................................................... 3 + +#### 2 URI Service.....................................................................................................4 + +#### 2.1 NDEF Message Sequences................................................................................................. 4 + +#### 2.2 Dependencies...................................................................................................................... 4 + +#### 3 NDEF Structure..............................................................................................5 + +#### 3.1 Messaging Sequence.......................................................................................................... 5 + +#### 3.2 Records Mapping............................................................................................................... 5 + +#### 3.2.1 URI Record Type.................................................................................................. 5 + +#### 3.2.2 URI Identifier Code............................................................................................... 5 + +#### 3.2.3 URI Field............................................................................................................... 7 + +#### 4 Handling Guideline........................................................................................8 + +#### A. Examples........................................................................................................9 + +#### A.1 Simple URL with No Substitution..................................................................................... 9 + +#### A.2 Storing a Telephone Number............................................................................................. 9 + +#### A.3 Storing a Proprietary URI on the Tag............................................................................... 10 + +#### B. Revision History..........................................................................................11 + +## Tables + +#### Table 1. Acronyms.......................................................................................................................... 3 + +#### Table 2. URI Record Contents........................................................................................................ 5 + +#### Table 3. Abbreviation Table............................................................................................................ 5 + +#### Table 4. Simple URL with No Substitution.................................................................................... 9 + +#### Table 5. Storing a Telephone Number............................................................................................ 9 + +#### Table 6. Storing a Proprietary URI on the Tag.............................................................................. 10 + +#### Table 7. Revision History.............................................................................................................. 11 + +URI Record Type Definition Page i + + +Overview + +## 1 Overview + +The URI Service RTD (Record Type Description) is an NFC RTD describing a record to be used +with the NFC Data Exchange Format (NDEF) to retrieve a URI stored in a NFC-compliant tag or +to transport a URI from one NFC device to another. + +The URI (either a URN or URL) also provides a way to store URIs inside other NFC elements, +such as a Smart Poster (please see the Smart Poster RTD for more information). + +### 1.1 Objectives + +The RTD defines the use of NDEF by the means of the NDEF records mapping. + +### 1.2 Purpose + +#### 1.2.1 Mission Statement and Goals + +The purpose of the URI RTD is to provide a “primitive” to contain URIs as defined by RFC 3986 +in a compact manner. + +### 1.3 References + +[NDEF] “NFC Data Exchange Format Specification”, NFC Forum, 2006. + +[NFC RTD] “NFC Record Type Definition (RTD) Specification”, NFC Forum, 2006. + +[RFC 2119] S. Bradner, “Key words for use in RFCs to Indicate Requirement +Levels”, RFC 2119, Harvard University, March 1997. +[http://www.apps.ietf.org/rfc/rfc2119.html](http://www.apps.ietf.org/rfc/rfc2119.html) + +[RFC 3492] A. Costello: “Punycode: A Bootstring encoding of Unicode for +Internationalized Domain Names in Applications (IDNA)”, RFC 3492, +March 2003. [http://www.apps.ietf.org/rfc/rfc3492.html](http://www.apps.ietf.org/rfc/rfc3492.html) + +[RFC 3986] T. Berners-Lee, R. Fielding, L. Masinter, “Uniform Resource Identifiers +(URI): Generic Syntax”, RFC 3986, MIT/LCS, U.C. Irvine, Xerox +Corporation, January 2005. [http://www.apps.ietf.org/rfc/rfc3986.html](http://www.apps.ietf.org/rfc/rfc3986.html) + +[RFC 3987] M. Duerst, M. Suignard, “Internationalized Resource Identifiers (IRIs)”, +RFC 3987, Microsoft Corporation, January 2005. +[http://rfc.net/rfc3987.html](http://rfc.net/rfc3987.html) + +[SMARTPOSTER] “Smart Poster RTD Specification”, NFC Forum, 2006. + +[URI SCHEME] List of Uniform Resource Identifier (URI) schemes registered by IANA. +[http://www.iana.org/assignments/uri-schemes](http://www.iana.org/assignments/uri-schemes) + +### 1.4 Administration + +The URI RTD Specification is an open specification supported by the Near Field Communication +Forum, Inc., located at: + +401 Edgewater Place, Suite 600 +Wakefield, MA, 01880 + +Tel.: +1 781-876-8955 +Fax: +1 781-224-1239 + +URI Record Type Definition Page 1 + + +Overview + +[http://www.nfc-forum.org](http://www.nfc-forum.org) + +The Reference Applications technical working group maintains this specification. + +This specification has been contributed to by Sony, Panasonic, Philips and Nokia. + +### 1.5 Special Word Usage + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, +“SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this +document are to be interpreted as described in RFC 2119. + +### 1.6 Name and Logo Usage + +The Near Field Communication Forum’s policy regarding the use of the trademarks NFC Forum +and the NFC Forum logo is as follows: + +- Any company MAY claim compatibility with NFC Forum specifications, whether a member + of the NFC Forum or not. +- Permission to use the NFC Forum logos is automatically granted to designated members only + as stipulated on the most recent Membership Privileges document, during the period of time + for which their membership dues are paid. +- Member’s distributors and sales representatives MAY use the NFC Forum logo in promoting + member’s products sold under the name of the member. +- The logo SHALL be printed in black or in color as illustrated on the Logo Page that is + available from the NFC Forum at the address above. The aspect ratio of the logo SHALL be + maintained, but the size MAY be varied. Nothing MAY be added to or deleted from the + logos. +- Since the NFC Forum name is a trademark of the Near Field Communication Forum, the + following statement SHALL be included in all published literature and advertising material in + which the name or logo appears: + NFC Forum and the NFC Forum logo are trademarks of the Near Field Communication + Forum. + +### 1.7 Intellectual Property + +The URI Record Type Definition Specification conforms to the Intellectual Property guidelines +specified in the NFC Forum's Intellectual Property Right Policy, as approved on November 9, +2004 and outlined in the NFC Forum Rules of Procedures, as approved on December 17, 2004. + +URI Record Type Definition Page 2 + + +Overview + +### 1.8 Acronyms + +This table defines all relevant terms and acronyms used in this specification. + +``` +Table 1. Acronyms +``` +Acronyms Definition + +NDEF NFC Data Exchange Format + +URI Uniform Resource Identifier + +URL Uniform Resource Locator (this is a special case of an URI) + +RFU Reserved for Future Use + +NFC Near Field Communication + +URI Record Type Definition Page 3 + + +URI Service + +## 2 URI Service + +This document defines URI Service with data model, describing the application scenarios for +simple Smart Poster applications, the structure of an URI located on an NFC compliant device or +tag, and provides examples. + +The URI record type MAY also be used as a part of some other RTD, in which case it implies no +specific action. A typical example of this might be a case where the developer wants to build his +own record type containing multiple URLs. In this case, it is impossible to divine the meaning of +each URL automatically, so it is left to the handler taking care of the developer’s own type. + +Devices are NOT required to implement any particular URI protocol. + +### 2.1 NDEF Message Sequences + +There are no specific message sequences. + +### 2.2 Dependencies + +The Smart Poster RTD [SMARTPOSTER] may be considered to be an extended version of the +URI RTD. It uses auxiliary records to add metadata to the URI. + +URI Record Type Definition Page 4 + + +NDEF Structure + +## 3 NDEF Structure + +### 3.1 Messaging Sequence + +There is no particular messaging sequence. + +### 3.2 Records Mapping + +#### 3.2.1 URI Record Type + +The Well Known Type for an URI record is “U” (0x55 in the NDEF binary representation). + +The structure of an URI record is described below. + +``` +Table 2. URI Record Contents +``` +``` +Name Offset Size Value Description +Identifier +code +``` +``` +0 1 byte URI identifier code The URI identifier code, as +specified in Table 3. +URI +field +``` +``` +1 N UTF-8 string The rest of the URI, or the entire +URI (if identifier code is 0x00). +``` +#### 3.2.2 URI Identifier Code + +In order to shorten the URI, the first byte of the record data describes the protocol field of an +URI. The following table MUST be used to encode and decode the URI, though applications +MAY use the 0x00 value to denote no prefixing when encoding, regardless of whether there +actually is a suitable abbreviation code. + +For explanations of the different protocols, please refer to the protocol documentations +themselves. NFC devices are not required to support any particular protocol. + +``` +Table 3. Abbreviation Table +``` +``` +Decimal Hex Protocol +0 0x00 N/A. No prepending is done, and the URI field +contains the unabridged URI. +``` +``` +1 0x01 http://www. +2 0x02 https://www. +3 0x03 http:// +4 0x04 https:// +5 0x05 tel: +6 0x06 mailto: +7 0x07 ftp://anonymous:anonymous@ +``` +``` +8 0x08 ftp://ftp. +9 0x09 ftps:// +``` +URI Record Type Definition Page 5 + + +NDEF Structure + +``` +Decimal Hex Protocol +10 0x0A sftp:// +11 0x0B smb:// +12 0x0C nfs:// +13 0x0D ftp:// +14 0x0E dav:// +15 0x0F news: +``` +``` +16 0x10 telnet:// +17 0x11 imap: +18 0x12 rtsp:// +19 0x13 urn: +20 0x14 pop: +21 0x15 sip: +22 0x16 sips: +``` +``` +23 0x17 tftp: +24 0x18 btspp:// +25 0x19 btl2cap:// +26 0x1A btgoep:// +27 0x1B tcpobex:// +28 0x1C irdaobex:// +29 0x1D file:// +``` +``` +30 0x1E urn:epc:id: +31 0x1F urn:epc:tag: +32 0x20 urn:epc:pat: +33 0x21 urn:epc:raw: +34 0x22 urn:epc: +35 0x23 urn:nfc: +36...255 0x24..0xFF RFU +``` +For example, if the content of this field is 0x02, and the content of the URI field reads as “nfc- +forum.org”, the resulting URI is “https://www.nfc-forum.org”. + +If the content this field is zero (0x00), then NO prepending SHALL be done. + +All fields marked RFU SHALL be treated as if they were value zero (no prepending). A +compliant system MUST NOT produce values that are marked RFU. + +URI Record Type Definition Page 6 + + +NDEF Structure + +#### 3.2.3 URI Field + +This field provides the URI as per RFC 3987 [RFC 3987] (so that it is actually an IRI, or +Internationalized Resource Identifier, but for legacy reasons we use the word URI). This IRI can +be a URL or URN as explained before. The encoding used MUST be UTF-8, unless the URI +scheme specifies some particular encoding. + +The length of the IRI can be calculated by taking the length of the payload, and subtracting 1 for +the protocol abbreviation code byte. This is the length in bytes, not in characters (as UTF-8 +characters can occupy more than one byte). + +URIs are defined only in the 7-bit US-ASCII space. Therefore, a compliant application SHOULD +transform the UTF-8 IRI string to a 7-bit US-ASCII string by changing code points above 127 +into the proper encoding. This coding has been defined in the RFC 3987 [RFC 3987] and IDN +[RFC 3492] documents. For different schemes, the encoding may be different. + +For example, if the URI (after the prepending of the URI type field) contains the following string: +“http://www.hääyö.com/”, it is transformed, as per standard IDN [RFC 3492] rules, into +“http://www.xn--hy-viaa5g.com” before acting on it. Most modern applications already support +this new Internationalized Resource Identifier (IRI) scheme. It is RECOMMENDED that +implementations include support for IRI where display of the URI in human-readable form is +anticipated. + +To clarify: yes, the URI MAY contain UTF-8 characters. However, the Internet cannot handle +them, and therefore the URI needs to be transformed before use. For most devices, this +conversion is handled by the application. + +Any character value within the URI between (and including) 0 and 31 SHALL be recorded as an +error, and the URI record to be discarded. Any invalid UTF-8 sequence SHALL be considered an +error, and the entire URI record SHALL be discarded. + +URI Record Type Definition Page 7 + + +Handling Guideline + +## 4 Handling Guideline + +The URI RTD does not define any specific action that the device is required to perform. This is +left to the implementation. + +Please see the Smart Poster RTD [SMARTPOSTER] for an example on how to use the URI RTD +in your own application. + +URI Record Type Definition Page 8 + + +Examples + +## A. Examples + +These examples omit the MB and ME flags from the URI RTD, and assume the Short Record +format. See the NDEF specification [NDEF] for more information. + +### A.1 Simple URL with No Substitution + +To put the URL [http://www.nfc.com](http://www.nfc.com) on a tag using the NDEF protocol, add the following byte +sequence. Total length: 12 bytes. + +``` +Table 4. Simple URL with No Substitution +``` +``` +Offset Content Explanation +``` +``` +0 0xD1 SR = 1, TNF = 0x01 (NFC Forum Well Known +Type), ME=1, MB=1 +1 0x01 Length of the Record Type (1 byte) +``` +``` +2 0x08 Length of the payload (8 bytes) +``` +``` +3 0x55 The URI record type (“U”) +``` +``` +4 0x01 URI identifier (“http://www.”) +``` +``` +5 0x6e 0x66 0x63 0x2e +0x63 0x6f 0x6d +``` +``` +The string “nfc.com” in UTF-8. +``` +### A.2 Storing a Telephone Number + +To store a telephone number (for example, to make a mobile phone make a call to this number), +use the following byte sequence. The number is ‘+358-9-1234567’. Total length is 17 bytes. + +``` +Table 5. Storing a Telephone Number +``` +``` +Offset Content Explanation +``` +``` +0 0xD1 SR = 1, TNF = 0x01 (NFC Forum Well Known +Type), MB=1, ME=1 +1 0x01 Length of the Record Type (1 byte) +``` +``` +2 0x0D Length of the payload (13 bytes) +``` +``` +3 0x55 The Record Name (“U”) +``` +``` +4 0x05 Abbreviation for “tel:” +``` +``` +5 0x2b 0x33 0x35 0x38 +0x39 0x31 0x32 0x33 +0x34 0x35 0x36 0x37 +``` +``` +The string “+35891234567” in UTF-8. +``` +URI Record Type Definition Page 9 + + +Examples + +### A.3 Storing a Proprietary URI on the Tag + +To store a proprietary URI, you can use the following byte sequence. The URI in this case is +“mms://example.com/download.wmv”. Total length is 35 bytes. + +``` +Table 6. Storing a Proprietary URI on the Tag +``` +``` +Offset Content Explanation +``` +``` +0 0xD1 SR = 1, TNF = 0x01 (NFC Forum Well Known +Type), MB=1, ME=1 +1 0x01 Length of the Record Type (1 byte) +``` +``` +2 0x1F Length of the payload (31 bytes) +``` +``` +3 0x55 The Record Name (“U”) +``` +``` +4 0x00 No abbreviation +``` +``` +5 0x6d 0x6d 0x73 0x3a +0x2f 0x2f 0x65 0x78 +0x61 0x6d 0x70 0x6c +0x65 0x2e 0x63 0x6f +0x6d 0x2f 0x64 0x6f +0x77 0x6e 0x6c 0x6f +0x61 0x64 0x2e 0x77 +0x6d 0x76 +``` +``` +The string +“mms://example.com/download.wmv“. +``` +URI Record Type Definition Page 10 + + +Revision History + +## B. Revision History + +The following table outlines the revision history of the RTD_URI Technical Specification. + +``` +Table 7. Revision History +``` +Document +Name + +``` +Revision and +Release Date +``` +``` +Status Change Notice Supersedes +``` +NFCForum-TS- +RTD_URI_1.0 + +``` +1.0, July 2006 Final None +``` +URI Record Type Definition Page 11 + + diff --git a/docs/specification_ndef.pdf b/docs/specification_ndef.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1fd82f52aef94f4c03ca80a57a62ae72ad689453 GIT binary patch literal 593162 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≧Pmu)pw*?%M$i#h)seCn1 zDOZ+rpLi>Qw3gq@yOto~x+T(Bp>f6|xJQpRVXRpt@MgJIW{JFbqjv&N{MgN6B1uWx zDjJuctWK*D|1o4+oozH~9yHI)cPSKe8tcrzb*@Af;ZZM}gHWQ}rD1(MI2b8o{K{rL!q3GU~AP@pJACs1G1-{b`StUrSh~FKx z!ob%yE2T&dJDdJ~`{5Mw+3KgyQY)PDn6EugCT`Y6sRpw9nU5qD!tw#1)7zJ<>0(~g;yJVtPH>Gm}%PgMhN)&WCq z<;c?pCqt6YAF^^_>Pd>1wkSR;=;W}}sPB3%jPkshr>iP4p-JlJ*dEvRc?kJ|E9rslcCi z9V>ci%T;ri#>2;@{B5n=rR(`*oYQ0<&4^owM19|Lhjx%BhTvt!eh{hW7feZ5tIEi- zebv-H-8EW_>tN7rljCBRVj8C1!B@L+heK-9&;B4083PX?@tEo1g{fF&@`pKc5!j3| zRszp`s5zg1+j@%>thYJZhXkfq7Q`AMvT`K{aDMQ?J0>nadp3zEkEo65a4_b#fvyc# zCxvi!x^H9xZ)gU3Z2Bl$~`zYcy zvgUlzoM6+js>m|raO5axaTya)V?3cAYPvl2*!~$%DtOe zv@@l5*1Li2PV!!k1<`P5J8MXlD(|*`6mAeI8g*I(g%RwYT(HreryEXA4oXdhb{b@! zuIzN6S;hoBoE^Qns$Bo3B(MJL-v-_(xA=jZY|9uzN3(+SqnyyAS!rt)+(S_-O=@;s zoEtB@7gW~gq5~@1W4?_5i$JE}M3)n&4LJBC*KA|^Ml*HREZ`%^UMb9cVAcbvK3)Kf zsz(MRg%&W{Tx>7be9KcC z`hPh-SAMpti>z`^rd{#4gKRb_6e`F=TI<*8U@A1|MQ!D=mOT{`m7)6!fcV=Am%PCa zg;O92I1_d|q7v}_mUb|H@VqN%Y6=8CYk;|5y~&1?`QSGtuv}~blWu=g(FVoKqK!o9 z13BF&HA1k%ds4sf<0|k_KKgkL)&<;2jwGNsS#?W6=7=)kBwa7wG78mNqW8WMVawIwdo=A#scp`?&NZ zt5hE6`FjJdVztP&YHCBHJNQvUlaqW^`ZCbKRw8MU`#HKegx37;3u*%u%pMz@l%{hL zd(OAu$db`|Kr>B9?$#|qjB8-Eo`vOQ!R1Bdyf`@C@6K(RW#)#WLBSa@um{r}y>4o6)DKWkdpjf!Neh2kf-GJhGSx zw)z$YCl!Z01a(R7nIEVYpsF1SH=H+zk$sI(Ewr*)Cnrz4ow;w@3zSE7^5r#o7YRb2 zvayZVG01c3ON)*BZDRfXO8FLS;nZ1}Dol+ex>x*W8N6ZqGc}o~{kvJ!#Qbi%m*G)5 z9DDX{HPc^3R})2t8`fIa*1=Rg3WoB%g+8MN?R=xD;mnP59pmCbBqUHe!7 z3}8tP1UWnqb!&PW{G?LFx;)s2R0U@{~p3* zyuG7G(j2q6s)XQcnxwA6603=Qb@r*3u?mFgyc~Ufa+qQBRSd!a?(3dl538LMr0Z4CDkT7utUX*mO$xPSizb|zgy

~v7`DQnj^H9Vk_^HQJRyRrB{U z8#y!!;280Tv^eb8+mOsN9kAq80HnWbvABY30RS_Xb^A4zdbk=60O><5gzMeP$YF}1 z;ZDm9<(1XwL0NkX+Bs&yLE3u?Ixy+xzhRuSHCUg{NKD>azcymZ|3C>BlaDq_}^Uk-(2|rp^y6CT=<_~ zNc>;Crh?8f{x=u?ug!&vG95aX^8DH*<9*rc!-g9skKe$5(AwZ}e!-u_O;cV0w=GSF z52I(?;MBbGRFb1vMz=eubpfV0hOP|FQB=or_wD z`Fd=;UX)_*@?_DxJveEn2&@`1kaS1!qvp})BTcDAAFM`yjbW3F{`6qxpi{Ry1#i=xq zie>k|(~K697ov!nn_x&T@_8)vtz_}HpiIIBoKi-@<})@`5L-{m5=Q^4V%o|DN@pwD z*^;zvY({2-)n)^^crrQ6Csqov1qQVqv0J>=82RdnnP8&YBiB`ap+0w8b>_$ z|M{OXD^tqap=6qGak0@;orMA?W^g)$g(k?<-U;sS{t?I_0xOiV0ASfIhuUB^($@W8 zL~6P;*^5dwc~fC1Rr9r^&DEyrAyfH3u5bOnTiQ>O-Cz?O zDrhHMFDoe;N9fRLe-K31m~Orpec7;;G39*HkG(2|`4PZg6TMCq0EJs-1Qn#Z66qmi zjh^>h%iPn#bz}|D)j87Hlxw+R0e82Rq?PltF*sl0)>tpyNPt<~LE*D) z_SvN&AX6>$^C>}VckRNIz(A{ye69gcgiaJ~4mTr*Gr~eby3#gYcFhaUl)vnL6}4u; zKO)#G0#3KThW`zFD?$ypfMHsYAVMyj#p9xTy6GJGZTr6+Yi~c>(iaMIaIkPV)2C=w zOJ^fj$%bK_2n@P&)O6ICh(4!z?>0D)WaFnK+_tTZmIWuBLTIAkm(EEAGmVtZlUWd@ za?41QCZ0J<$8z$8hvv<8f|`?>WLQ*Bo>EM{lBz&im0rGz;|t}*pzM^<#%~}%h!UA^$^hdGGG4T3L z%M7Yvd9}b02WQ;Vb?zAf5VS$EXnAQ|aL$_q;5FI`n~!Z8R;!ld=aP^a(xL#ap?T*< zId!_<5P*5;2diW_K9M?&~@9aguS_vCFkCt1&PCuD|Px5O}lL zTY`Nz*7PZs@4a`;s!Pv)b^5%H^>ZxSgB3Ik9FF};)KMl_|6iGxsdrl9)3hTMhia*q zm%NV#F^?qgi{w!V4vl;s=Y7-*x6GIsaaLlkR%nyX08jc^)_Z8QOFqLJsp^Q#W8HEQ zFigqWa?In@PA@~N%J%lG`gJuU}g{-8)9B{U|zR6@JNHS{E*vzm0R<%iP#Uy^fS8aO z`2?a5mZcv)n{q>`->*hSF>m}7jH1(Yj(TiAAr27<2eH8WV#cm>$uZN|`~io&TF@@# zhZct4UHyIUg$eC_oQNOEy}d5cMWcW+Pj{2F{BB z(xws+-CS*_x&g-bT*aG;^)d8W-k95YMFP0HM+O8hC}Uwll)-sXEE3uu#$jtx@2FJU zAIcGL2z}O2i2MwtF)4lVSQ^^G6PV`EYH{N&<9U2tS;3NQZt&Xo2v1v7+6=unbZxFZ z-A_AuSYd(2@Of&7^=Yl)f(fh_(Sjr4r1Jv83CIu~)!2VAYRczUtrzp6p-ZA96Xpio zD5;hSwG(eAa94Cl%C4ALCAkt*9=?~-nXxWXhk8 zg^uze??b{ktJQCN7~h}$1dhk`Yx}#F0F8Z4I3RE_s6rR1k;C;CR~Suow%d*}CNnIz zr->-DZ;CkS@AMG;(rJPzZb6ER-D#9@aXg0J7!6MZIB&I@^HL^J7bxm3zp*>8+0-Qw zMO^!Ks)AqYll)DY$3+JhJ6$h2)#-tA;Bt>7XBznM5jeP~HjNoIGsVmcC;V7a|6MAH zR=K|~w_lho23sqvs0z*;#RePlwYl7Kw*88-?~9LoE4bBb*PH7V;LDEV1WIK|u9LK= zL!D751~o~<)N+-{CmNz<@NRuH}?0?0ZDUEZv=Ff=kOnty8qYJWw? z-dcdb^7RU+@4Awxu5v#`Y)6a0v95c}3W5$7rt<(IPhjf1eP`+WNNwAQU#!v(Gv%$E z%mK}#&22&f>{(1rtu11Sb5&F?l$DjSh|Z_u1PWJ6KEh2*!4xK-YuooZXEF1U?FCrd zh-S`(bM_K*T@U+}#*WDhTUU3iN!)oMd+?RCTjR^ZKF6Trk(Psw(U>`hHBVg;jNP1F z^P*Am;D2U86{0a*Ue=w^hm77FU!xJQm2^DaYWk;%BdjCAb2);iE-b;?P2#PTmezUv z2Uj2z^0ErOA0wX&;a-$mN^d%Uir|PP_H4I7_VDN<%$L_0pAtmfZ@G7Th^ojYL=#)> zh;&Oa!4tb*9RV`e)|40etgUvV??lQROwm1|F^x%^O*^qr(7}#G*LA{ zv4MQN?0vOMYMj(oH(J_A-Zxb$lFb`pFyDG#k}PqnByh;mCPZY^0cx(wWb5VI&gJCA zPS9)KY{{AVsh)t5B=Sz9lQ->!(yYFEHBPuK*mL7bt|(_etS=aaf5I#8zFfi_!6V3V z3X{~B`^WBB7(z5cpbn+l2Is|;-!{kpt?MJO8wq2Y4Efn;> z`TL*qR{*62k{_uFnYDfSAaH(ty_fkjEILF=e-LS(=8&tK<$TGMF~m?4k&cVi zq+ZiS%qqHFftiOs;(Pll;A1^04qGY>Z8M&bO2S!;C?l;a z?ehk_*#p%n5O&%z|K#|_yHEHx6)#^m!IR`k8BdtY({v*_1vw!W@Zyl_`#zPH7V)%q zIHzjt{a;myi;qDC21E;^dG9~DCnPI7eslq2{Y9pC%YV4H`crDBE*dM7UfD0v?U^9J zsH<=Jl*ahd0rQhm6se($qfZ0c*p%%wT8~5a-+zIvNse0rKW$+4Fh0*H3SaEGAW?=Z zO|gZ2_(-KVS$3?%xV#U}ONdO~eKiIt{})0ZH1EbgJEJDh98B~14WYE$A_0r%$;C~6 zd}R%fw(IJl*O^kE#Gc1Yx~Cp18Z1)1mdL(NcP{r~*ocjdJ@?HME{s=^&J?0SsR)1G zV3@Bd8IfE$N5e|XqqWa^mvC<3k)z#-oJ#89%-djB6}X+2k?gEXk=$v>5!yq^cW50O zAyl{r9%EA~kOrHuj7l%_*qqIW6xvb3_NmL?O(K$`y*{ogF!9ctnb19+0&4_y)8|qap?erYP{u)yqvyb*X>B2WYyF&mjXQY z2bRU1VoJLms*$E|du;i2M{v@6zeK=xjDN5+HskbhEN@o>QG>eE;O!JiPOEx&zh1oQ z+G@c~qj>L6P6vF~D!ZxDI|!8VCiTwb*2u(5!(P}E7nSW#zG`^D_rHV3d0He;lp4Pyi^U^%s& zvpYm*8-|?_86B@>|8^mc+*&s}sU(wu@&Oaiz05}O{Tk_(P|MzHQ!stTx&<5sai*3#^BL$O-q~t%cvbLryBadGO5jD*&^!mc-GMe_*GP)47Xka(b4d@=mS6`|!&f*BiQZRL5zr#`aD zlErT=Frsu*kRVPAk}Uc}pD}~t&P+o&<^~BiuojIdH7wR4-BrCeyed$JzNmoSS?1o6 znmC;m;x79y7}V%v9Qk@y7HVeJ0&F(nI{h6*zMUZ2YZh$I2OH6CblKLR26!Q0_pC4; zun&D$B+AhhxbIYCoaqM7$~-UaTBzt}6=d-<}dWJZDOMwE-|->(^AC6-AIagLy%<xs(^F_~HdmlUJ$}GAUfvv|NpwlC6iE-nW z))$QMo|Ua<_wzLwqbfD7!AF|PLKw)&8+%P&V z@XdJ(3rkxYIvDs^9$d=mSsPf`(s4sMwm(p?wYJl@-TK&u4vMB_X<-ZQv7uw%zD3^B zR?pS|T;Q`x8C*5i+xds&4Qwp!to03S=m1B6h?%9ef|Z`W!Pcb$8yz@2p?_Dz!B$k^>)W826h(8zj+WThZ@&^&bhI)6 zWb}*-=gq@v>jsw8~fpMX~LywPw-4)xfKPhQ!VG6E=6~4+vfsPgYrvgZ`ZgC`RX?@ke z8vPPrOzE~{gwHBQ$108{^1~p4p$1g8?%q-dwy!_5MdqtI{Pbq%QQl^sRnox1$o3i? zJDdXn#>m*r7W^XXB{MMk7Y+0+uNr*)`E51C6Z1$`F}HcHegqY%)6@$wJG1ZhKx>MI z0m;!DN9*u%yIN~o$>bz^Ov?^XbFOq)3c3!*BRsRQ0ds1gy#H5MhZz6nH&q)DkV{N#0=#9=WKjcMhWtIyq-g8n@X81yhaSW zvZrw`({O9eZW14L);*AY&P;%6flYeEup54|1$xP&YuT}^2;PE-gVx2_(uPeJ5rF+oNz<0T5`m~(e!Kr1zPD;9O?OvQ#wk|Q7P!QSWGp2GZ{{>b*FGEO zH)O`|EFW1Xn@ROP9Vxy|IF!#B$=n{NPu0LmDzNx&={U^!zUjgd8d{@nJ}c<05SsQV zEC1p?kehu3ZdPxS@RMkcm;A7U@Ov3Tr;^Cr}O3Ozo@PPbdY*)s{oe znFkp4_3*qF5q<%_&xYF9=oH^~Zrsq~`rpm&@OHsHLah)u{I**O8=% zJcs9Ieb~_Xj-E72KW8AuOtv9`&8oyr#<|YIyH_q}ejwFeyRi@#emTqS+(x{H>H{+F z1sftGt!%?;>*dZlce^Fwmmd#}z^{bS40FW=!ET${IlGzP6|M~MPwOl-7MUfQ%sUWq z>Txd*rj~w6M?w$gKGiXAioRnHjvX3JEg8oc>4jlEd#%Ra<#)>b zsN&jDrWj%C%j4ocYp$x0wL?^@ z4v8x|8XE4KtZy`%_dg|-7YtBM!D7}NR5-ec|FJyZwp%DwX^+QtkKf?kuI85=9_G8trByRp*|H{$NK_H>Iwt$Nk_or+kb2O*-ebzr&bl3>wiK?@s7<>YoiqhHc2Y@pK0| z7r2o~yp!Z=jY6S6e>xM3YYEB)jP)nTmlP-sKW6ibis)7p5+9*-U67Dt!q1M1YC4HoPKp$|B7$_|pxMLgx1H57*A9Vt#s4 zbIhrc()y9r;C01f^V@kz&EZYgiP)!^9zYf(4>p0iW#a2jF~O4Kkr1oaR>$KOag4DG zu@+}1;yRV+s)_T0q}4lQ6Y7XgaQJCmF36Tg6cR;~hO}B7F!GUJbum?cVEGsW=VMe7 z?!se1HX@No`SFJ_Exj|gf|=%dRIwON%d47x8CkmZHWY2^;*aLnBFAuU%YFJn865|A zqNvA|m7|Dymw;O1jcO^&Ly|@J2!txwjph@aDLf=Pg0Ui95qxp#Rufx^5yw3$U)j}% z2DTN;;WoL!oAnA!Ttk%?%=_7gFMZzQhuzES{Tz>5(OI81dEh!5cI^%(MH>AS^~0eHz68hko2jp+IxHX< z{5o$7`X8daIeSEd=qgI9vSUO77f+M$Sw@9qjT^<)f&!WGy9ms7{*m0p!LhzXq_ z_yQ46-sf`mJOg$BzkU@~0OTz*g@6U|sq!Y#V;vqRC$01;THa;}_|xh8Q&Q7oRo}IF z#zUy@q22r1w>4DzAdiQ3yc|c!<=X0yFrM>Djn7LP1CvzR8mh>Mx zsln74Yv6J0s@be3oT-WJdYM$P#q()~wR&Ezf+t6jxZ0Pwq%K@LC3HF+e-jX~EzOL( zuSTY5H69u(ZfJ9_ZB~?Jmivm%>850|WRVNvWU6%X7@T)Vj|N|uq(-PeNM^fPEp@=7 zkFWU@!sku_Pa{_Q9NwtgBj#4h*Q|kDD#R@3d7^4ZaLvU(jWb<+(RcQgXUvUGEcggL zL~6A*jx6HbWQk0mUBmd`bI**An;{u)SW|uZ87Q@zkK`Uzt@?~9XOX;?J)7dTQ+`{2D)P=GJ=5&69i)NSW@ zJ2I0alXHsdNQRQ5*sMsP`Uh7?9%qAU=W6~{TvXUgS@kEHwd#$$OA_QfaoK6@c$LTa zKNY^Ku(L+i$mf<->*yzQaJ0xWjH#pYQU#Q0eiO|LD^3{Sd`QLQb}KN zy>L*wE86cBY$6qt%Jz!#j0PV$&XN>sq$H^yMniJEal~S(8r2zYOlU!S`CS)b*rxu5 z5`NVMw+h}Sk$F4&Z||m#-6u zPunxjNZnUg8ze5@@IF`Sp_AYEFgxs^m%o9Ay}p@6U$*LIZVCD2mimfRg2y9F45dfc zayltKFqv{5bH+M8==~|gxhuOtbmf78SQoi`8RfWR z24QUatR}}aZwe(uP`X}yc||vaO~9-jcjArt%X4CM4<}d$PcR%@Cw+Wf?z(br3$aTn zSNrgqwQY;T1N$CkOKhex4l?!N++&h#BrYnPoQz)S4fjGM-;Z=-A2q&?v(dSQQ% z;**BJh*|it_iUjn$`>kDa;iu=-`uRajns>HdRuyQkZ`#_g1jYe$j$1KdLbk>$*8Bj!SNo-Gpb%8o1Ckl5zfn!`G}-z@@ls_ z|C@chel7v#NssJaGbwp4X+s^gRXnjDZXy(5SOq@TW`5b-Bx!2OXFjXOU7BB=z;p=> zP*PzPrav2sqV!gn@T!YDjrbUVI9~WtqxT?o6LEgJ%+01%bJu;emTbI{W9HP=Z&HU3 zTI86Kn;eUgcUu)JO6;8OeBr+oNjq{CVM6mlc^zh>{;VrnjmY?(r&HkM(Ns?;T%IcO zbej6Zg>dg9a+wB~$8N=Iyrohd=N*C>7q%&%VLek86@k(5sev^(!bsBBU8UNn?dHPs zblNxjuhZUY=)2}|B`-B|p2_H0omwULiFJ!7sg!&grPx5H-OFF?c zA93r$nnDO(H8InCu7TCjj05Qwq9zJRAz>7w%xO0v*AD$lj|JW)e14_t=>Mk6g*{So zVB8@)oOh$jc@BG2yd@_W&uLW5Z=QVFN3qdRQnR`5jl98fgEpJKY{%r(@NEAN*F(OzwcnJH$q4}?JO-8f9B4$QdLNNRBG(=_MVU@m9{0P zXUz)AeMKo`QkD+LHtj>kwi`Ti?BK^^dLyg+@*r8~@}UDlxd(aPE&Ie$Icc`^X3F(md2D$1mZZn!B)lg?#GO8j z17qsm6;dk4t=GAYXJ}M{2geVwQQUAF>?N~rT}i>}Ld~T~e!2ThoM`sejXQc>YR1)P zOvc}Z(^?QcN+7Z5uqt3Sevc?WYM%M-xxZU+dcT^NT?+F0x)D>&WUe$t>C;;ouY0+v zJso5YE}yXUR|vnIeJx$7`z|}hd}#Cqu?=^HiNT|-V?M&QGaP3WoeSe>ifbY#3)9v1 zRlDi;(9ccx`VhqV7fD5@&f%7Zn7_ipu`bJfJQtS~xEfNkb}Mn*iK1;LpKr{CA$m{} z+q{IEUNMr>DpfV!3vn7U=@KEoc5VK3>I=*lYe-Fkhj|d~*0h>;lMsa<`|+a}d04Y2 zthrcFN`lv_iB1VcnhMo3JyIm$ZfXmNcN_177}1N&A6Q69UYw5U8aTO$hn3ad-X3CMsDIAT(%Q}(Vrgx}YW)p5W3{m| z(AP0D);F-QF*pNo9XeL@lRpAcXx#1}vi}wK;{|5NhZ;@f&BE!B#hJBkG092yi zpM8rP#1=P*Ep8B7WWGb7=zITB%54ag8{p8Ka0oXW7aan|4gt?_aI--W014d_@VUkF z&d4YG?vPLPtNka}P{1w+2Mhw^;QohgPEH6X7`Z*5wObP2nQ6rCnEtAzzi-sNTqqPJmH5^QjZ^{klhH$a%iR-Nyx3jFdcF8q*hVRHV6bj+s`pz|s69NTxU=JFy zWgvFuntPXAqbK)HTqC%-A#AW8bsNeKVdp|uRsNoHjxC$EGv{EM?W&6M)idnKIu{27 z{(~`LgF?7q>|mDef$=RX{2Rv6CA?jff4=&%9T^A4oAW#42vEI(?a2yqY4cQr!r&RfCXPDMfx(Cm)w-#JSJj0*x>&p%wVvjg$(#h`%F;~&`GrMLVVjP0l< zPy~egyB$Qpp`bRqC$|6ODZwP$m9)PGk2|u>28Y1W#p8eE4dsGxa_x!nKRHVf;_i;| z9la%pPS`>0#|c8)ZEuNS#f=$5iZGY!I$J89~lJc}ph)j_;)3>>&2z1dS5^C<;3V z7X-$(H%HI;Cw~d1+U{6K&+}hcM@t+SaNu{oX*fFq0YQMz_TuO{|Ku@2X1P1Ycl4NO z#z71SME(!s>@W!To=hR#W*dZnTtAvZb~xID?qzCn{>fv4NxwVB zf9EmT*xX0wjsU4K`yOrhpS&iBD|W~F@4O})gn^vj zO(C3}69U_lDdhT-*96mScWm$IHNh-_L%9Lc^N$6G!vWm3Cqu~fCyxmr$=$L2JC6wm zK_Kw&-<>@i1_de4UMx7*pFAc2QFq7q?>r_91c6*^KWaD|NRB!7=Iput>iU z#r9W_{XhLBI!1wkAdu@vQwZZkd(gd^LasmgOi&Ei9qT*#Of>7DZyEO8roa#&&EI3f z#`Pz!3Cb6{V|+)iiDn#xfr#%38;qR;K!A+rRUgFc1WCe~(dMaFFQl zDMkTq><<%jmmU*1!JV@n7#jit|Irk}U?9=oqbUTT=I>btlWlhr-_dJ=@CwQe`w_W< zv2pDYx#Iql*8~-~-Lbus*93xr0t*7to^RP2l#2`aP_{j#nE++{gSdC;G{4plf3byV zadWT%$mgFR1WW%I}_EjAzwmL0$4=7d{vrT;>1t zR3Mk0_7<<46+@RiPZW_h{81x<&t< zF9U_;O=9dB{n@wNuN-Mh$W!22UHu7KwicYAZRR{UlIn3cw!{APgayO#`dp{5F7cc1 zzrcC}Uw$^fUfnJ?BQRRiAc7J(kc2Ctg!T5I`920r)OkVLFG~dvtWI$yi-oWS#(Z>- z%lOled-JIZzV~Iq4T{cY{jCw|7Zu-xxTwcmaOOrQuIVx9aYZOj@f_Nq>oDV zY;epfOinMhVyWyu!JDfZ6Mmem{e)6zPZe?Ey7mzkEQ^CzXb;|fTXlG?Yzsi|b-W`}iQo)hl;ycZ+0rKg3lpQ^ukqYPx5x^CiIhQ$}~Zi~3cY z#i)1I_XQNYTt9JPotpZ*%EXcF)5zGzLASzIZ16!Bf%jVH7I6nRU5pLUIyFT{K^={a ze*k>Z@Osg#x>(6=zSs9=s9s{eCXHEV5<4Q;78(`=Ru~0 z#IS*F5F$+0S%+V7cXp7`)~~us_N)d5AHfY8>wx|HMnkS0KWw{kDLi%BSfx8RCwp>I z(U{dJx2TAiOWLd3+~Qg3K%ZRt!kZ+;i~AT;JZ{D5xKA@&aaGfBgwz->lXyLO>J-@# zA;_cSPkMNN(&;I3XSSqGABv-HH{0XW>D*ZsDIHGDYMsVl2!u(tAL$YC5YM8t>$4|R z(YvHG+GhBjZ8oLlTD|tUWe}`gZPM}{kA7-4>8_K z8I;ogm`0;X_H>+hsL}4)AyTpfIe2*s8;Oc##DVJXWJ@}H^A>Fx{EvEje9CLTc%-&u zAIS-J0ufo{oPWOAEPdT;4cv59hr2$mcZodm)e#OPwzmrWis|)^zsaRaHFN~F($n~Z zLmr;$btK#45ZwDmu~b!u=lA zt9;f2h1AWJP4<`RNiG+D)L9~6J8oScc7TJh$(~}V!BkyF=VnyOU`ed_svWT_X``P6hnZR^>JG63D z3AE~adBh1c-ah7=H#*L7J7=va2y>|>kcUVG=WHH}k;TZtaG~*M%cUIH$?u#GSGpdS z9dqEp+|M6RFtrr!m5)d7a3s74YhskJVK{1Rm^u_SMHB3e%X>9|_G-6I5YDtfv;}pn zYKGT2D%~Xd9M*;B_8+F5i(S@VstQl4lDjtQuHY2|56TD}cN2?>oYur%Ff>$4}IWE(il zUHdjhJo(2~D6hV_I(vA30fmrdxyhoqyTIIY&eU+M!JNd#N0SVr;!;YDv+m+PA<;*j za#aNkneCh0sV=WYOD%GUCW#z2?t0qal(7(;^y(CrVVSf9j7~&UT_XIX?c!=qSPjSK zdM-iNCAYJhlko--htspk#!nodxeyv3jHkc960_YfS;;y4Ro!Z8=c2I<%k#HwYg)mU zEbSLuN4ZtxjP|vg%gW#+grzS%nG$RQjEm*LrhaVEIW$lM1I$Wr@u_s5$tN$#gxs+x zR4DKgRL;*FG;h)?Q4_m;D5;Z;Wlhfi6~U0toyP{wEK_{hmu4ABW#8q?&xC9ABaXCt z_Y@XkwTuKb>J%1Uv}A?ooV3FL%Yj=4QiBbXuE;&VuKnW0WZLMJ5JBN69q#VS2RE}< zucv0Sz09@s#x%`4{TS1=hy*2#<)!AF=H!o1y8dzbMxFj5|0SL_(`S;;FiMjr519IQ zQAe;UJ_%BS)&wDxrP9Uk+&@_|gd=R`mUq{^3)3fV>CWTfHg|$kA-NYh#j_WlCR(eN z1wX`QAvuax^rI(oeJoP3VrjN>)Wgbmv=kTpqO6M9k0scA z(lmWZ;lOTXgrjKB>c4DxxK1`P6w|H-Ze}NJHzv#6I(?uzOgSOx^vptoNNisrB(d!Z zrPsyTwzhrZ6mJQ9XYAk?Ju)e8Ys>QFKcjlw8ftFbt*E|+&F+W9O}lX#OOI}qS>=lU z#oJ9!p8A{U;gE1b`S2dS)x3qAiD>4E*0&k{NZ%FlVKKYG*|Ss+ zN-?tX_&(9JQg)-JErisl7?>y(Gv!)&*RaEVuUwJ|@hUHqZBTfjK)^SSSC~1YBjiIS zS(xRZ(O;Ebspowv?f!FB_bNLFQ+^UXYM-Z`7mE`QRN$nv+$9glX9yc^uf>E6@bfLw zk~;*%W9-NHK%t0A%?99xz@)oeSgQcS7PmS}4 zpKzeRqVN+WvqfPGI{DW;{8Ul+D+)j16n{nGC%E7%h3&TTfBP0+8z=wC+y9EfPbu_Y zQTQpB{VNJTA+cK&wi4HWEr(xq60rrk{%Z=q>f~-I{Hl|?rSPjxa_mwLzv|>}Dg3IF zyQJ{7J?Uqi+%1J)brN7AXdvU?j^@{Pou7HwErnloa<>$I)yZw}>tDacFFFYW=<=@Q z@QY3YY<+hWe$mNYQ}{(EVcY9_{bC|5lP;t6Y1d@T*R8poRPIE$!FR&wuc+OA5d0KzaGtBb&_+JlKe?0|LclWDBHK?%z&!juBujBBG`#<4*1XQV;rDWe{bz$(Ct;fzu|nBCH$>H z+lh0~A^B7P7ze10@3nsny1i8SH@xq%jK8I5JMj(!D>uG(VsWs8^@Mxs#DZ?Gt^N() zyR73w*?uz1-?bbp0sFDr0|6F9>}{PAbbB%QZ}{G25r1nU?;vjk`_BuN!1A`eEmVU3 zv-Rgr>%ss^vdh`|lMDJTZ+6h4_v5Mpu!3`Ms|ujsmfP>Reh{(CBL0@4+(F*xg)=`d zD*zpnds|ij-QFPJH=44`Dn95k049DX&OxWj&+7_6r^;T}6+pLlHTVthyDa8!dGT%D zzg6?OLAUY0*le^mNXjx=jOhMM;Id#VF@Z&1n8mf2F5hzLH?*NHOqZO+t#zlp>Z&=k zi~T~@mNfAHAL8CJpss998io)Yf=h6MyE_DTcXxMp4Q>H~I|L0L+}(qFaCdhI_MS-h z-1Kx$-`xJ@n}6YutgN-y*?X_5dY-Dp&-yz8{lf=#ZEryzl(+;@6qkaUBygiuA&-|_ zaX--~QC(tLHM7olG^2UXnw^x!2sVg*Vx0G3!7$8NWzK?!lJXBl_xBRXl7WOUB{{xst;02 z)u$JF_wz50#?aN&JIurb~* zzP5|hYylNR#5Y?uBhz_4%uQmh%r+m#0fPlQ3zE6CIeYt@+CjFCf0Ym#Hqx}-|9M^m zqw~U!YWzqTRPZ~4tjj3z4o}l*`&j%kwgr5&N!iOIMPy6^EJ9;}GZ1MkXv!rx3Jcu; z&yT)7AM{mHCpAiqi1g|{Z6DD(R1KtYE>bqA&_*18bVCY@SU<|&UZqTzTt|KcZG?ZIceabTaZ(| zhWaATFlPY6S@KCP;LdV=Vmo~M_E1O$EDnQt$j&T zOC!p~@Xuit=_k+TNm|Nu9G8c^ZY5@$^o>XgZi@$QJ@}fOc%-FHl>r4WT<+h6o z@BN8(cgd=u`7?Fx;yOypa5Gy_&pJXPxzw{lRb6g*d@&{3VP--0nOm~FZFpURFkbJ= zqNzzlv-L^#v5cp++-`xJ)X)2f?x*?cw7e?lg4pwyFwxn?l$F(<@yOw{2rrL8WnuP% zVg&;6_mc><889KfuxX(gjdM-evS^*;coKwztjBRkB+}T+`h50zsTc#Kg0br#IKS^-;Yv1 z5Aloa(f3o$&qMqoZSwtq@$(SB$eVnB*Z(}kFT%U;uic-A_(eYO`}^4D=z)v^Yg!jOTU_y|7Tw3u>ZN)Io-eZpa1rn23VT2 z{5$XIV&(pbc@fm68Rd<4Sjc2nY7mSVAI*~rcoQtEm=gUCLBb?NXY-=@qRD3;zeHR| zr)=oyj&cQ66i_WAo~{WFFC_|DRx}~B-qX8JFsio11l%yHD}$dJ);xMe>0RN^lczBi zj_X}rSzbzdh=G(#yy8~PeXr6(!42VCuQH70g+VQMx;dl0ytEWtG<%0h=iUVQycMeJ ziX0ir`sth?eZQ!7zi8GCJ6NWeMHx5^A{oo*{Oy4xZuEmY z(E#6q!d-KtU4+_ZDH=x-CR_OVHmTZY)|EiyV7%9fg#~AYRaBdm@ec*!&X$ zwykU_pruqz**d`z6x;DS+n~<`XFmLF&xN%8i0^gwLY$vRp&z43&QfSGg6_e{VwY;2 z)<$rz_ruA^ECU}yvJk^AJw$$6`1T`bg#!`e7?EuXQ)%tWRam3-E%k&t*%3vhu+q-@ z;Ubsk{Vd8Q@0MBi!smWS?-_MAHj;=n*@|QJHW)d={_hO0*%JLr2^2tljP*Mm2wl=IF!3KOK zl!v5}uVSw_4!189;X&wFCE<)6GsoW;bH6_>tvqD3Ic2o5gJuww)7$eg6vC zu~}gr8-w>rD~v=W_g1P6LQM3T9GDN?tPS0BQ2zOYz~Qnl5mXkv_kzg|nw`$);b02c z+iNO*T|Sa)9+E)_eZoEzg1M*0tQD{XB*vZQ{0rieUPh>H_i7}5zG-7O;^*Xx)aN;w zTT(l8G?&IfW&R#_2N70pEef@W&#YLUXowLs#uQ4+ZUq#ISR8pyHfqKm4M`P2Bd>;B zr--EC9$fQb5jHL8iyG%^&ZYOA0a-r@@rSziP0kXhBL zshF~8;ge^IqY%DhO~ND@DQAh0T0q>ak=nzGX>qp!m+XrEs`Diyhe@~S6bB;2B)&pt z5U&W}HPZ0Dk8PmGG(@*Hm(z-$|^mjBI;#FK3J&NnpuuNA@l-Dh*r(l!`Y8h9+B0+tU4KQC05*}d+4P-pG5OyOAFsjPn z(c_Wdd~4C?Df9Gvh`q$5h@uas%=0vFS={3Q{hVPdq1M=I z*XH)qquAYj4fPQ|?KONtf#5tTLQBd-OHyn_KHxl9j6D$BiGAy? zEv2w@Y#&x_N7Z$bZI!D;Kz1+a)Wt4sc*6(yPIQYVf8K+vi2HI@ErL+();3fNW-H5@ z-c8mpQ3JWP_V`V-t1BgsvMP(tQ=>W}+`ZA~^cb#Q9g=}tyo0n(-y!*A7I#tPNo`xJ z7LM^m&l1)9(~u4PRR1<}INX%b>_;)^@#th|& zw=M9i1w#CKK&NJ|M{7C^J5c_LiqUlFN$^UB`yOT8rpB$+l`(2f#PngdkxWCZw@Df} z$y%4aEEvglcf6{W@3l9pHr%f+7z$*GxycPayfKi)f920j0X2d8%88z$$!tCDqdhXl zt-h3~w3ck-Mbo_Q%pq%aGQu@gg!)kMHuQ4zXI`hZhY4JTWrp&D&3;I~*7q{DOlD^P7VG0y1C% zPrY|!XHY$?te<(brdEY8p2%9~?_h`_4e56`S3W+NY$TCAXR#FStAM-;uEuN`7b|b!~cfAs>rOEG<*1+Ob)JV>LFLg+~reXkNh0ef;*^NPAna4HX zO2xqz8m`5M=PxX;-C0y=qGrtr!UN78O-4EL)C_HCbnT~Y?iyQ;h~DJZB|qG-&vx_- z@a~Eli{(-8S~I94K4Y(0U4Dl`42(hj29>Yi4w|^z(44a$ybP8O%xn@d^gMKBCA_s1 zOg8#U(M|Y1avjk{@ZjXo(s8y|gHuG`m%^zC_tNXsbmvqs6hjutb?S<17DABhmdkMH z&KB!aw)V!sc~H@bY)H#jG`E`atMLL(;;F?{bzAPJ2yrg*lFNrm`flfLdoF?6^DR}V zan{cMF8C=DaT(brriozpyG6>G5zCrvS07+3E8i!IRC5|sox3Nx9O~)a&YeTaubJji z-f6_kD?n~}u}2H`JwgNOnz)=^;4t;RpaLfl7xKOHnj8hQYqyX^!C9d$S4)8!$Lp&E zhQ=_1%Ma#k3$EJ zek~Z9h;(M>!z6u)M$WcAXa5CNWH-ONo=FllBR4b0bZKY*Mx9aP)-BNT%kE=Zx^eiR z&m%GPiozg@G$vOth0!FXCh$&Mxh$lOGdP}k($_3-xJ@#Q#1ogm*9?JCSTr((>Q|6F zuXz@@TQay77Bg#kF+6QM`&n)*SlM6=P^ZN+k{{3j-N7L2YdoJr6I z8`af-0lDeQNiO?cighL@F$crf1+ZBbLf=ZHADCNu%q z{OvbDP|vb$FSZ+(-X^-Au+955v-WzRu;M z^kwV?(Ku>S?RLJMD2!QV3&%RG$5X&j*ZI-MZVbUJ%$dtcG)WjCYnJNKU8Nn#UWhf z3V5t}J%3RwYR^OPTaP9HZmvqjBR|3xd<-!h*52c+}A zX9WvLX8JEO^}mn~KvnxU7|AN-d8_q41kY>b3j&m2#$PHxLSNrybDLJI`4$nw{VUn`?N(a~!9rtch3OA#-neHC0*R36g&Z|{EHm<8y z8^ZNg&Xnl%vUm`QYYh|{^pcQFK{pO~#P_^Mldkm19h*G&AD2aGRY$e^)B zp6bfP6ZffQ-bwdBUfo3s#k%O4B#A{0TZ271rl4vnD|d#!Tl8AeTO1?qh+$*lZDpHw z53FUG56bxo#;iG~7tIu8^?Iem8~wsY4}&Shsz$IG!Kud=eQ&YppsgU7rhCMd&wuA*+L(vM%RZBmctXcRoTVdD}pKu7$3={e?AGZK33vETEGHl22W$i-be;5v$$A^U4qIj8f!JWD#~J7j@NQzgl+!o&=ZcgwmZUp%^EQE-n`FfT z8ZCB2UtN`?LhCWLlifxM%{(2_4+`IVN5)DhuhYMA6e6jtt0xf{FNS|=5-rh8Sw+dG zqt)hP63=SP%(N_N238W-iJb0WD+Nx<8RAJ3T(UchkAaOY0zvy6DLpy$Bs#>CetlX* z$0A27HP@0lK^%x$j7JI!w6}^d{v|OQ>wqMW=ND1T8o!CH>An@kveS2+iRGKjB)B{o z+f#jM>?xAfE7fd$HfE|Qf|oFlkIaeHCbZ`74SQueJZNeA5XD}$VGKQrmIV#%GozRy z&Oc`@zI|A4(d*lGpD-QY+HV@Xodz_nMHbZ;qbQeI$Zm3&;ly&9;Te`l_P?sGi06w0 zr@(2Rlx{eeC2=iRA6?y{gi>i4FQ1n^m^Aq!@(Q=IRr_HIov}yEjE-NYacI|5V&^b- zjlwU?HX(|nZI`efKehh_#YVQyG7XIc9=FwSYh^AaJQR}Sqv*SC?dQ~@A>4^d&oyp9 zSC%fvbyvR3G7ui?gTkC-pb4gUBG1{-3^f_hAFgy#G@g|gr;96$XLRUSG8H1_-D;p# zcrk7IS~X7a*pGyi-X7>?%in!`-yw(w0`Eq3YZS{yACz5YLG($hn`F^8>6Gs5zRo-& z6e;Gcu(;reLh!Xdaw~Jp$AM?PxD$M1)nsc#12Yg(-oBn^iU;c60HoA1?+|7!erEFnAVrWHE6!;cFcvaU{|}mBZR$ zoQV9$-$cTfWAK@hDG+?Hu`eJG9gcW;BQa}#S#w;5y{PMaku!z|Ue77Ai04S6okRV+ zCc$80(uU^z zurW=2sz$&nn%m?Yj$G~vxGlm8x;tq0F=Ss9g^mtXltNy_L9Z}KBItKh z>uF|{yG1PYRk5ApvIK@1e_17-w0?>@Yi|@J{iH|p_Bu?auSHj@!3h{+OpMWl4s*$O z3GAuGKb!HiqTdU8?+W}xeFnx6lqFsc4G?QPVcL@g?=MkVc1#|`>-CJ$?yahy zYkT@FMfR=w7|iTu{G^M3(v4M|4<>8sW*@I$%(R1)jtSFiRQ4iiRcghS7^X(&^qfNH z$p&imeEIe$w|KRMNKT{y;a!*~N%kQ6mszX>SUhZB()foJW~L*XeaFA5lExlx`{W6~)CeU)IY(DeJ(-*Uukx=4(^0vnWlJ zdQeL~>{{spgckoq^9J=kE6nCtclwyqfMT-?u9a-|-VCK%JPdp(= zN+q23r~LSta=VF|vmy+Qq%W9x&}6$-=N*S{_{;(ZUn*Yk5fb9pze-c)j!7REddc(F zqRRZUJyo3^njB9?#<)02bJeUv3+=V$l+*Z7E%nM57-|h)TC;xp#@4Y}7CbmQa8IC) z?Xw=(BViGZdr0qSUC!nBPwp~)lsTv9wV6_><}kD(rSr41Ae^BSI&1KDgq>FJoT_yg zB*KhD${EUIa~WlqIb62Ay1Xob6{VSC?(|bwQ*C9*ve6II;6+wOgS@!qA z$8w{Dcu^0t8>`1a3y!&0ib7~F)6{jJRXC{c(A}*jUBM{WILZS*=t($}qAWXPmzFtq zwX-?8SO_u?YgaOWRV-r=Knz{?axo`bJ#)m6WXFL=@!oO_fCV-&INjd8acTb|-5xPU zp`B3w0_+xWCm&?T;-gYR#amkx6MwDKKEAtC@-et0<7O_X;1x$F7 zN`B58jtE!2XRChjt8}=#odYideY^f**Df&f#p4h+6!tK@6amCNwQrZg-Iq*HgH(vX z$LtJrRb=jW?rgrBhw*}!M3sxLJD<#_T#TOhFo}9!P0f<9bipV{u3uLLcBoMgRrEYFMD5Su%}?c;f34m8NV^3XFMKP5``f%*=C37P zzb9XO^-%j-J@=o9IsZxI?f((z`K?CkYo#H;GU;2z;Exyzx*stV|57;k?Qi^!Eq|2w z&;eW?nAn&A{&-&v+`c+P(gQ9g^H&QDfWr8nn@7<72)_99f)jvj_-o}!-&Xa%fKo#M?fwGI0 z=k3-+P(4WWo>n=BLSaWA_7W2z+MH6XG9d{@B#IA%%w)kz%DY4YXzng!6xUwSy41MW z5MU^v7go?$o~6>W2Z-RRyxQ5$cpCvvnRHIJh+*53<4)kEZb#o^5pN`s<0>Rno6U*MKR63M%y>C2v=D<<`yM7Gd$}O#He@7a^w$zfTi7L2T|RvK!kWw&SS zi-vAIR8wNh%O6j@v!-}b{QPiJGp45)9(e?Mc%)D=31uHM^<5XFNQAVdcrB+58|X)T z8gb@zpmkH_R7qFalz5yoUm@4&BMG;M*WLGuK-u$I`{4l|I!EfgB|Ri_msg`gDxidX`=v#Q$+bA&@_u7*y{MB*dYhBHZcTx#Dj&oTf?4GJ3X7rbw!{Y5|=Ce6k?s|qn~cIk8fk+Lama{uhBibhqYhqdKrZbfed&TR=fa}eq(7hHp3jr9<5(<$HF#Cpbt|lb zOD5zBdmGECMJ|l0Xagx&HI&Y?z2XcQ93EVAL$oE+DW!DH#bRZKiC>R{s$tBX{Ze+~ zq_I$B67J!({-we6Fpb+q$^=8;L!BUcl~eX%r*V9V%4tpcxo!LXgfBK$MNDYF6n^l1 zgI6>95@pi1niNpb)boVwtz#yWJZm4<|*r+oVb+38rKB_%a z-+vwjdj57K)$z9VZd^yQNgxU$J1lkR^a zQx7s)W_+pRw|0+kB^Q8~P^onuT|}(chD=dk^^$g@yL60H-f?&XkD{AT+KvsZub1T# zd}F1Ihs?d}a_-aNKBqEv>|4QhOf7Dcsz_~rsq+2j?{S)q(Xa$owKlnmlilNP(&WcX z+H>u+$?MzU+}55SGN(pxn1z~31@vRD<#^9<^6U1RnexTdN_?Er{3v2jSOs_2hKA|4 zl%pii&?1`Z*CPvBTO0Pya(IBTu#ys3S;Ad7amgH#YX4~xiJg{hFKnHy0qs#xJy14(29o!iOq~W0ucUaQ#hrBGwg+N;uuJ zv8M7xkN5bXm=(&dM~7bUPjX$LoDDaW>wGlkt$PU@K*U{HorWpeAms%+?B`-n-Fof6 z=ATJ9$x}n|K}!A$SVG(M!|(@r=%q!aRKJzC$@@my~r$5l{F8xhmMuVTz@8r+2paHl!V_`v!^h2aQaXs^19JhUvS9HRe&AqjE(UH@cbJ+N9>Y z^XiN}1jd$eJ(DF)t2uhI$#v9RtQ>NrVB)Jv71!l_+aGbh#*|cP(POIVcw9Ah+f8%; z%&svqMt+K|ea+Q>U-e#>0;{&`i>M5ZHxw-pb>jlnpB&VGwhsSe?47QSjXkxgp@Y%) z*gGSA8apF>dO&d(wTXkJ#h(Y>eLqh9egOKnhGbv^r0)DrL;lo(_QxSjb**&2O;Fd~ z-qhI2($LDmp2pG6l*(S;#L&{v{;%fwFH!;kRM=VD@L9V6j0(Q?J23+qOTIc3d_5Qc zhEaZ`xcxmw`C5|yUl`>_+}r}1 z1ylkJ(NLcqU!bFJ%;s6$y}=tfbL^zWI>SO*Awm6zJH8B~AvVe4ul*T|v zk*>V@s@zTKF!U9Td6nmynK-9M(je#CJ=oS6WEsJo>+%Lkdm}!y7j8}gqgIA0<97mi zbed8|HSy9$c{Phi6~p3a=MMBp7@mEvJjF~Sf=)1}tzTd=eMq~ltVRmV2j^XhG6#`G zrB;Bo^l;{~t#YBtSZ&I=V+`Mj#c>j)>Ia?v5*{$+4u2PJS=N6ubCRNA+ace;mJyBb zfeXqYgjC*xBpa9Zkfh*W23;m@h%f&D`v5|)6E@p5;W3hSD?(+H%8S^(RCnHBecXA> zkCbOR@?0WO$tJds9~j87{<9|ax%i-+0#iAnqO6l%vEuWd-7XJ1k6PSiNli5Ct@G_| zV=i^UO2x33Tr@M_V~ope4YZ;V>erSI{pAI*#zngQY19&1>B_eCu!~p$2Fb+p^TN49 zy*+c-hosUXVOUQJOI~dc4*j-cBbmn}J$GWSiQW}|NFUUY*bUq!$=z;B9mG1sgj0+z zag~`dY@sm0BvyUveWT;|vMjV+XFpr!Ldd1;O`lDlG;O9nrrSLA`+3HsH&jf5tPmG7 zP2s!tD5aYp?4R&5nT^X?dXan8GOyDc5TU(dgL8A15G9lLUAJF-OcXnNJNVKb~TWc0sCAgy_G~A=usq@JD*yv*3c3c@JVI5nXg579U z$@d)z0t~$OY*a+yZ?MAT)<6ZvP`WEZKN<870JE$dASt~g`&cIIjvWp%bi~Kd4KZo~ zBMiqF^kxfu&ay5}#gNW(aOM^lPZE7Swow~r8e-By3)8QeL&fGce*em?_B}K)hKB6B ze9Z!EDXWnbPRkvPq&?LCX4Gv&wV9+mb_Cdis>` z=ZT}$m|1Z7Jc$>Vvy}P#4hP3x-se)s(F-ijx5>8`7*<){ZAnC-Do5tj zH@UtvSNzh6?emOqUut!FL+;R#ngx~vDGk}c{;4eTmh?quM+B4Riw)`P^(h0`J6oDK zKFPw+-n?P_MC8xXYbA1pjzP6wh_TwyVvt?Dj6K5a^i}g{s;E1|MT=~KCVd;C9rLQT zlxhrFWUoTcC@nXRmO^GYPLshHwE|(=fD|0%4&)4@<$0f3DEBWF_HYVI6tRTLst0Lx zmKj!yLN(CDv1dD!HWZ_AzI$Jd!)wp zIRY^ZC#>c#^m4Gi5Wj(pxdG2C_X1;thln_Rf<2WTg5$AgI7rM=8TNH0-HK7JcrNfs zj0%+a1FfLhAv*(;#YZtCjeCp}mkt6PFE92`j+4}E!-I%WIa_`$im|E4oz-^!5FZ>R zElh)MToA8Q>cThiSnm1>r`9kWjYBT)Y_Se$Ym0%ZC=GA@B0h6ZAan+qt&Kl2=?~t? zDDJJI0lm#de9jMiFl_>)tl95J^g?O5O}ws`JDU@fkB&_=d2RYd$-HzVyIEnJ*9d0X zp#=tC9tf{}ov7kwXFjcHry;rNl!JI&3;=u#V3p-n9MV#rozq6Vfyp#dpwvC^%r?F; zd?a*S>*7b9O|&7twi3_h3Af8K8%H&;zBLgXQk&ox+VyYhvPJY!QYzYTE?9xmm)1?{ zOH2rms%3*>ekPRYbmb2D(GaYO*X8ZYoD!FJGlG=z{je(UKNA@YWV$rl<_Ap`S2w|_ z$rF}DrbYOlgXE+G73@MReyoS~hPC7*RCUnnsFZIoN|h7Qr5K z48%+cvOB3pO_efQt4j_lNv<{uqBSu3c7vnHi91>odZRxtTdp3V_nFaw zVrMLhcnWNpcUdIUS(%xSJv_rel>~*uQXsEj3fnW@aWLRYfs;w^hgVo)Rp@(Z_kjtT5TBhU3}M<3n#;73dKD4UL1)6e$F!q zZD(shAaTy6{$b31jDqRGP0Chgl*`_RmM^5tNAZM`Kd7`-IE5A@BpWfx;6kvoTxski z0g?+@>}4cH1BmLP68k5HV9cJpxi302R)f4}mP`|G7&0Xl4akeLe;9PVbeEs^66@6L=i1}3{;bdOd>IPm#dk%CFoN22?S*E#a zCQu(ay1x!?Se*UGe)6u+=S#!;?BR(HINNBhn%nAM*tMIGqqjbvi%wrSd)dD8&KGuk z>||r4?WeO`L@Sk!$mU2V*)fOye7i^l+y(Zw?b;;?K_6o)ofg?C4ObVfE+C=? zyT~$ebFXwlM?v1M`!%}r<+k@T7@(DG)3HB;L_c-N{t;~aoCN+?(BdbThJOQE{HA04 zO)m?;ZsK2|#gEMA{|s9EyUE`_u*3h2^6?F;{00erWMk9)2*;-Tk&aFG!&2pIF77vF zlw-!8x(kq|vS00lAPea$8P?tf1Y=tO4%xcCDCrkTDj)CR!J=>R$v8z6Ly5s>}B@XvIrA6e*s zz5;+9*)MLvPvpUGVD!IM07zN=9)SG&3IH*EjQ?;CzI%)O#R`7a?Bd(q^2a@(2Slv_ z`t;}l8}JoTGtdH})EU2~RRFrl{yC=p<_-TDZP=DM420B1k6*C}y18~oN-2w)Hp9FwD z0O+68fZ)M@rV@Vh)cng0_*IqgPoqN^0gs{YcQGAc1HK2`Gk*2Npa(>A0E}zc{@G*b zH@fOizd^t1h4JnE`Q!TkCUepQk{*Gl5(-H#zV9R!wL%b3gz>qsHmMKTg1i#0YL+66{gV+ z*$hstDoW~CuH_zcW;HGu#pm>93ROZAQ4Ucd0H($VUM%e7vI1?jg2m`CX)>z;OA5u8D9d0ahyJnh+w77D;?d?81 zTf2hgqxD8T-u+-*s=eGMf>{772*dXdIdnjg(j!#h!&1rKLIZ0lVQs_;{$2BjJ@#3y z^4T-*=FT@Xwg=)k9*`q9^j0n0n(zUfRaQ$&3rpn&jZ|loO8Q-KoK8%GHU^OajVr0# z_#j_0ba>(I@z*{ZIo6LAf0(vWZ_-Oi+TPfIyEGKGVag1L-OMlJ;u>5;e%cou-Q3)0 zk&7-Nfy_cS!Ji*+Vm5_FZERNXR zn3Z3Es#k^%YD^4tvJ4n#p3idHd^VI-X5Qg9-0m63tU^E=ceA@<>d0D4I=j0V(s0%A z_ws%nnom^_geY}T}ZeA;&F^{2V zIpVkPI!H$7phquSgmn(StclBQ7xbgN;X@LDhs+Wws;~m`?1~-spZF+Ic80j|Wiw=n z4!L@Eqq<$8dCIgUO8_Yy$Y_{ad>S{rrJQ&-!7ygSkjn(I3@%+y`_Z?rP)`1kjBs9Q z&fkRc$U*IpzCxi=TB?MJ;e~@4+a{?iZtcz*wfCdRV-9*Q?WP!x;9w+*W^fOovPQTL z0XogQ_rAx);*q`l>lsGbblj=X7ch zK6~O39447j8w;qc1Z~xQ5UKu_NFbHI7%crjE$oY%+AlKM(w-;MYc0Iv2^)te9L6y5 zQLaO6&|tw_0G2ltI?%F&q`T1gh!mPud-cL$Ya@vopUI9^Jgnh`ZKoYJFtr!tN{+(9 zdE&9I%(Y95zWnTiXq#v-EDgF!22d(`#%=5c^TQbFL^u99FQ;7hBarQ7-W-#KvAPqK zvmPI~|2kz5CN3o!k8s+Xl)Y6WVoI=s*>;jnUC(FSCP5v&aEGkPd(WsBa6&8;3C($O z@#F9wO|e>9??*C@ckUBdo*vGx4v)oO4SCb?6!ocS)x5;O{$dZ@jEWVhHW0!zV2;;3 z+^Ft!~XNq?irYHOKe*GT&@;8@wBHMdg)0?wf@ z4GfkMY{?V2m!wfM;<1v;Zmx{k%iMWXeWW&8X5?brS?2_pcS{f+T*)&lq>d%C1QAOTv#X*8+pkgm41d;a=bRK-(v3l!ESNj$ zos*f8ul93b0~wb>tD6?r!wwO%bx$i1pEM44J$YHf)v(5e`HQg(D$t@O9uX}3X*vTD z7xrH&y(O~uxQ84gkx!E}f{q>@X$J16Qkq<6mm9$IB*tYc!7=|tz=~IP;=?95AE5i< zoGTf6#4{b_(>cW))qQh9GSF-PZQ=6c!MQ1NDa6RKCnd*z1 zNG#SF=K~ntbPL{BTjOZhWmV5bCoM#yBc=UsEC}A#L_%jon@v!>ka&e5G08dPWLJGAciRN3=4GWFX^n#xOhb|#!lhTUq%*9rn-_*?k zX$XPXaR!DI+!L@ptLO0r%Og(6-=#a?lex=s3<(~6b|EdPUp~)5^+7b_Rx1d;NmKpG1mIU?rBcdJ9( zuL)S;rp*S9z83st5>DQgo5Zl6v`y5-#ss6=uLbw zsgaDy@G8bV9URk0KuR9LT+Vov5rl}AApB;NE%}%y24k}-BhLF%?xoF2=PKZdByXtk z$UEgUi@ZII*eKy!p1ThQ(t|@^Z8O*Hq-Q44*N)Ww#HBkwN;uu!cEZOpE5WVSP#I0L zM}&JyQDHgHi(Am!G-w9`HZ7-7PZD~=#~mc*&sF(x5^28kECKhO|CwR53^}JmGQ6Kz zan^dWjh!ZXVulLZhHKpUeFGk7=BvX78!&Q{hAq<~VcRU?$&p=BHilV2nDC1|aC822 zgmS&2#o78Llx3wBU^SRZOR9*II$-?W7*Jm!BrQMDy%H(ik~nAqR~NYHqS;pNCLFu# z5OQ2;NwmSR_7UsZrKx8V!|HQp(B>E<%J6Hw9P2|Gz?)2JpQP495M-B^&Fqm z!?sWu0iKMSc%OY?O=O2$IMJ0w&5_2>;K8qx%6r#~)N4LyOp-Zp!;BHc+;yuIGnJrc%bA7;t4IIXLm3J4(6~#Z;HxLh4bM+w#t_#QF{7 zwQGSGUxyVHnihfsj%|d*YE9D9uBNUowvLLP`q%K}IOUXqsWei{8}?4bS$arKR4_#ICCi5Cwuz!c|y^xOwT&i#;JzhSCB z83KR<|89u??t%QXkp15|IH9T;q(7&h~MPs|GE}Gn|m_=iUj^< z7C%AMZ?pJ$2tbPH-wp8<@%+50KO2O9^@skOS^Pw3{xuuILhWS_Wk?Fg0>HpW{ zBlF+$jek>t@K20%zAfqxh>!`u9Q_+Iy}!Jq^%^aF^S1IJ-RrJ$zr!v$#gLJy(yki0 zMWjugH*bpZLJ+OhuV%{h`N)u+Xog*0jkuq0NiLLGwv0nVJ3HGht2KX4BpTFHRHBWX zYN3bc-gDG4Nl5_h^5eaI!61rf2x*j*6Lm!|0kIlo_l5`saqIfpZw%h|Mi=7LL8NUN zq8J3KUfkQ=&K3zq0iHt8$5#zBr(_JI8i<@u+yrb77Q)BOC;IBHcTwSxTE&Q(P;(>6 zCKXbqQ3v%|X1W2VhYQoCxz!TT&{U*OvG3`m?1}LG=NfiwFWmZ9*b^WqZdrV$VcxLe zBB==D?GIRQNn~~#=$JxPTq3R@gVRAgkJv2TUkhpDo4%U!M)uEPH8s3ydw3?HYaixP zCoGG>rwW3&`od7R{=S(>hh+{Yk;&(km(Cm*#{{F>qM>8C|62|WQe}$k9z5m3@jJ@` z&Efb=%`6^S#E$no^BFU}m9Ga$vl8uC8f4-33g@<xZ24Yq!jwl9Q#Ep`SEo7Ca8wp7_N`Cp3yR<$h*W&BBAbwkBq5|8tiP8zDikRQ>e4i=G-UroE@2PV_BE z(T1r+7~Px_=a+VmFI#C+C#J!O4V&$kJWf9~;cfHxxRlMOrMLMyH#aiF1Tz5NpDF`d zC6F8OA^zm4{Vo3C_Z$4L@6O-KkiMmPeC2R{zg>T;RFQYEbJTbE{;@qCfGz#k+Z7ON z`JcB+{JUDgj|ct#jaKk`%*ogCAwX}#H!a|YZy6o)*Y^S7s%d`Rfv;El```Hey8oaL z85!BASpb~>*KkexAMTutfCOI_7RIliF)&jDii`e<5WxIfqsyNXSidR+d|TZg*Fetz z$Sem?=76>W0GS2IGzaJcUw>u2_d?jPtdKm6MNoWBL+Kl~a4{q3ImG5_EALk4<44c))-y2w!;0Pu&X zi+2=eWU!RU*6-d5fk+*|aQZO36;LHojqQ(Cm_QaqE@17SxvsChiKb-d8R;P=t2jDO zbw3&^F}+kWD!F;MPMNQXo7LJ}J0Hp`?4C&(ic||p;og)=sF+eDvs!8@XbBrBpqPGt z>@T_(;`q^N+@TqDpVUc?Myh*;`_aYzT1jK^{<@^j)ngy3#lHLK6B0(`(*wfH&{WFM z)R56Sl(a>Sa_M?QIt_Eui5$trqJl+w07X|GLb~{q_nMWy&3X6A>(e-CEI0HjZ=_?gQ8!+@u0rp>(8AR; zk$NkA;Fj-1Qeek#o`CJr5*x=Fl1f`;#NxgfEM%zBp}~|iCS8bds1>qFu7<@f9ZzA+ zyRPoLh*y%hQ)(>|UibT5$H$v7Y)%`svg} z_0nk(u0@*Nj(sy)=4Y6z#ib3E%IWI?=H@^Mn`TAg``h$d9tUgCsk0tm&K(bsFmhUk zOlS=lcNjunpYw~cCXAnU@y{lca~mDnq0lhq!d-2LgP(V6z^#^U7ly#pX)-Ohx>GDE zZn>xsLrd+XS>)C|NvY=M93ekQw0=@Dv3tv*5z2Rbb!ZXY>_1mUv0RzuOjaW8)6)Kg z>rjQ)M4CFyh-f4;17eYxeGvgQrlb!$;-@xyo=>D;NW8zL(x(&>8WD8&_-sZf>KbM7 zC6R$->r}vSqMwrIta(U}Zf)q88Ka6J7;sW?4De;#AZDm&!ihqtP(mZ$n4cdXNg(tK z@*=SoQ&_0|;Q5M9N)|6?96UwrMWB+T4W$wkP^Kr26|@4n)v2gCFXwyP=pXdXM8|}|E-3}%NP?SVjy~nkCD+e6 zMdpsGWp&jNB*J6W@9uOk0uh~-?z*PC2@-%GsE)f|&F^%nHktUfo!_~H)PxwFIPzjE zeXyH3Dsy$ne2SiU+{Zjj=8%lnLro|e9%P&>Bz76_RjWEaY}b8nugF(mVtBw=7@1c} zD?57bR3#(zqEImqu`4_X0skFbgE2K(=wAJ;WqjuP#L_uQhk?!Orb#zZDB##oQW$I+ zk#(=FLVRx(|tomez;!}BllOt;`?>SK~H11PE?YuE{CBicysKZe2T!Xs@cXxMp*Wm8%gj>m$)4RJ*@7`~pbKg7e7pST+YSogz&EI;S zIUhpJ(vc$&Bknf8+R`?@y6T9n@-2P+#3Zz;(a4+56o7%4Nv35S#pxHoh};*;fOU;A zKeNoeCzxK=WI((X+@XGwlVz@*1f3R4In%%oaY(K_jl@dH2|>$#k$i!}>++qKn1awu zA1M^+$YR8g|9N`^8uJX@0q-gutG?%m9v%8m{yu{!^B>9HG$TGs3Qab?oJE z?%aF4rpm2;<}XY`elCdL38RwKczwZoL!PwG9Va|`$R`3I-6U~Pc}}j`m0_sR=sA4+ z5YR(w5S~vm5Y3s}F(w`v%fOWaY4LkPQObR1P#JD!lzJ<7Zn`OsRjs`Sas$VbZjUcgGm^G-|)Ll{%|u`!LqTH&+afIx`rjxj4q zR$@&E6&b@+>adgjdydcpY-Rtsd_0V%=TQII@X&XhuqqX4>6J-Cw+6~eoGRBIJ3@vG zL8>AaaqJb?!N%d`5Kt#n`4r>eio%h*!`5hRV>rKrcsxarldwIP@@Bh zqJ9N-7%a{;j3S6g6QDHQ^bSKvM|n_<7;5oEytS=q;$garX<*$`+o0c|;^}3=HWkGbV)-J)3Ke@GB=;L^X2!oBx zKo%7xEazM~n!hPFvjufE_si5-T2O3T)s@bMsB5VSnaQN)t5OZh+z?2FU4>#UQx!M# zDxq42ayaL`gJ@@ja+QLAsa(1!@47dc+@=iMCx6EJ(TY2SszdvvtJcD@OiGZws+Y=V z*i|Rron*3ge`GEKoG^{iBRh9GLouQoH=>I6olj%-nf-JVplx(dI7l1ks;uZ5>5BIQ zew6piXWf)CGc}PhT1@~En(WHP5YJNl6CapFi=SoT?C(nQhQFgk7CIijQCDVK) zsNk}N8sXl)V22m+>^n;(a((m_Phko;ru;HDZ~euiI)c>5UsH0L!X9mQO3rtR6yyav z{%}1jj|`~z@zH*k!)#gE=@vWSiG~|@NQRPw>w=)m1!qO%6wl@ibBd8Rk)*zFqB-ZZ zV)waUh=rj}9}StrR{wE1o6dO| zb(y^;g#(*xuM(BYsXeLV;{tY#r(oZ%5SSF9$Taq@@KdQhpR>AdgrrEC{E?A(EK+soCd#byoDI$O$Da;-EW9l7;j30HEX*EtC zqvzxZ6n-;>Wp?iSo_so6=DPsx@^?t4?6k@vtSeMy0~e0?^NOOeLCFW1^|p$8Rs+j; zMeb=7pph(x&pu6_h623y}rh*sdy%Hn6w?{Ldy+wCNqRl4@ z;`?OlB=b>ubj}kw4213;qQ|}q5q}PzJm{p#o-^|PTwOtZ5@i@hxIN)x(AMN~wl61b zr-B8Rwz#s6c2g(uo;h9hm1PJbDOEhus~Gmo1ml{In|N+q0ElkcWl_#X=xd`?WPKF| zw-xgMWE~;T<1FfnHXZW_86%_3Sse$(y!32XtB#Q0m-!v6mTZ25Cg`qRVpzvI;cfQA3^YW*zc2`FmC z{ws9(HPbsI`#(UJKbHOc6}m8SumdW#091+q%^YA4gBg&Mf*DXBhLs(lm}CDBfd%`& z;w>D1RdV)ofWIF;zjmLQnE{}4`mgS@GSRUE5?%vv(f`N*{uOZn)O!4D#Ny}5{QUp` zf+tocKzSuV)(1c_208`+=w}7MBUaY`bnbrxlmCo$ar{-a+0TRN@4L>#&Opb`0bpDJ zrPfMP7}1(yfvTndn1$JdqQhld9k5DGS;n{x)`|#a#K# z6@>kk{oTRzyj8M{h45r$#^*NAX@{(ZVfZKe)-uH7tDDDV{;H$39vS5lRU!yp;ozXvxv_~O!!TOZu1F2yVi zqttme*<#tvzc#{v9wSZMrBLs^oP6VaiQUSc;d9!0S9Lln zZgy)Z`ds#zMC^3!yKSiOOR#p66v4DVVN|!|>O*5fuZzrg52jVThoMor8!IdbzrCP=lBTg z5BA%f-aBOqf%5lYT}G!=(EXLfmj&68)09U>i$PT_?gU&ZMsmg9%sIuELD6pw%Gar| zWu8bPp_L1K_j8;ylB%=dWI~w|L!uQrIWj+C_>h*Cy&+A^1YgmlE)MkaLz{#_h|V2yhvU-cV~v_-3P()n z+3i=6g^@^RMj;GpMbgccryXBNU>ZN#xlYXTVAbYLJzA-b#TbA0Le){KXYT>mh6Hkl z;9y4+p|&35X-#`d`9A$l<-oYZuP-z!n2&IRQTT}K<7tkN2vtdwF-iUGA zE4_jOax~B7eTp89M4Q3g>tloA*})(ryY-v~Y5eAS402+T2kR)_ZBw`U>shYFJY-&7 zV78~4qFe-N#MfB|t%$F;$BBGEmoWp%C~@u}qykpgBJ0i?65jZ-dBoXpr)$qCBT0wa zX*VbQ^NP#q}8%sxic~jUrGZ4IX z;zOpEPCNyy;DLP4f+K7!wqkCqsNtXGn;5!7IE#mw>Z)t%QO4Q*%>W^>*I3GvLB z`5I(6T9rjJ&ARsfIMPPA96T>nm2hakJf#~kOs!Z5*g;U z?ix;jRuQR=d2#m`(T_um+M7WEr6bh);-|3lDR`uuI0>0o0hNEvXBx62A#Ky zN5{HHbm2hLdD{*5D032yr3Mo5%>!LFP$9ZTBRT!&j{h7AOx15By8yWO0JP|Hs3ngIah06Jo-dB+nPi~W%!lByT z>spRbKA-yiWy8A0lE5eyG3e&)x`?JkbAnVi65ZMl?6#r`ipq#(DnouUp~kxFnb{V~ zpcl)8$G{mD+o~ArANbf!@6JXbKd#(oxn>A4wr`(m)e@@?-eaYi`zah9C_~W&ZzU}` zU?3=mBp4kU7u7J<3FFZWob(pb3}Z*ZOJl_*T7{fad`Tp46uD`LnV zCJEFm31?Z?t9TL505Q`S?DjS_IaR*C1l(&Ka@E_id&jG$rom1*S59xX18W=lF0rGH zdUqnQR=W&LJsB#6@JgTxYhc`@Sr@N+(-LhYIw-C+L$2n zfMi`u23k|~RtHirjBEcSgf|jq%S)d_OgYUQN}`I4UBdpdi*F_+1yN{|uOnDycD5K> zDwY=Hn9u5B!kw>iX5dy%wbYenFJNqk*%=q7fp;z*scHE5vmXv;) z?&AVk`fXTZcW7N{Z9&Lf!vQpwp(;GoQ(x#CvZ#!bSwvZq3{GX4o&>fqB~FDG=e?1dn1{vE(s{Q%Uv$ZP zE)jfohD_rT+)#7Q?`fzx3GkzBAY7vSwg#d{vu3AXym}BohHF0w+OJHim&`np7)%|f6Pr_$ zUrvs60o@2MnxE+*WLnCy*cg5z1%8O_R`&`na{DQG1$u~``l4K)j87wt|5D(X_ zV+z6;T%XYAj*FOp+If#_UZT)@v=fwPEif7{O2p^gE$_cB7HSyzXBp^5iY=5I+SNAZOjygPokzTTIa*`~*!R#Kc(XwkJ! znS~hK<5^rp%CT$U(1)FxYei+;&m9?){`v(ElC-}AElpT}d(LsC9Pv%G9fk!c{?;Yh z6~aBZ1%CVobn&D&(O}i6EFX?jOSov-+R**KDa3bGWaV7~ArdtC{+!X{2}9{Gm=&@0Nlcs`rw$xtUt0msxHXd9f$_ z93K(a5(#>({u#-`gK;8_n+9y13-c9DKjI6_js!1;yitI4S0jRanR9~q>WzWATOx1R{(_rUiDd}I1!aYJT6 zvGISc00czzeKcF-%m6&`CjOFef&4fV}5FbI1b3LO*)(-^hFZYT@ReWB&V|GXpeW0N)@RBOoR1 z4_FC+mMrgB0hzM^X6ygVpbWrp|DyAMRT>6BgMV|%|0Zt(m`DNnu>guNcED7zGW-y> z0bm~+2i*_){vYV70IKkR(f7Zq3;TI+{lmmFaL_UTw1=|-%+)LaVHjZc0f!FDj}ZWz zr5yj6Fc08Q{qIKrSen1aSpjhHA7`H#09oI$5V8C?WPZBanOOiifPXslSpcY*<3Bun zeueG-)Lac%pT9VOKin~XJ8J<2%6}>gnSX)BKT5{`R2Bl9*8eFi229MqnE$^D>N);! zxB9L7EPzDIY(z`|w$1*-7|sSblYhJiXg(SLQ(+|F67Vm&|5q{n&->4>C&2Hhn1zA$ z-$BJW092d`FecBd&XAZVqV%T02a@P(85(v+qkr1%q<;6-TCvm+lAnHpWLT#?Nxio= zr7qVa$}6C#BqnJum5aN0**&dHihp`{D+LCPy&%A+I`FG8dFNa69p>Kg_Vv~~&Q_j!>~D+58$uO$1h1FS zWhpUtgM%i~3sM#O9(s1m7zmOoQavkn$BAUJBZf34i4_;GP7RW#4I4IK33Y8*V(tXs zG%j3>Sj;i6sSO}1NcWzOdMlcm+LMZq+Ay=-oLd@YY$i$U5r*b0d7l`rBrnTjhPSsb zaRhRC^Xs7oZyu~L&!c!IN%hTw7W<45{SEuMF1HeWBq`zUwc$kTNFGxmEAzK33|_>H z6A&M77zG4c5eS-8;cIVl(IEn(oZvUH2ay$q*t}bljEPks{;3)!RxMI zS7|C&h(XLoveD3D0~ca0vmz0gvD>OiJ98t&gChEPsr$gLDG!$xXBDKMQ>!g}`9jqV z>WXw-7CFkBe;@G`^V9x#8ZRe9fx;~?Vpn7!k0$84l?CUQRZ2Mgo21TL##&12PEhta zO0jcIw?dRQSNf{vyGtgks~V2TJOVYu3+o2l{%o4g3-aKuk`W-!q2*Dpvl7GS%xwWn zH!Y4m)j%1{+e*J{@W3wxcV}UCMZv{yJQ~;+alTiI)E%!H=lB()J8;o0?(IxtY#u9Y z;T^-Q3?YX~6MsGQ>Dcqp=-Tlb)ej`TI^DcvcD}2#-e5Oc*coeJf7hK;XZVpQTiL8j zCEh~2o1~BlIIc~an0-7C9S5ANeCmtV>jkB*^^0;<%gCkjQkR*F_!@bJ75(D-e)JIY z8C4JWF6EPs%I*r>7CCf&TEeOKzFk%f7}J+w`C)!!W*T?5$5(+7c{|ufn4divN;?`@ zXmwYfqn}}#2lW;Pj@Yx9P*-dozmG~$GcBx{RK}?3tQlxk78x4MQqchEYQo7l-(uh4 z^b%g*i%@yio;Rcchiid~)u4aKb$F3V$;~|wU^EJ%?%2ddNvtK9AaD$N!gpWU81oXs z8}tde$50W{M~WLJ2!mVufUtVn-R4z6iN+`BME6#OT{B@NK+odxtZEo;)##wY+cY~U zFlxWTQc-}oUlV@E#?3GQqPI9|j_*2UD|)U(4+>F|o>xS(Up)@o`vpQ0WGm1Qp_c}j z^Rclbqtf$$bYe15@6fab5I@O9^p+~c z9iME9u3U*U%Q?|oi=Bhq1nE^Uc1(L7+i@x-znDT3?{I%5rfW0i+Qnvh9UpLOAv%Lo z5BxHGH`IF=$h_PZ|g`<<2VX96YaZ{43gyLjIF@5-^i>h|c>oxa}Ssu_4%gSc%g+AW6CM zOyD_EED_BcRPm_i)^Z}O$)*eu8qvcp<(rDc(7VNLrOf+~lj;_|Xgs#X#f}!;atTihzZ!b?* zTL!}%ae=Iit|z3xI$bGDjHYcJ;uw?Bv|*zlWh>cy#}-r8`Ej#~H#+NHSwY`djDZlM zbAV)oKd3=%pn!vG6+eoIA#uVhdnZCH(s>Xpn+3{Leq!YO)nsCWQ3Uy$^Otw;ZN>~f zve=BF9}FN>6ZVGY81od2L!I-P=U#&~`)eL46WzeB35uP?_cZPAt(#D*LP$|{`9 zW|087{ML&Y>XRZ&{@R3mzMm^x{??=>-$}>u+ma+N*B5aT0#NhAuW9Z)VoIYg0sDeT z;TWT3NszY6J@4Pvx_2Nqz^3H!qOu zOF`7Wo&mO(rn6VLbe9fd;t*Zb?YpLg-XGGyJ^^f1GhxVbq&I3zm1ZxS@gkVai!W~! zzt_MKq6%;N2FL-}Tvz+*b4fTo{)EuB4LeS$rxc!VHh2}GYYFf*AL|?TTV;b(%2;CQ zWi%$f7(Q=M!Q{fXerEfE`m-7s*UT$?3MvP6i|COr=1ILkVxw=xvgIHT1~wvBlH#qn zhVsM-NmVGIWD)F>!YMwn&GX}ji^-4k4o|MROR4#qs{$Hjw*A?uN^_8%!MYRJhK(wsHd4cONkGDNsHo3iuT6HCvZSf= z>V+0DOkhq-i1Gp%(I*_CoE{Ti_Op^T51-V_y-n%Z5Zy2wCEj>Zz6y_7fjsM29;8!^ zdIrDhVDs{PZt-Dsqj#XHQsjgjP&uw}5ufF>5vm;w|3?LS{pzACTGl&ThGE~nmeku6 zu>I-z)$6eaDb*AnOyxp6Y3;IN97XW&B)MW!<+EkI$GVPvaSI7uD*@h^$gMM*ohlSb z1HM8@O2DIj|wqed=^bINreOos61G76J(*|8FqvW3(~f(Zz5sW!?@3!Im>shQrv z^Myfv?e`at6l|R5+xL4?O}Zed=npjG^WW_y_7~}|yCBrF2wXY48UxS$05#$yR*|TE zj7zBh07PeQqO&)E#8e;ubl{i;6(B{U@MY8KA#!fQOWN0th);+E^h!P}MY>IRN1{2| zm|BI>PUA?__*MzouMbN^r9d#JH^!%)znw*S!uvX}jphMTD6d`go1eh6Axas=2hby6 zeE6Q!1h+nukI)&RYW8+;Xp6E7g5!2>AIidu&4meZ!7^p4Fjd1nK&vvxmQ#F$4eEt} zt`=r+qJ29q!6AK-Oqss~bk%^6Jc&nuW-5`X#VJ#NfGBkz&>Z8&7%6UBb2%_noV7?e z^H{)B;MX(Qpo&-=XNGXuw`@pG$OrEt1a%7ox70c@MK=@d^ikk4E$avdmld_KzBR$a zaIjF-#-2_?z$+7N;YP=PlYeQgN4HYO#q;u=IVKm$QwM(^$CeMXn6L))k#sf&ajqLD zUVW^^%&tFWXgf3&pTlpSgL7QaXs-boQ`>6175r|8CIaY+*l0}v!uT>EESCF~9YM_{ z+j@vRAkU|*)7^>G*3TFJ4hvFH=n3x_ioo={>J2g*QI zYx?vM4|(Xq4*!gQEK&v!CKiY-;aKV?l=SF*9qZyG3Q1rNETJ}ul7~f(Dl04#QgLO- z&Ok9s!KktKaTG~85Au`m5Q;0t%A#^$5SzJTT1g71<;?BdzPSrMb5xG%b7(cQrye#S z!G|fnD=5!tBE;}2?O?X72PYu##1WNjH90`<5A##2n~1Tu_9t02eW$+Xkc|yid-ge2 zb<#4059vA1&7Q2E6b}3FOw% z$jLEpdz!MrcgYA5){7n4n98#K+lo$k;(WS^Eoc^qFH2#Zk`bQ@gl4k?aOD}ua(K$S zOM+3nYP?iPwATNRnxr8H-XF8jYZ#JBSkaFXdO^_RSC}nR4|2ze=Ne`QAK}L$L!|cR&^+> zt7}JiKApVygsn1me#<$r9Pa(eRy+LE0@u{I% zyB-YdvTxr=9V;se7qmT~&p8OAmhnc0OW0`zV^YJ?ey2sFMr|g|nQsTRN*W`SMaJ-| z`l?ZET78J$QWiUWr?O)~4;1SW4G33K#|FSlKQs3INEi1j5dKdy_AxR1E2;{h zHh&F^{anIdNANqCVPyU{9iIRVp9qSF>g@M!E}su?f}Y66@+9I5)XKzE#I0xZD0ulg zB85OepdeyP++WhuJHu*-&dPMmeL#$w#t(QrTy0d?7vIa^++K}`R_6uB(8?~FBFCXW zRRw8NjbYSZyrtfJOATA+{Mz|a`-anN_#FAw7HPv#geHhL)>ojG^Ys3*I6E|l%H=h5YDnkMsH zi+#dx9joO~nI%6}(@*xt7}!^}h!k9A^wRR%dU!f`6V_sTpfdF)F+2?B2I;_#L)~=1 z3&L3ElI@tEnlc&!KbOekN&EfL;MTl~X16J+3di<@*DYdZ-=dsPA zp=u%YsP$%bFJ{_OB8Fs|&O%{DrcDXn9K9Z&ccVUQYlpHG>kr8MPCqs6SILdv4Or>EHCRCn&j! zP9|&B^uTA$f-WDy#Bdu|9asW20`g5a(;O|XfWpROup?Hp^+8Ho^F*41y}Z~B&rXW< zRBjCufyt5{qlqIPd7xu*SIv=D#eccMl0_8{7`f8qwx__gC#afh^~HtQJbrEVkg9Ps z#$TzKA~1X(TDLB$#5FkQp?p$YltaMx3BOugQzH4oXcK=&v}a8-eOLpc&+XwG^Y~Sx zki+Sri1A&iz|6CH>^KLws27nv>`T)t8Gd&=TMON0D(j*Dy?pFL+s5(Lx44hRoGn&? z-hp)wK7!|WZw%&D=Oyd5Ofbe%Fb@MvrHKgsgqqZSbRS6;TzQ&tEKMkR8RT) zHV6p^N~AhV5UQiMZyTh(K~{Y`1v3Bj#6lY5L04}J$4s!`A$h(?xdq=u6Imio*jKC2qLm6Ibr(C$I_q1C1>7=2&vMqW5Ff?UT{=SYM3~ zna*6*Sj!4F{n~MRE$&VXhagO32^FcKKML`EMJ7d&rWA#%5&{|7yr!hXi8e;zQ-33x zPkjJwzXshrL0N=Pj?}jo0ji9GYa}eV-QxxSh_IMYUR7M3Qca9He308RDx}3WrVl=L z%127U;?aH2#B5=qp^!!xrNnM+-%SiO@ftOvWDpF;xX7ebcqla?{VABVc7+|_Hp$VG zqm$FaYK6#BEmWoHhF*Z_Sp$x{P2v-fd29Pf!w1e?UN{$0l~^n(pL7u9Q9e$xzmQMA zrblR#mn1gi0pFxJYe1p%c0H_soMYCSJJzavFJM}w+~iJ1aFdU87<*}RQra~BhC9kO zYG#o{?`-N$UOxMp+~~Na)jAdB1&c$y9R zST>N$3t{w)Zr*jF+fAUQ?00W-Gx4PcOmC773G!DnrndrjZlYuPtH?jRSK)3cCnkd* zwjrT>(l2eAu63m$ET1XbIdWV`VkqoaXw8Av)iOnkdxP~EMWD?qAi=gwF4SzSuggJ6 z%Xomun)7hpf?D!rei5Ji3e(tOi6Fkmq4W`trk`}=I#Mt}JR_spaQH2m?W#8G$U|H} z@b|N$wcUtHxoGA%*k+!mG?e)J7@-Z-lAyrml5{o6Bn~uTGI(e(*e)%(RQRyirs>rt z8r(iRmu1Ulj`;Q447ik4r%0y-l}<6_l4VEJ}X;7 zTPeM3Q>;@~mjXX05m!*Q^KO7}u~_O$FL`Ixvcd0B@$9Uv;?9U2`$`hF?i@~#n1xlT_BHbhZ*6*e7EIy=m&gH6mN}%v+LVRWdv? z;yeB~0;Pdc=pm7B9c@uuKOsCOA2Rmy8xObN)^yIj7}MhHd@{+&_?D4fCgM1Zhmm%B zZ3FQQJqMyT@s_(Yq9zi*sp%*%-IQ42Minh>8;_{~tu?_8jpa3jKS8=lae7`l`!1q) z*PiQ3GXzmA0^H6^plrtHY>^hMz9ppK*!jW7|nNOds-o&F0(p}pA^v@iLM0De=oQMd-B3nL!4TUNKj4iee9ynasPJ4!?A67>>}N+&qu&X>elz5R zE&_krO!Stp(#OTnaeCl9&;YY40Q-LPQJsyr&1xn3&Hn)+!@>(lHO!R=9VlSBH2HM@ZXYYN#*3gYTa zB(R^2`RnXO>oe_S_D$;-8!Yw*Bo*qufXP&p*~fULYK3|0eUZJ zxvWVR&!$16*<RV;yu5y72Udd7a zlY}S3q05r{m^LftDq4xbfwx;I!mLd;zAI1@Xn|Nmom9k;D(k$ds>2FhKj;RxY23Cj zfi>7ohcLG@C_)cSG6)KlI@0TE`l7U>{KmR}mV)kL(rNm^Th%rH`XaCBFWz$@6Kjg zO+t@*a}XjHamxJp>uV{29^sDmHp)(cEM;2ZwHXND(M=V7S1 zu#%X-OQ&unh5ImOR6e>TirV%)nSSH zp$wU$m_*+u#$ZFdVA7CQbGQdmw4N$CnlOUrJvZPmu+6pal;N$US>MDqox5&5CP;~* zL;F$TQK8T&KSJ7LaMfbe*WhpI8*4C2sV}Wam`k-Fz@FB5@wS0u0Raz+octq=_$9dc zJ)rtOiNKivPN~0%!2dM%Wn%bEC-G;o?;jLZObowm@Bh!nzQ60HekiJblUMy;iG6>W zm|tUGCV(REkFoDBpZva5zs9~l6gWS`L_dTSfRYoe3~YeFmx%2h2OY#@h8occ1GlClomza=>)$lIkt?^> z;y|}^NjzG8XoJH!8_TKxNcP}SCH6K{5=t3R-HwPf!Kgj0TU1))z5bm4aR63T6ABjN zm6WqKZaQp*HQd?U#tiv%5+*Z#d~nvA;1bizz~^yAl_Alj`B_h)){hIG45yw9Yvxek z@?za$fstJL=!M$~am*h&RTkgJpcfL777_ko^IE|NSvUj z^mx>o33X#!eaL^)i=)~T5nKjTlAGZD;r)@Lf&Z&SS+yp&W)uzid0$!l4v?R0GYdP1 zH75cU4K6|(Yz@>_LtsF66c)yp)@&^1Ob*uywi%99ofN7$O20S0%3e{U6`$5iv9m|+ zSoEMf+TEy}gvkb3tkK+C1#%xGRH25L{fi>q8fn|2N-~2>-{8@a2;MglrI1t9YZ#Da zje`P%ATtDi1}0jn*qnNJe;p2dU=InKE|V&-b<|gZZkcJ(DPUQxjuAcGEVU zWWDaam_3#rW$N7A|D+Ynt`E+evk4-i*^yBtoUMyVx;EiQV1c1~vZB6RA(=(z(v8_* zYzm`Fv(7@~jXBB3QtHbMBYwc<4-1_;!Otvl`yPkTUK+l!O!zLVs?j!*(g7J)Bt=Due zIb>Crges+w%L6t&FIk7#8y%$XFgi~N;%t$)D$lgBH-Sqi)}L@7Nud4uQO~78E-Jyg zB3(te$kdIJ0-(-F`T+ku?Ok0r7@DXr$pbdedAM{ zWs~#x7{6B41#ZL3$NEUD^g@ucTqBH@tx0TcvBm3n*)5etKnK$RWw*{39rW(4DG(yC zbskWE&R{ceV2kj?o3?xH9vfM4jE6(oR6&sktdUA|L);u9Wlt{#;<6XE=>_|olCNuD z=gZE=SU<)_ZmP#G+uz9oQIrCAA)fKWTxSTA%;@Lom9Ya2F_LRsEk@CDS=(mU?mw$K zSAch|=DC*U>_CUV0TIo7m()l}HZQ8d2cF2vH6>I)otzzXmI+NWoi9l0ft`U$<9{FAObVx^2Vb(mk7;>x5_X!qdkYJ;tm!^Bx@p?lodaVK7sA zSJQ~h%LeX0yRrsLyA4|rjN>M z)brKKn^2{(I(4#jS@;?TQl#PKN*S%!pQfcI^pSx`o}iDrl1p(}2S_JVeJxS~*$?08 zB+P*QlueE+!`>W`u_qte`V$G&gRm9W62pM%;_%S5?XfnDq_ z_xg`wu0DHcYQ98E8F^nFIom>1br!<(Ty6$XPDtUfaObHk>Qrf2#?4Wx=NTk91mQRk z?$4H}R|9ezH$XB9Sd{7#q?+)I@U@WHM+t^n>F}=KgHjjtdhuEZqb=pSwREzSus~9u zMQDKRwkPZoG=&!A_m^URi{U8+#@b=T?y#9Og?v=#X!f3_0(ads71E^u&%20X#!%wA zrxtmkz)ezIRS`#&Il0|#^12de^Hzb6o~7uqYw}?7>v0SaO@3{6WHTacCbnl}s3Lo^ zBBY&wN3k|Rt481?qCajd`hwBOrso12>7dDb5)%zi7omvkj;T2~3l8=95=O!;uC6-f z5d*_j%8UzKiQQCFT7o{Z=~U1+#mx1=eRJjAlc=&0e(Jajv%)D!G1f?|1k}XzobjqO z?fXOM42Z4w@0pO`EsDV9FkkwbfnO#>Yw{c2=<=*AF1|v1Sd@b(EaWGUpsriv({5(H z!*!l3X*7zu%~cZ)FvKRqsFrslfRDE6SUA_{1&UVkjyRm6zdWHvP*n+Fj)2&jG9k=g zr9|NhD!{BIiNA!eVi6YT59Ea?vzpOtB`#!m73xgPd3?L;{IxJFhpwK9c4w%|n814; zPg&{o`v6UcKMpHgwi$eacabl&41wU`dO^{5Zt)vU9A`Z#1xV~;NvfXA$1QmA9pFH5 z8?^4Ns~PWvijPp_zJxV?PY7tJa>3LSsxYm;tVa#|nSMBJ-NE+5Q2H&&&vs-(#N6YC<)7h?uG&)dp@_ynj9)q|GQ7lnM}o(};XfgxtmS)R zFjozW5{BG1KVqg0 zBwq)*4le*bvM<^Ec%=gj0aV2R#PrVshkw{K161Go`M~(=1|mD-pJdo(V)%nX_`eSv z{wz-TA#DG>S~e5IZ(D2s|BVy=Mwb7#?Ca?-P7o+@Qp_)9JJ5Xmq1W9|X53arLaRhYQWs?IOz|hf4GH z(Uk2XlaQUh(sj1VSZB*HH)5(d&73dLvs`b8m}+WPgG>J4FD^^vvex?oeQi{!3l zBjxRmF6Q1g5-i9?+6!&+qA{Cj;YRd|GwIb}xuSca-HgPpY_$3zS;VuPF+H|2qs>$x zNqGb%RZGjV%7|cz7;*&K1G1f9os9$)FSUwXb34KCl8e0M8eV!RQ#94Y$^;x~6?=z` zQnRr~SuC%rD?|c#1Nlh5BvG6^OI)c!vyHXg&C^rFg;;d)0pXbu;i@|Q6{cE(WwXyE z(9vNf0!sJeV-1fPKSd3_OiQK)TiHeVOhx&jb8M8BxmcwzPm=i zy?XguLfc}7vXG06yALN?MwCG~sp}%>a^9O4oC@w=Is3`ij|C~F=jv9PhJkhCjw9oW zG#(-`7xlvS9WZ=aBsYb!p=us_hVCe+@DgNL$vVmIb&;i9K;@8{=Fzy~AjzlSdRMbu>PHH_a!?PHB6!tNM_77i|mrEd+U$)wjl||BsA= z=@|ye+vWD{J;QgNPrYJBiVi;HDVGuU^EyDDpqGf+14r8HKbsS zlB~#vCWwMhm+w>+NoujON{x@F7&Q!kii9Q+k5?2^7s!#~7*L8#4Z%C*_2g=A@fy6| z1pj1&^D0c;)j#7=lgW^YSlum z(L(GJkWkrPC8Q9&!Ok87)U`PdJsKQ2LX+`C{w_-C9sGX!UEavV+7!+pFacyGms6EoU>r)T}-B^Wp zM95P#SV+*>qy@lTPn&o6X~3wivBCbbu5Z3*ym8M*y?YOh9W!%9gqCzpgGeW-l~rc& z&7!D`Sz@KeZZ=%;V<1|T791>m#na2hxB_k7|)0eK@~JoJsn>_)2;T9ci2q!=apLjW@T zk}c{kKjtM+lk%0)tR#i*BAYIXIU(br92i0gr(MShk9H$y9FI2Dbo#B_I8U}pPadqn zI?28qsG5>RzHTW7&({Gf7Saga`dQoD%#ytTNQqzz;0zuX4feOHMsj+@x}-D=u-aW> z5cgsbr2^o?4}3IDTcZ{(+kRwOdtvHLMF~emAKsPDR8I~Oag|++fE|vIDPW@~h_ul# z$d(oFU}WANwwMw}1v1K$P3cxvdoXcQTpY>JDY|MDHx9Z+1a!et7r`R%G8`S1sy}}` zRW9Due{MMM-s*yA?N*K8rSez~@>mwL<42jF85yUSw|~Y&(3l5$_b$X8j#9FczZbNE zaQ(BTdF%A|+kOf)SEj^mAtuGfGm+bJ5)ASfq%Y?qXxm~v=13Rk?>_55yD&i?`?KV2 zzRJDfOac?NLSrFRe&fQs`K-?nALYmRUFZMd?k%9Q+Pc1PKq={vl#*_^=MF6In;YLF8}!k<_NzuXw!}zp;ZeGLYxmZm z$)x2G528FO+neph(>4v$ruJn7Jk(;-pz-IuQ~kEpB958?T+~krEu0Mx#%VOSsBCR% z3KXnzu@`Ol>IzQW$x|HBgy>(=;~Mty(IZQ&#WLRC4wviU(3*rI9 zy9GZ5!1W`$Ej364)h9+=5y5xDT(4OR5x3)JTfV1=M9O;BAK$6C2#y#K`v8qig5GA` zAj?$R-J+t5atjCTTIuWK#?J25wXsx3L)Ya~Vk`M|N72g*DJ9)cs82X|xRl;JkW7qH zlH@#mbaG1Z0q0eCN{3$-&1v94?+N5Wmz58#%!wAyfU-f8QjRQJc7Rn4`Uigsv8XKe zlqvDLvbJbyq1QqQyZdWlUkQNacMO>$_U|me@AJ2Rfx&;gcK)IH0Al=^UilXDO;0#_w6V|D8sQs+_K=fu21fkZMgYVZi`ooqu1O10R6uYK-5byMPaXTrA@c-$BBH zi4X+(9&rV{q3%pEx3X2V*3mP#Z$?Ow0Z4WJ&c^TFVE?hM#P^pTkT=crYs!CL-%wA{ zz#hnnr#Od2*_vs3#Ax(5odcbMSC6l@79UkS@%O^8nEvE0+d{= z4S;5V_6QN~PW(`h_&y?cBM3ygfq+QKJJt?j{C;I1z<2uo`3HmlB?9jIH-8!UAG-iR zKqv^1I^eiZY5iG&4+MxEFaezYzfZ~qfqu@K-`fIU1U7#D-X6gH)%~9BjDS)tuzT@~ z1e zBP$*2Kg!1i}0-%JSw0is#IEWLhFJHDGXce=VP_xZRW4kkLF-|lp@|7kid z2yjUMc>9PE*vjtoeqO zt8h!#MXRK%&%FFX;6on7?W*{!U`D+9shN4gn1#R;t}lMsDf(n2$2vZ!_QSoJJV(3!d| ztEKM_487nwyb!A^vMe-cpgWs#XH3u%c-O~QX-3{PHhqSPyfHCC_F1sC6|^?2|E^cU zFPTEWQ$v<5xQqQliH>dhu>=uG9nGs8vM*VRsoY~EH#O&#Np)=Vhko|#J>s+1Rp>>-g#eSOyAc(~8-nXPiULpEyh}v-w{4j-OOn5Y`B{B4b?dYmv95eb}1X9)6bO-F>{a*@Y67SKV4@fRRMhYDtxyzLqc z3Rin%5n3A$k--u)={^-zc%(|tP?P)8oPf~WAOPDrm}(u2xdjGm)GCTY}Mt@oZJzwGC` zElKt<>4$*Hou% zt1RlaxmO*g-<5@CH5J!P)KDD73MA0Oe-hM?U+eV&X+4g)c$ZE?gWr2(uyf5nUGeQg zx7osGqoXB51=?Q#|B0)I^#){Xh6+re=2P_3>2dt|8YNws-m;unWrsJ11tvC=BA^w` zX$&YM3k~b>I7ovJRP1J}FCvm1WK}1M$_p&LchCV!M?BxKCVdtT)C4bRwVw zH3^=$dRuQiZq0~?@o&mmJ>JNP6}^yJ)SP}+Wl{Y`tIK*)BxJ)M-sl5};>f>6H4m=G zT}^(i5HK1&#=k?)C7}992oscVel3XMt@-4MtAjk&N=wEB&@$l@SAXjbQbC<&i!Y28 zaD~yrk~@34d-P>Vlb&P@VddjgBYq(?nEUYC_r-(k zjR$N1DRL(RA=A#OWGK9cBD{k?{=^>T_MRv*ybQ!F?#;6Oxi zgaI4~DUP6gfLVkXLa?to#P?{=jRw(|odSMSyDSm;PfqK!*Q%^zVJE)|ro?gU z?U(ynUxls^LrKv-A^*6nw2#f$WAurd51yd-n$W%Rux)>+2dPbrnhz$Nk|5cyV2;vo zKwn|aksk;T{d^CbFB)uPh`ey=HK)0!{=S&WZUA zH3@wl)U_F}hv|QTCXjH3oLr6JQ#meRJ&psMx&3(LuErIvUgR~e_F0$skDg@jRb4)F zu)gotWwC(&ac@SyRBmJ1c8CjA?Dr8Yl&)V!=c7$Dz^UO>xy-UQ04-YmB^`W)v^?$ucZ?tSmjtGnrXjn!`G#S^F|;!T`+&` zBEw6ABgb$=N1s@+K;6gg!;;7yE?C)2c9$vXnJuZM?sjoeDQ?ao;cdc}m7D&W^u>Uw zVWP#;W{Ui6YFp%7g7VRj+Dv>OG&B@))3pl|M6a#sEPEj=$-36ofL94=dEG}Ibz}_{WWZ~e#q7x@)U!I2=UA3%qpNR5 zBX&#ZYFNI^MCr~d)1?%wF!n`*47w4sq?5gNJtOQ?1ijqo;vK5h_VO<-pkEKcCW=8i z@Hp_xXU@2kKSqbA*SnE(Zq{ejtPt(FX~ABWIXWdjPc$R}eMoPfBI?r}Eqt?5c2NE5 zt2jQV?c7$^g{wmzLCd(@wwORAH^FT9(QW)Inu)?!Y`i`%OBR#$wW93{I*-#Aa!(0+ zXT7gg@LL`UO)y=35mrN)tP;n@%;MXRj+A*lwBj z{nc>rp&+EPw4YEHn3~D%;(eun#W-u_Z}MT9amyQQ(l%dxOjGDFG|H7mgj`cY@L7%j zLz#idp<}E4u;UJp-P%Iy-}#}2YeY<7n#Q*%C#+B<$2w+altZxyMHgkD$j-4h?x1(Q zME78((M5C7`oP=}$sBxS$+69V>Mg2quaarbsH#cdm%}{S>tsd>R-N}IB19{yu!#X# zql&5J(96bqAYzpAPN8zvy|+$v7ByZAX2Q|P8o`#aRKZiy(Ok)gFzd#$%aOg{4A&F! zU=P4>=o-j=54!w%<4w^)*Z$tMzh?!6KYbD)bC6!p#NJNcz*fl0!rIExz|x)&$nN?T z$N0%F5a?A*^zDra0dZJy0}~_T`|o|n1wYBj9Wb!7w>8kQKzMZf^Iuw88raW&+S=NW z0HW~YJHN1nU+qrN|ACYur%4-F8UYVR zCWikksv#NJ7@WQ@SawVdE4=gJ5aKi9LVLeClw(vdi|Rw!GHv~yH9?GO)Jpt;2`dK` zDYBhS;n7f;gMB5HlmcG!)MU$gLxn!B(_VV=Tn&}Jy-i$450Kf!_Ez_{jYeg3_?Sgy zL4A%!dGti-bn~PGrK%-5n+RpX^MLibA)5Et^ajcmrOn?iFSikrlHHx#Wa;K%);wVy zxgv|ar<*leP8<(iSveB=9!8tjyoI6j>zXw0zkc3gh$PLxIt`+nxouvYFn_@3toAV* zMuiup7fyRl4mGa-8&f3dfbA-NGpv(jYA?;q+u5=0n=cpYj@2dWeeV+VGDdeSZ=5=z1`fT6%u+S^lByjm$Lb^HB8v1@STh#NY?_l}JJjPe zGbt9cO}euw^yARa8}?CGE4h1D=w6MrRI*$-UtTOdpomXSy}5dtV%Y7%8QXm|Z+P3D zJ!}$LW(c=srIT;aH|3(@l+087Y&SNs$7i~=)swCmF%xVi{t~86PKL{{;sjy(JfI0( za+d(}+d*=JI#)*AnBG;BFNtFOWKSGR?lilhdmT zNrxrqN)3k2roj0z+wSqP%w?MC%};^uwPtHh+Zo`-;CRjjjgv;P7l(|+xtpcYfjJFk z$`prRv8n0}c(X;Q&<2n95-kcIZ{Mh&7VqM3x=eK2ey;hDne=_V{7r-!O%?}@KBDfX^qJ6< zs<@kK*Rz9{xYI}`xk+pkmd~ks&A-sdfnXA8gXcYy zCq~Fth0=wf^^l5mK#8P7zS7o8I)S=m-f9WQLY%T9zH2EJRA&jWm6i{F2RUuUn-rhsr{H!&qaeMA@$@l8rUp4;1R6t>;! zCF;R+oUmgDYWI%R7?rMJ4TY0anj1Dk1}cf)GkN(zA3u3`R6!PTm{r1zbZGyR_mCc( z$XOn%5$=}G%C(uL(^zSIsgaGuNa1%J4}1cGA-a5m8$m zBamx+?@m+|CQ34n(zs~0uZ>{r&!S<=;|NI@!?O^T6Fv&dpkfZF7{uBX)Dyr$-A3Bf zF_MkNHVj+be`JGJe`OquM45b96@o|^wwpJ|Ac8~*t0N{3gDWVIK>++ALZWRbSRE#D zV-=Rzr4NP%xQ zIUR2D{gVf8TNQ>^41hGCXcl_rYae=v?1zENCa{Dg2DMav^44p~^K!Ctvv7{%vftR> zBFbTdyW62_7;-b?#wp5ywRG#gCxg)fi-|~bxxPr(4H9+0lH9?j*Ec!Xl9Hqy?kMRID;otY%+#p z;4@sQsKryl5HxTFJRJB#Vg6Bahg16r0!6k6wYbJ0)3i)CUO| zjZnYAY6^;44A=~_NaXtagS<5@NTf(Do|{^iwS>vCGAMimOA?r0u)&ZD#_-QG7-N8E z045GxYlQavz^abX0YsEnDU?oQnkV;-`@!Ndh2liWdJlpnKH2DN5bN`O2-f#CYwY#@ zs9u^q%NzR#>xg2TwJW6VeRZ=5c=3&+Gp&aeReU*O(s&!D>DTOv1oOX|Gh%F({J;sI zmdedBhsFa&NMuX~Y{sV5m?ygZds8hTj}7*dPFcaIfh#`JzV3oXMjU||F~8+GtQ$48 zMh9=H=PXNaA`6~bO;O?A$Wygk#aR2k%{baA1hd@pF;AoT6+?>r42;;y;Ctl8qUMAwWlF!7?zS;8 zdxS=3%w4mT>lDFOuh7v>i&m|=zJ*2L#R*||s4 zY`sz8^ku%=p$Ti#tC6yo&2A;HT^cqE4E<@n!L2pCSqha%r3hwEa!c97F=r{)ps!SS z4i#!uTJe=%#lyhusm+k?Pk~|jx=JQBUh&PZjwBHx3m=qLh$RKV%ocAAH5Uh$<2PcD znCmE@Li)Ou-5h&V7CjPnCG!5b{dwQb$}v7-UH7s&xp$8(OjP z<6<Q!XGp+X{7_>&pgY4!-+9bbocuDbd`s>yJ?DS_(jum)y@wNgH%v?UVQ z1@g(qgIF=qBz$#}(>7Of^D~mZ=2Oduw6tLQU0W)cF7G4R7nL1Xy$|qkAz=KEQnB{c z`P;kY=-XsXU%yd%Hi?TnN_n7csSNw23YxxsF*Gz0)YFLnF@KpfH#X4P^`BK_Uh2kgxivQ}h1Wo61M9Nj_|--1~Z!X7=*f@CLGUGKx{# z0T0)0=rp+uve|PZdE(%Ux;-HjxHP}?rUBq(WoVr7cfiZN*Ywjl_`l8zzB2+ZFRx$x zao~60zD|Bf5hNtU$;S z8&IJ0)?t1brSPOtzcb5wSl9#_9zY`+R4+Rc{e+6sZfAg0C_z^V3420YO`UI@(faohw z43HU!x#0j{EGq{PgY%Cx6hKVh5z-$84E^1d?fdKdck6+iZ6H*LkeQ8%jtO)Z@^q(? z%E-hF{KgEZ@Us0Q`3=yI*ttKtg1;$Y0Rn3C|LO+#(f{|759|Oa1^OKbI%5KA`hx&v zRYo>I9paw`odHD?zuyVJA29bfWh}nWsDB@UI}r$=ygwroh>rD6KLk*&;9$8^3ua_y z17uMCQNSPb_c+8q=zk#S^zQ|2-9H$9*#FB02?r4P`5z?xXQ`OUEsJB^^q1y^_lKaD z9J)C%qsnOKh#}1Slog_+M@mq&H?+Lb&CR%)*sFV9qbRWr*6^&b9Pf&^zv*nWjy$)J zDk(cU zdc5G1a3*QJY;i7`9NW0|nWY&cNisl-#%yxr<>hP^PQPr9wtCpL`ehx3x9Erw9FAJM z8CG?}%bz(z0xzE0Wn1y3)0<9Gq%YbVb1}MvDo^?X7w_O_>bUh$~E$Fw?C$yaBiNG0Sk)6HO`=KSm1Ye&tb zIwwj0^8oN~veF_oV6|#FE}`DrpTKM+GvJ2(0|;QL0{vkwqlS@`orIW^xXE%h`+h|Wu6 zWX^NCUg~O)ZxUTaTFyvi#mh`V>S}QZ8+1ul7UKpBWa5VkkK^>PNaoKT^yfw915J-PyIQV;t33&rZCn$%lk0Ryi5^f+pa$I~22u=f#^hLtOjI zV;}AIH&2|8`A6pm4tK8(f&>Rb{J~K0ydK(!H!3|?vQ3U?2nyP*G?+Ygr$+{NuEMXD zV(A+udaUl`!Woo;$}!Dsjqt?F+x|vg&lUlqU~e8QJL#-}|3Da3%?5>{0xpKZCx8Q9 z@>aqt4Tp@+4-q92eEqnb24hRIe0pnuW_Ib58Q}uy!AB>Um@;t4a8vn9g#$jXkY?CG zhJ$*B1HISd0^&YrW)V0KP^_gb&hqk9JS1s9r;mo|1&GwNq2d{b?%z}{Wf~@F!$35{ zL0~J+K{IZUi)RX?3ogrx-n>1R=+YQTd0(d!f=~ODm;a6SgJ}>dd_Af?THL<162}`l&=~EH11vbW?*FU`!b2Yv3 z8OqfvdsMbg%qMQ|WB=ZGZ=7E;S+qcur_t-?n%)>@k>RN-BV^> z^@iF6BlPURB0GgwCS~I&H`M3pL(sRRf~PCq>YrC=VivfF;&x}L%D6Oz*zbQHJb#aw z?b-Lde>^)8|9wM`mR5i1E8N>xpLxT-T?#@>&sY}iZd(~=8CQ-DTb}G35727`XUK|q zDvW+g*R<-ItJ05u&!%^pS0wKgUq4lZws&0SIn(gW^8fjwR#OSPYF}U0p z3aOk1G$kRenIxs6>zJ2IYO$nW#t~DYguYTl$>Ab#(Q>utEc?#pBfrwWmVRaj7V8Jm zB2BkGr99o7W8~1xN);BTJllcemJYKY*9$2Fh6tJ~l+$lka_-c21FunQ)*x~cRkshX zp>$OgfOn>@f7|p{oBAu(wQk2;siGI&KJ(jA^n^m3+JUwelSu=}qt?4T9`$DV?jj z#QBpBV{?|L7(3QHIZ!y|w)tdViguwLowBP7zkOZgcd`#{ICF$Ho{zUgI_OQ^odk0Y z^ajCAqpByGYSv7*tkBiM8?c?cA32(HoTNI-urpC@sD6=+@IKSd-_Q|ksgpL%6N30@ zNX3g{@+4h82s|MNE80xxM-%iB^9t+<{MiAPqZ;g`xz-uaYteg2OhvC&kVpMuD+*m3 zcxX5rdSBtO5Ij9Yl0Jd%F>ZWekhS2jf_|DL^kg!(J&6<&Yl0#pzFld!jFNJ;S>ai! z+u|fWK?gqG8d@Jm%)A?*-QDI}G!_SQ;uCOCa_&T)vv`xg)~~=spsZ)y?Hql zLUgHQx1VGBq3?ua%EoUuPoNgTcd%ftZ%@mr`SoDshKh({E(`XtoZ`5Q2n$Asv=*Bn zr!B_EH&w9hl5jVcQ*Belv>xLy*xf{?&tBL1fL~KHaUxWT)W0L_8f%J4&9;;c>3;KW zCJ64ydbz`=0@I)&B}%-ovZaX%gsQ&Rjl#TKLU3Sod|Ig!BUHvO*wli@lP2<@ZH>%$4GW}a}Ls64oUv8fC%meK66vr?>5v|i22$Mco> zPh~+Gj0w3e%BK8oS7xeLlZH8usS9;Q>LTdGUb`qn-oRq`y?(tM?`pWTlTZh39TMxh zm0+A-)5pjrl|C~3dOI7tF2hG7;NT+-GSSo5wWG&N=Pyy^>`@XXwpvE*2WpY@hFM?n zEffvZ-`)<96wqA14SWh)ZvvXh?arvNG>e^1hVcYhvAw^Rkl|YC*)0>gy-20yO8PqH z4%?kdhq29(B#T*KX~3G`yDXWw?ahl7i?3X5sw_FncoUdzW2~5C5${@TQ%ta6o3P1J zPV%I+zIx8GaKY1*T3YaR&7pOkWF;zRl-tY}^{dJG7Y*ujn$Z%e<}URk7N>O}mfFjD zjld_w7-l=qm5yjNr;-fA8&co*N+k;3O1WZh5yH3eAH$tPho`{AyioWA#o6|8+%ZU= z5}pF}aByJ#$@792J?&A9Q6B5-N1pp7d0%KIi=VtbZ!)|L{%Yy})ef@vJ@+1X0@@9& zNb8Pwn%Q!uxVwT`Nqs>d>2bFagVzBsq7v~grYS`{+OlRP;<)ZyMYWr$nD^%kabycI zzLgidGkc*BN((PTpXD? zkC5qslq)Zw6*{Ukx&Aw-?cRs{#pSpU2l;JP_q!ynKP^xH-HH2c6Tb~g`Rj0ydq3(o zO@LT`L{5Ac`eXq#CjY{U-@uRGiEH@}toTh_%U|;o=AS7qzwncvVC3KU36PEVYkmSq zr~Xgylb_Y>eu#yB?>`{Q<1VM|{~zRW2ZDhAur{!@H!-lgPqvd0x=UyKCHmwaB)i@B z%-wk2@e}4B+=TfDH(~y68IVEsou>d!?LAjv`5puVV)vFv`<{k!>q8ZD5~#{lHQ#MV1b$HZ`F`_J@H zMmB&m0@u zob>+5`tSAw*}rrEz~*44V_@X~-dK0!ml*)njKF=s%)tuW2mfFISpO810@>hybMpM^ zP5l!zGBE<`DgOazEK*Uon&w1(HBh>cS(RrTS+9qL7(r%|Bod7td??S}AsA^QrY>?A zxl;SJbRIh@isp-LKh#y!Ihif{(JVVxaiV!b7Q)4H_!pBAlCROK5f?Oc6DyrGuQcF5 zS8+uZPfaQ+2rI)0dbRZNzmQmSIJ53)98=MQ4rpi@&%)_~uh_rdMjk)arDWUFpcV-w8CuF0X+U-e8B5xoJ?n@@b_SD&DZI&Sx2!z+&J_i2Rq$(Nmr#gtGMe~`47?KSV;1N zZ{VP=wYz3@_KOI(qYb*EA(^cO5lY;uSy(fmLr4jN_F)49EJHs-MROxj#65rJrJ$<1MS0l=sGhfu2YaQM6KTuz?e@e2^2OX`oQkyeJ*&Xja*Su(~ybxzJ1Sxn{BjKnwlYk7Yz0-wa*NE7$j`5 z7?vv3GOctdZkVcx*GVllCEO9kt8qF_YFaSlr_go^MPN?YN)!{s22(*fWUJ3!&C+w~ zHh1933wwfza+^sRZx8J9A4dv0WVt6bE+yd%O1y&W_IYN@^7whQzKE2LhN#>QG+~TM zUBE~3P9+7-sW|&r5X~}Y=vI#J1LA7rt;sSzjxmT)Xj|_Foqx{Gc$n6n%I9t2gkv<+ z(jhPlKEhQMOQ0wSEvna!g*3TUee_^n0*}5df0-cTjo=QV)9acddZFO2 zr1^T`VkuqN6-Hf8C<8OT;>2~scc;B0MRbS3aemD`v(shwmJ70kcLl+I6UKp1x^~fv z6VEJtyX2b#WPl2D7R{lGNDAJwH}&hsebD>DMLUZVH*1vJ)v@4um-BjO3p6ejtv6;v z5jlR)i^S|CmKrCyIEnZ{S#}XfV z&F_GF8l@RVPvyeQDG|N^Lz(g>W{#JVsH=|45+l+ocfNTpIdu;!k*BX`zp1FoVv~T0 zd3z=zwyl0nR0XDTI|adweTke^^I6p@$$}_UPOAC&=*Oa}i=87`)-InTmt6*muN7RF zEd=CS4sXo9sy51|$EZ}zHnzvZp=+5-rQBfbKxLNO1In?Vl6SA8unzdN&-{&rPs~O6 ziP<-n3tvihl%vA3iI~kHAu+d|9mDThc6)zvdKX0c5v{>k>uL57*CO*UZ#6yQJ~P9o z4Fo-I7|Os4^bp4f@+))rv-ulND-||_1bF0GU>hl`;gC|SO|ERjpAhjLJOPC~O{=x; zK5FWUR@X4~+p)&_`$q5rPenpOYSzol zGI)Z!OcBH|pim12VO#3p$t`DXaQ}n8Mr_f>s_jv8o;#BKjLUqJu$t5k3&yk46%W8y~)~zEZ&>ld9 zu@D`S4NjsQy|H)X9LCGQ_sy~0C?2(A{e5 z;{NqwNE6HPrIEFee=;)gECXj8m?2CCbyib6-j+BfQ{Yo1g1*P<*ChAPk* zvF78>2tea|IZq-tj_aIbm{M%gsGK=5PU@s);#e9GIVf5T8!84P38S0TdFdsT9Dwhc z?e{+V0!75vc1tKGSWX);6@bd-FcjnB%8+_~sff9CQ0Azyuj!Bb&OA zGn?gW1ZvcdMg=RN!>G@K^9YXP8~xh7KA1%eIx?7Q9x6j;g{W6p}m4|(~E{-RQzdZ zCWNta1pChXqW0WMRJbV}Q>0lb18a3~G=go?Ay$tg+ij-~KIqR}Pb^oSIW39zM}A~J zo@w%!0R!WlG@^S9ZKD|6%&G=?tPn#ZtnpqpOgtjFU`yX$7$?dzCYMN7jAqnz{6R5U zq0BSV^gR$$m%mDxOf0j3$kixwk2{t*)_gAuElD|*7b!nTW~CY|l9C@Ui*(Ie(KWJ} z$UuZ_^%0e$uX1rzXZ>fkuygV`3N?PXDjc` z8d!3NK6EB}?4YRUAiwR2O`kdUP>15tZ7gqvK6r+R@u{Ds)M@%|OT37O@hAmK2LlAfU$cOLaJ4CYHzvo$hC8khI9Xs6~O3MftuL)VniF*|jCgr%~ zqa9Ty28E-9+$BMSe_Ro6PsRS>?AUnxa7_<+DgM#}-?0d2{#$Q7j_RFV)`h;?cwXJF zlKGHdgz`2LwAowVQDSHnS2#>ZSoCn^y;h@M{=^)<$5IPA?i=Bc@^JmA2Ifzo=VPG` zYXvcbrq0VqB1nY3QI$!OFOeLyd2RYZw5reK7;j@Vxc!8fIj^Q*X&{WojyycQq8i)v z9dzDamPkQGTtD+mpN+t2pZwtzI-lg`=mho}N|7DQ4K2ZGG029&1peGd)vkJu_z|3G z%RGCcdq&Pkq6$#C8r}3SfSe5Y3XVteoAPR+S02jw=a>jdDCDhTXr#ILHc}k&s5>jlGaY>x z6P;J9n#P4cq)yVYd}K?6UB-ZHNwO%Wvk{=MQtAIShz%QLpWn%OIdXj2IYi@!3&j@p z1{`{?AYG3fLyusBwB*>ZkGBPL@Z(D^nnaipR3bLkN1`WI0o&RHX6*LGke36cK%66s zhe_)1z}I`W^ot*M$1MM@Dktb3?)I9tNWWK z{&rum{)T1$HHc>Y36%c|L<9M)zXs8)Kgr<#Od#K%u;;%(&j|m3J>Pf6UH{*)XVxF| z_FoM7{>(4K^MfJ(lvM$-(E&kjzsRaEGt#mBGw#Rwr|=S}xAynA$Nhl)F#ad^046o) zKjR)|R@1epH>p}J;lm=*p`*B}G!aJABGGHCQ%IrAsuUm#vx&$?)Y+<=6E2}=NYhbK zp>u$y3bf1G=LDv<3pLUsgG7nLUiu>@$`Nx~j1`^K81+MTxer#53G>;7jp7EH82YbX zX}%&xDi;zASELWYKByCG8?=+yfMzxnkjD4CIk`UcN&d{I5pmJyFEmOYSR{+py?EN- zR$C(1A06!y#qJlW@3JJ{X#)|ZFRUR#;zEQ-Bq8(G_tx`cX_gNG^P7cXMwLfFa>VC{ z7wu0S4<}$lO^|KfJ#=>4nf1NvB8wpFni}iL&eS7Ud$~t!7R^+;yT=f~o_nr2iFfsN z1WKI`wr7G@;%f(Z8Cib~WPED)Qg8XuTeP7rA#J2MDGvVzCnHbyYkNnDZM6lkn$DH? zjuUeM=ALc5LJGa|>8D&d#6gQT=}sNmNwo2GlQiOS%FpRcpDuQ@-dGL@nknWu>eGsA ziYw3%UPy73N&3rJtgxzs0@Q6qIUW{Hx|dN^M?JMy2@T1b-uYxL*{ueSD;)Qtj%pa; zD+W*3@#i8=y_ky<&HA`8y66VU2-|!|wJZ<|_$1T7i%BNS$oQ8fM}j;mkxOW=$5Suj zLfA_s>SS)ez;aau(L7e>l;j~8sGbl+e0*Xl)if=?*THOhxFZ-f`&O;{s*tFK^j+La z<+)M3%90v-1-}2vn?fRCaUmRQJe(>VFeuZ=e2pVWb4bG15F}pWX{(}M(f9! zU<4;;sPyB@YZ2yE7R8uXiXsIpZ2btfjBRL};AeWqO(G}ydRU620ceD|NkkR?5mz0# z8yxm*y2{vPKfp!4EWotI3G1YleYaev?uK*EW;@*Wb0g6k59lJgJ2e?PB+0A|EY z9tS-WOQ*4#BFGk3q07tQ0);~A=}JcmyDr?w{V5zze$t>)T}8{s&Hlo>l@;;^>O8q3 zIcVz9RjLspuyu5j9GY&jp84FU=TCnx9 z1OwA@KfdQ^VG7Xg`or9so-NupeW!inizO1ZZAn=lA0M>{2LUx_lc<^ntb)05kooi{$$9YQF;EC$K`s^BzTuxz*2*r! zc{-gk`b-CJXR{YTs2XIDS5W6(cwK#@ArH}`qH^6?d@ZB(wkTsF*>I>I1tGk|LlExP z_zIgA7vd_h`6R9QkwFf{t@I<8S}Ag;QU{n~dwSt)p`5}O!%d$`O%6F6cVH8j7V(D+ zCUAS`o~`&XGY?s;CuPrWT z&Da$eY=U_iYF1SsT0@B?^gKFgeh)3mFkw>iP>D)?GpSwlLbi#HI-eymmP(SvJZ8hV zB1h=JON%S|QXkEC$U7gQ15KEr48Ozo#ilNBuY9W!DbE-W8T$m!KJc#OK%pK&XW1x1 z0LzNOvg!b`{>gs1Xy=#p2hFA&Ut_)!P$;^UJ*WJ%32x!KU?GrX3(dLDDCVA=>FA@Q zhh7JM^11y|07-*@H)@qkLq~dHep_k2@%m_aY^PzRDV1t0A{WaYRfY|#rwsZ?VL_&i zAk{ITtfDN%4!WGPRJ-XWM!T*l0H8-mIgChhWDnlXvS)#N!WlA^u<>(61bJdnY@;5S zq@(G{s`JhTvCc5Oo7w7r+`Z#Ku)=v`>Sk*E(CIeO(h-887nA7GlDjY3%NHM)Az!xf zVWmPrc_t4DX4nRNMC$^I}|I$gwtV%*)JyilpS$1PMEcvarVfeB|_UcRYp?7iMGdSH5MUvqcXoLv*xME`JZ*)EJOQ9a7 zWG}749TjVOtZ*-rd3HHlTdr{IXOMOBtP<$Ub2niHA~Dtbz%kfr$!M)Q4_AmBw1{?d zp(yZedf1hh9y+w}IyjfT2=;$kI>t}kl*8ES=r!w*G%|(Kkf%9Z4p-P5wveFq-m~n& z^Po>Jt-kbJ?OM_O%Jfxhrg}xE{k*;Rp>=wQ^TIRU*`SN_eFL0kZw`3GfmrC2^TXPw z<0i9HJH~q-F>{lioXyMueqMk3_DTJTEtFX00{`?`n#0!C2tt4-LU4kOLBz8VVag%EN?>{%JPQst;)CR-F05HOo0 z;Pqpj#U%xZBC8`G!;%W9Y$iK=)$-dO_-*<@>FI|t&dsC^BnoxfK-G#hnK&(?MbB>e z=;}yw5G<$N&|l~FDHS1UHo-4gL#R=R+ei2l>ETOsAal{IjV7H!@N%<%u-NryBBF68 z9LTAD04Ltbb)A_D)+WB*o7;qh?f^}C9>5U|iRhqZ6SK&16xPWBbwhoeh&6P;{7R{C zvtg%k1iG1q4cGa_hddZFwH;7hVLK&?h%y~N)L^*%0Zm`9Sk%juAXbj7QwhAwef1}b zh;qEenkNUHaAOC#zGG=1Xz8~u$kWs%EQ|;Bv;mB2{LqhBG}tb5!F^Q7yfc(~@I#d9 z-t6j-sP9>Sy1@-(ZBF=$sw>geHX0rjJR~18w#D+aLZ^x`$c) z!6MSp(X*bz1n&OmJ#~RKr>~NW4+)ae(&Fd4d^x$mry0q4Yh|$>?0t~CVbEV0Dr32| z7w{4Ye62LP=*(!%eUvwVr^o(&0&@lQT+u89(e^|JiEaf)_(8~pZVSKlO-F$8s>=tn z7>GcHQNIcmxFuwE?UU!}->#`Yf{Cx?kN%D)b-&K~WmR|YN&VJ``D=NS`*r>=P5cLo z?w|Xif4S(sixK!&ff2T!dwKsei|+gAkDs9+f3gDqAB_IEkN&yq$@>-fk0g~}t-ycd zru|rf13SM=9ISL~zbXsN41{wq0^tPzXycLXPd6TclDmIz0e(MtKPJg93vhNIF6BSi zc+66fu>#7LG+n72N4`*HPMUuR^?<#ma=C*Y)*LeQW4Ct>Md*XX(F#hg{?as+u~~G| z(7Cpk=21@@K4><%Iylaqj8W0M9!y&qt$U;HkM9_ zCVQL@enUS?Adeb!YGaOm3j1v0Xjz&>VcQTDlke5-P1~wJJI9qfQNJY}cZ*Z1Gk4^> z)@9H6#TO~=s>#W;7^xAu<(vmE2aZt7Df~Xq48~`uHp0jS`J)bJ-Zopm->_abq@?4q z>qr&0#0l*f2_|kgKbVkMr~`>_+^h!My{8PNDm_6eu}amf3M+^+=v1Kmc3^5_>+pc@ zV&DsAPiJ4p2`MkbqOoW8sZ&2FZD2T|(;I**v{Q08~9cpW?+tW>GAq@%AKo~KJ zFPr7H>b23n-ii6C#(MOZGrM1ho zkm!%=M!wlWG#5e76CvifmQ3O}Nj=^d9lFTz(?+y?n8s+r>5o83$p|I=icBTOoy?dd z);~gHcc`||*uNG`%sNYBGi8J>LQ^gd^`}L)c(3fq&yhe)kHaM!cqW-oWG>#?R6EYgSvGy3ljI{LB1dkf)Jr~D3;WzDE&A7I$sIf#7Z1Wex%fi9#UXYIS_F%<(+kjrL9;y5 zZ5~)4Cz9cg{rHA(n=syMen-p{`jmTx>1(Z9V2aPd!&hX)e9<>qZ;t$^klwW7Tydt$ zb5Rq^*szYpi+3yL8y*cRTm%=P?-Hot}} z8FAo63lEoO9Mtp2Uxsd2GU>BXshhvi-x{1rO8E~QwksB_BB%VkBK^hFt8X*UE3W$C ziNT-v&u6=Fr|&-;KSp=+(1*j@&Z=E^eb41r&pc?=`z*bt`O#0SZXU>QJEJZ=yZOEC zcmK@XjbD-;QJ8hO?cptVeEQvQZ@%;~lQh5K(zULB z$l4yE3D*uc?RaL$=kGr9)N=>E?LFM+%tQ81EW7{P zQN!iivK#OF;JdGr+sJuKF7XOed*&AmeZ_U?>HMwt9i2Q`zxZg(sK59y#JZwd{qTy| z)}u~5;DfJUxoN@|)D2$$g%6$0Hb1yXIBVw>Ge@m1n`VTb8b9EHo^P+Za##ON(+?4* zUCqlQvQ`z;CMo!wVG4|CbZ@6IR zHY54Vu-jKI-v7STmA4Ikb=ZB|Zg}@}e8r80;P&jSBMc?aEn7}k9=~AS#`SZNo&8?A zciUFog%1;@Gj`0sZiy{_DIz=64SV^-wO z&)wc_-SxLFHC*`X%ypB&FSVK6+~eQ;ephA9*O%@*?o#{n=iSUtufOy@`{m4j_l`2n z-tzlf+{@EYas3^+*XL~g>e^j%4a=W8c;g!H!dLH{yX(v-`hDcY7i_)@h7gU8hzCBJ&(z_J;JkJjXojp&JX9lF*8)lJ^AFr!!||6 z+>`Hq%etA*&z@p>dQ<)PJA0>pXVxA&>F9%2j{Ex4%EjH^SDFJ)Tbi2LPYkk)@A=X^ z>5HKsZeN;c7!O~wa`8=fgS98b-+Oq%o%OdK>aOfuv$%QU=I+NFHSdcxSNuR6xv2lu z+^cJQK0iqLw#NfQdX1=@wsq*kcl~tc+JWz^I5Y723GbaZcU$~G%cI0D^O?^+|0F%_ zp7nDEE0;}$W#I#qn>QH7PWttxTVFf-u=@3HU1O*`o@U|)^!I(g?28jNFI#lOvI8Id zdD)4*uD$Tr3+{1GS#+l1y+hzTaMoS%^P=-kxapN|*mE~-xOnqH^Vnfuz4q>-(|_LH zN?z1!O!rrFXT3OL{)o_$AD=$6^7+(Tw%!Z-6pl5rr_Wt}*nM{mKm651LmV;hsNb)M zy}IG#VMOzxjW0b%D>pns7D`{=`NglRKk0Mxq#rXYw_CB9({Cal-61@GVI)u!T$sh5?T`L`)=POUQlyip&t6|ZM@^YCs*rDC$4$(o+CF#L)=^axrMLoTyWY` zv+g~odD&)R^EXEvfZW-Cm2t(?i&`I;Ke_$3E%*Y@{QmQ1X5T1GzTG$Y%g0{PKmUm9 z2etp=sg+xt@#W7A-fBAiS3mpMR_m6ZPd@s|wQHaF{h04R8OSc#{?usy%Hhom&i#GI zXG@gh9rIT8L9UL!pPF~jqE8>TP0_jE;jQP5Gv5_l+w-N#E1i zS#shdUrc_ecb_-!s?UAH+h^$QnRh=}H{`{S$1opX_rOow6NjxDF#OAz^|`6# z|0s-{aP@TqpGj|d;_c?vJ1c#6Z12}EJ!@s)s^b~_t-pS> zqQ?nyypxkF?phw)aKL@%cS{Tph|5m9`_-2gcc=Qkr_ap7bjya?`q(zSIVt?WoePk4 zXUOGY_4`kJ=aWGv%(>|B6{kPjzxZZ#@O4+65XkN?-}YRy&#{NRY4Dias) zUn)Ix0q&D4o{GHMDJa2q^d*Z4mE`2EWwqkNMpE&)) zuNEx3gS_a4wL|L2+TX77zH#z^pFg@GI_}_SPCMW?T5cH^BJcJwEOtHuRxR(o^MmT^kFPj+EBo-OO7ELa zeYCpd{&UCdr_|oQb@~|Wx3&9~wmu-mGs_BM>F~=w9dpX);nWR>3?DQ2m{Ug&-+$1> zQ?5F8@YJPX(qVTT7yITP13$QaNnc^})9)-~Hf|r0zkJDZdK~7RaPw90MQh4}!^!zQ zz5O!RSa5LG(cG^8>FY2VR9w+y4Ch-EY|b-uDwMztK-liv9S= zp{;r0-+DfC(R+O8mHP+WxXLwuM)dZ2eJcLimFL{^%gXrqXKv_g9Y5i$@lPL_eQfl8 z=ow#(xc8S)=7Wjk5$hMd=Ir+RtNzcszkSGl^mO)H@2?MllfOGgoPO_uw@y8H<>;$E z*Dnt3=XdV6>0+vU@Uj26cHrWdUb}nc1v3vietNIvgKi!`{kUl0n?pywKK9<;Q&vp6 zVMtHm-Ip&koO9fa?LB9o?>WYP&Xf^S|JUsI+;-|k>({PDKVQCsFP-=iUq9i+YmdA8 zfa&Y5S>B4B7Vr7Q>JwK#J}UVS;fKk68w>jOd}XBiqV?kdTmm}p-sHC1e;jnhZBArMLB2an3dC?+jiXopGe?j$7BtZ&yC?KAsytj=put z>*t*8!TKG1OPFlWp`}XI4 zl9rB{_S|IMS#Mr^&FK~-)8?t)j$ibGc zN=J_n9fzMFtbO-{K0TIy9@yFIox2vyTeD*L6`$O-Y4(+wHNUTXXX-1^$w}$fbEnPyeYvqiwM=Y5?_sV;Y z8MftP<>fw?&pv*`A+lx4@e2<>>6oQ2wBEhpjUh8OZFudm4I`g?{H$kA487m;kr_{~ z^`AFi>U{>sS^ei?pKSXFIkzO%Kktqxy9 z_8(~V%OmUMMf8C4K104ZWbu+MJ8ehI9K3$jH&U%?XuX4Z?}XRt5-b#{q5&o_~_W;f(;X2nY6(D(i4YW z89wvDaL8)D9zAu#>jB-YLAj%Pjv9MQ@aCIMWzWegcm3L0ah>&=-_RLfslKBh3n-Tl zVSoPRr_--#t{!{k{iiH_YUCu_HO!^Y47_gCEaTt{y7hjk`P6N@cJ2Ss_v4-zkO?e) zeDH66#)3ZH!CDcOtp$2Xqz`=a-kzh++joqN{& zA+vV=>aNXm%zgJ_^pyMWSup#{UvAppv?cU~?tz1<7PaI|6G=n==w+wt?{+(|nJAN*^dOWfXTdfhd6 z^*d9ykNxauY&fhhT!vgZI(^tm`-AI`{b9_Nk2p`+c%$_*2RrA=TkgLC|7>vf=m}## zd^%xz<+ocs>=_T0LWP%Cy;(7BZw(MmSTS+}tU}Lgp0Lw%*^XQGe@8!5w{&pOe(%xG z#Lq|GH+Mf!PM6~8|&u3B>((s`NNldt1dq_;>$h!e2?oM zJao!HZs~)wHhgenaCo;X^L=aUx4b7jvw7YT`N0o-6MypI`IFG~kB``N{c|tmzCnIB zANbsiRcl|n_wM(5Z@%pKA46Xh?b+D=qrxBClQ(YacVPC0iR9F?E|>~-)*p(Oo+!rSiLTxK zYKT2A)x2xkEtQ)Pr4h$|D*T)-N3%$TYuW%f9yoQ8F<*xH*Q?&u+Ya&zSNc&`9M!L z{zCWYbH1r}Onl;rca5V59MN~pYd`O(zy9!N6W^L$KYiTy3#Ttyw0*I(ZR0JEP5p8W zhOG4dwl&;;i|zbLYg?zI=;BS~ZTsJSRNp&#h2~jHQ{qdW7M~qy;w|##c-?-}fs0nPK|POU_Q5yyLmk?mPCW<7VV$pYh|*habtFYyZc~pWb!$lEJe_ zFFfLkT`!+M{rHK~KF2rR;C?gPZ{B5(UsXAB;Hb^VpLW~pKMzS|o*Z!bo8uP_x#i|% zM=&qwhsGz~-HsEA3kU3@h1;m zH|F}urw#3OeA>K!k8|UvtO;Lz>NDqt4_iCsnWrW`wQNRw(k#cei^5gmw$g1w-&pzH zvFE>Y=LKUQy7<#O9{aE~@5VD$pY=elOx?QZMg6Qb!|js?&a#a@^+?wXzef#oMz6i_ zRm12-)7jCdy)Ywoe{;X*Kl-@pK5k*JC1mC6=kNabotNHlJoi)m;G2&8bkI>BefbFf zX|GwC;Ob##7o6lbSFAj$Kl2d9#H@=MKZ@ugJ$zShWKz(sqa3wc$+NO4k?u_Q7EB`_v zXwtTuE&s(jb*aMTCtifmPQ&+(sjcvPH)ezwQVB@ zw6Eyay&Jr?^Ly6@mz=HDO5*{Lt0yJX#T0)MSCoK~ECKyVI?(NuQx*6g-aLF+Zi>(3 zX2zN)ta4*oS^OxLiR&E`o><4MIz2IvWb06GIO7{PX(xt|6>2z|O zNidqmrEonz4#V_G-elr1oa4vrH?r%IrG19_hiAeQ@S#QkA3E|B(0<515B*;lNG&Jq zMcN-m(mu0${{L5o0-5Wt>9CvY_M#6SaX6*S-(Q{qIVqzda^xxShVfST?xY$|!G9AC zI-PNx-Y`y&vU>A)oqoLDoH(V;-TPhyiKX4=Ev9oqYxjMoaXP~|ow0qN0sc>P-M7z0 zyYJJUSFEs*i6=S>g*tpOQ?gd9?DL$ile=&5LJ>$OYsuY@(uQcz9%VF)*Xt3TVZ2V) zx&IH>?gqeS>rzTi<_cBFJ#h4G_8|*3?T^l1g`CE?rDUbbx2^4jF+sjstXCj!cCON< z+{W#Ap;(cUwTUjq=FlFw@4+_o4tBJo&Gx&iCc?!6doS!9`qOn;?bTKj_1Hcab{+fE zmAUpywD!Brp~tag|bK#Fw2lbL|cLWXUY zOxSM8dGNq zq~?pbEtQrDFg6XK-p}e1v8cU}jOvwitUyE)hHNP*)vBo|+K3y2`m~%j@v#yn(0W8L z`fb^GlFm6Lch1!EiABVkM?;Z9iH}PO4PZGXy9~UHy2X+^DwWK+Qn_5OR+8pMF-Ve5 zIDIE&2|#uU#BEl{5UDn9vo^|NwS~N4n>`%#Wu2LXl1bQF8o*+TZrZ(c&=m4n?Gaaw zYuHp56{IrRWGLK<=Hi&gYB4e)AMdhdlyo@X%xF_~i3z(Sm(Hi{VIyAltIbxXqyf|+ zjGA?Y@-;6TMwwtC9gjvzshC~Q$MnHMLP{5t(NZPl(AQIje>Z&%AVL*f(P#n9C8ScF zlM`kkU-suq$)sF%OXae;RjZVd21r6igKR=tZEY5#a8h*enMOgaM$);;?jIV!T)C1m z`qWgY;!A}Zlvgshg4J-GHaLr%t(eK>TB1|&WpuG3$jdn9OY7>qANo#4J;SoNhxIi$ zMMUC$0aJ|{Kq`eGNijm?o02DMP6%;K4G{H&H(}%Ca+WB97%oTzQcW3jjf&raSJ8-E zOJyxC$}O1^QKLnbTupB%kj~Ln4PczLWn84eT1nXRm_268SWD)384m-m2gg#Gn5|ww z;LiC@ohuZB43|^ra3G^6X(Y-wQi@uvQHFrqRBg0C6xRS&45GoD@_HFW0uiKvrmKaO(_YBb48N_6e7IXq8hPy+KgpVl`5z<6w;+4avcMtPgFrtNHJNP3FmR7gf;X9 zQ?_iBsF*J`a!$KFkz?dY1Q?>J zSXE?2SD}g*F+dm1v6>p8?O9Wh2osI09z;4+j;W#?Wo!`YzLO~tC#pd2qNY6oDm;T0jh+!0WQGF8tMb2T>v01~Vc zhQF0^6cN3RfQhlUaxOF-vtmI#lQAV&nkiu|BtoZAIvEP)uzE<)3rMb#DXgOuqqT;Kx>$#8%!*XQqBKIa5ZYKbU^bVdEaF1lV~(njLzi+Mp_3w-D!=YxtL2Q zB>18zWu1z_mNlk9XUalQ;v}L9Sy+kze<0|@rD&Sc>m5!S@}G@O)cp#BnSfrVMgug)q>-mm8^jMAgdPQO}n>SQ2`26)IMmgD5FyqN5sf4J6 zB;MhyRz(_(2$D5GA=yL?qQ@=Lz+s5X9rSRRhD~kCB*oN06e>_xghk>EAnjc;(zGUV z0quxL8T_q;>=up=mH)>Q^3Q|l0Q^@YvEiy5g(^DVKvQk@;gd9^tP&CwmC^%3fm*DI zwJDy+!cM}NY-frZKu_E3mxBmj@f+&ERj&n%R%?hc7Z@kWtBO+4#d&kJ=u}-gPNaP{ z5#eYG3uIhzR|Y;n2jX-qCUcC;RwEj~gn~e`Nuk~tD-cl=FlUWwEL{;y4Ub9S=_HW@ zCOvHeSiVsb{S1#oi`Rr225q^4$?V7pc)SGf&xH~?K?4|%=~{$|4-+M(oW%tlL*qtO zh2s{2M${24G$_=Tlf{6?!>KCc2M``-Hxh-IpT**NR<6`Z-h^2*mQtqUW9wZYOjy;3 zAKl06Y5PBX9N?%0;6+GvqUP{`yyBBgm<=?bfdnBsfaqdGlQEkRGm8>xIVRGb5tfOz z?&H#xkP#^-)ih3~M7^_^bs4SUMBRxb%&6K(RYfkSGxAkJc2Zf{Q;AaskB=nWdv!YE z>DUy)B6y&QX~pnb0}10g21sre@yB_nP_dj)PiGA=AbJ@dDdVORVbSIhlGQY5<@lO_ zH|=`RN~Ao52k_bm6;PotqeI_-jDVCpnB4NnX-2}T5sh4s;oIbbYQD}O#Wb!rCXI-v ztvj=ZMjSp=3=1NthY-nYA~b*)6vqYy5H8n1{Mn)m9Bu(GH~~>?A50K{*O45J`lMWMECKp&!-ZtIJEjUTQ6v;_^8KkTi-k=2TdfJ?5b zk&ep*E|?qUfLQ}b8*-p-0WsPb5}0~AgvTMEI`qIO5h?+agI)mQ#i3%gkfWx(tq+0|eX4Z^JIbQ5=hz79DA%Y$0a+nhyB-&P{vXq6>@rGrbYZ3zBSVFD(+e+9G z=LsT$Dy-S6&7c6$4e=agqHxq2K#8n35Z03rN&;qJa54%_m9HW|0^?-3K&Yr)twWj` z+*K2B!DG1ODK(G^ClCP)t?je4E#yR<-T)6Ru~>r-MWRU$$k;(CU-!rOFlXc8CWC%m$Iyd_5JXVgl)rSfu{c%G)5a#o-or4f{(IDEYMQhCYAI6mKF=f0uN7= zl|Uen$+>;;CSME&YC^r`%Cm42aZ4*^vT4q;Hf8NwBL|p3tc5~a7Jw%O3JjbYn#%)G zqAOsJNRv*LGB(N$zgq}sOdl@cnls=s>mkoJHGuob_P-Hps8n}r;imPU#TxN-^dSP- zpi8#fV!hkXhk_=%AoW?N9!ibd*FcIC8(>xh5khP&1fn5P$-Wk|hj^LNLk|iGTK)V~Pe)kc%Fa z!|c%zDAYhp6XJiel}&Q5t?Zb|Fp`4$nAKOnKC-I;gaS;&A!8b9pzZ>Cm%t%G4ujN# z3dGN}Vo)Kta%MPUcTIsK+%3SQ9Th07iN&fh;3xv<2hpyMEVB-dCrp?+=*YLy& zs3}gw8^I*QS){Bb6hs2i3}djvSk~E0vaUiSW7nDLC4JpviRBy>0+?+jfJQMSrj0NL zBBmI~vm9jP2m?I_qU zOM8uVQ4KWXS;`r71R5z*!*9k|4It`cr9xf_dW()SQzxwfD3|V9gMl%aScgh8!(d!X zP!S5@X&cBlpto$rKp|?BVKC{grlE+?M4dr_1$3eSYkSlJniW_?42A+`Cf;n7!v(Qs z%0s`Ca%U_SRjiik2`APfu$(S$qJle|xp1YXA}Yt#Tm=)}^g8ts2p-xvn2t!n?1n(ZvH}wH zDL@ak792pqEF!6PaE4(WcF?BW#S^64D74JL40!@4|B@%#?9jC28+w-!g)HWaX83r# zR7%rzC9O2QwnDs9G=vLS(m%E)utz0qU(4kOFALfj&!M zBJ^@hGT6t~Y5= zLyeH89o4O`5OR^0J#39_By&13p_3EAaJgDd1#vUQ;e3Q;Ym%!{b+t^1pr~?K)ff(T z%qVJ73xpGd+yYC$jAK6Lb+ZP7uz0Mday}O-w(`6J)k7j)%IE^Ih6#;_?3qk93_^Yx z63N5D$TfjTa6YU zA&M=^ZRZ6uosXvUXbE~RB^J*^{I+6xSpx`pEs=n%lQ(lHT@w(%)M+D=CbGa(g8|gP zWC79(gBTd*I$#clbadE21Nd)wp`x$gS>WSEbHZ146p~qgp-h-`T&?19H-nA@8A(`` zB55$0I^LH*$<$<)l`L*&y`Iv^aYr>v<+9LW@DMEAU&(2Po`bjMjR8vq#QbTKE3NPq zxUoA1x8^GW==$lP_wHyA9B*)&uSMbD4^YsfwrEjN*@)TvmU`#RRe?y_aI_Zl_ssBCrO88b!4Dr{D$tsVgBN zXonjWrYo7|Y^ji1E*;upl91YhY@{%`jXGmol5oj6(WxtgM5*FZhyouh<1sZLr+}-}VeB{|nX3sd z-Y^$&XfskxA!*3^DR+n|7V3;1dPI^Pt@_9Yw@^c6ie5*TJ&@Q*O_riDA-Y*uA)XtQW56p+=g1k4=WZPZ^h|H`Dg`aRd|EA->8ikpY9|Vi-DL}AtRtL`Xh+KJVTLUgDVvN{B&n55mpQWTiN?4x zL?TseRekz6?`#<PJP)hoBFtvO z|L(dDAO43I@6Pi69Z(J6?%|q^^#&R?`^vnCgs`ZhhZWQ$778WgTs)JvK%@})eAA_p&G?;p1ZQP_!T=VrHVwFA=5QeS7=s&k7*~njE1~F2xy;4Uj``6^C@>En^1zu z0_iR!oC#a7OevvosexJRX-f`+p11?`!kiY0iar=QI%QoZq>Yfy3;GfZT6?q9?ew<~ zmRNRY%AtGW+9#pCH&YHsQoD3d;=42DeY4+xbMYUt9|gDp_*3Q7Q|3?lhCrHS;Ucu>l|#03z&h!51rOlwGn6#cnmrmu&zQySPHms z1Q$e;6EICoM3@|m)DnDFz&g&77SA~WQif_wR$*FYR)6pOiDI;ZCcb;g8v8c3vIwu45_3=Iw`0&_VIS_0FcO^6lz^W1h*oJL?y+yv-m31v;^k^}*2yU`cU%<& z$x_tIJR8kdeNA1S(f~@nR=F5)g>{CqN%g|s$QJ2z8aY2-%i8ibI>F}J2tgBJF=|CA ze=}?=(V>!$A&@v*bY-9kPMR&ga5R$0`Za(_7)W@HMl_T3C5(A}$wP5I7m12oxoi(b ze7c2grLTY4fTDoKp=62XWQDPsGY5*Z!O;*Sv|CX+#O#puh4VHyFqFmPi zHW0`qO>0|}$u6n)AVSti3mC|JQ0m?3EJ zfrJret~$}EPKrY8a0QHRI?WkGQEf7*_-y`|HJpq5xBBv6jve*M&nZn{2Rqb+Gi+pgFS# z!QvJ)qc1~8DU`1#984+VHsA@f%RyBc*@V`-4sFWLfXG(7NLVc-V~M1$lQOk9eZgu_ z=XWXNQmO=A+-WiZ!CdvVrkHXIS+&c zXHj55F3^JM(0BkTG66>QfsP44BPF27z@$t0Vg{%X!UBgeHOd^sjIuwK&}%7ISaZ=# z9xK2WCeDyISL{v)Bzh!Eb1-JM5rWhRCpsQ%+3S>Pl@r;7XpQ9yj#%9fdogqf8%_r^ z)uO@b^BZX?-L&XkB|Mw=LKEO(I78gTaTz}$$AQNaGE;@LnkQNsQOFE!7NN2)SYsTW zfbvH-JOXf6VS@*nL;+$0XsIc*vYtB3G`3Gd0u*2ymVnndIQ6Cse0~NmhOkTn*8s{2 z){-NoBJO|%YRkR&~V6_2sDJn zVBc1zn)XQzPY6vLGBF9~G7hs?3FHcH%2V~%yd}~GwS=#jb-0|2D;rH&^s0wx=>Sv( za2Bey(Xo244C#b9b{$is8z71rGDsD{h)@XGS6G@>7Y)mmFj_UzMn6+#uqHxS3=Bfl z8elJvYa`Sco#Rl&?1EVxN5k7r>f~X1ze#z6E&%0P*Cls4c(6g|i2~?E~=}=2;$tY8;C3WVIS(fu+ z+9li#wj){?kHbK z7Nn@ur15$b_Qi4e6vOMxvenC#X-KpLC03#Ab|i(0C$lAcgZFVQrKOfyPBL7k!VnDN zPhy@*A}9r8E<@B43>It-wXV>SG?Uk1;RNOmX0U)yLB+T&4Yi09?Me}#I2YiFCYSeH zgEW`rBt2BJe!->TQV$uh1{6zGAtE4MX!&5B+hX=q8d8I;*`-{rUPR?&BxIIc5ofW3 zLsrPQ&~nueOAPj$4Amz~JCeRqY_FFF!w1dcc^bQ2w9;;Ov*ih;*$nJ$G*!&TPU^mp zlTa>_Cn>?Ig!RQJ9T8|R>k?t0@8TMC9=6^EV&=Av5U_q%f^vd4T$4Z!8Lo2@Yy{V}`FJN_5(r0A854ryao5Qh=g*bqs;xv`ud$ z40v7T>IF?U38hRUH9OMDid6M-lJWX=7=zj~dIB_3u=bOHF1o)&WU_9??aOS6br{ctaj_NvuI2EU<1TJM=&=8ih(+mN=8gK(*RzR5Zq+m2`Lzml`n3 z2<~ZU0Bb&w&Y}w1f~ace4~et@8!aW+MvIf_ER=ZAu;vX=TD#;2xLMd3S2qGEh_pUN z7-CLcgD~05z}pEcfLMgobGRCaDo z67@1+78G3?Eds14h-JypR(BmLGqBCU3u_=je^}%H6beGHLYcPVrWW0@gI1oX!Ok_< z#-U0c*#A(i$BGTC$waC;u`YRm1S=Y%2w6A2+jEeTG=d{kE{P!+A4}9@p(=b@s{!i1 z0MHj3dY@Fqg0NXnP5@`s(SWGn4JIf%utEe~p_GGm`s*?g40gqO0-iRu+g~Ji7NCAl zo-^t~gp!C0uu{?_imD8&3|)CU&HcgK+ywqwnQKJ(SDw`W#EH@X!s+d`GW&Q^|JI4p zRq%G3hnQ{iqZf9hQXP$*64h|JC`6ewQZpbK_#Yrb0RTJm6k{CTAlcy!E`KPIhb#~f z1O)c#3K}CDT&V1~5*fTrVK;1Y>@uU49LRAxe+lv%hOvS%&U3JEjf5qLbOvSya#plf zgQ7^s(`*^ix8#!oZLge_TPer``|9-0l=mohJDR~u2EGQ{Lsc~t^w~-Qi{EFpCZT=M z^Hf-NxXE-y*1?=oD_m|zP>Cc=qUvE;n1P|D4o!Cex?!otN8@cTtQ89q-kh$%7E=zm zSinygl!Q6LxN-)9AyQt}llP*IAlI;qHYe_k_=3QM5_+Jtdvi=Vt`h|?<}79igOW#~ z{5hV3K5D5Psg(?MgI>?&D`dkJf)2%AG` zA7N{7(Wr()*nkT)Z_Y?DlXh7MD4Ub2T?2!CIIY z(6^eMSWjUiHeHHu1dtTtsa8WRE69btZakLCHHjQ0<@{2M#ARL#n_B)PEE!oCln3Uz zjRqFcg2Y;B1-5Fo4OJxBp|a2JtE35^4c6O33AlX1XtAW?qEDZ-*htFgFQ|D3Ecoku zU9k>n*&CrWcSk5ti?`h^4Pd(j*QNCJfA+ZuH}J5aEnMv$uy#S~FXXC8h4TzFWxMqu zRQf2aBcgkS3zjyyR19dsnBx;_rV(e{4A6vYUxoiiT@P(ghp~4ne8ND7%@qW9vx&Ul z5A*jZF12O!FBLvrF(h3^ExszZlCDHNmP=vY4p9m$F4?_KpF?Mhx_PG&ZitqMar%ni z@2z_54!VVj27lUa4dlrHj`>}=khO@qa=Qx~r5MU31y9P%deWT$oPyotoWn~aK}&!( zhghko$D4_W(QnjwtqY1-r6BI0JAjige)S^3#2)T2wY4rR&cgG5$ru{jK#zPccRmtw-K-j#LU=lz_8-d0Yq+K*>0RP|)G)c`Jh&N2Kk17jTvySMXFG$O< z8V(Au`V7;idSJ@bQ>hRz{z2oyykDpP5QeH1I0a861$g*dg>_uuw)stUsN-6Kr(tDu zbc-%W`NZ zXbvwL997T=u@>I#_V|mHFjb^u$$G+1gU zozvMJs9iEUJ7u_}JLk3sNqZ#VCdm|BzgWqo(mAqeHNizQpip-uf_#wlV_q_nYUga6 zX2fX^n_JP0%V#K?Q%EdLB$Kcag^h60c@bwPI5nL03I>stmNFm z5*9CuWrgHJH8Ke>tQpedR)3JC1FFSR^_Fo1A47>$)f9J@BDtiSl|m+$h3>2<6l*x% ztodYzH(yX|Y{n0li00bjSE0iU5;eev*Qg3DFYMxsSz+Ej#>1A3QZa1EnbWRht5tEs z?i#lvV6$dBv0kJEeHeE=9xbVq%dHswsZ!OYC`H0d;yRv9q*HpUA4c6#xQxMBw*+cY z(W_7DY1|M^!cHIBQLa_=j)FfFF?RG}+g`XUmyAxV*`U$u!901m^S6 zRfi6+9=?@OoN>FU&~%d+T=!hTtB5-Y`yD7dmCadgITyrv~HJlT&d-5g0(6$BmL5i%4WPoNN;oJe{~Ewr43}G2 z696JVVedNO&O%>p^>1gndm-0ZyR5B!?^?XvS@Qgc)y@Am*2cs2;9l?FuQ8XTy$j5} z-tknCt4q9Gb5awvO#zZv$^g5o)8q6>vu>P;Gn&UG4d(PXlNmOa8+cvHtWRl^`{TX; zcb5LAxjl0$)hh*UuY@!Q_yXUaLKUw4*LO`W&Fx+du8|9fB|dWs*n9M^$J-$h+@1k$ z)ByHu{m`|{Tw6f?-yi?Qz<)9DUkv;g1OLUqe=+d?7Yyv(JBpX#hEYwpGt{ncx*bHe zcbV#zeyY6#)vop3ror8)c7Na|R^5B_fIs1n&ZlROp6~;I^lE>4_SQaq+n;`WKJB~V z)xCT6?A^C_uipEd*>lO?f7$g^w?q1Mzo>_$XZJ(8^*E$^&qKQJdanCIIKVzVdUl7u zx;}mT_37QKf6x7Tbnmu5Jlv-zeDLmb-QcO7eS7rl-oM*^`w!^WqkE6uJ$m-))2Dau z?mhbyyTk8?^zL)?z;1o@lMAiJvTVrgPedG62XD@mn9X|fqw@<(~ZFA5O{zPKD(-n=y6GE*% zZF;8B%w9C(nrjy?d2so2&#zg#`IGHG%$a-Z(iIQA@Zvk~e)`#uKjlPNVY~Q}ORt+Z z|F+wgt$g^AmsY*J?!EUv-}1%Jzw9`qTX%@&UVZ!Y?A5bR-@e^*aL9*r>veSRf%-n= zw}E8eLC2IQUwzAcPxmvd9=u`Hca}qg{SPyy-l`ls<(XNtt%p~qF1(*R&J^1C06Lmt z)3)%K{iZ!QWatscpKziX!-?@Q_v3U$+N0%#Og1Oh>WwBG&h(3Bz!6<@?VP!ARErib zxpgTV+VT|-!O=bY-19HI2#5Ignziq|3&*)>^CzEv1_%57w(URs_!AuRuJ^kg0Ljzi z5IE3NyNw$5jqTjc?>_v+59chnC;ET%D|73z+ZWz;>9Q*px?Hy%^!bVZ4}0$&7R8qB z4VR*#sGtI(B0)hBP!W+FT17-uat_i80s@kAECm4t5hO^aB}t~qN^B7j1O&+vTR?J# zCN4>I?sh1SR5%D>1lK57$^_!ziBy!KY-R+MTA4dNY{ zT7PB_Yl6N({&GQ3PQaUvW6eE#Wl1&(G%RLU#1!>IBAE}#KZIL7OYI{%gl;5Eaa}Ly zq;+p_s58w;3f?GehmKUK??^b68g*qy9S^UTxA_4VpR&)TCBBOG7W2&K-ifesB(pqm z@RG4-vKQ{=ZON+b^iFq3sxI7%%arx5O1<9-aYm)j{yUwZK`go1cAm5z~lD??V z)ghH*;=0c})H+zo3LKEV)ES2@KJ!vq?h@9@_DpA7`L?01`MJ?mbK7&X%&Iw=cc})Q zx3%5gR`bQpWet1o)5A^&_bF{7akZp5DpRgUQ0RM&63;Xg8|g|$-r2lKzSIlVvh)(l zE4MCvT>5me&nimJ=knsyl}^?~jdz>MRH*{uHc~GSCX2_2nIJ-V+LW`i(|f4W)gQ4W zlkG**Z-0OONXRK?MAG!(H3vreu9s@5ov^-Vo@=+NvanLcwK0F<%~$76Q%OH<^cvD! zpg>ouJT+pjygn^Xa*+7+89x)_xK#Mq%Iqu0GldlRjanvN%dMRJ*2>a4(GttTPJw9D zlrV&}HjD!!O=&|Z@tN6lMsjv$q_?12PTP&|d-pee4}HD({ZXIk)q5wY)n(>NQ!-Va zaV`q7y-;cf@XGO|tRI&OoD?)9EqBx{WH&i)4=9t}RczaBoNc>k6DaM;^VveB|qx zLDoa*3!qSA)(!9BV061vl{wGQDK4srGoBP?k$ucaO!vl(3256~n&sTaw9k}-jM*e- z=K-RSNSs;YIMU_ zyXB}&QtFhf{F^lGsodxihOn2%d5)$V=Uw<*s9$?yUl#RwarK#;O$Y2|gu4YF!`a<5 zY^P{Xy3(?H-+48oTl~DteW|61|C`GZk)Df6u2(*&z&=V`2kv^EnOi!a9`aknOiOlc zS_x{SKr$YuGN%-k-iW;7e|nVL6%L;Ku9j10BN*iDdr{iOI;C1sU^@qTm*X{4x&r;r z*fq?B!(Ho~21RjC73C(m)@A9xY&&^&)~+b)t=&?AlfA>)dJC#Kol@${%xc+>>_fJ- zj(3`5B1OdNDHaX)sj>U6{#vZ+4caH8;w6~3Cp(=zk(|mI&|5WX{^^wOn9$)Vg>Q~_ z;d29#2CWAa`wQ0264FS}duzszmhEMl&BFPle*F2%al4P4pi1BvPU4YJXy7epRWtvC zlD~E9{~3C~3n_4jNo9d1KN?Np)R)hSYMwIEy8X`g1b11(_`r+Z9B5bVQS-AlX{Vm$ z4$aM4cFtM32Hd*FSX%ICJ;ZriVQ9X$+dxH+r%Xi7>dL)h-9vICU!dWn+-=VUlNGUW zjZwuZRky1mD&WJtTZuto-)JJ~N)a%C|Qv8}`mQO>y0?2pH|d zS~5VklhQRqtQ|=SQp<%4RDl)mJT8xwjo7QmnSJ7V|3#{nk9c#9%fLBQuRm&B<-~{ndodxY$hY2=q;sYAlnj9MBsr+cfmIRx#Q6 zn*2%1oo*+TomlyZd~)iI{4{(!Usj_Oe)?RK%Y-DgPnIge|32zr=h-!2bM#z;}W_I`YP z_sJ)g^vdL)+$$ATNfUQ$yIxeZt9M+U^TP3@kO`hViMr>vJi-X})`d$IVTWpXCSD(s zf3)Le^}bAA&(+bxGhC`K&Ya>%4&5FgkTuqKzQA^B=*s>}Au06lw{fl6WN)jma4l)B zEO4EUBxXk4kM=%S(<0OUFm}l@Xy^Ok@aG45uR-!7*+Lm!~mCVKDDfxSe_ zu|9*FqbAvqy+^1Ko!8?GYZyewiUJk$k=MJw#E-*`C-LNTw)w;-a|ge?_?gLWwA5yH z`@osB#a#pn#A#^3b(tuwDaopq>QmQf=$v&beJaoC>y4LMgJLRj+fTgPc~N9ssWQHd z>-zkt!4SA5ymFh`>`jFeEO&U2&3*R%BXB35MUK^V&~w#^NI$%B`=O36jWvP5ks$Jv zM^MGR-mEtIw;Z(JbKZV@CxG6}dbg7Tjr+gEZFB|jQL7*SyBzJGSVyB3y@0{0bUMGH z?_|5_;$Pl$aX7Z8{XtxgVRF3l#G;Np&PY4O%Sd^I(=U=^#jRwI^z*UoAl$0?@^&SU z$Co!aHRTW=w`;0_sE|?<*;(BsPHO7lQ#@2DHwE*t7haXJ{k*|g#gVlsg`_j~NvWPu z`E#76i&9x?#lo1xz!?fuZ|xGMa^)li@_O@@@F?h*0j-~2HSv1?OS?$%sCTE%2A-in zEYgR>+G0^HS^J4&v->robVa3a`slHkQ=o&?ALvvff;Pg_--_+kEBk9?{k`oV-XPpU z>|1V7pare>sHIM7k<@YuwA2oh^Wgc9l~2~h5$(eiXck=H!N6tx;>oWZL@i7JCY_rs z>Uyb#?y;u(E9a@1fUt|t8)gbX&)+H6sV7S_4F*a6N-uWzah#}_**8vDERhx))Yz;# z$G<6K&%$ZSnsHM0z<$G^PT2=H2gt2XWfxZJW?r@lQl$~udFXZ?)H%1DQB>>tdq3i@ ze3v9hfl3=6p%LeFW(pMdAb-I@`SVXa^0&ouf4W_ZZ|Gh}2~l^tul>#0&?6Je*Du;O zpHeJORAe=N6S4D|P7V6u%E22+q?@92t7|U<$Ze&v3>;chU#lPQbgRlvN^so zudQ^I=`}^a*ZC{V@q5DaKgc+AQsLv#5glu(G|{Hf@rf9z?`x@P*UwB$Mw%Yg)_!

WuaIQklcm%LwC%`?Y9ceAjKn|Pzv6ZN7*NXe=rNpF9+mmSi0kUC}gRbGmZxezj(9Y*n6zH6ioxfWP_!Oo<)S=2lmmYK)y;ONz`n|Foqa5#z&eS z$4!_x)gcm?l}oTU_&PzNpKl{VlbDGa(!>pgq39Gh9Yj)*6wv?*B(^b6JUXyQfr7Zm z@@(I_aTAKddl92fBx8JCeg5aAxFNny?(oPb3ZyE#E;vu5|NMahMLED3B?zM%a#VT& zcn@z?{oyIqNZc|u9y~k_&$hkzZiHZ}WU2)qUt?f?<~IlZ^vh z$x2inh@TU9^S5msljXu!28Y)xM;GZXBr)4ZcZTNNIWUDvRY)_A4|dSqF0#w6L3Q`^ z-Th;#9nvSCok)KZ261}bKQVIe+r!IuFSp2d4#u1vt73YU(b4vi1vtXi?B8S?N)jq# zVj?Y(`=fzVmn3@Xo^p7FI43{9vRd`>3g3=Phqvmfg!Z;IvR+-P6^S)J2tiMZFyL_; z_Xgm?5@h{>MGuxN;fP)f?k1&069t!_s}r_um9QV96w7PBkeFG~o z&hzrtqi@06N@aWRJ2~1O7D6P3CM3q_}69L~Q3RxYOD2;n+htu2?w{h@bO) z(rnK_=FBj;O#BiPtNjNR$??|^XNWa)$T~ZWHQ-k9^@3TC)@#)c~lxYZWpdvQZ@8v|~aXmhr!oNG$v%-ja#bm`PS|S;)jMG_d)ll1pP%DUeDmFu!r`Yvg@% z>lCOi6nPW0V2&qn#rRO5i&GRx-HybwM!M)XG)aLhQyC~wM=C!&j+UfA(&Ck<#qU4` zB$1A-k@t)Z!A+&OPCc+~6%=S+!n!NmmtKon;ch~2bhp4?n&*Q^E~u#o6lfRt{y$6q zt5h$HrP@)Q-@ManwCNtLqMAr!**uD!t@X=Smr;b*zAD=`cahyM* zw_)BOv<`|u;v=Wy9%s0Y$#!vVbwJfhX=r9NN(1(Om`JI~lenohxiBLZFC6XqY|Q4k zP2KUk1!Z~L)V9kB9XA~h?xhL4eB+SZdq^n6mAmVRZszXGJSxwDaK$~Mh`Aom}}U(i>_DiQjxA_?SXet zpz4k@)G5wM2LuhH?e@3S-OLp|fJvYI|ICVyLiNP5H3b^G1OKpCdOsT>>@S7y{|`p! zf2r;KTbIp4frb()Xn>1XSOb3#C50jex7`pq3bcsc?8K8TfzQH3fxgttqe%`ZM{FLO zQ+^<7LS2{_xqvN@U6UbKusKy0s*P*#`iE}?7{N$43)zKUxhDz(rREMij_`xakvMfW z!fGZtn~my@5Ai$&N@Zc2&2g8}6XySz|M54yJ6*bUrSY5AyBgv#M7*LLqm)T%jrmgX zIh~9hEB1m6*#Rm^xyQ1_t3;I)d^J{=g`{2-tl{|W?#rDE^Mk(a7E>%_XjxAz8DE($ z+sCXcQ3D;PQN6av&7opKQek8pIo64b8q(|hm7V;5!dhpC;D#h5&o{n%Wxm4Hb^L0G zSXN^=_XP>+a|(?m>33@fbMlK`5qE`tPf&WV2YpyIpk?qdG{K%6?D~BAKz>nXR_YDK z0_8P(&8vu)li5IHX5Y#lo7^W{X?)6>Z*R(m5xUyS-%m~6`3E9vjWFB`6EeE^9tEm0 z1ev4JORbEXUFpqTt)2kCApYJX#z z2h*lR>4?0CJ$|hX!W^3IYOUW0Ery$48lRo5cR#vqVN8syY(-VfoRM67x3aKUQJF@0 z^-0x~U^wP_U(QFP%4fQXG6iP#RAhFQCzz`h(pfYEF|k!SwObYS?~aY8%^kpAflT((iQYL=L4AuZhsN9+AVc5hdFXY+wf=i?N1_d z8MBapCKh}8!`}$Fjk`6X5hz*AQvW*&WJ-aqM^|C6d_<>n@H__va>*%T9+#dDU)dsE z9b&E^F35}|%z~wKDN~?EGS~K)H41cA9J?BU!tdW-2H=y_7mdi$p90TH8~@5jynhas z{v>LZPVvR4sbxuBpa&FMaGQ*pc6sDTxV^}T0yzW7tHCs9w=Jhdfr{-kgs?l zqm=$PNwam{zc@20mj2H6(>waf!Q4fj$^Mr$9665u*MWO$tPq1vrHZSZUZmRwwZgAYTbciq@h@ z8J{hgnr$?-%zvWZZ|bYDE6v|Eo8^BJDvfE>;|Q{r0-!||<{~_L&3%loQfaBD9qP9cQ&~?f`v>2*m4vJeJsC8fnKq6Z{EVp z`}z(6Kege5svgGG)|NV z_CHk)H5;(*KhoV5L`LnUKxS6o%;HO4t~~49%7w0&1q_;4-uwn0;{OP*@-)WQDuTrm z9RX98KLHYA*=0uF1Go26Ao4I4Q8#|OcU&YhOK|Hfzc*TDAGhTlKm9XzIbhy5B3WF3 z65m>)P)mtYc1%-ANPH(;l=RI!7bk-!j3kkZTApV5j)`<>b^lhKixL;thnSxY$+oxZ^2HvcI!ecfVJ7vNr57Tfe_6s zVGxz!*!L}2*!4FpBu%L^Ij_ju;hG2vG$Ocg=V53QPtKFyq{-Ha|KiB>*7_LSxoONs zI(!k2sLD0Rl6irUBx6=eY6~&CmX(o=c-g z7{D*qXlYd>v4Yvo9`U<4KCz7GMzGDICfctQs!}Ee&N$wLKwv}6%*iZ2m ze#MS84!7XifZBkQzo~ixo#5wyw2f~LCA>Ap5f*#kL22|-qWMI3Gr#7Soj>h_y1E1X zf;mCCllHYqe9Blk9sjLpv1iW>oagSp+E*oUp~#a@_w)%R!{^tpa))U2R#GV_mI!ym zFMrj3`>-u$uJ@`^)aBEMphNCHhNoe|%aWe(<+oNRK1?^NbkZIWJR5%G;G@v|m-vN` z`d;u18&DL)5H+}?@(A#PJFKh-F%;+q>KHe`#m@J`6XHl3OtVJfk9dvQq+UiL$>D4( zd_O?5v_br&FcRzu5Vk|Jb%-}^%5MRH5Jz2seaVG^p_!5cJD>uJpv5+ z|LmOER=Qe)1|*i{k4m3d{p@yZ@IlkYhrZ^(e#d;h`Q?h294s5l!Idk8^S2iHFZM11BJptPBsSp#VhUhr=yjz^t4G zMhFn6+w%mxy0Xwhma&~jZ0+!bv$}B<=%^+!5twQK(G1PclbX25ayWp%EUe(4qRAER zfRf63WfUkjc8$FE@HqTY9ZACh2!|lz2CSI?ptgz?z+e8tawGxDQd@#w42LuL0ER=R zWko1Z(+9W%?C=i=hVITfkmkPbYSap2BW~jpz-aO;ok&LLseu2+aDKV^q^fmm&olb@ zk}|F>6Wy|6*&WA@+p&++O*1XeoIg&rGcg1`x}i#6d$+J7thK((_|0{3Exo-gd%o-T zDc%z=3bkxpdzH=2C!DxP=SBB{(8v6_(NUEc&*ZmnQG=W2d%Hu5kIxH2y@wQDy-Iir zJy+p1W4)_x{}L)J{r`~ZJilX`WwT9E2JM`N0zS54z zN#+qv26pC#A6Dn2BDZ?5I@IaaO|5zMz0;w$j-+At{8ULz(g7}?Uk>RiNF+`VVTk^t zc+&S_>@PP_g^ze#5~%(tVD{35e*na+Ws7?OfQ$Nq+m>x;S17v&Mb-soV8LT`?fzopB02E%q4e<%E!;OHDR}BrY z@vTeOp-Y^#SfAC`b4Tya4A_<|qE9D%o$zVtojW({s34zX zQFFv>J#XP>a%KPVDp7sKl*7H-horST64Pshe=aB;WqRA^3yn7Es zUfjm)9%d#z(>=NDB&@KZ>Ef!vqC-QQ626}^MV2<|#>b%4lV&kn-TB`g{o8oqKihoZ zUh2FCYSRyBUc3MD@(lqv-Iz9hS?UF9G|B<_idpL&qw9W4Dw+Ycp5X{tXWs52@3!eJ zF-}G^Y8QxsM5$9zq+1kdmFnZhF0vfl9`1mQ10UtBHVYvfDBxX<7eUOhrxAFo0%MA#w4m5pVj2hg_2<9@GNJZ!XRbTCsjEk z=EU}`l>N<-8r!-Op!A#-nEI>%X2aq51a)g2so*@Wj~?07t0Jy~^;TduRdD#sJ9EY| zcO|zHT)XZYo&uS$699WWgOT^ncy@d`AJH}k2cn@-jcJa`5Zn}d4-A&tK-)zijmkSF z{=As6z&Lp9;%D4i0SN0G(nb4XvB+uJ^`s%RxJw;LV|=|~J^J>d$KkEcyv7*%5r(X_ z3St89LEv4ynh}U?Cl&xwrl4j)i0gUBp=H7wiLHePfl0$FYw9)`W>x>Z)qmXM{&8g# zwfIZ4=+C?TPs2Vl9;1e?;#MA#f&5lY!b??8?aq4!p+-w=kai?c&>N+XCd}!87(y0V zzGEib?AOh^RfyB<3BaAvp z^y$h#_Yp=9=nu+`nK$5OHju3O{A2o^&q1hmJ}C|&iU9f>b#EHLc=JemK(vF3b_wNzm|D~>vY$bR|ngT7CQ~>xO&mSJ`uzSrW%eK@6RKi2W%~?C@={`hf6`s8b zBsSZrB#QCT%2tA!uzADeSnqZW0$5~o+lafjXEJWG0o-o~QVhCTFNomQG;bpW7@afX zy6wy1g1x`On|^G6v=HEv$VMR`In6l0_{rmzwz%~uw&5Tj_t|l_MP1AY@35&rEkSpy z?$wR*+zzi8etnD3IfFtD-P~q7#i1RAL_0Y_kDb4Q}tnt`@rQcVwC;Af9jlT&dWB@zsLqmZ&3kX1fsZ)Tbu6?ehWDrJ>QwLCU7#Bbt|#6Mi#6nP(iRO;Eo!w(RU@Rf~`6t$fBC)Ie014;U!)U zy>j3oZU7#oHh1;3eN(2qb;Ey*majMCmX8|aH+#B)9aD>)ZPuhf^c*DR1#DdT2*PVe zGIEzc?OYjPzI9*i_}(ibS#F1c>YfK$veEHqvng2{fJSYY)i4-$zI2>$1?V{gV65T! zw9M=={;qplt=i9uZmY%pdGv3Ty-4%Rq(Cpm#!PX941i;78nG>(o+sY# z#*HS@2EzSfV=&2e2)(Q*2_Oj@fFd`w!;|Vig5T8!)R;V;@CgeyUSl~%f!;ZQY1UUh z;Kt%XE!Ll(4(z-1Y#7`WgPRNm_q}>5CP;y-r@>T<(?0NL2~dCX5iDE)MBORsAPDaR z?ogC4+#-3p5_^8Y0;GrEfZZQl2b)w&VJ*e zG2X}e@w=|qOaQ-OzVH4DLO*k&+TOd+_RBk1u35x0>>Sj~87VG%>=0pEBp-d1frT@i zG3532Cvnj>(X_bHc&sXFm6*>(@{2?*4^(4_$0dRgqd|~n0v-e)pR`jDVw?@qFkI`5 z^BX3a9WCU_EFj@0#^^|E01OgwVIwtGAd5dxgeSt_rZF=-pcnl3#}9U`xDBwHsd~&3 z>s<=e;shuu?e`K;vJ5}Z28!nXb+a>AdhGF}Ww9fqPhnHy+?pko8e9U--$#vOnyer4 z=Xu`|UcO!O^ls}0EGWa^ITLR7*^zZZsH^(rxEa8zv^C&h$-9l`6D%KiWnZ|I%_Bg= zW#B5*k^U9arr}V=++r0~xyfshZA*_;?&$q;Qe{`?cAFmE!*=_5QM_AK4;U5kH?b{X za4PRAB?E_Z9WWd+v|O61%KI$Wkx}h8rjSr|{k#2GvHd11E+Ik^ET8tIXx_vLH~+38?pgza{nGz_Tm&6*uTEz~g1{Kad~b zyN%tMUkmyH=lu(3KQ4A_YI7gy=mkCV)>N&Fm&kXT`G@(UV}y+|CcafmX|g1~d2wd@ zaBwYOB!cb?Px;$v||?j{_RY5+=G6} z%!;nwgbTTmtnB*&MTV|oNQGBgv73H+EueT)j~6i=qWh(o?!o=9)F>~k60o(Z?5^LZ zn(s{tsZT2KzqC1C5n;B>@U{4au8iuw;5GxbBc?tYk-PTkRA|wsge?iqD&~rR?rdy# zoUXUwu|5g0f4UhC9QJ_ubh|t_J(Gp-nd$!L(q0wj^EaQK+#VcR9rVJ3r_*JdhWy`P zEB}qm;(wC*|4HiqC#nCRr2c=B`tg7Du#f*F_5b0dKE}54Ud_c9#*HNfyYEKkXkn9U ztn19f85z{~s2&w6jtRCoMUFmyMEBOFMo8%QYsc=q!k3ua`n9eJy-pb07vzjhV!B+~ z7gBNE-tB}#QtC>k=Bwp_9qKk$D)e=DFiQ@X>@0HWRc~V%yo*PL+UjDB24}lVKiP4e z&Dn9TNH+3YLPx?5hhy_&BUXX&3r1(h4!_ZLU|;bj$w``C4DC8|_nWOx_*P`$pU_2- zoq`(@!!7Unkp!rS2dGJdo@(ULm2iMJ_5iGLyq2*I4~n!x05W4-xi>q+#Yg>1^j6sM zZyIHD!^c~QxQErC`}CtOc$}$dJ0=At+J_=vaZht3Jstp5VF9=L2HBN99mS>W&b;g6P|ZFtEGu{0i&{SrqTd|-Z>VDd5L4Q;D{5tJim6pW z;124h%~yVjxWI^S_N#s+Zbzo#+zS;&GHcZKCpo#Hn#W|T{Ih}rhz@`TszoVKw-2b$Y5~A|0zUqY+A+>PNSCZP@vcFX0{vR4;m34;>kxS(464>#sdI~?Hi{+ z`b^0353C`G)D2ItA=4l-PkaRT34@we)MlXDuO1Cz^sC@Gf_Ne|==23W1FzXuKU1LA zAY?>m-k|`<)p$VGfZo*jlGW7wMtjpbVu)Z#b)QLo%S{^YilZa|+R_O(EEiiXbvs}S z_4}JVzJ7vVjXu{g>+Uapa{JoEjoUSmk&&S+r*k>noxC@St!z9}Wye@_qmAvSmDO(V zdG_qF_+2H#>fZfZ;|Ps5{6ZXh!`nj*9&7>0#?kZKP5X!qK&&59pjx|O|4FMaTqHRd z5kT+k`XuooW8&vZ&p(da{e$JxKji2w?gprY&NQXP&(QkyG!I-hoWN+KDyx^u6$oRF)S@tC1d+Ci?}q=?2|yFkKQHuvWA+lM=FWVVUcxj zcE`O@5Dc$)<)Jr!cux0p>-RTP14lT|1{Xfg(;?eN4ydO>k-Gp8AOnHc8Y|>E zyawuY3IW3G3y@kY0MA{1fLwKmIgUU_fgG@K>t)nz3@C49BYy<9ZGH3)z~Ik(3_7%w z=r)Z(+cCf-Yyi4&9k*_RA}-+8qCkboZFsDV0$rv+YdUNH_KSRiU-twyN|0@143z~h zv%ud`q-y*UOp5uyM`XZl07Oo&mE4FYw-3xGu#xHL$OROrtE^=XnV*va+hXR|{HXiF zuV8P0J-yW??ZZudumvfSeH)=bR5`}^Ju^^~vznVaQoG9b5`ZpI5JUCpt^2>TGz>Hf z{29pp@9ez#0r-Pgu3V-hr+wM+0K4;hI*#q0GNjpkP{U|O&+0T$dqjP9vmXd&GV|-W zVHfK4NU71J?~3`kG1K`?SO+a@c>f2J`r%QuA3}0^higGxJ zF&Y`{UbXqCuWP$dVU-kzv}jZI-QRDK*U zILAhd&6wr|C(ToF$C>F(L%lc~)ts0793wKgrD)1M}`r`KKRA`4z; zm`8*-n%;0-In{lI<3c@O>RdOfz~!0oHwqLYby;)G|0~myriRGm_B^L4?_B(>u^L+u z+i2IfFxWFLrJ%c(g{B%xG?zOrOIvf{`PH&LwQ0s57WK}Xnl4IQOyu%Pj8CNImt)9l zV0_scmdOiUIV>@?m+wT)&evWcoClw>&#*7bFB-XKw|g3Ezv+UU&3y87R6H5&Eq9~vfpRW|lFns<(I=LVaQ0g_9Uc^qYX*g6iK zEy8#fy(IfFgL4n*%UQ#luHE;>4@vek4=YA*Cs0oY6f@k>P30=noYiH^=UNXzd6Vuh zOe(Nd2VIcL-K4$~-c~TpaEq3$kCQIXWF2_=+MA_JL5uf*t17^nd-5;x+aLJnznmq( znlgfLhgv=e^ATf0k4~FhKAH5X!ozxbOk(?0?%de^hQu-1O@_`II!E(|!IS5nEo*X% zA0qm>aqP**MVu4joK^Kiw}I^?p;|>uR}K<#J}!nEA2oi3Elw9dG>_SV-JJDD*()TZ z#lw?hu9Nx?YnS*`F2;GvH6PjMdsdgvK&`E7Sp=?rm5% zo132L{D}!G{ao)Z)dSq$%-otEfNL zP&HOf*kO16O4iYnyg8Odf0Ikl2@tmH<{%)5fN-Qm6%g}_bv}cuX0?P&I*^ zpg{4>(inn}TQ->q*TzK>!@v_agj~uqpsCLtl1#S5d)FK^e6(s%td?|nx zc5P6gn|QJq4&;k}o){c#)8c?jTqA-EwI4tp64>#mNnKF=sR`-{*6%6mp$MJzI3U(F zsO28e%+WLVmH;lhfmxWw6F8a2$-FQD`1RXCXt|Gj+7F2?VWL26>wbtEXft4z>_P(Y zlk^A+2uZ!&K^cV=5{LcB1mH}&=1I_GMu83hkH|z4)E=0W;#=LwC*f*P?h$N- zA%G~VJ(EQ9wPoQ8p|QhCPAVcdC&)p;T_{ONc|@z$z3rZ$N@tr3V>?Hk>1p3x14bPd z?U9Cko+NE6TG!0RJ6H0b1Rd~ZH+;l3qWz;&wWs-BXn+0O6!v^wgzHdyw8X%YS)Hu?Bohg;j>wM|* zwMWP)_p08Et@^~?r*nFBK1`vth-X>u{l@I^-2k0|%g)umjmMWZY2SL8r+XN)sKy?| z?Ok*1wI?XW`{0^apE1pklCQ8%$$oA7SuRW<>`;5lp@85d`l_LDBd*+CA^fuz_KkrZ z#OephTo>Q6gFeC}@Fy~ngDkp~bqtSw-Rq$?9Dhb4(O zJywFEaBYr=&KY2Pot_<6DsCxL(%k&K3$@S_UxAxr0tGt)Ks|KKvBCwulW^0BXZyO6 z9pcmCi5k0tze@sbN58tzjT|d{3o&6{#e4vKb9EfYw#+`C3%b76AGYY@*Y=iRK+P$@ zNv516k!EIK3Izf;6^DLsryV|MBiQLH3Sb^WCRnRYpMFpV@SH$_R>b2$1@-}ZI2tX!I_eH@r3hki{SJc+Rgv!IrD8=nFYl{WlkaUCl&x5)qlT^?d)W5bVVi`ed7M?}lP{Ax+H3ue#I-j%eG&4DM6XC!it5|JmStQjQz|~&Ro_qL zJoaFoJ8Tm?8X-TnFFpKRO_-0(Hhw{;*xKHvzsm>vIn2mGtK)pI$#@Mxhn|>=M%-d< z9i_wiN$H|S3DwhPDJT0f?>c{flX3dPJg29H&yz>CCjGR7!ro48$1FUisn(e|=@xJM zaMd4~5)2}zdI(xp63&z_8^w4d@A^*xed^AhqJQ7)8w1ZXV(mKQ8rl%rsZOv;KWdlh zeCb}GbIjFXtLbj1Rj4D@SfBjZ`}o$nFQ-jA{O?wmY~dEf(=NB=lCn`w|) zol#4w^MlyFV%)tB%pHTLhye*mOUHg4~jN6%*6f8Zs~t+SoseL{zHPlESnBIqvG(*i%qW{QQS>fp&DV15Gy;Lmz% zqsNe^t2Ar>ckWaFE@8*)z8rdR(f^G`ZSJ=Qv(xO}+DG!rtZ_m`=1V!wvb{Mh*CR$X z6%bS0!OhSbf`6}Y2N;3Uv4f*u-EL_(^L1n1k2<& zbY-Z9A8upsKK<#u9d-3tE|s8M+7M?No@TpD^IdyeGH=S36SmcKUUq;N>8GxnrlnWA zs$Ywfe80^ofHC|;R_*w$uZJ)C`7#F$$QaO>jLFQ68#-!y8ajS0iDe3_T5zqcC9>2naK!c&2rvcwHJZxgN|dlCws}IjAr5b@ z7`*rGz3Lu9-H^mwj%+NS7b|i}LoP)i9xp(sX@;dh$3Xfs`W(vv>M zM&i6%`f~d8)N8lw87l^V%kvf=^&8K{9w_8|k-J}_*~GRd?A+y*LuZ-@eceoGqKBk} zLr)SB)V$Q)6QX~yEAwSUO|}-V(y@Vn8z0CW3kTy?b;I_peXP55!wW%KB6laal!99uGd#us|=Z1AzSu znw6mdgTl%byXOq=;$$xI%00306-}05sy=bL>c;U#%Z77(8aH~_>3N38i&?j3b%tuj z&7t5E5^x2BA_`-OBlKp1KrRY5mU9D~I%Q7e_{t;t4^#X9&L02%Q!gz(S)r1;dy(@i zt7Gkgc9O;9xzne#Z#NL#-dCRtwm-Hg_)+=6gimoeZK3xf!yCMC*@K4TDvByk*N+Jf zoLiag-sht#uNbw+Fr}|ApZE}Us5d-;+K%Pntuaffo@?Gi?{|6h2x&To=&-aARSP=B zC0|O<1Qb1QYrPBtA$wk{#Ntik9Qs75*J3W+S-WoQp6)IbiG$GNCHk579SCO!0un=x z389Q-PAOXKW;c9Au=E*Ine+2|GNber)=vsbxo0(5Cp-fd%5oC3*b;7F!1h}k&qOgBL`R}&{RPY5dP z#%Z6|#~Y*?r$hv}Hw|q>;_lXm?$> z$l&qDr#x!P5POs+@n}BKmHftD`xC4idSBI~tp*Bh9Px|w-`zH~ZIzX}K(fBUvPPuA zBzZqqFZ&n2b9ndOFO60_VtYCyePy)$E~5^(Q;BMPF;d9=qWXQtG4F|*c79~(5Pf}} zS=KbKczbASxpoLK#5>q`%~5J4|5ow+caMv>=2+2fOYb*2`bs6S1-7p{zwOVOQQB0* z$i{OtWF@e0UJDUEB+I_@_yLeQJRs|L;_7Ze!R@-RoiN%Fpr%oM!! zdGZTvhrSnn4L|dUT06P>ZD3!1s@{b#FS#kk9Hun=a$|+c@zSi%{spaf8BX80=&Lv2 zJn>+yUvK-B=v!30>v7bj4Ew(HlRFI06z=C>j8)4CU8kiQlfU<3-AZ?(sK>^c{cae6 zu4WO%erET#9IxL)l{=Or><$Zu`qCE<&gxYs52i7V_A z&e2PsGkpUrq2x1Hc7^o}id#D;>_u~yI z@+F)dR(~bi(eZW?uPk74OTdyb&er(!SA9Vr!Rq}6@rOCw1-MKC-xqKbWuER}92XU= zAeR^oaZ8P~iS16h9V7BC_Z{8Ed(wkqbT14$69XQX1N2kYG&7b&^_VkMF?iC%{ zMS)Rq^SD&zYxS+Le|ivj;SBi~s9~RYEHUS?x~3-=IPKu-#2R^Y z1V!)-4aMJs2hdB3wdz!kohSGF`H`b|U(@ct=e=9Hu zu#deXvT>TOCdf#|=^}XR;UCB;2k{MUcE~NkcP5r>FbF=a$N~ven-)$AROx@ZKg3M<4{${0MUtTF zGgV)c@}YK~jG(pd=reHCz2H0{9U`?>Kl{wS;QCu^>oc|oW(!W=oIPku{ft^}3HA7h zOLR;bL$g{yQ6K$~R)<90Fs+ojUF^r`Pd7X2;&$eEcK`X*9*ekU56#QJD(6#WwLe_4 z`3rF_b`o8=vppk+1acPNeOl)?8$ZI6`?EDhx>Xf zh)mZ{By4Eh1#cMuxkLiB$K?NE?<=6H%(}k;5fCIK1OWjRX^DI3x`aqbcZZZTQVIxH zP*7A#lrBNKK|nwRq`Mm>lm_V%xPFIlMrW9LhjIP?-&)`It~JZy-upcJ*=L`9cKr4} z=V_nRoKx6y@Q%zsZwu+4>!I{OIxlc5pUGfs2pIF^p~7p= zEXWh(*|0k0x#xdfTL35Ba730Z5TFC`X_Gg$)WgTUhr`Q;eQ&T>z?O&X>tPFVK84ib zzO(-2;G z19~)6hv;WcpYrt6tA{>RzizY&N`Srj(>FmFoR#NB11hb@Iuf`b)yKJB9#hd>1)YXr7h^$MiaH{sxbgu^?(Cskj| z?g3;3KL`|LUjk&rd7*`GAM-dwKz@4cWEuBCdiEb5svUw{-u|K!?Ukw`W_Hp8ylaJL zb?YI7}Mw2+5Y#T0qG5 z6ZhJO%QVUjU4(7zZR6>JkNqO8k`lcAqPg4M9w*;JUbR0L*+i+Ca9x4+Rd~JA9Epel zoy3V)%)ni}a`?0lh?t(XeM4&IPntZxhZB|^qJL{}WB?{!rbR$S!RZ()!;!bYiVs)} z@535&J}zym6@m6#GI`>PxtYi^A<%c%6Ttg?QsTYL#;WMdlp7UaoOzEDqQ1dfU+CCH z&&eyb8@A9rNSs{YC}zd&-~&aS^BLv7)?{iWrjzi6BW?Y9k=X^D0uKF)LW6>#Ekl=# z6|x}VIp&9}%PZOg-m*58g}^Sd|AxduxPxnBvy+<%8wf#sy(wI*x7=L_&T13iUd)Jc zzV8^R^6z3rwaF;{*x@GRmF>;W}%Rz6K98|nG0GP}Q!%Q|JBLLsQ# zZr3pDmnku?$CE&9cmuzCa}2JwNcr`KBK#9OY(?%8{6HHo9pbD%{V1?i3xDO7SbC5c z7h9Hue9)joi8t04rBAr$i4)AFYpKf*0~&XyKM!aek^0BCrI62&P-+#&h)eoiTYC8A zCW-zWqYk&I312+#et{*GhY^RYY80$eB+rE+*@Yvk6SPp>86wiWMwB2lO^c5~K+uk~ zWt+^G?^c&Dmh#r%0;VMCy>dKhX@`1>yFXc-E>i(gcz3fyJYpF%&n)*Vm2;WtEmykM z!OJko*R4P(QFFI-dphH3k+)+Q$6o}ZKZjnbiTqPn?AL#=la^oXXNpg%=xl;+ih8X0 z;f)Xw0(Owf%DDmG=?Jff5h-I2#%$2=cQ48)6GIqs1`cn|AYN>UeVJM7Qp|WWF8xf0 zK0-a1J;-Vzt+epI^^m8lt>aBIU+SkSi$uKZR2|B*U+;0#j+qaY{b*!Dmkz|AOMHON zpy<9@lqSWwx8`}%_OZILKg*a2k81Q~*UM4S`- zOzrk~v|Dpvg~I}i@xbdOTdocgDy?nAFE*1l6NWuJjeoTqlFf15R=CX%jjQ{rF>c`Q z$-8uNMP}%n`jpd2pR_JkrT)S0rmTUg(N6Ryvc;bNr zJmI~>sbQFT2_M8-1YjA-TlKm54zJsL=KCkhG42=-+85rn%&>^i?d5OUxz8!H8+7{= z-dP%6+%r=ar&s0@REeJyDny~tzOogJ3n1r;`+oEm5!i1-FaigrS02O~Ve$$UC((cK z!AB-8KYKQ*7@wG(`A9J5oopk_&$6L9><{-8J_z6 z*pl});= zg2D*eP!Tw2@3A|2VIe|8jdC7jo^I?^pjpNo+*}a9yQ$jpwxYO&;ok<{86E<_O?Kyg z-iu~o%adGe1o>H8);ynMHrh2D`?+?q2Upa#m*QX4^}PB%15AQ>u$g`rP#d`O9KPj{ zFfy5^w`C2TfDg+cmjJUKO!iR}FjlnF)KF=DnAt(2ePJ^b#R?!maD;DJri_ri&e}34 z{R|uS!g1x?OQ8i#cUOCAv@3a=!vB}!bJdrd`tW+!bjl5%`|u9)cS5Dba67|hJ!GX; zgP4On)@Gbm+hp=o-7r$!}f@ z*$Y3r;oFTM3TZUvfddO1R2-Fa{v%c zC==QW3xEARsm{nNYE7LYLOU-z%OX?ECG0ikCeZ}%ZXh=?y^kI9d3Kh+-cXJ$xC>8K z%)3w@9oJ4^ptLDi$7kcSv7;-_7)|qN|y*)2&-wTial%5`d{3ur{Q%rd)2b z*^yhlmTQ_rxn){}fPFoqDp{wR_`ON%lnc0=moYiUivW7m$na@5 z1-_7&|75~W73VNhmCtKq+4@)t3}8heGkkn3#$$dSJW{20TM?W?DuV$!2sI19A=}9y z)h5czVzthD{I4<@eK{e}K4@9Qhge?n-zjQtx;k%x(DHMp-Cb4HagzCtecc?l<4F15 z&7LEJO2o!bgqLs?0)Ot+#hdTDhHdL?l>Vx&yjwZoCHfhevhE#pMCkLF&1T%4&f0^( zxD&P?)-ewM_*<*{t^MNge-2@CEAJZ+cD!2MRN>%npCzwHm1s3{39U1qW9kl9;celJyJOWnZ$kXvb1L zO6(DzYs252O7)x&Q{_7hK~$36Nhp_fXVG`Z^oLi&vjSMGV}?Rk)XJ4t`b;;}c7m2v zv^Ll}a%t`@fVo?>I$CGU^0?q2OH0>-JITR({n2u2Pl_q@$}#hna$H)C*1v!fnj zc^bCdFVoaC*NafM+@jq0q;54Jw^K;50$wBjgc6+{?GTcAsRy>a3WD@^D**$x^#Wk# z^6r0*rJig?0zew86L))16+TY#dA!eNM|EQ}{*(M|Ysw`?*e6OaB|V62PVwQb>9dP9 zpkHbs1$gn~crf0|I<7*N&A^x?|My80mB4xymQ_=d7ReeK8-3r(`QLT9=CUWgf3q%s zn6ck+ivO;K|E`7q4}H{s*TR4OLh66xHMPAQ$+#s2WOS>Q!R+h*ZF%UsS(JB%h<5JT8wm*7F@Rc#k%s3A8p^~t7>&m9FX&93u%{47~<(B>Y@nUrM z?K0-3j6s>)wdcto&%()OP@c;IsaU~iwRXIaq7ccer5T#^vH)M1?Fmc2z~$G>0CQ?g!Xjjp<&>WOnO8##H#lFu_O$ z`6Gb6W`6|$ew#m03YcikiLZ^|j_{eX-SH0i zcy2^kSbx?|cK(*RIHf(oIw?pS8xzD@Ck2GP~=}+cYX&TmSK5Y{Ejiho0kkI*)~=3J6*a~YgOckMAl?6uErsh zUz5DHW2tzNVvR8Y`lFbZX!wHWeW-Df?gAOlp(B- zv$X5Z{cg?qZN()Ip1Y-lK|3TWaZsGL3`y3#2Hf(Sa|&Kx7S^+iLv=V+OF_fwJgPz- zV~+a&%DT+F-BSo4^W-ks;q_L{^EaAR>&+LZZe8RMzMxQhifVOn zcJ!L)Zk_;S?`3p*#Z7)C@anTWnBe$5?G*&XEoJAXDWaZ-a_5dK(WYA2AheTZx70;$ z$FLf<5(1pU_p5+U2nq!7-k!F&{)wLR!a7GQ>=W%kOik%=saeD{HKlVNPUqhL{$+d7 ze{E1o#1eNU?UQ5y_8N7{;H-*Nvm2aehb1+Q-E8Jk^l<0ubt_}gn!9dcp%1{MYFdU! zE-oc3(p~C>=$mG{O1s!OH3b4XTkl?lWZVxD5Sk^aPNFT~@FLm9^!%bO$uK?ANUUbMx zE`YfUC$a!2^<<#+(A&jX)zieg9711x1mLtcEoRxhb_Rf%G27dp;nM`>^`HZfC`2a+ ze&|fQ z2~Bp{!G{hCbd1Wt)@%jH0M_^f3t(@rMzjtP#%;}agmgnOTNXLsc8*-|24%mz{SvtL zum*h1UI!GS-WJR46e!t4`8a^I$ppoBH+#sO!2DjReOtRdwf8P>%IM487Qc|$pVyVA zf5l^o_ZH}E;@)m@oiUoTxTw@y^VuIu1bwria)@?-;R|>@Zcz8XYYEUoaX|-xi*fy4 zks3bUVts?wLhrEcD0ep3=5U#aGX`cz68)7P?hQH%mf;?vygHb5E-{hU#2=~knIM-( zmlfZ+H1bkq{q?twCwJTXrDD!BRnFB4$b3<}C+AysYPHYps!Ov0cn@3=etMp906)&1 zhnekDrX6&zmPL|(EUEuhD!Hd}|GwNVx>yd5R@hL7EfAoA1Npk|dbm35qwFY2(Uq`+ zUc2EUzZZe*=q{jCmgY7~iNNZMK`3#Z!?Y$S-o=Q9I-Cm$Kai+&=PbDoPW?4Y^o(drA zkiGI|gSCmNN!fCxDX9IGkycuR!1B!osPDQFs&DedavVmBz_D)oEW$vC3!N~4$dlQX&fimIwADxPo-day`?^izz~ z3}g`;s&168g{yf_9Yi7B6WWEMS8hu!^*M@Ja@(G6x2MR}#+kI`{L7*`e6a@vKdaqw->76*+B#wVX5XWycY z#fkCm^g92Utjs=48%+aWwzC}PnR7HzPLg=BQiuy%0IRfD@bgkm(u5^)v3vMEJq^g= zao6t@k>Z|2cEvFWUYcAmxoz&&oTNWRjx=e_5$0MH01ei>?7fbi^lFJVDpWq^Jp=#$ zZSNAdFrydCEtgCY(-@Kv%+JR@(zK?*MQ-cV*-bdmUZ;F^*#wEvW1u2k%A+FqvyFY2 z*yJ5HD|I>tzrY@D7e98KVXF=suDmZTIJAV(_uE|jDMjDskF;oTK^?%E8#ju?xke!) zp$O~?e#PDj$xAp-na`7$XTI_#y>D&8tQE#~=e@46u!L%5D@CBXbC_|~fS{%`uWD3$ z^m()(avh1o+Vo#SLH}L9e_X$U2py38$jr!Xp_G8Y`OU3i#;>#=Hrru#G1Iv4QQe<^ zF8Z>i*DknFQ#zFNRdg7{(;*6=YtSVKA(RP{Dr?twYO8W3OIf$+5djko$ENTXrcG~8V_vku+0-C~(3Y;4>C zl{^2SWf=YIt!Q|YyMJThz=tFv^^M(S*RTazY$){orE{+eKeXCqe&u^pbK}y}mNUx6 zJGuccVSU8*4^+ZNeO41f+$ALte3rbycd)te#cR|L zgR_(!m_lmF3`jAiIyZWjjrj`38ZwyKDW{&NC$&9zCa|k~{gyeVG;hXq@=~$3J0Ugm z1&J3aSn2~KYMq^uS=H#&jklk_u9uXYViOz_e;3c^{me^9UVfTj1!+4a&%g5z?yZGd zgZiqOD$$J-QiG3^1!?sSZDJ|RuAQ{HC_|DNzB(EEqMKFKQLF1b^9k=1G;Lyx3g~5H z%O^?2rZLzOaWK4GH;QuW+mRD>l4lDNq^1=E(6gE4ioG>xWS*x8eb9c8^pajfup^Y> z>swq|g;gA;#}`+31+Z1Me7bLGhTo#ge3l@LoaUvOARa2#u$9WbO?9Q{NyLP`{cWCm z7w*y;!CgtjLozv@^MyhJEzaU8)Nra05bxh?K z@0KZCX2z$)O21F(+{R3XancvPy5x7&+FkUjY_*vmcAaIByEn#hp_j>!a9V+e zOSbTGIMGY*I8mbQt-#l}zi??iV=?_Qne33pBB>}oblObNPAKLgZi2WgqUUOXr~OIP zz!?P z1STEJe;8Ny;SPi59f@p9KH>@&**D&nmCMuML zU~i_Yx~v=UTKXKqn`l>aaxFU*_TVX3kaUPEQE7W2&|Q*Y(k}VwHf|U-G9fg z7GV;Icrm=lI6TpqsJC&Z|MoW|^1atM@(*pSG%jqtu-}F1jrNuW_JL@x1J+Rj4x-!X zcW6Y6@iBwbvm$uGIrI_H2xm9ozBA#87CXEf%Y2ku;o@J_;N>sjvF8P+*C~5GzUVdB zy;GhuGb4Q)=UEWieaz+@8I_A&^k?F`M-{H7*9z&BuLqWY*)Z97((q9#BN&W9D#F8i z=&W3}{1XSeC+sFqQ@H39uw;>$C2LLSP7GM+S#%@VUlEg%( zv{!F&@{L1w*OhKBj~H+JL&@@PD?_f`r5gkw& zjUv2`Xn3o+qU>(gRLt#9LVn}04q#l~m+ln%BOw(gTHKUm}5h@AylkXdw=osQ(?1++S%BO*xaGg z0$;LHak4?ExOgB`I^Y*!Yik<^dnyPw6#SqFzK}PtGq!f1;(_d4x%Y*VgPo(H!@<|~ zRBU_HY^)u?HG6k)9A2bo<6z)m3_f79$QT=$865pEMPqv#M>|7fdn&*cAY*A`r(|nj zXngQd32?@~$F?Gspdb~?HSm=EAC#3@sd%6VKd>k(vr%zE4jv0WK)^3N-){lT+u0Z@ z89RV+vdCY(M#Z9Re8&L{bMJdwV><`4!zas#f=59Qi0nN|?2d!D(*6MU_!8e^1j_!M zD!2ffMcLWb7?3eAHKxMe`{Fk-?}=?s%vw}H<_Gs+>-_%n-Z#I^f}*kE9%~RDHfA<1 z9v&VrTqrXe1PcCQ=jLH%XXmEk@Gt2k=yuYnEW@uNoWL7#Z)gaHxrx5LINj(X3V1guBNWD3erOsRVT^0HhOJfZa6n-KDmbu;FgcRU3G%&1#ojsW+e1NI%Nf_q z@slSWqGfh(+@0ALuoziITU{$0X0E+dJk@lqtLS_`HJnpGkNfq+bXsWbc(t)zyCi-D zxs>YLaHdCk=%~ zi({i~e@|!aH(}CWFpqJaf=6d@_Y8rn{>g$XmV#s}tg;g(gV2keY}b7H*PW}%pq(6v zY|V)dlo9jq&OF=V*s{3P?!(&RYA_eiDogqPwHUM7^~w`hu>IA;DF*x7bE#P@I-yb% z(h28C`10mS`cdo|-<~zAws~roZYeVyJ5lb5`?-WGnz1L*kgS!3NN}}!?L5TQ+hPTu zg3@%5-4CUEY*U{9xmt?dwla*EZ(ZA;Iz9vpWw`Ze9&la#Fp9Wo}xmLv+=u){fu*8Jm_x zp03g0vvY#P8tdU!jAOKh2AF=U96>ljFQ!FH(s@JY%j>e=CCr@EW9WNR!XfLosqE zG;(qtXtg{h){`cQzJlp)ciP1DzJV;$C|5AjLV*d6{if7C+NHjC4{lt~`#_|-<+PF* zc|G6#%1)A&`lGWvEB1J%It3;TcI$mh4;|M;vOi)?KyO4)jB_W3Ks+rRUEQr7h}6A! zp4Io>Ol%Qvw)kWe{%e^{^&v-*4hsn!2fs~O(d8)nccEv+7+o4S;;sfNd^&GbvhD}Y z+s^kK=@J^$MkfO`(KQ*N$O!>Hww++EaUR=T{~yc|seX_J9a45r>sc@AzfWUed{vjqWVu{>N*Q4rI9HT(3f19C z&!A~0k4M8aLsm|1W8Y;TUq|1!n4S#+^5f(D54d$2C+j-5WI0mRg#1Y5-_+4z)M06c zpbV3$%ChAm-{g$HIOqHUEg~0wqGRJu22T}chF9%{*;MlIm#q5NmT&neXd1itjY?yO zeseY+u>RI%^sFRpO@u?ESetpJ(n%?TPDkWLLVftn0B;k|PLztG5gM&{&gu(>eTEE? z@Q59GcizF^JEnv9h466P;X-kN!A~`Eo>e(`lz00CtR~anEzqZ>(#)6WpZ*vk8DXFv zUv!JW_q`c;NB3QBne^M|Kl+Rya8G`_HFtL|X(!gEKU(TDjR~HIB^T!vvaKSC*{PI< z_<93VZmmeY^cXpj9xEwjwHI`||{E^PQU0z_M0Wa)g>_kbD6;CW$ar()t&fx_ISe{ieSpt&F`lfbJZoYntJxTYr$Yfr?R=#qtQ#(2jkkMPe1x(;Q2wR z*{ZHn$-M^i66s6-mmj{3_)njHSk)5beBPGI?y~tKx5bE?_mN4mF3piY`79cULn_cg zZj^avg@Y!j&lC0>>)gFXd@Vd9gic-WgcJs*Htx$#U#BaLZ1_D(mdxYqQe$Y`Gg?uZ zJ0B*3?HZl&#vFYr_-Updex`D}ON~jZsYa~O%}t-!D6ej7d9AXM4B<^HSha(PFVKNu zA?o+pW1WbznGBb|hfd(El2`nz%cORS;%}c?aU~gWaHBlfV9UJt3Q6e(oe3f?c$`pJ{Ml`+EHJcWi+FDNkyK{ zO+YUFeCnbWU0;H+52=ym;$tXXJL|0~nNaJvd77;jKJL)bM;H>rg#=V0#w zA`b8K61_FfD%(znCrFyudv!00GcEGm(7W88el}f9RPwAkl_CrE57mlz?^4jxCU4(00%U-0$a|}2RcS@)INQ0p<3H5Hh0(J$)(KdHB+_H`;E{iH;biHZv} zx2{yATX{DR+r(H)a#CljI7=*w1#5nAV|HO}Rqxv@F+xI+<;iP4icOld6_|NfTPw3{TdP=9-k@ig&Ix%_Eb8(JChmPMAK?;(Y}K}SK^G&sPGOqHz&HNN zr$%(&w_)DbW<%QnU@2?0@QDZ21Y$bziClIv_Nmc(mKwvcO)-8G5=ixS6#eL#Pi2KY z*(!$0+wVT<_QwakhRkFllR4Z_UEt#R!v&F1GBrkshl4c#I-2D2_=6N2B|JoC3NmVV^FPu<}9XwAb?KkJ8ro z%3KAJyzMW!qV?bCw@O`i!oBi7P_LxzNkPOZzvsqUw+$_=M+($;iz+6uI$IuQ;`mO` z(Y(L3RoF-Jk->tC)D`voCx41i*ZzW5Z`?=5Lj4>8!crnHC&P@jqlwa**&=JtH--q& z<OWQOI_g_={_M83BaZmAZ1 zI&=3uch`9TjXQ&P9^no#+Mv-@aZYH47LiJ`65dtg;-dA-Y4tkiKS(5OVmQ=!b)}O2 z&cnjx(F`Yx8)`*#HFA%YAZ`#6`U__>FFk%76E^)ke(cRc^_|G3iS^GDkzG`+yObAp zg+xz;C_ifrj#`A04zPxA=!%Nt-mXXOdwZ|m6K)U{>nUpz58YmrePX6$2jjkw=nk_T zdiTgI_kux_^0guac5`Jl8gV{@YWnS&oTiR(EbG~jw<7TB)+G8ttVrFdu=Bwh*B;L~ z=E`JH4Bv~o^{$CirG{7gIYYIJO(=gBquBjwL^%C9PhAO~0?EP5CxuLDgle3VFuYr#zChDoYAF3R{gk?#5>*>MA~h@gZk^h|y!^YYn}KYxBG{ z6?sz35OxQBOb{ieq8-25LB(`jxJ4u)FTlP>%wUD67Voi+Yn4iU^?0+lNnRHRJv^$1 zk0OXZ=K*cuT#2kdLsns=VswYEWPkiEFPY`y^fm}>cqqZZbIR=yP6tO-LcW$>wJq|D zpq_rx-U0PsJsicJsbX6CPUHf`Ym2WgDt)ATtf=tyO|SiceNCH=eU{Q$h-QX)NTsT% z{Aa#ir^!}h20HQBx=HT}nYy!8#phFG+`J#`$VE%--20kY`;^qpTVc(tVwui4uiuuP zqBf}Afz5t1$bSr5HYm}?o@iAzkY=1^?m|jzbLg8_70w9_b1_l+HL;n!{q>`j1YLFX zl|oN+v0QFUkjQ?`x6am7;ipUBpdcHo_X=yhIIs~JAghGd{vbzN7N&DuETaf|IdIzZ z`bfXI*Cl_}Xw7M?*tnAjsf-4Zl}uMW`I`~4uGf5$yIbWhLfM;xh4sesJ0jzk5aAQE z4GIK}r%pSW_0i@tH9*n|yoRJA@Vk4e&!Ht)=kS{*+uK2vxx|WstO6hjZ!2iS-zu7k zxx7+LoXf}%)>O@Soc^RVenPQzMp}W{XsaNb{QaC!eTY~kH2>;jsXiPi$BT;u9F_@T z7~N9J6ZLnM3QoK}djZ42C3E*(Gj87bq`H=pz>zNA4{A41jgXjLszNpGR0(KR3OeVg zW2v0<79(r!yNm6b`&W?X_Y2 zw93)FwL}kQg{Z0I5!+8UWztxV%CeMzk>=s9sSwS70V+2JLR&K;Iqu(FX zTf0ATx&pq9hgFP4Ma_UKWR zAv_1rB82Avh=cGP3=12=b0BR9!1wlUgt8tGgt8tGgt8tGgt8tGgt8tGgt8tG#D=mS zP=vA`P=vA`5QMTG5@b6h$aY8&Aiet!VmpL)p=^f~*$yZ|*$xS^9TH?aB*=C^@JB3j z@0;IL_7KYi65-_HVdepRa6s6ZIl#2>a58fMNb^?^Oeo}l{i6{~_G2QL`?K~(#@PVJ zoSfXu5Kf-oIOm2kb3xdD0eOWUs_fBxa~zlNJs}*)HwOnZCnpb3n(s2_0*LZHj{NUY zV<_ZMMUF&`IgiWxp5Fb5cL?V`_Pv@PCIVXhqusr+kDu7Vv z-}z4v0vwC+gDB-lnM2u`Ie#~b92~4*3VzAB9F}?iLd%coK@Y;JKQRux5C?>fndf(_ z$N}X7)z@ER{O`Oc2(peT@xOAP9IQOd(7gijZ@L1aE-p}b{sqf&SnB=@nIF@G9)zxc zk~#38>>x1Yg8a@n8-$sS`xlMkVGaK;SU;u{J&3lCWSyIxne}(0$j-w9BHdq;`QJHF z5PKg}U5@giAnax5gfc@wSHYo0WCymLoBNkk!ViGu|S z1%VtijsPH#a4h5E-^H)td``#{w{qI~SP|9N}%3runC>uz8 zehkV%O#O>NIs4x^PmpRHlkuaRCy+M)A3>hX{d?jJ-3zpSP2zv&Izg&&OvaCLoqLRP z0aWXEMFHR{h;&(hEolb1$zQKckZT;1^P~Lc9_JvN_zA0kKskRMtKj%M*9kqY>)gk4 zk64}%)}NpX2!M-z8LHs;JKqVijpIpuzt(Wb`S%7?2n0B@f6##16e4Fo$VpJM5Iudn zJdhUyMF@%7ls78Jh)*WTiJy&6piVFwKO_5vrxEYh43M?G&-DRI-hnUUYU1sMdAUK z=O!}60}V?;@ggpXOUx-uzkI0Y9;VyW*8jQkv`nTcDiQ3=YuGWl1&lV~>hB#!II>{yh0L zJ-!m-YU`ZZ+2oB|(KLqBDOI~BU*x-4aGPj}u|z6y@Pt{bj-sdGMmnXBD? z)+xgJ856lLeO_5si&u|tT|v30i;5z#&xYdq$CqolE273~D7Sp93WIfGHilG~dweWc zK3=gxjW!y+yUS7+<=CqboDydng6_PDO7qC`j?c%-6~(tNOOYk0zj(q`LgH%Vx=`oR zU(MEUJ=m8LNj7+*|6>giA4y@Vg&F6l{jA|8NumKiscR1kQxdmvtv$6d%yaTNULW3r zXjB)BWfF`<N8zsA@Q(mV#P0 zIo5QPywdZ{8z(p$QrsyEdTw8I9!*?D{&3^l5w>SeTCAErV{WI^$j0Po`Sd=cunfyr zfNG8*mUe_fSm=%jz4pZb6V#|T1xTIV9#%KnG;R~{dwH#Wi%!SCbP|{D4Q-MdCfCi+;i*1ED<_k;tf4+OF6}_scmh-t1{sDWlBnZ40m-%#L<_w<n{f zTj4h-kS^S2=&fx)TzdDyQd_{FkA=)fYjSVW^NAWYMi2?n0i)Xh2)AU-mZd7mfiPM--y)SI&ySso-7pgB6D{>5s4T~1pGD^BN44?*v5sl(R7 zn2b`D?V(zawMZtz&Yr2IaBF;`c<~lm!0Jgh)?2y@_uf1h(<6;?Q^)F3HQmZRvCJ~F zE`D!7qFHZ%qE3a`^|294F{Rqzu0-9J-iR1O8g1q`E=*PD&E0u#Wps17SNd*!V2aS{ zq*JvLAXIfY6<*5_LR@cGl|iRFovVI>_}$K~3j$JK`jUDf{(@-PNCU#o+X+lrg zAz}S+WBXZ7Y2p#;DF_;QIf_`@Qc*v z7h8)Li$lYKEGQJ~%a=@V-m7B#GPQgPP0F^dOLHwCMe3~==8h3lseb%evuoEg^vj|` zF6JcnvU{lugnmdX?=cRiq5sP9D8yp?8&MVn3-j{%CfRYsh(#<- zcaLr#nrrE1?)^y}3ClsRCt5SS%C3Xi_dAMp*4;~S)Y|%31W%e}-(!YZFjV_1TBSWm zJaOtnP(}IZh_l))TRLi!lQ&{}oW=$;8%gn-B;tT(A|8G731Yc5JKsUdkjA>`vieGS z{X%{3wLiXtrM_3i{LKbIznN<;>&t^q?@XZaInN zzjjT`bDc?1+$jDqJEncH?|xDd5*)5eT`LFX6 zg67nCKUBV^b}aCS%)3AS**7wmc2ey5l>&{km*d%_lYkR*4km&z#Zjr*E6~5uRTFQf z{FarO5UL#!ij#O3m#y@El@T*5!}GV?>XIc2if<*FTF*?8#OuW~$#t}=cXRvR{8IR~ ztDCYkfd_g-TRgmtpc{)>YlBjp7h~Dz%OF{fh9$)p#%c88b_jMZ;sy&-+#EdZ zQ#2oW^8qa=2WgWHhbZl))HG z)Hq_#!J|>4X@yBA)vK{TRI|g(oJzsApOc~w#8c%OG`#IcR5t+#mV-TttVv& z+HxfB+l(oHZWKAFg#Q+|T?N~RK<2j})Uv2+Xo5fXHgZ`zT3Q~!24MG+jk3*8Eg=U* z>0c!AQ(5%iaq&}y^52p8DOWonaex~9b6Nb9HT^phKjkm~j>J!i#6F4r{d%DDYfZ{;ZvcjZOcY#GkeExFq(G_kR`UftKsTcde<}Z@?vvwYKlKu06{8>AXP2x}5$$r?s_RqQalXkKnw!Hmw5`WT8 zP+d9R8resMewq<>0I(iwneBr!e;{#8F7{E9UnKDp%KaakJ)s=mG4}t|?73Gd_`Tbc zbMG;G2>1U?x98pt?7wL6{0|$qvH$(f?E_iti689ThH@Ot9l+T4M+)UQaAHu7J$(gz znj8n}0p&Qr6QP_3R(Wq5^uA<%+wpxs>9<+^u}hNk#}YCp*aQBHC1lR;lX+Bg3iP-I zll_q&#Wx3NjQ|Z~zZH8px%QeP>F?b z{$eGT^FTw6uJ%BWTQu3%ucLSe&2DVJH`ai&3P3&l*JOU6(SO1BajPc#>)|NAS=j*a z{kyKPae`v_ukn4b0*~e!#0ba3lK0o|5qyJ&<)3wh16137T~`jQ#$WJ$+`7rW%{hv9 zP<{A8S2#fJ;a7F#@2VysB08ST_if}+e1pov54yquDi6P?D_nn9F#%!NG5P+%xqh!Z za04^>56TWz!Pn)6Sn=*HFs{Lx*m%+n`3iz0Fno0A}0h7VCZov7D$vbB>KI15zq$i{W1)fpGvc!cGm@OxC(nla|8;mC^Bwd2W&7z2S zQ1djFuv!Q(14ph_ow`r=RN|Q}a-cG`0fR^5{Cxixa+-=s9#nCAOl$E`llN4WgWINW zGHIX!r(P$P3+a7QDn$y$tKj(pM>*L>#A^Nx{z*3E%>~J)*9S5q@t;*;uG-msLEh9( zsq35$;ZyQ}r@&;^SB(}hj7zTD-mu~ir~EQ@CgZU$PI|k6)TxB0S~AJq9`qv4m)bJq zW2Nv#qRM6c5CcA^T2#$Go-*+F;wLdT=05W#_IjQOW78gpuk|AoGyPm zVCuQ=DFRguH!r3-vR!7ux0?j;hLdX|56fp=_wL5bF7o26>eO~T7L zH^<^eYfsHFHC)^fUHBMN^RdIfG*w}lt@cr0tUKKAiUb>4Zl2v~Bkt3XyGZqYcoI!^ zX9w@iD|kOzwsgOPu`>9&s=+{NF{vZ3#DzeiCWoo&8?o65|0OmTi$vcgf-KCd6q*_q ztEd&4!4uu*&vxyg$u`H)WeJtUYM)EWN)vs4yG7xPEx&}*DV*Brj!mUem4Iqk9(zx} zz?r8cpQ@%7+q&g+M)Bwd{DWGB4Tc998{;0_XD=(ZuO9U0|74%#e2NycHEe~t)s5i$$7&c);m~LjKHF+W`OT_d>w}C?m{pR1&0@;uDA?z_I-h=r_~y zuRxIfSmX~Rjv2`BhXg;7ICfsdc|>Y;5On|JyomFN)asZ?4QNFAp)c$pUp^-M06J^_ zMB*Uw_{Rg;x8gsE6MEcCbsr)9jl^H)MgJiU0+Gv)X%J{z`F}4B+8@-RsJ?qS2nTSM z|G>??QX5u^*Ti?<$eI%G!$(0yQT|Y@V!oPLl3>_uG%J{lDukMPcb!Tw*W#c}(38aaWncC8pNw7>Eb?pY^kIhb8(CfhG8pleoDt=h(Qd^ReH0%S@imVy8vbq9&i$lm5Q`dXQOWYXZ_D~_6Zfm& z-TA+t)vs(`)W~*|@3mBR4DmPa65U9hVFT(N!)2j!!#W>Y+JjH2 zi+`SdM2=a1osPQIcPA8O*))^*=E9E8Ti3wZoZF2LqqSCxHq-3;S0->v*OqCapQTGa z#56btUu6yse|v?~bH_)jkcM$YE9gaIy5{@&LYAPxS;j>I7VMT$T_d8CmBF1Y;#UQ; zjkpvEufI{u%5u6fFBLY}($z3mKE^~ok9y%EQgfwf0_lr1k&x%u)lv28x0{!AU{$U5 zb9F(EaC^t?kxjXE9;Rxk;J9m|ROqUOQQhU5DVXMx6_!@C1(?XL8a^Uj`3S|#2E{4- zG@{R5sbWj_Kk`5LeEW>o!$)x`espRjRvuJ(kGYySa#$(yiHKBlv_*UF!5lB4Ha9t; zV0}R#I?u-?^)~3gePKZ60qd!6yB#kSAFS!4;_2Me*YeZ?w|8NShOrmLT6yiUg2DO8 zUar;6dT$p-yP{_g&tBDePrrTrg9d3w6%)My%At4+xj(fHK(LPy?aMw@wUeWx6;PR&Isp3g=IZD>B7peVy zUw0p0@9fWsstd>B^yD^>+f6dEU*bwND{%6_Y-H;w#JR;uCe7PQH^RK+&fl5oTe;uks%skm|QoQT-l=`H4gi;!Nqth$EhY+5#z znwk0MdTUaX`K?Yjy@u$tw{^4~2s`$B%=?K*#Iv5mTN0al;8`b9~`7ZQM_yBuE8S0Ih1YDT)RdH z#?p_YE9hBtLhoCrY$i4S+BR=^fpc0{*YzmnDWD1VMH&&&nVGap&uCOCiH{YoAR z^gcox+gNhF5Pd4VmDAtPX+7^-%~4F#!QKhc8;96yUsPfgZ5k9}8U|r~FeuF0%;WC* z9Okr&wP^6gXNHz4jV@%vf2`zl7h)%3zOsb z9IACiAQ!BOaTbDR`HBaBiNeFxhYH&R$MCFoDup)wtL|MJbJpe5rt)ZsbFZ}hEulHJ zA%zlKA$pQTn~9g=ekl^LoPkEB2%RJ=ClnHu6%GVNh)ueRc6812$ePWlEXaF`;$O8! z>F_p^G(@L%iMhoSvT3r}vh&d8@G_{%p2qG=4oKH$l1vGjqV zRKP&DjE8N=Cz3HQwnx@w2A(N+<5DW22-CsjWT<_6vu6UdMOOEbKC$f#_R>u*BDabo zJC9Pa)(#R`Zf|gohfJxq6yjVF zxV@RzLKl<1rN5cT0gGeMhS!S6bZ1H+5UK*Hm`motg>mjWCyKM`dU^h(6HCPOQm-7rm<>q% z49~LqW7e1p=xT?Ie$MvLnHtRij9&7{R4kzYfu8srzBBiS!^;K>SVS+Jo4Zc{`a|V{ zqW;<-edLS#v>6>P{>d6Uc7KURl3H?ScF|W!Btc7u>-DX4Gdffd-~rsAr-18&r_Ex2 zM(*e09p7aURUz`4P^fKPWlNOOX9Nhpc!$v-#(60=9PU_Bg>ccY zrUn}$t%XMJ=Fy75lF6tavZ``XMVR40*D6r%{krhuM~U<~>$B@O$uoNrsqQ#%d4n@b?nC9bR{g8LX_$OE&@Sq_ zi@7hqto_7Xq6(tm^L*;6(3|JfQ7{IzLQdmXk<5D=aGeY>Lp3W&iPohWuTShoq6h&S zLDX+>2)K>BuV7XdA{ymcsZU-zJagAWwV`h|4bS3~es4|wT0^^t3h^rfGJr^E-)z^j5EkZnY3k$p=DIbP>jsO%YK~ETBDgvc0ejzkVV8`!x`atd5Dit z9a^*Dy~EdZ>@58f&VfMJ^M+Z|FO2f*$9~kQ<+$qOBb)&_TW=Oo(Mj*P_-()kss^W1 z@bHm@+u*K6)!sUHxu{TRE~nQ(j4v^;#Nv9?a&Gn?^-M&3rA0EQ0%}{k>A~cM8{ml8 z79Kb_->z%TgC&RST|}ChOcJd%lq^&X?Qcx1gY@jiTDc8ILppyg%Q{@e*zCt0##?oC z*O?{kyoC^Vn50r|WoHeI6qsS&Lrx(r+QbD}P)p!k?A^$B^bsb~=6B|_hWJiP#hQW_ z8|Se-?5x}w-0VYE%iz9tg;7FpkX?m)5~#Q@I0%UDbsrGT5f9xP?BMaP)a&o!vHbE1 z4WkW(*40G>dhN+Q{Q7~Q0|2JNYyWq~FV;WluKzL2{-a}-k@YXU?|+56|13YS{)I;S zXXJ-}x@7h*T@=5Us{V8G#Q#8@`2D5&4VM3=PO$!=O0fQ+O0fRHiTl_8E6STIxAD&u4F=O= zEI}LvG(DO*8N@X%{yeA#{hN7oFj3{@hIZEm;THy#$;AyWfLQbihb$hC*0!~=F$40S zh@MY5Ym^cQRr^4=ZE}r%hgNr%q&b`@Wke{3u?5o|EhC-1`X;`YD&r9Ru$?$`ah$ME zl|%d&0avfPQLKJE8jhDQ(>RY(vd$#sm25;$PetrnXv(ZJimaiM+wjy?l18cP0c4=K z3_}du!JFM*f+4p_-rm73bFr;e(6emZ;I2P?)H}hg{Yk~PuhCPiC%#nsk8s%k~z%@k$t=;dCa9GalU>dWG z@5vu9L>L18xVzj9iRgQJ>BGE8<8wsUBERIdS%7js081!~YAw2VkVtzJ$vYhFi3UlO zVWYnK*fikr-Lg19=YnpBy@Ln=0d1;!Syf}DlG;OePU+J~+&&Gg!r)laibedPoijSUd%UUk2WyBsX|GIhN6WBfjBO`F3BWZwJCDa;wxjXZ1 z$V@26%^^8wvSD@G*5lwQM;Um}obb-Xa|;LNr5l*BKJywQ`!e%qFa!NOg_#J0R?!NH zdQQ?71rrTUK^beV33@B@w6{<2p70<>N5jU&_x{L6Du5V2q6JG|19cqx)p>3!%-KTF zRz7$NqH{Cz=X>v^FsiM5$((OvKow*KR&1C(>eB&$NaS|SQhP=|n=P1ukV%%NJw2%c z(BTx2$yf3iODDOm;YZuzX$Pt)11q4J^&^&EOw3PlldIrXO+nFLr>c2Fb-q=D;=8Qt zMq)9!@XWxdV?kTXa5bG{de(!3<|5OT_p~bNID5bMoO1U}147M(HXu%!%19J7rg|CG zWBs7IiV~Kwg1F|Hg|jk{n}xx&X3Nnxy8|eUcc-ADC#eZF_CfnLGRK7ND)zCDtkf!l zEP?{V(dx6-bt}(ZviXfge~&c+-c95Q_{LxMZj;!`k3~#X9Kw%k)7nt2areNpDILe> zmh0e`kA3I^w46W@)nuP>JMpsn*8Bmqm0gXf;ieDiSnUVCVrs8?A}wS;%q>fh2R{9- zj?)@#_IUI;RBo4`?z?{0UaUqOxV>7Y&CcSC>?w4T0OsZht=;$S6zL!*lCi7mYGB^5 zS17SvfmHVx*O+*dN`_K_Tsl-TXEM|rugEQT(pf@(Eg0RVr~rBzig18Xwl{zUS&SEi zY_i*Jj&xO&*wfl|P3JaiYir3fClCpP76aAJlLLu*>cOmJcq4O$A8oG2*{h?2{AW29 ztK)X?xJy17TGVMhkLF_~joO86;_3F3=iYOkA_64_UQ|SUoDIGD{p(6*0ix7nMz}w{ z#Hi=4Q|D9ZnkNc0vW@UY7|OTFYQ)s8E!wx@N360g8TJxmr;wozREV(R(-D&>N~{%U zB{;ZEcV}Fl^7|C_h-pSDb*a!o0L+?@Cy>X;c1NaRaZ`EUH@}o-;f(2Dk?KavDnwKYK(~6Pxqsvzy(T%0CdVV+Kw!b!m zL=!AFb^Y0~iNc$_CT(&@K3}SBBfGMA_sX^ey!?Wv(9US8ac2hUM8_zb z4V_7h3R;lXpcf@FT@6!pv4EIJkDS2D(93{TrfRcG9vNBoEPg}v@k1Xkz=Q}XBcxJr zq!0#T+Hg*CIabw$ETZF5VCP`~Iih$8FvR?k9BqaAtPz5>!{xki)L>HIfVFh-4_6lM zabcNX%&$b>&D3?@Bf5D?m{k{h*t%T=Gt?d{c`v(xPZ`nowPTSjU!)G$7Sd6^B#2dR zm;_pw1s03vBJWZBz^%F(46SJ9+u}J>(+qw)i>! z#eX=c)oXpiaPx3>>ilxrbE$uDk^^I{@@?HTYvgQK@}M5tu<Yv6i1vx%@Hq#TY{ z>EPz=gp%-I*d|^1(mMUKPR5?8Zetv!yIqKZ;-eW``t>sO zq>j&>(prD%t&uh&k_Ic2?d$3hcsvCMs{nTBBhJoWhc<-ETO=62;8=hxGQMuF*9@Lf zr7CuI5U8JTjD2Ktpc?ri;f^@i(v%AU(jp4^s=ZTD-|iX8w5Sq%XV_TWE|?9pwIhK_ zmmja}h_FB5Juc`QPw5~5Qpfx3v=f-VvdgfD)$|c8R|<9jyroiX^ZLnco#d*VVoQD@ z%7&WCe9G1*NMDVrV2Lu>))jlegRDoq7S*uI_hGMh4WN!!#p2z3Ptk=_D9cRCHJ(@c zQhcdnx8=fs^?s|%gmn^F1S2hT$oqJ4akR3MH`i7Kj$;^}Wl;WOCsX0q&P6pXGtp&M zpFhn-jiH;dY?e|f^X|0`13K(cEUFH$mrdTI+gmxXFAaV7-Ow8o=0=&Oo3ojN*enI0 z+G#k0bIibtKpQkc(XJvTlwqJd$O6WNT?mu{F}V(Y82U)rk4=ya`tN=qvv*XZ9oR2I z2ua9iTB@Ng5vO0#+(zP|99LcL~MIBR4 zU$8UHN7^re8HW8YD>NeeG{(3jMI%ssUX=qiAHYhp8jIVASS_PmRWKFQ%)b9@zOT%Z z)BZrw0SIJXK>mB9)Sq;dzwHCmwXw0MF*S5B`j#C8rq8CrznE(T7_@)e9r7>p+5el#@%NYFZxKBc1M5GA z=+~^)L_ZO|^8A`SRG8lFBp-Ztl7SOw&5&q4oF9>jtbxP{PAanKXyoDPqXMg#TrK*U z(IGyp^+{_6hohOTVv|{h5p{=aU9;I5)7oe{4{hQ?WG77`EvHymkVD>Ry`rL6*y-sB zmWMQUsQc2xuAuDRKqH}hRxVyW5(3HH{rTGI8dj^ytCK)j8&=R=hCmt=A7qr*yZ`CI z&mXQeDl|BV^%~l2jl03#i5MaM51OR;`;6>@V}bsCA0HuYh7nktA-2a3%BykRk=Jj# z1IA${2c&!^Z}N?f373p)+_x36M%qbTTJ7pu?QMRfzovfr5O%gb@1q(!!eT}B_Ye*l zM?H3R6< z{MmBu_ zQ7jQDAIc!_4zRW zFkf5^#q5)*nByeT*oZ%q`yd}gkn|^ z-_$a+pl&2&A;8dgiF*YFo%H5~X$lb9`=B_lHMlQQjm=PVxa>r1wcn>`LYjYSVf^gP zody8iQt&WeVt8jS?wRQ_68CmQKlE%TYn&FsWwD6mM5bgWv@dg3Z6uvEKPW7%b+K*@o3jF7pIbiz5T3$u_?gM_z^^IKLrytg8YHf(`sSPJ>fU z0(uUmqxa(8Yj$BIX#-L*#OO=nMl?pn8XjKJP34~pPrmLq-Hbw6qZk}94USb+g(u@C zXDczPzL5rS@uODG?qIN|lNw4zZmoUz3`&jko}K&g*eA zQSCx-`uX4%Xhu{O`RC{;?(4xUZKWcCF7*OKz9TrxFS#1)u3M#b073XVU@e|?#+(&4 zL~h?U9kkD6GyamZY;+fa`>`7~p)UZ4?s5z(z8xZhV}Y(oUvhsh+BURAI3h4YthREU zGK#V4KAx%Fz$NNxWD@m~;@a!-_3;eaoInRN(-@K9yB;z7jm7+KFO~*}7Zx2WU8T(i`A&y*92d>h2sBFZ&$(Kaz1w@Shv zvidYkWQ={Z#zb}Epc9L=I>bHsPyP$OYJ>&MEcgU?wJ8#HtqiAyuA3#}u(Iw9d$F4g zB4azwwMUr~Kig?xf|F@AtDs;?&iVTius9m=SP_#~1sv2!Ah5V0>mMvvB{{coIJYD3 zaz40wjzMur{OHX$wmRLWL@5W?T_;m{HHW@iI&mPZPw(~L17slZ`8>K3wi78OAIYmu zh20GVJ7h|AI@**`Ncq8>Gcu;d(d<^Z%TFV@ag#a<>JTbP3#;qh=8IX)!Q}s-U>tN& zj@zoWRO7$kDRYv5cf2}&f7`>PfY+y!-7D_1#_&`dtd4@2((>1e-ILpZq;eiinHER>(+?_#FF7%9+2@xR$M@!d{)?S{(F)^bT>+~k7`(i z#gw$63g~L&o1K~|zy5VUa-rP9*^hTUK~vZ^3e({5E_#t0+IzJ*NjReo9K{l1!WRR~ z(zWfUVKpe|i+^8S zH%$_Jebc0q+M@x+3Au8TvV}VmJOa*}ppD`(ig+lc?4%5T)NKC5G^a4icyAGmCz~P3 zfkz=_?!3HlIk0nUKEVWP%A#NS5tY>{<#Xlx2AU0)sn_q zp!^s6`u|;^%<`|;__vLGf5pH5QLf{Eueh7>_mzZygMaDSKZ)^wh|ylN+Wlm-mz3uT zThJSq4Q@fd02+)*w})^8rw9WLdzyTw4)c*T6Eibv*X~lBC}S%m89obJj~!`E=Ws0j z(MeY7Kp6+=`OCDkm?GtD9(3`RjkkM_%afBV*(;XTl%$MlO2^YS#w)TNW-UwxZXE+85UvlQch9xFRjL;jN8X z>MSq#(gC89Z7jb2q}2iLC$>p@e@E*Y0P)n73l?c(KNjUe{drqe*8r#!I(!?ER!(s< zLEn=trE8$WGw_kAIZ#)o9xmuL&MPHHkicbv_4lp5=LM$2wU>d=#!t{y68^rw#kR~MU!3ldUB<`_5Sq7vuPyy(|}*o!8V1rJwi{vxLjgianvG$ z$6@kw;R$1YeG@XmTHX;{1t+s z&9tS4j(Y1zVBsl(L&hQJ%Q%wfTPuBtzDsHXo^4E;SuEx28K+>VZBOtCNBk8_v z6&^x$Y|ya$Z$P@isP_zT;Y)V0lQS3w8Da({k?E|Af_;qq@tY3GQ+=R*sMoq}!Ic8$ z{n)sU-rCx|@=EdEMAyx~Qt_I!ku?qn%F5A?2v|_im1>fZE*Q2GSntdtKo@IELeNnEaBAIwaWVVW++Cs|koZDN;(7N|kj_3k2eY+kt>0vkM4 zmd&u65U6)z248K5!*n+?DlcGBMtku08Uj85C=KOSl1Nw~TPm(z4(mTZFpyaHz22|3 z$8Dv%MhGl};Uc%{hr2tXxFHtHw4xP+Av9DYmtarH3eSwANEI*#DL&oj$01i4_{hRk zp*Hx)_$+m3%!-|Dst-uuNOpde)I@KRV)SVk+DkzuJdOgihYI>=Oa*3jsTpD5?OZ z;QPK@lo3p5p-)e$6xa4%i_a+n2Xf88quj;5qnH;Bl+bR2Q&Z!7cvYu+wG%k&usL3Lb zk(X+>@|2zvGEL&3PdvPKYLcBp* zQI=EQG-1OQ9G~(G1CccK)YM!7uwd=S zhf7!auBiwL+M~Cih0D9xPCS&p=Y@p&O&%HcyL3W~rhe{TcpM>6%`(|r>q+>d@rf&I zvuZ!}eDK~MIy2tSMmjJhbGm^z;*vd-dI=;$9aJP?liY#7W-!a#Iwzr2{q_ZVq{e>y zoX1%k%RHhXYG2f5KnW*N4R){riyLR2+}`hsTG}fR$V2ueBpCF=J6oEbd;$VoMl_rm z$}Kgh?W0<}4QnsGQFcikiobk~a~G@o)ym%0JlxfbS;Yu+3*SuP64{Ls>*N{b%GbS9 z0%7-ljYwyMwMlzz!qs7~i|Febxv{<=nunP|Vs+B}BS!dVZms!dXg5SEi=D@T+qqqs z7#Te2@oCft1Ra3%^hf9414w`J%>VNM>9-u#zhM&p@K*ePm33wN?NEP%i5Pxc-uw?> zqI_k|xU@k;k1g$)sAz`Z9jv4=#h3kl)|CcxG*Y;>7w>5kq3~~j1{Jrb*3MJj(F80d zH)EJPx`i)y$8*L;hf>N^b?tu6mqv%0N&A#7-a)Er*4w6uo?D{H9+R126sMuBzAFPl zZ$NM%z%iGrp6TGh?aNLYr2b^!=YswaTpeCswvG_SbuvkGZ7mMoUhG%yB-!0dyj#2W zZcZ_o6SMPxfX6rEH8?{d_!E3YjhB#cvp8%3rck{(ULS+nrhdFI6={s zQ_uj6Z@1&OXJl8VZ$HPI<6JkW=H1kve%<@Uc(PUuFApz@B8@i0SAe!fe@ASe&V=I&24ck5~(7RaMD* zXAVxi$?>xSN!_12(^b<^Rjy%rCsDC6@y^w`{w*)Y*pU2Q*dx2QXoIRFgSZ+yhGH=9 z^he)gAqpXhPM~l?N}_dn4L_ptQ&b_0b0G?Pb1Z6vvOZCL_+nEuGh$#SGl}HGJg)R7)5F;P#T1gttKC zHQu?sTwNn1ls(9iHRV`ZX04!Jn+?|A(AdtQY|2;?uXO8^QH`kU2kZ-2lu$5qT6>QU zPTYY=JKm~`h&s^i?TG6FEP??A6#a5aLn=#mg*_DEVh{XL*dt>*pIz*w_EpA&Vqn~R zn;(bz`{;FLbT|&P7jGMBnlk)poxfhMt-&Sv_a#Q|1Mf?ara|tUh0$4fDvS(AYRnW> z7qXpz3h!JPsH$m~{ZPKf&%i+E=+hFC4)H5^#0h#eSuaptR-zeL(refx^Rzzn62}J9 z@W~}MVWL$K;YzLF%p|ICj;$v}$L#OSc#3DSy~6~X^6{tIt1X7aQ4>Smg&BWE5B_X{Cpiq;W=^dv?ia8<vGiUy?;0f0IL`^wrp(T!5yCJS5?yVZ7Igc~Dcb3w~Cy(kSK?cQ< zg^G*~fxmpsi8%x#K7I@q9daAYC>lKooInT0HOAvwn85POM2jWn`c4Q@v>|kvx}8q$Kt{4 zS<|h~LNTmUcM=_hP@e^o&25y?idwYDQLsncE{uB5 zX{K|ymr`v6REG?qPX}Wjqa-Ed9CwTTVHUyHDjn1vTg|kXsz&*vs3F)n*=`2$^+l=x*u6V+6J2l`gEwr!cT1quUl)GYG{x@X8FT z%dEN>P4U7Fe)n36wcck2lXCkh6_Gp4(Nb*!ebQYBN`boZ^_4k@=dkQR?x=qMl0>T8 zi#_`A>tP|MUa8tok-?}#&_<+zo$1Gj8>@{-2ypE%vl+c4eS(j8$w9Z)vMUB8xFnKt zwidxvWE>C*UXBPm+P97+!RhIkRR>r}O+%`V+hv$>tmn^UYX?2G?zST+MskvRx=TH; z80;emLydL#+KXESU$sRu^s8FuG)^*46LSAWr$Ftsq9BxM=V&U` z5G4+i>V5b(OY&raDo1zrh=-E_ty96GoS-4DVZRz$J-NL;7KivpanDWDC{IBu<^2=8 zT>O-Vp4>XI$GBniBVgX7du;1+lgYlN@s{LHg^)M82a@FTUm@oKNEhvRT}xKcHXt0L zPNSu$=m@1`^#0TwEM^JZan+?$wzH==!J-1VXED6^7ZY80ca%Fg7r@+hHun-6!L{FDbG zET}pGehT&y@No!+j6VL_&+aIBF1%Gni+P|% z2`7Gqg1Eu*Y}a@%@SH}wBd`pOSXfXB-L2v#UOyD|CN`2*&2ZLCtg3GMYJ}#vv|#R% zO21h*CCKs6N!Qj~tiA2Sh4~!P9{}JSp+6ObSM5iJc$Kf4;?erWf7B5m*7P#-7xtYb3->}AFGTQ5LR07QK$ z#lHtK{}hS*=RxLgq4|FUGXG+r{lCk?{R70?|6-xaXYIqk1DW)!|0u}(6rP3QKZ&<- zLe*sCBxg)Mfalmk%d;=^ez`WU)rCr^SfP~BWy>Q=&PGYBoOQT|Z2*x@^!)-V88IaqC1|qh_AE zYC*aJQrQb+fkgBAf<-rVbN%|j+1iKcw5>y??YI#C3=uK~x;Iq=oV`v7!8eN`&mJy8 zo#v4l)UiBjqB=EMSG=a36D?}hJL&m&Bz?3tkE10igDZ4V@xtRPA9iVMqqVw2>lguW z66&?ix};b~KVv2ywwa1nTTyQrR>CzR8O1oh9bj(`ALww#G}Pg2`8wBbqu?z$NN|BM z_Vi@#CL^NV)3rp-!D!O5nEd#{$vH58Jr3w?vU6~LvcYMBVjb`Kpi)Y011z2e ze`icDY`md1kjUEJy+=iiNoH;mV78-3{8i`{(*U^2%wxXeJU_A8qs;YulH~ZS)Qt+i z?H;Hq>RVX63!%5yzTvgH0pKul!vi;~WWkJZI_d@#*>(7tXMyVxV0cfUHbaB6@iO} zv(LXQs)Z#-hg1!N%{X|OEP~HRQWHUH!=)m_CX|1bJ{nY$FJP-xvk$GAi{W|kbe~dZ z!uvv*iWxIw`bAxg-7Ff0Oh6xrI}0s13g~NbQ`k8Ks%eC`1yMBuiCZzqpfcj3-uFe9 z?+s2y2!$Ej%sug73yJ1@%!L{hs_+W)mJ7FRv|BozBHHmM$@v}gQmVAaiZEYqp-#R= z5@#XD9nCGT8ONqC&`W6U71nXf^LUi?(=xvZ7vqy~@8qFD$U788`aH(CoI6KCa4Xhj zqAQp2ZfofnV;3hruA0gEo_?}NDwocdAQWWO!Y_J#Baz;r7Zgy~4euOOh(is%O|2nPnfLH`73Z4iP2x#aIP$toTD){rSFD$FqbufZ#gStO7*u5k_W_3 zy}nWKp*MsOMt(9}#>l3EFQtlNQkn!jXSDUvr(t8P)8Q-JS&~#eIA%5wb&PVmg{zph zxsIuq%;kZ3TI*7*C*o2k%kG}L*#=G1Td9sa9z{|T&mkP*28Kp}6rTeW?%Ikeo+=7+ z51kAgIrl|xY^qgFJPtsqj#UeyDOyvXY0d-)i-QHYnu8ZQJeYbie>f2(~fKIp-c ztF>0;dv_CWkut4a-X_q2<^n6B=w-r@<&i?0Edk|w09Wo{F7M~I;nBPas#BIad|~C! z;tIGQZ5byo2sc^qeip((i!w?%Nyg+st0sR9A$W1Ok%Dy*6^Rw|7$?=|5Tyuyc4t`Ils7Jr&I-AQ^T+O9BpZ zmVVYAM2yhQbW)t~SAq#=bpFgR?B4*250Kk3H_FJIv?OIdpO&htU2H33k(WY!56u=C zUhdD-W~racV6fz@!00GUg8bojL%l0yRK=3%tG-w0esXSR@_N``g{f%ek`w%qAm6^M z2V$LMEKlCz*H)l(ego|FEwuiUc4~4DX+3uScu3?xz+Y~T2^^pQm=waVtqxlX5SEviHx*Fyi5tV|lQD#^o^%qO0GhF8Qa3}gWY zlB%{YFusXW?oIsaVMxk3{3NxKFfvdTIne4LrKN?76p4)_Qo0?G56zo#24u`3@}~4+ zjB>?qp@of&p9v)ip@5c*tk7-2)1y@z_XYk%=WDv$%*cq+rTfJcIJ2+}H9*tS&SEpQANV92C%^T)Dnzz-R%({=o>|e7VM1T*}yVI{I_R_cQiUtmtmZ=0yks3>M8NtSLkgh?I_`x9n+mlkL zW-&CzzNXbjKQfe!YD(g;wWCEEB4y%hu66?XCpihAYT0fXvpo4sy<&c+8iSPFn&#XM z=;!U=H4X;5WKys{!jd6@bGkZ#yM8pBf1o+Bn$JrVssio!s=H;c3UAgQH%6~Ew0X41t(~@6Y z3-7*p&PEh(56WWDwY1X%HmML_eJ^LRJEeVGThC+4UtIv;7Ri3bE*BYdfQc+5Ndh;w zSQVBsFffrb&FHU?wrOF)*&XC6Mi?@FZ5CeFiny}exBJ2L69oVEgu*uUJTPOLKO&Js z5G&B~$p{ua(v)Z661* z6zl~b@s8?lfbZn9xrq(`WOdIg12D9pR2}Zdi$rRQ(f|eU$YWyuT<<>f&{UyGy zKvBg!CjuYaT?wgchkjx9UD{c%@S7~|=S+S_!%=TJ`G{L3cMrI3F8$4Gf$UoaOr9nGsm5f{)tT|2|*o-&5Q zOC$=&nKpNb?m=a+*!}#9-RRk!oayuCm6B6Wp;a*%OlcJ?A>~b@^DKH^G+0(MdVF~l zDKJ@vF@53`;PJ&^sji+Oc*uLy+-chSmdZLLA7sDY7Tw{*9@-hGzTZ8Jsm z*~rvST?7uA<;qGPwb^EN6_ZA5m2T3zBBeGP=q?QXglH@U-6X__ye?PQ9S39~(xTXd zts8uAuY}zIMtXG#e-ADEcir^=0b2NT(a|64?EkmW!l!5cb4~motJ43I^4I@GlhE%c z{CCjdvxVy)fDY-(=JsoYC~uP(A3^8!89-Jo%a3{+Y$ar>CA%t4hWS>MW*l@NVv=Ov z0P)90tEL9R)F{G)L_P7~046WkA1}Bc2{_2g_6=K$rBbqIig~N z)}Vzh=gJH-mBt7}W-OH4`HTbcsL@etazq(?8W5pPOR955vu~@qGI4Nn#qKWPg{fkY&3G!iz5k$NqXmYZe!8?j`{h z<(P+$VN)V&N%=x1>6tF;mtb_iMf-~r+J174)40df&ObKD1`{m%oM@g8Q(DLdX^>CJ zj~Q|*?vkV`cBHJSyY)GAb7{ua?dcad>T!R=ndzA4>NG32$Lw?wB+{atCA^K|pw6rf zHxwIWQS3>gOtH`v{A{57k2r38-E*0y$EG|q>qg~?hc1|eSx~4Mt1J!LC6f&5)Osz0 zq%mx#ib}?Kw0#(&7yH1`v%@ySl!hE#KCPZ5Oifh7+pf4>0SAqE=X?D-di9Dz>zkiE zA`>Y!f=uBKeK1nwg+Nyb@X26VwTiYMKzsm&yy=~pLFmNQ7Zej!7qey18x=c5Gy)jq zx?4tLek(>oqpW78d5b#Kl3BZPyQw6@-;P_6z$EsMklE^Fzl49jHKp6gN|n|<_pYL< z-e9|vjk}ZO?am6V$&ciu9-{$0wpcgPWP2I5gnqx4&=J}N?eT1s4`^@32B5lu0Fw_+ zcfNOLScp#a3Hc1EkP+aT_t)g3BOR$Fn@Xx?tgCGX-hFp{pAzpGpG+nm#ES6`?W!ppNGUgt2sFj|i$SPr-E4cgUBkRuY|P`i2w$ znvbdwtv79HG5`noKeWJfZ8H-42%H&_0D-?@+jpf*%duW7rpVGK=F-;Dh@>&JwRM1) zQorMzaN#m2*zlW;2g_=OSj>xRP_p_Jx~SPq;GfGJOE|<-6*ZZvs(PmM(ampSrPFXt z{?zNuVWvOkEw@-#pp(TNC)`bjSc#y)Qf!bl(}Txk@jbrHi-UWoVudr~giG>By7WCvD7I=IX!59GZq{c|E^I zzG6iPgNBWT`l8P3%o$_O4husOssCYTMTikXm?wKuSa-&v5(x`(&0ej?Tz8cd5JmMm z+B*c3$!lKK*^v2K*XL)=X+>&Jjt`1u*ouaDcZVchKyTBwdDkGc%?Z_2bM=VoX}%Lj zO@3KUdO4Ke+%b(Gkb+Jr-TH_*RJ3`ay|`F}`mVFn-+OD!tD^kTcqIb$QG`ZsGq~P( zItwpA%kma>=pFc>#`#fI(dFaejCGWpxGc&bPy6yj`5lN-T$Oib18z~m%=E=zCm?{9 zDqZ!-?lf9cRi<(XHf1eaQ=Dih{rkSu^z7=d&np}3EG*);)l}L+p`mu-up3+iZqMTB zDA0{l?iicz&i0x^DXSx1l$TARb~arlAwXO>?ZkFND8)XX?)9ubqiJV=J4;}cBbm_^ zjc;WQ@OT6uL_{2DdR?Se?)Rw|@Kd?Y_m20j_xASMl_|vE3r59w{(9;+?UCxxtP#)$34;H7J^lWP-&Q zi>(Z-tQ0ILKlLwiGl>U2RchKfAw^mbS;ga@m?~L9b-AUXSPrP2VL?T`{PzwCZ(mebEp~n1v2;nvOQ`fjYmiCok4mY(fFf=goA4HNmSe z%u1n?4h0=CsUsWWC}J@6N7jxRc3QYh_|5H^;Px`+q`HU8C{%=rHrcl>tTzrh_0 zbf4Qf{{h?)udMmKY#GsG>a%X6*%7b$xv{WtG?~rbD4e}O#kn*W4xBTv#6JVjZvOec z$;}!M-S3BXy!*XY$B+Ay&E4DDNo6s$KH9GEsZ$QIB`&{xHdIa*^r0$F*xj!q-?fMw zX&}*MNPdDO#(?;YNwS7pTqT=>c8=j)xii+jf#Z6s|ahpQ2f{iKN!$o$N+{CEqC&aWL{GyUOr zt)jgH!wh{rZJAAiI0@?$-b4&{`*<0Lm*(4jbgJFPaxPo`h|(05w=)gM?Ag~24^dd@_86U=~d z!Jo2P=PY&6M?~NJcaRrH(EVDFNwww7QW(100NZgwMO^6=9JqlYOqiIB7GA0Ss19Tn zRFV;;=<>uzH>**Xn}j+>*SM8)HkG06{x|E<7#i=N56NKThrma;(6=am%kNd$JwZHQ z*j8;nbD=p_xN^KJ^NO~%}O6aIv4 zO2s&9e|vkQM43-(D5%#bm&e7|lMK*^G*$Z-E)l&oozm}&DaEhk^ee*f+a0pVNCWKY zUslRyC`XJ)*} zYeX!1fXzo2KT*jg5t@E3*9ymGs&MW>;gJ?;}S`eY=2p7)=A_tkZ z>MR`lMls5NlYyl2E_;?&ZWqx=pigDm)m3Qqq#);2ka;M`z4zYIH@SS9gGn9fU68{X zMVnB2=^0C`Q&o-34!}|p(~WfOBE2L(tp>l_hdUi3h)q7smDQ%KQ14E+a|Pi0f7DO< zk>ThT4A1$_V(SML?dm-rDn{nKCR6zCwu}nag6rVl%ABMe;;yHGrmD@qXGKZYi*Gdn z+)3Dd*K=E(@Bjhhn3aJ`%apCK8#77DVGLoe_9hn!eu<;F8R3d*QY_UtEJmOs){DMV zHld9!x+T+&q~<@xaXaD|j>JWs)HfNY)|lLtMK!9O=J2v9v_#WrkT6a|0Z?>?b%GX> zGNBx+icIurg`DbsAI@)F))%pm72(g-Sa9_zuAppf;2MX4RIXv5Ix;5L&tH#S2#)x{ zY8I!5SD;x+o%_C0eqBCitK?D$h`S;G$~Oe@{L1e(CvvZelRE{`$+|%%uwEIuL`6>x zC2tJvrjjBPv)|QqRZ(rEJAGy%qt0b9aLY@rD z%e)wdotbX}7zCqYRW%f>b&p?Ct#$9+=Hhovqiz>wOwAwqli2ze&ABrS=9d7 zcIGV9mKY>xdbSlvT}vOJG$B;R8F{Xt&y}!;e3nF`S1G?kan|T!-^^`fhA~=QDB$~b zB*5Z>mE1_d+*5aRWCP%XjTxR<-ln`dnAH$A(+%F1E?Rur#3Lcpc-_<chaixS!-8lS7K^ zN@?U8Fl5H62EL`F090qqtkP?nZ>BeVV_UJ6D_2^e!~(g7_GP1GrFYt^5}X0V7M$7P zt>{|rm}8=NAL7~ey~7N8dRee8x?j2K}FyE`glw}IWEVWA<{JD+2*U}T*f z+at4ATE&L}+f#RC%l9SuBsG-lj*bzhx@{4~58r$bz+vrJm}FSQH?7FpLM80iqMrv6 z{Qi{vTlKNa{a354|LWo9|K!KcpJZ(R@3|As|Bi>7|LW8~t*ICpf#vA`jWt!Ks*K$( z8)C=J%HW+n7oHGoD8FL9hc zcDoI3M^9DO0j4pW$5#)}1s09>JPdn2nK3wS+1Up`=<&l@3xkGIB6!i^;Xck9Ij^uH z0~R@MVk`}Gp}%+t&9=ek7`@KSNi&ADjd6WX)|;LxZ})6_3j3E+yurIY?kwrqISBY; z#~tR)2e1N8`F=)EFoLg@0WY_2>{T<+7&H-#w{63p6=>iIb>wjEXZgsv4Gc(*E~9+K zYQ93QWO*I3WeGiBc-96r=(NQpv}8Lk*q)g~TiO%MZjxaf@9jV86H}?at@K` zIM8}_2I<}%y~R%5==)>e%KL!QLY{P>FhEsdkhFvCdB)vD>q9CvF0ihhbTx{E#0r{K z%G`WffG6_BjUy4p4iB;2BBUBQ+o3V?{tZ!T1C*7mhnCCaxvaX*tRcPChB<#!Yr3-nwVd6YJC%ULs;8Lj4#InN1rRPF38 z`wh;Xec;?CE&^GlSlZYetW~v9!)@Xj!ssjfc8KKCMKXN7 zVtT^2Ff#l39mEC$GwG@ps+Xw5fq~ZBAXv^}fbVLRr;SWyw?#AJ(ndLutj0;;+yg9N z_j|F8$`$hKK}uuMtxNMrtRsx#9_@2zbxV(TK<|U!PyxQO8qc=deLs3?&$Lz5Z2jEx&d+988v;y zPg#@~PT;Ze7L%bZ*@4m>8*sjyesKN^RF2Fzj~7JKVkGg$tnLAM*r`4k`P#I?0?%OGco}48T}iK z9;_QUg#K*^>T@qC z^Cd>Km(rq&jhz#6uz}kH+w4H+oYu=0nTzcOV(!~DUz+S%C9n2wxeg(%;sTM5dP#18 zWQ4JSb!;7?*HmvE^_M6|LE4H2>K{Rb8Z4u4sqbtg1p6il9zzyE!HgMfn5{_8>yY{W z!*tXJR|Z{btJVnkzB>n8^v?Cz%c^%4Y&>1kd}QK{$695-l#GKF^)psq)#S_D%V0QC zCg7RO$61cgwg#$xH^XcQwt5t1RLm9OJynGq&<3ye)wk>rTAA0Ak$g``9&XU`v5_^& z{jtJduXIJbnv(4dQ^MTQ;8tsXt?iu4RyYVnkXKLG%+Q0Oa|=c+4Q>;u*k_r7ckKlU z!sY((L>SVAmZ+sOU-q>=3)WZCcy-o-C~do%INqopHYn$=tM!{zvmH(buScAh@{M++ z2c1@Jhp9YSAPG;<&~E2=<*l6lSR<Dq06 zrEmDYO-TiqsY`$`75j;h(V%t!Wqcw%) z;I%u89u4#R2&{4`nZ;7D^TN!|61cA=#neYfmMVT39x(mWk?*>14-FOb0>`G=jaP7o zwSWexUtCD{3r1=*gRi*8{1N8Y1t)W`@X_dr@QtieT!oPOI5#|pv7cRNTNXR!bJt*a~cs_%S$C`Po~ zoOh5*zR&c2bc4!4>W2@_LW>}dHMb##D_H8+)AOoY6ZL9l1cVZWea44@EkYSW@n7Po zfm_WXgb~g8hKOd&wsx;5P%+YbE?y$2>D`ST4_W$R$y|xJ@cTc+3~2`?Uo1tLaMK>7 zQ2OK2OAzEB2c5GOSaxnf|v4)u`T28CONFkd~)MQCg zaU;;ZYXN1ImEv_qUPfl@j7lD{+Gv`2H0LYvLX7+Cug~KkUyH;Bv3{OI+%WB=jiueV z>^>Sdb#-iLUko&D;^&+_WQ=8;CvouUZu+6xMK5;wu0`$=uwU9^t@HY5p zWEZ1$?^@9nE2=SER2CbMPNk4GL#lZrG{f(LVqLu7^d5h1gdnJ_1~=VZRcVD)Vv{cr zpi9+ie*BEJ*>8{Z^JVo$QJqhHkGk1ko-oC5ZCj66EGKSStD18p*bF~?$$A{R|LyBW zx>H5ae=_m>GBA6$b6j5Yc+s^>uuItS&Fh+^1kUS>o$y5l*QL$g0po4emS9Gu;RIv7 zBPy!OM#U|PS1()H&}ENQXW5mn9=8rTtvVRLm)9+=qC^+OV- zS&HRaQ)E2>+$_O}B=*MIM38%P1Xs(4vs>!oL;r_gL8ZpZZ0W_CIRP)Gi;lx=fIH1zc6{& zv~6qtHB?YdJTg-fZy*ZhTc)f#*$>&k;Ev()-Xac9=b|#9(SZl&`W}pKG|;5?!vcIUBHC1bj`&~ zNu)J;$Vw>QQU|nCake$zO9`#**Mja)*w1)3NoLtX>iJp)^3iR0B8k4(?@5{sPlj;1 zh5O=zf;wJeq#v+oc#HK_!sX(a$!5NT_3{AhJCBprR-Hu__rso!*!Cn?KJ|P2yy7pi zAZ@*sD(L4RPCpTV?N*z55qdlp1*gwT^EQjd4?CM_hBOPcUz^2E(WJDl*3H14Ob}(h%F>hcU_aRbmh-=PNd~s3MCy0M{D;MogLgRe%|; zTCqd_$%Oy1y9#4>g&+k6YAj?M)RqS0*uGbFijE@yryQ&Wd5XUeYE7Lceg_=7xBHX- z69_JvsuU)fferI)tq^Sf3O1W!C<-vQ3RRiDnT`6yvp5r#Cz3pt4Qcm$F;ws=T@DTD;4xcBwuFQMP)@36bj#kapMSM1T`g!-lMyE46^F@X z0>LEv4N2(j;GzxiJ62RV?%|@n(avSU>mfPXf+$i_z=PVOJEpmP*{gAzbr6otUx8Qk z9fHyd#6@FW;*woL-YYr6n#=s9iR4Ig$-nU!OFZTW%emI)A&ZEzcZAeHyApK>$|ykB zMmQxs31tX;tRpy`AsobUP`R-RFF;!wM$wGt3;=vDw(FPd1faJTD3q`x4VyzqAY!f( zPP|T{J!vH@wNpcRZpbZ~J*LZV!%6MC+>fNgK#@fG_5F=ysx1_y@lPi~EoIFrAvvSn z;D&Lo=xS*nY{}f<$lbooI#=l^?t@kbrCXfm;{;6Xf>wv6`z0PwmyDEpewj>+snk!n zhDCo5y&Go#{oT?^{SilY3VE`mBrr>V%#vO#TVZ-rXyP~%&7(*HDX{gcRXz7uJB~Ye zhZX0fSA?1JYR|V#$G~KFQ4zTN=!E)yW~ygYOWC1{VdiAFAA=LWY5oAAC3gef+Ey?M zrMsiyO8mp)8rv6Ys^kPc%29HSpG5;=wV*&aA@;b=lxH0vp1*^g?4jY*o17}Df@b|{ zJYh*LR-!P^r$2rC6Rng?hD2UTIzjgJuo1% zpR`V4zKdUh6R(+QMIBsH{?c?g8HXc|GvsV8^(Q*r zs4I%uG+nW)kJW5zl?0C{x@{({kwc1bfBOZ z2os*aa6X9*$Ot5%w19GymDwwmXjC3Ra+G-n(AQ>1Ya`jgQA(*}_S>S{r3E3`nLuz3 z&~F1Gy#4YK+NiZ2_`W)qY?P`_f?-7S!svY;p%CCwGI$$!IW4GhYJC2Loh*PkZG8CrIGx`60}ZeeyRI;$`fP9$mP{5p89 zqrVzudO;(*6s>eYxdh$6+<0Jw!*7hy_cK;Qr5(IC#X?%t>Z{G!nbnjPTy=q z>L?YXYZ%1WXqHPnzAQl>I9Td_#+klvKJWsv$l?)zB6TQ2vlkobje5?yC`h#cd#oLN zu1%xN~ROgM~&6%r3Yz{Rbvn z%PQSF>4m8i^Sh>6>#>@^zqhxw~%?oE2rE+_Z)N|5PN zDK&3_*$Gr$YgIqbLhDD=tghayx_+$xRK6iiew{H@a`1VHG-YPDiN^gXZkP7F;i#f$ zeW-p+{@rW1IHj|WmD{5U8h%bONB6Hrnd>ZVB(F_|;TB%Yv~~(=Fgc9tEH(NG;kz;W_#Jf;>0PDE@ULO}xk{v2QCoc7 z?Y#IfF6*=br5hvZ!o~4Y<~HoXeOHeUP~u}+r`=y~*9}={MroYnw$5e)<83a|Ye)3` z%h5d{`jL&x)3rF-KEL_TQ!@zOX!{-r8C6h(zMWJvqFSd05VyR}tedV@67xY`mP|xw zGO|m3b3efnpi$z!F6fgL@SaO=Nt;pV>Xk3@*cnxQLFQ^cXYIjCL}@UKq^51}T_+^B zoJ3XAw0uWZN*i3~sMLdy>p;j&^Ia%iO^4<9-m#i5J8`hn#;S#=XDXVNI#GwCP58X& zL0;d&6)-zC$4hBiKR3ycnC)W8M#fX4Jg9p!jmJvQJfT#r;T~R?EP0(iAS>W5eK%*7 z{0uJ$)1Ydrd&-{w%Ll4fw@)db;ib@XqL(`RDP)Caz$!UCN1v)eBXW`E?z7OtDY~bP zcYhuI)!EB|evoLR|w2=JS3V7xjm34=1f}aBl?TrpeMS z86j%ichpK8z&nz+D&~ACZJh{!5MVG`D;M79@CJiy{b%r6C$hYJCW1djk8hzgY24%T zr~N8jrE!5Rk=~!PNqzpKlK|Zq@t≪sY z%5)>U*2q@l2U*T${TS!D6R`r@wo}T-=%Q4QW!^)cRRX5eZ~EhtQku z5i8DyhE>mXS{k_~^AV>$lZ{e2))6LuT2<*B>@9n0%jVB13vE~Zr2$!|9=rxyL(O8z zdN)oqaU1FLIrGq!D+L@SF0}N3cNFF{EOK6)B79AZ79`Ey&$e@`vcaa?J<7H~FOGS# z<`tynoGztg{TxW^X2X<)1<-#lwH5^qM8JZvRXLXjl4d}zSbxU(NFlvFXL+Hje=?3L z+hAHM$LQQ;pSxJ{YRYhCSp9Sry~56Xu2iexeiG)dUgT@Z7G)#gE&Zkp6achUhm3r5?(e3SwQFk!rHHL(7<7(Wy3f_Aiji%# zz+q^afN*!kd7pz}eq?LnyvOxMEppmn^P~PurNjw*^c`L30SBW6FpdD*F=ay#>^9dK zVv*B4(W8XTm|O~M7-%69DDeUB^bPu9qJNOpT)FRpmic{k283J;tK=}Nd7}3^nC{D8 z%7D%hJqk3u9X2VrA1@&=>kH%Jz54R4LQO3oc5CS1!?3ͭlGVg}!eZJnBkelR5| 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

kMo$xC<&YpB(K;hbsK$C=I3$hQ|xEHil@G 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 Rj3wF@ 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

%h*i*BTQ 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%0Aa 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 B%|ZYG literal 0 HcmV?d00001 diff --git a/extra_script.py b/extra_script.py new file mode 100644 index 0000000..76cfd7c --- /dev/null +++ b/extra_script.py @@ -0,0 +1,6 @@ +Import("env") + +# Hook in die Build-Prozesse +env.AddPreAction("uploadfs", env.VerboseAction("$PROJECT_DIR/scripts/buildfs.sh", "Building Filesystem Image...")) + +env.AddPreAction("upload", env.VerboseAction("$PROJECT_DIR/scripts/uploadfs.sh", "Uploading Filesystem Image...")) \ No newline at end of file diff --git a/gzip_files.py b/gzip_files.py new file mode 100644 index 0000000..4bb48b2 --- /dev/null +++ b/gzip_files.py @@ -0,0 +1,45 @@ +import gzip +import os +import shutil + +## gzip files + +def compress_file(input_file, output_file): + with open(input_file, 'rb') as f_in: + with gzip.open(output_file, 'wb') as f_out: + f_out.writelines(f_in) + +def copy_file(input_file, output_file): + shutil.copy2(input_file, output_file) + +def should_compress(file): + # Komprimiere nur bestimmte Dateitypen + return file.endswith(('.js', '.png', '.css')) + +def main(source_dir, target_dir): + for root, dirs, files in os.walk(source_dir): + rel_path = os.path.relpath(root, source_dir) + for file in files: + input_file = os.path.join(root, file) + output_file_compressed = os.path.join(target_dir, rel_path, file + '.gz') + output_file_original = os.path.join(target_dir, rel_path, file) + + os.makedirs(os.path.dirname(output_file_compressed), exist_ok=True) + + if should_compress(file): + compress_file(input_file, output_file_compressed) + print(f'Compressed {input_file} to {output_file_compressed}') + else: + copy_file(input_file, output_file_original) + print(f'Copied {input_file} to {output_file_original}') + +def init(): + source_dir = 'html' + target_dir = 'data' + + if os.path.exists(target_dir): + shutil.rmtree(target_dir) + + main(source_dir, target_dir) + +init() \ No newline at end of file diff --git a/html/bambu_filaments.json b/html/bambu_filaments.json new file mode 100644 index 0000000..22f36bd --- /dev/null +++ b/html/bambu_filaments.json @@ -0,0 +1,70 @@ +{ + "GFU99": "Generic TPU", + "GFN99": "Generic PA", + "GFN98": "Generic PA-CF", + "GFA01": "Bambu PLA Matte", + "GFA00": "Bambu PLA Basic", + "GFA09": "Bambu PLA Tough", + "GFA07": "Bambu PLA Marble", + "GFA08": "Bambu PLA Sparkle", + "GFA02": "Bambu PLA Metal", + "GFA05": "Bambu PLA Silk", + "GFS00": "Bambu Support W", + "GFL03": "eSUN PLA+", + "GFL01": "PolyTerra PLA", + "GFL00": "PolyLite PLA", + "GFL99": "Generic PLA", + "GFL96": "Generic PLA Silk", + "GFL98": "Generic PLA-CF", + "GFA50": "Bambu PLA-CF", + "GFS02": "Bambu Support For PLA", + "GFA11": "Bambu PLA Aero", + "GFL04": "Overture PLA", + "GFL05": "Overture Matte PLA", + "GFL95": "Generic PLA High Speed", + "GFA12": "Bambu PLA Glow", + "GFA13": "Bambu PLA Dynamic", + "GFA15": "Bambu PLA Galaxy", + "GFS05": "Bambu Support For PLA/PETG", + "GFU01": "Bambu TPU 95A", + "GFU00": "Bambu TPU 95A HF", + "GFG00": "Bambu PETG Basic", + "GFT01": "Bambu PET-CF", + "GFG99": "Generic PETG", + "GFG98": "Generic PETG-CF", + "GFG50": "Bambu PETG-CF", + "GFG60": "PolyLite PETG", + "GFG01": "Bambu PETG Translucent", + "GFG97": "Generic PCTG", + "GFB00": "Bambu ABS", + "GFB99": "Generic ABS", + "GFB60": "PolyLite ABS", + "GFB50": "Bambu ABS-GF", + "GFC00": "Bambu PC", + "GFC99": "Generic PC", + "GFB98": "Generic ASA", + "GFB01": "Bambu ASA", + "GFB61": "PolyLite ASA", + "GFB02": "Bambu ASA-Aero", + "GFS99": "Generic PVA", + "GFS04": "Bambu PVA", + "GFS01": "Bambu Support G", + "GFN03": "Bambu PA-CF", + "GFN04": "Bambu PAHT-CF", + "GFS03": "Bambu Support For PA/PET", + "GFN05": "Bambu PA6-CF", + "GFN08": "Bambu PA6-GF", + "GFS98": "Generic HIPS", + "GFT98": "Generic PPS-CF", + "GFT97": "Generic PPS", + "GFN97": "Generic PPA-CF", + "GFN96": "Generic PPA-GF", + "GFP99": "Generic PE", + "GFP98": "Generic PE-CF", + "GFP97": "Generic PP", + "GFP96": "Generic PP-CF", + "GFP95": "Generic PP-GF", + "GFR99": "Generic EVA", + "GFR98": "Generic PHA", + "GFS97": "Generic BVOH" +} \ No newline at end of file diff --git a/html/favicon.ico b/html/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..14b75860356963e6670a033b5cf907de68e862b9 GIT binary patch literal 16958 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 + + + + + FilaMan - Filament Management Tool + + + + + +

diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..5d9aaef --- /dev/null +++ b/html/index.html @@ -0,0 +1,37 @@ +{{header}} + +
+

FilaMan

+

Filament Management Tool

+

Your smart solution for Filament Management in 3D printing.

+ +

About FilaMan

+

+ FilaMan is a tool designed to simplify filament spool management. It allows you to identify and weigh filament spools, + automatically sync data with the self-hosted Spoolman platform, + and ensure compatibility with OpenSpool for Bambu printers. +

+ +
+
+

Spool Identification

+

Easily identify filament spools using NFC tags (NTag215 or larger).

+
+
+

Automatic Syncing

+

Seamlessly update spool data with Spoolman for accurate tracking.

+
+
+

OpenSpool Compatibility

+

Works with OpenSpool to recognize and activate spools on Bambu printers.

+
+
+ +

Future Plans

+

+ We are working on expanding compatibility to support smaller NFC tags like NTag213 + and developing custom software to enhance the OpenSpool experience. +

+
+ + diff --git a/html/logo.png b/html/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c4adb610e867ed362615057427d8fb2f2c9262f7 GIT binary patch literal 8852 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 literal 0 HcmV?d00001 diff --git a/html/rfid.html b/html/rfid.html new file mode 100644 index 0000000..ec34f37 --- /dev/null +++ b/html/rfid.html @@ -0,0 +1,114 @@ +{{header}} + +
+
+ +
+
+
+

Statistics

+ +
+
+

Spools

+
+ total: + +
+ without Tag: + +
+
+ +
+
+

Overview

+
    +
  • + Manufacturer: + +
  • +
  • + Weight: + kg +
  • +
  • + Length: + m +
  • +
+
+
+

Materials

+
    + +
+
+
+
+
+
+

NFC-Tag

+ +
+
+
+
+ + +
+
+

Spoolman Spools

+

1. select Manufacturer

+ +
+ + +
+
+ + +
+ + +
+
+

Bambu AMS

+
+
Wait for AMS-Data...
+
+
+
+
+
+ + + + + + diff --git a/html/rfid.js b/html/rfid.js new file mode 100644 index 0000000..675b2c4 --- /dev/null +++ b/html/rfid.js @@ -0,0 +1,570 @@ +// WebSocket Variablen +let socket; +let isConnected = false; +const RECONNECT_INTERVAL = 5000; +const HEARTBEAT_INTERVAL = 10000; +let heartbeatTimer = null; +let lastHeartbeatResponse = Date.now(); +const HEARTBEAT_TIMEOUT = 20000; +let reconnectTimer = null; + +// WebSocket Funktionen +function startHeartbeat() { + if (heartbeatTimer) clearInterval(heartbeatTimer); + + heartbeatTimer = setInterval(() => { + // Prüfe ob zu lange keine Antwort kam + if (Date.now() - lastHeartbeatResponse > HEARTBEAT_TIMEOUT) { + isConnected = false; + updateConnectionStatus(); + if (socket) { + socket.close(); + socket = null; + } + return; + } + + if (!socket || socket.readyState !== WebSocket.OPEN) { + isConnected = false; + updateConnectionStatus(); + return; + } + + try { + // Sende Heartbeat + socket.send(JSON.stringify({ type: 'heartbeat' })); + } catch (error) { + isConnected = false; + updateConnectionStatus(); + if (socket) { + socket.close(); + socket = null; + } + } + }, HEARTBEAT_INTERVAL); +} + +function initWebSocket() { + // Clear any existing reconnect timer + if (reconnectTimer) { + clearTimeout(reconnectTimer); + reconnectTimer = null; + } + + // Wenn eine existierende Verbindung besteht, diese erst schließen + if (socket) { + socket.close(); + socket = null; + } + + try { + socket = new WebSocket('ws://' + window.location.host + '/ws'); + + socket.onopen = function() { + isConnected = true; + updateConnectionStatus(); + startHeartbeat(); // Starte Heartbeat nach erfolgreicher Verbindung + }; + + socket.onclose = function() { + isConnected = false; + updateConnectionStatus(); + if (heartbeatTimer) clearInterval(heartbeatTimer); + + // Nur neue Verbindung versuchen, wenn kein Timer läuft + if (!reconnectTimer) { + reconnectTimer = setTimeout(() => { + initWebSocket(); + }, RECONNECT_INTERVAL); + } + }; + + socket.onerror = function(error) { + isConnected = false; + updateConnectionStatus(); + if (heartbeatTimer) clearInterval(heartbeatTimer); + + // Bei Fehler Verbindung schließen und neu aufbauen + if (socket) { + socket.close(); + socket = null; + } + }; + + socket.onmessage = function(event) { + lastHeartbeatResponse = Date.now(); // Aktualisiere Zeitstempel bei jeder Server-Antwort + + const data = JSON.parse(event.data); + if (data.type === 'amsData') { + displayAmsData(data.payload); + } else if (data.type === 'nfcTag') { + updateNfcStatusIndicator(data.payload); + } else if (data.type === 'nfcData') { + updateNfcData(data.payload); + } else if (data.type === 'writeNfcTag') { + handleWriteNfcTagResponse(data.success); + } else if (data.type === 'heartbeat') { + // Optional: Spezifische Behandlung von Heartbeat-Antworten + // Update status dots + const bambuDot = document.getElementById('bambuDot'); + const spoolmanDot = document.getElementById('spoolmanDot'); + const ramStatus = document.getElementById('ramStatus'); + + if (bambuDot) { + bambuDot.className = 'status-dot ' + (data.bambu_connected ? 'online' : 'offline'); + } + if (spoolmanDot) { + spoolmanDot.className = 'status-dot ' + (data.spoolman_connected ? 'online' : 'offline'); + } + if (ramStatus) { + ramStatus.textContent = `${data.freeHeap}k`; + } + } + }; + } catch (error) { + isConnected = false; + updateConnectionStatus(); + + // Nur neue Verbindung versuchen, wenn kein Timer läuft + if (!reconnectTimer) { + reconnectTimer = setTimeout(() => { + initWebSocket(); + }, RECONNECT_INTERVAL); + } + } +} + +function updateConnectionStatus() { + const statusElement = document.querySelector('.connection-status'); + if (!isConnected) { + statusElement.classList.remove('hidden'); + // Verzögerung hinzufügen, damit die CSS-Transition wirken kann + setTimeout(() => { + statusElement.classList.add('visible'); + }, 10); + } else { + statusElement.classList.remove('visible'); + // Warte auf das Ende der Fade-out Animation bevor wir hidden setzen + setTimeout(() => { + statusElement.classList.add('hidden'); + }, 300); + } +} + +// Event Listeners +document.addEventListener("DOMContentLoaded", function() { + initWebSocket(); + + // Event Listener für Checkbox + document.getElementById("onlyWithoutSmId").addEventListener("change", function() { + const spoolsData = window.getSpoolData(); + window.populateVendorDropdown(spoolsData); + }); +}); + +// Event Listener für Spoolman Events +document.addEventListener('spoolDataLoaded', function(event) { + window.populateVendorDropdown(event.detail); +}); + +document.addEventListener('spoolmanError', function(event) { + showNotification(`Spoolman Error: ${event.detail.message}`, false); +}); + +document.addEventListener('filamentSelected', function(event) { + updateNfcInfo(); + // Zeige Spool-Buttons wenn ein Filament ausgewählt wurde + const selectedText = document.getElementById("selected-filament").textContent; + updateSpoolButtons(selectedText !== "Please choose..."); +}); + +// Hilfsfunktion für kontrastreiche Textfarbe +function getContrastColor(hexcolor) { + // Konvertiere Hex zu RGB + const r = parseInt(hexcolor.substr(0,2),16); + const g = parseInt(hexcolor.substr(2,2),16); + const b = parseInt(hexcolor.substr(4,2),16); + + // Berechne Helligkeit (YIQ Formel) + const yiq = ((r*299)+(g*587)+(b*114))/1000; + + // Return schwarz oder weiß basierend auf Helligkeit + return (yiq >= 128) ? '#000000' : '#FFFFFF'; +} + +function updateNfcInfo() { + const selectedText = document.getElementById("selected-filament").textContent; + const nfcInfo = document.getElementById("nfcInfo"); + const writeButton = document.getElementById("writeNfcButton"); + + if (selectedText === "Please choose...") { + nfcInfo.textContent = "No Filament selected"; + nfcInfo.classList.remove("nfc-success", "nfc-error"); + writeButton.classList.add("hidden"); + return; + } + + // Finde die ausgewählte Spule in den Daten + const selectedSpool = spoolsData.find(spool => + `${spool.id} | ${spool.filament.name} (${spool.filament.material})` === selectedText + ); + + if (selectedSpool && selectedSpool.extra.nfc_id) { + nfcInfo.textContent = "NFC Tag assigned"; + nfcInfo.classList.add("nfc-success"); + nfcInfo.classList.remove("nfc-error"); + } else { + nfcInfo.textContent = "No NFC-Tag assigned"; + nfcInfo.classList.add("nfc-error"); + nfcInfo.classList.remove("nfc-success"); + } + + if (selectedSpool) { + writeButton.classList.remove("hidden"); + } else { + writeButton.classList.add("hidden"); + } +} + +function displayAmsData(amsData) { + const amsDataContainer = document.getElementById('amsData'); + amsDataContainer.innerHTML = ''; + + amsData.forEach((ams) => { + // Bestimme den Anzeigenamen für das AMS + const amsDisplayName = ams.ams_id === 255 ? 'External Spool' : `AMS ${ams.ams_id}`; + + const trayHTML = ams.tray.map(tray => { + // Prüfe ob überhaupt Daten vorhanden sind + const relevantFields = ['tray_type', 'tray_sub_brands', 'tray_info_idx', 'setting_id']; + const hasAnyContent = relevantFields.some(field => + tray[field] !== null && + tray[field] !== undefined && + tray[field] !== '' && + tray[field] !== 'null' + ); + + if (!hasAnyContent) { + return ` +
+

Tray ${tray.id}

+

Empty

+
+
`; + } + + // Nur für nicht-leere Trays den Button-HTML erstellen + const buttonHtml = ` + `; + + // Generiere den Type mit Color-Box zusammen + const typeWithColor = tray.tray_type ? + `

Typ: ${tray.tray_type} ${tray.tray_color ? `` : ''}

` : ''; + + // Array mit restlichen Tray-Eigenschaften + const trayProperties = [ + { key: 'tray_sub_brands', label: 'Sub Brands' }, + { key: 'tray_info_idx', label: 'Filament Index' }, + { key: 'setting_id', label: 'Setting ID' } + ]; + + // Nur gültige Felder anzeigen + const trayDetails = trayProperties + .filter(prop => + tray[prop.key] !== null && + tray[prop.key] !== undefined && + tray[prop.key] !== '' && + tray[prop.key] !== 'null' + ) + .map(prop => `

${prop.label}: ${tray[prop.key]}

`) + .join(''); + + // Temperaturen nur anzeigen, wenn beide nicht 0 sind + const tempHTML = (tray.nozzle_temp_min > 0 && tray.nozzle_temp_max > 0) + ? `

Nozzle Temp: ${tray.nozzle_temp_min}°C - ${tray.nozzle_temp_max}°C

` + : ''; + + // Bestimme den Anzeigenamen für das Tray + const trayDisplayName = (ams.ams_id === 255) ? 'External' : `Tray ${tray.id}`; + + return ` +
+
+ ${buttonHtml} +

${trayDisplayName}

+ ${typeWithColor} + ${trayDetails} + ${tempHTML} +
+
+
`; + }).join(''); + + const amsInfo = ` +
+

${amsDisplayName}:

+
+ ${trayHTML} +
+
`; + + amsDataContainer.innerHTML += amsInfo; + }); +} + +// Neue Funktion zum Anzeigen/Ausblenden der Spool-Buttons +function updateSpoolButtons(show) { + const spoolButtons = document.querySelectorAll('.spool-button'); + spoolButtons.forEach(button => { + button.style.display = show ? 'block' : 'none'; + }); +} + +// Neue Funktion zum Behandeln des Spool-In-Klicks +function handleSpoolIn(amsId, trayId) { + // Prüfe WebSocket Verbindung zuerst + if (!socket || socket.readyState !== WebSocket.OPEN) { + showNotification("No active WebSocket connection!", false); + console.error("WebSocket not connected"); + return; + } + + // Hole das ausgewählte Filament + const selectedText = document.getElementById("selected-filament").textContent; + if (selectedText === "Please choose...") { + showNotification("Choose Filament first", false); + return; + } + + // Finde die ausgewählte Spule in den Daten + const selectedSpool = spoolsData.find(spool => + `${spool.id} | ${spool.filament.name} (${spool.filament.material})` === selectedText + ); + + if (!selectedSpool) { + showNotification("Selected Spool not found", false); + return; + } + + // Temperaturwerte extrahieren + let minTemp = "175"; + let maxTemp = "275"; + + if (Array.isArray(selectedSpool.filament.nozzle_temperature) && + selectedSpool.filament.nozzle_temperature.length >= 2) { + minTemp = selectedSpool.filament.nozzle_temperature[0]; + maxTemp = selectedSpool.filament.nozzle_temperature[1]; + } + + // Erstelle Payload + const payload = { + type: 'setBambuSpool', + payload: { + amsId: amsId, + trayId: trayId, + color: selectedSpool.filament.color_hex || "FFFFFF", + nozzle_temp_min: parseInt(minTemp), + nozzle_temp_max: parseInt(maxTemp), + type: selectedSpool.filament.material, + brand: selectedSpool.filament.vendor.name + } + }; + + // Debug logging + console.log("Sende WebSocket Nachricht:", payload); + + try { + socket.send(JSON.stringify(payload)); + showNotification(`Spool set in AMS ${amsId} Tray ${trayId}. Pls wait`, true); + } catch (error) { + console.error("Fehler beim Senden der WebSocket Nachricht:", error); + showNotification("Fehler beim Senden der Daten", false); + } +} + +function updateNfcStatusIndicator(data) { + const indicator = document.getElementById('nfcStatusIndicator'); + + if (data.found === 0) { + // Kein NFC Tag gefunden + indicator.className = 'status-circle'; + } else if (data.found === 1) { + // NFC Tag erfolgreich gelesen + indicator.className = 'status-circle success'; + } else { + // Fehler beim Lesen + indicator.className = 'status-circle error'; + } +} + +function updateNfcData(data) { + // Den Container für den NFC Status finden + const nfcStatusContainer = document.querySelector('.nfc-status-display'); + + // Bestehende Daten-Anzeige entfernen falls vorhanden + const existingData = nfcStatusContainer.querySelector('.nfc-data'); + if (existingData) { + existingData.remove(); + } + + // Neues div für die Datenanzeige erstellen + const nfcDataDiv = document.createElement('div'); + nfcDataDiv.className = 'nfc-data'; + + // Wenn ein Fehler vorliegt oder keine Daten vorhanden sind + if (data.error || data.info || !data || Object.keys(data).length === 0) { + // Zeige Fehlermeldung oder leere Nachricht + if (data.error || data.info) { + if (data.error) { + nfcDataDiv.innerHTML = ` +
+

Error: ${data.error}

+
`; + } else { + nfcDataDiv.innerHTML = ` +
+

Info: ${data.info}

+
`; + } + + } else { + nfcDataDiv.innerHTML = '
'; + } + nfcStatusContainer.appendChild(nfcDataDiv); + return; + } + + // HTML für die Datenanzeige erstellen + let html = ` +
+

Brand: ${data.brand || 'N/A'}

+

Type: ${data.type || 'N/A'} ${data.color_hex ? `` : ''}

+ `; + + // Spoolman ID anzeigen + html += `

Spoolman ID: ${data.sm_id || 'No Spoolman ID'}

`; + + // Nur wenn eine sm_id vorhanden ist, aktualisiere die Dropdowns + if (data.sm_id) { + const matchingSpool = spoolsData.find(spool => spool.id === parseInt(data.sm_id)); + if (matchingSpool) { + // Zuerst Hersteller-Dropdown aktualisieren + document.getElementById("vendorSelect").value = matchingSpool.filament.vendor.id; + + // Dann Filament-Dropdown aktualisieren und Spule auswählen + updateFilamentDropdown(); + setTimeout(() => { + // Warte kurz bis das Dropdown aktualisiert wurde + selectFilament(matchingSpool); + }, 100); + } + } + + html += '
'; + nfcDataDiv.innerHTML = html; + + + // Neues div zum Container hinzufügen + nfcStatusContainer.appendChild(nfcDataDiv); +} + +function writeNfcTag() { + const selectedText = document.getElementById("selected-filament").textContent; + if (selectedText === "Please choose...") { + alert('Please select a Spool first.'); + return; + } + + const spoolsData = window.getSpoolData(); + const selectedSpool = spoolsData.find(spool => + `${spool.id} | ${spool.filament.name} (${spool.filament.material})` === selectedText + ); + + if (!selectedSpool) { + alert('Ausgewählte Spule konnte nicht gefunden werden.'); + return; + } + + // Temperaturwerte korrekt extrahieren + let minTemp = "175"; + let maxTemp = "275"; + + if (Array.isArray(selectedSpool.filament.nozzle_temperature) && + selectedSpool.filament.nozzle_temperature.length >= 2) { + minTemp = String(selectedSpool.filament.nozzle_temperature[0]); + maxTemp = String(selectedSpool.filament.nozzle_temperature[1]); + } + + // Erstelle das NFC-Datenpaket mit korrekten Datentypen + const nfcData = { + version: "2.0", + protocol: "openspool", + color_hex: selectedSpool.filament.color_hex || "FFFFFF", + type: selectedSpool.filament.material, + min_temp: minTemp, + max_temp: maxTemp, + brand: selectedSpool.filament.vendor.name, + sm_id: String(selectedSpool.id) // Konvertiere zu String + }; + + if (socket?.readyState === WebSocket.OPEN) { + const writeButton = document.getElementById("writeNfcButton"); + writeButton.classList.add("writing"); + writeButton.textContent = "Writing"; + socket.send(JSON.stringify({ + type: 'writeNfcTag', + payload: nfcData + })); + } else { + alert('Not connected to Server. Please check connection.'); + } +} + +function handleWriteNfcTagResponse(success) { + const writeButton = document.getElementById("writeNfcButton"); + writeButton.classList.remove("writing"); + writeButton.classList.add(success ? "success" : "error"); + writeButton.textContent = success ? "Write success" : "Write failed"; + + setTimeout(() => { + writeButton.classList.remove("success", "error"); + writeButton.textContent = "Write Tag"; + }, 5000); +} + +function showNotification(message, isSuccess) { + const notification = document.createElement('div'); + notification.className = `notification ${isSuccess ? 'success' : 'error'}`; + notification.textContent = message; + document.body.appendChild(notification); + + // Nach 3 Sekunden ausblenden + setTimeout(() => { + notification.classList.add('fade-out'); + setTimeout(() => { + notification.remove(); + }, 300); + }, 3000); +} \ No newline at end of file diff --git a/html/spool_in.png b/html/spool_in.png new file mode 100644 index 0000000000000000000000000000000000000000..77821a8c56bf2032c6f1760f8b964877a44225eb GIT binary patch literal 22495 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 + window.onload = function() { + if (spoolmanUrl && spoolmanUrl.trim() !== "") { + document.getElementById('spoolmanUrl').value = spoolmanUrl; + } + }; + + function checkSpoolmanInstance() { + const url = document.getElementById('spoolmanUrl').value; + fetch(`/api/checkSpoolman?url=${encodeURIComponent(url)}`) + .then(response => response.json()) + .then(data => { + if (data.healthy) { + document.getElementById('statusMessage').innerText = 'Spoolman-Instance is availabe and healthy!'; + } else { + document.getElementById('statusMessage').innerText = 'Spoolman-Instance not available.'; + } + }) + .catch(error => { + document.getElementById('statusMessage').innerText = 'Error while connecting to Spoolman-Instance: ' + error.message; + }); + } + + function saveBambuCredentials() { + const ip = document.getElementById('bambuIp').value; + const serial = document.getElementById('bambuSerial').value; + const code = document.getElementById('bambuCode').value; + + fetch(`/api/bambu?bambu_ip=${encodeURIComponent(ip)}&bambu_serialnr=${encodeURIComponent(serial)}&bambu_accesscode=${encodeURIComponent(code)}`) + .then(response => response.json()) + .then(data => { + if (data.healthy) { + document.getElementById('bambuStatusMessage').innerText = 'Bambu Credentials saved!'; + // Erstelle und zeige den Reboot-Button + const rebootBtn = document.createElement('button'); + rebootBtn.innerText = 'Reboot now'; + rebootBtn.className = 'reboot-button'; + rebootBtn.onclick = () => window.location.href = '/reboot'; + document.getElementById('bambuStatusMessage').appendChild(rebootBtn); + } else { + document.getElementById('bambuStatusMessage').innerText = 'Error while saving Bambu Credentials.'; + } + }) + .catch(error => { + document.getElementById('bambuStatusMessage').innerText = 'Error while saving: ' + error.message; + }); + } + + + +
+

Spoolman API URL / Bambu Credentials

+ + + +

+ +

Bambu Lab Printer Credentials

+
+
+ + +
+
+ + +
+
+ + +
+ +

+
+
+ + diff --git a/html/spoolman.js b/html/spoolman.js new file mode 100644 index 0000000..54be9b5 --- /dev/null +++ b/html/spoolman.js @@ -0,0 +1,308 @@ +// Globale Variablen +let spoolmanUrl = ''; +let spoolsData = []; + +// Hilfsfunktionen für Datenmanipulation +function processSpoolData(data) { + return data.map(spool => ({ + id: spool.id, + remaining_weight: spool.remaining_weight, + remaining_length: spool.remaining_length, + filament: spool.filament, + extra: spool.extra + })); +} + +// Dropdown-Funktionen +function populateVendorDropdown(data, selectedSmId = null) { + const vendorSelect = document.getElementById("vendorSelect"); + if (!vendorSelect) { + console.error('vendorSelect Element nicht gefunden'); + return; + } + const onlyWithoutSmId = document.getElementById("onlyWithoutSmId"); + if (!onlyWithoutSmId) { + console.error('onlyWithoutSmId Element nicht gefunden'); + return; + } + + // Separate Objekte für alle Hersteller und gefilterte Hersteller + const allVendors = {}; + const filteredVendors = {}; + + vendorSelect.innerHTML = ''; + + let vendorIdToSelect = null; + let totalSpools = 0; + let spoolsWithoutTag = 0; + let totalWeight = 0; + let totalLength = 0; + // Neues Objekt für Material-Gruppierung + const materials = {}; + + data.forEach(spool => { + if (!spool.filament || !spool.filament.vendor) { + return; + } + + totalSpools++; + + // Material zählen und gruppieren + if (spool.filament.material) { + const material = spool.filament.material.toUpperCase(); // Normalisierung + materials[material] = (materials[material] || 0) + 1; + } + + // Addiere Gewicht und Länge + if (spool.remaining_weight) { + totalWeight += spool.remaining_weight; + } + if (spool.remaining_length) { + totalLength += spool.remaining_length; + } + + console.log("Länge gesamt: " + spool.remaining_length); + console.log("Gewicht gesamt" + spool.remaining_weight); + + const vendor = spool.filament.vendor; + + const hasValidNfcId = spool.extra && + spool.extra.nfc_id && + spool.extra.nfc_id !== '""' && + spool.extra.nfc_id !== '"\\"\\"\\""'; + + if (!hasValidNfcId) { + spoolsWithoutTag++; + } + + // Alle Hersteller sammeln + if (!allVendors[vendor.id]) { + allVendors[vendor.id] = vendor.name; + } + + // Gefilterte Hersteller für Dropdown + if (!filteredVendors[vendor.id]) { + if (!onlyWithoutSmId.checked || !hasValidNfcId) { + filteredVendors[vendor.id] = vendor.name; + } + } + }); + + // Dropdown mit gefilterten Herstellern befüllen + Object.entries(filteredVendors).forEach(([id, name]) => { + const option = document.createElement("option"); + option.value = id; + option.textContent = name; + vendorSelect.appendChild(option); + }); + + document.getElementById("totalSpools").textContent = totalSpools; + document.getElementById("spoolsWithoutTag").textContent = spoolsWithoutTag; + // Zeige die Gesamtzahl aller Hersteller an + document.getElementById("totalVendors").textContent = Object.keys(allVendors).length; + + // Neue Statistiken hinzufügen + document.getElementById("totalWeight").textContent = (totalWeight / 1000).toFixed(2); + document.getElementById("totalLength").textContent = (totalLength / 1000).toFixed(2); + + // Material-Statistiken zum DOM hinzufügen + const materialsList = document.getElementById("materialsList"); + materialsList.innerHTML = ''; + Object.entries(materials) + .sort(([,a], [,b]) => b - a) // Sortiere nach Anzahl absteigend + .forEach(([material, count]) => { + const li = document.createElement("li"); + li.textContent = `${material}: ${count} ${count === 1 ? 'Spule' : 'Spulen'}`; + materialsList.appendChild(li); + }); + + if (vendorIdToSelect) { + vendorSelect.value = vendorIdToSelect; + updateFilamentDropdown(selectedSmId); + } +} + +function updateFilamentDropdown(selectedSmId = null) { + const vendorId = document.getElementById("vendorSelect").value; + const dropdownContentInner = document.getElementById("filament-dropdown-content"); + const filamentSection = document.getElementById("filamentSection"); + const onlyWithoutSmId = document.getElementById("onlyWithoutSmId").checked; + const selectedText = document.getElementById("selected-filament"); + const selectedColor = document.getElementById("selected-color"); + + dropdownContentInner.innerHTML = ''; + selectedText.textContent = "Bitte wählen..."; + selectedColor.style.backgroundColor = '#FFFFFF'; + + if (vendorId) { + const filteredFilaments = spoolsData.filter(spool => { + const hasValidNfcId = spool.extra && + spool.extra.nfc_id && + spool.extra.nfc_id !== '""' && + spool.extra.nfc_id !== '"\\"\\"\\""'; + + return spool.filament.vendor.id == vendorId && + (!onlyWithoutSmId || !hasValidNfcId); + }); + + filteredFilaments.forEach(spool => { + const option = document.createElement("div"); + option.className = "dropdown-option"; + option.setAttribute("data-value", spool.filament.id); + option.setAttribute("data-nfc-id", spool.extra.nfc_id || ""); + + const colorHex = spool.filament.color_hex || 'FFFFFF'; + option.innerHTML = ` +
+ ${spool.id} | ${spool.filament.name} (${spool.filament.material}) + `; + + option.onclick = () => selectFilament(spool); + dropdownContentInner.appendChild(option); + }); + + filamentSection.classList.remove("hidden"); + } else { + filamentSection.classList.add("hidden"); + } +} + +function selectFilament(spool) { + const selectedColor = document.getElementById("selected-color"); + const selectedText = document.getElementById("selected-filament"); + const dropdownContent = document.getElementById("filament-dropdown-content"); + + selectedColor.style.backgroundColor = `#${spool.filament.color_hex || 'FFFFFF'}`; + selectedText.textContent = `${spool.id} | ${spool.filament.name} (${spool.filament.material})`; + dropdownContent.classList.remove("show"); + + document.dispatchEvent(new CustomEvent('filamentSelected', { + detail: spool + })); +} + +// Initialisierung und Event-Handler +async function initSpoolman() { + try { + const response = await fetch('/api/url'); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + if (!data.spoolman_url) { + throw new Error('spoolman_url nicht in der Antwort gefunden'); + } + + spoolmanUrl = data.spoolman_url; + + const fetchedData = await fetchSpoolData(); + spoolsData = processSpoolData(fetchedData); + + document.dispatchEvent(new CustomEvent('spoolDataLoaded', { + detail: spoolsData + })); + } catch (error) { + console.error('Fehler beim Initialisieren von Spoolman:', error); + document.dispatchEvent(new CustomEvent('spoolmanError', { + detail: { message: error.message } + })); + } +} + +async function fetchSpoolData() { + try { + if (!spoolmanUrl) { + throw new Error('Spoolman URL ist nicht initialisiert'); + } + + const response = await fetch(`${spoolmanUrl}/api/v1/spool`); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const data = await response.json(); + return data; + } catch (error) { + console.error('Fehler beim Abrufen der Spulen-Daten:', error); + return []; + } +} + +/* +// Exportiere Funktionen +window.getSpoolData = () => spoolsData; +window.reloadSpoolData = initSpoolman; +window.populateVendorDropdown = populateVendorDropdown; +window.updateFilamentDropdown = updateFilamentDropdown; +window.toggleFilamentDropdown = () => { + const content = document.getElementById("filament-dropdown-content"); + content.classList.toggle("show"); +}; +*/ + +// Event Listener +document.addEventListener('DOMContentLoaded', () => { + initSpoolman(); + + const vendorSelect = document.getElementById('vendorSelect'); + if (vendorSelect) { + vendorSelect.addEventListener('change', () => updateFilamentDropdown()); + } + + const onlyWithoutSmId = document.getElementById('onlyWithoutSmId'); + if (onlyWithoutSmId) { + onlyWithoutSmId.addEventListener('change', () => { + populateVendorDropdown(spoolsData); + updateFilamentDropdown(); + }); + } + + document.addEventListener('spoolDataLoaded', (event) => { + populateVendorDropdown(event.detail); + }); + + window.onclick = function(event) { + if (!event.target.closest('.custom-dropdown')) { + const dropdowns = document.getElementsByClassName("dropdown-content"); + for (let dropdown of dropdowns) { + dropdown.classList.remove("show"); + } + } + }; + + const refreshButton = document.getElementById('refreshSpoolman'); + if (refreshButton) { + refreshButton.addEventListener('click', async () => { + try { + refreshButton.disabled = true; + refreshButton.textContent = 'Wird aktualisiert...'; + await initSpoolman(); + refreshButton.textContent = 'Refresh Spoolman'; + } finally { + refreshButton.disabled = false; + } + }); + } +}); + +// Exportiere Funktionen +window.getSpoolData = () => spoolsData; +window.setSpoolData = (data) => { spoolsData = data; }; +window.reloadSpoolData = initSpoolman; +window.populateVendorDropdown = populateVendorDropdown; +window.updateFilamentDropdown = updateFilamentDropdown; +window.toggleFilamentDropdown = () => { + const content = document.getElementById("filament-dropdown-content"); + content.classList.toggle("show"); +}; + +// Event Listener für Click außerhalb Dropdown +window.onclick = function(event) { + if (!event.target.closest('.custom-dropdown')) { + const dropdowns = document.getElementsByClassName("dropdown-content"); + for (let dropdown of dropdowns) { + dropdown.classList.remove("show"); + } + } +}; \ No newline at end of file diff --git a/html/style.css b/html/style.css new file mode 100644 index 0000000..11d35c8 --- /dev/null +++ b/html/style.css @@ -0,0 +1,901 @@ +/* Allgemeine Stile */ +body { + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f8f9fa; + color: #333; + display: flex; + flex-direction: column; + align-items: center; + min-height: 100vh; + text-align: center; +} + +.logo { + height: 40px; /* Anpassen an die Navbar-Höhe */ + width: auto; + margin-right: 15px; + margin-left: 10px; +} + +/* Navigationsleiste */ +.navbar { + background-color: #007bff; + width: 100%; + display: flex; + justify-content: center; /* Zentriert die Navigation */ + padding: 10px 0; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + position: fixed; + top: 0; + left: 0; + z-index: 1000; +} + +.navbar a { + display: inline-block; + color: white; + text-align: center; + padding: 14px 20px; + text-decoration: none; + font-weight: bold; + transition: background 0.3s, color 0.3s; + cursor: pointer !important; /* Wichtig: cursor-Definition für Nav-Links */ +} + +.navbar a:hover { + background-color: #0056b3; + color: #fff; + cursor: pointer !important; +} + +/* Inhalt */ +.container { + padding: 20px; + width: 100%; + max-width: none; + background: white; + border-radius: 8px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + margin-top: 20px; /* Platz für die fixe Navbar */ +} + +/* Überschriften */ +h1 { + color: #007bff; + text-align: center; +} + +h3 { + color: #007bff; + font-size: 24px; + margin-top: 5px; + margin-bottom: 5px; + font-weight: bold; +} + +/* Formulare */ +form { + display: flex; + flex-direction: column; + gap: 10px; + padding: 20px; +} + +label { + font-weight: bold; +} + +input[type="text"], input[type="submit"] { + padding: 10px; + border: 1px solid #ccc; + border-radius: 5px; + font-size: 16px; +} + +input[type="text"]:focus { + border-color: #007bff; + outline: none; +} + +input[type="submit"] { + background-color: #007bff; + color: white; + border: none; + cursor: pointer; + transition: background 0.3s; +} + +input[type="submit"]:hover { + background-color: #0056b3; +} + +/* Buttons */ +button { + padding: 10px 15px; + border: none; + border-radius: 5px; + background-color: #007bff; + color: white; + font-size: 16px; + cursor: pointer; + transition: background 0.3s; +} + +button:hover { + background-color: #0056b3; +} + +/* Statusnachricht */ +#statusMessage { + margin-top: 10px; + padding: 10px; + border-radius: 5px; + background-color: #8cc4fd; + text-align: center; + font-weight: bold; +} + +.features { + display: flex; + justify-content: space-between; + margin-top: 30px; + text-align: left; +} +.feature { + flex: 1; + padding: 20px; + background-color: #f9f9f9; + border-radius: 8px; + margin: 0 10px; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.05); +} +.feature h3 { + font-size: 1.4rem; + margin-bottom: 10px; + color: #007bff; +} +.feature p { + font-size: 1rem; + color: #555; +} + +p { + font-size: 1rem; + color: #555; +} + +a { + color: #007bff; + text-decoration: none; + font-weight: bold; + cursor: pointer; +} +a:hover { + text-decoration: underline; +} + +/* Karten-Stil für optische Trennung */ +.card { + background: #f9f9f9; + padding: 15px; + margin: 20px 0; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +/* Versteckte Elemente */ +.hidden { + display: none; +} + +/* Dropdown-Stil */ +.styled-select { + width: 100%; + padding: 12px 15px; + font-size: 16px; + border: 2px solid #e0e0e0; + border-radius: 8px; + background-color: #fff; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23007bff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 15px center; + background-size: 15px; + transition: all 0.3s ease; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); +} + +.styled-select:hover { + border-color: #007bff; + box-shadow: 0 3px 6px rgba(0, 123, 255, 0.1); +} + +.styled-select:focus { + border-color: #007bff; + outline: none; + box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25); +} + +.styled-select:disabled { + background-color: #f5f5f5; + cursor: not-allowed; + opacity: 0.7; +} + +/* NFC-Status */ +.nfc-status { + font-weight: bold; + margin-top: 10px; +} + +.nfc-success { + color: green; +} + +.nfc-error { + color: red; +} + +/* Füge diese neuen Styles zu deiner style.css hinzu */ + +.three-column-layout { + display: flex; + justify-content: space-between; + gap: 20px; + margin-top: 20px; + width: 100%; +} + +.column { + flex: 1; + min-width: 0; /* Verhindert Überlauf bei flex-Elementen */ +} + +.feature-box { + background: white; + padding: 5px 20px 20px 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + margin-bottom: 20px; +} + +.feature-box h2 { + color: #007bff; + font-size: 1.4rem; + margin-bottom: 15px; +} + +.feature-box ul { + list-style: none; + padding: 0; + margin: 0; +} + +.feature-box ul li { + padding: 8px 5px 5px 5px; + border-bottom: 1px solid #eee; +} + +.content { + width: 95%; + max-width: 1400px; + margin: 0 auto; + padding-top: 60px; + padding-bottom: 20px;; +} + +.tray { + background: #ffffff; + padding: 15px; + margin: 10px 0; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + border-left: 4px solid #ffffff; +} + +.tray p { + margin: 5px 0; +} + +.tray b { + color: #007bff; +} + +/* Responsive Design */ +@media (max-width: 1024px) { + .three-column-layout { + flex-direction: column; + } + + .column { + width: 100%; + } +} + +.nfc-status-display { + display: flex; + align-items: center; + gap: 10px; + padding: 10px 0; +} + +.status-circle { + width: 20px; + height: 20px; + border-radius: 50%; + display: inline-block; + border: 2px solid #ccc; + background-color: #ffffff; +} + +.status-circle.success { + background-color: #28a745; + border-color: #218838; +} + +.status-circle.error { + background-color: #dc3545; + border-color: #c82333; +} + +.nfc-data { + padding: 10px; + background-color: #f8f9fa; + border-radius: 4px; + margin-top: 5px; + width: 100%; +} + +.nfc-data p { + margin: 5px 0; + font-size: 0.9em; +} + +.nfc-status-display { + display: flex; + flex-direction: column; + gap: 10px; +} + +.error-message { + padding: 10px; + background-color: #fff3f3; + border-radius: 4px; + border-left: 4px solid #dc3545; +} + +.info-message { + padding: 10px; + background-color: #fff3f3; + border-radius: 4px; + border-left: 4px solid #39d82e; +} + +.nfc-header { + display: grid; + grid-template-columns: 40px 1fr 40px; + align-items: center; + margin-bottom: 10px; +} + +.nfc-header h2 { + margin: 0; + grid-column: 2; + text-align: center; +} + +.nfc-header .status-circle { + grid-column: 3; + justify-self: end; +} + +.content-header { + display: flex; + justify-content: center; + align-items: center; + position: relative; +} + +.connection-status { + display: flex; + align-items: center; + gap: 10px; + background-color: #fff3f3; + border: 1px solid #dc3545; + border-radius: 4px; + padding: 10px 15px; + margin: 15px auto; + color: #dc3545; + position: fixed; + top: 20px; + left: 50%; + transform: translateX(-50%); + z-index: 1000; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); + max-width: 90%; + opacity: 0; + transition: opacity 0.3s ease; +} + +.connection-status.visible { + opacity: 1; +} + +.spinner { + flex-shrink: 0; + width: 16px; + height: 16px; + border: 2px solid rgba(220, 53, 69, 0.2); + border-top-color: #dc3545; + border-radius: 50%; +} + +.connection-status.visible .spinner { + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + +.connection-status.hidden { + display: none; +} + +.nfc-actions { + display: flex; + gap: 10px; + justify-content: center; /* Zentriert das div */ +} + +.btn { + padding: 8px 16px; + border-radius: 4px; + border: none; + cursor: pointer; + font-weight: bold; +} + +.btn-primary { + background-color: #007bff; + color: white; +} + +.btn-primary:hover { + background-color: #0056b3; +} + +.btn-danger { + background-color: #dc3545; + color: white; +} + +.btn-danger:hover { + background-color: #c82333; +} + +/* Filament Select Styling */ +#filamentSelect { + width: 100%; + padding: 12px 15px; + font-size: 16px; + border: 2px solid #e0e0e0; + border-radius: 8px; + background-color: #fff; + cursor: pointer; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23007bff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 15px center; + background-size: 15px; + transition: all 0.3s ease; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); +} + +#filamentSelect:hover { + border-color: #007bff; + box-shadow: 0 3px 6px rgba(0, 123, 255, 0.1); +} + +#filamentSelect:focus { + border-color: #007bff; + outline: none; + box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25); +} + +#filamentSelect option { + padding: 8px 15px; + font-size: 16px; + background-color: #fff; + color: #000; /* Standard Textfarbe für alles außer dem Farbblock */ +} + +#filamentSelect option::first-letter { + font-size: 16px; + margin-right: 5px; +} + +#filamentSelect option::before { + content: ''; + display: inline-block; + width: 12px; + margin-right: 8px; +} + +/* Color Box im Select */ +.color-box { + display: inline-block; + width: 12px; + height: 12px; + border: 1px solid #333; + border-radius: 2px; + margin-right: 5px; + vertical-align: middle; +} + +#filamentSelect option span { + display: inline-block; + pointer-events: none; +} + +#filamentSelect option span:first-child { + margin-right: 5px; + font-size: 16px; +} + +/* Filament Select Option Styling */ +#filamentSelect option span.color-circle { + display: inline-block; + width: 12px; + height: 12px; + border-radius: 50%; + margin-right: 8px; + border: 1px solid #333; + vertical-align: middle; +} + +/* Custom Dropdown */ +.custom-dropdown { + position: relative; + width: 100%; + font-family: inherit; + cursor: default; /* Container selbst soll normalen Cursor haben */ +} + +.dropdown-button { + padding: 12px 15px; + border: 2px solid #e0e0e0; + border-radius: 8px; + background-color: #fff; + cursor: pointer; + display: flex; + align-items: center; + gap: 8px; + transition: all 0.3s ease; +} + +.dropdown-button:hover { + border-color: #007bff; +} + +.selected-color { + width: 16px; + height: 16px; + border-radius: 50%; + border: 1px solid #333; + flex-shrink: 0; +} + +.dropdown-arrow { + margin-left: auto; + color: #007bff; + font-size: 12px; +} + +.dropdown-content { + display: none; + position: absolute; + top: 100%; + left: 0; + right: 0; + background-color: #fff; + border: 1px solid #e0e0e0; + border-radius: 8px; + margin-top: 4px; + max-height: 300px; + overflow-y: auto; + z-index: 1000; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); +} + +.dropdown-content.show { + display: block; +} + +.dropdown-option { + padding: 10px 15px; + cursor: pointer; + display: flex; + align-items: center; + gap: 8px; +} + +.dropdown-option:hover { + background-color: #f8f9fa; +} + +.option-color { + width: 16px; + height: 16px; + border-radius: 50%; + border: 1px solid #333; + flex-shrink: 0; +} + +.notification { + position: fixed; + top: 20px; + right: 20px; + padding: 15px 25px; + border-radius: 4px; + color: white; + z-index: 1000; + animation: slideIn 0.3s ease-out; +} + +.notification.success { + background-color: #28a745; +} + +.notification.error { + background-color: #dc3545; +} + +.notification.fade-out { + opacity: 0; + transition: opacity 0.3s ease-out; +} + +@keyframes slideIn { + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } +} + +/* Neue Styles für die Statistiken */ +.statistics-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 20px; + margin-top: 15px; +} + +.statistics-column { + background: #f8f9fa; + padding: 0; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0,0,0,0.05); +} + +.statistics-column h3 { + color: #007bff; + margin-bottom: 5px; + padding-bottom: 8px; + border-bottom: 2px solid #e9ecef; + font-size: 1.1rem; +} + +.statistics-list { + list-style: none; + padding: 0; + margin: 0; +} + +.statistics-list li { + display: flex; + justify-content: space-between; + padding: 8px 5px 0 5px; + border-bottom: 1px solid #e9ecef; +} + +.statistics-list li:last-child { + border-bottom: none; +} + +.stat-label { + color: #495057; + font-weight: 500; +} + +.stat-value { + font-weight: bold; + color: #007bff; +} + +/* Responsive Design Anpassung */ +@media (max-width: 768px) { + .statistics-grid { + grid-template-columns: 1fr; + } +} + +.statistics-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 15px; + padding-bottom: 0; + border-bottom: 1px solid #e9ecef; +} + +.refresh-button { + display: flex; + align-items: center; + padding: 8px 16px; + background-color: #007bff; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 14px; + transition: background-color 0.2s; +} + +.refresh-button:hover { + background-color: #0056b3; +} + +.refresh-button:active { + background-color: #004494; +} + +.spools-info { + display: flex; + justify-content: flex-start; + gap: 20px; + margin-bottom: 15px; +} + +.spool-stat { + display: flex; + align-items: center; + gap: 8px; +} + +.spool-stat .stat-label { + color: #495057; + font-weight: 500; + white-space: nowrap; +} + +.spool-stat .stat-value { + font-weight: bold; + color: #007bff; +} + +/* Buttons und klickbare Elemente */ +button, +input[type="submit"], +.dropdown-button, +.dropdown-option, +.refresh-button, +.btn, +.styled-select, +select, +a { + cursor: pointer !important; +} + +/* Disabled Zustände */ +button:disabled, +input[type="submit"]:disabled, +.btn:disabled, +.styled-select:disabled { + cursor: not-allowed !important; + opacity: 0.7; +} + +/* Schreib-Button */ +#writeNfcButton { + background-color: #007bff; + color: white; + transition: background-color 0.3s, color 0.3s; + width: 160px; +} + +#writeNfcButton.writing { + background-color: #ffc107; + color: black; + width: 160px; +} + +#writeNfcButton.success { + background-color: #28a745; + color: white; + width: 160px; +} + +#writeNfcButton.error { + background-color: #dc3545; + color: white; + width: 160px; +} + +@keyframes dots { + 0% { content: ""; } + 33% { content: "."; } + 66% { content: ".."; } + 100% { content: "..."; } +} + +#writeNfcButton.writing::after { + content: "..."; + animation: dots 1s steps(3, end) infinite; +} + +.reboot-button { + background-color: #ff0000; + color: white; + padding: 10px 20px; + border: none; + border-radius: 4px; + margin-left: 10px; + cursor: pointer; +} + +.reboot-button:hover { + background-color: #cc0000; +} + +/* Bambu Settings Erweiterung */ +.bambu-settings { + background: white; + padding: 20px; + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + max-width: 400px; + margin: 20px auto; +} + +.bambu-settings .input-group { + margin-bottom: 15px; + text-align: left; +} + +.bambu-settings .input-group label { + display: block; + margin-bottom: 5px; +} + +.bambu-settings .input-group input { + width: 100%; +} + +#bambuStatusMessage { + margin-top: 15px; + display: flex; + align-items: center; + gap: 10px; + justify-content: center; +} + + +.tray { + position: relative; +} + +.spool-button:hover { + opacity: 0.8; +} \ No newline at end of file diff --git a/html/waage.html b/html/waage.html new file mode 100644 index 0000000..04d81df --- /dev/null +++ b/html/waage.html @@ -0,0 +1,99 @@ +{{header}} +
+

Scale Configuration Page

+ +
+
+
Sacle Calibration
+ + +
+
+
+ + + +
+ + + + diff --git a/html/wifi.html b/html/wifi.html new file mode 100644 index 0000000..cb8ac85 --- /dev/null +++ b/html/wifi.html @@ -0,0 +1,12 @@ +{{header}} +
+

WiFi Configuration Page

+
+
+
+ +
+

Configure your WiFi settings here.

+
+ + diff --git a/img/doc-esp32-pinout-reference-wroom-devkit.png b/img/doc-esp32-pinout-reference-wroom-devkit.png new file mode 100644 index 0000000000000000000000000000000000000000..d9ab42f2d40ef2fc536be5ccce15ef59532b39fa GIT binary patch literal 261486 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 z

}nqoVG-{!C8Is9ovkWq9^W{O<96TIR{r<|0hzpyFLNOi>uam=FR(UlbQ5WEc`w z|DaI7Xsw73A%_h+z=X<=WurM9mKoeY&_3N3bR<)ygN2OqYAlzlIeS1yZWv1w(on4@ zk3&+AXP8jO)cJe4ZRW_g0B6l)S4&7kMjbJ?lXsoXadxqqj#y{w+W6rK^4qW^qO7Jy zY$&6(t!;&a0+>2djx9=+y{4P9_J;gh4|^8= zo)I{^mI=Yq=*J+_DpGv|;S8q-GmE{2v{zE4%NMr3;g!O}a-`uGk}|dKIwfSc@AatC zq98O8RhCiB-$=l5Uk`envzJLbOf24i$OY3QEwb^S;J{UXr1ILuzfS(PUirA_Rn*fz zqkbZg5fZ?k8+|B(&2cs89I|BtIMh=^) zB7CLxN_p!8uj6L_MD%~tsctWosRfCZNzlgao;o>iWausNmxKUoM*x{xURwmn@NI3z zz>!Z!M~At&IdJ%KangL<4^viF=H%q8tFI?ogW}gs3>db0EOB4Sn#*5HL! zRB3!qb_Em@EX@@Lp9N^lxIpcG9F`f(6L`}n*Y%!jxx}YI+s)p8e=GSV7&Wa|CE2OY zV=*sZZ_T#;yzf1z+x|2;O;^9@jcbI$L%oc41GwvQ#*x zURdc6BKI!hYqJ9q%o_`dxtmI6l5mhiJ(If4Sk^mte#o&>QpNz<<~Kz$W+@{^;PB_I z%9B(CdKNg;&1^?CoBSThuCbndH{Ia09j)^dP|c=lY-}j+eECwmnyi7| zFgZOSL4UGLJ(|I2>djhn!loKfV5BEXM0Tk1_Vnn=>d>ic&NPeE3pQx{sBQ14sNgv! zf^CPX?R4X4+!6t#iRb)r^F77NCcj|!S*QUDq&07r?THVN&-XX^64SiIm(JtLY9(O?BDlDn&~cZEVE9$FhEga zjXIks77V1_dOyzBHXX}1l^C?TKk27r=9X?cyF7mdgMH#~#6{#?H}{CmxwK)UWUfw^ zfYNcM(Ory_bH$fT218&+`u+R&Ph>0uE#NG|JOM2zY-hgty8anJ+HOCf;@7W5B`7H= z(W&MGRh8Y1$KFB!jYJ<JuWyAM)4{l5F_)S``?lr(>B$q#A1kYq2%<9rkh@cU03C z${KEQ-?G;B;&DAZL_M~XCXDi>fGbtd5k7s{={4&o|6*^*Z!M+CWKVTBg%0+*B9etq z>ih8AoH||K5=qHG_<^bBYhjy@=C;S>{-bxpS?)J-n2nVw9erzbwZh12(h3N!t$uSb z5V=*BUzM#VIJUd8;9Djr7XMo2CpOc}q`hAIAeY9}O1Bxev?oQ_OMOo1E;NN3iy5(W zm0w=oH@IxtPL(;Hq)iti?`p47KL5P!(ORAMT(>&%n{03kq1O=^Y;_>bf^}%)XW@N1 zdV2HBhal+6%8C(KC4$*%EH6p|X~a4N9NxPDYy{xJEB>^Gf?C6$6$6(4E4cBS5Ph)L zJ2n1+d`pSDOvPFO(k9{kj5_m}bLl(tvh-P|4?mk=d#F<2vpmf6rg)4UA@?Cl^mej< zdP0*IGg*dD^b+Zd!=C0jx(Y|W3`%O2_XgDPcG5uRba=?~71JW4@5y0xT$EsE`!a*ZmV0n&Z*_i~+8CRFJ2KWbK9(@lEt&r+=_xY8>@; zU)GMThF4q8fn28YyP_cL@3aZ8@v$W@n@nLQa9*Bk8x`T zJnX;5aXI<_B+7NGT4Mhd!Bp$LR+?4J$C-!D_{$}V6A8acN1y5jtujZLm0TfO~qE||@tkQ)o~C)A*QbaL{i)%VR^6~;@rm;}8VH1Ew2 z{D%+{q=6s98@qx92_)P{YT1OMF!DbQim|8&qXfzT2^?tO>MJ#H4b4fPxvR!%!WW5$ zu~&jtqn2Ks$+hB)s)S@4Djrp-PY#Zqya-_UXG=EAUeX(Y3L#|y+L);mx_Y4!O81!> z{{3iN&j>zUZ8dreez-miF=Li+$oud;GgEFr`6jjDKyRR+AQj;iQ1It6X?f1uK+1Xd zhhtyeUq#NBkFWtQRXFh)SPQnU-T7Q_ql;pkN;zMV2G3abMxL^pOzdf}G%*>y#SC+20@} z2m`*MFJ5{LN)OUyCuhk*xUR~P_|e2e>DXPK=JXAwU|YjtR7>-~HO9%i4~~BR_HPH^ zz$?V53v1>1I!(H^ClQ5YJM(QLgatNKvp;;HByP^RbHfpkTtarzvGqDyL+t3CT|+J$ z=(-I@y767+!&~`TXO)3-(ntGZ>uXB~tq0oY z0-?;(y8H?3yK=a&NPXn~vf3@g>E*%T?rcMi-HN&a2Ho5&J0RtC=>p-8$Nr1``~wk+ z-~~{>%wz{NAL{H?$6@(#Z!O)*MH~k7*zPLSf%S%-jvyTVu6t482NqC=E4gG06>@WP z58+vTu=}<8_!wDOUF?b#M$Wx}h`9YKn>0q2~_{Ugw*{^qumq#k$@t#P>1KobJQ?D7;zGkgRZuq6+nN*#e+paB26jwZ;x(vhB z;4!F|;rWg=+o=uu=k((TdG$DEsAY?fiU#2q%i9tKql;&wGzpp=1sBN>m)i&wXA3y= zUhI*U2{v=#07n{(*UNy07~1(H>9&9?@R6A!Rc{}v4aAqmf6m3%WkhCmq6y%AucLc* zC%i`Q9>8!EUc1yEhzo^#9o332X1ZC0uLJUnmiEBF0NtDKF5kkjn5ij-17c$0Dj#3q z2*fDI-ye_VY&qr$Rj-8If1!V1EoU7UmMW`auT=CE**=;|#%xiD#S?pyVWgC4_e!?^ zF8Cd$vLeg)jG&%xuHkC!IUbBWlr%lLqb*myceUwo<2p#P#JyHiqG@e7wQ;V+s_6YY zB_rHrGjXr~*>K{QBuf}wB9-+b*Ip zifNHXR~#5{Ukg}^wqesH9^4S7j5RWse{q#nl7Z|hYyY9iz({cTElzo3PSc|`XI42P z!MLbXn|dHk@|V*4jsUX^&tssG)Oly-zNqLp5iC)w3klTTz?tSp5Y*b*nohnoiahIU zPEOB%(=rhF73b3jU9wx}c=Ix=7AKn{;)&j_9UjA#vM1Im%bo|z-`vG)P&j##ka`X; zSyARH5@)Zbu3^Y-S)MZz2}mMA`Hina{p5P9s@$#5teNG*X3APcGp$B{y=fzIQk5fM zrWnizr`COx2qE*wvKFPurk{U#e7oEN@sZ|LWkkmKOMtXWMWLs4B@ub9hM**0-_Cn2 zGZX4{g^~y(n(dFK(24go;2kLGZijWy7as@Vu|(O1K=-pR^o{OLK!#zgJ$dmULaMK-WcNI_8bP5CE&E|D9Fp>usy* zw@?k|b$zXy^W%KdTh_eE$BI+rP6Ys=pkk{3?sl7jZIJ{)Mu4|EQy}HY z_N59raFhjIeu4(U9^46c$A$6UidGJPBzOAtr)xkB!X3dAj92i`^Oesn>jjelRDZU= zGy}ZSe3s&V`VLm^LA8hQey?QT%IH_fKG*&00JF|#;U zxo_w4>@Ny}d(7gohek7W{P?l>gnAT%BS${L8JCct;R9L6pdpqIpwRt-sXF`I{QP{h z92gA#zsM;-=SQ?&B3*ytRPxEigX<|$1NWj+KkeYt5{)jz%z9|+*ehN8@G!o7`}0$V zspb`b)Aa2G(^f)iCaIMtDt!0ZB0~>_Y1mtM8zg1CzptKhU+=}EVDh|4`gC8xY^=d; zcIU)v@l>l%^o4D>liA~G%(5(7be|j9{3s_RPgX}m-WGMWd3799;z4m?ef^iRYH0BAQY{nQ9v(_})lW7?fpvxIGv*NrVJl zS94hprgw9$Oe@tmSa;0*gwh($h*FKA&=4}(6gPb6E3;uaZ#SUhW@oOE=fC;ns84ec z$q=mwW`iW}Q=}}D!e~_}2@Gb0hcMd0w6x?rw>%u0#G@4B?U}5SaO_X5O{L1v@@9_s zX3mBrXV_{mvbLQTE!HXX5@Qdg>PwGo zMhJL&naX#UwSHqF4#3l-r|C)+nrQa-)t2`46}Mk4lkq<){Sn4UOHJMVFP8Z4jghYP z-W|w3_@JnD?X@Q?JqbZ{^(6wdF0cwA87Z2DUp97|1Rt-GaL=N@yi>1Egyn$?NPS3T znL!ohTW?_U^csbE(J0abp;kUiJnq|3^2U9{ITRpU*RD2 z#u$kb8uOtYW5Fpa(EBCeFhm5a{fUOiyz5S1{>2Pet$^@hLDjc>1gmNS#7mprj%C*W zQ}6$qe6t}j_N2mSUj{KQC5X3Qh!ONj$>wJ&2Ejsc;yix#G8dCxH#@5jKK^x1$V@Ou z+aSC}skYEjUZt@U5C{+=4@?xgOabjaMgaSl?(!e?3I{qe1`>@iH-k>K zpjRW)(U4bWAGMZ_aVZd}zsrn{#vyJ_2IctUpUKy#R$1>kIiBX4_TM@q*kuB3w!(Np zu)a{fI2*pC+05cLHYim0RpKM=xQFeqheR#^qR0Q(|2NQT1;`*w`CmdqL;LP#0%d#t zlZV7Kysutq0!{hK{6j#8m7x7z%-^PUx;Lq*JHCh}K)iDBdU=ygtsex02`*igJS|InM0l53C6l-zlp ztMi2uN!p`z$rI}?wSR}6kxd-`6KN?alIxbKTH7rBe2ZTt;^N};8)`W@IRvsB-r9IS zPlLCs9isi+ryf>TJ3CiWlon_WVlfn=6+Vt3$9&Awucl15awk?rYNDE~^dWi#R)!t% z$T(8dn1XmC@|OxBKk!a5QyYXnkbIgT(}`8<9i#UG-w#;q{1|+E>+Dx?&o3@6&YiY~ z7JxvyFEO(0gOggZAbt<%JekrE<0%iX`^w@t_R((j{@QNoc1+B_OSrEBOcD-Vdl|)X zJUTsb+&nx&V;R6kY|z6^zUJBj2&+rm=DT}hdG`Eq;CDpqMNRi-jTnzqrXssK!N&6S$H_7U3y#Sga#f7Thn z0`!-U0zV#}p8k}8e)i@zr=FgkOy}_Mx36E9Q*4^ffX3D9)1`>rrVHziVCt>Nv@`>M zH)RzS;(3d)yr-5kqoXll$nD9B0452y!*w7Z?H?QfCue8FMMb=hHt0*71=mN99z_Dj z;oJzsD;HH^tAg0e%gYJB7GJ2bn7H`s(*mH+*eLS4_rps-&RagZhpP;NemUhH>0CIG z3MXlAdQFu))6En!IpxTZ2QC8Buft%k(s1&?Jl|`EFgSb9^@gl_ET2KVTl$?c)EW0l zO`D1fHIu0C4tELo(Rh-7;?5XoyG5M%4Wc}P7RJNi!eEIOgs?L3-dN9|`(nB#ppUD$ zO)UsOkN((KR+xBv)}@D<@$me)ghwG~FlZi~A`Jd_Li$HlKu#6XUfM2m+Q#SPAYqZ9 za$!RVMn*Vqk8swjkgYnkv=j)C*vvBrya=NVHht*08-8%Ny)yt8@2$>H&x=F)`$yn*!eP4GKMa6P1p z&@(}A2dTg%b3Cnw&)={lHeP-{fY;9B(es_iZ^ zm&p!uyFZ-&{*S)Q&lyt8TrWdU?|8JUP{iv_K%0X!&ik%@RzqaznglKJMLajCMWQ2ET|}t}`e`SYBpvjO*!A8Z^XpZUP%1UU{6g-(5CBT8y4ZK`-c9%cJs)MAr$8lksSSwgbnUW%pJBQc zreRGObXYXr;UD{2y$Kjf&X*RdHcf73@-y%JUT_n9tN-gcVqeIEiGlZHPWd(yh5=KE@(IP<=91P9;+ZDYhAo34L`LmtW*nwaRqb)fzB#MCkE%IV$ z2x#e8VziOFzT*8YXDB(_;7rCVM`y0$v{~&rEqchgU_bQa?X#COlEKGBc4*AUKijj7 zdSX}m(TnfuV()}9cCMk=L9P3Wr%q`PT+8Q3>t}b0=7IHNbFtmP@wt`)RjR!wQ3_YxVG^jckO*`OKB}_g(iNnw_3jo#CHCFTXxD z_VsSO#^DE@g0P?jJ{;)QNh`b`o4Kci@r9n;92fmdE&8o|ak4As_W}cEE~}UYnuU!| zCcYVeQI!-E`=u2YS%D&S!LiBH1bQ?(`W6@8b!QnG8Y1dl{=8FKss(8yk*j_5>B|wD zZ)3Cv?Xegz{DF{Aj0f#^rIInA{R$}60m~PrfRLacXe>CNMg#;sK0ZF0Y5fZ{TvCqW zA2|4m@|lPc6=?bP{IQ}vba+Lz?ZV%$g79+wcyV03J(Q5{3win;jUq-deZYqnC43Gd zhfAeC$Ac&GCcinK6@w0@%M_{Tcokj}9vBRt*3?I|)rW2_Z=^Sucq)mp$k=aSljGi> zBF}n=;e3P`bQA^rL+MKb!u{^D;d3w&-bViVus9skgX_DY_?M7PS|xGJpF`$(zB47`2tEpJGI(=r55B^Hs@l3t~aLDP(MErk;VPiQc#BQ#~jS<~$vdl?aixD4x0 zKlsfqq!clVnfuM4Bi>&J%-)x@eB*XRza?`Ak6ork&qawR5dT#hv4EI-3EEU4%54ZN zVEb_}Ge~#$+`J(5KgS!M=D=5Nl3T!j0p>2}UjY%I5YlB*uImFSYDQ(%p8g)8V)iJEQ6$*%>QDcrk<7wYERr#at(rEMaZed8&M>4zii^ec1^Pl#aZ4BZ z4kzqTA+(Q5r5v&PE5pR|EWZ*4Go*7)^CyfNelmB8GU|}*lZGA`G@<2>58T6EKB630 zYoJ(Kn>af%@o+lD{Z+ypb05iCtG35g=mY8B%G6ss4(Z8pA|X4rTp9V%@ZRoS-=(;+ z5wsN-cSf~Mhi~}W2V#!0q*LOJU z;cb%e^&zmg`X!fi@1DwpeqrhRm87KM-=H@RQlDrY>8X4mhF>wS@x6i#A2e1{EfLHr zFUb+o4fc00uuErs*>g8&b_&aI8VkI&@b;}o>#Al7T``uOZ7@ZWmJ-CEv=l(b)OtE; z;jWDSrdQ*`?7ch24dYnMZ-BAh zoZb8rX$l{MU5@}15Rva?{s#J#>wO_6-R~6MzJ1Hr0{#fyBk!A-aA^;`l^CC#TmXjq z`T3O*g?t1=#N0B6-_N$jnc;`eO}Vn#6dYT?1quLFoT+yV@r8&%L)?|gMoD*QtL&|g zSs>JBNzDhfMsGj9LIo5*!hs_{Y8fE4vR{Dhi>Op4O_ZOscO2wqNIUM$B(bmYT;J7{ z(Q*B{Kh{!JxLP5?FlmJ%ow*H%mxqcv&k(5?>7RL2P27uT#8H3V+tSNRlYQP zZf1LM?vR{s!AF3vH7xj^`dtQ>20V2Cb3}{ZabXUEo~oPl6Zfw6Ki9lcnQH!?)0*Y= z))|B)Jnr|k(k_HRJ>8C42^1U*Fkr*L`NNZW?==n|*UsbZ#MB2)MawBPkCS||gw!>@ z6~FZ%fM=q7v@?oNy#nuvKJ)3`M9}Fdk^Y!s@;(D%kt3JfX%7JK|UkfOo&TwsP zY{p-Ls4MauF!>)rup!c00YhxyX`soh^I9ZIla&yL5|wb?x!kUq{~}2DoA4(N^!wx6 zQc~X^W58aoW5K@8Mol|dR$g9`(L(}Q^pwb&7HEYKIEncwM=N7xT`r&?a~nZGdaOL+ z(jEJ#)}_3)LgV1zPFUxG9;qYI_ZKZd)hoCrpGA%K{e%ZAip@YMDyaJy@dFa%lAJ*< zgwdk+eTZpo143M^rZ-JEJd8|}0b%zFXV3?oCDdtqZ>WLemz??_pc&?A@|;yt69+7L zPO@}haW%25?9yqDJSOvw`XB0iZ0Sto4cXC31pkMrvyO|h>)JNM07J;o=@0^9(CN@2 zp|l_+At0TDq<}C(2uKJhA>ANd(lLX8baxIZNFyQrUHARG&-;G-&u^}oz4zK{o#(OE z#l9<2tp5jw2gIZ8>IxdV95DPDqcCC6=GMdH)X!;At{l*3ty_WTf6l+XjOr&rYYAJ( zQsA+yrLK1^a2XhDQQu{+@n2o|Whe^`qH7+mA@Us@iri$9^UhJ)2q}^VgxxqhL22U+&I}+~B zT)uB6aoD7<>xQ*ad&?~p0v4q`M=W3d;r%2i`<@XaQpFrROh`4ALT3+ z@h{ew)*`p?V5RV9v}S*0y%0#}FnC9bV75J-&FVHMKZ2Ex(22S-7}Vtf0ah@psw$35 zuTG53g{KD%677m+>a&-12SEmsMSRZ|yr?KC6DG=I%qsz?F6oA8!8mO>PI@tw(B1X# zuxymYyv*v@sU|TE(4gXLs9LvC(d6JJlQC&XrOd~hLOXI#A)c`?5UdbMaRUtpsEdy; zz0GW%_}+Cpg)_?V5W<965t+uUKZ0qv(bw$8hYei2i#*fe<;|JtOlDJ(PaKRL)oL{F ze$wr;UVVuHIZc%$P4P}^5<)-lru2m)O9SqLMUFIK=z_ci^;5@*(Y_oS*a(Kt0|?e# z^R~q3$gt$RyJ|d-V)bd>Ue35(o?BTl&PJr3?@2rl@VaoX8%zs{6?HJ^_Pw8Q2xSD!m^imhj`d~c=^dK>5ib*DNE>1IvD)h52hRB3aTQ20&O*y!2NFF&X z^Xwiatrp|K(x=yWuMfiCY}1Vs!;;?Jkfa9Y$sif&#oD5sYWThP@;IlxrwSiEU}{eY zRY8~y-sNRI1SJMz^2?=y>?3{$23@_~_a(bY_}?8tw|p*{z6J!PO=<%zEu;tW!Aq9) zJ4INto2&DCxaPX@J$oMv1}Hq*N-mLkd3k$SoG8izc{ew=+LVNZF8$~=EOzR30F&6; zHK2EKc#Nd)enn4XP*8Vwcj!zf73U@))E{Vc?k`#?g~8$I^6*G74jq!H6pO7MlJ-5B z(4X`1-S#p(=?s@kCH!mD{3cT=ZAWHpEV>X0)+@ly&-?$4fm5fRZ7(b=PO9XGGa?X~ z-H#rokROcAGPjlN6J;1rPjvRg1%V|)I1$5WK$y{~i2usWwS6_#$b69ZT}sa;)Zj51 z^^E|5CN`HeY8d=#%J0>+HoD>%8A;E$^o^Z7zJVMTxmb}(h0=5?xiem<80zUaJA5wW zep@WpCi|ihM3o@aF@gdUbms-Tj4zIiG`95t2<%}I^pg+y3RhT$edp17_C^>huB~Qw zGJASqA^HNp5gBwfZ`_j&=DrR)jJhj&K*44x-3|gTC*7HOwja#yJdYLH+Ir^U6;%wb{7Aq@=JInIXbOm-OY7Lz;W+mdc2``1P2TDP}v`Nep7HRuor ziq+O~D3p&YvMnQ{oX=R0HHHd>H)Ks<|Ao@5w_tbhWe>dKGwH|u2-p#Z=-N1qX?NF> z9_4`tS-tRuB~4I_uv6m$ zK9~NYC54rsDRbE!*nueIhu#-gHnZi4QQ4^3uH%(4?F|~AcRn?zN5K-o=Uq@3J>6Zd ztuF#^Vpv%dM`uMG3{oTUNpwGPc692J{AQBzyi@*ru7GS#(YHN%dHHGFXI%`44#~%S zS&fIcAOw9W@hH0q6hN1yUuqogI<93~@A&dzg`JV8%SKR>=Uzv5!*=L|Vs}{C>wsVH z+*vw&@C>wHxEaamQ4Cj48+?C>YC6T@(6^6XE;)wdl`!b27?;GKP&1g1ia(p z5AN@$H1`uTyo|CW?)Ta|_WX{<@YS_`-Ug;X{U@V3ti?}GVc(ms1UEfwFBgEDeS?(b z1x5qQL7ZI8p@2n?k5k)KKAeT%4pYDm#6v_JCe7-cF(5r%bk4IY7t=&$NOvb1c6|yD zbA0nNT(+}tQl0UMpw(^naSf!V`K$3nE(e%{YNUS(PZpCmN<=8Ja0VF1fr?P+<}x<&qeX zh+NTq6Z%k_fz)@$-4wAD`Va!VXJuYE8W?47@gQL7-`?{?BMbKyW}1G82ZEc)gKR?{ zCL4=8CEJQXZdC7)qFN%X*$;^=X|JKvM^w{#e(N`I!0u%%qM0r5%SYlWb}?GB37|^b z4-_z%xdGFa_q6pvA0E@{ptFg942fVei2S}fwhqf)M9M1V(^4P-Px5UHHU9M9b2IUX zwQCX|Rx!=Y)MgKc`aJZFEPwS~MHzv(`s;d?$fUXR2LDy7pIC907CyvJ>?z)F;4w`L zkPd}z2%PwY1VO!Q2EYv*BM@j#$AGwnE~U;6?IRj?d0yP(rq*ijcdqqoU&>o9)6i>Q zr>~6qlPM}UQh}VAr~igmHV9>$W%~$(wnMsmi<5ME%8xLpko&+o!@UTm` z+Q)cVxZG;+co^%-RU4e4{!SZ={7s#y7KpZFnP7zU*xc}6aASu7uljo+_{B#Qa4AgS z{Z$|7j>$mjKgUMkZVMh!G_&`~jfF6x|9(_*VN6YEI|1};8y2rA@UPipCDPRCi~Yb6#16SUma4xg44GK^_VO9kna)S_4Yf)u4o z`IpyatecWFh7Hw49Ch~z?jzZ~r%kaLtykqXm9W($rrI4ZyOBdD?r%tc(n5DxH-%Kv z0g5<1qsl+WY33jM(0n1)S)73;G|7C#OWV`&@o(P)O74GHyfq4Xd2u9o6Ocjv?!S?h z1<)Iyp_;e0$U6eW{WGi#WS|KWcvo)P0*p-vwz-t0F=&vbLkt(`ay2gi;au_ah!QGf zB@T;|hR+{(8@+1R#{18SEIG-Ejg8&IngKo2p1L8Hkmm@bbhJU2Hq;IeGB)G0e}Mz3 ze+7k-JLh?LZW!Y%l5dZW9<=dEO|7l}%CK`fnjDndYtJ!y@PXBz3Ki5{#-y$E;9fAv z!5?N3ZjgD_=OB?ds4Nv+1n_g%t{jKTqpu(+FfPQ62Fofq4ag{ytFlZISS&i{{%`XV zw<_&?T5I!rT_J9&;=%ZUHBzfnTe4!zx_Y3I7*@eKBz?&rv=N^OCLrxDo9=tiKUaPN=vA3MikF>!Z89l%BnZdRZgX4ixvIU&D(3f=}?r(5Fv2b zgK$v{K<^L&4kJ6nB z$XUi!k|mEcHf5TXb21X)0GpHg;Bd_UGFkO(p)yA{SsTRZNzpD+O!iN56|$+ERehf`@|%rhfRwShkuk z(OveJ{C#)@d0>!qOQVJgOAtTV;oMs4ONI9XOiqb|d=nI~Zth5_G#*jvVC`@6V892| zRiUAWPwUMu&P`}r+c}z-5yAN1H2EeXw7_5EzeRn2=WSpn@3=1;;Nrlr?}`J48F+vA zyFoaNlUnQ2hinbpSi{6H+D=(M7(UqX6kx~Irug-QlbF=Jyoe_@N$)Aa1m@UTOtQh6PQ;1zQg7M5|`JM{dlY;5fd z3nmM`l{(?P1SWU*yI1`to_f<59gYkPs8i3aK77p*OTwPLM7TgZ)Akh5(eHRr`8UOC z%d;q(Ub40e)JuwnmN&DG;!Jv(1pHGA?%sn}=tp znhPa}yqmUT=E8#q;rEn)GNOrTh2du%>6o5{!^f$xa*F_JcI7+80&rwib=7oLh+{a& zZ?1zB78bi_(qutHKXJaPRoF0v9lfuL1C99^tO26qHU9g%j}Ow-QIP|ffr>cgjURBm zlzhZF3w<_Y?zJnj4QqlPQYC)GcR)TEj+d=x#SMrTMv4uXK^9sS74}<>z%de0czBlu zT?m3eZX?&}iD2#)s&=gVW)mEpZzJJF_%MU7Sxs`!GRf+3XmtP~z^x)NibcZG>^A+% zdF?qw@asD>_ovYxkvutiP%=~9piQ*8lTZK!)V+3yZ?+WYM();YljLG>{L zfy6tREYmZWhMG%9Bf{!hqT(N+f(XcnhiF z?%0%ZA#iBcepPpW<>A6vC2F%28c&n(#M(X;xnWvUQ5Rd*1pI22zu(m~{`+f$=LR5R zFc^>x#PL0zbbJ4=3ZjZ6M)X6^7z~V*-=SB890?Xubd|7P;ZWhqRw00r%O+F7ZTYcg z_aTscM-a3NcRDoM7bgZ#Vo9B#@osPImKG< zTj#jE(eJe!`lr&Q0E>fsJ3X8w>CY@-eMdQgE$bM^@S0R)0oz=~!&Y-M@6Gha`t4y4 zcJ8dK=Y$Kug#QOy$kntFM6g;z?tmT!`n|Z~vo$OS!O+$g_L+bZ{ZGA!K?&@El*ofw z8bjW?lENkkq27zAyr7n-D*KHrr;b{)4Ld>a__e5kZ*mKP;K^CD+t&96Hiw(B?8$Vd zogeu(=`x#K+i!`gX~~TBZ^h64l)7}!`u*MulK6+B`p;8n<`KfebjS>XyJAsqVR|G` z?@>^-CjbxfXDcJYGGyC(n1QCyhx1~?M8%Tia9eMz*+8%0Jva{Y#{(}*7IEooau*{v zp*OJ3dOZYEf^?D;#_!46SZppDwLU(M`)|k6e?JQk>gY}Y;Wh&Lf@R-(fdShL1l@@K z(^er)$#jJMcy8kDrT~RL)?{Ku9JD$3c@iTkEYbmaL2MXOCgB)fE;~b1% z$R5YdK9d55zEYxD<~PEHOaNnE|93Z_Q61HWfDjfC58Wbw!IJL&x^pC5nHfP2!;(WF z5gUn=aNCDibW#xbE&=q*ICeanxAVuG^lw)jeZDQU((GdfNc*LZ62re#_kWypQq>2V z=^ZK?g|s&rr&U&c6$XvNH0$dZ_R)o{KT%)lVHGB|ha70s*UE-(vDGbGANyH5Vu1Ps zHB3=n#R06Q3XKBROyhyy%H5;6cj752Ul~`bYqda-RHiUAsBQgaEXqDWfuRir2=~y= z|D5rE%Bf?SBFGu^%e={59j@|-mZo>XH!W7j*CY^T-kJCM(&sgP`l)BT{c_uhO$M-}W%P8;0(3LiWGhx*H9C zNlckTPKhl6^R5;#C_@<+~!1zMn#^jzWnSCutF8)Ha0X;;sQ=4hI@M=I;TLh z#7j|gZ41aP?P+bor$f0D45(1f_8H-=k%p$~=cy1J)`}SOr`KJoY5a0!$k z^St>|McoUWv1XxHy=kF+Sx?3l2bT{{cTeIdqMpzMg7vbHQDy!bHgBH-#(Gc0(~wpv zb_-0m>=~_SD$^zbR9FYxS`Y5e==E8^bXX(-~(!(o&Enm!uFEN*b z!yJxAeGr9+PHvboJDcy~%HzI&1)q6d1$M~Wbu1yEwzf*#9}uh5TnqeIZo|`e$FUS? zv6E0n3kR4Mr9_Ri1N}(8LLkMj#>*aC@&|wzt&VZzi>>iE$_DL*crWr7w{BOfrI$yI zH2;IcFkfkx@#6B4o(G%`;+B2f*xl2$kz9JmmUmCy_ilbdkgiD_r>4cV^rg(Axdh57UQTZo3l>yXf~#en*ChBBuV$gkxpWW6W)%G4R#q z;#b}s@$=XEBqUQe@A60`s2cRE!7Dpm)mN7rD!`x>qbOr!->P7lqzLo!{2O*#@|2_> z4}2Jl(tIrE&qj3`dJ;S&td|**6Mb`(qjNGFU5dZG9Jt+q!2va}Vo?HO(^$MPp zCw#^gNOew^-G6w5U(a&(kp3FFua^KWD^>hmoDR?w`SdS%)PAC{(s64Pz}-w*-M0>w zf2h*(SqHni{m7x0cAWmW-dCp>MiJ5Vb7a^TAJS|~gPI3#)A&l&5+|XP7t&vTx6Fc- zvB}K8l2GzSwP0C=IA;Yu2=mmsRF&J7Ak@a;F<90JTnG^a2H!%Xnp6{lC`16jGqgZI zPc|P9qSp(96Zd62`4x8W9#z+!-wV}0Vn9+hns>*l-ho@YHn6NV>9Cf%vS5no3WiI% zC*Slqsv4Em(3qr=oX*#Wtu4MN!q&w_?z7EFbzd8bQJ1*k4kMpE-?P01-=no2U|hiy zr}>A!N(?Gjt{U9hPxqJF?ALpl7n-Ug=38DbwK@vco$k)|h^+;>@`(fej-P*i+FxjC za$W5b|L%~&s^J_7G|;T$@|rf++b+w0ZgRjU`*gV40x1W-~v}Yg&)C zS-W*_sFRLBt+xEmVA(Leu{(Kl*UjI+{m;+!GmGWX+ls%FXVrYu(`P?B>jI2@ewh?v zUQ1-yx$**?sQ6HTCYIM1soOv$4kp!1vpgT=)EsX$dn*M;Tya(!w9bo1c}?bepD5sU zm!feQat{hsX9vFP5Z$swAGr1^EJWPbOnpdzHPg=f(x0(!BZ>W7X4fadaSe>HmtY#5 zp2nxnwrl=ThYxM8yPLSZgBj@hDVpYXoaMQR+QRPn&i>&q{pniSOR@IIaVD39G1<41 zUW@e&Ev_dK!mOm7m7sWU+;dSxdQoJC#p-PJRtw46`z+_Z5?jT2w4MN4GBT5>J202S zFQL!H3>3N&sJ{?-!{#+V5&Ww8owW08ZqGtf*9&H+aPlsX2S7o77&hOi%as6dO6bpA zDGF5rnrL-K5sPAeFO-Q$4M zlPyn=&qg)ykaa^I7$Isax>p!-UC;dxsI@>%iDnc&mu!OrW*dUg9 zM|^WStI`R9Zpq6oco5KjeR)d5K9;XR!~9p~_9~|(NH*cZNFk4yrrVk_p!)J`ch$dh z;nQ4SKZ8(5FffO#(&JY&)BG2WR5(WX1sf*ESWFqu&uLH5p0Mb#G3?N)G~S?q5^osgW-IvYD;=9$-w_ z8G37uIr$`cm-FVY8)s(j>+55~Rk>66AG5Hbxk$~^)eM3xh4484%RbFwmL8(a;7`R~ zYDep27QS(st!lrJdkvo zA_5s(bTIZHT*c~H?@`ajH`gPhb-FK@@s0ERW{TKaa&|<_?G#6nu?g1ZP9T!gAm!HH z;-2*6$*;9tWx(qYsSCpmV}{kh3$wNo4Qi(pCUN*~&t4I!4F`ec1crl2Mvy`4Pa<=X z2N1EUy#xWAtX@y{N3z$NJ?dTL;Wk;g0tVlIH?dN@NYA=1*8k<2`e3T^P1ixpV}f^x zU*Al~pqtICESA7rm=41I)(*TDDc_4PHm@5Vdo90zWngPN#cR^>%uE)i$t@;&cdjo6 zat@CsWfl%AZN46335EC&gzMRkXM&1F?-XXWkS)_-O@i^JXr(E6^$zC;&EG6)2TkR0 z@i-+Fyc?0ZOMCUECSxw=9`hX)qq!!w=v3QQ)`1BF?UAqgmk5dY75@5bJmZq}XGlqHH|J|+^i<3G4tGe|>ECdN?F#dOriXV(i0>qEvfs-k6M z4nJq>j6UrfR&&GkYr6$m47C0T)?z?U*p}Ze)w@281ZK5IQ8=DgSJ-NMT!t;j* z!B1PIrQgPEe)w>*y^R6+$(88+`SZgUXd6CQwosVuAflq*r=qkF@G@KdKzg(>+4fpy zkMd<6%@a+3O1p_NCnE-9)?wL#Xr^_!e6{p`Q_A$W`d@BUeArp#BeWKN@a5`UTO}H1 zh%j9|FHOJ75Y~;RjnEV6k11ao+k~xK5sWT3evh1C_SD9+~o$Ml>oeE)Ex>qM~B1oImG1ks(}(BF6vR z64`pO%=wKc5Zpf`w)Nl@j;H1T!46-P@c3!KqH8kZ8$BW>|lH?mdb}W^EMd$VTRB64>}caTcb)DF|FerlwqI zg=E}+!Uo18B-f=Rj3u|P81hsL-V!?QrQtGI2PIm$34tJ^(ad5N&5=q`J0OUpW{M3R z)iKxNhN0vmOk=ieG7KehAcz21lQ_L;ev8N@I=J`ERRbObXrrG?j5EgW-vDFKZW`nY z%E$8N7aLsJ_8|&+WF=N4Mp&e+A4MTqy|AW0=H2$D zmpn9&$OOR=ZF;z%$Aqu!tv9eZ4m8vp20>C-qy$YC2+-##f5j^u;C{Ax85kZLkJf|Q z?iMw=|L(x6`k|KnAZ*&=>ZbTWX7a1g)Y6dn&;9k)qFuG0HmR63d*V=7xK03v8!Z<9 zitKM+S+!yGxBJ(pQ)>+KB^DvGN->Ae(@Z&6D{&y|pIV1kjDej%414(KQA@J%crwIP zRA&^ojguk^LM?*!ts{WWQa>BKJ?c?GXFPC11qasSLcS>CP(>a+lY6e{Qjn`4tK~Mb zHP>Mrv~F_YSK1=1r*pbQLkc$tn4{m-bVa2M5#4-Zh8^hLzN04*5bAxHJ?k6U#}pky z!5TS?ql3U{pLP#LgNm4yz)*&3kw;2{m&klN7a7=FRnWt-{tqS6S< zWWNuz%(`I!0Q<$S!L2fv-p#S1%3$2INp9+Kv_i)FTc5-hr>p?e1Z$BH7h`w4Jt+_m)Mx3d9hF zuZNb?YF#@B{IxJ9+8cl8A$cek#~PzUBFT157anlQeK>gWjiLX_W98Kh_dauD^Sum* zxux1GOAs`{WGY%}JU!%vD-yGb!F0{dMgSs;{vk1MwYRBlR)QTP1Fy@p0L7p_7M%;I0RB5`vFR|ELeE37d?ozcEt9&hL z6ld-4(suD6V%1GA4<70^ScnZB-3LMNN!DmjM2@$FO0CtuC}e6OGcX^oe7xevIC+^9 z9_XL?y?bkMvi;@W^kQzzQ|mUgNra8)$b0Mnoa z4bIflPSlO{0R`<5Q}AKXNy;F*MFtj(Lq~RE5tHbGNa> zyPHnF_G*XuK6>;Bk(rxI-B_C@^2sFk!7!d&jmfdAO7HLRjejnVq5kIq=i_ks<)`^0 z0s>`#TZ`+DdTjNaxQ{&O*lLrlouz;0#AEgI>%^Q9fMm5_?B8!GSn!dXY2U5xSQ zO+e*M0_S+Ghr?n0b55RO)kJP{!*QN~Y^t(WF*xf;;tl}=mjfBR{{5w>0CeLs88iP4 z_>fYQ+3>YR%*XYM9z2>ql2JA{0K)i3R&xX|pMp!SyRyf8uEu$xTKUtNm3stXq3Jj8 zN;ZQtWLzAfJ740AnWC8gwVH;64980*o0z++ z!UPB))a+)11t*suCx(nZS)D{cb>2Xrg%$^uujdpVX}iX(1vL7PcxFfP{q;FeVvi%- zJOWJPznzJ%V5YIauTFcdK3ekbrP9) z8&PHmhOp_%C7WPnJEX(5>6C&ye=OMnZucI`##-@<+B`+yP0GbsF!UrI)z1 z>^5t6nc}wl{pHaLFGjt~&mjQAuq%4_(Nw!HX0hebJGjlMqZ=ZV?#Yu8atshKHa~YB z1P@|gsZu~X41+&>7|q12l+xrpH^-0`SV}JU zf5N7jrChmofiaf3?|La+$qbv{{$i~j^^!Z_E9c0BsGY));?Va<&zJyjA zn1X8Lj;mS)ajm+#arwXg5IVlTJUa>UaG1!}`QcmR=`{QDPq9|E!Hbd*FQVso3BuiP zDzbgf0}{tPPal_;yOO_%M^_@Unspz?yRq$Onx#9Z8GUy&mC@Jm@{@5xuzo|~LCQ3~ z_R@Kn$h4Dq;=sET`@+>-&~i%nP)aBqA&d{vr-e8(=;Rqw9K90k4FgBWK`3EbLDkQ) zno$$Q{pr&Afyw~1ZY*BwwAiTlR0>X*Ecl8NHLAXSx1?~e8})WJ@;-QBAr;OznQdsu z${J8x$4vw;G^8*mTygOOIB?Ds+rh`q>}%}U+Z6g(T)_od#!a07-`FTSppSh5Z)5N) zc))R~EG;twNJd^nBCR3ZDO2o8!mio=F-DL)mQ9v>az)`Hh5GxL>q{i~b6k!4H);95oN(OTrt7;!Zh;r$*T_D`fKjCoa_1(|HhB%k-9=HK?c{(M*<03 zwSS|rnUh)G4#!YBM~kYLvT#J>KyK8u?9m_^Qfc-0FkN!l z!{g`24Md5r3Q$ZH5+~Gcs)=D=tG-%{$k2acBL}b6?%LJW90#o_kQ4hn8MZVxT6jro zO%OnPv%|~lGq3<;np>f(({s3x_TRe`gEAxJ_=GIY953Zg4Qs4YZMT=yMCBo)Y~DXU zWi0)U;X$ze#ZBRtrr=DtyGv&jg$NEBR*dV7CKSC_7#xI89Q6D?zVKEr*VfB9QfMYY3cg4tW48ZQ=(#@Cef0!3H;sg)g>Ic^shmta^qp_x zG}|6fM35TO4tW&FQF}0`N z_?tU#EHUxD)=n)yydLc5`|3gT!wd^W*~jg89q=s3&O>!ru&b}5$-qmnN?zts`!3Xu zTf_T1dTE+!+xa-%@4BTc5O;K}%O`_BifPjuFVoC?iI}4N&`y_sCvtMD@StZ`knu@H z-`_u7*Jm-vaCs^?}Rx!AGKt2+jZe5;c@)2=j9eY26~*|=IVc9?mtJM zK~{u%->+2VQEpNyH>Zk>RQCMk&b(sFoe#@l&e6_5t;|E;)*4-h4OP@S>Jzc*GS|>1vON28pB&OQ9;4L&>9Z70ku}c7b7(^DyL5WosWRHvg5kV zSM3_>enmpHmr3i>x7fL8A}88`tE!&`Md5wNUj0Sm zPEenxS)j57o!wI8w35xwnmmV(6Q7E|KbchKHhEfWLatoP0;_lOCm#Fs2FQN@C;hGD z8uXN}nxYduXz*dKoBFI@yVE#fW6PWg2=jgU11X}F-!*n;)$cx`jsLL&fk@U@^L16j zJ4reP2NSyRL43M z;%vI)YH+%8ehFyFuwb9yBf)NG?|m#X0405oXQ}2*|0~fphs}q4;RNZ>6WGg{hSV{y z`+@;uMcyAGT2urcI@#{Z|8=>T^x~c>d*QJ*90Qv%5wCHYtoJ8H%biyRP&^;h^JRm= zglrH!$*%69ahAl8VNAnpK z!CPpuYY3g@?y#|zE@7M|F5J1a7Mh+7*n23EGP?WK`8&+jPAJSk50yu1J)#VPz>7U8 zmM7a0wf!j)`a)FkhU-!tl2)=Y(iM+H=z0_~87w2wpgKV_kWvO?WsU*hThLKq)6wc0 za`|98iZ7}h>OmB8;uSzgm^^9y9offBHYZB9N$4C7%W%&)PO5qv?H%NifTPs0X43i| zfi#cKuQRpyYK~~1stm!Z$oEfngQt_%#>zXqkB)gqr60f6^f~GYaHFOgr9M+N>E@c@ zgW3`6)~b^#2;wSh#1~VSQb`{bW<2&{5SJLue371L5cI`a5iY0>8>K$P#NBQwX+osn znS!{9j|YN%j-~GYvZ9Fp@`W0%rLFD5bnzB(LH6^Piw^6%KEH&h4v25`!P{p_Jd!($ zZEVq4neVTBZR^cuHeO#NzJV$!Kbg+>d?;g}_x^ie&QnzQNY)eyB%t)K2GkOHP2#A~ zpn`6Z;qbCI7r8{Q$|Fm~gupgr^<9DYP>kuC=PIj4ypoHQG z*PY*Knh4NbZMmADPmQRa(M2--H?RZh);hb(BfXd$sG`^#gynL>nxX8xgdoRh1lONY>jom zxCi{R9ij-~M~VChG!BqYb$jvCg~q$FrX00*y#KCRpmE`wY^})FiWBMJB)=s6-WqUE z5{y`GrwHIN*0|7v>4Cc6mrPgnJ9`DB5G`SWbC$tlJq{)8w%m43d3Zh62QUV7#Oa=$ zI#>@sErQ*bE~V->`(jsolXYbAyLnwqkch&#CsAsnuhj12#oPOnXv~m9y0OpcD;=OM z;G@w$b?))SP7&E-gG`mlT$*YFQI*HjZow6$Em8hEmx%G_e$%c~RZiEJKky;fOYog> zk($Fh0}_6{$WIJXKEr5~WT{Grtd3GU#JkQ~vjZi};K~{Wrc{y566~c-O4Pq&znH3L zDH-;;SvKPBYZjJ>2SvZPRa2CDSq@$eSwa=3zMt`dpz?^AV4~N>E+@F<%5&KSb4_1* zJ`XSisC~Hm48h8{)h8a-;AREBkKLakg64bjMS!2H;_no`>%gedxW<@aKmwff_bKgu z+Ct!Hn2kD7y5N#^T*Oco1CJ9)#|XzB$DLj_$M`cP&ZHEM^r}x@KjNqSe`_s`aVBeEF-WWM|GzfQ9a<)D++)ep!M2qdJD{ z-c89oqV{=Dd9%rw;jm%lyI^gl%$(c`Q8nW%>;OO!83hD62Kv{qMd37Pp*M*==<+F- z`|02VVm88R94MPOpUUUKbSZ46b>92}BlY%3g~8c}&e@5_sRIKq@*Zqc|k!2UdSaOABg{+$K0)tQ?fj z#0=6f>q?z0-2%F&!U@UFvoMecNU@CS@Jf?eMl{0@7-A6Y^YgP4(@5DRo96Ou1W)6) zUbe@N9(6+g4Fo6L?k1P|e~Pc^M2lB|G<9_dezQ##`>mAkwS#JzgAQL;zf#7SQfC{f z)KiZix9yEgV~w!yR%!-5CZE|1k=gUjMIS?A^<+VTWMkd}&l0Lm&BG$Ch@c!2G4aci z#EqdZx%l(sVrQZvprtP=l)k~l=HK1l4*seICW7*#QH#c@_{tT<#ke~-q2y1<-k@BG zpfC{RvF<$-GRV*eA^Q~!!sVy^3q5G6g}~?s?)PfSk@AnZ zFU)8$DE{Shk_aL=I*G3kw6T*5ffRMgwMW3QXE%dbS(~G~w#$7Ca!qVDzgs6(kbdiy zC35qDVE5Gv55c0qS2e6pQAHq8Yv+Zk5b?l6%Qf8=KB{&4rHF@MfvHBlGUIRm+~xm$ z2uq_c9y@#(l$Zo!Vx38$0ta=6-^&P#evw@4){mC+tm78m;7gjr@5|^5=^>(r6*B%) zTJ>kkIwumk4Q}n(K7fZEsjn8OBUst2@T6m2s`?k-7pWlmXLJ95AA?5mQ+Tne2HM8?dNg-jxXUFrPo zEChPIBb%H{@UK+=e@{;hMzB)Ry61bLtGYzs-FM*hOW%aMvA?z7NOZ9aDd>j;gP~sz zn}h;`I)#q0vYxt`dF>$~pz6Rr28`U~=09IMW*p54?=Je+7y2J(2*`>B3SEbnETX^+ zBRto_?@>WO#;j3`mfLeQyy~@H60hx@xK9a#cie;5zuiOU30?N{6uJ4v#P->oZ9@zv zhHT>PCN(g6*IR39T?_&;$*C^>4D?OY)AonrGxq+v8=+NhxXMl3y#II<<-#k&u@7vaQr#Vp-r}tW- zK5N}x)r`dhR^r}K>2W7>&tSrzrc9NmcIMMWJJ&# zno-ueOZ%#uafMcOLp@zgT3t_!E1Ls;*?WrB*rXxafPZ;!Hf5ji6)o41#m{SY+12S& zceS=$sz#ewXWuivV3fEu* z8^&f+30B348ml_xuLPrVwx0Jcw`@=GX7seull&xejt+f^ANv0Ddp;gwTWs3gJ)H|~ zC<6>1j<%q8jS*^c7<4St`^au_bZKY(*4hyRq9ONn-=@`S@yUoGpK&^5`u^tf)Y$}Z zpr!>-GZpuqGE4gvwu}hxYBM;gzHoX&xw<>`jINkr2=GuRwu5V8- zj+dD2s6Mp75)+4V6|bgNkQ)smK02beMV#&cs$kSp)Ia)&e^xBMQz| z*2)b*9T04mktmj$q(lOD?tijVkv98O-~Bp?T(JeVlWPsT{wGp9si*tV zZ|8ZN7DWdDHGjV+XGWMcjMmyO)PGaXuVH4w(>}ho)0;1Y>D7se>pO;kU7`5AwgVZk#Lt^_XTnCybRBf;>LjGI*{>{#rNO*Dw-jS^WZCK87 z9hFulnJjjEheXiqD^nKEMJCQ^h-(p(W0Sm7h z$s~!8^?fpsCiDQbw71cpUaDA_T)Qo$9mFxalQQe34#?$O0ZjkqNHR@lE(gD8r4AgN z#yFlk$`<45^k8oCwE5YN-~Cpg5qz*P$N$~G+{r^{{p!*4Yz2ajAx9aGk+I-f{I~-3 z^lrePJ=F;+S>i~r;XZJP6O#MpG!!5*^*1aL*Ou{;8jxo&w-O^jF4< zjkKkot1H>);zI(c#nYGCV)25?-wOP-onF1b) zz}>{lox`-Z(#q@+a&1#vITF((^=LIoKZY$<67q`pvs+woSz)!*fOb6So+(%6kAxEv zecrDhZuuS{c#(vh7?jB8SPDPl2&3oUrdwTKz)(SIoFYI)XCP2-5fgAza*6^Pu*5YO zWZZuTo5zZ}{+*?93+%_p;Vl@j{UX~i+>VSM9?Y9}j-=$w- zAYi}tEaS26ann9f3=GEBTAaVVPEAIk{0f0NRlqAOsi-MOo9fQ3UKVMYU)8(X45k0` zMy|ARWYc<@gxB9BukQgm_HIk;@Q3A26aN>7i08znlOfX0#veavb6f!Ut4GxXfc_Xp zMSa(fI#dJEJ&W(J$kX63oHpeHUJ3tUM~2f-n`Z)`RP^z3ixSztO3vDRqkNwj4eq)F zQ!9@PfE%O8FUGW*%jz1FqXox458)owGOaWu3! z_v2dG7>yHl`3#>h_T(PqP6w_X+Y|=gVQY4~(tkvJS)J29$lH7AZGSX0_@Hk8@v&#F z_iyz=j-MMTQ>STDE8!#x-0hU#wzPwtMmRllM@5&WMh6GtGc)MI}w_@QYeqYxHAoYdnZW9=btD$)?RyLI?jK&c*&ea>kL(Rd{X9m1s~D-M0Gs z^<9bmf9iH@{p4tX4U*}%^gB}pN^I}H3e3BP=Zyo_*{}wRY6jUX8^81pQwRjsGSiP< z%Fd*K_Qlz(V|UX=X3B7J*wA8bfS|mHOy)u z%(;QRSTRr{6e5+H%!b4njDOYd76rgDLh9P1RFV$M#kN}YR~V*!a8UR5$u5LGd@7}a z@lIFXJ%&99BJt4y1gp8Fdh>f)cY&;v{vEK@t-}0`^r$(Px5xYs_jyrA)6&6q_j6w4 z^Ae353yO=!O-)YIG3w1u%NsBtx3RX-{lpS0L(I_*0%>uO2@!|c(2#ff#9ni(dY$jA zK-guo+cg6ffhUAc-`{FmM-nOjK-2Le=OP~GcuzkMl~CfINqZZ5kRIx`P8fYJcq4hb zdsC7~NcfrN>f#5z_{_Xkd0al+N+H=WRNIlJ*0H=X^DRc){{mTjD&O>v5%{+$UtXnr z`B=|!E#X+Oxmf5QRIYLNMok4wc3y+`(2zQ5byqW6VjcaOs9vlxhKnChdniHhre6vJX{rg?5`W>(DisGU$kLiq!9gniu#^4ybD)4CKR+M9YClT_{*(bFazR#Q9BE@ zzxbHnP?z1q+O_Y<^o^x7i-$~m$JtbfXwzeO ziJ$l_jFW)nZIVm8Jh(L+S z8Q#w}k&rdOqC~k5=>UVhE70if?jAoWN1$_DzP4?I)Fy%$LSN{fPfY~m%B6}aXAoiORIsg0 z-fiH1n%YBLG%?-P;zr3G@bTIAdaB)s%i5ND+MU z&#u$)Ga8pbhkCL$c7#Yc2`uj~%ki&<1CxfLmr|D*Ap}bF(HjRr=$6;gE{$!e&fA@> z*pu}~^OuhOGz#G9##loma*Jmvov4e#eB+l2DU5_R@Q-wpD0jzMd%0%d;rI`(c)#uG zW7!s6hoMSFSL{*5YUghqbSm;%9}}!MUC>AKsCwm1d*Zeo=*^sf?CTWQqG^AUB3G z($zKuuKE%=T(p%pj}oH4VjiCGMLFQmX?72?Vgyn}Imsg$?Jw4rlDRVTFq!cO-JPbJ zD$itC3m!cUw8v+}HL-uQ$m}$Ru&MT?s4sqzK1iJ389}N&ba*TqB)t}_LgwRYIbeqk zQJWWN!Amk_gdzMPb!E)$Ov5Y?_=a=rVYzb?rx`-iM^6S9$K$l+Q1N;dA!PESp{FpE zQ!Bzh3Y7Bc7heqqgNQaZ|JJUnn(;Mop{5ke5m)3Q=0KA_o)oHtg ztw$Dsz}MVCAR1@6Y^*9Rj|;<@f0jbwOo&}70elBb;#EU-9uB!D-pa-4n|%HnGan95 z7<5)Cp{9c2{#Y2A7e>~NASl7!av?xbeW3_<(sgs++))3AsdFxh4$jscOti`CYp5-i z)vyMz$yAeuELm-hw2yFAkyxo6w!6n~MS(DYe+08Y{>MpTRxS1*AUN{doGm@Ya;W8} zKs5Q2WAzP`9IYxLK|+8fuv8628u^SR_XV+bt%T>~V`fMT(naDLD5TKtjO3ZBGC2Lm zp~xR-v{*<$`ax?H87C34GOo4yFTz(@O-tHuZK{Wi(8SvUfJIxKMLx8~!{FDg;{9{_ zSGFa>01jS+iT0lW1l4riMnLT2TxO+LAZ>!&59-&pWr~C@?Dg0Xe|+XoW>wYBW|neg zFfcf1;LG1vtl}iZRm*HL)8on!ov|H^hQe0}QE6`k`g>95yUv^Ar+35npQ#i~Qu!dH0;yEgfIuv502Q9iMf4t)FW- z?*1BFAKQrdTgDowabaTv=+1xg$pZb`xN>~}iRM1GJ6`xA|4n9ruwwfft7NqL<8eqA<|j!Cqjq9WT=f*T>{S7glGnnR;Ndd zW4>Ov#rQqS^UtC6&^=2N`8cWO(EpX@weoP9l*`iK;jgfh?zY59gfAS`S=i=ziS z&>4#{z<8w}BLNx7R*`H}jO1NR1@Jq>39)`t|hqp4HNu|=cONB+g%=X80|4chU zAGHaBpkWro2ZzhVi9n`!b06`}n9E?4urtb=FbBN&Q!hvOcmiQ}697^R1U{Ljl`Jf> zuA3kB7YlD^;%^61o@~5q>I9+>tsijulfXit-KmE5fV3NZGAl{a(^mj}h zocyN6P-d?me+IL<2PE#T6Yv8uWevSBj5A>XWqXLqa;W^bw zvNd4n=*1MY$;EDuI`~bRS_}y+4Q3WdnQuNerEi?lkM2^aOCGB6MfeX{QI1>>J!z@x@y-~ zc4Sif?`fdi6&VR6&l%JzYz$|#Wj|&Gfdtu)ZWGq7KSca^o@rz8shotcx;S-=S@`0E zFtFr_Ucqax4;vHE>JYqy>OaZf!R3DcQg>%gMbaca%iBY1cp3=eMU%~K#Rb%{`yZj? zz^5-XXH4t%`^#d-`^-O)P9Q?q-FnGfB)@OJPvu;DdHg9>`x71V5Ta6AIc~H8V3w8Y z5t^w`CG!H_Yz>r*)xg@P4w!rg`)Y$4i#9q(dumlXbM%7h?QhxHdICd!Ke_X&S6Cx! zJ^>(`a7^$zeyb`oyh^2yHG+(W+ZM=TWHr@mDjCA0VZ9rBYJ5IfVig`^7`LA8Iik)U zN+aVfp8!y8e9_fvAcHHDEM;O*bueP}PxurPouN*D9O)qCJ&*FY#iTbC49(R89nn4` zB#x2Dk^17Fdg*aT37qvrii|j7Ife3E!6VgT>GJ;fPC3kvh;aOg@q@*8mYNJF6^Uu^ zwsnR{cd5T=I3r!$j|(H3;_KQlAIqm0g%iQ$+~kHG(#T{lAv3s;PCM<~&+}qD^L4(p zD&I&41H`tF0h(GYxR8Efd(#@`>S4#V2GxnS&Aw!5zZ}C)u9i-3st17_nCg+380#Lk z#mmDIi&y+1=Le+v-OmJh1~RZ3ZID?&4NRSbER5;N=Xv_-E9X1l@ns^CA%8Y$adTAk z0{ZQ9s_qUVAeeKrfg_@E7U1yoQa@wA5vfL3x4&>}cl^{*!2F94fu{h93P;DHZ1DJu z=Ga^eh;T`055n%NnWdLa$K=ZG&STcs)Deh{xl-;xPzO47zR@3V+0_OtU(QudZFHBh zau1hrp61VQqpZ%ZE)3O$+@uehmY&NMKRK|zL5QZv?i_(w#hOG!qbNBml#LQo?@xDA&B@Glp5nnOQ_SBCP%A`{& zp@FMld-Adw2l7_fKGa&{2X6q{81O)k+Am?6ZKv==xeALvedOGM2g4v4n3RuOJtAcN z)Fp@=z>1$Uw{`yBWhRDR0^YdaC0b$f5SYue(mviCif*hjd`21|pPWso^M-q3+GTDF znGE0vz0Z4d#Z*SB9C0PSuI&GMvX}KKCr}B_UuV>(Fj4l3l4M@6Tha-_A$lujMDZA2 z^FE~ZbAApEs%Z5L-{dW~qIF&KA7O%flPcw4GzYKM^pW2|AmjZB&G-boKVLe@iOWn~ z9N(ys*Af-52dcs`3CZ(GG2r1WASxK7Z8S#S`?1c@HfnB(H!S^eHSnVTX&A{gNSsD5e0vHCC zdDjzn26YbVa&Z_+=bPoRmHyl)0~~&T=Y!XlrYS><)a2wPlY}$5N@M^{rc3WYkjF7; zE0UlmIU@ZYjozWv<1|zZQDPn~boPu|=qsswghfW&Ip(o$nh$pAb2OA3pjEBUEQlVF z6Ij`0aHK22QR%bPv2y4bv}|>y>H%vH%!a}41pITpB@Y(;$^A=wAG265K6@wv!YhMZ zkHLoaN??>Qc2Pqet}}BY718yuz#AXQ9D{<`uhk<3-z-6V^4viKDYDOcam#y3#4yKI z@Pr-5fe+(jZI8PJakWVTC#~un;QGd>vN5TAAVw$0 z<*~1V#0p1qFu$lVb0O2F_;h4-2f)URO*A>`J?l|aKKPnXU_prT>LG^`k85UQERC<$4rqU-?Y+2@E19zG$7@zg;`c!~?})rhLV! zZU{|ge2cO`DXM`(Fa$?nMsoHX7~$Wkbcdk3D)bLj;Y}gXyF2`4jJ!TL{+fi?l0L47}%M{`N`mh6=t6#sgJ!`5)lj!>1?r&dNx@zm+PMY}FrawLc9H~Qe z_QyyYRm6~rTXYc{kFpU3861rSb=R#K@MI?B;ISkU9sTuz*0DqQ1WB`sgk(1cv=>!v z{dT5gE>JHpXj+I+e1c93x8(8a8sC@u?wb0xl})~9X5kK{Xy%XC9ejzc9UK4av;s^6 z(VJuDpB&DYyoXUwIE&&rfxz7;`fIq{A2cU=?4-{pYsdE)!H}4TWObP5BpWXh+0Y+< zNO5g3Z(T;n~3Coyb_T*T8A1hkGgdX$`kO_%&GvNSac`3K;f7eiGGhmuRc80Pu}R>I?U zdnMKC1nS8@K))t6L-K;%s!1|CWyxO>I5`+AR&@5m(82nJfgoA|hMc|W2D_z#%Pi*4 zEFBo!^`J|oC&mp-lT5l0-MV-DlwUplze)VW0w-sR#VI1{)m?)qF0tKHCMbvZ8RDH+ zLq!~4o%JVkH7|u%mB&4|ZFo9a5l+mp^3nBPV7Al8UouoKmnD>FnvMaqlZW0W9!ZMnq1`yM|+r{aQ@0@N>B? zsQPP)n&i+ zVYv|t?KmsoW}y+lf_eV0h>`W(C9q~AYwoSQ;2iIaZ~V-+cPhsjk-=QDK7N1d$%x15 zRd`6qwV107F6fxy?sDR@nn=Y+x;4P#vdQka`V(H2=1Qqt_l=I;x4q3=37>p07vGO) zWZ5$(P))lxjmCI9$FzQOP!Sk75IjVARt{%Jjb^i?I2^hVPVl&W~)zYubTLo#j4UHVvoVoirv z*|WqGmGQ1ua0j%*j;_>?=7R|MfZGLmTwMU`6IAl z{CqLgEIjIC{l2GYPP{5vt z^h>rwPOC-e7fjA1Aj|K(XHky9qbueip6^eYPhwqozUEx7@~`+*ymYsPu80^d8k^eI z7x6(Q0mCEg=eKx#twuIVG93c*NUD0w?sGNVVGW zP@Mmm+K*$1y-vD}Ez=-7$O$9K3M{})`9=Iiz3t1R*)c6z+smj45ceHIejjBTBlptz z))dgM9U0vQ|Bk6K)gj(K`fw$G;Oy<=ee#_e*2aE{4rJh$>MMdV>h0Ert7ECtuBpV) z`?Z9d>kZz((fp}JDn@$q9}x$mKQii$hVuIyg2llpFY#}B^J6T9D$kD z_do1vU=Y!A(ku~#m;2zR)!{?c1wY&K@BQ+L4czm} zB096)k8%*`MaJS7W;%vHWyB-pnQXZc0fQLx#kV{@7u3z~xD&ecjt+L1R{vc=uod$H zW?D;1&_7mPxcR#Cfh5SyT@I|~@G$osN5u}Q#d9ZB5AIL7`FxWFDo8!a(8B8c9_K=}=7wT+eb zue)iv`#I#>cd4T{rKst)ZU0~M>&0e0?u58ioOMo}j7ph0zCf%ESpQ0O{uqzASDy51 z_>46?N#7as8b1%gs2XCL3akNf_R7a1a3+M^15@na)?_V9cXqU7j$W~4P`i6JP&yLi zFk4rot)+Ebtd3O)bK6N%#C3ezNJ>M=MBsdDo_x7cV!u$6Px;8nQH2|cypX`296R29 zmTZXKP^Z53WSz86Coi|7_D3j*2tlXXr%h3D7iPyP+uhp#f4L#u-;{;s-s??FN^To8 zl{=2le2j~$Zt#na<+OMD4nCJOr6R#gshk@oN~I;PXRwfR>h%6F*I(ZEFR^yU%NZ8O;=@+IVn5)GZ?Yh#=7^D#LV_S3#HnO+P49;U zJ~2--D+UN-&~Q(2`2FnQ{5Rd~4p;_&srb7NQ%lb29uRmezLxZ%Zu2SdEjR>_B*MUG zH$?k;Z>p3+gT9MIve60HN`VEhF+J~sd%5a^i>z%`!GJ|SPL_{~^22Karz@9(KRSvp^|egO4azh|}z zJxg@p0XB|T?WmnS4HE9CpE!jd_a+}rq2#QjkYwxfR>NsX9Jj+j)r{|I19by`?U~*- z|LszbI0^&eCU0x)tT3Gay=aEYc(vqVc`zIIwtSAsceEhfTtv^v^UpFw{CxJ;w0O{MUyQmksSdu#xZP z1(u)nFHWxERM-EFcZ+W$Co$898qrrU>gR<8tz<^HLkY|%rNFQBYUZ_#a=9K8= z*yE07i@EdiEp&R-l>PY8IYAnWs1sS8%@${8XLMV4y#(55ZC5mEcr*X0@bHKN7_2Bz zK_2Y3XQ6q}>6Gva=^gV8sGnCQ<2WLAGCm+cpx0mUBjkZ40|XMi*+aIPo8x)tbY~+q zpN*C3zX25@M!F#dN=JM-V&B|jA+E)-$Pg~wjq1MD&<}uCb?ih0OIxU{u+_z~lCX9r zMVS_VhCPF$n974PUr-{D>%icwlc@Y=B<`#5t*m4pmO~keMtIlIQvJXWJ@c`| z0PjY(cKRTub@-ClV&kgE{-M2l53RyTLf5^*WH4Ou(jRo0MHUg7(r(Jv=QhPviYk30%Ou^l^}SwFIq!PV#+My zX&tt;$~+jvvIPFa)%wo^SzJ+1uCjkmuY0MFWSD8u zuynCoZ#6_azk3_)UjHKq<&~M${i3p0_oni@k#Nie@3oC5>X>CzN zw93ofNeGjppKspWr~mM*I6)3n1NxJxR_wUc5TTCy`|50~Q0Xs+Bkt1mb=`hrSN_|U z|N0NQ_+HN!CeBK3cQ972B+@9B;r;S>Ii!byuADnx;i(v{D)+Z4+>n#KY%RvZ(nw!G z5!eM0|7He|Jb5rRe$i1IVdYD>)8_c}mDd8}s}+yfx(Qm!N@Hg5dkQi`HW7XhSUK`! z8+sbB&OMI}&O@IGI6w;#0OG0}Y)NlINEDt1dVQ!_wo<24_!Sb22jPF9O{q8Chem9W z0l`?~3)}&qJ_sgx?`x)5>uiL7jJ&#MW9ifvtDKu}gFkNo^5&W4c&bc3HWFARCL&a+ z|6Kw-DCnI^v`R&&za}&E} z6Ft$U=SFRw$pmKqJ~k5IG2e(FsgudY9B;Ia9MHkH*Ghm|KAhZ3AV!n4T0AKi2vXbZ zLWl5A1B7G{1w4)oSoh(yGhLPDWwVc+B1=psn8yKQQdSm}HKHbC2MXQ^Ak?uCC~WS5 z%q4d1Ox0)9XL3tY#RGl=;v(&cGbg>DGW-Lvtgp33B@CarcvD8+xUoHeWB%WY2H;TYdXwZN3_;n8}Qv~ogdYRrnoPG~q|Bnn!pzkFH z71r7bcRL1vY&)v!8KH5r4C7z^{xdV)4%O|ZJgJP6^qTrA0%7ki=tfV*7|vY)$;>o< zTwkIuubkcZ7)d#j>vDLqbdLc&*=2V|^yd2va&|XGzYwd^ud%v>N}Hz%n&|}sX~*Go z>r>vJR%uk-PJYj}Nd>imoGQvn42D=xoFrg(kN-_9YxqAu-~ar0fJs$KEl&KH%@}BN55+d5wXWZr8)Yu8-+gbj0_7f9K)&pr0aNX&>bJ+mW z5OpDaI^Atxxr7;sIQgbdDy0#hGZN042>j8wlYAIlZ+(O!Noe z>VL>TAejObP?>%BJ9?j$E%oULXdIi0V&7zhz(#A)xNz6f0EpS8*OFe++KUAuXyx3C zisSTox4h62?;q5T0fhnb9Cy0x>GJ}6&tREl{f>Yj?Uxdtf4y!xoROwW!p<8> zFIlNjmtiOW!i7f4x_YrhReuS^0^o@8l{&zorc3$S?B_Vt*#Tv0flO)8#18~A8uxL$ zYBgqxcD+U$gVY0?>lpkRc9rm;Gz43`wV8Dp20jMBn~Z*!e-swAB_w&Xl{QNWi|Zl* za00C|#rSbgE`4E>9H=*iqp%LD1S=7?LytgiPggrFw)bhObF#NqNM~0YWz(rNX|y?( zIF8-<7KhkAJXE-#|BKi85x0Kr9>B$t(eo0i94y~j->FTV7zo>?$^Sm~1wUiD?Nt9{ zQNF(0quJAIb&+;w;w?ji1AUB54};xPzx&(f>Sp&q2VI?Suh?3jd28)b*Y3R65U&?c z<<45H_Fn3^TySlXv?lvbfyq*X0qJZrVd0C5LST!G27pvpU>9W5wTgEYo0J!fo?u`l z-HZkvCAW$2;@$Ly7HGjXaRXmi&|k(-qFz%LW)=Kl1F*3tb;8Nuqhc-fcc6Z6@H{q? zf6!kL;o9lEs75{*?Bc!f6`hh#JC59pPG_VUNU%vrqWx#SdHgSnlO2`!x^3f&69L_1 zQL4#ro0bom=j;!KEw3v3&5gojV2P9}@&L3S1bRogRt< zS7J)4xBPxG?x7y7n{N&dP;OVo6+qriB^Ely{6Wtv?Rn<)4_e_?yYgQmz|&Fme?Nd7 zZiK$#<030FkHvU)*mAe8gen7lCgt=~3o}N6PzxEn{Fuj}sofop*w!)RrUZgXzYhl8 zJ%aaFOSMhZD`_RV_LsMQzt=oAA>KLFMLIZ13%o$dh0-audTS`x)4$IHfoTM-pD(jA z{{iL(hY#8avXpp?S|Q`gNIRUFEA3-`pEV3lB1~H1pTu798cU@te~^@`IE2!yQ=R<^SR{CG^0F8W0;hldDl<>Z5Vyod5pNF+eHoHG3IJN?IJ+&;Rb z4wRxDbDPNIFYS4P!S*CazukWD+4-~mwz@C(6b5o5Y?u$n+R4@L@;)UVPgF^pHE-5o zp*dvhj^+^`lvVYO$q{Jvtj z^$T*p2r9ex@=h{kw|VoI(Z=LurSnR4zog$QvHR2}j-MH;^jjd42Gk?6AoyDTnA_rS zN|T9<9jev#Gwad7p&vJHCdR`~EtN(d1=*h}9DfuxN?4?7?)`j`>7^uj`mF70@WR}$ zyQuf@QkO-u_ByBOq;*Q!y}`Igoo^L!+iY;_W_Mg=x0!2`nqyb)WY>762ir=p@BSW| zT}uT$7-7E3I)+vGom3b%+9fJSV}LNEq^0ztT~|xL%YXOOQ_|Etu4Gv6e<0lO!xNcs zmhQf%I$&inBLaR@p{MYrZdctISNC|?ziU@>te8%u`3-J(oc(JNH;mAF5EI&~?2f=_ zzkM6Ij1T)eQJx58ly1-cVZ$6FK~*dUu^;=L zE9TlR6O7LOG%Ms;4}aexT2Ch}uy{dydXE;IZV??c;aYy~WL)tI*WGveEGUSy3(uwX ziShdEbAqS!-5(9r0s7xv&`Wd^Cy)O0f>8s=ac*z?R;fqxO)<{50CIp&YRsbE8pZl9YVv#xrt%>&%wu53lra@2Gy17)}+fO&*72d5=|~qM}jM% zk$u}lR*m3K*4Kl+c5s0ifr(~L+2`qB9HwH;z(G&$ZM^Qb-*uPtjly|MQ?ZCXE%NLh zayhPu6jsM@+)Eg4e_$143y?RfHV(pOP6g-2EI9wASzU|NY?#$Om_J-&dtGBWL}YW{ zJ`R*c=`8Rw2Z@L^Uh}bt(R=4DdRM7`|H{)+Mt`rOz#XnGhw1DlgVh-j^2tf`a%YrR z_BX?iNh_mnSjL#$UX05)YW1xi47;WV_%Lb)xb4k6%7G1}@<@8m@cWqF1Fd2? zG4w*pF=3&hOFw+P0ACWoVyzPS+kJ)-fX>nZoll=jUl&XH-smy--L-$ZICJR;U-@OFmI{d8wZ{A;zkxun&fwq~y=F=!q}X88aBuD4YIz%5g3GCpsir@Sh&e*EQbkOyAUe6<^ptcVVsv=%=B;Y#wcNV%KT>&4oJwOnkF$oWX z!b&L#@C+WKHK`-#eO>gl~nA&IM1Eg{2LNRHsUmY{(kC9UkttE+PbsKT&+(V9JM`N zd9C>GaFt89%3;2#QsMgSYH=i2_P+BW20K1tyWF%}`nsfr+W7{cyD$FXD6J|-16#+R zG!snlp3M1Y;QSA_VW( zg;!AlsK+ejbF}PJA`W{FIGMsuP^i*H{5llb#-7h+CMfK}Xb2tag^ZUk`3gcml7yW2+-tAVv#$pQl4pjXB?J&%y4YTQ$h;0Qkj& z?eLXAyT{0iqt2K8Ld9VartKyk20{!&Z zyUZiyqWmCGoDA6hty{q_#G?X84sjwFP)sr2R?n}~b1TWUpM0cTtz9hw8{c5*Z)#4l z*Yx19q2cvjPV%8FCFAemV0{&>VxI74m}Ef_?JTgoJs>VE$EYuNDle`Ppe(LI9B>)) z<#qrUc!-i#f#RH$Rj3r8z8dkElRNX5H}?Poi+$*)O4@%SU)N1;s%B|qh7$7ex?{%MPm>u+Se2Drq3)!vV;fISEzG2&7)AW6D7*`dzw+o+&dQ+nj zSmWHEcXU3ysK#J6-WlQ0g;ux#?yQrcuTW`zpB4BFaPl`bviRl6-=jh~gYe%rJM^i} zhFq_m*iP&%eESs)RQxL8Lt179h2G%b%Nvk(B`#0)<>~fYgr-;$H@XR==aHd zgC@iBJD^Nure})27p4IVguf;Raldn(%|?n=0(#(kg)oA#pB_oroJv}a3j zV|dK81AaSIIUkzLlac)$P{9W_EP;O~%kEIu8^BdBt(8n=S+taRn#@h;V%&l5QZvkk zG~2O?bl)sE8Yvzt49&k^{fi+Ih5!p%$kFoMGcNpeGOnVqKqIX*sxKxWo2l`Y4hwE*+^##lsC~yhFN(pI_D!xW^!zn%W5RA z^=YM6Rz|^0&2E<~1A>Z`esna4ackZAr z$#EEb!V^2Qr;QO_K^yZ28Ey+~Ho&7Tf`Jag+Axn*?#{s!Bd{2;xhWNl+Hc82AfOEp zGVlcQN?+QG4YpT&_jRRg0a-hErCE9*(Z3Om{1R5wLyygzq($kcoWG-#hTEgiSVB`u zKDjl6p>cBv51{e&G)MuP&>RlzPo&g*PQY(~YsN22K5~BgZ}QOr5*r2xqU;91t?_?4 zN^du>b>j?89qVsO6FCGFwZmSeuLU2}CYPu5t=r*3!vn*$eV)WXr#Rd-+;JfeZrb61 ze;W9p<}%_D!b>A(o{7pi!HFpu~A*yNX$^Bon8>5o5F8v@-54|3DarIsmN@F`JZr&p}TsJ#0|;&1QYGA=m6 zy>7ErDFOfDd_SGl_EnHZ1SwnDXjMoS|J6(i(oxC~c%kdaTLRD0T`Olhvuz={_iMDC zndE1|IPm(uV5;5Ci7fSzg4=Ef6bB;g)I3GJ0+7{l8*9~=m@?vj5>lOS*EM-lI&e)va^wc@cx0vm;%=ER`q zbfdHK+?jNh&^>#;#`}*C68*!;MSdr-vp)F>cvF*N27BF`2X8ksa+GJR3fZIbnm5m- z#20o_8`UG6^!%BCxUwnxn?EHZ3DbkeSS5FYj^idjpE*zCN#@bB#AJ+tn~Z(X;QpD> zuZN_bUa4eR@_RlMvax1+w>fUp6L%YgGlf+1B9MJ5YqZq(!Z9*Es_7#wJaB}Cu#{b& z!U4FfmX7=>3$8||DFFi6TOWVN6N0PQ!BY-gY~G1019{EUZ7Jk&_aFltC=LiJ(ab#} zb|95Rtkqi&r>Uis5*o4wv|S+|+TRDh;F9Szp+j1pJoT2vglqAayuP4&d|(salge1c zuQwjLfyFAR_j?hPJA?_H#5P0oLbBvk zvBV)hqti0s9Pk>KEw#*2yxNEdZ5W`~)V79Vb~7|{rOcNGo#oZH4@EYZJmFfX>JC!8 z5AzMopZb%qh1fI_S^&G$Wv;s`8-^3s@pc{)JTCNLoBQ5O_9dEUJ@e(+=rC$FB8-+Y)AiLvHGh&S5ps)0>?~E%wP{g|i^5PTy$y+Tg^F_(HVEXc zGn`(b@~IPt)+y?|I{Ff)o>m1{8G*t#@l#V)So`~aNS{>D|@M2;e;5ZjGzk>#Xh&DB$Kh*n>UH=ZN z(n~96N;=L{j>#cv!oIwj;#mGc^L!0cVGZKC4Spu}MzOP4kgpLQd(Ob{e>Fc>&tE&p zHkO30DT4=#D==oU?mTWLg#0b>XEzKN3`4_QYYy_plc5F2(!gNH&lCXGg-kQ+q3Y}7 zNpHNMajL(u8SBtn5LkXF^Y{xFSu9YbY)mTX0j#_dXO3>Rkg6Ea{`WO;;YAJF?R-9| z1y{JUzUs=-Vw*oUTJXak5d-{*PZBD!Ki;#aH zB%LTUF;LP2sh#q>vyD7st4jFmnG$Bymj4Q)VR_y1J#!(?+;i#vh;wwhK25FrR#5KD zv|JU0-Q;Lk#we_5jX=sc+mv^u9v9T3p#|!$kI}M$%rPM?HSWL!5f^Zak~4wEPxKvH z;+F^%SmR-85qt6jO_!>xp$E<=zBq`v7*JsPgayF)QaaH9y~>hdqV{BGiD9O~G?sxd za)t6j{<>l zJCLw6V$#ZAhW0nw4f_W7wO6ua6mCM{CVnP1A$4AtAt7Lau6Vq@h!eMv?MndUMn=d%wV>7*QAi;I-Mpu008fs*$n4If^=;a0=D z2(h)#EQ(ct%XxMKJMEE- zyorzv6loG&_NamhWnO1uk!0v{{{>nPQ|G1I6yH?W98JUGwWFdVv(DPbxeX( z+y)b%3@yO4`xD_hH(6S7#LcT?t6ThitTI#V6y>ktos(bs-rq?r8J!_j75m|k?+pYB zxdupVEmYx;zdh#>CiUlJ==T1X!l&P^cTf2qK;jg414Z>j!C=PX)9Tm8r0B0m33S$O zRykbex*iz=nxrrNz479lz~7fminHTg@cW~UVbOO-y$LCDK8ziTsQ7?2EtEsH%q2U=|>w06M@RxOnLN#7+=E*(jzHA%8cQQYym<*{;3XK~>TXtA#;7leDNQ;8wTb4_sC>lYrQHe8^k+@zLITpsUwY zpy1`EIW~lLSBPD)qTLJv8MKGa;6rA%kps=OxF_~#Y;ZgY#fonfUBF^dtw1bh`U+jM zmi+uMBF6qO-G3hkP=1G6!|w!?nf!5Kqmdgpa+spCAPD@9M;VG@K%p(PejM=5`eXJG z5ajDf?lJ|knjY)VN?lWc;F^un6}^7I6o$`xqRCPI>dshzOUER( zG8w;HE4nn&g9Fv_1FmXJz5y@B>3A3pZp_dX#cK9vSKA!O)f;*MT6SvxMLEv=4x;@F zhAvyr3j01Dgwg;Fj8<5GTpqipRp)sL1!~eV(0`zD3jBp03aPlI7K9vcA?1@d2-!#; zlcTI_m{SwF)*6}$v6FaT7JN{x_+ou2c*0p@<*_x8!uy-s_CB)>nXeGGmZwS*JVS#H zxq@-iIM-O8zn6ybS7*v~QfBU8g8i|N4N}zlQC0S&U%Pfc9DPx(0ZE`dbxX~6|E$pO z$h?vaJAV&YM`xlH@9ldNkq6qX&C=vw)E!ObwqDWvxF0+i34Sd6Xw`jE#e%PZlv#*g ztNO_XN5&VU$^Xh_OY$Rul2%b>O*8M)+|!^*7-EIP5)FPZ)YE4*b(Oq_D{|x=&m2fD z1;~NLAGyxyHA(y|HG1~!Gm05spKe+y{iMv)5mA-xIOpJ2KkA(IRb@%BtXH;o6X}f4 zfppQ2)9<8h*;t1i4d;4az8v57sm~bk_OY!W1N$l&`hQ2ENnUBSody~K z-`2->slj_a4SiJkxMTG}Y||o&!%v&v!SMpIfaspE<&Mjw4Pf*e>`_xmFj`90-8}k6 zy)%Cp?tF7YwmZgEX*HSf*{%2qu^sY9xQFTG=xn(Pk+M#O9zwIKyE%u;-GqpYG zoMdgU>G@h?Q+M6>YyK-bE(Fb6EgP1_ibbl1!h!?n_ zJ=kXTW@dnGRu8j)4?0l6P`M6E#?=hD| zXH3ox{|OiEq(^Xc_!V1L^sy7OVqqw~)ULxlY5H(z9&c~@3ytz-o%Fy-@W=bzw`6cR zUrJj;MF+rIPq=tM?#qRQ$>Omj08NAz-EiuNq-Cp?%Eyl9J=VZyyZD&7C*>%)DOih8 z=v-JZkz%@>SJ%h{txJ&@rM%+D$o9oIgJb@9)}jkg3UQY&vFPfhPA(~$jaVZM{JVa} z|7(Vag#FAiUdpJJnY`}d8)yIioA0yhkFR(8N#Zl3e@41Peww3S-wu!qn`iyKkBm5$ zZJHZN|M|i)oLIy6SPX@bo!;EBG#}G>)oD{2w>6&xC4BZ0wyF{)DXy0$`Yr7&!$y1S zz@TwmtU;*N4hwh&kdTNufx~^jMt!Sw3LkgsZOGm6bA=UJOPqD%rYNBObF(pXMC8$M zz}|4lWP%PgM%LI*eG zwMmb@ei|Tg=_{1RxhlpeO@HO4v0kuOY(!yL2YYkF@@{=OJDXnc%`H!1&pu7N-;m*n zCN6}VN+k(}K!?ZORb%Ln44ngS2iJEHh=3Mb%qUZpvJNm7BwQbH+-#QE zL)3U&)7DfmYH|s<>6XiQ^C&cE;c`4YA}ufoAOD7n+#MZi;dU{h0q3`$`2vTS1y4CDgAB-VvE}XVSW!)2?;{F*|A!Z*^@%E3SWH%)MZQGbC zzM{y#2AT{ggGls73+#XuEm11=AHvpSQ(xgUAp-RO(~Db{3&-@CA)opR5SBpjj9F#S zOJF9vB##!upxMUn1*1&HpKzW5YGO;sI%aiN_do2gr%?kk-})3iG6zPB3ef3yuiadx zpJRXU^zYMuYZun=|8HR()w{^q7~R5zKe7s0s|Wrc%#zqhhj<*$4{$it?Q4iqVZKAw zV04_?+46tGupd!R=9jl{!Wiu+bG1H^TV;J-ZcmNmfR6$dCf$7oDJ4t}=x@ym30dVa zF*y%zc%DBZEwv{dZ+G7}j={w=)BkbB!t}>Ss1qM)a08@}3yXnV=lIy_NhYDyo?8p4R;*zcNOQha3(F8-D zE>S?an=m1iS77ZCIsjV^m#<~M)Q_7gQqTgdsS}ic?#HY1I8@$#0FSuT0PA?j1dNiC zxZO27i{JN`uvjYhd*ZNXa4nfBl>bl9!&Hq&3gVB;8;C!c>fFgqLE@|iWMzG>gqt%w zFu)(}rbFGeR+6`qK50t=gJ#Y5prFdecWW_2Mj;k>kz_!R-@smSBmG%m&^8MJX9A5> zy;2pggPC0P{b$4P0^?~laVwI)B1^k}M=C@mM!-A-`&v8;as@z_@{)hi?AE5B z{qJ??)y!NIY#z5q`I~KQ6|D~{?Cff=|KHwk#b_5h&vYrzghW3eIV6gX-^l$#qo zJVykD*F;d z;4edoZ*bfL+Ek{b7k!-w0GA~skrYl1+0Lr9cUZZ(JdH&$fGXx(pZQq17Q17PC%GDZ zo#>NLSFQ|tLYkeGHzVOKn7UlJP=A~VKeHaS)&7n;Pmjk`(WHs6$LBYj%U>rW7K5om zK^4eG^4`9)#OozA1nSxjg{I;@SkqZTS?E-EvqMP&v^AH=+b+VLS%$U?p^?O)yPsSc6iv0||sD~CLxrN;RR17=D(LC`y9%Po)nk}{N;ux1B1@)wDhSYBQ5XtYdH0AN}5G8w;Y<`y6{><-qqNWQkzj*Z6!j zn%#u}5vI1AP*}oE!G|pDy^6|QZ3BIL|W*W3~xBO zra%doFxK8~&#=#Y!N2}hf)GrI>7#+VKT%hyMr2YLpl~Hj({0|{-L68571bcDvKr=F zUtM8lljdK33_IE*%o0_gkE z!*3&!l+3Mlr7egCArF zJrzwh_Wj&C<-(0F_uoKO`Zybfuj;|QEuCxmS(#ARH)HP#-xu`fjXdR~=+eiyOL`qs z*!{YDY;)k#D*{ft;oaL@#<{dfU+1=3wnGE)jjZeUO(P|9^hVvD9;SjE z!XH<*J2mC1a&9I6H8QjL5te#KxZetAb^sK{x30xy(w0*%?4IGq9xa|azDETn!H!Q} z639?EM1=$+f91d0PTH>a`%GVEC$l0txr7fxt^Y9)u%B#tKXR8U#r*4>2%Yn~_35I2 zSKuBNY`q{rKLl(tK)sVazdCxdE)+^bYE#F&!geCUWAIe$l1oK2MUPzz8N+DlL7#9WXN8En`%U_wo$ z$g9c&8P0YmnRhiA8yi=PBxckmNSUL1%}hyJ;6nRSK=AQF*F#gDCspoiFI)b9xF~(;LnE2L57GYjx99Ru!}y9s@n=)+d$T5KgJ6Y#Ug*S%;G-=! zHImKARESC-*Fi-o4I$vO zYlQ0R{)Ml&cKqOtej^BBW<~TFgZPae%R1VpC?rjIZHuDC)f=*HpMpLe&kZt?PlS&F zv`0YauE-2^KjQ7;dCqkE3V~KQp!sN~$b(9rYAmb)uW~6nb-I^rd$P{zD#I+Ej>r&j zWyD@mTFWSa(QU|g@~>n@aKN>Q$zW(Wm^i^b2;zCnHZZjoHt<&0ZRrQh`E~bqv1;ql zQ|_v~!~$9DT0x%t!CL8E(aDE!<{1W{u3-{Y(0EQEBbO<9(p_p{pA0ql@V@=-*N_x!;!pKd z#CdtXpS88!Ek)V+kFx#n!Kg!zcvhL@d+%iV0;teysV@QDedh~`*E75}wBhBsDn;Aq z4;{bttgY^DvM5$q^b}!3KQMoK!{#k2>PMc|iUz}}9~3^_q3kt5kL^iT5P9i?X#6;O zbnyMa<-M9^zm#bxIt}?e%HJ{a)Bueec+;&ldrF-O>Kc>GXkOj6{!XF?Z;U*C3!a9i19(03ySx=q9LgUrSnrw3SHG*b+Ua_^<{59; zRPgem_QM$Pi)+urYIb<@ZRPWNeR)S3lyr_%y|N#Q{?FY>OZ%X6#lrfyO!FM&l58GM zA7*LK(HP({6Oe+|BpqExwM0n*rhlDK#O9nvO*yp#3T(*Yxw53d;B^3PZ^%NKHoV{O zcA4%7SBAcUbeZ!4-+gtA3Cg}|KW)pp^7A>`0UnemX;R49ut3Wnsboz)RY`GY?8qC4 zkA1pjXY#ld+n4~l9R^1@JO{r; z=$wm}C65G(ectE!g+36Tp*0Iff>XezjgZGg9Jq&MRRlNO59q~QmL}Q%-Wz_2 z|mP)a_*LMnl-4HCIbWG^pG<%O|8@iB=oj`wNg|q7&Kzu9i<52-jNrFVu~{?ua5S3#0*y zfKUsqtsF^}a6kco#GN}9M9`SvKh2dOZ2n*HZKon0Y$5}Dh_VC}PB=M`V+#}}<)qlR z#~0bH%z$!RJuS=a4t9_{nIneDWsb9qB(GykkDzKP&7j%hmWK-UZv9YvbCoEHYa{LY zIlbTZ?e24&a5Sn!15|xsvg~kLU19s?muhRFLo4cnX%>;Bd8t&Gypd@9eD6<26b}0Y83`9!MKF;8MGqG{~{0=;*=W8tcBnEsA zJ%+JC#4dNf+2~@#AzX!eK4=pM;J?JqO+^ASCJj$$xb>Kc0C`r4g@m#|DG3cQD2$#SIM6zXrOL42=Ov*?6Zk4>8yk z{YjJq{0Z9+=l~?>T$5cRXA(F&t?}B&a3aOfr>_aH+!B&jl3uTT9Ar2ZCe&er9C+|7 zO<_&NhJU#b^0dwo3?ok~|Dwd%-fXkl;wNn7dPTqc`?xXO@;9rjOdIxH>00qjqkCm$ zz{Z_!rrsda)%K$NzSO|nJJ?^xbOqcKS6L)3_j4ir4{KAG$C&~u4{C0zPUX9oI6Ytd z*E%cReK@yL95jkrH0!-Qzx^Oa4d_z0vQBnvw)4B}TKi+_R#a(F*7R`>}1&qHpanKq3GV1 zG!1)P8wTJIMN2O&8b5s+2f?lgva+eE?vDiUbX)=ZF)ok+>5k)he^-h43`(v4twfTf zsbk$m({lvNiUr$V*%z>0CH+|5Ghn12-XBJ^DPAsnsk1+^(lVG4bwvM6!R>FMl_mKz zo8;p{*o%Z5$#7)i?)Tid{yL``q4Yy&CpDzco(bxVVhEs;C-HoSK%9B{K!fTknUhF^ zBZD=O?}+@2B16ImUq55+?e$JP6SkJ0Xjhz0bM!agcxE8CAmTwtIGgRB>vga6BEsMWAv z_uH|ejuv=a4t>6`e_5zj`6_%D ze;HaLU#}3SXp9rp2#%H3{IQ;Ro3g?8`%f-1v!mC;k>%{CrQv!_uFxT-kwt$qwu{yO z806)%4lLX;4YKxE^F@%9zwp*y#A`itV{nw6xw_&l9bcGAqWI$UjMhw)8mW}%oyItX zK9Tf<&WBy_g?`%(MVk}9FRG5b;*sNUl}?6c@zJi1d(qiXhuf32wu1qL?Z{+@lK%Aa zwcIr0>E}ME=)eF_$t%){c_{AD!fJpJ9_Y<)ZqDYxIl6uc!f5A*K?SxjLGC2gm!A0*=ceBy4bTibBx3IfQo%VdT1)C^B)|ooQ5o7y8}# z-`A5Be>po2<2GMxS^m%3zakPabcc)Zi~RQB6v{ zMW|*!{|*!>7ap3Z7~fxk9tdb7tFNRsfP_RYc(~T=NIVXy6^-tt%oyU%&PITrIeXv`-N!ZYy2J!y_DT5UoK<3C~LH zlf{=MH_je*hAORU^!BSraRSE>w!f_>LB!BGPuKjQ8)xobq?%F&LROzAb!mZQh ze7)jA+|m;B`k*nCdfCUr@?SXcl$P@Oj-%xfT3EGr18z*e)1$FrDopc1jNG0l5dNmW59^@ogL_ zJg*O0zHV((3Tt^(m#sv!;gdJfv%qmeE*-X|XaqH6u_omBjml(K? zYG_nzt3+{pn}9JL6dMsHoUbMO#iJD(>QZY34BcPrPa4(%5Z7dy5M6QU*)IxS{bSts z9L)saKK+Qp1dt*jtL7sEu7psWXHlqzNq$Xec~xnS%LdU?SJS(XC-?9vx z+CP`U!h8e<7(*Fh^x7Gwud##p9}NAKMtTNhfWLj!jDilJPYW)e?@H@jy5^iw9GRsf z%kpo)5nh=_fp(09QAHZNt>n*pxhQ1jo@(g_05uPiC_X5yKo)I)N{X}HIkL4)ng>j* zd=JRUUAM;atBLV#ew%-u`HZffEE7Ea#bN8Og|Ye~ZZO*!e^H1Rts8c1B|0875DObq zw*nC$rQA3h^A{oZ&2Yegt&;3XhDzLuHUsVbA3AY;Nv$7Rg{0HpBynnPeB%jH+|G<4 zY#pPIyS4TZ((}rp^+tsTDz~A_utDg@(vOPGa38gQX=5=% zca<~#d&Hxg?TXQ7$lg!>3x`fsS8pp^HcIpBGnGo`IjQ;k^HxS@;@#m+y7+g6=dn8^ z+?8bi+u%TYhUar@f^05kZh`+zMl}lJi_{KFuyZ(*U zW3g*DSz8qKk=#%JzN=~D!t^%~abHOk4=|gE2a%7Tq08g+H{XJB-?K6$N?6n(JW8c*^jkC}Fs-!a3f2?7C=`8uJVR?|nb1QOn+l6u$-g9|=1D`wO0mi#*cZR{e1 zXTsZfXGc352cd`t3VUFYzc^g|pnkGB7a?6#>ap~Uc3RMFGyo$b=J*fa`T4XK(ic*$ zzBitlQg1(~ed{7iNS!wQbaCQz_>oQw`+A@LV&reL|9Iqi=UNSl{KIhew8Mxz|b4;XT+VjqTb2sv{Ja_J^EpFP@~$NKu+J zZnAhzSzLslLR=u1320+EF}c2w;dqnDP35ndd|W*re`FSU;W$rEKIhND7vIF+FZ+{V znDiik*ITzXRcr(mtt~dmf01mr!6|SvQD8gu^;YtO91~G-m=X~>_M0j)`NIv(JV)vb?7 zN!{Mv9};egd2G)i_@v^710P$dVcWLJAqb?0i{D@VwUg|JOd9j{nR=*{b_ar!XLJPc zhVN{HhFi3;Cgz{$i5waN^?=w_sF2n{((!|E2>dAi>8Em(;lO+U;95;BqXgHjppRn( z1_ge*Eu9wofFFCz+b{!0Wo>^eyaxbPwT$1~9!Y=X|0lAL%(9_gTOgDT%M`(GOb%G2 zkN4^Fex0F1_jy?04ezEVYZI66m0!lV++DmuDko>k*KuT}BoaNFtF|F_8)ru`y!v&o zQXXXatr+Z)AvE?wh31IJ)7fXG&e-T3Z?U#e{x(>HiS#5DjEzW)cLlHaJ{0KjYuY^n z(M4Y#>3DS&{4olTZW$GnhI~J`BKW12unKk(4vl zAM4%z3CDYWHuMyyhjM?HX#J}zuc;S+QJ1V2*B@({@~?B`Za+yX(?BoL(?;(ho9bSQ zHS)n9U;)idDHd!%=T|DV8bPU4n5jnj))?Jf-gn&`kP3}av=ag3*c11ICajCY`F}S{ z(4h(Qbn&JhsOFiS)b0_1ZpRT>7j$x?ABQ!p-|-WKY!_9N=2Nta>H2;OOCu>mUW2N@ z2UId6%`s~Qer3m}bL#=+38s&4&Enq8M@&A6&C->n7G} zCOj%AHk?Ky*~dviJ5myqN9@1I+<2UY?%3F|mfzMPEWuMB2Un_!>>5={JT;MraZ!)L z{&lTB!~&7kMd<=^Os%5^4t0h_9Q`oF%`?4X|Cwa)n3?3<+VD|A-5e=5Z~zU z5U7P~+^buWCUc1(&Hga)eQupUk5Q{x;0;1oT|QrdT#sM^W>3c zo?#*2^SP!8q3~dvUSO$QpQsZ2}p71cVgDgc<-Al#66xIjT-t&t7xrBZlOX5r54JXtdXakX#(a~fgF1F#AblT zsg^1WYN(~jdzVz#@ z@;h2j=l9G_I_HPrRIb7X7Z)qgE&uNP5&rz9LDFC7v$9v@A`_y&upz{Lr1`di7{xcO z$@_njL{64Iu!hhyMYl(m#)mes11E-<*RkQGGJ;_ky}|&{I_$QF2d?GZOixqvrpw4x zs(=QdY$#yJbOsw9C4+Gyes#!}fNJ=d-tkSWlVUz}WiK=NF^lro3{|sO6RY|D%8m`7 z+B2C1X_0t_PBsHpmA%7QOXq~{!~#g3JdiT}Ce8NKb!?xiR2J7b!2Zvqik+hsnT2K8 zi{YpIvq@GS#2mx5@{{&L`-fS4p7pdc!6{ddq8klUyqZv55}z4@&e0%OB9zSptXS8^ zCeRb=5}Z;o7$B%mB;UgFD#9Br8_+kd3uG9ZTkyuhn?=HpPto^NENyS>C!QYk1Z>WUmUGD zc;aS*=yg2lLBlf;y8+b(Hd%sp+gj0`-?R-A3-yJcf92cgt#O_H>m?LW{lEg8MmY7Q zO7t~=7)QvefG~qS7e}@Gg-`I2+UsJc_6A+ynWBav;fKUp<6QNPpMOx?yipc;T&VUI zfzqmyA%<1rt-M+sUpQUsS(uVY>js^12WP*-;S7Ik%QScC!atwbyoGJ4X3Dt&iEmw7 zK#9rY;)beD!B4oju>EO!om`@Nw>+7RUr1g7zQL?G9}ZSznA*9{vf^m zJW3XRSBL}sL4Lt$R@`#@E>Zoe{QQ;rzVpQg4d`3_!kA3NTE!qFHXD5~o%5-Lf3=f9|zKnSRN$qh9gR{hpx5aoRHq{!>SFgAZZj?^aR%n;8EZQMO~XKbkI2VL&rf z651GCT9sI%MY-nL@usWY3Pi8K!QzceI!RH!P8sU`z9R3uj#~RcvrRvp+LbLX($4G& zO&$fq(o30x~sS+@}R4en}b9f2t(kbr-W4U!IzQ^l)f@WBJdLvrl zXYgmP!a&{jACJ|2^57G7bw0p^a~OIB;W#t-3mg6QR#PNKZ4dFQ&m_`+X?)6~ z^K0@Tcs>70@P715YYaSsj;0S$K^)O+Zy=4JT#`CU)&lsagN5|Msh=7~gLm?&`Tal| zMOH$(r@;=&Y_dND-#>4BK`pITp6Dd?Xmd2XxuWub=}WQEb{%L3A|!$xXCINnoH>?2 z^)McN$9oHiCOG9VQy{aQ{msZTkMf-jDM@~2q!qG=r3Cz5LW|-~Q z!vD@B9R7@3Xij##IR_6uHdg%z;idUq*fMCaKp?8?ho{UpoNi-RQ@_ba)X1xV*_be$ zZ{gaR8#cV?(y;KT>9Rgli4Y?47ysqPhZ?^$vToj&6If8rD&NbU_D(v&QZhRtSJRA) zh0oC%L>LH3Ill^10qo+vci#cFG`8FB8nhqXIn!ZNf zoRwPq(oUI-8Q}cd1WDt2Tj+cJN=2ZB#_K3^=uM__k^HxZ(PKc?0D3l3^Vijt&(Y*- zioY6{pd{<8nAOIOw|RPdY)hz8%_+Od!`(5zcr$8Dm%evezQLVGB0^kkuaB1d0!BIF zG#>=4gdbApWl1&8uau0^Dq!FP0;uE&fcqX^G3}EHB2KysfgbmAHNjAm@aNAoY)~(| zYaH7{l~`;_Ikw6>CpsL#Zy%ATT-GSn)Cw_u$fd^@lPr5`|8)tM6b45Fl5P@_I9JD> z1~*U^uUaAb^FKyXT&kIR*?h_Q&ZSQpC)q&wI4V;9MJ7enKe_SqbzpVJd*r9`zNBU` z`#;-S&7N&hOjT%FC4f0kVBwH^T_JNFz6V?(HEF+bFj01rvC(rs1nszni_>PqEFsd_ z&uh@1G#-O>e`}a*peGzD8 zM3iT%q5B5o;vrb@6mjFl$oiC)215Kl-BMFescX-E;%oWJUYSpL6SpCLJo2jHlibSJ&Vl7$uMGb$f5Zf56IC9Ms8Q|M&d;{Pp_RXCUt8(hHIS zTR-ly=@Z|q31Ks0`D2iOFvNWEI9+6dpM->kcE9tMsuhPw33hR@WYO80@iD0Gar}mE zKi8ldMnr$erN(vRSP8#yvwrWvHW`z|>$i=Br5+1+_aqhj{ghr-jTX_yctQOB3>+t(K- zN?z~mCh3F@9Qf9XER8rUgORG*c7tn60446u^&8 zS2W@qwwU*u-fPg{w^$FEb;-RuDWf&{$H%q#=`vYogLo2a!s*UzH~eFC0ew07g^C(- zo7oxz2DX0h!Ko|fU%m<{!GggUOQRas-XD%>z=T3-8$jJ51&kA#-3-*uKZ}DwN&9@n z>??tQWj}aA$*Xftcm8Vc?dcyYZsmKdutm$`k0rV=hmE8bdY>PUt;GjT1C;TwpA04q zF2`TdfBe5USY;Evo|kY}?+=oQC-phdXY3|*R-Wc z#5=4}Dw7fC8y)H1_0HpD+BW~7PKweHiuJT}a-D7<#w7%Rl*L`RB9igJ4;sqceL-m0HobqkZjKt5HDwCB`Y>vB;=iC_>9D z$HI<=lx7zlmIa99Y;2nv&@oI;4uO#@;?B1b-33fk8@jcpeph_BN8uH7d9)SzTa+kM zt}0E6PI#fSLt#>vR;eMtZ?tRwUgEQbrG>*m?#R#!FYPH<>2uzB9I(&!*YhdL8O;z4CokMK}SPRiR##|n+?w-KZ4fClKEa_Uy- zgjzv&tec=iJ_jDTSi{R7va45DdSXXGfh7yvQlHfog%(aHtX5;rHYh0}p5o^>SVQzN z>xKGXR;9dIbsQrG;YT1~PSM%E{EP!VRV9CsT*^JJ?m7C1{}kTisYfqSXurD{5}%Ea zWrDI|Qzpu3DpSN#tM7;se4mhAMe??(e2K6|1b*(>pw0X-YiwSkZT2kk8yIn*EPTmy{Q8RshpNgmH4qx^2;;Cbobf!i*@# zpZ%%fPNVbOOr;{q;rq1?odqrt!$ZcGAo7y>@;5aVFWTf6XY8WQtsQRGsK^HRd5Xb& z-3KBD5z`vn^Lwh4mH>I`TB)(oKmU-3$$*Rr*fYtTGX)Tl}1Y*sfC z?}eii7chYk<1YX~iuqhQ$AHa)Z(UIg3-v!Ulbpf0!XJrmotL)lYTu8;DT{W+JvcmMB*ouTCHj(#1+WHT}033hj}4hsO;L@8dZ_A2b2zpG1*D z-_e>c($Z5UHoC3dNWvIqpgMU=*&PO?B$m@Tomoacph~R4`vt^U6Lv7P*wCB$$cxlz zK?H2o5ds(xZ$eopZnjSD4zpm!3_ z1n~_T6?(&zzu>@>W|luBw$rVL!cpXGtR-O`swe}Kjufd666;DRz0Rbj zeQ`yDW-U3Z!Vgi0oRW%zx9sO>%DkURebuTnY2ytE){Jk#h{b!(bEaK=ns_7%K5H@G z59e+~C&tvpO(*#3dlky~nyHbL?+09sU@+}&5m?maiWzLSAO3%DC{_1~+|E`|R_f{E%4yR61>On9Z~x(uoKF;Qgq$`C|i< zTXH7wZ3zW~_{V{0+a2?DAeOkG{p!1$^wSWWi4uoYFgMEeSFQ%K4hr)Jv=4)(RUF7~ zSozQ$2v|>`T%Ucuqx33^&0o}si-Sga;%*mcec^iZuo1t*l!~I_w+9X37LzkW7bRb- z{hl~K8HHrQ{eeh3xrwn|lkwFKr`7(Omnj%t=vZI9PnD+B0_K&(sYA#v3&`0N4qMNh z{V;Vp<_G{MMeGlKP1uqClQC|AIr7r@-J7Geov;P9O!~pZm#;2(V7>>} zoMC6?q6O0vLId;3R;H^j8J%yQT7|i6O~t%HFnM@ahOiqi663sNke^^$wVeM$OL!)Y zO=un{UKD5?J_TVY1Ui`b{bJAaRYF?zPHX|K!NY=?$wWg;e{2$jf2Hwa5<(_ANY07~ zs9`=-!_#%B=0tU@+u?3wE$7&f%*Y)|@d~%>2QSXyd&Xw3DA=$Uwh#1HGgVQBLBue) zp(g@iR#X&&UGFo+|I#0+I2ecodBVwAJy0)Z(L9rQ-dS9o8;uL+TctI1vwdclrDRoD z{kop#P=!GU7J%`+w8VBxLxaPPsfmDn*7$LB8Y9eJaIz3IAwoZ5W-S%K_S znn_8EwjTsVy9DukLf;b@tg97&J`H&@pxTy}L?EQKs`HfCLA9~Dc?y$LB+wxoU6;4n zFWQWFsohuCRfyc{3pyjiiy7_OX5RmA{Atv_%9LC2^J$#A;$DVL@lrwft1HNs7_y#ZujK*pJDouYAx15z_;#utIl^A*Jm%`_a`sH71)n@wB|Oc;k;oFm*2|9UCA z`1gqyo8`tP3O#QjefWKeGZLnUoO^1)#k8xu4Zj1P?bedc(qQQcLgc$sT@*=+H z`6IbNR#n&KFAnrW(f01!u1qz!%@Q^dl_e@WkcxGCDLKbqz+iW*9f5{M3`Tuy1^a~z4>}$`d>&}kG9V5#;3uOVR@Fd9MYM2;(nKgc~-D^ zB!+D2BmwkzUjC+-N`Po}ncV0Pz__*p0VLXvLVJDrK`oB~LxB!fI1~^g=ll3)7PB0g z`h$!IVPCE!je{~sgzseOYj5ps8vB|Bew3D(i@j7Xxl?6`v^_I6^rHV*>z)69I5PO` zO{rk()(`PyUwyjISNQxGg%r4^xJnZ4SFHc z2L2>VXu}%f-+jxQA1J%Qd?n<=Fk;yLCu!w}a{Gm!EVH)J?CK6b8YC2S%DBb#TxFbx z7+kJ&fR@p1YzS-Ys35$dC3xmV@-IV)f1PZX5~qFlaz5`|Elr$MCD)I?ADm@kP(YUW zQ+|m5@F4J_g}e}pSVpy|q0fTx^S6oF+5G;*yR$iDyOCX>)^)$z&dM{l{_mAYT|GBH za|j6u2?j**-*wmDi2e(^5YI|7zl#b|@>Z(SA*}g1cj!=UC%jGUov$fuDS=&`eX^)7 zm4GT~zpQs|%+qbKelL-Fds@flZfeB;huMB&Qnf2PHl!UF-r@Uv-F737K?mTm;-`-9rgIw{5 z-tBR;x3nCuCNOucJ4jB`<1Oib^+bC!03&{x$;l2v$XR7}zcNQ1eFK?|<%r<}nJE7- z6UE#w4q@??>x-tLG`^av+Y`iR`_Syh5a#q-q$BB~|CekXu6t|jolxDT;@9V@4-t~> z{P$oep`RjiFAS>H6UMk@((#IAIdQyTs?qq+5+gLDp-ayu&cypLKK_3fqT#K`@pfP8 z-@#WZC*KXWcGM2*3lya7lYJcQG;Iq*(`SY?-z4pct>6_nVU5py+o|i^sXS@hX|U~) za!0ye5VwzKC?)Wb)tpX((2&7j%*%!5Pc%YyGDoeznXKsrV-7P2krZ22F%ItHRA_nF z7{DT+N)doTklrYjFy>cob&;7G(-xABzVfb)_0nonfB>pY%dxw;7gX(2{&5bkBH9fL z`m$Fy`#!!_+57pbKxx+5LXEE9Y^&r5)+TXjOWBjWu5X z&1tetv4|VqOANe&ndB;5k2pC!lRhK&Z*MwXW_0yleGbiqK;@)m0`DKYJgutw9va<~)B^_OBG}I8l!#X#qMNPF%gzz8eo9cr3aS}ok^959R2qplg zIr<8;)N{Z4ox+isV%WY9<!Ya#W}nu5jNC&!g*zd6H(XzW?qT)Wq*$Q<>jbG?n@l623WC+a^bU#L=Y7O1Cv zOz81;1^Q`cDfne1wR$M%)+}=v9WAaAbtJZsm2HAX(2KNjFk-&&23bNh@?F=LugIZ# zZ>yY#ZfSX!a+@kwa)nk@5~5KiW*Nw&MLZ`)xTUrEhjZJ@;x(tFnc*D9Kp=c0Tk_ZNK_G!@K?0pgQ&hS4=(0H= z(6+EJddj(1iF5Y|)d=seS@a?Hmf6uDrf{6|*Lxw%Ur#C2^cf0Y-|_riH`hFTc6aA;)F0iNGcz-5YHAkS0me>H zQdwEq+}vD_UG;U^`{4`+`mA_xQNj(4s|;LU66xJtPM&c-xUA`Hf0}bw+{qTcC3Iaj zxwgM0U|%T&C%6?>9(1o9v*4=jyFZO^FS}%mj(ZQqsI$6!Kl{uDk?rZSXax;_w@ z?7dVlMu%@jFJv>NSwKR5$laN7CQFcTeGNjm-Ukx8`So=Pfp0GR{2W(!AYwHK?jL`S z;CP2^-68tt{iaZZBbv(j$v>LpN3Q>3`%L*b1<9fpI#rk)@%|WPqoE!xK*k-fk9E}d z-dQ?3enZREE@{b0pLpO0fp+Y8XaRxEDy7PT?#^zrlGr>M&w;`Y4*$N`BiyHmd z$`>A-ty9T5-!hJu%VguwYgSy+%YLXF_E_VDih1-A&-!)IR(2~12lkSEIxJAQ&sl%5 z`J?kwB~7F-(>2cZG^LAwHLGud1#g8aC46kK;hTPPuMk();*XZU)1y<<5Ab zpGh$>iSZMy^U3G6Vq))aC02j8x3xGQ93hkKP1?hLd1Zyu3n>>8NRO|XnsW7YHquP?aourIA{0~4zuR};!-76|Pe_>a2TBsyzRLeDv zw?imG!Xv~zkJ&v^3w>{Xg4M7noM8hyZAgS^IVmJ436oa6k zMo{Kn{hjY*v00!PyAqQuA)P3D;9z?C^_y58y-QRhMllaNJ5ge_&y{Nw78#Y*P+Dhi zf)Eg4u(Dq7Ta4y`+Ii z(MZ3|@qCM$gucE%Zw?N%3i6!W*;zQ=(!j2_M1C37ViRN2Ew8Bl^?%0c66plqj-o*q7rWy zJ_pb*P1Y$Q3YVxU-nBi15e1F)>uWr9=3f4|O*R>30(*M)wzXT*VLO}@IebF}^2fTR&$QjABGRO&8qsk__|fZ<+g zwW4r%I1l2mFaGt+PYgOdokcr{FNoaf5ldKZ*Ni^f)2+6tsQiU}den%{BqT&p-81=y zsDp6``9xe$^pT0x?r&$X#8b6`F;ivlKY(Q|WdVwJE^!0luqM?i7;zyd3E6`t8fC-;>`^m{I%(`=0r{1WP0*e9EN_&>SnVe!{lpPi9Nu_u`JuWb>0 z9WCYhv!1fgpA@mOEQYcsJC7H}ICUY#*5n$_Sf<}uo%?Jj3%YD(EuUWBbeo@i(P)4` z^s5Z^qjC0~l$`I-w~8xb;SY;%%GK}*o^AOR@n09DGEcq5fH@Cc>fVi;qe$@@8>4$7 zcz;Tev^H1}Kj_AU1P^sqZ7D;$;P2i`yHi0Jy^{A5{iykcnf&r{4W-W0P^wxI8vrEux(C($7)_55_(3Pm(+ucJ$|K|I=1e-|MVQ+Nx!wvj*yd9bfQP9T^ z43uq1AGL;h`}w-_ii*CuIlXG<5c;P$jep}Z*{~qN--)Xr=T}RN-bO}@ll}b~IGckQ z9}RC$ccx8y39rWU^DIUZQlyFE5vqEP}0{4=O>lv&agJa)|MmnA_QH_BS|Ju* z|EAEha)orf^WovS2F>eN?e_DH3Oe_p+FcL`1J;cv#N0xWMp)EbU0*P9-7SjW`sMXlXHipX=(xsZ;%Bqd?(QncZyHfA&y5DPZ-x;i=5e zWCb2(M}ntySI9kiC(2-6%x*E+E_8^cw?Bh~TsL~(k9&{_AgG@*LeIFlF<6zz?VgGh zhw}amnTGu2jU@|UF1t%}sP&3|dP7imy>Rp~_&PlhLo0NTTBr0HGgNDO?~5J6DDOvN zLmf5B@b$huyN4tm#{P%ri2Xdvk8thgBaie3^fIa8NKR}ByW)fserV2QS#F1qWHmbY zfgwcnk7J{hI|oeeS=3kQ0IV#j1s5($TP%4kRYdfaz0-A}gfIs#F9D0E(HU4fON*@R zsUZIlmP`r?jg<_RRYv@fc0k^XFEO2O$#Av{<|CHx_KH9;oIuc4_tQX?`OaKYLeU_G z<(!nq0qf9dYeb&5LbHu<@DU^f%?X;G&TSD&_nmJ9V;qyoigz@ld8DI$ZLxMBNIvh^83= zZAQ|IL}rJ)mcs^R$ALl%B8v}m-;W3kLmqqryAJ>Q{A2SM@=axre*ZtF-oh=)u-hJ< z0EQeuX@*8hN^b7xB&88a8A3uDloIiK-gABL@0|Gq z=9%k$_UwD_wbx#&5%(BE2v=^)4|)8Z0kD@2j?5Pfm5z@}VUkO(+?DBg(QmGS0*#H0 zNBayk*a4Sb;Ns#!VjV2FGN@7~0GZMSea8*8W@Nmow(1EIpKq+O{o_a8wfj}`jBF#g zuEV_jDelM<%%oyI{yj*ie=Jie)m9`lii!fkJdoSy#z#`P^y09FwV27Gjpmb7;Zc0j ziG0HlfDkj(0$x6%BC2b#drBF4~qIfLF}PZLqV{UAzoN5G10|2BQoaaDM$MPj$$ zG#3jRCog})gW*DAB>6db1N-pV=`b7*k_U!}w|}eyYXBd&L{w z(`C9w7zxGiq+i2wufoYa=@EHyVFixhsXaV4)kKWBEb?kIMeZcb-ov9V9m^~tLSdSm zm`HJ@mclq5QuN=BeQ#pEG_LAB4tz>{dR>66$ElWv(6%ldfokY`2qq#nOvQya_xuqa z9e!(G`jX_eOEOK(4|GTTBwbjPW73vxf{jR-=TRGW@h}$gYxiQ4Lg^j(m6un(qTi*> zho1bJ=^DFL!S|j(G?|W1hW_awr+ULDr=S~^iwl#{>M{6NOkf)hu$T87Efh7(B!EoM?g(KFC%6*g4);kLcUdFHF%;mai^5M3J(nH~y#hO;Hb+!}ko4d-JK z2vNkxI@eS+(|TyC5(OdhmBCn81`hlUdh)AOhU{PBo)F;!=Uk{S;P^FgSmp&9!Nqhu z#@fC`o>RrX1|V==*0WpO&>00#COJfokV=m>{P+h~eyWfC&P0LADdbw=D#kqKTfCND zg~APz@V0qY!9^oJ9b4qCrb%a0eA4M5v!{#Hr_yOF|H2eamJFmdJ4V|1`_s10D0IC) zrvo8&osW);nOmL(2@-Yotk`?zi9NK%KW`A#Gpk1T+;}GA`+9pJ5Y&-)vGP#wR=y|A zMXEHtAJ|}7{1b}}9=}(Y#jiqN%N4n>1`2F#ed0hi5RTN~A$RW;5-C}c2DUr=wZ7&o zKpL1oKux`iENF|oy7ch0^?b*-xC!FGfzefq&2RfL@O^fqoLlw$Jk!o){^3Jw6)}8? z-Sg$w&)7|YPkL#^b@8RUVkvcZehgB5lI;tnaRg;&wK=VC-Vo|ePfsI;UL08}oUW{_ zIQGl|7veSGc{OnQ}wff>vAN>&VTg$}USMEn(&kB}!zI&=sVnN2L%G_)z*X^c`9 zDW8|}N1+GAuj7T5Mxi?+)F&XK%>mNEl~0qXQk>VagOcAq@Ysl3W(?B%?yMn{4`#qo zCthju_v}($Ry@0>dz|)4mn4$3ECSjrAzvr3Cs0I;M84d@uS2s#!kHMT)`w(LvuIAy zX|VwRfdf(CwGzo-3PXa=^sK&XKIF(GIsE0Yt1+4wU&!StV6c(Cd2bj=&>W7x zzs3}1y1U8jqONs<@@d>(=$&Y_msbv>LrRbyRI)0C(eBQ;3!8iaig+TQ(gTUvRGDNR z=s>{XQf|?Kw4<#}7X=#nP6jR%vsCznL_St};Rvu?QhN=BrxvDcgoP5P#65k9zB_e<)6dYfoe2T9ja~g@3K3j3cDU2%*yw1{;{)}rUVPA_R>c|^_NX~Tgk&<#! zhJni#){k{?LgaI0+AA_54>L7)*2`L(Z0RMoHhoImZ@)eVq zmj{qwPzSd00LV2??qB{V)#m2iN}VQ!s2ckoK`yIX~Y|)UXoYYdM&ZMF& z$c0=@xerNlt`)3G`S)X{-18$fG^UruU{aj`{9Jt^5`2Y9-t6k`9?{gYK(bKDgY+su zh~3>?TOU=`7$IPsV(}qxu1Y_+G9iKJGW^wlnh*fAuTWFtXDg`#{778v;~x?3K9QHX za~0F37g7Dz|D&L!8A9w<78}!c7^6X`rnK`k=_$_m@tyRdll6E6)HPu>hCGzz_ikw^ z<=(t5)yJ`ShI(mJ6T4LDSnMs0s0cHL2Dc_wLTspY^|aQN5b?{MGlarV^IafG6W>Rt z66S#Dl9Pf9BuEPBmlbn*7KBJW>G>%Gud^kCZukIhBf$T+f(G%6pS+b%p7wKO<%+9| z+=~r6Ko1LCHZ@tesy zSq-X-x~C{0(ikpcMUDTNJSvmRCEROT1l0&91k%O7zkfMb#X_v`m=MfwloBf|ON%Q@ zlhLU)z3_%u6izfPY_orv$qehS`m`FNlZ6A5zn7jS9T6NloOFsaAQyVT)gu?=fp;3o zeDXJLVFVf3RH=LNS82n3{k2HcuUq&1`I;!hzZ)!6QT-==t2y|J<5xvzSd3H0}=%WsL6(H zw;Hm)G>=%_N`r{7(-GlJ#(1!ddB+*ugL*nw9w8Ci5zCJ8zQKF9`14Y8#a&&um}P^< zk6&TySXo(-$@GG@XiV7N%mbhVabIWvBhF))LiO#g;o#iz^Jz^tq;?to-8OysGVuec&cVAwWhCTz zlMU-dmn;%v8$EE*-Q#jW>(ayQvh(jrwA0j7!dQ?)^ggHRtDh84B}3aPjtd9gT;7!0 z{gs5e_uNNECTz|vwOn1za{Qi1GFV`Yt*D6sUhT!1+q{GZsWHD{>uo65oA$srZGIPu9X7i!l!V=RA(R zJF9)vxQ^TN`-rN5-Vp9s%&b|mD+yze2+me*_ z&Fq%h8A|EouK~rwfw+gvPG;4g5EdEA296VX8EN3RnYl~C17kCNh;8zjd^{cNe%QO=)Z9$mRWS}J z^5R?&;uj%2J6HO#W)q14sjVh;MW?@a5mw&AN7<;gO;Fr9L;O4LBX&%9d^jB_swOdV z3R{<6eAS1$cpD%k;U#@qZ`Nug*o3|+#fv)sTSdWq2mLd8eRpyf!oD^(*ugME;);V{ z_6e7Ka7@)2upaE~yj1o`6b`>hu{g)}aCL8N{BSFaEP(Q<+bTM9IL^9rL5Xv zyROqRhMHnUYeQ0dUg*a-y-9X`tbqRaJ%rhlCu!1{UytP z^BD)lZQ)U&Aqfh!U%GFuRz9Iy7#gVr&|~vHLs@9IrqmM{kx}X3roy=%j~m);ftk_h z&F-e|WwQ+~RhH(fpOxE834;&H8G~smuUWk( z>o>?YCIFv=axw3s0mLQK`;sq1!^*_ap8?I*YdWDEQ{v~{6 zaGd1`R<%i2>bbE&3l&v?<#_p{Ux;tkV@5WJ99;gPvQ}|lifiHnhp?dCK3n4c-Z;;_hy1#DSIPI zN=rVD_SxX7s%+@p94zJqbBi1IF0635gnibN)Y5gnJyqkGp+LGrNIu-MDdHGX<^c{+ z{90|#-4bm*Pj8!B9aZ!54rdHAL`97$9T6asW|!ao@85)V_|M6+ApHk7L>se2UPB-d%07NQ#91={Zj>=u-c_yHV~|pr7Cn z4h5h?Q)?YFWbg(=r-mDa;t^-YsMH%L$eq#x!AJAcjh1$ohSoXZP9$oNj{Ya>h>BqH zhtkLwXW@!B#qP_vsIK&$yX&FifBcp7s%0rbqQ>id5s`rGf~f19I?A)k5(MfFy7T~i z<1@i9G8Bu>lTN={1gfaI`c>gRpiXhCn&{=_^?%Z+NA1e{Fa5#Ie82?p^{-MMyP`Bx zxo(}kWc`SrP-49}(bL27P3b|Q0A0OY?7)lsAres{{8@h`%6`}5>4BW*v#@yLTldWx zMZq=w^+WB3qj<~6Kz^@gU&R?6HQwMm>?4>=;0f}pvPp2k*6Ai{XdALqEgM#(yI$_) zTBU}8kp7EZ2>Zmo<^RQv;$UE9VEAH9vMOXrW8des;OoH__RtzH*0qhpo>-eei*Lue zdB0JwC{QO38X(woBB(tk_GC8ToLY?uOIYV6<7Z4K0@5{mccLu4r6!$X%SZw8q1`Ur z?l_3D`H-{_OJi-chuVd=9kGfB9KTnL0sKbEivB^4!abWs*=VQGJ}KXSyz;P}h&Y)L zx9oHD{&z+kr2hP1?}%RlZF|qTj~>_<1?D~Z6je#IGUg^3kf#9jw~+cen`>AUgiMvx z0LL^ig)m8|n0Gmo=e$LKj5uEVb^K{dQhl_F9ECfD{?KN2Gi z)m~{ZYbRX@0nyqC*i4EDKPn?3stWAr+?cAS3=FQUPvPvQunl*Ix#cCa7`@Gq)dXsA zX!L~%l{fE0;rxOGDV*w$UWY>S2IGAzINyF<_y*oDC-e*1VUX}Dh8S43A2D<*-$Pst z?aZ_%!cy|v4u$JgA5%8lL_h^B4gq8&iu}WF4ASEH9`}eKGmjio+heS}beh-CS2{+q}20^w-PuKb=-@6mL} z3%6&O@Xk)Dk&bjic&@11_U5J!U`yc}`k}QoCU(N&^B1}!C5rzdGy(-Oa`ahh8$ZoG zzfn_|vOhVnNwn=0TRc|^ylQ8ZWy`>)q!<1ctiO#L75gv3w$lkE*fUgG3=$%@%+HU% z-%Si)EzAY6ObVju_+)h%6^Y;KZD607Jy~2LH#bu0Kw9#hG$1PMgM$0;#KZwXd{wReoy0X9OqC(bT26Cx@G zr|(@NB_&nSa0K0vvUf@lr;}Gml*)J{l)w+A@dbW`Wwu3qZ`l_g8H1`#E?;oW6%As* zk14%XCFq>n`kX*AaG*_>c)~paXZWH`qU`9nFu&qFFjX~tCj+oaT3V*R+!J!w@1ca# ze9vk=Wd6tXv^1zk6eVB5qF(K>+L6Jj%Mk=;l1=0ga88bE;Y9&mSzUW0?9G{E^PsO6E>Xx{Q4f5 z;9>U3gMm}Kh`@I;R76`(hlV)(FAdS9)@^yAZx}nZ!UN$;y1q$KkAq!8R1x1x^qSL+ zvVutFN6($B)oaL3)%e3-iN56N)67XC&1xlATkMImOpBktG1QU>=953zt($0#yQ~^< zNk*1rJzIb7DS||{buE9-8Yc(DC6NM$1M5#A@K#UjUef6wBKVldkR@9EDJF6WTz?O% z%7VjXvDpM$A=WUT&en=_&t{j+4glt+*}%x1uHfM2S(KBXx=9L z8Bemw{-kL5B$Ne$0x4N1wxz7rG`4tG^_D@U)N~U#zmiJLmz#IJ`y^!g5$UD$nQdxcZLLrX>}!16qd!@=XXoe$*h!&~|4ce~UNQ7wtcwxn+q~o})lAYrtOKEI}I$w&b!I zTHITrYbhhd%_{-aeUE2neH$5kf_X%6`u7h`&Rbd+f~xT6z@QV+j>qbX3RP+AK99nJ zXkh@*8WuykKD0c{U{=r;Rl~H>sm-*VMR7)=hxtymyk{ii{Ffi#)DzGh(iH%J}^gEZ&X1xRobse$5CYI zg^2bO*%ttFCY@=ox#UMk-z`9t8s_fsWB^h~Om&x3$mwTl2ahor*MEB~>#ibqa<}f) zhmxP;e+TQD@Vz$-@S@e7RPljXWhUh0uuyJ{5Wyd7YbZRov>?GRdMt_yB!DJ>Jz-jF z89zg8&?V?INPP4=swCwx78FyZVcN9ckbU}WnSJx&Yo4fbZBY&@g1|jI!GJi!{c^jc zU3i5w@}zlo|JajpzMQWnD{Xb=GCKQkjR~f$|AoR{GpM_?=rtZU8{-$_i4wq1H1JP__Kw#~o^Q)0-#kV` zjkArVW?#E(0sv&XNa(=UKvdqr>#GI)Gg`n6&>u5rYX&8``m?}ZK2TY!kzvVUKA^cfNJ=G-dn!Z3n#APCV^9A@l?h4srV>~cKS(Pyy<92rlN6} zs-P<;6b$77hbe-$*#PotD;kEBB{!5{pEb_Ub!jjB!xp;9%C^TwPK;i z1H6e}36QBeBvDv&Zf=b)v_PMWlmU2D_dRa>qEpJ-vtFq;?bN7YTZw)qhPX(w3VKXgB$VW76a&CpyN#lA z75OF~h{F8OFB!mq|5JkjB;Y=$CXs;+LnuIjs40WeFd?*3T5yG!4Jj|C-w_(aU@s+e zhdEMdNKn*P#Hd|hG8mz>Yv^p}VX%oUYHCxvo7ZkU`0{S^m<1W9WBm^siYpp$RrJ&g zU{{O+L|dO~Qh4%xR4TBgXIl;75ZY*ybIR_@Lwy~qGWLthiX?dBl2#<(!&v=gzRM>j7n`dEm3HpOA^r<|TebG9M9 z>&6zO>7w3bI{BSi^G=gChZJdskyv?PN-h}Z^@msB+l6^YE|)nAwn(y^5CCScr)G3T zMbotn*<|1aG9jbgKL0b+2AIJEQG3v=O3!z{XK8g~1qPG}j{b$;1##rgRdr>1eE;~N zvVbzMysES6#(_(W0{Jj^c3Ls}0II!wk zi)N4CS%n!#InS&Jka}5QIQ-4d7z{>J!HnOP^@E=ymg>is`-t4a{3j$RJ%i?RK)7WY zK9Ah``TQ~l1K=b{BA;!odRfkoXvf43*#tTVc37w7hvC-r2Y96HzGw$SwhbmyW2hd{m<9C-75z> z25=UyB;V%JyY;7>7!xf!I3c=T!ij-{C4$>hAeza6rGyK^|*a{d+si>&M^!E-w! z&3!S6&LD-K+&cgP0qt{k@GS9p%@Y)MTEFu#7Cq0syXTDctSB*3kVGwb{)lT;~8c_j84_@8c9sO~17%wrVv?Z6Tu0eZ>+^kT$ni)9Tg{qgqVtsh$`3liO~ zvYpqB%0%ks6(3+`y`eo{yEBZcoSlJ7OR^!sbL03|(99!Tw?9bOd`1eb&TeKm_ zpZ8^Kj4W{d1(C=EUrqIo*S6mI?;P&M<2}qX6Tg${uTsb)UZh3*|F6OO*VT%)f^RK= z1s00Aax@gm{Y^%!GGzap>1)>S#slcUHsXJIC+1SFnyfY&+(UM}en|pc-Sv^cJ14ot=Al;1BnewUqTK8pzW0lqnvODJUNt9UYnA=s#-c?6e@;4)Q;K$>8Yc z6pQ=!;ac8KNPy$#$QWi+!o%Vrg8Mr|}^;Iwsq%OE@6&gu|vz+Rm0+LnGlW&u@&JwzzYx zRhh=BqLb=;X`}@p?0^sOneCjKHk$Gte#)<&{Qh&?=OL_9WnK5Z%M0nU=;PXcy7J;fBTH^1+u^)w}dV&qKKAb%Tcv0>1o8pnegf zc`VqlwY60+F>%{DS*#Ru6%cgk?PZtZe>|TwtN{$gkA^?I5jdMF;3M_-2dFu1vLUaJ zD(l}rEI1*h69ln9A9G^!{sxD{5;O859Cw(#1c>@5Q6;j&_{j|EIsn_t}f|fayL;L7ce^dN`ctr!i50}7ZejF$OcdG2uPgA z>c>}{7tOw`KN+TsD|Pd?JQI!*eIYnnm>jIsT*C1`CMoX*tG92AN>%ZI#Y*7{mBki! zmET*_Arm+v+3Z8B9|Bb>A|oCDzRB-qm)fX+#+yXZRe@krOENnn*ky6g&Xk30?$6|t z!wGC9fW|^jzS^ZHaa0*2f@U{>#QW_d(Pl3;&ETMMEt32W--VBU`eWOz(x{?@5jek9 zMWIy0aRbkI2db>FQrOOEa1RXIwOCvo(ZD;9mLc!+xte0(ReHp!BS_mI)9LS1cMtmK z5>_marR0xck`0!(Fc~#a!^8XD5ty-i)8h7lQ@75nr^|G*z}Es66jZa}Hgs|53y(LI zWMKMtJA>vv#$_wk)ztDg z?Ff5@76g{A!C@<4I_TB4Pm-@_g2Yk8d*=3)-#U%A-V31(A^9~r$5l{&l4znN=Et~f zSSgWrk*eDL!PVsti1&DpQRh;)GKo|*xkK4rqBkV;2Wz<|HJ9Xk>!kV6bd!0If9)Ew z;?lRK+UR3*f(H?=9_48M+E{bxl6+*f%9vP9SySnyB%Ws|19 zzDuo_KRSRu*NpbB+5KAPn`96uJ1K~%jw*WT*P+tT-__n|fBzI)<}VgCrDKI>{UTu z6g!WJb~_Kf+^@v&`~Vh<0xzo%t|zqHO6j}>Pk+lS#>g2wqv+S~A@scd?Z5pq$niTL z?aP2)v;y3;PObs6D$0VoIZl{ z2)o!>WJzgq0o< zK;lb(Bu=xrIfz4i>KpqF#zf53+xI1o6wVAsn#oSU;ai&wAuPB^41yA%QGQQCZiJQR zFSlU=?}T4o-^SN!Dzv7hj`)7@7{40h+z|h^Q|T%Bp0=So(I0exvAG zArxr+tvsf8@tF+z6|;!Rf=D}*8c~HWE?=b3#34rWNL=)_?i9G>?2sjw!WhVGR%s<-!rkeJv7u-X<7-@s;cA0QpRXP%4et@c0u zo|Z)+s<>`vS2c$=;9ij9=h(VY9fklKnDh0OO!y~Y+Df|Z6}ijO$xtvgXuh`KIwBex#GgF=RHj7Q7?OYabgKsIXTCh9D2fD zUt|-~c7k;6L%l;d_kL81r$OZyJI6 zmU;0r8*96QihOD-H#9p#A}yRJ>f<<^{RqW^s?J6$;?eBv19mNm6?iF-Ae5hXADe8K z@)jiCgNFWIiI@=>%gj3$xy>!|!A;_DgCIcfCx!n-z?Q?BUm2?mJ)*hIt;O-$682|4 z07BebN`HS#T!!bh)#!J$IxP~l?;tVJbbZy!S5y?LJ)ZdD*9+qaXqD5Y&OZWC=heo= zos{D{8f4Krp56V3lRDuN$G_3bj|jt|->`g4vR#~P(+};VUa?uryhk8bfJ4r=F#XUQ zUThr+YU9|%6J!>vFcW`LrEQWVj zUEplN`>?^$j8|$ zA0_rg$tW;Z6#Q=<3HZJ23U7c0I_8 z4B3}0i!G|Qr1B|coU`EMH?mNOdy9QsAI zbU?IDeU;>IddiGLr;?|9c&j^rt%OPV0b=aVA}&LK9YNG1vz>7gzCn2&!6tHK0Tu`s zYq($ay!JNp1yS0w2pYxY918CI&T0jgF6umXGNno^UB*3%KLhc0g~$)Z`@fcm-{r}u ziH+6$Bp=)&nlDVZc?8_!IXH0OO2>R>=psxpmqt2U^*29G6AFHfCdLJ$P-8w1%+N{< z4~ZSAkROF?HP)rC>5Zp5SHj|@`TCg1VOV?!AEkk8NJgOOF;hsPd(9kFEn7YwB9Z3X zFxV|QaqDXi91M1d`gxEeOfys~ z=VTh-07Ic0EF{$<{sG{g(GNPb5Y~=CMz`mriY!Q85$uG}m_AvjO(JgF>`5aApQdIsG`Q{P+~|B; zWh~(V>e>&MlH-r3$hX)qR-Qjiz+-$e51q#9C`ZTiim;eK1NYCN_r8qH4W}&NT;v_y zce9&_Ta7U@d3XTMXn9Lf?`Hg3S(1YP0g(eXipNNpHxUcDz;D1!O2JmGMc|ozePO9B z8POfikSOcG8!TjTlxz!xwh#eAog*i;TqtGmNSzv4W!%Mzx5)NZDy3hJM-K{|`9~)T zD%ItWRS;OrGdGep-x9?|NDCH?iHK-F&lE6fwBk!ZEcyiG`jS<7op`I{u|_=dh~Xg( z-ofS~CkL=M^`*bge~cy%;22|VpA@<_wr!j4pmp7OYYr?(A|W#%1hcW7(X#h!K93E7 z3$wJuZvspAEnLiB6H<6bzWfEa54mps9t=ZGtZyB^anF=py&1L)Ou^O1Vh4!w-sZ+d zPK^;0hu=GJDJucTKa*dNJU&~kYfovzqbc4dP8&Y?twyIyqlf~lZja|DJTnH87~%P& zkIw6gz$+5prBQw*#K59EiN=$^Z)D7?RENWeB|<~f&%X#{HTaFwsT#5|N5*K}SDFG# zjEs3_PEx0F14obvrs=7fZ=_Z^loNyAc{d@mNJ#t%$Z zFZ}qRv4O=iy)`a&e7Rz*J%#c%s+8CwFyLAVAazrMg$iNWbVW8$?u0AYYt;7Zq)c21 z{(|?Le;xI#Vru6>h=9apzx5^PXKt%@&wUPx)~TmhZ-hD@5{-`pu`$mvcVjW5GY&IR zMOAShh7)?l2WnG%W(Q63E?!-Q;?-Noe`-#$>~P_3dh_?sjD*hxuh=aCJmwm>bfh&o zCwIv4F;Ajj;?OXum4?nNvS(VRIrD<HncgGJ~ zFsh+;ABR`VeeWG1f_YJ)(pR(^vDlaZhQ*1>Q$QgkdafUod-{l$u8Fkn{EjK1nt#)p zo6C7fyFB~TUyN-(7(4V$uzf;_T#zcGQU%eeKkp;|B$-15SNBqGh&)sADOQf?d=-bs zg)7XGCE%+}EKMWJdDsJ|bn`H{*HTEsQ|KG4o z==E9ob|B$d#=xO0r(-yp5(6)D0ebsLM`gXWckODPe9ugl`(95x@eZ9VNliXkTfi1s zP{&65lv)P8Q0i0MDtk0<;>fVnW-TN~_ip5QR^K)PA0y>v$g#YssRM%qSSkMdy38pvmZOU+8Kc~P! zmkELAS1D(!4h-1AzS#56d6tJuH5(p6o~GA4q+RcEsmpyg}BtA6jD@%QCl z&Zzm7BjFXFkJ~()lfAQ3)z4&t# zA4*}cr*^ZAv%B511amH071Uyd%He@74yM(e1>b!xP6G!ySPj|UT9`i-pzuN!sj*W* zYF|14EZ`ZY#IbJ*AA2h%?DZYUoib%C#EcKHUJHyW+Oblx>(Aeh8p{8OSg##T&pNlN z#^y~XRSN(P&%#|t+hEa#1{e9HFSsxx8z;IFz%uj0Wapb10`8qRqeKeDO=vn4>PGa2 zZP=Ai_O9>aU^NUDz)M=Hd;FQ`11T3uexDlzwhVYkqy+5g(UJA9yrnUM!a1xRZIvb~ za$>~2cS};kCO^%onUkB&^hIDk!XQE$L^E%P))0iWB;C z9z9q$|KmDY_m7gu{bac@|@5qWYa}Y;J*&LCn zTW^rPd{x5i7lH}(2-WB0}^ zx(@b<03ok#jA2P_Dsnh{o-sGsSUFl5SIW<7TpUDv&QCyl_p=v#k4ct2O{P*eU^^uS z_kbLSxuF-lBvOJdS>{f+C}u?1M!iui+rg6#=T9+H)x!BWQZ)O@*e;8f#(fBrb@?QQ z<}u5LUxuuE|8Ua&Hy3-sm}gu{>b+n()}l&D59^(Y93?_T5r)Mi9t;DtAwM&}gV*lR&V#bQ~2FUi3C=6T=(&P}F(8jQmEbul%3(tCWPr z5ANs9@6z%S%d?Rs5&coA1e|W*_K7q!ge;2*fp_0nk9u^=70jjS3f;@k?v0b{&Q~#3+ff zO2&4p8+vAGF23uf%iE&_Yk%105lE`dq~VoUr#JoBy=zE%xAyGL_~($5hL4uf^^S+h z15L`&_(CJ+nj$M%CMJX><7|<04?<>KGZl~U#pt$*2881Atu_{fOM&|Jca#;LetE?m zjMaSF3qEbuPeEZ_SWxl|p;y-h4i(NUaUd~{G*bALC|o%lDq?eW7AZ0EllIY1R_I%A z?bhG}i9QmF&9XS?^S{u{KWgzX?^x}Eyx9ftia+biH-pz1PQLr!YB$l)Ry$c&*v5BL zAVuZ!<3$213K?zgtD~}ne`?5(=rWLW3)_nciN4}#Y7$bG4-y5R?by2^Y|8AGUQ_(vRLUz{7Z4njc<+rA z>4BrmGgSjhG%*gatDRh%g!_t)SqUu161MBaM?%MW&ShGbNves%B1R zok{eU@a@9Iq*AU99^#fDKrTy-GUjPjqN|cK$S(g@PFI;FZLF^kmk6mKA6gd9TE9i; z%<*Y~2Zk6J8p;qXnIgEa?q+rhG|pgoXm#!`;YFg zIxSGT#<_P0Yt_ykiFGoDN?o~3mus~zT^nmdA(&>d@5Wc}2#x3>p(%kvj*srjxZi|` z?WQFYa2cSdpupEFRzo5a0d>!PQG@7l7-17U~Ho2T{id=n+(j5L@BZ)5OsFbGp zpaDgpVSjF(xs?PIcPcD1?-#t#G~v%}V-_MGHa9}ZJ1EF0bxsX>Fzhd)*`mbv)lBk_ zq+oI2&-muwM9v=_uc&Ey(~KV{2m_VZHbR zE=Ys!rstK#rRNYYaN5$XrMpUMKimH$2ZgU<>{{Uns8f=!E1R!0~U`V{)J#8)xf zKKkjk&%!<>ZZURJt2-9$iQt1Vk%uY)xbcQmt>1?O8UUql2Qe(h_BtH%*f8q3kzaGA? zbkrqPd#gGVkF_yUA~Ku=hs@WT%R@+ntls)FX$T+}!p?Gskrc)o{kCzwl*0Ujc2F6+KJ zSFgC6ktK56$yI4qw|jYPi?5nodhV&P4!H94jM#8!azQq$`8DOq(Gu=!DCCjv0Ww&4OkRUd{v}g#YbTWCGArl~OR2dMS2S`|e&4^fBK~IRMS9w@8 z!e!2jbPoq#5Ecut-8q%&MU*P&&v9Uot)ER0`7{+3=^JC*FWY}~_UT4RGi$8R`a`)l)WG+U;)bcY5X?xO=T#(1U1nC;Gd;Y`MBdbm$ZH)d&a_WYrT51 z-xvG>##C^yM6;u1=TpXD!S+hEa=_kYxL09$@CLJ+fJ|2)Ni^J2>CXS4}MLJP3NQ7Q*4l|ApNDK<6fo9z@11J%zl`=Np)=3bfzvkypAxfw#zK{8 zATUJp!2e|D?G6Y^!3;^|j`~J%s!>Rhw7)3$+aHL%Tb(I`$|~Pkapi6%h%8 zT!GBpNiQ_iRPiY=h8sfKfZ}i--^rrT>Rbi|XjMnM{|MR8AdZgf!AQ(DlF8Cx*M$up z(KEZ?l<*mOnCcQcBXRC9y|$f?U$raq6WBwR^!Ga(s=IwQ)pj8V;>`##2X! zvoTA-(LOWJiSp$95*SH9tm^ON|KXcgg#Uj`y>~p-@&EphV~=Ccj$LGBbL?Z2ortnm zRvej`$0nPE?3KMY;n+e}WOMAjM~M7heZIfX=l%XSw_D|$*K@oc*ZsP#s@=#6{{puE z8p3BO96a%N|2$Ji8%|+O%9s&Sci*Ncbr(&LM*7%MHrYSp%M<64?-#6x*#1Q%3ghfx znV(IREEw9g6T;7aYUZE2&>rl3T@%tioe)#{!7$!S8n&QcsM-f`SS}=meg5Q7*n7;{ zN7|`qahSUreD6K6=3y*fQ{3JtfJF2LPU=cJy_&Dn=j&zi3pES}`|CBI)5yDPAIeEy^pUlr-nr4I)` zl>XZ=u@}oMIhC?J~nAT7kl51waB7U{bySvp}qhNZ0Kup!R z5<0B3=3NgUoQ-6NC-_o=!ij15N4R*P<2|KFYr)-D)O4=4KHEAyUs`@+2+;UgvHR$4 zgc%m-;G*NOhW(zTfy93d%V0m8Y9CO*T<|KL|LQA?f!Rql%=aH$9jIp)NHyP;zJTcvzoNd;rHY)2+)7( zeph`w!n2xAWo1jP8o~>I71!YC&Y%lg@BTrL+Hl48(WsD51c$v7%xTM$d!ksIYcfn$ z9BokJAK0qj_vNxIf)nq+3_nCA=eb28HrB-4glAF*QVik^`2ozqt;nG9>H_HUmfZo} z+gkAS@L0mr- zG#PmjCqU*OYFzxrt2VQkgW9tF)w3O1X%FPxuC4WeiLn2)dKv+HFqXF?e7q(9zSO$z zhdSZL(izjCiBwz81==qFFz!Xi$y%!TrSA9u_gN`wTf~L(ser&#%N-u#x=8eT+oLI& zF)+z4noVH-!}jZ@_4xUN;Fv$pz=TVISo~k=>=`|{=paH&C^Uj%7c@AclE^etC=p;01+ zKF9Ks8Rn{MmuLI*N&>(D0vTwPh&MaDS@QtY!%Vy@DeP`_5T&dO$B}*WBA{TWbXYuc|{ytz(@G?n4kD@NT;N3m#8p!m9Sn}jBZhQ*X@_G5jrwd(x&I}-va->B} z{X04UAgMcmjk(Kq9Cted6B{rOGiCPZ;jMzSl4(!-?NWp#S9+GjT+mPtbzI@OM@)WG zaddWG;-Z1m_kq_pQ=3Q(7`7KqJAtyI{3#f39`^qEQU6z#W*nv);;A@z8n^ZfJy31ajIyJLPD{&QgZoG4y2kTZ@i zge>AfKO(zR50{h501J=(mW-xr;^0C7-}moDBp>PGr(h@4_s1>5%Dzg;EP2DLTvSjHXol0I-&%y|#~^23u1hzYF@E$;KF zF1rW>%~hpe4BMJH=19HsO7F8gh*bLR{2UnwZ$>Aj%{Ap)yK?Q!kkP^DSRGxyXJcFq zVd&M6scEP(l_~F2e@-Mo06`-`*~$EUJ<(+~jzBMGKR4>ZEFVhjwvHF6xJ$fyb{6!* zRFR17iGgj2h}(;6XRYJ4{dfNnXd2mduO4Jxih7YW-wcFTeZ;`|ZAr3_?S4j~U;ozM zH$|7JUpXWH8D9IN$QX9wle%K3rElL02DD*;nD-d+PzfEEqQC}f{^swa*^74(ONj5mGQ{o!;fT~|;-o$jl3)BS%>pShaG?dj!K6z@#d{bb=lHW`D}6Tgm= zcx{kC2~BHt)33Vy*HB^F1KVS-rb3;)fBSBSt79`B5&OXS5qPtSP4W8 zY;cdi4-1n~G!mwBfED6HNX*Ik572C3`s`ylfoYLhEk-u|#o-UzNOZS{EyI^@VVbgE znS!r8Dt?ux{z2(uEIq8m5nnM%Gl)39ZCWjR#4&7I?eb>wyYqCj;lhN}>XC-VGBr;u z@W%bMzxCRkoR$`i`8zTY_>UL{GgC4`3hwjdtZe3;g?mS}2OZ%^;qTIH?J&Py?(+R( zu&Iv^-@5n3t{i95f1ZSYGw<4maZEq}>prWEs2(Z8?mj>Sfy{kjNOa%67TI@WRRmk;Z$Ns7M+rVVa)fy802WIXI5SYnwdc|J%f3*Mq z6`lYV;QM1WMkwE}F({N|3{1FjNjjtM=G8cS*vH_xGk?1r!%al^0EOnXx^Q^(?1cvQ zgfn@dy`#V~3oMCb{(^yxMYvS&kpSZXsa`LkLk?63z~g%8^|(Y(W`HxKn$}@NA=HTc zMWJRIma-uMl>fkk|NY11JvN%ON(|qWJlNT00e^@>_TtKoLq&_<&`XR<9wCJEZGX=4 z4d$O-Ubb^Uk83`P=!2j2Lsonp!clB`p6^}u!+5Exo>O{i&sq1d{E)xNJ+(EO? zx_avspc*IU0y1oAm&o>a1!|XK0EBKG&`A96Blv#=@7306 zoFZst^x%}u!NL5YY0T+~-~&#W9D*@PP}?w!bo>De>^6r&F@DAbdz7N#J>=Wu*P?Ph}IU z6LlX)Kl%SJtS*htTSeSjL=l?hcikj^u9)rGU8#0Qp$m^c9P@3xRXw!!q#X!ow97kJ z{knae;s9Cy5GHnUkdh+72Bjgw5-4l%`t7vzmkbLFJMSAy5_+5O?qqRJPFGeIQ0yJl znE-~zH`238yk1yT=nSohboJpHW6%(9YH+l-bmTOBG6Ie+#^umv^h9Fe9Ddo6ncGzY z^4+@w72pzFdaEnIZ;!;fM&+nIvOK&6<}N81xY{5(EP0bgyP2tX)x!~Z%b>8U+B%1z z5!*&~-kq&vi+0JTn z`nB%SOy)wZpugT-N6o@laZhJw#c#YGx=NfF;Nnlh-*pMVd$GGK8)95*Xg++v<(Mf- z0iuFJ>(mFJ4=CRxGm2@lD74ap-k2T{jBUVWG>^E_t*#Y%H<#yfZWE(Dk{EsRh(D2+ zxnuUI=XUJlocQJY#i`+%y1)$*M2+i;*XZxSkPYRg54tsrU|8+8-w{?D_}C$%^n{foc~SgHg=5v! zy}zK|O1(XL&(O_ST&WgL3h;`BYh{?9({3_RV$9hdJNef6Qb=y5)7mf-|Av!lIL5By z$8h{9uOJ~GE$imTjoL~>_&$=3g#!totIxKc?0x$2rp4>%GZFsrdF2yH8M{z=R^HX> z)xh`cAO5gzb-zioFd5ov&VCV1EEOgDxUXwjR3r* z6w<}<5tle$6(18*$l0pa<^%FuRCtN2qVW3U_h9~Wn`n47pD>fg0ThL7&22GWpgQ@< z&7*!72F9hA$m>+*<&MI{X@_uAVK@0ySMZkg17y%VuuEND+^6FaJKg_jElK!$w`;wZ zd%W^o8v(j;&Yuii>SnPL%I1}a&Obu|JWRSfe8Ne=@Z~`LB&)19U=Uo@({Ch|BE5`qUge>EEP zz49`k@u4eLzL+Zc^ZQW3cW3;}dKjQsVq`m%Vjz(~NYv?iveJ9>F9&n&kJuwWg~an) ze(H~iA;QZ&cH3Wq;o(Hg+%Cxfhn99M3-8pb!dd_8>*SP>(?oNAZ1556|>~_dUQ)APxPFo-){o+i04&K44@Ivyw zok<=bmvU3 zog^e>C6!mkDpsnWpD}p6a)9t)#G!AvCh{YZsI-~c_6i@@(NKi^nuN`eaCF&3h?@Ef z{PTk{$8){kslj8Z`-~K2SpmuD5!RlmJjB+xXiVX9AIH^d<&XWlk($F}R;%y&O8rkq z7LG^qc}LbHYJXm5aD!-#weFt7o9|*(HLXWGKDT!@{05vSmNu^+d(%sq8H4lZ+oL+GV6W++{O`rBPRzI^+z)S$mLyzIOrMqlYI0k;5|>;t@3?FyLhpYDiRZ3#a2rX!J8h}V zq^BB<5fGX(7INNe=I`A~FTHq|&wyQFHWk1iWQM*=4i7a>{U zhu#>3eG#si`{tyo9NtI)8Ha;h36eOJ8*u~5a+lb zj)r8vvqw)UbRu*sj$2L#ZG7lTz z?Oq9T8!0x$1LH9O(Hry%N7~O)3E1jR{%Q!?eox={(Km1XQArTH5b4aniaWafjF350{w#a~jVk?SH59 zLZRWHu%^n6?dgDFLDcuh;^x{(mvi;C!lmn3g34LnjgKczN7>9%=YF^e(Btj9(SMS? zhT{qiX7Lp1RhTroOA26smnAiIHaHFlv^N7i1vq~dI58^+=MfEUuOou11Oq}r6uj|u z`R4p*wZXCzavxmH;yas~bT6wygmP*KQ-7^|rT84$@J?F;a@1{$#o-01j7mB8*4LqR z;u{FL3Gwxl%nO$(Cxi61zu^8I6Wlg>S^1}zzuIo*Cn2_}m6^lj$V*dLt|#~TP56OT zYer76P#^{hEdkf<6^yKQEea@Y@c0<0p%KMSqKx1soH6JdPN1ft>BGm(_qq$+)yj#4 ze#p|N2t{Md5zX`h1J#I9glkt*7cH@qMl`ZBsJBc*@6w<~a@Lw6L^9$Axpn;cb|+ zQX2jKeY^s2kAJQXErl9@2>W3O2tc_=y(0g(cau`_8WoFB(K(w>_67oowN!fhht}5* z_^-WIbE+J4<;mQDm*=HcXwD3xBocj|h-n-Rinjh}=2>^`YdD&x%UV2@M83pv*0S|X z{WFJdaf7toB>8weH7dQ_-`3 zOl3vCHUcE|4&5HMh9OdAx>z6Cz^(MPgeXmL#B+Qnq2u2Q3yzkYMRVI%=q51TP`QDsiy)woJLt#|wKlAgyt9=Vi;^(Kq z!vnLiUhLhn8tOb;Pn}a*eA@(kf*(Ks(EVAD>jR%cUw52qIJhgdnDaN7cATq6)daI5 zvqfvUrk(x$1b)nRybQExK@gT_4C@I$4GH-9*?2fnujA1rA9$1NQ=QQvhLzaGCvP~a zQ?V0XvUn4Drpv9;7bTSr@ee+Pvr`Q2p879_Ca#k$>?mg#fRrfn3^P87O z=hUsTJsIo2S1lAw;5+8Q_}v&SCXRyp@Z9HTM!_BR<#YM(@q$rTMW+FkuX@BN_$h`> zb8YN~FBqQH?g#65xENH=Fak>atk4xm{$RiD*!9P%GuP!gsRPMU1=)LGU=jsiN)7}K zwi(i5vYGwOS8WxmeS7YpgB@(I*ZwjK7@JOMMiCW9^=KSu2YxeJH=*Z^yD1~oQ&|>M zaC!4Vj{>^mm2s05g!7NKTD)vp*$wuqk#m%L&MA0J=$QeS;GhqD)!6886h+US%BGEZ zJRvTbP{I(xrQrB+leEQPaFvsB>v+130=gM|X};mW#{oEf-q=S_5Ln5K;V2_3I2lSN zWLaQ1>PjEvMxiY$nNki^ekS3ASnsvHx#GfYgz#vcKzmpyNj&cy6w1x_TdKHuGxeAm zi;%>HD7Vn311bXrOy~)dG?`KPk)H%Ga33V#A0;116`QAR0B(`%-(6}%Aa87)${jvY zLF(TvIo|JK;nKxPbT~9;zg<`Qd~TxwPA7T1n3E6$!lWM`^61?R9<(9}Q4*ojc=SfN z=AFuPGikDQs};dqM1msrw2H2^EjwLS#gm&7{cAK~{iJ^V7&^ls>Tv_I?y%w$VVH}8 zyq_=%EfD+B47cM_ZDd6Q76#E^{mJ-5$1*5-a*LyWXPhdO5D*I2RXUA6oZH^l1G=YJ z3_+elk#X$)T$xnkEgtv)uxn)PozJbL{VbYGp(b+Fov)3ExZ8GBWswF}zp8>yjk|{6tSdmNaqHzT7Du87ks>HjH*efH^4;VS!LDRR zKp$|YmcF=I$)d%q<>GVC#GS(R`c;#~BLVi=zd}Un( z%Aw4z#jr(A1?Y9Ao_jr(!55&9ry_+jh>^}dN@O}QnaVKVULR?Dj2)K#-utH*;EfZ{ zdrkq-X5K{$c16Qb0E%VMpwnJ%V+;xm3P9eb0a{7sDD?+?9RCCpIBYq=CJcdFOCF*) zE{mW%8-ZVz>H)Ytl7;&vIvCZb*mqFC@NzJhe$!!Q%EEA24hv@_d$g33dZA1gu)QF9 z!m{Du)d}I6205zMV88t^Dz;Q?ylN0FbX)_N70Kg+nG#3QzC+XsORJO%dUT`;Cn@7a zOx+)ZOQg=d?F;giygOf-w!2v;-hbKXRFETjN+z%d;4Y*&*d!u&Cyd_!C5iN}iBDry z*PSYP5Xr*i;Cv7;I1ISHQ@Jg4kEAK;t8<*IZ5hkBi=r=&5&@pfu$wu+5P(?iISmI! zhRx7%S-$6qBEpupZc42AeFQ2?=&uuzCRYEX0e!-?^rYT?H zJ+_~?#j=v6gu?77hu&~FAR{`fczx*bwt}SY+%&(99ki%##e3qF$ST{vp-{v`r((@hg$6vjzIhb=}{j3@d>b70l*aD5k%K5#UrnVL0~Q2>pax6uTip-G9^4z|c53&{QS=;FINk4YKT| z#O`l7R{!ReuuK$%gVQUPE$Uebu$0@D7eHiH+DrO%f-!~~s!-xd0x;@M@CzLS9@z{= z4d}pyLZ`=v!up{Vr5Uw1*qAaeqm!>`s#^m&dpm7OZf|1 z#9i1tt1`;+bv}<;e7n})5K<;&#Vb16$Ws$3pULlQhc7Hx=6HU5>}D!uwlI_g94QZg zn}7rdp$YhlR`FC-RVj$7c`ce7$5Vg>`AX)o`YO-yLfg#PjHnVrQv=swJ*k(3%)5bm z{yaaM#EST~EDioMfsItv*o-*{MrlHd3N7-O^a&{5kBJcMtyvk9hQy%@4i=H;v?Pw8 z8z+RMihbrV;dkaE$|R{s7X9;|y>a$e%x%0ODks<+_itgY8TxnK96JK^cVNqJannFM z$n9(1zvn2_Nw?NV@o6nGlq10gM-B$dhe&~NC>19Ku(JaR9!Ub2Tz~X?x}A7)D{*G4 z+w5FEy_Dn`q%K}o+)sbStDS3GNuMQL^H8h!K9?hy(<2`8=*QrX{b)KkqBYFRt@DB7 zTpBM)F);X;1AaEgY7qrqzB?&v3Npp;NW_L{`<%w41rV%a+XF`ft69AXD=8m(DT5h0 zJ(c#0z%AViC>|U(&tFW@Mf>zEvg5e7g73(s2H>sWC?q=JT9zImlxgfokaEnL`f|s+ zNBsja^ux65$rL(Uz=9df6m8$`FJT#>xu12>l1ZhEh6z^(1h9cbU?vx&MZL70UaJ@} z`28UHLOJ3VpsOs7X3OH89kx580OD5jep}I@gfE@Jc(AklBxPPzh@tI|k#B9Nau){125?CPuslLBAt7A8pdx*}R!`3AF- z^wWfKZZrQ(=<_x(vc3|xQ+)KK08b|O0A|;V&OVN)qm&{i5X`U4JRsU!|3n8%rOot8 z^feCl2u?1mkMEKAUOy;UFq><@Y?+;HA7aE_do`5IRVtp#LWm#w>U!^ZHIPVb;_uVZ zkJghr34ihO$#P%75%{h>KQv^Cr2)$8D)3?$Iwz^sliR2v5q&&5fELy0IPM z|KK)67*Z-siq)Q)Bk2(qMIf^fPz6f_@qQ5$ij88@3WOLeFjtGyQ&dG&dHzS&L7FT* zpvQ>=qOckIB>A|IdFy#p(1+(QdCX^*nG7l?isOn+=fJN0^)kT$jx=|`6M93h$WgKZ z%759iU+@VbTX^?07B}rB4tJ8}S)q(}iSIC)W^5mh^H*EXM3n%FeM}YPUF5M5M z-zq^TQL7_w48M$I(vkv%+03uxQY3l-1*Ez!v+DUL*}FurRe@aC)ZxpH=jg1(3(+Y? zcw?*Av-sQJ(BB&ELO_9H@v~wEBrfxuY`6gmFAWsgstbn6nka*6#C70IFrrx$A_I{Y zDJ^Hbcnb|Sk!5??f2$in1*PfukPJZi^K}X8>F)!t@A5*nZypb3Th=drXR#K3e(Jd5 zih?DC!|L=LgX&q&$hs7szQD~5!rKAr=?c2=hpN^lajaBXsI}>o9s^G0@hl}k#|b5H z)&+3=Z^+G~!-Xc?0j6yEjg9YaJowMXX^QK3X9{Or86J=6!?RvK8YXg#`sp3=ve*GP z2TdI@k7L~bs{jStFWMYRqR*t3i%mB(vV@y0v`KmhUxk#|kmBG*4ZebIpB!S-kXHSV z981a_`hQ1u?6bcahA6Y3^-bRve9`jVpv^7~(ba%Ap%(MWQTyb%OcqBOH+ij6axT4O zSX}v}tf=m6OdJQLr`;F2oql)HV=t21mgkBMHrHBKvvsFAGY6WV`%6P39_fghRvr{f z!cd3(e$?HPvRfTAyO65_b*ui+Wr%cvNr!wn4LC11EEDS4II8R&g>C~ z%~}6!04n)m6l$OTGu)>%1ZjMB09GZpQuqe1B1Y>vAygcW*w3p!U;D|f<(*`our}ox z^1ut{8`l8R9AkmMR|*ZoDl1=$!AQc(%}dN8mHL(&IP4>WK(E(fX>N)i4@*Sq_+LNz z6__tfZoRki<4bdg{?=`j{J|?NHv{^iWYgpR0+*b$nxk@Lqnqz0X1E@CHPatj$sF3t z`kwH{ZqAOpyEnSwl2&G}g|1Xs3ln1gl`+YqhWs7vkqOVzg3kvcUI;tc!nWM(EGz9} zjRnaCir(q2CzH>guSjgHnW;+WvFV2m4>Syf_mfJGFiX9=NyaU1;x)Nwa)fmSqWn+X zzmPH10)z7D;cb$4hMgNH%Q1f5Vl`dpBH7+od^fFO*;3DkSk8D%bLF05J^!j9(Y`V? zInqCbK{q}I*3&`XA`$JShBDpc>)Yq953G;jH>hEWL)UI3Yb$42QY1KE|8|q9Dkbn9 z2T}p|n3xFBiSObd(hvqJC7MDN_{r9#gOTISc_91vnyghRhU%G|KNUKa8Dti+$PAdh z1kg8$Q?na4TGas7^t(Q+tnZXvBM?m+qO&VRL5c{7eMU$D`BeIa*DPEXsVVY@Zvr>MtA`c=LworxajZ%6wR>J?7mf zBH>IIp1oT;ml2!ev9A=f4nx~N;*fGgI$+g;@VCB8*J_AenRyL-EKc^a%n(7x5zOG! zdS8x)!!U*Xs^9fWm!bg3>(+2HK(mH@0S$2}xtC1o7vUOWH6w@uACt7e6zN3qZL>Wq z4(93)EDI5)g*aNvb3Gj_{2}n_C5_;T) zmQTvgT5oNN_G&!+D7(h4(v_*D(hIY}++)qtXL-;6GV9T@1feG~!$Ioj+c%^kj^|KoQ|ftr91!$5*_oU)IAnLS(f6YfPid7*$_ zR|`R=i2t@d)P@_5wwp(7S+*tccCxQUH=rrY&)dBR*W@D_&b%)?hhLhht-;yp*0<@; zPh+R?q)dT{O}yYYByrSESJUq8497bJQuE8(tBumvs+b0_ErTz6eZ0Gx*o=j6i~YHg_a$CMbd4#Bg7(3q5vtnONZpWSF{_ zAhs@*ZV8^F%#{Dy@U9er0VI?J{74`m*r+!af0~0x%Df4#sI-cQ1aYtbJUOgDV7yDG zS(!WdNZL5aF4ouS9_EG42pJ^MLv2h4fqbi&6a{r|w7zX9K+Il`f4RAM6s7Qp$NJY| zzG$Z4yKTAEwFnlX6oRw2{*R2!Cg+>uNxCVnDM_vaH6K^*jb=*NccFK3M|r^!q^}o} z@rCL5BccEo8p4}oaNaCjEJW)|NE%LnoSu;f1^rhU(=fsE!1B!DO`iB3I}08+16*mx za{DjVO|?t}&mACE5J>dwyNH)q!M~megK!Fntd4x^zvMq%CAY-uCbvYu{?%KJew11WJB{8hZ1^dL`1p?+&f0yy)t;Ls>6|`6iTeZ# zP50RSg(}8?&x%Id1w*e^0M|JN&gf7bs2H_sNwP^iA&*W#LPk5kPi;KewpX-^eUPSn zw^u*;ENBqp!lL*Ei|0z%lkd$*b}o*66SCR!22Z%raPv6<9eWg1j8bc0gkEFMEN{7)zart2~}lrsol(%0=M&(8mJ3 zC`zt(CVV3+rZf<^J*0pDl2c9l&`9&-$Eg`(Qy&G%_yWRffx*?J@>&F~<{j{pmbc*C$cBLHwCU53V4 z2M19JcqTj%rt{6YtHNSXpj3D!dbL97;$1ygE9+_Y+jC@BMNIp4tmEOzf=$n3oaONpqDq?Fa2D66(B`H-N*|gndqF=ht^@MFche2e z+`zF>VzUpUCG`AnO9Rx(u}YCSPq1);)5)9RZca0+esrNeqFP2vN$@}q4UIv6Y;nUR zF_)-}enMLT8`yfCT4oJ-AqurN#E=`D9&d_#H_Gq(7MV zG6~ep2Fqg;f4%4Ujuk(fg+mUkhTzXbi|-Z4a|$sQlAO173s>%L0VV01{w~moSov+P zi(o1!cp^L+Na_j4PZ=^EYo#$%YQf}hXLg~B@PkK|2YV1NvH!AP?gRqRW^eTRDkGl$ zYarbd>0tZXz-Xc|(q`iJBaKw#f03L<{tbC0q^wuU0U!E*UWQ%qx=vLR+ec$A0t$EEiQ#60Eqb@vnck6M|Pj#C(JZ0Gt8!e0d(EIcnae z6Y7?lp(lM&R0*867RBg4+;T*J1L0{Y?n;^TG9K!7$-)#y!0PuJD&mL2u+Iu2gCpWF zc^wY^R!sTPxx(MHycV9Ux8yeXryF6Qg7_IuzGC4pI7v~D#j!D&{n^^wSy-9+WxxHI za?3`k;8!~z6!9l~b7V-Di4+I!wEDhH{L8*jF~~4|H^X>~u*g#qz)TF#m)&72N&sAB zJ5yz8Z}5-E8sW+#~lM7j!(K!0qvHN$-3M&syWrw)`Ob$ z-a8dUs6effzQ1nK^6+&Q?dA^w>CTJkYlW+6^1*4jp zLT~XKT?fE~azI(m8lEsyZWQXyR9a!+&sq2aU4#f+ ztL)-F1ZjwM4JrHk%OVrUQd%gi5u^0c`&Q=LcfWWIB&o3@DY+BMBHx7K6^#HySqg`H zy;s;8mW5`1rnBA&K`q{MhWX}CfRUt;k|Q%65J!5UIsBMgWm1c2DGs#g|AXc&${!E*6 zdNe^97AoO0|JK}1o5Wl6>Uf6O9X}zDP?>%Xy}*i2VJNFi*o$Ce%ir5gh#u1g4#c1a zdkw2&6Kd)xc+p_t@JNU$++XA{Nrr{Kv9?%w-D&-^(d2%BVJTF$6n(-RP7#@;v?*A? zh!2VHc7OLqv=6uR5z_^7vReT#r#NCwmT779`AaoUxuH8Q&5}s--FfKtV2jVYN7`W5 zcU0FZ$19V62z6n2Eq|$=g89<{9nJqq~m` zpv>~YjL$KIW8Ci2E#s=E{37vw(Lci)o*PZO9^}}pr3=u(IB$hv1(UfJhV*X8R}M?1 zH$M*cc^JF z&!W^OG4?wLwv|aSH-w*3a&kn>$xqH#Mlaf|+yR!1WKSJ^Sc{0%oljTS+QLVP1Cwv_ z{z7b2TE}9d7tLCV2Iat&&=*}PtxK`Uc$~B$$~C79b)K{wjuAs>h9I!QSOjUdpetPE z6+@R~EWBx5uvKL7<@4YmT3Ke#TE>^^gF5oX4O zgLC#5zR_po#qtWG;cm%gS?|r8&Q=-@ns|@bi>V-}wvT`5SwY|0-0J0JLfyHxLp5;c z>z!PFSJFdQRL>6Wk0*sWS0j+Gy!&rhjg8w9q}H980e{h=O%UF=yRev88kJBe?!MJR zN4pRIGbW?V@h_w^Po}JUu}E@~OtfI^vOIxMy?0RrV78M`x{n!VToh1+mAQ&Hjb@ZZ zP6YEEoJ)8+JZ=6wFWOH;NKFx`+};{lL3h0PbWRtP$0BO;9?lf3j{j@HB|N%V!3Jmi z$e;MCQ=+txJ?Yi-w$WElQn}slCmy02N3q{sYtW z<+B&bC&yF4WA&u1U#yHjJyPJ~D^1Cdp!S*8c6MIdC`$})lh`^@6lArveKwT3icQzl zdFQeD{5PyDin;y6)L=q$OB^oo00suhYZcZZZnxe3&HYa?yKe3*I+rrfXei%Mt_ zCI!toKtzyXax#BK>Ko@}C++L%1i}35)_zXjk2g#;r9`T4!SF{jZr#Ec#e_Uy`C=rr zq{29F<(@FAo_{~tK9NCh73Hku`O{M%-5JYAKd!?9$b1!5TJ!3_t7Uvc@`rKUSAGJAe$MWqTzspAXGK#9yS0w=YaKD<=@|!v9zwUbyw?7}` z6T9=!on<=pth|dlT2KA56hEuJPd zAl4B#1#~z!cm^bt)o|vcn1X^pX%WX8sCie55ou|G)c4Q&d4y6KZDFDBm|b<{H#pp? zotMfZh1r7XaDzdww-9~c9Be>;Q;TEm;C=phAz2Q;GbJc2n=q(>u{?AGQ1N)!8UhEZTtQnbPaFVY?Y1Qo6h~gN;wNFR?P^$I=4k4f@uw7UM`QYEn%Z+4e0%+%Qp^ zezl)@{Loja72Z>+IICUukq-WTK66rJYpBq%<4HWM@mlm)VxHG*V(Rn}b*vF&Nv5~c zZvX2>x>gAMpH&MD^Md%ZfO6rIo~mLpcZvVe5yhtr-^QI|931IK7v2g}`kZ5%;sIys zTPC}yL&aSG8F~6Y7SwWnETf`+yVOemaBs61kiSrrB;Bc|>Y9GJs|etbhO%*MY0k$1 z?Yxqrf1{t{bm~MprxA3T;yG)#oOp8lr98jHkte(a*PXl*%EO-AU(IjFV0WbXy+(_J zlf=pfOwTTJs>eqnjplrhaKMAW=gx5^Sl6xbdWlPhA!C+s{U zRI&qH+^~>{nvc}udW)poZ#kh%Pw+^J<7oUT=zFtyYSTVxO1SNiu%v4{@I~Rd7^I9- zt`#l$Gm^V>@P3dd%6EBcb=sgRE%F@ z@>#Y=^ZI|>DI4(De2l{~mPEz*g+~35$iqY!m_3QPK&z1T1-7?>qvt0s5hoN93-p=q znUeQVp<^sqCu|$Gw+%1k<^H>%1;TpDL2|7kHpzT@xxlZ@Wju&Wrb<*C9r5x7=yJtA z;zjTZ8u)1eYd~FM`^^>F>hFj6BY&v-;bE6dRZ(`;fAVJjSsM;ygv{Y+X)qxfqfpnv zEc$Vn3+KcHj^r-xM-XX!3)$w;3t-k2`KEC-K zDpGgr;-Pc4ylN=>N2y?O_Qzd4fS{kIq@toab#hZuBe*(^ldAaYoc})K>G&aeJEFbN z_Ezh%?Z#pz^ZJefv}QSV@o2Kd`NHl z0NO8F)vYY;rb=tCh(#BZO;I;^yu-6-(C8#Yby#h%T>c&nSN{F!q5Dr0KbHK6}O*2(sN!x?0~sk%SxD zVS;D>>b2R}470mMn$8`c9j!JI$F;Uj@9zXHC;Yua;eMh&*{7%B!o%9G1O1RE7LeIN zu!Bw~|3oQ{X}c;RllXWCeeH8n80^tXim-otc@xh2g-^y~cqD4ztBJJm{@R41%bTr= zw2j#gyvT-x{3mS{B=8|yC|m`{;8c#|G$DIfwddxPKRM<;v5@mxaE0lS{_(d^g7$}ZvQv25qQ z$HQ3)^gg+Zs^IpKkq+jc8)ebX-BqU@E;KJ$pwn)eziHU^=<2ql>#o7%iGyy^v9g!% zCHtdW2g{p>%iDMtatAp2u0NH1lvi)*zs^q5$WO=2*v?YAP8Ry3Pz}iMbcGsi2eBZB478| z-`?B^_w7c_HVDDPN87njzk#*w>^CxlZLb6c$^A@T`93H53rPBtq`W`yx&xxf0OQ=& zAYUdK0xLjz91-Ea0z_*Z%nNzC9v-bNwisGENJ}%BY95fR%pxLIfn@yw(X^^L>bOw@ zzM=W<_+Ju0o^2`>eN1QDm4^o|J>4U+piN*cu?{1?BbeQAC0_b0!FMNEA48$sLPBQO zC;u42)4%t(M3+}=dxvY?D|!G$TD~@1;_zxz9riskH@7QaY2sctSAsi$I1@rYopl9t zbptgK*H52!qpvkwcsnc2{@ddI+3MzM3bTLi2Z}nQ3j1n@o)CWf@@{p6<4u8xzTxy< zA1&jQm0!&rx-MlG2fLV?FI4vT0gBC$qyD#c ze;vqJ(FfX9jYQ%&Yb$J1vLYA5&)?6;<4>?STP?96%a|?rs?A zZUG5tX-Q!a=^7fOLj~!QP?2ts?i8hCq(M-+dz zVc(M7*)$3cIXC=BaeQ>4{^q^rUk=>9>l@_%x7H7W9H3T%e zQ5sY{=i>vo^vuzn2{Iw*D{=km-|}RG_Wo={a;T$$}RN3l+E zDs|a)9is+8uznQ!kK*c|-y^4wXtRifY+e~3_SeUSh2J6{!GB>zu*E+IESX=cwqC{y z34c`5;(<2>-H3UN6qRcCjR3X5;**`3!VZpaNXoq=ED{CsPqrsK zhx7aU`_C^9^Rp)M#FL)BXws|ZM>e`G+dw#YEov~<4FENRy>Ao=&}~C3v!#U;vjM4M ziT3f@)faa_N^YP(qXxpxYHT&>&`#&~cn>M~yy2wW=C5V_M7+PX!`M*M@6#5_X!Fva zeZg}9lr<_8>#ofcU-*yH5wDZ{&OCUck6$`DYJO^NqA^#MTf~5&E80KVpWgv!v0tOiFyv=~1BP`5 z;Z~!MCnVv&r!jFEDkDS&bM&Rrk?&659ndr4Z?K+&9(h>54hnsumuJB;-mvcR7RB)A zt&QKBJ(k$Rvky2yYm{?!zn!p%*$y`$o<|2?Pa(6$k0cq2wFfdK^D@L&L;5gZOKAgg zH`E^YJ4g=JAc#|~wt0~gOH7nES8h(>6_+sE)1y~ErLn~Rq^1@Hl0s0Nri-?(3??fsu_3JGL(bCl~A_=_^Y;Cq`KmlO_7>xR?#@iz;rzL!njpF`dDa z?=v!DJTABG(CGx$3g~m>B0yWhr8;SML^NC5(H@Dqoy%_Iyk8wGh_)@&28jDL zhpft|Od_5Q_Cg6yN}hrbPZiLC)`=9;zU7lv7)1cQuvAfTbl@3)A}M`8J6i?Za))WLiua%1GoIDGrO;;) z#Xe=UDCgygi9-=Am`4{O?+=%t z*V~t^=tbD-nS} zPRYy1_{04-22=au=22E!2mvO{k1EQv(*C4rtKUNYF0_hgf@0)`n_x1pv4zFm7nGhe zNrh^4Y86|d4*1QhK!!9->^lFtt}n*3B!ObR?oz0$TBIXhs4)Ak!D(&F@r$ommF{L*qgU~B_QnNnXs(e@-n<=2lMZO;58_TX z1n{rh!&&VB{|uh?{imISP~sspfz+>SOY_+5|8B_nGs-8!Oz1Eq_T>9PS`Nc9f512X zx;SCHs_<%rz^Q}m;qWjmvFCyR!#62)ok`=F`kRdrLwLK{OUjc_#&_4uPU?7ubiROG zC`yc*JU+>&@eaY2HHb4{?66fU4;G zd$?OAY@W@#EZ;f!yR)i_+lX2QQUU=Ay6f8a{S3fap-Wyq3b;ymj5vUlq-i}60pk4@ z*9;<2K!KKiDL(St@S_$BO(7XR7D|*+B?S*5i5@lKcz8Jd5_G(%w4m%Q62O4I{xe5> ze0-{;Cz!y~xd4<&m@q)ysE<#wsvyNbzDt@eZKl<4oG-MyTOOxkoiYJLr=wEslto8+ z_rI#gh2enE#t!{^k}S~N3Yg*9z+@n`nHkMAzS$TesexRp5&5iSGyq6mOM3bUG8ECR zv%}oRZW??1M=@Y#B1KaS2f1eo;3)}~VM5Z_{3q8C4Kr+U69@J;PYbFcQZH1`a>(iG z9GC+FuS+tPN7@qzyy8vl_kIu5k*7-VDE)GXLNcXy%Gr2_7Qu)U?yTdw4j5} z!~Duk%mewBji0ELBDg-+Er^L{gk{4vTuAOUNlXAw!*`ehB<-k{PU+U~oDH3(MyVkT z;1+~ZFMVO?<~05rBSh+|EGu!AM~5SlPY>7pHixE+1?(nKG_5b!Yx)y-x{Ce1|0+%P z3#`ho_v3G;uQ)oslsV`Yy#7gB9rW_0XPRq%Ta3v_ZhP)q<;gz@``M9DZ!tK1P4l;; z909oRsc?bSQFr8PA_|Upxr;x`wjwndB#@s~t z>IG9B+WM^paXyHs6B>Vwe{+iS-W(T-pzT*^iTK13RO;eJ@VzsnUok)~)L+c0%|9!5 z^BAC{s@{bL#G~>STb{|0f=mFhSJV>@c-7wXL>@wuFL8GU&brC%c|h9n((QGgvF655 zM6M8+nB$pD(uJvo5W1TDJFqvU-9*ZlOjYG?U-+Qn7p5LuJ6!Zibe^G0e0gQ#K5i zWu4HMiwrYculKkSUoNlVLI^B23#p99f2I&NZ@|H&x6(DHFQo#?Z=SmA-<=)K8+e|U z`?{s>%NcYy^4TeteaL%d9VsP5GX9MNA+U#jH2O0fyup?o5FUBDdx;l8)9FQl2_=#Q ziA`NK5y9p7!1#T{b2qU;u}xUdo4TALXeM7qMquFTS!A!g?$%)=#t@M}@@q8(?mi0G z=nMr@X2a;lGyQ-jTfAotKG6YT()HQz+0*+B8CfNm5bZA(a9R!ezLgcmqoVmPxktPC zrfPy#BBCN<%)ul51T;ISBin(&+$36QE_`T5;1!T9$u6m`4J(I;ZrZrU-3Pte8vk-O zO+9CtB-;_KZJbrr9E2y_qX#s5U5==AURVlIUK$E96D~)j>DFm z$s|^6CQ3B-CM3$&k`x2M2~q~_PlVRui0{bFCI_Q#)o}e|Mz=9tcL5M)Q<|+LP;^^p zdBh&xrF>G@hIP)0LatSXl7M&Livg&?z(`!c4}sqIrl#4rH>?_dl1B_V??xeuv5<5f zes>=%xQPW)uJ@=Zlgm2EY`dF0GQy3)JV4wYl|k7>rb7wSt$VW{1(a`Jygyh@1;wXpUPt7n)>L~^>3>bN-19z;?p?6~Wg7N%-CG((ZM1h! z1&K$VkBO16e^cua63(`?rfSBg{Oi(AIYNy$M11v%04Qsm}?`^Z=YkT{6FCY&k*x`>zPFHw?S*%m$ zhPa|NQDIbsk#+~CBf(#VZZx=DX#vTH|TD1&Go zof5!wA-Jmd29`RekipAw^d^dCsC6P18ppwf)t#= zC>)S40*%s8W|he{_J)5X1h_&O@c2#nU8;7ryPTz>KpP~aZ%aYF0uS~WPjd$7&uvPW zXgo7*3}jNd-P-UXaeErCwGlE%wd}>spz<2D9|9% z^1_3k5Qd)~O*7h2evg0jad2JIJM#|!Hd+&uG2eV03WgtU$Y%l_o7a}6Eb$@VWK8Gp zB*r0rxH0@%A)cFe0-Kn(rgd^0eX6Reh`$% zN2^OdO^kQ$*HX;djNS{{D8iCy@-JDyg>tqDps44YUi@0~(-*Ha5do6BDxZ0t__&!k zxjC1O6OMAoAWJ1Wi)M2VT)f@Qp47Q4R#+TkGT>{^NPA@fmoX5xdgI7mXTLel`-#Em zy<0_~>!+xX0GFt9lvXyf;-6g0L3!FHS^y}ahCBLjHK z0%oCD6TtK^##K#*RlvPhwu$>ibNw@WKrIrh?E~h9+-3S<=*i~J zq{{inh!pv#F0^3pUB}t_G-;><%frWCpWzk?f-m6RfCj)Y=snJOw9eh$+`M?SSiG*9G74$P(x zr9}q)jicbR@~l(NHy{-;WfT|}W;ar4IMRl_$Db@brByvaF8qHhalK%H zIO$b;a=7EORbhworQ)YH&4pfGTn!2rN*sfHVh)K?4PH0aQu$-nx3l{%Bur|GZO2qFEHg#?IE&aPK^8cnw^op=I3jpp_khb*|5wTfJp^d>j(NW)+RdUB2)#u^ z>3Z}3P8MVjIp!me4%O3ku*ta6ru0h$+gUI_EE)D_vS(su|G}4MR_z|5m;~THhG(js zk_vqo{x+`QcsV-^oX6(~&-G7$w|7Ofh8IS=f3Q#&>VM;}&osHRs;L?I6PTk+ZyjW7 z)^^46Z~tDFMPyK9t0adx>G!K@Q->?WV!*H=w03RhXi(hQ3xF!uL3EF-zpcSOjBfSv zXbRqCQJsBc8|B;b2_1qc{%R551#1uxdK|BV7W1$Q`g=Fm^~H!kyHi9c6T9!$P9B4+ zOCBsjU7S^w^mAfanGDWQKmbe~TXQqEp8VR3?O7bccnh}=K;#{~uE%pz)avn= z+?v^rL^}|I)sA)6m%V7DQo~vA!u+je&ZegJbVdc1Aw>*siZ#} z;+f$>?Sw>&EsY)$M(Pa~2XlT8)d5n#sfmg5^)XTEjU<<_ijO#UVOTAG>saSYE0n&X`+7K;sf0bC~HBTM>x2AHY>dZ-$@zg*qJKv?;%@iQ$p^3F0XlMw$!=Wq$|f4E!k5)p=H1_0c2+2)J{? zK|E#l&x&2gZaE@#O-dQA`Ry=Z>0kBbKrlHH?MyG2MZ5XS`OF^;Ja67px6Q}k5y-Mg z|5p-sSweY)=>;iF%P08hN5mHidm3x1VxV%!5d$w8aPhrw_S~BN^h3MI7>p^(a6tLJ zBqxQQ%BGxCePprX`1=$q+MghR@ltlYJ-$*HY%K%#rTCIG9w%0hYjYJ;Cqpf=FvD5w z+(>idqDD}r(#UND=yJDH{559yUgqGUM|7S67;J#@zEIG42ekE(3gN5zmn9@hKWR^8 z2OyAJYDggf`C`a#?y25(@@Ha5u=(91f9>^=(q0hn{@qU^uq2q45%`D`kmcmVA7f1=!$xkaFim;maT6X9O~fzy`0i$7 zVElMSDPf20_P*M=>-MTxLec*YBVAKocx*V%&@FL(@&cKQ9X8bKzm?{t4Kjoyi8~f{# zs>^2%Ljcn&U2@hKB!msU9{ZZKO1p;*sAtHf4C=J^#R}NyF2(=ohlYi7`9}iANY`yk zvSlhqY-B$Q!~->~6 zG5_Ko6hce+l0FFmW{RLh<&{{Dv>Usa4S>&xTeEaZT5%72G1Up2%jMgTpS+jDejqjQBx1bZ<$A>Z;E- zs~Z5n8Bm0iLw4T9N?^+|ln{symWO__k9D!7(Io~kGPuTt7j||55ptkm!7yMQ8h0EM zMPIr-v_cV19=i*Is1aPgW2*QRri0$*VKN4U$2q(?(%jLnX)7MT^Ni;)__b@qhHA61 zTP(r{z_3{;Ed~CRWHb!Xd_koTK0$|>pC`if@!$OnAq7|*l?XcHf(yn}in;K*;>Vbf zjg%Yxxit1UFfN3tntUC=`r?pxO7qDYhQ5I4hT<`Jq4UxlQszk~wmJlBo@mC#iu4=T zIWpr^Cg9;PzWhl^7FC$4meR?rx-_|7&S2?V2(S944{W0H$LT85vEd2yfDz=>RHR@! zj6%8d!q%uNnqs!y3<5vwE$!2EU{{qI789PDkV52_;=(TRcYW?p<#)_)yF5$t!8otx z8(&)Iqr+bRar6;$lifnG|IBO(0^giH!-P(>Rvw6&NarQG6p%N(NEc;^oG_$Wl8^GKWrU+~BD4mCizr07kn| zI2W2({_FFO01`Ycf|7IZ&h-N7624Tt_8*t$t|_3BEp!fi=Ie6t#9wLN^O%aKP`6YQ z;rrh$)SHRB*F<{r0)+w70$pCX+#1p>Pp0iY2B^?jv0@ST_hq)Z?&`%CeJlEI@mTWl z)2dGfg2xI1RfOsjN7&NgD9}7Ersjr_2gmYotq}R4-p^40=P=vAF|1?AFw6jF*d&8| z{Xr~Dl|l?KyQfiOE57W;xT^m`1ON8rL4nG{OwLefjl+mZb5n3^m?0AX%?7t7H$^(X z=|p~wbigaSS;*isM^ksAccrfbjK7-O-tzad)ejpRa(v8@HcLDlZ;T+Eo%dxD<4i8~ z9SSonU)aNpdHj>CvUpAAt{%9C6}3S05P&i zXIQ7$=JD3B_BQEAUO3Q|1G-pLHbejs;}yxEmK}%j3`dhE;>o741C21f{m`|8x>%?q zLhcq3@u;c40!ZG^*_)`NQ*JS9qmc(I-~GbMv;G4tvgp(7cfkT}26#}wT@F{dVMAhP zhxBynY7q~DT4{ZDXQRMtp=6W!@^`TW5@QT?^yIW;B_diB404pPNkH3jgt7vH!j!$d zLXGgXgGKD;a=x-z)C`uOI|>el{Do#)$ia?wB#|Zch@5&v6~WQ5-u2R>O&qm8jLV03 zWUSkOqy3@)mtf+hHpx14gWp_DGxID<@@eK368AD(QyYJvv4*NXd&d?bibz!0gIe`;JfSf^n`ss^xM(q-ZL@FL`?C1e1RRw6 zpaZ;tIAa{I8Ysr)MX$f`+p&Vt3I>mhI1I%b*csqL58nw!^WS2<4FktJ6cV|Cj>D4Q z8EQHd?SNIJAg505vu^-q#2ovE5yw~zt;?0=epp{z!a{52IF;DrNn>*(Olw6-(ktOr zpbH)VBgVy`RVhdWji_alIt?)Jq+51v07`eD9rVQ``8fh<%4@l)A~`aNV$1$kfnHtA z#M3gwVX;^g;PcwqYQuYN7k!P;0d7{H)wR~l^@A5#hxu;Xz4uQlvI_mwQqHG;6$6^Q zoBS0qp8EF0|I2rIV>Bv8FDli2G5p8pzqN=+LKWi2u1h4>thP!TILn9Pk^d4e|M2oP z`oGmpln6GL1I+@$t;(YNUVnXIHtC%L;LA~mGmyt87Ca8}c2tk?fGL6L0R0r?{93*& zD~9-2&%Z5I>n64&v1i4$Plzo*EV&CxEa$SMRVK0pJTSZsUjy2kX`*k35*i$0j7|{F&jhQ_+k4`j z(G@4|{dXUYU|8CjukT=MfUT7Lo+%hzRqVKE?bxTH7&NeTD1)Ia3h$_qmJ45DX~vH7rvhber=I7+yZrufC4wqW~>5SEXRhUF2brFgd+ zbOi(kcCc?l47BBhgq^wup91W_jBkPSLfXA(OI~YYs4u?=gu+y^Bqx`woXZlm)iwG% z%BfoO_$8LLARjU!37u@0TLf&T&SL_x=Ke( zqN8oq)tYE*R%-2W5T3l}7)?gO@?zl9>?in0+UCGX`^V-d-AYDW>c zLL2!cyOrsEkzJG2R^xA>RHaxVW@uOva*#z|BY8J;8zK$Ep*Zw6#&O5dj!Qs7ckY~z z5F@$K3hEl>hHYGFZEig3gm3=YqFBq#^=+dZ6h?vfWSKkFDq?@W_7@DnMyZ;s0A5^M zx1F|F2OY3e{$HuU7ya94R=V=&+K2V)t=|I%ebX5ceTatIR6RHPbn(w@GR^+#-HcCj)sLRb|DmjX7JJ6iNtPT!3C2$ip16czK(=(31D zQo#(Zn@4rd^gq(M87jR{?Ls4ic6A#oT?VhY=G;mRy?^JdFxr9q@<~zWkB%hW?7%l! z?X0yb)YE$aS5y~+0tkP*C`vzQx@HnxS>`aBUvXRoCEByp5r*y@gnFoO5=Q9j&~QKl zHiu~gAi>Rz9ap-5IMWbUy1x84g-QS01T8rM^vXPdjfiI6`50vr(}?7Xtw>ahgRfj6 zgw_X`$><7E&3-PTBB*tX6R#j44HgI7B1$7lP`NB)iYHuu|Bkq&943ds(k+; zkNwHf0r32{9W!y+qlM|XhL1#64!ZpEcE0F;*NFZXdC+iY?+uP(G~^;;Mhfc%KD8r1o+KX8yJ z>oCw&4DM)WpIDg&*9C^d7%<8TFy!#lQ#rH*Q1T=rK0w|^p^QFvWo(HT2CQZXA14c^wAqStA1mrj4)RD0KY4b=O3y z(7sr{h%!#r>&-IZBXXdGKThPul!;H7-@g%~zMqU{ka1!mp-LbMuWMKTz12V5-JK=w z60!A=LwkUt>#I8(z0fgFO{r>cblWvGnU2-uo zq#Ffd1zn%+MaAP|5XV3uh{2o|2^7AvGE5gC&~kK!b5N<{)x2exqykHxCW?V0ubZ1u zMLW}r>QZoo*X~S7nluNpygGC+2HZwVu{{oABH+EJL&$Z!D;6m2NSny#bWk5h*Kr_h zy*wSTYe@sdRszM(rku+U4+5H-tf*w4K7A{kcIr1)(T$m$vRJw?o5pYaU{)Cb@I5(F z@(sd`c5eR^S^5`Mk|zF((Edy1E@s3>`~ydlni3m$s80u)4@D{A!dyMZN#kvfXNZLAeMVWJkn!VxeS@>XeJFbe^gs9>?f97n(H! z)?LXtAkU2XdZ$Ek{C6)@n3$nFqxg~%buU*dS&48kAx??iV8~^DGJLWi$OVOi4&C9> z{*I>InLz7-a)^+^G-(KP$O(SZs|4EtqQBi;9bUi56M#;6i~8?(PY!n(F%;=MCXsnQ z$oC>^$g=7LR+$#>mmjjSC{dowS(Eh-tZ-y-WqnQczVM5=%N&=F*^gOnWbz)11aI#J z+eVAliIq-QCC8#b$b4XMSgH{EJ%(M+OH>oLi@2^}f0yFZL$kyElO?VlG5!JrmiNCd zI3=q6^oEW8YX-30Sk68h__${0B=5)leBQbCgvde0t%q5L#zF4&(d4ZTkkGG{E>7pp z3WgEt$OzqA&L$NVpcuX_IEGj^NZE-=+s!OFyj#AyYZ)2sxMCMMqh6yHdQ!IU``Z?9 zy+)~p0#Pl&UBT10O6M2>>>M9Kc`Tk?Xp1Axj<)m56VpDs`%fijBKMc2T*nG!Y*ocv zW`SEmhZBw*^z;In5ImDLG2i4BP{{TffVmIAHC?UAtOX?(RPT+Z_wpOHMy!)++kr&=dPpicm10By!NmfKfsX$cy7bt$;Au9xtH? z1M5@6O?Adv9Fm%1wIFhWYfd$ZLq}X@tN(<#|HaA`clmqIlW=i|Z4@vE=H`sq?xOVY zWMpsPg)!7MahdouEk$TB4jsH`l=E==ljbTdTHf=(KMh14`hsbL8xu${I0yJvuLx-e zQ}Qn4L}b#NJB9;Y)7?+c=mw`jQm>3Kp@(8Y?Kig22+U&=1=nw*17fIf@XPoMpTC>J z7}MVef0l65!zM9(kKMcp+_nDp7(JXngFWOaqWPcgcZcZjJc|+UTP50#uR`yYw@S2J z&>`eUL#Bs;@eB8vayZkHYzlx?-|@$L5NE!nFg3p-%bpoQ^%2^O7h>>y4+sz}XEH-u zHjCsgkTHC@bMor<)>w#kwzq&fr)8paX6@OET7By4ouj(HoR%4U@Obd{5706X7eRqAoN`md)6)0U*Z*aWZrg;OX-!ubI?pp_(6G6!o~wI7e3lN z*sUamS;<-vG*ZoUb|oky{z0mWDU9LnLHpTW8MCa$Lj|G%9OKvZe-uItm+ zX9Evt?JI$Q#%4|)Vr6=ln9h#iz&~y$FwuK$hw5El1oLZ(i-$y8ci8bHR<xCf zc>I*a08kIgM9UJnA+>O6xIOKP@;^sWd&`xhT}3d8k&X!cD`fufS~iP!`w#T_-9!FG zbR}nC0l#~&xp_`%6$|&yf;Ss$?3EKF&mMRV8(!#!95uQO*aFU))k@om%#8QnoLOrY ziC(A|B-vu&Ri*630@drmk26hhrV^~-b{UEL_rMx7+1J%=wKDP>;rC<6rQZd6w~z|T z81R*0Y&Uo?Yih|gqvbK`%3_bq;pSi)0KZ>WY#Qp?K~X$c0UXgwvQU$hO7B&*)?L51 zI#9^CFfb*ZW{KB#4PAaG7~1tCbevxzcL9bBdKpAx6d`VNdD#3@*^gXsFj3pIz?hGH zu~%}eRD9HdNXkBkOl0d;$K6OcT#d7lQbaKvt@RE4`sMjz%>NK2zlHctFMGbfk`R^n@K*N+5$_9O z3&3>07N{hiLHKmEUSMnZ@1*P2mig8@y)j$29ETMllhOZt-X_D18#g^-x8Fj;i@)5} z=!N&wdrVU`(*`hBh!?O7*p8lE;8zbM(bYHBj#QvP1Qfz+R`~m?d4DRx!+UlweaAY{ z{8;cz=Ee5^i2LpoQZb8vh1GkJk+<9gn21*2W0Kwj9^}&#Ye@}oA&|g)C#XO-&W#B% z?wiNp#W~$1!+7hzWk;gbDPoc1uVlx475Z90ev>U@^wHzw0tUDM$}Ps0Q+q;96prfP z99Qj1g69u>@4H!Z3o{(<46PxA*|;BPg{&*KUniuB-iWZ^;30YNwzN{}lMUnvIL@7a zEHzjp@mXMw zM%j2@oP`vck1lYJ2C#AePao*tVde&L%eGiAGZk=+&}8qJ@xo^#ar3Lpp7)RW^xVa# z$6IqByc6ZQaH&*J*}L*H{+S}f^>M>?#nr*>HO>6RPj}&k{>>OoQY^s5+CM(gGFCEu z{#ey&xVAg*PF^+(z!j0{!2P!ES<;rDvO=1CW`;1H<3)8Bkik$I67v zlevub+K`zW_!#orPaqm_)8@ka$HHqGNqxa~zi_^&)kD&=$Ac)Z>8agXEWf6F`ss$m z3&E3^c>VJ!7^`QvXK*680P z1HfcQg4SWe=y(RJms@tx)1A@=a64=*1+8h*-eE@h2Na200~GpQ-|a-&R-fN05tX~I zvky#d$t;0l2WoVGq4^{kAo>$fBA*T|9o9zJ9SBM_W|DdrA`v#NZgQ~ISZqf8FdIxccP<>!gD2jTTb zSUiBgmtQB*yutAFY-FZ4Li>z*nW_!Yg%sBDS#o-m^?rd}!77u(F2!TYiH_X2h=wH2BE}1YT*% z2%41N+}TIT?{+s=(F4VyU8~W<7D~=^an%*``D$GO9q(`C_Hwv85qF9%MqIfxpWbXv zq=5elWX+Tld*Ps0RhSSllf`ZJPjIomvcz#hdRX)B85+hp0K#~(6|S=qp47D|ivFWg zio1Po#e)&T7rV55m!w(-FHYP!*?jZtfv!gxYpGDrM7b)~xZr5YHoj!0%pWq7NInz% z`meGXIZ0HdlzkN>{FI3~K}E)xbD^V{`^m2Nj5rL;1ov{zJ>pkfleiKc&rMkVmKy=? z=5sB&iVK^^+m6wR0t>+5c53Vw`vee={=D4kKzMUcbJuzPcM;MgCr&T!%~Lc=KANYq z{rdNU*J?*l8M@qs&g`RKj3I!|yR@)?-_&2Qliu%In{;0LSng z4hZ)h2?@zi+QfYA3&FkrkEU4sCe$cGTW!q=<3hu9x0s(?$cCqBbam15#HlT-;i8i! zN)x{W`Wfkxqonk5uFm=C=!a6CEjU=f@g*kv(N^3-1QTc`iXdiClNoJEZag`cCbLC(5im(1kho1&bqFQ4gnbOMdM7yNn~3+aSsqA{Qa`V+|1c1RQ={F(A(ODg_)P?WO-XX+yh!t8{X!PV^P2e zMFnB(>e}xD`cPIRCEZS*=g4AVWe(Of(}ekRdcAP!QSWSUn*IOsuY%gI6y9dh{+1x& z`<=c8o)3=^8q5;Dh|*@<*yM1b7?uAVYKj19>GHUDy|iFYes4t(?XNurgB_AC%n`tu zJN~+cKK8A}=V9e^^3X5&BVLGw*a4bLT|ZT;Ks3Owl_#VulGHIv8ja=%XSI5%*PM6n zTwi%QG=9VE%-a^GuQ8aP(m~V9QfT_)a1pj29RfI7$ccUk z+_0T6lNnNyeiERHR*^&FF$iW$=ghBA;F9`9Q!|Z7u;uH(WJ_+R_^hA=PCPrN@!X}Q zfLRg7*yJlLVZ5kp{koAYuNTu-9K{r!q8nb3_t>J4DZN9(zW$ogSTkWW<@R972r&(HCZR9V{V+<-zy778>ro zfSu*;XkB%mUc4(y%q`;K5Qyr^vj6GcKd!<#ROOO4dO#Dp|b=@3=!f1e*iVq7uX z0#B|*?@tdO&62QzRhD19;rzSYs`@PG`ZV@X1A$v3<~&Rq<-ndu53yn;A=>H9>uj!s z!UT}!n=-+dNNyT(nUHG{=MA-UC;W>GRbR|`@AW8xeZwFN3o0@!eECvhwB}U9#moUG zsjHXwrk=~`j;-HZ4>WYXVA7e&KKp+4ri&F^r)R|Zd?j|~&7TsoAM!5qa$hDi1(-f# zZ*ir){omW9-I$b_4z>iVE7bjSYq7UzllhT1ebA`Mi$LERQB^YHyU#V)!oE$Ei3vs6 z#KZ$CT1J8Gsmq**`_iSkFT>!!4*D96HXSd+?NUewZhs>>(Q?Gv3{8}XmQtoe$5r}p zx5tiH6evczUkUL(FL31JDb{q6u5g(6=oM@bR3H_p`CHu)-R~r)8$n+g@37~UM4{_vt zz1RY1w2U7psVhWqY<`7dQm(c+kv<+oy{%!+nsI9;Fy24@FgxVJF+Kw5VxFtwkH8>W*WAwf47( z$p*IpcE#c(jDOx`Sp|O!Li>8xvC;nS(d_eO6!Oj_P>$AWQ|KAzjL6z6Pil2+6j&(F zjVZX}`pM;@bJg4aJn-8OxgYusUdx7jCMd1$C}|dK(af(64_KwMB0pFVsbx?XadPoS zO;a}Tj2VepTIj(~Wx(C0A>>xAM22p=f`)Q4FlCk-azg=cmP8s@RU* z*b3Q$F<9q&o0{H}2{7*JdK*W`CFR~isGvhn#aU=Id#W0>o$>EtlYq0e&5z&kMr#l;hm=1wdWWIJ3d zc>UI2GMJsD{1&fGHNJR&=NCAo?MH;oL&jG3xoL2AS<8BV?OD^GWndJ4z~Xaw`cJ5+4Fs;FD@S#%jGFymnN_KqDpVZ zub!Z+Y)CG$=RNZ!!aK7G2i!Pp{x+VG4C-S$oBin#0aqal#)iw#AslANl#)urY8*Yv zYZ0DU`FiJ4Go{u*8J-vl8yH9khOthXx@97?YCnNUoUVzHLLj>#RYOKU!^3A+0mIur zr-I*@)K%Cd=qbwTH}jUh5F1`7_{TG3!ngDnvOcmNX;5HXJ)GKi#S|3Cx?e4k;bO-Cg`FYgvZYl5=_672yxeRXT~Ujh z1y4!Eynk8O?}y7kJ%>|>zr#S_+}Wy<9Vr0M5Sa>ZF( zh1af%yfhbwiM;9FwA@Ppf;Sn2I3u z00F9ityE3;@^4(YJWEkzzj8~?E}|Llxo z$IStOaD>F9#L{vxu%h7=&~gDK7z)+di8SFwB_aK~89#%8dtfP!JE|@N|6m=nK86XI zl^ra^Z;(+61(BiyViRfvQUbH;jPN@F6v1OUW!3LBFJIvJyaK(P=WvZig9cj}Hc5oV zLS0pw6Fjzbp8-W65nx!0JIp6rNxD<*J6iiLi_Vn#ZY7@7;v^1P07OYCT@>nLB-?Bp&FBg|AgpvZ6&-O%4&m}VWZUEuqaJ_38YGoskb^E1x7}8$@?69jKOX? zD1QXQFg=qi#VT9@vK2tm>Ny%24&iAGX~v23fs=Bw^1cYr7!1kM`>CYw#lvIS5U*c{&)5sT_HkKgBL3m<1FeLzpKH8>v=}~+)KW>IrwApl>fQhXtspxp^s^AdcXzwNMFxy% zGbmwOSoO8m^?}v`H$E4h4Us5uH4hyO)g2ZHG2kZ3tUzYo4iVLmC0i)}v$ViN7aQF} z?r*73;q;l9H{G`!aR!X{_E}fCjAgZ z2Y?B?p1yaCR}!P|+;z)0`-nwu`cpuZ$1E-}EiC3q1+|rRnF+hA?{_bikEL7;OCVmd zWIjfzgPZk6e4aDa@89259Fq={j{lshqO?Mb*a1tqAG(`7nfp{aMeG?VI>fO?%}i6zA}FaS1`~4P{;QqCy%&CirMUk( zQ0k_G#JZDGDNgBFNJb|2$_ZEv0Q^>o!USAgKq@-$Qu>w8Q3js)m`$gAvQ&-L!1;mk zmMW8Z8zNL#8@B*wX^BJv*#`PyQ5wF6IU#R2fvNY$189-m8e$_Da(*cdb2~pe%fUAl zpVhPW=lwA0geRs`fm%?`GRFzm|pWf_! z32d(BDwU%w5Pa6_^v&ypjkp^F*oqXhgHluDGJwo&9slGIgplrVm3EkwX;mJKK*l|i zy+BiVtfGuZvnAH%^Q5yYTG^B=&ZP?&)7&w=4QP^4CeK1GoBqVe2L0DrS~|yDpdAHz zE}@5`#;H_@(dgIwY6E7skF@{6_F1=#C4dmIYjI|3YaKKoIQRCOa-$XisQPd|^6~9U z)y7zK&s-H+T?~^Y>CeMpRZV5y+@Cx-szCAKN0Z1g&`hW@|7O0@Vt*1Q$+67q&qU;W zD4@mO{*$1JvE?zYj^^XWbZa7gBr@w)tAN^M5O-Y*i z@t=GO4#j4Sl4(Q)+gs8r2}^PzgAWj~g-5dXZ$SBjIJhK?lBfbn0rPX{aKmFoQPVz{a5pQkR0uUMo=V zJ_r+-=*E@Ou#{6)7{@S0R-U&i34&3-NY|RCEWDB z)laae{3AwzuK={D0~fdwNXR^X2d5Szb0KwbcmnKng-7OpVV3uE1w=&|`B-zHZRwu@ zm6vYUBCj(7P6x3?ms1CbJlPCd4IP?dr;|QQ18m$4-$YT#wtZHCR|OLXg2tnnwM+bX2l=@&DH=)MHlO ziF}VC)zzV)jB;b2bP4T@omG+J!PKC`2-YIAELA3_8H2Ym61OHp0Zc@V=zI ze+aBOAaT$Vs?%q!`wU>&{s4vSX*+wrX{C&-ks;EQx0=`!zm(_@24 z7zH;MPZ|G6e#F>ZmMQSu z+d15O{`dhwIHpEIIFMh&+v!4q@$Aq)MA+{@9idUz3H_TueY>7F-cpwp*N5kB{SK+h z7MNa4soxC}8VO2SsG16NT$5ZmM;9dA!e{msHc} z?W(P*nqYn>31*mHJwyFIi#~U5;=7mV3ay>Q2K(L?fN%{sRpdY%L}$CA0ap)oMD^k9 zL!&b^GeTNs#jc0HVQ$bCr$>q=w)6`QoQ*9CI1^%Ve|a8qicGk@guP&0Z1!Zo99GOx z7<>HQ;1Q|Xjf_h0LkuO30RVsy(hXIWgtxh`<0L{nx)^}7wf+r2LI7+^5p=It+Ct&H zhB;9La>VgV{(SYcVd1XBO|&{sQ!wQ5Q4l8UCvNObg4078MouBf$~-$OJu@q5zW=io z{%5dvN7pMkzB(%`)DkT7LL>YKjzxs3I6HIszmFJ#QMWMu9Pl8Bn zdzzfw8yx5Mz6vwFffQ58&8yiiCYw;AJraNXP2+7COXbZUV_k-eIOUG4WiB&@DMaD~ z*;^x=Sy>m1>PV`;wXyM0z7HFiYRJO(G!I@nSm$_Xi@(CMXVPEWIQl#n%Stp^6EV&% zU6-FN85uD6EjqPYveEopoh?1s-K%DuMD(Y8p_2)J(lK`{`#_?AVOMxB!`$ zd@!KfZKy%#_9T?elRy8>2i{6^6*v|cV@_bHy)j&rNH++4h9dwlEI5tg+--T?YPC@X z+SQ6W7^eP{m)zcBkXc|8%_epO3#Cm;v}segRYxQKF!v}Z`s0BJDOB5h|30CYdx|-B zbaQ!%2ZPo^ql&gS5_4G}QVO!fe<1}CzLvqxZZAy!UQ00DN81=E?p?r^Cv7=hOX<<+ zKn6F}h?P-e-;Xi-KD`jLtQ!hH;>i*AaQ{v8Bd#~873l4ZDU-+**GQFoOdEDLP!YO$ z^@=Z)l=O{?bd^jucKoN8@9>4lzUfW4ejo9<$wVl6mKCY80IcuClb$cz89?D?<*tKM ziSV**!VA&lF?{M@%nemxb(107@w6%?UB92H{_e`6qmlXYx@>u&HF8VcB zCnm-d1oczKc>w2hKXFWKd-9#sa8U2NX~t!GhCvxK9B-G2&P?KI%NO@@=QnP{LiIT3 zN-@GvB#xHgCiMU8je_7l;c&qEZR(U_7Q!O+FeSY;vN6x*eN&UJBY{6As`Y`+5q$yx7^#%hT51U%EFlOhJWIhGIo3sX?9n6pW6lDla!V0Vh0u<4S70Q z4rnUTJy@l0`>WC(Jz6gxel*BsOBfTHx{MgKxDx|3g;k zy1*^iaO7BEvF)rNFU&@?gR$9Hd;F*#N;S9cN%pQLX4lHPyyyH1j}ti56&~@0_P_WO zd|Qd_q&MR9<1>v*3OiB_8`l8AW=$Y4Q6dl(e@7vVs^4~h8;mIoC~pV*7gz#+ZbJ?h z-8yyHaK4wFPkem6aY>#S`c+t+==rOvm#u|w-qrC7selcG{o@iM!3o93f9t0J^}Bq3 zd~%8O*>Ck6;Ynlm8!?%ntM`J8C2DoCA5jRHwC~5tF z7NUW|_B;I6P7@x&4~iU=KWTgS*DjZ=VwvKu`9t1~hfI{60|r6WNDTrO-xJp0^brNC zquhJVwxynNW-8eVWzNtLg$Jtwy(~IQN(zHmO7m`EB<9K|&rY$0u2`Is(TE%m62JxD zZ3xf24O^`$2MgcIWU6I&71mm8X zR0>rXDOZForja+N&i7Xw+GvW5b>0d-5#>}u8lS$trJFXFmE1A@7Km*99_HcY#zZn2 zTu^tvTCXX&YW0-vaaAhu3q4}q9(HvW^=W1Oh<=Bqy56a8^w%GEzuMKfzF7sG`Ov(%_)TNYctN6T%h(QRC-ohc( z@T(h7AJ$jbmcIdVZJ&5bKtf5YtgSLfwVCYi2 zdM@fGcKBnkJ(5}u3+%f&uQh+McWI8RuT`|CJ$E|5_xArDM;=cv-=|7OMl&zIEyH_m zxXl0j7pL>Vz@W>acKz$d55y$YmdD4(ZObE--Hmc=Qc>)oLH>VBvuLfsHIM2Z19gQw zFAto8B}S=!5)8r})^t>2S&C>MkwN z8XCm;dVZ}W$YjAIK-8KVR##P|Q6NGrEmrXwF~@PI_QwoWS^ao}m(RoL8!YPYof#*4 z<0k)UHxZC=$%x*epeIUQcLOuqPYfT@C5UO zwoIV$axiarzZs*F+kb(Do0&u1=G&YnP`UW|(lp@JWo_mXm$Q9)q6_y_+h578Q9wHd zaKEfkZw!pGgq!$UoE8IrP0r&fKo7xpE;bM$saQW2q>rKh9_ge2?q?uc389yeuSEf< zJAc@*Oj4P-!)utpkc^ixlaTw;ph!*j-K+raZWhKKhe_T+&*r;=MyIY6tE%s^%>Ku1 zp$zm|Us7*t#-6$%WHGHD)!pAD-@Gg3x%t9OW}fyaQVZ`&W0)`JUcqf5S**)i>VFkY zz`lQeVAa+Y;0CT3X=u~0B5@*CxGjmDt4Bm?4ce?uV-IpN4wo7loY(^lt>r2Pf8Yy@23B0^DeSv@ zK!EU!avPMEoT-A~lj0yRh)h?U7#|N$T(+i*n{BmF;YCpT*HOihysMEh$B`Dxk$xF& zLEBZSP4fQ~9{z{&{?9udhQg7iR1)Z$vUsLglIiyqte$nqLeZE}VO=GEsO;yRB=84T z4gu{`|7gcWstGHa6KmuTkUGID-hxJt`F-Kxtwf@uemoPWUP|x%nU|RU#=qqK!_rE= z#Xf4B(84tA^tTv*xKN4_K7KkMx@j!i3)9%aeSFftgKsSkM}{~7eYhi?Hvf6X`nQh$ zpF`nq=x-oc`AIK_G!xm*a@LV`W%69;-|6Gh@GN>0UIm<}q)?5|SRwkdy_{*Bd3m(G z52SUx?fEdImalqlaK>{P_&xnEs&_~gaQ^nhgys)5Qck@I4b*ZZaj~!!3UZv=&q{8z zQ_GhKAjozypOF29dlpA;A4Y^%p!z^sYqBKeH5bu;nN+oZW*7fnMu# z4xy6-A>EpNf?PaiM0n_cK}X=-U4+GXrHLQrUNto{}|JHNb4Uje#| zv`D1$gU)~LntgOy)&9VOx=#RJLg6l3a^x_T^D@y!y$kHE9TM9I5lE$liZIJy-PpaT zbOn{Y(!%L|RJt$gJgWG@g|KdsErC|V$$6&wt%tD75|mcBJK+3}%F~`8+;2F#u9IKh zdao-{!Hq)4sa$)fdqIM_2UulT%`P+63-6CTOEps*l-fL7Ar0#Uu+J63st&X-+>)dn zkSRfvjjeV!AU!qRL2!a8*?uzD*W_545&5lwAKio#BOPuntW~V>|pEs zqcn>MMomD!(7*8I4LRLI)}%aZV?RO>;?ao~@=jncjyZW(tT?4KwhRMCaRap+5?V&< zObHwm!_@GLt1~Axz@2!ymHOgVD3wUq*me2KWyaq5!J_7r)p&u-vj_N5HiwxX8b@*# zM+RiLVHuYL|Kb4PC&+x(doxs5_sq#}FUC^irnDG@pVUPrYVcqxE5H}`<6X$ax=H{L zWG)DSG^#(zeDJ|(ZnmQj z?w0TG0t*lVr6>J=o4yIqP;3gQs;DpOsUI_2$^9y{p(h^!M7Tm6DokzyC@4?%!bB@3 zaOStY4DfgxS2Kh~Ed66K1d7*DYhUvzU@`Z4cB-!;pS@%Fbhe}LL~gq?lhYfzzP|n~ z^2r|ltH(o-7QuI({7(0&zvJh#gr_q1Mmqm1;ks=n_5fuNHKX_ZqAuHnr6HlCseL+hvYGBG=WNa;n@UR)J9Y=Iw|B|6b(MO{ z!v;QFi({?3+u{AzU$!C;FZVFKQ)*GlkWhEl-r-q*1L1M z{xXIHFtm&!;z?FtBW|%6`PW=0rKz4 z1Cl>3(LZ=F@U8r?k*F~~CA~#w$v)Tu_D+yKu_EIk5ThJUf6^CZr#Dm5`&5ZlBKQWr ztO9VHR+{*d?b_d2>j}j9u9F>= zUP`COyZya`{MPWKb4EnHT8a%T>R^>mcx`)nxU6WLfnc?9!Sm)Qig>gxJ@}uq-IXtI zrpkO>&lyiOg+*1(H<)%20zO|$ttCmufIy%80T;6Wfcu?u|61; zi$L=#x|ERkeqiVZr6hm4fYjAP`*lmUS$P;km5Y6B!G0P8F57oX2MGeQfebOb*&-zlx&f417N@?njdSiP|oKyfWD7?OA**UK~^h_7P(Irl<11nuz1 zPQHaj9*H$(0W`x-QkJrk#F%@+#;&VRQfWM>4lyKpg?^Dky=315Ub-%bL))zkf*{rE`WiPsNns9f+re*0XWR&UsR?(>|E|GKi(3Hxqtj9}s7h$pzzD7~X~ zw^SQg1w$+YttDLNi{2K>*@j`_!$5zXSDP>*8AjBJKYP0~t+s;hyU6f)R=wGaRj04LVbv*>LEpzOoN!7~5!?C73Uv1VkQM-?X{UkJoViKHGgNm^^(u7 zR$AAQRTdEs%wvZsV6c|g3SX`$`&%wOH}*{{q6~5GycZeFi9ajGnz^pLjbCz_KNB#I zuy;$EnAy@X)TKg3R;Wrc;LPqVqz&9Reud(;a%D*6P{kkIw9at;n|^us03k9<^#eRtn0CU-6qI?$2{OQ2=@*H=ukRKpNEa&Kfz>xSoj+Sw6Ho zcTU)&xDqE{-#zn)%?}TLk*flr;M|oDs8=ehk8T*>?pf!XKAz&zTcdOh>b+66c^zcU z5SY#*c|SxHlab&n6)G3W$GCQ7{boGXY~`Y7Tut?{=XJ4~Suo!sBfxYoYw)p~^3^?9 z&8#}i%2=h=|4Uun4WEp$j&8eudzs(;<+)||M~)WS9OcAB!CtrlPK#DGHUj0kH}-7v z3U^-qrvyx~e&~Rr@o$AQ*W3u*QYwwVUJK(~^ux_Dc3b136VLv|hf%mY`|aan^b$`p zWf)cZl(U0wF5G|i#XZm94jor}9Rk?;p1pTF-w(yarQ$X0{WP`Q;q)L+fs&5yIXe{B z8~`}m-i842n_t5jTY$36$nA5w^jZNGebB)|b5AtnyWCf|0Zj<0fNlIFz6CkE0PXyW zRKOqu07(5_`l>D+3fKrr31OKx*5D3tkp*85=`WnRu^N)|c5_T^88;KJ?aC4xOVzV! zq}=;;IE0vgqX6+NTSPpcsGuq%oDT%AgOj&w(!gW*rpGzpD2ZQ)@bykgn2>8crVR^R zHZ^P&17awwc!mYc;$6E%|%#H{YIzQfTy08rQ~0R{;F-dvmrm3`|-CXzBob-94#mLD)$; z(ec*)d`C{Tw{>FK@kS^2jDMqSX)EC;jk_N<4acs- zlSFJaD5Nu&_=&??z3!(qbT0rhwz33AEKB%ZW=Q!((|;n2;gocdc?XRN^iA)j=C%-+ zMfhh4Ybwdk7~q7Dt`QFS3H0!P)K4dDj+ER>g@KeQ%S?Jw9ht5Te%DeYY_?Ds7Nbai zRui?p3Lwhiz*IZWG%~Yt<8!MQIiFyzqqQ@B_>Vqrs?HuziOTT{A#sLX|JZD#pZvO( zT0N_jbjh2XG5R57_3mjaES@~)Oi&hW*%^6sPp3Eef)E0&OJX%TKg;W%Xl|8!g`og= z=l*BiJZyOpU25h!((BhOQpE5HB0nn`N{1>2hDAki|xOrm82nRj6 zy(?_~7Na{FRzmPgQm}zR;w2*LG3@lCLi*O9^02?ni&a$VGef05h5o-zCS4-agvL`Y zpS0(RAE)^D3Ai0yUGq{Mab}5~=kAI1bgZ7iNAbGB3_-T}!8QPN9uE>Ck}hU|!Ggyg zmhh#1yrVr<0byt%!s!?(!tqSu_fePWMIe|Ce1_g(94nH{JT4eVi%AE}ZM7UU-{1rT zMeIwyTG7RTT=fYure@7$=tITVP^Uz~EyGgwD9{ncOPT$Vohjx0kh7CVrsv+?eTI_z zEX=)b(_o5xsQ{(Q3_!QF7LFOe?gKPHx#8aI&Twt~H2vzeW35JX9+j6H8;2=@)SO|9 zjFbwzNXlIqr4!Y8fw|;1rYYETP z2nz4$B$aw;o#PBJWK{EhekR)G`nxg(cc?KGG6nMElH%{aN{M^hx4UkA{@T&r+Uk^M zYDf0Ooz*E$kiY%VSo#g)KKhEcP^+_gPHq!{X<+blQHl5$8g*<2#*GT0g4GqjIQll+ z720=*iTktlgkirP=xH2Ou}VUPxyV)P@#MMKI1F8C{L~4+y>$PIT7P$lKlfQ&=vGLGO32;i&iI$e~Sfnqc%Sa4;&68Rlvt6$vEC9zl(Dt}LS<0R{VAW1vBW zU~G>qg=+9Ulr}t^kb%&1Yf!l4QZ{)Sy)w}(BORC~CUVFaRNzuQjj2gg`%dBTw06d@ zJw~qN25|h5lRu^yjf??tGoGXck;5y9D^r;GJU?sOGz+!{%s##8?)!dL&#m+gSBdkt zFfU;3(E4d4+4_nEQfg{tPX5F~jQ&KDH4bm?2+UffTM z5)L%w=1A^6|0or75}~8D2>2Fierx2DClV0>dNDTjKgfJ)*!Shd{zel{KRsaJRSG$v z_1T+qI=SF{pm}E)uomI1?d04S@_BKk_E&?VAX_5cC)WW(c*GylTE8yQ7XH`JL({!< zyP9^>=K1V-gGHuOK;o!@2!BzGk%;Zt)sx+Z?9YemanwR)nr~he>Jin6(gvn`bcL<$8e# zAn*t2p_n)bX@vKrm=JmBgr>MW)=L!c0A6ft7Z9-B(2t>)HGiOwnl9%kL4%%xsQ>cU zkXOjZj9YF{^%_U~t;K>lQ&%?gYB||5)|~V;oor5i7B#6CDG#S|K7jTO7Z*1l1z>SA z@rqs#mCHpm&X(ZS)CB)Sp`~$@pLyhi;P4SiyZ>%(-8Mc@XGpXp(@VZF=5bL?S9~Kc zxdkW%@>_Qjliw1@NBZiExPE<2S>=QS(V}5CON9M3@=<3LcJs1g7`_WP^=sDs&_m>g z=;`VylYfCp08ygndu?t6BPXC3o@sN%o@N6~Xg4Bz85PNlk@!b*z#3=%Q%l^eFjs#9 z1Ow5a?`bO^Iw}ztJrTLQTPNS?zOY|P1kR}*@*-=&0oJyA%i-VIW{SRhaq|| zj0xG_b@{>(Pkxs?3lqo(R$>B__U|&NJ0c$Q42>T2l&megCgq~gL#%OFqQH~n=672F zv!a1EBKRBeVvH%xB10Lts_NDj4;!+A)~%^+df)VODt+S=D|m0C3GJy7>p1Hb2x_X; z0a`o`7F$We@x%cKtr8a2Q7WsOL}HhOOb0e!WFO%J7GY2{ISAJ@KVK##_4^qjBt)~> z@t3L+Yft#Il%5-4cq!gyaqHh;B*{ks!ZrIEScnE`WHg4K{Uq$n@ABu#F+%FU;7Ql5 zHe=s7(h#>8-2c`;gaTK{p=Sr)oHdBy!3G1}kQrHM(Cede^rH(vrv9v-g5% zgj6V<`%wWfth7lT{#;0d0lki=32_vy--8K^qel!%ES_F{%CZFy>3VOk{j4xA9)FYKMwo z$tuP@p)1t=dNSs9rk4h}8z=(o@#3pSDA0y31j21+L$sDGyC zgV$YABv1r`GilsaLgXq@p;SMn!@~itFH?`tS30*a)n}?wao93T$4INv)z^%_Zko|v z774(g_?R1<=4;;{nn<1&%oTe$-gp&n|EuF}Z?59|H4YB{P1&Dfbva zYth#5Xetn{+m7o}8`umZ2lzp_2|`1WHw0p>PRrNuo!c6>>#lSp zY$5q06e0WrKv$kU>Q52V9%B@>qU7bXX!mSVkUo~5+EMZ73ia)1x5{41o4Bg|sIeJ_ z`Ol5(Uc+r7J}f+>8eWvL8kaWj8Vg5_O<_Yu)QHs7DR}E81Fk**S=NoJ$)>GLFF(3l zy;rji$dVDF#U`ZZCcSBbGxop50|SQ-m+;f{;8iz)K`K*nfbb=k?c6HlA&bQkw5EWC z7KR)Ff0pl_0W`vHw_Or_i)%Wra#9OrngtEGz>N;00i@-2GB~ok`f(L#wtF>JXhgx;Yx*8#YTs{QP}an5{4*YVa-h0!@y&&8{sI;~zbfXjb^1x#q42kig+vc2Gk^$3pI zac-cnf*B{%XV&G3x*LaCx%D1xsVch+WU;t>$8D?bF$ru2THlj!>y(r+D@>TJ#{;~& z%`hF|s)>>VGT@!~>5{#MYFzI{2j-FfeieG~+TfC#@=wa9V{R#tGW)PJr$*}bn z3+tmG^#dU76^3V&PZc==1w*tzWH?D{+$2IMO=Qxm)i!<#IF04ty%f`;<7ws5NVl& zrGgaM(Ee1|yIzwcTH)5ReFuMB=c_VQ*Jl`W9&-6jQ!Vh?;B?#{46ER6Ht*FJdgY}lp1jI zY2DiJ=}11%P}uDJ9pbt9YH}F@^lFI%Tw>PCY*icyDR8t-lR>CW)3d} zC#pr~y9Y0QviioOB%muNMym|i0^-5=G4909qimYdpsflDsI0ONs`&-**~mTJ-vAN> za+n`zF;w=8ie6CbjR2N@&>CiXb2GuODSr|6(cJvmhR-;cr}kn-YbB})J0Gyy`BZim z!bYxq@%%6B{+&g2jXa`7V3w;?oJ1);2iAHJfqnH+t%;_15dkr>Y`s`d1K7JWLW0~N zgT8)C*}vtqe&1~uMfnDzUu+x#8TMoo&gz$j>rCrtxwPI29w~Qe0M9P1nuuYxJBM+E`Sm^` zsNxeOcY*@s9g6+rHdRo(?!e2K@%)JM@*o}iJe)J$0a{4r9vhr0blm2F%^ z<(9ksljK?KUhI?(wikadW{BjLF9jH)@pby4F1QQA_loLMOj`;dTo>uur#rd{rL=#g zC@c(dqm`IStnMKBjbzg;+)@$fu311mc^`A0Fm0a+8hwB~Lj^@cZ1hFurcy~DTKw+U zEiOW5vcNA~?&-+0SJ-240f;iZmf8)Z94f^q<*$S8Vv6vL5-n0KpH0l;8*&EB8-GHX zJ6k2+x=``nD>ibHmcK49E9o};bEr_}O}o+m7A|XW-FI4=0>v3+fiN+^`MyY$3@;x+ zdDJf9(@z!Y64e-5P^`E@MFrpcX#J$jS0;+6*Hq|dQvqq+t=lrX7;sUKLW8VVL! zVKk8aF?_E@2$5eO)mn$jk796bc~~19WHG6LB}TF&+7)D*QBq2CZx5BEA_VKYx{xIc z)~*x!x%zuFH#>(sAs1GVHuKg%<9n=txFsSm1QbF)I9WcP9D>o_BR zozdGgW;;>hyycTji2>lMZ(_@3Vip3P2Dx-^xK;+%l!3GQs^yZ@6mK3y;~g4 zI`z{BN+%5&afEN~fTBbogvi6o5XM{q9{yks$GA`o!_?s}lcK%&hO)P+rGlaOQRFg9 z9P73w)Ua|&$TNnY?nGzf^;BylH@XoiNeXe(M}3~<8M^9bK)?-XDNrx-KKX-2V77VY zV_pf>yC@s(*}bd;zRh*RC1MBvADXU8Wh2uNA4T>N#_k4JPz zTAYAmB66nRSvUnN_3PSgkkn5+jXtT);K+zgL6vGMB(t^W;L| ze6o!39J6+}`k_lg3}U8XkRp^5&hcLGK@m}%7Qb1j*cGwjZ=Y}jZ4jQb?qkgrfj1`> z7PWE;Kq21K>JnO`@gz(Ll6BU_({@<8+&@ToV0WYIOE4Gah^tQz%@~CnTDt6O`Vu;J z-R^vUzA1;|SBfK z6^tTYVtcZrp@C8lIm{S{Y)3d}9v6$`T8~h81k%51xhhpEsXsxVl1?i_75)({Z-kqx z<~I=g0giz|rKPl{Q4R^Q9g_0;9QGq&;6fgadhy$P75ZHltcyuH_wFieoeT)Cux<~> z@PW_v(bZp4y5Bo}@B>o`5I_bQS|r~eKo4K9W8zSqq}n4*G4(+jL@nra=T8Ad29ezO zxt%P<;B{Z=LVAVl;M8(|(E6%S&t>$3+n65=u(d0g8^RxJjw)NmH9sQ|Murbj_7sQ^ zNI*ITF9+e32GD0f@ADC}(~BvGQhTKMA&)=1E?{7;JH`XEjXdf&Kx_WwB9h zO8xAtPk^`c5xmXUd9+!s`8Uy6lTUoswgYQVk#@Atxr-5eu6cJKsA$r@uFYFqw|f@d zaxvG3XJkRn;`IoH=QC5UU}SMfAFb3Y$No&BY0k^bKF*~Aw%AJgX1g|Tf8I!JuGPoO zeyZ{lPcZ#YFu5(x1&PwxC~8fCYAhj)EuOyK=a=NPDxXR~ck)0>RgJs(bjzc>Mj>1J zQ83MKO-Go$C09Bx`}mwpvPc4VTx@*rx`2(`y($(wE}SeTO7C37+U3W4Ajs%%J-1);Pj zQ++o`9y-_r02e4QKRMkPiL$%SWg~REPL2Y(AFuSpkEL!lo-i`*W{|T5XbD`P&G|q&@%QJDBp=hffME!Q_FE+vK+FY zA<%P`G~FkNWa+r>Fm}ejv7v~$i!rk~cprsZEhJYN^G-8AyXb1nEV)8J%u?fh^ zir%1}vnqPy7=|3L*^Laeqgn>PD^LBl7@9G&=qPXO^FBLV>4O`;mUBbZxC5zx2`YO$ zYb5Ij;)lBlg_tbqGhyNX%;74D`A4i50J{Qq>37;BJo(LPK!soPV=zV}w3Z;Wc&Yqa z$nmgr>CLI*adqH9b`z)7#^w6vCYy7?>e7hYO7$RslxAnq{$8&48H;!GT43CiP?m%v zNpTZKh<~#BFK6%gxF+Iy`L;-WR~tXaxyr(a(26#sgoh`>+>X$_w7d6q)G(oB>`6Lc zEldiMMzU|$AgfGVRs9A_z2ih{OyUdfq%rx!Y!mcLUW%W2d+%c7Ub>jFFIt~oJ#zb0 zk3Y#6Oa-5K0K#oh*c*lrht<8F33UFd_~a>}V(#IcBbmA>YpkI>T&d<3_wKk@C*HHuRc9S7^T7hW=H}`D&Z7%Bx6$5-o!FWB55@ zWY-khFjBTs?e)8$Yk0_a;G^rmsLm1;%RvUQ%7lbQ{9VVu7R@JtL?~ndUILF4ZCN2d z6EZCxMc@gjo#u;#NRVs`g)PfL+_JmRV^8{(c7L}cs}gQEq!LZd24!rszU+y7J%-`< zmSac$N8N@by#o*XW?9jU1gBS%l{)fFabUx)C9D5F{U;?U-|kj_d@c~ZKH7S{w#C!e zzMb+rP^;--puihO$=!H7MdGnf>JJPmBnAtWz;opgGy}4Wy1P`>9BP{v@?P?qAB2OzoF{yfMT1kd#0gUu{Fz zz^BJtKrUA+jMRj(=;Jp?g57mfDXPwMXsf+{t-7uI`+Oe+{2=K9O`BuegCtz4xgpy& zMB>IH(#(^LKCb;VilWXxI&}>pl|$&3Ysc6*b>hRACaG(M8IXnYaQa?BseLLnIU@K! zeNth$^9%Js5~T<89dyGF=Pfb|7>mc;ax_%sS#mR18%I6SvfRLd_fc&~D5lq!R=!-{ zHRu^q(pG)V&!D7I4@V10{$*3ibAkW--~h`}_B@L0?P#`stMlu2V9Nd6(`pKcYC4@x zvHxB9L=|#xi{W+HPs4)3`?(s6gOxNXM*y);2nVL-b)HXQX#FfIchI+SSOMmjV-@nS zqbyz{A*;TWEQJoq7)HpdX<8kXQ36cb`d5m<@Pkp*IDhdChcHx0vdISLJpA$7VJZzX zK$?19=YN?Cz~lt5A6ie;WEmrX{#IZLm{0@dMNjvwu?s_U%49p81&i6o3h43m`Mgis z9JJY((k)iUygU58_<;pzR=v8+L{hG^sYmo zII!(h#t&zjC%EZ!j}Wkce(rtC{L@sw4I;U~_4$1FEC)CMCwqYP=Pj~c2i0tk`F1y| z?IZ>Z_d^+XEVrAI+o#fD*%6?75y<=sRlTEfo*74mzg=!J7rf>$9s3>kYS37j+zD}o z*IG)T6`nG}MsaWR-=8y|#loS_5B6zM22-O~70Nu}G9S9+KHM*@4NTqJ@^-9m?{1%! z>*Oi@xH#Psy!N=B)}hI~zdIs6t7`lrou@4+tiB>aH0Cq=-MM($*UxFYkz=+hBjN@- zdqPHxB`oARE(I6RLOkMZPEKXNzPdo3(qyv%YZCIg*zwj23VM>E!IKF0^=+(aYSs-5 zK{@cmD5>U163h2bR?iHlp`jpXg?^N(`G(C=`3siz(u1CGY44~OJZk|*p$WOCG;Wpe zoyYS^0kb+77d|&zRXZ}p zRz$%{j_T6HHPsC0tz*{i9?-}a!jW0NK4%JUOP2pL@wrn&K?4TV`6;S1JfLA9qvRj6 zQ$`{8FLmX@ z39{#O3rsbbi*K&m+cR@$kt<+yB>u-JmP84+8@H2^655bJP1NiRP~B69Tg=;+K*-o# z`<`n1U_Dh|6|dYXecN3#v|q& zsAVxUAu{e^EG<*WEHu|>$@GLbI6*O-3%-8mhUVztPA`^nv$f%NL5clipu@psoBv_%BkLWv12bVYikDA`W=2jXPL$+AiLz6 zv8Q{$AK(YXr*=tbxKwVh&aaJ6I|mL9?e*2tlo@fGRTmcCB^zC&$*g%4->j{a4K;7B z$Y4T}Ji)AgOUpl%?CMe1U$rf6dg(ortp*As^ev<8+FWfjuDfpm&W~NR>rWx$!RnZ3 zggjus@gr2GGM}b--MeO+q~ZL>S~<zN4$u9`M}4BDE_4;E(` z?se27XmK4jF=@<`rsd}ND27%4xX|PkP)^Jid>?`pxI@%9JCzk##2T=$iJV8DE; zgU?A~d7k89CCd7db>gxO3-T17lIq2uP-=e;f>pKRZP0G|dhi3^ne7&o29eSeM8N7- zjK!iF)=jqv2(}jnk7}cs>tisU1+~VnEgH0F8_<^Pv6}e~e^CAk%Wg$$41yzEC0goY(h{~f{Vk?0 zI;q7QSGbCIm=ih8bUFuq8pdX;nbTxG;pWxn3cZ(PnRryYV{K1 z|1tFzZc(*w*e=5WLk`_Tw{#EPok}AmDIhp>3PUN<2uL?brywCQgmeo63P_ivgfx4- zzwbNt-hTlHbIh!DKlgK8=NZ5$CC2~QmeNf3vt^**XN`U$+7{L2p#}GRyKHBBL$?Yw z81k3c0m6nOs?_&ZuiM{Z&m?dnisi-AhmVd}G1l=OK)z-HK#yt+p(TNy-4Fkkg)?^d z?3>Pf7Kp`V!f%9gZF}iD5&(=`&BKi1|2L%H^(K7|?_g{E{Cs5OFVz5y&FqFV8S@V=eFa2H-1mqI#TX^q8t%dI+zbCG5RCyZC&`PhHw z3mn)#=+{dmN4(({`OlI%<;kqW#Z60@LlGcGd)gC zE5WB7+bi}f!A|8-@1h*$viDv*JZJ~v_YAYX2un%HdB2Lh(lzwQQJrG3DIY9J>LOM3 zp_QEaqLN}w+W*xn$=^l32jl=DN&*#P-AJmIJW;?(266179Uy&pK*TXjs=+Qv*Q>}7 zeT+|2H?c0cZa=I0KaL6ME_7D%G^fDdIP)B=0Ub+x66H-+87W4Lpz0+BsJ(r zW=zepc#b)v#v=7a^96}*9fhCKr-`Fk5=r6f692b8mGs|b$7tZ&ua_Hx355hba;%2j zOZ6e0^#TOfliHF5ZG-9`eE}LJF=PR(DntkLCG?Gcq1UElYLFn_6I?L4MUm>3D>z1g z4^ryE;e?Tx%#5n`uNMwqV?xe9Gc&WScf9oUUO#gMoFs+ciXqyoZkR9TUQ@_4RlaUs zx5q{f*(2m*=opO|F0WJc!|!7$`SU6T$do#L&bGTbpOGg2lw#k*Ka(W&2@hz?5BOx< zFji&%p60*G)PK&n|MeM!2=I-*gP^n0)Nk>x5Wz3u|Kt8ZSN?>X)0dD2Mp^XS;bC4QxEwP||IURj7{U0z zR@VRT@1R3^3EzcEi6T>_27(=+{8L-e{#VMT6Uy)9xW`E;W{&T&>o0!o<3<18*HgcG zeh(No{`VamW#%U0-Q<6?*)X`=8mv{#idr`OSeGnLDEuwHj8aW?(lh z?Bw%5Hega|l8hkpI7!U-zfB(Z-%dF)kNh+uR;|55hd+Ns#MWKp_?2#S7pctWq+9vj zpPBm>>m7XlhCiyWd9wV#ZT6f&cSZC1L;sxzkXFEfA(-1M7OZ}R5U z9iw^FR~eT{-kK@mz>}D|%S*ObSLa640V~N(a>b;&KE>LGwR1`FCWH9@{WZm9XZ^>q zsV;4dv5=G1>0D3_ey6Cx@PTYAs!J}|YclBYQ7Li2>2u=U{_rWM?AG4_?fJw%Qb3gZ zHbt{DDC7F!)Fk(gf9!|a{w>d|(6NIze>uF@F-gzW?@9=!{oKw&g1BBE@PT1~vv{qmQu z%yHAf-?^@T)_CYZd1?iS=f_?NOA{yh1wYJDyvK~5pY3-X=86eQPan1YEG@(sNYVz3 zU?UfFzn!QZso7rd4i6pL32l&!dc)Z@I_34Ec`X}Rt9*I>Z0=rNpE;=-C{14+>FU~> z9KE^ieLal^L$v?M%%*B`a}jGb85QhnC)jnJFKXa&%96BBcyiVg=Kr6R!mX9l>W0X& zV8#_iOkI`|x*qWx8_F7P!+be9aNquAZ+lnN&35;wIa%;)AK_~}3z@oik2c)2TH3-B z@=^mpLa6aEXZm^aaQ)#@1NiGm<>q0#+6yTK~oFy3(6<<%gA4X29G_Wb-hz zmgUbb<#1Yd&Wrh&Ik|>lkr58*5Rp3tiOZHRX=&71XykE5wU;@U^u7dq0= ziyTEPrxxn=-vL6o5!Va2ziiD+0b|30Q*_GHufy-`#L1>-|Fl$-j0D^ApP!rm6uSb2_jlf&-Tu+W6nqj*?vW=qwC z=Fvi{Q>@pCj!k~Cvw0fy- z?u6n&O``~LL>b+?-QUEQLiT12o(P2@Fi4Q{3t|2m2aG^g%5}PqT+Ib zq+*M>&v}n+J6y4!k*6X09r~xN?`gi{K>4g%Ge7xa{$1>Ux2zL=dm1T;=CmYGEat!MQxz%oy z4{vLjV0hVtwNLXqI(~GJ{uo&NnLeEIy3Kts=~^j zs3$*Kj<&vWX2goa`?I%G6@xW&%jd->V}J23cBZ=*bS>Yg`xHUvl2 z1Di=Us>y6&aVm`E{ShRasp!NP!jDl##irNH0l2G6(Fpe5v*Z6m*Toa}|5(1CKMv%8 z%sr)c4YHwF&AjiD^ZRv1I|9S*SDF`|^X^$T8y4nx>vnnu3}5Y`0)h6!3s#71#VhmL zk8GRMpN`}Z-Y`g=J6(i z>5?VQEEuw}PacpKFyQ&bIwa-#gi5Uvy_sJwBVzJoRi$A#)fNA@Jn7KSr$S zzFB?oI`;0N_BJPviyO4`0x;ST-D{lupgt79Lmr6tqZ2@D*`pPICI6u4ZD^?HUXkqT*Fm z{kv%eg@rz#I>XGNcl5JO7%L6em0E{aP%!zx9!T^5YH?#3{r_5ju*XUt($Af=suNn$ z)xe6%F?V6M$%r%|R>g09x@9ManiyE~xK)n}_RK8#Tbv-ggp0LD%%)1PnNc7`w5-L9 z_;Um<{i?L14PjeOL{KxHuk*c@i~~)LYE882MFE~OYxc&>m#BCN5M<95@~lw#6rCMq z!Y%1}cXU`~!jswTG2Tm;oxbr^4F&41Rrpm4oyOVZu6Y)wRhFGaMO8)$140WSq7Unc z`|Fc6FiF%<)Jw&IaH#uIE7O60-`U{Y@!t0`Z&DbI$&*G36IRKDEIgpJK6v3(U&bM2 zChwL3mS^R&;B1sPW@2@@Z}-8_Lqu}_0-hg&kOp1b@*V*>xyH#(J#xx`yRS@buS`*L zLb!EGB!cD2Ec|yxGe9M?%xd_V$Fh=YXWV(a3c#3#*TK9cbL>t;^j1|`hPRqwJ9D%Pwu!)sm6e~SYE2yHm` ziDV|lv5N&jpIE#?1=`<@;zxYztnwA-T^TMnRW6G;F1}C+N17O%547;Vt}|(RXLfp+ zCptF)fxOtfbR3nqe6tD={?sgsuGJFVDu#xfSA*k~kSms- zvvr?w#+Q{Q94D_x5}V++d6-T)xrH{?wVsFJDv`Ry#ZqVMX$N$2F;n<3Z#omwi7$5g zKGJ=IUP00gKxcRq3vy2>M&;FSKSX2M`H}6U(a+nmQEamnXC0H~UqzCzpD&Mm;i)4P zrT!|t(g9Owat^)MpA9xeLeH)7ycU~;2|JfnHfFk^5FonlFkQ-H#!d^hDol|H68p8X z6_Gfkdh*>XQ%oklx70JeDmV1X7u;bmm^^pt`^u6VJAZiHRffuztAa41rJ@~wFST~1 z{S$SNeNf93Y_aj*taFId$&(I?c|j^fk4j6FIf7`;mgwUx?c#5$)|~3)DK3m@Txtx+ zieqm7=LHj2J#OstwT8-vMT{?8CZ)>m`bdR%txyJCkLSeDuva8Lcg= zgpse)cRgA9Kx$>Q4HuC=SYW9KMGAN1bLJ)Kny-32AooBrrc_2u`0fUO0T?$%A>n~f z!}oP0CQYTluE-g$%Jwh2lGm`$w>V(DZszAvK?PdJCkY6-G8jzyF0Q5=TW}3%Qg+<} z=8~c0^Da`^yJ0Fmvz|A?X0*~SWKKq!nj<}6$O7T_llt7X#W`-1g?Fe3l6zOqIxYq}@@<)I@h-w?Y1R%%~oW z{r0||FJAJt{Yx$Oc)aJ}j7am5xumZM|uCM1wu59Li z7@eFx*dYq)+~zx;9`x{^k3Cd9d@_N|t^dJQ1BdeJTe8aq^xEX4YrLZn zYs|q^S?<@yf{=(Zt}=SgWYnK3d>RNW*-`_xEniz|_7@82cBI}n$7e0-$^=E9(Iu$E zb<-=bbf7&gQ6X=8iqV0Z7C>nn%0GF?Z}^A!c{(%Qv$pY$Fz%C>-HkVBke2Vhq7|;) z_ZyC2D%gqH8nv^td-^0Q9IObcce!qK0GLj#7;8o1OTY8A5x$;^+mw;LoEh)A$pdhv zG!i|}hlr~sLmz?xXL)&_=kbwc$5M+Q|08giwy<%q|y|jAUyEevx zzcx&%!m5Z0z*oerjenHgWE+yY=EpgvoBz>jB2*VLXt&+t)TkN1y^`wYbDVPUo9F>- zduGSaS(kn<)yH(weK03ZjY}x4XZL$Ia|jLcaqrP0hvR|J>Ji1$jYq@0am8V6YjGM% zq|C^rB8L4ZgM!nB1{xN6GkUbDi?&mD_sAIeSH3>gOUr245=e$UDZ3kn9EI){0Aq0PE{OG=7PE1BYu6b|*N@v@&(5F5*sQB(f>K;`nrLS3Vc4yItzBA{`u_uOx=z+A>(Bu@S?r_0Dj{+p z=w5(uGl-LRKUB8zturis@m|POeoCPwX6{=U*!`1IO?Xt4F3T&d6+X|4GPWO_GJ2)H z;wb)ht$hj&QrG<$7_cQnFKfdTPefM#$0Lh)X#|C+3UfH!_jpF3iMSCxy>9EhCt{;v z6#%_`iGB&o*-vP43coE&tVS3dTu(bK-jjaxco*3$>y%mO1PB@txEDJe+p^%G%LD4X zmG7KOQZ27jp8Ep0t1xij*Vfe#z@kYDTMeO^2<4|tPYw&C+;qR5E>;`H7^-kJsg6Q) z2i;z}HEOeMIzeKqS=C!Sv+C%A&USMQfcLo}9!82g=3D*lmd>EH; z*BNhx*R)xTaInp$PzY=i#SWW?U~{(QO`fqV2?Mu_W(`t^{yg33o$C&MP5>8>;*XbT zTDJR<8ix1jU9RRvppNX9@&10I=MA|c`AqlW5qHtFOQprj50-zHExv+brgtqsf(i?I zkS#9h6})p;1%M#(Izxrm9!fX-)H0SYD&MFTnr9aGG?To|dcc5m3+~ESe)ta%#{R|l z>IaiiSUq^P5{HR}6J7v+wZ0v79wfE3t`YRRhwaJ8E@EP-4Y(gA{M~`OfomD#y0wtN zdLaMMbqT-~XE28H1>8QNL1+O#;qq5ezSxBtElSW}&{hn21_cAdqy|I5t5jr!huz?e z5l}4=^gR42I#JspEhCs*lJ1=7awJk;8-_@|;saJc_#c72*6OQ>cr_7fgpBXIIKd%rke^1_zsfT^)@uu0)fP-uOIE!KL zsgb|N@l!WHEI&U&w~`@3C4DOGff6a8fcE5--kHd00j78ntM1u`NJLiY*(_fQWuo@( zT^Vt^{fj>+8gT$ayp_4^;P*xCe&5E-G};w)NV;7Ay6?mF)}*K53K_3!ZWi-x-!+vV z9ApYu%%zx_?bdT^L zj6;S8xV=eU$tFf1?Y2JVy!^*+9FaY@0!wrSz9dW%Y5Q1#ufP_X_z z_Hvj%EW))VHKfZV+ebMJ9LxcbZ4?C2Um(z2(0r4u5cNIPT&f9+P2c{S1mvMtKCz)j z;EhsgP{QSj2T9t_7}FJYMJ7gzs!6PmBZaGp;m93p;!(?iA3!6O(Vly^c?t&e=bP_= z-j0<+2I(=$MrMZ+z2rZFT9H8ElMgJW>PFN%qdFS0~Z_MhkRp+WU0(D0bzEd(=w{Gm~uC^TNFJoipyAGywT znl=v1eXK)gWYDYGfk&~M$2dZ00n*qZ`7=@;$r9ot;ANKYLPbWwe2%*{zP4Pg{V4)W z7RcIjw``Xh0bcsLs-bnDb+L-p!l=QuHvx_BQa$dRjQ|_kg=1P9f}tl#n^VGk#8=59 zT^!$GFdGj3EY>3(RVw)_ntjPAcI_e2l(AxJp4xMKA=tJGmuL^;lvJ-*9Qj? zC2k0)M}+CYOxCZudM*_)-cA)^L>d0^2Okc|C+sUza!Z7pZ~DhK`;%_xlmEq zT18j=#yxQ01ZwbjWMqJE8+$&VVR)Df13Ln&j}v!W=JrP*=m!tJ`%2S$OVHX{-#fiL z=^h6iAm}B42`;7=0w~E3&{sD;K$A2K{aKmbyZj9VYIn&)7LL4>0dQv(Ac*N(6>F`} z`Nv#iU(`yn2yvL@mq3&-Mq%Q|B|5X90b?g?ZixnRKWfvF4dKcoK7>>x|Jn7^3%5UH zE~dqdfbzSHEBd>#E&9j#R+B+?+M9V)W4-l;N_dA53k(Gg$w|7ClIn?SsJOo8UeNPw$||4!O>xK>A*8c+}v_ zC7aid+tYUR+>_2uZh?N({)K>ByoTKaeI+I5Y@N9!529%KG>JCqvOhe+=U1k-01ixf z+~k6|+x-`~J8>q!USr;E#5i!FGW!W)s!g%kpOxA7K&Y|uCTdLbBa_fegAd^mrwxvx+A*sRrC6BB zUy$Blqg9&|&0L`5=>s#ev_l}*VsjB69V7$hQv`gI4jTy; zf;8hBg@G-Yoh!mMqyEzoW@wC+TO4jd!_ZUYa=Xfg3>J2afPL1G*w)D;A^pQU=hq8`Pc2zG4phiBh$lnleh!^=Rs;#v@8NN}ZWjCYH=*qYE zX+(kCZBM)%E(uuWi^f1liooMwEcl8VZ}0n$cm6Yqjf4ouTNaYSA|?hH8qq2{)^(BM zDsst@Ni|glA{BWNZvapYT*7uFTF?5N*7fjUC+^cHoP?9tfSmPcSxVY*P&oK>6-_aQ zze1cH3znq*QxGt2D$HATuD<&H)i1FZyAgPm^|puTsJibS%En8E+~0^6SH!1tu%92# zC(2x%^nlmtd7if$qQO?%7%(BKCtnBt6&)D>;On&JKdz@^Kfb-6z>#a9ec{j$iC+uvSqSEJ_4DprtD@of=(+-`8JzK#Eio{@HMmmIoXtw$v5jjSwzr zWGJ2B>ZTf&f8BEle*co=!cJP^r$Ww(Q&aXrjYtW+er@y{We+S-B7En zhYJcMrsn{#Beu?Q1SF5hDS)@x=Axw$rH8toQWv zvma3@oP+2TmOx8B{NEFLR|^~nQamxWmM$&Q%vRC1$m`G2=)&u@QOaRU*8+_(ah%`N zx%H@QzY?Ani{4@EO7SeKR7 z1fCHg4EswjK-8o~C+O@&Gt%$3lrk_O|y_) zF|Y^Z8=I{4_Z2oq-!280?tlU8rr=O9QBxG?>5Ls)wowFf7g!ZfNxWK)^}D_zR=68dMW~E!ABlI%(!!{Ir8jzT)qStVKvS@+Dk^s^7liMU8$pby8jy71 zj2RLidpt$^dOt3Y0Fnr1!{<}(&tNC${h+uAeCEmCp<1$_pHn{V@WZ^n;jx-Nj~iyH z?sekqtDY%*2;|IL|Dj1|H)LPUv4|?#|G))N-!A)%!Xmck;+1H>5=V*b^OC?AEAX3L zh{&<*3rs#?)gG%^6s69`;porCX}s|n-pc}U!a}Z) z-I|QfC|@auH5UPf|Dut0UcANFD~{Qc5PzzJ8zSZN*I^Y6qIlD{{f_fEGMkD_8P!Sz zM=8-RtT)XOl>vN_yfUDU%;XfNMdT2}vVORMXl2@3J3Kf-`0m-R9h?4VKnbe|7EkcxxuY541xA9&s&hOSEwb9S?@_Q$m8~U z1{>DozI1ZlK<8I`Z-qbvA!@Fe*blSK_PkI%q2?P%xvRQCuGPq%k`Am3I#JtQv_va3 zNX>Jx9_;&1PZ30&UV``S#&eKr6ZiXVugQmRu@o=7HszDkk%cL}z0nBXXPEy19g$yu)A$R?GFYXF?!D1qBc;JY`yN zqG11aUjUC^Mn}vr5rDsQQD;oKhJ)w_>eQ=sFYMnZ69g<)dGfY? zG?h2PEKv-8Tg8bFEeA*p!(JKx%?Ga*xEhJJq}x&wkBJyyi~^ux4o;n9D+HRU{u4c` z;9p5;Xaa?4KhV&TUuVO?ua1DGC3`;E!;JUgWN_-%87xqmV4{AY0{2znI8!BlZ;RS{ zWn8FBCgrr7Rqt$rh=qqD0Z`J~%|?zyd;Yc}45DvUrX5|7TZp7W$dlE7uh;D>Do3h| z)fGK2uQd|9#Aq?Qs6PY6(r_*ZAEhN!#4SZVJZwCi#P4B3nqy5iOP&y^#x^!2k3($M zc>X+zTZ(*TzNk;&@qAvtT2bn)wvN#%x_Q{EXz^csoV^4II>16>Z>jud0lW`Rfkv;< zaj$O;ulWEgg*ddZVjIHuEQ~r7hFpTJA(_2xKljNL;0$zR{F^+hL_u#k<&^hhxpS&@ zbt}UMxt1ggP8vB8Nher|?DdRRP01js9#E|muyyDnXpzEB>n9-X6nvIadBThN^&9#> zzRDeq7YNjwiHNVIS4~V=d<~6K(o~IZ5}7SSlm&i$>eL0{T6JWw0w>UspN2&P@Euok z^IsjvkIP&Tu4HRx1h#2bf3G#GepI zFD+du+WMyJ9s*!}%x2f`>^434`%-hC8v)msuWX*TIV92Q6=JGNExpz5>*bNfSC4V# zN(tfKwdqnk7?n~}JhPT65w#u%97+4TvVn~jCf(|}9@D)@px2LWF9tvP5COK#syq=7 z2k%-#AXoiKWkf-*c4nf!OG*7qE_xe`5V${)yz${RENcCT>xF+_`aLixrIqz*@9*T9 zA7xixi_24^uOO^t8iD3>sJC!OEK@&)3NE~=$DD)afn|;ViDN_ z;vyb(c+kgC?}NxGJ&RXQpAnCf=_e=vl@}+eb!kfAOo>HE{fJCLqH$R8!jZ4*GzuB8 z&tc#Eh8q8w9gv0u(IDgrw!%29zqJBh&uUyMXGLY74e&}V4Fc^ZQ9Sk^^w}}{@8Ex= zafrm|-uQY3N@JWIt|VGLBy*9a48+w|HB&n*3tr2g#UCm?t@8l1}HH}?0H z=0BOho3Ap4>iw)>aRBa6Vu8$+c$VmRFe1r6KAEQ&Pzp!wi36y+j0F@`cg9!Vug?(j zS}zOyv95@iwSiy%Nw%sl(TJUGKvjSjI%X1wQlu>{RZqGR6)ed#!WOt-CdpOIYA{{l z=5rn>{Q*P_3lv71oI{mE;=!COs|89nqD^qt(cKKBI)ta-wpjO!1n9>_8UlqcV0scN z;y`0rxTmDOc#>$Kn1WsUYe3ezsCbF8=oq-CpqK$c8E3R(Wy0mLsQ!8` z>Rt71im$)yQJ3fiI1)@t6m~Ge{&J4QoX{nLVn${h27drOnZMEr3`Q8|Ma+_+Lhk=G zY88M9swg%Y0s5CGCQQnI^;pt@{=0~oMX=ChGEdW$8(pL1k9=SHcySl0oL-oDimc3T z6Q2?mf*IQG>)!ohTu}>;R7D1TKP%=Fmc0_D=u~~P>4e;mtcen188>NmuJpR_R{RFVN=#*WSSru`zB77xvMA{Jh7@LUGY$WlOm@GO?W zVLT0(fJph(8Q8`i1K3}m7$Tp~T>T=%`q)&PT^U3uJ)_3q{Chj*OKj_5&!}38cUpJ^ zfZA#L&Kr(t_^e<2F`#5*B&wBC(FtRT(vs#o5{hepmFhT_&MnnQzKcD9L0zo5&F?aH zm&A6}@hcRwB@`H)0j%qmTQ8+o?<-61=am=`W0`s+#RhiZH$}(NCrQy@3>ron$~l;z zXMtKtrD0T%()`2KRXh`g;B(aLUSZ4gwt4<%=wCgn%+<)@C_B4I4%TKr9bh9y`X+8{ z`gQacfDZ?H4`yl~Zh_i0=qe)qC3P!}@JxO7f;oU%^;BkA43Xb)hR|1CkbQ*BU>-Q|=w_ouiC%b1B9luNdda!THx zN301944-y0UJ!9a2p5{W%&HILEVXk0R;f$0oV7S4Shr0fRiK~&EfWg;=?^IB1^Jzb z*6^bli7+5bDX=C(Rq-iBlF`mjKYALKkn79WZa*Mu0*CtMdpO!%HWz|>rQreZj)4eX zfi4epr+PU~*(*x)LSDNka=_hm;DVCUc=iojmA>OA@311eKZ{ei4GUAt^>l66worK` ztY3o9a*w1S9=6}k$l0ZKcCRf|#xoe^{c!KR6hAXyVD@9pmMZ2m5qU%5{=!BKW}&b2 z=sX`8kA;6Mw$9|ZaBls)nGeKkKc5Z)w=OsTVh>{Yytc3bmdd4ScU$;#y* zb}6M8SLO8|8R0`6`&dcD{kXqZ^*%++e*a;ZDjQ7>qNbMJ-A(TDa#GESm4oxT^v0D> zjsHovXhSTGejgX%g=e(;KDlof^Ew7PvYtDm;%og@KTUgz3aJ-^TjeS|3f^0G1!vx! z{-qu4eOES4tX@tw*CF90z*h}WqU%Y$1y|$xI810fkTE!SMfEPOFvd9aQX`4^c7VE< zB+r2|&;|+-FNc!RyQaRF2Sb{Nsz5o zJ_<_~5vaV>Yntw8eTQ)v%fC=<6+F32~BiZP4qG^oQrinoF;x&xDMtVHsA?`+H=-# z>?T#d8;iQx`uk;?%T}LDE_`?BN$fsm{X5NXUMAd`?=;=G7|&sf9~oV+S)SC{HY~{# z2BmFtjeWN1Vw%h$0x==v?+~q1_ZxG-e{rcZiz)95X1*gHiDt#lYT;t_ziL(KW1+JN z@6rXmY%4LI9YQvka&f+$_*t6$8}=zciZxoh)^L%!!rprVig1YY+$ zDz03gJ23I|DY^Hb<>(l=e&L5$&yMw@db-Gi9VbC=!qGe4-3Ev?2^6l%vr3_cO*5zq zn^#g#lFFkSc;f#69Tus{pR4kAzNlVtXE_ivNwosj9{Qpf%Pca@lDRsLA>qxEuUnSS z@ph}bw4X2`fiky#PU5&+W)(#glad%$QxZ=h^J^(jkzjM! z)8cOa^YGFYpXtV%9GVK|6L zg+YUpwAL}MV9jM%j^e|&dfYBSX?qX?%^nR=e^D5SSoKl8WPm&}O#em9s<5AvJe29n zS#Sy;6-q0h-Jw4ch1DDflVC!p_=w9ugY<8i6--r2=^Jqg$ZW3u5flh)W#K#J+%H~I zJz9Zwnc`3=vU=@@ZyVhl54XjMEEAx|zf=EC$NhjqXe}KJltIa2 z7)by_HKw%n;*pt`>1ZS8PMjeoh8@W|(kPl3+ua08ije#4h0w9L_^|Sfcb{@Vhin&I z2`647Vs_O6t9Im8hK_YZqp@}){%($&G@XcVS9H8?AB8n1NbzreY@~CHuy4Ud21NPN(HBe84KL z%=%bY=FRRRFVz3z6*;wMNKM;;#tOQUt1P^Ay2A?y#J-)I0cH~QH1Q3k9a&Z`d4Juw z4xa*05dep=6;hlAUXO4Bd)d$ztfQQ8|GzmN-YogfKjwQ#8`VpWfe%LnP=qY@G<-_L~GAVh92y$o`8K*uded47k z25pfA^Rq8QjDK4bE@D1;5yc_hp8nOpT0&SRxJyt$vSxxA0h+em=>;OL$WeR$S5SF# z)&6f1Nq%M$!fA|y9uDGmD(TJVw2!~)k&;oIJRJe@1dLuGyL1l?0b+cIFDywOc}^4K z-eTMdNph&zmd$E^MK*g?cNTumHcAB<*48Q0f=Sp(M--OK zGlrmbhsLo^x8Cs|r<91Fg6|A{jQL^cEwU&Ke+#g9NH5#BdjfaA?d4}(?d+p}{cC+b9VE20|AJIMVw^B7SO}6QRQci6Fdc9BV<-ch@o8(e zn7ch;5iRi{erBSS(|5*P;02;Iy3UmVEh#P;_NJQ zIHR$zun6~?)^sh1?ktO(!BKc_QtCYTlJ!qneZca1^!pwlSL0TtK(IX#ok1oUa}&e7 z2(qx~=gE<6`}ZTw;GcU=TTt%)IUsLgeXbB3goz7XPjozu29vm=YKau=%L$!7s|=VO zFtV&7jgl1gGvpT)KBY<^(K3c0Ly36+?Q!6+!1`yBlGMI=)^wfsLvNHi20>bO9j)8o zuHH{U7nif0ahA1v^*2QkNX!y-+z~#{ZI-F`vTKwSS@j=kJ>`W?##Q8~u6|Z(@{HXvQ+GgSN*gg`uiO zXG?<*7b6yKE9#^TqeuODzqTpyJ_e0VNbBbAO;?(Ho?=CKBfCM4>MSFAt0+2r>H{q& z()T*JRn&GeSVCp;TL*^mw8Tqjl*cCj%Ts(%wrQ!cI=0GZtVWHqnKmOR2_e zaoZc1wP+YANt^VktD->Rbboh7V*8kSDH8|fMbw!E)DrtH1^Q1O+w1C{l;I@Cyl&Z5 z%)9>Wy4W04O4HWp#E}>Tf)WWQ{PYFb`}%j#@q?*2225x_5-feA(kn$m`ZKL2PT*3< zalGCo-9f9`b|1)BerSC;t#W7oH46`|H4u>Yx~;&Ci9zo z6?3&qncq-6(q2%F1*en>&;?0SPSmSwWCc`MYPtx?irXtOal}}7H+CfLd}=Kp(Eaw9 zR$Y>+R;H23mNmzvaY)J}-B5^$g41jt6Pi$e!(-{~+tWFW!lM)-hM{N&zlSWX7uQlz zhy6>~Ior)vZv?Af3bm=QUrZ)2$mv?mh{Y>-x*#QE;V*oxM53_OpbWYu2LGP7xKAtO z&`V4$NqC(+vqKQki)FN%p8P2?^;k~&e)V+AWsY&E;7i+ZQrg*~>!C#s{QY^v&DU@; zB5S(ki|hq+CcHO~wHE+(*!K~j>QZ6CZCn9I8Y1F-8Sk@hR8M{!901svQ=jUI+D4Ys z>UqhOC;d@SwxUt2{z92GPs8{|WM~aTWl>=pgHFDhJ@*MJj3;&A`=Ghh@NfLPYhg&f4GRG31ghmZm1>iE1lup$Aw@0qc9h z;jd&Mb->W31*~djKGoxpd97nOuWDN9LJ2uYiFUo8hP?GVT2knuT0u_&1#%|&@&;Gb zcp!5H@CjBY?Za$YtWkow&tJ%5hZ|@+=DpS8QP|l_@rwKVUB1EIbYv?YU7TttA@Zs% zWs?0*;T*H^3lPZyIIo`-V@^u0QufVNSQ5soUgC7HC&pm+b7H!QsoF1WzE%5XKL=AyVmP}9&>k-}WcAf`s04qg7qLl4YZde+JtUR`}TC{@8&+9i;v#M>%7%aeT@-wSs zJA0@}%dzkW2QnBc`Dia~k1tSNMv0gFEiB^^AI774XsvAUnBlYd@Y-u)@LL9Rq(Yi{ z1}e1FPR~);GwAEijNIB8OC3I?PO0J+m1y?&EJ21Yq59O461MRN`uzMRbHgY77w;F9 zW^jW@G!#g#LR&005YInZfOa0K5lFElfu*t;Q;U#Vo(lVfe1GkCJ2w5K|KaevZlAhm z;NUBKTm(UTiq-6PN+ek-_>sj|H&;_Qt;3F~)VLWbI1AY`IGkJ2&FUl+dnv2^>UKjF zPoH`t0Mz6rXKRgYAQ@F=)CsiDm>Gs{{% z8yx&bd1GNyK1zz*daQbIq!nY1K>DKZnL4?h{7aWW&d zmNwK9cYpr{lxC4QNzI%N;pqG}>6K!G&eBGXC7HL<8 z4iFb`n|$nMJSLyg1s9GL07m@;pz^;M2u|j#y#u=Qm?FpUNC1@XF zhK1!Z)QJ8?ct@iRp+@5(!27m64ldujwwerrqAaV|swlHEsb2^I%+2ci30`jC@}XdQ zV-^+K*)zcLTgbV55H5bS3mo2 z%-4r$(>L5LVt%#y5@TJP!^Lp{m+h@DZ=5g|bfW(VvL2?JyWnQ$Fp*CoVq5+S-TNXn z(L}CeP#X*}tehk|o>-c-u`QXbjvX|7Q@TTMK3ADWu!0vx11z)=7X@=56qH>}IVs(L zqR#shmSPq9huf1|40VN!>H)$-3%sCGL}1nf38$7X;3fbBI&fW&>s&YGl^K&%e57bq{t~k%4cUtgNyqIe_(>WxY`U7X!d#&fW@9X+HAaK{<+!-r%^Ek=E7skYPbvrda z=$w{w<@EQr+?GeK9Xw|~B$qR&D^OBsV%hNX1!q35*;L;e`rqfO3xCu6kq=W-$!w%r zQ;iKf)LVhz`j{z}6|2kG=i>v)2$V?)Iyw9jl3l>OKH%?>oEY0En4m1;vyEy zMK&%2l}zaS4D>j^N6YD)>~XSp$2ie62A-d2V)?|7*-iJ#iX(n_LP?Ec0Gbs`-BT;6 zXmQp=5Nt!P4cHbHX1JS_AjwS%Z0Ghk@U%p?)ud%T-qy(SDw*!+V zi2REiJ!L}$!%A%x?~XMLAjkbNufeRi0BAC(23ZRKSzd9exr2va6&Jh`_zBr~wY7HT z&lsgU%YYu65MX14SD}D>0tq1hhOF!DDRS%7=m@vS@LZ*`A{5O!c|gSgCxJ;lOW=T6 zNmbcL#vPyt_ZR!q9sc*K-FP2WY;2J`=qS06LwTj%#g6Z!6MoyHQ%qw+D)BzU}n>Jnnw4{Djd z&~cGN(&vud)+cS!zIo?o<1?by-aO+*JpWN1*E~`k$o^6Cv4&g14$VqV674Dpn4Hq&f7meOqYUiV-Dh7Dr z4jCTApw-(2JYp|0O3w60qxs>VLPq|P46rYe5{&&vmfo;|!X57?bNIesWIy;4;|<+J zKaPhU#P)BJ0UyeL10Zy@06Zy*?<$6f_K+asvXx$MaO_x?3+G?Ox>iD)r>Y=id(Lhtn+Ru6xCub@nR@tB!1 z63a|Du`wmy^9!FlQ{3+_aL+tYJQAM@PspDP7EhJD066VHYW07-&658O%NU%(04v^< zV4}SS7^hLsGNqrQKYL`x{vL&edxn(%iK*!x7jYduGL>C^`2`=4lx~lILOy)v+LR>K z#I{n&K^aXa5#WVU{>`fTZbWS{mPx+x&XH%3Oeiw*7218*S~p9K0RKy#nfaY!>ucrO z9}(tbD{1(KB8?G;PwRy*Bqcg$@z@brwn{KrP4V!lV*<)lazqEqX9}`JJU9$%wsEnN zC<4nG9M%-Y^Zpy*@}Ey)alXp<`e?ECPiHl|b|p{XLg-fpg558gnDNAuN`+{UNRAlv z5+qQhSFA+C)>UEZz4q20W08-4?N-{$eoh?O5;8%7JrNwYM_bMSjo{VA$HOv$IWw?T z9*Hz?O^k_LPYLcw?~%Gu#NPk=M}+~||BOoOvZ8Mon?!D9G6C%hr9vx zeAnDr_d{j7Z^G;Nb@eBi_ub~)Pcn|bnzW0zZuCRvqSga=W+rxoFE>hNe(b6n8{9Tt z9-t-M9Y#NTUH_hK;j?LqOR5*zdHik5M)Bl4r85tW>K9s0|2)kyAdY=J6@|7ZY zPO7CAuT~uL-Fg2w`)PsE=`nmvL723&KBYpG1t6!*j9K)(w-aT9%h7MpiPndo+h!_5 z5mGJz#h0pVSC@(h0(o&VoeXvJu;9!Bi=fpcCf#HY`L~|OeUGS%+|eWbOX`=sf<8yN zCzHx+$PO8TMeEYh%P+HIVx66>S)|dpxGWIG1N&^P8o3N>UI^{Y)w3glYMmqPR9FY^ zIi&qY6In3UturjL(4zHMfcJ#M&c<^Bb#%_yn)Q=#!hhW1z`8~EP@*1(Qs4mx9+b=i zcmXMd<^u2b+kwiznf=lr6_@yxD3ZX@4>m0Y#ZK-lU`8vv3kw)pc%Z}U&WQ8?h z#_9HJpzPr({ZU*=5FRBFJJU*7dhTe|;u&cumQl`PcP6SJ8x!{}yS?);=`tR1GDQIZ zDUC5E{Lh0*Is!Z^Z;ytCrlzI__^6{}W7mJ0_wP;SmuXdeIpwt+Do@Dh=n(gPD%C9W z1F*uXxsr&yhz%Bl-`LcP-2bk%n{<8BE5)&w2zVHHAVrH{p%;yk#z}9q6Fpua5z;7q z<$aBLD4PtZBsua&)_`V^ext)1KOQ&r9)!-WbE~&Sln`3A^(l*An`!!U+=~q^X$A^( z9JwRe@n~>KS$I*IdA!o2dH zMg+3kq*}`?u-Yo@;p$**X)6!9KsXf12Vuvh zdef+}Y1p%F#cR^@@PGnwh9LcUJ(Or-}*HhOSwA_Y9$obHTLKJ+f#sQ-XaLH0rcWnQP>?YD2=&Vb~yD;Uu0dR8}T zV}YFvI%5V!XxQ5}4{6BkaxsSgu=Yt4kQX-WJaJpZorHfkU4PFuk}7jKfDm)H6H&u~ zVYj=+s@489rh5MnviP(|8ny82{L(4lrhXhKhdWDn-iUw3XqV9*H0jD)u8~@R^VyE| zo|5t1zBs?ZLjKyq>^_FCO{R0uZ~fjaF@o~wx{?XYbU6DMPyoGNSgt`qGZn72F8e_5 z8JO|mn&qInap_gAY{=Q|Kqg=XYSv9+-1^*gnK8qeD3;;S257Rd3`!$q&~mKFM)uVT zfko89$<{06`tyWq5U;Cm`xEwZ{o0bHAK;kn;8AAIbj$f`zgB38L)hOUP`iX(NEris zv_M0ky$lvU=C*V*k+LgBf}(c`EjCB>PIq6}g#>qvX7!uy{xdUAYkfrT){CcwyRQp} zL{YVkzW$u{0KJ%-3FOk00?0@IU{T-RhyVCfD4%4;0!AQ@BU`ecugns5+gYr&)&XN; zb}t>wmL*i+G35T@Jwho!!20!txMv9{{jVo412UbHv&+MIs@Lv7hV1d~vL~|>5dyQX zX{gV{S3$xFeRVq_tFA6RvMXf!xMF~3CP^dS)8o7{;M%{FM2l|Lg(#@ji74^j2n_C} zMfT7}JqC>4$~4PBw!F)*YRS4y38J?^MgTprUPN54*J7VmoXU}an0+7_&1i9&eXvy{ z+)>0`Z?-J#9G3)ma;PHA<(WlS`Z$-6KW|eLfnGwVzs9Q|76^|685K5}ID{cYOpII! zC!nc%s~u2#DYgbaKkenxZWdp=d&I*Vrjtc#UQb9rm)gU2yZHw>KMKQyejg$#p@Vv5vIoq$t1!=jbKBSsf`NGi1OC?l}Iot@@J$cXd{i>Rz6D=wO$5>a65 zb+QZ67fs+gT3vtr67+-4oP1$Ioq7NdYUB}~^G)qX5EfWc?2q5KU-+5+fD07C5f+e{ z{bLCE?|QKYpo4%Pj6+LD&_J3B+c7xBt!~iKNM&Mn(s9EM8?GU6@^wl0tw+n-D{#q2 zJDF8Yr&%PuB&M=E0glCTqYc8IgG`*#`L0~nrk=F;OCTQLzgBOTGME7vh=CFvfTS&n z-L$+VUH|qMcNun7sqKMor#=m-DPBNm?N&J>*wXQxVQK-gUcWJu_vUin=fChtg##fH z2c1q0Vm!pFO2DH$Z`jJFyEeyP=he|2cE0VbKfKb>V3|dbR1Jz!u{jC{w3nT!PQR@u z`8{I{bnxa-W5XoTZrujgoR0~Tc=EKIuK~;S|9R6^=+?@9wcP59?lCbiFlhI=+{=xL zi76~(LIs^LorG2>XT2^3z^N7bgI;5q!ok>3^XU7JHJ}c<;^13uY$!^MjMswd0j!5E zr^Xs}ITmx}=h&EaT*cRfo@zRCu#j;j9LZ22yE9FAn3#J zm|-y#UU$SX{^HmR?>rXV)&oH8$E`u;~FORb()N5R^jEPJZglLw@yd z6(7zp(HMVUW!u|JB&9=QtB{a?O5Bu278}x$gw@p+#^m+4hYX3iK*wC34_{o74<OYHaY~5THmuDofMs{NkBSFhDMFnU9dgEa*m`9hgyDP zC5g^j3w%6#X>HhVVhV*?!U!BR0iOg)qqn=`r~3yWGzBRG;!NM8R~3imiGjquchy^* zcRM+J|2dB9P8TVa;2M{FUvMo8{K-M`EV29+1X@oTx}A}Ba}N=@SYHxS_m2x zQyq_@^%wy+nUcZXWav^q-r4EBs!G3h8_i}A5u43ycJstM`(dBY-Ot|`@-+z!(sXsu z091RU?MWPUYU9u^!O2{i%79_BHpKYyidOlfSSV!yC1lT3x^*WS&joroRMI;C`!@kW z>?#J2w3Sp5d)M;JPfG@A|E#EBtT=IdH{x&;4 zd{;O?5dj2Ar8pcFuZ;+B261L5RjJZ(CMT6^xNMJIx_1v~y8RTax#ckyF@**lN(SQM z>e3-_a}yNFU~>`!NUPXW{xWU8eL<+~W@Xvb-N!>7oKsXCU}*hL5e1X}A2j!K7rj+Y`}GbYnJ=nY}UA*4AVRSB&_l!W|o-9O^<8J=f5M2Kzvvy9{ng zQ=rMEXQD;CcQkmY;N(>`TreJ!lo{T_{d>P*gZFMufZVl^8bZsDoO}i^c!BHpJh61c zn?tD?XcmDP3HBoR4%pfxsc^m~v46wD`q$oLj+6l!d`3!>`EbbsnNJ}!)+9WxzM?LT zUQoPgUmt-Ahj)^>3@LYy%zjL9hT!1^NvWu)a9{<607pcp^$x1*eqwelB4n@$aF3G<=jmLKa(BN7 z1nLGSaj0N-7RPkCRhE89W6o^L;pB?HbXt!y)PA&Z-kH#(6d%u5mY(k+jOE@>vV3afI?)b5f1`;9xe1=?uU`(avQWOXR*UD4mtqutir~t30 z7|XVZ%BN5CIb9fzfRDqy{qVv&wiEaU1Ua%<0F?mwNRH}2r`Q*zuwY}XG=*nzJ&7hm zVUD;@=-uhZ2EzIR6@boX?0Oo$Q$LkN#89**Fge7pM(F!|rdED|!Z;$Jn6X9#-Rw8j7C zsQf)|EG!D%L90EE^`a=r$$x?Xf@3tr(K8*OLJH6+7IFCr|2-xYn0liePilrq#9mrB zGBjIyS~l2y$_ZUq_+v2sCrhBhur9t3Si_X-z0N3jQNXP))yys52fSM_!Pp;xxET7` z0j21Sd6bGoTJ^*{-NI~k)k_&2<*ETKf04SHdY-#ZL=e#h-Vg&LiTJ>c)MEsArOnA@ zyWpkVm2;od?pTygty!g#G@nNVdX$Qh=!Q04w45_1@eaYuY-P90OJ!~AF5vp7o-TC0<7hj zkkEyceo|^F6!Fnv1W<1BcOE1miPC_0KVel##9`q3F+u$)e);QL79dC8C-_Gp)9>n) zD)RA%+0d?FO(rTLemvmeIqVKSv3XDqoqjN9PD26z_dHWt6ncC1yI#jb-e?gk3x97| zP=b?@F%-}wMzwtQdeCX}0A%E8!$H#xjG1x1lQRsf> zrgF)A5UiN^;7Dk8#RltY?g3;!;xQ*H<&^1pz5Wqb6{I7d^=i$iU#yuY@dynxMd5_O zy2ig?ysokP+Nr)EAyW8>rJbV>3@>y$lSh%s=ix<#&_4f~EzFQx&jy?YUE+?894|k) zfQ3?NyqbHFOwKoZR)Ef9C&EN4^kZ9Df!@ThG4GT4=Gv3gk4qyubJpU7wC| zspT?CcOLGYU?hw`dUBc;+cZ$?_!J9uu@C6M;?J~6Skpgx zJxxFsX(YVw0BZ6ULaW#nB$~j+_Z<-E8)EtY@c>{Ob2?|MYZF^uaEqQ_akQ>XP zvXL4{b>?c3;kp+ar2GZwQr$7+PyIT|(-3oQ*>pu(wg`w~cRse}vob#Pgi_ zo;mpc!)_ZK7W0zkR0;97fX6r!x4*xCPj~l(CVt4q#s&naS-V+t#IoqoXb?k153=`3xU3{pPslJ~*1k9x+bmjnixeA#YCdJKGUb2?uPYhxz-6q`mOj zdd7evU;qwE$5X*CBxXVGsIV>?D^MpE>x5NA4J-gzop4bhm#|~t8s!q5C!s-f#6&YJ zd6Xh71}BqT%mwhqpc@MVF~RDc}k|3@eS zCXxC8%D+;~z(5dF#h>CKWEvZN`LEVkzM8;a?`580%OIr%GRKlEsG6;B=cECCjjA2K zCDAEwLRZ(Om7+ZF+B~qmIVlE+J##`aJ1H-URf`!nP$NaE%Nz%dP<14SXmW$!R6>NS za15Ah`lNO~h1>@ms&_EH{J$UgQoa2T)UCo7WR#S(pm^h4pvC2~6-_CK_n0B*Y*Y^q zDv(TJ*N%xvM7Zc!SA=7+Gl7!+n)Pi^;SM5 zs)b0dNGW!85D~QZoyYVD{Z$|3=6;N9RHS(IPu|)F-kzmrGKgfIde7g)_%}kyUPdr) zQVU^eD)MI@p-8co^RwHniQ5}#d+jm(b_cNBy+z}I>5j3eF&4zCyoLdDHx1!VE{a9>vXUG7^wJg8z`T6QN8QtN4T02v7&B#cH zAHZMnfwglk#ED4k*iBr4w;OQSEy2_Pf+k;xSSuRvC@B@jX*7_Ao1!KbKzqRQ#tf5H z4(@J8JE(i^419M*VJd}gC|!tco@7gc9(RM_>WM8zlF(2tH0ZA_mAhhg=`xrM3`M2~& zKsBG@<;;t$U9~2z)n(uiVX<*WM$T_jXoxa>!aLn11Ij=uB_$YCO(2-oiB zK9cTd0@l%=E9L3&-$gF~I{`v9Eufs!gCIu1B@jVXbJWIP*Fg$hSqz#@mQ_bGida`Im5!+MF@c%|MDwm;Rfa5uTe5D<05e8l$tsy#5w}r^$ycO&v@#h(vL%x~QVjb}EeeIt zRbjQ_n+NB;t@G0A@EBzyRe4dw)R(H8YK1A}^{|KUlG^C7HbNbEb3#YH-t5L=ov@I= z^0HFP{8PwF;Qckcw|WBTXg=_C3{_CFBO$3G>tZbM(V@~ZWO_uwQB$E?cOMHu6u{!{ zc3u4>(g+GQ_^m>!Px&NTIp zMw;?6e-rZ*$wVT41xZ_aqEnUeOsSPrO{qs(+d{?1(N9VTBzg3s6e#X?GKNQ(NU^XT zD(o+2-i_LvPa`veHN|Nv7`Vm8S(P49%1cVM*24k-LY20=p^|XI0{<756ShH&rm2z` zPoNp0=PMDRLxK69l}c-w%_+-M;6q@K`rV9!@JjCdU?d4fmrWVHXbk1jmb`3b=suqbdlo8=^tD_n6Q|F`Xg$&N7NcSDG`Se z2hMz%uKz^`r~8|e1L4l4mv@%v5E!01ZCSRE34$+lajK9kbR4%oTTD3weFmt?*C6xI zBxwO{R{^DWq(TT3dutVxp_y0?LN8b&+hhz7TK5^`838`A(hyvzQG-! z89DyF|2btLIdc|p3k{$YPGUkUZpClg^lfv4RFDWT@hBwa@Z^HM+bq++rB2m+uj=X9b%Kq>4Si`UdLeXuu#M+vxv7%eZbUsa<^t0T~wuC zjR}#jnIffFr}dAxCvj^>Pvm*jNJrp<`1psUs*XJ8dMD;z!u;SZ<}MJ>wRt%)uv|(u6$vbyZ5Hm)V;^;&w2bn9D^@d?`dK^ zPhS=mT;)y5neBMYo6UFpekS1mjx5Oib}0DmY}jgFn)jJ>14DXzIn`DVM-7$Go+?ZT zEc{u~1emxau&Cr6zZp*EjKC)UmYNzFKU=0qKj#CT*>F5$Mvjpjs%FQn8en63WUKSU z4nwq;xqP*ewf89SNI4@36w5ODy2L0GgG1Z`(h$Kmg~)!>aTO-EPT1maWp5Di&EJSE z8n0G2g~TxUDIV!(2rqrarBb4N`DXGnOGbl}tjhvV=M@0`tTSe42E*`nrdJ0s7{0fq z=4*2s6Z|lYns~z7z_926utFE2)}xth1Q3U%rg$|g8@l(*xz62#sbsu2x6>@Hv@=5R z3oS)?`R*4N6}?E6FKqgAFQ8mvJ|=D>koQX@U*ZaoRmc}&zm{z{SThwGtkab(om@N` za`QV0V-QN}AO@UiXSrlxk!Hyds;Wr_Y5KNAgfN`U8yz&FA&z5PK ziW>RErfc9zgE6^d_yEewBTW30-s`1xcL+@o-JUv{jPwK_61_uov+u) z_4N2E)k~t(pu4XZC^y|Z*bH9>Jw>0EA01IRWDL}}Izt1)DTIFU7zglF7u2r;LCR-$ zllFz67WuFd^q0Qx^lW+<1ApDW8Iy1+t!<-5agbNK>w0ke-@Dl1Oi4m=E+VMTd7Zi% zfeu-RRkwzbd_0Al29Q5YV&2`|kG*>H*%*-TC|B2U0FI$=uHLy*M_tHH{(*MQ)wXx1oR5y>f`DCFnc~!9@A_Yg#A4pS4V+a-=$s}9`81l+MaW(uKa3KOm+;58FvHjT{9cbakAW!sckYG3dCvatMHs@mDDa+qPEjCi2?Olt^IrZzDIFOQb~m zo{&H^$Vf{U>_ZOAlV%rEA?D7^2h+N-Pt^gCjL7SxGtS$N=kU(;UAd&t@FaJQ&qV+Y zbhH6$q|@d<=@Z_jKYGtuz^VoMW>4qZsnNi%$T_u=+cH z7u3Ip(jyg}K>MK}91sYU%7}%rKszMV8|(u22WfjYoX}C6M3;9CKAA;joVn%{5FsL>y9!NIb5uJ z{cCGGb4wE)<6(GvVMbIs0)~X0C0aH zGXp#HPj-=15XeMG&Mc9MUE2H;%(S+m?uz5$0J$8#fmCq#Tf^yJ~4 z`Gzn;;=6KM%BRWGrg9njpEKI?o!qwBZ;QJe^0$%mi2{l4xt?>j*+g?Zqi$1_{xiyA z2E<xIB<#QVYsBu3jJ5n6$HCng>&%s zQEnGaLTN6t*4P{12!A#w^AgL|;Oy~s>nMnW6+caS{6%dSVlzV z>tzMwonsfiXBm#W#vHFtBQE{APObUCk1yNxsGhfaw0Cj@{xfz@vtX?Ugs?-yA8y(u z-Wn0?$~PHhbxSkwb`L)TitnfSJh-GXZR zU|wCJR}x1#?Ede1c!MXL(LhTR#;D){mbCZqpi51B5;2n1o9QS^(ADDXMPJ>Jc3_;LY|V|s6qmv zSX)3Kl1Ft!m-Kwk`gW54l~vlUQqlbX@hl|J%OADk{ImxvDq2lprXCVxGy!XG3K)Nh z8xP?rSZ2%oxesK0<2!D>8tZ9HM{wA!KnRBP6 zrgR#*RHb4$2Y%)1H1BvcDF!yuR#)Y^dtpz4_FWIR3Mm}#Q#}4Ig>n5+L_3mmJ^Q@X zFX*@uX|+$z5%aEQ?menVN8|f;jt2{dkaZj|IzQeY`P}h%Cx1j!r2VLy)~?{Ay2~eW zXx!Vkx~bos`DNc_4FFjtnZwWu{e~kzSc;{{yqLAzc!~Qf=a=trenapL-baJ{S z_uroxuM(_l;Jy6n5e?X%y6)g=a_n~%D&qTNLz;$ztJ#jm1*JDdJlHEiv1+80=c`+Q zL4~egae;x5$5nK6pqFo_r-A&&X{!IlYawy1209{n(Eh{p4%u!bpWJL3T*uu4;M_%u zfe8Hs_M(OJESwVvIAo6mE_AE<*BD=|DTeUTwLDnG<}sf~@9I*Mt1^lCkHb3JRrIDf z4&8aO&6DqT1Q;511!d|jzrDKP*oYqK0pU)JaFksMuQxi=?V@y*!#Kle3Qg zy}9z4Y4IJv);`Pq_g_pQ8AvI_gYXLYWi+7&G%uLNIWX^xWUU>}BRw6xv_}W*E~7FG zp{9?ATAnN{XM%ehf1aNFnNdc6WeUY>a(g=Y-@!NYn||JQiQbnQRdw>wBm}kw6z~TA z{BI?;*Ga02`uR}R~ei#7J%BNZxI z`vTljDpjh31|)_$C$JGWEMD&ydd+@!0R%A&FU-=_CmKZ$hha!f1S+L}OiOU^8OCawz=h47lwdJ-PWeJF8` z#}R}gKYykZv30hN$bqqY6|s;<h2c@klr(i<5;4H#@h}V>B5)w?st#Y)(6aj&!yC zddsQP%zi`=)-p46OA4VN^S>tRcH>vGNK5UGNoWVl%b!uG9y)`O+w76Ryk&ie7Ui<3 z3>u$#wqS2kDNLHf42NBY^MB+Bzw4Nth^htA&yUx+Iatb5egd}iZGN{kKWh1IkwdF_ z0@p;Ddv>;tv%;#ps*F4PeA_N!9@rlO32swTl*0^fG5EiAGX1@}?U=Z_@0Jaeeg8Fs zxuW`+Q*TlH_C)B+0wMW~Y5%ea#a(e^$)|PqgPkiTd)yfkpD6{Qs4zRbJB1s)xRT!- z%g*GmL_x~m)a#t*_x=hWFu^;OaIg7DUe&uKBI} zl|*Nb&7j<5%pe!r3>K^%jh2f%97TaB2>X3mRoIigrB?4${}9IG2uN>Ud)35K2?UqR zCzb$A5nXYI)$sCFhqa?rrR8PL7RXPhGQ%dF+qPSP|A(ISxm6;8{$5?zr@avko?E0F zze#-FGG2kp%Hvw4)_Hr0d`+eXRqap?4x&Pnp5OO?7*bIOET-RLP?5RK^x7wJC3e13 zhJtED_cJMs+g)-ny|K1g_1Pu7|FO*d!d!Po60+LLtqnO;f+6ic=BS#-iveR!^SR}` zlU`e2LYg$$VNtf79#)WyIHr|kp16#M^t4saTHP0tMb-b3q zabM2m)+?Sm_HREB61lCZ{oH{-2@AKUaG2@wPov4%Q~SZRR-?few{E}L(i`Cbe%?Y_ z5nOj5b?w&tOb``Sdn|4AXP?@r!loHuiIozuskca~l~b@A|1MuGx0|fd$pz9aE4dDw z9Fdb*U1cLLW_s2RlFQ3Ic!waYuGRA&)ei#t(Po$)es7<&xI=-$c;fK(P<+Mv)i*5R zv!>4VR-z-Tcb^&n?k7cSp-y`g{YO3{j6dl2C2w!xhH?HO zW~^B}x0uM%&*#)Yl>V%%9q_hq$U4B zac~^1>GyGe=Cjyny*BreH=u(tAwdR0V(7+zAu1JuAB>H<$y5D%V~2#_5>wfEb|^`Q zwleGkkQ$wNHjARPy))9hl&rcLsFprW6H{kCB+;8}dc^jyW;+xJ0ptu7&D)h9|3<2@G z59L$Nmvss({bN}5yn-Jxjb3+k0mC5+Sf&5Hx{Hf?e%?FyIIx9G!zO!5p1oUZ+5wt$ z0Lf;L3d$-jnyTm|1H$NoTZ3)+b**K?HCI}a#l5{ok+Hh83GT1qMFUJn7x za7Dl5F(78a-}%8VotE0)`E(np{@yI6ltII%fo}gh34H+yBp5MF%5wG1h2^{p|IeJ@ zul0*=c%MyH^C2X?12y`(SyoJVmOSoR)JDlA+2d{M? z?;$lCNb#I(S(Y-S&S(q<^t}u4T(96vV1Q;wJ#8`_M4`oxwKJH;xx=EXv-X3cx#29i$xIe=*!1abAzakF#z4DCD~{u{t^zC zJ9;JS1V?p%;`v9PigLQaa{?{11KyH-a?pJC>f@FwdQ?esX46qEK6eT0#IdH%HSP5t zNn8zZ^a^s}KOkhmy6IKRt2AX_oU~rI=rhcNBUB@RMLoF6xDf&aw#QpvD~4Z*BHE~O zcs{=e5v=j#1P%yzM*ngOmOx-8Dob8ZYWI5x^Uf)NK-@*>d^=;sv4TU+oyp0%|1Mr< z@fE2&-)tc7YKgc%c-?V)rFkc6abnUUd=^J;Ik(;uGSec+qmj(~>}r7pa%ET@ts zzY4@gyiVYVi+JH-z}stchjPnrqbO%`2C#$=D8~%)5&c(5+G(lo{VSo|4YZczxgGTw zXZ5!@HW$HvQPy+F&pN3fcUg}j@&DG6OPAkZKG%tj}JouipkV-RS?HDraE z6pw17&U^%7Vd7-B(421==t(+nw5s>YUItBgdSKpprd0UmpmcKX7O=N$>vK{=4CECV z16@ukPXXsW9!i_RPe0)VMC2NxtM*{zKkJ?2i*~2oVHTY77$?I_*yqJnaUA6>zqU8hCRrFGu4BouSY5H2G`WWE{+h z$2PV%9J^mSW_j|oUm62=!TxzU@=Kf-4B!>gP6#JCndgRbCUWQR|!xSZ>A4*NvV6U}#6ddw-T4C2&a z%#E$%gXq4NB<20hGy7wKF(l9lX%Ka9Z(W6&^)&9z@8>Si^d=%?;vG|pKE*3k2ogvV zElQeJx-A%)4Dm^+h7@N&r^Il~=uouDT_;q;JWpP=P`$EXFd?^;Rs?rpXOzy2zIgXs zK1E!?RfCKGOGwANto}0W@!;|ie>oZ%)Jrch;^mHvKQ{Pen1^pEwtgUMEqCme2)uzzKq;q;bTpr!g-F z9^>clxC^}r3leof9I86YgUJJAgoP2Ps5g69)0?e3?*mR-1)$ZB!QN^7hslO;+9L@q zE@TCr-*!pK&Yh1Qe~uR8ke2G~_;UlFqk)m0*E9$ol<#n3{wVSAPt3vL{rPorhV4<* z=ls2Zmqg_#r)qYriW#qyuEzhY9WS>E`Z`6?5E4p%y?98&O~3QK~)V3Mwn69ad@$9qW)G?l#NiiSznM;5H3d@P*axcy^Qjd1-vl-J?r)>L_47v{yl?tw<(9WED&xf_JSFTf&g! z`S-})8swn2D(rU!-{Xyt^o|As6wfqlNs^ zKP4Kd@t!Vv9V0kS^C6F?5l2n!%<7z1jKZi71jx!KAr%{W(vz-^rlbL2zL9*bfF#Q7# z)`dF<=y0}%tR|}0mh1loRkF_q%ju0C9jN!up~og+&Ex;pk03d%GHw%{Y|6QgB08Qf z{g`IJq*!mypRXtQ`-^t@+d~qZqaAfm>*>$0sO^M9y0|~;(YH=2e_e2x7A(Si7A&ZC z2K|jgPIeUVZxu9|KD6dWHJq67jvF%kQnv0Q-TZ>;oVX&JQ@aAC~L{F{nU-olfp;h|OxK}#!ZP2ZON~av%s3sM<8Yxu(wqxOipzY6kmXAwcz}D=u zwh4{U*>Yi#-`vbs-!GMlW;0qZjfG$slr4&=kPC9l`{CbOw93JOA1%P>AW3>PkWeIt z{%4YI@=PRf^((IT&D?L>6@oVh$RqE+WgiY}37|ucaM6vnsqm6J$y_jHUQU?JTc!Uz zUYH;Myf6;}pUj??g>6I(tA@?-eaWMe96)eEk-kctLj=F58+@;WD1~{72F|6#bD!}0 zfKP^^@jzkymukOj1wBS`GAI&bQmK^Mm9;?I=m3SbU@#HeqN~yL3P9r#f*}TXPPN1X zonEp1(JpYwo9Fq~N{u0sCPtUchkkr2-|Jk8(TlqRH zmWbXb*AIGHCbmk$X+3;X2Mu)m7J%$de|40Ja~C2MwuWl?J>l%j(MUCP@jA5yD3Y49 zhZn|*Lt!r>UP_T$U@@rXQnR+$B7>?~ZfZE%n2j5;Ak`bvw+Cfa1^QqN8r(F0o`J^K zleNZT0p$*h9gZ0l@}D$FXh)>pGMOyL5m&c`s-Dxc!teif5b~w*1c+*~~zsr(rG?fl7ULxEyfeS~Te2IMf)nbb!$B$lit=6|u8g4SQJ=QJPJ?S`87(Mmb zPQb}4UGZ77g-z|H&B|%}nN4q6mZiU_CQRyBkLGBh&2B8p1?UtkHaXee3n&4=3!0xM z6deXg!67a6A=dx`-1ol4F+PH2f?Ugp8N>*qRqZwc@jJ(dEW+Z7k|LFlQqXcnA9#vJ5_6ovCwK zl|ck2a{y2#6;k0_$!Fg9vYz;H4MfoIvg91!-vw>Xz7<~v(j}_e%G`)vOn9#Hdb@Yc zs((Dt*r;MwrdjB05Qic(us+R0;g(ycdp46^=Q~R3ZA0-r5x>x{y7Rs8PRWSyzE=Q~ z@9Y{TdeO{eG2g2J5+=1zlAN0NX?)f;EM8I#L2L+}NIG>kbBf}viQ{6yQYRV(mF9T$ zdwo4LXqf;=M2J>gx%Imrr=H`E($Y+^U=`zFRKi?PPK&@P1w*h)+4whD*9GN=D1;d5 z^4FFs>{FZ@7^hB;w@h`YXz>mrE$DhEq@O}y88O#vu;4yl)j3oBhl@A9W5!QTd2O%7 zC)bejy@ls7-%f=mjs)dYA%VC1&wEy&N6V-dBsBVWEuScI?+Of_Bfpqfet9j4+{)G- zbzB75QpVCwRHi#lqpWa`8$?6c;W^IE2P37hzrRc_IT?#gD~ zLizcHiVyWj;;cFz+=TvBf-Wadjz<-hv4XDoV8Su?aX`gHMLenI`YQt_>m z=vYA-1SKA`nG5)DX$ijN^u|~+iTK% zj19xP4KZ7*Ii7_B>F1AEwv8QG+IKoe4JymHai4gpcZB}FT zz$(m;zb&=VX4f^^m6!(|0#&)U7(ud&WAYxF{H3sO3o+<)eCm@p>LZ^6fhTxb&-x79 z3gcji;a?DC5H3)gdP)X*F%baI7YeV&-}KfEZdLmW;?U*I6wghsr)lj${=VjnDZ zQT>jXM{od@=|wB%F|sWya}%RKu8_1Hxn$zI3}N!eRd&la@pNmjuJU2xoc5Y;KReUi z7TDmqNpc^1!5XVIMPmzj7MlLRX`8m`Dkx-|3+NEZZxP4_A*0~O>%qO1R_UN8vk&=N zN)h%M$L+Q!2k|dxW#JKvYeKiu(yj|YD4u_8R6C?uuu7NuMT%TA@RS=~-bn#^=@l)$ zKB|5%WP?Jq8?VvnLUw-4zz`=8%JN37SPYzm_7FiwC+fWdkuK6W@ip)URU->Wi~4L* zhhXGt45QyCs1O9uj}ByG)gD4K_V+YGHtwI2@YKj=j*&nd-5tJ81g)m7lkfYa^mKea z2!bI|RD9vJI`b5WV4aw0baJV7lIIKcr48E1z0E!x$}b)vur9#1w9oAMP~f;$H%PSZ zx^rRsasY@nI#|x?%ys%)%7cVVV%>)rF(6*btDQzZsyGp~aUV!UE7`1L2gED7)8CJ) zPvD^WEjTW~#evJ}{pH?5B`UG(+D}VjVSEB42z)bquDru?s}v`GSi8!g&hFQnFwPqr zVS)ARir(Z={hu0+_S$cG^bV7w+t)Fn@IqwBgX1f(46WpDOhpX!g6q{*`?W;t#qTUE zT=D1LIkP_oO`g~E{xH&((0VmnyuPiL4oijO<>u@HvVacpIx!sZ zYNu)0VG)ujTHCYj($?3yLqvFZ7CG;Sna@axe&AB8%Fze~rEyoy^{ z1Z|N9cXtTIi%Wsx6iRVgC|X>DySq!#BE_w^ySoObKyfMla_{}t`FEL@I)V6Hjrv8Nk>Ey|UuOETXTB&@znQ6Bp-%$H-t?}J?SRwAH>`BTizkqX{ zIeEDi-c|_|0U-N3044#n%KD7iWSb8bBS~{Yck^e&eD`l3Gd#b?H}XqTOssMPADNy(Q?e%P8rtPHfPbct?lD86Mih{xAlS#eh{?Bb5}B;=2grPx7l`x=?a(0*RY zdpdjMqOh4>E#W;TW&6HzrPAKqLT%E=6k)>8tu@9n0aqboK^=D#Y!jSk<1 z_}a~)-RU!Ub7ExT>BA*3X;!yX98saLTO=_#FTY5QCbj0uow@=S1W^!s!Z?aC{&i12Po$ zr?ap$u{49-x;;@7^^~P=6m!E!so@ z!oeidg-(*BUFh~_j_xQL~;B+$;B;wz%;2IDs-dQqE& z5xa4N4t+8UK6jttMgvk?N?~g7@Yiie31C>ji&xCcubZ3CeN!_CWF@mS^ws?%E>yzH z&;MverTTK>H6;b-(Z^yKNT7?v%0W619}WxpWf95E6T-tMk?H_9+Bw@)BPqz?#OX$= zsD1&v5tbpy zItqyXJZxZQoGi|}GEGd8D&g?20Qz!+w~act(Z0xF5ld;i6xVOr1h(m}&XSaNOO}7q z$dS&vQE_KMU~~=tEV_W=Z`ax_fkA1RoVXMslfJ1CF(-LhI#M(+`f@&s1CX{8C=DX> z!_ds~!#1n)AEw&|Bx+lll#GUlyozzvhr=-8{J*kKa{_FI0bnC(;3oU>rY?~_CVQ%pzo zSg9*lRq&2C;#ec0{#)0JEXWUr81*)6YeuseDtbK@y1ap+k0_;3o}PemJLM4Bl_AVL z1L7A=ug7+6R-U6cb5%yc4&~BGkBb~E=%7KXl;7c-!e+rXdcS}=A^$H!I$zCQP9+sI z%$4HVY^GWmH@NMqxId<8`N3Xfv!bMnABmRJJLrMzh`@>v392cU@6+zk=t+0g~b3rhdhk5KHpvle{e%lOA|pzw#nHJLp!7|ooI(=0>kqw{Lk5TT zA^h98M-96ni0oZF64%!)>GKbL*D`!lQ2Q#2YpYmrP5l(`kkb+4C%AkstvT8unTS*E z71b-6vLMX@o1Z9gsQG#c3^Y!9WHfPH_<_|JO9da+K2q~nSs4Ea5xBgTai_>yDa-(|tOZ6u?)Jiu3z{e)@Ly*qPv%v_DRp6=w>&f(6&-rJZ1iK267<8FNffe8b@P^B2SqYeZtt zC20_L+#qDEFLahsKY1r~^{*uNawV&7j(&B#UXFE94sEz7La6YA&}v|ESQsF0xC9tA?K>MJGs7aR zlv5Wtc6XCqZeG(NqvXml9qwWkU$dt6Q`iG~C6umUCV{%@4kZQ>xxi;}$b_AR$N5xK z-pHVpyVk>_%L5w@4b9wRTl>@Bk@XM#egR`q{nItAHxgPR--gOj5b%Y<{Lo>mo`V%} ztsRiXjvFj4hX2h%0UPn{D5s!|p=615d=BLft6`g-|73F8{$&{(Y63(0cXr?Dw|Glm zu*M7rjO4s!Cjxz76cv|5%f(puDPY8xPlDJ`Tw8zcGR!>~SpvJoV9qKdTAovwf5rLq zQey;9x3OQEVF9atm;5nE5Hpt5cRp-Oht!Lb;gNlc&S9RG3Ao3m_fKgA(9l&2wa^O( z`R~sqFe$`=noHCRtf7V`Y595K*#6<6u>zRO^fKdR0Jvp8Mkki$)<97pv59f$q?&?! z(E_Ko9v8Ea+S@NGCP1_+KZDo`iJy(g5Ih=5OxX`9K=jclqDX00354>&SMqTCuvUt% zwR@`cMHM`b-177?mVN>Bf@E7_8RW42YNk>s79=zT9{=&l9LvwRPFjzL=N;rgy`@3K zscB9byg902XINu3O~+xTF3*N2+Tw1)okj%a z=E5|TYQp3jgv-wqp1XiTn*ViGH?#WL=x;t6WKa#|E5fva8e_GHt)YaqM+~9G^fU(P6zj$2{M5Rr>`0IO299JOHdJKL?4{=f7q+5!^)Uvu!X_u1 z0RIc0Np9PUaD_F)lFihBKH_zgqn`bGHn)K5ux|2%Xhh;Gv@ueHkCrN|{`|#^$$U&*qxBk}9~s&U5?T@qvIGnFAT(9TS$Q|yFANDn)u|`Q z*Cg4N?)*+1e*2kvFh%O8LCjU=rR=l)WP|gIWe4_3+Xtr%@9W5(Dq7`NB84m^s9WMn z>GAAKa=p;riIdg#F)DS7>#ZQHl1}t9f6EjCXr~eys;Ju;l}WXih#MRb5(z*PVgLI0 zWmj=U6I_SLh3+2W>-6%yJe`{ne-A9+^;50*jksS?uzT7;B#0g>}IDwp3Q zp)tP4Pt_^H-cwT1Z^^#>exT}hEd>m|#^Vo&Lj-4y#Y{0RIb0Mj@hKA-9E?`~PVt*g zt-{UQRmv8Aj+=V(ip%cVmPXNHTw?4F+%Jn}tB2eHs8JH?C`idllKCV(M2(iY|SWk_hc(bKel zK9_ejy9(S5#XXMG*#oYot2^2{&L{H?qrSf)QJ=+<2H^XxmQLr&!2rR?V702iFYvUk zB#%ZUTj>nM$=;--CRHBK&lrc^H*EpmOPB>IK)aC9fO%L@#b>H0 z`Zzkk`${k)6%scC7jPjtUDyb>IN1 znWs8imNQ18VQ^eaJi@x{xkNOcjP&?08oM<;m;~dg!h}*4zPnY_yQ@Dw(bKI<9LZrY zWg#wf19JQ1``-W!0^S;u`tk;o8EuSTsgF|+)6B>RQai6m8rps{<|%c3;P1l^!mUwR>ciCC2SmHW(i34fGO8cQ<&4jqXwmma zmUSPkrr!@U#e@v!ak5pTg!g_xYADKJQd%9R2v#>or|>c926wqe!p|gD6Xy)UxKN3G zncCw!ox3*0VcShK?NY@1t0EmDT9p)tqAyq}on#*&lfh-u<@9C8JhKODwo~${g?b?7 z_^pqbp!l}&REVoAvif(N~zhp>l6~Ju)iVFUim25}3kNqioM4VZF zaGS{wL~W#e=D)KlgbMCmy=OfL%zRe-0wDo_84N-6I;W)a0U&vIXUE{SIrO38<`8PK z(7K2nZK5*#_i&gqK6P@r`e4;y9?IC|^p}Zy?U87%7SpZU-Ctj?ZLQ&7B zYpu(%v#q(dE`0<=L30$7YaU?!Mw#s4kYf`##b7 zfXE)t@KQ=G;KQrsgR47-1@i53xv%TS)rf@M9-44N(AmDe3`m?^PNxvc=mlvn?d9CAf1Hp z#+(&1_%9YZszxUa(BGUS5Dx$auOR47Xo1t&_otEmse$bpX@_F~%Q!C~~9HM#7OP zVzlJ>Bi=sOvV#gXil=93*8cJ&rto?PeNCLDG#zz_?D)M=|8DMv;m6V#T*kjqX!bB0 zD?Ze3ue7@J(=N{lQI-j9_J?-3C2C6(3aLTQsqU$cLEwR+GYn3s~ zaSQzJ({!hCzfxO!;pkpOA!^hX$T0?`P`W6fklExFKiKf|$`_t$5))bh$8V<`Mbix|~4w-~v2KR7YXENnH zqq7(nX^MQH`-Rytay5E$^@=N`gmuQ`D2N4*Pg0MPwDhA#_?j~efWXUz4lu+^Jn$yf zz+Z{bU?Y3&_W%gmc>uum_re)&jqea*>3*VGOaEI`80(YD?cFkDKQ#qCyS|Rwx}4$6 z8cY?E6KL`IPy7=V9E)t@d0wKjJ_BX@Vn3}fvbyTwbT(Zp7;FcDufEohZz zkKfuG+>@oj3F#Uf@@0XP&aRa%u*l0^r(X;)QbK_emFDLBoQ5E0PV4u-krh+pQ?-mY zK3-;WBNjLWhzIoV#tL#lE4)F?sKX?Z$&Cfe?o@<|;uV5>Nw_Iba4om2A4X&%(w3=f zCbkZ6?9FD$(8h@!(?fl~XUn8d)Af?Z9jjfxR1UY~)6z=}>;C^KaO(^=!hD}aoE@t; z3yX}D<-@PWBIcO9%vV-7l7l#Gm>QC{a*$hU!Lnhj9P7;eQLfsVYQ*!X;DUZXM4N5{ z73jq49~u~my^Rxb&@g=37X_pA*usn?X^-?C$enGt&dn7w;vmZ7aeJVm_5~aH!v|J z_?jw!cvisN?_Ylz7}NKkDtojp^ePm=P56OIv;QGHyxbMa5WwgCX5(E<)uu+@LiBw( z<8zhd!$N}(xBTOJ_WJ$uAa6tVxqK#_Zs6#OMR2|D7agSB!gpJw=8f!817Vph{WhKn7-dJ`IgzX5n}scX+B)k~ z^Y3-OA9x6Q7}S_=C(*sy%PfsqNQ43fojCr@K(3GQszGiZt^E3TE%6b4Q_>GtvduzD z=G+OQP_s!jIt1AYiXz^L2h4o0F@+bdaA4`$=T6hDIZHmHF{?eyc~X4MjHsbvWmlI- zcur56Pdt(hOW#oxxxo=@y)%&g;w!sjV8p;9p1e$w^FvVsl@`xjk>Xg%;#h+1*lZC= zbZ-76lHDWUmeEbit$|L`toiFmo~X;!!3sj2LmEDfPB>`viCO|7iGbw`d=dBQ1iBN3 zrN-W^9N^M+?vxA~eO1wHs10ITR?T`_DDHn=j%g~$o^+xS^9n1WQ0-_UApbu9f&4!pKHy`%Q-Cf`ZDDL^FSDe zaz>|D<5t~+g^*5<)I7OWyJXc5b-AFKxFoSG*&bOEF`? zXPZJ;$eB1Vb~$g5z_5Qpbq{f21P&=Jde0KWPpvioUT8Tow0%^vQi`PSrZ~A){(jE; zr+2g!frkdPIy)=9YvZ(8ofD5mX8v`0JQJfq@^1in+Vp6Lu5G<-hyr0tPKYT3Ism1q z|90C|p>IyMeoI7ElK1VIFI0m3zUrVQ8fCd-Xm$`Oj8Ne`G&R4D6K7B`)xZp$-zaxj zE`rE`lkIDkpM=xc8r?9~94e!l|-DiDx^DT-Sw z*f+xNb8#{$v~!aYY%*~ZNEUFs@v43U3F7A7vOV{mdVpawz_*r#2?n|=cKU~v*ztCI zVY>Nh`YeqKA6x6Ug>yWA?6~R8mBVg;S5l|n-MjX}{cLf%Q++OfSpT(p5pV6Gda)|; zY-?PiOfQX?kUDhNTU}6l9EEx$r)0!Ukj@OrQ#Vo8JO3Q6JMRKU)>S@4n)0vyX^dB8WNH=HLV0AIuVwfAf-g;nf70o`oZh;EEE_)MwCRMh&oks%kp#zzW}^ zlNx`pQ%TUXpjkh&rLe@=bNp=1R6<5Z?=iV;wh1MCALCgEGA zgKUAXJT$A$Fc7w(h}HcA$Up1{BRR-4-avKxa4k4I(}S@RaSL*mJH!gxb36fw*SqS< zu({eowGe59GQu@+#y26+I};Om6)%D%k}K^DN;`kg2O^%o>E9;_@4OS0oQY-pw=r(B zSwFepu&2*(Gr$=5^m6CzlfC@O`|!&$9JYswCOO>2BIjf^pEIz(F;m8+)>ah87Aebi z5|@V1q<9xVc-p;75o84;C!EIc^`Xu7e@};bUYCxg<}{AtayI-9*yQ^n_6k8e&A0oL zu+0LEjw52^i@s}Cg?7{p=Dj>WoPPE?M*#~QnVOrO=K6vD+VF;h+dQsdwSf0nI>n=U&un%|24;*Xt zvN~)w{n;OsBddc|8cA7#1kR24rPpk~ULJ;B?>f*DW*QPpZMS;Rr3mj-mc8`#8zCF?Hus%A>3N!9RdvK|++bCiV04dueVz2G9`InxKPCq1Jd!u;I zczd`+DlP+y-ABzew(r)f%~6T+i2~PNbwAD5uWLU&)LUjddeF*UDWTg_A=dia(%_FC z)c0z;S}LUP5Uexo1g)|JyIJ-pe=2aKRwEts}n<-}dTvBiu>+Zem>aQ)4U z7Lv}kyAq=^fD47mO%DHfiw6i{+R?yMH|W;&+8T|JvL`eeXVDO%`5`YL=a7iM>^>)t zZa=wLG5xYcRFhQJB1%%L)HGR?q*p20F$~C#?SK}Nl*O?nWMC$0!@ns>xpiTJ(mv>BNJ${&*}c6j9yBhd9>fOx9G=YRVRY5g_{5Q0&P?~$i! z4u8Z*M*!3iE_UHXsu}r_I-EN5o=%#`Dv8nTOeM4_p^ zG`CTgl&9d|71BCaIUhe6@CgQrw-JwVx#K_sOH(+Tk&=}J*qiDdqy&kcOA81aP-zA= zQ?+UXSN$89dY59`-hVRf+66b2cLmK+C}B)VG+NeMnEQl+=mg{BhHDCy!chO3GP@3O zN5{m382aQ|u_5K=kLL_r0=-}7|Hz+zc-VHlx)!4lR;S22&<24%uzjq8tsw&^BsAXw z1pWTHyL)WqAA_-~h$Dt9EHX#*Dh%J#B!6XpL&4*BEH2-V@@tDI0K-gN6_3ljR6Lt) zm0mSQ%4{v(OdnjSg7fa?Xelf^UqfL=ipzPn^TTmiqowUz;{&hhK@>^M#IQ~+HMY!U zxbzqK;Q%677~*C5#dna)9NB)i0;+k$64@i*CDKUw}fORks}Y<$iyV73J~^?nUN-%4=YF3JWX0B65)UJV9gbJ-=MIzL4MhTQ}}EDh?%pSEUKq<=;F5`KA-Q zj2wV^6I7JY@b&@;dF^_s*RO?#1k>PPp->BGBcUN;Pc01zM0p5Atym#}-(Xd$wr4{8Kz(|it`!y4 zw3x)RpMv&#`V~v1-=vCeGKFg)Pig z;S=t#t9fRx&^;nGx78p?e83@P-Xtg?E3LisCFe59B2)Xlf}MsuyH%R}#@oc9ae~%2 zQ1{wEuRauUq-5zu4ZCo21$Xyj!tR~WeZzk}FQg7?4JK_rqwYV|0gtgHT6IAki z*7ze@{OCq@>9KvM<0C^J$0?#B>dGP_-EQxj?2&dyKltqN#|5r$&vUG|;ELLkYx}LIYF2wMPc_ zPjeaVa6NJVQ0vYzvX?X(OpSB1DHH!T2oT~ni=|NMW$)ZgR^Nm1a(u)`>%-1et*?yU zGaDhj@f2{Ap}hGG`SZqe(b;!0^HnV#K5bP&xnvhU+CM@mIoS(AB@KYug4%3+A~jpG z1h-5)(d)-ELH9MKUy6!LwCp6|05wbe_$QI)7!P9q;F*%2RIg)>cZWAdm9dBKDpQ`k zuJgnZ(k0mM78r)(@k|eCCumL^dwHd|2(Wr&VZ|Fl!DW=P2Am1K3V-j`82u8?Y^m^#g6-f|f zrhW(KN(c0a3JchRZ!j)gH>%COVKLutE8oth?mTWg;h}Z3YS+^MSCNo#f^kWysKA{a4uY~F)w9bLqLLw{Z zOru+KKM=RTEEoF>KpXQs9D980>Wlh?IEQOAO0;HX9pey_zKxBb3rRjvqJl%AiHBY- zTgHdZ*C=$cf)$&Xocx@Av&T2-)aa|y$v-s%4lfG|DIMzZP)6{7|GFD9x+H%+!qy@W zpEjIqs|pqhvJ5M{kU8A>ez+2bfDx_Y?ne{gq#)7lUZsit4X$S6k+bl-Bk8)s<< zUy(ZoouIJ6m>fDcu@u1$x$mj|TvAbQZ;Nk&t4LKiaU+Lb6hFG>b%ufNQ?P~sGU|md zqD8NTH|fj^%(?8IhfuN$@^&Tjw%3WT7@x^QeJ6T{->rIflS#;9?r)ceZ2Ce@Amc6d zoUTpZ@q#FZ-WM9W8N9n7GHlK^DJgg2V0Opc=ZF=~J{_0=Hh1pXqh2r)ptYWLV{x{g z`TsMZeaEtoH|^ge_QO*O(~Tl9AS(zPNlDA};Cc4hIU^;8@~-WZuv1=e=B?zd|&`;(h;IbDA0kw2+QJx!5vj!K8^d66{8_nSa%Zs?_Z&? z#u##+H=4r+`hF|3d~F>2@Apd2ZNhtkSe#zHz(>}&T-&W{U=3ozQ7MK^q#=>;FpvQB z{6$xT#YiH=7+v0X>?q7KN37}Mcr(dzfhL|^D|=kW z!)ofhR0|i#mWUEUeVHxZg4sFh*rn|E!_bHyOIO_7#mtOS{ZW0dxC|+K@y5laAO_Z$ zqNA;?{fw1TX;7W7EAT_cHB~i7jQjt#=YMxYysyJ|=RQ}qz&C?+UU4oJi-c&DzGAe3 zo-gZdTf<}k_mirBJ41vu-IZCw7_Mi>OT6x3AY#Vq=ed$n1_3m|U%&BxpCFQ2o?cBs zIi@jUqD|zag@JDX@5~((wGa!hQi}m}pfbXtFhp@U3&caa0p*}5yYHD^%(f7NbE-o@ z5lD#jX(j?tiOs|CjF%5BzB35f++K**dU`)j!7hKVxp+*}^Bv`v0hL;{Xb)ky#pNDJ{_Dj^&pGHMt!#< zWzoBhHqX?57}#tzMc}bjnj-~7Y2J~i$8dJ9$SjrDZ)!{w{0K}jistMm-h{l1KUm)x zl7*Zrq1$Zt5wF2IgZ~!+s__ZuA5k|d&&c#F9JZPS^EzfiHXKJyeai(=I|!E|&#u=H zk}-u3>kqeoBhYcheNR@KYc07usjo{MyS(UWX{e{MQ3Jw1&OJq|rbsAA7dp}bG- zWJYr69MU;mFDsjS=Hf!xauDtR_6MRnZRV^Zj#57J%k_5rZF(vSeEIs%8jko0@wuaIaN2vyiCypx1Nh91`nf75 zWug1-lA9}oFRYGww3aPZP<3{Lg5RXqjF;EwYA`NnXZj5(nMwwa`D!Y+`Zq2F2J`Z% z^!ME!w7Flml$9Mqq2O%ijy>MT5P#wi$3?2EnF%Zye6YcwFOb{bKU+z3GTSR>!^a^T zd(9&rwA-?^VY}ouKy`L=Add6qG;+gh;&`H~0d3~QD;%*65pgRMjBK|m-~NeydnHNp zF8w)p+Z53&h`#z~Yx5L-Y}{zu)>FxQ6zX$nd>i{@`)vf?W@{`b%C+b{KO#Jce}>_L zy}DV$*)M#rg~z|mW@}^P{1_}g2WdWjgSU6QXL`ET{F)UWix3wSisR>AbQ*lxsQ}!( z)$I}=T{2($H~|RxyP3V?7=L!4#MZo&h)Y@EhNxpX4vmg(ci5ICc>e8^g$;;bu5z8A zh!m0!jbV%y9V5c4Z+6_pd?0YBt~Pr@x3AN|P(2T4Pexdp|V zTx+YlnA+M!(QpoGO@CP7m-J*Y|-01c#)x4hKBk3T5A9>eZ?(1=*sO;{5~Vn3?#OB6j#Ysq2zj`|Crk z-g5k#GypDrbtdftK?FM+!pi`MUT=S^FG7P+b?;lx>MYSLE6Y!KwNw(3Ni)F*UL`Cn zo@@31?#Ne7y+86(VGr+`HjMWe-YLM~NcsCFR^2Z)7KUc;D7YVTc#UJyk`}7T5^Ic! zM#_J)LajG=`%lG8J%EbGA%^d`e#0+1R2Gu<5o73UzTGLvs4>F~%Mv(|yj=3Ws}>{^kPT zz0aV`nzzce&1DV)7O#4F0D6E94K3BMf3WrdlL9xUwh@RU7LKkkT7 zIDGG&4TU4ng4rN}lF|jrk*Q+1(?|wo%y)?68-43vI7oJ0mOF1_QAlE$H`Evpmiq0N zp9FI?`C3&0RF zv#JP)(#fUmCiHh{ZgKw=v=l8*9pr#{91z9N5k>C5-AS~`Nw=AUZCqU)fq@a2Mp}+*>Bgqu=CgTJ#JK#A#i=@3P0MH=icBPn3%@Gh1o{#BkQj)(4(!hHU@CSsT z;Zg)90B+!LKTt0f%K*Y~VFypA*<%;;C&gAcPgp<*E+vmUL1H*v-s_z=;>eA%wt61o z;6+;QmA<8La$6(sFRUvWj*3v;v5lTy=f7Lt`imaFGR}XD;W+w(pJgDrqdCTH!vvL% z2n8yCq*WVj&Xc9K%PEk)B*dtJ4j+w$J`L)|ql#e$l%YnbX}SbOLMkVoZGQaQB8XUm zYys{+6rmalat;>swA%HLrHkV?O8LGj(_v3kfFRp0!Yug@r$kHW zdi3(HMhc3m=l61a?CKvFu*1Z`S!pE|*+w{Y?2o5Og#{3E8h%@^`+Ahj&ZwFx|8)O~ z44G!?)vAF37gnqH!)py)pedUSPBOcmzfwU_k^k3Er>8NNtjZLQ~I;JuLT*(M^MoNJp(#nwS-?PeNDE+(Ubf1 zz>U3ji<=Czv8T*ub$uRi2c?zdVSIaJ%|9YP@%h*f6YX@Rs-6C*Ck-b7@d4p}jyTCr zN34m=pNbXr=K5cq*ZP}~^3?lUlpVf$MYh0JJd@9pX!AyssvtmlwydaRy+Hj`KtW&19@jtc|!^u zTalC{p`862axRwDUi|w{$E;u=!$Ot5+zIrt+1fVCGK0w`1ex69z>8n*`}ybeq+-5( z8y!6#gPyx^wLeaJ#1_b!3dV0{Fg!3lFocYqRXn>ml3p?L3$dCqs$se~`XAGEp#QcT z|1Zvo!0yuFyFgL8cb$(cr-V>?K51JblZCc-rYJzlo$K=Mw-->3r3S?W$1!sWj*o3_ zGH>(A7+rtE*vBEfiV#>sZb&Y!#A_H2Rmec)UA5refmMi~u7O8mfCau1#>0TCx!W=K z)Rc*(P%p3##U5w&Z;A{AhC(HYnOTn9tsVOfJ&?qH5r;0L6JSB21Z*$gulU2@!%kPQ z$nzr{%-0I(!`!1^%+qF`9nTvt531!xGw0K_H zcJ0^NVM-M~irTL~bY6T!H`xQ&boVV9-GAH;{SbDJz;WQxByf;Wd#CXV+J`R*L8r>a zcJx8&x>N%KnM%me-e&QsK-SkAT?LVwk^eyxUdXjs*^kSUYjj?(rZfcWbeFz-H$E?Z zP!T9yYsxdZb97GUo6oS_^ZEnH!f7E`Z;N0UY68C2$4+|2ll8#I5VUvw{zFluRQ{EO z+aLF`NNX-z$OHXLV;$dPDaYrANEV<0ac(d0UFN|oGVKpRyLC0p0GwVT3EcDmjVe58 z!0NNRkTP;tLxsL^7&22sqc1hbxXBa^b1yKvnnYgpd#<-X-uq4j5F5^FTJm%xA&JP; z!<43xDEj=EGR-d6e47Rj5^;v(m~h1g>!qan@@!UO{lJDfaF4c1D?&OaiXV{%QK*Y0 z{5pZ?A=v;RaH~_qkc1pS1D8ua!&?E-0+M$QHA6-P-r*6LqN6rI5i68$;zrAye>p;FSwcu_~G{ZJ>exr5)o-frTLe`K2K1Rmw# zybR@$mJY88j0SQHzH=b?k+KDOSee?R4LIZ@1hBtDoi zAkWaWo=k__gEM26ST&IJ=f3Hdnbe03d#JG_emI!Y+}+HyNu9PXohvmKzES^_!F2nr zNU?ukS>%mQnZ81GH@w4npzf&jE`>lPP|Rsj-GF{|F)4d@$yb0ch2htLE~bS2fq<1= z(NA$LZ~NbG$Ep(6epD3XTo~`u2M^Y!OlR3ZFKOQhutxcMv1)z&Trc~+?;A3&ch+~#)cPQqr_eX7TkxSzagq_2B*vLcvm{lh zJ5%?k)-Rl~xN#4X1rD8de}5#7kTHq-c^h=kgYSMy3xkc?zv$Xl-%gklDIQH&58vEX zhfG<2jPK#L{-{-2h>jE2;ao=ev|2H&S*q6Hw0)z+(84?=^K*_FO;rDCKVAt@^+L}jF{;L?%SF`cU7D)FQ&rCYax$bmj=ks?<|-{qWp;u>wgOu( zlE6$)f>g>a0K&{oR7na30D3a6ln_g5ZXa0vwhaKeVW#zVEiw90fkT5qz06eWKv1>Y zZOobI2v!e$+zg{03GeDu%EY#HJVk=|1Slmv8!Il<@&2;^Y_2lQvr;9*|N zaU(VqIBlv3#x&s|W~i#g5x$iq3prJZuF4j`XJOe?xCD*gY3f*=M!n5vt$vEJbZl`* z_S-~4qEe=4&+NPvMy3K_WIRK(&ozrSd^(9_E0@kiOFk0I*Xee8`*#WjeYRJV{B@TB zJ$#c>B)#kk`el6EGbR4?lmAlw-3%7pmQmZU5rPPzo)9p)cmtNFM2Z}Ce++3bv%oLo z8YhmY-sOQ{!7p?Em!-C|dv*i=a{}|sd>81G>Boz?HuO91aP_A~j z0KYE|JN)(3;{1F!Dvj%Sz;DFyP2|c#fe}nGwzQsSdl{^C)SGrUy>v9=f2j4O@=d>Srlef$#^jf=W&)2J5s;R!1s65m4bKH8rVmj>?A zF*PY4Vm+W@|Gdz!fXwRGL)r5lgCEv}T7_{vq9ZcrOobs>qEY#7t|lDag{rs9kzT9Y zJoB$uiPo-_#B!Cw+NUW463b8hL4`-lJ#lSDgen zN^lq5T|{w%}6D)@1NzL>Kf!Vm-noCd4=``-u( z2xKz1CWlb4J6|UJl!g7Iw;#keh-KXZ456#FK!p+U1V2Y9Ob7rCr1ohSkC>r z@{=EmNODV@xexY|h3}4LFe`jMTd7ju>Z!@sa1agg_vpkV%xLJ}eAFf{;R`@b$-8MMd7Tx=36TQ5!lk zsv5wvNIpo-gzDZLj~-kuEluE1^^i$y@c}dL6Ec3H^iBXy=15*V%`iR|WUsQar!AhsZxoOiLp$xR`hd{$9ZY1&I#7Gx_|W84#7 zWt3C+`upqgjFWF2WMK!v+j7(EQHfA4ZjS7~BuaD+x#7V2V#hoAdwI;NHLt6 zt8dkSVhg6pr`u%Yw`hV~rc;@i1C_`|Nd=44tI5qT44~OiEuzAyNejT4W%j!6r@l{t2aZB- z*LW#=o+Lvz144MZm%|3D(5WfX)}TT8Pg&WDDI4y6UBz;qu?!KEq}<>s{I&jH((y6ox*!)1;&@a0BqXdh$+3|?* zkHdQ1vi&o$%x!v5CS32Z&n$Q_4n6I;!P}Gl*!aD^bL)PJ3Iy-{$gox+XXqECbZ@G+ zT7~5%(mLMKq_E%;{dS~bCL>8z^G_cT;6}vXAwipDuz&H-7ojj=mAmua-H$2$^x(5# zN>k9o{QqO=yTjr7zOScX)X{?&J!(WJgXq2Yng}7fFiJ!aMu{FRqD1dR?=_4XEqaS6 z6P*xUM1Ak)`+Mh)c{~?0<~sYFwfA0oEulzgPN}+4A)n~6CL$*QtV;O$M#9?u%ub|B zzn@Q?mWC>;*kbMfij9rqZm-iQo+#t{)~j-JMeyO#Hxli_ecilb-hTRRh)dy)+C0Mh z5>&Wi$ElVg=|4zQNajAYsqiO}4Zb(9!3FQVnx8jaGfzy`(xB-G{}#;;fcuOWs~MgV z&?NQ;f{-MnY^MCQoU9tee~=?Q^-~H`RTT(2hd#w;NqaaO6z&nhTc%(r!ULZOE>>_ndr}qz>FA9fEh;F8KZfapXdKQpq4J0rv2<0sAa~WEprKM8{oX z#=K8k18pzzXaidU&2IlTIh>cP$$ScTmm6YOiF~! zUYPfPJ;-5vO*I^ip?)e1IDaI{sy^OBS_a^GC$EP#l|K#ejca|`u39A>#hjNHWV#A^ zM3JLrx-90S?@4T(Tpt7oDUZ355Mtb4vc+uR7@rHeMB%?T|1`YYP!(nkTRowIk5Szk zG~5wBarze-5}&J)`{VI!@+;tbq7Mxdv=K3GEA+8ac!?3v*a0;}&InkL&*Fq z2y*ek6BPH@EHqiZwkLx<5-mFu za#kE)y5Ltwlz+{clFz>ne*r3Hc!8T35yBomLp_`V1}E6BS{a3M#E3uCo$vE@D$=LM ztEex_PYs@;uC-ex_p*N?&GrAAeD~V<6DOAl6Vo#J-iu-jD3~9zH1&ej8CmPljI86J zUw8#Gc~m*wkT2Bnv@q8XA?vcv&d!Rmx+ItUIXG4#kMSlB#;*h)0GrHzNT$bA3BxR#ChrA_BkOv6tozzMVUl z{DvxOja3fDkb zY&s21yS(eYr;Z?_aqTyxbR+fS;&vaeaOU(f8s9IFqknv_*bp}h$y{~A{RVBBpm;sB znbYx3IuaUMpYu5k8 zU@lz%lQG1dKs*w<{vuKtp*ssDpz)vpWQ_@)xcpdpPySAJjo*PrVZ!kJr#Ur5kjp9> z`46=qI7*Gpru>Xvy`2MMqWF3K4D0nXb_ACvgkuF@Sy~7x3t>HU@xYo>XqN~%%dL+$Atravz1GUo#o8xw3@G$ixTC{ zrX}Z#W;7_=1->dh6{(HyNJ@#~bKRA@tI0D+7x7~j1cwx=^HkRi{vr}_ntp!V6lJ<9 z+u&OPKBKo`rhmg2?^eQ`|~Q8>l2 z>kDS!-|=7f)e=E2J6~)X@)&4pDv5qe(rsaoZTpKZP6SkX6*OQn1j=Ed zOQn8}TTBIVM^n+BsD*8QBp%W95Eul7U*7n6>QgU{G8ARccP5#CqTtl}B&nN@31us& zDvsc1}>rxu_{U**bdC1z=Goe*SIo8#vJFtcHZ+V(MZQ5Knwh z2Yw6^Jn0L5d%|_b%ju4Oz`?b@zlZFP$OsNdj8tQcfLiq(Z&W|IE87J(s<<+JAW%`# zcmM}IfVW@63-?wdB8Yqvl^<>3I+5j-1rOrtt;*K-{}%zqp2ROdaaL;tLu5Qv5F;Av zS?@z*nbL?KylV=2aOXdW#=}CKjP-$0Xs{CS*%5J?llhj$`3#hC-CgF6w)n-nrwd?JS~{jlT2}3jmRI%{cJbt?!5+3lPnaB- zlabpdRV*2AccOD9SsKHWqw)+ozGOZ%{1Vkw5s;sdD|;#JU1}6)JnWs<3l1j#^2rFt zh{bP1yBv@8faSp~CtbJAjGr@lxm0 zwqJ^Qfw$Mi4wx@Nikle_SYp;7R#~pdphAq09-&-URjyv zqJgb}-a)q`26D7t2$G^oxIlM@=NZH@)GHDR=9z`4P0a#{7>k9}-g=I!%#WYaZ<7~K zE5kjB(vhI?O_0Hw%hTv09^Lg~r1hEaMm#0URLt|G@uP$GrQ@!b;NLtn|3^@gCvsS` z__)2-6cd-YJb8s9xlq~AI7IGe|1-y;vY5%0*#P`B^PNJ*d_PwpS^}Rol;I4WP1;=k zG@2TN98ZkGWO4BeKpw=RNepFWX(3#oXGD(p+JC$wkU3rPEhBIA^z?955mxji?^KWB0vviE zfu7gyuN&#$3AyM@D?(;^GNN+K0EPdXZ^3!gWNKP4Uig2Zjqm90ouO>O`?c!^XjSTw zI?W8eGgml!I9CE6`;x2wyQVCK`6hkTHD(b<Hw=2W62~RyF(dSeG|0{|SkzFD^K$Jy9(FEgPInM~cq`;?K&Fa?J~>g_@izI?zs z=)@%C^S?I`<|AwslONY)c}SleYL*j8{0!U`#GU@Yh0&c7Acnf=wQNVFKD5iINnX$9 zTwmwj%bbY%Xf2x*ie!ew<~Wz})R%x?5Nftf^BI^6M9;?18kXhA7Ws0yo7oH;wNw;- z#GTMs5GkpguX)iodp5+Dk^2gmRo%RMG%IxV6`OLrcI4+X4Fm|9-GVqLqe66bbsfDH zrp*M3&mu*%_K$J-0SL&fuGkPNV^$0DwL8 zY^M7{>s@Y48Hrb5mhTngI1PD4qaf<{GFIRlOVs_GYzW@NpCyrayu_~KFAaM(T~@Kb zbw5gFUSg~5Gx2^1xpg^+eOAH7%G~+y_*OUrv_~$}fkqK`w-9dOgGPWma+*Gy+GB=& z2J|NS7W_lO-G39@B1)toRf?m6^O5@=S)P9>c)4PNk_BIf*(4>jpx}WrTuuQ-n?K2-Wf3H-a4a;S(SA(^*{!R>(#*gvE0um}?A64G)Jx3A|F)p;d?OH4ax_@F9E!K?yTT)yK zSK`(Tpso|IqRW!1RC9T+&4urpaw;0#><5|!djyoVdJk>digeO^PzRfXcFGH^ORQUO z7iwg_x|-zMzd9B4u9km9`qx=-kGoA4miSIV+p@;RJS!54pGEs%3ELM8>V@Oc!IL-_&Po^5m(|QuzW}Fa05$@Yf+JqY_`gpsF$jIA8-Sn;Is=sCdOyg? z`TR-v#?OWK`3-ug7R1UtU^l>$CEsgRn?~pKZB_m@Ai&2o!IbBvV}hB$7y15^ue9O* zhT8R=KXA`~zi~LM%yK$R&T?uNh*EkD3TleG#K#jHAHd~pSpCdg+4bw*>*L&BBh;g# z;t{Q0Uiwo-{W%alCb$HPDS8r53D)2P#sQw;o4`1&(?fFz{%lxr#Gks!gtV$1&wOM^ zN-zKsqAL{npAjYj7vO9h zxjyH*_W)YgdT10By_{>VWyq?yA-|sEQ|4793Li@5Gcc%m5)iC4UN(n6fpc8`&wT*r zfv8neNx^)P`sjUYes|+5)w8ew0o^QgbSy0IcoW7nvGK3 z|M7rEQ9!&@NE)f+n&}-o124nhsAVVpN8H#cE@WE$cmQUEIk9+ z#13eXh)YNH#@jz%i4{6YQjig_+DkBx0`Z|oCKtk0m6R!PkocM`tw9RU;|<1PfD4|` z8x4KEmxQf)iL~Jt7e0AlOIhQKU>#Ly9PNa%Xv)_y1Vq@{cbQ(ZRy}8Rb(^&K=D%xJ z@j)>(-?L-6p!$lat4)vqxx~V5aqJ)YNJS?D%_ugf^+crZRb2#BACq`2eT=4z1finX zthMN@*s0b%?|=sV`2k$%NZtkHH51wMv(0+~e(0WMZ8yRJSB)h$#ryp(S7=9|>f?*d z`k5L9^XC&z--m#>zZhn}!T+T}NkS1FVfVFDhO;^%i6S1y@I|}l7W`4jr64=IkkI7I zZXEqEvUi9H8snjz68v-?R_3A~Vtk{cA_oL_r+nl1NZYUp5l3(csvyZr1vH26yW2HU<641K{q!WO^p=%&v!zFhd3a+dJIctcV&9SLwN;##sZKCxH8x} z>S*&eZc81gEW4+(c-#hGw-BWGl90}B|CyHiX<-K2Ai$nXaVyg8{h5Zzc0ty;Wj{WA zaC(0;f8j@kO>ySJ*A)_>FpiqPhr&yE?jwAs2=$}^bxgzg?rGm^+i#+}Pr6QULe+}y zDsum^z;&^xT1!b^hwL0^Q=qYfN=yP#j$~25)pOCV`xu+YCypBL&NjY@S~UXxmGh#0 z+D;K>Vgu|iA-{D{M)D1PvG1H;-#2rMF?x9A!>~;<+t|-Kk0%zAnR?a8COHVrvxEte z0h#{)_}1-mtSe39dU3*MN8db~XZz^KrYaND`?N@--E5yMbJpIjQ*I9WIlpaSCe-W^I1;pK zwT^n{WrS94^HD+!=peAX)p+-nvXRVJ#WG-TN#)uc;`MQu0AIX!OujNPpdNhFC6x|8 zAWE0&A$A5dKHc`Vb2B~-a#Chv`hr~RMcH6n^Do*4zt&aaEjJ&TGbpakLdjWD;=&_#RjtsZnw!7DO&WX5OOsBy_DXvuxQ~rn7&U zj(Ix9YaY>MlJ^FScyU2wf2vX`q6-cLZ$143EPILoMpSg4_^_DABZ_%yK`MyH?(`#{ zX?C#Ay+1?Om!t|W)1XgwDT0jn)?=CcV~0Nc9LXOp&gTC=68qr$@q_nF%bhgbsKZj9 zI=mXUU`I2>(6xIyv&?^$NG4J#yQuc2$enrZF~O&{78aSvDtmB@-}!XSiD~<-p(?67 zH~t}~yv<*ny`yK%17!6OyB}I-^SyF37LOiqAm$lb1u+b3Ep;4BGWA**a!gJ^qfNng zZl#rFn?p+q*mU?9)3y|AwLBjF8`+B@e@fU(T*GmzK>SihtbjG`?>Gj#Hp%hd=2V5m z?Nv%G3=2q?Ym~ZRyv}Pma+uGQcGlK~BQoF#9%vGbwEN@gI!V`h>aFHNPjG;IYd5|HPov zGVxG5_T|f)>$FeGM>=-9e@Djp@Ep!H4yfE)xbBgi!0;(3M>C`?bY+Eb^I}i1>ugHF z)p!F4j+P-@4FuWW)V0N6?(HvSEF5PRiup<)Qmv;9qb%cfDqF4=^<6?#GOMy|DL`Kd zFA!2qd3h|eQV!1X@VQH_`*k&zwGg-|JFw%(Q~doW>X$>*kGfwNFclld3|Afzu?JHp z=r7k1%_H?C-4lL!9kC3(WZsZF4Y5G?f+IOF^gj3N<2o%Lyl{8P;jJw1irJYG77_x= zafh;PLz0%Xs^?Rw*2%^3H=AKO92*rTO6<=uxqqqDWN(z-8q1QXhDF?Mc6-mUweH5f znwIA^uGhPHR}S7qu3ygtY6brG{pzg80w0&Ev2LhMw4yA$p+84=eEPo%@VYi}068oJ zW&GSnE(uIgT)LJJxQh8cV>Ug^N(E|LWzbN_d;<4O@BE%#FEuL461?q*{a%l6APH;(e zg#4pU*fyf8a{6Q1_l&nadx2T}d%i=VQhZ)Hq}G@adDswZ>+)vzzL@9vBZUW&4~0+E z9r{ZPm8f=9wu+dtEC1#kewE; zGb!8tWGyn}2_Y~DQ%YF%{Hrygmd`JCDJh2DpqKm_+xI+%79uy}qu1b}HfS5&)rgRc z%ZU4(5zrdU^a1n*iNlcWEtP8jFnTFkcCH96ry}ckSt+}Li$ZCYQ z(TPN(Fl}&Yr7Z_~>Us2&LwTMI1_F5*<-{6;rgagj#%5IiF4b#xWLM!Om;lOXXlLJj z*itd|0K?&_#EH()jL7s_j+CyEd$sRCxR$VVc{&#*>?9OfVl-X1VBrn|fpU6dR02s) z&IIyCGFK!W+k!;@yV~B@RDiVB0?)f+*r-5C2sWnm)tvlceG}X)zA50fO~0m06-HRH zNz(^X=dbD8Dn=r=6Y$7ka*;?(YzQ7M2!u9A08iUlTEz+vdq`|+52H~KpzrI|>+~gCASe!W{bhlLheblU5$VKLuFoA~NdYlb? zQe^D{fiRIs-~;IeOMX%>9VNI|d5iDYCTH{IA|-9zqXo#u-`0w*oxl3o@$O~_@!v>J z0Q>b9U@nCAgQ5$K3YFX7(stL;uWIK*j7) zbci+uOnWkye7^&aHDK^lg!>MonTf&-pxYf{%QuJAjfM)QDNx&s#_g|06zcEXe)Vg6 zv%gU1_xJ#}XA!+3a)9Z!oX`TCHQ<@!YwMAeQrWD09f7u%ej;u{N-b0Ys5@zXJFoS_ z7k2a@5Ri|9Vi-lEdga8@ZK?ky2duuZm5to&6#7UrmhCrrU$-Lrc%aY7n=Ca2a+T9hrbmmiyTaH zG^N#hLEt>e{1#2#XP;+y(lFp~5bU$?ir$JRDHj#w6pIpHDbtMY1LyM~Q6L(?55T|W zDvK!9=*8>Vc8jMb`wOieTf5?tm&uD0Cj|5d#QR-l3z&C)uP3}>-e)8vC;-LJ%9VoU zcS}9|g?r7oYc9 zNZ5JI_xGJ;RjH(Vbf80cJ`H`3Nv*No*~{5kyZ2qg{E3Y1(h#l!?2O00#5HjZwHRiBOb-}t^^5G=p5U|b+g_PFa0eo{uoREakBIHp-c=C#zwUv`tK=Srmt_q?W{i8#lKe_fX{(r-@ko3!X`=ZJQG>u^+vCpK@$M{)i0 ztDWNh$%0N17R%Nl=S4#_)0ZAkF%)EHKAyD48JS1%{4j61aavfgQFD&taP3U=#g6hi z!56a%8UC~KcPfDQqaMZ#XN5^Wz| zo$pHq{>eC%&GM#5H*h;1&6GU3k)~vllW6fdVhvB>d!E$uw8^!l=6!4wv56LOMP&Dd zxVwV^Jj2IMCz`Kf_{-B~TqLbT$(xtk)Awh1Mz!KHB^;@SUY>oSo-I!$&9O2PRT_No zxXUv@N5lrlA8l|tioLYr_a1H0_04(cODpMA z9UGLJeC$_LzbP~#W8=-T2h%VUud;&KTGUL$8Qx<-q4-CFlmoq17q^T%1kfQ{^fMNX z$jrHzp2)Q@{?F-D6aqE+eYF`v5bukIy;-qeBhSN|BsLa1z&&khHh(ceID`prZBB}` zxO&PvlYZ^(xoiCtvoqeU4 zI{6xbnse$cEuD^rkr$V?e&_~iF^-~=UIt*n4nX1U0$4#o!Cx&RZ;#hcPfuB+1Vgf7 zNUFySc>U<;=yqDX_7@sf{qeW6iDPt5eoa?d-aTEpoFxr7go-~k4NWx8Q;huT_t*R( z8yj2a;d}n|{KtWSSkAjkZn*Ruouzy^v7{SPBUK`9H%yO zFRRQOoTBeNa{2V(zUbxcUtlMfx$gSD9DKp8`B|W=<;SPL-izV5i$kheOu$Q?qI2ki zU1&(zRzaMa3QA-Gdk#Ej< zYk9i`SNW6i@vBk^4Ggg$M3Apjqub9gWc2cApz(%Xud|m=Y8kS@c}rUy=b5fm@Ka_& zPw_;N8-vZ*Me{c!=le?3`XuV@3kvxO0OoEFIWFA4?(Us+Og(uHn=FkO8_H0zevoAhq@ z0*_k%W=Z)G)@lo$Ai0*WSIm<5*GqoG;0RF86aQ^8+ae)H42yjlORj==G4kcT8OJC& z#wRF{o%K4^#{z_q88;VmCPLDi7)w2kj*Ku$`($P{q|x+^@5lYNOI=7=2zsIn&W>Ltm5d)+v2WX#yWG!VMN%c5F)-O9Un**~ zA+q^=F(C{0YWc>x^&Cprsj@&%i_>FsRguw*T9_NTG%7RB708EqIOmS6p6N>h>fNN^mM-Hs zYaJ=`kF);LK_S4Y^#TMkrk!xWU^wIGENjjkgAL+6PHN!!R@PL>Z>&cR>&D|7*ti> zzvxjcmW&PZbc>chG!(}7ldf1ap+>HzG#CGsNAsHRefca1EQfT!{wH5C>qqcI0kPNK zSU&xJ9~Ne-{@^oV?yL2DH(m<&-5yeD4Azp}?tFGM67J^G#f<`)=^UlVrw zRQ+@q0ukc(8k5s`;>j_slO+Y=$wFxvQ2dlgtT_*PX~iZ1G5wDPk*8ev%Key^A$rcw z+us`a25fAkWNNu#l-as3qhmuQOv>DEE}~Tohi>I-ZKd2Y9q?RvMPG-lI1JpQk>bTu_Dvoi{a zoiD*WUy{r_)S;CWap?DHgK4$sPx#I4`VC7ivRF-8J~X-bmwk(|562A7Hc8yf_w!Ky zNn6I)s62jy2M2BUErMpuAL>=x7E#cD^(UM4AB}o^_m@cgByI*ACG;_p8aZA^RnXtd zR+9T%*Q73sF0s~{MAMg3J44s&6CQ}tm`0$e85U-T;pr+aTPms>e31}jH6%MZLC{5| zDEv(sE&3jp>xo1Jdx*zshCo9c)B#{zcYSM79D*4AL`t*q+L#qE+U-Y@5@&Vg(S1Zf zI7TJ<^3-lxDb*HPd3oZyMp6YcB}bn#+MZ27g(6~zinLtROPoz4S46Dm1l4eEjGJes}e z%eYotSc&1i1AU3F9dx_C%3>KibDncqEq5(XbAiBC zJw}Z7z^!2TI8I4#$J{J!km(W~S+8hi5CI~BRj$zCtUFa0eLuA+UuY#TqiNZ9n7F@x zMNXGGFGUit@TwtyaigdrUzOf0pe9=KB3h{9@`GDab9UBI6{F|#g!lO$%*FJnHNJO0 zOybvKMg!__TG>y057Ak-qCEKx3utJ1R%F1>HWki3A}d_@cz9pOQjlJZUMemU`{mi` zFGf^OF=ZHy3xbb$LL4T=?@L6Ejv<)X4>Utao$rz z5h8UPaTri9zrWLEPJaAqqWxun*YPu}68(JNLho0f^+5HB5$S~C4Gi;BPLfblE5EYr z5`C7-5%4Qv>s@9oDhXFF1A8opN#q~&%POZe+Hf_i|AjRET44CU58T`BGoeE-p@0`! zRY~qLI|@^eN0_5*+C9%ZP898fxuFy z)z~i}sgU^~5t}YZZt5p$YC3vi6t;V2G_v|36&CATV^-n&U+RUzf??D6nzFhr{DJ?5 z5%Mb+{g3bQJ#+YazTdP`1kCgIPi|^hUM4!kZU2(F`!`lf?)#@@3q&qUQoqS5^DnX? z8z>6rgBS3^EKb}4PUyd`R|VdbAzNjRdMRJ;PItYN-SzwXM{5K4Dek#46Vkq?VMDtb zH+f3YXr2Q05Cjs%{K=&9Sy!)xpR&cAP^gXPa}3zBKqG}uUt3*$mC6@FF{l%GY4Fv5 zD2Y4cLv-}jkVyxtC{>YmraJrR$IiQ(1KUtt;CFm$Gj96$1G-E$?U9z)iFCQ7EW= zd$LK2i^v&bRW2wl6n`vv-fx{AlPDlbycEz=`oO?So;VQ=i5BZav+0_)i{s^f1Hl!q z2`69CZKNi}i$Bb-2>X1&43gSwPCl2#qQ$1Ih@6}Uwa5oF$M9{-dDe%`6`&D8l`iEi zFnIOPEgpG1AovOKtS>lUYk3F z623Plg<5DnE2E*f(hY*X5Pm9`ot0^5@i+*&fJB)=kz}{TfLxS)kf{{eXF+}}=2UBd zo?~307`zt6bRQ{*15XvO8A|o8NWYvbfeh%^`4&1EJv1!S@7V3}{NVIyJJVAiPn)wk7rO>!vgp9+`|gs>V*OhA0-fxv~VblN>EBpQun@Za|oJsKW=JlpA4 zOwm!|4G0@@y!{CYU~cihPPOAeVexX;WGe0ONj1=;583C{8AqNJog4fKf(}wfdIr&B zWibYIf`e4AU3)vQE^va_9O%!Th}~etfuezpzl~4ruilAoW4cMap(6CC9KYLXvWMTK zQ0UD#`wYfP7=wT>`W0YwbphdmP6YSr#-gREstr(h@adV+pdy`29t=3H#+2Rh{}PcW zSTutug1rFUCQi@IkzB@&Mj(szP@y_@3%vUI<$YeZs?-~rcgO#>vSC{B z>h-#N_Z4MSm^cg*y+$#~{Fb8|1NRWMcx_;K;>VA;NGqk684Kyn_l-+*a}~nj9+pX4 zGB-OqhOuEof#nH<3=HrQ~V_d|= zpD3nN6`9KfY0U{x7r##xm%`D}5i{H31Um}dA~(h;#oE&&<4vr0R28=@YD;x`Qi8Y| zyfAw)V6=UHKPG-iYfC@gZ=OfZjEn_LM6nf`jsa^Ex(t^uW?Svk{e|%;nd{sA}Lyb>myX4Kxiqu9uB(elFB|O(Yu)u6!QGZ(G0<>T@{1 zTLQuGJBobycZ23HfoLjO&o0RmXNHL4STvniGk>$+Vv2oWr~Wn}R2XAEKP|QHI4&FN z*9fjjtv;^Fh<9B3=3S=OAhcL*Bs`OeH>%E?0J}N=QQTm5e6A#h&9P}qCfa&n&bHs= zG?8i*?jcrHeJ#=h5bBruh1nSKkhIhEKVSdeK;UVCo&U1CH1cO61{p z-yug#Z`?>9M>6>o`Bcmn{jB3ez25J8V@*!W&2koZz75XP?`SKF-%E)8Y;shNP-$Gj zh3$-2D$#Y==zXS-5IRUCB0>Uo=#DAc6=0%J?l=3>cp_bRh~DgZ?y84&xRzH%%){Q7 z3r!uR$}qL!Hzt*)jZPcKhljaZ{Fbe!-GJr2-RQS|70xu1=Wms6-*~&dw;i4i9+M(J z3Uy|nefL~5d*p!-*9iwI$Dq*ZY!nmp*r?0Hr*f-}4#Ihi5mWahNiy=VRxp-< zsvRfJC&Gd_evetnkx*EaP<2!b4jh%hc5iG5+R8&Nj10lW-+Rgm1K$>dm&37x5FI-DyDgH* z_<5eYc(1*@>P754(<^+!0k%FmBq@ms3|EdtL^8Uz#mhO>cN0)@n)k4@9Y5`?a!#2jawnOn9*+UWF|cu1U^zWWzz!!xX0$7M5{?`mH963IGR-;zS zu_bz@eAqYYq-rPKxFTq+8uwPF535P?T`q%#4#6w!eZ|@EqDRQjwW+y4_%`yfZmhRK}IM{d7oXBr7?|E6rfM6b#tuE*>oPxcoVOmE{?oPP)jKBqA&t zZ_(i*zQbb%sFn?|5*VZ+U1^IELD1j1WroouM>Aysc!>C}p!$TRw#JpZS7%2dPf7Qe z=F8PW7H(&p=E^U1V|oHJ&1Y)(W%EbP6Xjlh^TWvf-1P6NRSLPUYOVB0vgWM28wAJC zrjrpy@;d1A>2OfOI#Zf?9EO`0s~IRC+kF~HM?U=SaFBfxhxR*jXm$7{za>K+Xn(Q- zbJ|1vrQ&4c;7SVo_>qDl;~-)kBa)|$L$O3=?8b`=$51&aXKRM!glnpsa*9J?qn->J zVrQwE<}7&MT@@~%->4Fupzq6;sI%uEFCd3uNlKd@rmZV|efdOl=N*SI=cCoP(aEu<#B7@Y>W6<4?=_XxZfQd1=ooY- zw>5*|)tcZnt9sSYXC>U@4y7RkBm`#d4hcz_XBi zgD&D8J}I9?zjSFWG#M-A*t?iUKH28%ysHq?`1y4j4?#ASMHR*tc5aX*V8^vvCXB)) z2mIyRH?|u!>+nhzYM~XVZ5wQh1q4#8{V-K=oABJLs8z1vOw%B)xxssh+ zM4kSNNM)`*0PumVeLLwh2&|V)pyDTvkx2=|g{(0vB{D~o?4reZBHqx@I{kZu0VZe06JQZ1;I)Vv7ONy^a3T%QJO?^)Bxb#&Lso0b0vb!hz zmiJ&}+46N-5M|d!Fzgy|EW%^Wk#qr2W2lvZ!)*UH6gY$oGg4f&|dV*@PIp&`VD!BIoDd-3fPZa~I{I zk<;~UL~LHnilh`53Unoc$N_)9Jl`E*FI7t@jU?|rg;FI#pF6CxaYim{>srdwO131&Vi1I z%ZA<`oMA`FZdn&@SiM%t-ts)e2g{w7ry-U9QLv=R{*v+k_Ewbq4!O6sI;jAdSB=b; zywC&g3J3?Q&#Cd^dCVI|YiJP)KpkZdeg!Q;VY^OSnrr>B)L1NFz4*UwBI@uhV4`vw z#f0>^+$q+=g4#BKHGBH=%_BwIU%)Cm-^*Uh?5bRoS({E?>y7x{IRj2uwQFZ!LSQY%9C*>gpq&>>p6wvTxi^CGg*J zpk(WDGc?$jLVggq--|!jG+gb`xqZbUY_jyU-WRAO3^&XJs0aMZgOSU#sF^hks5lx;bMXKtOinK4%4Ovf$LggOV;uwsJNrihU zIo8v~KQ6b7UW_V9K;sJ&$V$KBZTr3LHi`j9(%KdF7qF`oaxAT#CT#<4pXh}HJmmI7 zgOmw-UpQy~dxGKzip2DbCcdcYbzG!RSW>_s!LK7h7I)#07ldl=ze4a%sjz6f_kD{% zcZx7?#?7o##M#~VPWnwyNS!za%!}#jsij7mwhG{ql0QT-k9Cflp(*g5HF>|5{ykl; z-_~8%Ff3!UCSf#$GX88-YFMe;PJMa07b8i~B5={s>&`s69wr(c!RNT2<|ZW}-tDBG z|102A$qqGB<*U4uzK000Q9Un~+fct|aL_n5Kl| zMhMZq?RL4fv8=WZY|l_CoV%f`_iC4#Ih>?JVtFfZyj;rw;sZI2L9ij`7}2+YAfYw| z#WZ~^hz&QG7xjo4R}4<*gfa*f2q*R<6=U~c62dnSqk8S?qNu|46d-fd{y6n)>&z`Kb*y6UGCh0x<(Zkt{%{Zm~ zEN*W!;BJ)qA?RlHpIY=52cJcJt^Z)T)m$YZ2zGPj{oOpH=4HT8@Qcf7v`L2i&PhAq3^(cuUSk;jfZ!G`We*n97Z5G8$J41f$BA&3laUTlt$0VB4* zA)38kP7eyZmfh0+^KPeqr_JA2<=mlj??vF(;hyXf#v{Y?YEG_|&r(Ts-A^Vx-cxO& z`6XW+I}npZlnYurSSAWBFcZLki@8y~IV$OBdR6@4?n__jhm8DvJI(33Bbqqxy#@K8 zkeb9;!OjP>YP9EVq1R~Ik~ek}7&!rgV%U%_a9b4x4WG%nb@i4-@XVL&wDy_td{>20 z^vn=Pm$d&i#&Zs5{L`M*&q|SE2f!o}qO?sFFTj9|X+7ve@yG9bGPAE=_3XU7r%TYA zj{!TgcTiwy&{Vb0S|R@xGH^fK7nDbb07}7rt6zaNZD@!If+4VlcOlPM-&u`iN%f_Y z%`n*3y1;V_NbZXaB)hF}qGU-jfpq;}lG*`hOA>c}gY~4_e)w79CB;2?ncm&3i+_`m z+1X6C5ZnpcrJp!(MN*)EBmiM1@FnXW%~n5W*X@%77f?7Wdl6WJ^XN~`)Mis@P~&AL z{7JuB#n%rG_%YzmVdrsq4~GQQk(LI(#i`hEQIsvuVom^qMfJv;L8-yH^@sV~1jel1 zS7eso!AQ`CU=Z|Q;RW|wDu21_`oXz@TsXgoh+)5GqpCd?T@JJ2yTl=cAjYZH_*^V( z?d*0-n%m_<@aorHYUH6niM0Fh^d-t*qC}|Bt$t_nF3MW^#_DNS;kQ5=05&^RK0anlwZ{M%`m`_Ln9r6bc*1RQX&mX z_W%--Lx*%o3rKe4&bjtE=es}Oy}uiN zB27j}3P7F5;-I-|hv*(RzrGEX;Q}lSdMWZCn+5X_xRBvg!2AYmp4+xd5i*CL|8>EV zqK=pv+$bN}GCRIpiOC-g3bFM-<=N$yc8(-h=dVp=;N+{2(n|+b}n+! z@yW$dj!{^bp)0U$L^&Z3JrMx>sv>s~cb{CuF z&eu!#Ep)A)YovXiT-XStsmZCYog>+w`gQUQxk>-$F_P*VL?sxaFY;ItV}Qe{6~Cf9 za}`e7t2K>S%rvu2hR5r8cckfI39jtxSp1k)3hRn_kX43xqBDK;4(f)9-=vN6i~JkD z`qUaT9eKfQPNMU=`!Ma}PY`r247=62$})c-AVo=Gi2PFx3uUmN;*a&_ zk7*4m;nF@nq6_^cM-gMVvxz_Be6al%Qg9+=c_-QXxSfo+#GJTeZ9W;**^E7wCJ5Er zj_~j9ZFHbyv3c92Az$EEefpGM)Xct=9G--Y#0@<$zzP?ClLOw<2G#r1VatX*p?Db)9x@Vq8Un#ksypL6k|P>jJ>Od};7V*iBch;T*jp;#Hdge+b47g~vdZhfuOmz_G&-O74v?ZU2e?8{T1>uq&b%rP z6=5%hn;4s|%1B2re9VtJEbe7&q0Ax~n~*?^<{OK#M0%XtL+#CcgEijR$MA>3!YVk{ z{;aBB6{Lg)OHyr7v;+oF1amW@Q;W4HZLfyA^otOQrlzShOdIBA@LmV->5Q}9Dxuu5@D`s;*$uTqruclou?%zsGt zk*{Rm6eW{4T-~@gf$n~cC`Ma~NeFWyHc?A%vtRuN>$o;_*-d}6Fe65bt=WF%v#W@( zK1GuYRHH|uT`lO7K}stW8h-Vw?#i@;Omg_5kP2u&ADJc#HMkG5uEh$AA4Vk)zT78S z9gNh3R#d$CVkCk`E9^JF3LI5Ym<2y-ggLa>CdjsZOk$0nDm*6r$b-whlc$W5`ZSn< z&tle!=~|W}qg3_ME5E7^q$x0%>#Z5YB&Q~JWK}fsjzOED8BK?q((f+Q(OSf{*3@e1?B$EF9`}GIArzJmlX6UBts(Q9+43)0u^D4Ml@6~<6*k)i{BZbz%QaG zGB~cMb7EZ2RCyYu5!z0OpE-f95qG%<@4Nmy>FVj|<*0ur(0}5nRvA#HNQdkZ)j0x=}qe7r)X~$||?D)E2%^k!H zObGbj0yHS~^OD7acU=^}sD;Bbmn?DXY<1442tY-@y=`(E{p|SDt1?DD(;7Ut`6K1` zF!+cQfu!YqFw)uq^yw15}y$!o#UOrl1hLUgC27|M`7|59a+FlUpz(cU` zo>x7Dzzvbu5mS$_RLt#&lnHBoohTmknnuH^g#ohxx;upV%lVx%938^o zf1DeA;3#sXGyV6clU3{a0atFiZp#_P&34=u{9mkZCGT^bT8^;dgFGHrk>F9mDmT^M zgv>A3>Svc5XHI@Mo{QpJt*luPDO2bM2ZEDE0B(XP8AV^wGD!AVrZ~k94Usnt^_Rsu z?_}%jonVc1A*3ZTKG@gh+W!mO!q!hwH!=WubFmo+z9>8ROgmj>SmQqO@vfI}ceX;% zlBSIj%*Bn8>J&Z+ufw7vEA*pL{4>?}Nl1M4%2QZ;33-t}v+?Kk=KUh&Xhm+>86S#i z=idvrO7cJIAfPKg)+ZaGljw}P3^8Ytu^?kfVZtVB>n3sd45a!<#fXH30yrkd1>R<- zXfwECKsmM9H46=1;$M!HnBh)+18NO40TOq)Pf3YHQur6h51tUK8#oHha*6N-o(fBu z1VZ77#AqJnxB!JYqI)RpYvwdLGXjB*LQP7b;I)9Xe0pMT?#;I6Eyn)mXxevUUuXyiez-3req0k6 zNg&UuVM(I<52`zQMs4z_B888R9+h`&jLLJ@ETdFVb|wT8E-fWNV3)@qAnMSN;*aIp2c+O%nb8 zOp=R-_F;daIT)(4i*`<0-xSc?0j=E~8gDm;99oxvcHj8boiSQ+E`lJ>2791o5=eYm z;M7|yo&w~kwGV*XsjlvYavcNi(*p#CK0hF$%seb!}5@!SKA#!1Mi0}K`C^hY7_K5qUS;D2HJ zzYDL#JyJT~i%ai2jTWiSFQbg6O(r%ikP%5yUP%xa3K>Pmz6t*W4Fl1R3aSy|(v}Tn z5g@U|j&P;3X%|CORZ}d;3Ey}Z$c$Tg?^1KuRh!x*dzp?5oKi$+141vDH zrPb4*d2~A$tz{z>i0}^r3l(qx&%zvs&^{a&_+N?vcr0>s;Qno^dw-SddpO4S;KzOS zSN+8^&2XE~fd$MX+8r9$2XpQV_11KMm^pn>IwuV)WJzD0zqjEED&VxP5(dIfzw;fUKLSv;&CDm4=%QE_O*BkBTs3Zo3?bX4&t}cjztEU5 zV6#n@FZ(=rF0Z1jF!;P~_8J~KJ{x<-`!Y|^%qoFGm_kEN#V|7 zKI#G&eI&@jinE){qwwU`b&E5Y{q7yn!V-o-3%l68{!Ss4&)7i>Kp_E+OD+2M!$9XF zo}@B)78Zjl-z$rB{q@_o#Z2cFXDE?>Z+s+ilD*u;OSUr*_Ky_7&B=X%14DvC%NtPSMpGIvyaOsv$mU|q` z_vDzgO$gw+>eZ;7@iIeV(x~`FBz)ncjTDRX2~B}MJy2g;8^8CS`Zd1y8EYpx+}XdZ zZO!GrXK2%7BJwDMywAtL5bB86Sq}ht`d9b(9e`wWUhO76Ih#nhD=QOvlIv5xI&sRn zXd9zA78M<|M#o++heJM)iXKdS7_2lwD{sKbtMNrC49biZYn(=1YoWTD@6fTJ^HC+v zVXDEf2iFpodEgfFSqyYjbDwSMv-M;fPr?-}?pFQG#Q#rO1rODW>b0?7wr||=WiZuHLnhS!oL;3f|>;E)%mvbTMuUu z>-&!EFOJiAK(5fBlRbHAe|;uWExV1ysXe#Sl1bI}XkmU@J-A=qtqbz|Pi*Xv4z>F) zW>kam;}`_rdKe59cH&9q%0sACq^pH(n$tYvZ$bmATyGHSJ*%9#2#B`m#DlfpwftyB~Avq*8~xQzSS6!Y0u zIi#sj&}q4TkDm56PB89{h~7^#UH-yJnX`czcPq=#drDLoc}~E`&}46pOJt0Vd3-}6zs#2B?jlz9S|@~ zojk2Dn&#gt`rWQRvwDfx{=(H*AE2FwQ6Cmf42utreenVrL>%#YpuCCOUWeK~T0pN;+2r&EC;CuFbTG@PM^>(^Oyv@MFby^=K! zzeq@UL54V-Hgx(Kkn0^NYfr%5#n*o8BCQkjw=Yg?XGui|a(?i_^L#h#WFsuSC{1yd zn>2Mg7sw+5hN)(cy-yrkd!JyI#~DI)wFH{efSGD!BS#bf@jsmHoN-TNOlA)0Ten?x z;{6HuAg%AbeMmFHa?p|^pAWm5co-y=!NtM-RF}gLDQj(B^>;=;M^;~7AGo;sAGBVS z@TvVdKpdhv=$hPsf?%942x|fA-t_j*qbEv9diD1DE9bWWwgor^mJCk*MDyLFATMSs z&APfggn(B=DVbA3Y3^ybeRAW^-Nsxgp2Wn&fYU+-39SvIPKzo~5nvg(We>Rh%Rt-} zwaWFso7-!kW5vrf#QFONRANB-(}7RltC)y`CS2M1VT`V?vL>C{Gg4q|_VUP>_r<|h zf!v$gnIm7ii#`nZi~O_(u+h1bwp2j?$=BJ9YnUD~p(m&Gtr!`NKoS&xDuEcG5Q|4F z@9J0Fo`xS$nI%1Pip=LGBcWFq{GR%TPOf~y>H8->J92sAjQFvyX2o<&SX)$a`WO{} zKWEEd?D(_;41tThv{;M{Z?IqDwjSFM>G_aPTWwcd67)NGFo@-ntjUNbqMpwo6p+Xq zegM9RYwvF!*wEe^J& z)@t9YaglkHpVIuObnB5SW36-@=h{_hl_Vn{TmT)?nHzvYI~Pp9hE#f(^HW#2Ds-9; zmukr4RZ28jNdwKB@gul!xL-aTjY&)Vs4wQX?8NSrpIuUPoPRf@v4BVWensJO%-AC& z<0L$z)`>Slj~Bte1=Q$AuiBjbG1Vme>cYyTAnQfvl!DYy3nf>GV6nR3H~udBg&)Z{ z4l~2qDzA`VacTJ>F4zY{z(`1vi%DT7*9`e*p}&fk4SPj})_~@QB0FTiD}3@al~Y*S zLT!#RE%`>Y5NoJ_WbxdIp~W%t5Y(&>OL2@gZZxx+&hcV=_tn&!k;%@Jwq;wRb2^%X z^{{o%h0|`iKviHzjYTo`CwFj}W9CS)&99|Y!A-=`IwkKah17=Det>(*Z@a6d%c*cu zPoo+zL3N2Uj^}Uxo_BY_rnfi5;S8e862{X$&#ArcuFu+U*Z3Y7Q`@e7Io)5+w0j&| zb0afk9spZW-BeBEEwGvLn&n&l%6M&>b=pm;u97V}RkraOpFxtgv1OD8iUcGh8msT# zK&!>eeJOIng{dOdOe_NG)!*wt*3>~k0XwW9?}NzOZ@bIw0g*TF080~4i5_@W+Be&* zd$7r18dM<+Ux1iH&ZWcssp4PO;@{2ayFo1iOxtoAmnckSxnF97QRr<~&|stxq`MnE zGEc|%NkdLWLq%z`cj9LnjXh9KP&{*fBoFFGFi+MnUu1n%q$Y42qi|rdt;~~9AiSOeyQMtJW+>1 zOZlANJ1MELiSmB@z%Jyp%^hHpcq#GT(x@Pt9gM3HN48%>9}WJVuR?$drhQ!I8Ua@g zie&`wdz0NsCfS;?SC!8os6aeC^TF`5Q0yavkX_!zYKAphjGUJekL@GSA<3mW5n^>4 zf`h>);bP%xd^f%!#gRW}3QxLY^|d%h6!2b?D<{|P8!uECH!-@t&N!~_p#oC0C4@~7 zTK1bj9Ng*rk|WmC@MvlnksB)Lo(!F#-|00x8ocxk$0A(VX&x<+BCwQ~&d_P0F@`^J z+Vhi(_Cu*a@x{)2G53Y-ae^KHwH;I0-n(hSwu9wX&F;unAK|Tjd2bt+t4o2s>>%)4 z^Q%WEkcK9x86?SxZXGaE4TI1t8R0(CgaYauK(luZt9|o$n~-{CkAo%EJAL z)0%U=$Cio2ft`gRa^o(jl13Efj^vK-TsiF8$hG@buJcwt2Oe{!Cvpem72H{7`PzsV z3DO~)|Ad8YUF#`)+yeOLg+QQc4y&sqRbha9Mb8;5&j8Yak-2`td(ux_-iitTt|TVU z3g&^$wH1EBp;hPxRcXL=M?o++{*}MBm+WerZiP{m`E9jBM0%AV;_x8gK}@_hcT=Gx zK(?Uh8y2|>V!=sSQnORW^cKMIf2EZWknqu#>VH#ex(N!2TFd!nFh*GZn0pNuDz?;v z_N4J8Rn#NRL(S zF<)zIu3Xk{)_zEJJ+7vgdiCqTuc7sZIG9u;E?G54j^ri-w)l(grB`_+2IWNil}$eEZ@g z?v^9_aOjDHvq{kCN)%)Rf)y(Q?3;g3s zB*^QT6Q7wgM}=v7o7>j-i`x~#DzZz!M)dsMILksE5YzS+n?2K?TG|Arz~1%~DfTUV zQGQh4__dq26=*3(Df!mg`o+nR;AxDr^jx*&_lVwlhlP^9q{S2gvR@~FVNW8PKM=^c z2H9xjrlrkRTMo*{QjeVgR;9lHR#^R8!xX4#K+G%;he_T1<8_^#oweGIdTHwHX6}Eg z`vWLzyfk%T)x!#5Kpshkxc5_a6qo7Mz=;33AeOM*bQu64sA+#U(9Y$Ly&B{n-d}7k zY*TWo1`VfvfAa;G`SW^e`>kcMS~mYV6Ay9JzNWgwSs(57cxu}!Da>Z^$Jsx;o_AIH zi0#uDlwMqK9=_h?cV*(;#F@mU>xe=I1zb<$ZU*_UkL0Rb0vLD`od)I%uTdk>Sa7a3 z*3if^msN%N!;Qlc)C^IqyH3=HhTJBZKD1 z)xX-!lwb3|%R@?sL+LJ?yg%P!G>Vgn{Id-Fw`uU`2{T~O#;^WlEkvWrOFU>=lMQBa z0aZi&L7Xfc7U7Zcq3_r&Ay%#*hO2Z&GcHd@OD^HLvDU0%sK>4y{` zJkM%ojJ3kDcI<4CA%X_!&U?K%>VeB6vAl%)cEw$%rHU^8iiH6QqW&m|K#4=5R>*UR z*Xf)`QAw`YhFkh=>kiBb{F_qaEeJy(#B4^fZlbNDWz`9P9I2ea9(SlqlbzCS>=+P6 zNqJ3mVAyu&@S5pRQsDaFGGnSmTIT+Ay4zR>2kdW_uuuEQtdL>AN`Ph=*`n^<(tdxs zBTX+mA7Ny_KEAksJc`Hq+Z!t@X88_nGe0~g2LJ1;NK7N-1(UFF$~C~e5~-~GdcF)~ zk@Z4KVm^LMQA2|o)Y?c(pn4kG&Un5WRl-3I-Gg*>4A0+xef4v-NQ>8?HUg{UVxDpb zs~}VZ>1av~P+kPSs{pRxKT)JgHTy+5^%xzBj*fo#H~x61qFs&cl+TK+WNw^hIlIPJ z6D!hEQV0hJ=UJZN{V>`1#6%O_a~Xki99sAzM&o=nu%brX_^=a;!=@Z$o`NyAkjKXu zf=+3&I2>OJq8c>fKtg_uGaOn(6bR0nkea}DvoXkR_TzQr+~gac#TbYqI)oYrf6(MP zvI9!~F;)RJX<=j#fdnOEMz(!qz{pM;E{S+lFkZ<#kb=iSqvF3eOy?m7E;=iHQ$<^~ zX(v=t_+#QyNLhJRdgM}f#tMgKV>U2kfIQc33N>ezotrVc6A9YOwbi+p<0PM|xpVzU zhtSiD2=p$ExEu??26zXFs+%t~#RtdfbaNKB)!}zS@4GeU{tjBHv*$`2zk@pcq8iX& zdEEs;M4rP>xDf}Xm6msJ#@SVJpNgjTl^F-L5A&<{CT|Vg`oJ2~9&y$!A1E&^LHo8B1XT z*r7t`-*9MmM}myr?P9^=n}$#A;5u3iysjx0TEqENlfv5*4>za%J9ze_k{{kRqE*W0 zEdgQTO^7l&1qjx>5(1ZaIfPCjMxz8BQbm{=5_}uqmc;>R^#c4q&x6i7f(b6J_1oC! z`*8Q44EwPL9B;jH9JfB*nzEaXXR>$Opn<``?SQcLCazxoE|%uGJyJT6RrPa=*O58( z?>0ZfS~2s#iW2?koZq%eQTVinCa=9wNRWvAXddW-1QjTOh-EF2#e|_X#rtUa1)@!f ztl_{h8KK0t#Ow&oi*j55-DIA0<}~X;Bat1~0Ibl;QAG~Nm6K=L4ysF}cE3Aw-^-=fee4tkYkQT^lRLX*T9|Rm;q!k9 z?=cb6qr+w2zXT#&h98Tn2uXu)y&YQK9+`jjglpgsNU>`c3 zzAgg<2*wo5&`hDkevP=)6m?gyTR(&~4uiMpo38I=%E)DN;MnF$8WvpYl^zI!LaRZS zSw#!3@g@2^icwglG)n!OK+jXJ-+tNyLo?6vtv$cj^}ViDIx^@f9u*iZ2JS^UDxj4` zriW^bR~vdOdpLFB@x$n7ZYo#O-S({)toiOG2JK|2_P4Yku$v1hjObT8EC`&1i2;ij zI2=6o<#%Xw-B3$Fhh({9LHV!Qu@Pw8oA|UuE1z0ueCGfx{Ef)_b9>;qAo0~rq02!8 zF#hI0dj)~~9E7CAJwQ4Dg(6M_vH%niD6#_pX|1C;>Jh|sxYf3R65|cU|dhjPAeRup9TPA zbAEDUF?&t}K;Cwn=gJ7yV};o{$5S%Aa2lq?9ab5!&xFZoB>LidxNU_HRwk_*GypK? zNMMK>lO_=MmhXPX)#-09t$Co(vU%8sKpv0~F-f7S3(_vp7h?tYg7hXDEk?fB=xPx5 zJ!|#dYA^)k4xlFkAMMlW^hThx_&W!ru=witC`LO)`5WP1NIWfNr#+xh_#j zn{#tV)aUA!#Cue?{oehUTcPH2VWu76Y^#wMYBXK8qIvH4+m{?xEzM$$cb)9j zZ@KW88fwH5pn)!(x1`VzZRqR2X5TJj{=pA`eq*FR?`4x{Q{s9I_aV^p*&y)H8h^&% zAReK(@z9Y%Gmyq483Y!}{w@?`}s5gfZ9*RSYQbOZ@T_{gr&Or2By7un2iF1@3(@=NF$*X&_>vrj)Ej)xA z^ho^QZc6_IP#sdWJ8A>n`~6~l;!giQRTRp{b$(1_{hEadonUo}?UdRxFa+WCDX`Z@CJe|5IPyt z&bQuu5}1^c&dTf@Nq!)*qm-NrDj5;qqm8O34$;kBX^A+y$-YsPF_TsJw(EuoIcHr1 z85OFjYFDv37=28&$1y!Mx|^Tp_CB$vL1?sFDHhPE96adS6BtYeOt+Vs{u+4lO`C-0 zh}hK`lf#R4G}IRaDc%P`3hzv4uTysgMl998e{2F_LIBL<;=erH&wd53uzllsAaTLV z=_@LXE%Z&d+N1MPoJ14XbLIX7hWq1pxwWv1czZY_9ycM+0JFw=PkSEV z#xgPH5SWTs2>#F7RmcReP$fV~7$^lK;Ng%Uw}3F6j5uzzi#TnlWKyS>l{7n7mGaCP z?qt2wqm`@6^uk%k^|`^0YIhKxC0>Nl?`fakv?X%4)gVZO`6MY36R<)i>QhjL*kASf z0OL*ko($laDX3SkSt9L=`+JOL^%{Xf`i;7~r?6^O|H=!jgl2Wx%r!waP!YstxtOnF z#A+3%il4^rB=c`71J}8!02}ZSQ_lP+VZSFhXBT9 zZR-?^WmdgKcD-V@SS+750)?tGstI1GXtVv!wjDIYL=h-3~0{P7x9U@0n3xfQPMxU<$!X^iYB7ihYwW$E; zeINuKA}uYAOH0J^6o?!ZT~5X2xJvfI;@pVQ7H?PFkrxjw=#WqmGH?)ZKW+g7n03sn zpb*E!ACcdJuefZabl&g)YgQ6743l;=84zKV34kn5V8|<3;0ihxFC9Y54drcXe!@2f z2~hU9=_&{YDuz6^ViH%RM1SVmO=r9QJzFt$wR^e}eb&0#I+%mCs%X6|M#-3x*xcEh zvEwW&d5lcOsw>?6xhNCm;5cBm!o@a(6}^d6|C&xnLIoJlh{tm_=T-whb92x;+>Q_~ z6EpZ{hH@^rDb$u_MAQS@tj+q%x)$xGtn7e+FmzhDaaqtr)``2~`%K0Nd$zOPp;a0f zavAn`x5h0dM279_b?D%Q<`idY<>*Y?Rcua`**xRb?fte8*W9>3%0{K{7S`GA6XoR- zf}P1y{V>Wi+WUh%EdS0pT)y}|Z8CfRubp71$MO$<5)IV!mII$bAb4$eP8NnYF%;tr zul^^!^;837NmM4)Gd2ki4+9mi!z3LZ>OpYFapJDKI}7fHum zZSo^lS<4G`sysO{vO1Wlp=dk--k&=4c1(Y`M=R<5o#M)NFWwg9LdWHot~xQ5LxNO3 zyTuZJE7G%~Rv=>u)6Y(~Iu?p+t(wg`5in_PW?3Bb3f(Hxw>cJ$2LB2_#QUoW=p(oFQNbLbpvBs=Lhu}x{BtWGJBF^ky4n@v0XInJ(g;_lV z6s9ZWFXiKXv4h%oQv-gY@^8>e_(ZR;`H53Q1L(v&SiYDp(3WcCqc=~ZKLd{byWxej zpBP^AetzDTQPx7)o0vqr=f0_qv4C`!r)`*rn*$}9WjaM|h`5m)W7M3Rr1V-hZSWE#(Q2SF+VN)VB zY+3wHitX7;dEOu}208BPd=gvW9UQoO<{BTdZkF)#uTYT;J&}}L`kzBqJaEV&qo&Q$ z)d>T%Hl+8$+mj};JkV1uGoL{9^^`1o%x+0J-B+AZ%6L6fiL_dj!3Guc@43Lq^t$T2 zZ~tP>DGgN!$CA>U zSFU)&OHPtQ7&Dfa@xvujFy4lj-YPs|q%T;?`NgiUZ85(k}4IV3sEGL0!Pj$(oiB2Qg zJPRZ_F4UvH&(--|t;c45q$X+fOgz(4Fp$zm1>OXKs|C5!veObsjH`U#4S!;C+W9cl z)++jl4{`Y7ogA7;JmiIpGKOadv2v=ox7Q6`YTV-5-^_|QZg0PS(T5$uH;I5 zW5-Y2zR0o5z4)B|;bP(%@I!BhVc@~vb*<;B1>!5rvq@NlASr5%FdL;TDBJ{i^ICt1 z3k$rCX6lGf71OoaA7Wnd+Ggw#MSlhgjHfWn3b0KBHA;4I1+99 zY9F{kxMN*0eo+Bs64yDSnzm}t=T>IAokKbf3lVr!hHy9|0aC0{2un3XKhjk07Z(ik zu;b#7%po)fjWE5VpDQ6*wkYhSxp@JVkv@XJP*+^#hk5*TIL8+G;b+wT)9(T<11i%0 z6-asckIW%9_=ZhtHQEfYETKjKb{xu*$=~y{VvX9{po=s^;K%6p_px>9y9| zM(rNk@izU=Fj@B3!&!}f0^X$0fHTBeeuz&Hb>3t?)q16Am(M*MlFXINWBwT_fzS}Y zZU?h73SF(g`qPuAKIJLeoAQe~AKCD3>a*$z*7t7`i$4YuJ<4^fR0lT}>TSo%-8DOj z4vWZ%V8}|#sp=+oTkXOp#vNLJ>iI3U^%lf_V&kk3H!zy3z4q=Tpk~BXSACMuRUg2HVuzL;YyIi<*@{D|=99ai*spBq z=#Qd~D^v!+8dxDe7%)-N~QQ+F_H0gVmV_T$tm2j!@E<({uy$~ryf zSkTH+jm6pY1n0R}>l0PapOds`9*sm(*~%*QO*DuI4(5hRbX=dPbIG~wnD`lEq}=_8 zkeM6jq6>LGK}mx6ww8;Y4N|)4O~Ii1<`mP`t_kFh({ka#;(!}j*f{-s`0T;`z`ebp z)j?6_w`>v$1G^(TkIAtcsP<~CP>I^#ua#=mGtA@p61@MgD6z_~KlqkZrvGkf!|yy@ z!qv*dV-Y=1w4xA(1D;?=*_3y>{cv!w>&TvyVJ2*PDRfZ=R;rE!g~D^D*gG_p0^uo| zfwsXe>8nIGtRC;+x9`y{{?4U8Q9SG2?GRF0I^TFuink5dLdSTxyUJ%bj(N~k?&jcT z0qDZq{=UAAFR3P-_#b%;>lJbm<7YHxIaK~2-(s9s^gUF^R|H8*uV4-N#m8gQ#w&cb zW+9vIWgzW;e?TH7d5s&8itm`)yvURgDe;4$tj+DH;4_=g&G&{JR?0yc;xx;KbNPNY z6-70&qJSE{J25#QaI3QFlJ)yCetao+A;R%%#v0oAcq7ZNOh3F{iFtg`M z7ieYb-6L1;sX-l@`pfrzb;lFy?x9n%<^7w-21_|Pewa{&{vGKKnGYp7(T7qp?V131 z(-#A#PKtiSXa1uvbL8|KaE(4rP`DK2k`Qu_{Kh3CX4VTby!WZRM#T;|(J%SE3D`Vd z>$tXdqj|qH+a>eC-W$`Ag)Xluu0wjJ?)2BMSS!9<(lin>W1=ncwXM~s@|8=HW#TEW zl{HGLF*fCV@9a1$I7W=C+$0O}M=G*9(4?^pwj~fpLDye#vlSt`qGyu^4Ewj-U2SNP z$~+po*HsuHDDkdeXB#S2cxTz$!q(lC?=6-l0yRV0zz}=2rz3}bSWBFDgjvZ3ET-LZyVyG9NC>c|6ZS2@7b{z zFUNJh_)F_7>2r&1>9f@8>NR?Kyz!pb|3~5#@b}<%J5$hq3v&Y)srwqk>v;# z_)5Q%?PvBhX<2CruM7>VIsvLfP*xhOf;71PeWybqJ^2O?>yLd&!W0omn?<-$n9ZP4Mmx`2;G4#Ls z&{~Lfe6nF?xl$5HU3q+8NijsY^*|OP-4C54#gP2n+3_cLe6RA@Y`k$u8gSj!=RSfl zCW!xD#QFDx=>Mil&L;s0Dgjl*^K~A_*;Xy~Sv_JdndOV&U+dHj1h=s>PT!J}9X`2>5YvbwB-2Op_fD&#nKr$v#EoV>2b$utrTiIE?zYDiL5>M+1r~As_s0M4 zzj*xBP&??QoA_bK5yhTNVFHbWclVh}Nf64%%?$ANvBnD$%8faso!fOGpzLfZ_hwn_a6o~M2`~Aj8^Tu~) zH}*i{&%U@?+kRYl`3No=kf@yEuC+?X7WGP=S1@JcoBz(+#Zdn1aPXti@VvV>V#&~i zkr4W94O2GxDxH=2bgdS1YKpyXH#}3T`0Drw_av>SjXLuaqcy&UU&@Oe{fy0bjs?T(I2K8$}W1mj=S zh&(mv%CR**FQn2;v4XpE$7}@oddzYs`Sjx4a;G9 z5g}lVcr-{1_V1;&hI>7W-YZ$`Z)5~Xh<&MQGFq}rh7nbK9 z*^dW98KP#)D$nhHfABF7As#H%^h1?u<;GM#*+dic9ToG)`;vYJC-0X^O>a1jVm%Gm z4$3RX`2Ew_{(B7Pn-;rq-}DgOVI==o7x~%o3^!BCE(5X+N88U_cLN1>PpE0O9E=Q| ztSy3uTLh4vmMW{9vX+8mm3zc1>E7poRYmjysY0HK$$i;EcA|yeg_)tar`Rv@^u>3 z3@K!oQP%1o>+=Jyhh*Jssm>ZFU(f1z}Ux{JxekqL^Wbb(8vkq`q zcZ==Sv)jwkEb3i@gg-qWg!p{IB3Jmg6feL0(fnbdayErINHMaus1kc-$9YV_m%#&p zQpO%f9+@$!v=)2wBqkedQo-Q*SP?_|??Ui4Mrz`3qWRk5ZAwR8+^G1W2%ZJ{U|5f2 ziMU=r%UQ}5^(I;1F9h#7I9PvquU1GWggMKLh)r3y^8WxBq|Nz!u|A!J5;BOg++v@0 z1Ob&=kyt*`QATKJf7~`+DU2X4`KhOx3kzi*Pt@@N&bE5b7URah*)m_6&y6^G%UgA$ zg(6mFXn!gWM9iH@Cm7w7UqpMf_EFy~<@(-v03(n7-)#L0vI$silKKmQo5m8b#@52W zSl^6SA6E3e>w?uLF8iec2nhgW)mJC1n&j9Bq5R`<}H-}7e7X#wJ zW)POIHJ={R_DkE5{3=20Irc)$FvD*R8l)}zIXMi)#e5hV{My6nOC3O9^p@8(`ddl%%ow(Cz=lg)@&)N4*RfjbR- z%yd586*Tb+AEq1(z-pEq%a~2unE2uTz{uTQEL(RRiXF6c8MNIVD^s)rq_$eYS0wuE zJ8g-T7aqHm=bw($ZQTk#OQ+}PR;+U&yexZf)RD+?)5P`VA^~M2CjsI=E zpF!o%jo94rppNBsZyue$@b~qoPOdzXS7rL>Gw76%HW0CSWrXa|HT6p-YDlX{Lqj0U z0zSnMQdr5`uVC5X zb$zMn(fsZGVKLx_1qx~po zAp$0~@T*@BORvh=8LApj2)6#{N^fUKv=KD6wT+w~LQ=M4*073I=TQC*o9Lq)bTNT% z;l!TmjR*N4ke%<{dcRG6_>qU@MIH=3?G}mloI1%AwpYH%HMtrg3Ob~SZIMOD;+U#; zFIyWmpx^+I!@Y?1Abr%kw@{y7WzmI2;F?D-VSYlVMRmeRRQ^|68v=!{N}*9ZTM3}x zi}Q7xEuIG^X3Xo%3N#nHD?s&;peawHgWeBV=iioE18S6G{JygYu~ATg_QI<>u!XY+ z?dCG;P8MbAA2FiA(B6;DIn!98BfetHbEnN1-krm8yE`*=8Xi;pCrQCmAsDLs3a z2ZoLOAZ^-FUl+C?+2jDc_7Tc4^B(&2ZxHQQTf&jH-rhb>5s3X={r|TNg32nEe86Mx zosb=8QATc;{LH0zs$LJ-;hvIWW+$BWQ#V$xc3d$b<=pb)$w49OiR#QHTVqVJWTy-5 zcTes|g_o=+YZW7^$$~{49gcPbdkR?PuP2I|Vrb3&3J1J#OfqylB^8UU?|3oaS&O2y1rma(onLzT(2V(gdc{^t&8qk`mtsT#U36z9yosiaz@Z^X%{J z{RFrf#Y}+s>U<}P_kqv&2aA2c&avgR|Hd$#s#1B&Mb7msjVpv`kNF_)6$*`5k~)E! z5vVdZjD)zPL(?t;i_0z+6+jv41m`WX|peyKO$S=b}dySI7XS66 zJ&Kh3Zy!)#`1~>g1j*f7yzZ4LJ`to-7l9`3Ak6ml+!|f~5Y>mBJaQ~|>aF+5b(wtG z6uN;4jo0MCfao@OS$kT!vC%Fa1-!WXNn|M#{2T&_PAr7MQ0}-t4D6RcnZ~)SEk`OXa_TFTBK7GH>_xC*i^hZ}$ z*LB|O^LpL){kreYxuLqz`wweWrCWSl)_JBD^&T!>7N{mB-Mb6f=7b{+T7%%3UM8;Q z^GU3Sv{XNE_+|F?XR$BB_CU>y3j(d;M^+Vm9Qhf7Xzz`ve+Pm)_7`;#`!e(_Anr!-6j5NH$Z=aWBoDDr3 z^(-*UyM|K~UkGbwL}Es0nCWss+|qlg@HFC&lpCYuOT0XPE(4~gfDP)QAp1Sf%&}n-VzB2poP;I@ zZ2GtQUN?$K>y-T1n^wLhV;F16*<1O@&&ikx;`SIs>EA~BVvR1!ntSp3d{y>u#P)xc!Zoh}0KS$ZY z^wQ<62w;VP&8aRD(-YSo%O>ZK6nRVnJMz*;L5yy}MFgNw|KnGeJ`(Rm>|;on64{Pv zqr0POZg}a3*bL3}e{FMmeY~^Jq>Je%qNZyCSS&fa4lm#1>c8(#d?I#?o`9!cq<8Jx z_BK$B2!um2k(=Y?a7o~jIVy^mPBIM$;AG1BIHYm~IRwgx!ZGSxx1_w(H2Lu>3^+y~ zS(@v_e|3=>0TF3?<%XC>RYlw`qGpeGpUwG50_Q4Jb)fCCqwC#mH7JAQZ}r6_yne3B zl5to{ZA+71l?O&(pw>|jRiq(I{J~cPZdFuJ=qF-0+4KLkOI#&>dCQ?yRUC)Xf3oZE zR}f13oi3Y?J$mz@d@tl7WnkPo1%+I5u+6E!Yakm$i^`A`(J~;d07WrM?N8obvo2YV%)$W2|2eJLsx?(6>YEycdL8*RUN++>XM)?kNZS5sLkQ8 z+Z>xNp_Miyn-hZp+l#X+g5vn9Bp8yEQLQ#uY_%;rUMz$E9tNCAVoaC|nN(<0e&S#? zyBB)^b?kD_-&pX+_HnZP;v=uy=aT;<13m?%QMpKdtm&y!`c1Sr!TRGF@W^VSuDi*< zwLBA@5_Z>06L=F7OZ+|zeY)hhrNVZM!~Izdq^>>KKd`wuvB8UZj*0yrZbD5$Q}Sx# z7lQ;wz`aq#UC=~Mx{79cwdl9?Me519+mDwoVz;kXdFu9>bAG(gAl0259BXLp_|W@Q zBd#W@csR#0IMVm9qVFvPy4?NF(dn}=_P`GWR+DsesSuI8M+<>b#=U1;=Z+36iV_mm z+@obfmWbW5afqmlIkc>LF@&Fh4f|Y;rDb^QH2UdZ-!o40T^W;^W@@Bo5c%nfXzBq1 zLx>kB&XMs*Ehqim=E_bj^~v7B!AYsh3s*J!44 zOPoJsbID<{_V6aObu3a-En6Ia<{M|d7k$}t#59`q34!MBi{<7=K^Q(M1xi!fC@mDA zrCC!bX~OCK26+PsVP1Aj(B$iZ1w6B7I8b|CKpazVIO0cPZg-nT5r-_k^SD zOLF3_#k!Qw*H$>9Pl$ZAe$y`}O-au&vz}%5erNCZ!Aa1`KI6?!^KM(ENwEj&VHCC9 z`NB{Z&oaeb3%%NKPHxs0I@%uAc>zd}4hnaP0n7`wFHUySAW)c4S42!}Ww2D9qp9{3!x8MMe78Iu0-3lp^TT%swhrd_GU#MD19XvS6!8wUAXIQ0+ zGh~9dy!d7Ya#p}Ms&TlPr0suOZ)H%SsDeWN6tumO5Oa0J zhkwCSoktJvn?S5lArw?0L!cSwDG*Y=pBWGKO0+um) zU^D7z>wgC6+Hl5z?`z`}oJ3w56E`jsdnT0ifceFo31QkXw}pi7-o9hv)T(+qbj3og zX4V7#uq{TZ@;}6zn5vC%4Ag^1g1B^6{8F_aV0V{!p7?J=;7Qk&DO-V9_<3sP*I?Fx zyJ{JPgC!&`TH^bAPAdL$e?#`JZkr!}d1bw^e%11N_Vg#vyV}v(IgGL{J1$x|*g3h$ zgbs<9B}L24-u=uDg6@>u(&jvUF=S4F7Q|@kKo`;)?=Zl0GRi59()cN0@E7Gs|11f- z+6KDc;Pc68@*hLHq6mJL#Nd2_zDw45`Mk z1J5*=hW=ECbnETUv~V=>hjB^9H5bl+x7#B-TObSeT1t3fl%Q&u(&edoGMJ4o9xtB! zYjHG@6=mM7ngq33q z0%?DFN$$I(bm5@Ep>Bga3Zmf`f0uNB8!zJ>uRN0_;gyj_Vhk*lEmEqeBB@VT4+5Zl zACd;5aB+zKvrY>6HwLf#FSW@e6l%kl$}$E!8iw8x5I_4##qxtB7bD@1L{Srh$UU)_ zC-tP9%k+**rTogORvmbhs6D0b%95&W&)XZ^&(nDM%8)qK2iLFYay&30@4!3&l=k1E z{Ppg#Cb1$K0n%bSLSqU6o4=zwi#Al+qwwk;^FBKH_85Jem1vu6NCjjxASxf z+l!`Tlfhe>CBrMtp%?cJTW#!*ws(VA_J3)GUJ3Ntk)D-!BhTgtyWTxSioBdEJa(1f zeF?~;WOQkQ>5B`Lv@l_b&PevGfZ+_f;iTpHBs!zFGzM>Jp1oy_br?H-=SYmP5XFHi z0mG-q9(fIZ4M42Jy|Ez!5}3LQ8lrsg5Lxx&tbe}sh~-o`^x8HDg$})5+}(;eWN7FQ zg9J7C0RjWIy$@bz1cmd4gs^c5tG*>nSQ0Bx7>!{2d#tcwj73vhd*_+jNN~onAq3|2 zD;yHi{vd%ZQiVx3l|xm^$ku1DpN^Eg`3vNQ6{W83?3pI%qa7pndgPG&aWvM4)M2q4 zx!dJGN-jn5cb63b61K9#iP!7VjZ0aFSb1-E3Yg(65ZNWx%SB_c1uhLKu^ zmxv&j`{j$NmGjTkNetNfR4EfxXp%`$1hiFN9O*(vf#R!=GebYK%RL|=CNS~=|00QH zPT8Y(xkH2nw`}WxH&}^ExeO{a^z{dF-87_1yJHrJmRtBp; z_Mf0Ct1U;UYEja*j!x1_lNI+TLNTNWS@RRJ=rnIyT+#NpoImlY^Cj7zys%aCM;^v6M%TF^0&!<)ex0AqL}HG@5ry|b3c2E(F1>#c zuZHzEM+weYMfc1L=?dOMg0{hz2w{i&Y(km|D&c zb8h0J^MTA!`hRC+OTv%~p-|mvYC0Yg;`d`U`tO|C{H5DhVS6TCEsmI@^XHmZy+Ucd z)C|PJ=A`a`37Udg&&dgV*k|U?cY`D)(KX3JvPhbtm#0H(95BY#*wwB z?E(mt^d`x0dIXe~_bWaRs3&|=kNf^Kda(*imTTo)HUWUIALp-`ca)Hrr+pZ3nJ8lT86k}F zt8L5PhfKs*@@4*#0Z$W_{zSGJlQ(ajUG2E>;3#JNaXZ4E$g{+%dQtJ=+FNedUb!Bh z*4N`%r1|gdeA}W{K~jzrz>8a~&A4CR^Yfg*PEBIIxt4#AWCFT0>5B33{;B|%SLe-A zg@UXDp*TIn1~Gz&bmtDD!E>2}^uxb=)Tj-kCdJ+;@>my9t44f)xxPbyqkIBam;=*` zDahhwlcH?!fsEbfTG#rG1qG1crFbs9#@7l1z?5u~FX~XhoH)O{Ji#0STO}rqy}msB z@v$A#DIHUK@x3@Bh9u^NU2n+Yw-2Rv7Vw{gklGd|{Qlto-uYXyZ(0JCzuYq%*%1D0 z%;9wO=0!|$rm^tZLEUr8&tJY!D<0=uAMreHCv{2%gTX-e$%#~8Mm+QY(@)C_TUPd` zDnJ0+W2bva_L?79P6Gcj?fmdfE!R^k_fue3edvCqYTQvEif$s*p#MJfEyle}sQ*cV z>Z=e=8wA(r}AE<(= z{4gfxb}c7hRj9`9_IwN!38|(mC@-gjKxG9J`^;9wov7muZ_4oC%Ds0IkzRUUj(%@+ zkbA(0a6;Cwbp)ps_!A*J9#Ch?<$vOz90-G)EV4WHrd}>w>S?^>Y_V%cH-5ftGG)q- zp*`}}M?=zGl32g?J4Avr62D+={zAq})QEcFP%?2rd}yh1IK&79%YHGSsc&WP{!ETj z>UZ-}VbBg)X0YGr3kt)Kf|J__5bI=%6HVNbaHjn0$qy=vY{5s#W)W*T4a|Fp2M0RF+7Vhk4GTz96qez-vXXecv+-?m1;BnH~wf zKu8&p8cys|A$Ye)U{whX;{1K25)A&zpZMXmwRM7ODF#n~>NcAM$1ZxG_SLysU#}^> zP>pNbP=_wkijxFxrK#+~!s6nx`3LXa`}g^=e^QyDp=Y|aVo2Qb;@|1{OZA@`>E+tb z;QNmg(DOIfcWh}E|BR2%JW=_W#*Bsp1v9Mf8|h;^29vh!ZbhYuB^>*@yI3OJo7yUx zn4zaw8qP}v@}+!Vm2q1)=QlaOoR4PTtww#xgV=kTd#MjOt1 z3mzjW_b~oy-)Qo^pOj=}GzJD|jm-S~75Pnz{**QA$Hc!pW zn3;XxN1`}}5z41L%q#EnKLR3&);q~+yxjd*FzKxETHlNd@JNMJiovSf*h<#&m^n;u zYYiT=L)%0i6h9V1SlQ!1w?*R{_eYDKREgVuJF5c0C!L94OOs$=pp^vH!D%ZfC?r%~ zRu)C!&_i#6hkmFp)XS?yeohT{e4qtycJDPA)Eu^!ht-^H8gVZU&m|g<^7s-!H6m~z zG#$;>$4VY4H_5R9jesE>NY=jsd?|$rqPZ#P~nySZyVNjs;ncX zqz1j;WI7~rUb-(Ivb?vko5JHV|1EPek`?aG1X#_^&aw&x1OzBGscUG&U3nY=V8X&S zkQS&B92{&N{f|4dBH!X_KkXJC{sPPthD?o*8+^Uow7jvQw2leSFDSS}0+>RLQ`(i3 zm)o&kUR|YGY!3k5QhR@tKH_jds365$9cc=v8dTf=mGmC~-~bhiqZs>Tgd!6!^FSpu zmE}6=ax-tlk>gRF6J7{Dy8LWkf@e|C2}#_VURscWZChjKpg!g9PQ0>Jft@qPcVltv zJndgik*IUL^>>ZVnaOF^Gvg6dC5{N-K*6+@G`7OrA5J1O=$q|&P!Dvd6P8zNK@pt0oP0T)XDe}vfW5Pf%@GLx$~(8E7=a}MW6>yE}>9g_jR%*LIk5?$sanc1TVm;%? zCQLC?Y}7_$Ng}lHOdVNeg~hY3 zXS+G=b?g!(yp5o=AGOwjm}F*U>4%|zl^OyyLR$}5>&Yo#24CXFWv*&8P*r&WJduY7`G;4 zBzQv!2~wb>qpAzNX#>(dh}`uApQFB=JbtxLZ{PD@`4G@#_Vb);GFX z8~Y@9PWOwf#=#3^91ckBG$4Ro1I{|sfar)24}r97yd3+SYV?X#qP6XOLqPD+O~R8& zjAd^kFTgm{!Xh~*^4>8Q&_c-=7EF~OLZm2;z z3b`_{5srsPCZoaI31e+De6Esfd4! zL=4uS8m!Hs7}Ns}7|Pth?;qvCfq2Xon)XhsZ8zM<;uz+Sj`x)p$o?bs_{Zpf9{(r{ zhi)BI-{KesJgv6d0aL6QT|w`<=qEu7OLWuqt}In@-UrXMuwkD*t&-xywC`5`#aRJY z%JHm|?V6oR=-(rfeNyS<-q{YZ3^}`#FD%%FI@m21I#A<&ffHh`CS|2eD>ol?bFvPH zT#&%Um+^%yM5eWmXkNV8iK93KBeYXJs;qXro@niz7=7t?Umg-FEiZrab4SKwaB94y zrA)bz8G3`pfpqV~cIJ|@;gRHT`Do~cGTx=rdLy-ZQ&ehx0a=7Dl}29_{{3*(ii57O zhsa!G4`r^FuV2Ogs1mTQov5nRYqCg}2|oEh3FzaSxj&4(nAd8>p&SX>7B2Sp;j0Fa%GL(#nhnCHF4WII#~`e$O@v}7F+FU|4u zDwGKB$oEu#_#q90Y~_3wOP<@Q)~nc^#)n4YuKlF!i*~ z;19w~f~8$^P!KN6#BzjYHsa}E2Z@^Gp10*p66<8<1ua~!s1FS>H|8R<02O4t`?zLm z!g#n47F+yo~zEj_Rth%H&r|DVtSgcB-0jsF3t-Xr{SLn(Bx047im?6Ikczh9M8l{J+ z<=vz1aG!0eMPf7Mz|cumv-fY|Kzlgn$}aWm_h)W_ukX66OR!*>z@nEP7S0|a8?he` zt4V*%?H9^Ekb5!RV-MhBd=e<{sQlo)F!Y!Hroqe(;I7@Fpu;HkzBf_6mYGEbYHFmd z_IG>Ya;3i4f8M09$e@m8BZriPRP`kKlzmIY+-}8();MTB`lF;uF5d7=R(9t9JDl&P z!Vy${0`_C>q37t^Bn0PW}Qu(EpIzpH3Mfvw?O3n}tD}o_d zQn1LZ-NMhS58JNgMS7G4!gJ=1sE_mrr*o+Z((Bz+JrY5&~AnU`hFA{;&S zzGQBuSh~&~=s1Bk=${1HF5qtrB}og7bU@|_Tl?X*`+g)Ni;9hpX9MMlv)Z1j1^)b&atBa*LfL|HN#HG)2LoHKNF-7VixsGB;ef&bzqW+* z`KujYYU-G2QS1Sy>-GImf38b+*=o4;dwgz0TPmP1%gurI zI|eI~mA59sh*fN*gri>f3H8Qs#5C8}@$^Ko3qwk|a_1DED6{w9sW56nedJmDOaNsh zxZJwql&4|7`r$nz9$OVQyjpfaJeXd{r0WMd+mT7anHEYf zO8~8_tMdciKckSR@Wk}D76FeRa(MILL9O$!y!yFVT{CX31Y10RBf!K9$gyWP2&|OT zh^6Sjn=!m=8iRMeGeF-HePLi9aT~XEkG6>b3ZTQqXd+%zAJaNvpl@0C0@WId@_jji zmjEi2u_XK*!6@%Gn2Qg6`gGAd8-<=|MnPCly=fKW$qq|P``uki9ED(yGa)bv$4QbrmKdHISjihcc6{elhHKM?}g3w+(y+Wt)c(hvxG1^|+O z!r;GcDPK>+NWB(Qm_}@3hi~p8lHOKV?;meY7~e!i5ell@Hv1t4B-p^<>|(|Z$lD*r zKq`+OY0%;~>|O1KTJE5)58k$CB0L`2BCCMtYPRdW=*t)L=i~L;A*Cp-jS#Fg3jS7N-JL97YKY$0&+SiPC_noXn#v?P7iXQyjcYDC$^h@E9c&wDxfz z4`Gf~pbV_P|He9y(ewjldgO3SPIAuflK5>-0aJ2BvAZ)sg_gUR2_XfTFW5+Uo8x~u zV-!sSR>nTxJsl^5W8iQUcNJT-=5tKxpi*}@B-2{jVHjS&v`V6MGW#@ z3aUYX$l$yMw<;f=n=cOhyY=5`mw$JXuIZ-sxkjv%vv!TL=auHST*{Fs_xU!VOs~CP zhL(8*p(4c1!9duXW0%duLnLxz>~p<3}cRrL&mkt19 zfT{vJlqD?=duJpQbu;;Q>$gz7eRdBH^+BaDM$hFV)o0(}s8CK*rQ5MhMKM0!Kf2qOi#7N3tX;z19ORH5NWchz!Iz_dk0U5C z#RA||Cm*PUqr;7S@iPVE_0SZ|cK%S!tTB{?=V5(}osfX<6 zbtZp;Zr~)T8n`(caSd=|gnwYeJ~oPODEBDi3%-}P^|t-}r@se$i-FZ*_}^!noNfU5Ata#6}6k$#PCZ#Cx~kLvEz$7^*Rw(1H}3tsmW$v5dsC$NkNIC3O@HI_vLw-Qys*K5s`YV#hjzb&?Q3%=(3 z?gNvsnFt#xJR)GwfX2EckJx;buk5{ir_*9nPeaDqCmaaCFvhW)G@HOljI^`k$0+*i zv*I1+kMu8mDOvck5x(HL#Hu%bB#&?;Xzvpcv@;AhG^4veW)ENL3xl*iMOHbP%SJ(n z32KV8=7ufeEYaly4Z*sb;fI_I%e)N7*6zD>s zPfmUTkEieUjN<=2o?My{`JnbU#J`|i!nt2+YNCm{oFz?+jB<6*5y~4+@nQKKoq?8R za@2+L#b9WfM1r7! zLywP};$wYH+fYN*7mnRzksT={A)=E2oxg5h^3aa~3A%@@3bq}{cy^Kq8{ZM22Si&4 z`@&h?M=WIhJFeRYIIB6CvO3&-cOBiFaER=b5bd}AX`U@g}}aU3wgPQ0}~T(A&BG$Azjgq{xqRf}S?wxwThcJvO3 zIq0ile{p@}L8EH?mOFqCg$}rl7rc+z%3VjCAYU$^(K;$w$cVSCm`M-=!Nt4y{uQ~nSFb2o*6MUGJpjR{(l018PfwC~P(s(p6 z_2~HnRn~~jo~Qs_ZfP+5Ne-f8z&p0Sl(eQiO>~HUtKHMv8bPw#S^Sm9>yc~E;(1-WtP~Fcrf)o}YMAAH-n2O)L6Y~!{)8y)pzJ02`~7k1|5ro* zlPm@Z;z8rg8D^TiNyBtsPlBZuDd7!X`y82tP$npmx*fRWRq`!*<>v&X+hy?u!7Ivv z8m!B*)1haBgGBY0Mid0i(HDY5J|C#oB?LNN8WgSy&fn3c9PdCJb`cjOdkcR^Lmdv7 z0$Agg)f;9cN`fI=DO{J2V@Rp?ix5B1gKiyyC zt;{VbDB!+00+5&bX7$Cd&cHV)Oo!)AkL@_cNF!CstH%V7B)xhv55JB*mqG3r_b9Hu zAZVKd+x!G(G?pJ{&t#MGe0!+wU+`1SQd;)8hf{dqt3f`+IPGZ)d;P2DKP%}0*2WHS z#=7r}!Je=-&-*PV0F$%}$4Be;meXpB)s4)j$8K=!^|_43gn&=H^~B-I2lt)18cT8n zqwG|&VPwPupjScdhA$U`L&UvQIR%n|#oW`SkQ^0`F@8q93$taveA|@U9@gPkefuf7 z2^Z_A^5>TvZ<$!u_L4^eQ&!kdhLY2lVu&t|MzyGx;u@d*44W-3c1wEuA%P|BKVz@| zDDftS>*0pevvMUi%isQ2t!OsO#=UhOOF70D`wq{ab1fiwcmQq;z#q!1s`fe}NmH`> ze*L0bCIgl)ZKwOU_R5|qQ0h?<02D~Je5l0;jfAA+BFR7f_PUGfY!jV>oaa)^Qa3HI zyq{kw+A7H^fNrhg{rYpee59BxVKNdH^JTa(FK=kf$kH$S7Qm0cQoimAj7O_zzSr_D z@l6|?s~8GeS9VinB0H|F;Y`;r^6RAgX0e_ZM-?OYkx)=%r7#zIsu1{lq}yL5AA|kF z`ADO`G=~OZl#m~<@{#U>0!~W|3kqu4)7|7B)WvNnU`;ZaF=d~U4vb70@tAPEm1+ka zn;WK67n`V8Bne7 z*C>Cj0xkXX_1z8L4FtMX-6`-pBE%|1=xL{=51q+yMR~c<`m0H?1buz|l(zJ^IMN|F zEiIS7s0s%X#QDXf-A(8KCc*+&q=hNYL_+IcKkpy}L{|?L@s-^+$1AGEC9z@5VUPw5 zZ7H`1JEfw~;G$6TD7LNUuE_FWb_el=WN(YFrmjtv34_K|14gKR4vRlt!EU0bR%avK z(Xd;3sUF(86K2Ndmbw#qy01|!Faa^S-p?ewiA0{y%qNWWN3{)}p94Hs2l9G)VRCv$t;68)~a zB0Gush!T!TU+K|IAU~atE@7c_{~4nUnJI3_@!grRcCd~7kctVD`d@i?)ts~3?hnsU zNUITsE1rZE&a2?q1q4W=5z^8Evw?qi%(o&>wtjQglM20HC=#MXtkD3+8^hgme%&^= zI+RVopr9Aku<7z|2E{MrVui*1^uqtp3_Vu`x%D=Y?LiA44`ufm%NK~%&BswAt8eAK zWu>k!5M}H>cEJW9{*%teX9D_+0?u z76eKG^iLffgK98%aqayFO*m9S=xp!4@8zRM&!ruc!?^}1*M*l=VX+GUqz)s zXw&p1JGcDaWN-l?(3m##B6s}*8d&8+$b1Xlv(T+GhJiyEXWVuHPb;9n{x_OEhI^Uq zm^)_$MN`As@7(|fL8k&Fm3DS^L|dh$r4(#(fyOv~@ z6rgHG#-Imyj*UQ9Bi{+kA|}3u!C>}TqU8D`Sr&oY67Vms)Av6H0_NC>t;4{Zy6lq| zxg7wcXYA33?p0IJ84NZ7N&u581J>TH`2rb0feF1K zW;ylg;3r#y#9~dgp95Q&k1vfzqai~wq1Qn^D*!aEW}yJ=tH|Q3yHacqf=>I>DC8N4 zZp;D19AAYTKr_2CKRvobA^7C@)6*(nCU>5i)`En0f>pF9$?xszw3uztZn{0c7k)Xt zsomSJ9bQO&uFN|KwG(0h13I*MTH-ExVUXZ zqe4K?;wVOjoTSW@_i3p)mU{gL&jkf5`i2D5)xVL&#Sp_1fR&+o|DxtLqpSPRZ=@os2Q)e&3TvJ51!Ux2;(cN$I(Lzo=x>jSAH9Y* zhFndp;{CZ{<Gl|`JM|6xt$PGytfP*wd0Rr9Uwpf5Zd39B#a2cO2n zS6giYo;WTIk$d_>bAk?+aS*6rQI?2xM^eSX-kudJhG=hmX67=@(1OaxZ~fz2qsw^1 zagO+CTN|5UF}E2+2;qa;x;phSXMg}&J2@B-wiR<0#)8*CfpPLo{%kTgk4QbiRkI@_ zV#L`D{;*Y6B?^ueM)&)+$u~6l?-xmFoIormKri&r^!F`H-dfl#h=u zg~0&m;6wt8U0m&U#O!Reb3;)%uK{YPQ%LjYWI^gtl|epz<)2T8i!3xm)&j2hXe#wb zy5t%GLgDgN=seK*exilrlI1Xp4|Pm@-0}p?Dmz?4tep(pLYz%h)tya@RlMa<=z|iI zAOlZz=5)iZ*!bcqR13sR)!s)jNXJ=O&&)ZX&ZbAv$726y!K3|cl7p8Q03{v%fK=

y^$F$s+D7vEXM< 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 literal 0 HcmV?d00001 diff --git a/scripts/buildfs.sh b/scripts/buildfs.sh new file mode 100755 index 0000000..1266fb1 --- /dev/null +++ b/scripts/buildfs.sh @@ -0,0 +1,2 @@ +#!/bin/bash +pio run --target buildfs \ No newline at end of file diff --git a/scripts/uploadfs.sh b/scripts/uploadfs.sh new file mode 100755 index 0000000..6ae9bf3 --- /dev/null +++ b/scripts/uploadfs.sh @@ -0,0 +1,2 @@ +#!/bin/bash +pio run --target uploadfs \ No newline at end of file diff --git a/src/api.cpp b/src/api.cpp new file mode 100644 index 0000000..7049d9b --- /dev/null +++ b/src/api.cpp @@ -0,0 +1,471 @@ +#include "api.h" +#include +#include +#include "commonFS.h" + +bool spoolman_connected = false; +String spoolmanUrl = ""; + +struct SendToApiParams { + String httpType; + String spoolsUrl; + String updatePayload; +}; + +/* + // Spoolman Data + { + "version":"1.0", + "protocol":"openspool", + "color_hex":"AF7933", + "type":"ABS", + "min_temp":175, + "max_temp":275, + "brand":"Overture" + } + + // FilaMan Data + { + "version":"1.0", + "protocol":"openspool", + "color_hex":"AF7933", + "type":"ABS", + "min_temp":175, + "max_temp":275, + "brand":"Overture", + "sm_id": + } +*/ + +JsonDocument fetchSpoolsForWebsite() { + HTTPClient http; + String spoolsUrl = spoolmanUrl + apiUrl + "/spool"; + + Serial.print("Rufe Spool-Daten von: "); + Serial.println(spoolsUrl); + + http.begin(spoolsUrl); + int httpCode = http.GET(); + + JsonDocument filteredDoc; + if (httpCode == HTTP_CODE_OK) { + String payload = http.getString(); + JsonDocument doc; + DeserializationError error = deserializeJson(doc, payload); + if (error) { + Serial.print("Fehler beim Parsen der JSON-Antwort: "); + Serial.println(error.c_str()); + } else { + JsonArray spools = doc.as(); + JsonArray filteredSpools = filteredDoc.to(); + + for (JsonObject spool : spools) { + JsonObject filteredSpool = filteredSpools.createNestedObject(); + filteredSpool["extra"]["nfc_id"] = spool["extra"]["nfc_id"]; + + JsonObject filament = filteredSpool.createNestedObject("filament"); + filament["sm_id"] = spool["id"]; + filament["id"] = spool["filament"]["id"]; + filament["name"] = spool["filament"]["name"]; + filament["material"] = spool["filament"]["material"]; + filament["color_hex"] = spool["filament"]["color_hex"]; + filament["nozzle_temperature"] = spool["filament"]["extra"]["nozzle_temperature"]; // [190,230] + filament["price_meter"] = spool["filament"]["extra"]["price_meter"]; + filament["price_gramm"] = spool["filament"]["extra"]["price_gramm"]; + + JsonObject vendor = filament.createNestedObject("vendor"); + vendor["id"] = spool["filament"]["vendor"]["id"]; + vendor["name"] = spool["filament"]["vendor"]["name"]; + } + } + } else { + Serial.print("Fehler beim Abrufen der Spool-Daten. HTTP-Code: "); + Serial.println(httpCode); + } + + http.end(); + return filteredDoc; +} + +JsonDocument fetchAllSpoolsInfo() { + HTTPClient http; + String spoolsUrl = spoolmanUrl + apiUrl + "/spool"; + + Serial.print("Rufe Spool-Daten von: "); + Serial.println(spoolsUrl); + + http.begin(spoolsUrl); + int httpCode = http.GET(); + + JsonDocument filteredDoc; + if (httpCode == HTTP_CODE_OK) { + String payload = http.getString(); + JsonDocument doc; + DeserializationError error = deserializeJson(doc, payload); + if (error) { + Serial.print("Fehler beim Parsen der JSON-Antwort: "); + Serial.println(error.c_str()); + } else { + JsonArray spools = doc.as(); + JsonArray filteredSpools = filteredDoc.to(); + + for (JsonObject spool : spools) { + JsonObject filteredSpool = filteredSpools.createNestedObject(); + filteredSpool["price"] = spool["price"]; + filteredSpool["remaining_weight"] = spool["remaining_weight"]; + filteredSpool["used_weight"] = spool["used_weight"]; + filteredSpool["extra"]["nfc_id"] = spool["extra"]["nfc_id"]; + + JsonObject filament = filteredSpool.createNestedObject("filament"); + filament["id"] = spool["filament"]["id"]; + filament["name"] = spool["filament"]["name"]; + filament["material"] = spool["filament"]["material"]; + filament["density"] = spool["filament"]["density"]; + filament["diameter"] = spool["filament"]["diameter"]; + filament["spool_weight"] = spool["filament"]["spool_weight"]; + filament["color_hex"] = spool["filament"]["color_hex"]; + + JsonObject vendor = filament.createNestedObject("vendor"); + vendor["id"] = spool["filament"]["vendor"]["id"]; + vendor["name"] = spool["filament"]["vendor"]["name"]; + + JsonObject extra = filament.createNestedObject("extra"); + extra["nozzle_temperature"] = spool["filament"]["extra"]["nozzle_temperature"]; + extra["price_gramm"] = spool["filament"]["extra"]["price_gramm"]; + extra["price_meter"] = spool["filament"]["extra"]["price_meter"]; + } + } + } else { + Serial.print("Fehler beim Abrufen der Spool-Daten. HTTP-Code: "); + Serial.println(httpCode); + } + + http.end(); + return filteredDoc; +} + +void sendToApi(void *parameter) { + SendToApiParams* params = (SendToApiParams*)parameter; + + // Extrahiere die Werte + String httpType = params->httpType; + String spoolsUrl = params->spoolsUrl; + String updatePayload = params->updatePayload; + + + HTTPClient http; + http.begin(spoolsUrl); + http.addHeader("Content-Type", "application/json"); + + int httpCode = http.PUT(updatePayload); + if (httpType == "PATCH") httpCode = http.PATCH(updatePayload); + + if (httpCode == HTTP_CODE_OK) { + Serial.println("Gewicht der Spule erfolgreich aktualisiert"); + } else { + Serial.println("Fehler beim Aktualisieren des Gewichts der Spule"); + oledShowMessage("Spoolman update failed"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + } + + http.end(); + + // Speicher freigeben + delete params; + vTaskDelete(NULL); +} + +uint8_t updateSpoolTagId(String uidString, const char* payload) { + JsonDocument doc; + DeserializationError error = deserializeJson(doc, payload); + + if (error) { + Serial.print("Fehler beim JSON-Parsing: "); + Serial.println(error.c_str()); + return 0; + } + + // Überprüfe, ob die erforderlichen Felder vorhanden sind + if (!doc.containsKey("sm_id") || doc["sm_id"] == "") { + Serial.println("Keine Spoolman-ID gefunden."); + return 0; + } + + String spoolsUrl = spoolmanUrl + apiUrl + "/spool/" + doc["sm_id"].as(); + Serial.print("Update Spule mit URL: "); + Serial.println(spoolsUrl); + + // Update Payload erstellen + JsonDocument updateDoc; + updateDoc["extra"]["nfc_id"] = "\""+uidString+"\""; + + String updatePayload; + serializeJson(updateDoc, updatePayload); + Serial.print("Update Payload: "); + Serial.println(updatePayload); + + SendToApiParams* params = new SendToApiParams(); + if (params == nullptr) { + Serial.println("Fehler: Kann Speicher für Task-Parameter nicht allokieren."); + return 0; + } + params->httpType = "PATCH"; + params->spoolsUrl = spoolsUrl; + params->updatePayload = updatePayload; + + // Erstelle die Task + BaseType_t result = xTaskCreate( + sendToApi, // Task-Funktion + "SendToApiTask", // Task-Name + 4096, // Stackgröße in Bytes + (void*)params, // Parameter + 0, // Priorität + NULL // Task-Handle (nicht benötigt) + ); + + return 1; +} + +uint8_t updateSpoolWeight(String spoolId, uint16_t weight) { + String spoolsUrl = spoolmanUrl + apiUrl + "/spool/" + spoolId + "/measure"; + Serial.print("Update Spule mit URL: "); + Serial.println(spoolsUrl); + + // Update Payload erstellen + JsonDocument updateDoc; + updateDoc["weight"] = weight; + + String updatePayload; + serializeJson(updateDoc, updatePayload); + Serial.print("Update Payload: "); + Serial.println(updatePayload); + + SendToApiParams* params = new SendToApiParams(); + if (params == nullptr) { + Serial.println("Fehler: Kann Speicher für Task-Parameter nicht allokieren."); + return 0; + } + params->httpType = "PUT"; + params->spoolsUrl = spoolsUrl; + params->updatePayload = updatePayload; + + // Erstelle die Task + BaseType_t result = xTaskCreate( + sendToApi, // Task-Funktion + "SendToApiTask", // Task-Name + 4096, // Stackgröße in Bytes + (void*)params, // Parameter + 0, // Priorität + NULL // Task-Handle (nicht benötigt) + ); + + return 1; +} + +// #### Spoolman init +bool checkSpoolmanExtraFields() { + HTTPClient http; + String checkUrls[] = { + spoolmanUrl + apiUrl + "/field/spool", + spoolmanUrl + apiUrl + "/field/filament" + }; + + String spoolExtra[] = { + "nfc_id" + }; + + String filamentExtra[] = { + "nozzle_temperature", + "price_meter", + "price_gramm", + "bambu_setting_id", + "bambu_idx" + }; + + String spoolExtraFields[] = { + "{\"name\": \"NFC ID\"," + "\"key\": \"nfc_id\"," + "\"field_type\": \"text\"}" + }; + + String filamentExtraFields[] = { + "{\"name\": \"Nozzle Temp\"," + "\"unit\": \"°C\"," + "\"field_type\": \"integer_range\"," + "\"default_value\": \"[190,230]\"," + "\"key\": \"nozzle_temperature\"}", + + "{\"name\": \"Price/m\"," + "\"unit\": \"€\"," + "\"field_type\": \"float\"," + "\"key\": \"price_meter\"}", + + "{\"name\": \"Price/g\"," + "\"unit\": \"€\"," + "\"field_type\": \"float\"," + "\"key\": \"price_gramm\"}", + + "{\"name\": \"Bambu Setting ID\"," + "\"field_type\": \"text\"," + "\"key\": \"bambu_setting_id\"}", + + "{\"name\": \"Bambu IDX\"," + "\"field_type\": \"text\"," + "\"key\": \"bambu_idx\"}" + }; + + Serial.println("Überprüfe Extrafelder..."); + + int urlLength = sizeof(checkUrls) / sizeof(checkUrls[0]); + + for (uint8_t i = 0; i < urlLength; i++) { + Serial.println(); + Serial.println("-------- Prüfe Felder für "+checkUrls[i]+" --------"); + http.begin(checkUrls[i]); + int httpCode = http.GET(); + + if (httpCode == HTTP_CODE_OK) { + String payload = http.getString(); + JsonDocument doc; + DeserializationError error = deserializeJson(doc, payload); + if (!error) { + String* extraFields; + String* extraFieldData; + u16_t extraLength; + + if (i == 0) { + extraFields = spoolExtra; + extraFieldData = spoolExtraFields; + extraLength = sizeof(spoolExtra) / sizeof(spoolExtra[0]); + } else { + extraFields = filamentExtra; + extraFieldData = filamentExtraFields; + extraLength = sizeof(filamentExtra) / sizeof(filamentExtra[0]); + } + + for (uint8_t s = 0; s < extraLength; s++) { + bool found = false; + for (JsonObject field : doc.as()) { + if (field.containsKey("key") && field["key"] == extraFields[s]) { + Serial.println("Feld gefunden: " + extraFields[s]); + found = true; + break; + } + } + if (!found) { + Serial.println("Feld nicht gefunden: " + extraFields[s]); + + // Extrafeld hinzufügen + http.begin(checkUrls[i] + "/" + extraFields[s]); + http.addHeader("Content-Type", "application/json"); + int httpCode = http.POST(extraFieldData[s]); + + if (httpCode > 0) { + // Antwortscode und -nachricht abrufen + String response = http.getString(); + //Serial.println("HTTP-Code: " + String(httpCode)); + //Serial.println("Antwort: " + response); + if (httpCode != HTTP_CODE_OK) { + + return false; + } + } else { + // Fehler beim Senden der Anfrage + Serial.println("Fehler beim Senden der Anfrage: " + String(http.errorToString(httpCode))); + return false; + } + http.end(); + } + } + } + } + http.end(); + } + + Serial.println("-------- ENDE Prüfe Felder --------"); + Serial.println(); + + return true; +} + +bool checkSpoolmanInstance(const String& url) { + HTTPClient http; + String healthUrl = url + apiUrl + "/health"; + + Serial.print("Überprüfe Spoolman-Instanz unter: "); + Serial.println(healthUrl); + + http.begin(healthUrl); + int httpCode = http.GET(); + + if (httpCode > 0) { + if (httpCode == HTTP_CODE_OK) { + oledShowMessage("Spoolman available"); + vTaskDelay(1000 / portTICK_PERIOD_MS); + + String payload = http.getString(); + JsonDocument doc; + DeserializationError error = deserializeJson(doc, payload); + if (!error && doc.containsKey("status")) { + const char* status = doc["status"]; + http.end(); + + if (!checkSpoolmanExtraFields()) { + Serial.println("Fehler beim Überprüfen der Extrafelder."); + + oledShowMessage("Spoolman Error creating Extrafields"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + + return false; + } + + spoolman_connected = true; + return strcmp(status, "healthy") == 0; + } + } + } + http.end(); + return false; +} + +bool saveSpoolmanUrl(const String& url) { + if (!checkSpoolmanInstance(url)) return false; + + JsonDocument doc; + doc["url"] = url; + Serial.print("Speichere URL in Datei: "); + Serial.println(url); + if (!saveJsonValue("/spoolman_url.json", doc)) { + Serial.println("Fehler beim Speichern der Spoolman-URL."); + } + spoolmanUrl = url; + + return true; +} + +String loadSpoolmanUrl() { + JsonDocument doc; + if (loadJsonValue("/spoolman_url.json", doc) && doc.containsKey("url")) { + return doc["url"].as(); + } + Serial.println("Keine gültige Spoolman-URL gefunden."); + return ""; +} + +bool initSpoolman() { + spoolmanUrl = loadSpoolmanUrl(); + spoolmanUrl.trim(); + if (spoolmanUrl == "") { + Serial.println("Keine Spoolman-URL gefunden."); + return false; + } + + bool success = checkSpoolmanInstance(spoolmanUrl); + if (!success) { + Serial.println("Spoolman nicht erreichbar."); + return false; + } + + oledShowTopRow(); + return true; +} \ No newline at end of file diff --git a/src/api.h b/src/api.h new file mode 100644 index 0000000..de9fab4 --- /dev/null +++ b/src/api.h @@ -0,0 +1,24 @@ +#ifndef API_H +#define API_H + +#include +#include // Include for AsyncWebServerRequest +#include "website.h" +#include "display.h" +#include + +extern bool spoolman_connected; +extern String spoolmanUrl; + +bool checkSpoolmanInstance(const String& url); +bool saveSpoolmanUrl(const String& url); +String loadSpoolmanUrl(); // Neue Funktion zum Laden der URL +bool checkSpoolmanExtraFields(); // Neue Funktion zum Überprüfen der Extrafelder +JsonDocument fetchSpoolsForWebsite(); // API-Funktion für die Webseite +JsonDocument fetchAllSpoolsInfo(); +void sendAmsData(AsyncWebSocketClient *client); // Neue Funktion zum Senden von AMS-Daten +uint8_t updateSpoolTagId(String uidString, const char* payload); // Neue Funktion zum Aktualisieren eines Spools +uint8_t updateSpoolWeight(String spoolId, uint16_t weight); // Neue Funktion zum Aktualisieren des Gewichts +bool initSpoolman(); // Neue Funktion zum Initialisieren von Spoolman + +#endif diff --git a/src/bambu.cpp b/src/bambu.cpp new file mode 100644 index 0000000..06b4612 --- /dev/null +++ b/src/bambu.cpp @@ -0,0 +1,486 @@ +#include "bambu.h" +#include +#include +#include +#include +#include "bambu_cert.h" +#include "website.h" +#include "nfc.h" +#include "commonFS.h" +#include "esp_task_wdt.h" +#include "config.h" +#include "display.h" + +WiFiClient espClient; +SSLClient sslClient(&espClient); +PubSubClient client(sslClient); + +TaskHandle_t BambuMqttTask; + +String report_topic = ""; +//String request_topic = ""; +const char* bambu_username = "bblp"; +const char* bambu_ip = nullptr; +const char* bambu_accesscode = nullptr; +const char* bambu_serialnr = nullptr; +bool bambu_connected = false; + +// Globale Variablen für AMS-Daten +int ams_count = 0; +String amsJsonData; // Speichert das fertige JSON für WebSocket-Clients +AMSData ams_data[MAX_AMS]; // Definition des Arrays + +bool saveBambuCredentials(const String& bambu_ip, const String& bambu_serialnr, const String& bambu_accesscode) { + JsonDocument doc; + doc["bambu_ip"] = bambu_ip; + doc["bambu_accesscode"] = bambu_accesscode; + doc["bambu_serialnr"] = bambu_serialnr; + + if (!saveJsonValue("/bambu_credentials.json", doc)) { + Serial.println("Fehler beim Speichern der Bambu-Credentials."); + return false; + } + + vTaskDelay(100 / portTICK_PERIOD_MS); + if (!setupMqtt()) return false; + + return true; +} + +bool loadBambuCredentials() { + JsonDocument doc; + if (loadJsonValue("/bambu_credentials.json", doc) && doc.containsKey("bambu_ip")) { + // Temporäre Strings für die Werte + String ip = doc["bambu_ip"].as(); + String code = doc["bambu_accesscode"].as(); + String serial = doc["bambu_serialnr"].as(); + + ip.trim(); + code.trim(); + serial.trim(); + + // Dynamische Speicherallokation für die globalen Pointer + bambu_ip = strdup(ip.c_str()); + bambu_accesscode = strdup(code.c_str()); + bambu_serialnr = strdup(serial.c_str()); + + report_topic = "device/" + String(bambu_serialnr) + "/report"; + //request_topic = "device/" + String(bambu_serialnr) + "/request"; + return true; + } + Serial.println("Keine gültigen Bambu-Credentials gefunden."); + return false; +} + +String findFilamentIdx(String brand, String type) { + // JSON-Dokument für die Filament-Daten erstellen + JsonDocument doc; + + // Laden der bambu_filaments.json + if (!loadJsonValue("/bambu_filaments.json", doc)) { + Serial.println("Fehler beim Laden der Filament-Daten"); + return "GFL99"; // Fallback auf Generic PLA + } + + String searchKey; + + // 1. Suche nach Brand + Type Kombination + if (brand == "Bambu" || brand == "Bambulab") { + searchKey = "Bambu " + type; + } else if (brand == "PolyLite") { + searchKey = "PolyLite " + type; + } else if (brand == "eSUN") { + searchKey = "eSUN " + type; + } else if (brand == "Overture") { + searchKey = "Overture " + type; + } else if (brand == "PolyTerra") { + searchKey = "PolyTerra " + type; + } + + // Durchsuche alle Einträge nach der Brand + Type Kombination + for (JsonPair kv : doc.as()) { + if (kv.value().as() == searchKey) { + return kv.key().c_str(); + } + } + + // 2. Wenn nicht gefunden, suche nach Generic + Type + searchKey = "Generic " + type; + for (JsonPair kv : doc.as()) { + if (kv.value().as() == searchKey) { + return kv.key().c_str(); + } + } + + // 3. Wenn immer noch nichts gefunden, gebe GFL99 zurück (Generic PLA) + return "GFL99"; +} + +bool sendMqttMessage(String payload) { + Serial.println("Sending MQTT message"); + Serial.println(payload); + if (client.publish(report_topic.c_str(), payload.c_str())) + { + return true; + } + + return false; +} + +bool setBambuSpool(String payload) { + /* payload + //// set Spool + { + "print": { + "sequence_id": 0, + "command": "ams_filament_setting", + "ams_id": 0, // AMS ID 0-3 oder externe Spule 255 + "tray_id": 0, // Tray ID 0-3 oder externe Spule 254 + "tray_color": "000000FF", + "nozzle_temp_min": 170, + "nozzle_temp_max": 200, + "tray_type": "PETG", + "setting_id": "", + "tray_info_idx": "GFG99" + } + } + + + + //// Remove Spool + { + "print":{ + "ams_id":255, + "command":"ams_filament_setting", + "nozzle_temp_max": 0, + "nozzle_temp_min": 0, + "sequence_id": 0, + "setting_id": "", + "tray_color": "FFFFFFFF", + "tray_id": 254, + "tray_info_idx": "", + "tray_type": "", + } + } + */ + + Serial.println("Setting spool"); + + // Parse the JSON + JsonDocument doc; + DeserializationError error = deserializeJson(doc, payload); + if (error) { + Serial.print("Error parsing JSON: "); + Serial.println(error.c_str()); + return false; + } + + int amsId = doc["amsId"]; + int trayId = doc["trayId"]; + String color = doc["color"].as(); + color.toUpperCase(); + int minTemp = doc["nozzle_temp_min"]; + int maxTemp = doc["nozzle_temp_max"]; + String type = doc["type"].as(); + String brand = doc["brand"].as(); + String tray_info_idx = findFilamentIdx(brand, type); + + doc.clear(); + + doc["print"]["sequence_id"] = 0; + doc["print"]["command"] = "ams_filament_setting"; + doc["print"]["ams_id"] = amsId < 200 ? amsId-1 : 255; + doc["print"]["tray_id"] = trayId < 200 ? trayId-1 : 254; + doc["print"]["tray_color"] = color.length() == 8 ? color : color+"FF"; + doc["print"]["nozzle_temp_min"] = minTemp; + doc["print"]["nozzle_temp_max"] = maxTemp; + doc["print"]["tray_type"] = type; + doc["print"]["setting_id"] = ""; + doc["print"]["tray_info_idx"] = tray_info_idx; + + // Serialize the JSON + String output; + serializeJson(doc, output); + + if (sendMqttMessage(output)) { + Serial.println("Spool successfully set"); + } + else + { + Serial.println("Failed to set spool"); + return false; + } + + return true; +} + +// init +void mqtt_callback(char* topic, byte* payload, unsigned int length) { + String message; + for (int i = 0; i < length; i++) { + message += (char)payload[i]; + } + + // JSON-Dokument parsen + JsonDocument doc; + DeserializationError error = deserializeJson(doc, message); + if (error) { + Serial.print("Fehler beim Parsen des JSON: "); + Serial.println(error.c_str()); + return; + } + + // Prüfen, ob "print->upgrade_state" und "print.ams.ams" existieren + if (doc["print"].containsKey("upgrade_state")) { + // Prüfen ob AMS-Daten vorhanden sind + if (!doc["print"].containsKey("ams") || !doc["print"]["ams"].containsKey("ams")) { + return; + } + + JsonArray amsArray = doc["print"]["ams"]["ams"].as(); + + // Prüfe ob sich die AMS-Daten geändert haben + bool hasChanges = false; + + // Vergleiche jedes AMS und seine Trays + for (int i = 0; i < amsArray.size() && !hasChanges; i++) { + JsonObject amsObj = amsArray[i]; + int amsId = amsObj["id"].as(); + JsonArray trayArray = amsObj["tray"].as(); + + // Finde das entsprechende AMS in unseren Daten + int storedIndex = -1; + for (int k = 0; k < ams_count; k++) { + if (ams_data[k].ams_id == amsId) { + storedIndex = k; + break; + } + } + + if (storedIndex == -1) { + hasChanges = true; + break; + } + + // Vergleiche die Trays + for (int j = 0; j < trayArray.size() && j < 4 && !hasChanges; j++) { + JsonObject trayObj = trayArray[j]; + if (trayObj["tray_info_idx"].as() != ams_data[storedIndex].trays[j].tray_info_idx || + trayObj["tray_type"].as() != ams_data[storedIndex].trays[j].tray_type || + trayObj["tray_color"].as() != ams_data[storedIndex].trays[j].tray_color) { + hasChanges = true; + break; + } + } + } + + // Prüfe die externe Spule + if (!hasChanges && doc["print"].containsKey("vt_tray")) { + JsonObject vtTray = doc["print"]["vt_tray"]; + bool foundExternal = false; + + for (int i = 0; i < ams_count; i++) { + if (ams_data[i].ams_id == 255) { + foundExternal = true; + if (vtTray["tray_info_idx"].as() != ams_data[i].trays[0].tray_info_idx || + vtTray["tray_type"].as() != ams_data[i].trays[0].tray_type || + vtTray["tray_color"].as() != ams_data[i].trays[0].tray_color) { + hasChanges = true; + } + break; + } + } + if (!foundExternal) hasChanges = true; + } + + if (!hasChanges) return; + + // Fortfahren mit der bestehenden Verarbeitung, da Änderungen gefunden wurden + ams_count = amsArray.size(); + + // Restlicher bestehender Code... + for (int i = 0; i < ams_count && i < 16; i++) { + JsonObject amsObj = amsArray[i]; + JsonArray trayArray = amsObj["tray"].as(); + + ams_data[i].ams_id = i; // Setze die AMS-ID + for (int j = 0; j < trayArray.size() && j < 4; j++) { // Annahme: Maximal 4 Trays pro AMS + JsonObject trayObj = trayArray[j]; + + ams_data[i].trays[j].id = trayObj["id"].as(); + ams_data[i].trays[j].tray_info_idx = trayObj["tray_info_idx"].as(); + ams_data[i].trays[j].tray_type = trayObj["tray_type"].as(); + ams_data[i].trays[j].tray_sub_brands = trayObj["tray_sub_brands"].as(); + ams_data[i].trays[j].tray_color = trayObj["tray_color"].as(); + ams_data[i].trays[j].nozzle_temp_min = trayObj["nozzle_temp_min"].as(); + ams_data[i].trays[j].nozzle_temp_max = trayObj["nozzle_temp_max"].as(); + ams_data[i].trays[j].setting_id = trayObj["setting_id"].as(); + } + } + //Serial.println("----------------"); + //Serial.println(); + + // Sende die aktualisierten AMS-Daten an alle WebSocket-Clients + sendAmsData(nullptr); + + // Verarbeite erst die normalen AMS-Daten + for (int i = 0; i < amsArray.size() && i < 16; i++) { + JsonObject amsObj = amsArray[i]; + JsonArray trayArray = amsObj["tray"].as(); + + ams_data[i].ams_id = amsObj["id"].as(); + for (int j = 0; j < trayArray.size() && j < 4; j++) { + JsonObject trayObj = trayArray[j]; + ams_data[i].trays[j].id = trayObj["id"].as(); + ams_data[i].trays[j].tray_info_idx = trayObj["tray_info_idx"].as(); + // ... weitere Tray-Daten ... + } + } + + // Setze ams_count auf die Anzahl der normalen AMS + ams_count = amsArray.size(); + + // Wenn externe Spule vorhanden, füge sie hinzu + if (doc["print"].containsKey("vt_tray")) { + JsonObject vtTray = doc["print"]["vt_tray"]; + int extIdx = ams_count; // Index für externe Spule + ams_data[extIdx].ams_id = 255; // Spezielle ID für externe Spule + ams_data[extIdx].trays[0].id = 254; // Spezielle ID für externes Tray + ams_data[extIdx].trays[0].tray_info_idx = vtTray["tray_info_idx"].as(); + ams_data[extIdx].trays[0].tray_type = vtTray["tray_type"].as(); + ams_data[extIdx].trays[0].tray_sub_brands = vtTray["tray_sub_brands"].as(); + ams_data[extIdx].trays[0].tray_color = vtTray["tray_color"].as(); + ams_data[extIdx].trays[0].nozzle_temp_min = vtTray["nozzle_temp_min"].as(); + ams_data[extIdx].trays[0].nozzle_temp_max = vtTray["nozzle_temp_max"].as(); + ams_data[extIdx].trays[0].setting_id = vtTray["setting_id"].as(); + ams_count++; // Erhöhe ams_count für die externe Spule + } + + // Sende die aktualisierten AMS-Daten + sendAmsData(nullptr); + + // Erstelle JSON für WebSocket-Clients + JsonDocument wsDoc; + JsonArray wsArray = wsDoc.to(); + + for (int i = 0; i < ams_count; i++) { + JsonObject amsObj = wsArray.createNestedObject(); + amsObj["ams_id"] = ams_data[i].ams_id; + + JsonArray trays = amsObj.createNestedArray("tray"); + int maxTrays = (ams_data[i].ams_id == 255) ? 1 : 4; + + for (int j = 0; j < maxTrays; j++) { + JsonObject trayObj = trays.createNestedObject(); + trayObj["id"] = ams_data[i].trays[j].id; + trayObj["tray_info_idx"] = ams_data[i].trays[j].tray_info_idx; + trayObj["tray_type"] = ams_data[i].trays[j].tray_type; + trayObj["tray_sub_brands"] = ams_data[i].trays[j].tray_sub_brands; + trayObj["tray_color"] = ams_data[i].trays[j].tray_color; + trayObj["nozzle_temp_min"] = ams_data[i].trays[j].nozzle_temp_min; + trayObj["nozzle_temp_max"] = ams_data[i].trays[j].nozzle_temp_max; + trayObj["setting_id"] = ams_data[i].trays[j].setting_id; + } + } + + serializeJson(wsArray, amsJsonData); + sendAmsData(nullptr); + } +} + +void reconnect() { + // Loop until we're reconnected + while (!client.connected()) { + Serial.print("Attempting MQTT connection..."); + + // Attempt to connect + if (client.connect(bambu_serialnr, bambu_username, bambu_accesscode)) { + Serial.println("... re-connected"); + // ... and resubscribe + client.subscribe(report_topic.c_str()); + bambu_connected = true; + oledShowTopRow(); + } else { + Serial.print("failed, rc="); + Serial.print(client.state()); + Serial.println(" try again in 5 seconds"); + bambu_connected = false; + oledShowTopRow(); + // Wait 5 seconds before retrying + delay(5000); + } + } +} + +void mqtt_loop(void * parameter) { + oledShowMessage("Bambu Connected"); + bambu_connected = true; + oledShowTopRow(); + for(;;) { + if (pauseBambuMqttTask) { + vTaskDelay(10000); + } + + if (!client.connected()) { + reconnect(); + yield(); + esp_task_wdt_reset(); + vTaskDelay(100); + } + client.loop(); + } +} + +bool setupMqtt() { + // Wenn Bambu Daten vorhanden + bool success = loadBambuCredentials(); + vTaskDelay(100 / portTICK_PERIOD_MS); + + if (!success) { + Serial.println("Failed to load Bambu credentials"); + oledShowMessage("Bambu Credentials Missing"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + return false; + } + + if (success && bambu_ip != "" && bambu_accesscode != "" && bambu_serialnr != "") { + sslClient.setCACert(root_ca); + sslClient.setInsecure(); + client.setServer(bambu_ip, 8883); + + // Verbinden mit dem MQTT-Server + if (client.connect(bambu_serialnr, bambu_username, bambu_accesscode)) { + client.setCallback(mqtt_callback); + client.setBufferSize(5120); + // Optional: Topic abonnieren + client.subscribe(report_topic.c_str()); + //client.subscribe(request_topic.c_str()); + Serial.println("MQTT-Client initialisiert"); + + oledShowTopRow(); + + xTaskCreatePinnedToCore( + mqtt_loop, /* Function to implement the task */ + "BambuMqtt", /* Name of the task */ + 10000, /* Stack size in words */ + NULL, /* Task input parameter */ + mqttTaskPrio, /* Priority of the task */ + &BambuMqttTask, /* Task handle. */ + mqttTaskCore); /* Core where the task should run */ + + } else { + Serial.println("Fehler: Konnte sich nicht beim MQTT-Server anmelden"); + oledShowMessage("Bambu Connection Failed"); + oledShowTopRow(); + vTaskDelay(2000 / portTICK_PERIOD_MS); + return false; + } + } else { + Serial.println("Fehler: Keine MQTT-Daten vorhanden"); + oledShowMessage("Bambu Credentials Missing"); + oledShowTopRow(); + vTaskDelay(2000 / portTICK_PERIOD_MS); + return false; + } + return true; +} \ No newline at end of file diff --git a/src/bambu.h b/src/bambu.h new file mode 100644 index 0000000..d3627c7 --- /dev/null +++ b/src/bambu.h @@ -0,0 +1,37 @@ +#ifndef BAMBU_H +#define BAMBU_H + +#include +#include + +struct TrayData { + uint8_t id; + String tray_info_idx; + String tray_type; + String tray_sub_brands; + String tray_color; + int nozzle_temp_min; + int nozzle_temp_max; + String setting_id; +}; + +#define MAX_AMS 17 // 16 normale AMS + 1 externe Spule +extern String amsJsonData; // Für die vorbereiteten JSON-Daten + +struct AMSData { + uint8_t ams_id; + TrayData trays[4]; // Annahme: Maximal 4 Trays pro AMS +}; + +extern bool bambu_connected; + +extern int ams_count; +extern AMSData ams_data[MAX_AMS]; + +bool loadBambuCredentials(); +bool saveBambuCredentials(const String& bambu_ip, const String& bambu_serialnr, const String& bambu_accesscode); +bool setupMqtt(); +void mqtt_loop(void * parameter); +bool setBambuSpool(String payload); + +#endif diff --git a/src/bambu_cert.h b/src/bambu_cert.h new file mode 100644 index 0000000..5622204 --- /dev/null +++ b/src/bambu_cert.h @@ -0,0 +1,45 @@ +const char root_ca[] PROGMEM = + "-----BEGIN CERTIFICATE-----\n" +"MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n" +"ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n" +"b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\n" +"MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n" +"b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n" +"ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n" +"9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n" +"IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n" +"VOujw5H5SNz/0egwLX0tdHA234gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n" +"93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n" +"jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n" +"AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\n" +"A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\n" +"U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\n" +"N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\n" +"o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n" +"5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n" +"rqXRfboQnoZsG4q5WTP468SQvvG5\n" +"-----END CERTIFICATE-----"; + +/* +-----BEGIN CERTIFICATE----- +MIIDZTCCAk2gAwIBAgIUV1FckwXElyek1onFnQ9kL7Bk4N8wDQYJKoZIhvcNAQEL +BQAwQjELMAkGA1UEBhMCQ04xIjAgBgNVBAoMGUJCTCBUZWNobm9sb2dpZXMgQ28u +LCBMdGQxDzANBgNVBAMMBkJCTCBDQTAeFw0yMjA0MDQwMzQyMTFaFw0zMjA0MDEw +MzQyMTFaMEIxCzAJBgNVBAYTAkNOMSIwIAYDVQQKDBlCQkwgVGVjaG5vbG9naWVz +IENvLiwgTHRkMQ8wDQYDVQQDDAZCQkwgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDL3pnDdxGOk5Z6vugiT4dpM0ju+3Xatxz09UY7mbj4tkIdby4H +oeEdiYSZjc5LJngJuCHwtEbBJt1BriRdSVrF6M9D2UaBDyamEo0dxwSaVxZiDVWC +eeCPdELpFZdEhSNTaT4O7zgvcnFsfHMa/0vMAkvE7i0qp3mjEzYLfz60axcDoJLk +p7n6xKXI+cJbA4IlToFjpSldPmC+ynOo7YAOsXt7AYKY6Glz0BwUVzSJxU+/+VFy +/QrmYGNwlrQtdREHeRi0SNK32x1+bOndfJP0sojuIrDjKsdCLye5CSZIvqnbowwW +1jRwZgTBR29Zp2nzCoxJYcU9TSQp/4KZuWNVAgMBAAGjUzBRMB0GA1UdDgQWBBSP +NEJo3GdOj8QinsV8SeWr3US+HjAfBgNVHSMEGDAWgBSPNEJo3GdOj8QinsV8SeWr +3US+HjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQABlBIT5ZeG +fgcK1LOh1CN9sTzxMCLbtTPFF1NGGA13mApu6j1h5YELbSKcUqfXzMnVeAb06Htu +3CoCoe+wj7LONTFO++vBm2/if6Jt/DUw1CAEcNyqeh6ES0NX8LJRVSe0qdTxPJuA +BdOoo96iX89rRPoxeed1cpq5hZwbeka3+CJGV76itWp35Up5rmmUqrlyQOr/Wax6 +itosIzG0MfhgUzU51A2P/hSnD3NDMXv+wUY/AvqgIL7u7fbDKnku1GzEKIkfH8hm +Rs6d8SCU89xyrwzQ0PR853irHas3WrHVqab3P+qNwR0YirL0Qk7Xt/q3O1griNg2 +Blbjg3obpHo9 +-----END CERTIFICATE----- +*/ \ No newline at end of file diff --git a/src/commonFS.cpp b/src/commonFS.cpp new file mode 100644 index 0000000..368f614 --- /dev/null +++ b/src/commonFS.cpp @@ -0,0 +1,56 @@ +#include "commonFS.h" + +bool saveJsonValue(const char* filename, const JsonDocument& doc) { + File file = SPIFFS.open(filename, "w"); + if (!file) { + Serial.print("Fehler beim Öffnen der Datei zum Schreiben: "); + Serial.println(filename); + return false; + } + return true; + if (serializeJson(doc, file) == 0) { + Serial.println("Fehler beim Serialisieren von JSON."); + file.close(); + return false; + } + file.close(); + return true; +} + +bool loadJsonValue(const char* filename, JsonDocument& doc) { + File file = SPIFFS.open(filename, "r"); + if (!file) { + Serial.print("Fehler beim Öffnen der Datei zum Lesen: "); + Serial.println(filename); + return false; + } + DeserializationError error = deserializeJson(doc, file); + file.close(); + if (error) { + Serial.print("Fehler beim Deserialisieren von JSON: "); + Serial.println(error.f_str()); + return false; + } + return true; +} + +bool initializeSPIFFS() { + // Erster Versuch + if (SPIFFS.begin(true)) { + Serial.println("SPIFFS mounted successfully."); + return true; + } + + // Formatierung versuchen + Serial.println("Failed to mount SPIFFS. Formatting..."); + SPIFFS.format(); + + // Zweiter Versuch nach Formatierung + if (SPIFFS.begin(true)) { + Serial.println("SPIFFS formatted and mounted successfully."); + return true; + } + + Serial.println("SPIFFS initialization failed completely."); + return false; +} \ No newline at end of file diff --git a/src/commonFS.h b/src/commonFS.h new file mode 100644 index 0000000..b94dadd --- /dev/null +++ b/src/commonFS.h @@ -0,0 +1,12 @@ +#ifndef COMMONFS_H +#define COMMONFS_H + +#include +#include +#include + +bool saveJsonValue(const char* filename, const JsonDocument& doc); +bool loadJsonValue(const char* filename, JsonDocument& doc); +bool initializeSPIFFS(); + +#endif diff --git a/src/config.cpp b/src/config.cpp new file mode 100644 index 0000000..6b50d42 --- /dev/null +++ b/src/config.cpp @@ -0,0 +1,54 @@ +#include "config.h" + +// ################### Config Bereich Start +// ***** PN532 (RFID) +//#define PN532_SCK 18 +//#define PN532_MOSI 23 +//#define PN532_SS 5 +//#define PN532_MISO 19 +const uint8_t PN532_IRQ = 32; +const uint8_t PN532_RESET = 33; +// ***** PN532 + +// ***** HX711 (Waage) +// HX711 circuit wiring +const uint8_t LOADCELL_DOUT_PIN = 16; //16; +const uint8_t LOADCELL_SCK_PIN = 17; //17; +const uint8_t calVal_eepromAdress = 0; +const uint16_t SCALE_LEVEL_WEIGHT = 500; +uint16_t defaultScaleCalibrationValue = 430; +// ***** HX711 + +// ***** Display +// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) +// On an ESP32: 21(SDA), 22(SCL) +const int8_t OLED_RESET = -1; // Reset pin # (or -1 if sharing Arduino reset pin) +const uint8_t SCREEN_ADDRESS = 0x3C; ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 +const uint8_t SCREEN_WIDTH = 128; // OLED display width, in pixels +const uint8_t SCREEN_HEIGHT = 64; // OLED display height, in pixels +const uint8_t OLED_TOP_START = 0; +const uint8_t OLED_TOP_END = 16; +const uint8_t OLED_DATA_START = 17; +const uint8_t OLED_DATA_END = SCREEN_HEIGHT; +// ***** Display + +// ***** Webserver +const uint8_t webserverPort = 80; +// ***** Webserver + +// ***** API +const char* apiUrl = "/api/v1"; +// ***** API + +// ***** Task Prios +uint8_t rfidTaskCore = 1; +uint8_t rfidTaskPrio = 1; + +uint8_t rfidWriteTaskPrio = 1; + +uint8_t mqttTaskCore = 1; +uint8_t mqttTaskPrio = 1; + +uint8_t scaleTaskCore = 0; +uint8_t scaleTaskPrio = 1; +// ***** Task Prios diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..8cb867e --- /dev/null +++ b/src/config.h @@ -0,0 +1,48 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include + +extern const uint8_t PN532_IRQ; +extern const uint8_t PN532_RESET; + +extern const uint8_t LOADCELL_DOUT_PIN; +extern const uint8_t LOADCELL_SCK_PIN; +extern const uint8_t calVal_eepromAdress; +extern const uint16_t SCALE_LEVEL_WEIGHT; + +extern const int8_t OLED_RESET; +extern const uint8_t SCREEN_ADDRESS; +extern const uint8_t SCREEN_WIDTH; +extern const uint8_t SCREEN_HEIGHT; +extern const uint8_t OLED_TOP_START; +extern const uint8_t OLED_TOP_END; +extern const uint8_t OLED_DATA_START; +extern const uint8_t OLED_DATA_END; + +extern const char* apiUrl; +extern const uint8_t webserverPort; + +extern const unsigned char wifi_on[]; +extern const unsigned char wifi_off[]; +extern const unsigned char cloud_on[]; +extern const unsigned char cloud_off[]; + +extern const unsigned char icon_failed[]; +extern const unsigned char icon_success[]; +extern const unsigned char icon_transfer[]; +extern const unsigned char icon_loading[]; + +extern uint8_t rfidTaskCore; +extern uint8_t rfidTaskPrio; + +extern uint8_t rfidWriteTaskPrio; + +extern uint8_t mqttTaskCore; +extern uint8_t mqttTaskPrio; + +extern uint8_t scaleTaskCore; +extern uint8_t scaleTaskPrio; + +extern uint16_t defaultScaleCalibrationValue; +#endif \ No newline at end of file diff --git a/src/display.cpp b/src/display.cpp new file mode 100644 index 0000000..eda0777 --- /dev/null +++ b/src/display.cpp @@ -0,0 +1,225 @@ +#include "display.h" +#include "api.h" +#include +#include "icons.h" + +Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); + +bool wifiOn = false; + +void setupDisplay() { + if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { + Serial.println(F("SSD1306 allocation failed")); + for (;;); // Stoppe das Programm, wenn das Display nicht initialisiert werden kann + } + display.setTextColor(WHITE); + display.clearDisplay(); + display.display(); + + // Show initial display buffer contents on the screen -- + // the library initializes this with an Adafruit splash screen. + display.setTextColor(WHITE); + display.display(); + delay(1000); // Pause for 2 seconds + oledShowTopRow(); + delay(2000); +} + +void oledclearline() { + int x, y; + for (y = 0; y < 16; y++) { + for (x = 0; x < SCREEN_WIDTH; x++) { + display.drawPixel(x, y, BLACK); + } + } + display.display(); +} + +void oledcleardata() { + int x, y; + for (y = OLED_DATA_START; y < OLED_DATA_END; y++) { + for (x = 0; x < SCREEN_WIDTH; x++) { + display.drawPixel(x, y, BLACK); + } + } + display.display(); +} + +int oled_center_h(String text) { + int16_t x1, y1; + uint16_t w, h; + display.getTextBounds(text, 0, 0, &x1, &y1, &w, &h); + return (SCREEN_WIDTH - w) / 2; +} + +int oled_center_v(String text) { + int16_t x1, y1; + uint16_t w, h; + display.getTextBounds(text, 0, OLED_DATA_START, &x1, &y1, &w, &h); + // Zentrierung nur im Datenbereich zwischen OLED_DATA_START und OLED_DATA_END + return OLED_DATA_START + ((OLED_DATA_END - OLED_DATA_START - h) / 2); +} + +std::vector splitTextIntoLines(String text, uint8_t textSize) { + std::vector lines; + display.setTextSize(textSize); + + // Text in Wörter aufteilen + std::vector words; + int pos = 0; + while (pos < text.length()) { + // Überspringe Leerzeichen am Anfang + while (pos < text.length() && text[pos] == ' ') pos++; + + // Finde nächstes Leerzeichen + int nextSpace = text.indexOf(' ', pos); + if (nextSpace == -1) { + // Letztes Wort + if (pos < text.length()) { + words.push_back(text.substring(pos)); + } + break; + } + // Wort hinzufügen + words.push_back(text.substring(pos, nextSpace)); + pos = nextSpace + 1; + } + + // Wörter zu Zeilen zusammenfügen + String currentLine = ""; + for (size_t i = 0; i < words.size(); i++) { + String testLine = currentLine; + if (currentLine.length() > 0) testLine += " "; + testLine += words[i]; + + // Prüfe ob diese Kombination auf die Zeile passt + int16_t x1, y1; + uint16_t lineWidth, h; + display.getTextBounds(testLine, 0, OLED_DATA_START, &x1, &y1, &lineWidth, &h); + + if (lineWidth <= SCREEN_WIDTH) { + // Passt noch in diese Zeile + currentLine = testLine; + } else { + // Neue Zeile beginnen + if (currentLine.length() > 0) { + lines.push_back(currentLine); + currentLine = words[i]; + } else { + // Ein einzelnes Wort ist zu lang + lines.push_back(words[i]); + } + } + } + + // Letzte Zeile hinzufügen + if (currentLine.length() > 0) { + lines.push_back(currentLine); + } + + Serial.println(lines.size()); + return lines; +} + +void oledShowMultilineMessage(String message, uint8_t size) { + std::vector lines; + int maxLines = 3; // Maximale Anzahl Zeilen für size 2 + + // Erste Prüfung mit aktueller Größe + lines = splitTextIntoLines(message, size); + + // Wenn mehr als maxLines Zeilen, reduziere Textgröße + if (lines.size() > maxLines && size > 1) { + size = 1; + lines = splitTextIntoLines(message, size); + } + + // Ausgabe + display.setTextSize(size); + int lineHeight = size * 8; + int totalHeight = lines.size() * lineHeight; + int startY = OLED_DATA_START + ((OLED_DATA_END - OLED_DATA_START - totalHeight) / 2); + + for (size_t i = 0; i < lines.size(); i++) { + display.setCursor(oled_center_h(lines[i]), startY + (i * lineHeight)); + display.print(lines[i]); + } + + display.display(); +} + +void oledShowMessage(String message, uint8_t size) { + oledcleardata(); + display.setTextSize(size); + display.setTextWrap(false); + + // Prüfe ob Text in eine Zeile passt + int16_t x1, y1; + uint16_t textWidth, h; + display.getTextBounds(message, 0, 0, &x1, &y1, &textWidth, &h); + + // Text passt in eine Zeile? + if (textWidth <= SCREEN_WIDTH) { + display.setCursor(oled_center_h(message), oled_center_v(message)); + display.print(message); + display.display(); + } else { + oledShowMultilineMessage(message, size); + } +} + +void oledShowTopRow() { + oledclearline(); + + if (bambu_connected == 1) { + display.drawBitmap(50, 0, bitmap_bambu_on , 16, 16, WHITE); + } else { + display.drawBitmap(50, 0, bitmap_off , 16, 16, WHITE); + } + + if (spoolman_connected == 1) { + display.drawBitmap(80, 0, bitmap_spoolman_on , 16, 16, WHITE); + } else { + display.drawBitmap(80, 0, bitmap_off , 16, 16, WHITE); + } + + if (wifiOn == 1) { + display.drawBitmap(107, 0, wifi_on , 16, 16, WHITE); + } else { + display.drawBitmap(107, 0, wifi_off , 16, 16, WHITE); + } + + display.display(); +} + +void oledShowIcon(const char* icon) { + oledcleardata(); + + uint16_t iconSize = OLED_DATA_END-OLED_DATA_START; + uint16_t iconStart = (SCREEN_WIDTH - iconSize) / 2; + + if (icon == "failed") { + display.drawBitmap(iconStart, OLED_DATA_START, icon_failed , iconSize, iconSize, WHITE); + } + else if (icon == "success") { + display.drawBitmap(iconStart, OLED_DATA_START, icon_success , iconSize, iconSize, WHITE); + } + else if (icon == "transfer") { + display.drawBitmap(iconStart, OLED_DATA_START, icon_transfer , iconSize, iconSize, WHITE); + } + else if (icon == "loading") { + display.drawBitmap(iconStart, OLED_DATA_START, icon_loading , iconSize, iconSize, WHITE); + } + + display.display(); +} + +void oledShowWeight(uint16_t weight) { + // Display Gewicht + oledcleardata(); + display.setTextSize(3); + display.setCursor(oled_center_h(String(weight)+" g"), OLED_DATA_START+10); + display.print(weight); + display.print(" g"); + display.display(); +} diff --git a/src/display.h b/src/display.h new file mode 100644 index 0000000..173c48e --- /dev/null +++ b/src/display.h @@ -0,0 +1,24 @@ +#ifndef DISPLAY_H +#define DISPLAY_H + +#include +#include +#include +#include "config.h" + + +extern Adafruit_SSD1306 display; +extern bool wifiOn; + +void setupDisplay(); +void oledclearline(); +void oledcleardata(); +int oled_center_h(String text); +int oled_center_v(String text); + +void oledShowWeight(uint16_t weight); +void oledShowMessage(String message, uint8_t size = 2); +void oledShowTopRow(); +void oledShowIcon(const char* icon); + +#endif diff --git a/src/icons.h b/src/icons.h new file mode 100644 index 0000000..74b3dda --- /dev/null +++ b/src/icons.h @@ -0,0 +1,126 @@ +#include + +/* +// Create Icons +https://javl.github.io/image2cpp/ +Size: 47x47 +BG Color: Black +Invert: True +Ohters in default +*/ + +const unsigned char wifi_on [] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x1f, 0xf8, 0x78, 0x1e, 0x60, 0x06, 0x07, 0xe0, + 0x0f, 0xf0, 0x08, 0x10, 0x00, 0x00, 0x03, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +const unsigned char wifi_off [] PROGMEM = { + 0x00, 0x00, 0x20, 0x00, 0x30, 0x00, 0x1b, 0xf0, 0x3d, 0xfc, 0x7e, 0x1e, 0x63, 0x06, 0x07, 0xa0, + 0x1f, 0xd8, 0x08, 0x60, 0x01, 0xb0, 0x03, 0xd8, 0x01, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// 'off', 16x16px +const unsigned char bitmap_off [] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// 'spoolman_on', 16x16px +const unsigned char bitmap_spoolman_on [] PROGMEM = { + 0x03, 0xc0, 0x08, 0xf0, 0x20, 0xfc, 0x00, 0xfc, 0x40, 0xfe, 0x70, 0xf0, 0xf8, 0xc1, 0xff, 0xc1, + 0xff, 0xc1, 0xf9, 0xc1, 0x70, 0xf0, 0x40, 0xfe, 0x00, 0xfc, 0x20, 0xfc, 0x08, 0xf0, 0x03, 0xc0 +}; + +// 'bambu_on', 16x16px +const unsigned char bitmap_bambu_on [] PROGMEM = { + 0x3e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7c, 0x3e, 0x1c, 0x3e, 0x00, 0x3e, 0x40, + 0x30, 0x78, 0x00, 0x7c, 0x06, 0x7c, 0x1e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7c, 0x3e, 0x7c +}; + +// 'failed', 47x47px +const unsigned char icon_failed [] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x1f, 0xfc, 0x7f, 0xf0, 0x00, 0x00, 0x7f, + 0x80, 0x03, 0xf8, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x3f, 0x00, + 0x03, 0xf0, 0x00, 0x00, 0x1f, 0x80, 0x07, 0xc0, 0x00, 0x00, 0x0f, 0x80, 0x07, 0x80, 0x00, 0x00, + 0x07, 0xc0, 0x0f, 0x80, 0x00, 0x00, 0x03, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x1e, 0x03, + 0x80, 0x07, 0x80, 0xf0, 0x3e, 0x03, 0xc0, 0x07, 0x80, 0xf0, 0x3c, 0x03, 0xe0, 0x0f, 0x80, 0x78, + 0x3c, 0x01, 0xf0, 0x1f, 0x00, 0x78, 0x78, 0x00, 0xf8, 0x3e, 0x00, 0x38, 0x78, 0x00, 0x7c, 0x7c, + 0x00, 0x3c, 0x78, 0x00, 0x3c, 0xf8, 0x00, 0x3c, 0x78, 0x00, 0x3f, 0xf0, 0x00, 0x3c, 0x70, 0x00, + 0x1f, 0xf0, 0x00, 0x3c, 0x70, 0x00, 0x0f, 0xe0, 0x00, 0x3c, 0xf0, 0x00, 0x07, 0xc0, 0x00, 0x1c, + 0xf0, 0x00, 0x0f, 0xe0, 0x00, 0x3c, 0x70, 0x00, 0x1f, 0xf0, 0x00, 0x3c, 0x78, 0x00, 0x3f, 0xf0, + 0x00, 0x3c, 0x78, 0x00, 0x3e, 0xf8, 0x00, 0x3c, 0x78, 0x00, 0x7c, 0x7c, 0x00, 0x3c, 0x78, 0x00, + 0xf8, 0x3e, 0x00, 0x3c, 0x3c, 0x01, 0xf0, 0x1f, 0x00, 0x78, 0x3c, 0x03, 0xe0, 0x0f, 0x80, 0x78, + 0x3e, 0x03, 0xc0, 0x0f, 0x80, 0xf0, 0x1e, 0x03, 0x80, 0x07, 0x80, 0xf0, 0x1f, 0x00, 0x00, 0x00, + 0x01, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x07, 0x80, 0x00, 0x00, 0x07, 0xc0, 0x07, 0xc0, + 0x00, 0x00, 0x0f, 0xc0, 0x03, 0xf0, 0x00, 0x00, 0x1f, 0x80, 0x01, 0xf8, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x03, 0xfc, 0x00, 0x00, 0x1f, 0xf8, 0x3f, + 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// 'loading', 47x47px +const unsigned char icon_loading [] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, + 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, + 0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x07, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfe, + 0x00, 0x00, 0x00, 0x3f, 0xf9, 0xfc, 0x00, 0x00, 0x00, 0x7f, 0x83, 0xf8, 0x38, 0x00, 0x00, 0xff, + 0x07, 0xf0, 0x7c, 0x00, 0x00, 0xfc, 0x07, 0xe0, 0x7e, 0x00, 0x01, 0xf8, 0x0f, 0xc0, 0x3f, 0x00, + 0x03, 0xf0, 0x07, 0x80, 0x1f, 0x00, 0x03, 0xe0, 0x03, 0x00, 0x1f, 0x80, 0x07, 0xe0, 0x00, 0x00, + 0x0f, 0x80, 0x07, 0xc0, 0x00, 0x00, 0x0f, 0xc0, 0x07, 0xc0, 0x00, 0x00, 0x07, 0xc0, 0x0f, 0x80, + 0x00, 0x00, 0x07, 0xc0, 0x0f, 0x80, 0x00, 0x00, 0x03, 0xc0, 0x0f, 0x80, 0x00, 0x00, 0x03, 0xe0, + 0x0f, 0x80, 0x00, 0x00, 0x03, 0xe0, 0x0f, 0x80, 0x00, 0x00, 0x03, 0xe0, 0x0f, 0x80, 0x00, 0x00, + 0x03, 0xe0, 0x0f, 0x80, 0x00, 0x00, 0x03, 0xe0, 0x0f, 0x80, 0x00, 0x00, 0x03, 0xe0, 0x0f, 0x80, + 0x00, 0x00, 0x03, 0xc0, 0x0f, 0x80, 0x00, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x00, 0x00, 0x07, 0xc0, + 0x07, 0xc0, 0x00, 0x00, 0x07, 0xc0, 0x07, 0xe0, 0x00, 0x00, 0x0f, 0x80, 0x03, 0xe0, 0x00, 0x00, + 0x1f, 0x80, 0x03, 0xf0, 0x00, 0x00, 0x1f, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x3f, 0x00, 0x01, 0xfc, + 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x7f, 0x80, 0x07, 0xf8, 0x00, + 0x00, 0x3f, 0xf0, 0x3f, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x07, 0xff, 0xff, + 0xc0, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// 'success', 47x47px +const unsigned char icon_success [] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, + 0x80, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x1f, 0xfc, 0x3f, 0xf0, 0x00, 0x00, 0x7f, + 0x80, 0x03, 0xfc, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x3f, 0x00, + 0x03, 0xf0, 0x00, 0x00, 0x1f, 0x80, 0x03, 0xe0, 0x00, 0x00, 0x07, 0xc0, 0x07, 0xc0, 0x00, 0x00, + 0x03, 0xc0, 0x0f, 0x80, 0x00, 0x00, 0x01, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x01, 0xf0, 0x1e, 0x00, + 0x00, 0x00, 0x00, 0xf0, 0x1e, 0x00, 0x00, 0x00, 0xc0, 0xf8, 0x3c, 0x00, 0x00, 0x01, 0xe0, 0x78, + 0x3c, 0x00, 0x00, 0x03, 0xe0, 0x78, 0x38, 0x00, 0x00, 0x03, 0xc0, 0x3c, 0x78, 0x00, 0x00, 0x07, + 0xc0, 0x3c, 0x78, 0x00, 0x00, 0x0f, 0x80, 0x3c, 0x78, 0x00, 0x00, 0x1f, 0x00, 0x1c, 0x78, 0x00, + 0x00, 0x1e, 0x00, 0x1c, 0x78, 0x0f, 0x00, 0x3e, 0x00, 0x1e, 0x78, 0x0f, 0x80, 0x7c, 0x00, 0x1e, + 0x78, 0x0f, 0xc0, 0xf8, 0x00, 0x1e, 0x78, 0x07, 0xe0, 0xf0, 0x00, 0x1c, 0x78, 0x03, 0xf1, 0xf0, + 0x00, 0x1c, 0x78, 0x01, 0xfb, 0xe0, 0x00, 0x3c, 0x78, 0x00, 0xff, 0xc0, 0x00, 0x3c, 0x38, 0x00, + 0x7f, 0x80, 0x00, 0x3c, 0x3c, 0x00, 0x3f, 0x80, 0x00, 0x78, 0x3c, 0x00, 0x1f, 0x00, 0x00, 0x78, + 0x1e, 0x00, 0x0e, 0x00, 0x00, 0xf8, 0x1e, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, + 0x01, 0xf0, 0x0f, 0x80, 0x00, 0x00, 0x01, 0xe0, 0x07, 0xc0, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xe0, + 0x00, 0x00, 0x07, 0xc0, 0x03, 0xf0, 0x00, 0x00, 0x1f, 0x80, 0x01, 0xf8, 0x00, 0x00, 0x3f, 0x00, + 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x7f, 0x80, 0x03, 0xfc, 0x00, 0x00, 0x1f, 0xfc, 0x3f, + 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x03, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, + 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +// 'transfer', 47x47px +const unsigned char icon_transfer [] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x01, + 0xfe, 0x00, 0x00, 0x3f, 0xe0, 0x07, 0xff, 0x80, 0x00, 0xff, 0xc0, 0x0f, 0xff, 0xc0, 0x01, 0xfb, + 0xc0, 0x1f, 0x03, 0xe0, 0x03, 0xe3, 0x80, 0x3c, 0x00, 0xf0, 0x07, 0xc3, 0x80, 0x78, 0x00, 0x78, + 0x0f, 0x80, 0x00, 0x70, 0x00, 0x78, 0x0f, 0x00, 0x00, 0x70, 0x00, 0x38, 0x1e, 0x00, 0x00, 0xf0, + 0x00, 0x3c, 0x1c, 0x00, 0x00, 0xe0, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0xe0, 0x00, 0x1c, 0x38, 0x00, + 0x00, 0xe0, 0x00, 0x3c, 0x38, 0x00, 0x00, 0xf0, 0x00, 0x3c, 0x38, 0x00, 0x00, 0x70, 0x00, 0x38, + 0x38, 0x00, 0x00, 0x78, 0x00, 0x78, 0x38, 0x00, 0x00, 0x78, 0x00, 0x78, 0x30, 0x00, 0x00, 0x3c, + 0x00, 0xf0, 0x00, 0x00, 0x00, 0x1f, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xc0, 0x00, 0x00, + 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfc, 0x00, + 0x00, 0x00, 0x1f, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x00, 0x18, 0x38, 0x00, + 0x0e, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x3c, + 0x38, 0x00, 0x0e, 0x00, 0x00, 0x3c, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x38, 0x38, 0x00, 0x0e, 0x00, + 0x00, 0x38, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x78, 0x38, 0x00, 0x0e, 0x00, 0x00, 0x70, 0x38, 0x00, + 0x0e, 0x00, 0x00, 0xf0, 0x38, 0x00, 0x0e, 0x00, 0x01, 0xe0, 0x38, 0x00, 0x0e, 0x01, 0x83, 0xe0, + 0x38, 0x00, 0x0e, 0x03, 0x87, 0xc0, 0x3c, 0x00, 0x1e, 0x03, 0x9f, 0x80, 0x1f, 0x80, 0xfc, 0x07, + 0xff, 0x00, 0x1f, 0xff, 0xf8, 0x07, 0xfc, 0x00, 0x07, 0xff, 0xf0, 0x0f, 0xf0, 0x00, 0x01, 0xff, + 0xc0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..e939ebc --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,191 @@ +#include +#include +#include +#include +#include +#include + +#include "config.h" +#include "website.h" +#include "api.h" +#include "display.h" +#include "bambu.h" +#include "nfc.h" +#include "scale.h" +#include "esp_task_wdt.h" +#include "commonFS.h" + +// ***** WIFI initialisieren +WiFiManager wm; +bool wm_nonblocking = false; +void initWiFi(); +// ################### Functions + +// ##### SETUP ##### +void setup() { + Serial.begin(115200); + + // Initialize SPIFFS + initializeSPIFFS(); + + // Start Display + setupDisplay(); + + // WiFiManager + initWiFi(); + + // Webserver + Serial.println("Starte Webserver"); + setupWebserver(server); + + // Spoolman API + // api.cpp + initSpoolman(); + + // Bambu MQTT + // bambu.cpp + setupMqtt(); + + // mDNS + Serial.println("Starte MDNS"); + if (!MDNS.begin("filaman")) { // Set the hostname to "esp32.local" + Serial.println("Error setting up MDNS responder!"); + while(1) { + delay(1000); + } + } + Serial.println("mDNS responder started"); + + startNfc(); + + start_scale(); + + // WDT initialisieren mit 10 Sekunden Timeout + bool panic = true; // Wenn true, löst ein WDT-Timeout einen System-Panik aus + esp_task_wdt_init(10, panic); + + // Aktuellen Task (loopTask) zum Watchdog hinzufügen + esp_task_wdt_add(NULL); + + // Optional: Andere Tasks zum Watchdog hinzufügen, falls nötig + // esp_task_wdt_add(task_handle); +} + + +unsigned long lastWeightReadTime = 0; +const unsigned long weightReadInterval = 1000; // 1 second +uint8_t weightSend = 0; +int16_t lastWeight = 0; +uint8_t wifiErrorCounter = 0; + +// ##### PROGRAM START ##### +void loop() { + // Überprüfe den WLAN-Status + if (WiFi.status() != WL_CONNECTED) { + wifiErrorCounter++; + wifiOn = false; + } else { + wifiErrorCounter = 0; + wifiOn = true; + } + if (wifiErrorCounter > 20) ESP.restart(); + + unsigned long currentMillis = millis(); + + // Falls WifiManager im nicht blockenden Modus ist + //if(wm_nonblocking) wm.process(); + + // Ausgabe der Waage auf Display + if (pauseMainTask == 0 && weight != lastWeight && hasReadRfidTag == 0) + { + (weight < 0) ? oledShowMessage("!! -1") : oledShowWeight(weight); + } + + // Wenn Timer abgelaufen und nicht gerade ein RFID-Tag geschrieben wird + if (currentMillis - lastWeightReadTime >= weightReadInterval && hasReadRfidTag < 3) + { + lastWeightReadTime = currentMillis; + + // Prüfen ob die Waage korrekt genullt ist + if ((weight > 0 && weight < 5) || weight < 0) + { + scale_tare_counter++; + } + else + { + scale_tare_counter = 0; + } + + // Prüfen ob das Gewicht gleich bleibt und dann senden + if (weight == lastWeight && weight > 5) + { + weigthCouterToApi++; + } + else + { + weigthCouterToApi = 0; + weightSend = 0; + } + } + // reset weight counter after writing tag + if (currentMillis - lastWeightReadTime >= weightReadInterval && hasReadRfidTag > 1) + { + weigthCouterToApi = 0; + } + + lastWeight = weight; + + // Wenn ein Tag mit SM id erkannte wurde und der Waage Counter anspricht an SM Senden + if (spoolId != "" && weigthCouterToApi > 5 && weightSend == 0 && hasReadRfidTag == 1) { + oledShowIcon("loading"); + if (updateSpoolWeight(spoolId, weight)) + { + oledShowIcon("success"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + weightSend = 1; + } + else + { + oledShowIcon("failed"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + } + } + + yield(); + esp_task_wdt_reset(); +} + +// ##### Funktionen für Konfiguration ##### +void initWiFi() { + WiFi.mode(WIFI_STA); // explicitly set mode, esp defaults to STA+AP + + if(wm_nonblocking) wm.setConfigPortalBlocking(false); + wm.setConfigPortalTimeout(320); // Portal nach 5min schließen + + oledShowTopRow(); + oledShowMessage("WiFi Setup"); + + bool res; + // res = wm.autoConnect(); // auto generated AP name from chipid + res = wm.autoConnect("FilaMan"); // anonymous ap + // res = wm.autoConnect("spoolman","password"); // password protected ap + + if(!res) { + Serial.println("Failed to connect or hit timeout"); + // ESP.restart(); + oledShowTopRow(); + oledShowMessage("WiFi not connected Check Portal"); + } + else { + wifiOn = true; + + //if you get here you have connected to the WiFi + Serial.println("connected...yeey :)"); + Serial.print("IP address: "); + Serial.println(WiFi.localIP()); + + oledShowTopRow(); + display.display(); + } +} +// ##### Funktionen für Konfiguration Ende ##### diff --git a/src/nfc.cpp b/src/nfc.cpp new file mode 100644 index 0000000..2cef262 --- /dev/null +++ b/src/nfc.cpp @@ -0,0 +1,503 @@ +#include "nfc.h" +#include +#include +#include +#include "config.h" +#include "website.h" +#include "api.h" +#include "esp_task_wdt.h" + +//Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS); +Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET); + +TaskHandle_t RfidReaderTask; + +JsonDocument rfidData; +String spoolId = ""; +String nfcJsonData = ""; +volatile bool pauseBambuMqttTask = false; + +volatile uint8_t hasReadRfidTag = 0; +// 0 = nicht gelesen +// 1 = erfolgreich gelesen +// 2 = fehler beim Lesen +// 3 = schreiben +// 4 = fehler beim Schreiben +// 5 = erfolgreich geschrieben +// 6 = reading +// ***** PN532 + + +// ##### Funktionen für RFID ##### +void payloadToJson(uint8_t *data) { + const char* startJson = strchr((char*)data, '{'); + const char* endJson = strrchr((char*)data, '}'); + + if (startJson && endJson && endJson > startJson) { + String jsonString = String(startJson, endJson - startJson + 1); + //Serial.print("Bereinigter JSON-String: "); + //Serial.println(jsonString); + + // JSON-Dokument verarbeiten + JsonDocument doc; // Passen Sie die Größe an den JSON-Inhalt an + DeserializationError error = deserializeJson(doc, jsonString); + + if (!error) { + const char* version = doc["version"]; + const char* protocol = doc["protocol"]; + const char* color_hex = doc["color_hex"]; + const char* type = doc["type"]; + int min_temp = doc["min_temp"]; + int max_temp = doc["max_temp"]; + const char* brand = doc["brand"]; + + Serial.println(); + Serial.println("-----------------"); + Serial.println("JSON-Parsed Data:"); + Serial.println(version); + Serial.println(protocol); + Serial.println(color_hex); + Serial.println(type); + Serial.println(min_temp); + Serial.println(max_temp); + Serial.println(brand); + Serial.println("-----------------"); + Serial.println(); + } else { + Serial.print("deserializeJson() failed: "); + Serial.println(error.f_str()); + } + } else { + Serial.println("Kein gültiger JSON-Inhalt gefunden oder fehlerhafte Formatierung."); + //writeJsonToTag("{\"version\":\"1.0\",\"protocol\":\"NFC\",\"color_hex\":\"#FFFFFF\",\"type\":\"Example\",\"min_temp\":10,\"max_temp\":30,\"brand\":\"BrandName\"}"); + } + } + +bool formatNdefTag() { + uint8_t ndefInit[] = { 0x03, 0x00, 0xFE }; // NDEF Initialisierungsnachricht + bool success = true; + int pageOffset = 4; // Startseite für NDEF-Daten auf NTAG2xx + + Serial.println(); + Serial.println("Formatiere NDEF-Tag..."); + + // Schreibe die Initialisierungsnachricht auf die ersten Seiten + for (int i = 0; i < sizeof(ndefInit); i += 4) { + if (!nfc.ntag2xx_WritePage(pageOffset + (i / 4), &ndefInit[i])) { + success = false; + break; + } + } + + return success; + } + +uint8_t ntag2xx_WriteNDEF(const char *payload) { + /* + if (!formatNdefTag()) { + Serial.println("Fehler beim Formatieren des NDEF-Tags."); + hasReadRfidTag = 2; + return 0; + } + */ + + uint8_t tagSize = 240; // 144 bytes is maximum for NTAG213 + Serial.print("Tag Size: ");Serial.println(tagSize); + + uint8_t pageBuffer[4] = {0, 0, 0, 0}; + Serial.println("Beginne mit dem Schreiben der NDEF-Nachricht..."); + + // Figure out how long the string is + uint8_t len = strlen(payload); + Serial.print("Länge der Payload: "); + Serial.println(len); + + Serial.print("Payload: ");Serial.println(payload); + + // Setup the record header + // See NFCForum-TS-Type-2-Tag_1.1.pdf for details + uint8_t pageHeader[21] = { + /* NDEF Message TLV - JSON Record */ + 0x03, /* Tag Field (0x03 = NDEF Message) */ + (uint8_t)(len+3+16), /* Payload Length (including NDEF header) */ + 0xD2, /* NDEF Record Header (TNF=0x2:MIME Media + SR + ME + MB) */ + 0x10, /* Type Length for the record type indicator */ + (uint8_t)(len), /* Payload len */ + 'a', 'p', 'p', 'l', 'i', 'c', 'a', 't', 'i', 'o', 'n', '/', 'j', 's', 'o', 'n' + }; + + // Make sure the URI payload will fit in dataLen (include 0xFE trailer) + if ((len < 1) || (len + 1 > (tagSize - sizeof(pageHeader)))) + { + Serial.println(); + Serial.println("!!!!!!!!!!!!!!!!!!!!!!!!"); + Serial.println("Fehler: Die Nutzlast passt nicht in die Datenlänge."); + Serial.println("!!!!!!!!!!!!!!!!!!!!!!!!"); + Serial.println(); + return 0; + } + + //Serial.println(); + //Serial.print("Header Size: ");Serial.println(sizeof(pageHeader)); + + // Kombiniere Header und Payload + int totalSize = sizeof(pageHeader) + len; + uint8_t* combinedData = (uint8_t*) malloc(totalSize); + if (combinedData == NULL) + { + Serial.println("Fehler: Nicht genug Speicher vorhanden."); + return 0; + } + + // Überprüfe die Kombination von Header und Payload + /* + Serial.print("Header: "); + for (int i = 0; i < sizeof(pageHeader); i++) { + Serial.print(pageHeader[i], HEX); + Serial.print(" "); + } + Serial.println(); + + Serial.print("Payload: "); + for (int i = 0; i < len; i++) { + Serial.print(payload[i], HEX); + Serial.print(" "); + } + Serial.println(); + */ + + // Kombiniere Header und Payload + memcpy(combinedData, pageHeader, sizeof(pageHeader)); + memcpy(&combinedData[sizeof(pageHeader)], payload, len); + + // Überprüfe die Kombination von Header und Payload + /* + Serial.print("Kombinierte Daten: "); + for (int i = 0; i < totalSize; i++) { + Serial.print(combinedData[i], HEX); + Serial.print(" "); + } + Serial.println(); + */ + + // Schreibe die Seiten + uint8_t a = 0; + uint8_t i = 0; + while (totalSize > 0) { + memset(pageBuffer, 0, 4); + int bytesToWrite = (totalSize < 4) ? totalSize : 4; + memcpy(pageBuffer, combinedData + a, bytesToWrite); + + // Überprüfe die Schreibung der Seiten + /* + Serial.print("Seite "); + Serial.print(i); + Serial.print(": "); + for (int j = 0; j < bytesToWrite; j++) { + Serial.print(pageBuffer[j], HEX); + Serial.print(" "); + } + Serial.println(); + */ + uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID + uint8_t uidLength; + nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 500); + //Serial.print("Schreibe Seite: ");Serial.println(i); + + if (!(nfc.ntag2xx_WritePage(4+i, pageBuffer))) + { + Serial.println("Fehler beim Schreiben der Seite."); + free(combinedData); + return 0; + } + + //Serial.print("Seite geschrieben: ");Serial.println(i); + + yield(); + //esp_task_wdt_reset(); + + i++; + a += 4; + totalSize -= bytesToWrite; + } + + // Ensure the NDEF message is properly terminated + memset(pageBuffer, 0, 4); + pageBuffer[0] = 0xFE; // NDEF record footer + if (!(nfc.ntag2xx_WritePage(4+i, pageBuffer))) + { + Serial.println("Fehler beim Schreiben des End-Bits."); + free(combinedData); + return 0; + } + + Serial.println("NDEF-Nachricht erfolgreich geschrieben."); + free(combinedData); + return 1; +} + +bool decodeNdefAndReturnJson(const byte* encodedMessage) { + byte typeLength = encodedMessage[3]; + byte payloadLength = encodedMessage[4]; + + nfcJsonData = ""; + + for (int i = 2; i < payloadLength+2; i++) + { + nfcJsonData += (char)encodedMessage[3 + typeLength + i]; + } + + // JSON-Dokument verarbeiten + JsonDocument doc; // Passen Sie die Größe an den JSON-Inhalt an + DeserializationError error = deserializeJson(doc, nfcJsonData); + if (error) + { + nfcJsonData = ""; + Serial.println("Fehler beim Verarbeiten des JSON-Dokuments"); + Serial.print("deserializeJson() failed: "); + Serial.println(error.f_str()); + return false; + } + else + { + // Sende die aktualisierten AMS-Daten an alle WebSocket-Clients + Serial.println("JSON-Dokument erfolgreich verarbeitet"); + Serial.println(doc.as()); + if (doc["sm_id"] != "") + { + Serial.println("SPOOL-ID gefunden: " + doc["sm_id"].as()); + spoolId = doc["sm_id"].as(); + } + else + { + Serial.println("Keine SPOOL-ID gefunden."); + spoolId = ""; + oledShowMessage("Unknown Spool"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + } + } + + return true; +} + +void writeJsonToTag(void *parameter) { + const char* payload = (const char*)parameter; + + // Gib die erstellte NDEF-Message aus + Serial.println("Erstelle NDEF-Message..."); + hasReadRfidTag = 3; + vTaskSuspend(RfidReaderTask); + //pauseBambuMqttTask = true; + // aktualisieren der Website wenn sich der Status ändert + sendNfcData(nullptr); + + // Wait 10sec for tag + uint8_t success = 0; + String uidString = ""; + for (uint16_t i = 0; i < 20; i++) { + uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID + uint8_t uidLength; + success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 500); + if (success) { + for (uint8_t i = 0; i < uidLength; i++) { + uidString += String(uid[i], HEX); + if (i < uidLength - 1) { + uidString += ":"; // Optional: Trennzeichen hinzufügen + } + } + foundNfcTag(nullptr, success); + break; + } + + if (i == 0) oledShowMessage("Waiting for NFC-Tag"); + + yield(); + esp_task_wdt_reset(); + vTaskDelay(pdMS_TO_TICKS(1)); + } + + if (success) + { + oledShowIcon("transfer"); + // Schreibe die NDEF-Message auf den Tag + success = ntag2xx_WriteNDEF(payload); + if (success) + { + Serial.println("NDEF-Message erfolgreich auf den Tag geschrieben"); + //oledShowMessage("NFC-Tag written"); + oledShowIcon("success"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + hasReadRfidTag = 5; + // aktualisieren der Website wenn sich der Status ändert + sendNfcData(nullptr); + vTaskResume(RfidReaderTask); + pauseBambuMqttTask = false; + updateSpoolTagId(uidString, payload); + } + else + { + Serial.println("Fehler beim Schreiben der NDEF-Message auf den Tag"); + oledShowIcon("failed"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + hasReadRfidTag = 4; + } + } + else + { + Serial.println("Fehler: Kein Tag zu schreiben gefunden."); + oledShowMessage("No NFC-Tag found"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + hasReadRfidTag = 0; + } + + sendWriteResult(nullptr, success); + sendNfcData(nullptr); + + vTaskResume(RfidReaderTask); + pauseBambuMqttTask = false; + + vTaskDelete(NULL); +} + +void startWriteJsonToTag(const char* payload) { + char* payloadCopy = strdup(payload); + + // Erstelle die Task + xTaskCreate( + writeJsonToTag, // Task-Funktion + "WriteJsonToTagTask", // Task-Name + 4096, // Stackgröße in Bytes + (void*)payloadCopy, // Parameter + rfidWriteTaskPrio, // Priorität + NULL // Task-Handle (nicht benötigt) + ); +} + +void scanRfidTask(void * parameter) { + Serial.println("RFID Task gestartet"); + for(;;) { + // Wenn geschrieben wird Schleife aussetzen + if (hasReadRfidTag != 3) + { + uint8_t success; + uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID + uint8_t uidLength; + + success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 1000); + + foundNfcTag(nullptr, success); + + if (success && hasReadRfidTag != 1) + { + // Display some basic information about the card + Serial.println("Found an ISO14443A card"); + + hasReadRfidTag = 6; + + oledShowIcon("transfer"); + vTaskDelay(1000 / portTICK_PERIOD_MS); + + if (uidLength == 7) + { + uint8_t data[256]; + + // We probably have an NTAG2xx card (though it could be Ultralight as well) + Serial.println("Seems to be an NTAG2xx tag (7 byte UID)"); + + for (uint8_t i = 0; i < 45; i++) { + /* + if (i < uidLength) { + uidString += String(uid[i], HEX); + if (i < uidLength - 1) { + uidString += ":"; // Optional: Trennzeichen hinzufügen + } + } + */ + if (!nfc.mifareclassic_ReadDataBlock(i, data + (i - 4) * 4)) + { + break; // Stop if reading fails + } + // Check for NDEF message end + if (data[(i - 4) * 4] == 0xFE) + { + break; // End of NDEF message + } + + yield(); + esp_task_wdt_reset(); + vTaskDelay(pdMS_TO_TICKS(1)); + } + + if (!decodeNdefAndReturnJson(data)) + { + oledShowMessage("NFC-Tag unknown"); + vTaskDelay(2000 / portTICK_PERIOD_MS); + hasReadRfidTag = 2; + } + else + { + hasReadRfidTag = 1; + } + + } + else + { + Serial.println("This doesn't seem to be an NTAG2xx tag (UUID length != 7 bytes)!"); + } + } + + if (!success && hasReadRfidTag > 0) + { + hasReadRfidTag = 0; + //uidString = ""; + nfcJsonData = ""; + Serial.println("Tag entfernt"); + oledShowWeight(0); + } + + // aktualisieren der Website wenn sich der Status ändert + sendNfcData(nullptr); + } + yield(); + } +} + +void startNfc() { + nfc.begin(); // Beginne Kommunikation mit RFID Leser + delay(1000); + unsigned long versiondata = nfc.getFirmwareVersion(); // Lese Versionsnummer der Firmware aus + if (! versiondata) { // Wenn keine Antwort kommt + Serial.println("Kann kein RFID Board finden !"); // Sende Text "Kann kein..." an seriellen Monitor + //delay(5000); + //ESP.restart(); + oledShowMessage("No RFID Board found"); + delay(2000); + } + else { + Serial.print("Chip PN5 gefunden"); Serial.println((versiondata >> 24) & 0xFF, HEX); // Sende Text und Versionsinfos an seriellen + Serial.print("Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC); // Monitor, wenn Antwort vom Board kommt + Serial.print('.'); Serial.println((versiondata >> 8) & 0xFF, DEC); // + + nfc.SAMConfig(); + // Set the max number of retry attempts to read from a card + // This prevents us from waiting forever for a card, which is + // the default behaviour of the PN532. + //nfc.setPassiveActivationRetries(0x7F); + //nfc.setPassiveActivationRetries(0xFF); + + BaseType_t result = xTaskCreatePinnedToCore( + scanRfidTask, /* Function to implement the task */ + "RfidReader", /* Name of the task */ + 10000, /* Stack size in words */ + NULL, /* Task input parameter */ + rfidTaskPrio, /* Priority of the task */ + &RfidReaderTask, /* Task handle. */ + rfidTaskCore); /* Core where the task should run */ + + if (result != pdPASS) { + Serial.println("Fehler beim Erstellen des RFID Tasks"); + } else { + Serial.println("RFID Task erfolgreich erstellt"); + } + } +} \ No newline at end of file diff --git a/src/nfc.h b/src/nfc.h new file mode 100644 index 0000000..3610050 --- /dev/null +++ b/src/nfc.h @@ -0,0 +1,16 @@ +#ifndef NFC_H +#define NFC_H + +#include + +void startNfc(); +void scanRfidTask(void * parameter); +void startWriteJsonToTag(const char* payload); + +extern TaskHandle_t RfidReaderTask; +extern String nfcJsonData; +extern String spoolId; +extern volatile uint8_t hasReadRfidTag; +extern volatile bool pauseBambuMqttTask; + +#endif \ No newline at end of file diff --git a/src/scale.cpp b/src/scale.cpp new file mode 100644 index 0000000..b52ce28 --- /dev/null +++ b/src/scale.cpp @@ -0,0 +1,214 @@ +#include "nfc.h" +#include +#include +#include "config.h" +#include "HX711.h" +#include +#include "display.h" +#include "nfc.h" +#include "esp_task_wdt.h" + +HX711 scale; + +TaskHandle_t ScaleTask; + +int16_t weight = 0; + +uint8_t weigthCouterToApi = 0; +uint8_t scale_tare_counter = 0; +uint8_t pauseMainTask = 0; + +// ##### Funktionen für Waage ##### +uint8_t tareScale() { + Serial.println("Tare scale"); + scale.tare(); + + return 1; +} + +void scale_loop(void * parameter) { + Serial.println("++++++++++++++++++++++++++++++"); + Serial.println("Scale Loop started"); + Serial.println("++++++++++++++++++++++++++++++"); + for(;;) { + if (scale.is_ready()) + { + // Waage nochmal Taren, wenn zu lange Abweichung + if (scale_tare_counter >= 5) + { + scale.tare(); + scale_tare_counter = 0; + } + + weight = round(scale.get_units()); + } + + vTaskDelay(pdMS_TO_TICKS(100)); // Verzögerung, um die CPU nicht zu überlasten + } +} + +void start_scale() { + Serial.println("Prüfe Calibration Value"); + long calibrationValue; // calibration value (see example file "Calibration.ino") + //calibrationValue = 696.0; // uncomment this if you want to set the calibration value in the sketch + + EEPROM.begin(512); + EEPROM.get(calVal_eepromAdress, calibrationValue); // uncomment this if you want to fetch the calibration value from eeprom + + //calibrationValue = EEPROM.read(calVal_eepromAdress); + + Serial.print("Read Scale Calibration Value "); + Serial.println(calibrationValue); + + scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); + + if (isnan(calibrationValue) || calibrationValue < 1) calibrationValue = defaultScaleCalibrationValue; + + oledShowMessage("Scale Tare Please remove all"); + for (uint16_t i = 0; i < 2000; i++) { + yield(); + vTaskDelay(pdMS_TO_TICKS(1)); + esp_task_wdt_reset(); + } + + if (scale.wait_ready_timeout(1000)) + { + scale.set_scale(calibrationValue); // this value is obtained by calibrating the scale with known weights; see the README for details + scale.tare(); + } + + // Display Gewicht + oledShowWeight(0); + + Serial.println("starte Scale Task"); + BaseType_t result = xTaskCreatePinnedToCore( + scale_loop, /* Function to implement the task */ + "ScaleLoop", /* Name of the task */ + 10000, /* Stack size in words */ + NULL, /* Task input parameter */ + scaleTaskPrio, /* Priority of the task */ + &ScaleTask, /* Task handle. */ + scaleTaskCore); /* Core where the task should run */ + + if (result != pdPASS) { + Serial.println("Fehler beim Erstellen des ScaleLoop-Tasks"); + } else { + Serial.println("ScaleLoop-Task erfolgreich erstellt"); + } +} + +uint8_t calibrate_scale() { + long newCalibrationValue; + + //vTaskSuspend(RfidReaderTask); + vTaskDelete(RfidReaderTask); + pauseBambuMqttTask = true; + pauseMainTask = 1; + + if (scale.wait_ready_timeout(1000)) + { + scale.set_scale(); + oledShowMessage("Step 1 empty Scale"); + + for (uint16_t i = 0; i < 5000; i++) { + yield(); + vTaskDelay(pdMS_TO_TICKS(1)); + esp_task_wdt_reset(); + } + + scale.tare(); + Serial.println("Tare done..."); + Serial.print("Place a known weight on the scale..."); + + oledShowMessage("Step 2 Place the weight"); + + for (uint16_t i = 0; i < 5000; i++) { + yield(); + vTaskDelay(pdMS_TO_TICKS(1)); + esp_task_wdt_reset(); + } + + long newCalibrationValue = scale.get_units(10); + Serial.print("Result: "); + Serial.println(newCalibrationValue); + + newCalibrationValue = newCalibrationValue/SCALE_LEVEL_WEIGHT; + + if (newCalibrationValue > 0) + { + Serial.print("New calibration value has been set to: "); + Serial.println(newCalibrationValue); + Serial.print("Save this value to EEPROM adress "); + Serial.println(calVal_eepromAdress); + + //EEPROM.put(calVal_eepromAdress, newCalibrationValue); + EEPROM.put(calVal_eepromAdress, newCalibrationValue); + EEPROM.commit(); + + EEPROM.get(calVal_eepromAdress, newCalibrationValue); + //newCalibrationValue = EEPROM.read(calVal_eepromAdress); + + Serial.print("Read Value "); + Serial.println(newCalibrationValue); + + Serial.println("End calibration, revome weight"); + + oledShowMessage("Remove weight"); + + for (uint16_t i = 0; i < 2000; i++) { + yield(); + vTaskDelay(pdMS_TO_TICKS(1)); + esp_task_wdt_reset(); + } + + oledShowMessage("Calibration done"); + + for (uint16_t i = 0; i < 2000; i++) { + yield(); + vTaskDelay(pdMS_TO_TICKS(1)); + esp_task_wdt_reset(); + } + + //ESP.restart(); + } + else + { + { + Serial.println("Calibration value is invalid. Please recalibrate."); + + oledShowMessage("Calibration ERROR Try again"); + + for (uint16_t i = 0; i < 50000; i++) { + yield(); + vTaskDelay(pdMS_TO_TICKS(1)); + esp_task_wdt_reset(); + } + return 0; + } + } + } + else + { + Serial.println("HX711 not found."); + + oledShowMessage("HX711 not found"); + + for (uint16_t i = 0; i < 30000; i++) { + yield(); + vTaskDelay(pdMS_TO_TICKS(1)); + esp_task_wdt_reset(); + } + return 0; + } + + oledShowMessage("Scale Ready"); + + + Serial.println("starte Scale Task"); + start_scale(); + + pauseBambuMqttTask = false; + pauseMainTask = 0; + + return 1; +} diff --git a/src/scale.h b/src/scale.h new file mode 100644 index 0000000..d234da4 --- /dev/null +++ b/src/scale.h @@ -0,0 +1,18 @@ +#ifndef SCALE_H +#define SCALE_H + +#include +#include "HX711.h" + + +void start_scale(); +uint8_t calibrate_scale(); +uint8_t tareScale(); + +extern HX711 scale; +extern int16_t weight; +extern uint8_t weigthCouterToApi; +extern uint8_t scale_tare_counter; +extern uint8_t pauseMainTask; + +#endif \ No newline at end of file diff --git a/src/website.cpp b/src/website.cpp new file mode 100644 index 0000000..fedbb9a --- /dev/null +++ b/src/website.cpp @@ -0,0 +1,334 @@ +#include "website.h" +#include "commonFS.h" +#include "api.h" +#include +#include +//#include +#include "bambu.h" +#include "nfc.h" +#include "scale.h" +#include "esp_task_wdt.h" + +// Cache-Control Header definieren +#define CACHE_CONTROL "max-age=31536000" // Cache für 1 Jahr + +AsyncWebServer server(webserverPort); +AsyncWebSocket ws("/ws"); + +uint8_t lastSuccess = 0; +uint8_t lastHasReadRfidTag = 0; + +void onWsEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len) { + if (type == WS_EVT_CONNECT) { + Serial.println("Neuer Client verbunden!"); + // Sende die AMS-Daten an den neuen Client + sendAmsData(client); + sendNfcData(client); + foundNfcTag(client, hasReadRfidTag); + sendWriteResult(client, 0); + } else if (type == WS_EVT_DISCONNECT) { + Serial.println("Client getrennt."); + } else if (type == WS_EVT_DATA) { + String message = String((char*)data); + JsonDocument doc; + deserializeJson(doc, message); + + if (doc["type"] == "heartbeat") { + // Sende Heartbeat-Antwort + ws.text(client->id(), "{" + "\"type\":\"heartbeat\"," + "\"freeHeap\":" + String(ESP.getFreeHeap()/1024) + "," + "\"bambu_connected\":" + String(bambu_connected) + "," + "\"spoolman_connected\":" + String(spoolman_connected) + "" + "}"); + } + + else if (doc["type"] == "writeNfcTag") { + if (doc.containsKey("payload")) { + // Versuche NFC-Daten zu schreiben + String payloadString; + serializeJson(doc["payload"], payloadString); + startWriteJsonToTag(payloadString.c_str()); + } + } + + else if (doc["type"] == "scale") { + uint8_t success = 0; + if (doc["payload"] == "tare") { + success = tareScale(); + } + + if (doc["payload"] == "calibrate") { + success = calibrate_scale(); + } + + if (success) { + ws.textAll("{\"type\":\"scale\",\"payload\":\"success\"}"); + } else { + ws.textAll("{\"type\":\"scale\",\"payload\":\"error\"}"); + } + } + + else if (doc["type"] == "setBambuSpool") { + Serial.println(doc["payload"].as()); + setBambuSpool(doc["payload"]); + } + + else { + Serial.println("Unbekannter WebSocket-Typ: " + doc["type"].as()); + } + } +} + +// Funktion zum Laden und Ersetzen des Headers in einer HTML-Datei +String loadHtmlWithHeader(const char* filename) { + if (!SPIFFS.exists(filename) || !SPIFFS.exists("/header.html")) { + Serial.println("Fehler: Datei nicht gefunden!"); + return "Fehler: Datei nicht gefunden!"; + } + + // Lade den Header + File headerFile = SPIFFS.open("/header.html", "r"); + String header = headerFile.readString(); + headerFile.close(); + + // Lade die Hauptdatei + File file = SPIFFS.open(filename, "r"); + String html = file.readString(); + file.close(); + + // Ersetze den Platzhalter mit dem Header + html.replace("{{header}}", header); + + return html; +} + +void sendWriteResult(AsyncWebSocketClient *client, uint8_t success) { + // Sende Erfolg/Misserfolg an alle Clients + String response = "{\"type\":\"writeNfcTag\",\"success\":" + String(success ? "1" : "0") + "}"; + ws.textAll(response); +} + +void foundNfcTag(AsyncWebSocketClient *client, uint8_t success) { + if (success == lastSuccess) return; + ws.textAll("{\"type\":\"nfcTag\", \"payload\":{\"found\": " + String(success) + "}}"); + sendNfcData(nullptr); + lastSuccess = success; +} + +void sendNfcData(AsyncWebSocketClient *client) { + if (lastHasReadRfidTag == hasReadRfidTag) return; + if (hasReadRfidTag == 0) { + ws.textAll("{\"type\":\"nfcData\", \"payload\":{}}"); + } + else if (hasReadRfidTag == 1) { + ws.textAll("{\"type\":\"nfcData\", \"payload\":" + nfcJsonData + "}"); + } + else if (hasReadRfidTag == 2) + { + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Empty Tag or Data not readable\"}}"); + } + else if (hasReadRfidTag == 3) + { + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Schreibe Tag...\"}}"); + } + else if (hasReadRfidTag == 4) + { + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Error writing to Tag\"}}"); + } + else if (hasReadRfidTag == 5) + { + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"info\":\"Tag erfolgreich geschrieben\"}}"); + } + else + { + ws.textAll("{\"type\":\"nfcData\", \"payload\":{\"error\":\"Something went wrong\"}}"); + } + lastHasReadRfidTag = hasReadRfidTag; +} + +void sendAmsData(AsyncWebSocketClient *client) { + if (ams_count > 0) { + ws.textAll("{\"type\":\"amsData\", \"payload\":" + amsJsonData + "}"); + } +} + +void setupWebserver(AsyncWebServer &server) { + // Lade die Spoolman-URL beim Booten + spoolmanUrl = loadSpoolmanUrl(); + Serial.print("Geladene Spoolman-URL: "); + Serial.println(spoolmanUrl); + + // Route für die Startseite + server.on("/about", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("Anfrage für / erhalten"); + String html = loadHtmlWithHeader("/index.html"); + request->send(200, "text/html", html); + }); + + // Route für Waage + server.on("/waage", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("Anfrage für /waage erhalten"); + String html = loadHtmlWithHeader("/waage.html"); + request->send(200, "text/html", html); + }); + + // Route für RFID + server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("Anfrage für /rfid erhalten"); + String html = loadHtmlWithHeader("/rfid.html"); + request->send(200, "text/html", html); + Serial.println("RFID-Seite gesendet"); + }); + + /* + // Neue API-Route für das Abrufen der Spool-Daten + server.on("/api/spools", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("API-Aufruf: /api/spools"); + JsonDocument spoolsData = fetchSpoolsForWebsite(); + String response; + serializeJson(spoolsData, response); + request->send(200, "application/json", response); + }); + */ + + server.on("/api/url", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("API-Aufruf: /api/url"); + String jsonResponse = "{\"spoolman_url\": \"" + String(spoolmanUrl) + "\"}"; + request->send(200, "application/json", jsonResponse); + }); + + // Route für WiFi + server.on("/wifi", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("Anfrage für /wifi erhalten"); + String html = loadHtmlWithHeader("/wifi.html"); + request->send(200, "text/html", html); + }); + + // Route für Spoolman Setting + server.on("/spoolman", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("Anfrage für /spoolman erhalten"); + String html = loadHtmlWithHeader("/spoolman.html"); + html.replace("{{spoolmanUrl}}", spoolmanUrl); + + JsonDocument doc; + if (loadJsonValue("/bambu_credentials.json", doc) && doc.containsKey("bambu_ip")) { + html.replace("{{bambuIp}}", doc["bambu_ip"].as() ? doc["bambu_ip"].as() : ""); + html.replace("{{bambuSerial}}", doc["bambu_serialnr"].as() ? doc["bambu_serialnr"].as() : ""); + html.replace("{{bambuCode}}", doc["bambu_accesscode"].as() ? doc["bambu_accesscode"].as() : ""); + } + + request->send(200, "text/html", html); + }); + + // Route für das Überprüfen der Spoolman-Instanz + server.on("/api/checkSpoolman", HTTP_GET, [](AsyncWebServerRequest *request){ + if (!request->hasParam("url")) { + request->send(400, "application/json", "{\"success\": false, \"error\": \"Missing URL parameter\"}"); + return; + } + + String url = request->getParam("url")->value(); + url.trim(); + + bool healthy = saveSpoolmanUrl(url); + String jsonResponse = "{\"healthy\": " + String(healthy ? "true" : "false") + "}"; + + request->send(200, "application/json", jsonResponse); + }); + + // Route für das Überprüfen der Spoolman-Instanz + server.on("/api/bambu", HTTP_GET, [](AsyncWebServerRequest *request){ + if (!request->hasParam("bambu_ip") || !request->hasParam("bambu_serialnr") || !request->hasParam("bambu_accesscode")) { + request->send(400, "application/json", "{\"success\": false, \"error\": \"Missing parameter\"}"); + return; + } + + String bambu_ip = request->getParam("bambu_ip")->value(); + String bambu_serialnr = request->getParam("bambu_serialnr")->value(); + String bambu_accesscode = request->getParam("bambu_accesscode")->value(); + bambu_ip.trim(); + bambu_serialnr.trim(); + bambu_accesscode.trim(); + + bool success = saveBambuCredentials(bambu_ip, bambu_serialnr, bambu_accesscode); + + request->send(200, "application/json", "{\"healthy\": " + String(success ? "true" : "false") + "}"); + }); + + // Route für das Überprüfen der Spoolman-Instanz + server.on("/reboot", HTTP_GET, [](AsyncWebServerRequest *request){ + ESP.restart(); + }); + + // Route für das Laden der CSS-Datei + server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("Lade style.css"); + AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/style.css.gz", "text/css"); + response->addHeader("Content-Encoding", "gzip"); + response->addHeader("Cache-Control", CACHE_CONTROL); + request->send(response); + Serial.println("style.css gesendet"); + }); + + // Route für das Logo + server.on("/logo.png", HTTP_GET, [](AsyncWebServerRequest *request){ + AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/logo.png.gz", "image/png"); + response->addHeader("Content-Encoding", "gzip"); + response->addHeader("Cache-Control", CACHE_CONTROL); + request->send(response); + Serial.println("logo.png gesendet"); + }); + + // Route für Favicon + server.on("/favicon.ico", HTTP_GET, [](AsyncWebServerRequest *request){ + AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/favicon.ico", "image/x-icon"); + response->addHeader("Cache-Control", CACHE_CONTROL); + request->send(response); + Serial.println("favicon.ico gesendet"); + }); + + // Route für spool_in.png + server.on("/spool_in.png", HTTP_GET, [](AsyncWebServerRequest *request){ + AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/spool_in.png.gz", "image/png"); + response->addHeader("Content-Encoding", "gzip"); + response->addHeader("Cache-Control", CACHE_CONTROL); + request->send(response); + Serial.println("spool_in.png gesendet"); + }); + + // Route für JavaScript Dateien + server.on("/spoolman.js", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("Anfrage für /spoolman.js erhalten"); + AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/spoolman.js.gz", "text/javascript"); + response->addHeader("Content-Encoding", "gzip"); + response->addHeader("Cache-Control", CACHE_CONTROL); + request->send(response); + Serial.println("Spoolman.js gesendet"); + }); + + server.on("/rfid.js", HTTP_GET, [](AsyncWebServerRequest *request){ + Serial.println("Anfrage für /rfid.js erhalten"); + AsyncWebServerResponse *response = request->beginResponse(SPIFFS,"/rfid.js.gz", "text/javascript"); + response->addHeader("Content-Encoding", "gzip"); + response->addHeader("Cache-Control", CACHE_CONTROL); + request->send(response); + Serial.println("RFID.js gesendet"); + }); + + // Fehlerbehandlung für nicht gefundene Seiten + server.onNotFound([](AsyncWebServerRequest *request){ + Serial.print("404 - Nicht gefunden: "); + Serial.println(request->url()); + request->send(404, "text/plain", "Seite nicht gefunden"); + }); + + // WebSocket-Route + ws.onEvent(onWsEvent); + server.addHandler(&ws); + ws.enable(true); + + // Starte den Webserver + server.begin(); + Serial.println("Webserver gestartet"); +} diff --git a/src/website.h b/src/website.h new file mode 100644 index 0000000..e35a25e --- /dev/null +++ b/src/website.h @@ -0,0 +1,26 @@ +#ifndef WEBSITE_H +#define WEBSITE_H + +#include +#include +#include "commonFS.h" +#include "api.h" +#include +#include +#include +#include "bambu.h" +#include "nfc.h" +#include "scale.h" +#include "esp_task_wdt.h" + +extern String spoolmanUrl; +extern AsyncWebServer server; +extern AsyncWebSocket ws; + +void setupWebserver(AsyncWebServer &server); +void sendAmsData(AsyncWebSocketClient *client); +void sendNfcData(AsyncWebSocketClient *client); +void foundNfcTag(AsyncWebSocketClient *client, uint8_t success); +void sendWriteResult(AsyncWebSocketClient *client, uint8_t success); + +#endif