From 20775907eec39b91eeae78856fcdd28304e4a267 Mon Sep 17 00:00:00 2001 From: David Crocker Date: Fri, 6 Feb 2015 15:45:30 +0000 Subject: [PATCH] Version 1.00g Switched to Arduino 1.5.8 and gcc 4.8.3 --- .cproject | 14 +- .project | 6 +- .settings/language.settings.xml | 4 +- .settings/org.eclipse.cdt.core.prefs | 261 +++--- .../sam/cores/arduino/Stream.h | 103 -- .../sam/cores/arduino/UARTClass.cpp | 142 --- .../sam/cores/arduino/UARTClass.h | 62 -- .../sam/cores/arduino/USB/CDC.cpp | 309 ------ .../sam/cores/arduino/USB/USBAPI.h | 222 ----- .../sam/cores/arduino/USB/USBCore.cpp | 884 ------------------ .../sam/system/libsam/source/emac.c | 808 ---------------- .../sam}/arduino_due_x/variant.cpp | 0 ArduinoCorePatches/sam/cores/arduino/Stream.h | 8 +- .../sam/cores/arduino/UARTClass.h | 3 +- .../sam/cores/arduino/USB/CDC.cpp | 19 +- .../sam/cores/arduino/USB/USBAPI.h | 3 +- .../sam/cores/arduino/USB/USBCore.cpp | 19 +- Configuration.h | 4 +- Release/RepRapFirmware-1.00g-dc42.bin | Bin 0 -> 212896 bytes 19 files changed, 201 insertions(+), 2670 deletions(-) delete mode 100644 ArduinoCorePatches-1.5.7/sam/cores/arduino/Stream.h delete mode 100644 ArduinoCorePatches-1.5.7/sam/cores/arduino/UARTClass.cpp delete mode 100644 ArduinoCorePatches-1.5.7/sam/cores/arduino/UARTClass.h delete mode 100644 ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/CDC.cpp delete mode 100644 ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/USBAPI.h delete mode 100644 ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/USBCore.cpp delete mode 100644 ArduinoCorePatches-1.5.7/sam/system/libsam/source/emac.c rename {ArduinoCorePatches-1.5.7/sam/variants => ArduinoCorePatches/sam}/arduino_due_x/variant.cpp (100%) create mode 100644 Release/RepRapFirmware-1.00g-dc42.bin diff --git a/.cproject b/.cproject index 2fab03e..1370b89 100644 --- a/.cproject +++ b/.cproject @@ -20,8 +20,7 @@ @@ -72,6 +72,10 @@ - + + + + + diff --git a/.project b/.project index bd59a27..7478a80 100644 --- a/.project +++ b/.project @@ -70,15 +70,15 @@ ArduinoHardwareLibPath - file:/C:/Arduino-1.5.4/hardware/arduino/sam/libraries + file:/C:/Arduino-1.5.8/hardware/arduino/sam/libraries ArduinoPinPath - file:/C:/Arduino-1.5.4/hardware/arduino/sam/variants + file:/C:/Arduino-1.5.8/hardware/arduino/sam/variants ArduinoPlatformPath - file:/C:/Arduino-1.5.4/hardware/arduino/sam + file:/C:/Arduino-1.5.8/hardware/arduino/sam diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index ae07477..16d0fb7 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -3,11 +3,11 @@ - + + - diff --git a/.settings/org.eclipse.cdt.core.prefs b/.settings/org.eclipse.cdt.core.prefs index 61074d1..95df602 100644 --- a/.settings/org.eclipse.cdt.core.prefs +++ b/.settings/org.eclipse.cdt.core.prefs @@ -1,262 +1,301 @@ eclipse.preferences.version=1 -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.ARCHIVE_FILE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.ARCHIVE_FILE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.ARCHIVE_FILE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.ARCHIVE_FILE/value=arduino.ar -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.CORE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.BOARD/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.BOARD/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.BOARD/value=SAM_DUE +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.CORE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.CORE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.CORE/value=arduino -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.EXTRA_FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.EXTRA_FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.EXTRA_FLAGS/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.EXTRA_FLAGS/value=-D__SAM3X8E__ -mthumb -DUSB_PID\=${A.BUILD.PID} -DUSB_VID\=${A.BUILD.VID} -DUSBCON -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.F_CPU/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.EXTRA_FLAGS/value=-D__SAM3X8E__ -mthumb ${A.BUILD.USB_FLAGS} +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.F_CPU/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.F_CPU/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.F_CPU/value=84000000L -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.GENERIC.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.GENERIC.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.GENERIC.PATH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.GENERIC.PATH/value=${A.RUNTIME.IDE.PATH}/hardware/tools/g++_arm_none_eabi/arm-none-eabi/bin -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.LDSCRIPT/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.LDSCRIPT/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.LDSCRIPT/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.LDSCRIPT/value=linker_scripts/gcc/flash.ld -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.MCU/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.MCU/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.MCU/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.MCU/value=cortex-m3 -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PATH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PATH/value=${ProjDirPath}/${ConfigName} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PID/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PID/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PID/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PID/value=0x003e -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PROJECT_NAME/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PROJECT_NAME/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PROJECT_NAME/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.PROJECT_NAME/value=${ProjName} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.SYSTEM.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.SYSTEM.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.SYSTEM.PATH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.SYSTEM.PATH/value=${A.RUNTIME.IDE.PATH}/hardware/arduino/sam/system -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USE_ARCHIVER/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_FLAGS/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_FLAGS/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_FLAGS/value=-DUSB_VID\=${A.BUILD.VID} -DUSB_PID\=${A.BUILD.PID} -DUSBCON "-DUSB_MANUFACTURER\=${A.BUILD.USB_MANUFACTURER}" "-DUSB_PRODUCT\=\\"${A.BUILD.USB_PRODUCT}\\"" +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_MANUFACTURER/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_MANUFACTURER/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_MANUFACTURER/value=Unknown +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_PRODUCT/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_PRODUCT/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USB_PRODUCT/value=Arduino Due +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USE_ARCHIVER/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USE_ARCHIVER/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.USE_ARCHIVER/value=true -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT.PATH/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT.PATH/value=C:/Arduino-1.5.4/hardware/arduino/sam/variants/${A.BUILD.VARIANT} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT.PATH/value=C\:/Arduino-1.5.8/hardware/arduino/sam/variants/${A.BUILD.VARIANT} +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT/value=arduino_due_x -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT_SYSTEM_LIB/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT_SYSTEM_LIB/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT_SYSTEM_LIB/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VARIANT_SYSTEM_LIB/value=libsam_sam3x8e_gcc_rel.a -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VID/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VID/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VID/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.BUILD.VID/value=0x2341 -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CMD.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CMD.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CMD.PATH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CMD.PATH/value=${A.TOOLS.AVRDUDE.CMD.PATH} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CMD/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CMD/value=${A.TOOLS.BOSSAC.CMD} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.CMD/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.CMD/value=arm-none-eabi-ar -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.EXTRA_FLAGS/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.EXTRA_FLAGS/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.EXTRA_FLAGS/value= +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.FLAGS/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.AR.FLAGS/value=rcs -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.CMD/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.CMD/value=arm-none-eabi-gcc -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.CMD/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.CMD/value=arm-none-eabi-g++ -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.CMD/value=arm-none-eabi-gcc +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.EXTRA_FLAGS/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.EXTRA_FLAGS/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.EXTRA_FLAGS/value= +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.FLAGS/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.ELF.FLAGS/value=-O2 -Wl,--gc-sections -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.EXTRA_FLAGS/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.EXTRA_FLAGS/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.EXTRA_FLAGS/value= +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.FLAGS/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.C.FLAGS/value=-c -g -O2 -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single\=500 -Dprintf\=iprintf -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.CMD/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.CMD/value=arm-none-eabi-g++ -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.EXTRA_FLAGS/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.EXTRA_FLAGS/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.EXTRA_FLAGS/value= +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.FLAGS/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.FLAGS/value=-c -g -O2 -w -ffunction-sections -fdata-sections -nostdlib --param max-inline-insns-single\=500 -fno-rtti -fno-exceptions -Dprintf\=iprintf -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.DEFINE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.CPP.FLAGS/value=-c -g -std\=gnu++11 -O2 -w -ffunction-sections -fdata-sections -nostdlib -fno-threadsafe-statics --param max-inline-insns-single\=500 -fno-rtti -fno-exceptions -Dprintf\=iprintf +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.DEFINE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.DEFINE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.DEFINE/value=-DARDUINO\= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.CMD/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.CMD/value=arm-none-eabi-objcopy -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.EXTRA_FLAGS/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.EXTRA_FLAGS/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.EXTRA_FLAGS/value= +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.FLAGS/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.ELF2HEX.FLAGS/value=-O binary -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.LDFLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.LDFLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.LDFLAGS/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.LDFLAGS/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.LIBSAM.C.FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.LIBSAM.C.FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.LIBSAM.C.FLAGS/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.LIBSAM.C.FLAGS/value="-I${A.BUILD.SYSTEM.PATH}/libsam" "-I${A.BUILD.SYSTEM.PATH}/CMSIS/CMSIS/Include/" "-I${A.BUILD.SYSTEM.PATH}/CMSIS/Device/ATMEL/" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.OBJCOPY.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.OBJCOPY.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.OBJCOPY.CMD/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.OBJCOPY.CMD/value=arm-none-eabi-objcopy -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.OBJCOPY.EEP.FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.OBJCOPY.EEP.FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.OBJCOPY.EEP.FLAGS/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.OBJCOPY.EEP.FLAGS/value=-O ihex -j .eeprom --set-section-flags\=.eeprom\=alloc,load --no-change-warnings --change-section-lma .eeprom\=0 -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.PATH/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.PATH/value=${A.RUNTIME.IDE.PATH}/hardware/tools/g++_arm_none_eabi/bin/ -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.S.FLAGS/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.PATH/value=${A.RUNTIME.IDE.PATH}/hardware/tools/gcc-arm-none-eabi-4.8.3-2014q1/bin/ +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.S.FLAGS/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.S.FLAGS/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.S.FLAGS/value=-c -g -assembler-with-cpp -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.SIZE.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.S.FLAGS/value=-c -g -x assembler-with-cpp +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.SIZE.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.SIZE.CMD/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.COMPILER.SIZE.CMD/value=arm-none-eabi-size -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CONFIG.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CONFIG.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CONFIG.PATH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.CONFIG.PATH/value=${A.TOOLS.AVRDUDE.CONFIG.PATH} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.NAME/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.NAME/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.NAME/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.NAME/value=Arduino Due (Native USB Port) -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.PATH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.PATH/value=${A.TOOLS.BOSSAC.PATH} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.1/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.PID.0/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.PID.0/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.PID.0/value=0x003e +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.1/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.1/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} "${A.BUILD.PATH}/${A.ARCHIVE_FILE}" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.2/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS} "${A.BUILD.PATH}/${A.ARCHIVE_FILE}" +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.2/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.2/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN.2/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} "${A.BUILD.PATH}/${A.ARCHIVE_FILE}" "${A.OBJECT_FILE}" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.1/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.AR.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.AR.CMD}" ${A.COMPILER.AR.FLAGS} ${A.COMPILER.AR.EXTRA_FLAGS} "${A.BUILD.PATH}/${A.ARCHIVE_FILE}" "${A.OBJECT_FILE}" +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.1/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.1/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} -mcpu\=${A.BUILD.MCU} "-T${A.BUILD.VARIANT.PATH}/${A.BUILD.LDSCRIPT}" "-Wl,-Map,${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.map" -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" "-L${A.BUILD.PATH}" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry\=Reset_Handler -Wl,--unresolved-symbols\=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "${A.BUILD.PATH}/arduino/syscalls_sam3.c.o" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.2/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} -mcpu\=${A.BUILD.MCU} "-T${A.BUILD.VARIANT.PATH}/${A.BUILD.LDSCRIPT}" "-Wl,-Map,${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.map" ${A.COMPILER.C.ELF.EXTRA_FLAGS} -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" "-L${A.BUILD.PATH}" -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry\=Reset_Handler -Wl,--unresolved-symbols\=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "${A.BUILD.PATH}/arduino/syscalls_sam3.c.o" +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.2/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.2/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.2/value=\ "${A.BUILD.VARIANT.PATH}/${A.BUILD.VARIANT_SYSTEM_LIB}" "${A.BUILD.PATH}/${A.ARCHIVE_FILE}" -Wl,--end-group -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN.2/value=\ "${A.BUILD.VARIANT.PATH}/${A.BUILD.VARIANT_SYSTEM_LIB}" "${A.BUILD.PATH}/${A.ARCHIVE_FILE}" -Wl,--end-group -lm -gcc +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} -mcpu\=${A.BUILD.MCU} "-T${A.BUILD.VARIANT.PATH}/${A.BUILD.LDSCRIPT}" "-Wl,-Map,${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.map" -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" "-L${A.BUILD.PATH}" -lm -lgcc -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry\=Reset_Handler -Wl,--unresolved-symbols\=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "${A.BUILD.PATH}/arduino/syscalls_sam3.c.o" ${A.OBJECT_FILES} "${A.BUILD.VARIANT.PATH}/${A.BUILD.VARIANT_SYSTEM_LIB}" "${A.BUILD.PATH}/${A.ARCHIVE_FILE}" -Wl,--end-group -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.1/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.COMBINE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.ELF.CMD}" ${A.COMPILER.C.ELF.FLAGS} -mcpu\=${A.BUILD.MCU} "-T${A.BUILD.VARIANT.PATH}/${A.BUILD.LDSCRIPT}" "-Wl,-Map,${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.map" ${A.COMPILER.C.ELF.EXTRA_FLAGS} -o "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" "-L${A.BUILD.PATH}" -mthumb -Wl,--cref -Wl,--check-sections -Wl,--gc-sections -Wl,--entry\=Reset_Handler -Wl,--unresolved-symbols\=report-all -Wl,--warn-common -Wl,--warn-section-align -Wl,--warn-unresolved-symbols -Wl,--start-group "${A.BUILD.PATH}/arduino/syscalls_sam3.c.o" ${A.OBJECT_FILES} "${A.BUILD.VARIANT.PATH}/${A.BUILD.VARIANT_SYSTEM_LIB}" "${A.BUILD.PATH}/${A.ARCHIVE_FILE}" -Wl,--end-group -lm -gcc +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.1/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.1/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.C.FLAGS} -mcpu\=${A.BUILD.MCU} -DF_CPU\=${A.BUILD.F_CPU} -D${A.SOFTWARE}\=${A.RUNTIME.IDE.VERSION} ${A.BUILD.EXTRA_FLAGS} ${A.COMPILER.LIBSAM.C.FLAGS} ${A.INCLUDES} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.2/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.C.FLAGS} -mcpu\=${A.BUILD.MCU} -DF_CPU\=${A.BUILD.F_CPU} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.COMPILER.LIBSAM.C.FLAGS} ${A.INCLUDES} +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.2/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.2/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.2/value=\ -o -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.3/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.3/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.3/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN.3/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.C.FLAGS} -mcpu\=${A.BUILD.MCU} -DF_CPU\=${A.BUILD.F_CPU} -D${A.SOFTWARE}\=${A.RUNTIME.IDE.VERSION} ${A.BUILD.EXTRA_FLAGS} ${A.COMPILER.LIBSAM.C.FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.1/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.C.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.C.CMD}" ${A.COMPILER.C.FLAGS} -mcpu\=${A.BUILD.MCU} -DF_CPU\=${A.BUILD.F_CPU} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} ${A.COMPILER.C.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.COMPILER.LIBSAM.C.FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.1/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.1/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPP.FLAGS} -mcpu\=${A.BUILD.MCU} -DF_CPU\=${A.BUILD.F_CPU} -D${A.SOFTWARE}\=${A.RUNTIME.IDE.VERSION} ${A.BUILD.EXTRA_FLAGS} ${A.COMPILER.LIBSAM.C.FLAGS} ${A.INCLUDES} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.2/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPP.FLAGS} -mcpu\=${A.BUILD.MCU} -DF_CPU\=${A.BUILD.F_CPU} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} ${A.COMPILER.CPP.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.COMPILER.LIBSAM.C.FLAGS} ${A.INCLUDES} +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.2/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.2/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.2/value=\ -o -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.3/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.3/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.3/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN.3/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPP.FLAGS} -mcpu\=${A.BUILD.MCU} -DF_CPU\=${A.BUILD.F_CPU} -D${A.SOFTWARE}\=${A.RUNTIME.IDE.VERSION} ${A.BUILD.EXTRA_FLAGS} ${A.COMPILER.LIBSAM.C.FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.EEP.PATTERN.1/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.CPP.O.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.CPP.CMD}" ${A.COMPILER.CPP.FLAGS} -mcpu\=${A.BUILD.MCU} -DF_CPU\=${A.BUILD.F_CPU} -DARDUINO\=${A.RUNTIME.IDE.VERSION} -DARDUINO_${A.BUILD.BOARD} -DARDUINO_ARCH_${A.BUILD.ARCH} ${A.COMPILER.CPP.EXTRA_FLAGS} ${A.BUILD.EXTRA_FLAGS} ${A.COMPILER.LIBSAM.C.FLAGS} ${A.INCLUDES} "${A.SOURCE_FILE}" -o "${A.OBJECT_FILE}" +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.EEP.PATTERN.1/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.EEP.PATTERN.1/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.EEP.PATTERN.1/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.EEP.PATTERN/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.EEP.PATTERN/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.EEP.PATTERN/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.EEP.PATTERN/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN.1/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN.1/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN.1/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.ELF2HEX.CMD}" ${A.COMPILER.ELF2HEX.FLAGS} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.ELF2HEX.CMD}" ${A.COMPILER.ELF2HEX.FLAGS} ${A.COMPILER.ELF2HEX.EXTRA_FLAGS} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.ELF2HEX.CMD}" ${A.COMPILER.ELF2HEX.FLAGS} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.PATTERN.1/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.OBJCOPY.HEX.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.ELF2HEX.CMD}" ${A.COMPILER.ELF2HEX.FLAGS} ${A.COMPILER.ELF2HEX.EXTRA_FLAGS} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.PATTERN.1/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.PATTERN.1/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.PATTERN.1/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" -A "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.PATTERN/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.PATTERN/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.PATTERN/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.PATTERN/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" -A "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.REGEX/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.REGEX/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.REGEX/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RECIPE.SIZE.REGEX/value=\\.text\\s+([0-9]+).* -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.PATH/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.PATH/value=C:/Arduino-1.5.4 -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.VERSION/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.PATH/value=C\:/Arduino-1.5.8 +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.VERSION/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.VERSION/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.VERSION/value=154 -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.SOFTWARE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.RUNTIME.IDE.VERSION/value=158 +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.SOFTWARE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.SOFTWARE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.SOFTWARE/value=ARDUINO -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.CMD.WINDOWS/delimiter=\; -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.CMD.WINDOWS/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.CMD.WINDOWS/value=bossac.exe -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.CMD/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.AVRDUDE.PROGRAM.PARAMS.QUIET/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.AVRDUDE.PROGRAM.PARAMS.QUIET/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.AVRDUDE.PROGRAM.PARAMS.QUIET/value=-q -q +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.CMD/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.CMD/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.CMD/value=bossac -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.CMD/value=bossac.exe +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.PATH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.PATH/value=${A.RUNTIME.IDE.PATH}/hardware/tools -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PARAMS.QUIET/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PARAMS.QUIET/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PARAMS.QUIET/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PARAMS.QUIET/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PARAMS.VERBOSE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PARAMS.VERBOSE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PARAMS.VERBOSE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PARAMS.VERBOSE/value=-i -d -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PATTERN/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PATTERN/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PATTERN/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.TOOLS.BOSSAC.UPLOAD.PATTERN/value="${A.PATH}/${A.CMD}" ${A.UPLOAD.VERBOSE} --port\=${A.SERIAL.PORT.FILE} -U ${A.UPLOAD.NATIVE_USB} -e -w -v -b "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.bin" -R -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.MAXIMUM_SIZE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.MAXIMUM_SIZE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.MAXIMUM_SIZE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.MAXIMUM_SIZE/value=524288 -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.NATIVE_USB/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.NATIVE_USB/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.NATIVE_USB/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.NATIVE_USB/value=true -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.PROTOCOL/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.PROTOCOL/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.PROTOCOL/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.PROTOCOL/value=sam-ba -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.TOOL/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.TOOL/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.TOOL/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.TOOL/value=bossac -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.USE_1200BPS_TOUCH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.USE_1200BPS_TOUCH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.USE_1200BPS_TOUCH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.USE_1200BPS_TOUCH/value=true -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.UPLOAD.WAIT_FOR_UPLOAD_PORT/value=true -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARDS_FILE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.VERSION/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.VERSION/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.VERSION/value=1.5.8 +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.VID.0/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.VID.0/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/A.VID.0/value=0x2341 +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARDS_FILE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARDS_FILE/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARDS_FILE/value=C:/Arduino-1.5.4/hardware/arduino/sam/boards.txt -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARD_NAME/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARDS_FILE/value=C\:\\Arduino-1.5.8\\hardware\\arduino\\sam\\boards.txt +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARD_NAME/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARD_NAME/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.BOARD_NAME/value=Arduino Due (Native USB Port) -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.COM_PORT/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.COM_PORT/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.COM_PORT/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.COM_PORT/value=/dev/ttyACM0 -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.C.COMPILE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.C.COMPILE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.C.COMPILE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.C.COMPILE/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.COMPILE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.COMPILE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.COMPILE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.COMPILE/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.CPP.COMPILE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.CPP.COMPILE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.CPP.COMPILE/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.EXTRA.CPP.COMPILE/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.PLATFORM_FILE/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.PLATFORM_FILE/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.PLATFORM_FILE/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.PLATFORM_FILE/value=C:/Arduino-1.5.4/hardware/arduino/sam/platform.txt -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.Processor/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.PLATFORM_FILE/value=C\:/Arduino-1.5.8/hardware/arduino/sam/platform.txt +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.Processor/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.Processor/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.Processor/value= -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.SIZE.SWITCH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.SIZE.SWITCH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.SIZE.SWITCH/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.SIZE.SWITCH/value=${A.RECIPE.SIZE.PATTERN} -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.SIZE_COMMAND/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.SIZE_COMMAND/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.SIZE_COMMAND/operation=replace environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.SIZE_COMMAND/value="${A.COMPILER.PATH}${A.COMPILER.SIZE.CMD}" --format\=avr --mcu\=${A.BUILD.MCU} "${A.BUILD.PATH}/${A.BUILD.PROJECT_NAME}.elf" -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/PATH/delimiter=\; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.WARNING_LEVEL/delimiter=; +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.WARNING_LEVEL/operation=replace +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/JANTJE.WARNING_LEVEL/value=\ -Wall +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/PATH/delimiter=; environment/project/it.baeyens.arduino.core.toolChain.release.674980254/PATH/operation=replace -environment/project/it.baeyens.arduino.core.toolChain.release.674980254/PATH/value=${A.COMPILER.PATH}${PathDelimiter}${A.BUILD.GENERIC.PATH}${PathDelimiter}${PATH} +environment/project/it.baeyens.arduino.core.toolChain.release.674980254/PATH/value=${A.COMPILER.PATH}${PathDelimiter}${A.BUILD.GENERIC.PATH}${PathDelimiter}${A.RUNTIME.IDE.PATH}/hardware/tools/avr/utils/bin${PathDelimiter}${PATH} environment/project/it.baeyens.arduino.core.toolChain.release.674980254/append=true environment/project/it.baeyens.arduino.core.toolChain.release.674980254/appendContributed=true indexer/indexAllFiles=true diff --git a/ArduinoCorePatches-1.5.7/sam/cores/arduino/Stream.h b/ArduinoCorePatches-1.5.7/sam/cores/arduino/Stream.h deleted file mode 100644 index 78971fa..0000000 --- a/ArduinoCorePatches-1.5.7/sam/cores/arduino/Stream.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - Stream.h - base class for character-based streams. - Copyright (c) 2010 David A. Mellis. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - parsing functions based on TextFinder library by Michael Margolis -*/ - -#ifndef Stream_h -#define Stream_h - -#include -#include "Print.h" - -// compatability macros for testing -/* -#define getInt() parseInt() -#define getInt(skipChar) parseInt(skipchar) -#define getFloat() parseFloat() -#define getFloat(skipChar) parseFloat(skipChar) -#define getString( pre_string, post_string, buffer, length) -readBytesBetween( pre_string, terminator, buffer, length) -*/ - -class Stream : public Print -{ - protected: - unsigned long _timeout; // number of milliseconds to wait for the next char before aborting timed read - unsigned long _startMillis; // used for timeout measurement - int timedRead(); // private method to read stream with timeout - int timedPeek(); // private method to peek stream with timeout - int peekNextDigit(); // returns the next numeric digit in the stream or -1 if timeout - - public: - virtual int available() = 0; - virtual int read() = 0; - virtual int peek() = 0; - virtual void flush() = 0; - virtual size_t canWrite() const { return 1; } // DC42 added - - Stream() {_timeout=1000;} - -// parsing methods - - void setTimeout(unsigned long timeout); // sets maximum milliseconds to wait for stream data, default is 1 second - - bool find(char *target); // reads data from the stream until the target string is found - bool find(uint8_t *target) { return find ((char *)target); } - // returns true if target string is found, false if timed out (see setTimeout) - - bool find(char *target, size_t length); // reads data from the stream until the target string of given length is found - bool find(uint8_t *target, size_t length) { return find ((char *)target, length); } - // returns true if target string is found, false if timed out - - bool findUntil(char *target, char *terminator); // as find but search ends if the terminator string is found - bool findUntil(uint8_t *target, char *terminator) { return findUntil((char *)target, terminator); } - - bool findUntil(char *target, size_t targetLen, char *terminate, size_t termLen); // as above but search ends if the terminate string is found - bool findUntil(uint8_t *target, size_t targetLen, char *terminate, size_t termLen) {return findUntil((char *)target, targetLen, terminate, termLen); } - - - long parseInt(); // returns the first valid (long) integer value from the current position. - // initial characters that are not digits (or the minus sign) are skipped - // integer is terminated by the first character that is not a digit. - - float parseFloat(); // float version of parseInt - - size_t readBytes( char *buffer, size_t length); // read chars from stream into buffer - size_t readBytes( uint8_t *buffer, size_t length) { return readBytes((char *)buffer, length); } - // terminates if length characters have been read or timeout (see setTimeout) - // returns the number of characters placed in the buffer (0 means no valid data found) - - size_t readBytesUntil( char terminator, char *buffer, size_t length); // as readBytes with terminator character - size_t readBytesUntil( char terminator, uint8_t *buffer, size_t length) { return readBytesUntil(terminator, (char *)buffer, length); } - // terminates if length characters have been read, timeout, or if the terminator character detected - // returns the number of characters placed in the buffer (0 means no valid data found) - - // Arduino String functions to be added here - String readString(); - String readStringUntil(char terminator); - - protected: - long parseInt(char skipChar); // as above but the given skipChar is ignored - // as above but the given skipChar is ignored - // this allows format characters (typically commas) in values to be ignored - - float parseFloat(char skipChar); // as above but the given skipChar is ignored -}; - -#endif diff --git a/ArduinoCorePatches-1.5.7/sam/cores/arduino/UARTClass.cpp b/ArduinoCorePatches-1.5.7/sam/cores/arduino/UARTClass.cpp deleted file mode 100644 index 5520a9f..0000000 --- a/ArduinoCorePatches-1.5.7/sam/cores/arduino/UARTClass.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/* - Copyright (c) 2011 Arduino. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include -#include -#include -#include "UARTClass.h" - -// Constructors //////////////////////////////////////////////////////////////// - -UARTClass::UARTClass( Uart* pUart, IRQn_Type dwIrq, uint32_t dwId, RingBuffer* pRx_buffer ) -{ - _rx_buffer = pRx_buffer ; - - _pUart=pUart ; - _dwIrq=dwIrq ; - _dwId=dwId ; -} - -// Public Methods ////////////////////////////////////////////////////////////// - -void UARTClass::begin( const uint32_t dwBaudRate ) -{ - // Configure PMC - pmc_enable_periph_clk( _dwId ) ; - - // Disable PDC channel - _pUart->UART_PTCR = UART_PTCR_RXTDIS | UART_PTCR_TXTDIS ; - - // Reset and disable receiver and transmitter - _pUart->UART_CR = UART_CR_RSTRX | UART_CR_RSTTX | UART_CR_RXDIS | UART_CR_TXDIS ; - - // Configure mode - _pUart->UART_MR = UART_MR_PAR_NO | UART_MR_CHMODE_NORMAL ; - - // Configure baudrate (asynchronous, no oversampling) - _pUart->UART_BRGR = (SystemCoreClock / dwBaudRate) >> 4 ; - - // Configure interrupts - _pUart->UART_IDR = 0xFFFFFFFF; - _pUart->UART_IER = UART_IER_RXRDY | UART_IER_OVRE | UART_IER_FRAME; - - // Enable UART interrupt in NVIC - NVIC_EnableIRQ(_dwIrq); - - // Enable receiver and transmitter - _pUart->UART_CR = UART_CR_RXEN | UART_CR_TXEN ; -} - -void UARTClass::end( void ) -{ - // clear any received data - _rx_buffer->_iHead = _rx_buffer->_iTail ; - - // Disable UART interrupt in NVIC - NVIC_DisableIRQ( _dwIrq ) ; - - // Wait for any outstanding data to be sent - flush(); - - pmc_disable_periph_clk( _dwId ) ; -} - -int UARTClass::available( void ) -{ - return (uint32_t)(SERIAL_BUFFER_SIZE + _rx_buffer->_iHead - _rx_buffer->_iTail) % SERIAL_BUFFER_SIZE ; -} - -int UARTClass::peek( void ) -{ - if ( _rx_buffer->_iHead == _rx_buffer->_iTail ) - return -1 ; - - return _rx_buffer->_aucBuffer[_rx_buffer->_iTail] ; -} - -int UARTClass::read( void ) -{ - // if the head isn't ahead of the tail, we don't have any characters - if ( _rx_buffer->_iHead == _rx_buffer->_iTail ) - return -1 ; - - uint8_t uc = _rx_buffer->_aucBuffer[_rx_buffer->_iTail] ; - _rx_buffer->_iTail = (unsigned int)(_rx_buffer->_iTail + 1) % SERIAL_BUFFER_SIZE ; - return uc ; -} - -void UARTClass::flush( void ) -{ - // Wait for transmission to complete - while ((_pUart->UART_SR & UART_SR_TXRDY) != UART_SR_TXRDY) - ; -} - -size_t UARTClass::write( const uint8_t uc_data ) -{ - // Check if the transmitter is ready - while ((_pUart->UART_SR & UART_SR_TXRDY) != UART_SR_TXRDY) - ; - - // Send character - _pUart->UART_THR = uc_data; - return 1; -} - -size_t UARTClass::canWrite( void ) const //***** DC42 added -{ - return (_pUart->UART_SR & UART_SR_TXRDY) ? 1 : 0; -} - -void UARTClass::IrqHandler( void ) -{ - uint32_t status = _pUart->UART_SR; - - // Did we receive data ? - if ((status & UART_SR_RXRDY) == UART_SR_RXRDY) - _rx_buffer->store_char(_pUart->UART_RHR); - - // Acknowledge errors - if ((status & UART_SR_OVRE) == UART_SR_OVRE || - (status & UART_SR_FRAME) == UART_SR_FRAME) - { - // TODO: error reporting outside ISR - _pUart->UART_CR |= UART_CR_RSTSTA; - } -} - diff --git a/ArduinoCorePatches-1.5.7/sam/cores/arduino/UARTClass.h b/ArduinoCorePatches-1.5.7/sam/cores/arduino/UARTClass.h deleted file mode 100644 index b36ca7c..0000000 --- a/ArduinoCorePatches-1.5.7/sam/cores/arduino/UARTClass.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright (c) 2011 Arduino. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _UART_CLASS_ -#define _UART_CLASS_ - -#include "HardwareSerial.h" -#include "RingBuffer.h" - -// Includes Atmel CMSIS -#include - -class UARTClass : public HardwareSerial -{ - protected: - RingBuffer *_rx_buffer ; - - protected: - Uart* _pUart ; - IRQn_Type _dwIrq ; - uint32_t _dwId ; - - public: - UARTClass( Uart* pUart, IRQn_Type dwIrq, uint32_t dwId, RingBuffer* pRx_buffer ) ; - - void begin( const uint32_t dwBaudRate ) ; - void end( void ) ; - int available( void ) ; - int peek( void ) ; - int read( void ) ; - void flush( void ) ; - size_t write( const uint8_t c ) ; - size_t canWrite( void ) const override; //***** DC42 added - - void IrqHandler( void ) ; - -#if defined __GNUC__ /* GCC CS3 */ - using Print::write ; // pull in write(str) and write(buf, size) from Print -#elif defined __ICCARM__ /* IAR Ewarm 5.41+ */ -// virtual void write( const char *str ) ; -// virtual void write( const uint8_t *buffer, size_t size ) ; -#endif - - operator bool() { return true; }; // UART always active -}; - -#endif // _UART_CLASS_ diff --git a/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/CDC.cpp b/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/CDC.cpp deleted file mode 100644 index 74330b9..0000000 --- a/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/CDC.cpp +++ /dev/null @@ -1,309 +0,0 @@ -/* Copyright (c) 2011, Peter Barrett -** -** Permission to use, copy, modify, and/or distribute this software for -** any purpose with or without fee is hereby granted, provided that the -** above copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR -** BE LIABLE FOR ANY SPECIAL, DIRECT, 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 THIS -** SOFTWARE. -*/ - -#include "Arduino.h" -#include "USBAPI.h" -#include "Reset.h" - -#ifdef CDC_ENABLED - -#define CDC_SERIAL_BUFFER_SIZE 512 - -/* For information purpose only since RTS is not always handled by the terminal application */ -#define CDC_LINESTATE_DTR 0x01 // Data Terminal Ready -#define CDC_LINESTATE_RTS 0x02 // Ready to Send - -#define CDC_LINESTATE_READY (CDC_LINESTATE_RTS | CDC_LINESTATE_DTR) - -struct ring_buffer -{ - uint8_t buffer[CDC_SERIAL_BUFFER_SIZE]; - volatile uint32_t head; - volatile uint32_t tail; -}; - -ring_buffer cdc_rx_buffer = { { 0 }, 0, 0}; - -typedef struct -{ - uint32_t dwDTERate; - uint8_t bCharFormat; - uint8_t bParityType; - uint8_t bDataBits; - uint8_t lineState; -} LineInfo; - -static volatile LineInfo _usbLineInfo = { - 57600, // dWDTERate - 0x00, // bCharFormat - 0x00, // bParityType - 0x08, // bDataBits - 0x00 // lineState -}; - -_Pragma("pack(1)") -static const CDCDescriptor _cdcInterface = -{ - D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,1), - - // CDC communication interface - D_INTERFACE(CDC_ACM_INTERFACE,1,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,0), - D_CDCCS(CDC_HEADER,0x10,0x01), // Header (1.10 bcd) - D_CDCCS(CDC_CALL_MANAGEMENT,1,1), // Device handles call management (not) - D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT,6), // SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported - D_CDCCS(CDC_UNION,CDC_ACM_INTERFACE,CDC_DATA_INTERFACE), // Communication interface is master, data interface is slave 0 - D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_ACM),USB_ENDPOINT_TYPE_INTERRUPT,0x10, 0x10), - - // CDC data interface - D_INTERFACE(CDC_DATA_INTERFACE,2,CDC_DATA_INTERFACE_CLASS,0,0), - D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,512,0), - D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,512,0) -}; -static const CDCDescriptor _cdcOtherInterface = -{ - D_IAD(0,2,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,1), - - // CDC communication interface - D_INTERFACE(CDC_ACM_INTERFACE,1,CDC_COMMUNICATION_INTERFACE_CLASS,CDC_ABSTRACT_CONTROL_MODEL,0), - D_CDCCS(CDC_HEADER,0x10,0x01), // Header (1.10 bcd) - D_CDCCS(CDC_CALL_MANAGEMENT,1,1), // Device handles call management (not) - D_CDCCS4(CDC_ABSTRACT_CONTROL_MANAGEMENT,6), // SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE supported - D_CDCCS(CDC_UNION,CDC_ACM_INTERFACE,CDC_DATA_INTERFACE), // Communication interface is master, data interface is slave 0 - D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_ACM),USB_ENDPOINT_TYPE_INTERRUPT,0x10, 0x10), - - // CDC data interface - D_INTERFACE(CDC_DATA_INTERFACE,2,CDC_DATA_INTERFACE_CLASS,0,0), - D_ENDPOINT(USB_ENDPOINT_OUT(CDC_ENDPOINT_OUT),USB_ENDPOINT_TYPE_BULK,64,0), - D_ENDPOINT(USB_ENDPOINT_IN (CDC_ENDPOINT_IN ),USB_ENDPOINT_TYPE_BULK,64,0) -}; -_Pragma("pack()") - -int WEAK CDC_GetInterface(uint8_t* interfaceNum) -{ - interfaceNum[0] += 2; // uses 2 - return USBD_SendControl(0,&_cdcInterface,sizeof(_cdcInterface)); -} - -int WEAK CDC_GetOtherInterface(uint8_t* interfaceNum) -{ - interfaceNum[0] += 2; // uses 2 - return USBD_SendControl(0,&_cdcOtherInterface,sizeof(_cdcOtherInterface)); -} - -bool WEAK CDC_Setup(Setup& setup) -{ - uint8_t r = setup.bRequest; - uint8_t requestType = setup.bmRequestType; - - if (REQUEST_DEVICETOHOST_CLASS_INTERFACE == requestType) - { - if (CDC_GET_LINE_CODING == r) - { - USBD_SendControl(0,(void*)&_usbLineInfo,7); - return true; - } - } - - if (REQUEST_HOSTTODEVICE_CLASS_INTERFACE == requestType) - { - if (CDC_SET_LINE_CODING == r) - { - USBD_RecvControl((void*)&_usbLineInfo,7); - return true; - } - - if (CDC_SET_CONTROL_LINE_STATE == r) - { - _usbLineInfo.lineState = setup.wValueL; - // auto-reset into the bootloader is triggered when the port, already - // open at 1200 bps, is closed. - if (1200 == _usbLineInfo.dwDTERate) - { - // We check DTR state to determine if host port is open (bit 0 of lineState). - if ((_usbLineInfo.lineState & 0x01) == 0) - initiateReset(250); - else - cancelReset(); - } - return true; - } - } - return false; -} - -int _serialPeek = -1; -void Serial_::begin(uint32_t baud_count) -{ - // suppress "unused parameter" warning - (void)baud_count; -} - -void Serial_::begin(uint32_t baud_count, uint8_t config) -{ - // suppress "unused parameter" warning - (void)baud_count; - (void)config; -} - -void Serial_::end(void) -{ -} - -void Serial_::accept(void) -{ - static uint32_t guard = 0; - - // synchronized access to guard - do { - if (__LDREXW(&guard) != 0) { - __CLREX(); - return; // busy - } - } while (__STREXW(1, &guard) != 0); // retry until write succeed - - ring_buffer *buffer = &cdc_rx_buffer; - uint32_t i = (uint32_t)(buffer->head+1) % CDC_SERIAL_BUFFER_SIZE; - - // if we should be storing the received character into the location - // just before the tail (meaning that the head would advance to the - // current location of the tail), we're about to overflow the buffer - // and so we don't write the character or advance the head. - while (i != buffer->tail) { - uint32_t c; - if (!USBD_Available(CDC_RX)) { - udd_ack_fifocon(CDC_RX); - break; - } - c = USBD_Recv(CDC_RX); - // c = UDD_Recv8(CDC_RX & 0xF); - buffer->buffer[buffer->head] = c; - buffer->head = i; - - i = (i + 1) % CDC_SERIAL_BUFFER_SIZE; - } - - // release the guard - guard = 0; -} - -int Serial_::available(void) -{ - ring_buffer *buffer = &cdc_rx_buffer; - return (unsigned int)(CDC_SERIAL_BUFFER_SIZE + buffer->head - buffer->tail) % CDC_SERIAL_BUFFER_SIZE; -} - -int Serial_::peek(void) -{ - ring_buffer *buffer = &cdc_rx_buffer; - - if (buffer->head == buffer->tail) - { - return -1; - } - else - { - return buffer->buffer[buffer->tail]; - } -} - -int Serial_::read(void) -{ - ring_buffer *buffer = &cdc_rx_buffer; - - // if the head isn't ahead of the tail, we don't have any characters - if (buffer->head == buffer->tail) - { - return -1; - } - else - { - unsigned char c = buffer->buffer[buffer->tail]; - buffer->tail = (unsigned int)(buffer->tail + 1) % CDC_SERIAL_BUFFER_SIZE; - if (USBD_Available(CDC_RX)) - accept(); - return c; - } -} - -void Serial_::flush(void) -{ - USBD_Flush(CDC_TX); -} - -size_t Serial_::write(const uint8_t *buffer, size_t size) -{ - /* only try to send bytes if the high-level CDC connection itself - is open (not just the pipe) - the OS should set lineState when the port - is opened and clear lineState when the port is closed. - bytes sent before the user opens the connection or after - the connection is closed are lost - just like with a UART. */ - - // TODO - ZE - check behavior on different OSes and test what happens if an - // open connection isn't broken cleanly (cable is yanked out, host dies - // or locks up, or host virtual serial port hangs) - if (_usbLineInfo.lineState > 0) - { - int r = USBD_Send(CDC_TX, buffer, size); - - if (r > 0) - { - return r; - } else - { - setWriteError(); - return 0; - } - } - setWriteError(); - return 0; -} - -// Function added by DC42 so we can find out how much data we can write without blocking -size_t Serial_::canWrite() const { - return USBD_SendSpace(CDC_TX); -} - -size_t Serial_::write(uint8_t c) { - return write(&c, 1); -} - -// This operator is a convenient way for a sketch to check whether the -// port has actually been configured and opened by the host (as opposed -// to just being connected to the host). It can be used, for example, in -// setup() before printing to ensure that an application on the host is -// actually ready to receive and display the data. -// We add a short delay before returning to fix a bug observed by Federico -// where the port is configured (lineState != 0) but not quite opened. -Serial_::operator bool() -{ - // this is here to avoid spurious opening after upload - if (millis() < 500) - return false; - - bool result = false; - - if (_usbLineInfo.lineState > 0) - { - result = true; - } - - delay(10); - return result; -} - -Serial_ SerialUSB; - -#endif diff --git a/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/USBAPI.h b/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/USBAPI.h deleted file mode 100644 index 4630a55..0000000 --- a/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/USBAPI.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - Copyright (c) 2012 Arduino. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef __USBAPI__ -#define __USBAPI__ - -#if defined __cplusplus - -#include "RingBuffer.h" - -//================================================================================ -//================================================================================ -// USB - -class USBDevice_ -{ -public: - USBDevice_(); - bool configured(); - - bool attach(); - bool detach(); // Serial port goes down too... - void poll(); -}; -extern USBDevice_ USBDevice; - -//================================================================================ -//================================================================================ -// Serial over CDC (Serial1 is the physical port) - -class Serial_ : public Stream -{ -private: - RingBuffer *_cdc_rx_buffer; -public: - void begin(uint32_t baud_count); - void begin(uint32_t baud_count, uint8_t config); - void end(void); - - virtual int available(void); - virtual void accept(void); - virtual int peek(void); - virtual int read(void); - virtual void flush(void); - virtual size_t write(uint8_t); - virtual size_t write(const uint8_t *buffer, size_t size); - size_t canWrite() const /*override*/; // Function added by DC42 so that we can tell how many characters we can write without blocking - using Print::write; // pull in write(str) from Print - operator bool(); -}; -extern Serial_ SerialUSB; - -//================================================================================ -//================================================================================ -// Mouse - -#define MOUSE_LEFT 1 -#define MOUSE_RIGHT 2 -#define MOUSE_MIDDLE 4 -#define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE) - -class Mouse_ -{ -private: - uint8_t _buttons; - void buttons(uint8_t b); -public: - Mouse_(void); - void begin(void); - void end(void); - void click(uint8_t b = MOUSE_LEFT); - void move(signed char x, signed char y, signed char wheel = 0); - void press(uint8_t b = MOUSE_LEFT); // press LEFT by default - void release(uint8_t b = MOUSE_LEFT); // release LEFT by default - bool isPressed(uint8_t b = MOUSE_ALL); // check all buttons by default -}; -extern Mouse_ Mouse; - -//================================================================================ -//================================================================================ -// Keyboard - -#define KEY_LEFT_CTRL 0x80 -#define KEY_LEFT_SHIFT 0x81 -#define KEY_LEFT_ALT 0x82 -#define KEY_LEFT_GUI 0x83 -#define KEY_RIGHT_CTRL 0x84 -#define KEY_RIGHT_SHIFT 0x85 -#define KEY_RIGHT_ALT 0x86 -#define KEY_RIGHT_GUI 0x87 - -#define KEY_UP_ARROW 0xDA -#define KEY_DOWN_ARROW 0xD9 -#define KEY_LEFT_ARROW 0xD8 -#define KEY_RIGHT_ARROW 0xD7 -#define KEY_BACKSPACE 0xB2 -#define KEY_TAB 0xB3 -#define KEY_RETURN 0xB0 -#define KEY_ESC 0xB1 -#define KEY_INSERT 0xD1 -#define KEY_DELETE 0xD4 -#define KEY_PAGE_UP 0xD3 -#define KEY_PAGE_DOWN 0xD6 -#define KEY_HOME 0xD2 -#define KEY_END 0xD5 -#define KEY_CAPS_LOCK 0xC1 -#define KEY_F1 0xC2 -#define KEY_F2 0xC3 -#define KEY_F3 0xC4 -#define KEY_F4 0xC5 -#define KEY_F5 0xC6 -#define KEY_F6 0xC7 -#define KEY_F7 0xC8 -#define KEY_F8 0xC9 -#define KEY_F9 0xCA -#define KEY_F10 0xCB -#define KEY_F11 0xCC -#define KEY_F12 0xCD - -// Low level key report: up to 6 keys and shift, ctrl etc at once -typedef struct -{ - uint8_t modifiers; - uint8_t reserved; - uint8_t keys[6]; -} KeyReport; - -class Keyboard_ : public Print -{ -private: - KeyReport _keyReport; - void sendReport(KeyReport* keys); -public: - Keyboard_(void); - void begin(void); - void end(void); - virtual size_t write(uint8_t k); - virtual size_t press(uint8_t k); - virtual size_t release(uint8_t k); - virtual void releaseAll(void); -}; -extern Keyboard_ Keyboard; - -//================================================================================ -//================================================================================ -// Low level API - -typedef struct -{ - uint8_t bmRequestType; - uint8_t bRequest; - uint8_t wValueL; - uint8_t wValueH; - uint16_t wIndex; - uint16_t wLength; -} Setup; - -//================================================================================ -//================================================================================ -// HID 'Driver' - -int HID_GetInterface(uint8_t* interfaceNum); -int HID_GetDescriptor(int i); -bool HID_Setup(Setup& setup); -void HID_SendReport(uint8_t id, const void* data, uint32_t len); - -//================================================================================ -//================================================================================ -// MSC 'Driver' - -int MSC_GetInterface(uint8_t* interfaceNum); -int MSC_GetDescriptor(int i); -bool MSC_Setup(Setup& setup); -bool MSC_Data(uint8_t rx,uint8_t tx); - -//================================================================================ -//================================================================================ -// CSC 'Driver' - -int CDC_GetInterface(uint8_t* interfaceNum); -int CDC_GetOtherInterface(uint8_t* interfaceNum); -int CDC_GetDescriptor(int i); -bool CDC_Setup(Setup& setup); - -//================================================================================ -//================================================================================ - -#define TRANSFER_RELEASE 0x40 -#define TRANSFER_ZERO 0x20 - -void USBD_InitControl(int end); -int USBD_SendControl(uint8_t flags, const void* d, uint32_t len); -int USBD_RecvControl(void* d, uint32_t len); -int USBD_SendInterfaces(void); -bool USBD_ClassInterfaceRequest(Setup& setup); - - -uint32_t USBD_Available(uint32_t ep); -uint32_t USBD_SendSpace(uint32_t ep); -uint32_t USBD_Send(uint32_t ep, const void* d, uint32_t len); -uint32_t USBD_Recv(uint32_t ep, void* data, uint32_t len); // non-blocking -uint32_t USBD_Recv(uint32_t ep); // non-blocking -void USBD_Flush(uint32_t ep); -uint32_t USBD_Connected(void); - -#endif -#endif diff --git a/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/USBCore.cpp b/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/USBCore.cpp deleted file mode 100644 index 5c3120b..0000000 --- a/ArduinoCorePatches-1.5.7/sam/cores/arduino/USB/USBCore.cpp +++ /dev/null @@ -1,884 +0,0 @@ -// Copyright (c) 2010, Peter Barrett -/* -** Permission to use, copy, modify, and/or distribute this software for -** any purpose with or without fee is hereby granted, provided that the -** above copyright notice and this permission notice appear in all copies. -** -** THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL -** WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -** WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR -** BE LIABLE FOR ANY SPECIAL, DIRECT, 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 THIS -** SOFTWARE. -*/ - -#include "Arduino.h" -#include "USBAPI.h" -#include "Reset.h" -#include - -//#define TRACE_CORE(x) x -#define TRACE_CORE(x) - -static const uint32_t EndPoints[] = -{ - EP_TYPE_CONTROL, - -#ifdef CDC_ENABLED - EP_TYPE_INTERRUPT_IN, // CDC_ENDPOINT_ACM - EP_TYPE_BULK_OUT, // CDC_ENDPOINT_OUT - EP_TYPE_BULK_IN, // CDC_ENDPOINT_IN -#endif - -#ifdef HID_ENABLED - EP_TYPE_INTERRUPT_IN_HID // HID_ENDPOINT_INT -#endif -}; - -/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */ -#define TX_RX_LED_PULSE_MS 100 -volatile uint8_t TxLEDPulse; /**< Milliseconds remaining for data Tx LED pulse */ -volatile uint8_t RxLEDPulse; /**< Milliseconds remaining for data Rx LED pulse */ -static char isRemoteWakeUpEnabled = 0; -static char isEndpointHalt = 0; -//================================================================== -//================================================================== - -extern const uint16_t STRING_LANGUAGE[]; -extern const uint8_t STRING_PRODUCT[]; -extern const uint8_t STRING_MANUFACTURER[]; -extern const DeviceDescriptor USB_DeviceDescriptor; -extern const DeviceDescriptor USB_DeviceDescriptorA; - -const uint16_t STRING_LANGUAGE[2] = { - (3<<8) | (2+2), - 0x0409 // English -}; - -#ifndef USB_PRODUCT -// Use a hardcoded product name if none is provided -#if USB_PID == USB_PID_DUE -#define USB_PRODUCT "Arduino Due" -#else -#define USB_PRODUCT "USB IO Board" -#endif -#endif - -const uint8_t STRING_PRODUCT[] = USB_PRODUCT; - -#if USB_VID == 0x2341 -# if defined(USB_MANUFACTURER) -# undef USB_MANUFACTURER -# endif -# define USB_MANUFACTURER "Arduino LLC" -#elif !defined(USB_MANUFACTURER) -// Fall through to unknown if no manufacturer name was provided in a macro -# define USB_MANUFACTURER "Unknown" -#endif - -const uint8_t STRING_MANUFACTURER[12] = USB_MANUFACTURER; - -#ifdef CDC_ENABLED -#define DEVICE_CLASS 0x02 -#else -#define DEVICE_CLASS 0x00 -#endif - -// DEVICE DESCRIPTOR -const DeviceDescriptor USB_DeviceDescriptor = - D_DEVICE(0x00,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1); - -const DeviceDescriptor USB_DeviceDescriptorA = - D_DEVICE(DEVICE_CLASS,0x00,0x00,64,USB_VID,USB_PID,0x100,IMANUFACTURER,IPRODUCT,0,1); - -const DeviceDescriptor USB_DeviceQualifier = - D_QUALIFIER(0x00,0x00,0x00,64,1); - -//! 7.1.20 Test Mode Support -static const unsigned char test_packet_buffer[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // JKJKJKJK * 9 - 0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA, // JJKKJJKK * 8 - 0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE,0xEE, // JJJJKKKK * 8 - 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, // JJJJJJJKKKKKKK * 8 - 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD, // JJJJJJJK * 8 - 0xFC,0x7E,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0x7E // {JKKKKKKK * 10}, JK -}; - -//================================================================== -//================================================================== - -volatile uint32_t _usbConfiguration = 0; -volatile uint32_t _usbInitialized = 0; -uint32_t _usbSetInterface = 0; -uint32_t _cdcComposite = 0; - -//================================================================== -//================================================================== - -#define USB_RECV_TIMEOUT -class LockEP -{ - irqflags_t flags; -public: - LockEP(uint32_t ep) : flags(cpu_irq_save()) - { - } - ~LockEP() - { - cpu_irq_restore(flags); - } -}; - -// Number of bytes, assumes a rx endpoint -uint32_t USBD_Available(uint32_t ep) -{ - LockEP lock(ep); - return UDD_FifoByteCount(ep & 0xF); -} - -// Non Blocking receive -// Return number of bytes read -uint32_t USBD_Recv(uint32_t ep, void* d, uint32_t len) -{ - if (!_usbConfiguration) - return -1; - - LockEP lock(ep); - uint32_t n = UDD_FifoByteCount(ep & 0xF); - len = min(n,len); - n = len; - uint8_t* dst = (uint8_t*)d; - while (n--) - *dst++ = UDD_Recv8(ep & 0xF); - if (len && !UDD_FifoByteCount(ep & 0xF)) // release empty buffer - UDD_ReleaseRX(ep & 0xF); - - return len; -} - -// Recv 1 byte if ready -uint32_t USBD_Recv(uint32_t ep) -{ - uint8_t c; - if (USBD_Recv(ep & 0xF, &c, 1) != 1) - return -1; - else - return c; -} - -// DC42 uncommented and modified this function to support the cabWrite function in file CDC.cpp -uint32_t USBD_SendSpace(uint32_t ep) -{ - if (!UDD_ReadWriteAllowed(ep & 0xF)) - { - //printf("pb "); // UOTGHS->UOTGHS_DEVEPTISR[%d]=0x%X\n\r", ep, UOTGHS->UOTGHS_DEVEPTISR[ep]); - return 0; - } - - return ((ep==0) ? EP0_SIZE : EPX_SIZE) - UDD_FifoByteCount(ep & 0xF); -} - -// Blocking Send of data to an endpoint -uint32_t USBD_Send(uint32_t ep, const void* d, uint32_t len) -{ - uint32_t n; - int r = len; - const uint8_t* data = (const uint8_t*)d; - - if (!_usbConfiguration) - { - TRACE_CORE(printf("pb conf\n\r");) - return -1; - } - - while (len) - { - if(ep==0) n = EP0_SIZE; - else n = EPX_SIZE; - if (n > len) - n = len; - len -= n; - - UDD_Send(ep & 0xF, data, n); - data += n; - } - //TXLED1; // light the TX LED - //TxLEDPulse = TX_RX_LED_PULSE_MS; - return r; -} - -int _cmark; -int _cend; - -void USBD_InitControl(int end) -{ - _cmark = 0; - _cend = end; -} - -// Clipped by _cmark/_cend -int USBD_SendControl(uint8_t flags, const void* d, uint32_t len) -{ - const uint8_t* data = (const uint8_t*)d; - uint32_t length = len; - uint32_t sent = 0; - uint32_t pos = 0; - - TRACE_CORE(printf("=> USBD_SendControl TOTAL len=%lu\r\n", len);) - - if (_cmark < _cend) - { - while (len > 0) - { - sent = UDD_Send(EP0, data + pos, len); - TRACE_CORE(printf("=> USBD_SendControl sent=%lu\r\n", sent);) - pos += sent; - len -= sent; - } - } - - _cmark += length; - - return length; -} - -// Send a USB descriptor string. The string is stored as a -// plain ASCII string but is sent out as UTF-16 with the -// correct 2-byte prefix -static bool USB_SendStringDescriptor(const uint8_t *string, int wLength) { - uint16_t buff[64]; - int l = 1; - wLength-=2; - while (*string && wLength>0) { - buff[l++] = (uint8_t)(*string++); - wLength-=2; - } - buff[0] = (3<<8) | (l*2); - return USBD_SendControl(0, (uint8_t*)buff, l*2); -} - -// Does not timeout or cross fifo boundaries -// Will only work for transfers <= 64 bytes -// TODO -int USBD_RecvControl(void* d, uint32_t len) -{ - UDD_WaitOUT(); - UDD_Recv(EP0, (uint8_t*)d, len); - UDD_ClearOUT(); - - return len; -} - -// Handle CLASS_INTERFACE requests -bool USBD_ClassInterfaceRequest(Setup& setup) -{ - uint8_t i = setup.wIndex; - - TRACE_CORE(printf("=> USBD_ClassInterfaceRequest\r\n");) - -#ifdef CDC_ENABLED - if (CDC_ACM_INTERFACE == i) - { - return CDC_Setup(setup); - } -#endif - -#ifdef HID_ENABLED - if (HID_INTERFACE == i) - { - return HID_Setup(setup); - } -#endif - - return false; -} - -int USBD_SendInterfaces(void) -{ - int total = 0; - uint8_t interfaces = 0; - -#ifdef CDC_ENABLED - total = CDC_GetInterface(&interfaces); -#endif - -#ifdef HID_ENABLED - total += HID_GetInterface(&interfaces); -#endif - - total = total; // Get rid of compiler warning - TRACE_CORE(printf("=> USBD_SendInterfaces, total=%d interfaces=%d\r\n", total, interfaces);) - return interfaces; -} - -int USBD_SendOtherInterfaces(void) -{ - int total = 0; - uint8_t interfaces = 0; - -#ifdef CDC_ENABLED - total = CDC_GetOtherInterface(&interfaces); -#endif - -#ifdef HID_ENABLED - total += HID_GetInterface(&interfaces); -#endif - - total = total; // Get rid of compiler warning - TRACE_CORE(printf("=> USBD_SendInterfaces, total=%d interfaces=%d\r\n", total, interfaces);) - return interfaces; -} - -// Construct a dynamic configuration descriptor -// This really needs dynamic endpoint allocation etc -// TODO -static bool USBD_SendConfiguration(int maxlen) -{ - // Count and measure interfaces - USBD_InitControl(0); - //TRACE_CORE(printf("=> USBD_SendConfiguration _cmark1=%d\r\n", _cmark);) - int interfaces = USBD_SendInterfaces(); - //TRACE_CORE(printf("=> USBD_SendConfiguration _cmark2=%d\r\n", _cmark);) - //TRACE_CORE(printf("=> USBD_SendConfiguration sizeof=%d\r\n", sizeof(ConfigDescriptor));) - -_Pragma("pack(1)") - ConfigDescriptor config = D_CONFIG(_cmark + sizeof(ConfigDescriptor),interfaces); -_Pragma("pack()") - //TRACE_CORE(printf("=> USBD_SendConfiguration clen=%d\r\n", config.clen);) - - //TRACE_CORE(printf("=> USBD_SendConfiguration maxlen=%d\r\n", maxlen);) - - // Now send them - USBD_InitControl(maxlen); - USBD_SendControl(0,&config,sizeof(ConfigDescriptor)); - USBD_SendInterfaces(); - return true; -} - -static bool USBD_SendOtherConfiguration(int maxlen) -{ - // Count and measure interfaces - USBD_InitControl(0); - //TRACE_CORE(printf("=> USBD_SendConfiguration _cmark1=%d\r\n", _cmark);) - int interfaces = USBD_SendOtherInterfaces(); - //TRACE_CORE(printf("=> USBD_SendConfiguration _cmark2=%d\r\n", _cmark);) - //TRACE_CORE(printf("=> USBD_SendConfiguration sizeof=%d\r\n", sizeof(ConfigDescriptor));) - -_Pragma("pack(1)") - ConfigDescriptor config = D_OTHERCONFIG(_cmark + sizeof(ConfigDescriptor),interfaces); -_Pragma("pack()") - //TRACE_CORE(printf("=> USBD_SendConfiguration clen=%d\r\n", config.clen);) - - //TRACE_CORE(printf("=> USBD_SendConfiguration maxlen=%d\r\n", maxlen);) - - // Now send them - USBD_InitControl(maxlen); - USBD_SendControl(0,&config,sizeof(ConfigDescriptor)); - USBD_SendOtherInterfaces(); - return true; -} - -static bool USBD_SendDescriptor(Setup& setup) -{ - uint8_t t = setup.wValueH; - uint8_t desc_length = 0; - const uint8_t* desc_addr = 0; - - if (USB_CONFIGURATION_DESCRIPTOR_TYPE == t) - { - TRACE_CORE(printf("=> USBD_SendDescriptor : USB_CONFIGURATION_DESCRIPTOR_TYPE length=%d\r\n", setup.wLength);) - return USBD_SendConfiguration(setup.wLength); - } - - USBD_InitControl(setup.wLength); -#ifdef HID_ENABLED - if (HID_REPORT_DESCRIPTOR_TYPE == t) - { - TRACE_CORE(puts("=> USBD_SendDescriptor : HID_REPORT_DESCRIPTOR_TYPE\r\n");) - return HID_GetDescriptor(t); - } -#endif - - if (USB_DEVICE_DESCRIPTOR_TYPE == t) - { - TRACE_CORE(puts("=> USBD_SendDescriptor : USB_DEVICE_DESCRIPTOR_TYPE\r\n");) - if (setup.wLength == 8) - { - _cdcComposite = 1; - } - desc_addr = _cdcComposite ? (const uint8_t*)&USB_DeviceDescriptorA : (const uint8_t*)&USB_DeviceDescriptor; - if( *desc_addr > setup.wLength ) { - desc_length = setup.wLength; - } - } - else if (USB_STRING_DESCRIPTOR_TYPE == t) - { - TRACE_CORE(puts("=> USBD_SendDescriptor : USB_STRING_DESCRIPTOR_TYPE\r\n");) - if (setup.wValueL == 0) { - desc_addr = (const uint8_t*)&STRING_LANGUAGE; - } - else if (setup.wValueL == IPRODUCT) { - return USB_SendStringDescriptor(STRING_PRODUCT, setup.wLength); - } - else if (setup.wValueL == IMANUFACTURER) { - return USB_SendStringDescriptor(STRING_MANUFACTURER, setup.wLength); - } - else { - return false; - } - if( *desc_addr > setup.wLength ) { - desc_length = setup.wLength; - } - } - else if (USB_DEVICE_QUALIFIER == t) - { - // Device qualifier descriptor requested - desc_addr = (const uint8_t*)&USB_DeviceQualifier; - if( *desc_addr > setup.wLength ) { - desc_length = setup.wLength; - } - } - else if (USB_OTHER_SPEED_CONFIGURATION == t) - { - // Other configuration descriptor requested - return USBD_SendOtherConfiguration(setup.wLength); - } - else - { - //printf("Device ERROR"); - } - - if (desc_addr == 0) - { - return false; - } - - if (desc_length == 0) - { - desc_length = *desc_addr; - } - - TRACE_CORE(printf("=> USBD_SendDescriptor : desc_addr=%p desc_length=%d\r\n", desc_addr, desc_length);) - USBD_SendControl(0, desc_addr, desc_length); - - return true; -} - - -static void USB_SendZlp( void ) -{ - while( UOTGHS_DEVEPTISR_TXINI != (UOTGHS->UOTGHS_DEVEPTISR[0] & UOTGHS_DEVEPTISR_TXINI ) ) - { - if((UOTGHS->UOTGHS_DEVISR & UOTGHS_DEVISR_SUSP) == UOTGHS_DEVISR_SUSP) - { - return; - } - } - UOTGHS->UOTGHS_DEVEPTICR[0] = UOTGHS_DEVEPTICR_TXINIC; -} - - -static void Test_Mode_Support( uint8_t wIndex ) -{ - uint8_t i; - uint8_t *ptr_dest = (uint8_t *) &udd_get_endpoint_fifo_access8(2); - - switch( wIndex ) - { - case 4: - //Test mode Test_Packet: - //Upon command, a port must repetitively transmit the following test packet until - //the exit action is taken. This enables the testing of rise and fall times, eye - //patterns, jitter, and any other dynamic waveform specifications. - //The test packet is made up by concatenating the following strings. - //(Note: For J/K NRZI data, and for NRZ data, the bit on the left is the first one - //transmitted. "S" indicates that a bit stuff occurs, which inserts an "extra" NRZI data bit. - //"* N" is used to indicate N occurrences of a string of bits or symbols.) - //A port in Test_Packet mode must send this packet repetitively. The inter-packet timing - //must be no less than the minimum allowable inter-packet gap as defined in Section 7.1.18 and - //no greater than 125 us. - - // Send ZLP - USB_SendZlp(); - - UOTGHS->UOTGHS_DEVDMA[0].UOTGHS_DEVDMACONTROL = 0; // raz - UOTGHS->UOTGHS_DEVDMA[1].UOTGHS_DEVDMACONTROL = 0; // raz - - // Configure endpoint 2, 64 bytes, direction IN, type BULK, 1 bank - UOTGHS->UOTGHS_DEVEPTCFG[2] = UOTGHS_DEVEPTCFG_EPSIZE_64_BYTE - | UOTGHS_DEVEPTCFG_EPDIR_IN - | UOTGHS_DEVEPTCFG_EPTYPE_BLK - | UOTGHS_DEVEPTCFG_EPBK_1_BANK; - // Check if the configuration is ok - UOTGHS->UOTGHS_DEVEPTCFG[2] |= UOTGHS_DEVEPTCFG_ALLOC; - while((UOTGHS->UOTGHS_DEVEPTISR[2]&UOTGHS_DEVEPTISR_CFGOK)==0) {} - UOTGHS->UOTGHS_DEVEPT |= UOTGHS_DEVEPT_EPEN2; - // Write FIFO - for( i=0; iUOTGHS_DEVCTRL |= UOTGHS_DEVCTRL_TSTPCKT; - // Send packet - UOTGHS->UOTGHS_DEVEPTICR[2] = UOTGHS_DEVEPTICR_TXINIC; - UOTGHS->UOTGHS_DEVEPTIDR[2] = UOTGHS_DEVEPTIDR_FIFOCONC; - for(;;); -// break; - - case 1: - //Test mode Test_J: - //Upon command, a port's transceiver must enter the high-speed J state and remain in that - //state until the exit action is taken. This enables the testing of the high output drive - //level on the D+ line. - // Send a ZLP - USB_SendZlp(); - UOTGHS->UOTGHS_DEVCTRL |= UOTGHS_DEVCTRL_TSTJ; - for(;;); -// break; - - case 2: - //Test mode Test_K: - //Upon command, a port's transceiver must enter the high-speed K state and remain in - //that state until the exit action is taken. This enables the testing of the high output drive - //level on the D- line. - // Send a ZLP - USB_SendZlp(); - UOTGHS->UOTGHS_DEVCTRL |= UOTGHS_DEVCTRL_TSTK; - for(;;); -// break; - - case 3: - //Test mode Test_SE0_NAK: - //Upon command, a port's transceiver must enter the high-speed receive mode - //and remain in that mode until the exit action is taken. This enables the testing - //of output impedance, low level output voltage, and loading characteristics. - //In addition, while in this mode, upstream facing ports (and only upstream facing ports) - //must respond to any IN token packet with a NAK handshake (only if the packet CRC is - //determined to be correct) within the normal allowed device response time. This enables testing of - //the device squelch level circuitry and, additionally, provides a general purpose stimulus/response - //test for basic functional testing. - - // Send a ZLP - USB_SendZlp(); - UOTGHS->UOTGHS_DEVIDR = UOTGHS_DEVIDR_SUSPEC - | UOTGHS_DEVIDR_MSOFEC - | UOTGHS_DEVIDR_SOFEC - | UOTGHS_DEVIDR_EORSTEC - | UOTGHS_DEVIDR_WAKEUPEC - | UOTGHS_DEVIDR_EORSMEC - | UOTGHS_DEVIDR_UPRSMEC - | UOTGHS_DEVIDR_PEP_0 - | UOTGHS_DEVIDR_PEP_1 - | UOTGHS_DEVIDR_PEP_2 - | UOTGHS_DEVIDR_PEP_3 - | UOTGHS_DEVIDR_PEP_4 - | UOTGHS_DEVIDR_PEP_5 - | UOTGHS_DEVIDR_PEP_6 - | UOTGHS_DEVIDR_DMA_1 - | UOTGHS_DEVIDR_DMA_2 - | UOTGHS_DEVIDR_DMA_3 - | UOTGHS_DEVIDR_DMA_4 - | UOTGHS_DEVIDR_DMA_5 - | UOTGHS_DEVIDR_DMA_6; - for(;;); -// break; - } -} - - -//unsigned int iii=0; -// Endpoint 0 interrupt -static void USB_ISR(void) -{ -// printf("ISR=0x%X\n\r", UOTGHS->UOTGHS_DEVISR); // jcb -// if( iii++ > 1500 ) while(1); // jcb - // End of bus reset - if (Is_udd_reset()) - { - TRACE_CORE(printf(">>> End of Reset\r\n");) - - // Reset USB address to 0 - udd_configure_address(0); - udd_enable_address(); - - // Configure EP 0 - UDD_InitEP(0, EP_TYPE_CONTROL); - udd_enable_setup_received_interrupt(0); - udd_enable_endpoint_interrupt(0); - - _usbConfiguration = 0; - udd_ack_reset(); - } - -#ifdef CDC_ENABLED - if (Is_udd_endpoint_interrupt(CDC_RX)) - { - udd_ack_out_received(CDC_RX); - - // Handle received bytes - if (USBD_Available(CDC_RX)) - SerialUSB.accept(); - } - - if (Is_udd_sof()) - { - udd_ack_sof(); - // USBD_Flush(CDC_TX); // jcb - } -#endif - - // EP 0 Interrupt - if (Is_udd_endpoint_interrupt(0) ) - { - if (!UDD_ReceivedSetupInt()) - { - return; - } - - Setup setup; - UDD_Recv(EP0, (uint8_t*)&setup, 8); - UDD_ClearSetupInt(); - - uint8_t requestType = setup.bmRequestType; - if (requestType & REQUEST_DEVICETOHOST) - { - TRACE_CORE(puts(">>> EP0 Int: IN Request\r\n");) - UDD_WaitIN(); - } - else - { - TRACE_CORE(puts(">>> EP0 Int: OUT Request\r\n");) - UDD_ClearIN(); - } - - bool ok = true; - if (REQUEST_STANDARD == (requestType & REQUEST_TYPE)) - { - // Standard Requests - uint8_t r = setup.bRequest; - if (GET_STATUS == r) - { - if( setup.bmRequestType == 0 ) // device - { - // Send the device status - TRACE_CORE(puts(">>> EP0 Int: GET_STATUS\r\n");) - // Check current configuration for power mode (if device is configured) - // TODO - // Check if remote wake-up is enabled - // TODO - UDD_Send8(EP0, 0); // TODO - UDD_Send8(EP0, 0); - } - // if( setup.bmRequestType == 2 ) // Endpoint: - else - { - // Send the endpoint status - // Check if the endpoint if currently halted - if( isEndpointHalt == 1 ) - UDD_Send8(EP0, 1); // TODO - else - UDD_Send8(EP0, 0); // TODO - UDD_Send8(EP0, 0); - } - } - else if (CLEAR_FEATURE == r) - { - // Check which is the selected feature - if( setup.wValueL == 1) // DEVICEREMOTEWAKEUP - { - // Enable remote wake-up and send a ZLP - if( isRemoteWakeUpEnabled == 1 ) - UDD_Send8(EP0, 1); - else - UDD_Send8(EP0, 0); - UDD_Send8(EP0, 0); - } - else // if( setup.wValueL == 0) // ENDPOINTHALT - { - isEndpointHalt = 0; // TODO - UDD_Send8(EP0, 0); - UDD_Send8(EP0, 0); - } - - } - else if (SET_FEATURE == r) - { - // Check which is the selected feature - if( setup.wValueL == 1) // DEVICEREMOTEWAKEUP - { - // Enable remote wake-up and send a ZLP - isRemoteWakeUpEnabled = 1; - UDD_Send8(EP0, 0); - } - if( setup.wValueL == 0) // ENDPOINTHALT - { - // Halt endpoint - isEndpointHalt = 1; - //USBD_Halt(USBGenericRequest_GetEndpointNumber(pRequest)); - UDD_Send8(EP0, 0); - } - if( setup.wValueL == 2) // TEST_MODE - { - // 7.1.20 Test Mode Support, 9.4.9 SetFeature - if( (setup.bmRequestType == 0 /*USBGenericRequest_DEVICE*/) && - ((setup.wIndex & 0x000F) == 0) ) - { - // the lower byte of wIndex must be zero - // the most significant byte of wIndex is used to specify the specific test mode - - UOTGHS->UOTGHS_DEVIDR &= ~UOTGHS_DEVIDR_SUSPEC; - UOTGHS->UOTGHS_DEVCTRL |= UOTGHS_DEVCTRL_SPDCONF_HIGH_SPEED; // remove suspend ? - - Test_Mode_Support( (setup.wIndex & 0xFF00)>>8 ); - } - } - } - else if (SET_ADDRESS == r) - { - TRACE_CORE(puts(">>> EP0 Int: SET_ADDRESS\r\n");) - UDD_WaitIN(); - UDD_SetAddress(setup.wValueL); - } - else if (GET_DESCRIPTOR == r) - { - TRACE_CORE(puts(">>> EP0 Int: GET_DESCRIPTOR\r\n");) - ok = USBD_SendDescriptor(setup); - } - else if (SET_DESCRIPTOR == r) - { - TRACE_CORE(puts(">>> EP0 Int: SET_DESCRIPTOR\r\n");) - ok = false; - } - else if (GET_CONFIGURATION == r) - { - TRACE_CORE(puts(">>> EP0 Int: GET_CONFIGURATION\r\n");) - UDD_Send8(EP0, _usbConfiguration); - } - else if (SET_CONFIGURATION == r) - { - if (REQUEST_DEVICE == (requestType & REQUEST_RECIPIENT)) - { - TRACE_CORE(printf(">>> EP0 Int: SET_CONFIGURATION REQUEST_DEVICE %d\r\n", setup.wValueL);) - - UDD_InitEndpoints(EndPoints, (sizeof(EndPoints) / sizeof(EndPoints[0]))); - _usbConfiguration = setup.wValueL; - -#ifdef CDC_ENABLED - // Enable interrupt for CDC reception from host (OUT packet) - udd_enable_out_received_interrupt(CDC_RX); - udd_enable_endpoint_interrupt(CDC_RX); -#endif - } - else - { - TRACE_CORE(puts(">>> EP0 Int: SET_CONFIGURATION failed!\r\n");) - ok = false; - } - } - else if (GET_INTERFACE == r) - { - TRACE_CORE(puts(">>> EP0 Int: GET_INTERFACE\r\n");) - UDD_Send8(EP0, _usbSetInterface); - } - else if (SET_INTERFACE == r) - { - _usbSetInterface = setup.wValueL; - TRACE_CORE(puts(">>> EP0 Int: SET_INTERFACE\r\n");) - } - } - else - { - TRACE_CORE(puts(">>> EP0 Int: ClassInterfaceRequest\r\n");) - - UDD_WaitIN(); // Workaround: need tempo here, else CDC serial won't open correctly - - USBD_InitControl(setup.wLength); // Max length of transfer - ok = USBD_ClassInterfaceRequest(setup); - } - - if (ok) - { - TRACE_CORE(puts(">>> EP0 Int: Send packet\r\n");) - UDD_ClearIN(); - } - else - { - TRACE_CORE(puts(">>> EP0 Int: Stall\r\n");) - UDD_Stall(); - } - } -} - -void USBD_Flush(uint32_t ep) -{ - if (UDD_FifoByteCount(ep)) - UDD_ReleaseTX(ep); -} - -// VBUS or counting frames -// Any frame counting? -uint32_t USBD_Connected(void) -{ - uint8_t f = UDD_GetFrameNumber(); - - delay(3); - - return f != UDD_GetFrameNumber(); -} - - -//======================================================================= -//======================================================================= - -USBDevice_ USBDevice; - -USBDevice_::USBDevice_() -{ - UDD_SetStack(&USB_ISR); - - if (UDD_Init() == 0UL) - { - _usbInitialized=1UL; - } -} - -bool USBDevice_::attach(void) -{ - if (_usbInitialized != 0UL) - { - UDD_Attach(); - _usbConfiguration = 0; - return true; - } - else - { - return false; - } -} - -bool USBDevice_::detach(void) -{ - if (_usbInitialized != 0UL) - { - UDD_Detach(); - return true; - } - else - { - return false; - } -} - -// Check for interrupts -// TODO: VBUS detection -bool USBDevice_::configured() -{ - return _usbConfiguration; -} - -void USBDevice_::poll() -{ -} diff --git a/ArduinoCorePatches-1.5.7/sam/system/libsam/source/emac.c b/ArduinoCorePatches-1.5.7/sam/system/libsam/source/emac.c deleted file mode 100644 index d97e66b..0000000 --- a/ArduinoCorePatches-1.5.7/sam/system/libsam/source/emac.c +++ /dev/null @@ -1,808 +0,0 @@ - /** - * \file - * - * \brief EMAC (Ethernet MAC) driver for SAM. - * - * Copyright (c) 2011-2012 Atmel Corporation. All rights reserved. - * - * \asf_license_start - * - * \page License - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The name of Atmel may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * 4. This software may only be redistributed and used in connection with an - * Atmel microcontroller product. - * - * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE - * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * \asf_license_stop - * - */ - -#include "../chip.h" -#include - -/// @cond 0 -/**INDENT-OFF**/ -#ifdef __cplusplus -extern "C" { -#endif -/**INDENT-ON**/ -/// @endcond - -#if SAM3XA_SERIES - -/** - * \defgroup emac_group Ethernet Media Access Controller - * - * See \ref emac_quickstart. - * - * Driver for the EMAC (Ethernet Media Access Controller). - * This file contains basic functions for the EMAC, with support for all modes, settings - * and clock speeds. - * - * \section dependencies Dependencies - * This driver does not depend on other modules. - * - * @{ - */ - -#if 1 // dc42 change for Duet -#define EMAC_RX_BUFFERS (32) -#define EMAC_TX_BUFFERS (8) -#else -#define EMAC_RX_BUFFERS 16 -#define EMAC_TX_BUFFERS 8 -#endif - -#define MAC_PHY_RETRY_MAX 1000000 - - -/** TX descriptor lists */ -#ifdef __ICCARM__ /* IAR */ -#pragma data_alignment=8 -#endif -static emac_tx_descriptor_t gs_tx_desc[EMAC_TX_BUFFERS]; -/** TX callback lists */ -static emac_dev_tx_cb_t gs_tx_callback[EMAC_TX_BUFFERS]; -/** RX descriptors lists */ -#ifdef __ICCARM__ /* IAR */ -#pragma data_alignment=8 -#endif -static emac_rx_descriptor_t gs_rx_desc[EMAC_RX_BUFFERS]; -/** Send Buffer. Section 3.6 of AMBA 2.0 spec states that burst should not cross the - * 1K Boundaries. Receive buffer manager write operations are burst of 2 words => 3 lsb bits - * of the address shall be set to 0. - */ -#ifdef __ICCARM__ /* IAR */ -#pragma data_alignment=8 -#endif -static uint8_t gs_uc_tx_buffer[EMAC_TX_BUFFERS * EMAC_TX_UNITSIZE] - __attribute__ ((aligned(8))); - -#ifdef __ICCARM__ /* IAR */ -#pragma data_alignment=8 -#endif -/** Receive Buffer */ -static uint8_t gs_uc_rx_buffer[EMAC_RX_BUFFERS * EMAC_RX_UNITSIZE] - __attribute__ ((aligned(8))); - -/** - * EMAC device memory management struct. - */ -typedef struct emac_dev_mem { - /* Pointer to allocated buffer for RX. The address should be 8-byte aligned - and the size should be EMAC_RX_UNITSIZE * wRxSize. */ - uint8_t *p_rx_buffer; - /* Pointer to allocated RX descriptor list. */ - emac_rx_descriptor_t *p_rx_dscr; - /* RX size, in number of registered units (RX descriptors). */ - uint16_t us_rx_size; - /* Pointer to allocated buffer for TX. The address should be 8-byte aligned - and the size should be EMAC_TX_UNITSIZE * wTxSize. */ - uint8_t *p_tx_buffer; - /* Pointer to allocated TX descriptor list. */ - emac_tx_descriptor_t *p_tx_dscr; - /* TX size, in number of registered units (TX descriptors). */ - uint16_t us_tx_size; -} emac_dev_mem_t; - -/** Return count in buffer */ -#define CIRC_CNT(head,tail,size) (((head) - (tail)) % (size)) - -/* - * Return space available, from 0 to size-1. - * Always leave one free char as a completely full buffer that has (head == tail), - * which is the same as empty. - */ -#define CIRC_SPACE(head,tail,size) CIRC_CNT((tail),((head)+1),(size)) - -/** Circular buffer is empty ? */ -#define CIRC_EMPTY(head, tail) (head == tail) -/** Clear circular buffer */ -#define CIRC_CLEAR(head, tail) (head = tail = 0) - -/** Increment head or tail */ -static void circ_inc(uint16_t *headortail, uint32_t size) -{ - (*headortail)++; - if((*headortail) >= size) { - (*headortail) = 0; - } -} - -/** - * \brief Wait PHY operation to be completed. - * - * \param p_emac HW controller address. - * \param ul_retry The retry times, 0 to wait forever until completeness. - * - * Return EMAC_OK if the operation is completed successfully. - */ -static uint8_t emac_wait_phy(Emac* p_emac, const uint32_t ul_retry) -{ - volatile uint32_t ul_retry_count = 0; - - while (!emac_is_phy_idle(p_emac)) { - if (ul_retry == 0) { - continue; - } - - ul_retry_count++; - - if (ul_retry_count >= ul_retry) { - return EMAC_TIMEOUT; - } - } - return EMAC_OK; -} - -/** - * \brief Disable transfer, reset registers and descriptor lists. - * - * \param p_dev Pointer to EMAC driver instance. - * - */ -static void emac_reset_tx_mem(emac_device_t* p_dev) -{ - Emac *p_hw = p_dev->p_hw; - uint8_t *p_tx_buff = p_dev->p_tx_buffer; - emac_tx_descriptor_t *p_td = p_dev->p_tx_dscr; - - uint32_t ul_index; - uint32_t ul_address; - - /* Disable TX */ - emac_enable_transmit(p_hw, 0); - - /* Set up the TX descriptors */ - CIRC_CLEAR(p_dev->us_tx_head, p_dev->us_tx_tail); - for (ul_index = 0; ul_index < p_dev->us_tx_list_size; ul_index++) { - ul_address = (uint32_t) (&(p_tx_buff[ul_index * EMAC_TX_UNITSIZE])); - p_td[ul_index].addr = ul_address; - p_td[ul_index].status.val = EMAC_TXD_USED; - } - p_td[p_dev->us_tx_list_size - 1].status.val = - EMAC_TXD_USED | EMAC_TXD_WRAP; - - /* Set transmit buffer queue */ - emac_set_tx_queue(p_hw, (uint32_t) p_td); -} - -/** - * \brief Disable receiver, reset registers and descriptor list. - * - * \param p_drv Pointer to EMAC Driver instance. - */ -static void emac_reset_rx_mem(emac_device_t* p_dev) -{ - Emac *p_hw = p_dev->p_hw; - uint8_t *p_rx_buff = p_dev->p_rx_buffer; - emac_rx_descriptor_t *pRd = p_dev->p_rx_dscr; - - uint32_t ul_index; - uint32_t ul_address; - - /* Disable RX */ - emac_enable_receive(p_hw, 0); - - /* Set up the RX descriptors */ - p_dev->us_rx_idx = 0; - for (ul_index = 0; ul_index < p_dev->us_rx_list_size; ul_index++) { - ul_address = (uint32_t) (&(p_rx_buff[ul_index * EMAC_RX_UNITSIZE])); - pRd[ul_index].addr.val = ul_address & EMAC_RXD_ADDR_MASK; - pRd[ul_index].status.val = 0; - } - pRd[p_dev->us_rx_list_size - 1].addr.val |= EMAC_RXD_WRAP; - - /* Set receive buffer queue */ - emac_set_rx_queue(p_hw, (uint32_t) pRd); -} - - -/** - * \brief Initialize the allocated buffer lists for EMAC driver to transfer data. - * Must be invoked after emac_dev_init() but before RX/TX starts. - * - * \note If input address is not 8-byte aligned, the address is automatically - * adjusted and the list size is reduced by one. - * - * \param p_emac Pointer to EMAC instance. - * \param p_emac_dev Pointer to EMAC device instance. - * \param p_dev_mm Pointer to the EMAC memory management control block. - * \param p_tx_cb Pointer to allocated TX callback list. - * - * \return EMAC_OK or EMAC_PARAM. - */ -static uint8_t emac_init_mem(Emac* p_emac, emac_device_t* p_emac_dev, - emac_dev_mem_t* p_dev_mm, - emac_dev_tx_cb_t* p_tx_cb) -{ - if (p_dev_mm->us_rx_size <= 1 || p_dev_mm->us_tx_size <= 1 || p_tx_cb == NULL) { - return EMAC_PARAM; - } - - /* Assign RX buffers */ - if (((uint32_t) p_dev_mm->p_rx_buffer & 0x7) - || ((uint32_t) p_dev_mm->p_rx_dscr & 0x7)) { - p_dev_mm->us_rx_size--; - } - p_emac_dev->p_rx_buffer = - (uint8_t *) ((uint32_t) p_dev_mm->p_rx_buffer & 0xFFFFFFF8); - p_emac_dev->p_rx_dscr = - (emac_rx_descriptor_t *) ((uint32_t) p_dev_mm->p_rx_dscr - & 0xFFFFFFF8); - p_emac_dev->us_rx_list_size = p_dev_mm->us_rx_size; - - /* Assign TX buffers */ - if (((uint32_t) p_dev_mm->p_tx_buffer & 0x7) - || ((uint32_t) p_dev_mm->p_tx_dscr & 0x7)) { - p_dev_mm->us_tx_size--; - } - p_emac_dev->p_tx_buffer = - (uint8_t *) ((uint32_t) p_dev_mm->p_tx_buffer & 0xFFFFFFF8); - p_emac_dev->p_tx_dscr = - (emac_tx_descriptor_t *) ((uint32_t) p_dev_mm->p_tx_dscr - & 0xFFFFFFF8); - p_emac_dev->us_tx_list_size = p_dev_mm->us_tx_size; - p_emac_dev->func_tx_cb_list = p_tx_cb; - - /* Reset TX & RX */ - emac_reset_rx_mem(p_emac_dev); - emac_reset_tx_mem(p_emac_dev); - - /* Enable Rx and Tx, plus the statistics register */ - emac_enable_transmit(p_emac, 1); - emac_enable_receive(p_emac, 1); - emac_enable_statistics_write(p_emac, 1); - - /* Set up the interrupts for transmission and errors */ - emac_enable_interrupt(p_emac, - EMAC_IER_RXUBR | /* Enable receive used bit read interrupt. */ - EMAC_IER_TUND | /* Enable transmit underrun interrupt. */ - EMAC_IER_RLE | /* Enable retry limit exceeded interrupt. */ - EMAC_IER_TXERR | /* Enable transmit buffers exhausted in mid-frame interrupt. */ - EMAC_IER_TCOMP | /* Enable transmit complete interrupt. */ - EMAC_IER_ROVR | /* Enable receive overrun interrupt. */ - EMAC_IER_HRESP | /* Enable Hresp not OK interrupt. */ - EMAC_IER_PFR | /* Enable pause frame received interrupt. */ - EMAC_IER_PTZ); /* Enable pause time zero interrupt. */ - - return EMAC_OK; -} - -/** - * \brief Read the PHY register. - * - * \param p_emac Pointer to the EMAC instance. - * \param uc_phy_address PHY address. - * \param uc_address Register address. - * \param p_value Pointer to a 32-bit location to store read data. - * - * \Return EMAC_OK if successfully, EMAC_TIMEOUT if timeout. - */ -uint8_t emac_phy_read(Emac* p_emac, uint8_t uc_phy_address, uint8_t uc_address, - uint32_t* p_value) -{ - emac_maintain_phy(p_emac, uc_phy_address, uc_address, 1, 0); - - if (emac_wait_phy(p_emac, MAC_PHY_RETRY_MAX) == EMAC_TIMEOUT) { - return EMAC_TIMEOUT; - } - *p_value = emac_get_phy_data(p_emac); - return EMAC_OK; -} - -/** - * \brief Write the PHY register. - * - * \param p_emac Pointer to the EMAC instance. - * \param uc_phy_address PHY Address. - * \param uc_address Register Address. - * \param ul_value Data to write, actually 16-bit data. - * - * \Return EMAC_OK if successfully, EMAC_TIMEOUT if timeout. - */ -uint8_t emac_phy_write(Emac* p_emac, uint8_t uc_phy_address, - uint8_t uc_address, uint32_t ul_value) -{ - emac_maintain_phy(p_emac, uc_phy_address, uc_address, 0, ul_value); - - if (emac_wait_phy(p_emac, MAC_PHY_RETRY_MAX) == EMAC_TIMEOUT) { - return EMAC_TIMEOUT; - } - return EMAC_OK; -} - -/** - * \brief Initialize the EMAC driver. - * - * \param p_emac Pointer to the EMAC instance. - * \param p_emac_dev Pointer to the EMAC device instance. - * \param p_opt EMAC configure options. - */ -void emac_dev_init(Emac* p_emac, emac_device_t* p_emac_dev, - emac_options_t* p_opt) -{ - emac_dev_mem_t emac_dev_mm; - - /* Disable TX & RX and more */ - emac_network_control(p_emac, 0); - emac_disable_interrupt(p_emac, ~0u); - - emac_clear_statistics(p_emac); - - /* Clear all status bits in the receive status register. */ - emac_clear_rx_status(p_emac, EMAC_RSR_OVR | EMAC_RSR_REC | EMAC_RSR_BNA); - - /* Clear all status bits in the transmit status register */ - emac_clear_tx_status(p_emac, EMAC_TSR_UBR | EMAC_TSR_COL | EMAC_TSR_RLES - | EMAC_TSR_BEX | EMAC_TSR_COMP | EMAC_TSR_UND); - - /* Clear interrupts */ - emac_get_interrupt_status(p_emac); - - /* Enable the copy of data into the buffers - ignore broadcasts, and not copy FCS. */ - emac_set_configure(p_emac, - emac_get_configure(p_emac) | EMAC_NCFGR_DRFCS | EMAC_NCFGR_PAE); - - emac_enable_copy_all(p_emac, p_opt->uc_copy_all_frame); - emac_disable_broadcast(p_emac, p_opt->uc_no_boardcast); - - /* Fill in EMAC device memory management */ - emac_dev_mm.p_rx_buffer = gs_uc_rx_buffer; - emac_dev_mm.p_rx_dscr = gs_rx_desc; - emac_dev_mm.us_rx_size = EMAC_RX_BUFFERS; - - emac_dev_mm.p_tx_buffer = gs_uc_tx_buffer; - emac_dev_mm.p_tx_dscr = gs_tx_desc; - emac_dev_mm.us_tx_size = EMAC_TX_BUFFERS; - - emac_init_mem(p_emac, p_emac_dev, &emac_dev_mm, gs_tx_callback); - - emac_set_address(p_emac, 0, p_opt->uc_mac_addr); - -} - -/** - * \brief Frames can be read from the EMAC in multiple sections. - * Read ul_frame_size bytes from the EMAC receive buffers to pcTo. - * p_rcv_size is the size of the entire frame. Generally emac_read - * will be repeatedly called until the sum of all the ul_frame_size equals - * the value of p_rcv_size. - * - * \param p_emac_dev Pointer to the EMAC device instance. - * \param p_frame Address of the frame buffer. - * \param ul_frame_size Length of the frame. - * \param p_rcv_size Received frame size. - * - * \return EMAC_OK if receiving frame successfully, otherwise failed. - */ -uint32_t emac_dev_read(emac_device_t* p_emac_dev, uint8_t* p_frame, - uint32_t ul_frame_size, uint32_t* p_rcv_size) -{ - uint16_t us_buffer_length; - uint32_t tmp_ul_frame_size = 0; - uint8_t *p_tmp_frame = 0; - uint16_t us_tmp_idx = p_emac_dev->us_rx_idx; - emac_rx_descriptor_t *p_rx_td = - &p_emac_dev->p_rx_dscr[p_emac_dev->us_rx_idx]; - int8_t c_is_frame = 0; - - if (p_frame == NULL) - return EMAC_PARAM; - - /* Set the default return value */ - *p_rcv_size = 0; - - /* Process received RX descriptor */ - while ((p_rx_td->addr.val & EMAC_RXD_OWNERSHIP) == EMAC_RXD_OWNERSHIP) { - /* A start of frame has been received, discard previous fragments */ - if ((p_rx_td->status.val & EMAC_RXD_SOF) == EMAC_RXD_SOF) { - /* Skip previous fragment */ - while (us_tmp_idx != p_emac_dev->us_rx_idx) { - p_rx_td = &p_emac_dev->p_rx_dscr[p_emac_dev->us_rx_idx]; - p_rx_td->addr.val &= ~(EMAC_RXD_OWNERSHIP); - - circ_inc(&p_emac_dev->us_rx_idx, p_emac_dev->us_rx_list_size); - } - /* Reset the temporary frame pointer */ - p_tmp_frame = p_frame; - tmp_ul_frame_size = 0; - /* Start to gather buffers in a frame */ - c_is_frame = 1; - } - - /* Increment the pointer */ - circ_inc(&us_tmp_idx, p_emac_dev->us_rx_list_size); - - /* Copy data in the frame buffer */ - if (c_is_frame) { - if (us_tmp_idx == p_emac_dev->us_rx_idx) { - do { - p_rx_td = &p_emac_dev->p_rx_dscr[p_emac_dev->us_rx_idx]; - p_rx_td->addr.val &= ~(EMAC_RXD_OWNERSHIP); - circ_inc(&p_emac_dev->us_rx_idx, p_emac_dev->us_rx_list_size); - - } while (us_tmp_idx != p_emac_dev->us_rx_idx); - - return EMAC_RX_NULL; - } - /* Copy the buffer into the application frame */ - us_buffer_length = EMAC_RX_UNITSIZE; - if ((tmp_ul_frame_size + us_buffer_length) > ul_frame_size) { - us_buffer_length = ul_frame_size - tmp_ul_frame_size; - } - - memcpy(p_tmp_frame, - (void *)(p_rx_td->addr.val & EMAC_RXD_ADDR_MASK), - us_buffer_length); - p_tmp_frame += us_buffer_length; - tmp_ul_frame_size += us_buffer_length; - - /* An end of frame has been received, return the data */ - if ((p_rx_td->status.val & EMAC_RXD_EOF) == EMAC_RXD_EOF) { - /* Frame size from the EMAC */ - *p_rcv_size = (p_rx_td->status.val & EMAC_RXD_LEN_MASK); - - /* All data have been copied in the application frame buffer => release TD */ - while (p_emac_dev->us_rx_idx != us_tmp_idx) { - p_rx_td = &p_emac_dev->p_rx_dscr[p_emac_dev->us_rx_idx]; - p_rx_td->addr.val &= ~(EMAC_RXD_OWNERSHIP); - circ_inc(&p_emac_dev->us_rx_idx, p_emac_dev->us_rx_list_size); - } - - /* Application frame buffer is too small so that all data have not been copied */ - if (tmp_ul_frame_size < *p_rcv_size) { - return EMAC_SIZE_TOO_SMALL; - } - - return EMAC_OK; - } - } - /* SOF has not been detected, skip the fragment */ - else { - p_rx_td->addr.val &= ~(EMAC_RXD_OWNERSHIP); - p_emac_dev->us_rx_idx = us_tmp_idx; - } - - /* Process the next buffer */ - p_rx_td = &p_emac_dev->p_rx_dscr[us_tmp_idx]; - } - - return EMAC_RX_NULL; -} - -/** - * \brief Send ulLength bytes from pcFrom. This copies the buffer to one of the - * EMAC Tx buffers, and then indicates to the EMAC that the buffer is ready. - * If lEndOfFrame is true then the data being copied is the end of the frame - * and the frame can be transmitted. - * - * \param p_emac_dev Pointer to the EMAC device instance. - * \param p_buffer Pointer to the data buffer. - * \param ul_size Length of the frame. - * \param func_tx_cb Transmit callback function. - * - * \return Length sent. - */ -uint32_t emac_dev_write(emac_device_t* p_emac_dev, void *p_buffer, - uint32_t ul_size, emac_dev_tx_cb_t func_tx_cb) -{ - - volatile emac_tx_descriptor_t *p_tx_td; - volatile emac_dev_tx_cb_t *p_func_tx_cb; - - Emac *p_hw = p_emac_dev->p_hw; - - - /* Check parameter */ - if (ul_size > EMAC_TX_UNITSIZE) { - return EMAC_PARAM; - } - - /* Pointers to the current transmit descriptor */ - p_tx_td = &p_emac_dev->p_tx_dscr[p_emac_dev->us_tx_head]; - - /* If no free TxTd, buffer can't be sent, schedule the wakeup callback */ - if (CIRC_SPACE(p_emac_dev->us_tx_head, p_emac_dev->us_tx_tail, - p_emac_dev->us_tx_list_size) == 0) { - return EMAC_TX_BUSY; - } - - /* Pointers to the current Tx callback */ - p_func_tx_cb = &p_emac_dev->func_tx_cb_list[p_emac_dev->us_tx_head]; - - /* Set up/copy data to transmission buffer */ - if (p_buffer && ul_size) { - /* Driver manages the ring buffer */ - memcpy((void *)p_tx_td->addr, p_buffer, ul_size); - } - - /* Tx callback */ - *p_func_tx_cb = func_tx_cb; - - /* Update transmit descriptor status */ - - /* The buffer size defined is the length of ethernet frame, - so it's always the last buffer of the frame. */ - if (p_emac_dev->us_tx_head == p_emac_dev->us_tx_list_size - 1) { - p_tx_td->status.val = - (ul_size & EMAC_TXD_LEN_MASK) | EMAC_TXD_LAST - | EMAC_TXD_WRAP; - } else { - p_tx_td->status.val = - (ul_size & EMAC_TXD_LEN_MASK) | EMAC_TXD_LAST; - } - - circ_inc(&p_emac_dev->us_tx_head, p_emac_dev->us_tx_list_size); - - /* Now start to transmit if it is still not done */ - emac_start_transmission(p_hw); - - return EMAC_OK; -} - -/** - * \brief Get current load of transmit. - * - * \param p_emac_dev Pointer to the EMAC device instance. - * - * \return Current load of transmit. - */ -uint32_t emac_dev_get_tx_load(emac_device_t* p_emac_dev) -{ - uint16_t us_head = p_emac_dev->us_tx_head; - uint16_t us_tail = p_emac_dev->us_tx_tail; - return CIRC_CNT(us_head, us_tail, p_emac_dev->us_tx_list_size); -} - -/** - * \brief Register/Clear RX callback. Callback will be invoked after the next received - * frame. - * - * When emac_dev_read() returns EMAC_RX_NULL, the application task calls - * emac_dev_set_rx_callback() to register func_rx_cb() callback and enters suspend state. - * The callback is in charge to resume the task once a new frame has been - * received. The next time emac_dev_read() is called, it will be successful. - * - * This function is usually invoked from the RX callback itself with NULL - * callback, to unregister. Once the callback has resumed the application task, - * there is no need to invoke the callback again. - * - * \param p_emac_dev Pointer to the EMAC device instance. - * \param func_tx_cb Receive callback function. - */ -void emac_dev_set_rx_callback(emac_device_t* p_emac_dev, - emac_dev_tx_cb_t func_rx_cb) -{ - Emac *p_hw = p_emac_dev->p_hw; - - if (func_rx_cb == NULL) { - emac_disable_interrupt(p_hw, EMAC_IDR_RCOMP); - p_emac_dev->func_rx_cb = NULL; - } else { - p_emac_dev->func_rx_cb = func_rx_cb; - emac_enable_interrupt(p_hw, EMAC_IER_RCOMP); - } -} - -/** - * \brief Register/Clear TX wakeup callback. - * - * When emac_dev_write() returns EMAC_TX_BUSY (all transmit descriptor busy), the application - * task calls emac_dev_set_tx_wakeup_callback() to register func_wakeup() callback and - * enters suspend state. The callback is in charge to resume the task once - * several transmit descriptors have been released. The next time emac_dev_write() will be called, - * it shall be successful. - * - * This function is usually invoked with NULL callback from the TX wakeup - * callback itself, to unregister. Once the callback has resumed the - * application task, there is no need to invoke the callback again. - * - * \param p_emac_dev Pointer to EMAC device instance. - * \param func_wakeup Pointer to wakeup callback function. - * \param uc_threshold Number of free transmit descriptor before wakeup callback invoked. - * - * \return EMAC_OK, EMAC_PARAM on parameter error. - */ -uint8_t emac_dev_set_tx_wakeup_callback(emac_device_t* p_emac_dev, - emac_dev_wakeup_cb_t func_wakeup_cb, uint8_t uc_threshold) -{ - if (func_wakeup_cb == NULL) { - p_emac_dev->func_wakeup_cb = NULL; - } else { - if (uc_threshold <= p_emac_dev->us_tx_list_size) { - p_emac_dev->func_wakeup_cb = func_wakeup_cb; - p_emac_dev->uc_wakeup_threshold = uc_threshold; - } else { - return EMAC_PARAM; - } - } - - return EMAC_OK; -} - - -/** - * \brief Reset TX & RX queue & statistics. - * - * \param p_emac_dev Pointer to EMAC device instance. - */ -void emac_dev_reset(emac_device_t* p_emac_dev) -{ - Emac *p_hw = p_emac_dev->p_hw; - - emac_reset_rx_mem(p_emac_dev); - emac_reset_tx_mem(p_emac_dev); - emac_network_control(p_hw, EMAC_NCR_TE | EMAC_NCR_RE - | EMAC_NCR_WESTAT | EMAC_NCR_CLRSTAT); -} - - -/** - * \brief EMAC Interrupt handler. - * - * \param p_emac_dev Pointer to EMAC device instance. - */ -void emac_handler(emac_device_t* p_emac_dev) -{ - Emac *p_hw = p_emac_dev->p_hw; - - emac_tx_descriptor_t *p_tx_td; - emac_dev_tx_cb_t *p_tx_cb; - volatile uint32_t ul_isr; - volatile uint32_t ul_rsr; - volatile uint32_t ul_tsr; - uint32_t ul_rx_status_flag; - uint32_t ul_tx_status_flag; - - ul_isr = emac_get_interrupt_status(p_hw); - ul_rsr = emac_get_rx_status(p_hw); - ul_tsr = emac_get_tx_status(p_hw); - - ul_isr &= ~(emac_get_interrupt_mask(p_hw) | 0xFFC300); - - /* RX packet */ - if ((ul_isr & EMAC_ISR_RCOMP) || (ul_rsr & EMAC_RSR_REC)) { - ul_rx_status_flag = EMAC_RSR_REC; - - /* Check OVR */ - if (ul_rsr & EMAC_RSR_OVR) { - ul_rx_status_flag |= EMAC_RSR_OVR; - } - /* Check BNA */ - if (ul_rsr & EMAC_RSR_BNA) { - ul_rx_status_flag |= EMAC_RSR_BNA; - } - /* Clear status */ - emac_clear_rx_status(p_hw, ul_rx_status_flag); - - /* Invoke callbacks */ - if (p_emac_dev->func_rx_cb) { - p_emac_dev->func_rx_cb(ul_rx_status_flag); - } - } - - /* TX packet */ - if ((ul_isr & EMAC_ISR_TCOMP) || (ul_tsr & EMAC_TSR_COMP)) { - - ul_tx_status_flag = EMAC_TSR_COMP; - - /* A frame transmitted */ - - /* Check RLE */ - if (ul_tsr & EMAC_TSR_RLES) { - /* Status RLE & Number of discarded buffers */ - ul_tx_status_flag = EMAC_TSR_RLES | CIRC_CNT(p_emac_dev->us_tx_head, - p_emac_dev->us_tx_tail, p_emac_dev->us_tx_list_size); - p_tx_cb = &p_emac_dev->func_tx_cb_list[p_emac_dev->us_tx_tail]; - emac_reset_tx_mem(p_emac_dev); - emac_enable_transmit(p_hw, 1); - } - /* Check COL */ - if (ul_tsr & EMAC_TSR_COL) { - ul_tx_status_flag |= EMAC_TSR_COL; - } - /* Check BEX */ - if (ul_tsr & EMAC_TSR_BEX) { - ul_tx_status_flag |= EMAC_TSR_BEX; - } - /* Check UND */ - if (ul_tsr & EMAC_TSR_UND) { - ul_tx_status_flag |= EMAC_TSR_UND; - } - /* Clear status */ - emac_clear_tx_status(p_hw, ul_tx_status_flag); - - if (!CIRC_EMPTY(p_emac_dev->us_tx_head, p_emac_dev->us_tx_tail)) { - /* Check the buffers */ - do { - p_tx_td = &p_emac_dev->p_tx_dscr[p_emac_dev->us_tx_tail]; - p_tx_cb = &p_emac_dev->func_tx_cb_list[p_emac_dev->us_tx_tail]; - /* Any error? Exit if buffer has not been sent yet */ - if ((p_tx_td->status.val & EMAC_TXD_USED) == 0) { - break; - } - - /* Notify upper layer that a packet has been sent */ - if (*p_tx_cb) { - (*p_tx_cb) (ul_tx_status_flag); - } - - circ_inc(&p_emac_dev->us_tx_tail, p_emac_dev->us_tx_list_size); - } while (CIRC_CNT(p_emac_dev->us_tx_head, p_emac_dev->us_tx_tail, - p_emac_dev->us_tx_list_size)); - } - - if (ul_tsr & EMAC_TSR_RLES) { - /* Notify upper layer RLE */ - if (*p_tx_cb) { - (*p_tx_cb) (ul_tx_status_flag); - } - } - - /* If a wakeup has been scheduled, notify upper layer that it can - send other packets, and the sending will be successful. */ - if ((CIRC_SPACE(p_emac_dev->us_tx_head, p_emac_dev->us_tx_tail, - p_emac_dev->us_tx_list_size) >= p_emac_dev->uc_wakeup_threshold) - && p_emac_dev->func_wakeup_cb) { - p_emac_dev->func_wakeup_cb(); - } - } -} - -//@} - -#endif // SAM3XA_SERIES - -/// @cond 0 -/**INDENT-OFF**/ -#ifdef __cplusplus -} -#endif -/**INDENT-ON**/ -/// @endcond diff --git a/ArduinoCorePatches-1.5.7/sam/variants/arduino_due_x/variant.cpp b/ArduinoCorePatches/sam/arduino_due_x/variant.cpp similarity index 100% rename from ArduinoCorePatches-1.5.7/sam/variants/arduino_due_x/variant.cpp rename to ArduinoCorePatches/sam/arduino_due_x/variant.cpp diff --git a/ArduinoCorePatches/sam/cores/arduino/Stream.h b/ArduinoCorePatches/sam/cores/arduino/Stream.h index b1461bf..2ce9cb9 100644 --- a/ArduinoCorePatches/sam/cores/arduino/Stream.h +++ b/ArduinoCorePatches/sam/cores/arduino/Stream.h @@ -49,7 +49,7 @@ class Stream : public Print virtual int read() = 0; virtual int peek() = 0; virtual void flush() = 0; - virtual size_t canWrite() const { return 1; } // DC42 added + virtual size_t canWrite() const { return 1; } // DC42 added Stream() {_timeout=1000;} @@ -58,14 +58,18 @@ class Stream : public Print void setTimeout(unsigned long timeout); // sets maximum milliseconds to wait for stream data, default is 1 second bool find(char *target); // reads data from the stream until the target string is found + bool find(uint8_t *target) { return find ((char *)target); } // returns true if target string is found, false if timed out (see setTimeout) bool find(char *target, size_t length); // reads data from the stream until the target string of given length is found + bool find(uint8_t *target, size_t length) { return find ((char *)target, length); } // returns true if target string is found, false if timed out bool findUntil(char *target, char *terminator); // as find but search ends if the terminator string is found + bool findUntil(uint8_t *target, char *terminator) { return findUntil((char *)target, terminator); } bool findUntil(char *target, size_t targetLen, char *terminate, size_t termLen); // as above but search ends if the terminate string is found + bool findUntil(uint8_t *target, size_t targetLen, char *terminate, size_t termLen) {return findUntil((char *)target, targetLen, terminate, termLen); } long parseInt(); // returns the first valid (long) integer value from the current position. @@ -75,10 +79,12 @@ class Stream : public Print float parseFloat(); // float version of parseInt size_t readBytes( char *buffer, size_t length); // read chars from stream into buffer + size_t readBytes( uint8_t *buffer, size_t length) { return readBytes((char *)buffer, length); } // terminates if length characters have been read or timeout (see setTimeout) // returns the number of characters placed in the buffer (0 means no valid data found) size_t readBytesUntil( char terminator, char *buffer, size_t length); // as readBytes with terminator character + size_t readBytesUntil( char terminator, uint8_t *buffer, size_t length) { return readBytesUntil(terminator, (char *)buffer, length); } // terminates if length characters have been read, timeout, or if the terminator character detected // returns the number of characters placed in the buffer (0 means no valid data found) diff --git a/ArduinoCorePatches/sam/cores/arduino/UARTClass.h b/ArduinoCorePatches/sam/cores/arduino/UARTClass.h index 6decd5d..79ff0e0 100644 --- a/ArduinoCorePatches/sam/cores/arduino/UARTClass.h +++ b/ArduinoCorePatches/sam/cores/arduino/UARTClass.h @@ -45,8 +45,7 @@ class UARTClass : public HardwareSerial int read( void ) ; void flush( void ) ; size_t write( const uint8_t c ) ; - - size_t canWrite( void ) const /*override*/; //***** DC42 added + size_t canWrite( void ) const override; //***** DC42 added void IrqHandler( void ) ; diff --git a/ArduinoCorePatches/sam/cores/arduino/USB/CDC.cpp b/ArduinoCorePatches/sam/cores/arduino/USB/CDC.cpp index d15ce4f..31c19ca 100644 --- a/ArduinoCorePatches/sam/cores/arduino/USB/CDC.cpp +++ b/ArduinoCorePatches/sam/cores/arduino/USB/CDC.cpp @@ -147,6 +147,15 @@ bool WEAK CDC_Setup(Setup& setup) int _serialPeek = -1; void Serial_::begin(uint32_t baud_count) { + // suppress "unused parameter" warning + (void)baud_count; +} + +void Serial_::begin(uint32_t baud_count, uint8_t config) +{ + // suppress "unused parameter" warning + (void)baud_count; + (void)config; } void Serial_::end(void) @@ -262,15 +271,15 @@ size_t Serial_::write(const uint8_t *buffer, size_t size) return 0; } -size_t Serial_::canWrite() const { - return USBD_SendSpace(CDC_TX); -} - - size_t Serial_::write(uint8_t c) { return write(&c, 1); } +// Function added by DC42 so we can find out how much data we can write without blocking +size_t Serial_::canWrite() const { + return USBD_SendSpace(CDC_TX); +} + // This operator is a convenient way for a sketch to check whether the // port has actually been configured and opened by the host (as opposed // to just being connected to the host). It can be used, for example, in diff --git a/ArduinoCorePatches/sam/cores/arduino/USB/USBAPI.h b/ArduinoCorePatches/sam/cores/arduino/USB/USBAPI.h index 0866c02..a2029cd 100644 --- a/ArduinoCorePatches/sam/cores/arduino/USB/USBAPI.h +++ b/ArduinoCorePatches/sam/cores/arduino/USB/USBAPI.h @@ -49,6 +49,7 @@ private: RingBuffer *_cdc_rx_buffer; public: void begin(uint32_t baud_count); + void begin(uint32_t baud_count, uint8_t config); void end(void); virtual int available(void); @@ -58,8 +59,8 @@ public: virtual void flush(void); virtual size_t write(uint8_t); virtual size_t write(const uint8_t *buffer, size_t size); - size_t canWrite() const; using Print::write; // pull in write(str) from Print + size_t canWrite() const /*override*/; // Function added by DC42 so that we can tell how many characters we can write without blocking operator bool(); }; extern Serial_ SerialUSB; diff --git a/ArduinoCorePatches/sam/cores/arduino/USB/USBCore.cpp b/ArduinoCorePatches/sam/cores/arduino/USB/USBCore.cpp index e1a61c4..f162ad6 100644 --- a/ArduinoCorePatches/sam/cores/arduino/USB/USBCore.cpp +++ b/ArduinoCorePatches/sam/cores/arduino/USB/USBCore.cpp @@ -69,10 +69,13 @@ const uint16_t STRING_LANGUAGE[2] = { const uint8_t STRING_PRODUCT[] = USB_PRODUCT; #if USB_VID == 0x2341 -#define USB_MANUFACTURER "Arduino LLC" +# if defined(USB_MANUFACTURER) +# undef USB_MANUFACTURER +# endif +# define USB_MANUFACTURER "Arduino LLC" #elif !defined(USB_MANUFACTURER) // Fall through to unknown if no manufacturer name was provided in a macro -#define USB_MANUFACTURER "Unknown" +# define USB_MANUFACTURER "Unknown" #endif const uint8_t STRING_MANUFACTURER[12] = USB_MANUFACTURER; @@ -139,7 +142,7 @@ uint32_t USBD_Available(uint32_t ep) // Return number of bytes read uint32_t USBD_Recv(uint32_t ep, void* d, uint32_t len) { - if (!_usbConfiguration || len < 0) + if (!_usbConfiguration) return -1; LockEP lock(ep); @@ -166,15 +169,15 @@ uint32_t USBD_Recv(uint32_t ep) } // Space in send EP +// DC42 uncommented and modified this function to support the canWrite function in file CDC.cpp uint32_t USBD_SendSpace(uint32_t ep) { if (!UDD_ReadWriteAllowed(ep & 0xF)) - { - //printf("pb "); // UOTGHS->UOTGHS_DEVEPTISR[%d]=0x%X\n\r", ep, UOTGHS->UOTGHS_DEVEPTISR[ep]); + { + //printf("pb "); // UOTGHS->UOTGHS_DEVEPTISR[%d]=0x%X\n\r", ep, UOTGHS->UOTGHS_DEVEPTISR[ep]); return 0; - } - - return ((ep==0) ? EP0_SIZE : EPX_SIZE) - UDD_FifoByteCount(ep & 0xF); + } + return ((ep==0) ? EP0_SIZE : EPX_SIZE) - UDD_FifoByteCount(ep & 0xF); } // Blocking Send of data to an endpoint diff --git a/Configuration.h b/Configuration.h index ef2c62b..306c50b 100644 --- a/Configuration.h +++ b/Configuration.h @@ -24,8 +24,8 @@ Licence: GPL #define CONFIGURATION_H #define NAME "RepRapFirmware" -#define VERSION "1.00f-dc42" -#define DATE "2015-02-05" +#define VERSION "1.00g-dc42" +#define DATE "2015-02-06" #define AUTHORS "reprappro, dc42, zpl" #define FLASH_SAVE_ENABLED (1) diff --git a/Release/RepRapFirmware-1.00g-dc42.bin b/Release/RepRapFirmware-1.00g-dc42.bin new file mode 100644 index 0000000000000000000000000000000000000000..8c2d86ff4609186c0025f03241ec16bd7628b4a5 GIT binary patch literal 212896 zcmb5W3tUr2_BcLs@6ChoiXh5MxJgh0@e!d9s&)-YxB}5))po6IzXq+_8+Er)tHn|^ zh_=w`7DZbHZLPMuK58XUwxyPZs_k}n+wP6R7IeF!){TX2dwFOs1d{)mfNj6s{r~^J zAD_>VxpQaEoH=vm%sFSyT;x)+kqIiKN&U}+e)czUv<@jwhy2w4(&p!IKJtZyV3Rf# zN)>8=bQMx$n2HpI{yLz}jnR5NqrYD%l*j{#z$1S@hugR}40#~^y!_|SrHLcs+MGKA zi@aAi$mZ#avlCoM8%<^kuv!94Q;*wj{SaPo7WS%kyYH)-AKq z?)`I>O?T=%4fRP~^2Zd&@?&{qP&S8i@m94xo^#IK3Ges6rCFn+RF-tV_MaDSGQVcp(h zPqDlzjfpK@P;BkOPmC>y%TKl-owW<4;oa08*>U*^R5d0~aZ<5YA$Izs@)TmiP-I?Y zzCyGN$!cb~BY-N>pc2Yshr()&O=0jX4l?j;kjOJ?-Y{Q@9^sUzvPQvvj^P(*;ew=Y zVDcF8xdDa?`ql?oP7QTQ9Y*}Dk<4qQRBm*>OBoV{YImiyVL|HDDeXu{b+S{Ugo)gm zo(gxEPkKrsC&~1mb*xut&b7ZE0YsgGz_=HMn5wuf}w(I?&-J+kg%Yt^-yokN( zh5n@(Y^7vG>O|7N(MX=F&9aWA$+Xoa8QJ*foOAE+$&c@!Z*GZ4&)q2}yrgc3nKzDQ zMMH3}^zQgp>Fvp_();(eO2-te__x4bNr19Xp{y0k&O_P90fnuw-$fzKImyLB(v(T# zViWCzCO1=HZCpj21m<{vi2>&9m{#d7ZL4I;Y?X`@E4~FVmq6J9D0>Xb=0RCa2qyYp zFvtH4CZRE92nRZCFs2&9+egN^fyHc@v{+4Oun5X=2U%ky?-qsLWx+c^av5O`IkK8t zrR~VnOX*r9c1EkTQ%x6W#1#_OZ3p;d45$gqrhX&lRB}kG;9@xe>TAU3rT2T-Xg#bv zR*5Fzd$`pToLpb3#XN{2nPwjkBOGdc7`bo<>|M-D&5Q&dKyJzDYt3 zjBgh7vn<6x}ze;3m%w*I_O-5R*%jTYkmd}%!tR-VC z6lvuw?n`fIe43!I2FB-vc^aYl+tOYbql{xR?iNh9F>NrxfBceJ?U7|H5Xd~LH5%~| zDKw+Ebq{L9^%4`BM`shXG|CJyo?{BSZLhS!o;nS6IGffdZwKxn^;z-D;3O-l^}Mtg z$qk~%q4=(?OLl*ov*{CgT-zP!1wVnFCLw^n!MI&|+Gv2;lWBoxShv^N^u|;2P`|tD z%jXiDnT+3g{^Y&!6qlV+@Sec$hbgYD@zhtH*>y!Zxfj9$ghdDns zcb|7JK!*B2+whKS@i=P_a5m|UVAFKdX=267=3Q{WAp7xb+Jx}~WU zEXgl}{9cf|z!NwnKeYhqQs-Tf%3UdisSl*)U6Ho86!t&6p%i*71*u;uWkOm6>1jwC zjN71m8)_a&Ad4BIh)chlUxIO55rJ1b7&3a`+5@4!mkFt%9jE*nKYg9HpkqtXA zjFswkK?%~|5~=_rTEmLXeoM*{^O79UG+0O>IZ9w}){~XZa8cZNZaTo6&_0vEl+oQg zWUC$3iqzIvQAwo|tL2DeUQxxLLugMn6JPSB@sPA^%-8ytF| z*m*zJ9x)~4qv?O;Bbvk62sY773oqLL$|stKJhAhc9yR?azPUid>A9fx4|S~QAJPLR z8jcm2VUR=cn>LJfO2G1zHx2fQZ~e+VWqw!zD}FdcG_z{pYclU20uLcmn2FFL{%aa7 z;ffHE&+kIHx`CaCH7o~vQ4E5a+vF#>gT@8&kpNznQz#!3%DY1Oh)^EJNw5@UqfZE)2rjHR z^Z`;wnYQZH??!c$Hb&WSrz<^9$dah(JL|TYaSz6~Jxq@ax#}L57@Ko$P%m$n+g#aM zk{XSaAa>;U`Ex2%4yj155)}C$u{+Dma$$x<&B2+-AbEhlwUjMOiUBS3*hf(Jyb3AZ zL<6G5``<^+BY7o9i+S%0Js4#-kLbR4>g4>S&KRim(9fP%!!y>Cof>ywR^1fz2|-#< zd05c9{u)I3{!p$RauEQTff~?fL(tb0jCWH|M#GLz)(@;2OId9NHJp+5hN6-7uEhR!gU+w_mx5#pGB8g>|uDPf(z% z2Yn9&Eh(4luwh&WqaQ0M^)Uiwd%R?9v!GwZ;w+tgq~=th*jS*>NK3@BPEyXWm&pF1 zv)GB;!a8~o_mnRGG5^s>zPl8o?vD_)(m7Xr_kx64e#!6STX{TEj?pC3s*j}EEzwUr z@WiesK6^qW`fQ$aE=C$8HPDVI4)=t~kYT=Hbs+6tDWWApR4RgXM<2tPtRYg6fdzF# zceE!5r@9l;4>q$|m+O=nGO&lf_2`~uL8ngVB1Cn>G~KenokLh+X5qW9O^A{39M%A> z6e{7v9u!Rr3DZZ~l9s#7-+8V-o3-xf)@xfeTZx51tysP_9P9{6mt|kRMYo0I>Rs11 zAKgrHeJ+$X#o6Gv+ui5TxoJmIBT7R$!$VRNwX^VcaDBD;w(uuMcDcQ=*W2g7vkscS zyMXU9B+wF$xK|pBklrgGkQ(;~kp4SQC*h5pk5@6=E^`z|3G}A*jpG^-OXRD)nCUU% zOwhT4zPAJHnSU)OrKrcK%;8MM8KLqEftJSW4(%#-ZK8Fb`RWC4F`kawzw%ypOt9iP z8JxX1ht#VBz7OE(eI7JT5H5Ie2tMI`sSs&oz_T9)X>LKIp_n$P06V@|1!aE^(8=*I z*YP0rrI%N4LWUke1{mF39?r>bMXZAng;$viMZ^qvG92Cf**=A#uq&pZuq$>Rq~9!L z;mL8XPodu-#cOv+33Wx%d!+xX#35MaL6NFXPv>xJA=MwhtGlb zN<&!$q-pNC@I-1GIjKp{5q>KTV!a%Cq4h|tb+x!7;q5-DcLp*H2>T>SvrifrvroD` zgNy(#-zWKUVqpz1X`!9jw>)^wyHA?U?vrL2L+jxd+WM7epEOs!PvVS=y09h^o*stx zzXTfWlNK9Cpgg1|P%uC@p>K*TDcEq+`BD2m>3-u$Co+5}EKNx?H$qFZeV>%Wn!DuM zaf*!6S}3tP_emD}!(EC=QSh`7o))#t0muvNbGste?2{gJ&g+uPIe5QMn$xmR`i1kC zT@jP31mwp3{n4lU8clQ_G(d=xz%|i|b#jEaFV0qo-vQ zb=xBZYXM?o%cnVUR!yCLZLF)?b#uAYghSLV0_xb=)oTe?X|1b@_+qkt2nz|HE=5#Sn?2{%yorIW~79HVKE%BRl*$qXn zcppVCc>gzDw)WqAXP@*xXrHvqjsVhQtf@=>t9{brC^OWy2CZ67Pg>)}lOFcAfWGxd zNQBoHE-cDfw=Sm$_`R6nC_^O23A8~kU;`x(zXH%{m8|_Xh?c$*C+0d@R^J{1q+^`}cnFDVZ zf}Vlb5zJ&6?`*&ZhKuB`x@ZCM+Zahh-Jr9T%%B zl8MnW)Sas~8tp}(*)&;JAw#$DeDOWF!JKdr8?JPmN~$)Ws=M5w?8N%^4i=zRn_D~H zF{|1mxdf2EPXv!AnUiU*qV78n=uJ%rQmC1`&DZU-nzt2~twI{gk7wZSxG|a{V%z;l z<8j<0K;>+pG7VA;bmX<8bXMT*U&2^F0p9EL{0XQWCt{h-`mg{aWyLy5jHZAS)Gc+I zRrp@4Ed#ksT4>i2o$4gCYA3A}XzCo#Wb3OyolpAcNjfo_PO*R|!v1IPomtoib{l(YaWj0JU|*%Ea*B zXeVP4>)!D~>A1<(bD?p|xM*&m@e{tx@o@cXW_>fBbQh=Y#M35rP=+xbR2s1&$o|LH z=Om{JSg#O%XC5z{bl|%Vn!7LHDc`k|)r!;o9c7LKX6XXR-2m42cbs&TnS0xR0X_#j zsSP}7P)GlbXM}H0I*yvJcM!-=!I*+R6KGA}dzQKJ^mb_Xy1DJbePGdOq2DZcbIoIL z{M)`XStejDp0#SNp@;>!Oj1byocnP(Xt8&ns*B>{8X2-Tzd$>PT#gf?6-t5T>F&9) z#;g@ZH(Vjj;DwKPoJAMWe384l7|)F9ii`QygVU*wYR7J~9QcwzNUS(vZtuA2jRzd& zz<69-Z%1uUa88n-W13$fDJ}*VMW;Guuu3iPcD!+Wvq@q80(X=x{Ja?6c zy*23K^o@!T#E{nT0@i;a5I8=8<;lMCx*zF#JX#)e6s$LDL@!9HGW((ISPvzya)5>q zM$LN7Jgd2C)$U@XgI==0x23wcJfd@(#2jX!pXdBxJva>MKZ8~mSK+LS%lAlB%d)`= zaeFSb$FbZu?VeS89ASwa%a4N2Bw2!!818P4VRH(@IzQ}*j!qGR6Tz+mj2;Gx&-Z8? zDE$Gz5p-X`FxRu(5es&&Nw{I~Jo}9>&EOTVI42@Z(b-B`=X)NJPj9g~j45uFl3h>}BS6>Nr05Lj$F%DuwR$Iqjc3e>0{ClE zACBKx{NQ6bU2+Z4Hox`c=k^F2x!}ap-b3cMJsvN^BAu=XbgD9>AMlXh*y2a!Oj|(T z4IW*9X2kb@Tep#W)w{Wo>QN~$hdYT5`#H|-dJrdAKQLo4h;Mm*Ywi??#;My*V9frL z3QdP3HQ=2emy_}XW@U3aNBq#Q57XSIjW;IaNvh7}j`2<{KW^={@)PE0;PvJJ&6yfC z;0poUXOQMFu}(o!F`#Qxp!<#TXkl>Dj@m_qGOm^j>x@pf5c#bf(JWpAO*Y%3=hGcQ z-~K_Q&-AQu5FbOaaP8R}1`23*Q;1P~-5Q;)7v2YojPV?VmBI9=l+YU)+21;FPS+xO zh1Hx(i$VI9r{1h4BU^XUk+J>KvlkSfwlY285o0Bs1oSoRHn(`5$n|+-#6o+y%YiaJ z5SGaAZ~LbFS7i2->D%{8k%#MYPkD63`UiBPiN>>FH;g_D`1JM(hy_WaSD zA&djccE+2EuRlg){TaZoM~LXbG~V;Mq->$9g1+BMUqP;n`>-bvjjI#eGo@q{^p#0v zxwtyk^A%Vrm%NtTt^FHMpM|*{!Ae*Bh&-%~K$8nl-vv>{!&6mBHz=Xz0O zPih#c2~!kVBpE+(p{bwU8oqIc42bhYYto3LQv#1a<_z zFTK1O_1uerKF8v%XZxaKa-1mRdyn$?7B<0(rLhsnfW+5a`z54i)5i)q9Nh`0PtmMC zO2C=bfRzHg>&oK^)-lr9WSpgxC^gPhWGLDdhQ1C~bLZLDF|slr9db32z2wV)y;0SJ zRjGq74t~({MD#(Af(;AJ=0fhYm(fce7^Cw>(HVuU6-KHYX+0bEg>H|6lX0@n2>@j| za5d5|fR#>o_t62G`%N5#@Q zh@P};aJ#=lN9e$1KHe(8`ZT)(RJGSxW#^0<5Zht1o#&ph<#u(!z%8oO^ zHk)$tAz8OPikwK!;vzGM-{-dyZV4C8n7ce9waEL(jAIW$IqLI})mUYw1Og?z(I%R} zibJ)4l@V(b*XD)fZuJnstQ<}Z-mF7Y-tx@j@?n22{P+0>j3K#1^d~&|s3V;_WM(hm zso}sCL0`|Hocq*`^^A~{JYG2JI26*Xq^5KthqOUom7j0aIqv3`CSMi6OHp*x@#NY= z=5+3#;8}qk8B%BuEetO%tDSBr2kt=Py`_%<-`-V<(%!ZM@4{J+srR1J6A$3dcv$Vz z4SwM<*j-Z%@!a4s@gGDX0e-}g|ek2stb@clY~>bL5{+O_&*;a~yo+;5H- zV5a84zU;}6sOSV(2P=|O^`>5rYr0-7JO*o`{+4Si?D3jpF5sIFQt_W2`G}|JWjJ@# z?YF{Crb1Kt1x2?N86|2e3miHvg93{AJl}XvIN%%*_+hd%)(ADCSPiV`q;0^HXHv)> ziaW_3Nqlu|#sIYQ35_6Muuve{nkP~b7wUF&&dXg9 z>f>H1fo=1i=?RZU;xX5}+((5sa!KF61dS&VR@*benI2^{(_GlKGlKYEBE$$PBEum> zh%~0tR|<(D6|M5XQ^bd`4wcOXqFTjdkYA;$ObS0dvYX@&3XR|k_I*5b(sB9O+Qvr| zb8bC;dbI=g0Xg6H*yhB|?OP6PF?TWA95?|6ThwwgG{>=CQlHUp?dML%g1xM4mi>(O zjLHxuz6|lnP~R?dMOEkuK97 zcl>2B&f4T9<*#^U+C(R4iC&bZ?7_-Ayf)|dU)~wfIj;|_DGK=!Uncdx@*e3a0@}XX z%+9<}ccE?`Xc2$+-ocW zmD3`zYVwYFPl@dXd&yj+J9R5+Gi@Ko!D+XcLV?6Qj*kU==YrJ9s1xB;5qsofssgkk zVVsy8{R@H7&-TcU1$}3R=7PUXb@14kYz1zW)jZM}@J)v^*tnJ>TPAJ3x`peCm;|=0 zMplEgEq#iN!Y*|_BpzgR#DiUO?(q8UQuN{NlDcxcG{$vpo%WgK&m4K?+A~KsUfZbM zuzW+A#I#HmewBMsn&P5_YR4<)g`llQ0J(F2<)Tu4yG~XU<(@0Dic70bubr~ItLX5SUv1WGzP5#E zVqo)W0dsRk(HmPkw`#YBF~B`V_N`+qm&zfhLF_kngZ+f-nEhDM9em{MQ{Kx8p-sV_ z0tr3?c=8ZfiNE*A_TyjVaG%%%J`Jq#*FCZtVuui4nu4na&wd5>7mzuKZ!8}Ra-cq- zZ#=UpUe2_3C}gcfla^j48oKoI8Gewzkhs@;SMy=6k|UatK{(f^WU~3i^^K16w@}Hs zTz&I7fblK#TkJW*&*aH_<6UE|M6(DJnC@^ip98&U^>#D(GFJ~kol6p8AGI#EzTX|L zJY(;$0xs-D53w7hm$!knKy@wB#)v`YE}_J+%|XqgW>%Rk7fOq_t-^j@5bS#;(RWHTQ>MoU%J?Jge=bQ&JkH`Z-Z1Fd)e zjMhDTJ^wee@}gN}sRQP^wb{*m;2S4>0PlvO>Ai&Vvd#5whmrsI7TVARvvPv_0ANlB z+CSrYm(St}w#K`XtsjiiUPa|{aj%SJ3CYuE#zrN_BRrNrPhlTZyQZhsLy<}bn zGqimb?Z;L$-O)P)a5%6sQD3WL5s_thkB1?C#yUrV)Ia-mV zTK&xRij&V=FX?_p=Qz1h_hOQ&d*g~14I5TKZuN$Mufq>gNkc`@Q5hSLZTM!x>Wyz~ z((xLR#aR2s+QhXioX2LH0=_ahk0rif;`c_4teu<^dFcgWbv`Z>75%yK z2p`U!?Nefu{*>?r%;r@-zWHd;i)MMp(M{LvWL!tr62A~h#FM1woJ|epUxFX#$fi?C zRf@3IkyY`M+0edR+)5o;OKJstF9b1YS!ThO3?82J*&)BtZgcj9Bm6t&Olwim5&J(c zW>`N4@6HiBGBgR3_?J>@9aMIiIq^bmv3nKr)3GPrboWEL)82qDGl01c?|O5h>4^PQ zVv*wrlsycdV$9KkIawjFMf<%+M`!NnT4&SIQNAGgBb(~HcXLPhKY6e6d%Q-V->F-Q z&3HFHrUA_@;M+N*c1J>qv57t*KZy?%w8*EX(jtag(feSF*FKkVqTA9nPk zb`rI4xg2SZx&l5^fYFoPd<2$^ZS|75I(3WL95p&$cu2-AY5bQPpI}ao^a3(7$mnH) z-Yo+^OeEBGHcc#=0Xk*C_m@FpPXv5ssPR4MO1h$Nft$&j@PLf-f_yPHoVt~;8CS|- z*TgWA$)S-Xghmn%Bat7A*b@ns;W@B&dp+Sb$dDskde)oMRRARjF6lta#ejj^Bi|qJCHPNyX}1*7(g~ zl>y&_gBaqHB9Di`-v6v5{O1z1RSCy|%)0M)R0f|*f<)|7p zTMFkAbWLGblA%#r0iSFzkHnTpxQ2}TY%U`#1d9FJOL23( zkuX=jAfepW{+!b>HPk`+^@AIjgI6{rZr#+6T26D=wKO(o-x%ZqeuwPl%I_3nTo;k2`BUP66_rjC*p{2BJ_L|p3}KF z;MV)0l?^n>i=H?b!7Jc{`@)lWFtR6+VtOKJriUeV?hh9AAt_!RQG>NPAe*nQOI#aO zJ-(*e%nH|^y)2*5c5TZ_(A9KnfvJDnf=|6KF}M{&DfDTMT@yWz7L7D( zxCORh>>9}vkspzlAl~o?eY+t(HM>d0h2=2-?H^E59)k8J*z0MZs?Y-XHJPJPKm2|Q zsTh*FA&yNEGX^Ka|H*@6(#W{hX$$*1?J`ZZ{Zi3mE0@?4$c_pz7U1aws|4Z&;D1&< zsk!9Wrhb=m$;$Dzcs}2qk81rreb^6?#%`Q--TeqezJ+S>Oa?0k(GvR-9<+1(h+Qox zGa{N>v>bBkTljF2huhg>`RyVf%?LJ*V-{FA#XDC z?aJ&A&u=vg=TvM#DE`Wp|0^Nod$j{ml<}CoZUr7XjSX4XkDv@ zR<>TFLOjIMo#R&i-D~P+)mNl!SHuJGzXf*Pw3*ze5;DClp#@nkknuR^d+(2+3t$2b zcu&2%=wHyvrM~XH2DakYkUAk{H^BQG+_^^))v8((YlA0itO*%z3uE%f0I&RQFz71@ z5I&18h_=O*CzVGR$o%xJSYET5$vSC{wPQPVLD3nDWv$vZw2ictgieSv$cA`$dy5J9 zrX3RL>rTJU23-O4V|kR1E3aV~?)h4oAKyyNqguy`v|J|)`#udMY^b*{VDZ+#(jExAH5PHx|=o4d$ zEr1y1^5pUu8{?<;Xg>n{h`Kj%kg>YM@y}Xw3aWcz!t0>t3MO^?P=4(d@l zSbz?ZFvh6?_0QY{AB#{0);Jxk1yUMX^mreltm&>7Cr}b1iJkj=Ajpo)bI(qdwy2DthPFH3gD*@M2fg2zhALeZE~)0hIRQS*&!iyLF|fKzygoOK@cGm9Qofxgoh2BGU3 z=OX(UyVN8vAn#(G6T~O|1WS@o^BRy@T`)#H4;UtLe1uNQh6r|oxHQPvWcfiY!zMb**OS{6L7%pX(2(>4 zGRh+3_SGVY1?hA#X@_m`#U$VAV!60b+*@w1azSB#+uES-*Pxr4#BLX8G0H6da>*qH z>H$I6ORLFQ+yB5@Bwlm{eU9NQ9!Fd%IZ!GncFn)HE$I6l=m1Fk*k#~f%wM{hL=sb? z0zC-+su%KLt@oVmJ4Y=5s#ZS-F&jO5!V>Hz@yXI9TT-`N+LExq8Pr^!4f`553l&ur);~3Ck8X&($2>N88Kk&jKIEka-bQ}B` z;+SnMV)!=7U=o$v4oNY_%VAj{zl~Z}oA~sD^Ysv`^TH7DR7V#7K;fm53yLv6>Gd

VGl&83I4)2j7EFPw5Z=zDqS&RoGg6FA>xxUKz3r>8%V#ka4Y@bsb5pwBgw zP9k1m=3jz7xAw=Ko-{v;*B8@i2SZT8PG9y0eY=KolIQfRPZR3a-fG+WZ_i;)D zTXscqRi<=>x=f&d(;tuD<0 zUWGnq{C+;fgF*S6{t}?yFJX@7z?q$auYT@qUm1mG(%=_&lwP?RBR&Cv45^q$W~6S* zESAzDsSyCd1tYgtP0Va)2oJF5UiM1cr&NJ;Pgy>qW6(4 z`?rKKm%s;!G%Cy4zBmeJE~J*)4^;f_Un6|DEw3!!1blcs)N1-^=Gc8;*EvIY>H*K@ zP)-NA_x(sd=T^$;LlPU}%V@)#{%_woBuzCQlBTeWz{9zTIUC* zMEj+GnSe`|ZeEptXZ;cRL)P4{^6sp`rCTO!ff8{KBEIz<;49r7bG9#>GTjcYebF3m zA0u>ZiQk%!a=L^uSX5w~NzI@j2K3TqvIgqyw(sOg*^yLK? z_*i$_@_<6?Nc_{9(EIn^$(%^Tx@-31`%l#os=f0L(SEadx_Sv6}@}R zM}6TKuvt%u6nOBK4Q`VP#Y`Dz%DrZ*^pb)@0KltxxPAtMmOq zMz7%J3RCl^+LZeE<^;|H>oMpHfc*?nU+)BcVSXB@`xIcj4A$lQpjp2OHWK0fT#st< zkF$GY5YB+~OFiS^oNiA4FW>3$8hAC(*MGynC&I7qh7tbH^%ATW{eYGEoqJ$hOm!B& zP`T9p7OcA$hQj7w@P_Aq05%5UbHe*_;CUPjy2u)MACeND$+|$)dl(@|_&rSUj)t}H zMhNrqfce{l3cx%DFjv7I1hcMAv;%(+9rca{Oek**{15(13;&1ymC0Ye0sY}d8f{3R zNz5dIxJZ~U;IaV^+-fX_dyTdvzP*H$K0Zi~=6_tDKeoyKS(_z1X=4esA^9KM5G#P} zITc)4Z6)|1n914PNPIQO>mdc$y0<;rdAbK=ok3sj;8|G=+#ga3ck?;Dk?P~2-7W)0 zD|(UuzghLNA6jSe@p+d^;tR;R?*3*qmjtI4gXvxV^oy za}X^N-w1a**;tpliGmZD#PYF8$&e@YNUZtQL1m*1=o@KED1W3e(w0;XQDlOpHv%~C zqXCmU48{{4ngN2t?*<0E82FOBts4-D?K#>X;Q=GuYS~d6?`G0iP6js+>D@u!Gk*F2 z1Jt|aiL=EOB=K=T4Lr3xL<#U~(@UE3DO5%1U;upU28mj+jULWAR@GzcH1!5qMd&;S{} z^#pyB2D-e217jinIp|9rAe{NXX)xlmJ?zK&NI`Lt($k)BqS-w(qF*a*NslMFN!%_C ziFg`chUi}!B4;VELy7*~591-QFT=g3?1sotY|N_x6T;bgI}1_H*`}cHb9je2QtLa2 z8isZDN8&3U%VChwhXQQq?f^v9g?b>jKL#L%m^{JW5=6$4NM9A~j->5%fOV&BYVbeX zJ|4W&cGZ7vJ4Hu3L-uptkgxvC$XzWACBcmBhQtmk9dt4o%rlc9(CHJv8yqj-;wY#~ z4{5jv_$~3Lb1L|K#!tqkgxvBEsq{9mu@Q5_V-@Ypzr0pa&0L57PNvgK?qCtv6FSgD zoJOb1LU#!$O-hngWEor>4G`M=#J(8v%?H@w@SE=^J=`-ydKk+li^ENAbttV9AXYLr z;J=Hx2LFxB72qcV-`ODJ=yYQUaym8DFniMYdFjP0H{?6!*YPvpt{ThjpG!QnL%!p1 ze4$nAd+UXtVwy$(2f`yJaoY@(F!hCfB?)~mT&JI=u zed{9A{V~wiWJwcgCRbu+4;6)OD>Mt>_YvRy2b}51cM^CERmz{|KZ9q>_TK=!RDcGz zCuN=Sb>7%AjWl4k^(&iPghg3lyH8=}b;hHM5qP>iN z6#4)^?SF+UfiE5+o3aqg+OIF4$UmdY6E zC%1nLaabRN7g%5Pl%2!~+y_3fpidpt@|N5E7NP-a?ONUpb29Slg5RUdvo@{UZmQoz{EO$MgAj>K@VJB3yCED2R`p(KCfJv+OyYqm;Y1fW zPD##h=Lpa4H0S0CaNmk5$j#}1dqna-)ZJx;6I^xZ4jjZyu;S6cCAj-`w>6Pj*c#vg zI!mBmRNUVNRZq60atVgWJWkjd)G_OinSu9$Qdzt^M!XT=bH3KuZ0`rmn1KQD0Gd8u^E16?ks~_ z5dcYN$rU{%+iBnia)vN-=N)Lfeu!ki)#v)c=~y^lE!i2}ImrJMPRY)hJ4wV;wYg;b z!RF%aNVh*1VpnV8`NQU&A%EcrTyh?F>effUrjFy2DWEmBED!puLA4l+p6+Rq7&XmO zGb-vRxEHo*SkAS(p8`B-@%RvR>MqXCr*q3ISWzBWQIW<^fD_YO9wVHz(Bgri2%C{x zT8=Z9x*`F(vq@=*hsN9LR1OugSN*k;~Q8^=xJ z=?>Xwq+jRGcO`x0Q(Z`jD-ZAd)Vkj<4j_L*MXRKCk@y_iLygwNuNQXxDZH@jg)px} z*&VK;U&Zcgjr8j{d#)5_#5MaNUNaX=>)d{n`xl8>fcIzdM|RFlZm#=)P=2zdAFW5M zcYBsy7NY$U3GCr2R@^h(xs$3Py|)vcp+O0EKu`5DzaF7U>d?Iv@7-#7O5e_dOeK_L z#qWpj;#PC@K&gI@gPRF^hYr@&_7J@zMrr5wD{U;7SZ=DrnTf7Q zfGaxF$(XwbC`O%jdVzHIFOi zx3ZJznj1U!E9jcM=D8xJ=#Y=()QY8Y-7ZpQQXDdWDvfoH^(1#Llyq!17vrv+tJ`&B z=aErfBz*l%;%#&OMoyU*c#9`3)&QTnyZbj_m*rY#G;^pOqw(~X_l zT}O9*Yl*Y&^Y``A{+LC3r3@A#&Rh4X^GM?ildJSa9KJdlu|#U~WJ;iu^xwKd9x zJkagniWFRhrVM&AVBakY#1_Qb)O_sxI*IB0TvDL~IQgVb;K`??sLl!YT~e57m!x!p zo;4g!zRIwCDag=Fp3=ZKF8s1u5%`_>n@*lMaRMbqnJOVq`bH?+gy1_3p!esIx)uHr zn}O0`Ee+qpNcG>jy$RYH)FtQoK_3ezsSDgXhX!b+Y$SeQJ*?Fkev->>0{I!8SO8z4 zsNDmc@@nzli{mye-n0iI5NYm;wD>Tj%9Wbmur_ffRVd2C%is$IWl|P=i{T#+5}#Z~ zZJA_nl}S@t%A~2zGHIH|-Q~OKBK{TdL$8W1}>Q{E{N2dpF!;^n~s*lCcvxzii%)TBIu!RS|FYL@5=V znL7ZHCv??H?sJG{g7e81v|HYZvs4DS%gj(cYKj$9Q~z1FM~XT;Qy{S-qM+&t8nJ$3 z`(!u7_DHJaa`PH^gQKSlLJ7`VlAG3yUn%2$gz!%fI)FhxfM{q28J2if*QpFzA%#k&}w&DFM{dnQyIs;xJ(MCAE_JmEfwoid422Fz*I9AEJX>sWw(&fY619w?< zN7sMir4FdlWu6avRMF7_#P{9$+WUFkHLp+t5zvPhr$?x(~cT_I)q- zLGugy_pFPtjThemFL!sm_ zx2d-zhJ3q3H4k|3&nl#c#6$WT()*AENJBQ_6Rwmp?DKf}v}jKXk0zg&D0@x0a?*8I zEJSKlm3!A8EiH5WZvFnbQj-jzz8)j9$>3`)D?=FlWjIy*=aBj@Bd|$7Fz4`n41kFu zIJtg2x1alk2c_R7DEZ3z84z3g65QS8&**qs6zNWbUSPQ#;P)=@CZ%4!A{DnVI0Ehg zQ<~lDv-!s)##L#jK%e}e{HwLqF5*py6=rer9s`xb8M%2N<-v{&nqX}l9nf>8IwCcC zL8_8p)9AAtsCZ?a%q9n{RUxdO0<6o1Q1jxS;5|Z%vGdX7w|b%&rsuF6xYCd;sNwrM zvL3Z;oN%-R8GORE5}bLV?)!{u>%Z@KNQ#;r&%u`z#3u%FrKsnAzy40`o8TSC8Q-;E z@e=xz`xZzmf3L7!}B5tKbgaU;~a1vkt%*Mlqz2H%R+qiw7D1fZ1!K_NDq82 zWWOhTaEB)j1C5CskaMNANm-GyD@@nPLc`cR27>n-h1YDy@>*AOK(UMS-V2VW9Hbzer)B_Yd3o=3(yQfh>INq1mr znrCxN=cE!mZHgz2|IDqa_*KPk&9?z_Watwn0$pfxnr$NR)<1>_WpaQr55ad1dc%M0 z1-v!lguzE7CEVbr#RtIihC*-iVLut^5$=m?X|Y}cEy;Z!)ZPYG|77llmxcU2k_t`~ zgW)3>9tNLRVSn*D_?`#!d1Pn-S^v;yk{|XuSkHw1LqFl`R>%|H78|0#d&F>RjS;kJ zO00*|1smKt(ZFncG@O0LKvpEo#1x^3Kf*s^8e#$6IdyCizSE{SpOl4R;#z`3irtKLXkfL&SvdS>aD-XVyZ4x6u> z(Y1@^!mW#wL5cv>fA1h?IG=jSm_uuKl=pzw=2|MY)v81H4dopi-&3K4n=|fPA3YT* zJYh@Nb?GIduO{rcR0i=w;tOzMANoSh3;SU2+avF9GZ^$8Suc`Ubjp*pS#HP@9)_{} zv>hd`30{Z$yfcgk;|_Z?5f;og+Oz zvi(vSCE9{#z49I<1u-+niAQ(E@Kx{n&5Yqw&-xdYhL1g0q^~RMxJD_FUCran}eC8cwK#xfJ;;Qryh5dNtUQIEEc^XNGTjP#iF zJoFf^7^!>HtIg8__xjCRSk+tngmXB~(Czwr`@JEwp3Y4F&H(+0$C zVDT91m#^kOky4B!QYzjvlQ(dmNLu!Tay{3(eI{_!ClbV2mG`<9Nrve&?bYQUxDxp~ z*j4IFPdfI`wZQ%)hn@r4k3eqRkr(kGKgj+>Ri24Zb?SG{CcGbiwjqww1)KtV|fMl7Cd2bht$$XvoD}O^&t2*0pZH8hmSStDriGY$8tWV7{OhG9WG^t zNi26=k#4$4ge(}(FpRA!Pr ziQM5@>WX)c)jTgLUGJ^)tuq3ShJgmjZd4p_mf|d!56DyEiV#kZdawpn;@zMpR$2ht zS@}rZ2=RxZ@f8A3H#JC3wn6$8eCUCU+{wNL`R}|9@GT|SO`zmy<4rFm?j3HB_z-P) zqZ6d+Q{qG{ulgK#f)b|<%WJ-ZTy0}goucXxyrsnFp#IaL`cE5|cvJHCYg25gFvnd3 zMBWw-q{4U1lJgt13AThh0%g4T)c}EEhqoqpyI6|Ni_8DJb_}d7VIUhy?}pNRDGGGA zliEHn(c#|GhQZs9z)zbhPJ*{HC3&7I{|LM#YvNP*=A8hkv66f^a+%#2F z2hm?}3)}^=KJ-;R?G0GVMD{Y=i`;I|`kExxNlt3fq`SeRP*ef-T5v^$-ny;svV!VX z=PKF^)F(YyUQ_pRpJL+ex(Svv9!>eiGs$fL=%j3dh4@#<9jV=Q7%xir8kJ$V= zgv}1XM)v=K%`fg?17js{oJ}`F|KUED)7hkcR}JSotKC(wb9fX3ZIAJoujY$j@9gu$ zb0fY(@T&7kp&Azy{jG91<*0}6JmAcu@c&z&84Gir28ql$iOb(Se=f*~0;3$bH@mzX zRzraiiBAVw`l5}DK3X8sXX;P`d_$l?dSI069|Nv`z&H|*pIwf`$DuZzUJSV=?reAr~Up4uCwlA8x8VC-}>CVhfE7`JR$zuSm+>bLPnne+CIZ*`6iiU0evIkvJq(S5r2*N9KZnTg8X>ExX?>vR1@5@BWIoSPS54vhLRkP z5x?|b^fp=>L651wRbIHyW99b48%lf}S}*ts1`9$MObfLN`UZ#I59Q?IE~!3LKiAKO z);wA7WZkzyB7E@~{1V;yd__eqo&sOz+dU3!=R;Cn+H9-T8peItJ<0h5x!06&BV>21iavr-IHqq7SHS zLqA#HeO{s;^o{oa8Q7jF;tc3N_rLUSPN6etF0Oqy$P#i!PeJ_VDt7^24SIMvztlvT zWu6ubZ911ozFr4jE;#cbaiPE;(KNrU_KH;7f~%t8Ml4oF_RwLGJ&JHxZ>j?lHlc~A z^KR~KKSN(u(%og~&2AGi8mYJ8s~*tHZ;}~F8F9OA#9Pwk36pT)#`=Z1aKo6pMzYS z18XJ}1%3BId=Vwa`{f~hZt=i#u)BTixd=OdWd0}c^`mj(d9b8Y#B{*_{vieUZa#yZ zpIFqt*M1KgvI6u252e(Xo97zxyHWghc!bNe{pcg^>QA#jmbMX`R?5B1PEM& zuf!zs@f^ALt%gXX$AT{Fv0Qu!Px;$FOyoOOWrWV;968Tzawy%D=#?~_3~qv{O;{{# zCVG9DmiSu6iHjksE=6n{N)bN?+w|rr{$y^l8&n|uO>hhI+}5Qj2KU)#;1r%mdY>n| zNe1=<_&?!fihL2|wwLrrWFY9hM>+ljDbolmGfTl4%TGWa^ngL4JIi3N^14LW@vaQw zN+#Jq7D}g2GC&! z6#;bwExc6YI2;jFNNd;IwgY4y%#zT`()}?5T8w6*xCLT`qPwn|GAJdPLF(>S*8XO^ zv?#ezDpOJIQPDYE=Xrn5K-vDE-~YM1o`=`#%Q^Es=X@`p@9lH{ybr4gHuWI>Q(b>S z-670@lWh)0sFm*59ZTWAz$~bPmDgS?e1o*Uc{ST{I_S)8c~WihxsENbtZfZnRrYH7vmW zGA&nTjwBgg;0T_X@Pqq;^!=B%`>f+#wZ-9Ru}P@4MRG&h-WM$rtS!d(A?JlBLBRcf zP)kR!zx(;LMhR2d0Nx=ZRM-eISs2-3Z}`zIZIH=XsXfoOY)N0;a-X%f_=@WJOC(WR z1L@@N`IGQJ@Qj=2SqA!vui2JjZYedp%HRRUmDjd_zg$*PR%QO3I~?nVNxbWR8&=+X zY!?7`D#Ijfvt22x-BMvLaz~`rmKwN)qI%*(d?kMwl&7Mt%ldcxKVh9_)fP<4t=Yl| z+qzy6mF4SfuZXJhSHvKsV9d)1U@eEcFN%utb@nHnFYrcCCeY>=uJ=#kGB9h^T@L|D zw4;{~{58phA4HuNbAZW!E(`XgZD|AfZDPDOjl&bHM(uyV>DxYgdg#^n#TgP* zXBZcHYKvD`TVWsm!qM+MfR~2GZH2V}79XteTgf{_ap$2UH#`fuVowCPPG1*AWJO?Q zujt9Z%Kof-q|nwCiWOfGHZ*G}@|S`(9w{^<|6*4Vc!scQ0H11vkPYs_NZ~m0KkkAL zaETvFJj0BC{IXwnVtGHv%eU33w=2L8Q8Gieh5$3^5cLiQKHnpz zRoCyR57-e@(Qq?Dp3$@))-nNAv@Xxw{%^UmJg|ah>U*}pUEvR2V8|y#xjp!gLn@fj z5o459LAyS>9U>2(rK$+73aH*pe|8A7LznJ~$%s$_(vq5{|%3s|^ppooNpqP&VRWZ1S8 zohwpH^KEUHdY8OvVL^s{DyQK>c2&-f&P?ONUt?3lUxsI#zJO{))khujU}be+750Ez z!Io;kS6Q*wIe}Xathv?`P^H-ZtYlkk8my`SR4~>i7PD?1;&89yO*m~!LA6<;HF#W@**$?he$0b zLJM9N)8MtAWGH{jyXm3pU-Lq;0x^GkAVU}_Snxrqx36EPBdR z{0(?_b|+ut$GewF(ECV?6)yP*@7|l@ANw2$dJV|`#K$x_%F4>t4#1CKS&nF~Z2?;p75-NJ^Dvi&i!7R&e{Edl(KG0B#ppjHH35bU5e7B(fwW)lTt zA>>rB1j-{h)d(R}D(!icw%K?6p0fPdVF)mMTG!WYv`bvFxv`>%=V=leZ1W442_|7b zu)gfhUC+XgsBo=UmrHL~*=9M8-Pu*#EF7`r1458$*;Zsl@n)Vik+7sUu0{IT@s6{yF53`yaLqTdv~Ui3xLh&8`i^ZJ@E)+~1^#^<}_ z<9~K&tG_+f&VF#X|1Y%&AhRxD{{M-q|sXB zz_%fTkJBWDzVH+9?kFy=Kx<)BO-UtUvPMJ>bQRzc7CwnmZLsHD#dzJh1^I^6!XK0i zb$0OwSaALu=|`(w{D}$Y^rcK&Zb6jA4rsEe7I-6`0*~^Fn-PrSW+Y2KZw*`W3T7ou zYoS^UrHrmb6mtAhH^X{(jZJ#9Wj%kvy33;nRM<&T)@LEn{K+#4qg;?T3Y@eNLb?b( zj&RTyD}2}=gYo)2k9cV#gsIq7V}-YnU*CTp-hVbPJS!ae<3%Ih-+}x;LFd1{pU#~X zShpc~HcA90FKooK%6^hmJ&AQo7-+bdhWvHNf3?37a_XHf|GK4lw~FqO<{~8{r8NYX z?T)b|4{cHKzl$+gB7%lMLJmhgm|KzPWiZVxNZ&~Y8itt~kTG1ih7&ec$Uyna`g^H7 z>;-=OHnLcD(jx(Sj z;22l%x|3FR3@|rCZhmgzDT33{ywI#rw08^a6=MaVKUPrm)4u1-3(g8gezA{WdmZ^= zUm(Wf3u)~P7uEm^j}=;w|3jbcp87tUPKCZv5tF|d!2{}wqkKIg&; zy3LsnDSc~wU{d}XP0N{%Sz+>y5_v15&BQKu>vlLiK7|{(rGfdS60K;DFc`VPd(1gC z=A24qFo6d!6(#odC2pO{nLs0qL2rECfA_|1(G>{LW@3e&9xHrP1!OXRoMi|QmSErU zd7t$)dB_GRLZX+bz0f*bUs9(`4B+zfH({SW9BQeWWft4DWyCeM_+>%d=EU68e>t@0xxQb+ z#6O0lT@8<1|1pLu|3`?-{C^D*?avUI)vqvsyQ8NO9oA=E>GLXJ4llq+E8_!wl~CZWzQ-<=PQ1=;1Kb+RP2OR*c?d@F0M ztnjrsM8W_Ac0-%Xc*waEr&D6_b~7{-rw3GiS+B6j!7)>{Rfx&VBgJfLnHk(F*}vSi z<~welhkaR(Vz+^>G+%=BbHg!6#CIPO)w*-g)692}7nr1^k1yx)irs-b_E_b+;~mPK zLcDAz>CY%D7jUvFrfs2P3p8%S_)oOWT1UODo=LppKH_-+cT?*D)Ax8eD+rFi|Zk&0xKFx#%@0!C*-7idSlY)5cKv={)&(*)Z;d2(?}@X@JU z7Nlx=?A<{Y>^$+VtFL?(fol0cw_w{>THn-~f|w+NMsP+@$B!`t$WWA=^7*n`_wz zn_wpKyes&R5uAFo(?j(?jIWr{f09ag2>0^QHPZcIl&l=R3-5gHD#}=cQ{bCbX@rsTR8TI^a&u5%SnzJS*`Qgs&qgGzA zF3a=#%;2Nbxo1XZbLt(kj+d37MAcP*#~eerGD&U zrzmEqZYn~8#)DHl?0P*$&pW}DJ?E)qsVC*h|7ywN8lh31$lrv)!~k~32A&bxUJ3b>BZye3b^~7Z);hk*@mU%{HB;f9u1;6#gK#SXSt8c*qPjP40k>E=BcJAtF zuLk!eDwBcL8h0doUeb#JNmiFKX&U-b-1*=Uteo{q+@&1}tPH5CSZ6Jr3y;YUcN&iz zz{*LQ*l+|_ay0RSRW$oh#>CURbv$@9Vr^X9sV{uZGTD__3sdeB1>XFF2nnsLkKYS3{N= zR*;vsw6S(gHRPbt&TrwB=`*n{k7^v*Rej?CexF5js+zpoH9vX`Pu1pM!~dn~{Cx76 z6$$)d5Jm(8f`>3b%b7sSML3B9WL>2D62#}P+y&1bA&4pBrv~FNk72vomEg=_(|DOac{8yY_2cv};2P6DJ^9z+Hi?+voj*ICv5b0w<}iAbP?XO6Kx&DP4C6o0;CZM_>VKHsOx_^qoUd9 z|KW^E_}}6`hOR-JZLZXx;rH|>PU?>WK12y?QwYUUk6!QoaNryo0r@}-Kcg|aZP%7Z zMzV=jrT4kw`F+lO%DQw%|yS7KhCbF)eq@TbqLtL3|k|=-g)||TcS)251 zgYQd}PcpVb(C&WhC)x>|*-yJ040-u^wRzX_YV-5+4f%u{sxUe?L?vfD_6s&U@*Zrq zx;}Cc8v+%dUkd&;;vFS$;h6n#xQ60djO#Gz3MnCcD?}K+hqgh#cdPH0@vZ8o@%;rJ zUfA&XyhFRmM;@KaG!N4n#$?6tF~^8!%}!fV8qfbQ0FNbG*u*<6cir0czbg$%jBzOw zwJsJOThzD)B#v__5@TKR#CG@6_0Wz;8hsh~L-$vnv{UpuAW7EZ^Lo4g39M$Vgbl3d zc6?)7~t{Zc3Wg!fpqsNY-SYeo-Xv)lgxzAEl%^bkzbur3ZDI^QHC_#)8H zw&Csxrwg-U*=XA8{W7K4W$>aWnK(qoQ9S=z4jp`k4HsggNA4OkQNs^SlDGg!nnLq`R{{ zJg=Vv@5@4mG%jCsr8W8^JF4Xr+0g_I0fNVW`FuLjGeZZtKo>l!CU{-eyiYy1Km&)P zN6+htrX4Pvk?7V0^k{}pgZyg9g@z#iJ&D$hLB7!!jQm}C6(pF$g+mf;tU-RfkLJNg zE7iYR+XRPBz(w7_2vdEG5GXQ&p_{xHFv8XMp%*fn{P7IS8kS+eNea8hyrJ`l&V?Oy z9Qi+y-(i-+1K&EWtwuboi+VQII@$`mEF-Ku6KX|S!eSd)a1Gn7l5`agfIoW}sSZhO zAf6>`1r<-ZAA-I^rFrRv2jLZ>%>3K)8d0&V26}GH_;lCQ`Q-6s>b%L&a5&Pu*K8Ek zbI)|hRA)OvLeiR2tREm^<9+eF^9M& z!PA^i*4emNSwcaDT>UB%!m+tpmSq{Cwwu&x_;srW_Ru>3eAcTZiC*A5f&kTRsYZo z8li`wT}`?>H}yYxf^dS~(SPqzgVQbO+p#_g76cQ54e_vdUI=20NOW#&z%>M^8R<); z14tyllTXUN+q)*%6r7ZP8QOZQEiDgbhC!pUuw}-aKtOQSc|b3KAoY&+o%($@)$E*T zM}3v~(Fpc%8{0L>sv&oP}ZRg`GEYtt6miq zg*z7>7G*hr)vBFK)0#ep9UehArYS7yH#U7{y?Dfws|~j76^|H6&KF{UWi{k_Vk!I> zP^lp);KJ{=pj;EMtlr~hSw{%GGBL`1kclj}jd>O&f2O8#P4Q(^@(rOBFI1Ny^n zgarepb0nA^>5mak_mQ+SyYoyD$pQvpM{px}=`Q+Vr^c1wiF0c0vPQ9c*P>)^;uTWowS4_7$p9>lLh3CSOuRN-o5djV6k(Z}tfjWQon0Q1}q7AX^ z)gBY;G&}0In`^}*y0oTRu}-JL2yILs@0y6YA7D9TUU;EYmF`vpj>0SS?D42~p$DN1 z+AJzGI~N{=1WjqHSjxuHctN3zdGHa%_|m4!N>Jy54nr%Z#daeocx&r=Qm?b!{i zhIp|fvb6lp^avOFsgbqqGzYu(aUY=HEJnkC7(;j5&~Pz@bMJd_)rE8KdgPF|2SKyU zbZdz|2qRDiJ%kwH$G#YW?NdM#GrMyHMu6Z>bC+OWH~@Ro0PJaO;xhGF7=vL<9Becc zDe&N2D}Jci3n(;eYQ@t?A29Np8u?9kR2DP#EAa_PSD%0-$`f_iYeE{iX`;%SAu6gr zgxB2%#NZqam(RhUG-rV3`F3zKBdzj|0L9%F_Mvy{1A3Halsy5D;r$thEwTqR6TgC= zf3iejn%+X2sIBjzO*Na4@Y{Nc{QQay;E>GKWZN)%5+yO>5e|aF@yg9kt=m)I!uBBi`4TVcBMe>`^@Bhu79Hf|md}eT?uJ;8oB| z@FE+CTOO)=aIV&&4KAb@v?HzIMdudPP{~FfWro#@ALhX4F#K@r#a)P%{0*m_BKwS! zVWh(yAv8@^Q3#0<<#V_xbb>xj8#09%E1O-^3BtX{t#ZkIs^HSV4+19et8Q?sl$Sm#AUjMt z?^#4hCcAgW`B5&F4ZL9YDfoJqCm3Ke%?L50qGYf==G2x0X6#UEuoftdz_uY(+qRI!&YBv{_1>KMmSb%53GVBgj%U?HR_J( z$+J=^`Ho8SKU)@P^Q>1TI{|Nz8n{!0@EWk{7~ytLjG*d~WsrO%u;{9X+SfMFRx9|| z%oniXklOpGOTJ#7l-|OOQMZjPU?xt6$4M)H+@;GwCzNs;P{b;^g zrC;B1QJ$!AvD4T@^=06e_xrq^J$E73^gy3ZJQc?&VbA|;|5Xn#Y22;qZ}CK84Xi=T zFgk%B0%jZ|)S`Xwb(74_4$avx^55>-UfFE5}oQdWXxFdV6#`^_7vvk z%BY`SheaAVs@cJ`*3p4-GB<@63@@5~=u2kT9@E-p0P zy70(m^UkJF#4v)_Jb5_$n#=4nQQ`{s8b=YYwY*{e&4s76{t_plL~5rE-mEBc6Ir~B z1n!>Lrqq$I(Y1ZB6u=Yc;TjZni(R&6mKA=@+f+BhnQO3fmdka5oQbs9>JjG!yvej< zr=!9Vol6f3d$X0kkXz+zSkSSz>}%E#)k0@l*w_Nkw6QBZW5zD`L}h5_oY!kH8<#=K zA0vF!9V1-of|da0*xPin>#jq0z;r7#EEGBdIRATcFrr8B)@kSn48vQm6hTuLxKwuM z#-b~pz&SraUrvEHCqv61MySG@??9iP=IRpz<0;~5L;4u$I1&$n&X};Z} zU%#O7O=zQ$epqz$caaXjCb36>C<{7%xqY-<4ZWyU{h$@CX{Uyu2c}z%VM9>Um!NH9 zgqf)6u`ZQ#-Zq4t@+c&$yfa}xdSuXiFx`4H>|1HwCI8buH<#g>fwUGW0tp_U;n5_T zXN}FUQzQ$^!r2<<83&ts#!mZLTEhva6MAytjiER_!?__2g+t3HTNKbOxa*E|EOC^W z!`x~|lvQTY+S5+SxlTZr=%|0{)o7&ya_|`8r>+=5)DE_z!oLW<<*1+5%g4C- zeYAY+i*Q~;-Pi0Sy9QmyE4VkEtYelV(eVl37Y^zv(VoB=>~U83Yw6QF@*TU(5$=S> z1b9@F;k{kvA#U<~=x@XD6l%k4sSStGhGx;}f4m8Lry_X?NV80`m@yXn`)6D79ZmI|K37|)MC_LPGelZY|{T@lCf90uHlz<;Oe-yK?M?8!mqu6D$Mat}KXWd3&-JIWUQQvIV1)3T)b1-{wD6OUTKGx|$vh*VdrhnI zAISg4cMc9d~F-ntKVm>1t zfJ|DEbyhrJRM#0nQuH4NUT!(b+**px_z^<=14@I12 zjS1Z3MyBaF>ihudW2B2nZAd>L^&*8_0ZxaMj5Gtuh%^_8+8Bhgu8Dif0&)FH{JM-V zxmGdGK{&xb#axGSpbj_U>@LGMJknYu8`7&t!T_v>B5Lj+yi^kiVzR61I-<1IhveXd z|3=isq;Zr3f7!5SCsJDGYY|+t5$KgELT< z3D+E47vZ`H*Fs#axR&Ai1guEO;Mu7$X|a9xXQ8?IL1wyT9eM#2M+gV!<7NRhqP z)<6T1HHOTIXtLF3cbZI(h>C}!`6TDAEhT2b)rwW#1wO-Vx6vlqwlwXA?!a}Fc@YV5 z0yn7OA!6ytlw;9zSm12_ufrRMwzcy4&fQyfB6eyFAMYILoWc)r9!5Dp|Let5cJp`c z5x|(`&gs^nS?`x>`BBzxcrTv}ikP1Jyzjto^+gZS#GeDZRA+<>^>`L7+~$vK^^y8OlXb;YQ#B7oQ57;1an^Il*1$(xzdfD1px%Sfh4YSr7ULt=v@}k<8 zN{jMenpI@r_im9}cR6D~P3|?1c16z#vMz95;A_pXt|aFbD#-)vcl$Q`M>0T4{hgu#G#^HKG^y-e_48~!xIkK&NsZ)dL8F@cIVxqKs!|6N4 zvwW#lW(61ZWe_Os`a7wsH>0N1eAy;B>`G7i>h7c#Ggm0Gtqyi%1iOv6qg_KLeDDF` z&tXNhABGEGgPM*OIMlSH@9;hK&>Dq~H294^?_=H2hQNuUF+pG9ga&bR;n%E9$0;D0 z>F_bhUEopATuZuc0eH{nt%4nJ4rsPoQgwo5xT6O>J}Sf-(Q z-7Ib#xbBp$cIjEU#wJeD`SAt$h5+z-CteOp8t-z6Hb#dQg}^t#Uqzeo+tt6c1pY?R z5`Hy&L<2+penrR2zdWmyo*lU7?QK#HV|Z%Cp%weZBIAHxitN+#z7peWlPHc#9hxs^Jfmbfr$%$s=f;JqZ5~*kwsyiQ*2V65=IQibm#z}Q>G2xc*?S%_}vvN02X z@0z}Wp3IQ?Jz45^vi)(yb3MsXe_wGc6E~r3_@j?kChm79Qd^7{v=j! z4#6Ly3gdsVpPAT2?;6jE8w%w~&U@Z|M|%69XYhL=Y2W2Vpa=Tl0SQ{p6QC1st4?PG z8Cn=(ylrh2cNz__C5>RPN3xZ(<%q*z5*h*Tkix}S@BQ8?-!YDv__lj~_6$f;7~$_W z!-k-wk#1(p2`-U0Jas`UKo|Bs8*#kP^-~Rvw(0zCXiA^6UE^UW*AS33p6KT3v^OUGa{Y`>>(GZ7c-1* zv-yzts1BtuCz^1lIV3JH(k%IJ$fP^kTg6IE0?*!wH^}dvm~{XVd}tn&XzM!`j#2=g ztl@gSyyA!U@C=--MtC9)JJFT*#xL3__h7dS_}n_| zab-w^Ti0Fn?{nYM84}Mj#Cv(-t00DCIwuj~uvJ{dw2JW>rs5=QtCzsyIQXVQ4)377 z_j{J6kIGDP)2M}84W2Q8DwAB?x#*~0_j@{a?F9EV9-LQWx@WkAotlfXJ-`eAXH`n3 zM+2UL>6S7j-7_?U^uaz)F@YzG*i)U$i>7-5!Oza_e6naL#^a@4BNr`v)e|k;?v_h5 zj2oCawUzpifIjqMk8>fl;eHX)#({pR{}sf@5a)NZIfR?+n)vg1GHKvEiT>4jLNlhm zkLCm7yk$>aXf zbB>o=FX7zzL6WSzvjG0au`7=NKOq{vG_e0me1k&^NJlkX2$K4@8u_IX-{9Z^(oqc; z`avZ|3;D=@0ek~GpPoQ}2G6Ao+#4z3tR)``%(w^9>Kxil5w|c^YP}rZ&#=qDM*<_f zV%xjr+LoH9b60NtHiXf0hFF=9B*}}?`pnXao9~+WGlZ-I5PIxq2u;rlfXlIwlf9n55I_>`i_tD^Ij@8B91J*TLI)yRINBX8 zoB>Tw^NL_iYlQFt!VNau19v&bH~fKK<}f zPh2u4smHCB?8QKf0*8#sDunDf=GaAy(+xh;c~LC04n1atS0%7z}4J0|&tSL!Gh_E7FINUAej<(MIgiu{7{7?*$@7sW;8 z7sYtnaWSUuxHz)rqPR1MVyG_YuaVAP|0&?^p;N$mPtM0uPTM^>O;V13lpA_uo$^ZB zdx<~wu#1V?rw3O>nC~;qpP7}yM?;bq z;zZh`wE+LhRgN~~!$&|MJVtdY*8vaN!0J}4O|j-Zxp(EVOz5gF&*}a89Dnz4(a~pec}R!{F92?MuQ{1#i`GX zdMW}|Zn@fkHtkb;!N-UPzb%p@%>OPt4$%6b)o}@2AEPr0a+&iwc3Lg|zvUT$5)L`T zGK=Fz@JlwlftYBBN!1ej)N_azCc6;IB@dJ%zwLrF}+2QKA6Sv%^#z`Use zT`_n@5WPdNT)Yjwa<4wkn1BcV9xx<4QVs8(pNK}Me5=8kFul5dw>hCH1~z`glOcVM zGrW?kbPT~;R^MsWtc%R}Nv;lFpS^^iV+U@m|?1g;4_ksSwe9VLH4$oO>?u*%fhOeRMbzg}mO0FtbUXnjU zvbs8PSxzPD&3$Ii{N`KrwhD79&j<%?Rlp+F+uK%YwM?Sv_Hg^2rx$CPai-fZ0&CkR zt}-rP{l{!(yb1lB0)HR9&}+?GUBX@9>)|Pa+TTjPYZ>w<`)Nl&Kwt+W@6a+y39Zxk z+NUqz&hX{()yKuc@+6+;^H=nHXZ71*$2NK6ag@y@&4)fBJ*B=hcLXw+XAHqCq8qu! zaA)mmyyIHFni>D0``S|m=OkXgY5`ihytOcUYT0FIV^H5JwQNGb#oxueqb-oy{p;AI;+q zp88nOe@1oi61A9}PB7W$IfJ*E+hulohgw(M`Sj6w8S`-F$C__m`xtO;y1U?LW(Hu) zH#_!;%NYHW`A?Evd*;!dVhv8Shda}cGWw0UH+g1e9v3Yd4L|etXR74?yd zjHZR=P|IRwl z4KFOPN|*`Xx=#bv!WAv{spUAiUU9Xp7)R?HzMo$BP?O1w4J!jY3a2$57nc?0Ju}WS z%|cOHVWnu;DCQX3+6kWb(sd%BUvugr=BW$mGbF-y+JK+6;GWiK8?H2u8|KTo=XmPF zZ%b$2?Jp`fGq>lJu5^@}O}CenjB}LX_v593+Om2kuE3sPAJ127SAwr7wk|dY)+gYs zy4y{j6=s)CasUR#yp_S0n|!6#Xb-2@GrCNx(EcX&m=;Gcx5?bp`CmtpJZP;ZL#4t< zKgz@j3Kr)PV7q`hEGw!3M;tR3*as09UFVP?;xL>Q8Q5fe~0G;7b3p4KF`O2%++N%0-b{;#~`JPlhtt@V9-b&aELp!DT?t&vpkfGA* zJJ@>$aV4HEp{Gh;fO)faXhlXkQFAJ04}2yV*9niq(1HZ+x!#<)wbs6G7=*VTWQ3m*_wsl+P_)N zfR>$Szb&=N+S{yp;^IYdgJh-32(?w1Kya`463noD9s`H+(csIra{IptQD7Z3DbFK5O}`gGEGQ zDlOCg7wPPX?fppg%_V<}?&~d4eR=VU7?Q)nBSuJFuQ#X{zl^5ugP8;NO2_-6I;R&p z|AP=pu%y|}dgS~y%%FLV{jT?~;oqI3 zb!eRp8K9M|nO1+zS9<;mkE6~k?K+BDsx73QXSwTp=w|+gf6Huzj`@Kd2eZLL2-3A7 zUSH2&0SW)SJJs_Me3}?GOk1Z&qHonrD#Nrwb(3Lj5>8HPnZ`$@J@j*FQ{7m*)^f-s z)ac=xJ%hbjWKmi=_$Tu!9b>lopKZJ6*~_pueFzYR2i&?!#{`VB?dPX|>j+jFwK}PX zYx)cLU~u)1x-c3H#n6RrhvrYTFBn@?8JEak@x7-*QAUzOhCQeFZqMO<;u&D3-#tw9 z`6o7`wcrM=JklZtXYb|o_L&3w(n08XJ=}TxohLJ%#Ch?W`9!-l1M|3F!rVH)IDDJt zkZzJ=DX<0X@Z$omUcfr>pZE`TPlg7-;2zv?lH~V(j+wY^aP;ylI*)&3hV-0PJ#$gN z^){b^8PMwu=;7v-s>V4Ad21 z(EL*GU+@cj&92-0y90Q{dq3Bm0ly};-VXlH1G8}{pJ&-+{tWV=7}WiPS=Sx`c*XX& zt)SEQ4s_f?$}@nIz240T4>7&o*Sg1bZdh#kJ`nTX1}!p@5`~)s+S^vtTrci?;}D&X zXAw7J$4S3*s6EAtSQE4^zeKt;ur7^Qm$WuFAg#jsJi_hd=5bp+evRl`DY4i=-T?Kh z6?%KLf~My_NqY5?*?nU;c=o1SFPeXZXHl}OyKDaY4UJ?W8@=H44afzM=P;kT5e&bh zrdu1#ClHb2Ux0(Z7pViiNcy=Kb#^<&!WcLwX|K?rO$buPoIq+pqP8MH8gw&tbCuj^ z{s6{$7<>*4GX^9uErq9G>wz3)Hxq0bwU42w_noeQn-MHy_;eYIi0eOIkR?XDKaI>; zr%3R)TViU=*RPbXJHJkmYW|+l=ZvfyyV;<_QsJEgUf5<>_amnlF(sz+UGVYqx>2H)virQtn&54sWDbY9 z%Jg_cB`;}=9lr*=3=wBA)d9ak6|c`Rb4o*xH&?<6MDWiDCL6k#;N}jS(ar?I%B;`( zCD!m?-7|PyS+Dn*u75&jKnEW^GR&$KT{HN<;LeH@dqvkq@)%mKwpw9>uEx{HyKI>= zc#ZWF{AxqFIp|@VH2<@@e&22Dp6t+qz6F+SFaS!=XUHpH=Tr4u=JRvmgStEjkr+d5 zhC=dq0A+Vu)c^=3nE~77W#_Rr=EAdu?Db)7-vDoW@_!DzHaY z1EV(G{=B3TWohwNgAFt}tOu+GtA!wNO~-+5haR*NkyZhR_fK}f+XKHlU+Z)8nU*%QmuC&YEiUI}*{7U%5uH6unsBx$9A#-G9ZvW0x zetFAwbFw6-0>{-JwIOKS9oGGsx6kXSIz%$FXnU8&$*-cIq4s}weTt)iT^Up1g`X8_M(+jc{Lyu zyVVp8c;1dLmG8E|-;7Qd$(iB5s1$dsFb0~;YukxyqHw)62e!00chZj%3~1FXZ+}bm zJDjuRgKqIONOoV_A&6;Vwzx+x#=P3D~5AaZ=F={u%it4ZAn(hF??$O2@H?w1sE?w zK4GtWjEb9SjL*9X+)deZ6>M6*Ir7!F;le+dYGyODn&I$2mQgcHvxx_~R-C@>in92Q z>&W7a+NWiRB3|72=@DuRalB~$o^7Z1tYS9$bQy1+JdzC#V(ruPX2X$r^9chQ(ld!q z;r3v)JYF&`&TkUS1o_}Hw;_gZs`wxiz9v9!)d4wSM3pLd5 zz0v(Z2FuH&5~q|*87T1xO5BMu0;Ce_2TH8@xx}GTiMy1hn`QR+IYI0GsSLOj4=wP$ zPZRBR$&OkyYW++>CebhYwZBEr`n|V()Q&3jEQi{mQQh+f*B+K32YgI7E%wkk*H)?d z)>&uFii@>R6P;_iU2LDut1}-jQ)Y*jAv($H(Pg0)wjv0TcvxYL)SA)lH2(+ZJ<)N4 zYk~NVgZ|cz1GYoq;WA7X23XCu6P#5?rt?SV*JUp%n_8B_AI)aUsq{4dAD%SutXk^f zv1edcdCO)lYr$&&8vC9Socd*!<|nYsS-n(e(&RwCr)sb(bHG6U(1YLS0S>^X*|kp3nP3? zlm2~3vV3fM4E7t%L2+dBK|De91Kp=$e9ot0a?WN^Q`qXbEJnajNu-WV`xJKv#bw5W z;-lCjt<0y$eKDg7c9wEpFRYPm#@(lAAN0~{dcEzwAZa#_>zl|vC+M;U)^qnRxj;`6Z+=f$oqMo=DtH?jM3H2f-H_SHECwk8h`AD&Cvs& zYBNEZeg6*jM-BD{-E{a2U{m(v7tT~&&fFzsI(}aE+_}sSJwFxEQ)!gvWoBhD2=e!j z8_b0Nc4uW|fj>FCC=1w6B=(#r;SatjVSB#@XXoqSyaSKzn{?yBY-WeNY+7a-9}4{{ zwnAP#BQwe}73D1R9lS9Oa;ZlBw5(A0S7CHf$cqvR`zL3l%{c+jTqzk3%y|!oJp-N=z(q3GLiBW8Zex-T%R{&hGe zd+*az`OWyQ<*-t(UwiSo)_M)T5_I?Q{CmNFB#8YD&u)2YR}($n<6YM`B$G9U!@7bI zw%StH9cuqmfdU+RX2N4GiKnfv!^!r5E6Dh=`{Z@n=LhFL&3QTt=nSAaPdJ<68$W&b zDE9sYBnD}a5C5P0!Buf#Rur$relXtkh_oC0*+sj{NOurdgWUu)x3%9pw4bQ{aHpRa zrQgO*pgt&?7BD;N--4CE0$uT)#}9|Jn={N9tK^~t50m(si}od8@JE9nLAb_;TVL|9 zJEmtcJ2m`7*jy4;|GTiso+%iG(|V&P6{GO6J{kU9cZ2TVkN^L;t`%6UnC8PNu$$24 zpS(V4{xm)nG}SZK#WC#tZNvq!=E6E~`}*_i+37RCm&Gach9|-M(&*RjiPUZD_s;7h zz6jG{ld(yc;vz733R?=;e{|#^Cn_|3_JgpN_|OjtNIZ{Nn*E~Pe9VSy*{8#@z(3u z#g{5WETi!9i3z&P0qqoh{NGp1KRH^_c8qc()}H*2D3YD&}2|% zgp%AGv;OP8DB%wD&{v^u8xpmV`1r6z&MD!B1J)skhogv>>xN^e!u{Bgv80t&iIw)C zIMzbc;tbcOqErVc>)_UC#DlU&z~}f`$Q$~+>!6>aKA8_+TMY9!-z00d_IPEzM#+{a` zEs{9=ge|`b-8FiLaG{7vVuJ%749Sx;!G(n%PtCDez~SSr9@w%LC76>Z!4&-_ihcKi*Sg=ePEF>v{^du7u}^AWNIwur_~f?b>T=zt1Dh=72f* zlFmt}@MRytZzkaP7~tpn75s$kZFQ>cs@;fu&Q)-M74Ja0O)~N15@-`8sa%N6o}{>Z z8&W&J4<*0O#4cNd_>6HW_|oU>@N-=A{!RHX=GN!-L#xT3^K&>&=ww*6TD_A=e$J(? zX4+D@kcACgBU)De-!nRaQQrq7OdJf_4W~$2ruy^^PEm9#6(t4?ct5XqH&cb+9ZvHP;+`azB1kPvowH z5*N#4&vJgr&u|99kCo&BGl0Q)oDL26A`hL8pV^WZKW zwDZ<>d*ZesZ3L;c9`wPQ%1!1d|1CR{@SHoSJa{Kc9^=Gr&8n2Ib8YB{RLUcE^7hDL zcH9!>n7`x?PPJ<)r?;4`Y4E5{J-Q(VR4b)t2W?T9W7E57rX_Ue5Lcl4{hJDm%p0~t z&oFv}h26naq#(LO3=?p3B&b>VVF3M>?@~g;Vv);FO$FO6u)D8K2d%;^yqvhr&YkTD z{yD}~IrJ`$x|FbOMsyf?8sh7)+hy=U&gf=xLvG$L_xmYf5~jjO_bkkhUYn}Q%*9zu zyjDo;a(b9?OWi@+gLl5{QCC{{51f@;@Y_sV2&Z$z@o5&2v*ScW4zoH`Rgsoy;1y`P z^6_Lk>n)2@8$k2t$GW#tLQvQ4-1K>F5|2kNWI3k0}e)?E?+2?0}jSf?WQcB1Pwnd z=;`3I&~{oS#hou5d1l3n^qp?Xui)qZVugo%2>eE$k~IN4@-b+@N5O|^l#tv#5&3cY zWOxz?75?0lhWrrZ>)=Ts5l`;Zk48(Yp(zk0AbOS%(LEY{KUJj5ioyHadQ_EBLT7iB zpzg*>9;0o)PqLry3A^Tr$cV+8aYe)N{rVm?-fP2qon3x=$M^Mr@C5H<+Q}yJ8~FJO zL}@&{{6z_$L3rL*J2#-i zb4eeDar!eX4KV%~0i9$+ffytyAvFGw%VYeJ9|1p$L1@9uqIQp8!@NiTqhxnbc4I)- zdT?y;dl`}%3AXT%_=GeDwZ(9x>)rz{OeN;~6j39nlmRYymWn&|Z6UN6$25^<*M2-R zhzVE=M%YPF>@)>@+u5G(@#;kIfFPmvc^~e@m>wgHayB9a`gJMfjxn*cL&7S^(Cxi0 zrj_Krq}0{E1Ru}a+449nJQisxN5c;RR$SFL!*@ z5yaMsL2ZuurP}KHk2;33GwpJFGb90V94IHD1k73q|xrM%ZZ6 zZ%E>0iTNvrx_;s{I&gl`@>IzEp}j`b`_H;C)|Ee@rU||}t92{g#rZDb-Mp>&E5S`1 z7H$#j*Ye1B{Gpe|#I~v|O%G;)>NG-j2b^7jv+UZ-20p9N2xvVn$sC?MIt%eULTU`w zYfmxoCSp7a>e_fMAAW6^Zf|ctJ<~lA@7ce?-&Y4b+U)}d5R1OlfU}e1qShg*j3jfQ zNSmbLQoCAlbDc7}QPXxm=z*u4L`8LbFZFluB@zr>knCeWO89qcDxYMXVqFS9<9%L3 z_isHKN8GkDNDp5)8ZOifEACu#lu7*9eb)0B{EJW-$NGPPaTEA8h|)tfLi+q)9}-OK z;d6+1Y%)baCE=ii&-=f8y?-1=2U2O>IgC)bdGBS`fcTkK$lHy(2kdkb&1$UW25`5c z1g#h;Oz`<_WKRBUBV)l@CEUCYSF&ZZb0ye2%YosNx6)CFy^vr!B_@M@-%P77VJ3FT z@T8fr%UgxkXZGtruXlU7eyc45*UWw^{O8ke!g?bB@u~euu!{+fGwN&Xd)9ojX3W|r z*Zyg3``VepX6LS8Q|!2IS#d7k2+N3Dr^t>(YiMmx(=RqREd z*X8p|&zI@qwpAde$wKu~btY3`#@u5-BN|UMRUksei6*)?2?{3MLb7LYIT+H@p}o=e zbZH%%*6rQiH@G|2fgTc_v>(pKF2YpMj@ad0+8>gYR&q=%N5mAu3(9r=-I4Z2<_+2% z4~vKgNOR8A>m75F_D6yl=>omHx`Z?oCp_XJSzEXFw|$5M!rbq+Veh^Ti?$^^e11q) z0<&DRdGd8R-W96*5N|%zH>PvLZ{Dpp&N^XF`gw=;k9JtU_WzpSP+pznFmEq!Na<3KU04?{0%pfB04 z%;iAGzhs2|I-=#gQnwHH6CDop|A$_Z%9O^u*HJnwxYbzJ?Y$=Dker6j4NJF*TjxA3 zmOy*yzaXQ*$(6bfzxLsmUq*wq@qXc)OW5hv{2Y|{uxR6mD(&`u2p_!fL!#2{ZS1uq zu-p{a3UC$_J4n;>$*eREKA@ZPvgEJB*1sYg{>&caW@GIs+O7bjFuKSlZ^`D(X0Ll} zqm~bIk~HI{`;K$h<|T;Kx`YpM=B0nebe zW@Lt9{!9l~E(1}YRtqY&*ZUzfWFB#QoF5dNb&3Uvh`Y$tP32OvYG(VT5|`mYmPz`n z>-Rh}@w96_R@y~ZGJ0HLKI#5%?1@iGQJ_Y+M`wof{umh=7ePGH5AhfWG^2XGTe_a& zkD14zR(V{Px4!qdSoSN}mqDNCI3zXqj)zTmKk{A!j@PYiNEzR_QNlc2>(oICtIC_Y{h#=PGN!Q^T-`J)mBmOUKFM8{ zI4!9~zk0n0l%0Gtkz-cGG^IzIh|o@G!*D*~MKIjkfWPiHL~qBOQ!{ zsfbLVMr?1)!i049gWOXNRnilet(%|0p7y&QqqMUx?g4gdD6}1W_V%-hC)GCAqw1^7hE^~tGlzF)H-nU}+&(Bz$8mAA*7z1D{J01E8b*`x>>q_@wPq*%>$3I6O z;X)0WsO`HR;)XE^YD6XwYz>~h++p~L{SUL0q;R;0#yaC3IL+Ez zh#hqZI8SGsuy7}lDc8)3sF=h(L0=3$botlQmYWpp7{^3kJ} z;Q4P*Bwtc(zPZ zr`zi}%|i}Fe5@w=UeiF&Pe5xT!O6tw^ie`fm(NgJMB18~IdX2ZnZ4|TWzNt!o6Vsu z{{KU8|0?W{YED|H?_)Cizy-2m>X%Jy#Wh z(z^k}pwW+aNhc-W`mLu@p+^38Rlp@?>{X9J`tBQ#HsHrgY;`L%OqsFYdW42Y=atqa zty6HSB<5C)jda@;8^@?8%^dNV9JNBT9@-_0J}XP~26vS?X?E)cjZAM%Dx^N8&u8_i z=yM;|gy2r)tDs$)w2sxuE&k`GTVIcOFgq1K*dDTqUM=>+f4jc)q|JYTpWSKs?R1p< z0P=?--|Zg!?i-JBKJxjoowgOTJDC@zbM#IxYG`sNu1m^dQz8o!3t8QVo&X7YO?Xo8 zj?ZMP!}xI1m4JyC!v&Kp)g3O_;REq&%<+#I6{JytGPbiY z*U(v*A3Vz+*BLsiIQ7X+ZqLo3a?+xgwLn`Owr627y-;ip%nHiT3qF}yIBt&Sbz0TD zPwLIzvn*)=Cs`|J*Fdva$-ow!(J)NVP!sdAUnisv{ohnaam!>C{DrAmHFr!2AKxC9 z01b&A#EFJ~z|%fuoV=Xwj`@gxH_v6vevo6UjhW}}*fx9y?&*`?EV{l>l)SI1~zsm1Ig08-V%gZrXP4%=_zciFsuC* zL2RYG3Oq+hvHZW4=n<2^Rt)y(kF<}33^ggx|3Ns!brwUS@GuKqozCJM_D=C*I^kjF z;VCkw#wvHlS_wumm>;J2_@H6)_tiJxcXHF7J2T?;+!5p0sUO`QHd@uDN3<|CwB9H9 zOq2K3M>ZZd-?@NDMW+f+p#}I-hA%O~sGI8j|E|tJ)Y;kpf2U5eiKJ9HDMyTB;Dg4p zz3XF^NszU&ah+b*NqY869)rBU`SY?O3+NeRQk$^H8*JY~hQ`T@qJS0XiYkqf@Sjb4 zy!<6a(omQDC3%tz_CaN+As`D^jZ1u07hO;m*{nq=n8Q?#*f1<(6xN+a_^|5@r{X~- zo=JWTeoP~pbYqr|86mvb&rX&hQlBzo65cu7^?~^(w*vOsqDdp{Z-jjr&O;m01|*?D z$!)88H{r;+>bflsD640R|(N3_I?V zKI1bZ1T)U8!e?-z3J>;w{vE^CtsWty;ZDXHahHla1zU)_3Aj_T0`A7)PR)J+J(>}M zq5li9yfBIT{JS7l&xO2kA8J{MS}K{>#l^aHajc;3Q{Mbm`t>4yv3<%ry9?>rOZe5@ ztGsiza1!tb#InHs4}~eXmt-L(R_K8JOd0x^AOtbxxK<+7AZd;>1{wCVvyqBaUDDTx z6rCe05$7Y038UzAD~fF5B9lJ~pJXSIZFy!>of2Fp9e1Db`|bz8>zWELoA(KeyT1^v z&34Wz#UvjgoI>o$V8CH%@BcyByTC7oS@KAYZqF4?HM?gvx z>-y?m6qE6hqFG7Ta(Jjc?1qYlT3xcoB_9bsO7eNj%-ib@KFTzU9y%)3-6%F^fSLJ! z*Exd>+VB7W{P}zibI#stzt>)S?X}lli&~!z?x+vD&l%3@U6-yYjNvTK(+9SWzZREU z;YX(^4N~krY*bshFkON)0rFKZWH=zd5P5h+wQ_mF*W#?2J}lBX8Sstm?r@T)*GM za5mdp>P2@S*h%!qY29TNNdjuH%?ZsOoxjv`o170#EJbfb zSbDIM_H4l_jgD1J6ZDKT_hD)6bmCz~FZ|k(_2!vt9L6Hm)ra+iw9yL6(}xX)=Vd;S zYbZy4oS_dJ*bYz6@Po!Hxdx^1;&mnL>3D*NFm8gu7Q?tS8vXG075mcA>wVY*;$Vcy zWhvVVipa-&fQ@p5FEpuj8@{EJxd#!(Y0n5R+GYGn#0V1(w6xX2do#Ta76&1xKJbro zLag8}0FFWjctg)gq5rj`2HDwC$vSTiwze#cC&8+vy7YmsaMZ(&+{`@M-Qkf-+V4b7 zai&_qC8FKojCsRr0sW?(&OZ0tLuceh|mPj}Gn4xk0o_kFm{L zT(bmTx!HoYyhHZKpijk(##domM17&9-_tzqKkJvA6$`99LQh~U{7}De_5n(y-aCYv zQw{cb!q_*iqQ!o|mIpdapgxpKP8-*7Kjz!KB9G%&&`0==a1YoQZQ<`Lvz;Kv&|hQm+CkHEc`z4?|S-<_`6OZPb z)LpP-$YQGDi@kU zq<~*Ixgc%f`hrgHpJX#90JolCov0;9QEkx}16aH#&ca9iJZB*^#&%jN;H$E*Fy#p4 zOZWeSg!BeQjN&}ynP0DNu23~CNIAkam#Ug9WFJGzK0D$+5xMbd(DrJJ5;>N*363|e zMjC>qyu<^mm#754#fBv&^y&BTC)I~-5r2eytO+Z@*KUlnE}Wfq#~>VDxTT)|(mfmT z1b)tmaTXw;mrbdGx_ z@}3Wfd_efY;}+&S;wG_Y^TJua`v-AqDLBYvF8T*CcfEh5UyDtB60-e|gg1pSam3iS zTT=Y{?Nh{$IggbJKFDwmxr2+#w;92!-tZg*_RR3hKl_QOtNTO@ty7ChhY4=mK7u4$ z?wkv&VnQ|Uqa#<2A3>H*^3;uul=9wOCCgLh#rZdq)vkLwjPM+mqVCBmoC;&|GT9Sm zBJ3l=ztRq#CFArVI$^qBY`4-36pQ&rrSKy<%aKcYz43E9)iX+}=S;ty=N=MM#!k%q z*SA!jy`3~4Q<&NZC3XD@B-!YaXYloy!i}q*4b-D>2nDG%;~|L4Yg9@W;{t!kBjScie(&pMOQ*= zryu+l{hIJN{*O(BSNX;&aUFis@%tTqbMYIWgtI>UuEcKve!sx)f=1}saA%P#+0ux} z2x9$@q`(p)?&Y;(H({s}U(*LcUQT&)aW-3`6zA8@8v=zY@i)Zj5l1DSw8ctsVjFK% zAl-e2Al3_URExtlqZD@?aZ1F!gg6!AsAhX{FPh5x4sj~PT|(R+Zn?I#wlFE~E5xZ0 zH#91UT}2$V;B{M1DegGp{1EpH;w~VLT2*E9m*V!e`6K4bDBc*vzHmQpR~ePdq+89$ zs6YAUQfWmkk4V_xzvOvtZvERCttM3%4z@zG-4we`NCHAzZ{r*kx&;XP5chv5&ClC0p0;J7*-6!XD1o z;yUy38`aiiaQQ23CtCcp+@KMlCZ1I4P4uLHd3}}mdcwkn_r)0racLL*Q*ayWmjo?t zG;T}}`*s`7D7OjxNX<}HOP=bN#zQThano#++bkRM=B5Fs_kzng+<3sg5dM@sj(<7f zciyoJJU!8$-t~&1<{NKXW6*C?+LXea963jV+#o@|;ry?CmXz`ZdOXqsLL~9EVkope955r-lDN$pesdDyC&WHpsIy%^Ac7 zxNs*{n1K4MYMr$wNy7Y*PAcnOCvg%U$2;yx_IN2gMru*4H+-vmx*dE=P|%;WU}WP< zS2gf{v&c#wIdT8WV-TF1pb0G{CY1mix~UT{{4 z_b1Yg+TZnohpNPXfQn3QK^3OqO!F%#?AfT^ zhjd3OkxM!93j{3k0POvSa=?C%{C<$~8x}<;6mpItY!@IGKp`~lTg=L@k{;hj`srUK z>0oKj(|#_a?g>KSK~;GT^dQ%_;k zg5%=9?7Ab=s;^KBr;Up{C57)7JIgFS@J2m)W)L_Tzp0`skhs~`+IflFSl_lkT`k27m%7vnoOW--N-nUtW*7`};E41YT7d>56<=sC$P0Htq zcA{**%P& zxz)3Iqw%i5+3ADzD%fB%Kw=sWKfxKO_kNu0q(JYFEZY)Klwo@Vo*CJ2J?uAtne zh|d=T^}TkE$A9jI)2fE97`!uEMaj>k|F*U{h|jCWei?geE$m^%n%P@cs@FShifyWv zNPT}S_wKBC7Tm*-6 zdff$4qo;eFk-LLGxd5H=3(%9e0A2G7(17o|EBF(`4w6-JyPBxTT92cL z2R*da0P8gcT!EVsF!!X(a`3hdsCCx%Dhn453+mQDu?YM zd`}K%VTd)e4OY2!bInw{Dl5(_aIV|y=~LqJ1U?oP@ypD(WnB!NU5AI)KZjdUMxs$K zLqGpG7X@g}Ajtqcj?ryINqEQv!r3?{=#JuG;Tq_-t-gMF+4knk%YGaGTQDCFt$XN* zsPoJ>Hdz(%iO}#X+^5*a!Fr3Lxk7zTv~JHs`pfOb`+Dt|f{{HZ7EI9zstuv+kSpbo z>a|`w`6!Hdo@&ET=ux8RxFGm;*f3EnXuHBksW$Yr^HDUCdH1SD(I_gT zRU3Y|0&ZkukbSZ=3*Lcu-^qfiI-I?TmE?=YhlJ1VYK-(FkjLumM5m~a&}&mqiPTTy zS{Ln!tfrZD4wN>WeI|ynv93_I)g8_ji;Au1#ksoP(73^g)0A-7ZIS2fBkd-5nlk`? zaU1gCg0`I(3v_xw=>b*eg~~w<#_55zmW3`k!(3$+3q@dE+Bj;supm@#>qFjljlo?B#b~Igk4X=f$yk5W2lxP8r8M3MQkfjW5S3vvrEsGZ8zX;(fPF)2*XihH5uaY;=H*}Sp z{;{#1qNSI)M9qDd* z!~ciyeQoCSlj3oXAZbr^89SeF_7nb7ncoA#-FEU?5|1`=oFSY&gZ=ei8>!F2SSn;+ zTEvXiQLRp4Oj2|-Bg5H8NKZ1M{Sq~%{eREuFt!`}bVEldTP4Y=E+K6gdkj`zl+`@| z8`?qIU?|5Ni1k%lg*|;6Y-mbxeuxW1Yz*L@b%in5Lo}#RP7XBKDa|aU%B(ytL;gBAc%>VLFr z40(bUG@o-36?+{iX6b;tz>|m2mN1s%31!P%z=%8*N}pR0iur3oO=xX_z1M~j!Y5*d znJ~ufc-Vtq?0zZ|P9qVS)nlrV_Mi{l6yHAAzF-QAbzR0UG6Zpv^^Ad%c!?5A$=GNYzxDl zy2q9<_B*g5jNS5tvj#{jRyh{z*^Cw!)>DtcQoa;d3jEzCfhr>I|b<{@htSP(( zxn>v}j@aiA8;8&^XH((dE$<@yO|&Hn@X>%jjTnuyVD8`NW1Y|?2tOk()Z5PYMAiV! z1#2Rt7-1~Ho0l3X{wM0^rp^z`HqNG)4tLCAntPyc&O=f=PoSMx(Mqp9Mz#3WE!W~I zX!&VrW>9POa}BcrXCyen%{$sVsVaAX&@&k$n-DA*q*a@5UaeVM2ORF@2YFp6az5rB zy_oKU9CGu*^JvXN)S+2a&{!+|heB?Se%2Vd8;#cUqP46nn`-+uYVoqD##@$KDSQL_ zItQ0z!_r+C^f}THy2(9RP*;ZG-d46yF05D*#>%Ad=MfIsox4;>fDA7dB@!Mz>B54))lWdjEjq#FN-{AY`ww5xfN00O@<)1x6Ven=j!^v#+9*QAI=4GZ816Oruq_7&X9>*OvJHBoSI}=zlNm|><%rD zm$X_&&VT7DAHu~ct5lnUj-?v~6t%KzWy7^k)Vx44V zi^}?gSFL$?60;UUn*)A%tW&Bom1kh}C@2|r!(PpdK9zU2|-Iy8oF;t=0r^Z~Y!^_E#&$2ae~4 zAVj!leE9eVW!m-4X?4n%09heH;)?Z<=*UN#d3DnGR0)!Mm>^34`E^>c52W=jNUH=n z8j#_W6MP`KhwsXB9_8s&q+Ne_GE;PwZoLcADnT{?a`WUmA4qQAU3oq!)f13kPcHU> zwB7}2l^{n0GJJM|4JD_wD)M!A3FHN`&rN0A8BiD>W&6YAwu9@E%-5pRWxn6+UytM8%l%^Y$ zLJ!a9RE=i$-hdwZQaNYx>8{DiwZdo=PFy6gfnir!tH;M4G2E%p5Na z%~Ki18zRk98D^OT1HB>4QyIn^BF$3@VOE6iDHM4cxo@}@bH*g5%b&#Z&@0EWgRDuzEKFKz=UdFV z-k66GGZHcBh#B!R?86ZMRK7@IDXZIE2!=eKMDeAjC#GmnGDf4V5* z%*P9=Gl!hcSa{r0+pfyou1&wbdWtTC%~g&%n11=fL7d0_1dVx0zi+9W!)nQv;jXr% z1ADi1`S1zp13^`-65k*e`Tur-%2V96Xa<&9F#FaFk zO8MO0nF|L$_l?kjpxj;rWhqPdKivtfb0yD@h_u@i=3lmx5`Ie=qy(HX zko^XI0<=fsCDHx~<%|3T4n0r~+ql#N$z46LHgN%u686n?EaKQ|>t<11`S=3TFiLBD z^A@+_q!?}eW$|<93*7K*;goYOMg`U{NWZS0!Z$0ldDz9owb8m39bpzSLGe7ezn~}D zht?nNpnRfixaFWZNN*Q!q95W2K4<1Kt2Zvsw9zJkk-y%M4FM4>N zRKwkN_ym;daM+GpD^f1s5locw)^cc*=^mFxV(wmfEY>D3s?Ll!L#y%Lg|#>@dKW!c zlRo5hXN?~3pq^uMPub0Xc$RU-w<0o|mFi9QWs4ZbTVXsKlyQCh2t7vP1N1C6D8ll@ zQu1Q+fs@}F2T5J55Xi>0Eke(K=j~f@{CdbT(5uj*;ou7w^+|>eu(=-YnGq9kM~q2WI7d8k7WMxQ&o6iw9+92{HZk=0 z+W9Bv^9#}!s05p6;<-W8<}buWdF#aGc%IDr0`fiAywsw#_+E?eTl12O*5G{&-oKm| zSX7GlQoQ#rIybKj?`3$e5KVaz^+9Z%ctSKyJ}buadVH;h^!kJtpU4@*9tg{VTzCp+ zfStj_6XMv(C&U8&ggDo5LbTvngr^wKay%>WRD_%m6B6Ho)UiTLNi;4$0hvXGI14Fr z6D!2Yc*+tXL*}f$Iiy0&M5#{|3|?9x zuE;wfj+k5_X5bOHKs2C+cxaEaF&itdu%4;&XzS zKXlMW06rd10-jtvq*rP~Yk`ySA65xFiv#PqK_uB1%RP>DZn}^3hwUsRF;(JIm5Szc z2>ui;EBuFKR6+l!N=*6pkBbiCG_y>ss4Np#Tg${X#~X`u^?~fD=O}b$P5i+E4Zbqn z$RlBV1BKY|ebYnV7#Tjw!Y5OIZxC}v;!a9(8GfmB&Vree!w(9CTuQDFpLNAvfI8DS z5N=VeArFPcX%p;NP_4-;N0L-$2h|yNRw?J+4gGRZl0n%#9xLgO5qyhP@!uuu#fsw_ zO4f_3byTMn$yXvUYRBz!F={$sfkBU2&hijOnG)-9CyB!dn?m*$088{6#T=BT7*md4 z;00=`lxiA*n#y>x67?+JPyP9NJr}L+``dyZlT{<4;jy6(I9w?{X~u5Q+P~O}(W()b z>#X9FkSWOiODchbgky2=$!p3RTF(up`XSsJNeSQa^zc% zxe-|e9bH=>bGvD7P)hMYr8s#u-B7p}z9i;&{Di9wlqdC;2XcAQ76p29IbxF-F_}*e zt3NHaa<(}EaSC_>x{0$Rw76KF1t!>mLi>#LCA|^9FadnIh3-BC37UUualX;>0n*y5 zwP;w9d#NRqJ>{ZX^K!^gcRfNDyC8|@YApsq!%Xg!f@*OJNkP`iG?E<{nEO(lYIm?u zV~GJoX2+HJ57x)u3m-Jo6Q_r=$u1N6GAQ2BsHzTyE~ZLQLoyi(SsLj<2EF&N7||n? z?R7>$yAdWra2geu9mGWVnRuAAHQC!z49D{$QUo<(e(-{%?*~O z5(c7myfGLOvq1Jf-Otm5R$vxp@B`{UDB_`Q%}Vu_@j{wGkrT-J;2tc69H#Nd7}`La zdJ2R~_reDmQKy>u82toA+(4TicgSFqK8$#f=aI8+A5k)bx|=4@916o6GJz(=PtLE$ z9SGv9l0Kei1=RxfBq)l$wr`(*rU)L5Ey+@C=yWcSef8m0Z(TUZ#I$U)$7qR#+}|1& z$PTx2$VqRB^MQZ=Llth2CP;N3!I#$+Gz@AYy_45Oe_bH_IpH@!8yA83HG=Qa;?D=N z(hfdKEntS2t~U~-)_}S?DLxSACPV?D+h3P}GdTJmWl;*J#fmT;{;$LA4(b2|pH*+P zXbqGa=Oye9SZEo+|JSa^%%Wah)W+jRiXQbUKA?vGoSwq!dJa@Fy!}UD(}WJr5Xv~u zbM@LB&bYy1Tn<0p%Q0h&%H;&5#5rRqySJmMz=YYLhJ3cztG|W$WmXHS`V`EBaGXfB zLH_{$B}Qmjuv-%^;@;|Nac1IbaR#30i7CJj!uP->Wp!K}d4j4GCS42!m+eVXwx|QN zMOdG~f(O!r^_yO;n3o^WxEk2e!@pF6f#Q)g$ zH6VwzNfS@lKWteN{GRQ@mZyWaH}1ep(XvmSJMCR1LHEIP#``_iTe6m2JoaHrXmDSo z>mNJ>|K|rEgVeOMY%Tj7)Il%JLoQ0ol00wN%{Q(jZ_V7**o?fwylv7#pVYUcI(!9Z ze*}oGoZdm0*6=N4iPac`Dm-uDVR%m9sl)Rsp2K*)z|(|>Ni-*cUya+*eZY4-0G)~q zaChd!-Ssmbc_DqEjT@wFIx8md6gK^lK-k&7?1Xc>JomPtN^Ev$n@D;S`@G+WW z3gTsW?2fTo=s?Sg5A+b$*9R`(;({+}9^|4GO>qm}Ob@uUa6Ys2c1G*?5q>y_ zNrT6&5ITEEIpCk$1M9Ls%XQ1E^G_oElCG;i`^Q0oDLyda0lL*(YXOa9pE)^Wgz!@Y zpBxZZCPwhi#wurCqB8Dpm_tgY$m*-mTLRc5H~2u~X;A|%tAjfsh8ilwNQ|aFQ7>uw zyw;v|2$n?ZijNF}c7{3aoOnVN%BHrR6Tch55Avn~d?Z$8{bXnvv~p=4M;U7WGq7l8 zBJ||2-afie3tKC6LKn*7q1C;Theh&4oGK;LK7n#qwR9*s=!di_R4t;CZrgbrFSW~c zsA2Q2(MrU)1Neu#}P?#FYAvgnHrA<{FwQ%ym(iuA>{ zR6*I48tZ4PN-wg_D7gkaBG0K*ergeE{vE_BN}3fvVzo{!vLanin_wzJx=(RFBBvE% z|BAGyx~1ifYf!%g3A+~Kyn3%KSqO+eBii)**b8%%@a7~o4w*z6#s`7l{%o;_e*IW~ zXrdrxnzYKm8eJPsbgD?hSf3>HXwt;=w0$JnxR1a?LnsBDCoZ~Fj7VE!o4!{O^ZR#= z3lOhEyzY1V=%N&_{>nt0GJcCRz2T?xKlmkW7QbeVvRsV#cS^|%_7p&R94Q{&cv1}I z*I-_}F3D7?u+OGFoD#QVFpt5JPxl@t5M3aE7Z9>V!Tx@9WJT@x(33 z1{cgHUysn0@b~K255aLofwnOwMdM}rn0VYAP5w0^x&&S_gB^`=Mf|Wx8`(;y{*EI{ z+2wIXa?Yo}i-U%QDzG=GAjaPX2zVlnEdq1`!2wFg$246^hIi>PmOu7R5RLlB_ijmd ze0SdNkG(3Tvfh6g$08KCC?8g}lMg773K92N3wk_!kG1@X-txul| zykb6h1!>MG<#62L)_@lZAbkhkW-Pg6S3y54+qN$IAC_QYvp6=5i%++00#8Z%*G=LK z=C>6<+laec=F(E!2!gLr=nt4#LTR$F zcp*59r3peW_9*lp=srg%n*;ra`-LT0z1YllJ;EN#4rSAvT>V1Wp*op$bcQa$NZJugl-oD$;`*1`7C3Q1S(gq3dCXlxh6 zcpat1{aNUAa>tc|Y6};0)utGJ#kK{hxY(a;x!EsRHeesl#eN4rcoBl4d9C8Kcq)|N zpx8)h)$7UME5B8-jdCD;v2UPPchWw%h|1vD&+v7pL#dh#s~ki3Y=ib1)&`8`I_UiF zbRn)7ck19FPh&mC5hvcGB|2c5sKuR|-fWyF8*eloA7-{TYPPC3;Qne{jt%Wh5h5+r$~x7k-SDRlSv{OL`{h-;MnCB6J_70|)%7zn|WlML-Kg-MmIo2I~=A z%;iSEmL5Ty#HSJ{Ox?ULh{u`xJmjBmJ1tsxeuLaIE~#hutzSSFIrMeii2H*8F=u$e4IaN7pZ?0>g&x5pm!(e-BAU1voL z@~m|i7ho4!v(nyQ_}`UK;kPSv%c(cZ^Yp@=k%#>D>Vn=l|4$UI&M__Q%_`l8ET+OE zSCC6|1SG$mBO1!aiCyD4uJy-g;Cr}1$(EhzF_(;>hfNV$L7foJTHVGa6F?28_n$-5a3oPf1MDe{fdoa7 ztZW(+gYyn$pzX(qfD*I|v9}tH*a>-(M-~{1#3TA5%JbZJMu`#zNR%)fciM;&MinI& zKvsgbs?gVg6p9rSA;+$wy|sAY3$}!dQWO=|>*Jze``|cPovv_D|hrwd;D)*>vq6JST)FyTl(MLO>|952JV{hUCSG%SsfPaTJZ;do%lzs2I?<)DH+ZTWEv zY=Hv2BB?6DqwrsW0QSgy>yHW3{L%=8P1_ z4Ig1k9iC*H20C7D9WR_hexT#={WGmoTK>v1$ZH|B&ySzWU(#95jEzZTv33TB$ zZz9Q_+1!(mH}|VY>IBk)OcTIs0ADwBP{;pIP zl2k{8=~|(KS)C4vctR9br;6jCZaq)oECxN9&|mCnmRF`%;SG2^txV{fb?FgkxilW= z8?<~>&ld6`qYVB9zE6sagK$RxE&4aL=M}{BLDhC{2-nv0=KGLF29AFRQl-mw=)R&Z zOHr43UcU7#aAX}GneSlW@l59OI<@d3IFD#)-gfdui?Ji;Ot;|ERi*zN?JBEJjqPd6 zi;b|&5SnUhft|vWB65T-yuSn| zuj$jU3cPEbA?2%Rnue95#+p}xGq;|6k_H^%t;VYhN-SGI!4li~N-l~@pnZBM_WY^A zA^1NX>&tp?4!}T@zim2lS%X|&Bu)Z3G+2nzg|wGp6g$)RlF|p`|BT?LZF2eOf0LhW zhN;+=SMsuyR_gzxbK;0fO84L-e(OO8~v$H{WU1dVVz8pwT4`PS) zR6F$@XFw{Q+1=q|zc@yf(TX)WZ&_CHB7D&Sq^OA?LhBhW~yAR90VJ!r<1yB!H_ zbZ&9WmH-*_Up?ww6~bY7Y7ahv`O@_2ReugMpt1tLV z0dR)Xz!_cwXIM?+2+oi*$aJfFI>McgtQno@Vu3s0=032_DT$Eqny42_Oz56!22#D& zE!7O9+VH2TdP#K*#{azF6*jpfnFGy>U5xo7mqRqLvz)FJzQOx|Q$ZENBP4=ev26)}}B$+Nj!sgOl|sxFdNl=s|vaww>NbWGlA?vfTD`qFbC9 zV|5i){Aq4#D-ojaTqz!~$$ctQru>-kw$2`v_i>D&Ak1<*>>Vl0A7SHfhrKF=k>>b7spkG@1#7!#Jp&<&vf)H!3-78y>?feU zJ$&}iN9>$s;B6UJ0Bbm!DCPfSdt|Och|JbQ2Kq?bgh56NZ$SPd6u8QhMk zt^;;%kX+|e&QBphJ5ZDYtf}y5a)Kt31g%SY##beQ3V;i4aywF7TdJjzkt8h zYXT*?8Rqq*-X+ish!#j`c4!VH7Wl@s$^0rR$$_5{*LYNR&bQrYA z%w9yj^x!Q5HjcTZeOI?*8hS0_co6&?$D{6XMVIhZRi7HKvrPeq^sjFDPC>q}`Q!_k zL^N!YdV4WHZc(>h%#SI&s~5TWzco@lR<-_RPnJ}2FV+(`3pn14ePw`TUn381st*6H zWM3pfxDPXFqB8)y+i|V;?MV>E;Cpg=0CsQ@$6*`Pk-Vo!2;Zq}UZbmUZJxaW+a|TG?RYiw=Zm3s8c(<52)t@guY8V?)S8!HOR!RSOZ<;_o7{t~(|92%`%BdP0FdtMZ zm`Wn-F;d9OQiv5HgQQ%v$c1{GkA{yqPh1JLV-{{3`fv3^{k|4IyCUx`R)S8{;5mUO z0S|C@La+cT5&deNRoDPuB4dlzgIefpSs0bytz$_VMZE1We_IxO+x%jkR}x3KGVGSb z!RF& ziFsH>T-F&SSEU^U)*k5irh1{X0sWKpHZ-`LY+&bk>ol2*2A9(Xn*rFP-C#2SyZ=vN zrvkR78|+lTZoUKddGtrHEg!IDURca$@Jjin6}HYA&>EKNrL%vDdDJHN8{p#nY=6P6 z+rknP^&0&CcEP1%Me&78hh|Y>NsJecW>;zv7dx`CcXcn=VkV3W!P|DcDfnJ^dkt?Y zJ```&c=O}K@U{_e8a@JV|G=A;569c{ZBuZf9K>e{aoJjC^T=bBDoN%hILm|ql047t zc+?eMN#i$J2;QM#Ixiea@Z7NPIl3gGl8^eQeXR673EyG(F86*8x@)x)p|Fe#Uez%5w>JHhpMmQ>Q zSHAz_O1{TkJI)YQ5aX4*O$Cqcw8~}4m^u}h`afW*T$(%&;)+6QH7p7iVoHTgSlfx_ zb?2L4sDORfEuVDca~kR%`C(MvkTp7dx9kuIsvAf0QO#+JpM8*KI2iFQomIqF2Q0z>_6KQaOM{R zJb%@7{fZ28xt&IC0JyD}yj1o(*mNir!oBqT9QIJzLP+ft?13Ke5G-$q_r`rHrR|5b z_jyB(N+JCb@}Qk8&k@#{#E*g3BmSr53h)HsVFx~jF9&7DtnA38FRm-E>&-O5xXo75 z!=~I#~9L{RF4O3C`^fn`Sr6}(_h>bHrstaka_rxGJ_8#Ri=XFJNZMl9kwXVWNxCC?{n921l{Q*u$nF<8HBoGMY|{Mbpr z1K)G67+_KcsUR@gse99?MAB?*{s;xNB*#=)O8@MXRIJ#HG0YfH#?3GIr4BR~}d74zT}@0M+z-eiq_4;v_P13p4*9Wj$ZKPXfN+c~T z6SQFbVS!@^o%lj}PBtZp>zG_`tkEOLKex#McS;E zK-?3otJe*x!CNivy%o&&I67Pl2SV!92xh+(pT7^v7qN;V{N*@Xo;G%W@4ZN_?W9{zFgz4T#qB~rIfc{ zBlK(tLc_+pj{ARh&S<$}r+UmntKM(?$o}a3ouDt7wixLgKTK?}8yCnmH%KYRBIRJ$ zzx^Z6$)!c%g!i;ap(9=T1#)?tQC`F$DsAiSG(oP9{5PJnBmYfOKZM#Yd*6a>gBHkP zTHD*+FtxY*I8TXv&;q$%kGMPgdWoGzOm0OR&NZmipXS5&mV1uJzfHr8`jS&LaU%(Mqp<@Ug z5Maaa&cX$--$>LxF$`J^DbQXv%{B>ri!P8ZsUEtddhrP5T6DXv+@Sy3U5+#<@6Vut zO8AVFv%jYl1xQg4S#%V%oOlQS91YHe^zhLT)269c3wtFRuR!Q(_b&TEwC5}y`WuRU z|Lz;J9wC|T)SVifJD6{%(_Rwu41w#l8{LjA?by>9{Di3bnwC&y2y71j!+LZW&#tX5 zxR$?~u;1 z_R_F4wrLGyM`l@KChw>-;*~76)K~tO5u;@Hly*w1h(qN9d{gAdD_HZ|v`)z%&MhdU zX>D%FBN4c%jB^X>p@5bd%D;$4k~-=`*t`xd>Lffyyx)<7-2}&<$kx_E-`mMWg$Ttz z&O-fOU!8pEas1Yy9apRi@wR#mck{t=3*L@extn2Y=HTt*+CsDMNhgdXT`l9=>IPDbRZC=Ek@{a`iU z%rEbYuOWcDpNCT8yNy&HM#|7_r08Y|QY3^3pEQ|oIC>M7>{;{v zt&Ua4Z=AQ9Zwx`+u%NQ`edteGZ>&Q3{;1Vb#0-{7T`iXyjXca%e@q!LtDh2^@=%u-O1YcWWqR_ziy8BN*#LxirWpJ;&#KQxZUtTv|>YwkS=Jq@te6S z_-Jb9qq^{s{oVz)RFhm;7d(i`@R;6K{yn-75 zgo*2|oKIfn8$;1A@RWnubG6)jBTo8yA0r-!RGTX9#H#!_1sk!}x3}_R6f9|5w@ufDpug;p^;K!QL&kBg`rG(dl>iLO*kuF28$Va;8#M}V~`+lkQ%@jS6in} z`c8~A_EsJm=_l+@p^qyt3zwHI$6KTI3G`^Dx3_E`A^4vetYG82&4NtyQc8JOFLm}2@rq`)r1Tryj9Ho; z!k%%%MnYv7&V*n&M-jqeJUCIuF1820RSI|-fW5yE_O+zNKN(>f!1O`Lm(bTIOT`L) zw$y9AJ(S}k$Z@KBEN)<(6@vh&0OUdJbptWurez1PR*y3JFVcJpfCu(yelp<4!b0l(Q{^Dlw;uoapBr}$Le{&Zo>K17Z z_QSl}D$Tp%@=-bRS_1t=I{8SD*OO^j3&wTpscGn`5#4%<)B3I_(~;t_ZYicC#T=g$ zzR)uOU08m5^?~efMyvup+jB~$(drW`OH`;nA4(&!!}=}O{t)Q6s?fXfJmKa&Qg45Y zGl&q#$vd$#Q0nKuxu?J~(O~J^&H9IY=1cdV7PV@*xp?S4{i2{iPUF;aOMr{xK+!)a zF9zlKwPG2t@|Us{NMJi0eLQ=m{>+s6(|!5Qd6$QIcc>d?=AqSfcTg#6#~YXjRaiem zgo~GZp`3&@{LO&X{4oB;du1{WSk>y@odPcw!=cSTu2tMkYt+p8ZzR1~4O{M#)~u*c zp%MG3XfnK%`}6#M^?h-}GJt*7!4FfiXRV|a98~u%?*8-Iz-G1bJBw`(o1Ds^L{imb7cy$UVNQj zFTQG6FTR$@RjwER8KSM_*N?>f8Yz|6@yiOrk~Jl0X=5pkS09(h@!FyHZv~?k{{V%* zU#i8&rSiO@v6tr*@mGDi)q-erkWVf6D5K!N0rW61GWUY;2=QhCNS_xf2I^jf?np<FX%Soi7NjMGyeZSRerr&K17u_ z`cRI}u_3Cws`ah+h$dEoChl$TqRIuJqkrwt!LE%=mFG%S`5}Y^dI*PzDq8@Pix7pU zlPa&0Fe$5JWj5s*!k%xJsq!K~jsoOwIAc)-5M>@S=!tA@6RmuMTuZ&s%K#nFQVog> zdp)4Y1CipaTV8`S!IbKkMy-KcudSU2{0Wfo2NqoqnQsh3FXL)max@$9=h_%`qbYr5(^c;b+3*jM8QOB^TpR4Z_+24vtleQy!$Hb5Ja`6$zXw|R9 z7^%H2|Kh{1(DEv)ZJ3$Wti7}4)RN8JT2A$Q(Wib!(0?wF=5JN*XYja0nrVa~#8t^u zq#W~fZmC2?Vl+0IwKGenm#ATBne@@Rs7NO_1&<2SIA65)LCwlbBT%#awOE;;@vC5O zS72qr-3^?5v{Bfh`A=m*Qh_x`5rdT~?Ni*8#j0gk)%xi!ULPW0uMG=$(?5I+Bg@}K ztMlV{_H;MAr}izmV@2)UA9)-jKP3MGE=RQJaa=ek%_1Lcq};~b!58yvxDQ|4Ihqr5 zCrbD?4fpc+L9jxlgm12qk*j7j%y>4Z;k-r1?2V1VY^Lxn$A1dyRcr+yrDbHG*4>ry&v~8RhTO@PqHvh1OK#yE`N z+$UA%cu)%!EVN9f2I;U5O4>Pu$6fSM(=DewDWII#TY=N*U)BelRndE}0(l7fC@AS~ZQ6Gg!aAgSuq$ z`SLCtCLXi@9W7O`fj)b8>a(tv?m9>w#%1m-MB-aLj_r5lN;9MEE;{m*4;|^AYw4fn z;NPuYG*dhN&k-oND~CMPVNti)Nn<$sj@jAOvT=W!LwdJ5P!6Mf@X436dk37|Tj1>8 zmN>hA@jUpuT3&(w?}E!yu8+s~rh9uV;7`j6zpJc3pRzh}S6ds2oRXb{0W(}`lj6ol zWpwMZU%#;60HwAz6tVr=JdT(KZEY{ShvVIdcOBk!cprfGo_N>dy${}l@UFspNCVBg zvzT|ZUJ*aH4r^2>_BV6!Ov96hCku}rkIctE+j?eCiqMXG5uEA%)-U&L7l>x;&TWME z6wIc&P*JNV+R~!geiA@Ch9&-Eb40NsuUj;)pELzTSaa%3JueY>swv;t1-CP5>- zGy6!;I@f-g@6H2!Myc=aBMS4IxT<5*Vf%3MM8(kSd#^R>4O8}V>$lI+)=tdU zuojQU5%H&3c&%H%62^ajN56K?8Mou@qr8FeutVbEppAF56E8k}kMIIl7J(Q4evjxY z@Zq++P{I7}Dy7|LX5J%lZ#GF!o;N61joa;rJo0B$dQZ1K57qW9pFNK+m2o>BJld5* z^1jr#XlU#6?00Vt5lyuIyb75b%>&}maD$wyz;`7chHv8Co&!uL-}Yahk~;b21c@8c z!LF?=aXE~>p5Uf+#_i~Nl=|ef%k9{InB>o|r<>XLkOh#X#tz3o_>jB5HSRr5>d}`a zzS-?)J+d1b=}NZG`~B;YG(o$AG-hT=YlYkK^AVC_tZJQ5tF3(#r45EhTmk1G z;Eto;fE*C}P95vz3TCIg`_dpOBmg1DZtqJ|cpdz=1he-MqL6l~BM{=~2!_2?l6a_~ zXQ-|1kFmJv#jy_$N9IIM?3ex0)gWLBy=&NIZ``iK5fW9p=^eMX4$JuHa?J3CY&+b9 zJrB*HEZi*1!kp=khxA$t@EwhJ9UfX^s_{J+b87`24W2AK)9?gg4N3vberbRBmKV>L z9LBicMXOhKoBu?sm-@^~d7NcRJq47yvKusw?`j|D?$lz`VMy+AtM1v>t?$8_5%v~; zCbfq&ANG?CRJS`gNRI9F8C~cfk}jan9P#BHwu5)50q^jJ#5=qxNrj%oh{Sq(z2(rI z`RC(AA-!Avq(3;yC;#rPu^sB9%xybqcE#aL>i*W&oij1Jsxe1ngzcDHJ)P5YQPS}| zTEAua5Ut_5!@&4nlB7G>Hain{N>+DCiO{Oml9Y({cRo_0&K3N-|3g~NvroJ6JDC`b z!{B#1&x~%bo51~3*adRXY*hwa5Y38UmWMkp7sL!j4-`oMSGzl0aXCIbN<2C z8nv|%l*WtQ@rR}k8`o;x`4IN1XUlqL<3_83@_GoGT*P7Y_Zg|)SY!0k8gtc)ccD$v z+TxXqEeD?0;OUeXTOcp)TwA{M!OPCIrBwxL2mO#nNd};;Z9u*HN}N3;r5|?63OKgC zVt+Q|D&CkgAKr~S*b#P{2{dos^(nEl@886(#wzV&+>Skenh#70c5-uGX~zCL^4XY8 z>j3r9x86Q_;X{%;YwG=33U)K55YC7ld`KkbmnpF?R<@@0YR164Y|Y)y|4G z#0-_7&cb3sFdO318Y!zMhxP>$swMo9K-L$iK<*xN_-T%oY^@0=uYhSzD zaqv$#F4#--Sv_Pr@wCrs)qNiS+Hij^ENn2f=k8JE*xGJ65k*+}f9CY*UAtc5hAO+Y zi|}Ig9qppggr#U+4+)gs8O&Y)jT$&H__myaR+6v0G<%a=MmNbLhto=5oFSeq<_?_c z;xL!PR?RP16F6?wc$z!EVqK_#EUgX?#}%iO3_-*@YL#ae?z6NzlIRpHL+ ziUBy)%7g@!=o)EUxgGsJ1T^mDbU4H|rRn}ZUfGpu@!vW#gHATe#U@p`_%pQJ*Bu5_ zlUeZF(C*N9^Mvl`R{73#XgTP{tu0H(!}}_wb30x+>V;q5;rIg7^(^e;Kzm6Hr1${8 zE#N<-8F_&d}Icl6w4|}j}?#Y8vz zriQOd$c~EAu#M8*_b9Al`mt3wO(q?W0cD{(VlcnsqkBvD-mWxi*ed6B`(m^>ez(kj zKX|b7+(Dn4MW?~C?2=A|?^@wD$`Ui_9E4*pK%3bs!Sq?-IwhFCE8IY7mF$QAnb3>A z?p@(}HjzAdCFpw%@ONdKEbAg#Pc|0L{pqUrZ0lcl&*;agpkw{TV0IcUrjy}l zDWo?-{v(~E(;0+G0p1EB$8Vpfzc0}|KQYxp_;yB&$6Dz01hYMD^8REG#-UkMMw84+ z!?-qnL@LgKpOe-@N)Ze@3&GI;m!aPR^jXnA-rnejj7r9L)UmGJ@f1!F3A&FbpyfH` zMDKj#^^2e#Tb;WL79$9Ik)pET5m_!-o&Hy!`)~e`6i>yyn@--hOA^43R1R&DZr?oH zdhT6q?Hbf!KiabzHkZzVa(^$)q+s?B)H9ixo6e4 zwmz+FenA@ypO6LF!SG85tPc7N77bp9w=em$>*3t&?pP=3A&~AsYH&~JAwVMoSV#8_ z{B4!#e}{H!C(d>C#^2hWzp02L%=5)MUo8ZVecZJsn}A`M9S6(uWWEZgp`B|x7xQfE z(06H8{@ueHR5*cEvnM^ItwC=~;iU!kFW}c!*499~q!aNhgss1=cQ6E4gL4VD5_?uP z`wRN3+PJ*Mwj3OYpl?9kfH zu(CT1a)IC6fHAur2dLM~X|V64T}Ir-C`rQQa-2QVnX(L4Ql8K9X9ID5N4)>=TBPi@ zXQB0f{ax$-8m#}mJbCBZ>~g##<-I)DEL_IA`(*oX7SizHSr7LoxEcMk_1 z(cunei#uefIv=RBUZ}BX&voeRLOU9FZrqM$Z+N@o2WT;&-#B?^*>y|ut+l@QoTuRi z%$BuXw;s_#uRe>Mg6>Ja)|CQs(CI^Q_i^o`@;yl(IjGzp)AvMzcGO_J!#c9zS%=<2 z;gtyfFxh9)PG66=PdubKso-_etPFAy|LSs_k@}2q=j}Fm#7jvwtN$El{(Wq8`{-G( zre+|{F0Xp^%l1RYOZFzF;x^?XAHB^FCCS`bNs})JC&C8g8|K95LC@@&)-QI^sJO6l z-`9F_7qmJMJI(2GjJ@4|`}#bm*=L`<*S@d4*4k^Y^}^=;WyCMlz%LW6w(7w; zUW4y3%4xH7Crfji&4`G_Ed#UoD#+5jQV48-?YNj5+rbpG5k2LpIOlV2@%R&4?kwQaRnjo4qf849^;K(VOFcqyq5gB+D5#!i?g{y z;-7=C1?m_ID|e$gvIME?RkFGXyNBKK2`Y7Q!zZ$BllbZdNPRn zp0T*^ub8FJ_rKF<1|3u#U+-VY->6)}t5mK5IP}q=VfQ}h`Y`p_qqofYz9x}L&s;>9 z+!ZQDAKehrpI0eWd5dQrfyP+3thv)K{&{fBmiNyIdV}-0>w!I@!D?WS8+uH#OjpJQ z@iQ~BA62($a1~%q&%~VGxM_Lp7XB4;`ew+R9KfA#g+7Dz9n2f?yVtQo3}16gF(TLL zA=xt1Y2?kIBIwR(lCUsB^k0ky8Hb!(!^ml-JE(UDp9;+hK6P=+xQdw_pd|JBZH0Td z)2D!W<2ZrVvK{;gY#FL)zLX8NYi!^9I9sMUMi{zZJa(9Aqx&jgEZ`3Q0T=Nb#COQL zUD!ts#r6`{&wKYop8;O!MxMToXKd8JyP;)+QDsWtW$G!=1HTDUTL$Wxuxnpop_Ik^ z7$0BNU~N8;-UnBFxi-%Y&M#OAw!TlAXsG=UgFC^lFi!utBzPcwyyx%x8;kX?B)~7Y zPhR_J@j3eOo3F|7kMxsXWrARe$G<-a<)JVG+cB(}=59h=zxWgNnrmP^e*;N#5bK*p z{2#E@2z~Q{ka%bK`PnS_X0&XU)+g@=F8T%-VEq<4X~D7XM&jo;K+F5Fp8nSoy63W1 zSUiOGH>8agwBRYZY{KE0G7kSrmT~oqzZ$I5M6zfAn|d;y8r1S)1pkJ?a~4^noDtsJ z@H36_!E?%fabX-n{#D(NxwKU4nHV<7w6SucsB;0@a{uDYmba+ zuV~MWGNug-V%nfsF|ht+YEd0)Gm-k&O_FddG5e!lD z5;uQ__FeT5tYdlKRYO+~-Z+VZsFc@>xy;3V!3V`>qTlf3!41BS(VmyxH23~U<$}u& zir(lb;Ej)A%T|Tkgg0E$y~bFE2!E6DzVbEb_3IexEGg4PxwZ}B?t&0&uSV(%2T-CZ zwu1(6_c_&H2rj5=LkxEqWEmNqKel7NG0gEoIwvdyE;+ej`NN~>_Ogsi26oigZE_l& zPva0`CyVou;{dKh-#*deKH$?#oO%F)Rh zQGCDXi|wRW$6FE%EA8e1?x)`z>Tou)rZ+??H7BA&yeZ9eYAJOCUaE0 zZZK}=&-U}n^ER#KN-RwMkX&2Fh%%#)%#J4(N(Fo})u8CV592v9g zg!|cB3WtDSirwwMY&~T_r{y03>}T?NEGuKCE@-gK_7C+cOo(VA&fs#9hG`iG_oTG z+jtcF54E8I{yAdu4zy-a*Mt%NQhnu!&BcfvuKxMHSt4t(r4?)7uac;Mu-HY?BzbN; z+sBS;zrfZ&mdXq(UFY`~tQ_&u{05su1S$FpxDLvAtc6`X+a4G3kSEJ&*R}sL@m-x`%9vlsy z+hK8c+nZ%fHqyK9tZcvV-g@nM)fIe^9e38=moa2m+|Pw zgRb9;njL)8%B__5>d(U~87vH9FHT%@Uw>b3(iyyZxm%mSvS7})M`fU|> zfPOLbmVUpx1hOo1f}oJz?xH%DhFNfW#edZAW~`$<5pfoH-G!))p)V>vbx6PeR)mwJ ze(@jju5WlvZPUGK0oAC(+Hm)i^%DK*d>#~I5@S2F@ZD5Z?wXnJO65bPK&DKQZh%aC z4N)+iv}%7DCR~sNd;IU?)*S5}L;L8=a{f#uZs8Fnu@b)fHp8aeX4se846An$@z@~t znzwbTIxxpiV6-Uxb>ILW>-l_tSp1!g8~zm+?UHek>*9~qS-dKXxiCxCELL^i zB4wKCeR_2ujr!rBtT$`p2@~y{`4epa^^4-$BVj-2sYCgkW=l}qD3x-Wondj>AP)K- z+|)ab38>92^2!f`|5wRew?ddkJ38(+2j8akaT2@|?N^7fPO`CQy@oaQG-MA>{KoVc z8R7nF;w8=U{93&~_bknO>a$bOGNwLz6uuy|a-UU6fZfSLF7O)Rk9JCRJf4b2zfiyG z`v%g;I9g8gr+AuMk>-7P2}puJi1#HIQIs;Y)q^uERz&6r)p!1A*Ix-=}-Qwq=qlz%pQ zF2*~%;&XUQ{A*C04o|Z*%Fm)-KLZCI6}P-aYd;F>naR{Ere{Eb>;aUU;g)f7pu&odl%UkvP zAHqs~3|biS9wgH1b{#75$W!?Q{lTeURJ8N;^U9H!oL!+KD^ zSkhJ`mzM#V6k+>M4(s>3?yp%Pe}!u%2z z5=x*6*)NW54OL!_n|??yYq1#QQlFN2ny`5H;e%Ljv>wl4|MFl>R^i==HMv2iBZcYf z5GEZ2C+-W+f(33B_jOC1R19gr?eLYu<=9$Ss~4EbD{~@SXDAfP8-f$MikytHY*7Jm)OjJ315CE|s9P(*br6 zM#(&8;umu1Gvw0mK0UFsdKH|R&iRuAgNjYzJ)#1OR1$Ic`>BR12Gd_al zGIk5IRV56O*qxB`?drIqhIhnkI07)21LjWD@N(Nwv#dJQuz21^a0pL#ZATr(p!K(- z#$N=qoW6wFs)61JvkTe~mSlLop&lv8d8q3!aNR*X`|%vba{>?bCt1As&#g*84buCH zegEDj7WOR!32hGIK`9m*;RBbV{n?q*R_96mOTzK7?|}LsEH8_Dv1o zFSiFNM#1eUyzw+6d!HFE$JYiG_KYv=Tsl_$jxd#2ofGp;!|>)3Gd!cHgM5|=26&G_?N&|2 z9rBy2S%DAZ`zjYKV<3gB<7~h=P#A4h;a6yW{X+I^Sf1dtxapk~zv(^F{AO1hix_a?MO@KUp z(>_CTu%D`pC`D*pJdwGutD4<6U&;`ewp(t|G4vR3i#@sV-+}jmU)z6)ANW4-%Oc&y zTQ9>Kh#&a~CoscBFX0du7YW?&r3DYZ-9PD$>By%V&ZKfhjGtYG(l##jqmU{fe=Bq#`ON z_HQ`L+Fp=G!f#m>>=ey{&p>?L%|1Ixwz;TyzE6BC%$j3sf*DNt9Zu{XpHKPVyDsOe zuI#db@E5Q*oK>RPKWXf*rIAkPU&HIuNK>Fo^NJZ3AcJC7l-}Q$dpsoOhKtT#h142h zaS%42@Z~VRNaB5vP*3mCz5!2qt0=v1aD+|(SE<^lJ&SW@j9XZ^u)u~98)(lh{b^@` zS&~XnKh|(pmlIY|g5qosXiv)i4{~$=R9w?)G$L687P7 z&^-3$s2wWcRM-ZXk~71oC2tkkr7EGQpYWp>_!0gv>^J)Dv+X65aLS+&zLg*ehb*lm zQja~s8^?TJ@|!Vnl7HMySCwS(PNWMUT@KPs27UB>0A5&HCEtkI1S7TNRM$jbCZAla z7V4t}gS?9nBu{G&mx$Ou%ds)9BLrD3*TvJSjQ>)=gfb+>#yrIFlv%7gidDo?tGYP)ZzQDpzQ+!PgDW!z4}i`GD+WB?Lb? zc=DU!#fCY;FMQnJ@_wT_Gqq#%I=h|p(A5VI0>YXKDj%1G;xeqw7gm=XQUGq?%hI_t)Dv$#}9`1*=F(;Zj6{|Mvl6Ird1# zf;=wNWo{DWLByA6;CV%kBS zUX;lgg)mOfi=nMy6hv@B#PjGcWj*_VuX${V_zMxb8||J!lwxT0^xFm-Z6qMjzk>f~Z=-QNGNZEcnBx5Hj7Y#SPdKS91S&~laB z@|Rxjlv$B%CDExJ&&3Y^ru1v zT>WwvLca-5<-Cw)8R5&4g>20zJO;muoy)04-oX|;8gIb^q0@k<*j2%q?=d0817UWz zTGo9r3YADh{c{I+c%yJT{=4rn;$C|FJ+Zza{B7ha+*;0nRd_Ra9j2Qp>?BML`&D$y z#7I6NyBSw~g}dV03bI0&4<36u?4^C$bmw$=KRmxa!OPXcLzzK%LB3Vs0gtL{RdK$-1L&}{s@(6qwdTS-iE#y=f%cDUHMo+cFDEtMzwh;N>3Wipy>q)f*#!E`DAWYm-73h(Y1B7{7GbtfE-%v1Y*~v_DA-y?=pn?=mwV-0 ze9!{iO>plGWyVw7Bd7RO;=M*;A^OKC+(Om?>!@xELl!`W*H_r0k3pV=6zk4ZaSmua>d3QGg91Id3+8sYk{Ib1)v1%ZA=E3aQWv zsF72QK?*9@h?c}w!ceqQBd0Z@mtte0MJmc2hUFQiVLj$Gz4ZslFAruj!ari|Qu{BW z{nRsEc&BkYk9X?3(|xAj8U&3LtIsEWD%4_2$ctOr)O#I4s@3269>(0*6vC=^Q{R1n zyi~U~IsOq?snmKs?%1wDHV>a@U{(yloXmiH-Lt}okXgP{(6GWFj6q1jdf-8N1VXUv z4g8WU-!jn19&{BY(0dE%WE+YnfXmD!mQwgCw-H_0F6AY+!((#0q|IrU40!B#((st@ zWaBa88HUG+Cml~}j@s>oSMHf>=k#zM_~gT=tGJZ$y<%o`o%^tx>CA?P7kx>maXDz(NBMkitovTK1X_$?ib3-g&oDKsLH8G0Qh8OWQn(fV?v}1K#cAi%u#9(S zq?V7Gy|JMhsm%OH><87MOn$^1X3KT_m(nut@SE7Jv}@$@W?r$i&@vP$JkZ)0#u$X( z^xJsaLz7C0mQ@MMAlt{Swn^mY?0R>uJIgI&C9H4S(_Uf{%-JZ@uo*TG@VF4J#iK>I zhA-r|6{`KJGWc|r>&mn(T)+61&r}^jGcktB}i|+BvqBMSj)tpeqKyz*k zuZ7%J$u-mnf4b{AH}IPq z??rfD25pymyf4IiG2Rykndg)^DJ;btjf(sF-+KC#X86ZW%#H;4E&#7{_9baJ8f%%5ih7U18K2^_dNSGX*=iC%J9h!Io`Jqi@RKZkMUYv3c;@!{5mQ=A0JNC%sjqFQBY%Xw8y+5h6_aiSWmb$9UJ8GX(F7FD zd}%zO*wLR~fd2U&dcw-=nSeI5>|9{?(@J5ka;{@E_#=a`9`f@lcvLnBkI5GD4O!QCnY2|sT#Tq);&zQBXe(48>{`biL z1^kbVXF2N5W+ow*&Y$T^kaKB}YiDb_^aK2nwo5(oe*yogEU(;FX%2I~M)Qf(FqgsJ z`y|$TCibKTtgv51Kauu;^2_1$I}CywcM$fNyugA6;r3|a?^NfXRAmC!=Hvb5Xb$${ zlhPjKDvuIXbW(=EA-+b&+-1@tKqidJ0e6~_=Q?Of5`AkFx}^f(62kBK($sjW+<2-9 zfMyi3CBvS?ZlabU4irQsi{0lJNylWNtIY{Bh{)CUT5f4^QH$ z(9A<>q+1gjpz96TD-6Pmk)++JZqNbG5Z)4|;~-k52Y(Gu7f*6qz)u>xvlDd(RPY6- z*rpYfYW)FNuZ0f~mCZs@oca%-Yx;p?YJiq(RQFrzoq|w?d?HVHe7_HRy_jE6lO35%TDb!05dhX3VnxoM#fwZ&2a35d6^_ zgniM3^BdJF4*p2t`_3TjMsHHDJ_FtHlO`3HfVeI3xQ&s2bX{QwIfm0>^L!3t+XA}x zN%%V5Ds`9>vRuM$FPp1|jLiDLNohl!iA&mQz`jOS_lp7lBS^V-c**iU_4*0K8`unP z$o8Z?%y|BR62z593NYp$OSPB_Tm=4UWwdDQ@_nUzAH0bRE{rk}OYwNT! zeW=DPA^(51?vv8f@L`byn#CaO?1w#Kt{&xV?bQ zN^3U=Pvew}I2HKZ03S{B=V9cJ#XJu0hiUCToHCBml zGzaeJPoSEDj;D2}?q+T}Ds?hbIS;-i!W?f7xRY<7dt<;oN%d~R2B`>_#!J3Yt~s@# zAYRsF#2AEsLdJ7cI>%6dq<3isvDbB>vEWzJBYMV#XTZ)^M|}ROGB-Dm(NU>OocDhst*vMA{%QX_^wwO2KEy~< zdB?zo&{}ynteR|?sOeT|yqwPe=%`UEK0&QM=~6k~@W*ID@QSQKu;QMBLS9{C!R5Qa z5w!C-#u!N{xSaecm@xSJ=#XeV}=#aOKdv`%aB z!oRv5ZDBFLHo~{12HqfPgnosb24OYQpGEp2%z6d82ynM!4*ep`?2e6Hhg8UwA>GYE z;u4-f=O?! zL9VgZR4rq_B$8F2)M5R^0~m0xje1S?bZnjiKQY7PJLohz56H5K*bd>umjrwvp9?A* z^)coJBtad(VYFu~x`J=~1KO>!5uZ!4GlTFu*lzAXZxPOzIVe*z07npP;x!Y6Q<2l( zF>;<5?2U4sr{z43EAl*iMV@!S3mDOcd4T&mT17MV6^v5K6=~i8PAv$!05=TwZg-OG!EcnQIH> zAn(-$*hltbN3D=^oWxqs#M_eaEBJp~sFJ7M{u|7fMS$!Cflq zV^}bUH(;iMf-&VIr7LU!jLD(j%zUpn12QftU}~j4ow4po_>L)SQm&id)Uzr zy0}DTQwoieo>pbGi&s9vIQ)TvImB_WANPtAqwFjBmBwy`!r09!Me&xfN4C%0Qc%axKsZHE>47$s@Wgm zw!B{|0)D)s&%t-b;nR7_44yDFli`K66;(YmAqli|HmAlZls5aJc|>6u{EBR`!-BoB z6yrA$ypJ~9BY(MovxZb>?h?$j%_j7MLFnvLmeu8rLCe#zGR_1|t<(-r^Dy9YBSr)E zMttPuBNLdw0}0|yZwrtJZ-giE*huHxgkFS3{UkTzm=aKe8@FGDdUgH|7VXZsk4mP_ zUsTjrjHrc$j~aG}Dt3j=-;FXKYR=ZIHyiVnul?r5IesHkD)d8?3o* zqi{BCZene@@%a<;>8X#9w+JdP?N&Ft@@c_l$U6f4^ZT3vtD_3k}mZhG^VV*{ZuC0FowZtUGniq9!M6=K_Gc6V8`Nf(&$$q&1g?vU zzll1zN@#*j1AocXF%x!5zn=uSdfoXNC2rW}y~Qbf?G?s$UVk`IXowz{+)S0$Ao!4bP1qjK{Vp{2pf@ZS2-eutd z?l4hkMBc5@i=)^nYWOc+3k~GjdelorKIChpjs}F)O#v!3Q78@%i$i^0E}bzC2Tk!- zKYa8?kAd>Xh=Y5A4R@Re3FvPX+q`yd#hSG`!miKc%70%^kNti${eu(q_rvsEJL&H` z@T4($8m$51QB|3ygNBY7soSIuS87fXbk$sv1%4qqTz5*UGS4h!8Ohv~rSzr{cFAj} z9k}Ysd|1zHk)TkO{^GyodtACjfRpS;Y@{W?2W` zZSTt5rb19Elvy!8tT&L#5gw^ttAke7j0y^Co0a^0AH(;EdHt%gF|tRI)^l3WCeOV& zAoC!6;q;BbSBGy5zXMV{95y$aT2ndtpIn+!Md!3CM~WxOpHw=eY-sJ6+N6@*qem6t z%++>L{22NI7sUs|Uw7%tiqUJjQq0eOGuJJ;!k5gSbuB=jFT-PkoUj~dSx(iWRshRt(Mg#Lm(6u|rSry6Y@Q>(g+wcf!q=3Q&Z-_kkJ)w&#cDZjQ^C6}i} zdGCY6A85~9z*UqfII4?6IDDAW4kqv2{PaEZY2IPA^+$}y6PAq|3#VUxm z!ly^nB8a;pRFFen)^$4Ozrn2r+@&(yk${^OhkO6e z;64DjbK`Jdio;#_f55#3aHq&{hXZZ|y-f8j{2AOCfa{LKJsyW!6o(7C!3tkDZfNzn z3)j@Rm1}C&C@W@E)Kna)P%cT$$TpAXwZfaxd&iM~8_sQZ_XdV#%<1`)M=QJ$wXTT8 zE8ONKJpogO$*hI!@2kpK?0R=+MQ`9caTVqR=_1T{l&G!wJ{@d8F})vpeh|k;&WSxC zPz-BKtpj66J*^PFdn>lj3aGECS&KPwM~m{>-HS(HOcsCzv*x1J35F%GKOer8NyC z`Bn;Q>HA71D;vD)R*dwiMkXs5Fu}U=$Wk+32n%$*(JVfQm2van*HnB>j(fNmmN@H6EcWR$n`l$hhz<#h1dS+$%bj3;SV zf@jX!ZH3AX__cB;dOfptjn?Bo{MiFGttV}>*{3YSi43@sGttXyfN0w6*$#PCIXuTI znX9MxRiI}J{7pC&*x!Dn;uoOdNM}aL<+vN&tKFM$%KDYtTCoAzic2c?Vqe`L+0A?1 z@O>gH_uo@K%q`4hcpjNSN9Uh{19aY9s zdNV=eCb87vQ3#iUJ%o@k zBm*Yg1`BC&j12GtypOrfCNi|fX+63S z_8c5HI7&1=nf@ibl0$DhuCB7U*&8o4UhTQMim|RrqaOdtP2;lHy~JI>C*PzrTPv2x zqjb*_j2dJ4m$8VAgy*nl*5&?oc#18mQqN(9;Cz$%n);XU<6P85IB5P^U9$a4L0wzj zXWXn$_k;trh(UBz?X95o&|Kt!bI-Q}Rz0jt#8vrIaP()SqVj@1thyQM58?Jn2{UXc|28#lkvy zU9elDVtJI^W#Yc;Qph4t*~vt!%@>5};$@^~FZdCr3)2isr7tD5?JHk6o#5xLoy zf{-eZ)S1RVU1;===H}!6oD@Kxq*I@mIR{*ccxI)*G9vu%ar3Y;Zg1JkH~iRW^x$_g{r>w3Lr%a;luNrZOt3x8 z#_}X?0AqHGw!TT=nRS@?-v^`6$`Hh>Lj!wSPIv&DdgT3-_B5Kaw5MsxMpx0jh0&fu zepD6kAy&PjVw8vQ4wdttz8C%<-`8L9U20B3y_n4F{N?;I-%@^z?Lt7slhk2bQF@$RcU?j?k?uEbZEcP7-|tSF)utl*cp zSGw_j9lc4diDg2UL6*_b?*B*0$w{qatF)!;4JQ7_#$tH(8VfwN7dx2LN;sCe8qb{J8xRzaI>}y z_baOo$X}AmZs${09H@8-t2|}NfyzDJH1~l@*1B`mfy!Op&MtOKRGb)McQW?R{a?v% zPWbSI7xjGcsU)#jB z_cpC9nrUw<;_OAb^BNW>kxu9e^&hAmUt}vfc3!JG*xU50171Z(S__>=&FN`c`#JCs z{C@hb=l_aU|3OkU`~`Xo*SK%szUYdIr*X&kJO82DOI?&6Y0Y~pCi#Z)FIOV9`GD8q zZbPcSBGo7GdDkM>n{*^;M=}UKQ425;$$Ycdo6=K(;37{moc}^vk^ObY`y2B z7Ah{$$5!UFbn>abpTuJ58h!1~Zw0LePm>9=pJ*JQ9t82#zN{)xj#xuk9$N)8Qe`|q zGzK?&eFJtEF18;O@pRhDWKYMf6th#|Sjt=cYp%e8QSpd;+wWRGV^P3zh{4-c@gk%y zX7fnjUeIpy{I~P^mK!@q<9;vA$n9>0EIT7i8pETp_nakKcYTFiC*Y|p&r)|TWO~mm(MALulruCWHP_@J69+;ZOa$%@|q%-lI+&=iP%}0tdIT4pzJcM z7Q4&Pn-1XLCSD7OpZG7s_IKs3xE_9Wa+d7!j&|>>=&G>s`?}a|QSr}x>~8W^W8*t3 zcE$ThYF1VnXzyqP1y?bnGJ%VQL2*Mz@~J{C;zw}Wwwj7;pQUUeZb)tFXRfvf*73~v zZ0tV=3P<>t0sHj@R`M%-%=q!phKY*i=stcDH^w*Gy<2VpW4qTKsyyKCuaH_}DTW{g z<2d6V7fG{3BQht)p1l#nZJyCHhc&7Z;lydmIsY)p#UN9;yj1KHt zNs!Rh`wZobWnjM(MA)9>(T=b+K3AKX=8z7XH27+!Z$WRlz5NzKRy#leIU`{OU7i;q5y_wRdEur)lx37Y9lDqsuC1d}_&(9%Q(VM;AU*)wefDVy& zt(ALt6zt)H7FM5Dqio7cIqM5m$fFQeNRUN&3C4RejLrZv@m+r|e_Kf^dTIi+OXed4 zZE@QL@d8e382jA7yyDp<^GfHHF?^DHm}ji_6^WV42!HR-nU&@pnjzm$6F z;0@Um>*?t|Wp8*^=!6Gx!)bcYtT&vS=dQT1E0?#&*TMEMN!(`i55c|3HA`$=^fs;k zDy(;!*CgBc>`|Sp157dxl6TO&qd8ZL`A4TVSQ?Gso^3?@ZB$bX)%UOh+?U0 zwG$_ex0pOR7MI_wE4M)+V0PHtj6c6MLCA}$%QPip!9C9$V+41UianEQs{+h*c-G?4 zHZ!pByCArNW4cYsU4@#@Uhg(3Ubew9-Su^ap@5>8Byb90BIpI`1GZQpB**oSw9N{< zO^XmGPu~Em5*{aoX!P>k5R!9wAk%j7dg#?dD+iiddSQQ`R+gXYq35d;QsgsblHlrv zpZfH;zu{>m{gr#@Z|`cCqMMmP`!}6UkAzoRJ=T{#o}Weji-2pynY&(C*GImv^a5^# z3a^EyxINJH5vm8^5G`cjy!;cW3-RPL{O4ewMlU>p@C|-@rKM6Y)F3>?&sSC;{20PH z{{59NBK%O)-E^+<3_`1;`Azl}7OeLBqNXN(MFm29^c-kT3t%mcw)=R#0-?L2JAC_B zyoj%hq8{J56=x7y5H0rE@3q{k7v@~iM=`8V{luihGqChpfmdoTXqS!_FuiuqdDzy| zT-awmFXjS6`U`E`G3i9187BZI3pM9wuxzf@0bHwiQ97)+6o51yx4Dl==d32A5Ufa{ zpcH$h4uurZ^xm*abK$UyNiSc<*bK|6rDB&wN^#MgAsAAiJg2%)2q4Wo;OwQxq{E{& zNmUt}q=Om9q(gYxr@Af;Gr=xbe@dy6J0h7f=^f_^lM{sA{vq+WIXzC#F=-m&&iChW zo9@wc+ttUUa`l{^dQSp$fK++VL9M`TRrPCyJvcS=v@X~IA3WP}c2%^s?`)o?bh4wP z?b_TU=Z`2AI2X9%acz-T+CJGc>)g0RhAlE3+#+qCX~dpgle!J*FQ;bZ)cXn({Olx6 z)=xOGh&p3ZauXN(h0Qs@U~Duiy*PVNb8I@>`5Z!bH15d#SX!pI6`FgPV-eM4t#6a` z`$9Uo`ey)ALMzD#+a*7G_^5OOJ-k6WX;uB(7#x+y0J<%53V~8wF$VkYW3N{_GUVHE zBS-2L+o3|C!2NlWEp~~g4sY*U%&>Ux5Ow2PEJw^ zQN>d5T7n$9-d7{nGDWUsqAD@b1Zlk=EyqdzB>!laPJWw&H$`fZ7jJaFNpS9vVaz~& zg+m=cj!CTf4qYO!7Nua?y!Ux#C02Q*JDsIfs3C5h-(`Lh?{}MVzhl8CnWFSoUjM9&1i$k=A#v}Wp`3!)AZn^>%(4KN+*Q)ts^rGpJj zb9!c}@R;%7jQ2hdU>P|TJYqlLrCW~4dc884dH3E#oNO=jtGcIY5<3+u=xq|-%o#H3K)w%I`9847^*CYp!C%i;A`G96_Ot#@{uP9; zLAcZJuFM2R%0&2ce|=>o!Zw6Y`v1|@zJhYYE}Q+B-@Srzk3hKHU%!HK!!DcsO~3hG z%B@HEpx=Ej_=wyR@NqTwrC?^<&3IwR3uouWiIR?t-%8QawAr#Ke3H(+ z6yb5<8D>5%Iq{_7?o_^WW5aPN+r)9T(&D<~QnBf{RE}?Rk#2$W9WJ*t@7j+RO)6cp zd{WuXQi8W*5wt_wbwa+Z#jl0N9DHm=#>#t@PB;+N3NJ(k^tyDy!x8KaeHo=0Wr0PX zFUlx8jl8E8;Uw03ajCUz0pOil;iCwz!|yV@cj8%wa2RoU_$9b8-G>1ja(}zy7hgUOd*|ivQkNC%wwD@Ngt!ARDCE+{wis zEPlB#we7?LWjCvYWx??(M^9h`X6S1Qupi;i z;^F^6_#=dIQ@2cI*|KB@-!EF;Mq8mP5~GXM#jHguOvd@_LZ0X;c+tUKw1MxQ<_w$- zF|eaFG&&Cd{~Rg4pn%p3V@VLc1)UJh-M1w67L1O$iNQ^KE$nT~5xg^U-B%&~@4$Vs zmhua%B0=~7IE%HUlxksIb+DlkDHwyx zb>X|*o!G%$7rw`@BG4`!8t$3pnWX>?Zxs{@qJd4FOegWhjCm_$ayxKG^+I?BS64XU zLuJ*=j`ToL+5@l~aCOzoSE~Yt3p1dp!>UBt)1cb_Za1?))vHa1ol6(-n`-}i-ON0; zS8MsJ#F!2tM&X}08uv=(f_mJn#u*yP$_$Y0tGO3_e$YD52%ehgE9mhSC1XS*;_X4L zuc(Jv@G)qf*f+c_V<5-YbL@ecml}t^E-75E17cKsDO!oK)><#X-mtRxd(jn*06xtV zW^|H^)(72-`x|VY8KCDoyQAEy2q~c%kw1T;4)BChjQqNJI_N4?L*F=0s|~4oRNZcE z0wjv#?`0rS(+gRU0Zs`NToTv3Q0VOVc15wgLLS2SKV49bm828aK!08*+z(AZ#JTjs zguW8w^GGkQ(BOBaMEa%lMJFsq8Y*{0-#xImjJpAXI_UAGf-jJ2P?JSW##>z@(h0AJw8G9oZ4LOH>{rLvu`8&9uUUdPh_{BWLSF=n z=$?1YeY97r91eNcA8Rrx$AT&%S>u_NI@p=C+^2`0{u&$;g&w_TckCv6>bXIeRON`@p<4U`dpAgAdiaZ!hBGFWry-x?HIAd zP>l1@;XWpO(MQ@F+qL@48W$s*Lgb%e}X-a&OC)QUHqIF|#OlbzqPy{`jMHK*9EXT{f|tc~5Z0pGSuLUI=RLkXFx({)z-T^sBPu$SMT zZ<9|GaDG93OAyqjSj$=QDQMYKei~2Gr8418k52Fe)8aF&4VL`Il<9CEQ-vGO4e;or z6DkJzPaXUeQ2aqT{+8f?c92f^0KL7mUwO@j#wkVH+cdrQ2f>q#cfvyLABI}F@5SHs z4TLd^UEhn9I3JAJJ@jLbHM?kDLzf{F(&wTr$g{nTcst_jz88Ji)9#3%)S)Opq7z14 zQMZ&}j8oPLORlKpCe&tHzXxq3xUq5=mtV50X})=y>-w^90d}5f;6|R(#^+R)RM#@L z#EkalKu5{0He*#TlVbCSwbHqO2mL&<4Nx&d6M}UTAo8`fH)J{bC|6JrRQy`*TDRv`{wj+YSu$Oktoj`jc_)SP^v8(%6mueDD3U9 z@tWd>&_zKfe9}*2N3sc$QM4VK2!bJhsvo=}was8YEAGVJnvl7ttv-kJps+KL{R-Ta z@h&0kcT#fStP`4|_7*$Bu0pNwVxJaaPb=A?(Fu|GjSS!;=v-TX+X$C3_8(#Ez|+cR z?rLLu_pc&NCZZSUU6;B=Dptq%7wkDRhH$%a(&e(`Hdi&4R5_58J)&%BlA>~0(Q7@@)e-B2_*{L zxyBh!;04KGYQ^m}cGo)>ndB7VDp(X?KzpjpQ@|T68oEO=nAr=5R~@-HBc&F&cE6-I z)xr{F7TO6&Y}A@4+!bQYW9USph8g(nj!qqkRJuQ2?;^HBYDa{VL0 zSPX0KLiq-agQ9FcMnyqfUYiMYsa*v+w)v?BcK5n`t<9>wN<)401)aZ5ekk|p*U@*+lO-b#*gRr#7ECX+SqTCDdVG^$Bb zWU|m9VXxbVw|#h{@*5=0RKlxc-XbihoqAF->Bzo}cIrV%m5EcXqOG`@01dTScpr5T zsgWv^&0(*9=c1n74QMYR{w2gCPbT9yrj10lr^2( z9clB&(#en&Q&Wr7jm?mVJc|B+#%3!9u8>--m-3jo|0G6O@+3?h5iSl zu*dvk3$jjqPV8QkG`OuyFD$j=*UIA(pFR>F{{vDnFPfZeHQlEsJ{q? z1lxEzKzYNj&wMX{a*-xhZg!jWFQcR6r*bqZG-mAeG+v*ew^W%|XQUJ0y?7C1&1wj3tfLwl17ua=I!tG`FW>cbbH{EQ=14*sGXKkt9SIv&8Zg z&`x^b09^?yREN`X2VmMQmMTh565jH`^dyV@1~@Jo^Z3Q?LM3oZfeMg^JMNBAI(Ko# z#Jjk=?z$@xPyBBX`PF{+V z&5$TX#iS@ZWjkV`jc)Cj&uVC^{8mK;8(jIl1Pj6pOHKtwN3 z_4~Sum|2Ch3SxQxguK_GA36u~QVsuG4L*qcry5KpY6#`OJqRO*PlkLuRz7Tgv=vQ7 zOETsZ&cV%PChHxPX|_ctU|~z6u!hXE@fd3wXH)qQ?xm-Pb45Yr#Zw8O z3Qkh5MWK(F$?Jr@eL8sFh3yQS_Yn7Vk90k5xfWx0Q{lD_-G%uBV97iKY`Sa*%sQ!E zwtx5*_>)7E!8uLZR%r5L6x31i6mAnv!|$iiDO2@+zFG;3o-vB;&9+FFsdYc{6JK{$ z{C(&&(Vv{sa#b7Z${{`L02T%{|kV$bH$>gSya}z%VY;S93r7HlmMw zut7rm^i^dpU zU9QTTQgxe;ovfcI23*iyP6XsT(Gr@)EX1NTYj;M~y|4aK$))-hN*N4&!LK>RL!teE ztE_UMjniP4t)1=*LB8x{V=E>9?c?}P`)frSgSM%9_pCuJacZ|YlG=irvc#pJg-B0h zV@AoiGlD#r$5kq50;rq(XiwBJ;tOB|%eKO#4{b$vRONb3N-7KPN9M4T$d;$dg5Jv^ z+K|bZ?4jQ%eEiJC-lBpXzF2)|jD&vrriNCYN<;NhR*}xsHXrp|JJM1e*#li-ex$aA z-3|DbR4%26V3Xcd3{C>zoPh2AsI#XlR&#=UM2-Z7*2+QQnlRQE`fcc4&<9hLe*4T!t?!N*|)S^2+*_7~I{y_9n{bM1PWA*J;Sc@^W^!#A@;qxV${v_!^iy zpuN!I!V%ivh~FK zoJt+qPwyv?S6Ssj4Z_h3)XTXlB}&6zGy zj7;!gC9lFtUR4F^UBV3fOEe)q;^!jc=_{@C3g()B2B?RnE6RBZ`;ydJj&iV8s)nII zQ`v#}Ms44YdYD?havPLYkJ9&om+)W9YGK!lEd6NVcZlRWI$^vt&;pv5525t~=aQ8F z{|kNc>%%{%Pc|O@Z`8rt!T&@ZT&7R{82r!l$>ITs{|kLmH<*|3&ws1IWB;)R1N6!L zgD|e7PgFwM;r~XT+!Fl1>68DR_9&NPv8Jq-~tKU`?J7m{A+d4`7W z*9%WV(pqTw1;+3r$YTpF_mtjK2HHaoFE1Uno8}kAFD)I7@H+^rU(vjpa3CVyhE-N* zxvNx-_+~lH;!+L5Z$t|%x0fdDrZQeZd_)`<*1@jFt!1~}v@gVr)4!g;4f&rT?>%>J z2s5Xrf}ivKKgMfABdWfXR-VDLWh3JM7)p2zx5CVS3~9%`dr@IEc6;=5zF(Z8Kfhja zvs9dY~%+TV0%`s^JL_>HJW!5laa|a@L}2>BovRZsjW zFfsl%9aiU4xEE6c(%j*yNxCYwh0V2RT?&k!J)so0HPGs-p$$a-o73UBaVzW=INVx+ z>$Av~HDeIRMpKI!;fHY3)4LPckAD<(;WXmCH|ut_N>(Q$w`Bxsri;GZ<-vNb#j}H+ zml@^|e*JiUz@vrESvsEgn)Yrv3f-H0g!kZSz(e%jQT&ok1j6el5N4Q1ioU_`GCc4b zRjYywd4M;~g#;%mzAD9dEV@0+w7FJ-&s}Lc=)|di;Y!1pVMVv6nX`(PnWYqy(yv$+ zKO?uYHpMcpR2)A$r?c2%oZaD!qcWbiGL~1HRa6nrTX99+3gv^bw|v+>KR6lEew=xm zWUgk0ZH5A;u+Su{gC^T9bwm_#=U3HxEp+Dm*jJh-&n~tVZIiYS*T9}iDXbWcj_kWn zaXssBU8wdFUwLqHKF$+Wj^&`YDgUQ({%erGLC$}}V16cY9r6eJk>9~X&-379;?XI8 z9m*-sP=}OiC6xsz2Se)K8-7W+Fe=_3%`V<9?LrN{?9T#(&#-ev#mAzxEvVmc(&y1+ zl9uEKKq089Z3qn?fK6%3s3yZzxJCPsv}f{;Ld8d;%61f<0Uu9ZyDx=l#!`wI0;@cV z@X4+^=mDsOFCmFCfSZ`p^GL<^c-+TV#I5LxX#spIj_9wF!;Ixy(bQiDc>$fB{3^;4 zy*7t|h1i+~gZW!g0ekh37Fn3|Z^hTbSf4ZI^qj%n&Z5c3B-ij$#hav(nVY2InJVE1 z$RLY`cfdx{9_Zsn#B2IKk@7RvOWKl8aIUdeVoLT(3Op)2nv(UBuH;?GP*Q{Mkc{9_ z;8EexAWl~T-)_iPuHGb-&WwtG@3Vm4T9f*bG%-@i%$E|g@0fHl`PI?`B?rpBl%%bA8eg6LD)RNbdrW$IBlKsGqi#6-wrSr+4%}bG zdr$J4a<~KGFOrpiJtlP`^i8tzZ^tAFp>T2wFc|K1DsYo?C~nVMaeH=BEY5_uVTemb zT-v0!=#QD>q^|Cqv ztv`vF4#a#B(~#K&R$@OR#ZrSx4r_z^$dXmYMi1wa28hs$I3I{DSfYDAl{= z_tN)(@`LL4l8{dAk^nc17$!rBHx*{07WzSk;nXiCgodH+sToSVrQuup@S?J!l9_b! zpM(>q+vW%>66Xl%1|}V2w-&dS)dFg7|8@fYJD;VNJd3Y8hpBBFo ze%DbLX}9CI1CM}sh8ZyfnqLn?yR2K4*vK_-Q#kgyo46Ob=jnvWu9fTf&mg_UTDv1? zK&LJZJ>Pd$Ra`RJuH-t}nC@$pq>mNTu-Xi5EH%!typ4=?2D@h2q-7}_u!woQl){iU zSuk)4x3Ck0CY;>Ef(z`bkR8wj*gA5`rw9o`dKA84WNipKzfTY@V4waFXPZwI;KqXB z2*MhRi7Z=cg|V>7NR;Zw!35!{err6xJ**XW!H+qsbFnSmnjwFc_NWuO*#u2@xhAnY zFHzf_r`30>^iK!a-~K%I=Sp-|FTh4mc9=6T-}xb+747-MC*cxK*LUY#`G z6^abfEZ}p~||uk#Qno6i)hr5 zFYG-IUM}r^+(bp+%0US&%Z|Kz8+Sd-m}p?x#Fy4I-X$7z$_)=}aEX&DUE*ZG6u^v1 z%atS0HJlA?S3&Rl{!xxBjP3~d0^T{k+Z~oG8{i+}(?hchC;Tyddv!(Mkvb*xrRkkD zwJOL<*NdYN_8P+E2s0qe2fD>y9QjD+>!);vTA%ms{&SA!t0VXPBG&!MW@x-_7du!M z>Sa-EV7MuN2@>&>HvAELqB?L%9PgJ6_-Z*pACO0V=Gx2NO(8|p*8=_S>x0UuPk^nS zEB-_ydx!ZH zuXUF{|BInjX~YHz;-bXKi} z6ZkhcBSuuOaPcVdu#JiR}S~@OO}#s#n(s;Es0sUxdLA=H!0-(7c{ziyJe&H z;LVH>%lf>H-h{ksvF7GDDaP`CP5!0sRU{{^x)7yP<6Z$$9hI%Hd5;r@qPKuk^iGq} z*_#tGU)x>%d9?~u_J+^1b(h?~rAMV_~!N@E6zpXClxKKL`vMRKD zI*MD|3kU(fU~QQsODXSG^^i=Z%xzi9a{9Z8AB6Unlg;4bYlkEdc4>pf?Z9^iij)q$ zeaL6rRB~lx4M|9Evl=&idy@8!Q_RruP5m}G1b$i-;?g-m=Oq70Q8PyDZU(l!hTWS1 zn&`R9uDR3)L2np$j+NM3M`V%M<>r;gM3*uFQd84H8^jq*2Rz&cU0g@N#TGUwdanon z!>%Ch5T}o)c4!ZbFaQfKe^3`AY?Z=a8&5dms?}fwGzV#KZL>CPpr>$P-6m+N&ztBT zVH;sjhK0xxvo+v}A6}6x$P(i_ALakT54#~*P$X(P6Zwoe$$|#1L44ZmWI+p80uTKh zUCDw4?sz^~(80oFH83!#T)7n*412gIWlzW-S8TWHVI4f62CaxW<1l`bMlOut-Ox`{ zavFAwFlLQ_rvZBaEr5f7qW}@m1>lTwAJ@BnlcC*sp5q!eguTt3>BaPXx>J6Xn;Ij` z?ijRRepCy(mU8cWP}gCFU^{g1_S1~2wUCsUa6ktAwcx?Rj zJ_q*JQUW^I#c_)p2D`;guU8RY087a_7S%W;zs^5%z0LI^P?TX9CaPBc1; z%8ns^kqzyE6xj9U;J;BO;d?yUPc}Wm-Yvmw@Vet>ryBRD!b<4Jzpncu=u_F(YR0X( zMz~Mh*m`Y@YO(HhdT)=u|D6cwkI~RBH0~4kc@N>qb!MtVb~(;NVFz0JSE){h@=Ubi z`>;Mbvk;!$8qh5!3Lo<0DqBO|q_B!V>>*z>e6jGo500EZPozzalT(rBKhcT=+cB{* zJFYD3of6*e8B~UHC7fn@#x20TS3MveXUj4?v+$e*p!=!mblwDP1kilOn5(l4ZteaQ ziKjZ2mmf_KQrk&hPyvc}WZWwQ)z0Ef@Eh~WV?^N|kO|Z|ReN(vY{QJaatC38DCU&> z__o+dHxYv%vv~7}7-1~tbOUZ`a&RZI5E_VJRq&?B`r^VlbYNzP>rp_`SreTZU<1?^ zSshQpt}3~h@ODQt>PvKN1-}Cl+AMDpr00HJrg%{Vt)%ZvDjpo^?3Sp6k z>!}d(HJ^xOi2JQ*jn+5=F-M0fCO2iDRo$ylUpPUyH6HturX;mc9Z*AmIy0o&)k1c^ zTIldAF1M|`ev+JL+jDp=QftC5!a_luR7Y93$3s>l(|~{f2&(w49!;6w<3^t!2c#un zzX~V-ILS7eWs9W*Zo(t+Krv)H2Vr)i@t)$Zh819Ls%;qYsEzZhF*8r2@h`#n1D2?oFYfFmj zh&#=Y?{Qbr;G38wN@ERk3l-))x6=4Y(Z|2N_W&WUXt& zm(5HQyC0_&9aN9zbvGJx{95$js^GFM-#d$8Qy~Q>lSQ$O{Lmg~`I4W8)+#mZ+7dR- z!;a++*wo`RVQ)os6KyyZNIi2% zDq$J*OfNV`Pvsj1`sLG;%y{0D(5s7`3vGRV@0a}-Y8BfaX;tjRX;LHa%~vf1|IDwz zsiGFX@s-0(`koH<#wT9vR==d$qn z0elPS1LTjQRun-q;3e<7qDn{zQ){Wz3BZc~KsmhBZWFcp;tuP%(|<;fguORGC$NLt z4X)meeie8fnc+`%m0%4MH`^{LMjq;Sx>bF-t)7iyW2r@{oxmoXsu#t9+7;S{yML9C z8;)3;)$v$3FzWA*8^p$OKJ;VrK?)_fc3VK$^c`2{NRFHNbh$(M7&X zArAI!nq0CRi?GF|c}l&LZOuaq?n8>Nq!dAKFXo%!!FyoMl3H*oAm90_hXFbr5Gcm7*yMW z28J_B6Erdt|D{@ZJV1P6D&bb?B+B*B2~fu`L^(}?o29;b1-muya**60X5+&_`A(ul ze(aL(l$(Y?ADG5mSq`gaN!WqlKAY}aZ$Rq1(Jt7I5&jvH8DP~JIe=FI^z|~ldmt!j z5#Dlb%Zd?xYhbH~`h|8KHwRWq?wK|t+7YS=7-%q6v? z1fetCm6%&5BK<5s;r9jS_#5OGHeyC0%sGLt^FowkJ|A&L2M*%g{4IFTbg?bYxxC*C znS+;<+rVLwogc;XV?k~*otxMbI$me{t_^&o0reQ6JF!V6ycLY&Z_z_4b*qj~M}A>{ z_?*q~cgU)H&k=5~IfuEP)mh2bGsFByc%6x-1F#X$1UL#fOMbj_0aC$Zc5ql6+l#Pz zz-&McfWDamJS~79d*ZL)cP*Ay)1CVwz3`^LZeOM0hOcNfYTSqYtxw5cJQo>@xR5@I zUoVnP0ke+ZCuZgiN6nvwR?JL157MY1{Fs=UfpLRwz4roH(#lqcmF*Vf^%+_?Qp%k| z=Hm=K6FaH*Jqcxk6fXy%HiZ7o6N3;f!LGk$nZ&Oi4R_V;K*0H8rzX$>p@ zp8)ATAskujch)kY4LHZ~GK?ke>v4xCw?*zmoo|?<{UadFTP>M3tdO|R1YecE0ITZlPOz^$KRk4E?|v=|yQRg-sFC%}4(j`w^R z_Kx%`UO-u>DW#+QO8ndlL9Y^+^$BLTGg#-Qqx>=et>cONwcwdiNV|Ha&B$w%(OQjtL;XX1S8IIz)2$=0Zo^(h&k&JI^#_06u0~b7g$GC}RWMeH21`6)Nny9|=WnFdqy(U{#&Y$uO7bqxZOPgAWi~ z7E-@zpyQfy)d;IX4_Z@CvmEWGdG*Hn9o9jx5Ckq3qp~MiXR zwt$PVr2~4~%0l4TlG_!wC5H81tDt?K+C=+em((_)NWF`VW}{xWzFnhQ%rC}WheKZ7 z$d}f@Mrxf)%&k+eQr4)Rss2=Hsy@@i6vEfoQDc##`~5UHfiZsc2+&aQj_4t;2cP{HZGE`ZF%% zJ-Oew)KUG@yiEve{#lqFVLjE%l=3Mv!0u4jf7A}KrSOn^tmG!lrZSd(NM&e2hk`xe zm#n>~iKk9z$l>3)s*@(@T@oB!J-R0HCSrd;T^{t_4D2;l8>8V7TW!>5vw=5FfXLk? z>2^-!4bCyZ((gqhwCD^$OCjUK=a1qFAF)!%#Y>juyp&cl#Q^qU0<9pJa8GJKNC^w>} zVmC9|Yv^1uw}x~#7D4l0M0aD*8`1ywKJuvBzo!)^Vo-breLAbw1PyD6;K7u`(zrqQ zur%P4tlS-6XRFTyv1`%WkiS^wp4_2ylU$=D4|~EO*wYqoD`lAhfh9 zdPrl_^0rOZ!c(hiFV;fqs(GH6)qJW=nI}4h6N}nlAp#sD@z8n6#VmmB<|=Vj?R$`% zOF>Ln71Jppzq+UmlDV?uSo!ug8o&*ox|F7plA&W>S~%HTdjtjKutSVq8M)S z_@&>q!FpdKm3#O!1N|# zzJiT9$WNj+Ou5pw8hKToT2}kw&)QINenZUn*R*2+tYG@W%WA)=r53y=Dw>rhYR6o( z`nqdcB6>ZD1->1$G$z{8(LZ_r2`EEZX6|ZBp9<(|9B3)^lv>y%Mq4{2cj**&#Iorwag(`AJTtvZ>;aseURO%GMTzH`^brs*GreyF&)Kzk z{#S1Bd)Yx{bjTqSt^+>}mH%Vd{l5^l`WM2MUJb)~Z)f^jKFc0qp$1?0 zA~o=PtNliN<(?Yq>C3nH% zhFjcd-fAUD%PzQjv9=Pg-v%A=qkY&K&fDIJc^lm8dAtSo^IY1XH!tV{58eg_pV?G0 zYuHEN?LPwd5phE$@%Tq{uoY)(3|h0T@3N$z5tqy z=sx4|dz*YibAIiv%(>A$IH$t>TPK(Ogs8)*eg>qfhPW@c&RE07*sve3#V*Y6y`$d& zOikYW)!^gc5oqkX8~Gn~w|FZ0e0OMi3Z1(|g?6XJ zpFh5vo3YQ$ySJpYg6|J zp5HoO^^A7D?D-GpOVN^JQS!t6M5V4@XaQfL-@D4U9@Iz5ZLKu6%agIc17rf+sI3*8 z%R%oe9rf^Yd3F1TpOn{+G-aIRve+nPj~2Xlqxg}KPsrzQ%Y5AW$W52K7mxTyl`b!> z)5t5_>Yj~Nx*SD!3cqkfWaVRqf6S+~id`9D%r$7hw-=F}WmihC`riX@Gi=gc8KH-5 zB10jy}QrfwnXOP$n>uf#)wCdJVJ_Do1o>bY0R&b4oN!rp$LRCdt;9w0He6zdyet=eag*;m&wkj^eGc`bdm~G2PHWJ6#&5iz8EUEvVVlx; zXY@-j8)03o8LRDzpxmbDO_K$^P5s|{&>qm-BDNW!GY&T?NAT6nXm#MGAqf5dobI-2 z-Rgo4nX%bvTpjs>uu}!UqJT1?L#8|iT9fHUv02=1z$`g;0q7=c!Bqyi-!Nv8O1jU; zOo^V!4#?MF$7@R93*8K{T{@ZvNC&^8whQI0g$AX?)lIF&HKaR;YG2TSwwU^%(;(nY z4UUf1ys$s=j=p62t_{Gt$s#0g$DBe=LGKpOB{!Ofmpowo&^-_*196PvKfqzSL08^B zP&UOL<#(aP*F6LCiOjzde%$()(04k_BDz<*&wB>)i75|w!(ro^KVJ<|A>>NbAKT61Q90NPa!;#Br)T1S_E0^cb3Z1825la+;R_^kb9ty$&oLXVWu zR?+v5m6SWm?Xl&gc~3&?`!GEJ25NTDyT_M~ zlQ>xu|7Z9w9>OK95V1vj9DVXNU?adh81w*u0QW(_e1HgO1_S`x0Sdf#;CU1f4|fh= zIou_9&L=mZZhyQze$I%EEDIQ2qjZ#1D^>$rEWlL2MvLN3><8d#ENXBZa!9k2gx@(> zPheZ|vT`NMf;2Q_f!-49GGIY550(?Bxy04wU1EK?<;u5~LAVFJ)0YnIH-B`z^cS;Hk#* z`OuGhAD`DC<#7aQj|0vCg#B*JN}H{dPIA4ARjpR@hivq8p7i5y);-%BBOhVXOPq#U z-7o%Wb%QBk$sb z)$eQ}eXuv~8)v!$=aLz=khc+Lo*b#~bEUr5hKGT2gPiZ;_D+rF zw;Hk=Y9SHyR1G)@)vz}`+}72*SVrziQdwMRJU9^ssR*G>c$mJ+bX1tV! z@|bwr^gWn?Z-oAZfVT>Cv@SO+d|uA3TVhZP7L0&T4^6Ycf%ijH4{omxbx;cvL&rTN z2TI@U*BA@MkjQzy5!kbH&dZlm?^E!vd_wdxCRqS(KL|Nrp-F= zOXY#LKd0CIod>zA3;4OnZ3${*5n>w(Ku-qkQS!YC-)#7PCHZXd+2DIb^0mTO3SXJz z+Yes}eD}e}gg2;0dPUxlliS6uW*f@>S3?ng-)h)2VRxFMcdK08lLARtTOJb*H5B3Z zV8bKU%b3ftCtWd7>Vc!d+dL6@OUm&^wAttV-Z#*TkWA~{tn_(Hac;>$xk}L781~4D z%m26od;67HHll2$28n|0^EShRun)TP%+eXh=QTq{1M>i|kSO#ta%zk)MteoT%VSls z2w%A}3aA8ZNCzJsAPYD-8?YU)7qB1D1vmnD9}qtjYXjg2 z(&X?jqqgURF4Xp}?i~I__`ZbXb`|D9!ozoign@*8+6Lh1UBy`2o1KxGtpb*@F-$OH zlmp)D!)WWuLY_4ah1LPIc|}vX8aAsD%4t$7-*S;P8(4bxwgn>X`Rh5` ztDobpi^IORfWP;qkQe#}P^%jxS=vpYN}tm|fZ0_M+}tA=f59E%jbO}xaFKePk8=osf}pe%5kQ+PFUnbzc)LZ zot!b?a45SK;OyJ#Z^};3#&E zIN4p~lBhn<2dw94)P10}*Sho-j~3U@nQGb za}@Fp_KsC4O6ahf0dA4kFzd|hYkq}#?S-VN<;$?Qq24Meza6fy_mx2JSCNoOXw#g) zdH85WoKXHNyq5zfIx#Pxw^oq7+S7PTcPYJrkG~@PDB>d+67VhwDES}G6<`+?^4<>$ z`rPgU+|P%+^>8y`ohwqlP8zk0z~7M1QT+(Xml9}^e8VJPeBgy>4WQW;J*Wum#vQ^E z;BOUR0q}i3aQbOLeiXO!5$1&ZAmCfzI20Ka9Yk0rU=6}7c+woMi+%^q@Cyh(4j2QP z-KzeIE8!IwKZi{CC^*vR!W|^pDf4-=`l&xh`eis%RLKdW9v7d|KMu}A_Soa%4t>S> zG(88`PJOtIFhRam_L$rVG5OnSHyl_E8Rpr5whYCUm3JJE$l2 zhjQ`ddy&4BX1Y5~=q1AYapSJ|MjdNJdaEt zY0*C4;~pwu{WbMmjQgjUujDn~!1?Azlyg*{Dy4qaH~VZ(6i*3XTYzWF@!SL03lISTz$U

AF^; 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%0DkQQ+6T1{X&=Uc@i3^+ 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 literal 0 HcmV?d00001