diff --git a/.gitignore b/.gitignore index 2baa7745f491e5c87a5159c034c5766a093e3b0a..3328a8981f319e0f4cfd432684dceb483f77a4db 100644 --- a/.gitignore +++ b/.gitignore @@ -49,7 +49,8 @@ user_config.pri *.suo *.uhf.txt *.opensdf - thirdParty/qserialport-build-desktop/ thirdParty/qserialport/bin/ thirdParty/qserialport/lib/ +apmplanner2.xcodeproj/ +GeneratedFiles/ diff --git a/avrdude/avrdude.conf b/avrdude/avrdude.conf new file mode 100644 index 0000000000000000000000000000000000000000..8883bd12e8a200611b54a8328580a84119085907 --- /dev/null +++ b/avrdude/avrdude.conf @@ -0,0 +1,15478 @@ +# $Id: avrdude.conf.in 916 2010-01-15 16:36:13Z joerg_wunsch $ +# +# AVRDUDE Configuration File +# +# This file contains configuration data used by AVRDUDE which describes +# the programming hardware pinouts and also provides part definitions. +# AVRDUDE's "-C" command line option specifies the location of the +# configuration file. The "-c" option names the programmer configuration +# which must match one of the entry's "id" parameter. The "-p" option +# identifies which part AVRDUDE is going to be programming and must match +# one of the parts' "id" parameter. +# +# Possible entry formats are: +# +# programmer +# id = [, [, ] ...] ; # are quoted strings +# desc = ; # quoted string +# type = par | stk500 | stk500v2 | stk500pp | stk500hvsp | stk500generic | +# stk600 | stk600pp | stk600hvsp | +# avr910 | butterfly | usbasp | +# jtagmki | jtagmkii | jtagmkii_isp | jtagmkii_dw | +# jtagmkII_avr32 | jtagmkii_pdi | +# dragon_dw | dragon_jtag | dragon_isp | dragon_pp | +# dragon_hvsp | dragon_pdi | arduino; # programmer type +# baudrate = ; # baudrate for avr910-programmer +# vcc = [, ... ] ; # pin number(s) +# reset = ; # pin number +# sck = ; # pin number +# mosi = ; # pin number +# miso = ; # pin number +# errled = ; # pin number +# rdyled = ; # pin number +# pgmled = ; # pin number +# vfyled = ; # pin number +# ; +# +# part +# id = ; # quoted string +# desc = ; # quoted string +# has_jtag = ; # part has JTAG i/f +# has_debugwire = ; # part has debugWire i/f +# has_pdi = ; # part has PDI i/f +# has_tpi = ; # part has TPI i/f +# devicecode = ; # deprecated, use stk500_devcode +# stk500_devcode = ; # numeric +# avr910_devcode = ; # numeric +# signature = ; # signature bytes +# chip_erase_delay = ; # micro-seconds +# reset = dedicated | io; +# retry_pulse = reset | sck; +# pgm_enable = ; +# chip_erase = ; +# chip_erase_delay = ; # chip erase delay (us) +# # STK500 parameters (parallel programming IO lines) +# pagel = ; # pin name in hex, i.e., 0xD7 +# bs2 = ; # pin name in hex, i.e., 0xA0 +# serial = ; # can use serial downloading +# parallel = ; # can use par. programming +# # STK500v2 parameters, to be taken from Atmel's XML files +# timeout = ; +# stabdelay = ; +# cmdexedelay = ; +# synchloops = ; +# bytedelay = ; +# pollvalue = ; +# pollindex = ; +# predelay = ; +# postdelay = ; +# pollmethod = ; +# mode = ; +# delay = ; +# blocksize = ; +# readsize = ; +# hvspcmdexedelay = ; +# # STK500v2 HV programming parameters, from XML +# pp_controlstack = , , ...; # PP only +# hvsp_controlstack = , , ...; # HVSP only +# hventerstabdelay = ; +# progmodedelay = ; # PP only +# latchcycles = ; +# togglevtg = ; +# poweroffdelay = ; +# resetdelayms = ; +# resetdelayus = ; +# hvleavestabdelay = ; +# resetdelay = ; +# synchcycles = ; # HVSP only +# chiperasepulsewidth = ; # PP only +# chiperasepolltimeout = ; +# chiperasetime = ; # HVSP only +# programfusepulsewidth = ; # PP only +# programfusepolltimeout = ; +# programlockpulsewidth = ; # PP only +# programlockpolltimeout = ; +# # JTAG ICE mkII parameters, also from XML files +# allowfullpagebitstream = ; +# enablepageprogramming = ; +# idr = ; # IO addr of IDR (OCD) reg. +# rampz = ; # IO addr of RAMPZ reg. +# spmcr = ; # mem addr of SPMC[S]R reg. +# eecr = ; # mem addr of EECR reg. +# # (only when != 0x3c) +# is_avr32 = ; # AVR32 part +# +# memory +# paged = ; # yes / no +# size = ; # bytes +# page_size = ; # bytes +# num_pages = ; # numeric +# min_write_delay = ; # micro-seconds +# max_write_delay = ; # micro-seconds +# readback_p1 = ; # byte value +# readback_p2 = ; # byte value +# pwroff_after_write = ; # yes / no +# read = ; +# write = ; +# read_lo = ; +# read_hi = ; +# write_lo = ; +# write_hi = ; +# loadpage_lo = ; +# loadpage_hi = ; +# writepage = ; +# ; +# ; +# +# If any of the above parameters are not specified, the default value +# of 0 is used for numerics or the empty string ("") for string +# values. If a required parameter is left empty, AVRDUDE will +# complain. +# +# NOTES: +# * 'devicecode' is the device code used by the STK500 (see codes +# listed below) +# * Not all memory types will implement all instructions. +# * AVR Fuse bits and Lock bits are implemented as a type of memory. +# * Example memory types are: +# "flash", "eeprom", "fuse", "lfuse" (low fuse), "hfuse" (high +# fuse), "signature", "calibration", "lock" +# * The memory type specified on the avrdude command line must match +# one of the memory types defined for the specified chip. +# * The pwroff_after_write flag causes avrdude to attempt to +# power the device off and back on after an unsuccessful write to +# the affected memory area if VCC programmer pins are defined. If +# VCC pins are not defined for the programmer, a message +# indicating that the device needs a power-cycle is printed out. +# This flag was added to work around a problem with the +# at90s4433/2333's; see the at90s4433 errata at: +# +# http://www.atmel.com/atmel/acrobat/doc1280.pdf +# +# INSTRUCTION FORMATS +# +# Instruction formats are specified as a comma seperated list of +# string values containing information (bit specifiers) about each +# of the 32 bits of the instruction. Bit specifiers may be one of +# the following formats: +# +# '1' = the bit is always set on input as well as output +# +# '0' = the bit is always clear on input as well as output +# +# 'x' = the bit is ignored on input and output +# +# 'a' = the bit is an address bit, the bit-number matches this bit +# specifier's position within the current instruction byte +# +# 'aN' = the bit is the Nth address bit, bit-number = N, i.e., a12 +# is address bit 12 on input, a0 is address bit 0. +# +# 'i' = the bit is an input data bit +# +# 'o' = the bit is an output data bit +# +# Each instruction must be composed of 32 bit specifiers. The +# instruction specification closely follows the instruction data +# provided in Atmel's data sheets for their parts. +# +# See below for some examples. +# +# +# The following are STK500 part device codes to use for the +# "devicecode" field of the part. These came from Atmel's software +# section avr061.zip which accompanies the application note +# AVR061 available from: +# +# http://www.atmel.com/atmel/acrobat/doc2525.pdf +# + +#define ATTINY10 0x10 /* the _old_ one that never existed! */ +#define ATTINY11 0x11 +#define ATTINY12 0x12 +#define ATTINY15 0x13 +#define ATTINY13 0x14 + +#define ATTINY22 0x20 +#define ATTINY26 0x21 +#define ATTINY28 0x22 +#define ATTINY2313 0x23 + +#define AT90S1200 0x33 + +#define AT90S2313 0x40 +#define AT90S2323 0x41 +#define AT90S2333 0x42 +#define AT90S2343 0x43 + +#define AT90S4414 0x50 +#define AT90S4433 0x51 +#define AT90S4434 0x52 +#define ATMEGA48 0x59 + +#define AT90S8515 0x60 +#define AT90S8535 0x61 +#define AT90C8534 0x62 +#define ATMEGA8515 0x63 +#define ATMEGA8535 0x64 + +#define ATMEGA8 0x70 +#define ATMEGA88 0x73 +#define ATMEGA168 0x86 + +#define ATMEGA161 0x80 +#define ATMEGA163 0x81 +#define ATMEGA16 0x82 +#define ATMEGA162 0x83 +#define ATMEGA169 0x84 + +#define ATMEGA323 0x90 +#define ATMEGA32 0x91 + +#define ATMEGA64 0xA0 + +#define ATMEGA103 0xB1 +#define ATMEGA128 0xB2 +#define AT90CAN128 0xB3 +#define AT90CAN64 0xB3 +#define AT90CAN32 0xB3 + +#define AT86RF401 0xD0 + +#define AT89START 0xE0 +#define AT89S51 0xE0 +#define AT89S52 0xE1 + +# The following table lists the devices in the original AVR910 +# appnote: +# |Device |Signature | Code | +# +-------+----------+------+ +# |tiny12 | 1E 90 05 | 0x55 | +# |tiny15 | 1E 90 06 | 0x56 | +# | | | | +# | S1200 | 1E 90 01 | 0x13 | +# | | | | +# | S2313 | 1E 91 01 | 0x20 | +# | S2323 | 1E 91 02 | 0x48 | +# | S2333 | 1E 91 05 | 0x34 | +# | S2343 | 1E 91 03 | 0x4C | +# | | | | +# | S4414 | 1E 92 01 | 0x28 | +# | S4433 | 1E 92 03 | 0x30 | +# | S4434 | 1E 92 02 | 0x6C | +# | | | | +# | S8515 | 1E 93 01 | 0x38 | +# | S8535 | 1E 93 03 | 0x68 | +# | | | | +# |mega32 | 1E 95 01 | 0x72 | +# |mega83 | 1E 93 05 | 0x65 | +# |mega103| 1E 97 01 | 0x41 | +# |mega161| 1E 94 01 | 0x60 | +# |mega163| 1E 94 02 | 0x64 | + +# Appnote AVR109 also has a table of AVR910 device codes, which +# lists: +# dev avr910 signature +# ATmega8 0x77 0x1E 0x93 0x07 +# ATmega8515 0x3B 0x1E 0x93 0x06 +# ATmega8535 0x6A 0x1E 0x93 0x08 +# ATmega16 0x75 0x1E 0x94 0x03 +# ATmega162 0x63 0x1E 0x94 0x04 +# ATmega163 0x66 0x1E 0x94 0x02 +# ATmega169 0x79 0x1E 0x94 0x05 +# ATmega32 0x7F 0x1E 0x95 0x02 +# ATmega323 0x73 0x1E 0x95 0x01 +# ATmega64 0x46 0x1E 0x96 0x02 +# ATmega128 0x44 0x1E 0x97 0x02 +# +# These codes refer to "BOOT" device codes which are apparently +# different than standard device codes, for whatever reasons +# (often one above the standard code). + +# There are several extended versions of AVR910 implementations around +# in the Internet. These add the following codes (only devices that +# actually exist are listed): + +# ATmega8515 0x3A +# ATmega128 0x43 +# ATmega64 0x45 +# ATtiny26 0x5E +# ATmega8535 0x69 +# ATmega32 0x72 +# ATmega16 0x74 +# ATmega8 0x76 +# ATmega169 0x78 + +# +# Overall avrdude defaults +# +default_parallel = "lpt1"; +default_serial = "com1"; + + +# +# PROGRAMMER DEFINITIONS +# + +programmer + id = "arduino"; + desc = "Arduino"; + type = arduino; +; + +programmer + id = "avrisp"; + desc = "Atmel AVR ISP"; + type = stk500; +; + +programmer + id = "avrispv2"; + desc = "Atmel AVR ISP V2"; + type = stk500v2; +; + +programmer + id = "avrispmkII"; + desc = "Atmel AVR ISP mkII"; + type = stk500v2; +; + +programmer + id = "avrisp2"; + desc = "Atmel AVR ISP mkII"; + type = stk500v2; +; + +programmer + id = "buspirate"; + desc = "The Bus Pirate"; + type = buspirate; +; + +# This is supposed to be the "default" STK500 entry. +# Attempts to select the correct firmware version +# by probing for it. Better use one of the entries +# below instead. +programmer + id = "stk500"; + desc = "Atmel STK500"; + type = stk500generic; +; + +programmer + id = "stk500v1"; + desc = "Atmel STK500 Version 1.x firmware"; + type = stk500; +; + +programmer + id = "mib510"; + desc = "Crossbow MIB510 programming board"; + type = stk500; +; + +programmer + id = "stk500v2"; + desc = "Atmel STK500 Version 2.x firmware"; + type = stk500v2; +; + +programmer + id = "stk500pp"; + desc = "Atmel STK500 V2 in parallel programming mode"; + type = stk500pp; +; + +programmer + id = "stk500hvsp"; + desc = "Atmel STK500 V2 in high-voltage serial programming mode"; + type = stk500hvsp; +; + +programmer + id = "stk600"; + desc = "Atmel STK600"; + type = stk600; +; + +programmer + id = "stk600pp"; + desc = "Atmel STK600 in parallel programming mode"; + type = stk600pp; +; + +programmer + id = "stk600hvsp"; + desc = "Atmel STK600 in high-voltage serial programming mode"; + type = stk600hvsp; +; + +programmer + id = "avr910"; + desc = "Atmel Low Cost Serial Programmer"; + type = avr910; +; + +programmer + id = "usbasp"; + desc = "USBasp, http://www.fischl.de/usbasp/"; + type = usbasp; +; + +programmer + id = "usbtiny"; + desc = "USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/"; + type = usbtiny; +; + +programmer + id = "butterfly"; + desc = "Atmel Butterfly Development Board"; + type = butterfly; +; + +programmer + id = "avr109"; + desc = "Atmel AppNote AVR109 Boot Loader"; + type = butterfly; +; + +programmer + id = "avr911"; + desc = "Atmel AppNote AVR911 AVROSP"; + type = butterfly; +; + +programmer + id = "jtagmkI"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = jtagmki; +; + +# easier to type +programmer + id = "jtag1"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 115200; # default is 115200 + type = jtagmki; +; + +# easier to type +programmer + id = "jtag1slow"; + desc = "Atmel JTAG ICE (mkI)"; + baudrate = 19200; + type = jtagmki; +; + +programmer + id = "jtagmkII"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = jtagmkii; +; + +# easier to type +programmer + id = "jtag2slow"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 19200; # default is 19200 + type = jtagmkii; +; + +# JTAG ICE mkII @ 115200 Bd +programmer + id = "jtag2fast"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 115200; + type = jtagmkii; +; + +# make the fast one the default, people will love that +programmer + id = "jtag2"; + desc = "Atmel JTAG ICE mkII"; + baudrate = 115200; + type = jtagmkii; +; + +# JTAG ICE mkII in ISP mode +programmer + id = "jtag2isp"; + desc = "Atmel JTAG ICE mkII in ISP mode"; + baudrate = 115200; + type = jtagmkii_isp; +; + +# JTAG ICE mkII in debugWire mode +programmer + id = "jtag2dw"; + desc = "Atmel JTAG ICE mkII in debugWire mode"; + baudrate = 115200; + type = jtagmkii_dw; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtagmkII_avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = jtagmkii_avr32; +; + +# JTAG ICE mkII in AVR32 mode +programmer + id = "jtag2avr32"; + desc = "Atmel JTAG ICE mkII im AVR32 mode"; + baudrate = 115200; + type = jtagmkii_avr32; +; + +# JTAG ICE mkII in PDI mode +programmer + id = "jtag2pdi"; + desc = "Atmel JTAG ICE mkII PDI mode"; + baudrate = 115200; + type = jtagmkii_pdi; +; + +# AVR Dragon in JTAG mode +programmer + id = "dragon_jtag"; + desc = "Atmel AVR Dragon in JTAG mode"; + baudrate = 115200; + type = dragon_jtag; +; + +# AVR Dragon in ISP mode +programmer + id = "dragon_isp"; + desc = "Atmel AVR Dragon in ISP mode"; + baudrate = 115200; + type = dragon_isp; +; + +# AVR Dragon in PP mode +programmer + id = "dragon_pp"; + desc = "Atmel AVR Dragon in PP mode"; + baudrate = 115200; + type = dragon_pp; +; + +# AVR Dragon in HVSP mode +programmer + id = "dragon_hvsp"; + desc = "Atmel AVR Dragon in HVSP mode"; + baudrate = 115200; + type = dragon_hvsp; +; + +# AVR Dragon in debugWire mode +programmer + id = "dragon_dw"; + desc = "Atmel AVR Dragon in debugWire mode"; + baudrate = 115200; + type = dragon_dw; +; + +# AVR Dragon in PDI mode +programmer + id = "dragon_pdi"; + desc = "Atmel AVR Dragon in PDI mode"; + baudrate = 115200; + type = dragon_pdi; +; + +programmer + id = "pavr"; + desc = "Jason Kyle's pAVR Serial Programmer"; + type = avr910; +; + +# Parallel port programmers. + +programmer + id = "bsd"; + desc = "Brian Dean's Programmer, http://www.bsdhome.com/avrdude/"; + type = par; + vcc = 2, 3, 4, 5; + reset = 7; + sck = 8; + mosi = 9; + miso = 10; +; + +programmer + id = "stk200"; + desc = "STK200"; + type = par; + buff = 4, 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; +; + +# The programming dongle used by the popular Ponyprog +# utility. It is almost similar to the STK200 one, +# except that there is a LED indicating that the +# programming is currently in progress. + +programmer + id = "pony-stk200"; + desc = "Pony Prog STK200"; + type = par; + buff = 4, 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; + pgmled = 8; +; + +programmer + id = "dt006"; + desc = "Dontronics DT006"; + type = par; + reset = 4; + sck = 5; + mosi = 2; + miso = 11; +; + +programmer + id = "bascom"; + desc = "Bascom SAMPLE programming cable"; + type = par; + reset = 4; + sck = 5; + mosi = 2; + miso = 11; +; + +programmer + id = "alf"; + desc = "Nightshade ALF-PgmAVR, http://nightshade.homeip.net/"; + type = par; + vcc = 2, 3, 4, 5; + buff = 6; + reset = 7; + sck = 8; + mosi = 9; + miso = 10; + errled = 1; + rdyled = 14; + pgmled = 16; + vfyled = 17; +; + +programmer + id = "sp12"; + desc = "Steve Bolt's Programmer"; + type = par; + vcc = 4,5,6,7,8; + reset = 3; + sck = 2; + mosi = 9; + miso = 11; +; + +programmer + id = "picoweb"; + desc = "Picoweb Programming Cable, http://www.picoweb.net/"; + type = par; + reset = 2; + sck = 3; + mosi = 4; + miso = 13; +; + +programmer + id = "abcmini"; + desc = "ABCmini Board, aka Dick Smith HOTCHIP"; + type = par; + reset = 4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "futurlec"; + desc = "Futurlec.com programming cable."; + type = par; + reset = 3; + sck = 2; + mosi = 1; + miso = 10; +; + + +# From the contributor of the "xil" jtag cable: +# The "vcc" definition isn't really vcc (the cable gets its power from +# the programming circuit) but is necessary to switch one of the +# buffer lines (trying to add it to the "buff" lines doesn't work). +# With this, TMS connects to RESET, TDI to MOSI, TDO to MISO and TCK +# to SCK (plus vcc/gnd of course) +programmer + id = "xil"; + desc = "Xilinx JTAG cable"; + type = par; + mosi = 2; + sck = 3; + reset = 4; + buff = 5; + miso = 13; + vcc = 6; +; + + +programmer + id = "dapa"; + desc = "Direct AVR Parallel Access cable"; + type = par; + vcc = 3; + reset = 16; + sck = 1; + mosi = 2; + miso = 11; +; + +programmer + id = "atisp"; + desc = "AT-ISP V1.1 programming cable for AVR-SDK1 from micro-research.co.th"; + type = par; + reset = ~6; + sck = ~8; + mosi = ~7; + miso = ~10; +; + +programmer + id = "ere-isp-avr"; + desc = "ERE ISP-AVR "; + type = par; + reset = ~4; + sck = 3; + mosi = 2; + miso = 10; +; + +programmer + id = "blaster"; + desc = "Altera ByteBlaster"; + type = par; + sck = 2; + miso = 11; + reset = 3; + mosi = 8; + buff = 14; +; + +# It is almost same as pony-stk200, except vcc on pin 5 to auto +# disconnect port (download on http://electropol.free.fr) +programmer + id = "frank-stk200"; + desc = "Frank STK200"; + type = par; + vcc = 5; + sck = 6; + mosi = 7; + reset = 9; + miso = 10; + pgmled = 8; +; + +# The AT98ISP Cable is a simple parallel dongle for AT89 family. +# http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2877 +programmer +id = "89isp"; +desc = "Atmel at89isp cable"; +type = par; +reset = 17; +sck = 1; +mosi = 2; +miso = 10; +; + + +# +# some ultra cheap programmers use bitbanging on the +# serialport. +# +# PC - DB9 - Pins for RS232: +# +# GND 5 -- |O +# | O| <- 9 RI +# DTR 4 <- |O | +# | O| <- 8 CTS +# TXD 3 <- |O | +# | O| -> 7 RTS +# RXD 2 -> |O | +# | O| <- 6 DSR +# DCD 1 -> |O +# +# Using RXD is currently not supported. +# Using RI is not supported under Win32 but is supported under Posix. + +# serial ponyprog design (dasa2 in uisp) +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "ponyser"; + desc = "design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts"; + type = serbb; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# Same as above, different name +# reset=!txd sck=rts mosi=dtr miso=cts + +programmer + id = "siprog"; + desc = "Lancos SI-Prog "; + type = serbb; + reset = ~3; + sck = 7; + mosi = 4; + miso = 8; +; + +# unknown (dasa in uisp) +# reset=rts sck=dtr mosi=txd miso=cts + +programmer + id = "dasa"; + desc = "serial port banging, reset=rts sck=dtr mosi=txd miso=cts"; + type = serbb; + reset = 7; + sck = 4; + mosi = 3; + miso = 8; +; + +# unknown (dasa3 in uisp) +# reset=!dtr sck=rts mosi=txd miso=cts + +programmer + id = "dasa3"; + desc = "serial port banging, reset=!dtr sck=rts mosi=txd miso=cts"; + type = serbb; + reset = ~4; + sck = 7; + mosi = 3; + miso = 8; +; + +# C2N232i (jumper configuration "auto") +# reset=dtr sck=!rts mosi=!txd miso=!cts + +programmer + id = "c2n232i"; + desc = "serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts"; + type = serbb; + reset = 4; + sck = ~7; + mosi = ~3; + miso = ~8; +; + +# +# PART DEFINITIONS +# + +#------------------------------------------------------------ +# ATtiny11 +#------------------------------------------------------------ + +# This is an HVSP-only device. + +part + id = "t11"; + desc = "ATtiny11"; + stk500_devcode = 0x11; + signature = 0x1e 0x90 0x04; + chip_erase_delay = 20000; + + timeout = 200; + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + blocksize = 64; + readsize = 256; + delay = 5; + ; + + memory "flash" + size = 1024; + blocksize = 128; + readsize = 256; + delay = 3; + ; + + memory "signature" + size = 3; + ; + + memory "lock" + size = 1; + ; + + memory "calibration" + size = 1; + ; + + memory "fuse" + size = 1; + ; +; + +#------------------------------------------------------------ +# ATtiny12 +#------------------------------------------------------------ + +part + id = "t12"; + desc = "ATtiny12"; + stk500_devcode = 0x12; + avr910_devcode = 0x55; + signature = 0x1e 0x90 0x05; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 8; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4500; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# ATtiny13 +#------------------------------------------------------------ + +part + id = "t13"; + desc = "ATtiny13"; + has_debugwire = yes; + flash_instr = 0xB4, 0x0E, 0x1E; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x0E, 0xB4, 0x0E, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; + signature = 0x1e 0x90 0x07; + chip_erase_delay = 4000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 90; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 1024; + page_size = 32; + num_pages = 32; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 0 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny15 +#------------------------------------------------------------ + +part + id = "t15"; + desc = "ATtiny15"; + stk500_devcode = 0x13; + avr910_devcode = 0x56; + signature = 0x1e 0x90 0x06; + chip_erase_delay = 8200; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 5; + synchcycles = 6; + latchcycles = 16; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 64; + min_write_delay = 8200; + max_write_delay = 8200; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + size = 1024; + min_write_delay = 4100; + max_write_delay = 4100; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x o o o o x x o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x i i i i 1 1 i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +; + +#------------------------------------------------------------ +# AT90s1200 +#------------------------------------------------------------ + +part + id = "1200"; + desc = "AT90S1200"; + stk500_devcode = 0x33; + avr910_devcode = 0x13; + signature = 0x1e 0x90 0x01; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 1; + bytedelay = 0; + pollindex = 0; + pollvalue = 0xFF; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 64; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 32; + readsize = 256; + ; + memory "flash" + size = 1024; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x02; + delay = 15; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4414 +#------------------------------------------------------------ + +part + id = "4414"; + desc = "AT90S4414"; + stk500_devcode = 0x50; + avr910_devcode = 0x28; + signature = 0x1e 0x92 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2313 +#------------------------------------------------------------ + +part + id = "2313"; + desc = "AT90S2313"; + stk500_devcode = 0x40; + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x i i x", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s2333 +#------------------------------------------------------------ + +part + id = "2333"; +##### WARNING: No XML file for device 'AT90S2333'! ##### + desc = "AT90S2333"; + stk500_devcode = 0x42; + avr910_devcode = 0x34; + signature = 0x1e 0x91 0x05; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s2343 (also AT90s2323 and ATtiny22) +#------------------------------------------------------------ + +part + id = "2343"; + desc = "AT90S2343"; + stk500_devcode = 0x43; + avr910_devcode = 0x4c; + signature = 0x1e 0x91 0x03; + chip_erase_delay = 18000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x00, + 0x68, 0x78, 0x68, 0x68, 0x00, 0x00, 0x68, 0x78, + 0x78, 0x00, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 0; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 50; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + memory "flash" + size = 2048; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 128; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o o x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + + +#------------------------------------------------------------ +# AT90s4433 +#------------------------------------------------------------ + +part + id = "4433"; + desc = "AT90S4433"; + stk500_devcode = 0x51; + avr910_devcode = 0x30; + signature = 0x1e 0x92 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + pwroff_after_write = yes; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s4434 +#------------------------------------------------------------ + +part + id = "4434"; +##### WARNING: No XML file for device 'AT90S4434'! ##### + desc = "AT90S4434"; + stk500_devcode = 0x52; + avr910_devcode = 0x6c; + signature = 0x1e 0x92 0x02; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + memory "eeprom" + size = 256; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + ; + memory "flash" + size = 4096; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 i i i i i", + "x x x x x x x x x x x x x x x x"; + ; + memory "lock" + size = 1; + min_write_delay = 9000; + max_write_delay = 20000; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + ; + ; + +#------------------------------------------------------------ +# AT90s8515 +#------------------------------------------------------------ + +part + id = "8515"; + desc = "AT90S8515"; + stk500_devcode = 0x60; + avr910_devcode = 0x38; + signature = 0x1e 0x93 0x01; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x7f; + readback_p2 = 0x7f; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# AT90s8535 +#------------------------------------------------------------ + +part + id = "8535"; + desc = "AT90S8535"; + stk500_devcode = 0x61; + avr910_devcode = 0x68; + signature = 0x1e 0x93 0x03; + chip_erase_delay = 20000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 1; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0x00; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "flash" + size = 8192; + min_write_delay = 9000; + max_write_delay = 20000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write_lo = " 0 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + write_hi = " 0 1 0 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 128; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "fuse" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x x o"; + write = "1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x o o x x x x x x"; + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + ; + +#------------------------------------------------------------ +# ATmega103 +#------------------------------------------------------------ + +part + id = "m103"; + desc = "ATMEGA103"; + stk500_devcode = 0xB1; + avr910_devcode = 0x41; + signature = 0x1e 0x97 0x01; + chip_erase_delay = 112000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x8E, 0x9E, 0x2E, 0x3E, 0xAE, 0xBE, + 0x4E, 0x5E, 0xCE, 0xDE, 0x6E, 0x7E, 0xEE, 0xDE, + 0x66, 0x76, 0xE6, 0xF6, 0x6A, 0x7A, 0xEA, 0x7A, + 0x7F, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 15; + chiperasepolltimeout = 0; + programfusepulsewidth = 2; + programfusepolltimeout = 0; + programlockpulsewidth = 0; + programlockpolltimeout = 10; + + memory "eeprom" + size = 4096; + min_write_delay = 4000; + max_write_delay = 9000; + readback_p1 = 0x80; + readback_p2 = 0x7f; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 22000; + max_write_delay = 56000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 70; + blocksize = 256; + readsize = 256; + ; + + memory "fuse" + size = 1; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x x o x o 1 o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 1 i 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x o o x"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 i i 1", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega64 +#------------------------------------------------------------ + +part + id = "m64"; + desc = "ATMEGA64"; + has_jtag = yes; + stk500_devcode = 0xA0; + avr910_devcode = 0x45; + signature = 0x1e 0x96 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega128 +#------------------------------------------------------------ + +part + id = "m128"; + desc = "ATMEGA128"; + has_jtag = yes; + stk500_devcode = 0xB2; + avr910_devcode = 0x43; + signature = 0x1e 0x97 0x02; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x22; + spmcr = 0x68; + rampz = 0x3b; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 12; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN128 +#------------------------------------------------------------ + +part + id = "c128"; + desc = "AT90CAN128"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x97 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN64 +#------------------------------------------------------------ + +part + id = "c64"; + desc = "AT90CAN64"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x96 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90CAN32 +#------------------------------------------------------------ + +part + id = "c32"; + desc = "AT90CAN32"; + has_jtag = yes; + stk500_devcode = 0xB3; +# avr910_devcode = 0x43; + signature = 0x1e 0x95 0x81; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + eecr = 0x3f; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 256; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega16 +#------------------------------------------------------------ + +part + id = "m16"; + desc = "ATMEGA16"; + has_jtag = yes; + stk500_devcode = 0x82; + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x03; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 100; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "calibration" + size = 4; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega164P +#------------------------------------------------------------ + +# close to ATmega16 + +part + id = "m164p"; + desc = "ATMEGA164P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x94 0x0a; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega324P +#------------------------------------------------------------ + +# similar to ATmega164P + +part + id = "m324p"; + desc = "ATMEGA324P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x95 0x08; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega644 +#------------------------------------------------------------ + +# similar to ATmega164 + +part + id = "m644"; + desc = "ATMEGA644"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x96 0x09; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega644P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m644p"; + desc = "ATMEGA644P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x96 0x0a; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega1284P +#------------------------------------------------------------ + +# similar to ATmega164p + +part + id = "m1284p"; + desc = "ATMEGA1284P"; + has_jtag = yes; + stk500_devcode = 0x82; # no STK500v1 support, use the ATmega16 one + avr910_devcode = 0x74; + signature = 0x1e 0x97 0x05; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega162 +#------------------------------------------------------------ + +part + id = "m162"; + desc = "ATMEGA162"; + has_jtag = yes; + stk500_devcode = 0x83; + avr910_devcode = 0x63; + signature = 0x1e 0x94 0x04; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + + idr = 0x04; + spmcr = 0x57; + allowfullpagebitstream = yes; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + + ; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 16000; + max_write_delay = 16000; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; +; + + + +#------------------------------------------------------------ +# ATmega163 +#------------------------------------------------------------ + +part + id = "m163"; + desc = "ATMEGA163"; + stk500_devcode = 0x81; + avr910_devcode = 0x64; + signature = 0x1e 0x94 0x02; + chip_erase_delay = 32000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + + memory "eeprom" + size = 512; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 16000; + max_write_delay = 16000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x11; + delay = 20; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o x x o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i 1 1 i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x 1 o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x 1 1 1 1 1 i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x 0 x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega169 +#------------------------------------------------------------ + +part + id = "m169"; + desc = "ATMEGA169"; + has_jtag = yes; + stk500_devcode = 0x85; + avr910_devcode = 0x78; + signature = 0x1e 0x94 0x05; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega329 +#------------------------------------------------------------ + +part + id = "m329"; + desc = "ATMEGA329"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x03; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega329P +#------------------------------------------------------------ +# Identical to ATmega329 except of the signature + +part + id = "m329p"; + desc = "ATMEGA329P"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x0b; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega3290 +#------------------------------------------------------------ + +# identical to ATmega329 + +part + id = "m3290"; + desc = "ATMEGA3290"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x04; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a3 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega3290P +#------------------------------------------------------------ + +# identical to ATmega3290 except of the signature + +part + id = "m3290p"; + desc = "ATMEGA3290P"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x95 0x0c; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a3 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega649 +#------------------------------------------------------------ + +part + id = "m649"; + desc = "ATMEGA649"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x96 0x03; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega6490 +#------------------------------------------------------------ + +# identical to ATmega649 + +part + id = "m6490"; + desc = "ATMEGA6490"; + has_jtag = yes; +# stk500_devcode = 0x85; # no STK500 support, only STK500v2 +# avr910_devcode = 0x?; # try the ATmega169 one: + avr910_devcode = 0x75; + signature = 0x1e 0x96 0x04; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega32 +#------------------------------------------------------------ + +part + id = "m32"; + desc = "ATMEGA32"; + has_jtag = yes; + stk500_devcode = 0x91; + avr910_devcode = 0x72; + signature = 0x1e 0x95 0x02; + chip_erase_delay = 9000; + pagel = 0xd7; + bs2 = 0xa0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = yes; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega161 +#------------------------------------------------------------ + +part + id = "m161"; + desc = "ATMEGA161"; + stk500_devcode = 0x80; + avr910_devcode = 0x60; + signature = 0x1e 0x94 0x01; + chip_erase_delay = 28000; + pagel = 0xd7; + bs2 = 0xa0; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 0; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 30; + programfusepulsewidth = 0; + programfusepolltimeout = 2; + programlockpulsewidth = 0; + programlockpolltimeout = 2; + + memory "eeprom" + size = 512; + min_write_delay = 3400; + max_write_delay = 3400; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 5; + blocksize = 128; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 14000; + max_write_delay = 14000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 16; + blocksize = 128; + readsize = 256; + ; + + memory "fuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 x x x x x x x x", + "x x x x x x x x x o x o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 x x x x x", + "x x x x x x x x 1 i 1 i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega8 +#------------------------------------------------------------ + +part + id = "m8"; + desc = "ATMEGA8"; + stk500_devcode = 0x70; + avr910_devcode = 0x76; + signature = 0x1e 0x93 0x07; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 10000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + page_size = 4; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 20; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + +#------------------------------------------------------------ +# ATmega8515 +#------------------------------------------------------------ + +part + id = "m8515"; + desc = "ATMEGA8515"; + stk500_devcode = 0x63; + avr910_devcode = 0x3A; + signature = 0x1e 0x93 0x06; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + + + +#------------------------------------------------------------ +# ATmega8535 +#------------------------------------------------------------ + +part + id = "m8535"; + desc = "ATMEGA8535"; + stk500_devcode = 0x64; + avr910_devcode = 0x69; + signature = 0x1e 0x93 0x08; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 6; + togglevtg = 0; + poweroffdelay = 0; + resetdelayms = 0; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 128; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 2000; + max_write_delay = 2000; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 0 0 x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATtiny26 +#------------------------------------------------------------ + +part + id = "t26"; + desc = "ATTINY26"; + stk500_devcode = 0x21; + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x09; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + mode = 0x04; + delay = 10; + blocksize = 64; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x21; + delay = 6; + blocksize = 16; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x x x x i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 4; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny261 +#------------------------------------------------------------ +# Close to ATtiny26 + +part + id = "t261"; + desc = "ATTINY261"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0c; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + size = 128; + page_size = 4; + num_pages = 32; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = "1 0 1 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 x x x x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x x a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny461 +#------------------------------------------------------------ +# Close to ATtiny261 + +part + id = "t461"; + desc = "ATTINY461"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x92 0x08; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + size = 256; + page_size = 4; + num_pages = 64; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATtiny861 +#------------------------------------------------------------ +# Close to ATtiny461 + +part + id = "t861"; + desc = "ATTINY861"; + has_debugwire = yes; + flash_instr = 0xB4, 0x00, 0x10; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x00, 0xB4, 0x00, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +# stk500_devcode = 0x21; +# avr910_devcode = 0x5e; + signature = 0x1e 0x93 0x0d; + pagel = 0xb3; + bs2 = 0xb2; + chip_erase_delay = 4000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 0; + + pp_controlstack = + 0xC4, 0xE4, 0xC4, 0xE4, 0xCC, 0xEC, 0xCC, 0xEC, + 0xD4, 0xF4, 0xD4, 0xF4, 0xDC, 0xFC, 0xDC, 0xFC, + 0xC8, 0xE8, 0xD8, 0xF8, 0x4C, 0x6C, 0x5C, 0x7C, + 0xEC, 0xBC, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 2; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + size = 512; + num_pages = 128; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4000; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read = " 1 0 1 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0 x x x x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + + read_lo = " 0 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 x x x x x x x x", + "x x x x x x x x x x x x x x o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 1 1 1 i i", + "x x x x x x x x x x x x x x x x"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + min_write_delay = 4500; + max_write_delay = 4500; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + +; + + +#------------------------------------------------------------ +# ATmega48 +#------------------------------------------------------------ + +part + id = "m48"; + desc = "ATMEGA48"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x59; +# avr910_devcode = 0x; + signature = 0x1e 0x92 0x05; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 45000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 256; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x x x o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# ATmega88 +#------------------------------------------------------------ + +part + id = "m88"; + desc = "ATMEGA88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x0a; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega168 +#------------------------------------------------------------ + +part + id = "m168"; + desc = "ATMEGA168"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x94 0x06; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 512; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# ATtiny88 +#------------------------------------------------------------ + +part + id = "t88"; + desc = "attiny88"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x73; +# avr910_devcode = 0x; + signature = 0x1e 0x93 0x11; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 64; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 64; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega328P +#------------------------------------------------------------ + +part + id = "m328p"; + desc = "ATMEGA328P"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x86; + # avr910_devcode = 0x; + signature = 0x1e 0x95 0x0F; + pagel = 0xd7; + bs2 = 0xc2; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + resetdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; + page_size = 4; + size = 1024; + min_write_delay = 3600; + max_write_delay = 3600; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 x x x a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 5; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + + ; + + memory "lfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "hfuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + ; + + memory "efuse" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x x x x x x o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + ; + + memory "lock" + size = 1; + min_write_delay = 4500; + max_write_delay = 4500; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; +; + +#------------------------------------------------------------ +# ATtiny2313 +#------------------------------------------------------------ + +part + id = "t2313"; + desc = "ATtiny2313"; + has_debugwire = yes; + flash_instr = 0xB2, 0x0F, 0x1F; + eeprom_instr = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x23; +## Use the ATtiny26 devcode: + avr910_devcode = 0x5e; + signature = 0x1e 0x91 0x0a; + pagel = 0xD4; + bs2 = 0xD6; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E, + 0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E, + 0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A, + 0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + +# The information in the data sheet of April/2004 is wrong, this works: + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + +# The information in the data sheet of April/2004 is wrong, this works: + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + +# The information in the data sheet of April/2004 is wrong, this works: + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny2313 has Signature Bytes: 0x1E 0x91 0x0A. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; +# The Tiny2313 has calibration data for both 4 MHz and 8 MHz. +# The information in the data sheet of April/2004 is wrong, this works: + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2 +#------------------------------------------------------------ + +part + id = "pwm2"; + desc = "AT90PWM2"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x81; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; +# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3 +#------------------------------------------------------------ + +# Completely identical to AT90PWM2 (including the signature!) + +part + id = "pwm3"; + desc = "AT90PWM3"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x81; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; +# AT90PWM2 has Signature Bytes: 0x1E 0x93 0x81. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM2B +#------------------------------------------------------------ +# Same as AT90PWM2 but different signature. + +part + id = "pwm2b"; + desc = "AT90PWM2B"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x83; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90PWM3B +#------------------------------------------------------------ + +# Completely identical to AT90PWM2B (including the signature!) + +part + id = "pwm3b"; + desc = "AT90PWM3B"; + has_debugwire = yes; + flash_instr = 0xB6, 0x01, 0x11; + eeprom_instr = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00, + 0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF, + 0x99, 0xF9, 0xBB, 0xAF; + stk500_devcode = 0x65; +## avr910_devcode = ?; + signature = 0x1e 0x93 0x83; + pagel = 0xD8; + bs2 = 0xE2; + reset = io; + chip_erase_delay = 9000; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 64; + readsize = 256; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny25 +#------------------------------------------------------------ + +part + id = "t25"; + desc = "ATtiny25"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x08; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny25 has Signature Bytes: 0x1E 0x91 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny45 +#------------------------------------------------------------ + +part + id = "t45"; + desc = "ATtiny45"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x06; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 256; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny45 has Signature Bytes: 0x1E 0x92 0x08. (Data sheet 2586C-AVR-06/05 (doc2586.pdf) indicates otherwise!) + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny85 +#------------------------------------------------------------ + +part + id = "t85"; + desc = "ATtiny85"; + has_debugwire = yes; + flash_instr = 0xB4, 0x02, 0x12; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x02, 0xB4, 0x02, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x93 0x0b; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x00; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a8 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny85 has Signature Bytes: 0x1E 0x93 0x08. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 2; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega640 +#------------------------------------------------------------ +# Almost same as ATmega1280, except for different memory sizes + +part + id = "m640"; + desc = "ATMEGA640"; + signature = 0x1e 0x96 0x08; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega1280 +#------------------------------------------------------------ + +part + id = "m1280"; + desc = "ATMEGA1280"; + signature = 0x1e 0x97 0x03; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega1281 +#------------------------------------------------------------ +# Identical to ATmega1280 + +part + id = "m1281"; + desc = "ATMEGA1281"; + signature = 0x1e 0x97 0x04; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega2560 +#------------------------------------------------------------ + +part + id = "m2560"; + desc = "ATMEGA2560"; + signature = 0x1e 0x98 0x01; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 262144; + page_size = 256; + num_pages = 1024; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + load_ext_addr = " 0 1 0 0 1 1 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 a16", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega2561 +#------------------------------------------------------------ + +part + id = "m2561"; + desc = "ATMEGA2561"; + signature = 0x1e 0x98 0x02; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 262144; + page_size = 256; + num_pages = 1024; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + load_ext_addr = " 0 1 0 0 1 1 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 a16", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega128RFA1 +#------------------------------------------------------------ +# Identical to ATmega2561 but half the ROM + +part + id = "m128rfa1"; + desc = "ATMEGA128RFA1"; + signature = 0x1e 0xa7 0x01; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xE2; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny24 +#------------------------------------------------------------ + +part + id = "t24"; + desc = "ATtiny24"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x91 0x0b; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 128; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 2048; + page_size = 32; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x x a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny24 has Signature Bytes: 0x1E 0x91 0x0B. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny44 +#------------------------------------------------------------ + +part + id = "t44"; + desc = "ATtiny44"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x92 0x07; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 256; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", + "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 4096; + page_size = 64; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny44 has Signature Bytes: 0x1E 0x92 0x07. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATtiny84 +#------------------------------------------------------------ + +part + id = "t84"; + desc = "ATtiny84"; + has_debugwire = yes; + flash_instr = 0xB4, 0x07, 0x17; + eeprom_instr = 0xBB, 0xFF, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D, + 0xBC, 0x07, 0xB4, 0x07, 0xBA, 0x0D, 0xBB, 0xBC, + 0x99, 0xE1, 0xBB, 0xAC; +## no STK500 devcode in XML file, use the ATtiny45 one + stk500_devcode = 0x14; +## avr910_devcode = ?; +## Try the AT90S2313 devcode: + avr910_devcode = 0x20; + signature = 0x1e 0x93 0x0c; + reset = io; + chip_erase_delay = 4500; + + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + hvsp_controlstack = + 0x4C, 0x0C, 0x1C, 0x2C, 0x3C, 0x64, 0x74, 0x66, + 0x68, 0x78, 0x68, 0x68, 0x7A, 0x6A, 0x68, 0x78, + 0x78, 0x7D, 0x6D, 0x0C, 0x80, 0x40, 0x20, 0x10, + 0x11, 0x08, 0x04, 0x02, 0x03, 0x08, 0x04, 0x0F; + hventerstabdelay = 100; + hvspcmdexedelay = 0; + synchcycles = 6; + latchcycles = 1; + togglevtg = 1; + poweroffdelay = 25; + resetdelayms = 0; + resetdelayus = 70; + hvleavestabdelay = 100; + resetdelay = 25; + chiperasepolltimeout = 40; + chiperasetime = 0; + programfusepolltimeout = 25; + programlockpolltimeout = 25; + + memory "eeprom" + size = 512; + paged = no; + page_size = 4; + min_write_delay = 4000; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = "1 0 1 0 0 0 0 0 0 0 0 x x x x a8", + "a7 a6 a5 a4 a3 a2 a1 a0 o o o o o o o o"; + + write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", + "a8 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 4; + readsize = 256; + ; + memory "flash" + paged = yes; + size = 8192; + page_size = 64; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 x x x x x", + " x x x a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 32; + readsize = 256; + ; +# ATtiny84 has Signature Bytes: 0x1E 0x93 0x0C. + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + + memory "lock" + size = 1; + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x x x x x x x i i"; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x x x x i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega32u4 +#------------------------------------------------------------ + +part + id = "m32u4"; + desc = "ATmega32U4"; + signature = 0x1e 0x95 0x87; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB646 +#------------------------------------------------------------ + +part + id = "usb646"; + desc = "AT90USB646"; + signature = 0x1e 0x96 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB647 +#------------------------------------------------------------ +# identical to AT90USB646 + +part + id = "usb647"; + desc = "AT90USB647"; + signature = 0x1e 0x96 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB1286 +#------------------------------------------------------------ + +part + id = "usb1286"; + desc = "AT90USB1286"; + signature = 0x1e 0x97 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB1287 +#------------------------------------------------------------ +# identical to AT90USB1286 + +part + id = "usb1287"; + desc = "AT90USB1287"; + signature = 0x1e 0x97 0x82; + has_jtag = yes; +# stk500_devcode = 0xB2; +# avr910_devcode = 0x43; + chip_erase_delay = 9000; + pagel = 0xD7; + bs2 = 0xA0; + reset = dedicated; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "x x x x x x x x x x x x x x x x"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + rampz = 0x3b; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 4096; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " x x x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 131072; + page_size = 256; + num_pages = 512; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 x x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 256; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x x x x x i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 x x x x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 x x x x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + + +#------------------------------------------------------------ +# AT90USB162 +#------------------------------------------------------------ + +part + id = "usb162"; + desc = "AT90USB162"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x94 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 16384; + page_size = 128; + num_pages = 128; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# AT90USB82 +#------------------------------------------------------------ +# Changes against AT90USB162 (beside IDs) +# memory "flash" +# size = 8192; +# num_pages = 64; + +part + id = "usb82"; + desc = "AT90USB82"; + has_jtag = no; + has_debugwire = yes; + signature = 0x1e 0x93 0x82; + chip_erase_delay = 9000; + reset = io; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "x x x x x x x x x x x x x x x x"; + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x", + "x x x x x x x x x x x x x x x x"; + pagel = 0xD7; + bs2 = 0xC6; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 512; + num_pages = 128; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0x00; + readback_p2 = 0x00; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 20; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 8192; + page_size = 128; + num_pages = 64; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0x00; + readback_p2 = 0x00; + read_lo = " 0 0 1 0 0 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " x x x x x x x x", + " x x a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + "a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 x x x x x x", + " x x x x x x x x"; + + mode = 0x41; + delay = 6; + blocksize = 128; + readsize = 256; + ; + + memory "lfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "x x x x x x x x i i i i i i i i"; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "x x x x x x x x o o o o o o o o"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x", + "x x x x x x x x 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "calibration" + size = 1; + read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x", + "x x x x x x a1 a0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega325 +#------------------------------------------------------------ + +part + id = "m325"; + desc = "ATMEGA325"; + signature = 0x1e 0x95 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega645 +#------------------------------------------------------------ + +part + id = "m645"; + desc = "ATMEGA645"; + signature = 0x1E 0x96 0x05; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 8; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega3250 +#------------------------------------------------------------ + +part + id = "m3250"; + desc = "ATMEGA3250"; + signature = 0x1E 0x95 0x06; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 4; /* for parallel programming */ + size = 1024; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 0 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 32768; + page_size = 128; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " 0 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATmega6450 +#------------------------------------------------------------ + +part + id = "m6450"; + desc = "ATMEGA6450"; + signature = 0x1E 0x96 0x06; + has_jtag = yes; +# stk500_devcode = 0x??; # No STK500v1 support? +# avr910_devcode = 0x??; # Try the ATmega16 one + avr910_devcode = 0x74; + pagel = 0xd7; + bs2 = 0xa0; + chip_erase_delay = 9000; + pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0"; + + timeout = 200; + stabdelay = 100; + cmdexedelay = 25; + synchloops = 32; + bytedelay = 0; + pollindex = 3; + pollvalue = 0x53; + predelay = 1; + postdelay = 1; + pollmethod = 1; + + pp_controlstack = + 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F, + 0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F, + 0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B, + 0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00; + hventerstabdelay = 100; + progmodedelay = 0; + latchcycles = 5; + togglevtg = 1; + poweroffdelay = 15; + resetdelayms = 1; + resetdelayus = 0; + hvleavestabdelay = 15; + chiperasepulsewidth = 0; + chiperasepolltimeout = 10; + programfusepulsewidth = 0; + programfusepolltimeout = 5; + programlockpulsewidth = 0; + programlockpolltimeout = 5; + + idr = 0x31; + spmcr = 0x57; + allowfullpagebitstream = no; + + memory "eeprom" + paged = no; /* leave this "no" */ + page_size = 8; /* for parallel programming */ + size = 2048; + min_write_delay = 9000; + max_write_delay = 9000; + readback_p1 = 0xff; + readback_p2 = 0xff; + read = " 1 0 1 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + write = " 1 1 0 0 0 0 0 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 0 0 0 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; + delay = 10; + blocksize = 4; + readsize = 256; + ; + + memory "flash" + paged = yes; + size = 65536; + page_size = 256; + num_pages = 256; + min_write_delay = 4500; + max_write_delay = 4500; + readback_p1 = 0xff; + readback_p2 = 0xff; + read_lo = " 0 0 1 0 0 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + read_hi = " 0 0 1 0 1 0 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " o o o o o o o o"; + + loadpage_lo = " 0 1 0 0 0 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + loadpage_hi = " 0 1 0 0 1 0 0 0", + " 0 0 0 0 0 0 0 0", + " a7 a6 a5 a4 a3 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 0 1 0 0 1 1 0 0", + " a15 a14 a13 a12 a11 a10 a9 a8", + " a7 a6 a5 a4 a3 a2 a1 a0", + " 0 0 0 0 0 0 0 0"; + + mode = 0x41; + delay = 10; + blocksize = 128; + readsize = 256; + ; + + memory "lock" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0", + "x x x x x x x x x x o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 1 1 i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "lfuse" + size = 1; + read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "hfuse" + size = 1; + read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0", + "0 0 0 0 0 0 0 0 i i i i i i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "efuse" + size = 1; + + read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + + write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0", + "0 0 0 0 0 0 0 0 1 1 1 1 1 i i i"; + min_write_delay = 9000; + max_write_delay = 9000; + ; + + memory "signature" + size = 3; + read = "0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 a1 a0 o o o o o o o o"; + ; + + memory "calibration" + size = 1; + + read = "0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0", + "0 0 0 0 0 0 0 0 o o o o o o o o"; + ; + ; + +#------------------------------------------------------------ +# ATXMEGA64A1 +#------------------------------------------------------------ + +part + id = "x64a1"; + desc = "ATXMEGA64A1"; + signature = 0x1e 0x96 0x4e; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A1 +#------------------------------------------------------------ + +part + id = "x128a1"; + desc = "ATXMEGA128A1"; + signature = 0x1e 0x97 0x4c; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A1REVD +#------------------------------------------------------------ + +part + id = "x128a1d"; + desc = "ATXMEGA128A1REVD"; + signature = 0x1e 0x97 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA192A1 +#------------------------------------------------------------ + +part + id = "x192a1"; + desc = "ATXMEGA192A1"; + signature = 0x1e 0x97 0x4e; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00030000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0082e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00830000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00032000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A1 +#------------------------------------------------------------ + +part + id = "x256a1"; + desc = "ATXMEGA256A1"; + signature = 0x1e 0x98 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA64A3 +#------------------------------------------------------------ + +part + id = "x64a3"; + desc = "ATXMEGA64A3"; + signature = 0x1e 0x96 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A3 +#------------------------------------------------------------ + +part + id = "x128a3"; + desc = "ATXMEGA128A3"; + signature = 0x1e 0x97 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA192A3 +#------------------------------------------------------------ + +part + id = "x192a3"; + desc = "ATXMEGA192A3"; + signature = 0x1e 0x97 0x44; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00030000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0082e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00830000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00032000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A3 +#------------------------------------------------------------ + +part + id = "x256a3"; + desc = "ATXMEGA256A3"; + signature = 0x1e 0x98 0x42; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA256A3B +#------------------------------------------------------------ + +part + id = "x256a3b"; + desc = "ATXMEGA256A3B"; + signature = 0x1e 0x98 0x43; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x1000; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00040000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0083e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00840000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00042000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA16A4 +#------------------------------------------------------------ + +part + id = "x16a4"; + desc = "ATXMEGA16A4"; + signature = 0x1e 0x94 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00004000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x00803000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00804000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00005000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA32A4 +#------------------------------------------------------------ + +part + id = "x32a4"; + desc = "ATXMEGA32A4"; + signature = 0x1e 0x95 0x41; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0400; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00008000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x00807000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00808000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00009000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA64A4 +#------------------------------------------------------------ + +part + id = "x64a4"; + desc = "ATXMEGA64A4"; + signature = 0x1e 0x96 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00010000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00001000; + offset = 0x0080f000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00001000; + offset = 0x00810000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00011000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + +#------------------------------------------------------------ +# ATXMEGA128A4 +#------------------------------------------------------------ + +part + id = "x128a4"; + desc = "ATXMEGA128A4"; + signature = 0x1e 0x97 0x46; + has_jtag = yes; + has_pdi = yes; + nvm_base = 0x01c0; + + memory "eeprom" + size = 0x0800; + offset = 0x08c0000; + page_size = 0x20; + readsize = 0x100; + ; + + memory "application" + size = 0x00020000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "apptable" + size = 0x00002000; + offset = 0x0081e000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "boot" + size = 0x00002000; + offset = 0x00820000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "flash" + size = 0x00022000; + offset = 0x0800000; + page_size = 0x100; + readsize = 0x100; + ; + + memory "prodsig" + size = 0x200; + offset = 0x8e0200; + page_size = 0x100; + readsize = 0x100; + ; + + memory "usersig" + size = 0x200; + offset = 0x8e0400; + page_size = 0x100; + readsize = 0x100; + ; + + memory "signature" + size = 3; + offset = 0x1000090; + ; + + memory "fuse0" + size = 1; + offset = 0x8f0020; + ; + + memory "fuse1" + size = 1; + offset = 0x8f0021; + ; + + memory "fuse2" + size = 1; + offset = 0x8f0022; + ; + + memory "fuse4" + size = 1; + offset = 0x8f0024; + ; + + memory "fuse5" + size = 1; + offset = 0x8f0025; + ; + + memory "lock" + size = 1; + offset = 0x8f0027; + ; +; + + +#------------------------------------------------------------ +# AVR32UC3A0512 +#------------------------------------------------------------ + +part + id = "ucr2"; + desc = "32UC3A0512"; + signature = 0xED 0xC0 0x3F; + has_jtag = yes; + is_avr32 = yes; + + memory "flash" + paged = yes; + page_size = 512; # bytes + readsize = 512; # bytes + num_pages = 1024; # could be set dynamicly + size = 0x00080000; # could be set dynamicly + offset = 0x80000000; + ; +; + +#------------------------------------------------------------ +# ATtiny4 +#------------------------------------------------------------ + +part + id = "t4"; + desc = "ATtiny4"; + signature = 0x1e 0x8f 0x0a; + has_tpi = yes; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny5 +#------------------------------------------------------------ + +part + id = "t5"; + desc = "ATtiny5"; + signature = 0x1e 0x8f 0x09; + has_tpi = yes; + + memory "flash" + size = 512; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny9 +#------------------------------------------------------------ + +part + id = "t8"; + desc = "ATtiny9"; + signature = 0x1e 0x90 0x08; + has_tpi = yes; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + +#------------------------------------------------------------ +# ATtiny10 +#------------------------------------------------------------ + +part + id = "t10"; + desc = "ATtiny10"; + signature = 0x1e 0x90 0x03; + has_tpi = yes; + + memory "flash" + size = 1024; + offset = 0x4000; + page_size = 16; + blocksize = 128; + ; + + memory "signature" + size = 3; + offset = 0x3fc0; + ; + + memory "fuse" + size = 1; + offset = 0x3f40; + blocksize = 4; + ; + + memory "calibration" + size = 1; + offset = 0x3f80; + ; + + memory "lockbits" + size = 1; + offset = 0x3f00; + ; +; + + diff --git a/avrdude/avrdude.exe b/avrdude/avrdude.exe new file mode 100644 index 0000000000000000000000000000000000000000..12c3225ed2637beeae48ddabf10c5bb5863552f2 Binary files /dev/null and b/avrdude/avrdude.exe differ diff --git a/avrdude/libusb0.dll b/avrdude/libusb0.dll new file mode 100644 index 0000000000000000000000000000000000000000..9387bedad1d4ec91bfb903486d1ed37abccab63e Binary files /dev/null and b/avrdude/libusb0.dll differ diff --git a/files/images/firmware/FW icons 2013+logos.ai b/files/images/firmware/FW icons 2013+logos.ai new file mode 100644 index 0000000000000000000000000000000000000000..5214ac6900d9dc8dcdd2c29cbc3f210232fcdb6e --- /dev/null +++ b/files/images/firmware/FW icons 2013+logos.ai @@ -0,0 +1,2008 @@ +%PDF-1.5 %âãÏÓ +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + FW icons 2013+logos + + + + + Adobe Illustrator CS6 (Windows) + 2013-07-07T04:01:27+03:00 + 2013-07-07T04:01:27+03:00 + 2013-07-07T04:01:27+03:00 + + + + 256 + 68 + JPEG + /9j/4AAQSkZJRgABAgEAYABgAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAYAAAAAEA AQBgAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgARAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9UO6Ihd2CooqzMaAAdyT gJAFlUku/Ofl6JWWO8SSY7RqgZwWI23UEUrmDk7SwjlKywOQIfSfO2jy2cC312sV7wUzBlZV5EV2 NKZVp+08RiOOVSrdEcg6p99dtfqv1oSq1uRyEqfECOm3Gtc2Pix4eK/SztKX856CrMrXAjZdiJVd DWlR8PEtT3pmGe0sI6177DHxAvtvN2i3ESukrMTQOER2CE/zELT6cMO0MUhYP2FRkCZXN7a20Qlm fjGehALE18AoJObCEDLkuTJGAspfesLiSGWF0liuf3cRJUbgPVdxUb7mm+1MxNRCQlR67ff+NkCQ kLHJFx6lZJOlk84a5ACmoNCwHTlTjX2rmZHFLhtHjw4uG912oSyxxKUJCkkOw6j4TTejUq1BWm2Y +aRA2bCgDrBGnu/qH1w4CoApm4EgmiDYsFbwp3wafMJc+fd18mrJMiNhFaTPPKknNjJEOPpyNuak fEvIBeQB70zKmNhYqXUIwyJvewhbmS9S4LRpI8ockqC/2Q23EU9MoU+mvvmtmZA7Xd+f9lU2G27j XYLqK6t9PMsl3DRWVEYMtRU/aFAQPHvmRg1WOU+Eb15fewyyJieHmv0kzNOSPUERQ+orGQqH5/DQ ygNypXlTbMo8XD664r6dzDF9W11XW+fx+1Ncrcl2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxVxAIodweoxVB6jcWFlatNcJSM/CAiF2JPYBQcozThCNy+5BICH0KTT5bFLeBN7RVhkDoVNVFKi o3Bp1GV6SUDARH8OyI1Svq1rczWLQ2p4vyUlQSlVB+IBh0yzUQlKFRWQ2S638rWNzCrapbiaVS3p guxKoeilgd99+u2Y0NBCQ/eCyxEAealeeXZ4pI49MQRWygCNFdkEbVJZm3+Ku36u+QyaMggY9o+/ l+P2KYdyZ6npP1xIDHIIZbfkI2Kll4uvFgVVkPTpRs20CBExIuJ+DDNhMqINEJVcaPptt9Thf1JH t5muHZX48pH5yEBWY9dzQdswdbwZJxJvauvcNvuRjwiAA87+e6Kh8uxfWVnjnraGUXSxcWL8+XqD 4y9OPL/J+nNhHLGrA9XDw3fT3NY0vq5+ni4q8+fP9iYajePbJGUALSMVqRUbKWoN13bjQb5ADYmr ocg35Z8NeaUrbyyudbZ1W/hJgQVHoemWAIrSu1d2r19sws+n4ZDL/HQ2PIX0P62OORlum2n3Us6N 6gFVC7igoSN1NCwqPY5bhyGXNuBUb/VZYJGiggE0gKooLceUjioVdj0G5JoMvkYxAs/UaDVPKbIi LpBIkemJFfwgyyXg53tajnVefqU3pw8B2zAlj8A3zJ+rz8/h9yYnYEdU4trj1lYleLKaEA8gagMC Dt1BGZcJ8TYCrZNLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUZr SGZuT8gSOLcWK1HgafPISxg80UrAAAACgGwAyaWnRHUq6hlPVSKj8cINIIB5rA9upEAZAegiqAen Tj8siZC6vdRQ2XoiIoVFCqOgAoPwxAA5JQt1p9rLI0sjNGXASUo7IHUVoGoRXrlgymIap4YyNr5o rNoo0LCNU3hKtxK0FPhI9jTKpQ42ewFKkEEcKcUqankzMSxJPck4xgI8khUySXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FWnNEY1C0BNT0HzxCClCyOJ3aN/VkSp9MHdyBUqtR3pkJ4zEWN/J pjOytZrqeOOe4U20zULWzEMUpsRyA6GldshDLIxFgxPcP0plG9ymEjzpaJ6Z9WSlOYBPbrTfLSSe TPcBSm1NbKya5vgyxoQCyqSTUgD4Rv1PhlOTN4cbnyTxbWV1xc3RCNbofTYVDUrXf2rTbJ3KXLki Uig9ZsLy+jtpFhWUR8vUtZCApYlSrfECPhCkfTmTjkREi+GRrfn8Pi4+oxGdGuIDofv+CpDfNptv aWl8GkuJCIo5EAYO1CfanSm+Ymo1UYz3B9R2bsQMYgHcoWbS9Tn1X6yyqg5o8VwGUvEilKxkU3qE bv8AtZmY8npFmtjce899uNPBIzvzFHuG233/ADTW+uLqIL6EfqEgkjizdCPCnieuVAOVkkRyQKyW pu1LT0kb989sQeYIKCgQn+am/GuYZMOPn5116JBR1jcXUwf14/TIpx+ErWvXrXMwoxyJ5oe8ured hbMzQjmUEpoBWhXb4gw3qAaUrlebFxCrAPPzpByi6+CF9S2uj6AlWOSyDC4PUVYhgAAVrypXKMOo j9N/Tzo/jmicOJM7O5ikRYlJ5Ig3NN6bHoT9I7ZdHMJnZsjsKROWMnYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FVk8KzQtExIVxQ064QaRKNikNbWLxyl5Cp+LkAoHWlK9NshEVyADAQN7lde2 jzqeJWpps4qNjX3xlASFFMgeirbwmJCCasxLMQKCp8BkqHRMRQUdRjnkQJGzKpB5FRU12oe2CXI9 /wA2MwSq2vrel+9ryrtXrTtX3yRNsoXW6tgZJRq168VwKJHS1AmrINzVX6big+GlfEjJeEJGNgn1 fLZxsuUxJ5bC902RuSK1CtQDxPUV7HAXIBtDXyXTKv1diGFa0p4jxI98pyiR+lSltLQ6ojmN2uVU wyXYf4wWZdgK04hmp0+imP5WPECT6+H7GjxPVy8rTKxS7Xn9YYk7ca09/AnBiEh9TeFC8tordvrU aGSQMWWMseHKhNQCaV/jlmbNKMdg1+ELtCvxtVE0KI8t4GNyWNA9GArt4ctvbKcGCP1fzvqrrfX4 fcjJPh5JnaW0UaiReRd1FSxLEA70qctjiETs2R5WiMmydirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdiqlJdQorUYOy9UUgnrToPc4JnhFseILIb6CSESswjVvs8yBUbHvTxyOKXGLAUyA5ojJ slD65D9a+rb+p+Gw5fxw0w4xdLre6in5ema8ev3kfwyuGQS5M7Vcmq14onKl0Viu6kgGh9q4QSEG IPNdgS7FVE2dsZvWKVkqGrU05AcQ3GtK02rkuM1TDw43fVWyLN2KuxV2KuxVDajfwWFo9zOSsaDd wjuF26t6asQviegxClLfLfm7R9ejYWs0f1qKomt1dXIpsWVl2dPA/eBk5wrkbDVjycXMUfx807yD a7FXYq7FUjj856A2ptp73ccU/RUlJievdXjkCOp8NqHKzkqVEbd6LTzLEuxV2KuxVDajfwWFo9zO SsaDdwjuF26t6asQviegxVLfLfm/R9ejYWsyfW4qia2V1cimxZGXZ08G+8DIxlbIik7yTF2KuxVZ NKsUTSN0UVyM5cItUr9SGMSXqhz19SNlYqymjEA8RRq+OY8s44TKvfz3prEaNqds0V5YQXL840CB Y4wtKcqBi54sK5HT5wcYlW21IlHiTJrgyWRlX92SNixoOtOppmQCZxsc2wna0snultIxdzcZ5ozX lGeRII4UKg7dffMfJnnij6muo3a//SBwNs6xooo6lwGLA9WB6fLfL9PKAHQff+xjMSvZN3Eh+wwH jUE/xGWG+jeksWu3sl7La/VmQxtxDyIVDH/JBbf55gx1UjMxrl5ftYcRtMZLm5hj5yR1psVUAVJ9 +Z/VmSZyAsj8fNlaLy5LsVdirsVdirsVdirsVeY/mn5Y8v6bYv5ksXfS9bjdfQa0PD1pGYDdRSh3 J5CnvXCGJQOi/mn5gtbiHT9WWK4EFtcveXRjKubi3heb0QVKpVQqq/w/ar8ypXzfmp50s9Mhur7S YY3uZEa3JinjDwLE0tyVjd+R9McaPXj88VZf5E82an5kbVbme1W1sLa4FvZJxYTfCOT+tViOVGXY AU98CWVYqknmfyh5f8xWhj1S3DOgPpXS/DNH/qv4ex29sbpXkOj+ffMPlu1vo7S7Gp6ZHK8GkLdq WLLE1WlHFgwjWPanKlWFO+KGXH8zPMMmpyNZ6fFcaLZxwyX9wI5gVDW/rTt6vIxL6fQK257YVU/L P5o+YdZ1XRtLawhiuLqSX9ISlJBGI0X1QIgXNG9MgksT1G2KvT8CXYq8w/NPyx5f02xbzJYu+l63 G6+g1oeHrSMwG6ilDuTyFPeuKoLRPzT1+1uYdP1YRTi3trl726MbK5uIIXm9EFSqVUKqv8P2q/Ml C+b81POlppcF1e6TAkly6Pbn0p4w9usTS3LKjvy/djjR68fnirLvInmzUvMrarcz2yWtjbXIt7JO LCb4Ryf1qsRyoy7ACnvgSysgEUO4PUYqlzLcRzNJOvK3jJMK/CFDFgF6bnY9xtkMgAF91V+OTVHi vfkpIt00EUlqnElOMo+E8ioAWoagr75DTgGN+6+fL9az4uiZywpJEYjsp22y+JpslGxSCitBHMtu qE24YuxK7V4ADcUGY8t5CNekMYxpbaW7T0NyhVoVUIePGo3HU1rt4ZOWCO3l7mMCTzTLLG1aYoy3 IopbryoK4OEKuwq7FXYq7FXYq7FXYq7FVC8uXt4C8cLTyn4YoU6sx6Anoo8WOwyURZYzlQ5WwjWt D1bUtSku5V+uzaNA91FbptHJqLITbwoHp8MIoxJ6lh75aDEyA5RtolGcYmXOdfgJLpehfmFpl5o/ 6XSTVtOLvPfW1stvI0RMIQIzSiCvORizgVoBSrdczcksExLhqJ6X+C63FDVQlHjJlHrVd3nXVD3t v+cF6uosLH0ZrqaGTTkZoGS0t1WYyQrufthYkfxyY/LCt7oG/Pl+1rkdaeKhRJFcthvt9yL8q6d+ Zh8x2P6Wa5tNPAE95wEPoySszzOr8ZUYU5LFsjVp4b5DNLAIHhq/wO74s9NDVHJHjMhHryrv7/h1 eq5q3eMc80HU73TWtbOsUt+wtbSoINZAec7/AMqxxhmA61AykAzNnaP3o5pQnl7VNNWay021dYbO D0NO4iAxSRlT6nrF/jZndi1OlcwM/wCYM5cN7fTyr4+bWeK24dG81SL9Ut62lnIzuWnEQYrxVVEi xqymtCeNOnfKRj1UjQJA7zV9O77kVJdd6T5hhklns0m9Q3TrHwEIItwoqw+zTm3TfoMOWGp3MTL6 vL6f2lJEkx0SDzQNaZr6SRbBFcKHKsH40RagbqTQvX6Mt00NR4vrJ4Pv6ftTESvdP725e3gLxwvP KfhihTqzHoC3RR4sdhm0JptAYRrGiapf6nJfXKm9k0SB7tLaMExyagULW8EanqsS0ap6lhXvkdwC erLYkDowu10f81009Yb2C7mhaYieKFbU3CH6tVGiklVVCTTvSXaqhO9d8MDLW9uSfDvoj7vSfzaC zxTvJOtpYQzRyRrGzvdfV/RNtFtTiZDzlp1C9d8kRl+xAONBQWP5vCOxhtpb+BXb1b66aKON1eaV I2LRB5RL6axtJ1FQ3bI1l25srx78nuGZ7hOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KrU 9PfhTqeVKde9ad8VXYq7FXYq7FVp9L1Vrx9WjcK05U25U706VxVdirsVdirsVdiq1PT34U6nlSnX vWnfFV2KuxV2Kv8A/9k= + + + + + + proof:pdf + uuid:65E6390686CF11DBA6E2D887CEACB407 + xmp.did:B7D30232A0E6E21186CBB3ABC4A69F81 + uuid:6e717a34-d9cf-4b98-b305-8191aa11dbfe + + xmp.iid:B5D30232A0E6E21186CBB3ABC4A69F81 + xmp.did:B5D30232A0E6E21186CBB3ABC4A69F81 + uuid:65E6390686CF11DBA6E2D887CEACB407 + proof:pdf + + + + + saved + xmp.iid:B5D30232A0E6E21186CBB3ABC4A69F81 + 2013-07-07T03:57:28+03:00 + Adobe Illustrator CS6 (Windows) + / + + + saved + xmp.iid:B7D30232A0E6E21186CBB3ABC4A69F81 + 2013-07-07T04:01:25+03:00 + Adobe Illustrator CS6 (Windows) + / + + + + + + Web + Document + + + 1 + True + False + + 600.000000 + 300.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + RGB Red + RGB + PROCESS + 255 + 0 + 0 + + + RGB Yellow + RGB + PROCESS + 255 + 255 + 0 + + + RGB Green + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blue + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 193 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 237 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 241 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 247 + 147 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 251 + 176 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 252 + 238 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 217 + 224 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 140 + 198 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 181 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 146 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 181 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 169 + 157 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 171 + 226 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 188 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 146 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 145 + + + R=147 G=39 B=143 + RGB + PROCESS + 147 + 39 + 143 + + + R=158 G=0 B=93 + RGB + PROCESS + 158 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 212 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 237 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 199 + 178 + 153 + + + R=153 G=134 B=117 + RGB + PROCESS + 153 + 134 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 198 + 156 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 166 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 140 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Grays + 1 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 153 + 153 + 153 + + + R=179 G=179 B=179 + RGB + PROCESS + 179 + 179 + 179 + + + R=204 G=204 B=204 + RGB + PROCESS + 204 + 204 + 204 + + + R=230 G=230 B=230 + RGB + PROCESS + 230 + 230 + 230 + + + R=242 G=242 B=242 + RGB + PROCESS + 242 + 242 + 242 + + + + + + Web Color Group + 1 + + + + R=63 G=169 B=245 + RGB + PROCESS + 63 + 169 + 245 + + + R=122 G=201 B=67 + RGB + PROCESS + 122 + 201 + 67 + + + R=255 G=147 B=30 + RGB + PROCESS + 255 + 147 + 30 + + + R=255 G=29 B=37 + RGB + PROCESS + 255 + 29 + 37 + + + R=255 G=123 B=172 + RGB + PROCESS + 255 + 123 + 172 + + + R=189 G=204 B=212 + RGB + PROCESS + 189 + 204 + 212 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 7 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 20 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 21 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 22 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 23 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 600.0 300.0]/Type/Page>> endobj 24 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 600.0 300.0]/Type/Page>> endobj 25 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>>>/TrimBox[0.0 0.0 600.0 300.0]/Type/Page>> endobj 43 0 obj <>stream +H‰ì—ËŽEE÷õù•“‘ïÜz@¬,d±€ýð¢düÿçFöLF°…²<Ý‘•7õôýsxzÿœÂ»ožÃñù˜=¶²B^#ÖÙ§ÃF‹«YÈ5Å’-ÜŽ\-æÒƒõלX]ÜžaqµNÚˆ£æ{\©éÂ|ã'âõÂÉÇãÇðöž¾û!…_¿`&Åd¹¯V™kL©¤TíÏ߯—úÀÑ”G©8’ã¬m¤báåÓñî§ðôÃǾ| ßþ>Ž§gŒ¼| )Ö<ô·4ý­%„//¿É“Ÿƒ…Ä? M +Ë$€G«Kjõ8R‰½UüÊqL~¥¸2'8' 8É3öÚñ'áv ¦ ÖKœËï”ÎYbëÓùW?c‡hCçÿ©/¿ÿìHá.¸‘PLÑ@Ã]¸œKŠ³[ ßG½xmȸ¤¨ c81…CCÙËÑ¢å…DÄ¡ïÌƲf1'˜a·f´Y‘h̸8+qu +¶™C‹Ùx¸6QSÛ +­wô¬Õ$ k\ŸÖ÷Å9K0s† •>‚’"•P+XÕ@þnÇN 4ÛÔ÷9»Âx/ljC€|—oÇ)ÕЅí™-¶:B»}K]*¶x“?«¼ÉØÆeœ\À1£¨…dMP ªT°€ô¦Âˆ†Ÿä<”/mèct¿;cCE ê +sƒV%f(=T‰ W%Ã7W‰ iŠÜ-bAPZFMÝW ÛAÒ¤uÊä“ŠïúE!<•ñIÕ/®'#Œ»üª÷¹.'wª?¸;aQ÷Þb~÷TÓ¡JhUŒÍyÍ;å) Xð ¦ oFÎ"‰· l¢ÓšýM‚zÅa~=°î‰“h€ ú­-edeEéÁ%LÁªžâA-C™O# ZK"*I®ƒ§ê & +4ç]r¤Å¦ªi”¢«Ãýo±£Žðwz†Å"rXûæÏK,¨tV‘L -'YÚªÛ~nY>`Ö §ƒ’øBw :QÍ·§ÔÚò§eL±¬ˆIâܸ5ÚÈ;½:1ZÓx-tœÎ‚¶ª[ +Qb+Nn4›Ê"æìÕnÛ:ˆ)bj<…òÆ\WÒ)d¡¬D|ò£ø+©YÊýKn‰ès% S>œ2¹•ïÌìôC’¥´Bˆ/‹ ;»“•JœÊœy¥b¾ª¿PQ£ÐU¤‰Ë»É rVVìJDöΗvvUß[V­â³+Pªö2°¡šã¸Ñ1Sp¿‚¹üÁYFJ­>5¥@¤©Ãë<«†[`榴glhÌE8Nþº.6ÛœÚÖR£%Ë «#©…˜\VXütp©ûä֧܌Üâ æÔIPºÜ|‹ieï §–w+0—Ò” x¥yy(¸¤d5êˆÅ°F¤ø¼g*úƶä„Ý®¦:ÆPš—æ%h'åUzÙ#íUÄ?±S?]jtD¢²Sù9ç}òȘ"Uï÷&,s¯›UކŨ¾–3KXOØ.½û$)ÃÆnÆÎWFȬêŠYWÔJß‹Â…Ì/_µ¾"ü'ÈY¢RÔ—ÞzvPj~)±TÛY“—ëí¨jþH[(ø-áDdlÍW8Ö.â×m—T“hÍ¿ØKRs­¢íèëôÕex§ºèK÷ÀûÐ0…)>0Ê‹räK½d]¦W×y·{;àS¢_h¶‚ó-4µüC|´_è¥Mæ__‰Öÿ+Ñl%êÿÅ•èo^P.›oCÛ†Q–cN»¬J@7}j×´Üjõ²¼'{¸ÁJ{nûµŽÙT_å›v‡ÔÌ»h7eC99̯JoΧ¹œL'Ìã7gSÑ–ËÉ×%Zè ‰7rÚÕíæ#ž½K¤°Iìu—#¨ø²@ÅÀ4neN3©H@]µSœFë£ú:ÀjÑ]ëLfæóÊÊ Ë]Pó'†ú*{ÅÔa׊§o\Ÿ´‚»¨WÁ]#[&heÉ>HªÓÕô±–o¬@"/ôZÖ^Ïfõµ¢ø{mt¾¢¯.èÙ}5”çÞ, ½–æ^VÇ^mÕÀ×ô -Rûî›ôâD-åñüvìé=–s‡_õR[.'Éàz)íUUzצ·Þ^Oñ]éž‚ŠMßÖ~¶²¼ôYVvGÕA¿i9ÉÙo]¤S%™ÓÞÒ=Ù”ÎÁ Z{RšjûUÖðÒ#ø, Åwæ‡Æ“¤ÉëÇÉŽðÛ÷Ï?–áK +endstream endobj 44 0 obj <> endobj 46 0 obj <> endobj 29 0 obj [/ICCBased 49 0 R] endobj 48 0 obj <> endobj 50 0 obj <> endobj 49 0 obj <>stream +H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  + 2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ +V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= +€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(Š‡R¡,¨*T2B-Ð +¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…åÆ’°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 +N'çÎ)Î].ÂuæJ¸rî +î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö +n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîÆ•Æ©ºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_p߶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ +¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû +endstream endobj 5 0 obj <> endobj 51 0 obj [/View/Design] endobj 52 0 obj <>>> endobj 45 0 obj <> endobj 30 0 obj <> endobj 53 0 obj <> endobj 54 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +170.0126953 -24.0030041 -24.0030041 -170.0126953 67.5302734 162.8457031 cm +BX /Sh0 sh EX Q + +endstream endobj 55 0 obj <> endobj 56 0 obj <> endobj 57 0 obj <> endobj 58 0 obj <> endobj 28 0 obj <> endobj 59 0 obj <> endobj 60 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 16.0 +%%AI8_CreatorVersion: 16.0.3 +%%For: (Max Levine) () +%%Title: (FW icons 2013.ai) +%%CreationDate: 7/7/2013 4:01 AM +%%Canvassize: 16383 +%%BoundingBox: -83 -938 3544 -20 +%%HiResBoundingBox: -82.8662 -937.7588 3543.1553 -20.6021 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 12.0 +%AI12_BuildNumber: 691 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registration]) +%AI3_Cropmarks: 2996 -940 3596 -640 +%AI3_TemplateBox: 790.5 -630.5 790.5 -630.5 +%AI3_TileBox: 2875.0098 -1087.5996 3716.8701 -492.5801 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI9_OpenToView: -1733 1529 0.25 1821 1035 18 0 0 50 116 0 0 0 1 1 0 1 1 0 1 +%AI5_OpenViewLayers: 7 +%%PageOrigin:390 -930 +%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 61 0 obj <>stream +%%BoundingBox: -83 -938 3544 -20 +%%HiResBoundingBox: -82.8662 -937.7588 3543.1553 -20.6021 +%AI7_Thumbnail: 128 32 8 +%%BeginData: 4352 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FD1DFFCFCFAEFD07FFCFFD09FFAECFFD04FFAFAFAFFD4DFFCF83FD +%14FFCFA8AEA8FD05FFAECFA7FFFFAFA8AFFFFFA8CFA7AEFFFFFFAFA8AFA9 +%FD4AFFCFFFA7A6A8FD06FFCFA8FFAEAECFCFAEFFFFFFAFFFFFCFAEFFAFFD +%04FFCFAEAECFFF84CFA9FFFFFFA8AEA7FFA8FF84AEA8FD49FFCF82827B82 +%81827BA6A7FFFFAE82825781578283ADAEFF848584FFA7CFA98584AFFFFF +%A8CFA8ADA7AF85FD04FFCFA8FFA781A8FFA9AFFD4DFFCFAEFD06FFA7AEA7 +%ADA7ADA8ADA7FFFF8BAE85A8ACA7AF84AF85FD05FFA6A6FD09FFCF82FD52 +%FFAEFD05FFA8A7A7CFFFFFFFAD82ADCFFFA98BA9FFA8FFFF8584FFFFFFA9 +%AF84AEA8ADA7CFFD04FFA9AEA8FFA7CFAEFD4EFFA7ADA7FD05FFA8CFFD05 +%FFCFAEFD05FFCFAEA7FD06FFAFA8AEAFFFA7CFAEFFFFFFA9AE83FFFFCFA7 +%CFCFFD4CFFA8AEA7AEFD13FFCFA8AEA8FD05FFA9AF84FFFFCFA7FFFFFFA9 +%AFA8AEA9FFA7AEA7CFFD65FFAEFD11FFAFAFA9FFFFFFAECFFDFCFFFD4FFF +%AEFFA8FFFFFFA8FD0FFF8485A9FD04FFAF84FD05FFAEAEA7FD07FFA8CFA8 +%FF84AFAFFD4CFFA8FFFFFFA9FFAEFFFFFFCFFD07FFCFFFAF8BA8AFFD04FF +%84AE85FD05FFA7CFFD08FFA7CFFFFFA8FD4CFFAFAFA9AE82FFA8FFFFFFA8 +%AEA8CFCFFFFFCFA8AEA8FF8485A8CFA8FFA88584FFFFFFA8AEAFFFA8FFA8 +%AEFFFFFFAFA9FFA8FFA8FFAEFD4CFFA9FFAECFFFFFA8FFFFFFAFFFFFFF82 +%CFFFFFAFFD06FFA6A7FD07FFAFFFAEAEAEFFAFFFFFFFAEAFAFCF82FFAECF +%AEFD49FFAFA8CFA8FFFFFFA8AEA8FD05FFAFAEA8FD09FFA7CFFD06FFCFFF +%A8A782FFCAFFFFFFA9AF84FFA7A6CFCFA7CFA8FD48FFAFFFAFFD05FFA8FD +%07FFA8FD0AFFAFAFFD06FFCFA7FFFFFFCFCFAEFFFFFFAFFFCFCFFFFFAFFD +%4CFFA8FD07FFAFFD05FFA8FFA8FD08FFAFA8AEA9FD05FFAECFA8AF84FFA8 +%CFFD04FFCFADA8FFA8A8A9FD64FFA9AFA9FD09FF84FFAFFD07FFAECFFFFF +%AFFD66FFA9FD0AFFAF84FDAEFFCFFD2DFFCFA7FD08FFAFA8FFAECFFD2CFF +%A8A85AA9FD12FFA8A7A7FD13FFA8A87DA8FD13FFA8FFA8CFFFFFA8FD05FF +%A8AEFFCFAEFD2DFFA87D5284FD12FF7D587CFD13FFA87D52A1FD11FFA9AE +%A8FFA8FFA8AFAFFFFFCFA7FFA8FFA8FFA8AFFD04FFA8FFFFFFA8FD24FFA8 +%52527DFFFFFFA8FD0DFFA853277DA8FD05FFA8FD0CFFA852527DFFFFFFA8 +%FD0EFFAECFCFFD05FFAECFCFFFAEFFAFAFA9FFFFFFCFCFA7CFA8FFCFFFCF +%FD23FF527D7D7DA87D7DA87DA852FD0AFFA8527D52FFFD047DA87DA8FD0B +%FF527D7D7DA87D7DA87DA852FD05FFCFA7CFCFA782FFCFCFA7FFFFFFAEFF +%A7A6A7FFAFFD05FFA782A7CFAEFFAEAEFD22FFA8527D53527D52A8525227 +%7DFD0AFF587D5352FD047D525352FD0BFFA8527D53527D52A85252287DFD +%05FFCFCFFFFFAECFA8FFCFFFFFFFAFAEA8FFA7FFAECFAEFD05FFAECFFD26 +%FFAF7D7DA8A8A87DFFFFFD04A8FD09FFA87DA8A8A8A7A8FFA8A87DA8FD0A +%FFCA7D7DA8A8A87DFFFFFD04A8FD06FFA9AEA8FFAEFFA8FD05FFA8FFA8FF +%A8FFA8FD2DFF848452A8363636FFA83684365A5A0DA9FD06FFA77D7DAD82 +%AD82A782A6A7A6FD0582FD05FFA8A752A8757C7C7C767C7C7C51A17576FD +%05FFA8FFCFCFFFAFAEFD05FFAECFFFAFA8FD2DFFA9AFA8CF60365A368436 +%0D600D360D5AFD06FFA7FF7ECF81CF82A782A6A7ADA7AD82AD7BADFD04FF +%A8CAA8FFA751767676A175A07C767C7576FD06FFAECFA7FFAFFD06FFCFA8 +%FFA9AFFD2CFFA8AFFFA8FFAFFFFF8485A8AF84AFA8A984FD05FFA8FFA8FF +%FFAEA8FFA7CFA8FFAEFFA8CFA8CFA8FFFFFFA8CFFFA8FFCAA7CAA8A7FFA8 +%A8A8A1A8A7CAFDFCFFFFFFFFFF +%%EndData + +endstream endobj 62 0 obj <>stream +%AI12_CompressedDataxœì½ëŽÉ‘&øŸßáì¤ÁT*Ü=ü¦ p.™=š•ºI=Ý‹Á Àf¥$nóR`±Z£}úµÏÌÜÜ=Î9É$™¥ÖvW:“™Ç2Â#üfn—ÏÌÿæÿøõo¿ÚóîŸï¿ +7Ëîù³¿ù›ãûûÞ½ÿùŽÉ»_¼~ýýwÞƒô“ßütçÒÍ‚«ö¿(_ë•ÿãþýw¯Þ½ý9ÿí&à¯w¸ÿ'¿zñ¿w¿¼ÿ×WoïºûÉOAÿÝ«¯ïé/wÿ¸{õòÝÛïv~qáæÅ«ŸÚƒ©¢Ó‹tMþYþþº[¾¸ÝþW|Å‹·ÿúâ»ï^ý¿÷xX(ü¬Ã»ïß~óêíïþ÷Ïw_•°ûª†² q]w_y~×ÿöê7÷ßm.ó7%%kóMŽ…o7.Æ€»nÒân=½{ùý›û·~ýþÝËûï¾;¾{ýîýw?ßÿüâíîW/þ@y±û¿ï_¿~÷§Ýáõ‹—ÿB÷쿾{õúžúàÍ‹;ç¹Ãö¿pþëÃ÷¯^ówß¿ùç{êžTÓÃ×\ë?|GÕQÍøéùë_¼!Òoï?| ×¦‡r[~ó·‡ñ]ˆÊå'ÿó7÷xÅãD=ø¿~Új~ÿîÛ7/Þÿ ÝíkMÔÜu¡–â·´.zÑïîß|ûšúœ{&×å&Ò_~ŒÚÅÔ2¾Ð—o–¥–ÝWn)ù&¢þi”LöÕZýM,KkcïHš÷úùîïÞ½½×ÞÚ¿ÿð[Óu]ù_ÿô›ï_ß¿ÿ‡·¯>P ÓªtׯÞ}sÿšîèUܽ~Á½ÄÅõÿõŠß½xÿ‡û4Þ½þþO×bO¡!ùå‹?ßcd>ä�û»wÿƒ_õ+—Cعèën¹ñqçŠw;·üÆωô(—ìÑ®ÿ¯@m¨«=%c(M£û÷ï_ýáÕÛŸ‡º`*.:ðûþÕ7}ܳßùÛsS†ïÚ¾õµ©>|¸ÛÚAsîø«a-7¿ú-}ûö›ã»7ïx ÑÜyKÓêõ»?è_ûþUñý·Ú&|MÃ÷ë÷¯Þ¢âçÏþNþV¾þõëïéûþÝ÷ßþâíïß=öa"ÿãþ%1 +ãovÿÏÿ} †À³{÷»÷/^RôÙ®!~ðíO?R!µóýýNþJ÷òGúù{ü|Ìý§ûßÓòìõöí¿Þ¿~÷íP±Q^¼ýf÷/Þû˜ÊýúÅÛïwü«û—¯þ•þò‚º¬×Þiª–¦Î·ÔI|_³yÄ zÔ£^|ø#1´û·ß|gµËÇÍË ñ1UþöÏoþùÝëWß½± +GŠýþÈ·ûpÿþíß¿•×|ÿýwÜýîÝ»×½#äýSä÷äž¿š‡ØÅ—@üë­üøâõëWxÿâÛ?¾zy©þ ·]¹÷Q³è%÷ú¥'β‡ßñ×ôœ6‰n¿yEÌïʲ~ðšßþéŇ—$öòÏï_¼uÿ‘µˆáýý«·ßЋþöûWîûx½{ó-$¤Ýoÿøâ[qåÝpe¯7~Mĸ|õÕógawx;nûþÅ7¯h!aïÞ¾}ñ†8ÿ”´s*ºH¦ýÍïß<ö?Ÿ?û/ÏŸn©àëHå@eO¥r)§L%Q‰TV.á䩸ӂr¼;Þr9ñu ²þì¸?Öc¡’¹¤c¤²tT–ÃÝá–Ê 7‡=•z(‡|HTâa¥þàËþnûü^iOÕÒ…û}Ý—}Þ§}ܯû°÷TÜ~©wõ–^ùXu_k-5×D%Öµ†ê««K¹+'z©CÙÚÈK)¹¤ËZBñÅ•¥,ùÍ¥WÞçšKÎ9åHeÍ!ûìò’îÒ-uÆ‘^rO•—”SJ1­)$ÿüYrT–xKåD >Ä}¬±P)®TBôÑÅe½[o©ë~­kYóšèëV¿:”pn©œÂ‘†ûöäìC +1¬!\Xü¿¥A8ú5¾úâ³O>úÕï½ó IôwîÖ¨«nïŠ#ÑE·>æ‚óιe¹[n1| u0•ŠÆ/ôòTÖ% ‚…¿ž?û¯-ÚGî‹õz£D¾èù³ˆ¯À½âù±wTNÔ74Q0üÔ;{êôP¦Jëʽ„~òëÂý$=u¤¾:poíégåþBEz‘•û ½†~£žã¾Cï¡ÿЃèCô"ú=Y¨'3½RòÔ[ܧèUô+zÖSß:î]ô/zßègôô‘úý½w•{½Ò7ú½oj5FAKàoŒ¾1*ø¦±áoŒÆHF ß+|cÄdÔ¨<Fc‡ñÃÊ(â[Jâo)QG·•ÕJàoŒ9¾i/<컕ž7_mŽXOœ´ÜjïÌŸîô÷;þýNçŸô8þÒª·kå¾[»oü)u/ÒÆŸôfüŽþ]¨Ã߆ŸÏ6¢ýçž FVÆ–øˆŽqá1æQ¦ÿãÙ'¬?ü”±<ú2þ+Ï™ô?Õèµ`F,:'†ŸËÎ[ú>Ù 9é,‘9räYrÐ9rÐY"3eÏs³?ÛŒIú›-óœ™f ÕtÎôâ¦ùreŽ\úÛ_½–j|â¯kü·ªÑæˆçY¶òüËž^ˆ¿ƒÏˆçŸˆÿßÑvÄÚíØ+2í•öì"ØSnÃöÚí<Ø2íFØ•ÏŸÑuâÝꎇ£,ÐigË´ÃUÚù´ëh÷»£…„Ý0”€/Ñ.Yh·ÜÓ®y$Yâ6ÝѲs´ÃzÚ]WÚeÉ…ä}>$r"™äŽª£­)Ðvˆ-4‘äRJ%9æ@òÌ©Ü–;ZÎŽ6°@ÒN¤Í8×òüIA{’†Ž$ÝÖ;êBGÍ$3E’2ÉP•d©ÉT§ýíþŽ˜…£­0ÐÖiKÏ$ÑÍ$—HB;‘¬vGrÝBŒÑ“·Ò¦žH²+$çíI„;’üw{¼#äh[ Ô5‘dÆLòc%Áí@rå‰dÌ;ÚΈÉÓ¦½’`nóóg·å¶ÞîI<’z{{G› míÔ±wÔ5wÔ´;z¹;ªüŽþlòHåBXȲÐ|‹Þ®ô¦¼A;îuéwô<ú½þÇ` 0 +–nO<4<Œ F…Æåù3›È2ræêct`IúÄ#EcE¶ðha¼i­xÏ雚ùà±&ï/šˆ¼1)ðV·ò–·êo²ýSWVŸÛw/ž¿½üdåZ>9þÍÙÏ¥}c«•¹mWÕð«â'YqºÎÁ…IpWõ\JŽúz´‰¯ZD5u&ßñ4•÷v˜MÍM“‚Û”ÛÛaô›B›†Qojìí0Þm´“¨34²uiSVÇG·)¦6²0I1§l&)1H]6I5£Ô¹IÊŒR4WÔ,ÅF©n’z¬Qjœ'þ§Ù UÔIÿS£7*Úÿã§î›jï/UÿÉÿ«Ïje(Øÿ~ãÅòþE|¢êëRoÖVôÜ–eúyèï*~Š‡ì£‚â àˆaAÖ*ÄÂ"MbO“åŽ܉ÝX^!Ö—hbVùí[·Œ +90$1$òƒ$ZøÄb÷ªøAéóŠìè +Ÿ¨|¢î –㤎®ì»UïPI`– c6H¨¸¥­*ž 5`"pŠÓ£€`4‚˜xícå 2cUÑ(ûGU늩uM©Õ^” Y»ªÌ©Ñ¦¨"‡õI½Éf¬ÉÊh8¨;gˆ E[ˆb3â,”…ÑÂÃô9ΆÉÑ°q5Tµu6<ìjX?æf0 ¼Éà—Ý ] +?—Ã7.’ÀgCºêb˜Ý î¢{¡Éi»šaùškaãX d2Ü`è_&CÿlêÝÔo†þÑÌß ý$Í|ª¡ÿ‚‘?ŽF~êÑs3ÿU#ÿUÿ`à§=7ñ_4ð›yÿô°yŸmN™÷³ÈuÓþdØÇH¥åsî'KË"/³ØÐ%æ NÜGÉ˃´LTmš÷57î§ÉË43/éK“÷ÓäešGuã~š¼lcôÄóZ‰ið†ÐøfH¶5¬ ‡ÜЀ¬²m^뉖f„ ùAù)j{Œ||ñ§[¯‚<ÿöÝëoîßî~,?ÉÎãGzvnBó2üsí_ëîÿrÁì´•I¶ÒP0‰j5y+š$F“ÄpfR²•¢2_5Ù¯‘¥œ†r»Ü±A°ñŠñÕÆ/?”0”u*QŠÊ¿ “…Ÿe(u*{gcg®\FŽìÓ‰Ñd áv7–IdtŒD‘¯0”u(bHŒTÓ@/Eåþªø•VÔ•møù×åQ Ó¸®Ãèö1yyäë&wTaaѺDßƹ#-8´¦4=¡·ü¼SL›:ýï y>æžñ¬}ăê7m—x”™3oFz¯ecŒéQ±„·mT§‘DM;”¬Z™ü¬:f{uâ5Œi“Njð‘"{`[hԌ͘:EDIÿ JÐPwÜCž{ á 1 Æͼ0Ý :bkœ¡jŽÊQFDi——ŸÊ5MÁ7u01¼ÿ¿Î{@Û „ST6Í6Ì]šY~ØFFåäœìfî–¾N-"Ðñywqm¶ÕyR¿¬ØXFÛáâÚ´š7kUcÒ.þíÓWôƒ«ú¯` >}W„ÞQ½:W°Dj9W°š¬²°Â~kþéž©`m +XmìRIž¤?¨Xp°Šõü»;³*Y¤|kùš¢ULÑ +ªhÝ1\îšÊ[Ø°}Z¯Ê–x´›O[”-.·,wš…Þ×ÊàΆwa¸ûógªvݱ.-ø#ÖÅ.”KC¸ìÜ,±ø¤i‘ŠÖ"ñ¡[N u°s$ÈA€ï#¾Etx ¬"Þ.YÊű€Õ9û‰ýéc,~Ǻ•Õz4þz.— RX³ç ýRMŠê2ËK¬y®qÖ‰—N’ÍÄ5'ÉÑø]fAÙp»‹|îùâ‚<ñ8®q•›<ñª6Utô-æÙϺP×þö™_¶×쨃 D—Y/„²—lö×å²W”ËÁl·§ ÖåÖ†¥ñ[7a^¼YŠÅnLóû ýÒÃ\³Ùž +¦‡»îcfŽe6í ÜêœOMê2ošýOºÂ®q¡‘ótŒÍeÞóÏ™xŒò¶¥]ç18ËÇ8 +Õø yÙp +ör×ølN1¬þ«|â‘\áœ<°ª.ÁUýIfÛ95Æ6 +qU÷:$Ç8CV… ²ê¶jŽZyþŒÙæJî«åjÌÊáJÌŠ¢­ž?³ø„quâœÆ(§¹2Æ®ç'DÂÚ²§uè8ËÃÇ2¢,-ƒâ³ cIªGµ8§ÏHæ0â …Ç¿ЖR:„MŠ€<¥v¨ç˜AµP_G ÎÜïa¼ s7âe³]J +`Üë‚dtΟF™ç²\sël¤’±Pp‘rÇîþŸ¿ª?‚¤+H °ä]7´ZüƒºíµŒ­Û^w|WÜ ééz…Û ©çR®„â û–pÁ&Ht£×?{Sm°:ªÅ#$ePz_Z“¼ÏBJmLÀúѲO¸‘4sRݹ²ºF¤_&Z ‹ñž³,ôÊÂÍBœfx­'ªPß.-ž“;7]bæ ñg©,!õ?ÀÆ+z„ñÔ©²¸,u|»§©ð ÆÒç›BEU%æú¥º­îҜ՗¯õ†øüÕ ;_õ‰ñMÿþå_}\¦þ6Æ1Aï¾IÉe¸¯©ëƒÏ95€&à¦èm¾sa»¤õÎ]»Q²në];½é*nö3îÖ.|ìè·5Ý„€Yÿ9ž+øÄŽÿí¿ü½Žtó:¦6ÕxM¬Àyìî#pgæMÔ®E]ß©|›˜ÄQW†°hÅIäˆÄÄže‰Ò„ ²‚È {6'ž.8¬ÙœQbN³<6ðEá®âenpÕ“$PTÐ_|zéë:x4–ÇÁäcñw^` C +ŽÙ"ÙpDMðâÍ&Ù2¥£yš†» `—GA]¶¾âMÀJ˜°ená)s 0¤Ú¡ðæ«"‘X‘“„KCM²ø+˜ÉÂ"/D]º‘zÂí‘æàÂmT|ä)›_zY$J2QZúóÄ‡Ä -z¯%sqÝÿh8У @^èö÷)K°B·† Á +Òºžøîp{æç°²†–ã­8ìƒ),‘•–¤Ô™­ÐÕrûØ‚qâ‘[–—Aôkä8Î,ÒÕš“æ÷‘•kHNÛÌ‘£•-ì¢âœ&5gž/jèáùMÙ±¬€cHIU$mËy7b7Tí¨ì !ú4öcþ6̤§rƒô[@YBNLÁÑÜÌ]Å9Wr¢eU›S9š’cÌêÖ¢QOj}ï”K¿ßÚï3Um÷ìÿTK~‹víþÒöÛøÓ0çc¬AËÅ*ˆsgž‚–³uü¦Ÿ«2ê†N ^‰Ë#Z\BÖÿÅ!ÿ·ÌÂ{ïގ“"×[\‚åÕ°ë¹Ô›’»žÔW.^—kp”ƒ¯Þ×__w1<Û5ÇS‡±>§pi›;ß‚.ý>oOg÷°'uôwôˆÜÑ[rî­=÷ø®æsÙú‰Ï??·¿´h±=zf½Š4¹ŽC sòF®ôçÙ‡4z–.{Õ/DNë;nûÄ >ïÞ³½—ûHÌ¡ {¸€ÎÍ–-ª!rWQ¸² °@pâ˜Óƒ%ŠÑ`N/"‚ ³ÃvoÛÌ,L¶Ä¸<¯¢æº=ñë4›YaN+›£m¶A¶-Rò˜eΧC]¨[å¸YŽÛåˆÑ³3~Ö´šª §)˜1´×P´àh5?ÕÁR|2Ï»>GÐåãúnW›<‰{³ÔoqãÙ¬û3v|@k°ãTã?~šðã×çg?¼`š¥4³;v|DŽ/6gïÔœ%;êmöî5¡hQ mC^´8Ìç ÈFáòâmnsûV»ì8€džWΣ#³=ëŒO¬uHÚ2áÊ^ç¾Sßµ¬€[^¼ ²qɸٖË^Jæi8‹)¹[2Ç9œÅ™Ð<<‹6ÙÄA\Ž99;ÑøNK|}’7>å´ñ8_A `¾‡âXE×ÖÐ ì‹+é0x¸úZ×Ó°ªÎl‡7•„ÒY/‡ÜÏ©_ÖP ²/ŽXXds )é…SÆÄê]Ì“Ý„® ŒOU¡&XM©:6T‹Ún83ªš‡Ä´ÖMUé†$­2fSýÜ*ä òèfwÛ”WR_‚¥¸V®HØ®’\—–8k ⪚»RÚCÛB•i5ljH‡^±åªQ[^ܨ‡·dM‘Ôrèjâ×–M»[EÛ°Í ÞpP†e9§eûmÅRò¦þ•­+{+‡^¨ÆãP:8`vèT7•0î>RÆW+q*ç_eSê…BòNÞŸ•ã•rz ˜K ¶É+.öå“ Oh’iýS”‹!Í=¨¹óp`§®Y7GÔ^¡‡ uI+PTÚ)2‡×ÜÝ ¢v/vÕˆ Ó`øYÛZ¹‡ÖË^óƒÀT¼XðsÔðçÂæ¼½Îlɦ‡¹,¬Ç|zž“'ž‹ÍƒíyFuïµä[Ôqd¨c"°ám<®@¼Öœ›“Í8‹šq$OPË4æºSoµg‰¯q n²±ç!Ou÷U×1'‡Yìz;dÃa/5IʳŸ:±4=çÀéIî;hÎw3à~í3§´?Ohÿ˜¤ö†çQæR:ûõ §sŽÏ9ÇTà%4΄ùŠÉ™äã)û:âïšœ>ãrÖ+¨ÀkˆÀKS÷ÝÝbŸ[Ìs‹vî‘ÎíMº® zÀ é‹\?Ç2÷Øð&wÉ»G-›L=ÈÐ'ÅvÍQÊ]2>MîšåF«µIEXÌÚäe[Ç™&¹Ñ"UTÔݬIκä¬MÎúd±ã+ÚFH£dZe×,›né-ÏÉ2h˜wƒžykê„Y¯hï_ÕJ±Ò·µ¾IG+k/TcJäsSÑÖ3`cTâxP‰Cv†pœÊá¬ì7åÒWáätÛrqc×£¯”4Ÿù¥²~rá­M³Ç}qù¬ø‡cà9p”Và:z?αðc4¼:iv§ÉIØÝ„§Éú7ÙþÄah.Ãæ4ÜÛ8g'éW¿ ß8šƒ¬n‚8B·ÿ©ð6Ó\dГ˜–!é:X»uv¤öàŽ,©Lù„Õª~ +ó˜Ó™J°Ç6¥i´3.4ìƒdú9¹©€´s.æ0žê4Y8H?÷B²$9ª…†Ü©¾" õ8%BÝÛ¤+›p‘¤Š‡*5f¥%Im:nƒ¯… ¶à’9P˜d=ÕØê ª^ îe½8láÃç_çñ|×"È.@þùĹÜ~NùRŒ‘4ew=ãš]ÐÀ!q)¦©~«b;,;š3Ìt±E¥|Æí_˜qøR¾ám¶áIAif†læÍ»ä΃ý{¸ÿqÈ¿,áw6ÃÀÉ”“13 ¯SŽé +±Tý¾°Ê ed„Ò^HQx=¥73¨æK^fè¬ù’Å“ÜRŽÀÙ °Yb¢#pvLTzžªôò¹hÝËÌ?MèhbHKn›Ú2øŸ5™é™Ï±›‘Ö3Õ³mKæðÀëY§ýœASŸC©/çÀ¸¦¦•ÙÆ;)æ` ¢ž“S^Næ>$§¤-b‚OÛè_NQùˆñ·„ÿÛ3ò.A§NV»Èø«Ø·Û9°Gþ“Æôpvjä¥dÓ[ÍööiYM®Àã‡1ÍÓƒšËúa1Âf0>®¦!F¶²>Ða3Â3<ž]–ýdÄb+½ä?ñ4D^ùmÔû¸ß*®z1àtfWì'Õýõ­ñcð¹­ÁZyçÉ8 fåÏéྻ³$2£™«™¸*ÇÞ/"ÒÄÕðhœ¿ÍV‚G;pÎ>ÇƩ̆È[6F>¤ æ§[69­4Ú03x¯lN:¾£e8_%ýôY*Ĩ@\I£Å‰Ÿ4’æ²ðIiq/=÷ÈTZàËSi}öéò?&Fûwší?ȘnG•Æôq«ôÑ£Š|¨O;ª4¦Ÿ Ò¹¤ê]V¶ʕë¤~ÝDüÒC_ÜÅC_Ü“©a£6lšì©…0·äæät³wMƒo”˜¡‰oõ‰m+œŽødèÇ +¥ÄlŽBé‰ÒIYÏ›(í¦w½s×Ò^9íŠÞÚFbN¤ûÃð¬'âXHÈß9ÖÎi|ëù­'hS ­hÁW> ÖúOfàÍ@ .ürÙvõuý…xí²\æ¶D§êã–ßz7Âz?2>0H½òº3G#­_Q; +¯XQ9$y8ŽÄjA0žùdf3ÕiHÞ‚`úùÞT×áäŒÞ@›u p˜ƒæÓÛéí¬ÊíI•ƒ)‚TÕK&©Ñ(ÕkÕÍÝ4ÑÍÍ@!FªËªÛÑP5M?P¿)4üY Ëz¥Ä¹¨?°—ô¨’¯F°^.åóŠ¦áz\¹àÐ;/]ÿ„åǯ]1HM~KÆUDjó,9äé¸ÏA)b&ÃF—Î +ÒK&_“Ì ŒÆè¤ùô »:?·‡ä3Îfñ‹'¡žå•X7f31‘ã™r&5ŸuÚxžn7¡e3¤5cZ3§5î…ÒýØÍ»Ý=ß=}A÷”»mḇ^Â…²^)ñ¬0w¤ÓÕrâv¥tÜ@Qû§”3'þ\ølÙ'-®ñÑ_Tãýû¨ñŽäV#¢#k!{Áš±4©ÎÑŽ=?Q]O ¥Œ õvè ´¼; ÝÓ''5™^;9wËQOiΖ ¹j.r•á|n6Qt£üh–?ç-¿xuªw.}B»õÀiÚWŸ®3Ÿ™B¶Áãˆ5qkÜÇ_)´Á]çHãOV¨Æþúåa®÷YåÇÿR5þ›8œfçP8³³äÉ:¤–!> !¨´4œ(0æz`kØUšÜÔBI­Z1 ’çëjn!qIÞ™ü´*¤ ã›ïX~ +ê&ÊÌDì,w‘ËT#;Ög£@fáNŒeŽ +…ÛXä-;”P‚ᘣð&â(òuÔìÛ.æ8öŠf^Ùý$¥1°†LìaP¬m±ñønЬFÍiÔ†fýe+Ý_‘zºPΓ… +8xy°x=¨êqe}LÑhÅ—ôØB5>úÚÿH5f²ÓÙ9.8\9ßFZ‚8Ääd*#Q5¥|<°É+±¹ËiJêÍ7Á7¶ã“aÞ:?<ùŽ]Íá[ºivu˜ûªäæä ‰¢¹9ãäغ9Ì}Õc’Ÿ?S¤aC6„aèǦ+®ð4D(ÒIÈ(BâQÛÃÓGôàxˆú6Éôˆ /¨G +¸ G +l‘‚[œà„àógŒà5„à„|H5^Á^Â> xR ÒãÊñ1EHüx¹fÐ:+|“–5þÈQ~ä(?r”9ÊÓÕø#Gù‘£üÈQ~ä(OWãäfðÔùÏÿ#{ï³_‹«ìL_kæÌ¡‘f!(9GqÆ»I<.ü¿¦KŽü'­¶ùô‘FÕ…]t7 q»É³¿ù“ÝA¥¿$wƒts»°Þ$7ä9~à’M ™*Ž>íür|Í—jØ^ÒkÈùa¤9Á_Á#xà€G°TÛ·›ØÓ&öji»ÝþtVŽŸV¬¦mÌ+¾òüœy©,sV‡Æ,£|²Øäó³“ËyʇÁ‚9ŸŒÜÞò ŒG¿ÝnË_mMcâÖ£eÄïö5!6:ó¨M#n×\ÂnìvÃÒ˜ÚQ·zš¬«;$ªìÉVËfuH²ú$×ÌL0¤"L*‡è +³­eåDãeu“Š/q­‹¿ðË(ÓÓÕ©’ââWG™Ô Ï>¢ü—V )Ô`Â@ ¸T0¼ÐçU O’Ö<}ÿ|9ë¼Ì8ýgÁfoÀyá â!¦-Hé6}X4ŸE/Á\7`]2Žî”9?£GçŸóž2g²ýË_Ú.®‡°] +¬ó›WÆ<IJ±ÜÚ!+ýˆ•8œ‹.¹ÁœØTTRÔôƒT’ ²×Ô36¯ÙÉ&iµ<+ž‘•Ð¬¥Ê.·(Pƒ_ +C2,¸áŠFx¶Ï;Î&.©«¼Â2+Î=ÅИ]\Öe=Ýæ=3ŸzF,Œ7hÙOÇü§CÍz! ‚iÙr XÔBŒ¯¬ÉÇCŒ/ÌüOM¸YŸs»ìftã² `p.ðÙ r+ñ·TÒx`ÅøÀO¹ë‹Wa¹¼ Ëö † Q¾ý¨¤1¾wÖÎ⋤wˆ6m°^»g¯º½»Ý_«íhS–þ£º¼Ã…˜Èší9W¢y®¤Üý Þ3 +Íèš1)Ð6Éì¥4³îBšYM1Ë +PWyZ‚ŒgKçc›ßtÕ'¤¢ÕT>§‰-í9Ÿ@îôä,¾GvÙ³ûsâŧùßÚ;+¤gÏÉ`¼Î¬ÅX¢›G=±’[>Q¸òIÂáà¨?O|jE¢7ñô\œ\Ù¨Aaü Ä.aò¬4Û"Í:Ä“á”ßÍÅL¼?Ð"¾ãز=ŸÞ‹Ùáì`·‹Ü£"Ø?t£G»Å¯ÿ‡~ö°Ö†óŽgÙ.Æ\gº8¨âz˱,·g9-Ü0ÂûG¾Áâ+† ¬|á¼xí–Ûrrè‹9=.‡P$kož ºëN®ˆSÂÃþŽ×¸ú–¯o3œæü(Ñ_|× Ô¬§»ÄDµ‰ª?jTý¥ýã<ªÀ(Y†DE†Bö°Ó­ÅÔ×K1õ !ôÇÞnŒ'þ²¸S‰:eHì'Ç…÷Ôðl¢?üøv_øv“šh=x¶<¸¥²å!-Ë +Qò†ÖLˆˆ&i¢Ïé©´ „ãY}O\¯Š¬ëâù`¯˜œã4ßÔ‹ÔÃ,Žf±ìœáæ/übu&SIßõIëUcÑ—ÿ[îÛõÓ96õj¿.8Í&fÃm‹n •‡hIEÚÏg÷]ø岚ðD5~© +±^Ô Ö­?€S‘ nѳÖîøœµÆ:qÊÚfº—CŠd;½Õí3¨$â˜öý¢éP°U³3UÇU‡ªim“¶9M½9•z>‘z„ÕϧQçRO9þ{ÛíùÔ/$"ÚÑÆ/ 5šáPÉ™#Í`„)…D“%бµ4lGÝè%V^¶z‚šÚÿZ5 z3Ýy ¹SÄ´g£ÍjYË7M›N3ØHjáEsB{6Ù ÐœÍ$ÞCÃ:,ypm3~s,É\•/–•-8—Júܧ/?iùômŽôç-ñ{;*“oÚiY¿ë@o‡)Áì &Ï›ñؤñü¢Z†C©ÆØ€ÇÅ|Ö×5>öŽ~ºåBËóHj@¡å»ÒR^hqC:¬´à!z– !B„4YP,1’»e”ÚsM +ä@“O +OÙëÙor>\?ù1p`ˆ×êÚ™vý,<Í"-9ÅÔ¡e;ýí4>Sl<l>Éìü¼´‹( ±ðÙl•¿À >}fë9²9³ ÙO¸¢¹)$3EÏYô`Æ"µquã»Y·&ÃûaH=Ü ï-ýðhzwea±iááÖŒð'=Pâ Æø½¥%nfù¢Æùö5œºÁ美e=+áJñ— Ÿqy©¸Ï-TãgßûT5У»+.å¶sgðþ(–~LF!ÓO‰èû¡fIA?'¡çôÚ"¬ŒaF3bn²d ±Üò9»×ÊEI÷#åh'+ 5nmˆÿö‚ôRãƒ* Õxù/— Øp§ÐhñÚîïèÅÌáñt_lÏù·¤¿¨ÆËŠÅzEQE…í×s9Sr6ÇH¹®6™*Eü¼ÓÔv69æIv‹äô—£Ì¬ÀeMÀ¿²LèY â‚Ô0–šl?+¸œSëkB}ØLË!솋æùÛ«¤(ÖB‘œš^$D– U"„$ùò¤¼=+(×þ}dÑý÷Qã¬ÚiØ·#ûÉÄÁðMãÿ]‰lا`'õÎjjeu¶)ªe£¨æIÅÕ2¨8_Ø?g_¡V(ær¦ž°¶~~øóöðæQ 2õè¬3Y¢«*X‡ ¶ÕŽ"÷®Ÿ>(|‰È/¥"È¥yžÃ²g°”«¹«æŒlGΑäÙR…³ôŽ°J5Vòo/HQWTŽ+EÎf0—s%gV‚éÒ€T£ù§å Y`úÉ~·C>˜ÅrÂ<”æšwtâötü{uˆÞ²Ü±¥\΃ƒ[v¯™ëšµÜ«­¼°ãñÈrÇ®ÇH¯ ‹¸Aaþíé¤ÆU¸<>%óÈWKW¥Ú¹_…kTź‚Ö²6t5.©¿"÷óõ¨ÆjgìµSöŽ“cöb´sö:”1©ÏB½$Z+¤Q¼ 8¦Ç0ê™y‘ÏÊ+z2Þ'à]@ÓebT€½7[£ëp¸æ_„¥ Fõ0årS|ˆ»¼Þ¸˜G‡à—Õ#Nµ¸øÊóÅùħí3uQòx®¡zÇ0o@ÏGG¢ »5ßÃ^ç‹«ÒŽ?©U%ïüz“ç7ùì*¾Ô‘/:òâ‘{£³ÝÒx]ÏÐ:[¼N;i£%óšÓ;)Ú!Ãí¯ÿoÏrè2YØ~¦×ÑþߊÐH:иÐÿ÷›ÃÑ>5/î&+. §N6xDÎtâŽÇ1Þ ‡­ŸÇX‡cÒçW;‘Þäê¡Œ]£ß¶/‘S·A€¤3ñâ‹/9·#³ÓB«Ës8éAuÄ·n“ö~úÝzÊ6­ö‡Ó,Y}Ö[K ö¨à½ÇýŒ›¿x%^ÇÇÑñ +DÇÿˆŽÿË ãS½¸‰|)jË="jëúqª0>½ hÞ£9 ‘~˜ÖýØ`98¸Ü.vxpŽ2v„0”|aÏødö;ÏÏϺ]ÏG<;;”-šÏ…aêù3=²™¢ZÒóÇÀ0¿p"¾$:â8Ÿù‰S¡>?>B‹å µÄž[#ÐÆ„óC÷óɧP^=ð‡“]Ÿ3-éë| +å|²èœîruå‰Kg‹~$…þ&Õµ44f>.&åÂÁŸ•2'…öئ9]N1ñ¨9ñ9‡)-OuœÒæ\Ò½[çSI·ç’ž®ž5û±9ñ±$ès +t5u³ùK"¶³ã4Ä,}r,Ð0W†£‡\Nô?¥y:i¼ÉäÁ/9ÔF§Ùè—8Õxý$奱ž“XkôÕóg_•%«Ç_Ñ,ûì,uƒÄâÁ¶Žp¢]Êœ@æör +™ÿç-þG9C³Ån1Z¤(]às±¶î6‰~òåt@?ΉçÄsâÇ9ñàœ˜S‚}B¶¬óÜ_Ÿ~ójÚ"Ê×÷îí¯ß¿zûáÕÛ?|õÕ¨¶yþìï¾å¿ùÛ¯_|øpÿþ-iôû×þî»Ðåõ·]­75….à5¥°óëzC>ýâÒ M®$o¼—ÿô'üü^>4çé?ýY>ÿwúýÿ!꟨+v¿ÚýÏÿµì¾yÎwý´'µŠwo@={Þî—¹½×/Ç*.ç +Þâ¿Ÿíß8½zùáÕ»·/Þÿy÷s1ˆüìðîÝkê‹_h¿|}ûÍ«ïÞ}xñò_¨÷¾þÝ«×÷_ÿæþ凟îþ3îø?ñŸµû?}/µœ¤Ñ/sÅãÈK1„:yÖ¬4[Šfˆ¤ •væåZËêîŸ^H]sOçn–hR”›@J‚vµÓ“ȶ‹õ&‘L¶#ÖpCµÅ]ÌÔŽ: ÐõŇ]Œ7Ž–àî%ßWâ ­ò²‹þ&!º–Ôˆ›•ßn­7¤@$"¤Gët·†Z’¾ÝWoâ»@Í\}–çùr=œe¹‰µÒÎ7f`¹/¯7¤ÑÐe ‘Ïô¼DÏYÖ´ ^^ „KÝj ÉzQ+yG#_͇”o µPKjoÌ øPZóÒr%g·¦œPµóÔ?Žìnu7¦]âÍjw¹x“½ºO¹ò$eRÓ¥t³ººî\¤±¥±ÐÛÒMu!íðW*¿ÕI••uÍôìp£¼‚’ÝE-âŽûÊÝCC‡r³Äâv+õ$qK"Ð{`j8f;Qo¤®ìuç²6e%ÞSñÚ4ôèbú¼"Þ_ÛÀ,êVj/+ªáåBO‰ÚV·5ÞÐ˶q î†>ÐtJÔ½ŽÚF÷RNvi¥ñ‹ôÐÕÓc¨âD£!Öûhú9ê¾]Nˆ‹/Ü•ÄÏWÜGÛh¹†è¨¢DÎå>¿hÕ$Ô†Ðê]X¨Q•&@YiÀi¸hðt¦éI[„Ž½ÙMZ¨ëi6Â)F³ +£Öº=Òô +4ñx~g/P&UÉs{¦^èCz½þƒß­:¾í÷²ÊO2ú…“â^8o&*M3ä¨ä©SáNs íðÜ‹}Ö™D/Gû|¿ˆÖ)‹C-Jh³Ù.TšË5á2­‡f7ÏžÖ}ââúe­-VѦq½ùÁ¡Gh„r N@ÓìÍL]ešš¥´Whs&ÆA 9ÒˆAf£ÅÒ/[åɽ¢FÐçé}êoH¦´ŠÜÍJSaxžô¾öZvY{q«hÓ¾Þôÿôøÿ>a/ùÅw_ÿêmÇÇwßþùëw¿ç½åoß¿ûþ[ÝL.ßò›ûoï_|¸ÿækzÈvש»Ÿüt÷Oÿxe¢ÙÓÂÐ*â<•]·KÎÔOØyˆYeLJ¤AÚŒÚγ–›\#m¨XL«ÎèNEŠx}iÖ„B›1q»TˆS¯ËÈ·Lò£ô˜#ÆãA¥)$÷ÑZEÐÆ.G©ÞU¯ûÕ-UoôØàiOw.)…dòu È­«nþýBšÐráRäÝŒR‹Èrg£â`­.àŠuwÖ7güÀ­èb4ÅSÿçy3SI‚_sÄ6W§_sؘh|ô£¶¹²S¿]h³JŒ Ïê=ÎTG[ð¬VÏ"«Ø¶ «º¿‘]ÕÞÙêÙ4m»$6“0„¥¬€ð-´¡°k‰Ù%M«½pØ"ú¥®´Ñëô´ãr÷ÆNä¨LkˆÄèH$!îìúsŒÄ¾1Ç°Í/´;ÑþW^\㪠1óDk÷p5GÜ;d]iG.´cÒZ¯´]í*í$„è}Ø2¨••m;Þ iê$2‘ +CŸ‰U8’hÓ©Õ·Œ¨9Ùyˆ5í<$#ÒÌЯ$‚@×Uˆ³,am÷u¥Víh£„–— +I´õ–Õ¶SÎ÷"¬lÊôì¸Ð;¼™©h6öpjn\Ï+L#OÌСóõóKëì\|¿ˆäd‘éµ4‚>LokTmR6wVOF¯©?­ô>}§~Y{k«hÓ¸íìs»ý·OÀýäPÚk!¹è ëר‘ƌƚpã +ÍÄ‚I ^CÚq1‚r1’³iJ —Qw&¯zE ÏÓû5ß@óßõŠH4úó” ÷µ×²ËÚ‹[E›ö ݨ*œtã,cGs'B€Æ"î)] Õ;v¢q"ñÕÛ'a˜ßÐeELŒˆ† «ºbÁè¡y–L,:bö“,}ã±ÐhY¤…Œ+ð‚'oéhKêWÑrbBÛ”@ªÐ¸(•$ ”ˆ58È©ÌùW½dª’±ƒw¶­ÀAÉ4³"®Ÿ„±Ì›T ¹S£m¡.òÛÙz¾µC)á)ëð¨Ü$£N†¨IOàpY˜sxGL)s:Å&ËŠ`¸ÐS/$7Ôe}¦Þidê@Œb¨‹DÚDëhx¨RôV{;»Ð`•m[Ú;ƒô_é&Ìð%z•ü1Ð%‚Á42éÛ$Ë/ Ðd¨q¢dÑâthŒŒÅVân¨ŒVˆÃàô§*Eo 7ž¸ýx!íÊ@ •e~ª‘íõ¬2k¶­C?ÐÂá>"…™à73! +Ë.Hw¯Eô}G*GÀ´lcSÈÔ/KEFØ*2‚>ïe›|B 4_ .[E^[eÏS‚.ûöZvY{ñVѶ}‘ö¾ÈØMt!údÜûƒ*×l[P0"ð§Í¶åVàH›m[ni§¬fÛ„8D³mAÔ]–um[¨­Bàk¶-0S~^³m9¶™™l[ÌOÁ›m‹š3»Ù¶@ð~cÚr~1PM[à¿$83m1k$=f6m1g%ùÓL[ØV¨ëV3mÙƒi Lu]KsçIŠª%™mËyZu¶l– qñfÙ2á¡Ù¶°ìJ(u¶m7Ç@¼Ül[´²ª‡OM[Xi´ÇÌ–-ZqAÿ©a‹ØMdßìZô1¬l™ìZ`gû¨Y‹ê!ÕfÕ"ÞN–g£Éëœý°Ù´* ÚÙLZ´`O-f5;3h¡!…6{=ý‹ÙžåèÁ¼Ìš=ËÑÜm7Ž¸1OáÉžå çnÎÂN»”´š9Ë/Sz2gaKcѸ™³èÉ´ƒÓ[7{ÖÙB;ßä8´É­³=˨Í…©Q"ÉÑjªržÓLÆÉž…mÍC.l9ØOaókµ4Âd_êT5CY=ÍPeO›ìYöNý²Ö–VѶq3;'1jíYªf(ðÍP£Ù©HbE¨ZÍY่¬.[äÁ½žFÍKªV¨^‘Ú©úóFs–½•]Õ^ÛêÙ´îÿWÖ¬/0$ð…• +ßLdZêl-4omø€ÙÁɧŠ±™µ¡£¬žm¡.prPÇ“À‰ûbP‹)ïßtí0æÆP/ìJ‘X¹Hgá•J ‡ÞÜ;#¨“â~îWÁöŸI!(EÝP«< »@Å:YÞ“¶>bJ•Ud`#öi h ©/¼¾ÛuÖƒN-èç}znˆÈ‹]±a¥V°N&æIJÁ*fvqx¯N ðÏ]§hÂ]Òx¡ÆPY£´§šU]ÉY½ŠVT2G{j£è­íõìÂÞ²VÙY[@AÉü™SªëÆ ݇½ùqað@†7G ÄÜ“yôÔH;B‡­—ͼ„l׈Μ‹ê&DëÅÔü„0T ß<…èÅe5ÞØ\…¬4U´³ù +ý ¢Öî,$KbSÛ¾Ì[èÙS\wò­h³ù aãíó¨ù QaÉ>u‡!Ì¥¬÷˜ËvBôšAÉ|†ÞCÙ¤-Õœ†lÓ±;°ñ<·È4݆°A±¨Úü†P\WêõÝùB½î9Ä%¼ÎÞlÈ…vs_»ïVn’ùóŒ2û‡ Õ58Tf}êìCw(‘½ØZe¶7ÛS2»‡ ­ VÙ¶­<‰žú,Rïm\‰0ùðT4§w´)g×}{0ûûeºO 5E9{1Üòv¯ ŠŽóÃ#•0»ûeöòVÓ¶•ÿAD0œN]€m²Ms쟬9â豈b3^`*„žO} }™­àL!ÉSfÅ5˜ÅB 1þ¶â$2EéabwlÕÇ‚x#û…p²n–+˜¦²5Á íVR™ôVÚ»ø©të`/‚Á[×YSÏÕ«… fº¸ ø@v²3¡.˜Éa®Ž·8B`2mUzhe…% w*P%{]² ̨“©!²ã[e+± ïÖá©ò² *¿]¿®5Àê:kéGä¢'ñYÃÝÄSbvZú,ÃݼÖð2,p8™ÛÚ‘ëÄÆoÍl¾µy¤ÁWdÚ%Äq’ym“¬¹®}l,´¹®2»®û…Í%íyU„‘ò0Ë:ÃGg56¾%êpÍÝtÝí!Vã´ˆ72¼>u¶m´Í­l„ًݯkê^W§èCgO6oÈl0°Ê l³q¯=´fgöp5ÀêÚ¶ôógƒ£Û(5ÔÈM 5ÃdSC1MØ¢3©¡`/¤;xSC¡­¹BŒ²©¡0t°érRCÍ¢ØÔP3 6&òœ|žÕP(—Ë ¬ÂP·ÒünZhû<)¡h:(lè ¾IÓ-Ù[jÚ(¡0¥å¯gZÿ5%ô¼G/X²’˜Jf%´“›ÞÈV!L3Ó-ñK +1o”P6;…Õº"öÇ^™Q&up «ÞØ+kºe꤄ö×ëZˬ²m[¯{Ç¿ÈP¿FÅàÀ&ÿõ› 9«>µ®ÍÇ™D3Ár[ ÷Ŭõlu.„·b¯Ì(úTã,J®jµ°ÊhÛ">—†§6ŠÙúÕ×jZ¬²m[@W¹Ç +f?3í¬8ˆ2@*IÍ ®ò"tøÀ¦öÌΈ€lYà÷9³{•jðš-ìCƒÍß;a®"¯PW“æ‹Q½—F³¡Ð@TìábbXV"t:L HºÒùÐJ»¥ œêtD-lWH!Ë­¹¦•½Äl„FSµysB@ËH` .ºÂxÕa.¨Yì˜ÂHm +$i‰´½8væ Îxa’7K*“ìÄ8gª‹ã…=Ô{n6©ÂNÓ„¥U›*4弈®ê9U¬Š²ƒRé#V»éØD‹É®M!˜†ÙC±ò›ÑU€,XŠ¢º çÊ£O‚“ÁMk^¼“›™3ˆMÐÔ5‘ +¬ ¼@):_‚† iu%Ž•EŸª·9(L¸Wæeožê‡Ývx=»Ðš`•mÛúJ’>6¬Ã’IÒÈ@ °æ½:… +¶…‰AcB¼Y|sÉ`†•Ë/Œ8«$ˆ\¹´¡•²;“4Ã.ÏAdͬÓ@œGÓi Ü4EÜ7…c"á.ÂÜíæÚ°“UžÁóT€u’"ó† V)BóTÄ^£ÐZêRd'çÐ$UvûÁŽÜAž—‚ 3Ë$kgÛÀâ(ï›ÚûÒ/òвhSŘFžÈbµÄ>«¥c#`«¬Žj¿/TijÕ±¦DÆfiaÄO‚=•'ü²1FÑm–E]ðº¬Ádƒl§dêÝ* &»6s.^û$ÅfÔ‰MÓôƒÚË6³"ÕlýwM%³eû”i™Óû®Š‹d • ‚6ͽN×ó‰Ît0AåC“Ø|÷fC¦ ¨¬bhIk‘Q[aüÄ"cÐ(º<¨Ç3˜k¿0‹Kx¨Ì(a4vrÄyln7T‹‚ úS•¢·ÚëÙ…Ö«lÛÖÁWHÓ˜½rX¼¥½Ù«ØTÊa,‘Ý- ðPö(EaN°JÃ…´†}œ*3Š>ÕnUrV›U·/ì®ý©¢·¶×ëZ¬²m[‡~ !ªû3é• Ò|3“±‘gö$,Í>ƒAåm³0¶ÃÆ5ôëV$! C]FiÕ[ ‘‰}ž­2ÀD²ëÏÔÏÊ@Ú«µ«z£ZEgÍì] paÄ`ð¡ùò + ZàŠ$ŒŠ#„%ti} ¹S”-Á€ã}#3 _­U6Pô©z«‘½Š„½2x)àéOUÊËöÂúzv¡5A+;oëÐŽj/.ÒƒšÇÏÈ0îA–£\0i ²|tXªë”—M’aèÂp!0ðjZ]Fi5™BÉj é•k´´?T êÂÐwkWõFµŠÎšùƒÙ î…=t3»Z⤴ Í*Exµ ÖPÌ=ЀðÐÄõÑð@­G˜ù +ïItˆµ¸>€FAV…DÕ°ðè1ñÆ60<® ÑÜI +†g£ËšÖŽ†gÁðƒÃƒã†º…ãuŒÑ2<< rú¨m]ر4Ž_X«›!ñP‰‚hBŠ?ç­˜[éå¥õ?ö…áB…¼•5J{ª©UJ.Ò›V=‹ý·ý¡bR¤¼]¿ÐÖêÚ¶ôºàIðñì«ó‚íd¢sŒ&Síˆu£¨eD‘íÃ… +~ïuAŸ©w™6þÄ°c«+«]º?4öëþvv¡5À*Û¶t`w0#ÃQ Ûñ‘†+12‰_qqÆ$-‹­Ñ©tYZ0k;1 ÈyMi¸0, +_µªŒÒžiLKÈ°îäÖ+ÃüZëøÔFQ±P^Î.³×·ªÎÚùÚ@ €¥ÅÀó)`€…9¶Z¶ˆ¬ŸØ;§!Pš†(Ô3À~H0 €ŒT³÷=jÀ(*IØ@¿®@nWË|£T7iPJfv ÉÚBXîõFcÀe»˜nÁðý‹FÒb0,…vJ‚!Ãn52ÉA‹g·‹Êĸ 0ŠJN<Ð/l1>+|¢SšyÄ.%»FN·ØÏÞ( Zì H©¿o‹€D t-v®Sì±PMe¦Å6À¸‹`&øУP}Wf,zP +6î´à 3^‹À~ƒ”HM´Òð¨ù© áØÑø-Χï¹Iºáê1œá(o6dÒìpf·ô¹éuˆ h›0 úï—i\ÀP“Qô‘z§‘›Æhu+æǨ£è­íÝú…öþVÙ¶¡ƒÖÐ@õ@·­ÎLæßÈ€åÀÞœÇÈ™N†½ ÞÊ^Dv†7ÙS•¢·*æ¸Pã†ÊŒ2?ÕÈözV™5aÛÖ¡ÀS)¯fKïdân ÷iX}’‚o¢7L¿QŒi1ö¿_ØÂze¢O}Ù¦ ’Úlze‹6¯?U)ÊìõìBkB«ì¬­‘›Ÿ$š`ɵpÃÈY˜aq~`°8‹?0\ÜùÚ¼à·UþŒ‹È +e3¼¿ÁÝ,.`ÆÅYü@¿°…ôÊ:eD¨ d…²Yew³§Î¸8{½áBkB«ì¬­óþÀ¾®7ÍÖÐÿ ïf1,ÎB úel0Td”£6ÌÖëR¼[䋳³«ìÕ­¢m¯i­Ýï C1f`22ìY´È¼&# +F=Åñ"UŠšÚ>Ð/$V7Vf}j·N™Ö˜ýP™ÊÃSG©ax½vaoB«ì¬­Ã"ù"í}›Ÿ‹UÅ°Š%(ƒ¼ÙÄ-Áð“ÅÈ-AfŒbÕÍìB§ ž^—Qô¡/›­PÉAB…‡Ê"8>U)zk{;»Î`um[:öé(­ð[.Yô’8›4ÛÉ0¨qÆ ò±ˆÏ*D\T=mUåZ†»c*ë}ª²ýF®‹à¢{eDÉLÈžÚ(úÔözýÂÖ„^Ù¶­·Z‹Ê&Ø¡°vÞlÈèeÅÛÕ5ï 0ÞNŽóª¢Ö§øñBÚ’ØjÛ+3Š>Õ¶?#—ÄðÅVÌvex¦|ÖÛÚ«µ‹†6i5ÛV>ÕÊÜæ{c…T¼}AðSo6d`¿ ÌÃtËÎÞÕi¢€p;XJ¥¯¯äýx!½„oè©Ì(úT³1Y2¢Y]+‡ Ï‚q}·vÙÐ*©hÛ̱C¿D ز:Q 9ôUcEßlÈ€Ø 5— 4ÆVþYˆoU”Øu¥‚­®Nчš×Zɤ¨9Z]°ôªÐ ÏTÊ˦<ëËÙ…Ö«kÛÒl’Â7éÈÝÙœ_ºÊ~/T©Áí ŽÑÀ˜ëgmÉŠ™ži%q2õZAfº¿Pi¯ìÄoõd‰5éOËc༽Sn!)í­µ¢³Æ`/úuETù=Jݶ$ñØO¯R1ƒƒ¸YCne½U”c» ¸Š"Ê„Td}žÞר˜*àWVU­Ãó”`cy-»¬½x«hÛ¾jQò® IÚ »µÞlÈ“yxª ø,^IŠ×(ÆåRa¼PãX™Qô©Æ唜ô>TVTéO-C*”áõìBk‚U¶mëI Û>õQŒá,·Ã:ûf&ðw6ô¾Õ/b­c9Ý7KŽTb…¯o­Ãe‹xõ†š¥=Rï4²çæìz]l4 +exf£è­íÝú…Ö,«lÛÐJLkMšóÇî¥S½"4àff”¤E ]“B'¨fnp$ÄxVçb±ºŒ¢Ï4¥RÉpÚ0¼Ó*Cª[W†‡*Aï´—³ëÚû[U›fþ0”í=‹F·Ó¢1`¶‘aÝŠ"«Q5b‹”I¸XkH¢mã<Ìu¼pa;ÉPW#è3íÆ¥MÐ…°­&¢†¾ly·~¡½¿U¶mè“mÄ.‰9æÐ73µ´¼I —2µŠQ§CtŠ +$kKÆh’€†,QCeFчšÕGÈÔuœ=¯Wæ  êOm”—í}åõú…Ú‚^צ¡½Ÿ2^î#apOèä:4¨ñ¹ã¼u[±$Ì›š½d ™Ê(´~8¼ "WJìïÌæµÐ!Þ£6oZ$<øŽïFRÏçGƒw'dÌ`¼÷ˆîF@\Âx5p7 ¶K.Û IÎaí†|i .NçÌÍÐÝ‘aúX7=náÁo¨nIõ©£ºÀ¬\¨î̈µµƒºs¥5Í(oÅt³°ÍöÉÒ krÍkê˜nÇKv«Û“‘@©Ö ªp ÓxuC”[C‡tŸ û™Ù³ÀF5º;UmêHÆÉÚPÚ°ÙmÐÜþ‰T;5Ó hÄ­¢NAÕªàë^‘â³ûóFw­v™½¸VtÖ¾x€¾ ¤â7ømPt +‚Á¶KœÛ™ƒm‚ᵉ—#¯‘¡µ9+ß`µá qšm‘¡ÚÄ;ú³uL mZØöx£¤€×áÚ¢³ÃHZ:${Ù`±—Â>º`‹S ¶‡V³E`COïèk¯oÒ ÕHˆ•Òy½r’ÂNDn~¯P[†]¯Z˺V°¢t­­~ମ£·2ǵ#­‹¾LÃYc^-Ám`Ö¹è’W”5zgÄXsŽâ´AX{‰Îå°†u:¥¯.Yr|CÇàdkàjž~ W=ÍųUŽ´ª§®#ª;U1Ðœ> +H¨“Ã>CSc®®e f 8×ëé„ÔÜ© +~î)>Ú7¨ûK)µ¿¶ÖsÖºÞ~XðbŒu§6Ð3[ËX4¢ò=MbkvuOÓ¦›ÆjŒ0C§µ[E†‡ÖÇÍ°i}§Fì/­Õœµ­7;pÈõ^~3QÈ+ŽJÃA¤|Îiƒ—†ÑÍ•á*lgì_mõ4„\îTE8·zmÒöJí"kI«dÛ´Þj¤ÛrKÝ€¤;UaÍèP7¢#yPh Áúh» NUV[[EFʪ€æ^‘bžûóFlt­v™½x«hÛ¾Þt˜—"çƒqÑFmPfZ15pF"E;Ãê•Ùý>¢¢‰Ù­>Tøf—8à«0”;UÌV‘Bíq#Ú^ª]dmiµlwÍ{÷½çd^²“Èá¼nmÑÙBÒncç6€IøÏ]öZ¥»ÈK#LÈE£6„£UÔ@ö¼ *Ùß«‘û»·ªÎùÃ(+_”Üãê‹Äe÷³ßÜ¿¸tÎéÕ›¯}ÿþåýÛ_ÿ_÷ÖÚ×ÝÏ~ñöÃ…ËñãÅ?¿¾—üòÝËá¦xí¦_¿¿ÿ×W÷úú7ïþôÝõv/D•¿ºÿn¨ªJ@>ÛkÍà#|þÛý«?üñÃcßæøîõÇßæwï¾ýš†ëîý»·>zñ/ïÿáìj‰œK¿ù?¾úæïŽìís9Ûéöí7zóó‹‡=ý÷Wÿz£žø'ëoIfnâ@|è/µ¾ÜTû•ÓAO +&ÿÔŸô‰­þÍš+Ç5ÙÞï—C‰sÑóžØêMûÉ‚s¹ýŠCÔ ½ç9´Û·C»×9?N”ÜÏȹZÂyP!¸"O<²Ÿ‚àÜ€à–XŠ „µ2°D_ØØ»híÉÉÄB†³ÛÀ¡9E‚ÁóQÔ­+»KRwe¤Ï€=v÷ k?¤ìÕÌgÈbL¨UOä``”±{&(Õï*©æbüVæóz‚j—&äfBð½urº@€•Ý±Èåœ=ȆËû/›6áÈ }YG»zž±Z•»(Uhi•ë!pö?hy«aCGòšœÜÖ*”ÈæG[Ø 8Ü ïgžzˆÕÞ¦ਡo’°Õ¯© òÐ#~G˜E‰Ûfû’„$ÉàƆ¤«I]”El «Hä•$³,_ç–@Bpz:f,"%=…#Ž“Sû/gœXà@”øx9ä°g™ZSCŒ»fHèN¶¿PY•² +î¡~ëÊ–Z‡£óVµ‘sæiäN[ª>•#à@ñflØ•šîuØ9=²ˆ† w‡ã“@ ÉäTÌ ‡®l‘ÊIT;ôÉêYcLšoQ£œÌ"À:s¥HnÁ²bh­u‚ž2îVNxW‰RËòçõ­"7e^¦ES’½/pƒzcä‹$‰'êQà¿™ +Ë5z¬Q0daè‹Â>%Iå—"üôEõç +›?]{´;WR+ŸL €Å° ÕLf@ tŒ£D&†5Yø T +ä©…q‡‹*š]¼¸W9ƒ #-p‚©œƒ(K/µcŠ2:Pb$h’üy5Ç;üÚwÒ˜et(ü”HIX9ß®¤®”¯øCCN +ŽF±þ…µV8³Šÿ„\Xá¶þd*R”ÁÜè9Ø*‰€kç¤vP‚¨[AHnˆc ¨È¹HŸ3`¨‡±˜ ¬AÒCóx£È<;,A㜯p†jÇ>î¢fEðm]`Œtí…ã‹\[HQÞ*”yš[ˆ‰@ØæEli‡a§¿´3Ùˆ¬O¤; ?ƒô>Ò1Öá¾"©UZÍ/ÛоΖj‡Å§HS–ÆÁ.ˆ\E¡ÔÖ9y^FðW¼+”øVü"P× KÜ *›P€zÄ©z‹nmD ^*ö&®„ñ6Îmšàïók8¸(±,8:[‘5~sÏ],8áÀi+Ÿv²J09ƒ à"J†½Ê8zþˆó$Àb˜ùD7³\;dœ„ù¸³3P=ÍË5I—³Û˹‡eáÈŒ$§ ­AêqF œX¨líMIrâ¾ì”ÀÏKÀ•ûÎx+2œÒÏÄÚ"ìçj]&™F¼F>ÃRÙ–'LC¤Ó»s4É<‘½)ÉËÇÛÆu¹Î$Û²®ÙSWšªÕñPòF®BB…±*ÊPiŠ?ÅXfF#Á±xìœ ƒèçˆ`lüy‘!§Õ(à/ÎCB„ ½n•!Ý~¤y¡õÇ må­+i”h)Ž«¶:Vf +ç™Îlc\‘EîDl÷ +gO©5@ÛüÅ°R/âváD`#IŽI˜<38² ¤—ƒÞŽ0Y% +Ò3 +—_¬v8ù@ÂØyGñœaÜw¡CB³‰‚§3±ȆŒ’ìÀ±-Øö¶ bÃ,âLYøX4dÁYÀ-¬õ áeÓÖœ]†#8k?.’(Fà@íwmSãU„H¸*+ž±ðŒ½H³.0¾ÏC³Xˆ¤¹¡>O”¥pP™}v%¹ŠiÌ Ñ…•å2 擃DFò+‡ ?ŽÀL’Ý ×.Š.ÆÂ&;ÛüðÇQ¸Ø¥[f+R/6GœÀŒÃ&HØ•¨¿•Ï¶T †¾e`»8L}Ñ«¥ isA` d* n[ì„âd5ÎY¤6>—sS•ŒÌÃ*[¥¶­ˆ³žMiAsÏ!P†ãÅŒµ]ò éUÞŒÅu„d“eÃm‚¬\xCegŠÝůžjk‹çÓûð9&lD¤Maé2{–Ù…<ÎÌn0^$òà\ˆ„ÝÈi˜EìåÇ&ê;ô\dJ`½ d-¨¤ÌÝV uXiñØî[$’uŠ ØR,f„ÝùEÒA Kpb}ifDt€šÙâU$n„ˆEà]ÅŽŠù\¿of{í@_àýZã âæEÚ§üÍi§'Ñ?ÖUuÃ\’eÈý„ÅXƒ18 qà Ô³«*ë[’Öª) +#ØT‚<–vE¯]†ˆ^ì`Ì’À3ØÖ÷Ñ(Hò)QÄdiˆx­€C`×_£îŒœéËói+Á„P3¼â dÖCV^cˆAuBà|ˆñËKî÷q&ÄuÕ!¶'î'© 9„b1ND´È¹·#›qYažÁnz/g2KC‹“¾$q¾Ðˆ“°©<ï¾²Ö,Gš‡²ïwvé ? D^›HzÕBiiI]Š›]T 8 ÒKˆz™cI’†Ùø\¬/‘ølÓz)˜³ÓgY§mÛ®Q‹ªJ ua©qp"°ÉgÍ*XÙEªà°A€³Í5Âc1uJ…}êŒ$²¥ÊWh†|4N˘²<œŸS‘G…¨âå$½2'Ö ‘X[HÛ`:茉áè5A$‰[4C9e9«‹h)z\SFïå~PY ¢ñ1 c⋶°³0¤Ð€ _ò’vŒ+ëU"10³àÄ¢¡M0Ž¶ {úÍ¢ ‰½ŠòX]ؚ̚cOÚƒÔkNj&ñ‚üÚYÅÖEó’â¾jQ +K•¬• zÖo+Ö;BÇm°ê ªoX<|gõ6 =”-è¤HÔ˜Ð&™ëÒ `Ì|ås“ãœÈ‘8 ÉI&[Þù,¬Ðø3"¡ùb?ΚÑaÕžm\âÏ_V!᦮ãÌ”h,ÄòóE<$‰¯è[Ü!)ãC÷ìAE°Ä$£›œ£îDWäÏÙé³8eÎKK¾¡.=>TñˆYrå$ÛÿÒ9J£"WpY%>"I +~:ŽyeŸ–e"ay>!Ö3iú]ÉÚ™•ƒ‚ 眉Zf÷±¢ ùM4W0§]Ⱥ'csäT]B–Ed°Ûm^"ʧ¯Â Ûdù„ÐJD–B}´ÍUeÅ+ +„HT%˜#«@œùÌF0͈­£ý²*V4ØgÄǬÍE š4*ì®QÒGÒþÃï)“n#wžpdá’DA柞Ðbä\bóBúù¸ZFäaçõÌV¢æ-ªnqÊ>üÂ;Au!u´dèGL'þõ° _#"È):Ùº ”È1ðŒ á\Ȋʉ@YìxξԴηòi +òŒ"·z9k A—mÁð3ø:v¤éi~‡ý1a ›‘¾`DØ$¤¥¡h`4–V9Ô‚½ Å怣ˆ…¬’½HUòL°öøs+8òE?LY®ÁGváÎjù€ÛÁ¢gräc9x©yÍäTžº–Ü6Øᙂ»MÂüq]àI¯ ý ѼAc£ÞêDı"r\b@x3sêÀgVD—‚|õ±g j}ÅúÀ̲š“¾#g>:YvÙ*ŒlËfdEø¢œƒ‚=aåÀá*AB °@ À¼X¹9‡¢…Äl òš4¬ˆ-¶hH¬Êg¤(¬òÛ­,%‚+òÌ¢2>Ì‹ó?‰ŽäIø¤Ë«ˆ“µÉDï£×Il_çé–$¥“X Ë«ïGÛ¾ÃfHXÊàÒu˜íl$Žú•KâyÙlnbvIÁLЫX’äS%%›_&Ââ‡WIéÌ65¾JàB0 z¯Ù>Yt²,Ì0%ãÌ‘è\> µ +ÿ`¬‚ycºHÔ„–uuða™XHÇ/–í” ÖÅ|°£r´÷ B™ ²yË®“U9HnáäCšMÜåBϲqU™‹÷ý•ÂÓÂ}µÝ #ÃCÍÉËâEaìL±4ȉA ìÉ—¶¢ bïGX¹UR‡/* ÁZÇf]ê¶éu^Áy²•Í0†žmÖF€—'gÀ±*Ò‘U¨Â:g'ÛE–ƒTü®» ¦9çд;E^û¾D·¹JxM³aEmoø,ÇÛ@â`ƒï*¾Rܶôœ´HQT¥2–m8¿ßÆ[œä¦rRÙò³Œ˜(4q§XÉY1PgO"2öÖ$SE¤XÒ,º¬Aé(||#丗ª[Âémpy-’ÏHÀË«¾ÅÐ)¨—¸Â›Ð +ó¦L͈/c ‹ #¬¼&áD_‚=q~‘V˜o{uy‘ˆÇöÉ3ÙçhbÑå¼ë4À®H’ +⹂QjDCr“‡{…Ï3C¾ŠöO›ö&?E–pF8áŽ|cTv&EV±©Ðñe Œ™-€Å>š¶È":Óªy°¹òÀÑU’±¢²Óë¿©ÂN ð¯œjLµUÄ®±xôÔ·u²ÈâÜ¢•‰ €ΑµA­”šVrŒ”«ØîV®x\ó &”ÁÎÈH6ÔÎ02'éÙ + ÑŽ.ø`ïmSQ2Eð:¾ÁÌ æXЙOŽTl)üÖ~>/k† +>¼Ê"³ÛpH^í=ž÷á€â*P &€‡ÀÔ¹$“^«"3œ,†íÁœÉÉ@²¤IcEŒ£3ôìml€dë('w\å2¤¼¯Ep–ÜÑò +è{~‚ +ôÐÚ’8Œdm,’}‹Q6ë`Iâd1¼RWIÌVäÄYa|8”çyŸ†ûë³(ÂÓ©ù¸®ú<°i‚émlväc‰ÄÆȹ·ùTj$‹Š_Yn¿é{ RÆ1«àØ¡!Ÿ²V‹¨S†ÇÀ‚Åï]ŵ*ûb¶a–ÃÐÀ H+§”ô€ŽBšAÆR1…Áœ*3@ô&C™¢L<ÙhëN’® qÂ>$t"°ã˹ƒsðùÉA®Lœm]ºÛncß5Fkœ³«rt¯S  #‚ùþ¸dÂîsÌÌùŒ|®0_"2±FY­‡XŸK€ƒ ¬`¼j“d·`Û$;ïyœ‹"r!‹>ý>ìy€‹-¢ë0¸2(ç]¢L0ïXÎ"H‰Ìp…[! "±;ÚT4+6`‹¬;iŸ”Oj¼s +^xàc4 vÎÎù5 +"O|‹pâÁàÅÏUîcS®€dm÷1^Ô¢™ÚYþKA½s @M` ¨‰²Y#óc¹1ê +ÎQΩWCPðÂ×öq AÅamB‚+g5`PIpýÐ>àË<+É)ÖŸ+€NÒˆæäDÜÕ»‚øk™Þ­‚Ôbdõxq//wðfâ ¤rF¼zÓ¢W,Jβ1Gæe¦ò8yZ\56SX!ážäHøYKOEÖóË6ä¼ê€tæ” +I7- ©Y> ¸kpƒã%‹ <“\ÄNC|‚‰—~~Ø¢ÿPY/b™Ž-y¬ñÉš«˜;TÒ½,©S/„­4 P”1ÆÐ/Á3B÷ÝDサ°váùà@˜8 °+³2/ˆÒ;ƒÈÖªEMû¨§èÁ_©=.õà «ø*VcAs-ÀˆÕtjÀ†óíWŽ‰IêØPµ.^r6…ñNƒ ëà;‡„(Ó§™ÚÉ+gÐg¯*M¼ñâMŠŽƒH°I“J±Ú"OŠdHDP9Ž TÞ¦|°T ˆ”Â*5›Y£W†ã:XT€½Qè|ä­Æ’ÁCí`“Zߓͤٵ\xjx6i$ìr %ê¼E<8@@åêƒnoQg²b·Ü] +AûÉWœù&ÀOw?ûí‡÷¯Þþa÷“Ãaÿòå÷o~óîà \¼=k§Ú@°`lŒ°0¼iäÂñ'niBWÖtHnp"Ëœ9†Z±=Žq —U„FîJÄF!°Ë¡=®‡p$A)Âb¹²•ŸŸÊ1@P/«Å ª=Zrê~a•À™WDùj1§—MpLÐ^Ä3Èü„Õ/ößã@`ìbâ¬ôœ‚7½ÍÉô泎Þ8™ œRf½½s‘ÍdF1%&±Tkdˆ“€PزaZŸuF£,²Â;ŠYØ>@Ncòñ + Aa•¤xfœsQÇ3s K¾é*´w^˜ÊpD0êøìtt9L ·­kì·`69…â*·1dv‚ÕILóߪpm”BÇG_fi]sJn†nð0ð_lioÂx±…—,Ãwù2f=^¬‡L@ KÒì1]ôÄÛƒ*óh Ç%ä +Ó®°-u_Þ=¢p6 ú ­&ÍÅ"™ŠG]ÄGS†“fÚáóÍ5I š­ã|0|»sq6LeÖ‘*³¬•- €tõ¤e´±…P§Eù&DE˜Wp&»C>—ÅrRƒ[6ÁeYõ\ÙÈ‚Ìu\ $èä¤qzÛ¢]U—ñ™p„|9œ³¡>]š—   +ˆ¬¼UWá‡b¯zà +ãdbph "cì*l¾Éqòq,CzÁñ.ˆi0©Çó .ã~ä£_JÎ<ãd Ɖ9Ø·phÆ¥-Oˆv¼Ì²zÉù€£Ê¹ |?) I‹°ª`ç€p°F\¤"Iì”D‹0O&À¼\lþ@HYy9.ÊŒŠ|i&(xI(Ãr¡æ‹Ãn-"P,ßñ@ˆ‡(«xÉåqkÁ“å,O€®ù­VÕ3ÖH´²™©aâË*§`;:×¼J +¶Uè}QاhE¯Ïôö"5 “lîÑû5¨ aÕpœ((§g¹À¾{h ð],ÆÙeAµ©Ì˜á2 kªi£–(ÎÏ.Š% œk¡ÍMøBªc Ä?‚Ža(dôXZ$“ÄGrƒæó`Y=4~—`q… `AŽmxìÖˑǯÇÏðÜ'†Äµñ5´$xГ—•ÁØGŒ]çaXô•×k[eb3^šyò beSú±8‰\Ž¯‚$bby¹K'ž×|W‰@å#ÿ?öÞ¤W—$IÏÛ7Ðÿá.%Õ ŸÂÝ—dŠ‚(•(‚ ! +‚P ²“d UD³¨†þ½Î;˜çdª9ܸà¦*݈øbt77{í1$ìy@å7ZÊCfMUfÊ}W¡g®«FÅ8 !ÏUVÜ îÏ· +™)•"²…œ}8Ò®Ao_†ˆ${µç-}ãÌ+6}V´ñ(MíÔ8/#0¿ÂƒØ”JhçP£)SŽêÜß‚\5 ÙþV(’¤Y¯¦’•Lc¡D%†È¯E7^m˜%QZDÓÂË,®á¡åÐ2pBÖÜT£ì’ìð`ÖQ?ÄöjÖ_j“ú(‹I(’àž§Ê‡XX^-åÒ®³߬¤Ì ’¸¸‡;Rœ”êQ¦O3bäõQƒÉþ°è¾>i9bt]ÁÿDŸbŠRËÁƒÌ­#²’ƒ.úh{¾Uq>¢x¼.ˆò¨„Æѽ +Äø1$›=ÖU$Š +ëiÁ¢bŽ£ÞÓæ×½x!¦Ijª!oøvÖ¿ÿº€eìK4ôv›y—T÷ט¨¨)†(NÍ¡QõUà+-U—†ïNµ2ì2Ä%Ö©¬Ýyå#hX O^uõQ™¥ ”̺=ü”ȤÄ:N‰²÷š/SN±W¶1.ÃÃDÒvùkÌ¿ä@e& × âdrŽ%•|…¢ÓÕAX?ؽHy}$B>:ð P´jÅZq¶I¿Æ‚Âɳ\ÄKv4-üܳH«Sо +Nš3céaQ)LŠeeãaH¸'å¨)ůä C’؈­}’Ãt¹G&í†iŽ}Ö±@ÇN\„()DåÔ„ì‚ä ÐÎgºŒJ´ª‚ÄŽq0tbœšQµ[5$ Y‡GðÒ]Åo×V“îDR쪾j5j”?„ø±ddŠWßh|3ÙfÜO$fYÃOd‘V^Nˆ°t Àd­»(Á9xï¿yþB½-èW +Å•?üá¨Ñ¿Zdöø`PgúvòؼËE{*åG(ò—«ýûX;؆FÒ?š4C4TöÈV ví×± Âr1Ü Ž§7à bw¸Ïµê#+‡‰RVš§±N†ã–•o~Îf“bµ†hd +±?îœÏØÞ€„”M}»‡xB­|%î¦+ï|ÕH@uð²ß*¬ÔXŽ`ŒçÝ äø¾f>ŽÎÞ“Ãõ³Æ³röv/pZb´þ!žëwXΖT=J!Lq–IxÄ—K>ÖÎLúC ++K­¨ (Lî0Ó)ñÂËh=C;9>Ç’Uu¹ŠãKD»Ñèyq¼+I±áòÁ¶j˜‹Ö[ª…×æ¾®¯NÉÙŠƒõÂ(F,Ôõ×sG¯Ëç9¸+¬o+Q²˜4¦ùâå·€ +о[MU^¦ôÔ<<¹Ó<Ô9|€eŠ¥±cêp¨ +¦ê¬«£çTœ†dýüPîR0?½¬l6ÇäFñøòšaCâ-Ä':ž5>¼Z‚ÌrúJÄÒ€DÁS©Na‹6òÞ’tXUŸd"ASªŽ#¢Ñº"Þ q‘áªQ­âXéAòSM·@‘.œx?;|iH€¨‡[aêbDSW©ú~[?CÿHóœÚµx†XþÒ=0¬8¬tJp4ÖM£\!Vâ÷$~ë’CþS%W ’!L½^±A\ Õ“ÅŠÁÚ-‘H/kqa¢d:Íá¿Ë ûÎÁŠêŒ(2¤Š³å²P# +ÖõI{¿.ÀÚ(c×ø#b—u®¯šõ° ú‰áž±ª!¥ùñ^¢ö÷•Æ¨ž¡«‡(:r½Ó¾_ÑßÊáo¾áI9ÀµûŒ z‘3Ž3˜S®ú‹2ªâ2Aû8I2(,K2«˜š…KÙ¨¦ì³HÉ-Ž8Ö( • •Æ†íÊÅR÷û0`yÎ?¾ ÕIŽ”Ôãž,VÌ.q–¹=g%(ƒ¯¬8‹e^p$£‡ ·¨€ÊŽŒ¬ë£¯õá²M,YèÃ1E_&b-{ј å”}¸W¯y\5n_>S:…M5=\ ì•Sâá3‰ãlÄ×™³‰xáÓ¯B8uHZDA5ýmÌ|SRþM®ÔÐw¸v«LL«f€³×`p¶>»í‚•Fi|úX‰—¼Z¡~¼mx¯ØõUf•SqoA{,­m=xxäá!XÈ’náb¿Uädb`Ž#€«œ0–µÁjrãÊ8z }íX#áèT" þ<î…4»P™ÄÍBUÂ’Ì0ú +KÇ‹f«K §ÔäfB²2üÛéÀge¡µÕì¾+*¹UÏ ü|Rpeåœ'Ï9Ø o5¢€XV¢"Emèy½ý” á*ö>²‘ úy30Òà8Kw´×/ÝKN¶—D¬£KC3&¡~qjúû³6ð£ÈouF½ö³•Ð|,&†æyè6ȼî2{{C!ùµÙ|ŽFå‹Ê—á9”gË:ÎŒ,dJ£Ø&“Œ|fŽGÑÈ1Èö0sZ[Õþª}kÜÇíÌ•Žl¶Á° ’JŽxø¹®ývØgE¬÷±…×ì þZíµúpF¯&€P/ã€öÌ"´nù ­Y­5ÐÜZñ5âQÑÆùuôäåx¸!rSìu°¾×YœÐž )R§‰%þ&DrimpœM±²Ï‚¬™·`½¦Ìš§Æé˜A™¥6Ä»9šBTQ;Çú+¼ÉŒ®¤X×pªÍ?˜Ðžù¹ä'ˆÛc ½ÆáºóµóÞ°"3Ì»‡·¼±h3«„†t½v$,3i€¨©ö²ŠŒ‚I˜` +Þ^v^Ì]kb_žùm0k…4c} š*âÁ%×™é˜ÈPŸ$ZÏ#KâË@ÉÜY¹¬¹;eÁó  *ÛçqºØ~ô‘Ñ…¤ÒÀ|æ¶8WZ@¥ä° ¾Æa•WÕø 1ÔCÐGßY…añ8ÑMË\"ƒƒu!=-ªš†Vr8Õ]uDY{uéµVãL5U•T“ÞÁ]£ìú‘]z­EF9fw±ì£Ëü«‘ó8EB(K¾N&ß´$Ÿj½Äµü¶¤³ b[³¨ø],%¤|yUÔf·(CBÀD·µÂ0µ—:X’.¤üæš>FTû8¤I®‘¯fm`a%¬&ST+ù2Œº®ä­ iRÝ¿a¼§¡6܆ ¡ýh{ijåbÇ¢”½SUá(ŽåÄMA&ÏULTဋAžnòvê¼Dšä]Û-í’^¬T£WzLµkÆ…Ù +OIú¼+ñ»ïñPßÓ•Š×gÝ, e¦yæìCÁSsb”À0 €óuÉÌg/ê‡ïî¨ýw¿ +æþO9Ú1¸ñ¯´äÿDLò—ίÚ×_Ôd|Ê©MÎìtV3¡f4O»Ée*÷Èd4ÂÅ×Ää—ífÞ ˜Œu:^ïà%c¥ûñË —ŒUÙP/ËMKÎ,ò© –Œ¿q¶ÁJÆßUˆåJæN©-R2ŽÜû\ äÌâÿ“ õ¥y‹Ìv"¾‹ð½ ÉÍ2´“‘ ‘8Ýh#’QXŠ¨M’«µ]7 ù´’\‹©»G®E㛎\‹j.Ë‚\¦¿ÑÈÌþådäj…’ÁÈÍïÅE†bTÔ^c‘<·¨È iL8¡ÈŒäÒ7™ÆÜHd +JùDDn®”Y@äV¤ \Ä…eòâúñ¦~§Ynúpž‚ê|8+ÞèáL ü .îkmîpaV-/ìp¡ö5ßÔaäò²êÁX“ ¤¶NMº¥ øy#‡‘ +ÉC ! ‡†‚Ö8üñöâ¡8Œ‰POÊNðõm¥­oØ0O߬áGªû5 ü]ï›4Œ[tp†e“ŠWƒ2 AgQÏKUíU®.Ä0HÁ˜8bù1€EžB:Ý€aäôž¾Ã(Útáluá5ó"Çš„­¥‚•¼ÑÂS-xo´0²Û(o +²0ªþÚÜ`áøûâ +‡1°ÂS±ƒÁlÅŠý„ +£¾c.êB +¯¿O¢p(Œ*(wñ„ýÊ]8áÉÒûºhÂàÀ¡ ˜ðÃå´x$[¹ÄQA†.…¸  ?¾•O4a|¯Ô·Mø7ÌsaU8ᇕÆB:ïa³o9hÂpÃðwô^}ùKøIPœŒþxo88.”05œåIsù“H ¡¸i€„1j0°r„qKé¹HøÍé c‰ó h–6Gø1Ø/0ÂÞ”qS„±FÌ* ÂPù<­C£ÑÓóÆŒó¢×a XIåCC•róƒsÓÄ`~0KÃUüM]þê°°“_8Pi}Áƒ‘üÄɪԦ Ñ‰†çöª~™ì,¶äuƒ!žDpçâ‡1°ÁPµŒ‘5˜w…|“C™^›`C»€Á1Áøw¶9‰Á0¶c’ §¸>xÁÐävÓ‚¡ + Ø°à2ͤ5+bW~ïrÇjIK‚1âq bp+R\œ`xûˆ †1BâM Ž¿/Hð2šŒ&ÑÓÌz¥>û¹ÛF@ÚŒ´¬†(ý]ˆàT]f¶ÁÐOMv‚Sq¦y‚±™(±$ábåÓœÈ/ ¢Ä8±z²õO|`(6XÐ~ìúªwÃâÓ2rùÄÆ)Í\|`!^gÙ|`iyÊg@0ÑñÅÙ¦âKvŽ$Á¤Þö4>‚i*Ö€`üS® Ìÿ`Æë" \Æ&ó +÷Y„`þS2WyÓÄòpa‚™ã;„`>!’ë.B0rVÊ™Œ›õÔQ6!X¯Óq'!˜é:$ƒL(-ÊóÌ~Œ‘^ˆ`üª€!§¤´]‚yL†z/B0ZŒf!˜²›hKDšÍ_» Áw½L{Ç Q¡.B0ɺL¯!AQ…™ƒÌ袲Ÿ'!˜ ;}W&3|4}³XÝ7›àF7 , ®Åª’ôÀ£•™ëxàÙ¢×|`nÖ7Ç™ÎÊn80‚A|ÂÁfØKµ%fãR(¨ºÙÀsú»4ðL"..20²©~â#©FsÆ"üÛ¢Àeë 9zì™ ƒÀF+sR>Qè®z[ŸƒÂ`©=h½óºóón 0!¿Êƒ[ŠðçÅž.Ú4‘0&LÆßõ½XÀ0Qc0Žð(~G0ñ¨Ÿ×N¤´HÀŠÍ;½Áò ÌÂ]ž$`mdk ˜÷¾ê¥ÿw ãý…f¿«/&QÀ4 ž(`ŒÞ(`å€Z^(`%iF_(`¥æ¸QÀ8mªÝÌú#V%G³PÔçâk¹XÀljÉC°€1êóÛ3 ˜7†Õ„' ˜VíÍf!ï`ÃÀìÅņ5ÂdÓ€`M°€i`»“L9'A†³% „€cH¡@â¢Kâ™Ç¢s3LnANÙé’‹ +A^JPÑ€‰I½Ý4`Xés ˜D +ƒLÛ4` è$¬ö 3 ˜ ç1Œ]<`XY[@àDÖk LËàO °¬È“̱0Ó@`Hë¿€Àl~e@U.’gÙU–/ô V¸º£w'ö CçMñîE¦úÛdpS5¡ÙD`þÍüDÓ +EC ¥"ÏÊQ‘‰Æߣ¼êBK6®/²ö‚šª˜$x Â/"0À–5öIÀŠž ôz‚Œê'}ÚX7D`X<ƒ LKä<78ívFó`ìH`P>z#qòÉ Ì)[)ccóàõÏD`ʵX}D`쨊¿ ãfq¡Ü7¸ßD`¼cüDœšÛŽÞ@`–QÉ@`vjS²Ø@`:ð`S]@à©ø–e〿:þÇ¢£ì#yüÆ‹;‘ £.¥à¦ë˜éÆÓ +Ï-pÀ88õÚÁ†³ÖÅfô…æߘł,Ã;o0~ÙíÀóûí“Næ cá¶ø‰>Të˜iÒô.Ì/ƦÑÆ Æ8ç<'oôi +øÅ°óŒ› ãcdïÐ6ÄÁˆ ò¸)Àì^øqóüº~ÒÛàO øu¯à Üõ(Øšcò8ù¿$éÎ66nï¢ÿÆß'üwÙÌþž˜ê Ì-k–Nòoo +Q¯Š,þ¿Oîï²ûûqþpšú;ÃNèo ƒù;yüû‰Ä_ìdp/#>ÃR—àýŽGïñ…ûí_æèý"íp OØ/Ù¯e,Öo°`õ‹p÷Çèp~a÷ _üälp~»¸»å·[¶ßî6ÁøeL<¿7â÷µ+ˆ_|ƒuöòøzt‡8 ¿Aî +À/: !»|ß7KZpâ}i+yÑ}±™‘†û¶Ä”ì÷˜¬ô…öEr©p‘}Á$cëºzçØXþ\_$‹©­1Ö·{]yQ}Ù#—¹‚ú¾Z"Ò÷5’ñ"úò\êâù²«ù¦ù¾Œ©Õæ˺7¼–fù¾Æ¬Êwãù¾N4Ç·;aó¬ïÚ_?ÚÄCU:½#º¤œ_ˆÐ¸¸‰¦Ö[ð%pŒdÞƒßK*ì”ÌŸ/ï”è½Ã’Š‹Þ;Œ +x/Dþ¬é2»8b”2žäÞÉ0rYà^,ZÙÚÕÔñ÷‰í]6S{ÐyÅ]ìÖ½q‘r1{§<ìÅRŽ_p {IŒhê&¶‘½°J<­`( Jõ¨ãy5åŸÄ^¢¨º‚šr= £ZÖÈ^nAAí‰ìÅ$Ç!=½pBËâõŽ¢Gáz±Ð8!h½<¡G[©RÅ0`wMÀ«Àå®W…PÇjç–Ü…øÂõÚ«( × G¹ÀõÒÀÒï×K¿Œ'o\/™‚×ûÅ9ùaù-J^/ƒt`']¼^ZÍ ^¯"w%/@/ãqäøŸÄ^F[ ” b/<¼ˆ½³ê͸€½¸t®÷Ø»–”ìE\-c/`¯hÊÁ!±—œv]QÃWNC½‚†Â€°WA»·-`/«‰ä?½Œ[=NªIõJ9Ä^†E˜H?‘½ËŸ4²—/¤µ b Ð †‚àDöžVÆú“Ãîì%/£)Q´‘½”ØCvÈÞDfrÎ Ùk*H¹‘½”;R±`d¯m­,d/%WJ²u*XŽ±µVÄ`« +xº³ÊÅ녜ʸpzÜpf1:®—‘©ª6‘×Ë(Ê«ÞÙB:oïªÝ5ÁéO8/šu`È 8ï;Ý,ÕlÞ×ñ¼ Í àbRAæ}' ./Q½ÝX^ö‘A‚LT^o[@yÙ{»÷›Éûº`5êÑÅ$ À¢>œ<ð‘—®kY@^V«ç¼x¼àuÁ3¼p¼ð–³N‹i;´™,ºÂx«‹%//–¡]…–tLëX_æð7ü÷ Ä ù ʵƒÃËJ¹, /бÚ\^ÔŠÒ_7„·5m ^q°Ö¾¼0b%^HxšÈ¹\˜Bâc„Þ.ÃoUÙð¶*¥ï±ëª.ü. +ëÉ0$<øÀóìEßÅ¿ðÝ6VÓcN¨ +" ùdïˆO)лͳOwq&ÅྕA†Þñ<ƒw‘ßì[¨ÆB‘.x#qp¹Óõ€ÎbD8™»(±”ëBîN¯¹;ÝÂ)ˆ»P,¼ww¡ƒeÁ§y»,*šsáv¡ÀF”ï¤íJª½X»Ó±ó@íâïøEÚeF~zv#r ];.qqvQÊÈu¬1»Ó˜Å ìNÇ/È.ÒzI"†íÂ÷Pከ•û Ù¥•ŒhK¿±§¹.È.cèðq/È.Ûª#Ä]Lÿ¦7’±›¢-ÅÉØÝÇ2c"‚±Ër„:.Æ.žx5”-ƒ÷Ξífì:]F¡ÌÔ¦êrÍŠ{X]¼ä(Uª®ò¥ÞT];@Šª®ðé]T]d8Ø\T]’Sš ¹(Aª«„‚†²Mեܡ¨ êÒPDÑE”Œ»UÅ…<$]¼å¦ê’˜6ìBï%Ý¥‹ª i¢ŠÕeîol¦.”; ‡\L]°Í˜=_›ÁË ÉÂP]¤^ø¦\P]XÙþWP]˜è9TY"† .¨.ipX½T:yÕ¥‚ð ªK6 †ê +–ôqOªËýXðsBuS³gP]”sYP]õŽú€ê2‡Æ’CuyÞUn¡º ê‘½p2uaÔ¯™©›Èªu1ui@LæbêÂJ\0u¹o‚™ºK2Õódê.ãbêr®¢Ô4˜º¼a£|†ê¬·ËP]=XP]nBÏÕ¥™O* º¢±ucvEXÍo¨.µ€qW¯æÖW£Ç‚ê’ü ÉÁ Õe„˜%ÝÕe‘(õv¦åòൟP]®zÒ6Îè¡Æe¸ˆºÛjºš˜ˆÍbžîÇüO°ø¸%U §«ªü´hºpô¹R ˜.BÇoýÄÒEŠõÈFé¾’‘/’îàé~;y·&âBå¨d€t± G÷¦‹£‹á{îÓ¡·\]ËXo†.Š%Qa„.­ˆù"‚.b£-Õ  q90æç"¼†ã@Ó ÅÊ…Ï…q©+z.bÏXì\ dèBçBˆŽê’@çâɹøÑ9—âo#ȹÚCo±Îb.f¾S2ð§…Í…Œ¼`pµ¨wé„æB3Dr¸†Û25þ2·¼lÉ~òrámd,6ŒËe×¾§,Z.°ƒõŸ`¹¥H¸°X¹¾72u] j©nR.¬Ã(·°£Aޜ܂°])Ÿ0¹eJ#KJ.r´$¡úA*œÝ1NFn5ú/¹Œ³Í¾¹ˆp…|rõ B'¢aÆã¾Ö‰]t\)“2;M%L—}Lr8ѸÍ­ ã6w/ 0n‹ÙèãB*þÁ¸pà¥5eO7aWæÛÌÄíû·³ +òâ"IŸE»%·›«8\ì˜ÃEÃ…@‡ù8Ãp1m.¤d,Ð8Q¸¸FÌæAÂÅ=`nסP*Ù½8¸ïA‹\æÓ…¹dñîàbà¾îâܨ«îkŽÂÀe¯‹2ÿvÇ[XÑnúm5,à·À³"Sgöm+ ø¹Ñ·dsäºÈ·Í§|Û,¼¼¸·0ñk©&¨ãÍ‹zÛŠú +\ÔÛêš‚€ÞÂíb»='òP ÆÆ'ò–úˆ^ñ |HÞâ6@zñna|æ»p· eɆH»-̽¤v°š`Ý–®ç@ÝâÏŒ+;I·¸'dOݼ†ÅP‡PÈ7(7æõO¬…SQIÉš]r‹ú*¢yOÆ-+r[ˆ[QÈæ"Ü"uúö›o›_U¢ÞƒÈt[üýÔyÃm321OÛl[ ÔÞ¼³ùpå·‘m‰Á·`[(Ns °-ÞÜ,>íæÚ6Ð¥žµÅô W2¨¶==‚án¨ídÍ}ÚLÛʲԴÅp¦7ê Ú6…Ñ6yZ5Ð/EM7Îo“ ÙBŠôIÐl1qò’O˜-˜kËQJeM1A +ûg’-d?mƒlÐϯή%ÂØ~¼d x,Š­Å° b ér-Ÿ¶i”º¶˜YÊØ"ëšÞOüZļçØøZ¼·ìazí‡PU4zÀk‹`×fÏß®e4^¨“\ -ÈÛ· ’ +[‹š¨'}¦Ö‚õ_´I»GU.~¨>™µ’Tô²˜µˆTºÇ·Ä.Ë‚åƒnh-âø€›Z ƒº˜„ôÅ;þþ8Õîåî‚ÖB¾åX0kƒYÈZdÒ†³›X‹Õ=ž¬Eµ8ô-Á«%½¡ÎW‹ +Ž…iµÍhÍ€Õâï>nTms>HµHY"à ZâY W>9µ­ èÁi°©à›@'Ë6¥v¤•›¥ëoÞÕv‚„þ…¨…÷3µÓÍ ¨ÌSÿºñ´ cr :-ê<óFHä!Ëu±iÇP×Ø@Ó“5³}([riŃ7ÆwHæXÚøû¢Ò†1 ´ÝÓpÐfû«5鍅x´H‡FãH +å‘vý}iñf^¤YœÒ|7gÅ7¬T¼0³ˆ@’Ežy·T–Ùuˆ1;"©iÂìpš'x²ñµ_|Yè9ů^v$ݾEíÕ,¸‹.ûè5¬Èöœj¶,eÒ£~BËv÷D_dYGÞ²Á²ýÙźKÁÜŸ]¯+ÐÝã./A•ý0¨€õ‚ʾŽ0/¦ìûD© •—á$Ên£€²¯)8‹dÚ³ªnž,…6õۢɢ¼&°zô@ª+Ân–lQNm”,Eùoôæ’˜>Úí$&rL©(ب£ "šWR›¿!²Í†ÅE~­µEí4¾²ÈhB9üX®¨¼êh ¨4¡ni>PUŒdArÍa-vlÍjmr£c+ë¢Åý†AÕä&ÇV‹/p,š&êÌú‹ŒS`c?»1?|wGé¿Rcÿ㨱ìÚEa†ÜÁØáÒÜ™èÁ7¹›×Ô†|}±2aàž†¥„†ÜlÈÊU3™Éú…¡%˜É0ÏWKM/n’ éàn4u¦‘àŸsÆy¬#3þ‰¹ÏAa€À@,±`¡nMàòGu9›ôVÛ±ëƒÄ2ÉðXêp­j^}êCa»§#‹ëJ[:™Ž9ÒXÍ$¾ðy ë"A ÕÌð)½.uw‰ÌÂ`Ü +ÒŸ»Z«ìµ%¹Hè ¼%ž‡9+f”šKOa!R€ù`2Ì`)éØ•”?šÛ+–´»™`µ‹‹†…bU„ÀÇêÍÐÜᜅ±¤Æ%0ŽÈÈÃýFWv1^z·*ëËVƒ¤°Ò+©wóÇôÝØÄžMô'\Õ]°røFÇëÂöm(5›\†N¡bÙ«‰êp”ÖÚK=ªÍݽ˜˜‚!Sþ]õw]PLZ‡Z¼7vUzÝš –·E{(D¶iy£FN ÆŠ~’ET|öjÞõâš^Ë´ëJ×q¥’´áÃ)Pÿf¶l¡¿­´P€·¡ŽÀ{¡õq¶|\ž£ù„w˜¬†®¬Ã}äcwªÃšWÞ^u7ëŽÑ"Ìowøâ%­†Ó葆Á߬Ôá/ª ¦XÒÂ1àCfa:½áU^‚šþ|»Ÿ2.¥ gl|m*uδÔɦÞî'†¨˜ßa¦Ô„f€iéü—ô0à˜gÖ—ìv–jÊa& +  c1Ò˜7R•e•ÍO×ÆÂ,͉´n¯ ‚{\4hY¢‰<¡ýÆÕ¡6žÀpÕ=óÐÏL3ˆ±0óÅáÄ"Vâ“ ä]òÉmžˆs°#;»…v…¼¸¡º;à7_¾&igêãXØFUäl %„Dð*‡Än– /|­…À=6â@! öÔvÃ|>>^~S59~4S‚´ÄÅSrkt"z ÔÐßRîáï´nÑcaq"0Ù;Š);T°ýc<J5ø‰áA¯¾ 8WúKÓJè4¦HW¾ÈäŸÄš™$-À7&!š¬åñûÖš'pX?ʯ½g~ü*rV„êíIzÛu°Ž1(jŠÙÅ• '˜‘‘įª»igÒ½Ð"•º¹v͆”@TÆ.u³¸UØÃìì6Jp@“2©Ìܙˆ¬Kìþ +€˜Ô†¶½ç83Åœ\vü­³À\CÍk¡3-eMâ¨öä‰fH^wä¡”ä¿YãÍJá%ºÝüNÜ¥ {°ÄA4 +!1¼¹DNk@ꯔúìkæD"7=ýCMþ¨^AD# ñôßý‚—ÏnQÎß=FC{ö1¸ú1Ã!°Ó% j¨ºÈ°|L +º’jØ@p¾z¨$t,eŽä‡ÿ€áñëðq[«,‰o~aLuÿ¨qî5éHòæ `9]b-. z’'Õ"xÞdfèX²‹QôúÇå€r}3Ëz`IY.éLj⎳—ﺯ-ÓûÈj‡FÌâÏa•Ìæ7Žlˬ¥z¢X÷uGöĖΧ;£Ð0“ÿ K‹¡ç ]å"Ü^ìÚÔu@+ò¤î]"5}¬Ùç[än¸+Ž-v¿®ùØq[¾Î¥š3]2 nh}¹šÍ=QŸö¸ÛI#~žMã²{›A<…\W1$$ž|M!œã³zƒtZÈhÓ®k¢'Zó•æîcÀÓ•Gp S.ƒ£¸&å~ ߸¶…^ ­›Á™©¿zX† }Ë­&_µ¨-ú†c)^Ù¤³¨À…H“±Do¯;Ö -üdÿ5üž3,d¬½î²Å=×GÅ$öÕ,Ê-ÑRd˜|÷^×Hª?ðj®Ö‚Ææ*©F+–8du×c»s¾{ÐÒÔ_3Æ +ü­ ùTv„ÍfÉurÕêÞQ×@8ü£_xÇtS ¡¦°”áÒÒöÚ¡û dQÙ#ŵÏèjTsÕ¥ï¯3^?IJƒòX½fUmgXxÏ6;(ÙÑuJÊú¼=Ü[dWwß›ÄhqÑ•ÕKi¢ÅFbÆ/i®zÛ’>2=ŒOÝy ú@*–}¡¶4ÈX\Ï­¼–X F⓺Kwöe$‡»²L1ôýÉÔOâõªˆ`Z~)ˆùb[³oÜ‹èÖbîG8[—7¾l žLŠA*FÉö²8V¥2ØbMÆy£ú(P¦7é=\kÛ>nûô—…Pý JG m¢®U8œõ}#÷ň€5=0{Õô&%É{Jù ÌMÙ»JRHL×Ãq¼R•<0û¦,\'xW;‹ÐäÇE³,?H"³ŽÆE£x?¸ÜÔÝ¥­¨]SIúbÜ$J¡MVzÓ‰ØC/ áZ4cYA×"çÈÂöÙµ º¤ÊéÕXDÅ5INnÓ…/¦YÛå=_•”- >xÔÅù<‹eA“Ø5móðÂ^mhÇÀ¹ZP9¶ø­ooèµý+$× Å0±gX[‚šÌBþ¾}®š×« & | ?Qdp¾lÞÜ8z©ûÍfH=nŒÀ›Ö6L€¥ºsâþ›â´‡ÄÏ!KÝ€<¾ª‡EX¯@HM˜ +Zêk_qà®ÑE§p¨DÂ=妮ˆŠ«R]}‘±'lº8}hCýl +׬á¸&ñÙàû¤§ÂP*C¹¹CñL‹wýp ô“¹®.ÀXÕp ¯œŠd. õ|Ø“ñ*2]ögÈ ’èáì–ûÚ K³ +^2 8k¹Bõt÷›b—2Ù³E-C㈘=ï#ÖTV ‚ÕT£’&ÆywUò˜&þaKøH’óÖ’=)¼ˆ#ɳYÍþr_‚g˜{µƒÈFÐÅï=ÆG®Žâ°àÑy¤<ôP»U%yg9‡¿‡Âɪ¿v6Þ=-3YTÈ" ñ68Í·­DÆ©¯  ¸E|á`~²ˆnbˆQþ™ôÔ´Þb§„5îÖ¯²îC™u¯,šüY7BÈëÙû‰ï;ïžzj¹½…k¬>¼èx»ÚsÁüКNùðòºFM÷ªÒÉb\éZÖ¢nµéó†+}ÓÞ>,P&ÎwyŸËŒ 4=¤n€ê%ù^~^ìµCFygBC¼ î¥†$ÈÓ¸]ˆ¬å ºe̘۳>ÊÉm8‹+PÙËÅÒ•Œ/n+ÒôÎ~|rr;| +ë+þF)´Ã€v®£ÊT*Q4Ô¸ 0SíI.!éïL± Ü›¥Æ@I%bx×'ãPYRg\0/Êð¦LÉ~ª.TYò$jH?aׂ (Çl¡] „muhØýà Ã Ç¢Svy•ÍôÑ©…õ¼Ðªþ&ƒó¥iÎÀ†ìa¦ÓÅÿWÉ(qÁŒFyO×ýáÁ·DI*üc +Z;4ÓxZ¦àÚ•xq^VÒ»™sžâGô”ÊJ2ëBw„™/™èSÉ> É'ùÈÏ(aˆcg ÙÌŠYÃŒP:, +W£çV00Áe¦½'Ð\݆ÇÂÊgòGÓ´!$d™Š[œeMʪ3jÏÜß7Æ‹»êËq¿Ù0oÅ×wÕ Q (pÒàô*fÃÒÃë‡UñpT%>LOa ¹Ÿ),IèÍuïȘ~S¨1´‡BvÅBcÂ>ÿY`Ž¢Æ +GO A*F»ùŠâQ÷P'"ÀýF:ƒXX6¸F€QÛ–|B4ž-ñÕ«ÏD1“V(=Ùm™À'X8¹CÄDpÜ벸ØÐ1A?’鰳Ͷ5XÜÛ"ùe†÷¿[†‘ö¦öY‹´,8qWŽª@iŠ2ˆ—rŒÑºTÜ¢[€]ªY»J˜ýØubßÞ'+£ÄèäŽEŽ®°,£›ê(ìÔÓ '^}ñ– Ü8Ì‚¡ÂbL¡uŒ!ѹkϼ^#vû˜ Òá­©‘íÂØÃ7…¤(<ª'$*94ÇtBe¸ÄÚ<·ñ™=ž @®™kDûCÙc„sr+ö8.Ú“X8Þª/šÉÉÇÕM¦kãïCò2Û(önK>¾4vfç­Êi:©£³J˜ó„ˆ9¢ýÞ3ÁQJÇ™4ŠÆôè{ÄVµde¯ÖÏøð’;‰gL’þ6e¡6”ßoeR +ZÀÕ €3-u]¾‘©m.Ú h¸ Ã(èºãþËÓžÑbÚÆü¦ƒC’ßG#ûPø‘¢’€ Û›Ð]™¨õî1çÁâÔsçŠù· +–cÐ,ÑÎ!aQuÛ(G,ÌòX†ô<™ªt÷q_?JÎ +{¶¿kþ†4 Yj+ñ®Â7zö\|dÄž2¯Ú`ï‡îIlØUAW©Ùƒaà K{´Í»JdºqìlÁcõWŽ|øÅVô›óøÍ* +rb3áF‰Ã*-åC¼jΉÓç6ö©† ÌaÀíÉ$D:ùD'‹ä•©1&­ÐÌ£¼ƒX?Ë|†“‹Ìêa›Ù<ñ¬wˆàx)X®qb 5§%_¬÷`y_§Ê©Æö®Ö‹ÂÌæ=¸.ÂÔ8ŒU"å²xÊFêÞ£([s +CÔ…N$P2bI­kžxóî4}¥­jøKÁæbvD¡1_<¯ªô¯ëÊ3ÎÍC5NbÖ€üÍL‡…‡øÍfŽ²–,à¤ÿ(áædö+{=ì"TkÒôÌ\TѳáΞGt°É1ÃonŒw…2F«‚È +^¸ùÀ­‚8Ù÷ÌÐ/ÞkÔ EU¬màqÁ·E¹GfèåMÜΖÎÑ¥â¶LqGÖ†/ÉWC–õ§~ô^Kë Lu­Ð?^l­3PóUÝÑœa!ì )¹ˆP0]ôª\Ò£yrƒØþzÂH¬ÌÂß,S‡Ó·è}îx;47ORÓJÆhPîð=LØ“úÖgSWvzcòüΤº8ÇÞÏ„’!ü¤´8kã‘9¤,~ÈÊ%dyè•ûŽ {„®J¯tÓä¨J©+´ 3o9jã²7PšÄžG–aƽZ€™³±šÀç)¸cC&Ò˜|=QïÚ kÊž¡ò`ý"N§`ø¡œÂbŸ«ÈMÚÎfŠ ¤)|–ËLPZ`¼m~ÜOhÚ `u>Ïè ®½Ãâ;\”ØÛe·±¨Qû¹,ŒÑ/ +Ã6WöáN„4ûä:T±˜4¢mãHW+ÝJ)”ÛDÀÂÖLŒ(Gh*%âÕGÔiDwf„±_oÈÖ°°óå3‡eìG5¨MunbF~ +%ÑÁ +‰ò ëfrH¡ d_‹jîeø|YšF‰³C-ªVŸúxñÑ8YTÝ¡-Â<•VhT.O/±Qt׳Wö´æ@ W+:]µÁÁêBWuù6̱ks¹ˆ[•WŽ)®œß<‘”q•Mp„¹²~ñJ…¹þ,Š½âµÉëƒyÌ\Õz nHQºæ/¥)Ù…¡œ{*ã3ÂMdM7ññ%G°°_ÚQ9Ö× ·kqh¼““'TH­6Úh +“N½›, ³7ô–‘1Ïg¡±ÀD¦™©<ÄÐ9†ÀÂ"øwš•H¼Ø‘ª)œ}•Àˆ–˜¾¹ç±Òq{# gÑ©Gþ¾H:•°èR™îr¯ž¤ !‰ÑN”Ñpt ‹c÷†³»€˜3œ´Ò ÞÙËYûSBšê$?›ýmƒ¯A³Rǯ¥pŒ€¦daQq°sì¿×RWÊ/HhŸWÿÔÏMq1½/ìähÐMO° ©y?|{ÅÍ´ä~³Vâ™ †W®Ûp.*xbÒr„©ï¶±ÕŽP»±UA. +£ØT?AáJ–‘ôË%8°¼ÏN•"‘ÝIÎ2KCh\Ϫ!:5 s_høÔìËÌ Dr$˜ŽÙ­Ç+âÓØ/’ÍC³-Ls@dÃÚüüX HÙMé{WǸ¨4f›ò£‡”ÆyX—?–§=C“ô)QID"Ê:ò”¿Ï$¶K/’Y¤ÏšQa,•ƒœGý;sOs½Æ:CD¨|Xöb«ë׉4}EŠ)%€Šgš¢ÒÖÆwðq"·xá6ÛˆMGôÍ}é {“ã×Ì]æåxK_kOÆ^»Î…‘VìˤåeL¬›µÁ]×x¢ƒ©³cå5üg®ÏqG¤Xš-:ë¹Á‘¦SÔ\²Ë\‰®Cãu¥ZqÃe•CPr–àf"CíU ¾—º3X‹¦ +öM.$¤aÍþ«B®8¦CY\u‡ªœ“`azv|kW)Xû@UKg91]S5û‹7±SÈ«†;"Õd)<$Ål€D1åòÝáT|CÔó®µÓÃ@ Ûbpýéˆ-,šL{¶ +³I^ÌœLkõ…â7ø¦ÖŽOd”aÙiËÞíá"™­¶e‹$\+`( íÖ.=ë‰BªÇ\)~” +¬¡øõ5³ør³ý(ÌÍ2Kåc‘ñdÈÊ^ Ô¬–²úÈAbÂQ„êËlõ*}Rª-fІêߥ6ÇbØY,éV¤~1?Ö0°î¢×®¼ãkn”‰W@oñ†/ËÅ,'# «§sñôšµ +t%ù0L$œÂépLEC^¯ ¡¾yÃÜšÔuêåwîÊ^i:úì +jžXÈh6L#SÖÒ=ý«SÉZ¯%ÿ&噌¸ÿ ýwÌOŒ¯PÒÖ5üoƒ>RêàqJỏÔÁ#aŽ…ÇkQÞ¡/x_µ©ì}p*§Ød }aé–ì§å­p©¡ Fº¢_—[ uã‚m@syðå.{yÙÝÅ`/%ÈhRS~Î3äùËù„•šÒYµÈgþƒ'A Ù#á:³J²lo9w¡wó#ÜyÎ0þQ’–ÖÍÌ/×ÙL¶D’&1äXU6G“ˆ7Ãïë[HZYíðD×Ô7)<È Œoà;¶.Žª^®wå*Õé!v°O=Nû?ðcdxTyÛ­r„ò4«*í»‚ÞÞôÌòR™Â¬’¹>\í€p%ËfñìXMj†¿ƒ9Ç›k3ù4}“DxÁCÈŠGM Îœ¿ˆR˜éá3{?$Í ÷±Iq²ÔkvÀߤºêyþF‰ÉóuÔã«óº#œßAM?¦0ì=ú9ÌCN3\¾®Å6-ouN€À)ìºÔ` V2Å–·g·Ôé0ws- n–Žµ]ôJwªÇÏ|^wVæÝt¸µ9×D‹Ôøå÷ÜÐkVÀi¸2Žh7—Û +p\³G_ˆu©âqI‰ÉDa`§s¯k¥—ôÎÃLÑ>O¯ÓgîöMîMñi×ÇùÕd%-ìN‚¾ +’ë ;[ïe© »Ôñüg5Öx«]R†ö{ +b‰ôW?ÉJ,&m§ŸjWUWTk=U®ÔYBV³R,|ú04?fÕbÏñ¦½'Òœœœ‘Hä™]¿©LW¾Ðb¾#œD]hq°hDzCÇkŒ1KâCEß#ë« ðŒ©Ô4XC~=E·DX[/þtKX¸š@ä絓´§Q®Ô5ëT€©«ëa: Œ0ÔÌ 7¨ÿa-Þ_•é&æî²»O!3PC£ä¸ µkO±Ð‹é³ìf‰ýØœ¤xlBhpg(Jˆèa拪‹úã‡Ì¤’‚oµ.e¬ b"ÅçCwŽáJŠÁ÷“äthÕOßWZ\ÆmVŸzúňi.¤ƒ¦^r¸tÖR¾I}]‹5-s²þ‡"§R}v|¢ÔþÊçßu ™úãÑ­™ålä=ø‹Y‚HUc=4óyAVˆUÃDÜ ÉÔk£Ü/Ÿå•”«’@ÂqÒ¿s Á$=´ˆÉJ¿Rä‹•õšÄ…›@@öá¿q݈`ô zâ7^|Xv0ñ™‡™’‰v‹ˆÛ’‡bÁÞu™_×¢C”º”z-¿,¾ÿJ„u&¢B ½èª(e·¢&š·˜€6Êí³s£SAmÒZÄf7Gf« ÈÕPU¢"ŠÔ¢Âèµß‘<h¥O¸³Ûj«ô—º}µ„¦‚É ®&ÓLAJˆ8û½cW§‰õ ²1;9^Z¤¦±=8¯²/•,~“¥iø%n$¥Ý>ÕaÅ >ïg÷wxìB”†B’¤€ tWå¬õµH½v¹X%ä¦òˆª±A¯¸Bh”;ú«åJØ¥dØji^ç†éË3fËÄC`X¼kÈw`®]¡\EÐÓ£Ø$·á+åZ:*åÏ"·É.~‚ñXÈ¡©É\7,Bvˆ â<µÒÏ(öJñªûÃÊÕçMy#U@Ï:4IÄXs‰(Zx‰MÖŽ +ÕÒÉÏ9|‡ÀBÅ ,<áÜ•^»ªGÖ5¡*Pn ·À 1lØÿ&-i +b‡zØ=`7Ù¹`Tæ‘8Ô4òãE†ÂqÙª¯ŸW*}†‘Sšáñ÷Z‚¯DÅ«r©Iò HZ0bÇFk\XZ®º@¨Ì!ü6«Þ• ¢s9â9±nª¸½Ðb›fdÕ`ùµç5LÔ îªL¶uOÝOw™l­1™›ŒÒÎÂdu¹àªfh2×W€EÙ^OHÙ´,ÙW*'­GR.žá¦X&ʦÌP4ðŽ(į÷”¸yŸeç –¯M¥cL÷ïi˜VYì%t¡Bkn÷E]+ÊYY ?v»t&Ï×Tßs ðŠ@¯†ªaÙºµž°HðQ)»Rô9ˆv_–‚%‹´§tW³2-Ìê:žK@ ‘&4©ï ýuÜÄÊcïqÑÇ’hñqÙ4­ ©–Måó…~ÌQ›%l¹çi=–qø i@ «S«MÉ»“ÌÂÕ¡¯æÒ41“üImñ8£ã+þG¤LÓò†¤V‚ß[Í7È•à †QJ:-MVVË…ùxÆ|éé,U»ŠîËvKÐД³ú È=Ò¹ +lzCZ8<áðKûÂÛÀÖð׫œæ0Î)±‘ ¡Và‰ ïÒŽ Ùoœ%NÓJ‰eAìíØõ:¾ÇôÉ!_B©â¬´³¢a±·9”«Ø2£Ð”àiõüû9ÔƒËÌ+æÜ;ueÒAë™ùÌÇ€æ⪫×Û%Hh ªaÞNu1p Áõ×Jz6“áøÑî]wT¼î’LÄ’ÙuˆU“ A+k¦3VzsÉÒV¸SÈ«@YƒÊÅäÌÆÆ{¿fù¶Á½~õGžšf`ÃÇ”gÿcü¢µSSÞRæwa1ïL*(ìy0ãÂ9šCd%\‹ˆì­œu§”Lc3Š%,Bæ )ì¶*|öÈ~øîNßå ÿÇqУ¸âÆ # —ºòìŒh"œÎ€!舣3¢r1ÐËtZ8è@þÏWm¬%¿ÌÞE¬,3=ú’-þ9€lÇtáÏóT2wÑÏÉä¡·5üÓãÐÅ>ç~Iõ: âðÝÞ©.yª†ïâž×'¸§Æž#þÄtEPϛŀ7ô<Ú-æ9[8÷JiPµ²î&žo«çÕXï H’9.Ü90RµˆmÎÙ»­ì¼Zâp³Î™ͪèæ`RC¤ó3ô :‡ÊW$n؃æ¸0笋¨B2/¢Aë®bÈ9JÌ9ô㜲‹R>!Λ«©á}ø²kЮ¨°ó⛳WŸ!èÔkã(yl¸y³ñf›Â×ÊF›#Î¥FŒ&›c1Ù}ŽèË\uy7לµxJ2±ùŽP½Psô=*–¸q.Iøéª|b ³:éÑœ“ÿ+Î9欖4@žÁ¨ª¼qæQ¸xæC[0sþ9õˆ6jÅvJPe.$¶P$™÷*ÎÌÅ1ïŽÄ,ŒùÇ∩¸E1Ÿî yC̱ê`?Í`˜Oµ› ‚ùLZrÞs +´]3›¯`Ð˧›Vßðòñ:iìrÐ6^Ö.ïS¬³›\>‡zg/p9«ñJVéËì "4åE†gc‘*¥´ˆ÷ÈæŠ>np9,J±\àòD7<…b–ÝM¢QP€Ëi‘Xv\x½×kë—cUþ„0©4¬Ÿ˜½°å¨‚dš/°åhâí[Î&( ô]Ür™‡jƒ•9z’+ºQ€kB/n9Ì]Eæ–³AÌëÂOï¨øìÅ-Ÿ†ó/lyt” +j9ŠUš—†ZŽÉd:dÀX·i‹X>GèïN`9¬LͯA“žó·…+Çù4Iwõ7º‰+.dVùì&¿†{vç?.R9ÐL2¨|4¦UÎ&¦nHùëÖ]‹Qަܽ…(otrhÍrSÊ9៼IezÓÉ›£€Á&oÃø×@“ð~k僑¢¶=ÀäÑ;6¸änêËÚTr&H(¼4”ütn0É[÷Ûu!É‘—R$ÌÉÙÖÃÙ39ózñÈk”ÂŽ¼>¡+µ²%£Í%,F^6Z0òõ\Á"‡¡·þíF‘DÎät×WFQ3Ë„8@äX%kæ¸ú@‚SUSÆó#ÈüÂçw—R‘Bž9ÑÉ#” è³ã¸¸V­Ã1!ûd£Lˆ Ò@AÓÌ'Žã€œ¼™G‘|rYZ~¼5g'/ú8Mäÿ|¿Ç\o ÅÙù1}"·rÊk ˃;݉oì8Ò?Ê8›:^gÄå G‚ÑÕ‹9¬9ßÌ㬚1›a6óŽ?_t0Qâï(f:q NØx 9A°Æq½œK5¾ 'iœ5£5mÒx{\Ê ñµ4g¼E#³àŒ·(§ Ìxs÷Ä‹2ΪنNJR9$3Ʊ’Ã'b'Å{„q :Xå€ñVü¼ðâ0êÛ4_Í+Æ‹cl¢4袋“÷Bô²áâ‚2èpqОTäu²Å‘AÖÈn´xmVèY9Ó‡Xœ"—G[yTEV¼Ä\|QÅ¡8™â5D/™¿ˆâ%ô0G?[Õvš'ηÖHlœxF1NÒ~"䨻ãb‰ç©ÐÔE/̵JO¿£0ᨊ%ÆŒK1lùĈƒ8 ø½)ây Ä 4¿Ý ñש¸0>\§fA0¼ºF²ÕM-‚8WxmÄߨq?üqñƇ»ŠwÓÃgÈ<£ÍŸÙá‹þüÅ ‡–>aÃ1O¢)õ†W6úUå€êB«RË3|0þݾmfø# ÙF†Ogwnbøtr2ˆá\ýl\8þì#}šî³ï ÎÍJ>Xáh>jœøÁ +wXp¡Â_ßoRø2\ ðe Nøt¨#èß I¦¾ :Íæ¨ïÚÌþôb„oÃ_Æ „çU€ðx-/>8J )Òƒc©ÅþRAýLõÇÈ­Àƒ øPóƃãg«îþžYÊƃÿ†YÀú¦Íï¡cÛ÷8?å¥à ðà&q,:xäøÇ‚ù’`ƒO:¸í[°Á1<òíþq&ƒ?üÑjíœXÞœ¢÷\dp¸PuŒÀ\|Ì–ÐØÐu¡Áå:HÇ´Éà((™rƒÁq¿’õ—> Šëo,x6ÖaQÁKVÕÆ‚‚c0“êd‚Cäòº—†tè +QZ³ºè‚ûZa*±»ªû*X.8ŽVš\.Ô +@LðZg Ñqs„ìbÙ|Ý…ØÖ]/‹$ÉçíùÛ _Öà€CÀÁ +ìÀ€ó>¥ú‰NˆLé^\ŸµàØ‚‘æ +NÀ¡šxúØp\€5» +Á+èßeŠ,½àß”éÑ=Øß5dEþFÁWOôº‰ê üJôU¥õ}Ìó ¤ì2\Ôïm5ô»MËE‚ùýÅß¾:&C Oæ·ú2õw3¿©ùcAc0¿©xdiÀ‰üÆ·ËÐÂB~c;ŸC%þ4CH'ñ›Öt`»õ®ç¹€ß‰Åº­~ãe#áØóU¿ù÷0Xú9ðù]ZÛü†¶S)Î~KLU>¿‰Ð`ém¿)eü2ˆß(1Ï¿iûÙÄo>§þ¶Mü¦ä†©À ùM™M+c!¿©°a +ßÜ$™’~@üPTÀÐt ¿©Â}Z]Èo(ˆ„’¼ß”ñ‹áläw"‘™¥F~ãªøB~S¾ÍXl ¿a!Mb1¿E£2íüè*™Ôgk!¿¡žRB3ßTB3Î}!¿)“c(7ßlÂ0®‘ß4ð¿ßؽ›øMÖ|‹ø k*oä7.KLî@~C‘®{ ¿)§R^øD~³gs|V,RgXLyJ#¿èhÆ +¯ê„å,à÷lRñ.Þ71ªEèÁûž-ê¾ üæV}ã¾q2W/Ú÷ñ€ ûf81æ€}ãJ¨]»aߨ‹Š°>Yß3™€¨o2’U’´@߈»ª_¦9ßÐç¨üÛ˜o +v²BÚ›òžðêjÈ7 ¨šñýª1àñˆ ªºMøfÔ‘JŒ |³¡<әᛗ%S”{Ü,l¾QüÖþí|O—/¾7›¸;ßBú$;Ì‹½½áÞ0×€“íã(ø,´7Ï?’.²w¢Ž"m¡îC« ´·æ÷ÎÜhoùŠ;Ù² ÑS°ü ŽúÛf׌›íM ZüÛ›† ‚o¶7Í,Ô +¶7¢Ž yÇgBmŽo7ÛÁmj Û›%*ƒê”óó¹àÞ,$¡V;àÞ(Ì<-àÞ¼KªC=áÞIà€ùmÁ½ÙÙÿ€{³¦ã1}gýY\³¸à€{ÓÂàRÀ½iQÎîM•­$V¦{³©TsÕ©T$ o¼®±Üxo)oÉÁ7Þ›xoÌUê$á½éÿ¨)¦ñÞ[¢xoXj@º7Þf9'Æ{ÓÀhà½iQ²ïÍ8kgM÷V ˜DHBðŠCÞøæÒŠ’– |'¢šÝÜ@XDg8 ß2ó[6á›S¯ß0¨_ÇEøfW +,‚ð­Åƒ™ßZP—¾‰ø›ð­B²&àP]S±?ˆo®u†™ ñMAºZñMͺ>#¾iÑ×p2¾i¦F$ß* Èf)T¯ß …8ß*е(‡Û2Ý]€ˆï%ð¿ßô!Ù<߸oRGâ[±‘Ï„oHT†lÄ7ƒ#œƒñ­pÉkÊb|§Ý¾ÆŒoG[Æf|3B3‡²õãJåÓã›.£Òí±êÅüñE„´/Áød±‘*e‰ø&/¹5÷F|3¾¬FF|ã#Ë#ß©EÏå“ðÍR2ªƒ‚ðÍö‘’7™ðM÷?§ú‰ð–’!ß²l¾÷×uñ¦À¸üDÃâ{#ÉÜaà½A"°Ròg$uïâ{ÓLé³ùÞø)ìð ‹Tøàf)¶Í÷¦AÙI¾eaÆí|ã7Ù§,øÞÈ2xo¤¤¸ñÞLˆ²b+øÞóµ‚3¨Ýù" ·éÞ½D~ØÖ7ÚUÛûE™½ã¾í ëcô6ç„42Øzñ¡ÈØ^°+Õä¦z¿QŽ›½Õ´‹éýº©úBz÷ä„Y€ºÑ±Ðô&{ÖmeÓõ&!RrêF +^ÚÌéî^éÞ˜n6ŸuSº_-Ü£û ê…èæYÕ èÆ}fñÜø»Ø!nÇN‚)œû r°¹Ãl2÷)Ús÷H_…{ –K•<›Ê¡0îm5/&÷x-¼_›M3øƒÈ b3h{¹‰uó¸ax}+‰ã¡r¹pÜ#àAãFyÓƒãuœ]\O÷dÔ¼l7VÜL»Ľþ¾8ÜÛj 7x9Ñ«š¥l£˜ŸxA¸g0©‚Á娂`p' +ùÝíp3¸aÖâ'z” ‘sº²ýX[™­½{ACŠEX ¸aé¬7·á§0¸1Çjî÷¬Ä8€ë!¾ûã‰kYømžïqà·‰CAËÞ4ð2yåÁß&ae®”):º_üm>Tˆ˜¿Í—£ñ-v²óæo³­h\…Âêð 9ÀÀýÕcúaySJ7#¤‹]nš)Á·’%oà6j r"¸ +£ )ÜxÈþ #¸Êäër¸qT‚î½.·¾ô¡iöˆ³o°}.¥÷r”©¶}í¸´;0*ÐÍ"pà EC¸Yf«Ö'W*i]¸ñŠ“n8ƒÒÂ] îíøƒ›ïk¨IDË â£+‰¶܇٠nö‚f¾!Ü°HØv1¸ÉΠF*܉ttÔ­a;ƒ¯°õ"fpSX¨Ra3¸ñœUÂ}1¸Q³GœZ ¸Q»&¾ Ó§»<Ýnã¢sW ð¿9¤/ ×7›#ŽæÁßfàHt"´4ËÅc4»S4%©<k˃¿ÍÍmü6£¡,Ç +ü6ž<㌠¿=G Òú6ªŠDÇ6|{t-œ{›UF<ù½N@By›¼ (YÞîQyq·ûë¡3°Û=*¾ƒºÝãS:©ÛXM#¶ié†rC:q»·àq¸Ý»«ÉÛ ±Ÿƒ¶žA¹ƒ¶Mݱ †m¿pÞ¬m Ò– Ôö[Ü}É m2ÕºªÈ7g›M¯ñ¸yi8_Ç l¿%ší7Š¦£&rEó,X8Š ©`± ÕŒAØFºŸV¶A¾£Ûzñµ‘D$Ö:ðÚ@10âtíUº\J¯^BN¡b8’Ö&Ñb†P5¤Ð'‘-`m¶€ËesµA~¦êÂj£ZY Sµ[ófÕÆŠ˜SV®_‚© ­U3› p¨±„¯<‘Ú˜CØo ˆÚ­ºùØO¥¿O›Ë9Ò0LÅY‹ŽàiCþÂÙüÂiã*ø{AÓnc·çLƒ:3ÐO˜vëþò‚¥Ýbr ”6Ψ¹Só˜sXS$mLTýЧ¶áæ&F~¿¢ ¦hãì„Ü0Dª¬‘æÍО±Ð †ölѤÑíù:™}´!‘VѱÚóõÏ?[0Í0Œ­~Vk/ó§‹ CüÚFg3ÃÂ…E ³#²ÈÙ¦‘¥r³G¦æfÏ 6{Fàý¤f#Ç£Wè]I€@7„L› (*þ/j6ÍBÃ[—È-¶\Ðg5!æ¢fÃãR]Òt3²ég÷ qàÍx£Éf£õ迱†£eH6'ÀùÖ ÉæƒF÷¦dìw.(Ù°HÞ”lnCÙÖEɦ™,(ÙöwS²©„Tç–³ú +Ož%:#Ž4‹’ÍÜà‹’Í09!AÉf…3U”¿†ÏÁöw7%›K¯tXgHF›º "{[ÿBw$Q‰ Èþ²ø,:x矶v\nÞçômá±ñ¸ËÐóûu/ºŽý‘»ØدÃÓ =̺¸ÉØÃáÇÅ·viÿ&cx/0ö`°ïÜM$ãEÅ®ª¹¡Ø(Ÿ£dËLl¾/- +FÆ/"và‰º3vA™Î®¾xØ0C²Õ]ãë(`ØÌfÍò‰…]5´XØ0°ÑZ °Y<à ü&Ò‘1Ž5PØè€Òg:ÎqÆBúa£Pƒ(ßà`’ja°K4¿(Ø|1"l +ŸëØ l «æ À.-üNó¯K´zü5Ó\NÉnú5äÊ’~ò‡fH6C‡Åà“ } #ñˆA¾.!W ð5RcˆÒÜÜkTE3fNÂÈq(ê— Å6"ŸÐë¨Í`^3r8ûF^C™ÂìõE¼Fþˆîz¯¡—y½ êµüïÆ]¿OP*M»Æ~ ÆìGfðïb]7kîêºEËÖ ]7Od7éÝ#£AÒ57L<šsÄx׿ï9—ë´Gß–ÑÝü«`\÷¬Zü‹p¥c;nÙâ[c76¹ðÖˆä(£iº5\rõn  jyN¶5.øu홶TÓ4ñƒ:‚ñì l­Ú¹úmq­©jpš‰ÉØWøjýF#˜`Z/f@ ­_ÃEn¢5{çðhZï¢nó¬‹ „oœu vgЬÁVfÖ3`Ö­l4ïbY“]ÃH-Úâɺ…÷YÃZH£6Çš8.Œ±Æ¯± É…±®®?Yk¸uj)ê¤(ÓêS‹·Í°F…ùê@XƒÄï.ÖÅZ¡`]V¯Gó«Q”"Ö©ñÕDÊA½éÕ ÷ðêÒcntŠ’u/t5_A Û8ë€óG}z€«¼ýâV£ºN5˜.H*Ù³–¨Õ91S·Ï.SŽ€³‰âæÍÔúñ.õVçW ‹W $W£­êE«þpXq¹aÕÕØÎ`U7Ž´*zܨj6Ð+&KL¬R5^ðlÚôU7”ý=u—Zb<íü¢Œ©FÔê1àzSª's³éÛ‚TW÷Œ_Œê®êØOˆê)uZ²'DuòÔ„jKgo>õàBÌVLk’ +cÍ\Ý “ÙÉõš%M)Æ §^ œ:BóŸÐÔ­m2unSçè˜|s©_–l,µ–‹JÍ܃j7(5.Qª‰e´á°‹H÷#”±Ô(›æbG—Ûë}4µ&Ú4êb+`Ô9<…`Q³¨ßCñBQ£öïU**,Šøz.5*ï Ã>1ÔV­…º1æ6„šë2ñ^j)]zÙjÄi?Özï¦PSú„eɵ(~ Y1K­.›ãüêµÿ•Ææëò P×Ꭵ¡HÜbP·"áA D1”þ8¸!!€š4“jê õP`L%ÎÍ“†Ê”™Oã¤!'å¼hÒ‹Q0i"0™“3Kzø˽QÒ¨ØJƹF1¡záI†ìˆýIÓŠÉ*8ÒàgQíbŒô,ö/Šô<»i½!°»§ ‘fbþ„1´ HC^ ¤yoŸñ‰=‚|øèé•Ù¢G³v’8émhøBGãœæ»ÁѳHŽ|s£ñý±|0°Ñ3J‚}g3£Gdˆ=œ[|èn`4d¼bR› bÛÛ t¯d/\ôäæ°"£ÎðzÀ¢)®õ+9¬Ç­>ÁßÉDé!¡ˆkÌOP4’cQh.6å£tÇÂD#ÏÖÜ×pË^×$ú:»`D/Ã…ˆÞV¢_¤˜‹ãd ñD£åÉÇ^Р°+P˜tkª o84(]"˜ %“0¢FCc1•Ó'04d©¼› u[ð£ùÕUën*t³zdA¡Arjm#¡{€Ê"4„XÄ|šë;×ú±œ`Ù2>á é¿¥¶iÐZ¿ÍUsÏŸXÐXaOÃ¥yÇa +Á(èjéM‚¬+ΟKdãú³KôÃwwºþËÅ@ÿÝùWßžoïŸþô/¯Àÿð7¿ûïÿêçßý“ŸþæÇŸ~ÿÇßýÏ?ý¿>zýö÷þÑïÿø ›ãÿþåÿõ×?é¼~û‡Ú¯íôOþæ§ÿç¯~úÛßýÓ?üí¿ûuŠõqBÿ«ŸþÝqèUèñk—ñÏþêãœþÇŸþê_ÿ›?þ‡žÍøë¿ûlþÙþíï>žÂÿð7øýÿÎûÓ¿úã—­Yÿ1zþÿžùÿöWùÇó«Oö~üõ÷ÿQùÝ?üý_zg ¿ûÇøý?ùxûþøñþæ7¶ÿƒŸþõÇiÿòçöÿ-ÿmèßþÁßüû÷oÖ±þ›üÓß~ó_ßÒûçÏ·¿ÿçö|ûûçöïñ'êûùö?}ü×ÿýaûÛoõÛÿòíÿø?Ÿoù±Ç¿ø§þg¿éHÿuÌ£?ï¿_DÄà·0”ù!øëö½{ëã¯ßã‡ÿ×ÿùy˜†{ ¯Ëú¬rQ¤Ð!XŒécYù±¶Ã|Œß/- ¢|á㧀ٮƒëÇ)ÀÛùš~–½ ¡µí0VAÈ>ŒŒ*ÕOÆW=Ô¶8Žß¸‹BŸñê>}„®{c‡½îÃnã}Û~œð>ìqi_îÃÇþnro^+°LÛA«T09ÿá¿ÔŒ|,´‘ÁG‘ÖD,noz¾ý/óÃ3î Ôpx»ºÇ=«RgÛa„¢ºâ¶qù˜ÇncR^F×wØ¡8®Ã–ùá‹}¼×9„ñÇýª]çö×¼îø§škÌ-Y£8~9í>Ö,6Ô¾oúd´"jŸ¶í„«½ß®Ã‚φŠëëÂø㯜Û:íÿúFÿ]ot5c7ÂùXã „ꊊ—ùãfÛø>Â0ˆxÌã2„Ïwx@’Ú}X³aÍuða¼®î°ï[qvß´ã®;«š{ãAêݧÃnã}Û~œð>ìqi_îÃþ˜w›Á‡¯/po’ž\ç@$õóÞg{¯K;ìû>‡Ýwì8‡ëöö.Pï½1²¯ùÓ |ïsØöã„÷aKûr¾× ‡ûAÛÛò¼6f£‡ùé°Ûx?¦m?žé:ìùô¿Ü‡u‹Ž'xMëÇãÞÓú~1Žiý0^ÓúaßÓú>ì1­ïs¸§õý¸Ï׋qv¯s8ìû„—s_Ú×ûð oÑ}‹ŽÇ}x>ëÅ8=Ÿm¼=Ÿmßײ{\õ>‡ûíÇ}n¼^Œó°Ûx?¦m?žé~9§ÿå>üøÕ]©lhÒ¾¸+a¿<I>ù0¨’³²ä¶[zx–E^óvÂøÙ]97^ÈyØm¼ÏaÛÞ‡=.íË}ø.“鞣ïÛ»Šã¶ûqœía¼.í°ïûpvß±ã®Û»Šsãå~œ‡ÝÆû¶ý8á}ØãҾ܇ï5™îiú¾ÃÛ¯8Nc{ Ç Æëêû¾Ça÷M;ÎáºÃÛ¯87^ÈyØm¼ÏaÛÞ‡=.íË}ø./ðþ.PµØË×ñ!ì×'^zÉÎÃ6¾‚°|µzú=>P–êým†ñóøpn¼>ùó°ÛxŸÃ¶'¼{\Ú—ûðý—3÷Þßòqû«?Nø0^WwØ÷­8»oÚq×Þßò¹ñúêÏÃnã}Û~œð>ìqi_îÃw^ÎÜ·wÈÇ9ìOþ8ÛÃx]Úaß÷á8ì¾cÇ9\·wÈçÆë“?»÷9lûqÂû°Ç¥}¹áTÔž!ËôÉM‚ÊŸÛݲäÿv̶ñöâ¶}ù3Ça·çsœÃå&ý¹ýõ:í/˺|ZAñ$´ö8$Ûx¯^¶}ùñÇa·Çÿ +ƒûŒtžÿÜ¡Þøû¿¼½ÿAàòÀ¾Ÿ£ÀG¬/Þ¯Yc÷ß~=â þÏSb„} ¸§3Mf1ìž< õ2>µOF¬ùk;fÛ èõÛ}Ø&=Ã}6î™föþiã.ü}Øm¼ÏaÛÞ‡=.íË}øž3 6ø|‡1%Cr†º€¶û„ãuu‡}ߊã°û¦çpÝáaÍñ½ñ:ï>ì6Þç°íÇ ï×öå>|¯™†5.Ÿo/¦„ž?½À˜‡û!61Æü´qQYÝ}Øm¼Ó¶Ïtö|ú_îÃ÷Yϯ÷ä]Á¤m²›p¿‘v(îÇfãçWçÜx½ ça·1}ysß3y¶Ö:Ïôx¼û§{wçq£×#9»éËë³Îó{Õ¿øy@ûu§à¹Bùt}ÕŸokõ-ºû)ªsøÕSýÕ<»×9ö}ÂÇ8³/íë}ø…á¾EÇ—»³Òñ‹‡ñ:½Ã¾¯eöS Tçð5ªêS ´~¾E‡ñ~LÛ~<Ó=ÎOÿË}ø>“~’tóóí–±÷íucÄûönã}{·}߇}ØOÉuÃ×äú}nWr½¿k¹²¦ ?åÓî3yGû4Mlã=MlûÏ÷a‘ŸÃ=M|=·ï6\,׺ÚYü¼Äûµj`èÍéŠm´ùy‰Á ^YÁnÖþñ}6~^bœ¯UÃyØm¼ÏaÛÞ‡=.íË}ønÁnùÕ÷íÝ ãö’á8ÛÃx]Úaß÷á8ì¾cÇ9\·w/Î×’á<ì6Þç°íÇ ï×öå>|Ç`·]ëûïµÀq{Õpœða¼®î°ï[qvß´ã®;¼×çÆkÕpvïsØöã„÷aKûr¾[°ûðßèéý2>„ýúäzËŸÆÆéÚø2> ¨‡NT÷aþ»¿L™> {Ãõ±ŸÜÆû×·ý8Õ}Ð㢾Üï|¸ïíþŠÓØßûq‡ñººÃ¾oÅqظeÇ÷vÁ{Ãõ¥ŸÜÆû×·ý8Õ}Ð㢾Üïv¸oìþxsØŸùq¶‡ñº´Ã¾ïÃqظ_Ç7v¸{ÃõŸÜÆû×·ý8Õ}Ð㢾Üÿc¯ÿü÷¿ÿ—?ÿô—ßúç¸ë\èµ4ÔºðŽ!rJ©DùöÓþÛÏöö±Šz»ìçq~;ó{Ÿç÷ç^'…’«9‹@.Œö J¾¿(ãf¹Œí™MÆ„ªúâïS½qEÙ×—Ûà_ü­<Öêâ4|ü•ïˆ“AµPʲì,ãûñ%ùwQ–!c+O¦Ž²N¦£ÞÖ?ŠV©¶vªÆ%¢,IÆÔŸÂLó8ÀôŽNa=„âù°‡ÖÇ©óŸ2zŠÿö \—ì¯4¬=žšF"ö—å>èþ½ñ5ÅÃx>ñ{c½œ°§o¶ay̯hNÿŒO²ñÂöÞ×ÆÞ´b¢Ö1æü¥Ø熾BzÐèTSKœÀU¶¢u•M@¶Ú8[ݳ¦ ?¬ýæ–ýõ=šâ +Ȭú/žÁȃúð¦|‘l‚±U{K<ª\_?˜ê·›:Æßñ´À4Ÿú'|…m‡hœÓý¡bíkÛ4ØÜF@›7dºÖRŽ‘Å—qÔ£^ÉÆŸùùùÃcNÃgÆâØ"õ/b]_EaŠ—²ÒŸ—ýioØÓôM­ÄéúIΤOFTÌÒÈö%6¢é‘ŒI¥U¿ø‹k¨¬h*¯Ï‡öÆÉoüzS`Ìéõ“Äðfcmñ$çºW°¯w>![ïŸC+L³†/Ó/Òäëñp_=úØ8¾Œ‰Gó‹Wq¾M':tŸõx›X*,{ë5¦•©ÒVÙßïÙ 2ƨýåÈû”Ãû|‘ûyÙÁø–½jÄ€5«~j¾"´ƒÍ~d]Ægóœ$«mõ>…8»†v߯^(4v@ÇöêOÑ 0Æ+?;_yÁŸÝleêôh:!¯G_?—#œç°Ooû+@ͦ§žÆã­ÍÓ¿É£ùᴊŤ›9|1–˜”á×÷ñ¢ »øá”TãõyÙým„½óAÐØÓ/s ㌷›MM^oœÑÀÂÆ?ÇéÏa½h¨`1f°‹çÏaÿø¸|ðŠÃ‡<âí«ÙÆæï _dÌl\Åìýø¥DY=؄׬ôõÎoÝl4Œb.]ßÞC›¿¥¼< ö”ÜóÇÛáÄL­…=àjŠ-$èöØxÆa?Àyçîëþù—Ìl??Üàÿ}Ý}@Jeß#6ì³Ä(W5Nâ OÌ7tüÚÝ÷‹`NÌÊœ‚~^öÑÔ·»èÉ1«ß±ÖuG`ìOxÏ·ö\bc¿¥M´8l•ùõöéI„Z ‘-¡¡ÒcW‡®ÈÏaOOò†¦¥øCï}0=®€…ì[JsŠu92VO€zq ÷ §p{“ñƒtÖ×ÄEævmÌýôû~m±½Ä*–­Fl´×ƒ#¬aèWÝÉ×ÍfÞa|íN’[ú‹Wq~t[5“Î^÷G1À K½ß†=¼…Ad½lÿ½·ënëFEç9kå?ð%÷&s[ÌÆ7vgõƒ­|LÎQb¯8éIϬYZ´DÇœP¢E9qÿñó8U…*`“”ÄMË–(3݉È"vm Ô7 +ˆc-bÑPGÞ±&uŽd!¼˜Â¬Ó#76Tó“‘düx±–¬Å\ŠUþÖ TCáˆl³Å@ÑÔ[ÌŒD õˆ€M½¸±ìÁµã¶Pr:#=§^ +X—âðš®Õ»kkæµmªÍQ-y”3«ûà·´­ñþßÅFJœ;ërwQrf ÞçÅ«[· +Äë¯1›BtoòhþTŠ¦]y>Q‰§…EN BqÄ;}Þ>¡Z\è©zЊÝî}›•ƒêS&X4"¸cÉHj«†‚X7l𨀠GayÆ6ê±ë®yðj6ypp÷fdyšiƒ—tò¢…j=‰×´ä]†Uùs¿LÌÔÅVñÆ1ª-’¡$ÒÛùÜXC¡#šŠÅ´…“ýE¡×CR/X‡Îôµ`ºñ‘ 2óÄ™¼tàÒ·Œ¶52ñPÑ\ˆµ67õšû€ÚK~‘“–ÞÛ‚A+"$,ÎL]K7’Ðëld`ãUCÓÈü¤±ñР|ªÍH"뇥•ª«Q8ȓȘuµ¼&ñ©òµ†™g:ÅÊ1ì7p +ª@†ÀË=/4(ÐÃÝ%ñ µ*½( QV/•|].FìÅ% %]iË7Å[’ ~å–²±Ú+Ì6ÈÆÊ„¸m#T"Qƒ wèé`‰ ’[¶žå”1¾`(ŽÁl׺¦Z¹®3Aè‰TT²1”‘¼ª ¸áÃbN;b™ß¼3fˆH(ñC²± ðÔe‘@†7LãÅA£&qÕÀ5'Ü=CKú b‰ŽE£eQžàÆóöÈŠfÚ©CohÔ‘í~ºÈŠ¸Õ…nx7 ÓŽ¨ —eƒWö²·GÉÂÆû5 Ãátµ0ñì¤`á.™MkÀA½.gP" A +܉~ÙÚ\ÇæFÍÕjֲϑ(žÀ ÉQÀ†ÅŒÎ—0™×–X&\Œ"’2û Ø°äh{òñ^Ysà=bxa±Ù¤vxýT”gøuÊòÎi[ºƒ0ðIBDóóÂØ…·–áZ¼‘ð¼DÉZG&(4vlå‡@[lA±€àjy:|Ë›&Š:I^öîZavá°MÆÎO›©¦ÇáA¸yÍù¼÷-W.Ë$&ûn&²6Ýet +øeí1fðWgÚÈĦMøÙ©w%:/̸1Ü5¬Ì[—Ø9[ÇGê"íÓzVÂÎÊH¶H èŒ1Cx•è©­©¤Mμ_ÛÒ1#’-3n|™áùl³+€p‘ +Ñ |±±vŒ¸%÷Yëè>ulŒìƒ€,Ük= ᆬ9¼©TæÓ‰Îú™Åp_xÙÌi\žÖ€¥ð>D¨æHQðäàÂZ­X –Æ7°°vëZñAiLqûÈmÍú1¯¨°*öI´22¨X(BtZQÄ=è‚4 ¯<$xŒEWÙnÉ"ßBíTi”b %ª[!‚‡%ÆeFEÙ°än›4t^MxQÆÐPˆ0o•ÛaØè Î@±ÊM+.ò +1ÒÖª(¨M¨•A`ƒPLŒ„íYkÖ™iD¨Ýdå‚})È«xѳ(Ax‘“°vntÃ&¯òÜ(-*UvòæþŽ†2°C,[Ê^h…c¯óô {öÄ«Í^bÛÑnÅIßäxF2^±¥¡ ¨Sm¦‚‘ ž°eÖ‰¥G…Áh:b¸R’G˜^öA1ã·žÌq,»"òñ¸Mˆ_A£ÈB =Šùa¨åÎŒÞ{JÒ€zÆâ‹Ââíàu‰à?­[H¬Á­z>fVar” R„"ïJÃÎÜ@w|æéòâÏ#cHóÁñm¼c¯•-œ½JR°4KZÁQfÂœc6. $ÙË@@Þ×mvW;¥¢¸C.Œ¯Ó:»»àî2Ò¢|—5ÞØò¬ÖAø…¡­(m¤5-ól\d‚¡1Ìqµ¦z€»É„³å:$wg÷oÖ$óìe2Ò­ò¹±—Æ- ¯oõÍ¢]"g€Á—ukøuMVì`ÊZF«¢¨H^„ ^uÍb¼ms‡Á bi(u­ÇŠº‘ÄHá +jÅ]‘Aa6ô¼x`XÎa¶VöÍF/²¶å€“¼‡b±¢ÓVœÕ€¼ +^¡Y axD\môàÁ¢ÃÇÙ0ÍÚP:1o›·™•F²”0jT6v†€> êkÁrˆ]‡9HÀ9ðšâ&ÞÓ­Dr¶¼ÜF!Y£xE-sŸó¨r‚/Š2áÚQ¢Ë'êàU8LK!bF63U†wžpS¼£ …ÿÛìè $8`‚pÆ $µC|†Ô–í"ÍI´Nü¯JÉŠýKHBÉεâ.Ù#Œ€9M®^ÔÌdMa ¶$Gº‡€Vø©† +Ít¢Éb8%cˆU„½ƒ6HÂ.d°’p„«ÈDŠñÐð.^&'Ù+Ìd$A -%~×e žt!êmkÙ¿pI«Ï9˜žÒ1óº•ÄÛÖòkƒ­rlcN‰ôt‹ÎA'u×s\€Ë6’Ö†¯s|:!ÊëœPA5šVôcÝÁ`ÅtVY6Ú|ûIæ?‚Á´ìÔÃ,uÁÐ8I>É@hlø|€³t<Á:1¾áfw1­¬£ÚØD¸ +æˆáÁ0çd*8èXåK Ug É<$ŸQÌ%‡7c(çA+ù6uB±«¢c è-^eÏ}p­å„âh9=sS2+qs8³A8¸Å.'[dš…êt¼(k +ƒùÎ Fs +ukX?ÕÙ3'#Ō…*‚g•OG X¸Y¼Çi‚—Ýa¬­à,\!àLÜß&m½Äråêã‰pÏ'9<iÉ}‰cå±$û@q·ùü³»6pÉ7UÔÅ´Òå£0õ¼Ç u‡$@fó}ÓYÍ«[SÕ2ÒüÈøÂSô€%r‡ðÀ<”óFmp•m7£Š%/)WVRý³ ‹÷“jaá^€1ÁVJÐt€Á]…âÈ>3Û@`™®–¬ð¦rç+Cš}êÈù¦±áܲ˜%.&0ó¤÷(x<7nMËk¤Ð?¤±èZìi1ù³,ŠH>A¢®5¼c» ¼­•Èki,ÌË•„<kÙ’1À-‚HËA ÃÉ´mÖˆL,|݉â`à‚U>TÆç¸à®6CØoqíY’v76¥œb #Q¨‚çÓ(i[òäÆXu!­hQòåèJ 7š´â­²å(\iĈåPB¨dk¦P…Ix9SÆ."ærmu´}†y9ä|8S;j”—cr­db'­Ü”®)ÇÎ äE¹¿âhQÙ«@_Ôn ¾áÅÁ‘ÏÏæHtîši×Ïq^8š) +‹já°ØÂœG9öa´ðp§«ã ¶áã\ }E)Y쑹$€d±;ÃV)J2¸§›£$™ËÓ]©màóÞŠårÀó"ä³GTþ%Ù·š\VD¶rÌ'ჶ¡Þ¶dA’ý` ”=P¼}à÷ðV¶§.Î>qÕæ“"àK)gÊ•+BË¢ÉÆ6xnt ¼g5µáŧ+§X3+¢V D€·|›Ï’&ÈÎ"~@Å-+¯ë«~hÖ4[mS=XšIgB´buç÷*RZ:ÄsJþÀŒÙnC0× +@_‡øîJÙò(á•ð~MAM¸òÚŠed/@%1ËÕ r:Ud9®)Ð 0Ã:ª*Ñ8p@¶¢ÓPZ$K]€´­B†–]>ÉjŽC9¦Öf8cäÿ&{}Ô„¶¾0ÿ¼`Œtp¦Ø²¿U·LǦö¬¢C‹>¿ÌJb““:ÎVgÓ¢˜¤àó r~´/O®Ó,0ófŸ¯˜¥M>AïÀQêM#˜cä“„¾ +¦8Ézw¤I ?¼pmHƒÎ@Ÿóõ àAqg{ÊÔ 7696á%Õ‰_"2™Uf‚‡^ELŽM4^ŽVæH.,<Ÿ“t±°89ÉÉKô¼"óáæ4ŠÏãB ic¸•>´bÆpö „ƒ,kÈò($LĉIæ—}Õ±>,È>éX󥦩0p^¯“,*YÔys__Xƒƒ<Ž-Påø-SAg§Œ« !Üq¥ Ü +%´ÖxÇí3{ˆßpRƒv|”ÔTAÌ\-ãœòЩÆñÄ,A¡‡ã2ìÆZÊu\SÛÃ[–'œËáÎìºË5¸¥ÌZ™ ߈êí$"¡UÅ| 9SK#uðÌ“`p¾È4Ï‘\vøáºB1/)eµáå8:&•M|Œ–B ⦟”G¬ÂÙ󪆖-Ó½ŠªBz€“}ÄÒ°÷⇠ÍEFB6d”óÖ!HãÈU(¬3’Šàù„·-ùS˜ÁëÒæD:H‡È>5'‚:&ë ak8j‘–Y-{ƒ×–O xˆ¼å8V ùrÜgE2S„Õâž ÅÊãÄWo$wБþL@-;žIn ŸqY&AŒ_'¥à!âY0¦ÊÀ¢}–Ù÷¢ñ4”xé!Ÿ–•èÝà7•åðˆd)ìáË!—•& +†¶¸ÇKh”hB"ªC#®³Rý,”Sê°–Zν®D‡ ¼—9 K°ß7©œŒ3c<± ÁÀ,Xb”¤Ýà¥*‡ÉVq`ÖoãØó«³ô†J -[¸¶P=5æ$nÇݱĬçºë«~˜ÊÚ4’—m%9¬ÉÓ©Ö’ÕPÎ}"\ü/sÇÆR,ÆÀI`ù]ƒ­êÕD3’MFwdŽ‡’%äë<§çd˜R °JA.ôBÐHü¯ ºÊY·9sÒ‘›‹€¼ö`z'âkÇbïCËœä£~%µ4œœrâoN<8\0Àd +±bqXr çÜ;l,å¼À>ø;7¶™AoæHPìØÄÈ ­b#ÛÑC ž—/Ù.”Ä ÔÞ ÈÙpŽ<÷‚¡8SÜCåÇ·MÃ}ðâí´A¾¡*«·¤É™óùà©] !Ê +Gi‚ÏI: +øÈáŒ(š¸Ë†o(n[GG~ ¨c…A€o³0)Ç1£%(â(?%ÞÇ °Zap/c†à “XVO[…œ¼‰ŒÁ-‚–ò'ÄßXÔV5ÄàZ)óÕjËŽMU¨¯á4^±³Êdf’€­xi0„|Èω²6‘xDr5ÌeÈqZ M9šÔŸ>ÃɃh }³Ó/£çɨι@ãV¤œ+£hyÃñ¶X›‡m9b˜¥V)W£Œå<®§J:,u+QµË”òYMz^!N»\Ø0Ë(\„Ä #iƒGK¹sÄr¨lǯråô/T¬ö¢[7\¬¬_—-Wc9¯‡/Jg]nÉ13/a"¨é燽Ñq”øsÄp­™C±‘ŽJ‹>› ¸,…õV“ë…U;©|Äê&uV—pB¸¦%ž“)”XôÑ1§ØH2¹ XôRyl±œ€/‰ UÈèZ±´P/Î@Å2/)§Ô7Líá"€QlSNr2äUp¬ˆÅ\m†Úóé@¨ Ë«Wµrp1H5<÷œ1CýG~#gÄ(yý@LËhù̃#¦œ1€ÞÇsÊ~趲1Òj9Ô©•FzÎu +/Ä:G /Ƌ˾˜VI€Öqˆ®UŠË¦OF¬$ÕÇ•£Õ +ªâñÛ²€"5m‘¦­ÕÈIA®1¼ÒŸ-U’iáˆ- +†²]1ZŸ§É£LKÈÉÑ]/†>—Ýl ż‰–^&àâ§ÌµqÄ g²¥g’µT–läxjuVÙÿ8bx̺²~ZÌ¡”uÒðInUìƒê¾¯\¦¡­ÔÂabî[ÎNjKôÐÑîËJex¯ã¶‘ jöK +endstream endobj 63 0 obj <>stream +À!~ñl`f… ±•îÒËZ9kYlæ@°£²àA+'QTð$¸²¬+p(¦m©šdÞ*Ã8¿ÀQÉAË$›(õ"š*ÚÀe¬ è„+|4W4ÓUÑL̲9$ ºr=fu e¸Ìå7tU5ÖK$á†1¥1÷ÍPÚ9Åä’*pz§˜Jj€w&Êꓲ{©%' ¹ê>´×bÂ)—ëMغvt\qÄK`½øsŽµc2Çå£P¶Äˆœq¤°mu™:z]bð‘C4˜[”1ƒ!0÷ÜرÃËæºi/t_4@K ^Ã=U¼Kå2aMj3ŽRš2†P¥[JÌ€2¬ïr¢œÕÍQÆ+™ˆ%8^üs±Íu:(¶,—a+I²…±´Ím\ J#-ÙʬÿªŒ±7}kµ-Øû”3CT't#wœdñMò¼•UŠõ.«ÒAR ™2(ØHÐÏîn ¡6Õ3+ +•P/mÉÈism7ðH4¨*‹ÔH5G…QrY$͆¨ÊôNÀ@+*ÂÅŒÌê:c‰äšÉNRÑW)É®¿Õkbm]û\ãNÕIE­Cñ]¶M#£òZ®:Õg@A0”ªŸ%M0¤ú)¥*ag›¢Ïƪ žõÄjXqtÄ[Š>§K%lÌ~4×s[ñcëL ÇXX+mJ]@-Çœ@Í@+Zi.…¥³¸¯>TÏk âaØ#†qá¼fN˜'³¬äÂ. 3µ¶`ÆŠ¾¸1sB—k¦é*`SWÅÓU¸…ù¹2¢²aí[•r³¶,pøðF Tñ€œñCË$9ÁAvjÈÌ ±Ô¼wŠ/Èõ̓¥1Zi¼WGa½¬bgQª; _w1H '‚ëjTu¥éç’98 ¢øF]/V"ö¹T¢ï!W/éá(hUf ¨ã%ƒëx)ãFI4qrJå¢<^dTÎ"‚¢s•g*fh%3+‡TUò‚Çs¹ÁÚ‡•ÃÑ rGIñÂr6G[Å[É‚k¸î£«Ó7J­uÀPœš¼q ïeáIÂPæW”t(oÈ%¿ŠŒ€š‡-³\iPÑKÒŽ<ªÌ&¤V¾ª-<O£Ê”—"¨^*rÁ"+œëÉ°Mê"j•$E^ mÏatU\•¦Š7Žýs˜äšåN 13°îkp²xi£hE~C®8Òtm”ô€¥)ffÀÖJLj$`,y‹ÎÚ‚¡ +‘H*}ú ÉàjbÇn[æ…p?€D0Uv`hɶE8O2ÛElKzI ]ÜOk]{9~žs\3VLòamžø ’ÌF UCš2§/•@ÂådNgîT¢hÙÓmE#Ò¡¢²6yžàЈ„…4©:ÈùLGÞñCÆІÊÞ¦ÆQNdy©Ÿ +Wh^‚Zèã º\Áƒ¶ ‰pp¿b•«îT™ýëoi0FjÖf)ªã PHG eТÊ‘6‘‹0U¦ƒµ[*éí*ð %u°ú{Ec. ט|EÔ…RäOù©uªÄêÒA"¡¥œ§rGQUBNÅñQ¸Ö—[2àÀ$—À’lbh¨l¦gæ*вK•Ô{Zˆ\ $gÔ †Ri4×N@_Ns]8\Ýr:õƒ l¥N7tÔl(5[h©öà ”2ÑxÆjäY‰Ø¼ÔÝÎ)D°—£ ¶æ$…‡R…890§83?‘“Ë.×µ¼é©¢Åª¯¶“§!S© –ªcxLãyZ›ÙDä£õ¬ÊŒf÷s¡µH…$ +õR1Qå]kè<7u˜99(,e¡Y á†ž —›¶RB•õi> ‹µ®KÒl¥MƒŠ+åv¢e RÞ3Ø +ƒ•ÍŒ^L–º9¤ "*JÌÓÌ”¸öGÐC(÷(‘q\K…Â7$§IÅ»¼öT]‘ב2¨UUäû%ÊYШƒ‘ê«Œ@ñb…ûÃU ¹Ü¼®¥1éBlaé<#öteŠqæ^>ˆ@ËÆwvXuT/52½ú:IPvJÌÜ%:‰þõ¸üòk1˺Fë™À%79{6&î`Jž@ íd{¯\o##_•(éJ7ŒZÔ¹‰"³Ylá Väuf¯ö´¼N¬-[±bºË-€KMn»®Ñp6Ÿ æã:j®?f²æ´H)kÃY] —>Zw(æ»ËKí^PÎ +x]i]]ë‡:éÑz4GÕÅ~Ke9äb?ÓÊFÏ ‡²X??¥8½‘ªùç‚š¯ùê.R-XW+ƒÈMKõ$ä¦?'Z‰)eO¼”BãÊ`”cþ†«;¬«T‘_ +®#9.ráR;Íp­#–®0¹›JG”ºŠ&'Ì#)°P¥D„¤d¬ví¨¾Üª[$O.·â3×wœ˜[”qN1…ÀžsÞçC„ý*…)¸F³/‡€ä^‡õuúòv\)·uÆð ãäx.È™–@)È(•$Ï.¦¤sʼL +Å`rÌÚÖ·åý)?¸º¢‹kPf/F·q¾Çä¦j•x‰’– +@_5=¸æÚ¢µ=“ù†zi¥vpÚå~ØF. Èµxá$Tæú×´õ\ß*K}Ä)Ê+MYí€Ô "'eÿ¸k&ó*#V])Ý ÷ä‹iÈKÝqe‹PÕ)—M¬¾°¾Vyé‰Ò)Œ¦bé‹”Œ°¹Ê*ƒ(XùÜÈÚ¾ÈKKs,~ëKƒXâr+Wò_r¹à +ÞÃêÊ0o‹q¬ê+CÅ$ÃzeåÊPÇõ¶œ\ +ë-ó|Ë·J¯ .Œ²¡ +Sô“—›vmC^ +‚G¹1Š1›+÷#rPUhö†^—J\|™£­¯È÷C­é[é6œ¶”ƒÙM鶒X–÷Re¡5rž—ÑCùñ“墀ÁŠg½QUSŽÿñµ²Jüa¾PZé[-–|ɳr¹"Ô4h•DU)µãzD%ç¬äçØÂøK* %‹,{kºP¼!`ÄÍy&p%ЂŽnJ:£æ"xZ2\¸Ó«ˆË;eÌ’ôåj(è×ÊÎ4Õ9Î(¥n´\³Oá²¾J„pÕ°¼T1wT=] +$–Ô´Ž®ÁsT] X”X,í)WÄ•Ó€Õ(ïlJh]ñµˆx€ð›ÀÀ%ÌEäµR›<Ç#În'0rQ%Hï”h¯Ïì)´Tè¼£{çÆ%lÍ·R¶T@#¯QËh—úPÔÞ¦ŠáQ«3†—;“ñœœd¶”ûj1[úèÿólzž~™ÏGËmN^O¦§óñ9¶Ðƒ/¿?_”á?‹·cüñó¤å|öÅàË_Î'' þ"á>ÿ­ÛöÍhz•ÿ19]¼¾¹õù茧îäæÙ…¡½O~{½Ø|lÜþ¾÷äûã'Ó‹×£cµñ'§©émã‚F÷5¦ÙËÿŸ,žÎ®ÎOSŸÎþÜxh¯p¥¶‹Ëͧ°óÐ}¹Ç½…õÐþ܉½Ý|@oed·õú¡1ØÅÕüåÕt|~2Þ˜.ô𦤑WÝÛð6Ø||y5íÁd¹ý½­ådYo<¸—£Ëñ·óñÿ¹JsÝce/=v_CÕóüêìÙÉbôf܃ÕÖÏÜ×Ïg/“ÅÉ-úK5ÐKlþódÚg¤‡6dY×GÝ4žõ¢¼–‰ãŸ7d=Uÿožœ‡Ïa&ç·,䎮ïk9¾˜]ÍOÆßÍG¯''=Æ×gx÷7ºÛúY iv1ž³ùæ+OÜó;œ]Ì.'‹^ûë=u•Ùûñå×ãWƒ¯öÆéÞ8}ƒãÔîÓ½qº<´½qú`ì«ù(©åÓg“˽yºƒæéæοݶN7—#{ëto>X³·N÷ÖéÞ:½½;bÚÇköÚZ§OÇoÆÓ¯G§³?Sõ@?:‹­×> +›D3úW`Þ\Ï¿\œ~=~3A·úè¿õS÷5Ê—Ó«[dáÝ¥÷©||7ºº¼œŒÎŸÞ:Ö‡­ßo¾"O{pŸÓ°¥O{ˆˆÓ{”½öÓ®°ÂÙ«W—ãÅíÛg÷YÅ3é.3‰)(´ z2›Îæýãõ­FWG’½öð§ææ÷µ,7χ¹¼š¿Œ_œŒz ¯óÔž£Üá ./Æ'Ï®nÙh;ìWÍæk3‘âj:šóçÅì||Þc«OÞÛp{öpv~¹m3ÚòäŽMÉŒLÿlL±nN¢Þ£mìúŒiGì}Õk¢Þ‹Åÿ¾ç³Éù⨗³ì/ï¯7/òÞ>ÊÊË.+`ÛùDv%ÓWpïŠBòáÂ0;1m;j¾mfzh ds‰óû-zW=CÐö¾V_ÝâêŒÈî‚Âû»é1"³#ê!«~ß)Qµ+BøqgDŒæ“Åë³ñ¢ÇÐvQ$O'‹ç£Émð^&o3#M¤oá@ßb·Þç,ÿ0žÿ6ºî²æÕ{K~ “ô^;ó:ò(ÓÁÔ>ì/»™v8›MŸÎÇãnµ{ð¹`ãy¥·ù2ÝwxŸ÷Q¤¿©áæ¥ +æ£ÓÉUEÌíï×Æ|œ©}§“é¨GVÄ.Z—›OÚ®…Ö{,ÇÓËñôþµóÙüâõl:ûmsÞùm¨ÇÌ÷œp9áã=sÛã°ßžÞ‡¾üèòµû/Ý øró¸×α‡ž§Év‡?ì~–ö£/vÑgñí +«è¡Øî«hz(í»]½có3ûê7ýèVïxè;rÇ$Üã(HrKêS½{žÌ¹ç#9=ÖÝÎ$=F‰½ùÜ5‰Ých[°¾û ~n\:|=:?O_Œ§ã“^î¨Õ'ïk´?mÜz´«OÞ³Xûzry1ŒÏÆç‹F»,ÛÎF Ýæì]²Ýšÿo°òQu>n<|üØC½äö»À^wEnîŽÜ9aس¶ïî؇pˆÿ‡ XÍÃf–}&hG¶S#Ï»\hsÉÎ1͇öž˜ÆCÛ¥¯ú¥¾šL§½’ò¦÷7Ù›ïÁj€Ò‡q›Žté±ûòùì|ó¹œ\]Ýž ÐgõÌ} r>F{bóqžžN“7}F)OÜק“óñhóƒ#'£éɳ9þÕ÷fqÜbÔá¸Ò²GØšß×ÀÜæ;íQœŽ?|ÕçÕ|vÖCD`ëûÕhúÇèíæÓ•Ô—ÅhÞOß¡îm-nõpUÌîÙHOÎúÈ­¿¼¯Ž<žB“qŸ¹ôà ГǛ¹Ôch;æÏÙg.m"RîÕûÝgñí +«xÌ™K͵¸=jJîs—|îR=¹c2îqä.m®ïVîRŸu·3¹KQf?ÞÜ¥CÛç.ís—ö¹KûÜ¥ís—ÔG—»Ô‡½îŠ0|¼¹K=†¶cvÀ#É]ê3A;²>ŽÜ¥“Ç›»Ôch;Æ4ÞCmS±úLp¦sŸü( +…öÉÜOÏŸž÷Z§gçfç½vætä1p}òýñ×Xšé¸§¯ì§'÷pˆîX]±Ç]ÏÿÃÖ»Wö¼Uݪ=[Ü‚-ú=[ÌãÛœ{¶¸g‹{¶ø8Ùâ7óÙ+‹{eqǹâÖñž)î™âÝ1Žª¸W÷LqÏ÷L™ba;î™|ðˆyã攸£˜ø.FY÷;mëö;-osJìwÚ~§Ý¾ž\3p›gs ~ê“ÐY=r_`â&Ï'Ž§Ï§£·Ç=OÇ>ä¼ù{¾pÙç||6»­€ÍŽVišœŸŽ_MÎo½+º“¹w1-¾îS;¥z侺!Ú×¢ÚxœûZT¦ŽÚT£ÚxˆûZT¨•ê1²Ý)FõèË6©úJ7åÒ›Aú÷«ô9ýý*ý0ø‡˜îÏ|Ú¢´ÓCÓÖó5ºÜ¿Ÿ\ï[-÷>HÒkpû£$;ÛÚ•â ýÖàŽðÆÛúywñºû9Ÿ4;»˜]&CýÙÕ-Üîn˜ã}ò‘Cë.3‘ͤ¿ßâ^¬gÚÞ›¶ùˆn‰íuFdïQÓß|D·¤·uFdvbD=¤Õï÷(¬¶ÓçwEoÅÖwE$æ“Åë³ñ¢‡µë¢ùƒ”ˆ}L²yBÛMøþäë;vætdÍÑüžu@÷Ñü¥™ÜGóo"Ð>š¿æï£ù[mÌÇÍßß,µæ¯ŒkÍïê-ÄóuóU?UwÁß%ßn¸Äöü}ÿCrÁÿaÓÉ«WW—ãÃÙy’Sç=–áʃ÷µߎ§ÓÙx:ùíõ"588jÁ›wù¹{SÃz2–ý. é:¿-uaïs¼wýÍoîOÓ·~^¹ê‘{c1qóŽþ99»ZÜr'lGúñ÷ì¾úz‚¾˜#Pä@¶PêKGY±Üå ’xÙÇãbÚû_vÖÿry1>IÖÆü“yðë3“ã›?/’¡×Ç¿½úä½ wsÉÅîïÎ_}rï‰Ú{¢öž¨½'jï‰ê½z÷ž¨½'j¶÷D}PÉ~'òDe·:¤öž¨]3´÷ž¨»òDÝŸêvßÑñÅ¿ö"mÁÁö¸Ï¹oã–Ù—Ó#¯<ó=j÷ÉßEá™%@ö…gþˆv¤ðLíHá™Þ™Ž;#Œ÷ÝMIÕ™édñ|4¹-ı—ÉB&ï‹Á=|™¼/÷ðeòvfä®ÈåÞ,}/’¤HÞë)“w1Ï¢ÿdï À½cg@Gc¸'ß¿x=:ý±¿ç¬Ìñ/_e´Ç\wcóšûº[÷x,%*6¿þøtó»¹±í}­¾#º…wFôçŽì§]a…³W¯.Ç Ø>óñi?n¿£,ãŽø#¶UÞaÊ?£å¡M׋ÏìÜLíÍËÝ3/•m>Ûxÿ19í“ߗ(U¦ÇÐ^{¥ÍIûû\q ì ¦ß•[à^Æ| Üæ«´‡f~Šy¯!õ0ŸÞî7Ðbñ{çÍ#±Ä‹ó&>:çMí7{çÍÞy³ Sþ1¸Útí7{çÍãqÞ€`1ꓸµw<¾Ì€WóÑÉb4ýq6éq‚ß”Lò²{àÉ{Í⺟!mîµÛµúWÍpóX/G—ãoçãÿs5>?éaŠ-=v_#íQúêüêìYÚ¤oúÔl¨Ÿ¹¯!žÏ^,&‹“[œþ4ÿy2í3ÒÎC;°%÷eó¯Àûbe­XY»¯U¶ñ8÷µÊöµÊîfˆ²¢WðÕ|vÖCj`ëû×£¯TÖ 7¿q1ëa?Î6V‚Þûg‹ÒcïË!öóÕüåÕ4‰ãGàH}¬‘úØ;âqøpuîÓõ½ÕÙǽǹ‡Ëãñ¦ öÚ¦ ¹s|K…„}¼à&¯Åý§ öX§»‘0Øc@EºàbCqGã90¼Gþh>–øÇæYiûðGŸðÇ}*Ð{ëôá[§½øçÞ>ÝÛ§{ûtoŸî’}º¹µ·O÷öéƒÐGaŸ>úŒÃGn¡n^ f· ÔÍǹ7P÷êÞ@ݨ{uo ¾_+Î=^µÏÐvÐ@ý÷Ùìô·ù¨Ø[§Ð:=PÎ>í5¤ÂB}Ü—èln×ìK®çàñÕÏùPÞ·{ܳ{9«~ŸÌc÷ μÜíN”ª¿¹+[î‘'rBØÖæÏè‚€Ç¢Ú ەͦ†=éí°ú_OâæwwtÛ=ýÿñÊ8XŽ¿¾Ï¿ÌŒ è¡Íþbô²ÇÌï’cW6§ þÞÓsÛy螙ѷWç'?í2z¼ëpÍàãZ‰ßíWâƒ\‰êcc‰OBŠÚgP•àçùèüòU«ràîØö<Í®x|¶ÒwE!þœ>´>’Æ¿wûÜ0e˜>ùd:}(“õÐè³å’Þgô¾cg@G¶»Uï³'ß«æø›óS¹]a@Ç?ÎΟ',Xµì ߎ›œ×¿|úÉ„ÇÒ/Þž½œMS—žœž¾½™Íé|Ú ž|úI3øõO?¹Âÿ7ƒgé?C߆dz•6PöÔPù&D›>øиÓ‡½nðëãt«_ß·ÿ•>ýw‚ý1PÍà‡ÁþW38M/ûõ§O?9h†ÖzÛVÃ謜% òCÕ665*§ìà@Û¡kM@s­bzÏvð¤´C¯¢òƒÃô •úØ„Áí0¸6=¬›aÓØ?hçàƒ6ѧ¨04^„ߪÁ uÃ… ÌhÝ0j¯ ’º‹e­+|°¶QÛªY;ÔÖ7ðF=Ôjpð4z âP)k°÷B‹¥†éźo‡­ò®4L 84€“P¥w5mcÊ»”Mƒ«_žz”`­÷J#—f.ê2´4Vë[Ý!€jÓG :“)ý>„BI˜gt¡w†ÀxbŽf[œ,ç•Óø qM &©MýÚ¦¶‰ðº¡iœ'Lí°m­ïÀ ¬>“°ÃDÇÐŒšÐ&„Dï#¸OFkýXê{͘҂&Ú! È£ÐÒŒ¤…¢LdjjLšA SZ®ªõ³&M, +ç:s€ôTê[ã+0“H¢¼+À»Aµ Ò\{eh™ØÔ%¹ ²mÓDeQV¯ƒÕŒ”®š¥.(J¿a‘5iÕƒƒíc”v…@9¯]¡ÒÑeß!ú)@&:lÆô¬O„PCÝø†Pø4i@!Õ…dÌÜMX©µsa czØìÐÛ˜V“öi%ºû´E¬sƒ´ûc515(mSÕ¶Z,ª„ø‚Ìi™º3ÌêWŸ~ò pµÄÀNÓ‹Ÿ1øõß{=^ËËx[n–]Çϼ%G£ÎlÅÓàÑ­¸ZM—š¯}v¼†³}vÜŸ·}v¼wKÏmÅß>;^ÇáÚŸÇás+\.A×ð¹ÏŽ·ãté¹5¼±mÁíݶâwŸoËñÒÚŽçÑz߆ëÑ&ÛŠï¥G×q>oÃûÒRèÍý>;^ÃÿÒ¼­rÀÏŽ·âŸŸƒ6üù“óÙù ÕžX hŒ GÛš6‘]Iî=(†ˆ20­[ä J3ÜZC¬!q‰´×ÔZ?zDŠiZ?f- X@KL…]BR,rGÖ€ªqfaÊVAU/–ÇytƒÔXC“¬)æo ] +´zÌê*m*hÕý‚`-°"GéÖZ`çñ5t*ÀNŸÖЪ^]D¦_˜¬ÖE×JÿìØe‹,Ù6æy²rÇóóŸ’…s¹˜câÄÏlœ!ÓJ[±Ø´‹|b·Ö¥]ÔV“YóåOãÑ”’îá‰ÖöÅtB%““AõÝ|rú¿Ço3æôàÓÙlÚiþÍ9øÍ¿»šœf“; tµ«PÜv¾¨: æÞñ§Ÿ´²<ÄöËÛ:#îéÕb1;?ž½IÆå’ ÷¯W@ȯe_^g—Ù%³¬$£1ñ›¦Q ´q£Fü„Uù˜•¦&$ttAÂÁ—µÀAÖüô”ô(-°ú4 +õ<üp$¯¦/Ð8É ô…Q¸b%ßsDà·6™¨ùèU5RÝ †Qéé3ü›VƒKšBâñÞ¢Ðð#éSîQÃæOÐ6@WRï rÑxdˆÇ­rÏðüîtÈÃI›!ù=„^zÜdsû_¼‡°桤†O_â–ùå<§ƒßæ£ÓÉ8-7óNøA “¯ª³Pjðô7´9ø”§Ô)–<Ò+ƒI"=@g=ë¶të[¶aðôdSœO7Ãéĉ3÷ôiZÑ¿ÀöH¢ÊUK¹¢ÙY—–üéàšõltæI|ÀîLóÊ åqX/”uxiMËÔÒÌæuÈËGVO=éõb¨†|rýìëÍg?µJZf‡þfJ­Ì¾Yß2i¡Ë³=ÎåÙ¿§SÝÙ¿9`> ?)ÊïÂòÕ=³üÃùøt²Žæ§·°ü÷é¼Ów8Leþ˜÷”nÑ8Õ$ð‹g©Æ !S„¾¦oIgäïdVá'A˜?âôBº.} VÉ¿V¦,)ªWt;{ÆŸS5’<ÀJˆ$]"=rFBÚ™IÍÑù¯jáôßC¢Mú„¤)?TO*lÛvz¹ú•zùŠ›ÒÎø«Ï3€VNÆÍð¥ÿÙ¨WuƒúÉŒð0÷¢LV÷ë+âÉw¢¡%ålì¥vYûz´;OO×jdyW:å-îKk”MZoõ¡ Î&™Ú4ÉÈ^÷¶iÚµ›nÔ@êÎÏ’,Í=®” CžÊ„48ã98í­“sÓIsO†Câ Ã`‚vëxE2Eñ-a@Ë0dæå/¯Ý¤n~ +ò>wŠ:Pýw寿Iµq7 ·ô ÈG7(b&˜$¤x*@¦5`H¹õMB²•Qô܈åé-X’Hëˆ/ÙY5Tø`óXm=ö-Õ¹zëossû˜ýícvÝ1_Ñ(ц8÷ Ž4e&€|P7Ü·eèvýÐ#,˜ô7ؤB¤žX2hwõ/Áò8Wyºþ·4•éG‡¤óˆš<þ«oÎ,²-FT)NÊ,,Ü<²]3B—Gèòy¦øïKGhÞu|¾Û"6›Ïß2>ëRñªT¼MõáWeÓY•¡ûCPk†ÖtåÒkF¤ó€tO“GÁïvM6×î²æº]Ö\»Ë®QŽç5¨òó«ÙüŒË|Ñ2M«øtör|üäûö8õùÅâít|\ÞÞ]ÍðZˆ'›ÒÛ¸ `ÓK0šX,ÏC, Ö@ãZ/°´L¨QzüAÝV/Ú„Gqêô!¯™“€pÑx?”ײÉàä]¦ò.ÏïwUv^– ¶œ®{êèF­2¯‚æÖIÌD»‹¬†a IóŸbuùÏç9|;™ž­1»jãëF‹k%Š&—2Sèª Åð“5=Ô2#3쨂Á̲>*Ï®ƒUϾÊ!$7mDY{MaX†ç´ŠP¨a„lý5 ~òÓæ]e×ï*‡ïÍŠ’Ðü0˜ˆÙjé¢l“:¥ð F&ºEvj¡«oÜÐh«×?k@l@JžW¿ï[dvs!ŸÂ ­ný{M›Ölë¼× £)ª† W‹ÒÐ)ÓÄõÏƘ5úäAá£uÙÄÄ@¼£HoÓ&2C¿­³Ìjæsíýò‡ÑåïôQ|ߟ¿ÏãÓ¼ðýü÷ +þƒÇóÒšÿU¾ázÿitIÇúŽÓûýŽ8üøÍæ¿üú#@þSfdK PÄAŠ‹oû¯¯oh jHÿÕ:±taŸ>Ã}=ZŒþšvŽŸ~òë÷ŸüË;ÿóÿçÚþ/ü~ýÏÿó?æ÷k:¾ÿ}ÿû¿<„õyóï·í¯wûøB’ÔÀ£ý›°¯-ÌëÇë¸d¥F´ƒo¯þùÏ·à›]Íà³cä²EA8þõÿ˺Ê|±ìþzr ZÈé2üp:¹¸Hj̲þr49ÿ]Z…9^í±C ,øvEbé$Ç/«zÈÊYÿzE=¯1ôüýù ¡«š œaZÕM*h­‰ ë¡ ¯ͪ‚RA+}„΄,))X©)Ÿƒ¢cì­ª$]r{e%©Áï ®À¡©í8ݶµÊ²aÇ×+-ŸK+ˆìJò]¯°H釤l<ù~ðäj1Оüs\,–UÛïÙËËñüÍøô8™ÇÔê²»}Ê°V„u‚$M•—Ü$KÜ¢Á­]}õB‡’ê—ÿö­- ÀV„“•éƒÖmÎ$©€ äĦ¿±¡ mÄôzE¿0à0ëì±xD@­¬­ÕÃ4i±Â^°Yê¡‚=Zš€FŸ>8õ‚!ˆMÉ«–Ã-4¨ò¨Œ[ÐWìÅá:š±1#A®ƒ¹ªÞ–çΖ€„–·ruÂ0âʺói··>ÆnïaOûX¼ª‚©Ð×é}–Þw€y^3z™6éE=åÜÝzÆePòhxÆ^dÆWhFd=°©‰õªKËHƒµ‰m[g*‚X`6t‰é†‰Öt;B`lšPQ8AÚÐÔ+¡)VQ²‚áPµPCzPRúZSR†$Ï–agô5@(¹B±LIØp˜¶CɘýPEÞeyc¤ŽD»´§`/&éÚ¥¤†cû¡ZÀ гVðסeVĬ8\A/‘^t8÷·Ã‰xX…ÉЙU€Â‰–©FÔÔ•˜˜5 Ç +28ºŠJŽÿJ&>”ÄÙ{¬éò˵‰Õï@˜’°P²„¡ôLÒ‹Š’ÒÝŠ2&†•Qîú;Sq…ZDÄ$É[¿DĆÃt ‹«iæÒk¬ïrI›¤e£C‡†& ©1 ÍÐÛ¤–Ô5€ X`…~5 †(˜™òúŠxÒÍŠx2†•Ñæú;o…JD¼˜x†v]!SÃp„±âªHƒ˜Ð*;Ä Cm‚éÐ.$]#ÔbÔ£óÖÌ5€iW`…v5 F(˜™üöŠtÒÉŠt2†•±âú;“n…FYV+* P“®†á•*Ÿ6¯JŠiì +[Ëviï75»„bUA]˜vVhWÃ`ˆ‚™i ¯¯7-w³"žŒE”ÑfÌÕw&Þ +•XŽd«µÄÐÑÛ¤ˆÆ¬I zÕ“f‹ÊÈßk‘aµÂXžËJ_ÁœüúZ]D£Ì‡Ž¶¨4Û{uúkCRø~Tª"ƒjM±<ÇÌ€¯?\C¥LWQ‹A<®(‚‚ÆÍzRE­¬MUÄb…‹A¬1Rþ^K@…X‡ÅXyØù½­¸s­baõ’!g¤Õw¦Õ2Uº +\E+ñ°Xå‘ý˜Õ¢ŠV¬=UÄb KžÊ˜`Íß+b ¨«‘S9cåqó‹ë}˜»WQ‹G Oñ kùÎÔZ¦ËÑí§ÏûÅg›ì”¿Ó8­­ü¨7Í5qZi jHÿÝ$Nƒ}ç0m%ñÿÿ§|×ÿ¥ûþ´ÿgÿü³f ýËݬ¾ëÜöŸ}0ôn‚¡]¤Yo¦É‘Ëå@ · ÕГ+Áš%pŸp <º°¡o²YGCÄxN‹cr‘ Ï¡gŒæ¤§×Ås–À=":éÉu1Þ6ªƒ®Æu–À=";8¸•ØB·Šî¬£á3°6ì³îøI® ý x›à>¸þéB{€pd«! oZGÁ› ¾.:´î‚ò°k"DÞ.F„®F‰–À=âD8ºÕH‚·Š­£âD_DêB7#AíÒ5$,iº]( ]LZ÷'A}ÝÕ€ x‹ÒêÝHëu±¦.tóhd“¯Æ›àdï6'xn5æÔ…nu‚!­ÆºEäi Õn¤ñºTºyP +Ò…VÂRX!{‹Àd.­†¦ºÐMƒS0 Õð@·P­¡Ù͚ɚÈUºyì*=·&z…Ð-âWøÜJ« Ý8†…CZ‰b!´k Õn…«® +Ú'ÄUiÛ•“©R¶{…¹*ºr6u¡›‡ºŠš]ùœ*-[õ w­¡ÚÍ4^« }"a•:Ý¥ñVÑ°JgîÒx«ˆXÑ£»4Þ**¶†j›éÐ]o0«ôç.‘·š-¹Kámg•âÜ¥ðVÁ³54ÛLi^âÛÄÕ*…¹Ká­bk•VÜ%òVñµJS^âÛÄØÖÐm#-¹Cä-Âo•†Ü¡ðv!¸J îPx»0\Q;Þ"·J¯Ôâq·ˆÒ•¸CÛ-"uEñíÐu‹h]Ñ…;DÝ"b·J§ôàQ·æ‰Ü¡é½¢évhÚ?¨W”ßI·ì­Ri#Å·CÒ-b~EéíÐt‹¸_Qm;4Ý"öW´ÝQ·ˆÿ­ÒéF¢^_I㈷œÝêDô¿ÍÎVnj\Àâ=~7v Þ÷eTKõÇuâËn¦Â˸¥Z0 ®­²K˜+s njå}€5ÝGЯ‘ui ò[õHÌŠ7xÜüÞEDtj+b™àfåæµ¾e«Vj;^sùæ”kp:½þÞœP-B$T.Gßœ‚Bf&ÚA¦ZõWæ©š½¥‰íþ)íÊÃyŽ3VžéªUÇxšßýΨ®›.í ÆoW*s¶ë[Ƹ2s×ã\®Êy Ng®¯¯š šÞE)=Œx|8IÐn9ÛØjpýò(cÒçÔ1ú‘® áé'“&Ò*»èŽn©¢K¢nÓ +9Œ–_sVÞ¸®cëP5[Awso5V­}çz>ªG=‡µó샭¢z'¥‹vc¨›©³‹_.n¹o›‚±Uõ"ƒ…ÖÀEÕ«¨¸/ét¦ú¬Ë烺щÃ@WâX¨Ñ{ ×òÑלiŸ)k?–«ýðq¼ñ°ÒÍzüñ¨ô/K­á¾ô­ƒ&£‡ èüÒ#þÈMøQèi=èJ¹@‚˜qñG¾w?—Ý D¬ÜõF¡»÷tþÌTË—Ãј¦>ŒÏÞÈzO~9uªôDÁ¥nXœ–nzcâ4…jL]õ1÷GúyTO|“)«äj@*ô‰‰p(ºE®ÝŠrã (_ÆÅ¡»öŠÀõm×_x-Þ5×®o{ÝEµÂSSð¬KÜšèÕ\T3TM]E}&>Oµ¬†j%.ÍN=oU‡îD¥+÷–” +×-»ùÁMx‡ÏÚÖ¾q«ÇoÄýtcÜ+—ú•ÍxVí´ÙjÕ. û ¬ìå YoÕ<}‡]oøƒz\Gõ.×(¿ŽþŠ®“¾¦µoôzú_‹ûéƸWèÿŽê¤Ž8Õ¸¡hÖqÍ+ZÙ¯ºŒ—ZMF¡ð|¥™®Û²,®ÙžØ¤ú˜[¼ªæø ¯c.«î2X]¯î¨ ~¬x wMÚ]®Áø‚ó*¯"OQƒCYVIK hqØ´Ž–­Ù‰V!Œ!˯:XîÌÁr‡ñ€áê¸ê¡g×h—65åjª³ïÉ&rhÐÃÕ™nh‚üƒ~JCÅûê+Ô¿Å„FÏy€ù» ¸¢ÀÚï¥}AFž×úMU'Jïi9p¿ë1½)ªb"8Þ·{oèZc1.ƒŽ +HŠ4­yò(Ÿÿ“–8’³ÂÉÍgÓƒÌv ¨çè:#>Z}Wf¤Ð¬zýA ˆVååËß»Há¶RteΙ¿òLxš=ïk僂¾ 5-ƒÀ©.áØògYCànwÚZ…òc囓.KØË«ïþ–R›hæ½;šöhÿôâÅ2wg ý¾™:Ü"™¶)º÷Z¹úÁÒ>· B·Jª#F+#†|À)Ø* ³àã%NÑI›6Ð øU'X€`é ÖÒiÄ]ˆJ•71àOÀSw¤wX°,êäïÒ—¿þpôË÷_þ:øüd2?™ŽÍñ<”“¦.=~\>—““8\To÷Áº©š¨’Ê&À#Z 3$³Ú5ز ¨ÓPÇN;7ir!úop’-Ž~lÀ¾I“‰n (”Vµ–²H½ƒŸØdNé\n€À‚ƒ÷9î–ú£"ú[ÈÀßÀèQà-æpu€ÄÒŒ©„¢vÚãiŠ]Ý0q[ß6°@£Çù;€›(i>ý¼Á 7o!PyLB¹ÈÝ' , Må Ub¾Þàš +œ(BR9ýb t¦Û©ÃÕ~Þ™^© Z¹Ø$>85P}gmëâ.ó¡ãÑüäõµÕ¾?7JÒø3q\A,&ÉÝbBCëŒG}C¨„ŠÉðIpCeHMPÊef¤¬m ¾iuXC>¤¥I$°àêì´ìZß´ /H/¨™va’ÎÄÕÒg•¶/\IɈ(!H=FfuÞTÁ4DÉo…§ZÈ·HVWZ·¤Ù¥î†¼ª†R— ‚¨£{ÈC£¨fhÒ á +p§ ÑP# &cZ¢Ò”—öºS€mçDàú‚¨ùèõ³œ­Ös‚!ßnuÞºÅÌa¶íÊÜQJkïÙK­™?ÌRÜb)zysØÞ³¸†jˆ åÔ/4!4[ŸWóõN³”“8"¤Ý[R¢ÁòQ0kZWQGQ?Ê‘=âzÓ´`$mØ2´‹özà+2¦e,¿Ô¹:A +–þëá5n¨07f!­C‚Ì9(e+°¤c¼0FAÁZ¼M·(‰àF¿¤cQ°-™ŠòÍ’Åd4›’/6È©I"ÐYmc~Fû$†“ÉG `•Ì΀Ã2iUVß©& HséaÒ´á:ÈD$LíJÒæ/õ\kÅÕƒ ±Ë¦·ÀþÃûtZGfLZ‡Zá®!ùÙå.!Ê5~Mј2Ü'~€§<Ê‘I³B¿C¬ÞΈò›¡ìt¨Ÿ‘v ܌Ǡԅ„±Õx¬!mh°Ñ‡Ö{´”½õ\l(M3s4˜˜“ JEç£s‰MXø%­a“b™6Â~NFK2<üŠÏéÄé¬ÂÅ"õE +§Mè €jlÒ*Ò_…œ&)“Ji#“ÂßQÉhbZ!‚åî=L”%V°³£Åœ¬|×L½ <„`ôÑe!¶Ù­3Te:±,R†1¹žÂ( +q”(HÁ+< ”&Aá­””¾wˆ%e<¨Îi]0[ÊÌg–¤Ê̬ÌÞáš=ºÝ¢ƒ sš5µˆ7 ÛZ¼tU†½³Ê– ГÍhÚ´*,pä¾ÐNí´Îöz†‡£ù5>ÂãTCJ>ç7{BE·A6Z|!p…SñVè@É„ +Ý …+¡-€Èȼ@®Šä<ÏHD/†p{ DS.â”@sAÒûÒdë6‘” ‚ônƒ€+RtTƒ<]ŸÉ0…•Ñ[°LÈÕ:Mnÿ|"Ø %Ïaĉ$ ~¤]ÁgÈ@¨?®!Ï&án ¢d^Eú­ÀR¯€á<à…'<ô2þžý•4[:aà’âïtòÍòééÄÌPDy0t ŽF†"±ÍÄŽ¿ås_2$÷5m¶d‡yùjð½i0 H=€óNò4­¥ÎÂ:äji­6ÈòRO0…*ÙÉ÷´7—²N¹¤`¸ý²Á5z—eëÏ£—OGóƒÅèåÚL¢ž©C˜9ñß³ü³P6˜ î-GÉðâ[Èññ;IQÉwxÐEúžæ—3^øŒ-Oû—¹¿vׂð©ú{$ù h5%A®t ¿Õ}FJ]IO«üceŒ¿äžû/2Ê-åÞ]—/àz$Õ¨<—GZr(‚ †~Ä ?ÜJŽ ^Ko{´u¸}—“ z¼w9g³÷®½÷r9#§³JΪﲌ:‹¬^kV¨¬ÞU­×ugÉ»j²»ëoÍ*µÝ%yI"L{³†€Vh߬™s$o¸íÑÖ¬óï]žóÍÞ»vÎ9i²B]¿õx5)ýs×Û|kyUäL¦]³LxZÎÖnËêšx~` ¨zèU~•Yó*~òl7|«x×€ª‡î*«$(åð/¸và†O½ó}þ<þsñd>¿š\]®Ê:ŠGþ„fdô^¡íá\’˜½”(‹£6Î ~}r€L+®U&q•U9 "n]”åÛ;à¯k¾ñ—KZW¾z5°Û˜ùŸH†²,ŠË·#þvÀ_×|ã/—w£=Aà<éJ@´`Å6X)6ïÒþÀ« +/ÿ8;ÇT¥Ô›ƒƒ ÇEVÿòé'?^ào‘~{>½Jÿ}öò¿Ç'‹´ ñ çàéüêòõà‡Ñùè·ñ|ðl~ +Ú×-?è×ÃÑt:I"áâõä$7ý9QâË\,†ƒŸfWç§_®¶ýbzüy÷ ÕÜøH·±\ŽôÄ·ÓÑ‚HËãÙy¢íëNëÃ×£ùÉl4 žÏO&SnN8N©mç‰Ñâÿ½LŸÏ»sãPݯfå+üv¢5I¡í{Ò¥oRNTlL«‰͵ÄxSÜÒo|ï}»_þïóÙçø ÄíçO¦o//GÇß½øbðåiAl}ù$Iä7ciôåáìì¶Æ·“i2>—Âä|@MLö×¹Í_@qþòï“ËI›ˆt ’‹ÑÉï½<]NN:æ³ßÇ}Phüiúlž¬µ +’È0[ü4>™%ÑxŠ¿RÃLA·>Gc¾üzüjðÕàÓOŸW¸PCøj€/$=aðåóÑ|±v”‡³óÓ«Éb³ÞŒ +ÆÞ‹â7ÒFœL¿\Ž¿y3>vJu™‘Ä…bÏd¡}±ºêÿ©ÀåF?à§d‡%í³2¬®i1ÙÊü×à¢WHš.Ñ^úÔƒò÷E.ê‰x"Y›-X Šîõª'KA9wÆÖª¤÷ ;mG£› öt:>?½;Š}‰ø¶Ø{Õ˜ +Š•žùæÏñÉt†~DkXæ9„^w[ÞIO–g˜DiæžÏ^½º/¾Ày¹ÅçßO§Wh¿ÍæÃñŸP¡†¤ÜQÁdü¼ƒqp”H:øæÕ«$ýRóŸ'‹-¹÷çÏ®—Éh«¢è_O./¦£·ôõ‹÷ÎâeÓÓ4¾ïÏ©S3¢ÝÝWïG®½—¥}oÜ]:¦±R?3”ë챎°—„è¶ik1õbrv1-bŠž(djë÷<í»Å&RÍnÈÍ;y5³Ž&_æý´²VÐ*-uÝrPJ>k¨Úhc@­>iîPS RdƒÆ(È0}pcNCYÍ뽘°Wð?$ûTj7¸Õ{Q…îñ҃é-9ÐÇ£=žeñáýmbþ÷ÆÖÊÞG¹ë{+z7ŠÑã·¡îqíêÙ[?„ï™UfVf7™ÕÇ¡¡î:xŠ½ó&&yf¾i³$Ëš-dY…­È®›Ie)?qðùËñ›ñôßÆ“ß^/XP`báùÕÙ“ùâ‡Ñej'Жç$_qüçb~u:>]¬Ò\çmšÖ4;n£²bÇmâ²!—àŽXœ²Íün5Àä2EŒøÝùïåëQêÞl:›ó@i@óñ›Ùô͘u‹ô“É4À'~˜e)#E’}óçb|ž$(þdÙåÕüÕèdüäç.¿ü¢'ç¿¡Œïáþœ\ÊÛd-OÎßÐzøn<ëþr1ã/.f‹Àƒ°ƒUü4­íüÐð#êEÔ¿èÕ˜†ÇUÁè¥V6Ö|¶ø•–L ú½Ç4ì?¾¸}ƒÈ˦@Øç³ËÿàG×ùéëÉü?º]æ'~íöÁiºÆIm\¼Í„I{t Ù?ø—vù—_׿æ™—`Íüµ¦y8M£Mý‹^ƒAÉ ÇÄO:­¯[AzÍYLFÓÉ?óEõÆØ×A»lµß årŸ@³O ¹wËmïÓÝÀ£ð«sì=¹{çÈ’ø +ï]|­x@ep8›Ÿ'EåN„ÆÆMmW•ŒÃ¢ÄÁâ«ËöÂÞÓ³÷ô܇§çãáHq7êýÞÅ=LžCt 6Ú5xê„?€ËÐB²å¿ `CróÛ«þóíà‡Ñåï· MlIfÓõi›ßŽG‹×@úMÅ%Ô•pâûé6qùñ²±vÏÆölìQª"…E(ŽºgD×2¢§Ó«ñàÇñ®ñ{œëÚÝ„ÑCthsI¢RÔFr9ø¨êµ©½p¼uMe›;Kî½7 +¹Æ(s4ÔAGOWÕ´Xªê+º½Œr]¡L«•¿éÆc%”÷‰@ ã\P1/%“„kÇ~½Ð§›²Ä‡“@!z\7C«uh\&ÂÂQ@ pwÂú +ž7jï?J +Å`LTXƒ£i×bKË'çÓFÔÎÝ@{—dy4©ø´=wë9¸ G2ÇZqÊõ3ü°ô‰¾Òïu¾g…% øý©,v9ob ‹Ä4®’Í[“ä”}VPTU7ƒ\¿tüN/íök§÷Ú±6F| +*ÑÂq¬x¸Ç Ö#ïÓµë&ìöºù Ëfoüïã}ìæÃ×óY²–ÿmòÛë)e²î¢ùüÐ*n®x‹ éšÇ®w'­>ðN©Cœ|‡Ù¶_/Ò‚»|vÞMéÃøóù8ç® +ùûh>)ÝHÆäדÔ_¤e‚¶ÝGhç÷ìåÿ”–é_umÅÁmÔü²®¹—Xfij<_þr>9™Ž{/Ú´‚ô umU‹;{«ãGe6~§‘¤=ùó¬ó›ÌÆÊláÏLùÛæ²;qÍòÄu~ R5ß>ù¡Åê=*áN7èCpö +?¸Faº¿· +èZÙµüá¦% +¢l·@? íLŒ gJB1Ð;É¥éàÛÔ#Ï©ÿÿ}¾  û’ã>œqÊ´o3|öêrÑcçìEˆ°½ë"$ï¸ëN¨–]h¼Ž~/(îZPhôÔï®Ù~/–×ý\›÷”èu÷”À±ÀtÝM%tkÇCNÖÕK·Èìч_Dš:½ÓkÈÝÏ¡ƒG0ÿ&Þùôô ¯ç³‹Á‹×£ÓÙ»éûÙ'qÝâázŒà$quVúØݳé &×Õåøù‹£§Ó+²fÄL|=›ÿ³sÀûåôüúìÞ>·›½S€“éœÏs‹Gov1:Y>O;YΛñ|ÑÎÉåüdé˜üéhþ{×Wø’É¢<[58…”X7øæÏ‹QâËOǯfóñàïÕÙû â[ÿ_‰{ï¯Ù³ô÷«Ûá2[{9\ +báêã!ì4VaŽœ¨¨Z;L_õGw7HâÈ-&È5­¦\œ¶õpƒ:a½‡[Šï‚]ïßÛ9ä³+ÈwÓÙpÝŽ>÷œr8åP~Ëj¿›˜I…î]U_½;Šî^A½3öûŸ >ºš.þk›Ë.î$.MAÐkoÇÀ‹ù¾9?­®å»ý~¿ç£éx±Ó0ž¿Ü¼ßŸÿg}}î}øõŸ@¹îŸ~òüd•>ÿ÷דŘî±ÒT'±Tð®¿ãæóŸ¾{:øi|*/h¼j#&¹ “V£l¥Pšÿc<ŽÁOx<†eŠ+Oš~7Ï¥¥S¡¥«¦‡J;C‡/ÊHá÷£Ò>Fã15øVù¢˜VíáÀ´×¾¥°1‘"_Ì­ºíý6>_Œä‘¤Ë¥Ã`Cl*s:heñê·`óé}U‰NÙ`~5aý›jÍ໿™vðôoÖB6éiO×E[mñFO)Û-Þ.×>¬œÒ´±±ýÇtÊŒY'j}÷7fã«© ©µÁI÷1бà¦Q´ 8ÉÞHg»(컿µM%<žH§ï±³Ñy—¯¤•+$@A ½Té¿ gSã$B(8‹åeèÀDBo þèÓºm=æ”*“&€q:è&ôûéß\[pZ§Lî•Q1ÚŒ,Ÿ½h¥f"Vi £A:š2÷1¦¡ñ ¦D§•o(•>ò%:ºŠQáĤií`tp¤HÑÙ"C«©mLÌ•uóéìÀTLtk\+«È60â:é Ê`½¢PCÂp4°~“¦m,ÎGËG53J‡óUÂlÙUÞD‡&ƒƒ£<Ø_“FNg¡¤°¦Â=vÎÂtø2i@¸yŒ±Ááê‹x™dÚ‰w4ÓÎbšîK¬ñ5@?WöLH{ÑQ7Ò²‘æB*aÊ0igLÆÊ(•ªpEkñ˜WÛDì›uÁaª ,Ì@“r~µs6´r¡0ºžUŽ"K«ú¦uÙn18ƒtrÚ[ $U©>|B¦êŽ2Ð ñÛ´›ˆ 8‹hŒm- IûÒÝ·éC›ÈÊôrÿ|Bmq –»‡Ü>Í`Ú‚¸/­ÓˆTñÁ¦†÷„!¤¼'pKc(qY¿NcWCQy·µ´ŠµÆdr[*$FÑ¡©¼'ظi‚ ejmëö$‘ Å¤)Øn œõU¼Šù`>¹&Û-0ÓV¶l·Ä«#Ž.è׆jàªO\$­o0Sm˜¦/4²^”‹  ½­Ø‹J+ˆi[8n:ƒÆEb2{(¤,E^‘½h¦eÛÔ"<Ÿ‡Ii,o”"Cˆ)C*¬©Ž18-ZQ©#ìÏ´É­FÆŸ¤±%±xÍx2@Ë2ÎDZXÏwFEµÄÎ-nÌ„ÖÐÂNÂÅâ#Õ«ðEÖba%•©p ?•±¸ƒCÅM Me¢ª‰ø´ßk‘á‹°c `:Â.ñv0ɱª8 ŸUˆ7MÖÞµI”[Ä'<0ÏvRS#áÐaÜÕÞU$õ¸a4-N„O25ÒòTxNX¿œ²±ºž,àþ‰Îã&*|Ö(×¢§É¶*Ç7Iþášjc‹™„|-­%cHˆŠxñ°ÕJ¬¨ f¯ íŽ`Äm“>£tñ +«Ã³à2,³³Üé.”[³4IcÃÙó6±y®&m0s‡õ¦a!WÊ…o-q7CGÚ@Ná’5…k¶üËz"h)Ø™+Â;PF¹dm  N²3“W£îîÕò‡Œ7àþ³ TÜ7±pÔVœ6šŸNb壕;Šüca_I¥°(€3µ®þЗU +îÜòÆ­‘颕•þ[‚NüÇkC$Žš$‘#Až´™…šïHH’eÎ,KÈdM"{ÖÉô¤W¥Ù'û%pÇ–?0Ò@b••PXV’V{¨@Ý øÁ™laGù—KcQ© þ[lªh]Kw+ƒë/éîÁg+‹{´üAÔ‹M+XÚº6þ¶«W…Ö$ê>¦:ý·ì¾¿`õúÁwóÙÕEÙ‡y¡'^oùT'ÛV•†ßvÔ?oDÅוf™ÄGØùÛõ©¬Ö24!•DÚê¡R×Ò€ Ê£D0o²‹äZ+Ú¹5V4õ„&·…IÖK² +'Õ1†‹†q™º+iÇ +Zà¼&é¥0â\µÊH=Ѹ†CÙl:q‡ËMÒ ”òÁg­‘ÏVú-Ó'¶eá)Æ÷üiq¼‰{­xÜj_ܧŸüx‘wø»îŽ&—‹Žr)cMxèÓºÆ̧kÎUAw‘ôeÙqHo¿Ýw¸v$ª¡_¼={9›ª®]-³óãÙœŸÿ>,‡£ù)þðzvqéó €dû·DH¤ÙééàÛћٜü–ŸãØ¿àQ'RuÆ|ýòlFz6>_¤®¦õôÙñ— ß2|­|æøõ‡£g§ãk~þjðùŸgÓóÔà`´XÌ'/Ó +¡Ã ©ñ“yñͽ¥j—Ô·éé||ž[qX††ÿ,Þ^ŒóÏŸÿ?ç—ÇoFó˯ªãuÛ7#ð°æÆðÃå5 !É3·Ë½¹ì~ÝyR½œœŸ¦a«M(•Húb¼øi²¹êæyƒ=Ÿ_×õÎ@§³“ßáš… ÉMïrQ¼;!ÔÍ„Øl®'£—ÓñF;c“Ù½÷ÉïÏþúfs¶mÆ"‡q&1º˜=ö÷^—è_/G“šÍæ+õCì›pÇÃêÏãÚÊ—¯þxë{8ùåtròxظñÚ'³[I÷µãþcrŠ§¦oŸøÜòA°ïV…¡rÞß:¼×ùv¿ Æ÷º\xÿ<ˆÒIõ­üs³MûP†Õš0 .½m\o7×Û2.ÉŒ»v;¿Züÿ̽Wšó0®(ø~¾¯öPrÎ9çœ]αœ³Ë9õ=Ýw³ƒy™…ÌjfCRY–d9ôéû?Ôo[@‚ €Q:¯i+ix÷/ý£V yY;ÜÎÓy ÅþŸ¡W€íîÿˆ~ìæ×ñ (\èŒ÷íÎÈg„×DÏ1Z£Ÿ¨$ŸØv>ŸA^l2€[D÷âçÃz§¢t?ŽÀ]”n‡Åúívºˆ‹åÃzE#ÒToÛù™Åñôý躆"™oF=_'‡ñyöm½¿ÝaUS•ËÑ*¹IZ,ßF;YŠá¯Î·õCG÷¥|¸¬QCøØFu牗¬\‘½}&¼—?÷êűܶËö,±\¶W‰e·ýÏ“Ëcq|”\ögÉåu¼J.—ã?@.»ë£ärÎÏß—õ¯¥á°Éõ<Þ_Žãó|?ý'@»žæÿbœj8&gk +ƒ8‰N›Ãælôm½£ÜŒÛ.Q¶©ÄÆg*ÅåtÚÂM­Ì>qzØzÂDÀ"z±àZLÄ]msá¬q(¼Ñ—Eå6†bö»0ÿÇ|ûP'Øì@NkÕ$w“ù¬|>,ÖÛy~N6µñ5m­ÖÓÕ]S‡àL@ò¦ÆÓ9}ǺÐÒ-'RpõÑÌÚJ„A£Ñqa;„§¤¹žÿ/@C Î]Çû)ù‚VÖ@ù²\û~í:¦*’D´Ï€ >ì3Ì°áÖ¸aÍÔ}Tûl½6ßfÆW  ‡éx wË SOj ¦t~Î&Xm™Ïë0 ¢æp·ÇuúŠ8‘ÕM¯˜ööÊ`0 ™Ì hÚüçÃ1±ÀÚ¢h=€ÅmµÛôÔa½Tá´Ò¼,´N¤ÎóŽ0a€\«(IÇc·º±ly;ÞÏ¡„b‰7­¯±ÐžÑvnü€47°3xW¨«ÓíúT=wùß@Õ[.¢úêrƒ¾Bž—Ô×æx¿¾¬Àªar½à–J›PÙýlþß©õùr}z™Ñ4Âg“‰ÙíuJ¤4d<~BKï ã¾#RIP›Oû³Ûû €ÆÅ"€Û*qúðP žÙ“Þ jüœNX¾NÖÙŸÀ ˆH¶=ÇHÔðÑUh;€Ò÷‘\ :üÜk¨ƒ"ïùáPéÛ°8¢ùî¶,èÞ 0Àâ%èlâ^k¶~'˵ïW °ÕfØ$ +æ(T˜i{™)1lß@ýÇ5s1–¨`ƒ„¶D¦NÀDn8<Ìmw +áù2‡].8ÏD;±¹ˆ–„×i²ñÎ:hÊ •÷8¬&¯G¨%+蜟ë@«õÈ4Ól®ÒZ^GF7-‚ýÄ[Ÿ]€½õðs3ÕžÅÉÀ“`åξ'ÿüNœ×0“XtZ ˜=KÜ£šri(Üê1ýp`¦ûH·Ý' fÈñý@ÈÏæ—õrÏç:ç•Ø"ˆZ&j‰,) Ç\ºIßgØs?öíÙ´cùy›… €~U±Á¦”%7ÁoÇ!<®¼ÍÏ3°èáŽ<cnËP…¨B ÈËÛìHœÑˆ2B¼4‰3#шÌodX½Üfh_SÐ6üǃ‘^¦Çí”ë\ºo4Ý_DÙ4º½›y$0J0eÛñQ9ˆ†b@{Þ|=¢26»PW×>äeÔêŒÅ"å%° +®ð2d²3°X¼ÐÖ6¨´p•È¾þ¨Ñô|8>jµÛ5Ðܵ;3®˜}ˆLÆç‹Ø”²Õ“‡{«õ•9®G™Û‘½ŠÑ ­éžHhÌì ßÊZ쯦ÙöDÄÏ‹Ã^TÂv—Û„Z¥v¾Ùº€áÒ~gÞ ½ªÁâmöó嘑¨!Ðj*x˜s×ìKûжÖ)r/“ä—| áe5FÔ\ŒZ°Õü +nTRÆ)?§%§™›o7øíÚCÝãkv¾³Ðé(_Ó%ŸaÁ×Ø2GA|üF7Ä*4ݮŤ hÇl„@ËÃq*&qP‹‹Øô£³›¸ )"œÁû”`_$l%¨Ù⶟Šñ Þˆ0`)¾y° —Æû=ušÌï¢@ÍÓSÓÒ4L5Ó7~ Öø +”힦Ö*•{Úïð qàÏL‘O  í¶Þ‹1‚„;৻ŠyC-×ÕœuBN9 ¢d{!„“>ÿ/¯ÿ{¾-ÏÏðf~æ’#£ pBš,2/îÇ#Dcð· +Ðí=ão¡`Š»·Ø¸p_ÄÓÈð×$`{:ÂÊŒÚÙèÓ‘ïõA@÷Îórwê³:ü¯ÌzÆ•)&§Gx¡”D·‹æ—QŒâ›Q0àÞ +8…åD + îgðj*R¶¥’Eø—l[?¯w0æŒëå´uÀ¶¤¯FX¢£µ-°¨-å~•ÐÚšé¨|@‡º¨ºI6-†ËŠkœäLÔÏããQRãËÈ3x",¹»U¶©/»:_2§MS_aô=>Ï¿4ú&Ü8ß@}€Ž]¾ÿ×j¾ÿ¾Œÿq¼ÿf2,”›ßã ü¯ÀSQt¦ïÆÙÀþy¸}.ñ}ØÃ‹Ó dˆ·„u‡Ö,D†o€ŒzuÆú}=@Óù÷­ãñ÷vüOݼ]Oñð©Ëmº‚ÝËîÈÙ@ƒÁ±í9o w‡~}ù¾í7°’‡I|’s +@OÏë#SŠ27®1FÏ¢æk^cL¿ÚE¶/ö‡)º·/F€_ls/¯Å˜™Ø˜ÄOâ3ñºõÝaYðx6x–¿¿ÑP\•`vHÝ›WÑ|ætY”ô::?'÷w§Käxmt•Ê$¶žƒ£ÝºÎñ /k|\uF`¨„IICJ½¦¾ºí&ûñzKNÀ£¡0‚Íòkê”WÈhçÊõÓwø@¹cO;,gÅôI|,%Àiã'¶6Æ,Î’ˆ¨3óÏqÕùQl ¯©LmQÈcšk¬ùÿu8o»«ØÐÐ6GæÌ…;<¯AÅôòÏBŸttr lY†ºÆ~[ZÜêó¶ ‡ùá;:ñbP]Œ‘ Bðq2¿aÉ\Ï‹A‰a*¯­‡ì ˆÃõbM)ýϱNõÃEˆdDP)mr—‡jwÜã´ûL—„':=&ãkaüÏùùµõEkmâEDéS3|·ÑIXáDëì~ +öZî—Àüq™Ï+öèÔU`;as”€«Jz\»øBæÌÔS + ŸFÄÜ EYØ­°ÎºÊHjGxÄÕôž4½ãQ„ôÝ“¼úhÊyãæq"… ñ8er-èh¶6þǼl‰5x=Ê ·p»½¬XšÜaò]BZôå›A mWàøà Äoǘa‚x"R†ÐÀJÜ^®¦)#B[óÿý?ÿ×ÿû‹Ëâ5`,Î'Ž['»ß|Ëyý9wÞ†=u,iŽ­É®GkñlÖãLÌ!~ôÔ.©~õVPí· 9»ªdŒEÎéÝÊ·Üc¹fШãë±é¢p52I—Üi¤CEGØWè©‹‘ómêN%mEÒêpÈ-–Kâ/±4XÿÀ¤‹ ÇKä’·™šˆ¿€ÉV¹kl™©"Ǽ_Cӄɤ^Þá*Ì:¡;‘RúÜÝô5ñ×9ºFCtw(\k\WúK~K%ŠVìo«n4‰…%7á…¦p{îfå·­ÇMMa¬Ìv¾~$°Iõ#¾‹i§O”·”&=[4ˆ^©܉E¿åŽm#Û¶o[]ã+w×Ê¢ÈH•˜Z §H ¬ná€@§/ñÁrpŸT§Dv–ÅbFÏŸ"Z3Ê÷x'ÚãÙ  ñþiôÓäÔYÑÄWŽ¡?UÚUúØa¤ÄÕT|~Ó…š9ùÊ?Ž7ðÓZŸ\V8j«ÅJl‰ð2HjþÙßÏÍ&Õc¯s’h@«XŽêBŸî‚U¬ÂVsú͉ÅCDn`i„®®ëo­'þô‰…9JŽÇjEÌ5iT™Ä0­¯¦×hY1-Fë6;d¨»ß‘ƒ—fÝd{¾QT™—Å­ƒ ͳ53ä¤u‰E-9C$pÇZ}Hîoá³!4É¡Uߌ9Ú¹Tä|^5¾b+ŒfÉã\Ÿ]`u}ìàp©É:“ô$©ðÉ… ¿>xÓ¤[kÌ’súÀŸ´e +¹&‡ˆ¿~•Eë¹ëížšœÙdžœýöƒ¿Õ¡L;™ÖQ.©nUï<¥Qµñ•«ÚMN,]b~>,órÐOõ§EŽB::ÌYÏŒ£\²yS"ûçRŸUOí´ËGKƒX1_ä<k~2KÅg»’¤<óŽm]Á Üu-»±L]ät ý˜—érpUPØØ- _ëpß_n»)ød¸¦²‰×«÷;~84ñg/‡E|}Y»è4þ–mZy6CË?÷©v`MWµÉŠú`®›#±.{@¦ÙÁSeA—¾g»hm”K˜×AM +°Pg\Ñzñ°Œ4ëÙq*é©´š€Þ’ìQ9& ‡[JåòµÁÄß¼Ééæ¤"1 …²ãbZõ«.YTG«Û£ŽÙ®2ÎQ¨v¸«+)šïÔ`v0C¢“ †‘º[UŠNu+k Ñ©‹¨zÀÚª©ÔP‹­Ð@€ÞÏÁÒrN8OI€ 6¬‡ñºl«éCÒPŸ!+-°ÄÛ +}(è²£§Ñš!²¯×•›Ôù|Ƙ +$Zôf©Ûãíëň2¶ÍYLp¾~é…êö„×:G¤91»Ë™bÕ:4¢v¦HÚ´ŠAÜšŽ"ðSpº5h™O|a«AS¿…öKxSôüƒ2ŽÞD_]µ‚­ŸÑë†8ü-†ƒŠŒ)·Ó˜¨Ú†Ýc6 @ ÛÃ_®lõCÂÑ@„lªû!ê ?j»SF}B€£€¢xgàHñ1ÃnAÕáo~Fƒ`p©;͇}%‰AÖØE/ùáS40MM¼1ìNÈýÒ_¡ˆPC$¥Ð˜£¡g0$:¿’'ƒ3 g2ð— ½hàh ˆTlŠѸ诅:Mw aOhˆñD§ï4úD ÇJ%8—=$ðl\ ÆEó —s‰ÑÒ+ˆ­ ’"AzÔ°q‰®œ% ÐPd rFJ‘Ådžfw'N¿‹žr°’sC/@ß°¦6D3/j ‰åY2~ª‹eJŒà¬JŒ&…h‰àJ%7£¢Lƒ¨YÒ’ⓆhpÔ}ŽÑœD PP/«.U[BŸð) Æêv5M ÎÿìÄFèî£ÕÅ2Îü‘³DëÍü>±Z7MZ™²85.†Ær«(©áµ®‹ø-eŒ6TÐ뉥QÆ5«RangÂàYÅ`Wý´*ÄÓƒÊâÞÜ&eK!?9!f´ ®/¿%ìŶûfܲðƳ4 Ü:@°c™˜ã³X F.”¾ ÌÍï êõçÔŠçC#·»®›ƒ©Ú8åõhªèÃÍñ‰„Rw#GW¾#«`…QüåƒÎ—R´–žý­>x¶E˜u5`P˜ƒš›ml?Õ^]nˆÌȈ‡¡ÜyÙWc5ôÙð`ÿ4j¸­QØIÎtÅ ž‰ÂàN ú:y*¹¿lJïÎC÷¸§…\¬RŽ€í²³û!œ.p*?µ&b<ô7£È½ÐfôâÙĶ x¤bŒÖãFr½†³Ÿ³ä’§8쎖ՄM]ÛöÉåi±¹¢ªÄÄ1¯ññ×ZDØ>&4‰Ëºíè]Qt%ƒdŒ‰ÜY7z¼Œ=ËZÀœé y±ÂpeIõ"v6HèeXþÒ+ŽvÖùr6£†—¹Œ¿UDRÂÄuQ½$õ:ׂ޳ŒÇali*®Wœƒùú)aNÙÍ&k¦i€Mê€6&3ËÇWœ{§7³ ‘ +ßùͲ”luÄ™J\zŸÕƒý¤´ò•¹…µffÆ`¹tZÑj]ßKŽ\Ç+üôÇ…ËoÜF‡ë†r&dW-ÎÌýœhªON+Ú t?ŒÁKŸÅ)•ùýÛzÔZ~äêI&´vÀª‘z"w©@¯º‘™,#¾–Øû‰¥.êî/µ ß`\MälôÞ€²mÁ&å䤮Öñtß 4•€Ò+ÖéNd‘ÈçëVè2úæGJëqáêE]¥¨¥†rÕÌeÔy5wK˜ª3cÄ÷ó·aìwp¾\²Ô>N8ˆ‰ß è4žjþ$`·Ê-ÏÈ•ô3ã!P¶RÓ] ·\4‡`jµËør¹œDíW¬ Hö…ûÁáí ž†š:¼½`+¼‰3Ýñ4ñƶfÌ Õ&ГûN@ͤ 8)‹9œ¾)hasÏKðüB?]ÃÅHNÌÝ#ƒ5ðo@oq•£%_2ñÇŽ µ‘Úo¬qƒ6âï7Êšñp?^ à–ò pa¿þ´Ç^§db"=ëØ892.·`ÓÉ›’ƒq­ ­#‘ê ä% ñžÇyö·ÐÑ+ìj§ã?ñ¦•VË –]*7€7¼2 ¡aÀ·îNb±¨ØxHjŒØé¥MÊ[/›ez4\Ð>œ¥º_ |\$«àâéžKÀºi†7‘@è˜h€8ó{’Ýé¤Ëè¯Í%—µ4_FÜWK+])L»ùåmâYùÛqkcw¡œ•85½›h²u{«ÓÀþ”þ‹æ[±"`ù/œýblW +9¥•ÐÿØPFh¹ Ícq:`Ó,û6äTeŒ‘f¾½¦}¨ðt'΄:íÀr[b‘Sx:gaUߢžÉqI¯9‚êîsQãI+“:;c +‚y»Ò’ýMˆ× m§ˆïDz†Tµà9`è ÞUO~Läs‹M&ØsØ8LƒvÏŠf-ÿ†zÑÚ­~#t8WÅ’œNCÖØöo¶¡fÕ­m#æhÉ»ôÄ‹¦_°Mi†Žû%Ð5À5j@‚u@`¯$ 1\Õ‘@pS« ìq)df¥÷ï4®Â]v Ÿ9rU'¯ª,FÂy£¥F&­‚è3럠Ó-ÚFhh:À“—X@«PNÒhQ¹ò‰=ö—©xØïb,JR;r1ô.H͘C·eéý;«Ûh`«=~Lí<‹Mu×T¹Ä"šêÅb¼§—|ufúYxBTJô×9/š¢&Zs Ó0T×hMÏE÷Ý)HM/R–,ä~Ú(]VKçů?™˜¶ÂMŸmT$òýº=¥9T¬ÌÆÞè0RKAè'ƒÜ nk@im•£r3î uÊ°CÞï‹1‘ͶÐÒØ&æ,ZÑ™›@.®äPw²:÷zs‚+ÓWaY$"ŽTdl#;Ÿ‡Ó˜[ycp¥´ì™† +vôÀô˜&aPº2ò¨ÇhU³(lÃ8)¤öÍVžÐ›=`C¬6 <Œ, îc]ØEW*YlzÄ´-ô@%涛ÀœSŠÆI ÏTŠD®ä÷ +·üÕíì+0- ç蛋=ÏÈr?CAçB›%¦ääŽn0&­¯¨·ÿFëue…Þ¤ÑÚwnNñŸdeÛõ +hº«¡{-À’·5èe]õ²q¸ßná!ŠÞb×i´D”µÝóêtÇ\úÚ¬µ{½–W¹%Äij˜¿Ç´2U?ƶ»ƒ‡-œæÕ|0â, z4e•>-©ûI£Ë}ÀOy¢UìŒhÃb¨\ƒ9B$v3õjü'qé½"æÏ+½D*ªÊE™¸‰ƒ¦Ò“ƒ:æ2И€«Kw?7#q‹c´º7«‚½„ïÈÎ*×DN£I¡“èÄ; Hž‘ñÊ!ƒ¡ƒ~ÐýЫ:’{××¥¾ŽÞMi²ãvä¢mËÀ~cïy;2#X/¤°!í†r×]ÞöPtK§K0ÜzkWè¤Kr%%Ä(ùEn܄Ⱥ–&˜€&qË(Ft¦w×f‡@ú¨io¢o6›Ö}¶±®Û­õt»ÛÞ'•kŒviâM~“[jÔ¿­`T‡yM#ˆær¬ÞÐqj©TÄr©a’IflR54ÑýdI«-,Û._„íŒX\2@›ÑšspÃeZGÉD`‡4Üuš|ÞMä¯F¾k± kHæQ hŒGË%j ü.]ľ1už°'tkó¨ ù\v¤j=¬J:z QŸœ BIe56–ò™1Tˆ:6Ô'hâݪȒÓÎü×?nþæä¦÷°NÚ«0wŒÖðÆ#W£ôû‡ïõBªÇN7†DÓ^ý‡äÔ¥uÆŠZíÚ½ÏVô÷Žo\ò«ÁÚWt“ÆŽgs´ìF ¬†%šë”‡ÁªškÀn°Þ†¤ ú'¾MÞÊ9€ÜÍm,­ÝÎÊî4À^‰¯"3°%nã­è!ºÐ°C­hQPî °Œmtf¨“Ó›lMÛMôÑ? u×vnÒȪ!}¹]o¤UÑ«PHÛGîvöŸ!ºce ömpQô9laaôŽ>ø³¥LÕåk7&`4sxF6Õþ( Ž9ËjQZ€¡gdŒÕå“÷%E29½C}²¨÷‚Õ§7€µT‡ +Trj¹¿¡:*¼ä¯Â»lAß2h ð¸ÐËÿ¢òØá‚ T‹ðq¼†aÉ›·œ‹ ±N(dO˜K¯?5Vžƒ±Ú¢(/Øý?vnY0•#SøJ‘«w*öþå)un«”*]8þë_ÿÂ0í(a:µ Ã49ÈÂg!Yúý Ál‘s%kgøµ] [ðAYdžt,2Oã=R­`g¤Ù?iÁµ}MŽ¦ÙüêG_cv? ¿–ðÆõîÔ¿NÑר§b?‚ˆzÊ ðI„_¡ÈH«MQø¢ƒ­dÕ´rócŸ ?ðõ$X(u3üŠºêª‘ñ>­èi*>?Ÿà×üjLŽB' ü0¼Î˜m59£¯øh¼ o.çŽnDg?ø/ÀþÇàm‹,HÜ¢&{!¬³ÇÌÆr´~º‰ÓÙ½5ýäDáû…Ñ+ÊDþf ª!zÂM Í€>*ÇV¶DÖ^´%¿>˨i­þë_€uΗ+·^ºêÆN×–ÄŒ1ójÒ“s^‡ÿ¡‰†SØXS¨ÛtñOg@¹ ÒZ?D?Â×Áï90Tu~~߬ÉÆ2œ¢Ò<ÉVé»ÓÄ*µ°ÇÞû1YÓ±N·­ÎªXÒ,w iLËÓ@Ÿm‚IÕ¡­KÇz®Qlã›"§Î:Æà(,<@$˜©6' -—7°gK.W~ +c,3>°Ò +VhƺõÉBêÇeWܦÿú—y“ËcúÐõì&¨´ÏùˆH˜å ^µVnÈ—¹;Ù]¤bÈWeÎ/ô÷î×Úàô§dD¦„˜áÍwä@s?ýécFoåmÃÈ ;qlëTNXÒÀÛ‡ EVÉÜ…Œ@dÅ’¶E:j=aŒå„Ø¡={"V,†¸KÌè¿3ÿ “k­FLnžî0Ù,ó‡a‰–0ï9ŽaáÜöTFL˜V×—aÚŸö Óù¼:Äìøì‚&ÄêÕôá7 Ë¿\-ãV¦¥>2B&ÇT˜LÕ÷arCâSØôLé«X,ÁCBLí³¤1Mxû‹i“µ¦ËûM˜¾"‹a†æ ‰{É?Ì41j1órÄ,»r³^ÜsÌ.¿*0û­áÂœª@säÌmž1O¤hǼ)Gó5°æŸNá4aAUË…B¹n—XdoÕc1Ÿ.ÅåC,©:+°TùÁ2ÊcË–Žr,o¼E±ÂX9Ä~Âz-VV¹²Xe]cµlÑ5,íÖ¼ýÉ°öÁĺà ôqa½và *Û6ª; ؤY­a³öQ-f¡¶:Œ¯ØFeÉ`;_ç„J¦4vš¶NØÕ`ËÈ°ìø&“cE™*&WÉ4«vC¦‡-2ãE9’YŠc¿Ìn-î™óÏ—“y~ԙ߷ïÉBêq@9wN²øªZ“¥y‡,ÛÏne…^¦$+ÍŠYu[ÙË×f]Ö±@½èV&Ö°¡l²¨þ¬M¶n;ù±/;–=Yˆæªn¸ä²ÚY!W9Â+¹v=iÉ5`EZíÜ©²ëåžÝø"Œü y¤úו'~r%y¦fIÉ ­MP^îUòú_Ð(ïȵjyß{”ÉÇåñY>_Övò?[þ ‘ï«ñ•ü¢Š.²Rx¡PâK…~^),þüŸÂ‰5v +ooxR„òGLOXÕŠŒ=jTõ-§¢j¸-“/­è™›eÅØ'ÿU,Šù•b3ºÜÇkÚ¤Äü7”¢Tµ +JýM Ô¼Ÿñ^éºFõÊÀ*¤ŒY5ezUY)‹ù VYs›"ÊŽìÚV¶›“rö·v)ÿ†£²ò¸˜îTØlìP©7³ŠÊ¤ÚU·Ì¯ò•­¿ªÈ: +•UÚÕÌ«ŠíÍ^UW‚ªn%=Q-k‡j9wþªö‰–Iu3j[jÕ¥eTçæ¶ÚÑì›ÔþŠ¿§Žåu¶T›©Ë½PXÝZkŽêÁmUT/\½zWÈÕ×M$ ¥¡:Ä4¦…·­qy]>MðÏsÕ$Sþ¶¦d¤¦¾¯©4½Þxª™åŽÍ6fqi®±¼L«ŽÍ§Zs\_Öº …6<¸˜´éSâ¢-›63m;oiG,¯]‡êö´õ8uÊÄI¯3©~å:W?qÒ…3Ž.cWÌuÕa¬ëæÝd;îé6ëþ¯îzþêµÚe_oó†zF6Ñ'F–…þÇØê[ÅöY?–]”ú¿¢Ç¤¿Êªð,Ò Êc[*ûc¿†ä%µ6”¦¹¡Ó/Û Ó‘=iØM6-£l_ßÊÞèö£ÆèÏ©eÌocÓÙ³G½VѸ1UWÆÛ²k1éc¿E“K5Ùš"«#DcÊ75-S³P˜ÆùFÆ´Íí·fYÎ0«Õ‰Ù3“;Íñ[f`.ù®vs·‘˜;:ͧò`bÑh¢‹½!ßXÂÎqÊ’»–å–æ2ѲL*v§e[•Y 4;­Ö­Ù¬iWÖìØR´6n›ub¬ûL¹iSžÖQ›-¨ÖÛB‡äÖ–:¶¶Î”¶Íæ5·íT«íÚDmow9´#{Ü9jØËî°>½Šˆý¯°ô8d­’›¯q½#p«¹Ž^æhëWǼ£¸8.vÅÅ©ßè®NoË-s¦ãq¥³a.iSãÒâ<tn—N »<ÖQÆ•Š™k®zµ6tM¶š­ëäí¨ÜºžÃåöjg(.=È·ÝÍmãž:÷e7›b©å d2GO>sxº!ÿgüy奈Ík›çËÞ˜ªyôV’«€w4W€•ï |ºu§âó¥d_á´¯3_}ëz:ÔýŠüöàwÄÓ)"¡¾øë‰~Á?kåÔþëØÒ +X4rg ÿ[Ê«i60öô´Ó¢; +Ãx0¤›iƒ?ãÕ48l*òÁcÎiÒùs(˜˜ôC?y]64ì! „Žë£*l4Æ7áÐϹ. åð8eH„ÏDZ7b.¥Í‘¨Û®ŽÔ4J,2ÛmŽQlÐßDíãßu49ë,£­ekýSWÀÂÜüż•Û.–?ZαA,-ÏSh«ÇM?:{¼ºÚá'›#PñÙ©êzà·‡ë×XbáMo`0Ç8±°tBÔS›>Xu­0­=ÄŒf5 ?VÎ&Tý®3¬ÖàÙhñ›¯†Šíf´ms°£AøX\[q\l—"è]bã—F!{Ìc÷Óu×E (ÈÃB?µd†s¤q2y5r‘¼÷òd-SêÐu4“ç^×’è¦:õT0œZuQ÷ž@cWTôq£® +\BƇle¯í®Uár>û/u€Åµ˜5| tß.žÔµi€z>SYê ÷Ü·\¸ç¦¥1:>7‰É|ñ¤ž“ÿ|MoÁëkïÜ/ö*üXÓîÓ—˜x±?P¡à ¦±ºÖù´’kÓœ/Vå™kÙÚsÈl>*â‹ÚP4 +`u®4cu'ÉÕ¡íé¶%ÿXa导qÜø†kIÅò¬.¹bÖ°v–Ôâ§FcýBù¢â4PYsÃ:/ÖtÆV¤°­ªVÀ‘“${^a"ç¹w  bíýÔj:öß­U °:w U°Ä¬eµšƒÕéÜ 4VC㈇çþj_À»Ü)…•ë <ª +a…ž_…]ãïñ7€õ/òռʵ׆NŠ]«Þ¿õ…h¬pnØ ¥ w#%~¬ŽNÇ’òZ~x±ÊRK·¢º³•ø°Â@€T¿Ÿ®K®Üì‹q!¬cKÚ0jòcM[¢ê¹ÆÝAXQ0-›ÈW¹!L`í5"‡A‚ÂÉÞ&ÅÂÚ X +n£bÕq°4Yf~pUÇF@ì>rÙ¸ðÛ `uÉÝ›Yj „5a)êú^„qg¸Ù“/òwþ©òb­ùÕvA¬ùyÍnáÊ6ǯÑRje|ýÈò™ùÏoW«áÅÚTï—‚Xk«Êh‚°B[ìn¸¿iK3 ðc-Ø•T$äÇzÌÉø°B 7‡iÙU€È¿%K+œOðc-†’ÃA¥ßçÅÚ/m²+Úoî‡û×qÎRX{Kÿ²5òcýù;îJ^ƒ¢Aˆ‡Yã^ÈgeM `í4,Éõ.Ç‹Õóc”a‘¾Ê4€Øwâ.žÛÐ=$°NìZÎâÑv cÂjS‡4öX –‘Î…X 4Vˆ"pÿNäbç û*&…e‡ù¨Žk6`£‡.v·2 Õàà|Ú©XwM¡§+Kf¤¼ÑOï7 ˆ*×Á<¨ôq²cs7ç©ËcÖ‰§—ç~yºö+Y›¯.!ËY_Oð©Ç¦«Ž„Ÿ®Æ5M´ûQ›ª;|ZÐïÃ6᧓ÒÂO?åÍ%/ɦ“ŒÀ람*h\ð§ õÉËy·¡_“jëÂ*óÝ­1ÉÕö| p‰—Ðo΂O[ʉ~ÚKø‚ÑxŒ”·Bðéßµ|Ì>Ý4m± +ýôžh»M*4zô©âw +>ÍÙ¡¶Ñ”Óý¤Vz]…©²=àÓd´8™ >ÍÙÂ2«Ñ¢˜M¡õ ¶Õ8Ѥ™å¤ +tºQ¿¨ ®{Ó‘µzB83ÆPV±iH¹è@-9§R‰þ@¶lqÌ(¾nm¼YN·˜}ÞÔ€ƒ‹›:laøÝ8DDu(:û·Xþáá¢û¸ÑÏ3B5&8B87Ô ÑÁi$ç°&{<‡rj„:’Óø õÚ†½¤Ïáq)axH¤—4«.ö—…8í!Û“ôòŸâ/š¹Ø›4Î_éÞéyêó’¨<]’¡ß¦¾-ÖõæÄIˆ&@/¶ÒÞK¡A’-…ì‚RÉ4ÑIö²g& ©N³h¨Â¥?ùèÎ’È=2$ ø‚|Ö=?ù:FLPˆ .OäÀã\GöüàXÛŸ=ܬ‘;WG¼=Iè9ãbmkŒqÍË&Áw25 Ð4O ‰WØ_›A_j=2Ù}¤UÞµSe8ZÇ +uu‚8#x‘6á{uÐIöa24òñC³J…Æ +‘žyL¤»_€ã”Ô(¾úàî9–µo¢*·Vüó«gqÜñ“šdžoJ!ј³ +ÿ€Y¥=Ø÷ FH‰Ä{)U¨>1:†æšæí[(=¹ 3b™_æ;íì~ZFaQ?-³ô#íLªÚx Zp§’ MÒŽó{ܦ áñÄ$§!Y2Ï+U¼R`–fKmzô^,Ò§k8'¼{–ªD¤èz OŠ9}øî)a½ +qmã¡EÀšÆ½RTÛxbÓå Š`è7 Õö:—§$hì æÙŽQ‡Å´Ž¸‘óÌ0™ÚÞûDž?I4¶t{²cGŽÏfä>ßY·×ÐåEÍ™}~z”á3…t]Þ=Ûk¯°G2¡}ó/ÏkXö¹åkŸÏ™ÓøÉîÝlfà‰K¦2ØŸ'PG¦’j›ÐZ'—@¡ µS?ô7ðkŒŽxà_7§*t·9=!ú¾3䤞pµÎ×Èò@0zBXÒz=k™>ïß'Lwül“¿DG Ùú—‰‰á +Ÿ²÷“O`pÓlx%‰ÀBÉŠë"øº‘Ü-ù‹¢€#:áÚë_•â;µTQ¥Ed¿€ðÕ¨NxÕž¥@<ö|pÕ|†wð/ [Ÿ`­ÄÕšì_Ò´Œ`GÛñZF¦;X+»T.%½Äè%}± šE¸èõäbgÑ‹Zìè »Â»1³Wz†½ØyóǾ(À¼2‰Î1§CŽëÈåvGÌ‘Ëu¦ìrlý^Àt~ìȃc,(’žö¨ä`¤CQª#„6£¸ÉÝØ;õ ŽÀ 's7eÒç‹³Ë +8‰=Mȯ·ËÁsâÎ[N"H ÞAŽPðí@¹¤14Cˆ²\G–š¹qÕlÀ ÂþGRBKд!¥ó\5ûòzê‘R¼GRöpíæ°ÓZ{jkÌs´äׯ¢ÜcvÏÓ»!½ß¼àÆ>湡Ðð#â@3'¾Ò'…±ÍçºCž°ã€Þ]Š8Ê⤡Pú@Ïo„´_€ë ñ¹m•}ʨÆUƒ†­ŒÆQDìGŽ'â(Ì•:¿[¶Ífzþ¤P@³€A£:IÔd(¦¾{[ãJ·ËF{'Ý.î1 éÆïL‰ÚDNïJ·-Ý(÷ýž í±t£ýΠ ´×¥½<ÓÍä˜9>éö¼€ž—n÷^ÐûÒ BùÀ).$rœdˆi¨S 3C³ay˜»Ró fg3O ù‡¡Ê‰ëFÑWþöîQ.µß,Ô'a‘$Qc‹ƒ_ºò­jÂyÿœÐКØSžx Ý*Ø«º‰,n¶ÁþŠÚfŽ0%(l’¦ø BÁ}6ÐûQŠ€ÙÍ=È ˆ}†/Ñ-Íw }ÂÉoŽ`„z¤r°÷Gð³ñíŸÁªcYõò¾QØnIu~1½‚ûcë)íÿçB{_ûïø6ǧ·58sÏ{Àx¶5èퟅÚßØÖ íŸ +mâ +’º?ŠoŽ¸°éÞÞY›ã{䌣?$Ô Š"Þ(/r÷d…fÑ¡‚úÁð,2-Lj¤áµÛï8¹¹gÚ»ëœÑ1žEþ º[„h’4ar6!“ L¨IÒŠ9†’6™êà+{œ> ²5ôpqwª¸Éx·MÅMfi¶§„ÊkÏ#…Cã„ü o6iÔ”°È&—†öh‚g?´kHj?€fWøó…8SÑÜÏéŽp6‡&iž[šÀ²ïˆFúâl‹gHê–D¶¸[dä&/bzƒ 9‹{^Ø”·wYbÆ}e¯lLbƨ}3ø’|¹|_øE3ï§ó1·µû\¾/NÒÒËé|â¹|¸„þ@:Ÿ V”Ë÷%˜ºød:Ÿx.ß3uñt>ñ\>¶:øF:Ÿx.ß+uñt>ñ\¾/‘ÔŧÒùÄsù¾PêâÒùÄÛ}Yßo§óÝ­`V.mx¼™Î'žË‡ëiÓùXÐ"™neuŠO‰¼NFâÑH迃8ñ8V\'-i+ŵ¤_¼Mpc'‚dño‚­<7}Ì“Â7 +äeRùu,¦åd¯Rû¾FJRÚüoÞ|äoᜊAò’6BÜ;ø(‰Oò9Ž.žu#ðæçûÄ›»%îèë_òÍSù{’ÄN’_ˆz.ëúT| ŸÆbò¼»YÈ׌_lö¶{«c”‹Ž²Ö¥Ý±.Ÿu%â &þ]O3žv'tìÃ1£¥Ý ±â§LÑ™ 1aÙ¯¬”$'â‹•À, ;ÀËzâ3±&bJ“_ãÔS–1¾<…Œã‰]8Tó©¤×/”…W”˜ùØèÅw0Nëi÷¾¶G¾ÆçÈñ¨€w¼º¯z¥Õ1Ád4¦ÅÍG{¨ŽIÎ)¼=Œ¼"§pò0ÿFÎòq çÈ 'ራÙ<‘÷êàJ.Ô­_Ψð>Ž¼—–0K³½ž¼sø%5§Ðs~”“#Æœxíc9«gúÜD01æhÿ ¢±Ý²ïíaâªôaÒÒí5¢±ýŶX»cdQe8áü_< eÒÔÜ;Wñ½F­ùª€¯S°—Éö €»HÈ`<ºÇÌõuý‡´¬½—fih‘°ßŠÿò€Év½_ÿ%êˆéqvÞ÷‹eëqbE("¦Ï€!‰ßÏBÎ4 Ów¹K!Ð$®¨ÎHRøLªw¼7L¿@î}ï   y"îïÍ×]êâûÞ˜ÇñÞp”[鹂Ž§¼7üg9 BÒ²ƒ`¶ XxZZˆ ,Rba+ÒyZ‘‰U—¢HÛà ½\G|‰gHóŸ‰@s㫨?ãƒóiEKɇ{1jžµßÀL6a_ÔilwÁ_¼©‹RüžÐå †E)~cESüɬ•ãÉ°“¼èýZŒeÌÔ:EÃË÷÷«Âß$î|ähƒž>“™‡Ð|"lO<3Oä÷“™y¼a×åݧ3óÞÉñx"3O4ös™yÈÝýæR”™G¬<B|#3jE¾¤þtfÞ÷.U<9ïÓ™yŒÉÇ›Ùë™yìC/ !¯eæÝYkBçB0§î‰ÿpËûXè%ŽÔ:¥„^6’B/JËÆþ®jG1Ò.2¿¤5’,À^í·×#')O@¦}:)Ï#úDRÿÜ|<)ï _'›hâ&þ3¶çIyLž—÷oIÊãs?ü’òüi-¸Ž˜ÆÈ +_Ìû¡Å²¯V‚a±Rn¿çèiqÓ»Ijå”æ„”àx†Ð„ïç{V³¹»BùÙ“‰/Fª|GâØÍÃ@°óí 4³®¹)~=Á |¸{åRåÙ.è• Kéøó€J€†J«ô¶9&ä³[2åUD©z¨œŒ˜¯j¸¤êaw•[Ot“çH4ãªçâ1Ó4™ó°ìBíHîOÊ-»Ó„ŠÆ—ý†Ì("QêW8ÎSñ•™LÆN»óOKE¦ÓšÕ¹Ò)ØáK(ÙÏÑi‹¥ÝÍÌ‚X-©zL4ÙOYZÇBXG"XÓF/+7#̧¿0ÝvÜ´;G{U Š6rRÑd±´;«‰ƒõ‹]§Ð¿JösÉå'×­'”v÷+–ý¶{ìw¨×±ª +óÕLëüAÂJ[kòç7-HaÅÞî +a…ÊíÝÔ‚¥K }"ØÝ'±Ÿ¯á~`5uô +’@:´e¼±™\<*êeF…R·-wó9Kˆïe+·ú=1Ö)SYuøLr‘„`X®ƒE¸¦×IBŸ˜gk"Ýzû(x„0q?Y^¯äÊÏ 0|QbåõžsÛý&$Gb>HÎÄo¸|"vðQe=ñØAé\õ ²žàïÎo +­H¡„ê +’ ÿ¨Æ +÷6¸7Šê=±nÒsázL‚¡µR«ò=p¿’Ø÷¢ÏæÙÄ>>+tÛ}0±Oê}6o&öñyïÖÍû‰}|Y}_¯&b +'öñ¹ñüßIìc†X¼ôIáÇûø@}=¸Ìä…ľW7é'ûøÎyèÝóc‰}|Y},¿Àgûø²ú¤F =‘ØÇç¥'MÜ&öñÍ0î þhbŸÊÊRýLb_Vß—ÀÕúo$öÝ÷i%Q ^MìãS[Ñ>›ØÇ7‡|¡Vo&öqA=®ÀüRbŸ ÖùÙľ'ˆöNbÔÝ û‡û^#ÚÓ‰}â™^KìÈúþtbˆæÉ}|‡-ÜÈû$öñ +Ž‰û‰Ä¾G+Jì“°ß|"± UýS‰}Ê>“ØÇ—ÕÇ2’ùˆh¤mDÑþ²ÏÝ9%\Ó쾆'ÇŒ’œ}uz°ìYôw„TŽ7ªøÝõ銎‰>]ÅODåFª«^ý©h:±.a’èCmC"°R#¾Ò±…ºÅé“T¡@F‰t‹}¶õRŸÑ@·žªS-Ö'þØ aa#B*‘:Õòmkl“)lÍ]8&“]á=>¨/îÊ£¶5ÑúoÿûbÜÑ%Q_¥øŸ °aÕÿ{upÔµo_B eÒrú$Å\<ˆ‡¦ëÿ½7_éÎñKJ™Q§–¤â6oÿ#5ñúoÿû³ðÔÿ“vütÌâŽ.{¸aŸÈ'r<ò :æiuœ/œGòà‚Z©\*|LËö=Œp|Ä¥0¡šØâÎ{I9}R"¨!šGùŽÂ‘!’“!‘àÆ'‚Ô …†–Vo  –«¹)Mð*XÁQñÝj%t`”.ï^Ì/c‡ZÖzƒ.9Ô +€zŸ&9Ô +@“D.Iág1ß?IµEn='Y@" I5pù 0ÇjŸXŠÊ]šýoóãL{MR¶¯`å n¶omŸí[ÛðzCí#uŸqNý•"ؘ›™ 5ë|Ô䟦±)µ­»?†I÷!Ûâ»PÔöü²ùLb u³óóêÅ=¨ÂM’Ö)%…<( Ÿ6K—§Š{ áÁZtoë8ÑðÑ'}âл¾q(äb¤wϧŠq²g¦P’w7 _Š†ì›gëô=U QSDOë|îV­~„÷¡¼ÛŽà­Z/h6“ËSÅ04¿˜wËX¨ThÇ—„tìÇy· OÒÓ±Åòn wœŒ‚›!©ÂÜ»L°žØXã1s®•ÏsÐ;˜ëkõàa¤wOé2J5Lµ{©™M’%ðy„>gâ+ð'\ebeeæ4y³Sfz¶Ø¥é|ñߎ@fžV8ð|ù¬ ÍI ´è„]r…»ªí åö±ÂÑÈRG»àp-iy·!ˆU˜–B¥é´4Ö/*¡Œ&rÙic`eçÈ]Ôn]aÑÎIºÔj¿[>¬ $2·+%pÌMDdR8( `uÉ•ŽŸÄˆá¹å&ç E°¦.a¬éŠ¼Ë‡õ ÕÂódX©ž\¬U± +‹ù¦0Öd²‘bŽÄ +ØÀ@}"²Boº ™Ííìq‹`»/f¾§e¤óE%€Ôû×$½q‚Qw\u”:ì!]Cìý4.â_¦v>‰Ñ™€®N-:Nbj6 š¶k<ÈM®zìLN‹ºÜìbhánÅ¥äW=N®º|}ª0 ò?*L#Õï”Üœ>R³au«öLŒ›X ÷"Í7ÒãD‚âtúú/i\Å98{v„´»æ>]‚R Ow1`wëF2៊hĺ%ì_~®OPt +‡=º‹Ã刮d/¤cŸ„'y*ƼfiàY ×{?òÜ’Ÿº‰²cĸÂæõŒ(Q·´äc¢Aò+v¿è É»{ï^J»ã?ÿf†(JJI|Í#ÍŽRE)‰ïÞ®ËwßÝ—`ÞÚ#«æþ¾;IÀŸÆEá9¬§ž*ñ "lR³¤Ç©;aóê:žû'´ ñC¯ÇEýX}ãž<öñ}¡:…‚Çé."aã9?¯¤ì`\má3ÆçÚîëx¼Q©N<›êë©L/ïSW10úÄÍ¿™¥Å|ÎUuVŸäÑ7cý>™—¸QHÈ-ýbÞÑ%’—ø¨ôƒ9däÏÒS…$s§ ôo™' =*$¤¾KùÆÙeÞ$ÚÃl"éÃdŸ€¾K´‡%…ž#ZÁÑ€v—Å̧6’D{1%Qj>â£ü›Ç‰j’òÅBâ%¤$JÍGäñC?“’(5‘†})%Qj>"îî~9%‘Å/"Vè]Ìís)‰RóÑ^OI¤I*.A¾Ø™^Ϧ$JÍG¤-é—Rút—È:÷Ä{t?®÷‹~I/R÷N±BæhþÅ +ïÝÿ–b…_ŠÔ}¦X!‘±"®¶¼_¬ðë¿”<úâÇ‹Þ»íþ-Å +yC?_¬ðKR}ÏwŠ²Ü°[.ÁnTz”±,\íP<1扂‡â.‰ÇÑv J»Õê킇ŒÁ}âV+¡‚‡OÆ@½ZðP¼Ú!Ÿò¥‚‡â.$ƒýù‚‡ü,(~«Õ %0ô' +Š‡›ÐŽ®7 >L(ûX´Ú!¹ß¼]ðP|p\/ÇËY=¹«vÈòu¾SðP|H¼Á°¯<äMŽ½¾]:m$gï’þ´· Šß[FŸ°¿YðPtç‹ãÛÚ +Š{“¿žºQðPü<†v?¼YðP<™÷‹›$ûjÁC%”Qíi­A©ñrÁCÎz´°«2•Û²c,TÁÃǹ¸)x(^ífè7 Š‡x3”Û÷ +Òid|I;SžK¹¸+x(NC\¹ý@ÁC‘5wÙØ%}?.x(…R Þ-x(½Ná[)(¼ËèéT’»‚‡")C{çÏ<Wóáh>RðPh[oòH¾–F&Aק$­ÇGÅÏ®9a ¯£Ú!Í[ï]ÐÌj‡”„~u=’ţǸÛÚËѨ¸¨— òÌ £Ú¡ Ñž-xø†¯“M´ç¯„lÏ7 +ÒBŒ¯Úáë!Šœ‚‡¢lÁ,~ò^ÁCq‘0qß/x(ž¤KnÒoÿqžššùBÑŠj‰?Y½šßø¶öaÖìOC÷IyŽì]?Xë'¬VØ5i—rñ›Íjo+ù¯ãЛûH)€²MCz­‰™ôƒf[žšú€]±¤bù˜%µ˜æ,i—ªz>¼šóÅÓÊ^ä×äâœü–©ÌϺ>h6¶Lö‚WF&àý™Ï—ÞVàóÊquGœ°R^ýÝÂÐVŽÐì¦ +dÂr›·‘U©‹F +9>z!r€_Uhnì +Lp¸(ÁR3VÏËòf·RìÏæ”ÊæXÞäÛ6ƒ¹­92]»ŽŽWÜ£ I,šª×•Å|†ûʶBä,#0¸rœ‘¿G{iƒ"Ž!—2cÝÔ¼JŒÆûéjÛõŸÉ"æk 1_fþ”W¾)'[ûPnJo›í^4ãÂ&PóDÂÅë‹j¬ú&Vv;£qEwÄÐÑ|«5Ô'›í üÆ\Þš`*±7ÿCÎΙVóUã†W\.›&5ùɪA>g@÷|uëP.2=Ù#ø4àÂF®ÛÚïü7‘o¦Ì©¤­èp3} ¼¥4™lÖjP¯vÉéæ䵘Cn-ê*ì]ߪ‹[ýñõØl‚zƃ±"hÈgq#ýÌë6Âäƒ,…0ÏDhTdW$m~´@x6ÖtA6¦~ÓÓáQDz`šRÏŒ @é£Ï3j“óÇ3vÖŒ«`ƒ_m8ðÉ@I¯èñ&“£ªï#Ós«°©CÌU1á­¦®8T±Àà³³uš)¡¯Üi÷×JÌW'¥7k;xZ7 §6­Ë7#±ÖM‹Vá±Ø¶5eÒàÕ±4L¿ÀHCœíáqçm"üC¤çyxœXué - V³üÐ7ügW¨áø‰ºû3 \}1›¶[ÿ ¢u~mÔììŠ@`”jó6ím¶!Gß2ГfKd‚µ[&œJ‰nÖ +÷v…-1-9‰OÛ†øtûZ§-©‰O¶¥Âpâ0†ÝÙ5Ád‘ƒm¸-Xðׇ·*|¤mS<×µ1º3òÏþÐœh]µ<'ŒÑŒZXî<~øPmMK]´<]ù,V£e +u§œ*†s‚q ³+oÙ9Ù£¾ Ä®²5¨¿v•ÿ×I|JŒ×T;;Ñ®¹‹r»SŠ×û©ÄV6Vë=Xå791FZp ˆ9B +\.|Q²õ öy²Š%D)w/D©m ÊQŽõõKM²+æbÚí^£àÊÄ’Sý^ˆr‹4«ÑЈó »wµôI!Ø ˆ´7z|jcíÁÅbÞÈL浬¬²+¼»«Å¢1]™D'Š=G^ZðÕ¡Eù×Öd/¿úôV°‘„ PD–49û=ðRJ—Œ )|0¦Ç„|PA—DÆ,àÊXxX>Èk`˜í åxXö#rVó:\œâÊ õ›ø­a…¬ ânfâ£MtƱ‹Å9ÉÃÉÈ[™’1vrá:ô²!ÀÐ9 ­Ž¾…¿YIµ­à&ˆ‘NQ`ìUOàkÁL‡‚vVZtãRŽXã Õ»Àé.’bçηÕ[´„.\ NºŽç†+*ç!ÅP†Ño²xTÞ¬^aã&ëÖ +€– À°N²íte@\NRªLƦñvì´†‹~“ÉBá´e¦Ü'ÎçàAÇÔ¶€*u‘¥RJ€e.sšY+èçv»¥`¬5,*¥·p248á“=¿ ++ØèÈ‚¸IŽ~ƒ¬jÂë_†vDa´Èq™6¼²”%¹š(–m[V(½²O«”¨T9ÔÍeðA‡}釚Vït‘–nL^ÿ¹ Ôáð»5€ž s¤¹E»a)ernnÄŠáóà¸üª`ExŒ¼àÄ+'º³müp`:†=A´˜ºð=2}“ì¯H¥O¬&#’÷W}$6 ci=A„Ä¥F¡‡ˆ@±€ÿö[¢èÀ¹rEÏ ÃïÙ>a\¾B!Þ H"˜Œ,"¸Ï¸—Cœ:ƒáøéÀàt¨àD °’µäÑ´PD uh>:™¶1ãXíîÒ† ƒíf•È fš¿š6v0'q:œc_šš‰¢Ú`âúa¼çÊ6" Éä&Îi\z>¦|‚#‰ƒºP¦‰öƒ†ñ© œ rò&¯7b¡g„žd­Ižë¬ÍˆU7`H¥¦ÁÄ74 +œ¡ öHE£!`ŒÃ%6 «„NR7£ 6†KNÏÈE–ÎÇY¸Ì:ºbo÷—É{‚v6öi>ÀiÚpšùylÖpšöœ¦{À(È%,NcÁàä-jœfysFÌÖ-¡rˆÃà +§;a$c9^Ÿ³ðÚ§4¢ýx—¿ÍøtD{m ¼k„o|¡ûxûa{—švI›tÆ,Æõ8ŒsÈɺÉmd{nKÀ7iN?l†ÇÄïw¡2D§TbØLϳWtÚÌfUl_²ñ®ô{ZŒ=mVöWö.c³†„fVfo䂃´°žÞs¨ºNÕþnò ÌY`ˆÿdâãeîÚƒNÚÄD¾ +Òd$͇Pº¥ÁmÚâL|Â(-Í¡°!ÌïöÆhff‹y|2â{ÿ²Bv&2d™ªÉ3^¹g![wnR¶:îÙÄÍSgÄHù:û—¹}¢}6–Å ²¤Ìi eØ÷-3ÆGÚÏ>ïÉC(b à©$…ù,eb8<˜}ˆZ Ç8cëp+œñ[CCû?¸  !ž-”çðP)uÛZ3ŠîÔ²fŒ);i¿C“<\…_+Là“¥rz…p"Lna9áù7ø¬NA¸n*fÂ×ÎBWm…€;­4\x•`@‰«‡—:*ñ9Ôp=ÖîX›6ñÓ^)€F¢Ÿìîž5Ò“³i3©€¸ßôuJY))1絬˜§û]Ï2Z»)ÖÉî¬ —gÝJ{émýÛ B»»;;éÕ®;˜~Í°›òR·Œ„s³‡Ò¢e&ýû-|Ò‡zOËJz´Zèøë?Ù‰ãUôÅÃHúw.ðµK€NÑìw)Ÿw×B}²2ýš¶å6ìÚ™½<7Nr4]— C™×+ƒ‰þÃõ&÷‘è¤ÛUÚ$müé´ Ü·RŸlÌvÅ¥þæàéN%5jvâ ½G›J%‹M©ZÌ×Ó2Ÿø\H°PR ‹`Òn(äVÁˆÁŽ_PÉ^‰3IÈÚ‘hD–ž8”qhp4Ĺ u’¢F.=7ÉŒ­%G…¾ê)¿Z¬OH¦8òÞ” €µYóº}5á~µÁ§'Wí +2Ç—Zf7òø±õ>h ·ÂÝ!:&âœßȲG4šP b Ÿ“Ml+Û§¬†›rKç-´×`=ƈ%öi  .XxÜÉeš.-'r¢åFœß@2þ‰£ž£.ŠÚ¥9øg`“JW­T/`_Àns9¢#ÿ.ÿl_n‡Åúívº¬ßæêm;?—Îëåzÿmøú/ÿ×™£Y«µ±ŸRçù¼>ÿïkâ0½íæûë·ïۭųY31Ÿfóo\L ‡$Ç• ¿eíh5,—Ð5ß<ÇlÐËNEH/¿}…a”âÓß\G,DÀlÌ…ˆ¾ú43FÒu ï·!`,¾+yfµÐËÅ’_½äÖ/ý€”>…¿B¤ô°Þ—QòA‰±ˆS‘tVULÔé¸y¾<`bOgMpcÔÙbíž÷í÷/7´ÔÐWz•QÀ‡ÄII9…T*óÿŸ½wÿÒ个g-ÿe@ Yt)ãaÌÃ.ÙƦ| æÊ#Ãà¾RYæÔ²1òå2ýœ½÷‰Ìü¾ÌjµºK0³fæÎ2­Sùå#âÄ9û¼¿CvCÂHWà}7)òcÛß¿ùñ{ˆ§ü‰=á_ÿÐþóÞ÷Ú ÷þæÒ}w$~ñG·¦E~v¿EŽÿÇ| yþï±hï¿÷Ñ·þè›ÿôÙð½o}7ÿó•Ù3»O œ¹kâÊ°Wüìn»åÙý<ðûÊ·œ-ÀyËw~Øÿvôïï/ÿø“ÿþþ~ñg_÷Sõ³à +â´‹ï|úüœÉ~öQ^¿þ£=“}ücJå?qÙýñï9÷üá>¾ÿÁ;ö¯®¢>þyüóñƒhûõñGLÍñÿøEæ=|ÿå'¼å3fîÙ~8ÃÿòËü×Ï7žûxwÿåi÷À]|¢?ú×H¼¨]é;=õ?ýäçïüòîÖïýø;Ÿö?è;á()ðÇÿpw¥À\½ÍœGS´ÞîÏ̓³Ìç?_Â÷Ã_¾mÿú(Ìýb A?¸qðù?çÃë”Ïú½o¼óçÚ~úì÷ô½ÿñ£·ÆTQéžÿ[[~øýwUþÇêØïÃå¾ éÄï¿ù˜®pmðüX +áïÿÉOþ]“ÿLJ_ç¿ýýÛ.D÷Í¿€ý+¬ñß¿þί>ýó¯?ûìoÿOÖ5ñ‡¯Šav¡Òsó4†¢óe0æi0ŒË´ÇaÌÓ`UŸ\ÁENÝ„2“ìÖ­1]ø—ï½ÿÃoýz±ýx‘$ÝÉï﹌vªïöɱ&Û7…L~<”Š¬VÓÕZ%Á}÷çeuþ-ã3»<@…;ŸíÃý¯¯ã¥_ÿüí[ïñ7‡xiþÆ÷oó_}ûÅU¬sóÂÒŸð­g?Ú#Çxiýƒ¯¿õ?|Þãá®â¥¿ýíwÞÛÝ |ïÃï’§¹êÀ8ž.’÷~õç|—ˆìöçd÷Iûé¿NÚÏ~ûÞ¯~üÙ»›W€Œw‘l€¯ÎïÀ·áÞýÖŸ¾øÉ˃‘{q¦ }7gA8Fð=g¹F²üëá6'úk;âÃoÖuøù~ öEøûý"Øë\Edÿ¥ÿf®Ã_¦Ý:пåëßÛÖ¯ó/Û"¨;àc‹°Fdÿâ›ÿòÙ\‡o¼u¹¯»X„?ûüU"²/c†¿øæß|þ +aé—Ed½úù £ºß@åšvƒCñ‹˜òpN½{µ—˜òÃ=8©ëM>„UóhiѾô‡|ðÍ÷¾T¢ÀÉñü“ñù7Þ„µ‘ÖóîÕ Ö°Â+.Ò€ž}ч|ô­ÿ¶Ý ýç¡_”ìÀ=¹œ~È+®&ò6oðo¿ÿý¿úλëH{ òÿº»ôûßù×wüÒïýsx÷dú‰³ûGÏÿøM9Í`ËÛoÆi÷ùv»ÁãœöÒ{üü/—7æ´?þŸo¿§-Ÿ½ó§½ò=îßý“/ä’ý øWœöóvû&;bfÿŸ½wvpÚ«Þãû÷¿ÿÅçöüÓ§ $øÊ‚ðü%~~{¾š3öÿ +;bÐó ÏþË^‚.¸ß|óÍv€÷å«)}ó²ù«gßûrgäðõ>ª¿Áù«¿øIü‚—ø퟿öJú¯òç·|kwþÖ›©„ÿéÝwW%ýÒ÷xÉKü&<ÎZW/±ýïßãáÛ³7b‹‡gv»­æ^t~jÚߣÞöG_bÌ3-ámÂÇm:ŸßŸ}ý!¿ÿï>ÿðýß}ôýû»üáø÷-”¿œ~'˜øxàelC5„ƒÇ2Ž§®áàcŽe_º†cõ¡þõ;û?ŒÏ?Ú¥·ÿõ»û¿Ý¿»F¬þz_Wqa?¿·ÿÃF8/B>gAΧ‰p2éøeAΧ‰pjÑ^ä|š§›QOvËG"œp¦¼4Èù4N.ÚË‚œOáDPþ¥AΧ‰pòk^ä|š'¤ÀKƒœOáüÿ½ƒÿÏôþ¡Í?Å÷ü „çßýìû॑ß2Òß}òùï~ÃKÊóï|òO¿úìþ£ÿøÄäz¸Ñÿ[ìÿáÛ¸ ±ßÄRì? +¨÷í÷ÞæÕ7á›{¨œçï}û·Ÿ¿ÿ«‡ÏõëÏ>úíÜ|“´tÿÁÞ¿ùæ®~nWÿéÍÛöNËs»Üþôã¦Ïñ¦Ï¿ö{ËÍ·ñ?þû×~ïwxoÿÿùcûŸÛÜsoö6·K¡ûǥņ·¼µ” Z+qd\s +©Ý|ønðüÏâ߃ÿ÷!œöáàY?´ÿþç›xóï7a¹ùÑÍ?üãró‹¯ÙíÇ!{Z/7Ïb·©|cvPhõ¶µ‘vÔ0º½h)öÛ^úØ“R»-1Ü<ØO7b®·¡§z³»[·uöÓí±“tg¿é6ÚOö.ᶄåâvi÷ظ¾Þv·õ#Ž_ký˜[²Ø2-¶Láæß¿¶]g·´mÁšÄ˜oËXúJ‹½Ü.¥U#Äp[c¬{RZn{Šxµ1Û§a×m÷Jõ6õw¯¶’ìÕPn½Ø?÷×ÝŽóîfe{æF›¯¶ÝIoøD{Ú/å¨ýuqL‚~pÉ%<`¿øÚïÕ›·ß¹ù­mŸŸ­Í[Ï_{uì§o°>o=݇¼Î½õü3ðÊÛßþìןÝÄ‚Öå«’s\YÓm.öžÏz»m¶l”c+qÔÛz» Å(!È“v›Ò~í&…,RoK7!²]f+X²é‹íV+e>"l%Ö~›jÁýãm©Ý–²ÄÛZûîNÀóJ»Í«;/Zß|½Ïá%ºÎÕÓÛÏÒmÈ¡ŒôÎÍ{÷ùoõÙ?ݼýï|ûÁÔäO~ýùG¸øZAíåŸ Ö#¤i6¦X*Ws£{Ë–ñ-ý¶æ†Å[Œ?Ò(ûõœ$~ ÉÛ²„ý…ö©9—´¿ÝFšÏåoWª­îè5Ù…Æ(±©…žc¿ØG'=H¿-£Æ‹ ×ÏXowüÞ‡']\“cJ‰ßÍÿßØ÷k#Ú‡Œn‡¹uÓ`ÆñXiPíƒíóZ³Ã¾´~sê¸íKÀµ5܆XHL‰üi´d,;üÊÃ]ï_ú= ´mËË«~Ï&OjLx@¶WÑ[±A.µa¯—«Þo±óSM<<ëK^_e˜Èè& @·K­™ÔÃ]_þÖÉ„EHéµv¡›\‹ WúmHÆ}ö m8'nÔûKªí|5ñÄ·ä0F¾ žÜ÷~ƒB}?üZ£4Ū´ZìKMÒà鵘iaðé}±+ R¡Î;Ü_ÜaGý%§‰æoüî F? lùÚmÀ^\Pk¶mþ€Sê¼Ãýé}ú½ù2áæ}}F]?îäÙ“zõ”=5µQ/Þ~£–Ó/ÝS·UÙQ·¯x„šÏ¨û7;®Ã£Ôm;?pLrÄ!ä´·ž/XcÃǽ|!úÙn^ÐwïxqŸÇè÷¹Dñ+G&NqæZ“‰)õ¦àœÔûKj¸mÙ%çvƒSâöûçyÂR“™GŒ·)ÿ±}ƒ ófŠ§WóbÐd¥G·/‡˜€uuî"Å°.í&RzÕ ™:E¨Ý ,«6H9uPM ×E·=¾‚^uÑ ÚýÛ‘5šíp^åöè0ªíKniÞ©-P±—T;+¦ûvw¸?½¯/±'ä~/ €‹}H±åãžµ¨¨•Úã†HÕT¾ÙçöÁKœ¤jÆ€ÿÀ 'PSï®ôÌÂ4 …—¸¤ÆÛXæsj~°lqJõw2b¼iÕ„kJ~!w<®ïXû æ¢òÅË]>ÇDïXøKª-WÍï`ÊJTã¼æ}—„G%Çù\ŽŠo7Ø#ýB¶ý9Ýöí±ûÓÀ…ê‰olõ”HJË©[ý;æƒK×Õ D6Ž¾56Xì=B§8n¹¸ë±j¡ð69¶&R+eðmìûªá3Q»)Á.Ï Â)Ù…Í0ìèqOÂoí,٧ǵ,092ŸakHæ!$)ÑQpÂRÛ”^1>ÔÖ­‡î…X¤Ö.bëÀUywæ[3Ð䟱O&ŠZ[nÓ‚ âM°“ø]µaí"[2C4­Ú"GV3’!Nðƨä#;ÀÉ~,.ö €Î•z¯©ñ( û4;\Aó õªcCfOjùqjkƈmÌÛ^­ÇN.´n¬6(àvr0.òÛìÏcHÀàìÅ„Ï» šMRc¸ '·ÕCy¬ !^?ÏäÌÀ‚\ÜÄ–!,±\>b»~·Ãm71ô;G^Àj&Á°ê¶<€Öxt6¦]úžÚïòèÚˆ q³'ÅÛÞhÙìˆØ31nZ2&œŽÃšÅ¹Fç÷N,¾ÕÏ£Ý;-á“ +–ÓëáŽfQV‘ €Ô`ÛÓd5g|]k&ðŠÐÍf}qÆñ2O#å {6''›¨âo;+`KÕB&ÛB +´JR-Bóûú #º š‹çBîj¡_Š^¬ÈÀ·“1LÓ¸RŒ2žÏ¯2 ”ô]a¸ÂJ&Ëõrv¸cú®™²³*ëêgva2û‘w\©ÍìÒÅ÷»ë€íIb ͘.ÂõL>,KMÚÔJÙLÞɆ1²Ùk Û™;¬áI]@±›·¹IfžÛM£_˜„€lzÇÄÞ¼k!xÃ>bõwH±9Ù^r¬À¿òbºÂh&×`h󳌉ë%-é­øó•l‹E·¹ÑŠ}£I.ªik[TÓÔ·€‰¿¶ÿ0M.¯\°åãâŽíâá;2 nþ|½¥é>ÞeÿðIÒ«ÛqLbçõJzL‚ÓÌæçD…_È¡c +Tç€õHÐÑr7S8º„èvé@în´oGÙ,-ûd8²Á ³±Ci‘§£ñ“L6dºOv—‚¸Á¸¥þvIG†?´pE¶[Ú*š‰zùôIãÏíEëêå¥]Àßhuý ûëÒy]ÚÉ&_¦IÛ/8v†q?–®Ÿ’›á4Y·ÜºdƒÄ¤Ò ·¸GoÐzÉ"Ñ5³’&#Ž2ö×o§°C¦ñ¿6XXÙÐÉN0^iB:ˆ„XWˆzrÌ+Mlhа]]9dkín¸‘.½#Ã=edžèº‹­T#%e¾8$–|Av[žÂ ƒ@_Ýö'0¢wI6ìo ¨ê&aq±ÔÀ3£jÌ"hSZv½”!àrA2•GÛÉÏ®ï\úBI ‰ŒhÖcé¡Hx·e®i«ê€bw%ÔýÀ4äÍžMy¸j'/«’™wÌk°|{ö¤=¸Ò3É3./í.÷@3pÅ@crŠ¢Õ>.Ô0Ùz„ 5¼gÿ]¥*¸ G€~B€ÖV…Ÿ!„pȵ¥‘¶ˆIc,ÕÎi0¢v—&àÜ’uNkÂ÷ìi&—žüç+¹âÓb±Û-7Pr^Ö ˜=4Á­elTô"±1Ý ‚ªøÿ ‡ši0)$D@œú+›‘’ ®-,[`FHìÍLZ Y†sh¨|e¶@éTÁ&“Ò~Œ +äDõEx/çl€DOG(Á'’äV³ûÚ»åž-¯M!KÙõ0A3CQ–]^ ég83KÌ…(4Å D†³£Ö`âæ˜ 1G.Å€MjõVƘíž œ ¦OëBd¡U0ìÚ ¾è°j32à•‹H3˜ÜsŸa{˜Ì¹¯7 Ø{Èè… +v%-¢˜ã|QˆÜð†ñ÷«gísìƒéJN×¢=.Áì5ä غCý“9mâ È0ÓʞÌ€àÀÏp Ísílë“ÈPó-€lÔvvA+Ìò¬ÁÁBk8Ä e€6{¾ÝÀØä†b†5Þ Ë³Ë${™ºÀÐOp ã (å"E|²3Þ;ð¶–vt{F³ÃâüX\]&ûW7îü¡è²Ø´äàÖ_­\®´Iä +j!O$lâ[NT‚ƒ:°ŸC ïÚqn{ð´»|æ5øÝjF}yÉð˜ù”ð!tFa‚Á12ÓŽlç4ÙƘz ð¤"¢‚óœZ%ð1F`Ǿ «É= !á׆Òk(Ž¢ãäš Ô\Ž˜b´‡wð€mc<{«»VàïHó=ÁIŠ +˜Ÿ·À¢8H)è5#?‘Á<’¿æF¶Ó=ü5‚e_>¦õíu1GrFÚ“íÁivòz3Bž”H µ-ªÁ™a¬ÿË Ñ@“µã•Å„³-cŒ­ÉBÞ‘ñ2màsw9—&JÑíV|Þ*-°F%RÙå^»/]t¨Âä¥(¥Í£Äˆ©v¾V‘ç„]‡UMFíióM ß6rÃŒýKŠ +Lã6Q2•°@ɽ ÆDեȵop_Šíð-ÉqóvµY÷cZ‘{²­„+ÉÆk‰:¥f»­ ‹£õlžv—ÿ³Ä´[a,ÒþW`”ø¢ÿÓÙÁKaÂ[óèIaTV„Ã@Qè¶2e$Ïí<&fRìlÇzPñr¼$t­"h>"|m h¯P¡<€Id[1„/d–Ëc‚i@ª¹’‘¢À“ï`LXMy‚ƒJe‡™éÝV(d«%/[2Åj‰lï-ôNwœØÖ´ö~Ò +ùÈ8û·à弡jº})€Ñ)(æKöMîðu~dwùÌÛ 0ˆÖWÞ˜Ý(¿ºËÀ¿ó5¢N(ôäWÿhX:» WvL‹»C×CŒa ¨¡0šR õ¡öä ³C + ÛVfe÷PG©ÈˆM™6FË„'Õã ¢Á¬ƒ +õiûnï”û + ‘LH.-Æ_ΥƖµ!T^-ó[àPˆ 5 !lKܘ›¯¾Ã ŸëŽT·ê²,¬×SÕ@êѧ¶°­ç*ñò›&m®[ K»¸X[—Ú_–ØÓS¼”u᜜‰€çî–` °Øþ铦M¢YâÅ¥ØF p»åF»xúya€´ÄMBþ¡²Ú@Sº2’êôìVúÕC˜jãtN†©–g +Îi«òf£^ç4 ÌJ Î$g¼"¡¬³7?ùù`ps”ÝÄéÝ +Ðh×¥±£Ij!¥‹ÕÝ¥C59»;n¤ý³7*¢€>¡&1Š>&žìÄ-MTø”ï.…óÅ*­þ*ª€ª+ƒŽÊkz ìï-å±’S§!†m•$G£°¶Ÿø’¶rÊŽ ¦Š! +/¤HÓ̇K÷pcÒ¦Æö%]/…öÕ_o¹£íŸ¾'Û¥=¸Êö[nævÞ(iƒZöß¿fÚ¤L‡¢+/^ð£KÚc ‚ªà¸ GFI±]´©²2aJ—"-³˜¥ÒåÐL[¾ç’a‹+ÙéjaS2z™‹¬]{¾©ÓÁ4ä,¢rÓ^5x*ܤ4 móè1†'$SM]¢×ÎúS6ºÞƒ0‹ØñJDbLª‹ÙLK™ÅÁeðÔpñU˜ÙQà ù¾©V<_u)Þ`dOM`:ìbT½¶”´fÑÜ P.×ÿ‰CF ² é¼2‘ŠTÙläœ^Ó.P}aZ¥éjˆ>{ÁíU⥌¸ó%"œâå¥Î•›½I=ŠŒ; ´ [4’Ó, ·0bPAÚ ŽÜ};úÞ àƒî˜‚ Ñ E>Áa,íû¹L†‚7‡ +Š¯ŠÌB–>Ó;xèbf‰nV' ]D•Þ><ê  µÞ²bX½-¥©8D¬N£¨Éh¾mѶöV«ææÔéÈmšªsD„û²Ï9]à˲·5ÆJ••×d¿Ã<í&ÿɘNJ²ŠÜ²ŸBDÞ€Òãò€:Ã…ð@BW)æ<À1yBÖb˜QÔÄÌð LÈpé¸g¡ +§&? +GYc½­ÐU F·äç«:Ši š…®¥õRÛ(ˆn¿%ÓîŒ!VÐH«JÊ-0í7\©Ô(†uÆPC9ÅÇ‹¯1ûâj\“K9 Yò|”Â3µ4ÐÖ$_,ëq^ÎY(¦I&›^]|,ÃOU]Xò)?ÞÅ6,ïÈ|ç%f¼ ª·öyû<øÔUsÎ5ÄÕ0ÁÚDmrÝ9&(y‹'§ÞFKFìD¨½*àÿß¿«Ó(@Ø9ØewiFNý»Àt,‡åà0gÞ›©¬,£á+ùÞÙTø¥¨öÒå>PÙáZ¸kéró$ï‚zIdÐxÒÓ¶…=Ùƒ§Ýå/–OßôƒÌjg¸Æ£}äŠAL’VV‘Ln$Û¬F3ùm`»Jî{J@#Âò‚@¨®u÷2BìË(4å=S +¤¸ %fáœÝš쥣“ðEe)¨4‰c$G ÅóLßÛ© îyuNFÍR(¨Jùäu¢'iÑjĨ‡c[è×!ŽAUÆ “ƒt¶e`‰Qñ„`çf!`E°¹6Ï“ ð/f’KWѽlr3 +‚edòOÖÿ‰ÓW¥ò|,UÇM ù'ÃT âh¤©§"ÎÌ¥õ$× Ü°l D>O††ã!h˜¨~ §þ@ÚHUâYZÁ€‚ì¹ߊlu€Bà]fßÐp¯m[8)ŽàŽ‚N­næj áÜlÇ$vˆÀ‰AjddqF|îEe™!È4¦  R†X·nÉphPhò†W³¼ÔËw=#G\@w2/†ÓJ]È}‡-xòì•}äH^,:ç€#"t(ãc%S>.ô<3._²Ó@³GG‰!v•œ’X>åÁTÈîRYG€«K­+Þ[aýÅÐ)ô9z¸&±1 VqAMˆëÊæ|s¶ _”{ðåšJò BqH²IeâƒÙ2vRùÊr#U ˆœ§˜Jל ,P×-€°' X× WϬr{PF"BRÉÑÁè]‰l¸ŠbÅý‹NÚDq»+sòÚs¤¿ŒBÉãÜ4³²g¡G«\G+y‚ÅÃY?îФ.¯6VW7ˆ+2‚Ì­C,6&O?o®ëqžv‡¯Ï5œhŽÝȤ{შ2E(–Ų¤iC¹Ï>3}¯IW… Ñò¥ª>4)80ŽªŽƒÒŒ3M®¯¤(1Š”™ü±„â&!µp4Xpè]e:Óáh'&RÂCµ÷,‡£vŠ¨´êGñä-Ó–Üá¨f³P,p–Ûlx®´ýjYYɲtƒ„t—Up7ºn_ˆLÕ4842æÁŒ'£‚Tƒ€ÍPms²úOœ/¶ä6ÏÊ-®îF¦S§ ÌÖ!2ú!{˜jw£zÃ!É"¹¿ëãnEäõ´y½p±‘êy·à%eû±ôˆÀeµ(“¸P¤Ø®.ôÍ`*ŠÜÆLô3S­F,+³}=P¥¬X¸d¼^òÐÚìD¯2^àP7µà»êž/€Õ2¥KvN«ÃÎÆ®šdøקÃÎF#8¶QN3m8ë-‘A¹ãzG´½FºTG‘³Ê“¨Óí ;Mîâž`nÇúÕ±%å³<ûÞ_Sk˜ Þ°3IÞ°%ïW·(õGɹyj÷œ-în„à#\ÝvGm*ÁUŸÒüu[X©ul(¬tJúRøÞ žîIÛ"mÔu1 Ußæ¶ß…ŠQIÑ'ÙO+ûź¿ ºrSλ­¤ýc÷TØÈöuÛíà$MPÛsW~ gõîîªòiU-£Ö­2ÿ…áØvÞyq·ªˆ ,êPº£¢qó¢¬]ôÃcLé*¥hØZ¢…5STÃEÓÇò¹wíÿ +(iñ7j Š±CëÈE]PŠNM&⎄ߟÑãÅ…&S¨·ÛHûçî¨önz!öýË£‡_¥d™yçýêõ2íNÅ9Ðb‘“´wf£å¥Q-0NxOÓ“P™Õ{™5ùs7é°g†N×=SLÖ Òhâž·ö¤€X©› Yo·I›£Tz£lGÞñ`8>)W²§0mHõή³éPÇÂw`&Œ³ \…V¨•HÝS•<ý©£Æ†Ýµ¼’píl/RæIFt¤Cc„5è…8{GCVšLƒg1Kž5ö¬SÃVXÁâŽøbX(Ìî&9²o=…é@²3S®™`#É^éV±™²l5*Â3l¸…0ByíÁî­†GÊþ)Û 3A/Ó¯^Ç çëÉR?­2ð +ª1ÚTEÐÙN8tç˜H*P‹çjìdØÄ«UÅ,$Þi]Øtõ2ÕG]|µàgÐ$•aÝ«¯sRËŒƒÁj¡Yó(nâ²;4VD•ÙdecÈ.ŸT‹Åbùx"I"†ê5ySM¦«AÝ`Ù¨AVcT˜»šJ•‡uÆiE­c6¸hC RáÓHJx+C8¸£WIŒ´ñlM°õѽÛMâêÍÉrÿg¦Ã?Y$¤±*žöAoª+b:X¹¬˜Tôàc¾&r +löÖùStw68¬V°ò¼D•- “åœèúÂ¥c¶tÆÁJ^Ã8›í’Ù²ô¾'5 Ù½áð–©èÔÍÆOe&Á÷ÈÔa&&ue¸õXÔ± +¥¦Añ%î©Øt Gu‡[õ&vèù¬Ž×TÔ~Míj7Í%¢ÁÇfÃä$­#:ßüi-]<À^Ðs‘(_xÛãÎõšT¼ok³.•.|˜¯*¢FA5ÍX6ÀåÒ0› V„ex-» “:'À80½a¸–MÕÉ:°´²ÙAzG-O°6¿¯B°™w£Šýˆ®Ø^‘콚ºwÙÄÈ’N¬ˆ‚¾ŒÀf¯m EevíŒæø x) ˜r¸Á@#V< hû‰“ѺºèQ|\ð'÷]ügˆ‚ÚÕõ°c\C"Á Àc¤ÑGg¢>Ɇ$¦D¿:½³52r X×8å(6% ×¹EIgv¡Çš" ‡jŸ‚\¹ FP¥ƒ° ådUHáæ* ÕThKÍÕG*ªÈ¬H*^%åê€ÍlOCàp¦ µ†Jk ê¶\Ùâ2³8·*eçË€L/¶ëÀ\ô¹×â0½ˆ¹´ŠAEÓ¹™IU‹“+XiÐÇÀ®Ôn@*C½ïSb’îdµŸ6§!Ò½MRÑ',3«øˆKˆÉ Ö)§žôV–ìÓ"bK*jcùXÒºäqúyðZä ŠM0 “6Õ&Ù!ÁÈš%º½I0Ñ /“VUÛd5q È¢©HóŒâËÂ?yjÕÕ¹|…‘Î.guÃp³!«ó…p8ëFíì8f-²´£r’4ÝLn) ~SÛžzAƒöЦ_C]2Bljîw¯¦Ì‘MABÜJæ7ªi¶%ºWÏþP°Ìñ«4FÕ§˜ÁN49^)l6ì#"6¢{cÑßû´ ö¿áȃƢt4AÍzçEe]u´~Ÿ²{ÜJ„q•3ÀOrp\Q‹ÇæÖm¦ Ø4¿o%^,Ež°ˆecZÛ½fô¨~ìb‰7ên;¾´Î/©Ýç°Í-nA@´ò”D(pû®$w˜pVb<ɼ™Áƒ!{*çÙ {j‘ÞîVõ-Ý=u’èYZ_o»°Ëš|†q¨Ú}k‰jsw±.“z¹ZŠ^‘²Û…S*²íW>6%y—ÄèítL–(œ¦VTJ¹#!¿ ®é•MDõ|oqŽg,H²‹1aç­¤ vP[ÝíB29Vg»ÝŽ´{îFe“p¼3Vå@92†›íüásÙÂëîâ¬î–fwÚÏ©»%§aoŽKê*m|w"iîõNv혢÷êïÛ…h*ïwsÛ“6^ÜQ'Óîn·ŠÂ£ÌÜ»kfæ´DßÏÐ@Ípˆ×Á5aGÄ84ŸéÑU§ \®Fð±õä`oÆBÿúÜ•êÃÛkWö¥:‘9N¶Aa—í&ž0Éý™*öòÍîÝúÚo¸1ÛÞ—õ2lIÓ€5ñkj8t%Žì¥Æîq‚tõ÷‰êç}˜Wvïù~AH‹œ¶¡^O ¼Ä°Å\ºã +?±É…q+à†ÈˆšÇݲ2‰\O,ñE») ÄÙ1#T´ûÙÐ#­ øÏ…™r‡LKuÇtóÙ!]Œ˜r_83ª¨©Û^lQ¿ÇMµQ£I#ȾC_;T²ƒ_Ûd¢ð`dî^gC–C9Ñ­@ýÖL;uµ‹J„vWfÑ°'†ÙuQu5_#æbV÷+ o¼Ñ7'ªÙvWªÎãBIê“1·i²N1ÑõDjpf[û?mG’×V_¹õLF4§@ ;”ŽÚîý;:i=–¼ãz!Ï%'yÖ¨p¶&bïxnG¸÷âd®Ôy4õó”Ôèâl^^;ç%užN,Ïìv<×¥Œ 8ƒ¢Ex^TP†¢=3Õ# V¹ý[qû¸ ã&5øA³×Á± çWbƒ[ƳÏw`Ÿþ€×ŒÉ›M‰ÀÖ…0÷ÖUíŒL“TÔÎèd½ŸÖƒÞP +å+ ÄE.Tà²ß –bÈ>òIí¡ØŒ ½?™(…|W¤¹ÝiYè}†ôJº¹ü ¿Ã¾v¨MÆn0´£ÕSS'”ªât6ZZ]­Y{ÔÆpá?4{f¯Q9½GjEŠŽþË–/ÿÔ:¡š6vDó=¶…äÉgÁ×?µ«Q;ÒÓùÔ¼áy¨E¹nOúÔ«#¾N*‚Sþï_ËLZ °ìüøŽÚŠº?Ø'!¾ÝÏ«:g7祡f¦ëƒ¤brH½ˆ¦Ól"Ž€Q=»Vßùo™…môüI\šØm¥~fbQ=¹{›}F +©ÜéPq7h#ÍFFBXÞQâˆõÜÄ-+tª:ˆ¡ hæû³U8+sX‡VTÈ ­V]ª²ª³…§œH\Ež|üͦ#Âz’èÕÂÓ“ˆ,ó‚Y‚FÍçï]R1U)ÓÊš7 µ¨þîI™5<¶È`iâ‰HIßÈÙ·x6z-°‹)~ÚÇeX®&ª'#5zÑ8×Î%eBÒ˜ó“Lï¡ká¸gmÅH7ìŽ1á¾g*ÎF¯ç̈öW²#ÿÔá_¬ oÄpŠ÷\ÃKׇOöÂø•Î¶X+‚IJ•Yñì„D[:€vŒ½£ÎC@ê¼ÊH—X&ÑÔiûâÙcJØ>Ôœ+eÒ4­)ûÃûJ-ªWõoT¯ä€*›æÐyÎ|"•ib¤²Â®Ï·¦W°¤ÏØTM¾¹e9Ñ §EmzÐpÆg¨UeÄñÞY¡#¸…RÕ‰xÅ6t±"W¶ùn€½:ƒ©!j08 üº1+Ú¤°þânÏب¶õò‹õ\ÐæaY΃†$ õÌǬG/2õ¹àèµÛæŸÇ4¤;?Íä*þÐ'ðäË϶Am”èp¯eó}€4q¯¹GÕ)siôM0kY¢ïahê°IA&/'wV W óX2î\ ƒkÛ !Ç(âZ=}e­¸%&V¹<9õîB†ï˜úcè÷ñ]Eåž¡N›íØ_h;Ë•á›Þ[ƒP•*›mIbÆéðãÆB +æºÓYˆ.üMEi2F˜7ÅsØÜQË%禦Å> rANÞðŽï³B™Y¼iÈ«ªb¾Àâ¢zzpcÐ ×ÇAñtq°ly}ìðÂGñª;I>Ž¯zÆêt:óÀ,ì²F丂Eº­¸“åäýå9±‰pÉÅ1ÁxùJAÙˆoaNjé“ÍlÁ›fFNIá J +ŠîˆC½pPÕà/v£ÆW/ì*¶áÚ¹nà”'cĬ¹B®z¥Èʼn*¸#3'¢Y9cóv¤ýËì¨(b·-‰Þ +çˆz™“…™Û9¹3(”m=µbÞ £â£ý{pB×8ídPÓ°àdYe‘q*_¼®9ܱRœÊ†Åh­o TEBÆÄö.“ò ›žaäÝeY£AE1‰ÏÉ®,¥EU-b,±ì¢7ŽEÍ8ñ•þ2ô*b5.ú¤v_{\9à^Iˆ ÖçÉvÏ{ç+}æéÂÑQ`zÈ;7…!Fá”IÖÈå†yØQÊlÔé¦Ed#G—U=ÔIƒG-º ÑZSß±=iÇ'É%É^qîí.Þ +)ø<ñÉ7>Øaã‚TDU»ƒµ;êNû¶[àní`-G[4}Ÿ# +4²ÑDÆw  SQ.`-;ÞÐk¹¡Z\©òÐ=ª-ÝË ö ¶ÐAF¸:AmAqZUÌÆA-gj„2™ƒÚ¢½ª— ,A»µ…e)q\‚Z4DUâÍ +jÑj”Þ6¨©zí¥]‚Zä/•Ð}‡_Q[Þó5ª•‰¸¿‰ˆ#źÒ,óÝP-Ç4¤Ú.Q-jyÕ«`j‘ìïîöª…}î't‡já*P½ßŠj9A#] Zvˆïר–SGxFv ò]Ñ· ÔâJÓ÷ =JýÙ+sÅâÕL ƼFß6T‹F¦ö|½Qw`w‡¬Ý=jÂZ¼PFÀ {`¬Cמí`-~ˉ§°_ij<]ÂZ®] W°–‹Œ¥Ý`-·"æªå–5BȪåö²sjÉ + “Hv¨VlÃ,†ªÅ°CµN¸¹2ëÔn|½°Û¸ NɱGµÛ±Z³ž½Õòjíqív ÷¸V‡_Ÿ²áZ ŠÞ/p­ +³&®•Øé{\+ñT®p-DY^¶­®…ÀÔ`Ü=®Åµ!ÜáZJÒZ÷¸v'o'®Ý æ®=í;\‹AEµ_ãÚÂqˆéÖ¢z×D÷Ö‚¤v°Û©v?{\[ªçÅ_àÚÂh´Rj×b~M(akOÞP +Œí6ê5®“UV¹ïq-øQ­®W\ G?mõìNÕ(w¸©zÒð†kqd‚ ÙĵØ>Æמ¼£¿<9^áZx<;_ìq-©­ç®©ípíeB„Ñq-ŽjZÂ×â«Å;X‹Ïƒr|k±ê»ÂÚâÙ…ªÝ(û7ÙˆŽiAa«Ÿ Óž,Š¯ÇŸò î0maî’vT|°{ÒÓ §+L .Ñ÷=¦ånµºÇ´p‘¦¾Ç´Û»ì0-|šlß´»,xÃû‰iq Í÷˜­Êc˜(|bZ@®Ò†i SÂÓž,‹0-ÚGŽ’¯0-nêŠt‡i5T,î -{ý)Ö7!-Hò[ì -:´g¹«vÔÂF+¤%©È\sH»'í¸d£NH‹žïšž·BÚ“¯Û ­{|—›~ 5ØÎavFO-zþz؉4ÜÛˆýÉ]¤PäECßÖ…éiµž‚Ûv +ÚÈÂåø1p&¦ÝùMÍË„zƼ¿°$µLbñEGm‚rŠhX +ó @ÃtÃÄ1DI”¶˜´…θIðß±1ëåe&ô¢ß«›¾‰-7DÊë#)©H4+¼.ú¦ªî qQ½ÜJC ÝⶠĈó˯Æ`Da¢TŽ‘qœíÄ ×2”®B¯÷%D¥] QU^hj¡gÜB”T?(C¸¹°Ž8ȉèl]éBפ]£Gr‘ñ _”wSUmÓHE(žŽx)Uœ1ø®YABû;„Éø,4ø°ÝD½[­p.C” •ŸS£n{ÑHü£ñÐçŽ$ŠÉ9%—Üg`  ï[Ûþ¿B[ 6Õt:2A\=c37ûöõË€A삯Jì攂¯Ã‚x:D2Þö C8NŒ "ñ)œlŽË$²}W¡ .gm[$tʦ!6)x*ò—"Ýmëu˜"‰óy·"å©öxóS%U#ú$DÑÚÐáìWö.ì‰]…Xâ¹R„×’¿Êz]©6ÈÚ`‚T¡N||P *Æ9ÈF/7ñ—¼`Æ0ál˜)Ñ *ëÁÀÛ¬5ûˇ’rbjµ +ºÖäá¡ÔÕ%¥b{õä4ý¬`rODÿÜ$RUx¤ê-jSå<ã S ‰&N)é¢úN0è·ˆïn³ø(îX˜—ÅÆæFÝ61f>BK€Ä~ô$aî£Þ-o§áºð:ÎGuÊ$éhOŠÿR9ô×Í"À.w HÁmpÔêÍuG/m^ŒªÃ +±g+Í)j¢¶ô¸£S—´¨*A¿ Salšî\h4wP,HÑÀO‘EËå F4;E4¦ÑË~µ!IlMŠL@¶€_˜°éZˆá^~*Uu¡¾lk~É”…ÏÜkƒAÙ‚(|* R„é&Íš8¨ò;©Øš ì› qÁS™Ârf€Ÿá£„Ñ×CÝÚxàD‹È¹#h€ëŸÃ4´‘‘ë]•˜{‘%ʧäIDÛ¸-™3jh(#§¿î_÷ðUw»Ÿn«E!Ý‹´« 7a‰ÿ سowî´ÂÖTC +¢ %¤ \ç˜Ï‰JlyAþl;ä×rNž<3´©¯E)4âDëu•~­e¼’[N¹“Ü +.¤ÖëL,ÅÊšU®Z¦`œ k"¥Ý +!cŒè5ÇHâƒða1 +sï˜4|'áÓêâ9=UI\…F‚<-?Ó!õ“‹F’cLëÔ™7ùŒP´ØhŒ Qì]>Qîä@¢ð™¡iðŠ8Žƒâñ©yæG^œŸàAóûã²Ò0++œëž4NMöTʬú— m6Õhã›Ý…ÈØÁŠBcxköØk„Úe%@Øæxiiš¸¨|Š)zrb‘†nÝÎ(1IœJÞ³Ÿ*ü¥Ž rž9ûí0䀡0"8däÀC` —KW8e}t‘.ÁØcö–öóq}†ìWß»”;a>Š]»QyÁƒÞÊ/FÌ-ËÈǨÇ@÷r«j s›\ŽÒžÃ¡'_‰q7eGCƒ¹Ì„’áÛ I6¥ïŽOŒèÒÙ)ÈÀד÷ýÙïSf„Á˜4â46(°E‰Äi€slqq>^Mp9>¾1C6<0Ìm?¦4ñcòQ5ØPO“ÀéýÆ£ƒjUï +8lóN<£báÀy1×eºÄí ì¦:#À°"™  T&rÖÁué,ŒKÀAäò¢öLV¥#ŒÐ^~f¸{YOíª™+mž™ûK«á@P$Î#¥Qd˜$õ÷Ó6 Ö“Ùì-¤Glç4]œÓ!ívY“'O7÷€dJÐï¿ íÃ~‰éÞJä‡Úd8­J°”£`)›`uz¨&j•C¸(§þÈÞJ’æÜ ™Ü jʨ”è´V²åÄö›KÜ a5—ø½Ÿ‹û™)0)Zï…jâ¢*ï’*AbW78èXÞ/´~‡8mšäÕå쌓viƒ—(lêtôJ¿~ÙHÒ›lC° GHÕ\º(4£6TÍ85ãY‚ +lti© ÄIÊÝĪ©^]× É€J]ò¬‘)ÊTÙºÉÁj ø%¬bDÀWX-$iÝ®á=æ/¡«£×ŠfÄêÅCÀðhª³ã”\ §)”rPAõ|Ï~ÇÉÛ‹&˜Öed°öÏN?ô~_’ãÜ9ˆÁƒ(I¸Kwƒ…jI¥|ƒ¶Ž´ÂÖa{Ú©m":1µ5f·árGT¤7ï~D=ÊJSŒ=uAMp*Ó`Ñùk€”7€Ôfßêí::ÖülVNcRLÝê‘6¶x9Ì}¢e&»†seƒsX`±Ïz¸Bé»ØeÔ0 +çè&2+ùÛ¤¹jZ4-‰þN vØ °ÌÙ.æ:ƒCw®°ú•Ù4fÇES)])®»£.ÛÛ ‹t÷šwŒ©ñYs(8´ˆñ#¾%°<[ V|4b¶°ói5ȧy¡.N4.`耘1¶„½]#”»SðCxó{.»Ëº‹4}0ìxJ˜ +'F…‘8‰ —\+d{ò]R/Œ‰³b‘·žÃÄxë9ÑÎ[ÏO@ó ÑOðõ5?Bõþ¶™Ô;`t¨téqHš‘O ýøÄ‚¹2r®Aw„zG4xúå]ž@ÐTÕo˜ö}† Ï@ò5–ö ëAõžŸ€ø#Úç[ž'æÃÁʸãžØ#Ø¥ƒí"úÑʹ¶ƒÆ’óÌÁª:š^G¯xbÏÝ‹~0ýNØýáÒÏð?ËÍÛßþìןÝÄ–yX“€Çä~ß‹§®qú5˜çcÉ£¬"fO{{›£Mñ³GžÿÒ÷þg]Ó_R<þ•‹ç dÈ'xù‹K2ê¦5ådøÄ º©pAqB×ÐiÝ'ž7&±:µq\8ÿxÈ@c›“aßwÌù)½o£æå~eh¤n£oÂr¤Iè9¤ +Üx2wè˜-‹_`þ$Ž.k^â’ázÎrYԬн÷3?®Ëgì߇&嵑Lã@=ü”|1PÐøÁg©Þer­ÈZLfÀ¢ý&Fb´'Nè§ÝŠVõ,{Æ¢9xÂ#â™ PÅìå¥õŠ»p +CÕ\”ò°%%å’wœåÄ+ãb–MMhyñÝÅÕO¼­þ˜3”½ >g•€ëèd“Z¼Ó*åŽ É^¨«Ï`þmAoj oë¿p~G+>a~âç¸ Œ*É„Þ|•ÀŒ¡ù,¶ Ä—ÂÍ×ç<Þˆž|4â“«§pšø@Kö1æ8üv?ÃW鸬Ã*‰–‡ëH€Òu ša§ìźl‹p¿’éÊEè(­ÃS‡¥Àía]JÌ3(:VE!LÍYMJ¢Éš)ÅáKRØÙiúv”qו†fw+1bvŽŠÓ³X¼f\?/>ÀsE g7 и0™g.jFkQ”ØisyA,jôIædt!á4>ÜR¬¼£…¬ymÎ0“5‹‡´˜(RØè»bn`™“ñA1”9Œ–1×­KæQÕô…¥àÃG¡R€´Å³¦Ý‰Hª)ËYMÞ瀘š%7”£ÓêFÖÈNæ&q%äÙ“˜P‰à¤âyD­+ævA0)T‘ [´þI«N¡*!šÏêlC­‡ZçänÞCAö3þðºÍ Æè¯Zèô;Ÿ"’—æ(l©±hI,>Ý—!ÕÂáÒ@WìÞ 9Å4ÛO|¿ª‹ºöq?‘¿â½ððE_PÐм™Q˜{ÂÓ •Ó…cð¡0è^ÀA•(wžÉò8vLHÖÃ{c€1d•Ç63K%½bY'`‡¿fÌs*ž Þ{?I Û +€›O+A1#l¦Ä9^ÅÌˇ"×<'› U'gÒ G Ù³]$~ñ–•Çë¸ô/ß_$ÄÒã«O©ÿ±oL BçÜ[ÔÉ1kŠB6ÏeQ–³­Bô ÅÂiì.(SñF+l6qFæVRC¸i×lð¹­è/ï2°ðöŠÌ¥\ªè'dA<ˆ†»ÞAss2(s_loóBé†ÄUÚo™cQÃX¢pô s¨LuÅOòp(²Ô©Áz.,‹Kr;ßî IMŠHnM¹s4¹(Æ4ƒ”™ixUD[OVýi·õ?©OÉÅ[¶ÙMüÈæ%§NT'TZ¨)»Ä{¥¨%7ñ£šyøŸî|$¡O/ Ûècèp©˜w6d#3$kT«Sâ¤!)îR(¸'…o\FO"{[`´XÞÆ4iV±æM.Ó@LÙßp£¢Q˜£"—];žÚX_\³ 9ºùþâ˜7¿}PžiºÁmÌm!a³ïãqÁ¿ˆ…š}R¯,"§ƒ;Ûb^¬Dú3ip'rO9=*ÌÑ✤©9‚=–ÕŒ3¨y„¸<„Z·”³T_ÌQf×€˜5²ŽÓ£¼âØ4š¢íM±¹#¶ ±1Ú…J‘^<¨S‘)È£ÉáÕÃg#nTtQÙ¦™W¾:†eõùŠë¥¥)‰ïŠš7ÆŒŽŸ°½[N6NÌõæ¸ìO»­ÿE#®1U®¢é8™i$CÄ[O…ì™S¼ò2e³IýÔ¨¡ƒäËì>™Fbe»î˜àÞgƒ©`à” íJœf=sií¥º,(&!.ðpÒ]˜— æ´LÌ®ed…—Ö1¼3.ûXÙ÷´‰å³cˆÊd g²ªû°\Ø7»ŠF¸sê‹‘§<‹èé´¬äÅhD&ý˜ó² 39>ˆmFS{S¶ñÙ¼œ±˜ eØãK! a†ÈjŠ6¡DW´‰ïÝkÐø—ó*¹ À{4âÔ¯A?tg˜èžT5ÊÙ'ò.ÉÛ¨óa*_oúJ#æôB'Û[E?¶ØÓœ ¹øT96†E$HÑ}N2Œ‘Q8&ùì +ýÀ¶„¦¦ê·å¬7Þ¨Ja3’{˜~œpïlª´.Ôå‰5¶”_{+G‹ïdèM¢(³ÓÓÀaÏ> ¼öY Q%–ÿi7ø¿`¸u™Ëf¤Ïë³arr[ö^±s±²ÏiÚÁ^’<(&a¸ö mF\ Õ&žò‚³Ÿ$Kð b&}¯½$OöϨÞåÄbVŒp« `9§ {¡fàaû¤†:BÝ:Š±¿Ò»bv½3Uƒì ôÄd£ù;×,K#óòøÞ»Õ8݈páœÑ‹‡LŠŽpÔá¾0³Ã NÈ!÷¾²šjeGBu+lOžu2ì s¶/g+G»Û—|›³·gˆP^CËê܉°ðœÑ½&ÿ2¥+d ߸t¡É…εÝéG7:ï™#Ýÿðº®tþü œé”HoâNëù:Ô]Ã=âTÇÞÈ­NF9s¬ãg®už®7q®ã¯í^ç÷ž8ØýÄ\ì¼þÄÉNú‰› ýúŽö—îü—õÉâ]ÎœíÜ™×v·ûJî¾R—;÷û5îøík»Ýù™gŽwgÙ£ëÝYöè|çÎÜï\â×wÀ?ñv0á' ï[Ïëc ÷Ë;Ü^ +nwn7ˆ¾·üJþòŽy +ã×¼Cßkç<ȯëžÇoßÀAïotpÑÝž9é×\»é/î´sÔóã^ÛUÿÌö强ö*gîú•üº{.֙˞kræ´ÇÞÀm7~mǽÛ×®{çÙƒóþâòûþ’ž÷ÿõ]øO¼Ý”-Gü¿ZÂœ»ö©^Û¹OpæÞçÎüò_ÛÅOó&N~~ð‰›Ÿ/væèçÎ\ýüÙ³ßûõÝý/eÂ/ëv_•ï<8@)ýáj‹³ÿp"˜ˆâµƒTz¯&p½t ¸ö>„ +H? ðgá_í×¼”¿¬G™øõ$hàhóµÃ¾^‡Àég¡÷¿¾vð€÷MÂüⳂsñ1„À?œx§³0Â\ì× $<ñÆ?nS}ðØcÞûBÆC þÝÄ{?ùä£OoÞþů^üø—¿ü·O>ÿ™¿À³8`‹ 2êú’ý’åæ½ïüú×ö—ß~òðÉgŸò[§‡IÿÍG¿ýèÅ¿mÿÁg¿úüW}ú«ÿë“_Ìϼy»ø?/ùö·ñë?¹Iïß|÷—¿üäáóÝš•íç¼èù>û·Ï?úìá“çïôùGÏðþó}ô›ëk¾ýƒñü»ÿû“‡ßá)—¿¸ +ÐmÕ i_¥ð¯o–4‚qêÅ‘/ ‡H£XQ¿M¼%EÏñÖ¦ÐY& ´I€ª®¬¦óû ÓÅÈÈŒšFZÔ¶7»µùÛ¨. ˜´¨®ó VÔÃAžQá?S¬#T€Wc¹.~K¬:£Œ±¿.{r"gtN£gCŠÙT%†5¼ÁqÒlo@· ÊŸ!~%¯3†6cdÀÂiô#¬ž)€ê€òµg(Â2Yar®£äP$Š˜F’f5¡ø}´ü·ê|XØ,f5J(Yh‰ªÛ„F€<…v,ê9N ¿eã Gá|áÛTCŠî–£™ ú4X­-Mv-Zq&+^z¡¨j|φ—QѬ!%'©Ä´ †,Gý3¶½ ~hWÃ`p‰ÄæÕMx©äuQh¶¨0¨ìDô©Þ€%A¦¸Á' Lg*ª +¿R­ JÖ×ÄâóåÂè}L9cËFÔÚỖ$ mj9GYªY¼lŸdß.r•À¥7@šMq2öà…ÌG š$¬$^™-ÖP¸Ä˜ +?»^¢!ʬ3¬ÁMœH + .¯y†A…>ÜXhŽm³çåV¸›—'¶W§„¯Nâ~–,NNJÎs8ŠƒA]‚q¬ÜÎ q¬iÌÓÌÃT³~›Çh]Ï¥…áC–™Œ$y¨’_ÁùeøÜR|`8_°¨ýæ‰ì¹g³u}¹nø‚/7Zç?Ä.WÌ„…ã)8=+‡C…í<9}ggôp˜ùÛ“S"®ez”5'éTtȸ3Ix™ä££l=‘ÀIílt-ÑOäþµzÀ/O´È‰®92ÆãLtd8“Î<áß#£» +»>'çæxÀ¨ÃŽ'ñä¼Î5~zrþO¤Ä©89ŠSÙtb®JÒîT&^ÊÎùÓk{"‰"ûAo|%Û +àDQÜ=®TÎôϹ¦:Uj(ÀÇ”å•ì¹÷.3ïC¬UŸÃ˜1²£h¬V¬Å:€ ÊíÁ§í jóçeà<$÷‡#RÖõ½b|{õE¢†V5 Ƈ3j²šÝ-èÀ¦¹Hê#—¢äREä( ZŽìÊ£O±A)™1©Û[F¶T˜¾ #—¦8‚>8£o3Øo ƒl +Yëv dZr-‰![$ûõ™Ý÷<'ʢ̷¢ãáRVÜ┣ÄA2›-ŠOS‚ÝËÞ#‹OÉ×þÛFÅ8f„°l»@Ø#ù-qÆ¡˜}Ð+wtË W²á,ë­PÀ¹©X{0ç±ðs‘SÃA÷˜~‰í¸×Ê>OÎÙ›‘-ÈZÓµ>ù‘Ù +ýÀ‹„O½— Pì¥pD¨¼ ìvÍñäÁé˜Ök5E–[ª†wâ)l‡³Â^„`És˜Ø µ,ŠÌrMØARд~jñÙôlœ†çP õ-¥³6@R41`K?Go*æÆ6Ò§ÌßJ7A(Á}¦èC¯’^5xf2š ÊL1Ǹ +ßYì—7Jù™–©»GŠ\Ž(¤éÊF—`ùˆ`‡” ìùÐÛ.¹°®š`ŠD;YÅ8‡ ÇÛ»‹ù4p.ǧ ÆLͨ®¥8¤ÊóÀêHø¡S»%¿.KuÒ¥Îû/Al 'l ÒØÍ¿Ìt¢Ú¢ã…S‚&†Hm*áv~Ð j®ò*@÷šfž`AiW'òËaÙ³ßkU'øUBo;ì•ÁU­‘)°á-¿ºÈM1e=´ªÍ ] 3§ì%ü ½DØGÅ©ŠAÀÀ KÆf{ðÄo/òEô–©OƱ&í3Ç0鈴¸H +endstream endobj 64 0 obj <>stream +ÍJ©c×õ9û;He»mìÞà𙚳ýLÅh:ÛÅà]AbàÑHèÁ níðÌ2ÁÇ:«L„s)èÔ±ýÞ®³ ,Î&ƒá”?P Õþ!jÜlu1`j$V‡Tl¯)¸ ¦‰:2ƒRCÐé +ÍX׈DŒ4Ô ­L Ûúøc;…;ë_¹ÑÓº +¢q© $b›=¦8' lRô˜$4„ ²-·„ö@ŠŸ1Yõ€†${Ù¬fÉBeì0Œ½€ +ì.Åíàƒ?‡R#ÉÅu!÷[·‰ ¢v‘¶ …Æð¤6]ç™èqàE¢’(®óP‹r;s8Ÿqa|¬Úòx£‰ –d‘€löx_¬c•‰h±"¿+¨})NMèJu&t¾„¹y”BK¬³ç<òJç¯üTŠ±“59®Üq‰É'{q²c×;{'ž8pÀ‘MìÄŸžðÝ9Ï™øŒÛgâxx(ÈŽ§ìä,íƒPõõé>‘Yñ T}-SN$ÏAB˱ƒ¸£ ;ÊÅéy³w;®äñQh…ûŒök-p¢+ŽJåNùZûUÔ#ªìDç]ëÅ£ú|ê=èÙSm|¥¶ùÛ£~?‚€#X ;‚Š#ò8B”»ÇáÌôYíL¤ ³õ0Ä Gмx ½=ôN1aMêÅwîÍÍ‹Zæ `u™Ü’ùŠ<÷âŽÌóŠpë0ñ/SH˜éŒ£é,BËú!Û(6OyâšÒ£Ín‡Å¬#’ze6)Æ)Ì9…¸—LeÉ°ðÐŽ3i¿eã{²FóÚOrØŸI]L¡ )rOTuÁŒœVCɆ¤·¨»c lˉùÔKÓ!ͧà;?¡‹,Hð„É‹Ð8ïP~é²!»&/À5­|}3*…à'’ÉøpF)ó†b¢ åQnnSrŒ” $%Nàe8y qí¦äUεZ`æG÷?ê8*OôqsòÌô<5SO-ÚGŒß97T¶¡ÿT¯o-¥g@Ò•)bÐ)’0rÄÖÎÙCa}lmaV®ÜÜÌY#e@ØD6™¢‹´-‹_©c˪Ÿ :`Lã0(ƒ +ï±ÔæòjN´Ç /˜< 9¡Œ3+‰Õ’d]Ò `²t^]‹z›B¥*Ë¡°g,Ô Ž”>+ S#C»ÎlÈåf¤æǃoü°cE™œ¢®SJ'”‘,½)vN1"N€£»Åá'šÝÿ\Lª¿ ¥„)J~¬Ò‡!Ãì8àHo Sºú Ÿ®'70ái 7³o«&¾ÃE€ì®g‰ÖíøÑ°‚¯°e'¢ÊNaÞ’½1êÌXÐ’ˆ£ìÔ ß€ëA¡Çý=ë}è Ú”ò5"&ˆÐ1:šØšô€_šÇ­œyÂïÐlÓÞŒ“E¥*k€JLã59Ù—·)ò­ÐÜ5ˆ“x +ïÖUß“‚á3 +ÏÝ›¥Š£‹ã’\¼ ϹåÔºþM¦%3õ)l§˜‘›5-•îUfRCX@¯Ôö‚ÏáVNxf5ÇMkˆ#F•$¯ŸxÆ΋¨á€B¼ÅPCYœc&ˆ¡§ {V#g^Wa=ÐÏtñ¤ˆL#a˜÷ãH—.‘Zy󓢊®,P£a ¶ot°0c¤¡ýº`zk ~‘k–“7áÍ\ó¡q’CD;{h¸id\!zú>vYþPÀ-!&DMä'NsËv™€LY²PƒÉŠgçed¯ _·`âÝñó1E|°2¾‡î]x'1¥÷SC¡w—C }¡¡q¦;-ôØ.`Î]÷ Ì“è°­û‡ÚéF2‡œÑ]… ¤aDt>Þ­)yíÀ1º‡Ä¡–yƜ™%,(£™/¼\Ž93‘JÜ‚JÈœ'¿JcÖ\žCÏ2ÀÜô¥:ßqD%Êâ*Ù¢7%4u‘ÖæhxÚgháMÅ–²R?’Ôööûlg‚ù¤í¬L~ž£8Œ ZPòdz6º½{âà‡¡#Ùð7ü°M'èâ=gYêxreÄ¡5}IÇ=% X°PX(žC[Õr7 L\j?‹* {ÀºAæÖÅ­ºÄ*E —)Š+˜øòàÛ‘Ùî‚HãôpŒíbª(Õ”Û rŸæ‹ZÍöè³½@4î­7ng¿·ýÍÙd÷¦Úó”¨Uã+ÂþÕ ûƒŒyÁ­¾–DGiu"ÓŽ’ïD:žËÐkI{Æg2ûD²¥ÿ™’8ê’}sPK`‘ƒö:j¸£"‹ôåQ§U/¸ä ¡Zü¸ÿ1Ê5C™Ä»fº#[^ó.ÁÁgàxRîÐÀýú@ÝñlÞQ._áÃ!?“Gq"TNeÏQDÅØ#ÒîZ(ç©|=ˆá£¨>èG±Ð ×êã2ò¨d®ÑA_=PÑÕÚµê;hHüð¨HÊö “ïÑÞ§zþœb‡ÇPÆ%ù”´kÐr6§øç“ŽPê paÙº!¼#íÚ>! +[ž#=\~¼¬‘èÓÖ(A‚-+Œ}9OeS¨aöRsÇ…òp[c­œŽlÑrÓ£€ü ¤ ¡CF”$Í«ÚÆçŽîšžS@©<041C„'¿‡C +P³ ‰,ƒütYæé:Ù»¬Òä×Ï|!æ\ð©8€A̸¨œ¨lVÉ&ÂúVPÿŠ°Mª“Ï‚2IP,yHùÎ0\[ºt4¶&aì+“ë–¦<€EzÊP³K ©L0·!.´¡Ua àÀÀ¨’]&´2×3¢¥ç£ ŠS‰Sصã“¢‹œPÔH£ÌÐ $yÃXkAd—ª’{ª¢pH¥ý°-Þ•r3Hc¿PèÍnsª*WPÑ<üçÌ‘j¥7}bAº·ü݃&´ÞQØ÷’Š ù¾S”9Ü,ŠäÕÇ“û´0CFÎk<ƒó„^Óš€uböJ¡.¦² G5¤^1±: À2Á,¢æƒXj¡Ò¨æíÁ!(ÂaØôÞý·ÝäýÍð žÀÁX¬áÜb4´‰16M‹œòÑÑG­Yøj­y‡ÁEÉI¥ ¬[N¢-RB¹/¹+@bÜù²ä‰ÓÂÆÑËym–‹zÊ*3vøÓ™gV"FFGÌ Es"I ¼:¦âà—È +LQ]8²3¬õÒ8W¬G`S’µøË4%=üµéNðæ*[5@䢲HI|Œ&ºø.H0¨úÐÄNt,MYµ}€ˆ!Ná‡&GÒ“KäF"R¨µˆP=ˆ!Ÿ0å NMÉúV ¡:\›L¦êsÊ•ÞGµchL“^2‰C¯€£½äþ˜5®ÄF o?UêòÖ€¡)c¦3ti‡]xÊâÀ±i<œ ÖYeøäx’2b7ÒL^‚¹‘oœ +G3:Y!ÝXÖ=íç€÷Zìœ@gÙ|Uq±D—n˜rE0øÖàNž_ˆv4Ö,°5Smí]•5Û7àœø;xkÕlZ'O@›Ù‚¦«×ƒë9ÖOb^’¶£H»÷EF0‰ì3f‰ªzU*‚´ÐÙêJnO±[g ‚í«Xú¯:q±lQãºË)‡1y«Äî#…8ˆ›å±¦N9è_¹x„g 2ØEö….A0 ìž‘K)£·³šš±¸dât"®Tõ2JPcØKÅ»•An+y)Óq?œ$‚›äîDáp±®ç5·áä&÷˜‰÷*%¯B‡P_NüšŠŒ˜³Xq RªÅ»áGožFÿJå‰ S¡& ¸Äc”Nz«¶0¥%Å¿;-š÷¦=¨‡WwƒÆcªåü1¿ÒÕëêw¸þΓÕ8,› ²ÃúžìÂa»ü@öõd÷lâ,và§S®;aÏ>>ãöÓSqrzNÎØùa<9µ'gû\œH‹£H9='2ê(Éïhwr…Nð8â”òœ9žSlt¢NÐÖ5";Åm'ðÅ#¨,3þG€ŽB#ÎxÕ1;«œ T¡E°?R›–“!ìDbpäÙr’¤º¨ý©§²ÒÛ惶9xÚÞdÂE™Rñ˜ù\X¥Ø"BËŒ@¾*D +’ɇG)±ÑÐ&h Q×X½æ:õ5ž„ÒÓ®æIáeöÂQr9Û ‘ £)™3yûœ5Z„tpÆ×u!º¢°coÁГÒáÁ¯8Ýó,ÙE¨'k1¹}+›ÃG¹Fº¦jÉhëå襲iÆü9z(]åtìuF‡*’.“C[”ì¬XS òr¿¢%1e“ ÀÈ“&ê†LD§›¸¶/Åtiƒž"±¡6%,‹0øÛæ-¿M˜0B¦t­"l)ÂPN=ËkÝâ¨ëScc +Ä^)÷´a(wØ? óª}ús™i:¨IñŽ”Yqx´VX fÈ|:“èg{w†öSˆ³á…Çg"³`ÚL¸WU,¨¬gÿÔ¿;.n\ fÛ³1;# ìØ` +9tA¬¶6ÒA?DhdÒà dÊíR¦©•Yw=‹ËÍòŠ;%1¬œ¢‚ŒþÂ"W_Ñ{š 3[‘˜kœš5 eÆ’Ù(5!#Fg8B-òŒfyMO—é|9OÖüjsü§‡]<ÙëS8/žpÏ ]1£ÿö„k¬}rNÎÊÙ‰:½ ^ѳs|8𞌔 ùq-g¼úçJI­ƒx»{\žŠÍs{.OåöAĪ7¸Ögã ZîTdu¥NµÔ•:ó_ôÞ‰v<¨Ñ;Õk]ëÛ­üˆú>Õó'hà6œà‹rWNpÍ ú9‡IG8uÀ\§àìÅa½($H?¢ÇŒy£ŽÒ¯Që ¶=‚`üö-Ÿ`ê#ø~ P¿V ûòAŒ/Xe©­®÷`°Í¡»‡é¯hïœ1HIàì³V-z4N˜ÍÅÚt—A™°.ùø$’Ø¡M)å›ÉgàñTôœaxM“Ö¨e×L ÏœY≿eM,f?Ï×e%-™2¦†¤ gó8“q‡Ù»´$áÕœfn˜K†´•â»Õ[)³áÉZgÙ\âÚH¤Â&ýTÅl[H‰‰ìÂ"Ž‚ùŒh1£³‡Ò¬±ihwÑ•É2lÕSe#Eöaó.?Ü¢85tð¡/ø-«ÇÙ›º³4¶EÉ/ËÔÅPÙͯ<å“áèå¦ä:Šu‰(F\Oîï‰Û¦šI3 Rýžè (©M'g)SGGþ@ꈲ´ü@ÂmŠú>PzñTuzqý§•$}ÕOs˜ÒL`!zf)5¶ùSÕ{’ +0H›³¶«ñZ¬ÿØõ”ä$—¶œ+FݲÊdŽê€"_8œƒþžêE韵xØβSðSR°òÔ(àéZc(ã˜å†rÁÏŠ )$¹M£êXÑF9±H95§y˜j¶xOk\QìLJX>ZàH¡ã àÊÝe 1-Êø¾—€P~<äfŸ,ôfC5oècêmsÓuGÖ4w<‰»®c°hNÔñÁ‹Ž›¦º¹;Ô;u%Ï|®Ã{|Ôác•ø…=$‚ú=ûûCh74? Û0ÆÓ #ZoUåàeyAb·|ù¸À"f•ôæð‰áÞ;Á§2·p¬Q* cf9^Nm +ÚLð® b†hªòÛY{­45*³Ò¸73óYöÞ—„eî,)éº5@B µyw6IŹɨ‰ú¤Rƒ¦*HR«}õøEÅü·¡Nå“XõYú >ùR–âoc ÓÔࣺéMॗùvìÇ͉RºûÊœ{èæ¾TÈ”/ÔÔN!òuÑîÕ£*z¤Ï£€÷ºvfDêžO½Ÿ#ÝÓ”Mì{Õ‘žªt„†@kgÉ)Á†,/h$tÇðté¨XC@?Ž7#`dSJôx€Œ+ð¢ÿT­­ÚèŸÚY=Ä×öS5´” HyuØ„MáYÖ^ ÇYð°ôâ-ÝTÞÌs—ü±Ð¬J2© +l=˜ÇLöE$vT…=<ýWUOIÙ©=°óà´øTJQôØæ&øX«Në¤쌲xªZ«c>·y—T´ª$©'´$g'ÑÚ½ê"´­áæ4fBÁ }_“G-B ÞFŒÝȲÑtöÛÔnMfï·)¸¨HBðH•E Ío-’âš‘¨žé㬲ÈQ)ìhgM 0÷ ûÛ[¤!„¢^¾ñ4*ÞêÓ8”·îîQd?(ÊΤô§à8)-4BSŸ:âNÙ‹-JGÕ9’¤eNᦷô=öfJÏA–r©ëŠAkˆ—ÚˆzÂ|ç9Oè(«w*"FD8ˆ,z=ÐPçu8Cf¶?Ýâ¾í±2GSàOè|ŠŠ lxlÉëÜ ”øÌdoƒ%Þnº¸é©r}Dý•tb$¦ïß ”%¡'@ EA +CMì¼?¦[ϬQÉ( !KŠbm a¾HÞXÎÖŸ +“š’ᵉ–[#ejP¯0äéót¶wl:!E–¦´p©RÕu1äm;"Iq4ÞëÎŽcYriÆÎ’H¥ðŽ<^˜p‰üîYpbÆqc_ORZ\I?¨£³ò@þoÚÞ®Õ–åÈ}è?ìC7\©+³òÓ~Ó\hØÆøÁØo¦™mÜ‚}Ô¸­ûàk|D­µ+sër[ ¤sB³æªY•1Æ⨰W³ÎæÞyKIÛ»¤•rƒ$ÎàL)ÎPœÚö;t㯔ø>¬©Æ~ií—ávÅ.Kû‡n`Ù›}²l¨—šÇÆÛíÎe;±xî÷WXÝÇKOgñ3‹7Úø¬½cÛx¿½›ÜøÓÕén}óƇ?ý> l#Ç&¾ìÑ&b­qm €LHÖH¹‰§KÜ}«ØðstÞDð5Ô¿Õq]r‚5sXSŒ_IG–Ô凎ùg“í¦MfµÉ¿ö‰Ú&£Ûä}Ûüp“G®Ùæ>-½kzkõê—} ›ZoÆ9$ÏÄX¢lÊJïíb±ÏX䕲 ûÂ=úÑž}Ƚü½v1¤Ø¨ Lj]WEè‚™R`†×Бyhš¤/-]‡VB:}z3Î:ì‚\“@7¤zàC3þ5…=iÌtŠY-N0¬CXS9ýˆ¯)Ég©²/Â2LÖ#†©†äsõ´Z' Þ³ÊX*Ð2Ù¤±G0¶óôç8Á›JӢγjšmb]Žæ™‹ç Ê +*2Η`>jr³ÍGÑ°FúÁ wó÷p€€"85.’pöKv²lg²ä¥6µüÑô!èØ/R&)@®0L±ï©©(~!ÿ ‚ú Îê±7v-º„ð»þ@¾ej.ï%e6A ‘Áׄk\êqÞÝaÛÔ˜¶å¨}éj_åÚÄΨQª ©©_]ÅWö–­BV ]ë% ·$®ÿx`d@Ü”æ4YÄx/×cñ`¼½í[÷Õ¦˜û/µ%úM÷g“Zjú6bËó7ɸ‰úÚ¥IÇšôR‡ÙÃÅ8– )—HYªçSæ‘Oc ^NezÙƒÚh‚&Öõ9¡­Ä§Žt_«.,;‰­êÚ¤®L'ÔTPb«Å@QNûtD&gÄêAWêl¦óPD ª/ÔÔò}­FŒÑŠ­DÓÙâƒHî`r‹ú1ãü`ÎzæpNmWsœ“€~Hk4rnà~RƇlýË¡¼"ø>ïh¦ÂFª¬RàÚørëìNtõõ7CrÄšš¸ T¹Ñ¸ºÎ 8â|ÁP«©bÆB@Ú˜“ˆhùÝj‡åáFÊü X™³Wêô5jFI>‡}ÈØW–Å]É7îŽ ‰ŠK;Õ¢—¼}‡ŠÔ†1?CIηt†IÍÁïÃJ±° „]d +“˜“Òµj‘Œ¨ Ú^5È Ì 0N†ü½ÁŒGœ_5!åÔ +ÿ¡e!âÐP°$»Lz9l£–$†ñ±Eô¯P]¤an¦u÷§§Ý¦Ã _Ê—ž­™ùçi‚Ôg$Ö_g_\Âx,Á9 Ì$ß¿ªË Ü+KDMóçs¼aþTi|Zá/18¨a åNRÊÀ¨RG¦˜ŽÁÍX,Y©±¾ØUSŠ½`$´”¿·Äñ¶·ø¨8[зì8÷ÿˆ{äd…_Ê ¥#š"^E× xçZk—:ë• kG +@CÅ%è6*­ù³˜-¡‘°0ñ¨‡¸Ë䬩â1¡"ÂAÂ$_¦ÓG+¨‘…#dG½Å^pIIL’zêÇü’Õß¼þrí±çžýEò7?ïìu÷oÄâJVo³óI«çZ½ÛÖ ®¾rõ§¿ûÚúh/‘åᮯ`ÿ®v/uóê¿X"ËRÚ,¸íÊÜ,áÝB_vÄë×vϲÑv;r»s·[|qv|?ûŒ­cÙ{ «Ú8´¯<ßâ"7Žtïq7®ùá¾/¿ÿs,€ÓÏc)ÛгF¨5ŠmƒÝ׸¹ ¯k^#õп ýOó‰/Gñ3FÕ<=¤ë*štê¦LsîT[Ác¸Òëo„1j@°×>¦RÒ‰d«(ÛME%´ÈQRì%A·jP!|ËiñÀ$™mL«")´ÖO×±¤,Or;o~>PJâ¦âQ‹®}z;. + +IGñÏ欣ëéQ¬_ãÞ¦öýw>Ò¤AZý÷vÓ:±º8íÍFù¢º_ÏL°²hq’Z·®ª*Jx°ÞÒ…ó’85©7¹Æñd߸VwË¡‘TÆ„áîã¡K5{;Óˆ”£¹r|¬Ããìøƒ¬eá%5‹‹Ã7s,ñˆàf¯¯$¦J¬þr]‡˜µóF¤êo!!3æ@ÃÃ]ÂÃÍÍC]¹ž¢L†ÉN‡ÕÜè4Ð&Â}øŠ.%y²—Æ´Ÿá¸ç·8MÂQÁ!±F–/Á@•d©.—'Á?ÄWkµcÅKX žž#CÇ°B|xSEy_F£Šô 5­ g»n•¢+yi5².‘œé§!)f¬Ë”ˆ¯©DŠEý'ƃžD¢EÑ_¢ø¨Í'cQ*â'‹h´|²’»‡pUB >Wúqˆ ]!uHúëÔ²UUaÈ‹™àÔY‘Š2›æ +"‚rÞå$…Ž’w·ä_ód®|[±ù)ABRÀåħà©oX4ÞqHrŠhô`Gl\Ø_ <ÂÁÛrÌ“L6`'{L^Àà­*¢&H§¢Ÿ;Éïü¤tGVcµ!/éù0*¢rþ­†*2âáSH2¸±Qî[ŒÎ„ˆ»”3²¢{?Èö͆$V°ñ†ù{ÉguÉ *EtžðIeå—sòÞ*¿¸°5åÏ +þ—ÛËœ @6, +«1²â%1ÍF8é£e)œÃJ€2Fá\Rø(Ži¤yòBÈþ¿©nhÙû3”Æbr€$È©ùJÐ 6Œ%ÕÀIÈk¡ÝJù XH¤¼³bNH¢1!¼vJ8™B I¸tÜ)·²ÂÈé.(+¾èR©Ý€_Èa?ÚîÒõà\É.Hº®±±³Â$Ðtx²ûýc0Ìçu†º®&-ÙN+¬âÎn€µò£HR|“n,`!@/Ò#_Ez«vò†šìP¦·ÀšÇVÁ‹9#q-SÆjgcMÌäyjøŠ<¼Pð Y5HîHUB´¡ê/=Ôtª^s;r°~ÏÚüw+Ä„wà1 ªÏ\ù÷eáþ`W4ßÃyó»bB°çx\¨3Mœ&ò¢>« +5E®'Ž¢´’W€”S±{ërf£žÃ„˜yÀ§5UÅ¿ò—à +V÷óËþûöx{‹ËÑŽ}üæÍsÙ>¾å)¯obû¾Ö·ú|ñÛå±YEëJ[$Vé²th`ÁÏ+|ÙÛ­²î¨u×m7纇—m¾u«ÏXýÊê~¾ðS«CûA™™‡ß[\ãÖ®~võÅ[—½zöÕûoƒÄKÖx³†%ŪŸã×¹›Ÿ£Ü&næWw±w¢×H¾FûmRðLÖìbÉA^_'+kZÇÆç¡è—/Oxȶ£äszJŸÒñ×(ï’¢[Ž3\üQ ÝH +ÉXë'ëd jžø©w`Ð'côZU¢j=Ô±˜3ºž‘9¦Ýú㜲sÝÁdb¤¤75Râ%édN²;.'‚;=4ÔéÔü¡l¡g¢øõÃhœÝA°»‘E7 @Æá89 ®¨Ò:§=1+ojÓ +2^q¼Ç;'ÃÛ¬KFÕO¿ëêfb7V·ûh°©_uŽL…Ã<èÑ(öîöG•Xl•N45¦|£9;³GöFb¶®ÐöÔ²;ßlBÛCÓþxu¸ËKã”)ªÍÞ›|0 úémO¶º“¦á»ÞTœUëþ‚0•VâôDŒ š6`×È1Ì»/‡òqÏÛcÓ&†EÂ’!â[ ‘ßüL†%¦}ç}Õ"}ϸÃ,ÀË[@Ž[ÂYÃ¥qyh}} +½Äj’c¸ožTÙf¿Þ,,°V4•ãm&4tOn<ÌëA„.vYg²…â ÕÛ ÅJ]ÈÀª“_*Ìb¬[²€}òî£= HoÞªËT6ÕírÐ=»RÀN?6BL›cÜiX‡4²ÇGUk[˜Ùp|8üÏ‘K%çR<æýãµG¾ýÍß~û¯ÿ%Ž?7’™D¥šÌŠŠY•ÍÎsJ‹ ÉJ'ÂZUˆø¨ŽvýN®¿k¨Ã{ðcû½×þÓosÝÆŸ~û›ÿôÛßü›ÿöwø—?ÿû?¾ÿüÇþÓ?üËÿþöoaËßþîïÿôço󇿿¶ðþôç?þáÇÿáýñOÿã?ü÷?ÿÓ?ÿãß~û¿ð©‡ÿÒOI÷OY~îÿù\ éÿä#5Mz:ÿñ_ã„}+R^žvRo”g¬·_TâVáÔ  EØ`'²á²”Ö(,äÞ­‹¶ôæˆaäUÌ1kàV7Ž99¬–Þ6Eþª¢%è:€yàIl F-¢’„^·"dk"\¾é°<]œ”ßkŸpœ+ŠÙä9Kc± jKÆaŒœª¬ùª†j(«"ÝdÌ~D x]NUÜ·Ðýí¾hç#)ss™BÓm +6åH;é2M(#Gã`ÿ½ÉwºÿsÖ¢£4ŠÉRì! +é‰oxVKëâšá¸Ž,}¼_ÉÑLÂÃB™³ª/ôÎŒ Eé]À†ÖbZ,ˆ³­Å¹ƒ•O©câM¹]ÖÅÛk"Â?´úûø"/ÆL‰#ЈÚ.ˆxªLÁB:ãÞÑBùÑÓámlgàÇ`×°å» •4­Ö¾cœ'ç,Û”²_)¨f¼ ^Åi•Ê©*¬ªý¨ü‚3Vš_4ž((Yîë¡k! yHNÂyUA=•é³\2YYHæx!HL£›ãM Y¾,î\²r<|]SMú +@º¯ä RlñMrÁÈZßøƒšF€³N¸¯;lqÎ0êÿ:3s¶’:hõŠ°H(µž„ÑÇÅ‚Oe[È`€:ÍÞ“ðÙ£O:ñäÝHŒY¼MáðW—þ '•r Ncþ*©Yö 8Kv8ÿ><¤¤[–¶³œ¦:Ó§¬¿'•kC /SÒÔ`êŒÅì>èÃraÁL×5?R³é3ÔrnÄ–Ê<Æ¿qFQ–pÂuä8-&«±Û܇÷*ú#è$2k‘rC=î…Ê €¢œbRéÂeöSýz^w`í¤ËƼ£+ö"‡ñ#Dc–v ³bž>B¤×ˆË¤]€š;l.„ð' ²ÈÀfœô‘b\šðÔÛ¸ò9­±˜y¶::9@ êçÙé‰êþ/²êˆ¹ðé P=ãPE47g°01}~I…X}eܨ‘gŽ¼K‘–ƒLÔ¾3ž†ÕÏ2Æ©…4ÜÁ@¥ÓÉMã\cžžb~«õê1)D4B¿S¥¨‘ˆA›^¢T·8Ì\_ÒHÑ:âOPž ú0>;ÃÔg +jF$÷8*àsô‹P¼>ÏÄ>ŒR´@=l˜,»>Jáú.i±Æi`–ÎuNø­LŽþ2}(šàœ©€QµHe%‹ÊÙï3RÞÃ…Nð¢Òô&˜’ +’-¡¼¬ÃM|Œ,˜Ô¯•)Î( ‘•£3æË[·‚•ôG­nžs”(a„ë§h‰%y+”ÇMJãøS£¨€±8ì)²^;.'äêà ÚÐHP¥cÑ%ë~L)º¬âÎSóK’ÆKâÄAé61ø^“4„r²,ƒê<”ñ„¤ +[eTø­CsEFŸ®ÝZ—áÍ(@q4Lò.RŸÇs‚I³+Ñ£ÉÖ÷‡õ¨¡Àu›4¢æ;dªG-÷vÞ×véc”$˜Ã3¯O…z˜ÎjŸmÖû÷j~¢ä±{ +¥§wœÀöCVOØó.S÷cDÊm Úäò=Ý-!IÑ™‹¯¦M¦Óå¬C‡ ˜êˆbãô\/”>“„äÇÌòïqá­i—{|†Ñàei&KãVi:Q_©D­•E? +'¨˜&ø‘—„,bi5 ‰:$U9³è(“t«!œ‡kZ !žþªATÖ‘#m¤ÂBº¦LÅSw`Õ Ö1-ý0bLš´W›mwxƒ¯5N)°Åg‰ê0ºËÔ¯PZÃܼÏb>ze"þ]ÒBÑhÔEÿ¡Ý¬eA YÀl2•«\ý¿¼$j垤ʽT¢f0[Ñh:¾Ç’oPÐèôe"?©îgºµÆoDI þ’r4R+8 A%ªJ–½Æ1œjû´Rç]­hJLP‰ú1r@ÓEdÃU±ÔxùÊ#·Ò™Szaç7•>%Wô‘áPÕ}Æd–Y9u‰HÅ(èM‚ºNꆰ5+qpN(-ha•êÜK–ëlÁ.¤š~°g÷W `õͺ…?8·:vÏô÷Ó¶.IZÆ·–tø˛Ǵ Á#!äFñЂV" >*gÃr„{¯åT«@å ®ö40CbLР17pZ¼ÛéACüvÐÊZ0‹ò·bˆåy?.Îj˜ó:­üA§Zc¸‘–G»=µÅ8ºN¸ë@ê‹Üä•`@›T1Ã÷(6°gjq9:õq£Qo•ÂŽ†ED1 +º*¦`Í ðš™Êãk-Mtp¬Zïé@øXR×Jó!:•Hª ‘Y}®já"k»"ô§Ô©&8š3‡ j¾×uè£Uç³H“2-Õ7 +@ø÷D=~tQ³´ÏŸjîС»’tœjÄbD¿«ÛÆ!xõð,ed9‰”y6¤œIi 6pq´Iz(îÍS½ùºß3ÊÙ‡u©‰ÌÍ$]H$ZÒñEÁsBðb”â„Ö¬ÞŸ5Báe‡ ã:$15FJ‡• =sd©–¹©®á)çEÉëJMÎzD¹÷ȕɶû)—€2÷á…¬ìôIÓÖTçh#!ZÔ pþÂ5o=ÁÉ~ÂZÊ¢gÚ>îÞF ô8=™_ó=XuÖͪ¶c˜2»ø…Ò.”¹vm?£­‰gjùý^ï¶8U§ytr#ªñZöÔ†IÑ›/š›Úob(à*¸nÜ +8±ITžDcyºÒ¹6#Nª¼ôÇ}Z¥ˆRùnœèô]Uß¼.Œ§ +ÈŸ¾ézóÊpaqJí¹“ºPpKF:?uvÿ{-“_ä&ÚÂSAZI‘[À…â~·íáü¨Â/°Ký2æ°žÃz‰Ô‘|ï0&£ D˵}3,5U€Èí|óBG>!¼;ï€ÒðÄ/G +¤äŸa Z&g +׶ƤCÔjøsÚЈ”i$G‹CgÑi~†JË9âX«iì3*Æk¡Á½ëµiJ¹¨¥ÁúCVcœaEÉ&ƒÀ …]†rNý Fs„ ¸ÕßxVu]0¼…QÑÞÓlöÄ—íB%©ÐnK©îIÂÔŠ…¦äÜ€v«,&ËL'`2á©=”CÕ ¦nõèÕo¨è¼„òm.¶I=²…|LÊæEÚlí8ˆ0?ýbëŒX”x³›ËDzó2ãBZÔöØÚ’ êÀnñ&!VÞli[Þ ñ>g"[MÏ„eÈrþ–05®ø¢lƒoGþKE²i <ÄÒ/}ÕYßwáÿïmŸô—/{ªûþë¾W»ïë®=à^…üt`SoŸW+u›ÐnqúõÖÚOó°•Ã°¸$ÍÝŠ²˜,uΙpÖKB¥_bh@©Ÿ¾¶Ý„ÿg¢æ^ŠçÓ?®jF¶Â‘ƒ°ØÇ5ƒó?¡&Z¹‹ô‰âŒÈr$‚e­¡^ ¥ò¸ kOQ ãdÎt[ cÙ£E§ÖI.Ž3¸wj‹yüÿ-AìVtUá­ÚÄØ‚ÓŠAÚlé>¥P/vVÖªœ4MÆ!A}©'Âr⤨PŒ¾-å—ZˆðtÎÓ—¶hlàÁÖ¡q)Žø½™o›5+·9>ƃ6©÷ý"c[¿ž! nÑ5aX$Mw«L… †Æ2?8°x9–tùXÊa’GS6s3ÐÓ¨W·½9–=aáx ZªÆ“$™Ü;½6¯.<¦ï½`¿¡À;‚¬Am¯—è'%¹ÁÈ;Dº}&I²%x¸©iª‰Îp06L;@ÃA±Ž™iâol¨‰&‚ Ó†K²þv¢Ìû=“s¸#•à» [@%eø¹èt±"púQucñ’ÅÌûd’㡼—e’زEÒ؉ô‰.‹” ! hÉ7O e£/ µ*OiAËÑGÏ•³—Á|lÆÏðŽïž:­ü¦?(ms/?˜p£~ØM€Ýr­7“+(V¯¨Ó(CÂâù3Ø59Çe]5ç–$«ë-5rhà¾À®<†;I5kðX»Y”ôă)>.Ò‚¼–†®ƒ'v}®ntQnöƒð3U`‰‘ÚhÊé@®r‰/ØÒHÎM˜é:è ‘ò@ñ®Þ´êYìvr„Žº&Ç=w|¨SÔñ’õï§3íUÏn¸©Qîá̃IÚ1ž¥ŒÌLù¡Š$]F’$ +¿Š°5gõOÚ×®ׇwc"œû]z | M‚§§á¬ø÷óœäÿ`dãŸBºëÃpþiZ®MÛ£fòa¤ˆb7ÊZ ¦`-YøÃÒa,à!ÁV¿ÔóîÏë ’ÐJ'Ò!åÉ:ZˆI[úÒBrZyP[ºÔʪz¯¶ô¬ ‹kez-„0¯ïÏıÚ)vÙÊ@[ˆj*Š¯|¶•óö ÆùÂ…A÷dÙ-d¼!רè¢á9¾öò©YÖŽLR¨£‰=<ÅÂq hÒ’úü`˜ëü ¤gsè‰B ŠÓîøÔ1›cªT<ë‹Œœ%"#€+Âð»To`Ääh =K‚"¦äR`Ðä< « ­+ +¦½–c\WMÂæªE} Ëc¦Xð§²âŸsç—ù~7ÃÕŸSŒgñË­œ:pø>ð‘xV5¡ÔmfTªáþ^âûyrY'ðƒt?ϱC)¼{TNaSUD¯òŽÝ3 LŸp8ÈQ4gé À¤þpo¡{‰îgDVpè~¢N!#¨ûš4%Ê–—È~†{Þ«¸€/ž•røõG¶ŸÕÃa-SpWµpwš$ùK‡ÿuëB¹P#ø5DÌOQûÜFP$ tªðÝŽ·ð–}D¿ Qû¦›²’•„â–˜ùx;‡„@¥–ésÓnrûL-Ñ{ËÄëá«A¤ßqO˜doX—rÜ0rKèÃd:"LÀ(À…™ªøàk ;&]\©#П´ L:ÓĶè[tD³”ÐèMÄ–!Ój%"zfe2¾öŒÇ•ùCÖ…C¹aZ.”Ì—ZOîæ†áù ‚¾´¨¾è†UºÐO½–Ÿ4Օʺ§¼n¸±í–j»áä{Šï† ¼a ï©ÅòJTÞˆ¶L£ i!.½Dyzœv$¨Yê%¢Õ“Uµç^ýÌÑò¥ —kÃøúŠ¶á-L³-%mÃ]Û1ÜöT¸ gnìÛ2ð6L½•Ï·'þí‚áŽn¸a%n¸‹{’ㆠ¹áLîÉ•惨¹esîXŸnèžDºa›®”Ô=uuËq]‰°;Âì†Y»£ßîiº;>ï†õ»§¯4â•k¼'%ïØË+ÇyO†Þ±¦WnõŽ‚ý$joØÜOÖ÷Û„ñ•¾ãÿÄ5KJú†·þ ¸¿}¿O&ü–/ÿ Ö¿ÄÓÿ™ƒÿCFÑ/ +:»ŠŸÁÁ„…ë“ .5á /|hÈ%gS¨=Vain$Àe2yê@3yæ¸T*´°²ç“_„b3LçY}'­$vX•­Š œŒ¦éòöú Î#:šwEñ ½”OÿlUúÁAÃo2Sr¦ûÝ‚Ö_è]‘šûs•`]‘“Z«èïžù¾™Á’‡¥® s˜””Ì\Ïy_zÆÚ|ò0¹ÿ"î1‰±wÿ¦Ûûô4pE=nŒSîÕ;#ÓBë§t#|é8½Ckiúªîs;ΡKsIÖ_‹K?@£ŸÓYîðCÌœ7Í …¶;Ðé¾”#Úåi*p÷?™ôˆ?_Úëñi¢hø¼óì~(ÂõR!XØxLöfG,J!³LñÀPH5÷ìònÁ“çqsªó‰äý-Ö0TbQF s÷럴v´°Ã†€Cu7®å:…$Fš@§Ë1ŠµtÁ¦³Šz¦Äò´x,bìL3‚â‚4´¹•TW]I„Ý&m¯i–sèڼͲæ¦+RKÔÅU܉œª8wiöÒÚ¤ÿ=>™èóz|\{ë|”äÛûƒå´æþì`ŽZífqÇG$< ‚Œôù×–{üÔéD³j'²ù]øóåpÉrÚw÷[d¥C½O£¡‡”­ym½›«L“b‰2’y5‡#Å5ëù§¼òX 4u{ýÍÁ¬$$ѸŽg4Uíx7G½ýÖ)©£Ú†2œVì"‰JÿV:û;ë—§WÊLo˜PáÊk9ëÙ¤"<>q,q@¥ Ùè©îCð¦$òr3½«î)Rü©™ƒ°Êƒ<‚9Çší S.í¼/ឣ:Œ÷8Ô #9íž<œÄÖËá/kGK‹új/S-XeGÔœ.jÁ–Ÿ4ÙÙW:2@'êÑÖ°äæñ×?ƒ__’ˆ¿ ïÈÉ"óY­q +4†2%ªC¤³–§P€VqÅŸºRnâŒíC›Ç)p䔚XÑÏûÒÈ’Î=dΉH Æ)Ž\è&@JpÓ¬SF”§¸iAëO*’$gÑd T^‡î¾®ßàØdöüHF9½™µ¸,·u܃!ݱ±òE×{Èàë%}o‡ëÉ”œ¾PQ3’á8îëü ¶é<,9åp}-Ïþ,Ï»Lë.ÜYÏœãr…gÏ)¥[;Ä…P²Dé6æi£šD±‰³aXx#+Pˆ*Õºo#Ša7“šWH÷mÈáÀd$¾Í%_û‰™=ªþ®‡n³RÖ5ñ!òñúRd/²Ù‹’ìLV6÷Y] A¬Ñõ$s±i:((PÞÝÀ47“3³uÀFÙ &O‚‡)u™ŒTE%í:ôŵE©ÚanLšÒqw(aâˆQ5$óµ¡Ó×ÕJ„XÆßÅ$‹u»X°Îv&[P×Fw½xÂ*;@8ÓþÐyÜíúae1M|Ÿ-:J8òžŠ‡»Ud/;õŒñ¡ET¢“PcsÜà +±4w¶3F@,ÈA†ÂÂYw)=iþ7Ê\îcµL°2ë(j½JíâϹé´0s€ž¬¸¿| +)¤¯ã‘<«ú£?kfp <A’e“š†E­djÅ #–dZœ,Åì>•F:øpÃG‡\…Lõ6gïæ$’ªT ݲªª’“=Lsó“Ñ1™`®|~Òé@!Gw±®v£¾ºZ€‘t#Ã؃wR¥ª¬œAˆ—.Ä'Ó§G×f7 ¯•u¶éR†™!ë漕1µ¡‰Ó=·t¯hâ½f’Ä1?ðsL ÏjŽ-åf¼ŒÇ¼ 5÷k ª»p¿ +%)°±Ùª§ªÁJÝ@ºÌ½ +Pã€"Ô=ù©nè9 ¾”u\ZSšú’ô#ôl¤¥ÈžJôñÏö SÆó7š€MÃÿç&{ýµ& S\¯ Gë¬JMuN$cÑ ŒHÖM®½‡–ôá“œRvrDúID*EZI=ëÎ9Š¬žà‹P^îõ‹wVö‚Q—òr²òµ‡Î;ËCAýòÚgþ '•!œ9ÎêTˆF4g$›|58„8)jlè” î"íH¢ÑO(£`ìꦃ­S634Äò,"*¥DW”ïLçᢩvhˆçpÄv¼4FìCèèZ±çM-<ª†y"dŒa•±õdr8?b¥·Û-à¬p-B ûÐ!‹PŸáó}FöZ.ÓÚi×í•­$St® QŠ•Ø +*WVñ­´È\tZ. *‰ê‰ ³*­(.[i°©K^–*©ˆ0!*˜k‰§ÿ&vTÝ3Î>/œÙ U8ä˜c ÇÅ´jÊ8ßÄ4&+w6!«pêR  $p‰#´R é%ŽARE± bÌ¢ÄèÁ˜áÍš t¬U6«&z­M¿ N,O¼5µU.%^Bw +=—N”HmSÉucaͱLY%™…$xœ¡‘à—Ú=”<1änõ4¯¥Nžð>š‹/í¸^Ué7öoè´ƒzº°&ˆ‘EÚ¥8õÖzÃ…'ÆÑzMRw°œÁ+…òÖ!‰¥’ƒ”#œ>&ÓöfLâµÎÒ·bMŸn$!S’˜<|ÁÑ—ã–ú²F}¨û 4Üsÿ°Fè œ7µ±þÄ¿D¨¦šmLËVž: ¬Á3` xfŠfË¿¹WÅ[äÓ<%‘Uã`£ÆÐ"xó>õàÏAÆ8Göáš´iÊ ŒÖôRÍØÄ—ÉoâÈPöÅaOS#Ih—ŠÎ•\]žJ‡ °‘¹0ªßöäcÊHÊçf•JWwÿý/žü¼zŠ_ø[eãtVÇ´:¯ÕÁmýàê.ºs»«s^øÖϯá` KdA¤ß GZcÙ[·úsÄ[‚â;ßTÿ±K^£õëWâú’lÏv™íä²thdÙÏ+|Ýëf‘÷ùyK­»nÝœZAÏ=¼îó§7ÐuOŸ±ú•­ûY}ÔËí|ÝÆ#®^së\W¼úé­;_½þ¶d‰3K(ZâÕ›º^¨¶F¾5@¾I¸xÄÑ5Ö.ùMªÎ#n¯±}M¾L–´BƒoÉÇ’ŸlÓ˜5ÛY¢mÚ´fW› l“§­ÙÜ&ãÛ%†1»â®’:¿Ð‘¸¢€âßù–«`ø’ê‘{HÐI*6v=Ðj¹0ú!:ù\['QÝ +¿Ø6z/þœVuƒ¿ @y¶FŒÃetlT“ª:Y8Ô¦zTÎX {Ñoße"2¤Q£Z½¨Ù*¢@4^‡%ýTÓ¼åTÐA½Îò¸£ÐsdÏsDZ‰±+=Û^5®ó¼§IU2¸Ñ\¬®R~g¬¹ØAÍ ¦IP"Éõ`ŒøB ©êRŽèQ±ëÅXwKñz q6ëŒG¯pʽºo‹v&Cö­Æáè))ÐÌê¥$R+ ÇSë‘<,âiYYI–—ÕQBdE,í+ìqþ59¹ØtÜíŽá©+ È;x};:=Ð-ñT®@»¤Ì’gõ¼ÅW.Rcè¢Ù ía@yÞŽóÓY5<¹Œ"Ÿø]°¤Úc÷¼qƒT8 þ6Z›!Ã¥bøQ²ò,bœïZ†ƒÜA+[&2‹bò]üÒ¬&<°sR„ƒå” +¥¹øU³k5a€à¼‰Túù1ËþhôZƒÂ‘ñ¬B3” +¡@3jo«“¸§Ád‚H”z'€.“§”È¡<(ûÞf—nAÍ™\EIðKñÿÊJ‚ì%¯BÁ®¢Œ*‰_ŠsX~%é‡20ש٠%‘ÏNŸy6Š¯(²ÂMF{ÐiZ®1“1K-d¦R‰ AÈdÏ"¦×›»Ì”9ô˜¡²~ô<»ž +Ò(X0:5Ö˜oJ½¨y2È«ØKØžgu§é„rbËÃg QœP7¤ÖVŽJohžV !3G;S•|Sws‚ŠAg$ QûÈ8‰%úÎÑ«fÉwô²†YâÇ÷¿V ¨Í +Áßïýúª_<ÉC ²øÑbÃûd_¢'•ÂÑs£¤n² +I[e¶ˆØ…ƒ§òZp1‹ž½Vö€ÁôïR@ü³³³ Œ&/´$2 ¸8?ÒB•¢“´ñXÎ3¡*T\ ¾H8mEň+)¶¤'YÉð9‰}èæ6dM†ŸúÀm(Ë„ñ¬Ôiz2̆GVf®³›‘Ô'Éâ†3¦r{)e˜Ø×rs+,Ë4ôO\§ðj0¦ +%ŽZDþžÔŸÅÂNyµ=¥z« '21'§Gâ aâqŠ; 4×xx`'/DÈï]®‚ͧMdxýÅÅ°ÕåþÂ*öÃ3¯Þ{ññò¤?‚5V¬!ˉ<›è´±—™ì?źm@Ü=Ÿíƒ\žöúV¸6¯oó’—Õ`Ÿ¶,›um-kÐëwY¬›%½_û›M²ÙJÏ-‡5øÅÖ|làe£séoÂê5ïòVÈyº¡ÕY->íõ•ë[<äÖ“î\îÖ7/NüÞ¾~›¸á ù 0›0ôŒV^KPÛ‡¾ŸBäK.m ¥›€»Ì›¾ ôûŒ`Í6éÅ>Ù$,›´fŸÿl¥5›Úg]Kz¶æpkª÷¦ +ö##\’Æ5µ|sÖüÏ èš£®©ìÛÞŸÞ5'^Sç¯rì%2|ÿ¨›qÅf|¼î|!¼‚_õî¸q’)áÈuŽ‚kŸB cñR’ae'h|eª› ˜‡ÜY#ƧuQ Ô8µ“ŨaT#¨$b^~¹”SZW¡æÍ_,]S;ŠÞµ'Á‘ ‡°:ìø’Õš·…À]Épw6Ü"wÇÍ-4%tˆØeâó¨b4¿I6–z–-×+’(\³¥Vܵi(Y—qÎ\È™çƒêé„£ßÀ¦“ãzAvIîørÁ$¶!‡›H=ùä…BÃPva©DÔâ({Eìë’ÂZ»dáÊ Òp5;g€3NÓÑMu ² LéZîóôµGp…‚r‡…ät‘„qK• æÓA'HÍ|ÙÁÇOmJÛ]E2A¬ÚœÂ1à è¥.±[³)VOiÁ0E«ßóùÞNé|  h¶R?±í€áÙûÔI.pbqéqêŠxùx‹~t¨ÔÕ¢ºûãÌözv«úqâRTç{ñ4.g…¿Ñ ªs ‘Ã`©µK.I j¯vE@ÁuüXHŸ„Še‹—Ù½Î×›«y®˜áŠŽ£ê±ww¬A.óÞ{âÖ˜bäëžTN1IJŽ2¥¿ÞüéÒ I¡ÿ‚\sîDÌä ‡rzl­$¹€}”—£ØÙŠXvæ `«€òœô…{0,'†G^V‚²È›Í¨¥Ö- tŠß$ˆñ³Da!µ›Én‰‡Çáï%É÷ShD,Žî™´íSÈä6°ÕÓMð°x¿[I*܉ëý‡(HÔ—õ€$G‘4]ë·}Ó®Kçá×Æ+ ^˜§>S ã 1»˜¨žnI>)=fU• SK+ãL# ŽF?<ÁYH$¥•Œ¤1¿(ÃÅ´ûtOþí1§ýå@^À¡ô-PtÀL°° av½ãƒ]â,¡iÀ–H‡u° ‰KÜ\ãë[O~ ÄK¸ÞÄu:ÿgøߤë²ø•%ô\m?DÐ~.Êuå®Küe>äÏ{a³c6[Ëþ繟»tÝÌv!Ë®_]Ãdñ4´õ[‹{ÛøÀ/œåÆ«n|ïÖGo|ùÓáïÃ6‚¬af G\u›¸µF·5 ¾µîžár ©ÏÈûsþ wQ| ÷¯¯SƒmñEʱMOö™Ì3牄ã™­Ô>ÕÚådkæ¶Íð6‰à&[ܧ•Ïôs“£î“Ùhnáy2:F*øEVSûaš B Í Á„Ó3iIi,ïžõ)¶’|>™†t«7vN%ÙÑWÌ+‘žÃíÖÍ#Fåè¨ íî¢zÜIÙc”¶¨¶(bNþHÙÑ2+!ºBµ’„¶GbÛ….ÉšDw9NƃAËj¨ºä"Uâ.òÇà ‰ô2š•Öt«¼?ÕRáhä ~ªá(p·8ŽÝ’h;°w€¾©}CÖ<5i¹O5”Ã5úUc®Û´v«éì­ïˆv:E[1£‡ê‘/ÝÈ#mD”jK¾v#Ë´oz¨<ùÚEj#µ¨KÙ»²å.˜<~žõÀ2›f0¨†de@øý#G•ºuþ¸ÓJdw5 Áá£8æêdoÜ¡˜âÀ䩤tÞxÝh;8Ì{dIâ,Ðl/ORLV>P`>uH®ì#cˆóEñæ µuM?³‚1œRBqÖ›ˆõ'æ2̈#…mÂÐÄúØä ê0MqiÓÞˆ”3Îpë;4„…3Üšk¦œîKc1ÈžóÚ„’A/‘w/å·‘üÛêþ¬è+W™ÁáÏš…¾r£m¸Q@üI(ÑU…EOq'ºøP˳S:5ew(Ë—$®|]Ù‚÷˜3ô«;{@(A<9ªV&YÅù£Pó(~«”ÉÃ:O4Ò$Ä΂d‡|jw°¨Ù¢aÅùdHb®äBA±^t׈rXG¾Õ]Ý?™ªW~—Ù™‚6ÂYß%Ræ±»ü¡Ü)SôÒŠ¸ªþ¬ÿ:Ü`øZåõ´3@&eŒXÒ• •cùÙ"é:þ(†ëBIÓY‘qUê6¡S4o‚Hèõ›®’Ôåó•t(r4($KÔ+{¹õбÅ÷È]a™Séˆ÷ÀÜohâÄ)1o8§™í&" Ž Ó½¹Ã5˦É^üd#‘òÐRñ¹c]ÙJ³<4\|íFìe# ó³tŒ/ÝHÌl„hŠ5ÎÇg‰Þ4ås>eèš—Ù$Ï>{×^°›ûð “Pò;ݪdð2Ó&·j=MÏ×:ú5q~(É`; ˆFÂFËññG£Ûô£)úٷĉ—¢4èˆ|ê–΃²h‰n:‘]T$5½0ÆРié[ï’2óR£Ô@‚“âcÉ\âHØ›îTçΗ +s1ïÙ704ɨIS‹t¦54wÔ€›@û&Ó#æ"ó€¶S`Û+µ=ÕÜž¢oQ^Åá6r­9_»¥[•ë +w¾t#…·ÌûYXÏqUœJä’œúŠìÀ£°¼™‚jÞÒrg‰œIJQ8Pqfbf᩠̀²ÆàØË(5Z9Š€ Ä©aJš„Îaö3KB9rá@Ã)]µÄ!ÉÊv¥RT fj‘¾û•b|™‰ú¨&0ßž^¾%d½*ëp*°€ IÞ*aœ|¼Õmr:ØÅÆ‘üWÌ"õ‘lJî ð¯Á=RbÂ(N5}•Ù'e¡ŸBì¹Ö/˜©³É…}mWÁÜP§„T­\é[)ui…Ôõw乎&°­ë™o¡rýÿnŽÕª£”~t4Çê©B¡÷©a-Æ0ö¬GšASÑ#Q O§´Hà“ά£C;äü,Ñ Á<²œf(Ëaô4!BEh„@øT®+1F¯±[íXQy¼­Yòk|­ÂùK,¾}â°Z9‹ÿ,ô¢òPu„å³?„$¡6¨®xM½|4KD è’•ˆÊE‹ês‹(}h„b÷üîJo¬w²:C`ÄÓÍØ®…sfNÏ­`ó ‰¯*Ú¼^Nš­ä±n8°# Äp$Kï¤éÂ0æÛDeeF„É‚3ÀŽÅ‚w¥…ôõ:)À°IèÌDã†zì(TÆ°fÄî'“1[+‹«„ +«ÚX…–­´°Ì+·”úª8Sh V¾fá¿(ŠëÀœ° WŒ]÷ÄS@D\Úò'24ÛTŠ¡ÙÑ°$ó;Í’#C+AšpW'š9¼ö°r!G¸g ».!rƲ>¯­ç_’T|*E5ü^Øï¢þŽ©L4³÷0¼ª2jR™Ì¢Ÿžr ˇ„‚i&@¼˜Ñ¡ ƒV¼è³TùÞZ}*™qJdü0Úu ã¯}ˆ•t°'š¹‹"†êÉÏØ» jµ{®‚°8D¬áãõ·É6ž÷—ßþfã¥í#Ÿî|ãô×èð²–á3Œ,±æ‘èäÖ¸µ nKä]Ãå.¨îßö9¯ocyk\Þ›·».e©ðÒÍšZÞ²@¹¸×•¼[ïû±ßAÏ}¶lHoŒçÎÝíï§ðò~ú‹WYÜ=äê§6Þlu{¿â"wúCj˜·»ñÍ«å÷³³ßE„gäà2X#Ì& -áÊ¡n‰k_D¿5Lnâé&êîÃóÆ7±~›l²‡MŠ±OE69Ë&³Ù¦@kª´Ë§–Äë-Ÿ´dh›¯ÝÉÝÚЗIÊGæ”Uj¤÷Ð{JÔî™®&Oiï˜sÆyƒ]íG˼ŸúÌz>í÷w}tw¦üêü¹=«æ~ƒGAµ:n«&9ò³çÙ"j >ÌØÈjÚ™¬û ^×yè`ãû윩ç+ª ~¦CbávýAÞt–ÓŒ´“,K +%`€JÑ¢ÎtÓŒ ÓãPS2«p/¿e¹‰Næï©Q£œ y«¶hØ•vkÿÈkö ¾@ó¼W¹I#E…~Cjx“Ò<´«vI,~pZሂÆ’¤âBŸ7¶ƒž­ž1í"33‡ÇÕ1Ð"0ž-¦ìµÓÊ,¾$Ÿ<Òýý‘¾¾÷þÚógáœëüɯߺ†ôþ‡ÿª¦“Ì)ä£vŠY«¬¬bâD öñAŸÙbëaPÈ[ÇFÃða^;ŒÚÓÔƒ€"ÅP +>‹¾þºÉ66»Q¯ý*Ádü/-œqK‹ÖÃóìpáiJP $š³E}+á5×êÄÐb`«TGt¡¤\-d˜ž‡ÉB•:²XSM·*Z¹SX+QHH‹ÓÔª¦%²ù`:¢m½$fïeôL@ÌàÒÎÑþdû.🦉§\c ö&j\{m"ñ;ä ïY»úƒUÃ<- ôè©Zg=èGM7*TcÖŽÌ#¦ãÓ4m@'ex +•‡¥-R$-QCO\1³q0FúÆó›{íÔ²(Ù9GCfÍ°¬§EØ‚ƒÊ c2ö#ICfŸ*nÅ,&5žš¡­°]®jP4ƒ '¯+Wvק§Bá»cÂN…‘ŠLžïÜý_R_ý ÎG‹;Z<ÖÞ¯­îou‘_xÒÕß>\òÖs¯~ ›P±”5謱émq×Ïl rK(|KÄó瀹Õ5ö¾)›òÑk__ÿW e]R—Û[WÞ²8×%¬´à±Ò—Í°n™õE;kÝ}ë&•Ûûy+¯»}ïVß±¸—Z=ÕÖ›­Noõÿ¹u³«7^=öƯ¯Þ!–@ò¦2ò3Þ¬1i ]ÚÏ·FÁg¬|SµõP—˜»†æ×1|ëwIÁ6}ø*Ñx¤$?ø[Ÿ™ËšÝl“ 5WZò©mÚµÉΖn›æ­Ùà’0îÒÊ(–˜ðIG‚sÖ/4Ë×%=S +_‘]Žê' +=‡,{-:•C©O—!ì_Ô¢¬T•A©ôöo,M”bþµßñ¡DÏN•Ú(XÚƒ£'396ÂC‡QϘfFÞd ¿v^ÈáÁ\›òŠ,=ô¬Q 4Ž¶†ìÏ ˜’óv-`ÛîI†ˆHœ¯Š S ‘à5¨â`) „¶ iƒäN'ÌwÉl&W{'¯Cp·wy‰@ÃÓNG–{¨IEUp(Ò…ÀÌùvôR¹Úé}HpWA/‘¢¹w‘xÀL²fÂ5Ù <=ª‹ÁÂ)±<äÕÉq(ú÷ +2C<.ó< 'V7‡qò†Æ©Ø4uyKKo±‹Twª|'•«¤Í­Ë!5Õ01ìðc¨ †ú5Ç[W$/ê(ñoëšUð^iÖ![êçiO"`+¾’“-¾3t I]ùýÉf®GÕ”…Ή¸-¼ºbýq®lyÄ9}èPÞQ9Éáä¡CEanQ ¿! O s¸àÐDg7S;y@+‰c­Tƒ%ÁgŸÕ}ÐJùÒ[ÆžëuD8}j&"Z¢Æ•ðÇ:úáâ!•Å(Ó©ÃV‰Ä„— %À’¦±‰Ã:x•â" +ÓvpÀ_컺(@W²';"j’QIŸTBd¥6"«.;nl!÷Qê [®dÌp·2ˆC9|Ù̧-_Ìir#iAËÞRíáÒ‡ºù†Þ’n(™fTö¡×Ý‚.÷(8ª’ãu9¿„‘ +’X‚ +C>­s|”E¬ †‡$·†¼i‚ü©¶%¼®žŠ¨hûµ#Jƒp‡HÌ[õ˜ZXH³T:é뀡&tR“ûÂÈ&]zD÷¬J£} ;m›ÒN½4>fd˜Ut !ÿêX5ÊfQ€‘‰ù™¤ï—ˆ'‡åáM_e¢‰ÃÁœÁñb/S€3ºWBl¸'×v®SÜ—F·7¾IQ>øqÜ‚H‰I=Ǫ@†ú–§Ÿ9=x%’ý¯ c–3ïÓG5LÁè!Ã-§CÃg𺋄@DêÕ ¨x= Ö—õ +’¤ï”»­b)àœQÕTãüð¢Ç–’F}‚˜Tšü刊H-r<¦¬ê3çVW?»+iLû&. t––êI¹·„nakàú~rÂ%îä„ü'žÈ䤡/#±¾Sîž›ƒì¨ø—Ø.çIejU +¨/¾–¦V­i +Ô‡~V#^œê¬ŽÁ8_ä[»ÉSoÚôY•¸u}Ì¢î|QÕ8ONGa»y'è1Mí;ØJ®ÔÌ9éØeG¾µzÔЂ3jµ)LR€}%å,'Òê +æ7&s!oçèM@èŒq+‘JàVA¸Ej §n§–/LÅG€²‰¨Twºî` z\ž7šÚ‘3¨&4L…°íŸrðÁ %G‘W¯[äVëÕG*&8Î\I„&Îpx­Èά kÀm5ÙŠFýDâ8”¿ãt~íLµBÄá—#†gœC™48û3è ‘¹Ì  Éâ¹Â•¨RøŒ·:Žn1y–Ëê˜$A§ ÏëF WSPOÑê»g !•HS2‰c*Õ‚> |: +HÃrÊ“)È¢sˆÍ,>í‘Bí2äbÕg`&³ë1a„ÀrÉŒ Ž]ˆÐ¦®.æ½±K†›u„`²FOsI‚üC5¢Çf‘áÀ9ÕÔ2û'í!8!žÀ¨ºT––×EdXêÑ2th·C[öm5ªS±g¨ã 5. >Âd½ÆŸcÂë/®€­^õ.ñ‡ÿ….Üâ¥WG¾øû%dŸaa K„yQ‹ðˆÖ`µÄ4û²GìÛFÈÍSÛ>Ýõ¬/Ëëky«›w¿,’—µ­ž«i³æ–ÅùÒ[VñºÔ·[b³wÖ¶îÄ7_ëcî›zÝûpƒ‹‹XÝÈêmÞ,¹=œÒâ·çö¥|ºË¬f?œêêxWÿüb^ùpã««_#ÂKùâÏc .k z1k{„ªM<û*ðm"ä&Žîî62/ñ{è7Á&oØ'›LdÉWviÍ&ùY¤g¥ÕýL¶Ö„왶½é$ŸÉÝ’®yâ[ãþéäšr.™éë«v“ìn³âmþ¼Í´£Lb•ê»R­ýt™l=øìH›³Ô¨ŸíÀ()§á÷3:X‹ÜqèbpÓû7ª«DÓN±†šŸ¶ÎüÐÍa­´4£‰¥ËÊM½¼Œv¡‘˜½yNÈ"ÿµûç­¡Á¥E(£ë‰ÁˆÚÎGÐb.e†eˆ¿ $¥á¡Upd¯jÊÇÖ–Å€“èã/^N#ác¦Â¥ tªfüEŽ|qXwFƱX¥†Õ‚ËୌךD>Çò!ÖF*;@CIu`O0Š’Z5ê‘\!ŸÖ¨û6MÊÅ•lnÜ$Óbìö."¨ä`1ó²4~LX;8 +/¡n€ÖC¿«§LSXƒ¤>}“T°¦õ6;3Ð÷göW]+0´ÓÕ*»OrU°J¿„[!£¨V4›î2Bj~ mŸj00ôÛÉÉ UÃÑgÑK½ èF°ñÒm0ç 6áÆ`ås6¤R‹R›µ4u%hÄC#Òmú‹,…šÀ̾³ô¸nNgQtÿԑξoBÂÀ ÒZSu†l=;x4Òëgšâc—s¥ë·,Œ ܼ“bZN©,m˜žÍL®U‰gË£[ç¾ýiyÞk÷hMÊšK˜®Ö%Û«~¢×pp†9® ÄŒ¸êvÞ}ZÐÃÕCqˆôó†4jéš·aða‰JàORø§#þ.²ÅêÎnÖÇÈDzøŠŸ|–xiÅÄà#æâ"u`Ïœù-ò‹½Š†t§!¾éÕñF1•ê¯¸ï¡~ÙÔ˜—š.l^媣°asLåùn]?;N§ۛ°°¤ÿö‡Þd¼UG +8Y!d"‡ö.:ÐÎ/Mc}U¦Þ´w¥ïm|WL/V’¦qtʸ3Ð)v´³‰†¬PÃÅÖlá=a¹ž4ï=šƒél>Ë#OWµ~ô/'<Àé핃E­LC³Ñ$èCIŽšÑ|À§¤ë¥&])k¡Zϯ”X(¸p·U)\Kÿ–¨ékMIøúbÑ>ê• ·Ä´¿2×<>…‰²î\½÷Žcº®ýÐ$ +#• â`&)¯U˜Ã¤‡1Rì#ÑáN>×;›‚î.ž$3ȹóišx eyí[%´Yl³Æÿ“R6‚|hтЯodèwö:$6ƒ”°¨øät‰ÃÇ¥íNÐ8†Éúqúƒå¬ƒsãl×z„tã?éhV MÙ×~d€Õ:5²âH„Fó`îÏ©·Os=”BÍ[ðÜ 9X³‰Þ̾€Û¦©ÄÁ›ÇI_kX± Xú]꧖~z˜úL·H{d6¸¯¢´DÚ]_g3L)ÝCKΚãÌ?ªnÐbœ·sèë4샦ó¼§SXgl²êñMÅ‘¢“¥¨p4›8Á×v&{õ”Év_ç˜êßótóR%_ZÐJç§*ùqÃè +"AÍ?s» rœwÔÊQDáÌfîq ÆØúd.Cx^Rü×fM1”U X*„+…€\–Îtœ€¥Ì#É¡Mò–%gÖlâA~a>f]4kÍÌx“¨9Bó´7 „eëºzøæYj¡âpç‡ 5D34ñ–¤²!qŸ‡m5ÊwÐKÊLåÚÑÝ¢“3iñ±-Ô” å£ÎÔÉ®UbW@ uA—˜ŠNÇ®ɬÖs„ë(>±ê¡äQí‘j Ôˆ¹m:&”0K¶ää*Ûr,[ZOÿZoCI’ë;‰±ŠL/EWîHCôðêb ‘èÎ)¿: ™Ã[$%ëÕ¦Ô +$«ÄV‹n€–)ÊGÔEígÁ®´ƒVThj'¦sH"Lh‚Fc)0QŽvË%d#`%¬¸Uñm –‚þ3j š7̵®ÃY††YЖ]RŒoß}öÔ0p¼@Œ¹ÁA•S?ÜcŸñd²)Þ˜Ä\ãÒD©£“ëêPý dã6MËÖ’´y¯6´”?X8¬Ã¢óûݨÅ|Š <¤˜¥Ô†7Ù$6ï?AÌk=~,€AˆšðBøK5—ÛÁè<üRDzQ„9¾¼¦ÊG ¬Ì©YÝ_’ bTX›ÈøE“âÈ.%âײ=ˆÉ¨$ÁÈdÏ67½»8ü²™ ²ÅAGìøUÔÕµx²}™fp•F2Ç‚•Ý•Ñ‘#úÃì@T@u¦¢Ê¯… 0´E>jP‡Ÿ³¼ëE#ùS»¦ipT2¨5½FúÈTÒÎô=C» ?(ãDYwZ[¤džŠ^:¬ŸL Ü$¹åŒ2.gqXLŠSغ­R®ßµTœCjšŽˆŠ˜ºæd²ÃŸy@„²Ô,ÒJEá³$Úù³˜V92w…û¯#p`TòÄë2< ¥Ijp¡ÂÔ£0bÊ`¡‰Ã'Ò@óBõH%r ð4 ?)a¼˜ÀE|ÃŸó¬‹ %•ÒF—^>”¤è„Wyzerd+vãPÀÊ|ãÂ[5¥ÄX +É\…9C$ ÊÉÓ+âæ4¸æø±Ñ\™ÊX}­Æ¡6A7C¿‰g{üUÔ½— †fmX}«®–0Ã&1ð“…n‰*¦9MÖ{kæ;×ÍD·÷3æÄ Ž ô=þòfÕÆ[,áé¶7Î}v±h± )kìy‰éø R›P¶Æ¼—˜ƒÐ¸†Ï݃Ú>ÐÍc_Þ½Ýò"7¯{Y¼v]@›e¶,G®äͲÝ,îí&Øl–uK­{«q¿I;yÝñoýÙ§gظÅÏxÿ<ÒÆm­þíõk¾pã7¿ð±[ü…ï^üüEðg@Ø„5¾x<Ñ&\­qÍîn €»(ùˆ¦^_KØ]ƒó>ŠïÂýšì2‡M‚±ICöùÊ&±Ù¤?Ûk%P#¢Ügê!­„ã6y¤¬{:qRä8bÞU2ªÕUjÔ– ª2,?¥ÆC-ªxCßBz8¥žš ùU[Ú °²ßIýõù*¤¸â<³ù)Yß!(™žº¢rQ¿ë‡÷Ö>š· +{‹1Îð“ã\ž!j@¥w…9Œwõ³tŽÓÓZuÉýÐ÷ŠÏ¹°ŸCX m‡Â’–µêÃU…'æ)Ím°É=·0FôâáF~ +A»ð0Æ»=Úy»Ê€µWï^IÆ9]‘}~*þœÍšgw)Ž „Å?Ã.=’V‹sì}$˜H w‡Kœ—XÛ>×Ã-`yR@ÈU’—äådáeX°K1 + ¨ÒæÐWF…:'œM¾- UteÏá·À3 /o I fT½…ˆ-¾%{ªû9ØEè"-ð3&ƒ|( +¸+ŽRn·F"´ïµM=G˜ŒÇ$Â}úhA–O€°¥jì™9•iK:Ý–Àï5£…Š¶€¯Üäp„Á[ ˜—ëYK ŸPÚ"o yÆÂjÝìú9ƒísú4ï9• 9n³t(H‰õ^I8&ÙTÌê°­IÓXåïZ$ +c°öfig´Ëœb\ßZ³öÌÍæ. d^DÓ-Q|!Uù "iw#ºrü%C*ÏéÇË©°ß8»c:?{Ltò +ó÷À‰Gàøÿ Á°:Š0l¼ÐÆWm|ÚÆ÷m=äÖ“.þvuÉ{×½ºøMØŒMdÙÅŸgœzk†Ò&ž=£Þߎ_âè&Ú.aù­—óˆß› ¿&¯_ËÖc»ªvËï‹uú\ÒðÍ›¥¿Ù ËF²Ûøy¿m6åf÷:°/Û|ã ¯×>ÝËÆ í½ÕâÖ6Îï+/¹q§§»÷Î7¾qöÛ ° ›³EKÈÚ…µ%þ½]zÊM8]ã.Ó‘5>¯A|öLHÖ´`“<,IƯä#KîòCŠg’³I…¶)Ó&µZÒ¯}–¶KçÖ¤oŸnÒÈM²¹ÍJ?†.u«_¾*qA Z¾,ヌc†ô¤裖=®˜@,Å©¢Jíúõ0Ix¦v4À‘nÝþprÆeTG QSeRÔ«|ôÈ”ìÁ«ã~|Ó4`ùgϳ²ÎÖzdJÓ©ÃÝ ”f6Ô¥—¢ñϞчǨ·¸TFcz O•rJ1ÐIcIí-§æÙ0tjvQE]&i,ÐÔ]ä¼é/¬ZsœOñ_퇇É+y>Y&ªúcCÆЊ(ÓÄP(º@ƒã’(诘úX Ñ"’î³îÀhÆÒÒˆðae:߈)}ð4;‚dƒÞ…/, `G!«ÝCyf ñ–€-Ûe<Gè¸P +PîKƒ«ZUÈZÌAB´&f0oÓ#Ôp|Jc{†—‡#¡Sý"N¢ëÕ4†É)yiY¢`Ž4n'\rVNõ·Íf@ÞôFTiu.ŽÎ;ÌH©*¿’Ž:M#†ÕûV%†ØgÜ{µ–ɬjOÐD¹†—2ay—ú'R¢ ùA=÷ÐTc£{Ûãå KÚU@’bÊÆY¶q˜ÓÇÎL®pCSéð„>Ê-0°ÒðtL p£æyŽ†¢ˆp®¥ûïªøç†<­PéóžuOǾǼÈ߈eØùŠ Í0´Ve §ü>c4‰‘Ç:íN‚]s¨¢ë¥Y^›‹Er&Œÿ£Å‚ÌœèÉÂj¢B” +jLÏI÷ùHI˜ÄŸ»ÀŽ/GdûÈZ5¬¬ºIiS¥ÙúLWlN‘1zÉØ}½˜æŽÝYÈ:š|†lyR.Cˆ»iP&â>’Ea½%°Œ^AqÀ›‡ç’œÍ@°[¢o2ö&Â_áÙ'ã§ÎáÉ$)äKÆwva±ÁÝ»Dƨ`<ãÞØAx}UÞ·µæ/ÊÒÛ +6²“PlQй„JÊÌ@•2gça€i +)•K°ÉM¹‚=WLä?á6‹å¡^Ž¦Öu3,}LðSCz=l!å`7âö|ÇÛ´†@ܹݧØÃÂbÑgàÑdøØH%æM23QᎾúT!< —ž9Ê: +Àéçù&iP›Èï9…<92¥óZDÛŘ*I>T%…¬SŽO±c»Tw“YšÐ$[˜·~Lð‚y“‘¡· ’ÁY³ýðßаÑÈyÞ—Fßؘ©KЪä`Ò™H,CÁfu¯É¥,š¹§AEðp¨ e³XœT»)£‹!ÄͬՉv,ÚwLíZ3–ÚÃA.á‰Ç´øèÍÆá°¬Ü`¢’Õ77®ðÃcºÉ-b¢l9ÝC?õïð_ú)éþ)ËÏý??ë3þùÿáþ'ÿûøöÿ5ûR£¦%f¥…'vòÐX8ÐØ©„8K´ÖeJù!àßWrQ©ÁÌ$jXè;ÏSzó,q,Е(a`¨ô\‘ 1ÛDñ溓oÒ©C2Q’Pìš“¼\‹K¾RÜîZº• ý 7øÆ l½ÅÆ­ìœÏꥋVw¶qz«wd,ZÝèÆÙ®^™Áèé¼7~ ¯¯cÆ6¾|‹vakᢕÁ©‰›1PÞ‹£¦Z0×ãÌ™òÃEÛš»¶æ“OV4(‹º¿€\¼áË)á>P‡AG› œ¼X¬Ò+ ?c/¸Nˆ‰d ''©ž*=ð4±S º&½m1»ô²6Í@§¯„×1ͪú¯VJ£czÀ´ áM`ÇÒ•k "–¾ª'Á±DB?…Z—”|¸"9éþŒ­;Šæò<])'”à›´|cHòn´K= úA…ãF“,ýìZ£}j5UظFgˆ¥³“|-"•ÍO%ëHAžÝមk´…¬:.Á·< ŠWqÄ‘"Å`-€±ºù¢ø8pk¬ÈÍr9²Ðò]!Ìo M£¬Ò–îåÄN}¶xæ ¸R³;L”Òî΃î½–ã£æŒ`;¡á„ëú#~ç8#·:k›rlßà¸Ü‡M{&mãÊ*#v¶OÝäÈô¾àT`¶ùz Ð3ÇaŸ¨ÉQƒ=Õ½"úŒb- – a±í>§¿î˜éä")]Þèv‡³ï˜ðô\ÂŒ‰^,ãcÛŠ[ÆD` +îÁØp²„ŠžÊø”gÁkxžg¢ßÖS" Ls XF?PTvo~B&Š®0©‘]×=ëÕâwE»“´ •¼ù’ϦòÕÉypFxL¹Evåì%‹ÕEÑíÉÝ”›IQbRÖ“äÎÏõW£¥Ã\A™7•$ A/‰Ä21KÉ"/Øiʪc;µçÙz…¶ +’9=%è\©gußü¨jÆ“x¤pbMèŠwýC•ýŠÊ0\¿Ðbˆõ7¢78ý)M Á–ec—¯îSúˆæ€*?ãSOõ8†3´RÝë„^ ¾;Ž >r ^Ú²ÖäÉ’é/P•Ÿl¥£Ò­“‚4eÙÑ#SrÐ%+„ÔAH¸–œ¦-00Ê l "5r´a¬,/#e¡Tѧϡà{%ø~Môà +èˆãRhå3x¿N]9OOGÄŽ¡x\Á,ÃÎ]Þ<þŽ?h)6Q¨Lg)ú’bðFµ÷Â@¾Åõ¾~¾SòkˆBÔýÇ“ÒƒâøZ¹’ó % P…érS¿6á}Â$á,dqÔñàµE9Ó½]xÞ³`,˜§‚7&­¬Ê‰Å×Rš‘oƒú‘ƒ/œÃ6è)_8 U;:l>–¡†:ùx.׿xOp×wå…r¨ªÉ vH¸‡…(}¶[G÷Þ!†ë=þE4p-8 §ä <‘°68,öyb4ZE¨;@F äÆ8ŒáÜ\A¾GµPƒzùEÿ˜(ªšÉ…püÇê JSAÐíü®¬@z5ðc)GJ_B¯ kv|”œîå/Ç8nç/Z7Ë*^–úº%^ÚMÏ­ókûËûWnö뺫—Ýﵺx‰Å•ì]ÎÆ5­þkñsLƒV¸:ÍÕ¹r±=}ðÆO¯Wn<ÿ&<<‚Èë«p³_;ûu¶_“_­ße­ÿÐqþ¹)6[gÝcΊž›q·e—½ÍX¶:«X} +SÖÕù¬ê O¶º¼c\=èÛááéj7yñÜoíÞ‹_Á#^¼å –°²Äž5F}ÏV÷òÓñ1G+·ž‘%Õ#0$·HZ󛦾ÙØڷ؇{ì˜Rb! u +då?0Ð4&bFU4ƒ€`UÉ/•±Ç¬$ “ k¥5-¥*´ج® €ùVëÆ$¦97×zÁ9' ¯¯7Šã¹R܇ÔuØœ"$WvÈ f¼ˆTŸ-a œH"…Œ»p¬‚p˜d—tP.›N÷ ±>¾zj3+ˆaúËÁgŒÙÛ­ˆZ»øZ#,ÍÀIû“²ª–n¦¨Š†¹ÍpúXƒSÕ·)@'ºw!zlF#|yJÛèÖ³ßþ˜øÅ‘²hL°¬¹û˜ç5¼{¹ÔëIÉÉ‚©Œÿ»´>áHýÿr÷v½–,ÉuØ;þ‡ûb€ÜÃÊïLûit Ú0$CÞ úÈ°t“=„áïZYU{gžñP¼# ÷ep'z×Ùµ«2#"#V¬å7Å·LÒoÊ 6ì²PóŒ›$d¾Tñåü±Äha³˜D²mÀ’àFc±ƒ¯µu@.,è݇H¥¡ÇŠžL |ÞÇ)>‚ç) Ï\ØHÆÿJí ÈZšäw¸ œcz¦b$¾M¾“/’—À2!–9¨ˆñ’ £aeÌJ‰fy)àh¨ghº`n}&WdÕu„à1ÀÞÁ5<0»à¤lÐ1aÈøGBƒùHÞðe%j_µÚŸWǵÿ¥r: ¬l’Œ¡ëΞcâä(‡.¡'^­“uá ‹e hÍ¢¬§ud% _¯†À–@y¥lKˆ©˜ÒœËO"ìû€²Õ˜dì(Ï‚Å3?Ä/€ ¢X@®–l}¸ÌÞ¡e4|‹˜_ùÌ’²HßZÏѲXMÐÝo¨½0*'nc‘(úŠ”/¡6>- ÍÀÊ +Fâ†`!ºƒ&Bya"¾î›âº.<~\‹L(w-I|òȚέp>–¨‰¤Ó”4  GX k^Û8®ƒ ‰,9¼ËÆúb†OŠkþt¢ú)ÀB +Ç-ãzš¨–€‡…µú†¨× ±É¯9&¿ÿéX_þƒUbEZŠë:œðÑ°Ö…kc›“/ È¨#òƒ§[/zÐ5Q”Ä”x!‘ôþÖ@D,mPjÄì%‡~¡4˜ŽòBdZ·CòŽ‰bs|·Èó@G“õKòPêâk[ +ÞUlÁ4‚=ùÄì±^’Òã¥UôN´2ªÁ¤ñ ˜È Smó ¸¸}­7±ÿ[æb9ÄKÅé¨B‹G +â‚Òkn´VÌ2»‚g8ÑãMAµ5¡áÔÍ'¤+ït0ÆV…88s7úJ]vº2r„ÓÔ’¦ãáó´ ý Ú5PÊ>-Å] –‡«´zN7v9PÀ²!YJ*!Ýܤ3õnêg’¤^(ÓÊ`M?äs妛­kàøÓË?Š¨³s¸«[^ý7õêç—X°Æ ?è%¸¬!h U|ÒkHÛ¾5B~|Mwwû¨¿x-_¼ÂåuÿPè~]›•³.1Üüº×åº.kFèuýovɲ›>´<–]·îÍý&ÞlöÕ!|å86fã‡vkul[ï·w“ºñºï¼øðÕÏ¿‡¬æ]ÔØÆ–· Äk×hµ‰ikðûÔO]¢äJ×ûGÂóʱÚ71“¬)Ä Zï¹Æ&#yÏ\>”ôl2œ%Z&í’Ymò¯mž¶ÍçÞ³¾5=üTÄÛä‘›ló--õµ›üuÉrß’áOÅ„Mμ&Ök> =i`lùúY Õ„y¥ÃÛ†ãÝôˆ&û°8Ä($Ï“-/`§|ò§ ?½'æïˆÆ4 xüR«Shpqã¨ÍžwÎC'ŠO&3  æ¬/Ÿ:ã˜ú Ÿ:|R\Ñ\fÒªDðãð“Ü öaB \,öp¯Qó§ôá¼g¢uàU¥%Ntîfljs3|aA•XÉiè7ËèlX/®(‡i/”û„dÔT勬Ãë“p˜,k‚õÙ¼’„£ZÇ ¡âB9la½+l”ä+YÔ§+MÛeÏru–èõÎz<—±(·2¶–š‹t@"§ÏELqpñs $9JîÏNì6¾+Ö…½\Å»†ú6+L%pÌ…ÏŽ…LF \1çl_H— -l G¸ß5 I;¥} +‰P6¯jiûpx> +u&xQµ¼Ó¢ÊÜj¼Î¾ÜŸ,=³ Ag!á0– U…ÇŸ4¥¦¹ºwMŽ’ú •ëÔÇ¡ÚùRPÆA. +±C¸!BÎ,D‹ „ó`’¹©ׄ®vf‚h4~ ~ýà ™õi‡YˆGäFÓ¦^ô¨\+º–ÊÓ €¤³øP´"3Pe•ñ L¬¶œø.͈¨x­¯MyòD“mѧWå¤YŒÄL\lJ-Öy­:AÌ{C`LŒÅy‡¯ùô‚öý¡|p†ˆ ~FJyðsÖÖ@®ƒ‰˜8©ªœÈÃÍ)]âÏp`afsØÂP¦?þûA³”3îv;µÂoÍ–­aÊZI\l%Ug“)ˆÖ2MäI1€`BJhžÓIt™ê%â Pe[\¤ÉJKµQj胸'd¬ÇFnšÕEKäSËžf ûZ=Çeâý@2¼3¹¡î™6óÍÌ›^#h3ý£Øʱo9Âÿ}—þ …¼ú;m¤Àf¦BˆçºvfSQ?†•îÓTzyŒœtRFÊBæ(hT0O‡ž{hç?ƒ¼8CþcIƒô|O}Ÿ`ΰ0”eawõA þ +ö¬gvGÔJhÿDŽ9iøaÁžšIé€nìà[GŸ´%Ÿ0IÅÚEc€dP³˜y"€\ÁÑFGáù<œÐˆoœ¼f]¸ÈŠü[¢!ŠÎ°§‘PiNl¥’ ²£{äJæ*')nh¢ñI$h¾OVº™öJ/|þL +¶á9zZ +A@±&rò?Œ9h†¼CMX[o:ʵ˜ü½8#‹9—;ZºÃAeïäŸÁÞ"HÉcfÚ äRO—«ˆ Бk@Å\;=„³q0ÃÂn>óøéwؼ³?y·ƒ@›’ÔDÁ­ù©<Ô ITØ%ëÃ"ä¸8†Ió:djѱ‹´G¾”ˆFZ).—¨réy$Þ:üú•su%0Ž 1+JTâÕÁ£q\:¡.]Mž…Ęɸ Bv™g°EÈ‸ÏIÆ‘Žº_— +©4âhØ2 ãÿ/òq5æÞÓá@Fb'ì"àó8jŒ@Æd„ÏSŒêóÀ8¦þ\îþÐ¥ã˜)ö§+çé`†£ØUðÄw‹j Yüé,29)È€®û4`—:x&O0,iV&qèÇ££uX©‹¿—T¤{[›à¶FAGþ×`¹ ¨»Ç÷ÅcÞ¼Œ··ækßßîf ,kåÃ;r]T›¥÷¶F½¾—ż]òëÞØl¢íV[ö䧶óûÞÝoðWOÀK7.cãXd÷úæªV¶ñ{_»ÈÅ›þã|÷º×¼øp~Ëâì7!a;ü>vAæ%m"–—Á{dÛ„¿m˜\£é&ä~š7!|è÷Á’:lŒ/‘5_YRšMæ³I‘6yÔ’oÍsÈk^¶KÞ–,Ïiõ{:¸K—ì’iõš†î’Õ÷¤öãëüwŸ+ïÒê/2ð]¶~Wòš„Óy' ÕCgL3ü;·DÏæWo«N½fÌðð@ƒs~œaÀç =Rsµ±X—TèÄ¿%ððÜÊ h¥ee€ƒ™aAÕŸSó8ÓôܳD§ùäTÑA¤Áí!^ºH,"ñ¡ç¦±þ4ˆl]‚ù¢\³)ì B(ÊÌ7ý:­QÃòzV‚‡†˜ˆ”‚…ïQ}ŒbS¡„ÂP[ÓNŠö&¬Âa=Õ4ß:–?$Pú™U!»¨Î©àÞGÄ—MeÍ$ævó‰cIɬ™1|„à{æàV"qTsT$¬/±“g!ìÜÁº–¢ácL_R +?Ø.Ï‘†Éý¼hñ^;S¦ã ×Fç¡Ú%܆]å`æ+!åþ刢Ý)^9ý•¨=à`y°éK1×.Ï©aÞÀ“D™BSŽY¹¿õØ.šë #®Šžg„¦P(¶]å œÂí%Ïð¥Å!.ŒO§v‚Gac8jsÐTTFa)¹+>( ä(æ]Œrœêî‡K1$USÖ¢ŸŽ1…O™¸7½HmÎŒ )ìD0ÅæÙ˜`íìãë‚ÿ®7°-×|QÙÙm¨“^¢¢Áçu5\> Ì€––Ä +ט›D¶BD¬jÒ#@¢ÃÒ´úuØžL’DÛ†åŒù\ueÉ+•›5qpð½&¯SÇà_ã…Ä}šuã[ú¬ÍbØ©”ú6X–íx +£25I&Ùò³?á¨aÇÊMêîáf&±Ö¸f¢ÌžâÐ3ë”Äh<4 S<ÊL§GèóZ³Áª“g­_dâhr•«Žˆ”=ô4ÏYY2GP©ÆMÔc/ö%d Û¦_»”W"Jõ4jÀð ç¤óNíVéšðé„ÕüŸ¨Rr—±N$nAˆÇ1 rg(.q|¤JŸŠâzâ@üqøÚŽáÄB5™æïà[#WÔÀÁ¹;®EçIÜI ßËvßÌ08> pêW&ÑÔ1"†5Íæ;5°6ý9t8Îô 'Ä Ãš× =ß$`­MIzР™æ¼šÑ‰RA‘¦”x,À‘¢*?ã$ B1ú”ú6³CUx'ÂÃcR5—"ùêrA¯3ûÒáB?1ÐÔgÏœ:°š¨ ÿ9[^jâ%eN€Ãi¢NÈ@k4„N‹Ãûßõ +R¸n@|ZÃÕ æDá ¼‡0;aÀÌPŽÚ p·ç æ/R˜£oÔokD:¶ÓðŒrðÜ9$:(°hB˜G•,j.>5…„¦3á«ç+*¹ã¥ –hvx¸2çyÃP@Ä(sá»Y/•Õ +$XIf”ÕTuvbÏ®y¡(ý°'c/ øíÞf2Á¹¼hjÕWïOÖ0ó:“ø&T=öÓh³Rªæ¿ +È똩 ÆP!˜rgJDç—&¯9¾á–XÁàhuáÐ,P6¼MLš÷;¶ø½˜c8!X4ùûÖÓüé ®ÍêüùõJ^Vý½Àe{¬›hÝmøA›]¹ÙºËÿÐß8ƒÅe,¾…×®Nh㪾ði«óÛ¸ÈÕ—rÍ­Nwçšî5÷îì7!a \rkˆYãкŠþÈŠ[V'Âfïû²+ÝÖí³ÙdëndtÛlÛus¯^€dã.V§²÷>;7µqf‹×ûtd|w«]|­#Ô»OÞ8îÅÃêŽß#Á.Ö¸òñu ÚÇ«mlÛÆÁk¼‹¡:ÇSK/(]ê³!—†å‡…†óƒx*±2 ʵGâ¬ûªÒ³h’]–ö:æÓÁ–!²²´l†Zžù+«cji±Ì0œE(îúZ’ “T&ÌtƒÄv~ìL¸裳³(k|éÔ ¶#NI‡€¥›ê·Öf†LÆH×ûÊ" ÜÚÄàMáÁ•šúƒ*-9zbÞ¨¦Kšž¸8P±#'Š¼Z4P ù°+&í ½3K7uá ‹;Ñ\%ýz¶Ç!• ¿›ËOû`#Xñ¢ +«ˆ2šá@Yh>vÍi,RE¨Ú=X\RgP‰sIµâ0…2™Áž8+9ß<ƒ5\„/ 3ŒÙÀ Žû³ÑÐ)²`Ì$,N¾é‡¾ßø¬ŒbÞP²Eê>øËËĘáÜ×LÕG`Ï<-“\¦óTÂÞTÿ(Då¸bÎz„µyn÷È.Ì&ª)îJh¸7ãJH#J„Ûò‚q´ +›çGº»š +@zY!BY5T-u†ÇCî†|y¶jWwÓzçíó‰à “Œ4Uá¡1nŠ]7‹>ýw–µÃî”–\ tÌ`Ôkµùc¢Ü‚o¼°KÕª¹t±¸•‚í:Žù”°¿€`.(e‡‰R%•Ãj”³—¢ !ì—«¿™úÍß·žëWÇ…Ôƒÿv ,`ýT6M2R‘.IäÂV–ÐX€3Ip¦°(Ô Û¢Ïô½ªšÒ”ú¶Ø”4qÙTÐû +Þš@ò º£»ó0›Wõ"ÜÂB¤HÏŠØM“§_a¦%¥¢©í +ö3ꈨä%o‘„P%šâZR}‡WV¥?ú¸]Q÷¨7˜QRcéqa´©?ÉW=LÜ#¨ù@*Tg9.ÃxÔSÛ'iÊ+¬«ZõÍ*ë‘Ïa]Wxfö~\Úæóç†n±•• ðõLºW’ó‚Jˆ\ךj@øûÔiÞ¬ÇTÂE¦ÚX%¨ké4Ï2½W.Nw†¹xÃg.5ýÝTúpd…sC‘Ø`+tèÀ¦=ǬÀÞÈN…ml(D—Íë€"’=º¨ƒ€O#ß0We&Hxž>Õ4¾‚][$ ‹Á]RÌûŽ±BˆJV“ä)OT¬=‹W)ò>Á˜´n“AsÈŸ–û.z0#ĹøjbDE¬pB5U¦*…ëÊŽB6¶0š:­áB‘‹=“¹¤ªÏG@SªªõUà{}m’¶|9B\]±Ê_ÉÂ"¼vñjºf¹ÕJ²Ã®›´ÁØ”§)x›£øÝœDWÃ$˜®Ç¥¹€³ ‘ß·næŸq’\ýΗ>jÿE_ßÔëýÓEm~çú4Ödž߾{¾›·°¼®½êÍ{]Þþ²Lxíºž6«î‹å¹¬ãÍjßl‹O…­·í³ÙcëfüÔ±ì}×nööê\`ys²ºž?â¦Þ=Ú©ß=ßÎ?.ŽÔnêÕßn|òê¼?TÄY¼ü Ö ñ¡}²D—%íƒÕ6ªmbß$í-Þƒé6à¾Äe_¸ÄïM”_ÒO­Û%oX²‹MòñuʲKoæ1ß'& ç8‘kŠöU:·OýÊ4‹E\zNª”œâVñQ‹üD–ŒÑ…B:Ü‘ã ÞdÙeòÛ:‘)’ª uÑ(|Ô7qÄ€Òá|¿¥¹ED öGaP9ƒ¶?È„šÓ;çø‚æùl—yédÇ$9 Ú6|qÍÃTÑÆ{£ ÔËÔmÖ® z•ÔŽ·d@‹å&ƒ¾“d«œ>šÜ*YnÚ!°‹è¬h=‡MýÐŒE¸»ÁåžÌ§b»& AO ÇÔ6ÁIÐ*¤$ÊŒsæ2°: ŽM’œr È$VðÈ¢I”˜çø¯Œ»ÃåîúÅ‘u{¼%ÙmõD +¨dÕ¨?G'…C™Œ›ç6¹9ÈÐl'Ó/ù_œ°¨Åõ +l8‰à9vi²Ä:¼>4I;„°ÃÓ “åvp”ꃨÀø¿wÃåpnå÷9(@$­-ëã¤^É:‡FRGñ»hú÷|l1 x³?©…‰‚<'ÝLüÅĪhè—a¹lQƒ¥.4²‡te–5DÕ¿8º» Î݇®/r†˜òįÜ"dûJTª“r¿bËñô­â!Þ8œ»ØË®Dçc뻾ÿËô"NÔu†=–·AØ¥T¢1´{Þ2*j¯Ì-Êø}ö Ô EäÉ‚³ù»ßÿÛÓ{¸½=_EéáâÃkÉC|TícèñF«²I#”Ü­$«¾LÀ3‚º’‹¦$,dÃ@]¿>:×F·›§©v—µ&•§ ñ¬ÏùZÛü À#T +’0„€²ôbè'NS0—ZR’òà/5vDYÀ0Q®L¦&EX³Èzšø}¿‹ÕºµnÂ-Âø~ÈjîuX;~ +h†ã£Z epj´‰ +¢eœÀ-”P©æ*"½ë‚R‘/N:¾2L3HE\òª£ü„&LúÁ(=¤õíbâl؇¨ìóq˜IŽîT‚‰“ Ž"N`ðå(·âBºD¨+r#`))òD¡¦±Öh":–¦©¦Cʹ4I•˜fzùÃ&&÷Ô¤¤"鎦àØÓŠèÜÛÖðL ÙL¤Õ/R0,AÀätI”ýRæ$‰â™å„*sš›¦b­Å‹.1óωž8šVLˆÀnÒDÍ5_ÛÅ z°ðg˜œ—Ùl&Õx1EÞ…¯_«~¬u×Nà4<ÁR,²¨~eñÔå”ÀïiåH=ßY à´ðß|¹„úÁD‰6/ŒÚ¸1çXIf5 ?¥šš +Gç ˆ7IÄ’f£©ruL‚6Šþa; Ut™>ä ¤ &k’êÆÑj› Ì œŒ¢q B©ˆH²š&ðrƇpþ +"ˆ•™<?·iB‘ŒŠ‡¨ñ¨Òn—¨ž2¸ÖHŸw_-¶KûÖ¤#PÕƒ€tÚùX²×Ú54‰ükªf_¦º2Öc¢¿$ë×r?}/…ò´&±ìyƒuˆÌÚ‡T(Á)Ötcd¢ÄÏ*غ‡3@ä‚uÃdŽP`†eãÓËÝ&¢Ï釫Ïô¢•Çf«â5)s´ïbØÅ5{~úýdŠšo¤þ¼Ô©nI:B¶Q$ºh¶5°[’Œ °ßÉ×ì(L7šÅî.ä-M‡¦`¥ðÞí•¿oc›’àêÎL¹ È7–y0¯©gMlW•V¬.*ÈU¤E¬tš%¡<ÀLЪT„Q…¢1L)>QªíCך+„ñ¢ûƒÁÝ_|1ÿ¾ämZí‡ÇëðÄyò TIóN#Å_¦ %( w^<Ê2,š. +H‚}I<Ò²”iâÄpÇ£Íö û¶¼;ýH†šвwÝ_x°Ãã$oƒkÁ`£‚°ÍxÔ@ßÖ9ú¹ÐD$/K4ûZýÄe÷Ðì:þT!Æ<‰–_º£µ`xoÍXô¢n.ÆÞés2ª) €,­z@²(FHwÂÀ„_ϼÔI(ÓTsºÄ0QWXa0ÑmÊRúZpÔ#úØ(F÷ 8lýý9?C-f^ÙEo*‚bñk6ÿ9\Îß•x\x8U#£á@&ÊX3DŽnÆì’uÓÚËÑù×&GEX;äkE÷DÁéý(`I2²¢¯m:RËZ„¢®³Ãz‡YÜe¿Öz?FëOì,ˆÜrŽlq…ô‘ÀåØ ·æ~ú)æok}£‡ ÌÇw[5çBÚ A(\«ÄXKCª+ ¹b6èš -ß•gºlŽÏž«’V…çA™5Þi†¬ óÛPÚ [Åj×<¤’ŠL s +ë˜ !ü0ŒRÁd!ÍhÔÏçœ{­¶øx˜L`D*£®QX«u’áØÓ5€¥·a`3ÙPêfŠÃÓ7ýJ¦$ •DºPé¡2< ñéB"  ãªiÙrV߉…Üš\š7—X¾l>}בÇè"Z­äk¿Dk1ñCÖÖˆ¤ƒõ@L| Xx*«|0õy&3Òœêç>ø%‘ðÀT|${ žŠÃ‘1ÏOéc&— té!jÓ2óˆ8ggîK£å~õ‡¤»<üâÛøÐ¥J†ôPŽ1W÷¹ +­jépÍêj±}¶vi’j.IU4À2«JR’'#4*4¿Ã³ðSL&ôZq£DÎ4*‚PÑqj‘àõ¯Òo,}$” "LH>l[n4‚`‘°8×0²n˜ŽÀŸ—ÍÐ~Ê)Ø‘~ +8‚"CŸ{GÈžÅuا íÿG-õŸÂ3µ8G“"[* |5ÑõëÑÆ1b}Ò€º§3¹F§ +‹Gè3™ÀØQxG‰“;'Ŵ׃úpþkDðfÄÖ×jª€ðF)Ïóþ¢Ú3–¬å¯`§ÍÁÉÀªoœP?¡Wu%öž@ãæÌ,ÄÈÊçPm-ˆ¸íSЭó—x +‹6BséæðGÑÂ9MRf×´SI³ÝîI^òùC®©^d€J¤eQ›©Éé#ç×êô´lC0±ˆOSÁ‰¦¬f(ò•v£Í$>ÄŒºK ð"ë=#0• ÍPÕøQ Cˆ¡(U.kêFQĽÍ`8Ü^IÃѱIWˆ  ~%„W!þÛ¤MB>#ˆ®mhµ°«ÐD3ð` †Äû:øûRHy5Ç–V˜ü„Pì%:Q£kÐhÉO†w5;4˜pü.«kÅsxl8‚¥EÙÂLÉr Zº†bE£>¸uiUaï3û Èä gTlà8›ˆb]éÒ "\Ctú…cxin©*K‹mMSøÙ‚”d69·O_ƒn­”˜“fk¸UŠûçg\A?‡;ÒA¨TR‘D™p6m—0Wå•öK‚ç]Pp©9“ ¦ ¯M×À~³ïÄ—„rÁ‹ÝÈœDóY[«c¨;ùÈ &~Yœ#ü\iÏ÷qÕÅ÷È~[/qV/U—ÍÂfËŸÅc³HÔY÷dˆÍ’$³é(ó| k£•4û-«‘åBª%ºF» +¤Aþƒ§nʯ« ‰òÆù½ \£ô»*"¬ÞJ+K"™Ôl µê%ÑF…,–³ú=׿Õ~ø÷½ ¶%…·ÚƒËJK‘bWÉx©w|¨Pò^Ù–NÞj,®Ï,ŘmÉfWÛYk@k¡h_QÚ•ž6ª/+Yï%¯Mal[AÛ”Úv¹}ånSâÛ÷ÃMiqS€ÜV*7%ÍMÝs_ÝR7åÖ}]vSÀÝ”y·åàMÙx[\ÞW¡_‹Õ›‚ö—•ïM‰|SHÿ¢â¾–æ7ü}¥ÿ½%°i|ÙaØ´"–†Å¾³±il%ûŽÊ¦õ²mмur>µ¨Þ;>›¶ÐÒ?úTïiÓhZÚQKߊ×n\›6ØÒ/ûºµ¶tá|Ì<ï{F#”R©!ÚŒðTîÑ‘ˆã6ŸêFP‚GÖÀeOñ\°ˆ¹s[jÓ4%Ôšè2hÌþœ²vš(¼„‚ä4Õ˜æ¥G:f¹èñ FrLì½ÈÔJŸª¼ÉÊîg0ÇÎY£>K‰.gÐpòç2çs.ÇÓDùéo’/%½,œÙ¡„‚$•R~˜Èy1Ûƒƒï —p’2‡Ë /fi;a±ÄÙ•Œ×#nvµÏ#œ?È9.˜Êѽ~&u7w[ Î1âØ>¸Så4±cp^Åçü÷ÕLÞå) Ñ Gðæ=Eê ‰¶xr0\°%{ˆƒÕŒÒ5Ë.­0ds™¤íÁ>èB†“S\2§yE~o3ø¤°Ä‰©v˜á謭D+·Âé)áCSglÒY¿×±¸ +·è{昭T›áϸw´ToTð„§wû·Ú¹)$„äØU¯£|\—»îu†œ#†2_‘ØÚžJS4é©ÙÔë|½NðP*¸a5êǨ˜ø9#¥à$÷ZÄK-°ã +»íwJ ¸–ûÌnNAA¬#1N“Y +ÒÔ‹‚1+ SIù<¯&öÁøZ”9œe”T¯ûÃE:’³^‚¤E¥zþÚ¤c sž*© <© f G„ô)E€jð;ãp'¯nHÃõüw +çè…QÐh¡IReÌÈŒ\€5H¹.¡uaQ!KÜ$ŠL8øV‚œ ³9±4pI¥”q&›ÎÐÂt£†+û:·xc§·›¯ˆé2åÛZ7ý©"Nõ)¤é +¥äpm0‰åö6 ÈvIhH¹)ÙXÝd,IJ¬Å”@‡†’L,lÓTúqéÖ~´§{D—ŒÓ­t£<H= G¾<—ÅÛ9löçBáü|ð§8Þ²Jµ˜­/†µš +É$‰Gé<§JɃ“ðc¡_h=Zsq©AF®‚·‰(¡ZIpöæk“¯…`q×Ïòí9 ,Ñý-vÜ£´pd 9EÇ<šÈ’%†Û2k^ÇÑf«ñLïÝàãH ñDgXyæµØc´ÄK¥íóàŽS ¹zT9ÑL0ˆäâ^¡i\ ÃÉêg+;RŽbTCßÊ:øÞ2»”QNO÷WØ~:&ñMP»…M4cfQ~¸—Ó¬ûkLT«ç!ý굂‘‚³rpºH‹DÕ9É,F¥€ÜËMD’ÁÔª É`“®6éJ ·"Poþà3‘^1¯Z©“˜¿¬]¬&Qµaþ¬#¹èÄ|ÖýQs>Í^ žSžœl¤çQEÃÂYÔÒŸz½¹êÄŽ©ÝPÃ@8DT»…éLNuiÕ?ÓJ}p, +’¯èƒH+Ñ.ôCgÐÕ 1Ô¹¸ü1«‡¥HÔ¨;Cl[Qý ™*~ n5îXkùa«ûžC-šj2 šUš$¬‡úóó/vUã`ÕÇ.¼9ýLÁÌO8Ñ[ŠlEnYIóSÊ.5GSNóSµ^—–2?G®sSø'UˆÕ³iò® ¸¼ùïIâaKmÒÄ…“+C”ŒŸºvòZ 7`*"XD%´wÝ Ã L©y-K/,¢ö¡K6>™ '!>,?abÆ}¥ ÌaMU´ù@OǨ_ûÖàýø¢üEÓxi0ÓÉo:ÑïÝꥧý!Z·¥÷½é/­ôñ‘.=÷Mg~iáóÚM¯Eì¡;ŒÁ‰°‡,l± +þa “Øà)ÔÅž±Áq¬h-*d‡Ù`L¶X” fe¶lñ/ JfEÒì!7;lÎÁ³‡úl0AäÐ;ÂèSठiÁ+-À¦OC¢ÞñO;ŒÔ+˜ÊWnPW 6kq}| øZ?líÓj +½¬­L¢Ë®RJ¶Ö2¹â&«hU_&ž€h¢ì5M꣢U>Ú¼Ô³èÑD¾0uuYqíº“^šÿZ4o¬âÀˆS ¡Í–¾ÁšÅª/±ü«Ùìà‡¬”…¦U+ÔiZƒ0Ñw57ÝíuÒ¤e‘áÁÚ£¸ØܧC³#÷¤XÓäHŽ›žÍ9jò¹ŠÔÁiê–ŒHê?pæ†S Œ°|Šcͤ~8B„ÌÜÑ­ßl›‚l0USwƒ®ô "GÈwY“FNZáÍw×y˜»ÑXÆhØByÖ~´¼`CñWå¥h\édT‡j†6Îu(·™aE๪Z´´\ý:&²ÃZ-,’Á¡5•Ò®¿¦ ÖÜD˜S¶ô2ksq~P'|b‚¦%ª€÷(ùø|²Å©l!-ÿóSñó+üÅ×X ®cYà"?Ü’„Ñ-,5h„Šÿ? +Øì× €qKLÅ4YÝwkÂ’Á„ú[q©ÌïlJö/!Ê&d£dÓük½¸˜®¿†¢»¯UåKVwM4JhÏ¡6Š]ÎDûø,l-eƒ¹À?,‰ZÛeµxxr1&J.‡»)ã´óCVÏnÁŠù1Rƒ$Á¢¤Ìab@&$KŸºÖ²döK˜²¨K’ôähá¡ž›¸˜]ÊRz@Ét¼0Eñ…Á„£Ž:](|G+7ïÑ1ÝID Ý/O$HͲî“X?ÝýD¸2>um¨Óx4}μÔ8u嬿vvc÷ø{êÒó”54±6©ËG  ‰œrö§Žq_ëOÉ‹g~Ðœ?Ô·Š2½íoP¬õYm"ÉÕOȼ¬f ° UUºÁp/a*íª-ÕÞ&ž¥„äúû‹åVh +ö¤¨Óàý4}L2œ_>xLnwþ9±À„ ¼8*Wÿ¨Çƒñ¼ADªS_Ÿª0`AUüÞ ¥Qb¾z°•ºÄcIb/ÔE²€j¸Éé¼Â„|Y~…¾Fˆ0@ÅU(òÙrŽ¸ 'íLv>5]lUŠ&Æ4Xr+f­£ó(WßH£çÇ5˜\‚>ØU¶‰UÕªš,¨’vSäKA ¹nל&­´E¦ LLEÇ̱¤a2Uo½9›ÀÃU²Se5rG…ib¹Ž&ÀW-_K’^Z ÉcÀ0n“‰æ%ìú)<Ú!²´f¢ lÇÇÅ«"}EÁ}| ˜[Áu?dÝ ð¬Þêû0pÿ½#(¡oqƒ9Ü _ŒB>¾áW(ä2¹ÁV®Ì=Ts‡éÜ ?÷Ñ –tœî©ëŠsݶø± Êìö! Ûµ¶`Û܇t;´Ü;¦nßù{ß0zßð·"7øÁgø)f—w8⳸€?Eɶ  7XÉTù)‚wôå +Ñ\¡œs!¯°Ï"úÃV³â£‚Ê<³‹€þ.µ–Éo©4Àg304œ ©ó…óô[ÈÿŽâ< VlÇŒ9Ñ,ú¾6¶™m50WÂ”Ä ƒ¦/ +¬¤M3­ צ¯-ê£`dÇ(’Eˆ‡ñsÅÊ4Ž‰"¯÷÷ý%%IƾF§¥ 4ê™Û\Úé¨èã”Ë×$.”þ{žÐ×Ð’G¼tžJ¿©‘‚M†_:ᤠ÷/¬dEEƒS’l`4ígÒêNÚÜ ‡þŽVV#ÿyPæÚÕnJýbFÐ{hΪ Ò +ðp¿ËDð xi í™LõÃJ…‡-=9ÙJÂä‹!#˜l';î }½/‚øéE äî"%Gq©®ãï#LЬ‹AA¿«ëTE"à,N¦·<îãYð_ÊepÑÕc/¨¨sD½òŸ*˜réÈjÍû4šDÖ{ ò¥x jpùE„EN¾U‹cÄ!ÈS*ÂÅí!R9w§~~ã&Hë e—`"¯‹´¹LƒÈBnÌ* :Æ(:Ë!jèsòÕ#ÎãÅ m7?fûÝô¨øÁîp EaðhÊ›q,Îœ+iÖ?%Ï$:Œ”Ž–Y)‘ïQOY­ÁBš\Öþ¡&|8¸ƒX;ªl—IÄD0|Ëþk˜¼žª ÇEG=Õ³›¾CP<š†üÈa™‰,-ð;+ñVÙ!Ž9úeÈ*9œ¢Xb'_3­~á):@ \7]Ìc ’ªL{©¾ò ÉVJ*žˆ¨’ÝxP£T$ö–CÄƈDÒä +̃‰‹ÖâM©ñ'ê˜q©wÍB$·œq-†÷B'N¤7䜪ìúcEFò*hýýÔäœ òf~©j–™ùÉ15“øC_ãtAoMÜ…S4ºà&s]ƒ°<Œ63 ?¦&]*üàùÖÚŒîU’;6ùRwD4«‚j›EûĆ¿O0ÚøÚ(„˜FcÞŸX]Ï”cþRe—ŸøxiœÒc°¢` S67uщ£¥™èn™°éºþLñèÈmþ9³¨‡YOLH;U¼ Au˜õgö¼a2‰-*aœýBɳÇÒä~"¥RžÖù95m¸»Á׋ê§*ŨzµIÉ^°K\<+ÿЦ÷¢<Ã1ætèšÃ®gR!vÞšf‚í§Oùš’£ µ:S7ø:` +c8lÃÏ öfkù}!Þ$kpÈ|@0Ö¦UJ…«y²»¾7EP‘33BCY+Ov…Š4­_œççV¡÷®ŠWßý2£ïaζïÛòÏ`“\#ÏϯþäW_¿¿Õågñ5n~ÿæ)mçæ¹oÞÎþ5îÞ÷fUì—Ïf­«q]¶s1¿.ñ²®[aÝ.oÛÊo³ÿ6»ôm;Û,û~ëÞ܈¯Ýø›WÚ¹¯Ÿ[œáê4ÅVïºñÁ«³v{÷ê׿„F±5–ì"Κ¾ ckÄc["ã.~®öCñ‘׸½x‡±·D`“-,Y_åš}¼'(û4fŸïl²¢]ú´¦YÛ\lŸ´m²»5ܧŠKN¹&žÛüt“Ç®Ùî’ÓÅm²çMŽ½$ãŸÊãß“öMfÿ~à•›“ÂrœXN쀲f. +œÓ¥ÍrDéçùÔWÖélÇÍ^å!]¿ïªÙ§ä†+wq \ÞÜ‘@I®90•J]N§œ¯*mOÓÚÀ`AìfÆÅ uVÎ0@QØçÁ±ðÐ ã2E'IÊkÓŠX;–jèÚ¡y6|A‘î^Œ×ð‰Jçaþyº†_Òƒ§Ò‰Ûk?â‹ÆŦ½ñÖñµ›†ÉÒVYú/ +Ë›FÍÚÍyëúøÒM{hÓDZ'õ¿éü_>´Z6T+ßÀ//] 64 ‚ϼâ„ ½ÂÚ”Ývow-Þ·V°/ÝôŒ7å·´¯][Õ›~ö[ãÛ—n:ä›>ú[ÃýCû>Œê²©ÌÌQ<È-BÒ ÷pùr¿Vä>dN…6w°‡³¿ u •qwç(sHÕâT‡ãQ¯jϛҬÿg‚úgÀM•Ôgdá$¨´Œ¸, [ïÑV0 °Ðý+8¢ N¶)•Âÿ[]›„"ÿF¸ üX9Š?Æq⇠}]½ª(~EÓÊjg’B0!c£¸Þ‡âqEd ÏfÊÞÄjR™Ñ‘–Y!9; ©³3ɹ¼›D¦U4ATÒÐ0²¦Ò7n&Ó9§÷˜áu×Ð&1>&s~¸² +jh!Rü)UØq’P;h2´ÈækǦŒ´H“^Ðÿí§s:QzÓõF‘k[k1û 4Ê°c&1Y2£HËU‹¥K4Ž”Û•#"Aõ] ¡CDœŸíp¢µ*u,J‡¹P#¥¸¨Ÿ;ן…ñºTeôB³ÝPG¨.¾uBqPe'î›ÚG—jgj’ w{yŸ›š:](‡÷,ù*Zt}2fω´Â):†I¬IÈz‘c^•tì4Ü2IUÑá/Ò]þ*qæR˜„I3erIJA©§#×…îЧ. Õîè `†°N¶çâ 4c˜°»âs&N1—µwü*œuª]25a)Ù~»Ë’æ7^@Á¡#Ѥ~ŸdÝ-HÖ”ö¾¸• +*Õ>)š(ïms˜Ìî˜;ŸHPk•&ŠGû¨Èþ˜Âå§J¸´„ý]bwaúN©xí!?­"d0©ñDÉ¿C—Z3l‚}©æ[¡YŒÏrÛ˜)–™\»+û.̦WóÖÔñµ›îϦGôÖLòµ›®ÓÒ›ZšXv…›nצ'¶áWÙ±lèZ^i]ì½ú—-IÌ›Œ¯]hg6ä4 ‹CÕ†îfCŠ³Âöð‚w Â;TÁQyiØÞ¾v¥Ø.Þ¾váØ=Þ!óæ¤OFLuzœ-YT{˜‡)Ç ^”ë†Õ#˜ÞŒÊ1“ £l‹!ÛE6érXS)Í×%£œ”+Âý…‰8è€b3“ȦТ™þsRªÅƒPŸ‰Óˆ ^iàßY‘žØ)àxm¡Ãõ¡xg~‹Ì®r¥Eðp,ƒÄö÷í±ðûŸ­G„87Þ‘4©cñ +#.pÚÄür¹‘ßGÒ\N¹aÞ0…t©3U´M;«C®ÆfÒgÁHJQ>f"@Ï[ ½? ໟ` 0¥ý)zßYj +óƒÊ8!¸­ê L@|@ÇcÌÎO“e‰ ¾aåHÐ +¢æ‚dA“ ÷‹à;@¦ aIŠç4 kÊ =§ú :Ô•œTü¦àe Ö¬“i"¯ÀÒ€mAkW)Cy\ ”+¯a&”½¯,žjÑíÇ.³ûãG…ɼYÈã#jÒfVa…¸@Ú–§Ì Ç¡ù` A4”Y1™~‚½Hh’Ófß6E07‰Ž³‡‘!Ls.|”ê‘j cÅIœ7Ý)ÔpÌaš|îÇ° +ubeef;®ñ¬$Ñ4ÊlñµåÒñr’”I¬"f‘ÐÚƒ0ˆ6UáCM&h +‡ŸŠÅ•TÔ9øÈšU„…Ì2ÁMúR‚Âiåñ¦z¨“5f‡NdêẶ—akÇ°ë«Þ.ëµQæÂú=0ÍšDO$qˆJkPcÒT +‹?Ìã ŽÚö<¡:Œ®!DzŠKŸ[X@=•z¨CÄC5C ŠOë`‰•4D- +Hñ–…ž‚ºÙa„FƒTȧ¤úD¤AÌR’ +ÇŒJAUü5ããéòÉ°Ã7Š¢¥‰4‹£Ê….EÞ””"PØ(^éÙ!©“JrÐ9òȳÃe'FñG N«É0ð}ÞQô=Èb+å]cA +=Cš©JÊpP†ÒÈÑ!ŸÈ|x¨%f?%&^êEªŒEá0ùY‡)”a(ÙQ’ž$C$ +Í°Á–ó0‘ºLE©ìaiS+&Ìm*ÛóßI@Äç«ÔQTžßD–ø›“ú)wôîÍv>ïÝ7Òñ¬>tu´«C¶ãy÷Üÿ¾zž5blâÊ>þlâÔ6šíÃÞ&>n¢è.Ø.1y Ü_øM&°ÉÖe±Y?ÛU¶_ŽëºÝ¬î/¶Áv¿,»j¿ýÖ}ºÙÍë¶ÿøÚEìÜÉžg社rh‹óûaý¶7'¹ñ¤‹Ëý°·~÷Í;þæèý׈°‰K€ù°ìk$ZÃÕWamÿ6QrN7qw÷a|ï7YÁ>}XÓŒ%Ù'-kv³É–\ Iä&§Úe^KŠæâã[*·Ë÷–ÄðSð÷ r“f.éèשëAž¶*}ds|·· +bp¦ì¬Pqøƒ‚ “?Ê §q ¾v ^ƒÜdïÓqÒƒÑû‰ä`³ LÏiÑÊÓX´e G±2aÌÅoðâæE‡\ú™°ó\å•~¨XX½ ùMº¤¥E©t½E,20Œq¤–Ä:Í—z® +}žVŒµ"²aZqŒ,SÄÈÕl…À”ÂqÍ´° HkQ«BÕ$ÙÀâY1œãÀǸBµ„wL‹ŠþÝKŒÝ<¦—kåŒYçØtJ¿è©îÚ_Êwx³Éš$fÍi´#шØ^êpT&€i6M‚ä/¢°ä$ÕgþRÅσ~T 3ÍhÍ9 Á¼¨Â +2ŽÄ÷ë²×qˆ\ _bø ¤ÜòщRçZÖìèwêßU=ÈŒbæ4‚ZÀ—Fë»Cᘮøh>cYÉð˜£"F × Éd\šöME¸É£«ÒRD]GL 9E_krˆL‰À<'Ä  zøgHVa7Ó.w:â¢Ao¹ëù¹jÎélZ&[ÃÙZ“¦(Õ;Û8ÇP€©Üš:Akt\¤µMz#o!8“€Q²Qò²ÌÚ%H†ò¼´ŠES“Bh\Ñ”ó…š|­î¬›qž×ðÙHŠ8†â®ÇNÒ ¸X9:‰rBŽazèQE´y7}ÑœÙ5röMª$«VŒ¦ Ät¿KNÔJ—ègH¸:{êÄ‹ s³ö$î~œ7©DÏã"sÓT唳ÀN +¥°œ'×D­RY䜕FêbŠ3a´¢êy ³%d‡v@!èñá†=É€Œ0c¾,öéä@°€ñÀs©Î˜)lBÓÇŸ«Ê—ú˜\9öh,€¢w´Ñ±T½0X=§F/B|Vâ¬QòÇì’§F’Ôl·˜‚ŽX·S…ðC”Näu£•‚)`Y‘7¤ ¨?p¶ˆ[ &r`˜û +RßDÑÀ²ÝÐPNhÖ +ŸDa¥U ÁÁ‡(tŽÀA”ÆD,P#t9@Á[x imæ'€Y„QƒÂí¹ªÏžo?t§ªÔNÌȳ©Î†5qÚ"þ63ãQ¡€ß&Q|4‰ÚãàX¯¬ Ëò@ Ùˆñ±9PRD:›8=µø[5¿zS±¸_ÄÝ›Eœ(Lª4âDZÎn}Ö…VÅXEa +u‚Åx‚IÄE°£›1O€ð Ð4»úX<0dÉ̲[æ…% «.£ñ†Z&¢¬ Ÿ•ˆˆT'/‹•&õ’õaêu¢º„]S*së^Qu¾J±ÔjÀƹ$xf‚uþÍ(Mñ˜wLžþ$ŠT3À°zºrRZÒ$Ña€PLÙ\¸TmÀj±Ü#0q‚R¦¤Kéjôb‡€<°N*ÃVa:ꄶƒ;`wÈJðêi±©£‰$41ávYÇ#öÄÐ"f¿g.´ƒ'‹ÛÁ÷†l&¥—‰¬i^í!›“Šêf*¨Q¹X¢R+î’¶' Ï®N.¿Ì*a"…¨êCHïõè,ð‹‚Bõ. Fc²G/fÊ$ÝðyC,JçÄÀB$lA 6 ’Ræ0Áù¬Ê̹:¨ÝI¨—‡[$Ýù³”GttÁ­T1`£\"5;ì’I­øi>JÍp\…ç‹ìA 6Þ +^¦ÀŸ#(<ŽßÊ¡2çǬa|—/7 +Ô»7ˆâ…Ö™+Wv :ž~ãn~êµ/~iõ^[/·ó†[Ÿ¹ºÖ­^üôÖ¡o<ÿ.>ìÉq6qi `\mk¤ÛÄÃ5pzµ½GØM^â5Û×7ÑÉ>¾N(vkè«õ¶]›ûeü¾à™§¼o‹ÍÖY÷؇„ß7ãnË.{ûÃR‚oN`ç*Þ] +½ÑêzvjëÉV·s‹{ÿ¹q´[w¼÷ÛÿöÑb*›Ð³Q›`¶yo±ñS×®1thß"²/Ý„îM€Ë|í&eØ$oÈ×ÙÊ’ØüpN´&@›4i›N-I×&1Û&pKš·Iwã&±Ü¤Ÿkž:kzi&k%G]6Õ™º½eí¹Îs‹„bè01.ZúÁNºãɪ‡:ùg}pIÉU.B·áò˜å¬*ÎáYôšæ…‹>À³Ê?O' 4Á5ÃçÁáKȇÎƬ5 0aäÈ©ÄÈØg!¥òóÀÊ=žó,qObñÄù +6)P¡x0±5Q·zB‰Ú•Eñ­Zæ!Ô“!¡ˆ‰3ÅÜD;Mè"šÄ q“ÇGŽ“`˜<øsSUÈsð=&ÿüZáäwªîaðÛiÞl®Jÿ\`# ؆°ßàÎÐpÃô‰ †“¡3”¯&¬×ÄÆ©ünÌy&’dqM^hb=:¬ùš=£3¢eA±«²®­©ûš£1Uä ©]t_U|­ŸrÕ~ Øaä}M˜&ÒÙámÏñT›_m¿°€Mûâ»3`±йˆš±ÃãûÄ*•°†f,7R~Èš/¼9aä =wJÞF¬É!°ôX2X©"+âTr€á/x*[?0™}šÍ¯t­òà>×¹f–ðÊéÜ#½È¦’T7í˜Ç£p#M{ÇŽL%ždB´”ïéà ¯ì‡8±ú‡*—òˆÝÑ(€Õ‹h\ÄœGqÔʳñ€ñÈÌl/Mz½õÎhê“ЛUPW$/Ũ:À" Ÿ&Ú²PÄ=¡—yLö™ê<˜Ô˜1ƒþ wŠà7¡È‘‹ÎâGž“(‡ëñð9Î1³üòßйÔb^ØrÍl¡¬¨twB‚ЛH„²8™ë&8íô4 ¡$Uࣴ™ÕŸz¿¶-2L5•–ƒÚ Ý÷–f»äL]SŸ ºÃè£o¿˜êP\ÁgêM„ô4ñP"gl5Ìlëæp„{kÅ ¡3Iû©^ªWÚêŽ%whó³o!éφØ#ylbpÄ‘ ÿOÏÖùdˆ'&A­Ü.L E7-+ÀÇE<ëÚdÒ0©rÅžSš¦˜ÜÏç)È—R£KÖbªÜدª¢¨r•ætòµÁ­@t ’7È,9GYäÑç+/öýêFÇqý¢èüÐbèÖ~Ç‹4Ÿµhòþ*[ËÄü¦áò +ók ÒÑ*i³(é›y‡ôù܇ˆ×µÉ9ÌöBS›ÍEqÌ=θ™çcñkÈÉDó‡›,8§Iáâ(š®ûÐj6£i4Ë<ÂXÖ‘ÿ"79Ô‹$@úAoÍkH°2—’‹@n@©dÍ£€mGi^ úaúš’ùDÇU~Òââ‰Rqô@3ïS†‰¤Æ½gSWƒ¸á¨Þ­-‹®êÑTíDÌûWöŒvl&H¶hqêB1²(M¼€r“9Û¨ßÔ”cñÐìVœÑ[œ +§óä-JHEŠ¦Ì¼cÐ3Òk(º¦²g É#¨f`{ä1‰¶aÄ&ÀÆÇ5$=üc‰Â. Ùî‹RÝ95oâ»2ŽÑ‡;,è3|W¥Fo‰Ämß‘k2C)× ­:$K[üÐyuÁJdÉL$ú¥CŠÇRçysÕÍ﹆ 0âø_h$W7ÑyöX¸HÒų‰Y™a¢ó2ÅVptÃ&Bx(RBÁ¤$²d¤û}”yËš_ÅñL/r´Ö¥æbõ‘)âÌžµÎ°d§v½%¿1üÌ‹Zêì>ð½ò<¯F$Ȧš…­‰]˜*˜Ïd$ªÅ]¼Š¨`&zžÖ—Î| S[¾^PŽ+Cg¶• ˜G’56÷­ôúmίòÄд¿Þ‚ÈÇŸ^×[Ýìϯ]òâ¾Èõ/~~ ÞÂƇ®ÝÄ—Mz W¾v×Öà÷$}é&šnbîú\7/`óš6ïóïsóâ×Õ±¬¢­¢Ír{_“ËÚý0Eðë"ßl…¯ö̺¹6[pÙªpŽ›-½Ùø«‡°S~w%‡³z&:åÕ…mÝê?¾öž[O»wÊ[ÿý…¯_âò@6afGtÊkàÚ„·5Ò)oæ{P]B/]ò&D¯|ñw©Á&Øg›”d›¸ì3œ%Ú$LÛÄj“€­YÚ>›Û¦}Kr¸d‘ŸÎ@×ts“”¾e¯¾v“æn’áפٗn’ëM +þD^j|e¶uâÂÏvˆ©u"’êÉð9ÆdgâèÎ ŠneÐ3×y˜,h'Ðõ÷y-§âIDQ +Ü^sÕá* #C¢&S²N(»8+€)KÝ…B¤Ý‡+Ìï§Ù@‡­QLÀÍJâ(ªNS.É/ÿ«Ãæî`º=Äî¼û³1eGm2懌œ„å[:˜:ônUoñÔÐ Jc¾^s<°"{*²uCì¯&—´ÓÌÙÈòêÍ€MŽR› ¹waÊF>Ê*¢ß4©NKÁ2¿ãR9¦.pTÅ¢CofêR7ï^=AÒtAk.«¦ƒ-a­5À#/t;)ÄQ–kÞ0r—_B&sèóà•§¿áããHƒi¿P@O4úyh@Ò©ES‹eB§Ëd4eÚ´—ÙêËl4hÞ¤j|åFÓf£|óª3ó¨UIg£·ó&Ì3Ó·UÁg£óó&äk>G/8—´a£É—¹­õdK"Ãfq»wºFÐƤ-Lì©jlØcp°ªW±òŽë¹ÄÌÌ‚AdÔ¹ùEÆÅqåx­ÅY‹Ä\sã˜|]æ m´½ˆÚFjíU’Í—n¤ÛV}·78_ºŒÛÈʽéÏùÚPÝFÎn¯{·ÑÇÛˆèmÅö6¢|é¾­ÆßF p Üë +n72…¯z†Ó©†h^›*ï[.R›¤ATDÙIT›mŠ( |4wM ”Cù°£9q´Fè1Á•©i¨Ùɵ‡Hé!ŸCâx›tª,]âŽ4žà‚²ÉëÙ¾ÄË”¿s{'Â# fB¦.¦5Ùzì 6˜âúºË±ïˆì»'lØNâ·3ͳä‘zq†Üæaãÿâ -=uíq°8†ç¿Oª•Kä4¨ M™—׊Gy>ónS¢>›e¸DÈ2åF¡–+’h&ø¾zPÃ]·&4#¼€ªÉ”×.>NA~)ÍñpC˜ï +NÇ…ÃqÏa´Gs;Qå&±¤*°q,K¦`Ý=Xçóg3˜–‹ó1ö¬0vn!wbõ)Ø•‹}1êK=>Æ.QPjí\†'„ŠÚ”qDï@]ꀓï„X÷½4ØbïBc‹ ™CöF¹l£oö&„æk7Ši]µ76_» +µmÔÜÞdß|éÖ1˜¸(ÛG`ÑdZ9x@¸NùàE9RšgŸÒªÙR(`ÉCRf2)Y—ŽÖŒâ"sÙ‡êQÁ$-‡^k†‹ê!ÜS™fÁR÷håIÚVÁóÄY"“®ŸÑ ¬_Híµ…6 +DoRE¾v•4ZeÞä‘fÝdÕQÚ¨-½É2ùÚ~ÓFåéE jÖˆ&‹G‚f=³u¡Ñ¤r?hjæSñ_e¹°N²71BÓ”4Žx×Ì®%«ÌUw²ÌäÓ g¨RuIvŒóa&OØöÙ$Y¨‹”c8ù&D+6gŸ>¨‡½9~¼÷ÔâSúåu `O¬[¢Xr~ n b•d;_ç†ý'žeÈ•‹Î3Ľ01HЉqAÓ2Ñ"úlºFˆ ¹F"Ù2¤~À8¥>È›‚ Á°Ž7ók#ÀÆ4}ªk„òÃ’T$Ø"t1!}®L€@Èæ2°)À@Ñ”ÐçKØ…“MзÏ5€Rô%ìßgD*ª|âV¨3‹k6¤ŒIŒáz¡su$}IV·÷ÜpØëüs8ä(Ê1>‘#“¼ƒÀ<•lƒ¤Ô„ƒfm +«”|I D¢:èo )þ°Â“Wì·‚½†Òƒ(èM…Ú ¼4é‚Ó˜„¬Òh‰œ>ü…ø :=*ÉK 9 ó÷-UøP(V” +ç‡ñ·PíÃGŽ¡ÉOüÐ Þ8?vHÅkå4î‚Á^M~è—éϲ&ËPÁ#\™3 ²tŠØR C"·6à ÆTˆd©dÐn<|$ìÀ=fÌk›gR +ÒfAÓgqêºpÞøü^Q˜U“%=Rîo¾HFÍòhÙ#;:Ï Ì=ÀÇôM$ ÇÒP±UŒL(Kƒ'Šx?ÎÉ ¸  û¤\ÉÚpeè÷Œc`ŒÊ5KK¼gÐÈÄ’Ç‘‡–Ú$Ár$­ HçK±!MÌ2†bCЗòÈ‹KGÔÑèæM9­‰=.ÒC’Y‘±‹h„Zû⎧)>d02uPhf°ÌMÃ*Aº“ùÓ1Ô_ôó«?ùÕ×ïouùY?äãÞ~ÿî)-O¯óÔ7ïf}‰ô[ïïz³Ö…ÃE·®°Ý:Ü.ØÍÊÞ­ÿe£|jƒ¾ï¨Ý¾[6è§6貓×ý¾:z®Ùø™Å!}í¼ÞÝ]×ê 7.óݳ~Èé½;à—~÷æ¾rñú›ØðC>äßcÍ&"}ºÖ·‰„kÈÄËØÄÖM^CµýÖÓ×È¿¦Ÿ}Ï%6Ç’™||Äìžk†²|=KTù™$u­?^3'838,ŽbÇăáwyZ¾HÞfYe8ðÀÌ[‰Õ©¼UôNÅiº›ãð…XùósO–pãëHö@mè LJEþªà‚„¦†^¼ÿê¥Yãžï¼‘°òx…VÖÓø%õ^,õ{p+äPwæÄþôóãº×~~±+÷ÛwÙé?æþ{:„ÓX½Ë‡ÄÙßÝÐÆY-Nûlu~¹úÒäÞîêš÷zûFÖ÷¶}¿»u°Y-ûeµ]ï‹t¿˜7«~Ýë&úz¿-[ó‡‚í²‡×¾8„-üÅslýË«ò¥ïîjñh‹ãûÐí.rñ£;w»õÊïž{uðŒák$XÃÅVÃ×ø³©5˜1„o¢Þ× úñuÀÝÅæm¿OXË]_˜¡Ý˺Š)Ì{Y«BÙº¤?…ÛÊ$cÞ‹&Îf0éÁDshs³6U ÛĹ³ Ô¦ÐÇgïøO&ÎQýðaŽÖ]âW³™‰·el(ÇÊaðœê}%g£æŸ÷Æl×·ïäüe^`ׂ‰S²~j +CC u?òИïµÆöØ|ƒ0¥žü„&G ¬j@˜¢. !^&ž+ßy®+$0Ô‰Æ VZa2Š&`Ÿa"Á«MîgÖÆÉu›¿#×_ïLÖX„ Õ—’ŽKë¡&ƒw®éswZZ~7Õ½„š¥ñBcƒŒ“"xq>ÎG2˜q +8ÓÕÐçQÓ"JÃÓƒ(Ÿp ö± qæììf’áSó5H' ê"Ù/›V‡šÌ0ÎOðÔ+~õªkY™QÆwA5Âpº˜y‚‘¼]d­W+ö;u6ÅŽŒKJG]ƒ¥ì•ÌòHÄáO• 5PúF³‘O[õÌäÎB ‹±ì^Ä”Ý3Ù÷4vý}©ñ«²ä¾„‰¶šš¸I¨ÏZCj¾ß.=ÅBJsÞFr@²èayúâ±ÝI¡r Z™8®Gï +ü™TF‰Ÿ¤\|àIùRå¯x3d Â«$tŒGÚ +Ìx!WVòÑ—MÓOUcÃ@ïrU9¨&ØæzJ¸1>ÿnÖ2‚k¬µþÇ¿ü‹úË_ýõ/ÿáßÏÚíK6¶2õ¤«æK~*O àgùF3"³(<·Ir… œx ï©lÃaŸOÖõÏž¯ê?ýå_œ7ñ÷ùÿæ/ÿâ¿ûßÿæ÷ÿø‡ÿéï>ÿðwÿð÷ûÿï/ÿlñ—¿ù×ÿ‡_þê÷ÿúŒN¿ÿû?üÝïüÝßþß÷÷ÿ×ÿòþá?ýÃüë_þ{|êÄÿ臄ë‡,?öÿÿqœŸó¿Yú_É;[gûüÙ88“Ì5¸Ï7 Çx0J‘ &0¸’ôo—Óï—^†Vô·pêèÔ°ät.Ok,’¨;-I È‘lX"­#qcF¨jHÖ£x.[¢Ä=mç«ó¤YßF—ÖzŒÙ ÅÎ䌋44ämm1ÈÓE¬{Ži^¦sÉFªãõ§5¦bwÕP[@§ìiŠrÓ¼ö²Â%Ã!iŠsRCA [ß+¶ïËô©_"ÑÐûƒa"©ï?w›žßû°žÏ8 ç… u&ÌWÂEËÓR%íÎgváÁgJ5NC¨+M …Üz¤Q¬ë´Ò·ŸyÄUB (<`ëœñçt²§ ¥K}ö4%Éì=M‡ +Ÿ¸ô²‚…ãMg85r´"aÐV@úeµ9›I÷ñÁÃåþs·éù½kV¿7 æI ü j† ƒr‘óçvjCžç*>š"Jð TwðcÌRli"¦ù憶 Ë^õò„Ó–­Qü¯ VšÿÄ+¾õa¹—ÂmœK¦5GÑk]µh¬Èsý!/F(ÐsjãúS·åñ£7Çý§æº¿ñ±ÓÚuáõ±bÝzX”ØZ•Ž7rú9`naúÌ€~Øà/P<@pnóbÒMCœ )zJÿõœ,€}ù(à^päº-ŸÀÿKùòñ± јÓRV¿þÿ8xÅýÿ3«¤®Bôn£Ï!-À¨ëÃÂæºÑ +— +sܼ£Š›úµòeJbó»Áˆ:?KuaÑ£Â@Ίß:œ6^+ŒÅÉqçôƽùvP¢„….¸EëL^-=ÐËÛÏ3šô0–¦ 4-[ÐôT5eÙi)ÒDza&vY°lšÆIo#Ö<_Øõ§nËãFQ’aÎœ"‡½f¹lEž:{MÌï~ˆMú/i¡’6zÂoÞ­”bþÖ1Tè­ *‡ïíTØ=¿évB çþf€¨Üoë8¬¢|;¿ôø8Ó«ÛK^&zØìš×ýÁËéòÏ¡¥›ð½½¿{çó½“ð \½fÖ:58vœþùh0”vÿÏHAœ—G〾·5-„sˆÌpr¯¥8&1èqè¯÷ Sãx^1+3OÓ½Ö¹d™Ê_ëŠ B19AÐÐÇýA¢pŽç +|˜žßû°zsðÏÍví &|uφ Fý—Çó|#(ÝkĈðOloR~<Ÿê¡©ñg:5ÜÃ3E2ƺ­ò™ÈÙ8lFÿƒs`do!<\@=ª§+‹èUpûþ`í–8nñi9tÕegÅŸÑÈÆ#\ÎóÊÿƒ)ï?á· KDWL¨@åëÌGÏßï(#zî¨nÔ_`¤©,i`;´Còß* +]‡ªéç¡7Hjº3R”øîjéj­ÁÚg½ ™^ +,9o'hç \Bý†“<úØaÀ¦¤¨ORà!î'’f a‘2Rªbv ì+ßJ†Í7Hª:¼åŠ3CÕãÛ? À­ƒ]ÕåƬý¼ø<ÐS}õcR¼ø‡¬:oàò#šô{ó¼ÿ\þá<ík“¿ø<ê +â‹ÛAŒÃ°ÛA ²s +H|;<jü8ˆA`¨ê ·ƒ@V… }ú‡N…-ìñË?ôfGþâÃ%¶‡èÕ‘áö'$÷ßþ¡£,>ßÇåzÇ@ž£Ó?àé°ùâzë*Ƽø‡Ž6èCoÿÐy˜=ÏT›çý[òevÔ”Øàs5¡ÿàù™§ ýd´_Àçq&!Ðú¢”Óï*ƒpS×ê|OµÌzJúáÕ€Úo ©Žó1, ¢üÏߢ·Ñ.GÁIIÀ)dÿ­CêmYA=…‹`WçÑS´á=ºÜsæ»™Üc`˜ä„Š5m•i +·³ +èÌ¿9ðŒ0yO#Y + ¬ïÔ4è·ƒ3ƒ'¸H^4"Öåw R-ö×]8ñ Š…²§ÀxÀ³å01Jˆ’FMÕÓ×ß÷ÕÙ(amG•ìÓ˜”Ë[§¿ˆ¤ST5/´UI´Û(ø +&Š¬*ÅÁsZëL¯0ûoŽ?Œ sÚ·á`Fø~·:l£x@…ä”iÝP` +Bh ösG6”_ôôëUálPnu¡zö£vU—.°b^w¸›ël ç´!ÓaœB«˜BB!ty¶¿¥M!rØòë¦Ð¿‹Ü¿s×G°åÑÛþ\\ø©ùeãÇ~•¿ï­ÁEOðýsïGœ¬òc럧ëÀ¦Âo·~îËÖH{IÕsí}ÕÓé¿çæÉiÏÝ£¨XèÛ?‚•ú`ä¹ÿ)V‚–Í‹ÀØ +§œgEá8/‘"³3|ù€õIÿÊ> ߯ãvœß¥¸½@$á w‚Ý@ÄÈ%–~Íæ§@­?þÒ‡#ˆÑ·'Ð!ý(W€gOÔ׫/À´ebça:…]‹œÞ bÄ’5ª‡;ˆhƒTàé°þ2AJO‡[õ´ÑÓ#ÄF±åøâ΃ŽÙ/Ÿ1Z¢bõåÖ‡ý_Ñ+üçŒpìS€Óòü †VŽóåF²ÛŸn>º2Õ¨üy†·èJÛVŸh1ÇŒJT™úÁ˜å#‹j¬5"T¯>VááZ0ëÈ9Ć\àT(‚â­b4¬«r€VŽÖ@šx(‹Ú8px~;‰TQj˜ éÆïˆné*"£+ªz Y^ êRt1°ñLœ'ý"’5N‘ȠׄG‚'¸5QK-ü®(xûþpÿøŠ Ôs9õŸºd e ½’¶«e%Ñ-üFÔ¹ÿÂ1É<Ñ_ q? +™üéAxÌ>ÕMbyÁOG¯P‚.<ØùÔf°ˆ–§IÜ?ÊÄç‹Cu×%ÔJT)ˆÎ´¢_ƒzVÅÐ`góÊ åÌø¥ÿ”áÁ÷©æ+@§ª7(#¤T€\¡|(}¨HP²›$•ÓYZœƒDOüž^¿“wÒÝkãc‰¸ý{ã÷sã•{×w¨rÌ–ÔÜõ„O¡Þ»–ˆ{íúŽuXç4‚w}Ïázþ×®ïÄɪlsíúŽ•‡€ýÜõ½E¿ýk×w УQuízXHà³>ßßÄ®èp+Uz„û@4öHf¼Òw¼€²±Oú øqz¼DüH”±*ÑwÈøoªµ_1& UÌ 1·ÂKŸQÿ 'Ò¤ºÃ>R˨|aÆýˆã±üø£ Æõ5ò#}wãú‘ÿ«ýý1‰K¿Ä~dÊ*U]ѽ6õË®ð¿yÜ¿ò2Šù~-wpß~ǃŽ…Ódéa-˜Å!ÄúŒzÂ߀5#3¿cyõs€3…߀«Ï—µƒ|ÿP†Wˆ’øÖ +rzE¦sƒjRë´6ÿJqïú4uh«ü‚»&æá² ›Ý‡¬’“?àt%œ(W?MÒÃ¥·w¹ñ×Ä‘Û0mŽ”³££-¸²¤È{›3ØA ãõ·nÓóK_¬l{{L¥vxY8=˜Ä¿ÔPMfò{<ÏC0ÝקŒ¶m;Æ$‡æQÍ­–âàŒ‡ØÛ´ÒËŠY0˜Ôé£ -[˜ÑoÓ§ÆÅ‹×Ã|:@0°þú4% `óÚËÚ-1?ÇWvš +H£'ªÅt™>5ž ÏÇÑU?þÜmz~ïÊ6g+Äô“vŸ÷̲&g¯‰LuÁðC|2âiCñxÜï‚êGA7«ùE¿‹ž‰øpv W# f1ÎlI¤ð…ÍL*÷¢ì»˜ÃîaJB~j¤ÙÖÞån%0šºÂ£þ"ºÛpý\†¾:yéçgÎìžññwnÓó Ö&^æû5ªC”û§wz¸¿}*X‰rÅ’^¸ËB K¬E¹ÿåpà%ØŽïµÇ³éSREbº»?ˆR<5Ñáy9ßEýa*ä4ºêɵZ7Îüa}8~ü…Áv%‚ÄøP“mÞÐMÉþ‘›•Ä ¸ïpdñãJ)=>U‡¦ù÷9uû4eáÞý°¦uX)ëèëIm.PÌtÓÂGgÅi~ k¥Þ ºg‹ö‰aí,"Æ_Ô€¼n~{Pè¿Uÿ]#¬‚w¼XÓ!Ð óf2IÚÊ9\Y‘„ežz…8{\¢`$´ö2y³Kûàþ ! @uÌ3?MU·¼ö²R3üs•@£¬Í¤ïãaúÏ™A ÷»ht¥âÃFŠhŠ‡5 7 ¼gàFàêÄ›ÑÙÔôŒ!àÚ:<Ÿ+Ž?ä{Z9òÇyñŽŠ LsÌtÀ‘ÕÄLš^LU¹Ê§xGl…n£†ã|\)Mšঅñ0»ãw.´y'`ïžéaêÎÎK§~3‰5è<ñD½t²w’°„|Ÿ\ݳöx˜jË>ŸÖ•Wì­ÏÕMÞ4äËÜ ‘]Öj+¥€Øˆ&&n¯&2Š:O²•ÚÇÈIõ¾üœ(A ;cÕæ69'¤ìÏóƒCð§ÇŸ»MÏï}X©ˆãÏ)O¼óâ5~âyÉdhjÒùuº¬ Çf)¤#aÈ5õfB)BÁ +J4Õ— ÂlíÜ'}NÕ¬QT²ÇZi–Ê=Ã:°_°% ®sæ +T¦KwütJ@3çƒÊ ÆDîBÜ xàÑ Y·%h¦<ÈJHâ~Z»–˹ý©rÒxT¢ 5œc>›ä"’íq®±ŠÖÚµÅ:‹Òç_0›Æ¬V‘·bó´ÝŽ.‰sÈÆQ1FÝ„æÍÔýc×ªÛ +“ð‰H{!e˘ûçÕäáx%e°#Ízœ™Q0cߣF¯xÍ œç=°žEÁl²|Kw÷!(¬¨G<-ŠpÚ耇ùZe`À3Íä‚C£§4 œòDþ]Ë0ðu`΂0ø%ï)¸9¶Ãig%ò¸F!˜ â|œŠ0åð‘ž&’\nž÷o ¸b¢„*æ·å1ôa°œ0’  ˜m1g¥à™èJIµ![õëýyR.œ‡âQCXx±OÓ•G‘#Çy*!_*¯ˆ÷B•.(HÕAð-ñ¡òª¤'FÜ óG8 ÈÑ^Êa£LˆL36˜%yÜ XNqÎ:­A¢!¸4%øcù§$}ÐÁŸ1§ã0¦ ÜÅ°|2Ç¿ $à‹I\´üšn[ø¯ì  ©ƒézj¼Q‘\d=kúSŠt°Â5.ô6 :Ñ’¦£¨~©ÇU.€n¼Š$Ð ¸ŠXàr¨HG [F@4tjpšø¶9ñ v&åWM‚˜N€À7)<ƒ­¥‘agmõ€á­Àô"JWr¨[¦üÁ” +íÐ+5™;Ö¡†ôƽøePÊ?üpêEÒ×,÷Ò­á?|Nª.3ª ýtI,0)Û<îß’(€{q µ3–³ˆ_¾Ì “Œ³9;74~ZHn;Œ^# 1Š&ƒo +]¼aÚ}:€8OZ–áiÎŽÂÆ… b—¦³ð,¦Å‰Î®‡ë@%Íc Ø–Èßü?‰.:çýLÍÚ ¿õCdŒ6hRàŠZ°ç{ÀaMŠ"Õ›‡SÎ"§aG¢z…Æ5 +•àóh‹’ß`Õ&†êõiÿºk‰DáCE²3¼¬¡j´9ywÎGµäEú]$Y½ÐB3&Ÿ åöì,RI%F={¢Ça˜#\6L,ÉŸq4fû­ÁRŠ:£Ž¸(‹†`22µBÂÎH?È`s@;Ö3ýÍÞr}Þ¿îjJe²Ó7fÝrŒªËa“£X˜¸¥†.JuŒâ/d/¥ZîC…3~|,<>}— á„ù[MOõ]¢„f3Á]P†‘LE@ *àé$m—0k›ç°à:(Êa"g„‰\n”oS"zŽŸ+îÐÐÙi-ê|×:t{'y‚ã»…LkôÓa«ÑIbAú0”gg%„ ¬M`‰-˜µSb›çý[+):ò<qå ”¬WÍ¡;UÍÜoWªšÃxÍAYsð»rÐ_kÊAó£æ THcײYX]sPûîÎAUsˆNAyâ½JW +ª’ƒC™‚Ö«ä þ¯RPî›»ä€ ô¢a¹øÊ@ÙsdÉAAJ(ÝJ$½2Ыä°yØ¿r§XgŽÓò lìrY¯š‰ÏŠÃuDTÅÁÕ{AõÚ¯ó:"ªâp5®4/r•®#â]r˜GD•¤¢~Ur`™™t·y–pƒsŠâ¥ä #b¹J½ÞGD"yYr˜ahŸ%Ù|”tDdkm–tD åYrX÷ot—R^j WéJµrbˆ½K ¬\ñ|ÁRCjw媌Yjˆýµrõ,5¸ruW®ÊÕ]i˜•+UJx­\©Ò»+WÒu¥á®\=+ wåJ•6ïÊÕ³ÒpW®ž•†»rÅJCt•ëª\]•U®8a|UÖÇý+/£»Øɳ/Š +/¥e•â]Y¾* ª,÷>+ ñ®,s ûpÃ륲ÌJCðãâù(?* weY•| +ËñµÒ Ê2Ï•³ÒpW–ïJ+Ëla°Ò`¡¬«²üRi`eY»Òp•–_* WiY•†ø(-sÅÎJƒJˬiÌJÃæiÿ&ÜÂ}DRNÛ^Ϥ:CTI[šgˆÓëHzŸ!Ú}"e—›ë©…×éóqŸH¯#Ä}"½Ž÷‰”GˆâÅu$åµIñ8BÜGR!D8rIu„p‡ê:’>Ž÷‰TGˆöv"ÕbÂÕ¯éê0šû£ú¨ÃhœÕÇvFc}­>Þ‡Ñgõñ>Œªú÷y½ª÷a´K]0¿žF¯ê£N£-=ª÷iTÕÇ)D=O£ª>Š‚â>>ª÷aTÕÇúv}Vïèª8Zó0ª0hvçÍãþ•—Ñ]¾P5¬¦×zÑU¼ FWýQ#MãÜõGŒøêõÇ»`ô¬?Þ£«þxŒ®ú£ +F,ËÎÇ~ŒÆ£ù(ͤ +F|{ä]0z U0JoÈ»bô,@Þ£gR£2f‹ªÏj¬ +T·_ù8âsË°Èxœç×:XŠ,€ƒÁWœÿ#+ÐdÂqàô×íòÎìsvê{¦{ıLk €!ùd@€Œÿi_·ÊJ¯V +HÒăãã¥7I•1a:㔩Møþå[çEÓ ÓmKâN§ ÜÙÔì ÈÒAöð í't#RôC¬GoUôûß6R' jA¤+ç‚R.!+Ûg­ +endstream endobj 65 0 obj <>stream +K°€&Î4ÀˆË¦&zòO_kkÀHÅ9—¾¾ñp`QÜ)ÓÄK£’ÄñXŒ×_»Mϯ½¬È¤ˆˆøç¨qø~‰×aoâÅëƒsú¢Ÿ |Áð>÷“hÏæ#…¼RKíå1ƒº±™~4!Ïø&þ‚8ÍÝ£¯Qe|’{àJi;ó<|håR)ø²ñ¾Ë fИú™ +ôö43o^ïiZQi?ºžžÀ¨Áyò¬úêBúÀËÆ«AwHaÝÇG¡ø@ÔãOÞ¶—/˜.0lˆø&ÒèÁË«{Å › –‰{5.´‹!«ŽPßeè«y;Ë?’Cöé¾ÀïC§-°u‹û¢¬Á‹ pÜÃÉ·¸Á@O‰!|*£œ~=ØŸÕœËFGgŽ:Îó£PFTð'O/T^l©HwU~è2“o Ì|?‰9ÇxæCÏoŸ6Þü°6×ã£Ö” ¶AÚ)Pº‹:4°eÈä>=ž»œ6(«ådò«IQ‚=C[ZcдÎ7ÈCéøFåáØoòçôÝ"ó™&þî)@ðø ˜æ±Äü\OÓ‹ï¾­—“ç&DW(XbÆûÏÊcQÄ ç[ûþ’KF‚­Iôø§’e8º4D¥À\ã]eÈ|ÃDÇP1)°ìç·Ô©z¢Ç›ñ¡ç=Ô/ ’FÆÅ2 /XIÉ¡q¥?MóµÔ§5 Š{¦ŽZX•Lìä€;³½EÎSœ«;Qp/fü—o5/†Í¦ëÜÍueÿ~ý¨Ûœ¤U¤_•ÅØ|š¡º 7t?OPQB¶cóàÿxƒâM<Ïc2_ÞùS ù °]dG+2.’çfÊ1Ü/ÕPŠ8iãOkaø©›r×óI1ÏçÓE3}>ÌC•æâi¾ŽÒw V”EI¾6ˆÂ?lóF¹3.+Ïd%-AszX/ÀS踂2jõÕ/÷²‚”¸z‹ãЕá‰1#]/ÚûùYœlã\·5HfŠVŒ¸ñÈ„cW`¢u=N”걫7Ïý×}±g¢λ;ÜþÚ'Û§£H!ל~‡eæ`/ËŒâ[<ÈEÈ0ž=Ù ¾Rÿ¿ö®­çŽ¤º¾Gâ?|/H(’¡.]Õ]8!’s)o#ãù>ÏDfráߧÖe÷é>çŒaÀǼ€FŒg»ûtwÕ®ª}]KMôè"Xî”N@ÞFþ 'qF×êšl²ó¿›Áó¹BŸ*HIÐó8_D}x”Å›ò|¿ˆ1Wà™œ?™T#û +ðHÚ»áò᯳ßt—nYØ|%äG˜Û#sHYŒ³»_Œ¼ŒQ¿ nìå0ú+ }•àÅËBõÁê~oô?ñvGõÍ„½ªÊ…¤m$LUoðxãyèsÌÜ^Á[F3Œ3ÓÆÈ»‰©X qßlx"¨Æð¡ª6R9$…:4eà{<ÊâEy\Ä™Îé¼ )BbÂ4Yom(¬GÝ*;°þ.݆ÒÞX=;éT¡Ÿ[mËn9ëê‚ ÀØ +.? PD<0™tè¡›NîÓaTIÀ~ygø?÷®ñé]ÝJë‹>ã`­òu±¼™v½ˆç/%3"à$Ÿ +ËÄÐ√{b©´‹ +Yí"¸vÛ‡N+¬€Á€HªG^Y˜dV;¾fÈb¿`8WRâr³#AÚŒ¦{P N¬?Åðvþã ÁœTB(éJ›pä^±ebXW©ªA<^›£´¦«À±ã¼©¹›QÃYòÓ½‘ÿ¸:!ä˜Û¨úvQ«ŽtY}02†Ý,¤|cÓ‚ j!ïpS@•—aøbr_õbˆÐQÃPT·Ëk‹gÁ4û+0RƒœSÓÅÕ#®Æ9¤w Ñ;ï>¨×;\‡ý†Ø$ÁŸ ÊT ¸‰²[”¬-}c•4X0›K [t ž®EC6+ÇNR¯“{´ <ذߢrø0’7Cþiçô;"æ‹„1Ÿ©£/k…G(Liã]œY0ð…mïY"Â/4OoS¦ß’LR àŠaðfd-Â]F|fØ\Жw®t¾ú"§†À¯a Óöéô¢–ñÈYWwwS¼À–EiI0þ R¯S- ‹>3‚<8Jƒ < ‚-¤¿ÚGó +äk• ÕãêÒÝn8 +»‹m‘{¥ç‘J¥ÑÄ6vgà?ñîÀŽ>Ø:8 sRÆï²±Údó•SCµJAï|+ »‘ ZLf…Ñ!U1G'm6 1¼°Ç¶áú7Úð³;!¹ŽÒd—¬€â¾¼¨Eïì®*B~¸áü>8ð2F!Åšœá#ê@^ ]üƪ¹ró€j’í8|ÎÄÂ’óÕèÛ$ûò•¸™ ­Àç><9û˜|»Œêíø?~«¸@K,¨Eq!°£ŸX,5© ’rE9ÐÔ£FÆY;iCm¸ଠ+T¢bMDʯ}Ôæß@xB¨UH[zç=¦øõ¯aýè?¾þúíûç/Ÿ¾úðöËß=ýíÓ´ªb·Jʼ£n›ÿmétwiNÀS™%*j¦ú>½þjþ,pÔ³Ân€„Ít;‚¯sÕéwožD–ô?çø t¯O;v^;Øô°AoïGvSW%à©.|ýî/xöëïñ칿íh¨uCÌÿ ¦þõëïÔµ„&‰© TÕ~r¼õé'ÿúÍ·¿x~÷͇/çDñï¿ÿÌüäÏo_þåí|êÿáž~ô?ýù?{Îõ›o>¼×ß…ª?ýè§_~óëç/~úóñÅü’_~û‡—ç/./uËêˆå•*W©ªÅÿ‡²hÀ.|—óS§î +G)!³nÝøŽ˜ +«äU¿¨þ=-ÎÜ‚Ô¤iAÐ×+ÑVÑà!óÖלÉ-VphçÕ  •ª#©3Ñ…üôf¤Xe‘há¹F•udBxs÷EÞPI¾S=¦õßÖü§îDs§ùûÿ–}’A;Hàîe¥°úFæ‰[VÇ@Ö‰>ÞøZ¦í~ィ«k¸¿xÊ*âX,ýrï~iÊD˜xÌM—×½Ãí[wk +ªÄ“2›±¤nƒ +Å| ï]³/×V;¹í]q&+àe¢å³’hcÅÏF/´âÁ¯U›fiäï®M#‹£n‡E€Жéá„­fâi¨ˆ´ Æ,‚èEç 5`ÇÂÞY÷Nª$;ø‰t]WcÛiù›F§Â†š@>Z¨Õ Ï ‰7_Qdâª\Xýt|P§V¸LAÿ»‘ÉÁ¡Ålq1d…x;ñša¹H „ºypâmN°ÕØ{Iva¥ 9ŒEÝ/¨üñ³ŽBâÒhN0Í2ÞìAx.íà L>È´r7­°ã¥¨âêÒ­ª¾á)«Î}ãáK|JA•“Â[3/8‚^î Ü®|Óo̱4«!üBe<Ô¸ªvDÖ],Ü729ÌlÈzìØ9’p QÞÓui2—ò¦”‰ß~p|64%bîb}z݆^ÚÓÓ›KRùtÑD€‚¦¡Ô'ÞÝ‹ºODTí@%—Ä6ÈZØ]¤qk&5:\¸E=ÒæÞˆ9iF×$”4å-rí‰ð›sÿ3#i´*MB~ kQÞÝ?>zFÑ7Ç)…c&ñ·ÇÕ/ûüöÃù¬Û5+®…¬ˆ¸:áC¾·Ø˜¿ôFXQw•±»È¨ éÓí +Z‰Ã$zÐ<|—^@e Ë,¿š²æ홟ž¼ŽöC6$j!sW:|“ZJ\~(3e–wãŸTÅWúÎOÉ5\c<Ü.»Z‡³&î¡ã">+ÔåRy£ûE´¸xøq •iÒ¾8G,èË¡%c\ÄŒw=ƒÊå£0óv j ,E&I´ U…Ï,š#L!uðÂ$1ÐÀ10º½™Þ—J<‹Ö²ñ¾Y§ë´Sö²DñWɦ¼‘¨p¾x¸é<€ÝÅ…„—ôÃWæd=îˆ|Še?Ød +:4A¦"D¥Ðn¼À¿ÇïÑÊé€+%šäåBTšŽÞŽfNG=9wº“™3wuÚnåtäðY/K+g•“2âaÛjùµT¼½ÑÊ!˜È”5§7(¡F«•Ô‚?]“¿›ë—{üVcvqæ ÎOì-÷Öù»Gl,ùé9 @(]Ø"Þdî* 6.‹1h¾òR×í#>„°çÃìàž»g È´´°-wŽ +jZj…~ñ\äúWõÆ.Ó¶°…Íq¹´¥h€ÞŒaIM²5 +¨´ÚL0PÛ¢õÈ-D æHï à%C= lNæøÅ:Ò†Õ -dÓ+ ;5ÛödYþ”åhÛY‹ø¾bSšŽÁ@†Rä”ñEÞOU›87b»¯ë^Ýûƒs¥>ôl¿è >Ì‹zêâ݇bqBgož>™ ×»¨«û"Óí9¦ãr)*xe=²lxµÊ{Ùš!Š5m-š«` +'fj¶l© Ý6·{¤4ÈØô ›®‰*‡&šR +ŠzP–${†V †Øj +†½ÅÔXó–1U”–§{ +ÿåçvâ2#h§ÎWU´^;8Ä°d×ù^U!.p² ü@ ʾ$»Ë+)Z + +y„ƒ@ V‚4ÏÀ¶ú°ƒq,ÈUJéqxY‰XÚ¨!s×_§mÙ`×$€åݘ°**þ+îÞÙ”°ñ1šYÐJ*º¡]ÆÛsêäEÌñˆ1‹ÄqdŒ‡¥ßf¼¶øåþX?Ä2ÓJ„xA”¡_o©™]‚#Ä…,qe3M κ…Ú®M žeoŸ Gqa#ÐVmÒ“7´¬ŠumŒ§éö*º]î<«ù“&öÛW2::šÆ2MÀ¼s€›gœqÓËýx¨%ì…òÝ5öºâÆÝþ)£{œ^½/>r\hÀž3¥öIœ­ÒW?î.µSœÄ¬lWº‰’ßñ¬š·/ýX§šùfÛÁ™Ný¹úlBš·«Ïƒy›ÄȳšíÑ`ýcÙŽZÅ¿‡†5’…ô¿:é—¤¾º)Û å '§ç œk¸„( —}+' ¶³)BC:Haôýî%W‹ æ)3‚2ƒÌ¥ \†cõíÑ=ÎîÓ¶òIYQ†ÃˆwW*œæU±Ù4X J©(LYðTpÛ¡y}Žew~ÔË0pãv“úU)¢š¶~-F¯îF{\ã8ŠáB¸Qú¤žëâèùY=oÕåg×`­ióáÓ‹|ïïÞRïqaëµÂöÜC0 ¢ÉCÆvGŽ&Ê`}NunS¶GKnn˜Þ¹š0Є}wI®"¥ý±PçÐ ¨À$ŒeÌ?eó*(Ù|{‘ÏDEB¥Enö§9™[Ô,\²Îõ—WBŸ¶î".5¼ÎÒ–ýp2ÞÐÔe;V¼;¾TøÞ¸|AÉ°Ä®Jºu\må(ãíÉ`ѱ E¦£¦ãåþä=l+»JÓî§ð§H:Á]ÞX¸ Dn†`éb¿"ÆÅ.¦Í‡ðÝ&è &šR¶lãF}Õh•¬%ÙnÄJe…ÞIŒpoÓfwüÄó ¯â—û¯ýÑáw•P~Ê۟㨥°Z­cŠ£4ÑM´ìÐ^L(’ß/~¹ûzã³¥¤*ÊÉÃü¦W^ë4¿hF6KRˆçUÀ%ç× N$åãÂYiY°9aø2ÌELurËd¹]çãE5”)Ž„nl†žtû"lv"ÝcÒ Z–Ué;;ÂJm#¬/º÷g£›–åˆèPä13¿²›aÆ#JAs¢=¢§nøs&}\–ÍnºRÊ›¡~¬N¢Àu¨c áÅ6xJÁpâB3ìhSVáààð ˜ûïŽî<ÅÛÅ&½É½£[˜S åµKÄ3ƒ-ò qEÄ u/~Oè©`Áep¦€ôÀà!ã$ Rv¤ò3·Àã‹ïy¹ÿõŸe=­8Ä·}ZPä~×ë m³ò…½oæ(a¨åZc¤hC|rùêFï³$'Êß(F;9Óo0ےѬ3ª,–Âã©oBZsÿM>RҔ맪ib 늪ë‚ØÆc}AíÞKl8÷AbMSÉ,XÔ»ö±Ü» )I§N*Šî/EMÆÃ_‡—”úŽí½¨õóoEMßYÔtTªÏQÕ”±O 㦯.pàêKÝŒ(k"¥V_µg¾²¸Y\²º!`2!»n‡Ǥ)¯F²C¨ž S01˽7yL]ÓªÔ8mZ3«œ?‡mmúæ˜ÇGσק#5ÿ†c6@R³ŽÈ­¢¨cƃN‹c̺‘C<Erá-bª¢I„ÿZ¢Ä#ÙêJÉ(!ªÕŒâ´²`:„!‚¬) ÞâdË‚x;jL´1öE*.IÒ"m´îæ )Û¿‚hBõØΫÒR(öAiÿ@6)E¦N´½ƒPwµd¼•È©/å€_IàèäÿZ»•h8k¿Üì?rPOWßßh›_f¬EÑZ‚Åkf‰S€Îâ)«Î ( $OÂûOñº;íÈ3ðæBª?AAÌää…ºyªž6sSÖUUÄT»Û§,G\!d¼‘åñB¬)îöØ?èåî×?d¨Ï[B˜]™–Ãjš¿ºšöú0íÓ ú&få›&¤¿j¿–¶ýì?¨ÙÔôÍ@9G5»÷ýv@­DàâøÙ¹ˆðíôÕt1ëR®>%\á­¸²^iwfˆùáS“œ|=‹‹JV®† xE(ÿ<Ó·~Üjä—`sQD©QZ£œ¢­*<䃞}i‡‹_îþÄgPéÜéñ<·¤kízv·@‹Å~Œ’ JÇ" óŸ.",?ý vV8È[ºÑvµlÞ¨:B$cÅØâ|uíZsgM¸ýÆÇ.˜Bü¾z½O S¨«Êí4Nj„Û΀ÔTrq-Fàù Ùšì¬ÀŠ"ËY B·ÚPgôD?’Ä¥x%FHçÍ©ôâ$-nÓ9MHfÕ4{š;ò°¸ãüáM7U@HÆ7A*Ì]~qÂcs…#¯ì + GŒð8MœMý'×b*09]ã»M›¦ýXË“%ª¿8þB¬ï‹øåþk?4”„OQ–qe±¦7”mè±1gÚÏ>#˜Ì²âýê—û?òY"2S¡]wsžã1\Ÿpšcà°sæ".€Æ0æübx¸yNuð¡üb8G˶K‚éy˜LƪøfFO*Zq¢W +©™¡"2Þ=¥‹ØLBp5œWqG”SÀ žoc„À¿-Bê™Â¬bx“Ã̳Reë0ÙeCÄÜÿöÉÛÑV¶DË2+Yçá˜U|ÌÅÇÚ + ÀB„»ç‰èrÕ ´*Œ‰ ›Ñ|X6{‹5µÂ!îÅ{2ëŽ*˜¹±Šž_ + ÓRüĆ²xÞ]KèÚ<Øw]×פû‹að*p™øÉËËíÝ`™Á/]÷†åU¸<ºN<@Y1Ô¸»&íÓó{ѹLJ ‚!;VDé%Eà‚¢‘lMÇ'õ¬á˜W®âÝb/›+ ª½ÇŽ¼w!W 3äĶ氣Gw +)LQ2w-Zó¢¹n>zÙQŠþTƒMºC&RV$â¥E»Œƒ£›÷KÑÀk‚ã"Œ×JìÀ**ä|8átW7n#t]œêh $[ET´øº&H-•nˆ"±woÊšêÙ™Š`;ŸAúYÀ®—¯ÉRшÚgÊœškeã«ß®ò6.ý…§h^d­&—o±“ÕdU”±ÀD}™¢5JƒÐ¸nÞˆ·-Ìúé܈ØiÔU¸ªU¥ÂÉib^ ™¶…Ý Ù/Ŷ@ëAQf´EQ—Ø˾Àeñ¦TQ¦¡žvnE\†H•¹30nsȧleÑ:äÖ¶9]mmÐåb0c¶N€¦ƒ2.Ãí…­´oJ‘Nlö'Šâq¨|Ê–€Äyºùƒ˜,¾Ü£‹vv^í[ñìª%ˆÔ…Òë\q¦4n™E~¶Í!X ˆrÔÜa2 R—í|iºžä{™s³Ÿ‘µËˈ)kqÞ #±ñÊlëmÙWz‰>À7F÷²LŠpP¥M’:ä㸻X‡ê6}Õ¦Q£g›3?`ú«TÖ¡­œÐ©´nuý!+ë|jƒ_`u ÈÁù ¢¼2ß`>«Q[A‰Bº–óÕ O»r-®ðÇÚº]Y»•H³[»wÞ̜É%º®Ž²ÀÄÐj>}#q×rPBŠÑ4B–ݳ¸^8ØmäPŒ"j]‰[lèHs%Çš4Ó8Ñz£‰{ñ%–óGJØÁ'qÛD–už²Âœçæåþ˜qC‚Q6ïRdsŸ¸‘7Ú’vŸøðLÂ|bEØ© Ÿ˜L=Šl|bHûP¯’}b,¨Ð¶ð‰[У}âvq_vŸ¿¸­nÌ—KŒ·éniº¸Äxo7µì.1>[ÆŸ˜£FÞÊ“O †Qœœ|b=šÁâàßÎÚö°ä'>eÏR ,Fg]º=nbÂ¥olõŠfõ˜Ð¡7à­ê,®®x:fï‘å7ÊëYŒ2‚µ-×?vÙ®Ò§÷^û‘éS~‹L=åãóp`¢³Ò!©??qXÏ÷«_îÿÈçHAÊw“åqŽaè<É Rÿ.®úg‰½“ú`1«,¬Iç¬þœØ%è-#«_0ÔGÁ´þFYÉ,ÓúDûÑíÍt¸‘Ö¯Bߢ‡y1¾ÏJCy}?èJUÝLÎëÏ\c¨dýp »ÌEá’µ–ã¥o 0ËÝI1Aç&«í¨˜wÆú¡Š‰Š"œLk£¢Is›z³‹kå )·ì¼¾†‡ü„‡¼~y£Sè‘ןƒ;w–,ïy}ÊR9æõ§¸xh”×g KBzÁd}Á, i¬¹™‚7Íñø]¬y¦ Ü?éåþ|žEã"õ~µ¨RëÕüƒ]ÝV'óú&™– =¶ë‹·À²8‹{†à£"ÎÝ|žë¸·ïׯ 77L$3ø&¤}—c€'qZƒ1õد`y4-åñ‘ðÊDPs^·#õWHì¿AZ÷§?o_üìë/ß¼ýÃó‡W¯¦à‡ÿþö«ç_}xû»—ç?ø»¯~ÿöžŸÞ~ý5ÒuÏÿ5ÿêé«Ï¿ÿö›ÏO¿ÿí7ÿ nÚoøáöoÿôƒ¿û„žò +endstream endobj 47 0 obj [/ICCBased 49 0 R] endobj 39 0 obj <>stream +H‰d—ÉnÉ„ïÿSô t±öå:òÀ§1˜ƒçNØÖ óýÕÿb ‘Ìîêª\"#£ÞþñåxûíK<~ùÛ—ãöãÖ[(ýÈ«‡Ùëñí–Z cä#—úšÇÇ-çb›Gê5”Ñy’ò %‹OóÀ.=´^ŽÜCžUï{#óň¡ÕÌ“¯·ß9ííïÄã?Ÿ7½‰©ôÖûqæb,©¦úÿ¿.ª=”–ZÏ ?rȹö¸êñþíöËŸÇÛ_ãñùõøõÏã÷Ûï··/òþyÄPqŸ¥ég-Çñùþ]>$ùðãHGä_:J +32n§R¦vÕ ’Kè­àVc*Ô´bX™'ø¶Zº’Ñ+a¤>‚ƒe›BÏÜK˜«hM™a”qœ³„6œãèŽ)1ÿ§þøï¿œ'²Fžcuñ3ß:œñ‡Œ·£ây^ëéñ™ÂJ¸ìó8+î'\ ü=CN¸ýæ•É1rÒ’>©Š/ó6¯»Éò 5->£¨ˆ!³fÒ¥2̨=Z¨ä¡„´ìJ¼]G ÍèÓcR7¼k¤KÎ’ Ö6N`«J·€Å‘(ÂÀÞòA~zœ×ò<ɈÕ{/~êÀjÎí¸Á»âåUKÍNW³*ãÝɺ6ðzrŒ´ +AÇä®TD24ŽÖÃÂAyRŠ6ÃêNIZ¡òa9ÎLñî]#'RÍ»%_œîû[‚ŽK–’ +˜“_•A ܈µ6™‘®¡â3댆Ëô% iÄì<ç,2+ O4ŽY–òÛ²­4• +œ‹$° #! QdìGê·QùÅR ZœÅXÄ|ÒóQ#ä`w(?‰LgT%W­¨|„60ITû°2§CˆàI›Ì»¥µÄÜž¯qÞÔ·K…£–º¶^Å•Iªd»ª0/+ê–æÆ$›œ DglÆ6(NÎÜBH­.“~®ÆLíùj…:»h#F½WÒš!V¶Y ( ãÝËI1Ûe¥ÄòõêFl¦*:lñ!Œ1/gQB̦ÁMõYk¸K ¸LEŠW9?ßG‡@n7¨ +ñ{·6ƨf¡(x¿t¬ú¨®&—ÒÔ®==ṳ̀I.˜1—úÂ7”™-Ïâ ¢arvãMrœúP}[ÄÙ‡H§¨Ñ'8å%cQ•ù°UKýñ5ˆÌWÚ–ôy§èÀ?mGy8)*í$B= M‘Ë"ö!ãÊ--9ÙB2”_5Œ š”*ÛA›dUWDˆUØxµˆ¦â€´cb9{(0 +À®chªˆŒú+¹u(==T4k}è¢ »RÑhQ·äÚ I+LËêæP”³þ°\ØJl—­Ñ"øÒŒÐö®p±k«±–›ËX[ì@C†ˆl’7ØC¬^Ŧ٠· +%ßWžIeC“¥¤fºäJ=ó$S=ªRÄßz·Tâ6÷Òb"g¸±MÔäó˜P{Òxm)¸3¢”_žcî†ðâÜ3^O`Š8 B$3ª¬-s@¯èpk±a(²gÝ<8ÁqÒ¼1MŠÔ^zXBNTk_6îe¬n7 ršÎ›1]¼ÞkòYRBƒ‹x1³¯µ1•7‡%ѬÕ!œµßÄ”½2™Ú‘&‹)}¸Áªö„®“êÅã'(¿ÿÄ{Ð>]È é‹ã5ôï¼ü¤-i‘L‡hÞ³‚òåkÔŠR!<–X9»“G%5mWßcV’A)@ š€+‹í|{\’÷Ëþ¸‘Ka>ZMž~<ŒM òM£^-°MèÁënKdã½$ÜòÜÒhµŒU¹K6‚5¿Phœ)^PÌJ¬ „iæ¶×j&V\ÕD+{ÊžXˇHë5«ãw¹°z2o7x–¹›º†uckO“h×Åòûá&É©eᙿ$'zâñàç¡…P\!Ö1“Hªô)’I‘Gï+,æ廙Р¹=M(@Ý©¥ä`J}m3–Õ¤n${—ÜêË“¿xÓ®RãÕЈxB È»4õPΧŒuûz°E¥D‚ÆŇúž›ÐË©©hHl6ßÆRx5‡ï:ÙÄåË›dÍËàª2vi·éà@¹ÄõãÉÏÁ5m¢ëР»–àú¸Ab:äÈÖs ¨KG›j­AL½™2é›àÔ/"J˜D€g¨»&®NµPñ^†y3î4!rq+‰%¨|³Q—u†'€ÚllÉ»_&iŸbš` +ã[Ã\ÇN‰/|¬¢ºÄa”B×JÎߣF†îal9%›œqrt'Èé° Rxøí¯»õ!¤w.[½…‚ÏˬBêL•‡sÞš“f•¾§è]3‡‘Ö­gfs㮕¶2QÒˆÎlÑ%0D¬vE³Ì´ªµšƒbÍAxVÜB?âCI¾ã‰R}7ÀÎpf÷eÛJ[òNB©[FèjeV„<`»8Mõ9ÁYÒYw‡-âˆx‚)†qÜ8ØÒpkW»~øþj½ýò¤o2y~Äà[:çñd#7ºJü,º’ê:r|¾¼UW'éêªkoåæ‡UEëâ¥fðªfk‚ÿpZ/ +¹n­’‰&-Ê©±÷°UñàÞôÃÒªHG¿<™ÖÚÏoN. Qi<ù¹?K2)è–a€¾²I4ÒTYZÝ·Ôp{Ë[OƘ趸rdjFWçKf“ÔЄ´$R‡õ¸Î“sÝ ³%±½m·KnIžRRhtí7Úº€œË$eë~Y“m9W%Ù†ºR<“ôkÔ¿s€Ú‡4—åû«¤&xÆE$k+k½ºÔä³{Î)“Œ2 µ¼«zêî5÷cx”bÞéš®ÐQa¶‡õ~áôù~ãTÝ¢ 6wø5Z?Ÿü¥‚£KqpØÒðN/«ëéHNž†õÔ\VS¹â¾¦Ë‰Þ-+J¯²/LHñáÇM +”®>è]÷h¿€[‰y}|l_!¶HK˜”vÈÚ¡˜þž;JiÖòúdGøëo_~ýO€)–ñþ +endstream endobj 40 0 obj <> endobj 42 0 obj <> endobj 67 0 obj <> endobj 68 0 obj <> endobj 41 0 obj <> endobj 69 0 obj <> endobj 70 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +170.0136566 -24.0031414 -24.0031414 -170.0136566 46.3515625 162.2246094 cm +BX /Sh0 sh EX Q + +endstream endobj 71 0 obj <> endobj 66 0 obj [/ICCBased 49 0 R] endobj 35 0 obj <>stream +H‰„–ÍnG „ïóýÓj6û÷jÅÈÉâ»Ä‡•Yïä«ÞÕîHÊi—œž&Y,u÷Û}¸ûrŸÂ§_îÃö¼ÍSí!ÏËhái³Qbi3ä’¢çpÚr™±×¬•8gÃcuÄ”ZàÝY&ŽÖbn!·8SÑóÙbɼÑ-ZÓß·ßâÝýú5…¿^6ë)&+͉°çÂmž{o¿õS##G©=¹…ǧíÓ·p÷õ{ +/ßÃçoáa{Øîî òøItýõª¿ÅCxyü¡L9< ‰ Í¢…š*ºVO#ylU9æØǪ}¦83’›UŽÇS +ß]_~þ±¢ð4”tWêÈ+õ[ÊÙéÛ(¡MîËõ–q‰4o=f"†½X𘼇ÇÍ(vÔÀëtÆr¬Ã9<»¾O åy¯M=:Ì0z,ù F@Z£Ï«ñ¸í+å^ìÓ¶7lå *w¹a…{œ4õi±€ÛÅ™ë´W›ö{ŸÁ3ÔƒP#RyždN…gTH®±— Ï2m `/'>J>ŸU—ÄŽÐ%ì‰Ú +ÁÉ[\UŽhÄß©°u(³‰z­ˆŽ±ÙÕR¥4¦÷«‡ZM@rÆa9œY kWǥѷÎ1_ú0… žüÖ»l1ÓK×)ºTRçÄi£Zqëà0 [õ’I_m¸yÞGvj“ª <í—&R6æ<×ul‡õ—BZSHΧf¢ÂµOÊz›äç:ÞØ–5çKO‹3壇ž6?Þ±—¾žÝ<ï«)êÔå#ŽRó\éÓ +~¾”Uk¥­gkìÏÇŠÃqÀŽ°³•ƒƒ\IQ[­+1 Àßÿô ÈüŸ:¿Ú:Ω Fë9Ãö5!†8ÒaÅ<تICoG‡®<ïŒðR-šeýàøÀ/´[nD–©ûÿúþEe„—v÷©á$êxG> endobj 38 0 obj <> endobj 73 0 obj <> endobj 74 0 obj <> endobj 37 0 obj <> endobj 75 0 obj <> endobj 76 0 obj <>/Shading<>>>/Subtype/Form>>stream +q +0 g +/GS0 gs +170.0146332 -24.0032768 -24.0032768 -170.0146332 76.0488281 162.8457031 cm +BX /Sh0 sh EX Q + +endstream endobj 77 0 obj <> endobj 72 0 obj [/ICCBased 49 0 R] endobj 33 0 obj <>stream +H‰ìWÛŽ$5 }¯¯ÈT&¶s}Ý!!-h5|@ ؇$˜'þžsœêêšÞ!Á,¦ºœŠçØ>q¾?…‡÷§Þ}u +ËÃé1…ósH±4ó>5[Ïç_–‡oðùççå× !áO‚vL½)=æÚ[8?-üô´¬)Z®¡Å¤>-#¦dASÌ©BÅ,H‹# äËOˇ¹þé†ùOß-¾ _bAêpÙG,{0ßj´ +})%öv°>¯ë+ÍkXÝ~çÀ¶Àê+ؾ¥/cû¾÷Ò%j7õ—^‹ÀÑ+ŒQíòžãh„b ÄVwñÖï·±zôX¬Ä sM©Ðð\ÎÒÂo?bõ-üL¹ƒ9Ūm¸^×.7dz0-ùk¹}]åð>׺Êã"çY®ïéÅk¿¾NÌ8u®æFÚu?–W +J{bÝ3¢U¤€HŽÔ4æ^©üîEî#-@¡1rÌ}¨¥¼­‰dÙê.Y¬9oðKL ‰èÓRáWªÑ±;èT…W-%|*ðÈ8`µžb;c™Ea 9x\F,Õ‹'‘éÊ1ìû9»[jÅèöÅzƒgPk¿ˆ˜ êìRöïUó4Vák¦~ÆvÿÇô_ÓWNGl!âwȨ`ïêZ » [’)* ïâGÞ@tv«×¯ÉÙf™ãJ¼ t·1,dY>0&_”Rýœ—AÌñ[µ ÎIB ºÙAw8p–bÜOL¶Ël&H¥gì§Å ³n!X·&©!¶HPé΃_½÷{ìþ€^Bõ×`½jýG ~±…;),¯x(é¡B º‘2–ÎèeÞ%,$³f·¬é J6'WXSJ#—Ysï)³µÑ¡l"bE4….ùX•EŒ*I¬TÀ>ì¼UØê€U‡‡!<4½ ŒYtIÊþ(pÀ㑼QL{Þoåȼ Ù×È;8Fbæ½2鵿çÉ}I7*­êLÙq\2zòÆað‡gÃ@Bkĉ\àO3‚0U9ÊìÛ[/#H°1ðÛÐz0—b•”Ymþø™‰¦ì +@]Ȉ  äJ÷y Ð&2s‘×L¿9À-VÄÇÓ`´± ´Ñ|„]=Z›h¨:©l_‘}ÊóLqþ™û tnVICûÏ>—»ÜS +A¥¢†æ|T{Y¯[Å]Çç {àņ‰†ëB¬‡ |Èœì¡LNá+k¸ë…¯ìÕ2q´J%ÖHq—Ø8Î’†RgwEÆ“õ÷y:’>°¶¾Ed¨/ò!V—œ€~œ,º{ÏæqK©U.Þ~º¥G©8Ѥ£ ˆØž:pƒ™´õøúí@rñXo÷.¬1)p^©n.=@‚æç—4–_ž¹¿½^îdëŸÜüÞÂæñ,þúý)àçb±'ì +endstream endobj 34 0 obj <> endobj 78 0 obj [/ICCBased 49 0 R] endobj 31 0 obj <>stream +H‰ì—IŽ$7E÷q +^ÀY4ÎÜ*Õè•Zj¡$4,J¤º?ÐߌƒÓî‘R­‰Š(c¸sø´güüôã›úôÛQß}ÿ¦=Œr¦þÛøãï_?«?ŸÞ>õþUmÂgJŸÖ¥¾¾ãçÿâçß¾>þR¤ þHYO:$gY«s*E½ÿñàŸþxlV§‚×ÕtôIm¤]öjKšBÀ¨:¨÷Ç–²ÆC6jƒß¾ô؆æ0jgŠ¤cÉ{Íc„¢‹UÀ¡ßuÊîOD£3?Ñ{ñc´ ó2ÆïeVÛÊ=Çë‚°ÐodˆŠux¨—KQ_'`W‚“†¨-V$OHn‘Åþeî%é˜j‹ƒ^h(šgqâdF_œa#v:{YÚhÉ>ó<tá¬&,×l˜‡óùoÝô6؇©‹Ñ°Ò›01ä¥Ö ¶-`Ùû8­A^bli~ìÚöLò<Ù¢³­›¤€Sæ$#ã{⑦ ²¯ií–†`°yó¾s,Ãîqlëk-@ÈB<Ä-F•x(Þ¤~ ¹ÇüF«>ïO‹WãÞC‹§1z‹"\~¸#%Â9ßÆh-–1\MOÈÌU¤h.qˆf™¸åX÷¶iÓËU‹÷rF)J‰A¹‹¥µ0€\ -ɬ Dâ*냫“âbYönÜF’g €îlšÂzJ]tk!‹7¨®š~ª.êí3ìÿ©Ïoÿ»Óí˜nÇt;¦Û1ÝŽévL·cºÓî˜~|†gš ’á‡qèYËÊ퉌‚!¸ ªU#±õ(¨¥(·^*ñíø|Çú½”Ïf :Ð3ÞCM¯^¥ÊÕ‚U¿D bwÀeŸó‘§Â‚á}q L«ŠAä$Aÿ…s>r|‘Mæ’Á%ENÇy‰ÚZõ0W#$vã‚s6J‰ÁÂXùÂ9]?w_ykôZ£5“(ᤈ€¹ÇÇzš¬6:1†«½©ò\¤’<ç:¼‰XR ¯›Õ¢ê©#WÂ.˜€{ɬ(’²g›`NuÙXµÀºF,[4C-Q,mã¹Ô‰`8ŽÅÂb—X/öð^–‹+# Æúˆ^0€‡õµ$ Už?Ëi6Ý:]éô”Q°ƒ®Àf:¾-Á¡*sü™OÈ˪‹ô ž{^ØÁ£ ð¨—xé߀w$àåkðÜ!úAéélD·EùР¢S™ßŽu~ +–Žè¥g¿•:Uj-cd‹v‡³ÅÙ:üíPñ+•¶ºQa2”Vò‘½ä‡ +ä^ó»kèEUß Ç°UD"×j~3 Ý&æ1ÐTòW;º­5[‹þ¡æ¹ÙŽ’º6í·R×J=e›‡qõ:¥ì> 0w31ò‘À<Lj-öU° +`©†âŒ¿Ðøs§ü…a'fü†%UGCºøÑíX黨ÅþÚlÝ:]éôt„u°E2YÌ ³?À·‹å(6úÜDß°¦“s¨Ötåüš>§Ž®aÆïH_lôåá¶åzSésã~#ðÅÝ8Töâ9{4³w~¼e:—é)Ÿ¬ÃD0b½çÉ;¥.üÁ…=X™ /ÜAƒÏ/ÔÙnD·Ù‰†Å¤3wʼòxô±—ºuºÒé)£¢Ñ© ¯zËqqf¯ÊÄ¡œyjü5üèÜ$äŽ_üÀ#¬ôÙ†_:z„¼x„xîÒ·z„fêë¥XknaÖ€Ž‚÷xÐÅ&XÕ¾^€¸^hìr£Ym‚; èFÁ.(}B<ÜgR'1TÓ«û uÝÙ…Æ"&ÏOÀ[ªR­y•¢.Ç,9 CîäJ³8»qž“[8š…4ô @:H ¾à·Þiâ‚`^tA{í«n¡.…ª9õŸÞ¾þ/Àœq§N +endstream endobj 32 0 obj <> endobj 79 0 obj [/ICCBased 49 0 R] endobj 26 0 obj <>stream +H‰ì—MŽ7…÷u +^ )2ø¿u{0+Ûh1hŒg²[÷ü"Hf’ìªì. ´1‚ªšQ™üyŒ/øøé—õ駣~øñEÝþ¸åLý¿ñÇŸÿ¹ý[ý~ûôò٨ׯÊèH Ÿ)E|’ J}}ÅÏÿÄÏÿýzûCYeðÏ* +EûT‚²!ëhlT¯¿Ýø§ßn›ÓÙyü¹%Mɪt0YmY»ìÔtAðõ¶•ˆaÔµÁ_zÛjï 7š&©hµ³VA{ãU4:XtçœNÙrÓ âH[ïzÝSÒ®¿“Ó¾ŠNCG“$×@r2ˆ¼Q–¢ôŽ¹´Ö«L.í?{è÷wkë躵y>Y~uXgŒšLAÏEgȃ¶P›eIºX¯’6˶úE§¬•I]attNvàÏâ´)±F°P—Uñš /Ú6…Þ}pG›¿)zøaK°¡í°lk0Ç°,fÙü’õ:c†g2¯ö褷qj3q‘gbñd´ØbuÌGBØt{híaˆi Ù{èùÚÇ8ÚæöÆþÖWSžmÞ·K®c ©+RTe¨mF΋r YD¬ñ5Bš±fhsÝKdêñg‘-0‚ yŠPNÄds*chhsa¨lõˆuØ2¦‹ßæ)C.j×It«~‡¦8>CBʆŒ‹%©:ù̽ µœÌÞ¯aÉœs¡F “á=ÁwX $÷°aû¼$­H$`ŸŒ? u´-¥ögxGyÙX–¡PT˾çˆì˜Lœ»<Sê¨mº>)Á§S‰cÖðñÅ;ÕŸàÓ-™×ÛÇ{¤e/÷`†ìæ1Xþ>€ÉO„**ÚÁD™eâÜã\$N|ÞìñÈ\DìùÚ®j¦Z/yd*L²ZI0uÙ{ÑðR\{Ù%{\kNkõšÔšµd! ‚ø.m¿ÞþUíÐËgøþ§>¿ü|YŸËú\Öç²>—õ¹¬Ïe}.ëó·´>ÿ»}†ù9œŽ/z llO>œç<Ÿ—í3¦¨#ÉŒPæ’N²8ë“SÄY^rRz«¥"áü‹H~¤—5´œ‹˜n´xgª,;G9²h›µ$àýЃØ.{ž-‘â©z®¨½}ÀY›Š{=°g‘gËYÍMÞt¦+’TÅr‚ûPùÄ“6´o7xÅK®Ëõ&¿~-Љ¸$'fkwÒ¬•—"¶3Q¢qþ³x›èÆó¯ºm"œÔb/JðBC;±ôªD,E”à +]ÕÛª|õ“ aU¥åŠj‰nª«ÖDcÍX”&ÙÖ5cɸÚuÑšf]2Q¬¦ž¡¬jºÝM¯K­SµW/:TÜ=}œp¤Ý„c:åÑŽ<º•Ç2ó¸à˜VË“8úÿ·z]r=W½<_3îã(Çò€£Ÿq¤•Ç¸ðø ŽvÂ1<ÄÑÍ8úÇ´àXžÁñAv]b‰µæTŠ|³l®àÝ{0æ +cVM*#H¾ãÊb©,æ·,îVbq¥9‰ÜX¤,¦G,âÍ®Õ+fÝiíºäzG®5¿PãcMv(gPKàx×IøNÂ?‚Q:hä«_ïŽtâ%ü=3iæ1ÞÅq¦1v +Ol×%Õ‰Toò +ÖÔaìû Vwã ‰v&1‘xÇD<¼­(¾qáã{$>eº.½žu]ä¶è?ÈczH»‰š¿ ã¤ýV Ãäj&"-Hºo­^—\©`F[_?”ð™13õõõ÷Ña8m<á0HÚfØÎYE¤ótÌÞu¶®á µ‹qm÷£æ[ñÂqA‚z M¾‰|a'µZ×mÒÏVLw£Z¼ë ÉæÞÕvF›w=õb—R•Z‹Y!mj'y¬ P\|k½ ε³9Þ‰öà s1“¯Hê¸AªVk;îC¥A-Öuu®kõßVç*d¦v°b,˜ßë¿U³q=)f—\ïÈõæYY ¤3Sö4ŠÏ‘X¾™Äø‰áûÕ¬K§W,|[‹§î¾€Í³5YÖn"&ã)€ñ]Ë x?­.±NÅzcía +aŽ¼C»u«'i1öEæxp.«É¥Ž0îw¢cšíƒ_h yòQ->u†1L0ºó»ã%×¹\o¯ŽÀ“àúU¨û‡8I§D†´'"Û-¨;šDš„?wiA2Îþ¡ß„ÿ&"ÓùÝñÒë\¯‡쾓ø‘OY¾Èø á;Ö¯K¬§ª×]7Ña ß‹Åf'ìl'höiö÷YŒï°XéœÅÉu©uªVÍ®üô¢ðõ—‚(®  +endstream endobj 27 0 obj <> endobj 80 0 obj [/ICCBased 49 0 R] endobj 15 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 16 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 17 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 18 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 19 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 89 0 obj <>stream +H‰ì—IŽ$¹E÷~ +^À½Hã¼í” UKj¡4,ª´êþ€þ7#éž‘‘¥ÚˑȈ 9ã Ÿ_þòæ¾üúæÝ/xsÛï›wÑÛÿÎÿü}û›û÷öåí«wïÎE*>k-ø”˜ûþÀã?áñ?¿o¿»à<þ‚“ÔŽÞzt!×£´î¿m|ò۶ǣEüÚëBq»÷väXÝ^´õØö–ŽD»¾-C=|*Ú.GlÕµ£ÕÌvGèÅ•~ÔœÔàŒÀPbp{êGOú<—¢ÍèW¦tŒ´žûÃûæj<ª¤³‰é0:»›¡ElSœ¾]‚kíItté2›èž±úÐ×óŒíb²ùöhž£OCÁ0€†°WöÆZr>Z Á2{wÄØ]l¸që,rq!QÙt= 'è^ð娭iÌ‚sJ6†uIrø^9Ôf+º³ +± î€UzÉ—vã´X×4`›©áy² 4Ì„å¢Ýá2Û|˜$ų8$Ö£yN0 ñ·ÞÇ!úÏF›oÀ/%_:TœKc[½0¤Ol'oK +ÄÔÏÔ­BxrÄi8]_G³‹…G”ÛòöИ¹€¹/œOÄ9[“ŠG¸ñ\x6Mc%òíÕ†[ˆõ,¶¤êÖ{À2s8§˜î kˆ:ýêãq>ü‘Æ*±¢†0Ãrmv˜®û— +Ÿ¾S0\A[áCjÂkPSa¤ó$BéjÈ)š¡õÓ0üÁÇKœ·ç>GÕËÅЙUÂô 3Áé Ÿñ¬ ±‰jÊË n®}àº)Êe”e8gZ¦€ãVn8eF(¸Õ¢3M:\¯½âñ#6æÖ•×#L §%#ê™s Œ¯«óiv:¯ÔxiÇHË‚‚µfòó‚¶%Ciù4Œü—/¦»ë8;Ž‘ngÁè5KM v'<‡Àqyºÿœe´š“ƒïgì-¥5&_.4àdŠ¶£½Ñ®ÎÕ.…àâ^)W|]½ÅÜΓyŒ€ÂÊ3~=6t¶Ú\mQï°ŽÆÆÛhrÝÎ^óú÷Øþ±ýÕêãÛW>þ¹¯o¾ká] ïZx×»Þµðÿ§þkûŠjˆ¥Î»bá]±!«ë-ñ¬ˆY«$¬S0òw¹”D®Ùe|±ÉàÌMð¹J|«F­TEÏðöêÈyÕ~CÉa¨UKÂ}Öb0X2íVJz|rS![HØ$^ÈQ[ã%63ËÂcKùà#®O!T2* +Ž‹Ä#|yU4 M‘bu_X2¾ü8/~ŸŠâ†õ“°Ìå.j •½L)Ⱥ´p)&qjZ8ƒVPuc¸Ê +}ñT¤eÝ:e µ+.Ô¯Q§‰ P1CŸJðB—¬ýGaÙp¤EXšæ he•"ĥŮZ¼vóÞJL«gÑô8qoaj®¾ô®×ÿÀõÁ¿°afrê©V©½&/<…E†ò@IÅÐU?=ê åLL"GGÉЖ!˜‹{$è˜u_ßYHí‘Â€Õ ð ]¡Ð¨ù¬åµxèOfë†8¢ CÄá­ˆ0AyH,éSHiªF¢÷–¬" ´ÑßÞ§«ëVrØSÖS™^KJî¯SÖÍè£gOjûAÚ ¨ü^¤_)íUlRKRA¿ÉJ'Í*ü•VÒ…Z \º·œ‡(`BWbÉe“–ƒ˜µ¼*þR\Xàœâ²M'(3Åe2{ˆK#¸œÂÒ«Áx®°äj ,»B‰J•KY¥—þt“úœÔ³WQ.dz.´aǽæ)Ÿ±§HY}¤qS mhËé(ËLâ̺¢5|„‘ÑMÌ|®a%ò!4¡—¡dætS–Òƒé“δœŽøbnДž9«iMé +ou·Å w/ð*ÎRz[*Á¾ó§Òêfõ«WÊ +žŽ:ÙzNÏ:4© K#LAj*a(Ò0®KâUµ©T“ꚇN˜¢t¥i@Û';U +äV§P0j„–LŠJÊ„‰l¨„!HÑ&47’¹J„…ÌÂà5 ŸÉª›Õg¬æ5±PeaW¨‡`ÏÏ×D H•C½ùTyÖ¦Ñ †×{»ÜzòÒ¥O²ôY•*À`YÝ©I×…g7b¤mDeQzêÒýI˜îOÊôY˜*ÆS–îït©ÅãÒ¥u|÷שìfõVÏ©¬bÙÞ.=5?‡g^· Ë6Â4YX¦¥Õ2qårFø¶í–ú-Jµ +¸<®>iÆånÅ€ÔJwöùØVd&¼q¹û„šZ™!YiDæ®uU‡‰·*€‡˜¬Íäô¼óø˜e~½r­Öa½ð­œ¸Hf~Éâp&~e$ƒYvƒ‘"›ªâ’ô‡¬P^iêŠ8R¾h6ƒëÄ´ONŠ…i*‹äfX’‘°4•E·ÌLYà€,$MXŒÄ/CY ×{aa©ÿT?ÈZ7«±ú í‘ã[C|©\ýˆK¯Îø{')L±¦¥(š{/(diÖ{W9±Të;Ñ:S¼iÖk?E¸HV²j¦XMCV¿ˆÖý½j%®‹fÕlK²þŒº¿qý×F8†„ol áñ*n½žTq;í:0oFíðÙæL !rtªWÜo³ï–@=KA̺±oLÚT1#ª©TÅ„\¿5¹¸ñ3´£a:|"àˆM 0"°9¢ð€få©RÄ)ä°‚¤q¨#ßò~µsŠ® +p¬3ùDùÈýu%¼}ôÁ‡¨ +Êq€£¶DJˆ‰3+ššEAùlÓe  iIÖ1ê~²^x ‘bä(jÚh¬æžSo“!ÁLJAÑFÏC±+zѻֲ•Æ¶¢Ú••©ÍÑCi¥eIvÄ^#sÛ™8.FÔ?rO¯ë¦öSÔÌÛþøë›Ã×áG) +endstream endobj 90 0 obj <> endobj 91 0 obj [/ICCBased 49 0 R] endobj 87 0 obj <>stream +H‰ì—͎嶅÷÷)øâðÿgëv•³È4âdapfá×Ï9UE‰}»Ó¶—„Á´nQE~¬:<üò×÷凗à¾ûþÅ=~y—ƒþ?øç?ÿxüÝýûñååkp¯ß\ðµgüí•SÉÎ}{Åí?ãö?¿=~qÑü‹.åìÓìÓÅð\oîõçoýü8’/øqôÕÜü,ÕÍÇ1ïõî^G¾ÏîÐMkÃýt6”âžGCÅ‹Ñ ¼Ÿ ãâs,®O¹ £Ð“ëC¢àK(+x}TŸ{]á”{#ùŒÙXÐq'âA 'f0’Ó·fÃ=ëP¿òÓµ5 áë<_²èìqÅÍ·)7ñ‚0*£“Õ× @ ¾å¾¨Ù¼‹†^å…:ýìòXŒÙ\«>ź5ÄÔüÈIÞé>Ö„–îgÄz‘>bŽ˜]ÚbôÝd!VKÁœ1Ø +¸G,Ÿ8Fö[È‚ë؉ÆÕÁŠ¯Oœ-Ñ—4Ðåô½ NÇH†Tt$¿¡-­²Ìt"3[v-øš4t@È­Õ€'ºäK¬Ý÷ <„±Zjêlé9ÄX–¤ù÷ø\ÍÕ²V;¶(t,bkz{%JìQà¬û²„×ÛnÝ[ƒ&çù¶eîÙý™Øh)>b]¯'P¹²*bŒ±($FCØ+,Viã”6 ¼Òf”ÒŒŠ ¦9¥t“L+]:kš#±á§M¶mÇDØŽJ |ÅÃÏ9ÖT¥%f?[wçÛøgÊÕ÷jéF?ÊØžÁzŒ8¶^VÃõ¡«%¡ž%žÌ2¬}—.†din€‹) PœHI¤•žÏ GAÅI>dtÅ2µ +9cƇ€o"=SßBVg³’ ŽX‡91¡¼°~YuüØŠY§vÞž@ݲÎV|}ãlI3fša¹QT=8¢éµô䜩iÒ»ÈKëR‡ˆ›ÂÔôÂ:01qŸ ˜Cµ_¶DÓÖo2_f¶¾C3Éž*+M$æ»í|Í¢Õ¡…̽éô½ ÿ^?>þ¦›ÛËWìZüç¾¾üåÞÈîìÞÈîìÞÈîìÿd#û×ã+¶²àc™õÆ;~`¤r>»¶³‚äÙ¸€È¸s7‹x>‰^˜%XÐ}Ä2gìMÄÂàS#Pg@È&2¶J¦üôÈ%hfS2·!ê‚€"å¸3ÇÍ¿’ôX&Á5ºˆDÕ‰ óÔTæÒCµµAãÈ»cf='L’©‰,(Œð£ N«]åȬ§Â +ÊöF $ZÅkÞìN·Ø‡u7µßKMsïÂÙ˜¡BYÔºBÅ/Ë$ Š;¯BŒâEdM¾,{myÅ›Ô]­¢@Fî ºÈ²35-X¸cªŸ`%Ëëƒð00²SÚ\4 ƒ¿ÓM\ȱÔFC¸É¾LpˆÉMôà¢#·ÀQ\sÂÚÊéT'кVM/eK´Øöœc ;NKè*á1Œà}M«6µ•\“rŒ'7Ž»¶èNLÍ)5ÖÄ¢t•((‘YVñªLƒDbQ+NE˜e+É&ÐdPÉ‘š,ŠU¤`“RĀ̛°BÙ Ee#à.;ÒªP«Ìwrv#ûCÈÞåYL~XÖf¨°‰ïjó,Q-I–µ"«nM¥˜iå)Ç>U«NJ-©%·U'¨Ym*¶³*›lµ:Ó~«NRëºp­šÈA—ƒ“@Ã;`Æ}§ ª`Eiåxhqb· ¯¡3««,[ý8ÅnZŸÒzÎ.¸5| _¤…MiþXå쨉£’Œ4ª¼ 8š#e—GÍÉRÅQ†#ÆqgÝ–!gp¬âðT„F„SaäˆôJOE€Xk|à”ÅuVîì‘ÓÄ¡µJÑfsBÓ–ÆPé"*] +­ñó×5i[)²n8I)Vô9O7ûãMéwPú(›`S''ʶßu)% +ß` '$ŽÂIŽ9Jj:„”øâR™åÓ#Ô~À6(*‹6]³Ãä&£´flŒc!”ÎÛè ‰g8£#pú')t£y:+ÖN1땤ò鬘jÁkßžP~³?Ù…SÊw%¯N¨¹ÚÂ7:þ$㻊Ïuâ¡ŠóÇ«PMÅãyà/æÎÐ2 íRòåÔ–ªYØÅüØÕ¼žfá”óãžÿ/ƒuû `ïí +`bÂ?:òÉ0\¦ôxãJíÈ3Í–ó §/mË4w<¹†åL—kPgjàhNÏ`ìKîÉ•šc µåÌ’–åâåHŸ ©kËÚyç³»i}Jë݆XÝ%J- ßGNoƒHâ.úÉí¢—q0ÑfJsoŒC„|Ou ñÁ?vÅfTò«úUñ1–mÀSÖ°lCUݧk(Û”þ™öˆí¯ê¸½A#ÒÇ[ã é#HåRæq1µæ[ùÄAt³¡É‚ôœK¥ù<Ð/|Â(1?ù„d"^Ô!äSËE»«J¹œj(ÝÉ™’CO©ÜîPË€I‘O•ñ,.A£0ºxQ/RïJ÷Ú‹¹„¦RžÔ$LÑò®;GL3 ˜:äÛ‰–3‚˜Lñ/ªáb‡ÄEˆ9HÔ†ÞO`—2êFõ ªç¼èj2ý`ZåÄŸí\æé +ø‰ÍLZÑ,jl¦€´ddæ ªð`Š#ZݸƒäÞø‚å=Í”QÄÔxfè{;&¨ä›ê +Ô† +µâCé„+9u¡“Ùu¡]9¥OíúMësZš]úáÅáò_¯4Š +endstream endobj 88 0 obj <> endobj 92 0 obj [/ICCBased 49 0 R] endobj 85 0 obj <>stream +H‰ì—Ën7E÷ýü¦Èâ{ëq•mZäy,äŽþð½Uì‡ÆÅë` hºYÍ&‹‡UÅÛO_.îéÓ%¸/nù¶—‚ý¯üù÷åw÷ÏòtyîúꂯÒðÛZů¤âÜëÅã¿^—o.º€¿è$7_SîNdø’¸ë×…¾.kñ)gÜ®ÃWŒ³fÏç[‹—â®ËÖŽÁÉ´—RÐŒú6š‰-ñQ:{÷èÞ[Kñ£Š{yc©¹©® Ì”qmƒ–ѼpÔ=†!x×£õÉUM˜¤¤zè0U/-ª©Ws2—B6|Q|.†.ÅÖφ}Ñ»eB‰#øXiÅQ|Á zI¾g6p[|&-4¹X!-Zðšf Ê\ÖÃgƒÅ3 `°V¥¥/4ààx)&GXz@)­êK…U˜ºÝŽ+âŠÈeòJj °æÈK;(±FRcD#5ŒÛ¸^ZïÒº®˜q¤µ™'y”xÎÆŠU‹·Ó‘ d‘aÕ0Š )aNð;4SõËc+Ü05HT«×zótPAÄ›Šqð ¦nmämc¼#â€’î ”ÌuIÝ£nÌæËÂùA,5º$ë>¦|z wó© ¿ +èDØ(63Іx7 €~t/†zXäK|“r$ÄnÐ: ) Qn†ˆríʈÁ¯ˆ²õÍ §¾ARFâŒÄjÎYC…œr2l«r¢P)¼¯¨˜T«Õ`™A³Jq¡ËÆkU`Ç;ìbÈN/)4[aUål@ñ~`=¨ý7µÛhà  ?_Ƹ)ðXž^²Éâ€ËÊŽâÏ:OrÙ>X癑S4°Ìóƒè¨ë õÓ4ƒù±iþšôFa—¡€Yѵ²×Y蛩†> ý-ž*¹†ß©"^–ö¬'eU j{tVé“}^Xq×Z¿‰‡ö®æz û d·qÖ²\¾œr,·*5N!›‚PµJ¡8±­&)®Ë¦"T¯ê¹n2Bõª&Êd§$òÔu~uÖÉmת¦$vUAtSU¸©)¨an(5=c ÛÔh6•”4ÊlꉗE‰¹CNP@è¥ß °«÷XYdýòéâpù.ÀÌAG` +endstream endobj 86 0 obj <> endobj 93 0 obj [/ICCBased 49 0 R] endobj 83 0 obj <>stream +H‰|WÁ®-9 ÜŸ¯è8=±ãØÉ–‡Ä +!Ä‚¸°FóÿUå>óf '½s;Nb»ª\ùáOß®þøm\¿ûý·ëõÓk\vƽ˯òï9ïaóúñekÜ£æ5ýŽâÀý:w|žŽÝ™öLžµ.ϺWŒüãõ×ë_¯¾ýe\_?_£ÿ×âÿóº~þÂë?àõß~ýtÙ5ðÏ.Û Ôu°ÏÁä/jàhvG\onr÷wÜËìzû=ôh7æbp–Ïí×;ï“ûòÛð÷ÁZçúzÍ{åºÞ†ˆ"¯¸Ý7žÖ=ñ÷Àœ·íÛÇÔÜSÜÀ0¾.ì‹3¿£ç²{¬ãy¶ÿz½ÇûÁÂ[§ä{dKá$ó`¥‰ýNqöA¶9+ïD0oâ+ñ¼ïð>Â\üÇÖ|÷»xî÷1LôºãàÃ@ö‡i_GÏe›_ÌÒÎØóókúØ8ža½¹t~Tï0>lÉ\¼×Bx„º‹ ¬sŽÏ… }q{iÄ J°êÞ ÉBŽ…:]Œ£Ì£@óL`îè}ö>ÏÈda1Çô òÍê¼Y1faã$Ø70ŠËØO'¨' ë.E‰|qÏ9•`r¦–l·ë90Ž--‚оõ…†‡2»YcwSþŠ€* + +xÖiœèÔ²˜(@ÁEh!`¤ïë…ä,$Öqx;×é q¢_ g…Z÷ ÕGö±ñÖð6ÀÄ/ñz#9™˜¹îÃwˆ4BŽ‰u'¾È®¯×ß^~é×¼ü5A ÛyÆ=¿Ò¹sÅXªÜBµÅA[³ŸKI¾íˆ¢ŽÜ*SÁLA[YÖvƒOKaÏËÄ='N éZGÌÄÂVO6X¢_–Ï 9'±€äíãX7g)µ9­y:XžIp 9ÄY8ÌRÕ<²‰ê$(‰Ù<k ˆ&ÞVˬ²&*ÿÚ‚æzŽQÔàÆÈ(Ÿ7Œ¦ F•IˆåÒÀÛÒó¨þ]Ì´SX¶æ:áò^WÀ—›_‚¹"!ɨꤘòcw.wŒq¨ YjIÂÄù𺗢ñMÖy¦‰}ã|æ0Ù~—0a ¬½rJ¼ÒˆpzÖ”yY2 ´2­x›Äû&S€~¨Ê<Û‘>P•éOº>Í&f›è¥)¼B`¢MSqVnu†Tê@"Vª7¦èÉžMä<¯'ÊMþlH6N.v€)‚‰®åý•ÑÑàÌ5E‚ɶº0F6UȉÃø>ƒâÃôm¹KF¨Ôù¡]ä[ºòû>l+[…,éiŒÐ!4ÆÓ1‡lŽjk;NÉ\d˜VtI-&k„ä@Q·`2Rçôìc žqÌè<»2"Êç ½¡lÿ<—ZáÊžM~‚ðÖ¦ОìWh…O:RG•lJ†˜³µö½›’;…?gåÀét^µÎð§ÐQº>fZ8{¨Š7±j¤qäò§ƒƒ¨x;,j¯WË´,›5Ú0 ÓúA 2¥›¨fû][)÷οöã•PzJ{(·Z‡ÝÿëE( ±Áö\¿á¡nÓzöQsïIq-²€š®Nô¤Ï¡ÁË´¥n`Ã'|kÇŽ29M˜L·÷Þ-pˆs3Ÿ©46—sˆ )4ívÑÀµ=Û}óÃæC.=ò=ÙM7…"•®jè¶IXŽ%bÊËÑB•¦K=Ue|CR÷Ûñ§KŸ2ؾ{·aí¶Pf–#ÕWPÙ@•’/ôÐ~ ya®‘0‹_X΄r „ÅÎõÃÚ7NBlÛ­ëåqÙ zh`må‹· +<®lÌÔçµé2Ú=èã˜ڢ ‰_<Žšƒï˜ìöx²€Õf’é<—:èy.'íR Ö*1èºH9öèäD·§…P=]æ‹U°@ˆ!ž†åò)!ö<êŒVÖó4ˆ =õ’>ºŽ”\Þ÷ž. ·a¡í0嘩6æ›àK†F†æ›[òÌoKNoaÕñ€™öW*è›jèè’¶¨þû9 +t‰ÃÑêSE@RÕ»Âu t º“Å# ¦¼S1wÖùØxØ£Déái£/!ƒýh<7ÆéjCÎ_·ÐÔ)$Ú¼O…h&Y)ïÉVŠÑ mþˆæƒXA,«Û÷ÑÅ‚ÒoNœÑR\ò®ø0:<ÀçxP-¬)2ÓiZX'¿@ÈNîÑyYã¼û8˜¢6?½ËEéf I[0ÔEh¶¶=g¢FžÎ#»¿!ÛÇ÷Z0Ùô ˆý~[¼EÑÀ‚‰6q¤ïýò±+‚ë3„Õ¶¤úyG‹WCÅhrš)ëß„—;š½Cs­b6 ùø~¬G©¼ÿÔ8¯~ÙI}»‡ÝdUnY‹‘æÔÙòOjP#µÂÝ“‚nÔÑ“uyS¸n ñL#è8à©ÊÁ%€<™"^’~ M6„ÛÃý²îß3[J}öT‰…M:F‚l5W{ѱ4\ž½~ÖC6±4©ã—®˜ïbÖÇ@V [¢)7wÓ?»S:¸Ü÷ì¹X 0ösÊ !Åê«z1gÌT´6î¦Ñ½Ê;L:ZŸ -åÖ•‰#h ®Dr¸²ªT¥ÿõð‘ hhû mÿ©åi’”Þ£.Ç»:YˆAWWdÒÚòš:vG.ÒÝ` ¤_ærùŸ÷t™ü@\úíƒ,R'IØêóyäªäüî­’‚y›)qñ²Z2ÂN}G?`T´‘ý”^*vØÖŒ£^$–þ%jfŠAQõtR=ãµçõ^PØ–£ZKÛwÐ;ä_iaý0¯³ Ù7O„´Äeê²uÏK9ŸÇ |QUí¢¤Feõå:¾;JôÃJÒ¢ËnÛ]Ï Á4Î×—†Õ±–TkG œ u9›U ÍO¿Ù,©,6¶r£pJ'ÃG°Þ™$éDÈôY×ê©vß.£53èÝ<=+œßn,!¤€$Íz%âè~ 5aáùØèúP Š,ú£Ù­jÕËŸ9ãf^¬Ž+Q¡º¿KóÓn¡ ³ÐN§^ÿ¢´ˆó*;ºÜ_ˆj^Tu{-œr”ÄàXâÖ6Œæ²Ú€tó¯"Y’†2 ,Æž#ÒÿrâžbÍÁ<æÛˆ +4ŽB7gø»Ë?ä@øÃ×{~\5ê‡u¹ú Ó4piæŸM³:à¥çLµ…jÆõ¯˜Sƒ/•}›píñ¯_®—#X9M¸õXéuγJÍn§Q. aü—£WÏ)éº;Íuª@wn®m£+!XS8Æët¼@Oghö"¾-·=8¹Âß9“Y¥*èƒ.™%„Ê;=ú2ão&ú¥ þžc–ĘbØ×€Jî?Z O¢»-^6YG«\0´Ð5Ù´WóË"&#¡úƒë·üvYfRˆûrHò±Â¨ÞD€µÀ '«QŒÈDL£*\ÛøiPª)7ÎHîaBz¶ôqÁC/¶íIÓù£Ý7Ue¹ÖÁiUö°[¸ÌaüÌr§•OÎpë9“Ì—zëëvÉ8}®†lã=Þn°Fÿê²ÚxiO!°ÓPûl;Ò)åþ Çk†^ýøìë=^c…ýôþ3ñ­7®êLZfÄeQ&iYR¨å´k^1”øüj¤^܉²’y<•X+ð¼ø³Ä¶Y}}GbÛ®~z£àn·ÁZ÷™ýáÒè‡vüW‡W‰ÿñCŽtt†n]W %i·ðš;)®Ž`ÿþ•Óìy’,µö¿l¨DC÷.ÖcHF«Å—O|T7†í»éiÓjsZ¦Šÿ®ŸhWbÁ±IîöZ‰\´l._2"ý4‡óU=J·°§k©Ž;-§%_ƒ™Pºu³Ô•üÓ‡U<œ×»-îOÆR×Õ‚³ßµÅ¸ëçµÓíF‰;=Å°\â”®+EßÅäž¾Ì8Û¶Üd$ Ï͸¯¾ón­bVíº›Ê~Aš|Gêîµ'£v}ˆ%ÈÜÓ:fÿ,÷óx°Úö[Î…ÝýÞV A‹»ô Ç6ßãkxï + +ĉ•iÖ¾ø‚Ù‰™±>ýzÊGÏå|òóçéíÅêÊíëÃüƲ3ò)>ÙÕ_Í™ÁNV»sˆ=ÇQmÚà«ãe"¼–”¦[Z_®qÒ£«Åë–=b^ö×È“xê85}ÃMïõç1¦HÄ9»Óå*ˆÝ#*8$ ÿ·þÀãBfÂ,M¸ìmû¨÷ ìã=ùƒÕÌî½²üTSköK(ZºaÄWNhé*-8ÜzìvëúXþ­šj߆åB»¿îs‘ú·¡ãÉîñ+4·'DÔIK§××€¤ÂûöÔ!ĉ +ñêXˆ[^\Ñ6HŠOË/6`ít´'>")ÖâO@êÇÆãŧ]¼ò$ŠB(ûGlíÇÜíÍbªËZÛ×ñë— `1‹c”#ãóßfp9µ +úß^°»‰ ôØw²,˜ìJ:hi8úšBÍø_}¬ªÎ•f_%UGƸJµ—>u%Vvê¯'¯A Jª5Ež§ ·HÁ]÷ÜëŒI%ÇN®hJšáÿËœ x__é, Qªò|&cÖ¿qÈj%³¨Óùm[B||X̸xŽvæ µ·¢û³s¦}[蘿¯>«&Ö 0«‹Êétoå<ŠQCzäst‡ït¸œtmÎ]™>)£}äÆf-g2|¸>J¥ÂÀàâ7xK AñÝÕlº¿VŒ{îàäYsXŸ_mžkžõ è»‚G⟫uãš—ÇeÚ,ôcµ&ÓÏö|ZªËïn1ä¥úVgT‹‘ó3Ó‡)­ð½5ø6èk0 UQ§Rín†Ê3|F{s5­ÓôYõ“œ/­Ø.­04é;6×\é믱¢AœÍú{zö ãE©À5CX[Q3µÈû¡Lw—>Ù®@ãeq¬‘V=°åT@DórCÅ\IK 6°¥c’‹@Àur±€j.nDG›ò‹5uqÒ–Áêý¶ {´h³D‹þú‹µ¹Z”ô”PDŸ5gO7دé¦@;®YÐ +&EëV®hrõµó»ª%(ʤê=ñÓ¥¼Û—D‰’h‡õ6ù¼Bw’+QÆd/X¨Uµìùõ?¢+aDW‹hö¸Úƾ,Y´vxuµÏáÖ +¯.¸òÄKê€ÚL\Qa´RïÇ¢á͇·ºïbkåSHˆóc«eTpÅꢟ‚}‘BÓÎÉÎñ÷ÌÑŒ è>øß–€5§Å"vKþ¦yÛôZ`Ìå +Ÿ´²ÛX#þd¥.û¬váí¯vʵ ¬F Òbë‹I~Cʦ+lëfæp8ѽQ±Èê +ª$wjêx/œÏ±r­NmÚÖöÜ{sÎgÕ=ô°çÅ骢¨Râ峈»è1ìHG æ‹yìÏç“ïü ÛtÂhœöì uKN@­ý8Úü³ý¾^œÔ—¿ÍËšÒ ZHêb2tb>“eƒW^ -ñT³¹`¼›ñ™}ãñpÓ&<[Ø¿º‘d‚í;ÆB÷ߨ ÑÒ×–cûÙ¦ŽÃ¼‘p °Ï6ÛÊQŒÝkR%xa1ëåCï¿qÇ ¥Æ·Þ)_åˆ`&hîÌus¦jÎmŽ–iÍUê×GVTvé2¤Ñ‡zµ4#˜^õœUŠÍ §ç“Ù^ßÜÛè–n€Ÿâºãgu¤D‡ƒk=U|f6s?-Ü^ wßtn Õm¶û6ùvÐ7¸ÀuPåPWGꩺ¸Ëo{¯c +ZZõm=„,ÅP\… 8n{,t~|+àÅLlðñ-Q5gáÎÅ&C“ü¹/nsö1%¬UÔàèÀžŽpŒŽæ9U]Ž¦Y‡À]\yA â ÔÙt­ ê=ë5õ:íLGD¾æÈÀ{i{pµxõØÝÊçö|ê£=]u7êŸîFñ©: øŸ½GžÍMÒN1}Ýô ±§6õãVJ5m…¦KÕuÇ?õ­جîÐDqTYË¿“ ™fØ)8ñu§‡C’Šõµ?±ó 2?î[°ºÔ²ËJ|u¸ºÅk”§ ÅI EXD1ô!DM\ñ¸*“øëGO6Älئ + a1Ǫù¥ÝîþГRî½~˜ømÓ‡ÖˆíÓÎÇ#×&D™ µuG ź'–ÚjèÓ+Wá–,‹Õ BÝß8jj¬Ø"¼éyã$ö¿/w]’ëû½Š»;Ì÷Ö!›¡\C4†îP|ù7 ŒõwUeWežsâÊ-Žž?™3›Æ8Þç¯YÙ~YÃ.ÅWªcSø£‡ñ§p,²írW_­Âä±¥›µË9ñt&tä”|ä¡õ¸Ûmñˆ6¥³®¸Œ=µ€,uÌ¡ŒÞ0ZU-Ÿ´‰Pœ0%¶¯õh5¾BrÉØ·c–ÔöÐâÐAj½‰4kÝéד¤‘¦‘Ò"T1ù_Öòö¦Õäç˜æ­½Ö‡:Š’ٙܚVOÏdû?¾íĈè÷?$Û» ‘D+ ðí͆SNµò R¨X{<«F™^FBŽ …º¶æé~ :ñÓã™ê«W÷d°á€Øéw¿ÆU†ü—ÝÒ°94®(NHÝ™Œ´8]Š‡ƒ™‡u›RÝmZ`–wøˆºÒ“,AÚŒðÄ©=¹‚Ót=V:Øg}ňŽ×“#®;a¢)á]‘Ê:³“!`o4šNÑÛŽ±Z>N7\”ÀâÑ4÷äÎÇ.ê+ÇjÞÅUÅ1åÿìÑîwû×Ãkp ñT­åC½ïëœÑørbLå‚[LcC$Yc&>ØŸÍŽ$Çi–q!ÖLjw´Q×÷Y£{æ+@%hb`ÖÙUŒÝž/ÙVfö<í]a4b¿K¢œ¡ÒÜõF#¤ûÞw$¡ )>¹xy[˜ú¡ +xQuËJµ‰ ¡¶bMÂÛ"Èbs¼bg.áo×ᣅáu$ŒTFäg'm9–ªâN¥ÌhÜï8öô|ýþÿÇ¥¶Õæ…^3Öý&ñ'¼¨½f«  ²2¬jâe&¹€×ÃnÇÖ_²ó¸¯Ç6#no-ÜÞHqU®‘µv›Ç2<”ä“qÈ@ó{hO³£”§ngH:>l©TÝ_±DÄW¦Ð¢ŸØú¬š³úhµ»¶z0æ ¨m.¤²›|¿ºvÓ“óò½¤uYb§-õ(®b‚ÎWM¢;βVßkÎð•@nŠAïcøñ8Æ6·óû€tžá¦ÁÉ|Ñÿî$ˆ6:"Ðöòže@ÖÈæ‚r‡rrGL4¨ËàW© ­´ë¼7K\¼¢ +Úî~juອÊy$;i˜óœ×λbN™禤Í…Ö°5Ö“LVXÇ 6—]k^êãÌ祀Ž:|žèlP=ÆÂË%o›7ÑEˆÿ«Œšä ´$Q›9Ô‚çB‘­³Žk›hUPΪ=æ¸áò@ùÀBh"®-¹)XÇ«:+êÕâxô¡Ö£tIÍ16*s2”ãe8ÒÜhmµ_ùàÚ쉲D;·.;ix’îSêd9UrEÛɪ s‹j-e¿Ù|’TNbÀŒZ|7œ|3î•_,,{Ôµ%‹Û\À…²#È)A×ÓRkfVA'Žÿ£’¡à‘³ù,óµse >1¨R׆ƒb\Ku2ká xb‘Ê!êN€ £,,ÃË»8rjñÐ"©®r[±·Ã襓*4ÿD`qÐÆvBk)žæ²AÝsÏøB²cý°¨æs'jŸiœÆŽQÄ^iì˜Iv¯:&°=±ÓbðãöZLd7R±Í´ø¾t‡vHBm¢åÔ«‡’0¡i?—á&%FáH¹xAcf½H¨¡ˆ`·ØòPŸÄ´Ðë äÛ|0mgù5‡׫&&󶊅}A4ðz~_:Á“îìªp^*0Lš½BazÁp×îÛÑ€…[j–†²Ž¬oß‚&DIÆÈüïÕ0BG}T—= ÕÇÚŸu½GYB‘¢¾¶ÿAa¯g1DâÙ0©RéÅåAÒˆã›GGóµ<:úèuf9æ&FŸ”Ȩ/s <ôëKZk&²}Ç"'˜É–JOBªÓ!à×׋×c’yÑÔ Û +Ѭ‡$>g<Íà™$7üNƒÑsœ'œãVÞ,4Eoš/Ëì8‰HX Qã÷™Õ½¶àÎÒí”Ëtôaa j‹…1襫Յz¤w·v_'ã:È_y2mêðýáLÓP#š7S,NÁ»ùå#Ç—¬À;¾Ýp3n¦f5qfŽúå *ò°m‡}fO8b"BºöJ4Wu{½ÚÔi²Þpgܬ§¡2h¢Š0ý6bà™>}µ>7±ILûÏùg‡¬-÷?`‡ãnv•­¾LÔº…ü×—$l–X\ѧã¡éz–›YÐfu+&wØŠcŒ´ç cãÄõüÄLKÃ]‘ÿ¶¶·ú¢Å‘=JÔ‘££Q p÷g\îûWTùâ8ò7IQ0îÆœö¹v8Ö ÓF‹«¡º¤çÙõØ×–ÓÂ(5Ç +RÍ}›׆oa] |4Le<^¼`¶Æüè5ÚmOÀi[[©ð˜<<7°\û_Ðã—rKÐw´°v20@~ÛIb,‚85 ÝcÀÿ<µ|Âežhe‰'½ 5UeŒµ@©š;¢j?êÁæŠ ß,’xW\í+õ•°Û™.Ëõ(qò|ÕáuÄ›àÁ`}ánÕZ׃M•÷Η9Û3«åDßÇË¥büž¯>žJæPvîè‹;Ž»•þîø\¤”Œƒ|e¥5øC²(ÒYƒÉòÁîÃäý„í$Û¸Q'ó$rèI½ÅÜ$®x“­ÿ\q¤¶“=¾‰7÷hÖ¼¿¸á 6XbbU‚™Qéç¦ts_ »‚ª}l¨g8tHùF‡dkä®i·ŠìOO!2„ÿqRUËz‰ßÓ*Í8›Õ;¡~¬ÁeëÅqš>u¾ErtJ$ZúØßMkŸÉ=0u:“ üw{¯âèyQMJŒf¤Ø“:qì 9ÃT¥oÞ‰A“ÔÍa Pô/‚#°¯`ËÏ'ËU»!I’ƒš!øâÒîè®*¿ÔQD¶TïfÓIÏ^¼(O>ÕL(i»‘*„£žäRÛCšªö+¢><@f1E™Qq#ò[O‡¶gù5žžu½ÛC…Jxäj¤[®`ÀõË{ZH…àwf€”ô ?š˜õÇXõbŸ'žu=oÕ<þ­E] ÊqŸêÏÌŽ™Íƒû(ÎD¢±zIôö*ÇDîÂ{Ü^Yr«]c5ÉOÃ.áÔœslVTàJÂ@gØêÚ{©uŸ¾^&Žôºù6ê©üYš +¯[ +?b»ÛiíBUc’U>‹…™` Ø7g0¢ë 0™?”<è=5c9¡±šÛs(–àE[šìpJšït^”z!oÌ1ª¤í¯/k #–ãµEjwˆ6X…Ê1-}b¼)Ä°TR +”ÔQ釹)¹C1ïwH‰w”ùô„í¡ßkëm~hþ>ŽŒ´YÈ´, \ô¤&uj›¦IåE±g,:ºñ«K`|ºñ4覆f ži±ï\™9ý­D8Ü°(œ&UË^ÜÜLyJí†ùÕ:V¾H\é§Í;p,× R&´9žbs¤Z¬­HX¢Ÿ[+º[›„2wÔÀÎ[p¸% OŸ`5ªW.y®F‘%&m¾=#‡°€¸&p(Xºijú¨ ¦h½Î¸ÈsÄÔï`üIö½C'¼šÞ©L4¸&„pbc0e¤g›&âHn¤8'w0 Õ‡†€ NXÓéP’—ÒíWŸÅÑxWÈJÒx“EâìÑ-ñ;9ã«ÚóƒèÒp²lãŒaÖäxZA +v/imàü¼±¥!WÖ<ä¸jCÙ¬é`âãv¤+Ë•Löªúo«N6œ\kro4ºµ}i7ÅXÊÝq¶z´½£~Û(K˜ÅÖÜbÉÜÌy6uç1+­hD${røÑä‘^ç™ÆQ>6½rsßß«Pq—ƃŸ&h$PÌ+#©¹#ÉñÓ‘¶<Çä›)‘fÕ/¤æ-e£¶v›%|ºÇ]âʨÚЩÇÓ¸…à ’³ºužzø©fS‹Ôt©ÒܪŽL©\eêË»Œ.°­Ç GÍJZ@ã8uÍ߈£¨6¨’Rž¹z‘c¾žt¶Ki’ä•l“qu†N²I·.·Š¨Mö©v²Юóõ !‡_înA§Æ÷u­åÀmÕ¶ºóŸö n}Ä"¶Çéï\{…”Ë6ÅFÕE¯)b½¹ÿÒ&_ŠIAÓ(´íÈP&)Y„/ÇXŽšµÜ€C¼¢È&R±¹h¬U/ÛvŠ ]ý§ïBh´Kî°s¹iƒ&ʪ)WC6–Ì Ðòx§Ve¡‘[Ø@,B;álr=(Ü&6ö¦Š¨Î¹Õk;WÉvä"@kþ<•K82աڑ哼Ÿït,tDRÔ/|)‚. Z V=0é&*& ÏÈ·‚¦N§HaŠ@¬ucˆ†Á$~Ù§vjëkôwÎÛžfÚuW'¡¥k!²¼uÕ×[×3Ú¼áäIô&ÊfŠvÉlûKUŒgÙìúÖ +Gº0G­{Ö{ò&¿EÙ +Šÿø©C5¨Ù!ÍL©R¾•GéûkûN9Â?²³æü©jnë…žD‹þ„n{C}΋¨@²Ž¤{×Ù ü’¬½¼„ +Þ­œ^£Ž½/'BZsM3Ò ,RÆRö‹ß[¬Ê‡#õÓ{/·ûú)CÊ:ÁEYÇMž} +W ü¸­[Zéκaëõæ¬A¹Ò…¬8¯"‡8pF‘ÊÚUÊ‘Êí^•z49ü|UîGàOÅÇåŒÅýÊ~Ç…[¿>Ó‘s+ï{»ü —Uçñ<³î}[í=îymc ˆÅ•?ÿ¯•üüøßÇP^ø÷íŸ}üýͶŽuÓ˜à‰¥þ>ûãÏþÄöƒó ˆ¦Íg^Ýà'š¨Õf8”4ßè^&ÅK\ΓG<òZðÑ‘Û÷;Œ¹“¶uµ¡s1Å«üše x;Ä9•Q¥µMÐMp” ¹=S‡r•)ý,–A²†T±l-­ +^6v¶ñ’÷þ"OõLëQ'I©O<ꌚά¯²`ùŒ@—•ÁÇ’Æ Å¡—›Ï¤BlÙGFJjÌrT^Š1% Æ-Ńx¬=Úp$x¯%R0¦äXg¢ ®'ˆ7†ã“V&‡Ü̱{ æÕ³±‡‘;Ò&k*žÄ/ÒØgðÇ‘ÄDò£Ë +áè×–n“pÙ¼ë Ù»×ÃÉo)ïÉêwfOééÁêÂyŠ£·Í0É +ÁÏ Z™aïnÿGˆ¨ÜA|5zÁ£¡t>Ø(ga3Ê\§-¿fíÙõNœ[\¯J’Kªº¡Ô±ï‘ØÍsk€™¸ÒÞï7ÒÅÑ*ea„ŒŒm²œ,Ê)fé¤â“ì9•{¶j±²4­ø_oÛ_~¦ša·æ±"#eköå€3ø¼@§Gl€Ë°ð!gp?*'Ó ½S'½”_èZJLï2$ÃEJÐBĪ'ápÓÖ‚fÄ yå·tñ<ï#ä´%’]¤3´0 Àc``¼´ûžòA}«®%7„ר¶f1G¿»üëQ +ÐToM̾Shxs÷h¤øú[f¼fÓ%‰‡/’ªˆ‘=V +[Ã"PëDë]Bd@ø£·çÈ)ü>pE7ž¼üMHÆ{â£øeæúÑºÝ +‚¿L +B4°9¡MzYþ°õáçüÆ*¦ØdüãmI“æJa´Ù‹VÞ Ò†Úw³ïPãYŽw¥†ó³…v€‰å$¼¯ÞéˆF„3\›¡sK’Gò…®´(n¦§`à¬â:9\pÇt`UGf¨èQ×Ë&Ìk,RF`ø÷]¥ÅÈqÈÚ5›Û§¾cêó¯õ­júWÚèP·dààT¹²Ûo:×/Èns×D¾†Eúñ!¥0Lß_Y¥Ç¸è.éÄ‘*‡y¡‹]Oí/úZóÖ h‹ªR¯Y£ræZŽÓu=ÉXkÔ5ãÓD€@tOèdOŽÓôá[& ·¶Ð\|d¿À½^qή64N“»ßŠÛ¼"›eͽLK¿a“ÜAÖLi—ÀÞF«ÖBx\‹Md£³"' +]˜»Ó¦&Tþ‘BhÝ +ÒR"ws¿Ð¢˜Q¨ÌÁ‹61î̳¥š!²FEÊäfÖá³j“ØO1ï^s¶§p­†eAæz¿ß·„èfD ĸ±d¸¥Ìg}&¿>CØnÕ ¤áRdWd³Ð»=Tè3ÍÊÔš'+’R¶l›Dt‚Í<£3Ž7ò«Ñ­®z5|Ü”÷àX’ ú–1âVêÝ[+tãNYÒ5Ã.ïHésÍ +ùÄûF¤Uíf Oz>ùп§ŠT ÉÅVôI^ö¤ÑŠ$½íPõÏRm|Ù|¥ãͨÊåK©B:UP Ô‘ý-ZÎÇ®M£n<ÜæÅÏ:zZ9µç9Qùªsf‰üûHéXŠO.2·Œ´àŠÅQ­¤7…ÖW¨À¶Úx!u½¤àõY¢aÜϬ@Ü(ü¤+CRðì…ë©žÐW 2–OæÏ¿lWYŠe¹ý¯UäºÐ<,ÃkhðW¶Áxÿà3éUÑ6E*ž¤+…"Îpb>°Œ¢ÎèlŸ.¦J0$$ÍŒÀèùPÍ&½dFoQg…%êÃìMõ¤P{¡ßŠF©ìÃ#ã“uÔ +îÕí¬”ÁVp‰+yZ ÔIiù6 §üF±PÄâƒô¯õ$øî&ç¢I£ÂéÝÎÑ¿“ôè)ºÆijïÛ<ªâŠÚGÃ+áÞm)ŸPìR C¢±ÑsSNbOi“*Þ§§íÀ[áë:-\ãtiÏÆGnSCŸ…Ê€á†K]ÈÕ<;@£{Ÿ¥²³ýuüÜè2¨äWeBZÔàDU­Ò¤O†]å +˜Uìv>{CbšµÔֆЇ²™(©é±úc|nÛhyõÚU×劥ñ•@âŽòo~ø‘ }„v¤òëÕ¸ j€²ï +¬tÉÝ~uå*¿"?Ñœ‚Rw4ir„ÕeGµ*©øÚ½QµÝY®HÖñ"Ðp0Öt͇áñR¹£H^aؽ‹,m +óî@Ûv\)dJ÷bèºå£fs1Ç`eÅ@³#˜\­@9qûí3Ÿá*p2°GŸ5ËÙ6šg+9Ž‘ µøŸž³ÍšÏˆåˆÅõ¾E£ûŽ}ål}=µõå—Ë"‹ ZµÌ©;nnåKµøÓµ~_±hÊ¡rö•ŠNÉÀe+äÁº±S%3`Š§0{hgÚY€*’‡žQ╬q‘‘såoºu+Ká\×17%(”j×gŠé¨4ÆNýçqñ'æ҂㊅?tmà€‚{]ë,úÚåÿ–¿HÃøÚFĬ듵]7ÑÿŠÁð`mҤ͇¤ ðònÍźÞÁ6³dGÓÛ’ÕkF“ˆ…,ÎóæwiLi ‹¸÷¬1„ ;>+¦´-¡×9©£-Æ9&v³ +úþœ‰‡U k‹³½k¥â¾/Ô®C.zÕã*µ!»ÁºËSJ¶íö¸ËÒ£ÚüiÅ"k Ìœs¼o‘0м+Ÿ%‹¶° vT0Ë€¾P­ÿ.„ä8°…SM¼Ö_6!…ï¥Püೋµ•åãvFÏ>%v‡2žqc³v­ Œ·èÈF‘h·çÜ“9Ò¨´oÕÛƒäð˜?…¦çô7%–oRÃ1°>k†T%dÚ^–ÑüørèœOhH›SÍ=ÓVEkÐkE. “9dþ%±ŸÌ’ZgD¨ÀаÄ_dæ•UÖ­S=©ŒDüºøc‹ÔðÇ}_Þ~—ù³fËêÙé ÝidGJ-kÖQ<›Úµ–ê’—õ<û+eUJªG@ Ý)´ÁƒbD-^ YY·ä|*ÅÐñ¬ãeçòŒÜd5)É4ø¼è?V’ ‹ß?5Ùô³õ”2åYhd¹u´fý¥& +Û÷:²_ZpO=§î¾”Û±¦ÊyQ†#ñ"Ìfû³3RÍh£á“¸œø9C±¿¼s(IpbÑ£ñàò¥DÿÕs½åW@ìù¯kÀ)Ö´ÎÊvdè<É£,Q™ôd<.¹Ç‡ë²I ô—ïRü1Ä–lnµ}Qä¼H5z±xò¼; ¢KÆš¤+#ÞQ*ÒS*ó³ì:óGynŸú¸v…úš^ÏuS)Vsý¡ÖL ý¡(•džþÞWÈã‘K3Ò]¹V ºÔÞÙ1Zì’•â®*,ÚÜ“ÒvA"²ñÜߺ;½ÔO `ž°¤½)"ç¦M{õí «]¢¸¹ˆšB;ÍÝŒe(Âà{eÕÞŽ^ªg¥®iKæ‹œAû­;;°d ÂFN8±f™iOzj½eýIÁçIÍÅÚž„#µ¥yžýDlWÒžÓ‚î}%f4å-ûSr‚s†ƒJ, ²F@ʈUÚç±KßœšÚ2H`Jè©Z'†¿ ÙÙÎ…¤*õVòÐÏ'IwÕ‰= gðø”ëG†âiß:j™“Ò¿)ýËœ’®’SÓõìæ$ êziù’Æ5b¡3rùêÍ©&`Õ½AHJpÚWpŠŠ–"&10_XÆ3´#:ÓÇMî“Ÿ¤Xn}5üK;M±-kßM@…­6ËGÞŒ×jOªÝ•5³v:ôƒÓÙ$ÌG;žýe¾ûù¸åÃôçˆnõÇgmGmÊæ}ª·Xê?Øâ-Ÿ~6ÿR-¯ìD¹ò,Ç÷þøÇ»Iò0ÿo Š¯ÿüù¯ÿþª_ÿê$$0’Ѫ<Úâ¯ü –e+ŧ£¾È¯M¶å›¿ùËõˆ!*‚9¡nR]¢b;ß­va—ˆ‰gÞ†äRW§iúâ°K·A…K­=0ÙŸ "EÊÞÅyìÙŠLg ]+™FÒQ•Ð‡ÐÕÒj,ëòÉÛs@OãXuÓM¸˜vƒ:'ºqx5”ÌÂ0D¾4Þ,;¤9?Ö%ñojxëðìF1Û㠊˨óx£:X˜¼ükz±ñ¶F¼Æ÷<"óðiû¦>¸2çN‘‹€£!‰TªýºÙ–`Éà•‡4Ñah¸xCŽ¦ÀýÂ.Ä_®E>Fqr¹·XsgèTði +ãx$'ñ\˜>Y#¾Äl|ý®aô.`þfಘ:3¥ˆnýJéHaAÁq()ÃÎöc†ñ]ò0?¸Q½&§²r¸›óÍg“;øª +¬/ è!qr1”¯TÉÖæJJA9ï,÷-MÍSñ3è«C×Å, ÑùüÐ.ÄyOWßÍLA%Æ)ùf‰^Y#áØ?™°F +Ä·!kÉ„ áioA¨à^ì*I`÷Pg6 Ç( ´¾Åóò°·¥bPÖ9Vâ0j–|8ØømwÔ{«A¦Ä &NÝL´À\ÊÄÆq©!˜~bÈÃ| ÉŒ„õ‹ÿþýpÿ¾~}àÔ¿£ß”,ªS‚b#ÑOz»A€(5á_ Ž• L1Ä´d*öòEüßýÈhÉn%Bñ§Üånþ ˆŠBÐU„Têf‰›ºÂH3Ü"<©MíᇵL'áÒ2÷3`šê‹à Áæ ŸêH·Ø–éÐØRÏ×5fÑyÅPU+¬ŽQõËc³ÕOÏ_íÍ‹2’ +pY-£*ÇÅ¿Ÿ?^×Ô°Äü­áåS]Ó4ÛݾTBB—P²ê¶Vˬ5š©æé5¿oòÞ1sax«†›ÒX®š~pÿ©€Œås×p õÄÉ.³TI’+ˆþ÷*rÝø<,Ck(ÐW·@hÿ ;fžO¢ á~³sËÊ·ŠùÛêKæWV柪S9"H¾»×t}c2Ü¡S–ËË:³ìíµÌët“c{ÐØïS„Ì) +ÝxŠqøygŸE ¬”ÀýšÜòäi%R7±¤”Y^oíæGµR1jQö6iÜ3¢†t¬Ú¸GàÇr< Ëî kÅŸ©¶Ž³x¹Jü·,Ÿp$¼ºÐ"P÷ëßö´À7þ]NÜ<\庽Çq]qÚ}?‹=‘‘aÇ–dR™qXÝψAÇ.B¦;óPb±a¹†ð±Ü-$øLºÙµìï]iê ½}ÕRGîÏêhmÄÛ‰ýºÙaS1®ÇsH½¬¬7`8ŠÊ²>@%äÚǺQOªÿ”#èYv¾Fz +Ó.IÉq3æJ%ë‚íìØxvèïÐÞÞ9ú2öKHNŽ_|*¥MþOò“»é]0«ÂOÒû1YÀFÞ€ÅW­w‡mXNñ…PÅLF„Ò;ÔÎœâ&ãçöšy@Á›M’¿aüY+ 5\Ħå÷©×ÉÚ滽Êê·šÃ/ +l5h»$ô¹R•oÁ]ó +÷Õ†¶öúhé²®³<œºþökÒ{( cÄ.é^p¢÷¶2ò·qB9[¤ÀoJj:½zUq|Þ[OŽ„þZGµnç­ÉMKÉ‘åª=é’Ð-VõeiÚ”‘cÁåüÚÔXÕÂ˪®ÜËTh……ÊÔuíÉïøº¿“­ºàý¸Œæï›UEØô’Méû‚>„¹-f~ô.€fsëà@ôÇ{yû ¥¥Šþʸ=7ðå{=Th1ÏÙ©/Á‚ë b*-^Ø|EzýÎç]•üP)™€$³ÍQ[#L9# )ëE‹o€§ÛhnÌÌúG•¶ìëzvÂKe>|²SŸGnÓlAõ0ÂÆ:<‰W¼cÍG‰×Þqã˜âÚcÈGìêÓ`ðÏ ´¬ËÞ°MuÔáýºAÿ‰)ŒXPEðóe•SØìD@Ž s HDæøÙ¤§ÚÆ£{ æÉ óæžv2÷9b’UøÝu&òE,ñ…msG¥Ž»™9Š.ÎÌÁ4ZÒæ)QE‚£JËz»ßI¬¾ŠØžµ<^ôfûÚ𔦠+~Êj\Žhÿ¯´ýùÛßû›šQÒüßT÷ŸýúÇoÿüÔj(fÙª·.5h•yˆCþe¡´4âùJæv’ Ԅò7]/›‹ÅuâÁhŠÝwÝs0í'OÍæ¤5î‹J:Ùš‰Ÿû7º*ã„ò_[F ~8çù„gX:oAQl>d`R°§û>Ú_™™ICþÚgýÖÐoë;yRS: ÖxÍ¥èÍdX½×UäÃ*ÆP¦VX¼§ ^…¤.Fâ'.Õ-Áu='UEï¾w§r»Ó&Õ H%ìÈü@Ü«0¸:%oEÄt.¢§è+"%}|\7²r'è¬}gá%zrØ©uvuÔŒŠ k+ÖKÔû²Ñí$ ™ó,Š+À>cƒn«vmÖý>ëÙon]þuÄ…ío :KaË<8cvÝSšûÓ,äqÌQ4ø8ý»¿[GÞ²=eÅS%ÆJèËô‰.õ°”ôP§#7®¹kî§i?ñä¨Æ—n8ab"QÝ=z6槉Á¡\ÎïÖ]¢Æ¯t䜞½·…b+´QÈñØü¶ï] ̯Ð5Ѓ!bäÞf°Y;†7&­}3HË4qGLu%ƒƒ 3Õì©-™B·ÇÆx¡rGík}<§ÜÙ¿v­Õ1K¨gßȵ‹ï倿S ¶r@‘šY`UÏ?—NÔ9 nR£Œ*Ç"Wb:±4¯’jß™çˆTœÉ×~5¸x¢Ô¦+ÓIU7O³²ÍÔº¯ Œ XÔÝtO¨²ô}¯†P¾IÒØ)ˆ—Ë–G”¹i¢WЗ‹½Þ•ù«9úDzé ÷°q³%Ì|ç ü¿™2žà$Hç‘]r ·Á@¼ýúƒvûXÅ2ø–;¢}ÖZìòxšXö?¤Ú·ßGsuÐ0h'Ï×`‹ÿ8ÄW5y¿îüŽ-«¦Qpöת¢~ôfr¦ßÿrã´SxÂ$à®jcr8b¹Ã°KŸlÏMÓBŸ9›BuÊÑÈÒ4×spꆂ»>çlàQµàMòðØEŸ jz§}]âé°§j•ãÄӭa¬Ûñ°±ŒW›ƒßL/dÖdYÆûÁªÖ§° *‰¡âjÑn~tl6zÂ!yÀ¡ kâîËB5=ñžï;T=¶RŠ©ñÌm$ž¥¾7<Â</‘%;D!adóÆjûqà]ï s©øäP›O¶ü¼S¹ Fö*ÛÃñzsõÞ“,¡Šî +jNR©bÌ,q¦LO|/,£¯'ë=/Ϭ­½õ½%×}gºPËŽ{ÚiììÐî{aŽ5Å ^õÅ%Ÿ\'"š“—î>¦e©Ž®}ãñ&oÎi/he5S^Éìå5Ð,Š—…O³!"6ô¶àrÞ@©Ð”‡©…©­Ój™o ÿ®N÷%¿˜‘5Ñ®/Dt™áQs­NÓjßHZAmX#ýë5@8R6WdoÍ3pf à×Û¼ é‹dè}”MäŲ¡“4ŠÁÜR¢ ºO^[d‡0‰$ëO€‰è›>VìÂÈHEŽ¯L>‚ŸCÇÁ—¾ øeÌûúß^vcUµ¯¨‘RÕ?`2´(D%ù;1©-ÐDºóTb;³BwºêÖeÔ,=Ÿæ“ˆ¡% +o’ÚXG8¿šG~ö#¹‹r+æˆgU?/«Ö"㎭†¾?Ì¡› ÏL­Ê[2˜Åª†zZ–)4‡Oh1ö-ž.aR‰râ?—Z•I«è®ã˜ÆAƒÜŠž¬–œ°vˆ¡@?5ÃdßõïBëƬæ”Õ£ï‡jÝ=ÝhÍ7̺Õõx¯Tc> €åÓé±ßò™ý8¦¬à¢ù QN€^ãÉ6<<$%Q°R.c­f”7'àŸIhæß©Ñû¡Ù2:*à«Ì5°ÊÜ…þô$˜süâ—9zÀ·ÚZ! îCãrÞ“ñ8aìñž,J¾h±>xÜ,¼¶ Ù{¦¦zÒ™í×gÄÖ°J Ljè÷{á~{ò<¸Ñql‡¢¸¿ßÇÇ“¬á AÅŸ-o¾9|¶ƒ\ œ¤@„®n)©Mßl*äá X†ÂIî$92cgµr‰"@|Ù7Îô•¥º°´ÏÌJ°sš*7¶ i%ŒÕÉôq >¥#–þ‘(ÛÓ¶ÍBx<„€¬³¿h¤yÜ’4{î^¨ŒD¥Ÿb¿îýX*[­_#…Ä—1 6 +¯¯ö3U#Õ +ÚÍ“S™3 –+7>¾B¢åYÖÉX¨4Æ55ÝŽÔÛŒåu³>àn!ðK¾‚™±/ ö$YõщŽ\1xÔDñeh¨;ïŒéƒ†y"Œ„N6 Z1Ê5zÝô²$B1Õù(kC#Ýb$„³#8mÂÔåTwÒ®ûud)e[']ô>˜>%Zï¬7vóiÜ}ÓŒç¾Ì´léѸdŠø|dô|\SZ¶œ\ +lˆŒ¶îÙÔoá=óF‘òÆ*è)Q}Ž§n]Û㢴aÿ¦¬Ì{rÒ81SõÌŠÖbrFËïõìäãfE15–±Ä%ä¾z~/ëc‹, xR³ç¦yúƒx„Õ,4Þ×'W·Ü˜³{^lYóOümù©AÝ /DTœƒKQ¡~Wf[…E„¹ÿ•¢ÅRkÀÀW£‰;¢<ôÈ@á­Ïîj膃ë`(±ÀØÉÂqЙ.YØë f9˜; µ€‡¡f/°©S¨ÔX›r­ë‘Ÿ*ºlóŒÏóåf ®Tü4œjÐ`óµªn_m3š'½F…/­Ægê·Øùì2»ÕûȾàÊ* qýîñ¨ýÚQõ„“ +þyGXTM'%ðvE™4ÿ~š\(vX]ä;òaì—úGØ ‰Tú¤ C ‚Óç6³U KÒäÃÞÍñ[ðl oÏÄ3›ÖþÖLˇÉ0zl–Åu72;·=’ ^ í‡¡…þá“ýƒ,Qòøpàø³qG•åŽ²"‚ð ôbv7Ó3’J6lŠX””VI×›ºå2†Ï–YêÒÄÉ‘xÓR ò¿JÖ—±}íqϱ‰‘ÞmÊZoãKÝ5™‹”ä^Ü„ko{…hëà<Ù/ÏÛ£˜7ògÅ ÔsŸý 4¯˜#‘x{p2¯¹èŽö £® U‡û˜ ë™J­?Z<ºª‰vÚÒ¬ï# ¡ÍI%½ËÚ£ÊO#BlÄ*ªH˜êÅ„Õl’(ƒÞÔ?¥‚ +“Js{h¡«Æ­˜¤Ø6Šê43úû7¼!XÔŒÀÛ´ÿ„·Ø2¢ÍRuãúG3v$ €­ß#d°lZa™oG'DŠ"ö„ku³,F7h„—Õz&R‹ÖÖÛŠ gêÍêt;ùêGvØ‘šFxîŠBp7·¿EôŠ.îÇ1™^>=ÂÖb©ïÈ¡,8AZíWnb“À§,¦çGüÏ€êÕ£µ ·¶þµa5ãÍN¤¼;Æ¡Ÿ­Ñ\/5£!EÿD;NÅM|¶};Ýc7pâUÊÍDhl Åæ²r½hFŒÆöH¡ÑFZ¡¹SD(‚Ÿ–/OÆ|ÚE¾¨¢•V=ÖÂÖWuû»¿ÿ”E~™Þì=%¾ÔV&%”gCßÞä€n{w©MMLI„2PôÒ«6ALðà˜ª•]7(lMë–Ö^Þ\+=ØþÈ8FíÖl6Ë“äcgùÜáÂ>ž‡ ý½Ívdd5Û`lDcUÐeÛlÔVhajº ,áöa”¬æBn4!®2[+%/ßpauV¤yìq +ûxý?í\ÔøÖZ:…»ÔxÚ@ÒÞ“[0ê8 +O6wÇssê±þÈÞì¦Ødå+¨±ý9AÊáŃ©ÐƒöìÉÎòv¬#&¤­°÷·|YwëA~_;Ûîp¿åã¼£XEðàz÷½î }ð÷-"«ó묞œ”Ãf£tÞ­f£´ìí3Zé%œ>J¸Máz'?ïçì½ßÞÉ u áy 0k˜Éÿ=b+f–rX0®=&ˆQâÐ0Žû¤FaT½“*Ï4A¤V9°.>Ò$?">±C‘ eNóù5w';nJ0^²õEh V«¦0ÞP„ðk˜ZÜí63I +ëÁB®^?™#K¶{žc.#©Ü[:Ø·žH˜@o”¨®ò¡ø¿/³ÔL—#ˆ¾kÚ€LÍÃ2¼ŸúŒ÷ŽQj®±1~iuýßT•~pŒ„WI£J˜Ã‰CBo³Áè¾Ðzv4j¢¨3&#Ç”áîx`¸â¼ÐÖÖV‰'Q—m:âÚlç•ë9Xþn¨~w† pÔ‹VczXmÓìKªfö“ÆzXÑFNPÄ‚¹ß›×©n}Öj[ûz¶Pæò­Ç +¡uGPÏÉ\Uy÷–lÁÔ+xâ{ókÅ3-Ðdeh¶Çª½UaQXô•Kk<Éõ~Ñ´}=6=Z¬ÆÊkqš^ûMû}´V§Æb5Ó@OÚÅrI# ~¶»mæ»­«=–ï]¶gšÀÅÕcþص»ß°OÝÖ­¹kÛE‚¦C>VÌÔ3ák&Uœ>²#²Ï属fJ$}òd}~¬á¦M¨\íe=¶m¬jV%d´0÷Ñ×µ:ÇEmþ®Ý·®§ ˜Xý»r+Åž±À¬¬²ZŸ¬ÇäêO>Ob7½jlw»Ó–X• n{Ö£­Ü`NŽ;'äÈúÙc,+QÅ]LSY^:%)nkn½Úñ’…µ­SgŠ2£­ý¾’rS¹úß’6g}GëTDNö§½ý6ZX¼D»bKäõ¡×%hÆèÙÿÕgûªWíÇc¬‘õ´™p{‰“Њÿ÷hÎÔwöØ…W9\£ÎpoUO4rÃáó…Õ62Óý'îÎN;Ê߀‡¼„c›^d“E¢|i¶lWì::ÉÀÌrT§8vÍ£tÞH¯ù.ÒjǽwW½iê¶KâK=tQ@Ò]+Ž¹ØÄ^úÖmkö·^tiÙÕÄk°ïíï’Y +žþ\a{ÖaS—ì5ÇoKg#>íÉnf*†íڸᦓbFÔ W^]Í€"§zM5ÍAè ã«I˜¯XÒ?éÒªóäÞYªsÚ<¼&·£°ï¿}üõ×q?‹c„Û>?ÿùý÷|†÷¤ÜÑ+÷Åcª|på‡ÚÝÍ;뎄Öã.#o8QWrØà*fËìО-Žž;úe²áwPM去Áñվ泗.ô ‰Ê;Vþb<‘øC½¼ÏöF-»Û5éu€»ÀN¥\Õ5ìÒJÜÞÂ]Û% Të:jPj;ïêΞØåÓ韵ÆXnúòéHkŠÞÍo@=ƒº{ê-õÆ£¸ÕvÜ“(r‘IÑÉÁXŠ9ø»ûZ„æõ0±N4G,Û"©GR&ibUC_Ž3jUX²U7ò¼*1åF 0úšÇVÇ2BGfC`<®mx+ÀeþœÎ4Àh€V¼,þ +Th½Î~ìw×ï"$´ 'Pž¡–ç¯0 Ànö¢53NKï$ßëç¿0&Ao€Ñ‹{Ýñ{ mI© &í%‡:âïý”àŠ%—)žñpÛmÚØo}‡ib„Ço\–t±´a¤],¡ÉªÜløÙ4ÅÈ¡cSÉ ;V}Å×]— a•Â•Wx>­F&Ç3ªUm¦hON·^¹¼‰B‡îÄzk-A¨bG@øÅjK3­ÚYgŠÇŠ:ôƒy[û>áa¿Ë´iÝQkô¥FQ÷q(…²ÛøA»L’ÊNôð•ò6”ñ[%­¿à€‡¨T¢gMÙÕáB£¸Žuì]¤˜ä¬H*`֠ݦÕwåÒÑÐ4kÁ™M^tEo°MŽ§>·$æè}>š9z¦·“ôæÞQKÜyÛU]uÁ½kuPTÚìC¦ö®ŸñHé¨z#›Ò;Bªë½ýÄÊyÌÉd&&vÄiqPôq/×KyNô”ćʳ¡ð8ûв!Gº„Ls—*mÍo«‘–ÒÍ oÂÄK3Ó` £c‚©û¾aÙš£'G”[ÿ1i¿þ_ƒ«AiÚƒ¨RhÒU¸Ÿ7hÆ1 dð¦´4¶Àè°ÀÝô³ã;kÈ—¾Õ)‰õY/Mêwž8¡ÙW­×_žaP57XÙî¶à¸ä^¨˜Z¶”ýtâë{ç•8 θDAM¦_æ…6ëËÆ·:¨Š5£ãËDRÙ3r2×z¸§H»ÐŠ €öC¯ðJÛ÷ÏâéçÚvU•ËP·cyýþÀß:jãYòêmwÙ€êN|YÿoîvEDõj|Ìì][\[Ž¨+.Q×Ò>çÛãYúþ_ÞU(#Ù¨²s«ÃJ‘N^5΀0pœèÇíz’!¯Éô*™#Ì +¯ûQDg[P‚­g›•þX]iË1¼¸KçHÄÄ)-'`Á¾-&ÜŠ™U¦˜X­û8^__ ¸qZÙ#áºsëž¾8†/žëÅ 4¿5©u]^._$Cm[]-FþßßÓ »+°¢ŠÛÐâôíE{&¨uoíÅ5æ24ÂL13Ýð–ÖÃH·èÕaïçÞˆ8ï1ïßG›¯^Óºð"ñ­Bòñk \øÖó*io琉G‡› „¶ÛËêºÈç¸2*Õ›µЪÍfÝ^õs¼z·æšó‰;ýª¦iE«hö§¹íòå^ZÕëý”¼ö˜ä÷i嵃¸#›UY‘IFÙÌ¢¸Rð˜Ƕgþ„Ñê\PHüò¿˜.w¤)bçœâ¿U–üŽ)BNAÊýcúky)¢]ïÌzX#°0u-‚–¬(èã´ÊóÐ~†¯>BßÍûŒ’¬€V³¿{IHÚ.q¨Õ­U÷¾û•@ÓÈ6F¿sLBìc>ìûü> bDä­–É«UQ ž’õôÕ¨§Ì¢ ë?ŽÇOË•uRƒ­\ٗӪ׮*Ëé³gñ\dzõ±õ^ãQé[úÚoÓŠsç^®Ç‡t‡KifN]ÊSTŽl°òËÁ“Æv«d$ûX™åGÃÛ´QüÜàgU ê +$!I@N¨Ìe8¤Ÿ#É0ɼÇCJû—‹BÚm?ãºmµ.(‘Î_;±ÍXZ¬Ê® +Ä!~^<{ÿ™ˆWÉo {Ž†6áM: ¦LDzyB,WÐè=m9¦ %êHÄÓ) =³—Ë΢ïßßÒ“öoOsd¸ >5ÒÇ°/ãƒ9ŸE³çV|=¦IpÇܹçCظÊx¤(Ò€¥ÒÈaÆië#’—–¢×¨±F(®©›³L¡øŽƒ¶öœÐ¸„mª¹xzés«®½ŽjR7/ŒüŽ4„è$>à–DüÊ -ü +Žá«ü<ÖS•,#ô})'l7-09bâĹ jÛ¼©íKz—ɼèÏ"/?ŒrðA’½ªìY<šL¤£Òîh†Žª‘Õ„èH[ÏòçÚ§–1Ò‘­mCÄ[“#–ôÎ`_”ÀøÄu›dä 8¼mf³nÂétJˆè&f±óƒp~1ŸŽMÇAËÎಖՆS\±ù1±í”ÙF홧k€æ¶å ¿¡îöæ"ŸYîæ8LeKW£ òÒ¶ šíúÞ\ú›Îäì䶣H{’îÐhîÓÅ®GƒhðûÛòÐ;Á$ïL)Ò)}Ÿ­^hÛãC:»2Žª’¾iqoóxŽ¡I½»:ta… „¢¦Q§ëá^\O]ñ‹õ–¸ø$=îñ诹^,2;˜½—kÙ;åéž %9Ê8Ÿ”Ú6çùÕÅn×J›Ã"–¥c;/ºM€‰UCe'³vÊíLÇhmÆ3àâ¨éøxþ8TüüõãKù/Ûà +endstream endobj 84 0 obj <> endobj 94 0 obj [/ICCBased 49 0 R] endobj 81 0 obj <>stream +H‰ŒWÍŠ&É ¼OQ/P5))•?WÁ'c–=ì4Ø>ô–ypD(¿ÙÁxaièîªÊ¥Šüò¯×—¿m×_þúõzýöj—·ñ¬™×¯øßÚzvï×çËú~–­ËŽçhüºŸ=â<9ÆÆæ“¥=ÖóòÕž¡Ùÿ~ýrýçõåëÏíúøv5|Ýø=ÆÄïµüº¾}àóßðù_ß^¿]v5üØåßî¶/ëñô‰ >UClw>½ÃYvÝfg\ñŒ=ð4 ¿ú“c\¯ÛãÂèˆëv›&¶î×ý™$ŸÆq½=óÖÜ×ÝÇc¹°æÂ’8Q8Oï>94Ç“îˆ>ùu`û…í »Œ|¢q…'òëûéïžO"-÷Ä©f{vð±?Ïß9|ŽÇƒ§Z8§gó”îOK×s"i·'Xg†-,å(Ò¨%‡aÉ@ôƆ4#¢@X¡B2nÞë`Œã:ξñw´§1“}=­)‡¹ë¨x€Á§ÞlF‰7³œµ6Ò¨ô®1SéómšåÏâ4êEW‚¹s×*‰ZeÅÒq¦Úifźþ{ÄÓr`c‹ zÎïùžÏt„þ„ +²‘¸®ô4zŽ½•@¡Ò1Y¤8bk„w·a†¶Dâ8Ór”–3ðg.^0(ÔâFR˜p„¼T_ÿ|ýô²‹?âì\å ëŽ\‚¿s•2À | &O@¶¾•>@pÍŠ3AÈ™"¤wß/èk8Ôf>nÊx5Zž”͉DŽÝG¬²ˆ +|ι@<°Ú±Y¸4Y¥¹˜ Ç'v  +¢º¸„T¸çÉUèIHÍý g +!P®Õ²¹Ž1Å^¥t{eÏË{­ç™0ú,trÂá^å® ƒ˜ Õò‘ô¥!w2IO¤è jTcÆ¡ÃhÅK_v˜ÚyæÄao¾´M/î†Hg8 kÈœóMÌUû°Z|Á%ó:¶EUdiX…Öâ·‘DÅ©?F´cŒq, +ÀnÁŠ:€qJŒIžMÅùúÀÐIe¦šŸ7S ¸ŒYzÈÓ(çYÃ¥·X· +L˜’ÊQ† _Xd‰kÊÒ’ûˆœq¢ k-”ð!Š!tµ£¨âÈטTsl¦Ñì#‹­¢Å†± òXª©#4œ«t'T»C„ ‰%ñÕ(^@íäL/Ø ~â™äb”ì&Ô!/4£Ê:V.¹B.I Ð_eA° ƒ´ïܾGÇäÒ#¶Ä_«Mí¨¹%¡HM¨vIíb8—]0‘_~œm†Ðm¾õLýü áÏs©V’D<º‹>ì!\.<ůUDG¯ÓØ}ÀÍý%ÛÎÅBŠQ*-XcR ¸O@‹=ÏJ€0ˆpá iLØÿsÌ(@‹°’`–w¼û!Zˆ8ŽÓHØ¡×Å$/ŨbÑìÊ"Ø Sr‹_˜ÌnšªDU8ÇGT‹(H•ÈѤÄZóòdd Ì–éê[>ûÅ6«¤‚ÑéW…`³ñ ŒCÊÙ«µ  .ÁW²jO•%ŠM{¹@6û:}L2H¸•Ð ˆv9.R{)ÏÀä>ÒCjiŒyì:¸¥Åä¤2!EVZE€µYkW}§œ›•†M¶Ù%®³ýÖŒÖ]ÞŽýKÎVÝb&êõCjòÆÄDW-ÿвìÄì!j6æ;i_äPÊMäªVEàè¥r‹ŠÂÌÍ~lMðM²Óæá’ĉöÈâèÞfçB†iBë çóM®ø? ¬~û~ù‡Þ«°Ù{íø±õ¯IsÀ&L“Á¶r[ˆ»tBŸáˆ +‚@$i?äfBà§,:j…ŽJŽE‡+! EóFhBUÜà’Ñ'—Æ¢Xþ 'ÓÐÀÄ\*@«CœÓÊÝ%û½SFQ;J=LD®ƒËç°Rî2àSb5ÞÔ“¤©=ÚË_u)åö<ªçÉÈ;¥ ì+E•¼â§ëMgËaT–ep³tqgá Ö>ò«ö œp¤š£`Œ¼I¨ñ¦,úGuUº!Focj4óíšI‹$ïS«),¨ —¾KàŽZѬmöÎt§9!›%`]–SZ«Œ"JΰÙô™C”PÌN¦V +ä¿Œ,·@{;1w¨8ÈI-§¯Åàõvø)/LÇœ§B†AiÔF°ï–ý +á£(ïŽ÷ÆsÚ¹ú90úVò×BkÜ ÎÕ l±ºá±Ðìõöv8Œhs¹t£ íú–ò 1Ø® +ê øÓÚ,f¬¬aéÂS׉´ºÄŒ(:dz›Üݧ2ŸJXBb.‹KCºvµn¹½õ¢4Ç£" Ï‘õvú¾×±tÝýŠÝÔ˜]ÔD×Æ îFjfÓê>Ñ:q‰$Mu:ÇHÈH«¢ôÅV·ØâÙfjÑáu›6»7+Æ.u]Œ(T½î:‡9T×Å°;Í h##RÓÅij 1|ˆáÂn~(·Ôz?ôÙ"T°+U3kj l y¬Zuú%Ç ˜û8’îqîÚ 1´¨¦gÕ¦Ïs¡j”œ±½í4sÀ&Ò«C ¬]:°Fi=qq—wËOu&÷ÓKžÕ¡.4Ii÷ ót!MÔÆ!ª{Ï}ˆ.I„" );q݇jʱɺè©W9`3Më³KT†”†EWÔóûmÊt&wƒëhÏ£RɆ~  mëèþÈ(:0Ò’päý`§£e¾ƒ¢ÜÚmï E"Ù“PFÄÔ~ãŸ!îXåÓy‹„Z"p:ìÁ^Í$×d´—Ds—Áá3t/Çó°Øôàıƀ“þo©¯"ôiòæ*P¾eÍúEBکƬçAèÐïD=ëv³¢™éFzS"÷uDšêè†Æk;¦íROgýx®”¿U*¼¦W§Í(=´^U¦àeÓ”PÞt0¹srPÔ5\Ê"k›JZŒj°´£.¢ýt/aîKêÉ D‘jóæègÁt™€h¡ëp:9",pU÷–,¿–Õ/ë2D‹'·•Š©Û»aú•)$&ïQ¡-2äE \Í /ž^ÊàéÇÍ*»œ‰­Îuu”þÄÊÓjYêÅVÝx°o‘=¾«ÍªFÁÜQÈ°¦zT±g™ˆMµ5§ᑽ‡ŒÃ@…‰ f‰±\ ¯#ã*7*€.•à„¨üœšIŽ}$¨Ó(Ù–^s$d'´²îuæ§"œ²ºØaKÔ3Ôµ½cdJâŠrêÚ†©‹*òŽ‚ÚÑà rêWÔ”Ò-9奫,„¥€²»ú—¬“²j».AÀMˆ ¼Eþ/ñþ¤ÞÄ5Pçôl +¿7[ºr^±œ)³¦ÔUªtOK6^ö_ÆËË®‰¡¾V‘ça=r³÷ï6.À/Õ©vÚ’øó |Áˆ à‘pèBÕr{nu_£õÍ£ËCbØ$tg±¡éFÑ—…wÛƒê©0šóX$÷ØÁè:ËvŸŽ­ü›Äei l­/@%«™Ê'Ùåžô ù/‰wœ(ç)He|Ôek¯µýMûÌÐXëb©W Å ç‘ù|óÒ³lÑcéж‹IT[ݧƒ¯ê÷Ù2;Ñù¤·dD $¬§Å[å˜^FµðÀ×µ,ÌŒ–iùT3ÑVd¨îÃÂÜqj†i[i¤ù3¶»g:ÏGã·;©¡‚e½Ú Ù ðLÒ:ïèš…¢Ù-ûP]ÀVu]Â9…n!À4ÛÛð¨†è©D‰_€‰óS€Ï'åø#°g//ÖÝ|C‚|à®%vé>W‹‚Ñ=›¨>A§Ò×í¦Õnl»c…í@–—µŽ÷íüqÄ5Õr[i½} D/áANp¸ktÒ7œß6fÅÜž6fiÖˆö´cà:ÀŠ¾ PÙ^Çì÷¤Ì늹·™­í%Éq-ãtÙ$¡bï|bÅOƒÄ#çÚÜWÕ £¯>G~<qÒQmݯ‘N¹ŽBÅnÅä·Å² ý±š|s_%ñÅ»RÜܨ—élM ŒÊjÏÅ“¯¡óÓk¯WG_ Æ4aº°­$>StHeÿÙäªJ[ej.$øKKmIõD‡lZ¦‘[cäA’¦ÊÝåíbñ`{àÙ<+Ýñ ÍÓ-õíº´ J{ûæ6…ÉÈXip½§oOwês|¸àqÒÓ¯ÁS|Œ¢"Ç¢­-'ŸœÞíƒyBöÚÖVð4T×±‘üißéÜÅPžô¦–—1PõÞ¼>A'‰#×Û ƒN¨#K¿±n–Ðã7^FM_]hLok*ÈF°ub4dZ|=5pr¿Ÿë>Rú‚š¿óeŒL Ë+>þ‘³?“M2Ñ܉ŠZà­nì‚£ÑÄ'zÍ‘Il‰kcÍGò±s=ÆÝ“+nÉÚì’Ñ—¹rX"! ýöTÝx§]ÓX5ŽM¿Ôc¿<þ¨žk4{çq7!‹ÈødfœÇM*µÞ;j ÑøÖü2VP¼ zÕðÕ~ÌX8kÀ”d£ŸÈáغêø1j0p=Ã6ïytÄ^­ x8¨8cDkÍ íé®Ù?TÚÁºÆTv[Â)ÖzOùÏMF*˜*&`=q~ý1GLÜÝý‰uq$ئëó ÷$Z߬‡4LFÁj£›u…c‚°êiÔìÌü‰…µkîÁ*²‚!‰«Ë –¬X@Æ7•Ú´Ñ‰}'ä–õ½ñöå´=OŠ5DÓ1.`±•\ž =Œ¢Pƒ UNSjãv2Âc3K¢¨év.¨¦F¢‰u¤&'hö¬;‰t3;Ó›KdJ}¤é=´øÑÖÚí(4þî?.*EkÐجêcì-.ͯîõùkà4ñ‰í9¦…|5‹^Ï95 o¸A#°âÆu’7H†Ã(û£+íãûx‰0a—Cº¶Ü`ópDë¡H“ÁGé înL{V$ m÷™»4â²K )HS‡âŽ“87R‚ns`ÒYÙ#iByß4“Uã­Úª~©Œö \ë2O—ð{8ÞµcFG<ý+èknD­‘øåž°ìTTÜ®£W§cJðð).Èð* ‡/‹ââ Ãw»û'AÕÜžíÁtÚêx/€l Vš•}?&[§¦†@€®ÆÊ-#xÍ }Œ÷Qª\¼–y+š¾ n˜W{ƒe‡›‰Þi|wåb'ë xÖnTÝŸpá†qÖtìhŽ'$Ô·íeH´¥³Žá¸’ˆœÔ/dlI6”|ÙiÎpÞó±R„ k:Œù rîàºìÀ´•X\ÓØ>K;B>hÜðWp\zžpð—銋øß'†±¶ÿ¸±WoX‰„”ñyö3Ògç˜Òo[ñVÞ>Òjƒ}êvÝŒ³ç.ýåLë‡^“WîÓD´0q¤­÷ÂíćÏ$8k5…ÁËö¬ÁtÄÂ*îPÔâÁûz±i|E™Û‹U÷ã™9 Å/žøC±zÖsš‘ìãñnÖ£éä€"Ä¡ü„¿mC‹ãK±›,Ž©ÿ²¤Ê02RÚž´ Qä¯'Õ aI'u[Lé¥ùÇŸðôk„ÏÀƒH&Á<¦T­Y'›zÐ n mÝU†‰ËÔã¡Æ¦Ø Ùˆt8 º=`’¾h9 +Ï0—R#eÇ„ž©Òv_oÝ›EfËiW4áüz_MzEïñ0û‹wlÁÇeÀoÝdœ_õù–Jä,Û©ø|h«Û 1š½ógOšDJÉ78èÓì8t~VZ¼³Þ[­9z_ûR)Žk?÷ìžáj“I-¬fä͘Œk·AŸ˜Úºs%Bÿ ¸;W…Íõ­'p2 #)±¸û›‰xNÍúYaÆÞ×{ØGò†ŸÈÉ­Gõ½ÓG¨é¼n}‘¨ÿ±©'TwÆpOïéycAD¿I|Û½˜¬Ë®ÄõËÅ©ÈãÉUs&ù +Ín{)of½ó8£„ŸõsßeÅÞä÷Gxt¿VŒŒe„bâ´§è¦Ôâú‹uÞâ“ÄÂ*ßp^ç«â@›‰ŸÓÜþ™ S-)"-£׊ÏæÇÅgÖçIxæúªÓoDžÔ%:ØŽ:³«£¾°_·õVcÉ\¸ã§>Kó·[g\¬ÜˆRu'8ìšåõ¶æ9éQv•¤‘ôâ…AÕ‹(}Óì;ŽÁ-J½ŠãÄOꮫJœz çÙ³/´Ò”$1áµæ¬tv¾4~¬|« 왦kÚL;]§ù—i¤,Æ¿.“!·•îCU¬xÔôk‹ål¬ÕÂóy›vL”Ú?H6®ÛhñŸ\ ý´2ŒËz§ój¾2m«36¨Î2ÛðÈx=¬6ß½Ž¤KeªWÌôj‚SKˆ}]ÑBµ®1Œ×¹žkÕ´ÚÇ̓ÅÛ'Nƒ$ðe\í ø¢³jµ˜*î¡~!ù5V××JàÝÅ|V›z%Øo 'ª6'Úüþ…ƒ·ôu޶λZ¿.R­g¬åi*÷ƒ„»J1‰›+’ •ç{WFÝ +ñíö^÷ñ¨ECáçc¶_<2úµ¿Ðøn8}¿Pto~™ø@ ²ý‚í ÁWû³Ø›Ú×ãVŒH}!y>aœˆE-1+#Ö„ê^ÿBüN]Aå|×’‚­ídëtæcc5á +s&ðΑ7Úah}cØEðj $÷<t¬“ZÆ‹jóÖjêàÏ¡¼ ¤•p÷@ÎH{Üé¯ùð£#FËgÅý‡2^™4n&£S%üº79¬(G nN¶Ú]s4PvnÇ;«xnÀÞðƒeUêÌíqÎú·kcõùc5 a€^?¥;ÿvP©¨CKœ‚ÐÁ4ÚÄl¼‘踢]\üÿ&Êjö^‹ÝZKPPgj§nk¦S]VM0ïÓSy<%Ú¼#Ôõ€DgMÖˆ›¡Àg3)Kþ‰Épcá¸6€Ô9°’† ]ûådÕ®ýšº`ø=3 ©>\~Á¬ýwXϾo]¯‰vH™½º×Ej¸$u œ×ë¿‚²’HÕ<`O±LÔ¢µT”#Ò Ü]³lW´:¦ØXËA¥ó®Ž^÷Ú«äÍøš‹`Q1YWq\k;Ö|èË“ –k+v®è¬QšW-39ª‘~UKUôÖŽH›ÖÖèP‡»n‡Eÿ.÷küª~n`ñjØýíó`sAå5³t“ÇFFg'…íK‘V‹íyBÍw:o$Èž|¿ˆuoö¿ J5¹=žî[A‚åï.ÓÞlå ‰“vG0âÚ<Se¹=ALìþ¥œÀ {˜‘Ä ,Ÿ{š¾AŽd/ úý[ý/ãå’\ËÄйWá ÈÁÿg=oªÞÿ´q^…»vx"oU±Xd&pðtø>¬NÕÐŒJlÃ'°6­ ÷AØêþÐ^Þ—¤^°“Ž¢h<9t…‘“E%e¾pF ÂyÙÊv‘P—E±îÀk4¼/Ó5ÝASh%STÈ[Ž‘·º`¦…™U•BRØ|,mwÝ}¡Ž^Íó§¤:ªŽ_'RR: Ð ß®•#!>6Ù®Ú•Å«^&.ëV9 DŒòfV—wMã²}H{ÔdJ]Žœôæö¨v½a~˜\…äܪ/J Ç<†ŽµŒ4Ã+øzþ¢B€›u¤Ã£âÓ1åßIÌuòù2tHœ¡¶vSŠ=’±ŒJÄsþ"^ß/ÍÎ ¼mǹ¦]ý?ò“3Jc4­¬€ü3ùiÕ’¤'W†ážRó 5Û°®²mÇùTk9>í¿6Ñ„¥kª¦õŽöE•Â‡.*mî šS³œ ¬ÌumN³¢©3‚¯Vñ7.óŽ,)­49VöðVÌ–x¤^Ø÷Yþ oF½0þA­¶› z6waÂ8@tW2ŸÕsÎìRg#Ö ~ã|‘6[m·ã¡ä Í9^vj¥è'-Õ‚ð#=Ò¥r›y¿ö*c§PIåó»êQµ´$ÓçÞf¿×æøÞãìoëµóvÕûÈ­ÃܨîÜ '¯¶ã¸ùw¶—3ÓéQÕ^Üø¦¢ Õ`}èsÜáK\2Ž›µ:¨ßD7-hõ¿ƒ¬V<íoúÁoB’—¹YHJÿŸäĆs-Ãô2«œ´…àÜ6¹¢?ÇîÑÜ…õ1/îìšÀd‡¥i¶».=ŽÒ°ûð Kî÷o(}`¬ÔŒTÑkó< ¯y¡J‡ÄT1C­ŒSîˆÝ\-pVÐéF¹ÐØeôÕ`‘êÇòâøºâ¤Î3šŠÀ¿ŒÅÌFyq¶ûE©%eùÒ—Ý}):kTà6ÒPU¦©k¢y‡JYjâné/|®é;sL.!£b‡ˆK"jY| '’’õiP­ìQÅ짿Ç7&Úóëï“jño¤½:Güg½šê–SU‘Iv¨Éjc8))Ñcx½"JÕÍ#•UU-&öñUí“×!Ì6§ãM(D¢JCÜl1’(p~¼w¦ó$ŒÔ¡–ZÊAˆúZ*þ"T³9c¶è†$'¢‰ 錓YŠKYíý‰5%í×ë G†Úâ8ÈBv÷YЊUçVó ?èKâ³L.U6ß|zT?±IÒëôNqëQÍiMÓK*kÆÜдž~ÓÙ¢W¼äÁ¯ÝíkP¤HÖªN$¸f‹šÅån”nìÜ»ÚS>[êòD6™®¶nóÃÔ§Ú›û4û­jlÇ÷®YŸ±6¿sO[m@úúxñÉhž€Àô*ç¼>1köê˜FzÍÐM;ó¡ª7O0„Žßá—J%h•Íóº•ïxº¶x²ÍèZµ±:Ëšuµ±“ªw˜IMe&¦ïg´z¢ ˆÞ© %Y¢Æ¿M5¶1‘¯/ZQu}Rfb‰Êb7ŠëÇ×OáùäR¯™Ta/ª8—‘Š^€õ@»×câ76ÃøçeÒåÒê–pÕTY¡¼*uF-{ú¹2ézf¡]¬Ù dïêg½{¢7ÇΆìÝêÚ]Ù·í +1¤¾éQCÍöŽ²To]ëTO,T)ù1BqÒÕ¾öA‹žùTÐ=N¨=&“·h ;±¤è=¦sZ-6È’1%·…ÿ±,ô‹„Øʈ:ë +S4À@‹éò^0Á è|z$QÓit-T×öyáaÑæ2/%ÉDÁǨtRš<«ã·Z\04l°Íõ#â3«ÆðJÚÏ»³n6UtÔ%!]Ý[í8Ë)øÞµ}íÔ›{çõŽÌ4cPçæ0»ßrû»·Ç¢îyîäE–æ«[S[6œPS{U+RÉ(Twè,Ǽ \;“.RJ­ë()ÀGiËwHcëãcÓ.gtB—oJ]«G.ÍcØ·V'gC:ÐŒØÏÑåiÛçۚȕC)è1­®ÓHâ¦n¬ÒM{ÓôÖ»mªuJK¨QÛÚ¸N»~kG:¦Å™¿;§õÂí5¬Nû²ò›œ(r¡Òµp®.B;,\’’/cT•t@m]¡—êv¹2AH6¶Z;¡m+}–ŠsJRûo»@u_’M3£±:”2ôŽNu[èKêB{8ãúê£!à“Q0ø&HÍ,¾æjñBZ´…Ÿ;i·ñ‡éM[â[·)5P¦ÑÉ(“jöO]êÛûª»Cê²½ÕOiÅFN2i&“Úh¾ã@ ¦‘@Ë RgˆÌ¤Ç€†”¡%e¤¹…¶u>›Å6U|Ð_S»5{Úð<†Y›ôåBúIú·©²:ôEMk>ûû¡4ìËÔâFRk-îÌ«íõŸ%Ñܸ—>†Ã/5Ìðݶ†Ú(Šk•Jµýé1#e9òÜl±ßa]8†ž¸zU`g€!ºRn̘\À“‡ƒS3Œà# îh¨C|nÔ]q ?‘¡9g} ‹>Gø†td[Íz€oUÐ×ï‰ÒÌÚÊÅ!ˆ‘êUY\vL?líQá†ë²i½aÔÀör\ÓÏñ¶£uN´=+áç9Œ·¬rMŠ`èŒ+{†¦B8ÅèM™ü \¶Èw©ª^ï¹ÞM éõoº©0MMׇ5Ô*kvúYCàU|‹)VG£Ìñã·8É L惔ê+û±#ý’”/4£oG#íÞÈJW5L{&˜µÆbã[ ›¨Õw ÒðdH>û˜ùÁÖnY`˜BϦ2\zWªx¸î%ËÃC³†7W£T€k†6q^ݶfìÏ)[W©>€©ù¸¦eRÈ-¶¬{¿Üõ8Þy,!š´•ðàr«¦@ÊOzZF®ƒ„É(ÓöMFãIþÒ;+Žx\Ò“M–YÎ#žg­ç6-Ær¬‰§boÂh¾­lßÿY ó鳟ßÀö5ê}pÓìO˜~ؽ¥ûÍØŒµÀ1M,fRT-ÝîÍ)Žú_½pY4¹†ÝYÝ»i + “<Ooìç60Ï™8æc–5 Nb¸ìâNçBÿ>IÉÀ +¸¸eYã5ZÊFÍã"ÃU¤úkÄDÈvÓ s¿»SàÊNÍ*_{®/pêîó‰ªð¤Q÷]¿Þ%ă!ØáÛwËìç8E$í4˜§¯98Ñü‡Duõ”ö“ª“~­þ¨qÌjF¿ú_! +Hm­ÿ’ w‰†ÛåÞÁS/ú³7¨žÖ'ѳó  ?‘_<q¶7sÚÈzç’qGûš±\?œ9*Cmæ»Õ+µ´ÏñD䲚W^‚ð }ÄøïÚ‰ ugÎññ°mLÕRöÆ‘’8ëõ^`Ë%š¶jÕvIÆÉÎBµ´<ëÑ°ûv]…Ük;ò¬Ã†×Wuzgš”×;ÔÅÎÇíµ¥u™**ÔV7£Qó7óC½3Ôq2\ŒúJ”ª-íeÔÅÐy4ý윹»Äjq¯Häe·4ŒBÞܽGäôÔ©Oë]ŒPçÍpìjF¦jtª&,LwYa%À;Œ =¹Ä%ã{rz` UÞÝç Â0ÂÏž8SMÅã¼܉Œ'jh¨ñT8§ ÿ÷=9]¿}§9#MÞ„•Î]ºtÒKî„ë$®ÜÈÞûGQ¿¶+ž³ìÿe¼Lrì¸ z•¾@ œ‡óh+ßëxüòðªÅ™™1‰ÿàÁ‚›d[«YÞ²ÚΓÁÆÔüd÷ZtÅÅÀ +^•íŠe$j|Œ +îO+‹£V”TžpÇû¨¦ZÆ—-…–­¿ÿ§‹Â{ÍÿîõiÀz£_ØTÞÄ=³Œ¢šøñ0ã%N‰”»˜1¢cöZï Ø߀«Mío»³mk!î6Ÿ4¬ú˜{ ³^÷òŒÝ¨³žšxìYä4(´± à¤a܃9M@gÚ4½õ—“ÔŒ Vÿ`…óÄi}eíÂ…ù e¸ðAÁ\Ñ]ï÷¥§$@Uz°dŽ§ü¾áŽ§Â37gÔó ãAÎ3™t§ÂeåÝ«'õΧZ‚ÙBÖÈLKÝ°ÓÃè¸ÏgBø_Vž&-§ƒªÇˆå]€ý¹ø›¶— ¼{Êj—Ýd2?H”ur`y^Xœú6ü§ïq +K¹€Zööô™ÝáÔÌñþÒ]jŒpWͤ%¼ñ®Ï@Ôº\¥ËÊðá’!2 TÆJ½&qŒ¹ª¾Ä0¹¶â¢ç¢"úÇÚñÉO>>%Ò²x +Ãf0˜‡qšíð:†H’„Øwš-qPhfÑÛqß+#Ãáè6,²ÐÎîx2<}4»½ÜVà +GD’ÑyË‘wo]i©ÅówÒæL€ïm+WwŠ:»Iéï÷Ó.R—R%ŠMŒú£Qø—£¬¥Âìû«ê5õjó_Ž²ø…úY­!ù+£ OêV*,W¯Ã§ íñ ,¹¡Ì:ú«ª÷ØöqX­j[ö÷¹w×tef¾Uø-\è>QXÒ™ª³’M– T™3OýÂAzâ çͤ8lBFB\”ËL½U5$öm›ù]¥¾Qƒn½ŽŒã×6ô;MÏx1¯™YÉmQ^ý¯8jÄ8Ðlu±ÇøVDCžDãÐ_Ψ• @@ç³$ÎŒØC««ß._§ÄN+ ɱãn|ìÛµcس ×±íW&YŒnBSÑÅ4XÍa¥ž––•5ŒDýšù†¯D«Ml½¼#Éþô˜Žƒv—ßHÝr01#ñ£<›‡ÂÎxK†/¤}Œ2†ÞQHåpú¹ô>¹ÅÐjuçºÉ#æ3'«²cO쀱v–õ«ÅSOg ¥˜VÅ™6JÃ&“%N†ºœ²²õCU⊵‹®éš9$ŽL*C›)}ÿ~XÆq?ÿ;ÜÕ¢mUv°^){ò(ªó¿¡¨ù8 Vu§§H/5|Ä.!ZN¢Imõ¨ê°Å}Yݧ/;«™!“  BÚooG?fwŽZž¢àkËTJ¹úâ¢BD_ÙUá°Û[µ„ËÈ:‰sÀ#d +ÖœÂj²Ÿº =ÕÖöeÍÃüðI4JZéæg굺_õŒr‡éj øíù~V×â#™ïa°èf±||ü¬*¨ÉV½è­zÉREX§«ÄÈYïÅÓ…¿zs‹š3‰:Óó~VóÛ…9]¢C»šNñ¯Nï¶'©ÜiTÙ©ˆPƒåŽ“¡+úX„dǪŠÛà2´ÄGž¨çvàÔû‡ù°<ÿÚí ‘îƒºpÁjëCN½f“Ýr*s´"EÆžòÁ©O°ûÛ±±@#VÙFü”$Õ£7l¸ØÑ,¬"{ªÇ†yøIPâk”øÇ o[H&”í¸èV”b†/TzFí¢\ª˜¹~R˜¢Sii§Ž—=7Û/ÛÅ„ÏQ°%*2à’Ãæ›$½zdÊ56"À@ú{-ìI®râVlyd98°zd«FiÙø0²Ã™V3c¯¥{ª½°Wôå\¸l'*`„–•cˆ‘oèásëò L³cgÈ^X4¨×kκÇÖÞ¯xˆÙj¨[÷ëKÌàF$z~¿… ®$—ÙñÙÚ_—M;™â¡Ã¦02-ñwmÖ­ž`õ•íÕ‘Žµ†#8¨$ 5u©>i7¡©ŒE3‚\) W")˜íž H”¾ OðßæP©™vN€-âx!‚ùb ïK”úÛfò¼XRŠ# ”„&l¶ +#ç=ànð”äaº­ ’¤€Â)0 ´$TõcyîçA|1Z¼¶Ê(8ßU«>þzØ(@µ:L§–¨L÷d‚œþñ ŠJëã×£­>z3%­4üà:I5•v‰ÊL‹’ÿ½™Ýj£ïéݾ‰î„è_òÀ¶éÔ•qØZ…¿Á»Ý¸ ‚ѽƆýðpŠ…MãtËSáߎ—+ñwtýú¾–ÜA\DK—õ—”š:ãyôƒË±—Ž‘ÃÌc33Ÿ¬7’*ã ÇÒCÐ3Èd÷÷a¦F3sÔxgž¬yÞ5ñßC÷a17Ìjê)‰辩GgÞQßÖŒí†N=&¶©¼ê“n3ëÌÛÄÎkefÉ”cù¡Ùù3WŸÚßbtžùê [©]óä˜å8Ý%;˜G;ýÑ?ΈŽÌ–Çz„ Þºð5˜j½a¨Ê²{ä÷Óó&•ùÞÔ¯Ú0å +fïæj .†^^/Xclj¤jþʬ#š{KÅÕPå+œ |ÜÈÕèv–\l;ج°Ì“YLcÃ_MáqêÛ6F¦Yê$34®—zGµ°Žµc1pÜe½Á³…ð/ê3æ‚Åâ/«o¢LÏ +äu*g3±ÒÜ ­™–V³L4|Ñr x¾Ÿbšu)jGM f ùë¿1d¬jLå¸û?1ܨ¢º2Ñm÷ö k­‡Yó×p}ùª·Ú«‘ê`¹#WK0ÙK¨×–(ÞÇÌs¾àÃMY°ºÆ…¿ú!y2„–w:Ñéïf¬;Õ^÷±¾÷Ñèù±œœh{ŒÏƒôÍÔ–ôê$®Ë%ZàJ¤×E ò(ˆæŠØÝ^Ã~¾ƒzõ¸¾ÃÉÇwýHå[p¸–£´ x@Š<ÐÿûnÃ?^"‡ÎH¡mŸ)L +ð†Éô„ e„=Š.«#¬ñ¤zêVð‘% |®ƒ°êÞpcúàG¢_cnÇ>–üÓn4OŽ9À„ºîѼMKµÊ&=\Š‹95"Âô*l—¤©ò}yÕ|[‚Ž‹ª5ÂÕ‚ÌNëÆ4ÔB—:Ýаڈ¢PÉE1½í¶çÛP\žàUÓgo‚#±¬,Ò~#Úu§ËX_@*ýð=P늨Þp—Âq†7z¢Ày·g00 z_] ¾×²²íà"'—#q4Zû xBu™ED¯±;Àš\m¬ð@¥]Ò¹»ó€}¤]ØüƒÒf»ºÖ³d–GýÄÄ5 ¢iêOÉÃmÝÈëŠÓšØ‚ÛUBw‡ •¸Š°ªÐ½HpAwI (–,„ŠûµwïóJCA¡-T| êwxÓSÓpçãî ¶Ó.‚B @ÆäòTÝ®~Ì-Ìß“©-WØ#|ËNû¤ŒÈYV&ÅÚK*ƒ 4×b×ÚÛ¼HY=0A$Çäö+‡õ2O¬z¼Ü·/SŠU•¢>]€ÄÌE#O›¼lÝü+³£LA׌D\g€“Ø\“âu_rEDLïë±E"ÓZ2õ*¿’ƒ5ΡnÜ—¯ˆ,h6cd€~ú¶eÁ‚èiß“Ÿw´ø;#M6§9±ÆíDÍ.ð¢ÔÉ" +<̵µ¥hºô$j ÷‹›ß*÷*T®sÖF˜Uá|K0ÓÞŒMׂŽi7ð€¯a¢T"²TqÍEpÛî¬qa g +•L|a€{Ö¬çRƒæ§¸ í–g,Z×´}s‚É#QƒwËÃJµlî ô¬i¸w¢>Õ‰ËÊÊDfÞ5·@ÂÅFê€J¼³OªÝGã‚ÝÂëuP$F¶²Ï-Ó¹ºFŠ¨¶<ô®h.‡õÆë{‰]ÕR ?w fÅ Ó$ d‰±ÞÒnN2…Yu~—–ÝÌ~Eîפ² µÊÖüЄŽ—ô}ã«Ûïž%iÚ•i'¢SÁ…˜îqý1»a>Ç{ßDc䚆¡?Í Ï·ëá”)Oèj¶Û'ט<Å`MVXÊ*þA_¾28x9n3 žå6á d¤¹‘÷è¾2¥¾—1éÔ“Ë4-nt­›‰ÍR†¿ˆæ„öc +7 NÜC”+g¨PèòöPÄ!‘öÌ—'@¯a2hR[›¼ó±*ßù43÷]Ño¢æ•Ã:]=á(Þ¥]×]°[ànù¼ÏÜØN áÃ0•x²Èû<°à*Åökw°lÝ£,¿Ti÷š¾"îq±‹‚ªŽg>¡Ìæz”áV„ýAIÀŠUù‘ Ä?”§= "âEåy“‚yÔw á5­6v[Ù‚Ö>NTu„iK/ +n$|iªƒÂç4Û–’x|%-‘Ø©Ù>¡<ÛìpÍ Š¨5ú°%ÒáÅ߈ÊA”Å|N<_r$ÒÌ^Z&²RÁ¨åÙj/Póc5»·™…-øñ\¢ýaqŸŒ¼B›Bî3ï,îä"Œ°ìc;lð—ºü†ÔË*äø¦`o ±âbáŠø 3#“•™`u˜§cäâI©7n2öqYä©Ü˜âÆ])¶Ö«`Q~_µÞæWeŽT3ÂÜmõÍLÜmitŽÝ¯Euƒ(3_;²b#‘릻ša¬Ï6væH]G%hÌáÁ5oÊo‡Ë´ŽTq©3øb…mÛƶ¹©†­’Ãâ°Æ–)Q¢lE|Ç¡Л®óãÆ`%Â8:.«âí­q6…-rT°?\VùŠ|­+u:Àõ=¹ tà5ŸÌòøÀ ½5áf»[7_)Q º‚Àî°:\ãr8ÊÝú¾¯›¹7ßÿáµíÇÇ÷[†åÝá]ö÷Ö·æÜKµ»;©%ñæÕp®%õÜqâ5½`¦ÊS˜,ÉÛeMª|ÁA˜ôI• Ò“LGæö@³é×ø¯Öð +Ô•PÍÀ qØ%:Îê"¿Q¯š+¼ìö”ô2`&ÞíÏu5ϸÎ@o°”x†5‘vÖ5½_ûX'a÷Äzíþ>ô˸C!ÛáîòGøËÇŠîwBÝ~ÞÝkÁèêw÷<¥FñgóýS0=lD9®ÊWz¦ÏÔ mpzn;TT#[UJ ÚÜÈJͦ­gYº£Š +ÝWÝKýUè´S˜…Ç‘ÿ´«ÔI¡cnïo¢Êvr’réóçd.—PZ¡…czˆ2Ã*ÄèÙ{žîr­úø@<ꛂøàqUÞÌ®Ã{˜•à« + ¹¢,ºõ d€ô¢”ÿD±Fø‚^¬aÊ€I€¾zÇC˜eË4±}'*Q*Ÿrî~|™4J°¤Œmw¡ðJëùXéq» 7ëÆUbŸÈ‰ •ìEÕiДX*³m™·KH™2U™LÀò•)Ìö¶bfËBåÞˆP™1žøÐ}íŽùB ÛŠÎ)c´Áf¯-eìË9‘â¼ßx‚2ž"í‰úÒŸÇgVû˜g„Œë=òñKëâ¨tÎJGëՉܥ®)fnÉ#¢öÈ+z†}¥ç¢3â1·Ô!S'ôn)䉽BÇxœU»–—Žç-mͽ|¿Úé3^BSçµeßvégfgÏmAÝ­{TÊñ¤Þ'WXÙÌ›iŽ›‘Âb~9Q˜.[åµ5V +°ã7½ÄPÐQ‰¹fù}Ü´v¡ç„91”§ç™³XM Eòíœ×„6ø@©]cSLäµÝ¦S}w‹9¸ŠPRÎÖO¼^¸þfl˜þb›Ø52- e˜U܇‰d6Ã?&ô €yâ)di\…÷w÷îZ˜@«rb×Xƒ0VâC^%¹ N4ƒæÔä£SX> +>>ÿ„"¾•u{Z“«÷þ–Ôœ‘d&HLʸ,w«=Enµ÷nµ«žGª OA« ëÜÍØ(Ý·s¿Jõ)ˆ$6(®‰lÀÃl+ÑNZ½£l©Èâ¹óÚw#È ‡-ÝËmuA“û y_[ÆR×W#tÝóUÜ(Ä›ˆ@/ßÃ`^ùÛ‡á[ד˜‰{ÞÙû~—¬v—dv{´-ßA‘h÷;mÔ8-ÎI=wÑy 62XZ“À´z‘Øfg‘1ŽÄÑæ¹!Q)WÛ׋è3XŽÓY+Ï\LjW_÷8}Ê põú 7ð|µ¦â€( +-ŽcÝŽl>5Ÿ±x#Q×õT?%Fyó…Þf¬I*è=o¯ęóî.%Zåëæë]õÛÙ•¼s ßs¤¥šp¥”Kbß,ÀÒå:!å7.—ÌðžRÍÜ „-«6³eÃüþ¼_Ú™¥zñ"`x°ƒN;PDC /2OŒÇœÆ'h8Þ X 2–ñ;#½©Í±Ž±©)ø Mï)%ÑØ$"þ¶ê.WŽ ¨Jž±“‘”zðŒ$öµ=Nm—à¼{Q¢GŽÍÀkù/Ùå–cinÃà÷ZEo ß/ËÈÈSO€ ûÂô©LP/%Û¿-‰õÑ„ÅRóíZã£â€ž±žÔ®í}¬¹Ç¢üJÿ¼ëf +ü=ý Hå9ßC ½5wõïž';»$Ì‘ö=or&úÓÕõµUÒµ×G¾¾”R‚ßîÊú-ö(çwiŒ¸†å3åÓŸ&ß~*lß·í£5(Ãißz1Ø4¹8Zk¹QÊÓ_²UòkÞøÆÙÁÅéqL«tNt|<“n+Y%ì—wPÿH¶òf ^ûͳd×C”Õˆ˜8Ê«8ò åG¼*ë)ýa=‡¼ÜŸÔ'ZÌö¤|îT%Âå»TŒ ÎRa¹ ŽÉ?>_“P§‹Ê¥Ã"gß`i:ÄQa&û‹£•õ}N n®3âSVæG Ÿ%×íYS«×d7€õšGµ@¶ŽÏ;'ÁÔ÷mº-°?ãÅ«sq¦‹žF!× WèýÖ^ĆÆ\-2Ÿë’^\¾ ŠN°ÞSwwK±ÖG”™sªkÇ}›œ9jýò6Uš®õnúùHzó9ÊùljdhŸ·†µØ®ª¿É“Ÿ_ÿúúç—†ýýøïÏýGÿýÕM2rÂ{Mâp£‡þùÅO’4"…ñ£˜Ç~aíäÒoSúS +|(¡P—g÷“æöG\:l3¦Y~ 5= +9~†¤óÁ4—+íªïX²U¹tHolÔš–®…£¯åFS,ØeSâÉL‹üu7cØ}eÐþ°yÌìÂçÂÚ^Š¸à.ó ÷¯êI +^µ’^ôŠËÎÄ"ŽíŒ[ dVuÌÈŠÈ£]45Óš‹õ2¾Y’ZoHè7¡¨ûd9v‹‚¥²©žžãE£Z°N$s{S®’û~EÕ“œÍ2™§õwöŽû ‰5Ë\…Ýúƒ‘£Z¾ë(«¸†¹“Ù ìÎD}š.”9æ7ŠÜúp[ÊäŒr²0¯›Ð÷GWu[ñáñU}ªHö. ªGÙ†Ïù§³f”iT'S'öΆžæ«!â¼Ü]ò¤KöÐ߉Zá½Ïžè}´ôÁV-U¨…Òsâ óÉSŸÇ_—Ýz$S?ÙÑZÊ!FË%œ<Ù¦ ö&ƒ¿•[´Nw܇¹çÏ((¯æ'ìÙbOúˆlvûè%xMŽ±²°`Öä➬ï3„.Yts¢SÑá‚Ýœˆ'd×д<Ã/ ˆl˜ 6®¶×ÌJsÁ-:.\z §_öXÂÌŒ‹ÏãƶÝh¡nÝ™‚ÞÓÌOçQñeÝ‘ú• ˤçÛ|ÁÐȲ<¢ª<ÏŽ5ÛǺMv‹z칪d®ï¯2Õe:ö4ÏiaÏ‹ªKa3˜á?3m RˆF 9^¹ÍÏY½Ì€•2ì6‡9ºC+Ò˜§­ƒhRÉU~Tp¤åX‹› â8V{€-Œ]ž’&KÆÇk¹*»\ݪ¨…bæå·Ç¦š‘™AUn 6‹¸¢g*‘BO1—{¨´¤•jÑÃt•• ³éÙÒŒk}ÌëR9çüv ?fc«¹žª¤ù½ÊÜs”Êø:<ÌéëgeþóœÂmÖDí5žAÇŽÊz×/ýž®WsˆÔ§›¬ÏƒäT>67´ì]/D÷¸[ÄÉcB˜FS‚ +Ã*)õÅ|ûŒˆÑï-ÉÞÑ´¤ è13Þ˜£¶L&òz3:¾‡#_öDD© îÝÙ`~á?+|O½2 0©#KÛ>ç.êDÅË/ +‹2cú½¼®7Ì\H×ê9Îø—rx߶öy‡´ kú®‡ +º;"]7õÕ¶ñð—«ï™%»QéÌ°;ß*efù"–ÐflÔ“fðä‹MüÂÜY;vì6|S7 ™ècÌßöYnૹì,7ùª¸ºÍ¹îÃùy7ù½''›²¸è*›í-³n_¼+w¾…Ê¢Fu v< B¶üi) ÙÖF­ü9ãP@§›ÒmƒoÙÕÚGõrž}RÞ"ÚOsGBfÕýh¶ýÉnÜgCïÙà1Gö ¼±OlKé´ÏÜŽ!ŽueúúíY&Œ“¾Å¬/§¿#¬på©gXð =˜.‚e1ö?²«$ɖ܆]Åè ÔÀóxûûþ[c ²ÊöªB(é¥D‚ Xn©êRéˆÙÊüô •fî—,"Ë¿¹®/!_@â¬:¡Ž²_ÑÙÓÈÝ>±‹¹Íšâì©+êÄY¦ºÜ$×iòÆrîðz›ÌD–‘S·aiYG¡—Ç•çñŽAÌ~­çúïëçÃÚÐò½Ã=D¥¥à/‹Ë˜ï!=Ko®J]CÚŠz; +¥—~9ƒÉv. ÎòeØié¡LKJdt±æx>²¬Š&[µdw2Vl'%ÃÇõà &_'²‹¼¥ý$ø8‡×3Ú3œ<Õ\hyÙîµFNjëòúÊpiVr¤!i^¸DÚÐJ†s0xšßŒ§­ø·$åâÛm¢Ì_Dqdýtü«—ð*G }xÄø¹<:õYÕÈT <ÝH»¶ÐŠ(¹ÓAK}¨û`}²¼Á•Gî÷™ðÖ„~Ë-„Fäº×þX+‹!ªòÊW[ì§ B†]á¾>7•Òê*óZX9€á¦©/Á@i@£ÍY!ƒµ¦=R°€‡‰´[["ß®î‘ +Å`' ©Aþgr#›WÓTG»þÇÈéÃ‚àš­»Ù­jÍ+¢"2ßo¨–›[$×—vk¡Z“°X¯ùNÜ3…DmH}ÂiZ4Üþ„+BÈ’«‘·ÕúèÚÔr¬»…ë]#KB¶H¨Éd­Äf¡ópRÅë÷i/ô1íFQÌ]ó–s¸Ü¥É»k6@Ò÷TM”EÛDÑMšï²·ì0¤²Üä9ÇÌÁa¶ïëIWÝèa±ifé:€uJs<‡ôÛаQuæIu¾Dü3Ü¥!ì•\ˇ G¼šNYQ'È`0Vmè +Ê‘FéDw#¾ª)ßIR‰’àzçß×*Ý_€Øq#ié-ÇEU½‹€M-Ôµ¿Cå)‘¾wÈJ¬Íõ>óq¿3; +;tiFydŽ €Ÿ- 5‚²kuvP=y7Ê}Ÿ‡G?ŸN¥n ñ×ÖÍ.m`‡z³$» a¶líÑfN Pd=rõfH6ÏôKÝìÔÈË3Ã[ ]>"÷JBIůšÃG_cûb“mÈì”é"¤IÀLÇùß^ÏZßi`ÝúÈ ¡·g¥ùqA¦˜ãšËÐ|{Æô¡ù~…ñÁzÜwÆKåh¢/‘nú)àl_½Rhhµ}JçC»;é{Ù1PeY®Z=B9‹`yJ ‚wCäZ…n¥¡®jØüAïÑІÊXt]J+J. 5½Äè»lŠÝÛ^î©”£ª!T]»ÚkÊåqíßS2þ8*'…?¡'‚Èe¯5”¥Û=XMšM<òv¾Zo[ÆÃîëáé­Ë»>{JOæù9!ãAÚë7i¡Hòäú¤L9Þ_ýñóãUÛu#"õF‰$G Fë¾XDJã#_¸–Ö­Ê*Cªz¾€ó]È~ed¬¯ª©ÃÝdRz$¶2“ #‘ˆŒ¼¹^éÇ3õß®ÂFo¿úij«]»-¶§\¶UÐñ?Fº#ƒ¤†¶4Ö¢àÒë¦ÒwýQ*Wã ת¸ÚJ®u‹žÕ‰ÑÔRæîíXUÍA TšGé[Pi.‘|½6yÔå8ªIæôó½l˜K:¤!h6ª±”)È4Í»M­€%­( +º£Q"{«¯ðòìùŽôÚqôYªõpíh¹ªwÌ.ƒ+¨§wœBÍÀ‡m +L4à ƒÇÕ?·zzp(QM=<è0µî雹ÉÏq´¬áµ"ú:p˜¶iéÔ'ØÀF ¯ÀùhüœàT#NÅ8Î÷Ée^ç~y?ηÈ+¯®š-Ü kŒÃ"jÉz Ѻ2 Ñuvaª9 (Ö%s†c U&pÔÂOã-"£IH­ +g?×ÙjîÀ*j@äˉX÷›Dì\Y³ÙÙ¾ähqÓLë:)eiw`šG@䟈dmÙ{ °£,Ÿyóí2ç ”ÿ1ÄlZxÑá•7§*‡‚ȧ"vSÀLëù1ÅŒÈf˜©yWkI,Jfû=U:@n½éÅò\gU6ëíQ8¼¥÷oÊ<×Í=Öáh„¥ÀìÞÝ$xŠ ¿ø›Gÿ6#ovWÿ83™šr‹“c ŒÊ.?ù×@+WQ>Š(ïK±ßêE±‡ë]€\?€ÑãU};1¯db†§³ûGæù”"t_Ð\5`…/g•Rl_nõX1Ém<›î¹X±yßµ5ªéÝèòtzÜÙ÷AÓ¡£âÐhÈ +Ì…¼ONtÅe‹ (Õ¨¨ ×lUâ×󽀜ã-sç"Àë<ïHW¾W•Ð ëìaüŽ{ýyÎcÀ¡r,[˜?ÿOŠç@qó YÎéyõÊ–¡füÇP°–sÑ®ÒxY ‘æíð‡²B¢þNÝLHð¯åª3 ;ÕEé4âÒ(nyT¦å´/ihöÚs)AIÿtp܇ºÏÒóW@h|"@mÀ!±%ƒ™,üz8£#‡ØìÝõ,ù§æaV¡èj) í±hH·#3…ˆ‹ßð«nª Æs¥ú9Õç NCÊL%›5Únc£Žm{I+jðƒ ÂrÕleŸßà«î¶…li )©LÿÚÅA6 +ÑÎTëÒJ®Áîyß÷liYûÇÈQ0€d+ä³¹ûï]Ç<ƒŽ%…tÿ~[FŒ2©D3*âÖ¡±êF†ý.¾†£yk¸3™`!ÃÄuÊ,è—.ug8QœTtŽd¼ä©é]‹Ã)>Ò" sR9´´Ì8º/£\“+Š/+CÖ¨Oýˇ÷9HÑç 0*éfU§®Jç–åÇšÞ³~%®ËbçwÅ*”žõú¤’²þZ»•l@#\ûuP¹»ôÕ”LÝŽäRb:4!ò*flk­Ùï”?LDýaæ§ ·’:ûWrŽÓo€>¡õiÅ Œ P(H-eJHÔàŒ™xçµú‚Ï› t8£‘ò—¹°£j )úl7ëÊ`F“Óƒö´7ÐG‘DÁÉãP—þ'¨Š²ë¶ø•^#Ø=þtÌo˜Ü­ö(p›-¾Y£]6”×›÷«ÿëg.I +g9qo“ÈV8ñ¦»Üþ¸Ú9þ’̘æ¿ð›nÿFBõqB’5¢n§y‹@PpÓƒ€Î,×6²Òëc¦ôz!€þÒÚYü~@ÿ©åWVµ¡NŽßµ^é sïWlÙý3sT…j‚0n•õªëŽò̬ôëߎUÚO‹À[ h¥ˆ¼U~d(ºÝ‘ZøϵT-¯SªçµTÏ›­§¼æ캮ão`éÚu]íNìõ‘ñ±®Ï4ŒÙ33‚¦u/[b\ÿ,åÌùâ´ûû¯‰Êy¿JnÖ类Ìõ[í] +d¦&Úójs뿧\Õ½ÜEu]%›× ¯ý[_þò4yøúzq·a Z»öu݈LDb%úo×c}!iÛ‘Uç1êM?]”·éÌý$%þRÕn“>éH?ž]šº(†_fjŸÛúX£™0¯ìÜþ3~l)ï1ïÔtî>‡èéóýöNëv.osÁ•Žoµ{ã–%=½Ó²Ï¡PÏ8ïže¢h»­Ñı̘ŸØ˜W‚]6õå<àxGÞØWî«©´Kš8ü‡ †j^²àúŒ'ʽ̻ÄÔ³7EhÂ=W/45à|´±¥ 'I>‰u²BÉ|7='kJ¿k¾‚"´êt¬¯Çû@,ÿúúç—DJD(8Mþækßÿýñï¯ÿ|×ï¢?õ[`\ø5™s¨LüõÅ/¿¾þ8é_ŠN=„çäÃ:L)ô8º*—?@hµ üà„@ˆ¹^kqU +a Ù`U%ÄV¤épûR<—6õrËW`OŽ» ­düe§ŠèVÒ°ôaj¸7'G3¤¶™ïÍêË·6 ÏޞǤp%©'_ÕÎ6²¢ìû-6J‘½aX8Ù S”šqÃÛºÛg¤µ­À[ã'ÏÐ jÓ錈ʴÉaLÅ2†€Õô#š(… G¦çmˆ…d¸ÖC4ƒ)v óúe`$Ì&aë!ÑõXÔ.?ñ¾Ñ¯V¼~˜Ÿ‘Chu”ìƒq²W^L`¡.Ÿ¤V#î@îí˜n ~|U>»¡3]ÌöyL›=µQúTsó&Àœ‘‹4áç—Þ¶¼_ÓÊŸ¬ØÞRM#:hòüsEôº‡“ìˆÉz~ÓA.p ðkF5¤¬X@àÄH¡QŽž|Æç„šBÔÓ§ó ƒ$ÈÍ ¶m;£µÅ¨€ 0Gè<¨Xã~ 3¢ûÕ°Ëg&g¶ÛvLØôÏ\V +A€Ú yÜÒchŸ”´“a?Ê„Âëø.v}ŽÄK<ÛÛk\ç[¯Óו‘7ˆ\ÆxV?>IÍDL—f6èç9x8«;ÖmÙlHcuŸÕî¥NHS©~g$ \Ë Øš²í Mü:¢‘°MaVZ̆ TùÄø +EÛ÷Y¹8÷MZxéÅð?´÷Ó¬Y¿ùów¦$ø˜ràÿD”M|R”oNå+Ç”û˜•‚ʯô%Œ1Þ&f>Y Ë»’%ßlW+g Í)|”¶Ë8Ó~Xšôtû¥‘"†¹ª;G}Õ„²g-&íÆe¡Ê¨Æa²ï”ñnx0íJ „/DÉö6ý¶º=ö›J“ ¶'Ï`f¾õì%êÜóv(X#%Aúà]ÃsÆìû%,9’h={Ô̸[l;´8ðÅ\–5Þa5ˆv¹L}‡ÈR¶Ùi×v2v_FxÇ뀰K,%8 +_ÕsBœvB£iPyœfÃÞàBÕkølntÝúx رb X+[«†H)S¡uDC›ì5ü%·¡¬!ÊnæÔÐ8›‰³Dª™h5²ÂUõÚ¥ª÷„»7&ŒS(†vHªÁŠúÜ/V ™Þ>WøqºTßûWó Ķ3‘ÉÀj3cÊ€sY|Rœ6©úP·Ÿ¹d¨`–,”­²ûºYÝý*`MZž ÙoC(#‘™jPŠ£Ò–yÅÒÄ6Þë 3ÝÅš­ ±Ç@€Z +ÃPßç"£Ÿ…MÍ@¿#ãa:¦tk¸4n]3fžšžE¼†€1nØj(’`÷âÞ Ò‚r5gaŽxäZýÏ9hŽÞ¶AºK9ÙPB­‹«Aß±ÎIÛ‡Q°Ý©­ßfÎ4?ì8eIì¸î]¥5`QËZ 5¯4–O|1Žo„ZmÉ#ø?ÑÓiIe<¡ÚÒM½§˜–+­ï2ž_v;ýÎTs¢öÍäþá<-²¸ìùú©$_¥s#uÂr½‡f‰»>ËöD|íÐ0˹ÐòÄòÕr¹ëæRX¿ÓVïÖ5R;2žå‚#‘æ;>Óâk åjûyUºIˆŸY‚d:á·ôf¡÷¿2à»Ïâ b ûwJïoN´qXUù7Z)úÈß^”¦®ã›+%Õ•`MQ¯ÇæKy9·¡Ç™WrO×cA%¤ô+NzžˆŠyú`ÿ¥c”DýV|¬°47¿ŽCð¨Ääêæm7£:Œ¿Q¬<Óp/@eBìжǨcÿî ÀÂt"¾;õn…ïÊ¡¸¶2Þ ºåáw§jüF›6ì*wZ£žþM/@»ùt7,L76´¥| P<`9%"¾§Ú W ˆ¸#OMn¡jò`So€Ð™«ýš`•êËÃpZ²öDT°«T5à}ZYL£ãp¨ +Ä?Âý-Yh#.-—· mÛ`€á¤¦æÕ%ªQ9¤oÀ%üøZÎ+ñLòYL¹Ç+wÙ† ߢÖ;Ý(.U™­æ+üC»óÄÒÇêÀ`i\`Q³#!É2kÁ‹á½×†H7Z}B?h#® g¦aZcî FÈ«ff­Ûw¹ÑÕLÙí®îÚ¹.eÇKgâíjp¨Êdɽëq||>öa|K'Nz àǹîI`;ä‹•è°ÕD÷}ªy~ä^zç¶Ý¬oKzâž·3W‘ãp¬ªÎ¶[_oßh—a£¨*¯¼]_%âz•ßaBì½6Z÷µ0©:+`ÍsI2äeõx<ÿ¾ýø(ÿ¾[nïN\–…±øÄ‚ñZmqžÉuHX‡ãúñ¼~\t¼k ‡µHúc‘ýxð†XPP™Þ}Èeµ¼«¶!)*dÌáañ]Ø*ãe.æûHìå·—åóæÄh­-ƒ ¿c1>âÂR¤èÁ«°¶ÄÌc/Þ/šF®…&oN±sü».T,õ%³)]~5ZéZÙ®)\ÖŽž³üøîÁI¶EEX[,±Ò»ï×Ïô\m<ÒS¡îâ¥wýŒ†3Î mAx«‰!i÷ÀhšÔ¶U‚ñZ˜“ЊlÐÉ’ÈÃ6<F+MB¤­‘”`6lgùžÆ:¥4è±0vDªsÅd¿èTsYÆ“Ào*\š8ñnFë€%‰ûÜ52™ëIX$Õß•tÿõnIâÊ=àvè. ÞÂ`” ØN/3¨Àg¶^(ü„•pÑÓ:!U–EºJ†KXâR³ }jƒþH=>d­³3eø —©ä{ŸT»È¼,ØK>‰B¶<'Hp¢0„ùWDļBÇ’ì|öm[,±†Ø ±à +ôòÐ$ðR¼zÒ´€ï‡lçniªäóWŒÚüÌ4ÇßžgT°Ž¼kH€-µ³ÁÐÚ¯’þxÔÕ%£÷|KÑ[Òï‚ ^—NGÞ•·Æ‰Ý¨¸:›„8LJFéb˜qŠÙ½DýÖÛ8 —ùòÀ=ÑjLvã #˜t4æöQ6…që•«™†gîZÖfkª ÑÐu%|šÑOSÄiËi +Ø9DT4{K+á|¦$¹5ËyÚÞ¾eœ:­(„*›Y¼¾›È¥‘Ÿ¥óJk'1 +ã8 £›-º>-![§gš-ÆòœË êHé:ì·Ké©yásÒðáÆ †’b£#ê{JCM`¤ÎEjZ:û…#*ë’T<’ËØ\B-Û$¦Ïö¬™{~Rý{aµ7"­hdZ²¦,’û€³ö´8,ÊSçÀ?­¶­¥‡Ëú‘ØÉ´€­P ®£®ek&çèîÓ]\ÒØhÆÐx•øÕ6Á£¯lJÍÈBpýÆg]/¦¡ÍæÅ&Ááñ‘Ó$feÏ—Ç%ýüdÆÓZcù„øáÂLz°ã&ÙŸÁÝÓOˆqÉaîªt™õkA¾PîH®\ۛˑ'ž.#ŒîÆXÖQ+Bl +4º…8oŒþ£ßÈåSìòžËÔpçÎò†eeNXëCÔó£¡vBïË(1¾¯!÷^_ãJHÊÔ-ÓVqUÇZ4ñ67‡·ÌeÚlDbø4ÇÅÌ~a†Ù;4NÛ²”,¨L¥ñ‹qŠ´®…•~àxÇ%Ú+r²ÅlÑXSËr`µ^Úi|™h ¼vGÓ|xëWó²$Ip`§Á2.‡ÏúíÇË’èùiÖ¥¾'ý´ÚxÚÍ¢æ×:Ìž-EÀ‚OqŠöwÐT>cHJ~a“g Á§&Hºž—¦`:­WÖ™zÀÛ3iÞ`¶L¸“f •k•}ŠÏ#Í£çþ~«%Áüt´Å_ÈtçÕ¢!íX3m(‘" *Q¬ ‘3]HÛ<­ûïîl8w¯mž,Oi·#.×"„¼ qG\Ç=í*yU> XvžfPàæþhM¿qË¿ŸÙ/¼ëX2p´MMEÓáv³Kz¼Âƒ“°—™½Çxo¿ÁÞl‡PþÀòŽçxJQÆ×ç™óõ󽂕V»Æj~²­÷ﶬšÙ+4„sqwêäÌõbÊü >)ÌšÁŽ¿!¢g库bT.4ª"=‚k!M3œ–Ñ §Þ\ûcHJ~›Q(F“—$>½±3Ícü±ãVêJuÿ´e}>‹<Ƈ*\‚(…Íãèé”ôAƧã;f³î‡±ÔV¶þÙÓã;e•Û÷rŸ#|¤–6ž;ž®nôŽ– á9f{zwí¼ö }l«Iû2( – à„›£Ž„àf³Ó]jžä’*‰"ÆÇC¹ñ+°uˆ3@ç}°ßk÷ëÑ&WTç.­2´¿×(^ 4C›šš@ƒÄJU +GÉ>®Ýˆ–™ƒGôLâ]ëzáMâÎlÒ:|{îØ£‘ögÙDˆã5]‡>±ë¡«+B8s$²E©¿ŒÂHÓjø@Ëþ:Ò_À°á1ýz:ŒÏqª×=¤PçgPk"ÏÜÍ£}žç?ÐÇÛWooîN¼ šàÃFŽyöÇ Ž›´SÂÇvá(€Ù ¾¸#}dÈb8ž¨ÇŸuPØ)KM `×_ý¹±« +UÕÍÀ{òêk-±aYiú¶?Q•`UíÕ8Ì dæ×»}{‰IÁoõ`±‚z +¤Åª0†˜üÄ‚.ìç‘ð4¢²]#¢…å4Â!Äe¢Þ×k‚/ž²V??J,e»Õ¶mz«½ÁãŒ#u’ŠWÍ®W<‘.PVÕ` Rú°EŸÁóZ—D¶ÆØÊwÆXãkó«£àìñ<%&p¿,Tßp ˜!„Z>¡"1äW²ûãÇ?üžTaŠm˜ê*ŽüúÏÿúñï¯úGÖ/ñ¸Î(yløø%¸þñ§é²€Î¯Ô¹Û(Ý°ÂàD%gÅ´!±']U\øøÒÎf|çXZìÚ?q@¥ÑgàAL¥hD,×¢@T˜À0>&Ao=Z_Žwë1¡f_óîïœ{½vÏ<,ík?HØ,é%êô¼ïgˆY‡;û­ëõ „éŸæ +$™= !Nô3ÞÄ­êÛºj®?NÚ~ñªÑº©=7늨‹nÒ™eâÁÓNºéÒ4rVô.F@ïÁàA®ë.$Ž±LœÃ ¢Ý”B•1Ÿ¶áGšS¥þ\¾Ì4T &~YY«_ðà€L—:;ããÔW‹>œ¸Ì¥EoÙ\ïXÕ=hteñ}ÍEOлKÄt2ÍÂ7û¶½©X3)ü~£k»×€Wã®þí&QÐjþØ-¬[JÀkS=bôjß.¾\ +b±§ùf15®´ð'õ–ž¯¯©²Nt8'„Y’¦×ì(›î)𲮀+uÕÒ‹šoóòH¶\K<7ƒ*”ÁŸÚâÖ os“©ßx¯ÏèÀ˜7›G²Û¿Ä*ÓqeÚdënTñ×`¢ps¼€¤Ñž67õíQZ‘g túaÚ(FüÇ¿a÷¤wYoTøjU5`3ì'æ˜æôf[¯?•ññÔšfÆ +­i3úï¨L£:g¨lcÿFe’´šNòýÿeT–A®Í´ÔVŒkUX«F¯PÒ„Îö‡ÎZ‡Àúˆ+Úw!ƒf‰ú‚°êœÎðÁš6 +ØD,Ó0nú:m<:B—fkšÎðwá´c•™]ý¼ß» ¹—óøk¨[éIÖËDÔû}„674Õú1±cûŽƒ|»~ì©—RÙtèˆ]¨v=ˆçDKÝõ"±$œ sšÅª&0>Ñ–2_D]q•Ùòm³˜ƒÍ áôß“œ0—žâÚí1/ÎJødõöŸj¨Gb.&¬ Ï1í§›Ë­Ésõ¸7”MÁwÓ¢f߃µ’hÒ–ÙŠçpzçöË<þ }i¡ùf—}¢Æš,žØOªš‘¤Pë[Ž7pÖxŽ!#8À}ÂÚ/ï‚WÙ›{Bg×›.#Q·$¯Ôio •¸Â7A¡gÚð;û;#Ä-:úJð±3Æ\‰Bê%Ž·×©CîÃèþåçï7ãW®€Ëç +‡Ý= ¥Ç±Ü“ùº¶s¢pê³l\œoj\þs²×N¢ Oãå¹9Vü®§'-É4/ù^5°¶xlܤxJLÒi=¼'-7¥ªBú˜+žÁ¯ŸæÎÜî +,ªwÅb]õË— 36BŒÛ‘L' +(AÿÂ"±)>ͼ¸¯»Úuœ{:,ëëAðhÍptâðú×ceé -’ºªÖÌx×4±ÜÞ´µnÊVƒÄ9þma+ú¡³Ý‘jÀŒ}¨ˆ.|s|Fm£Ã‰-“ì±Á=-[*G›<…½Ùü˜ÿÌ1ºçÿŠ:ÞžA®áaÁÑî<µYÜ<°oV\ø²0`°’CEÛtZþòʧ~éÜY«÷‹«š–¨9ãf@"6Ìm%ȸqã™5£&Á“þ¡Š$©¿P!™AõaI‘£çñÖÊË‘` g&C׎}]ø¡í¬WmcWRŽfüzÛÌÕñ\7ÌdyQøÀTH¦gæbºlV`ØhTK³)*K5xÍ &0âEµ<Ò;²¡¶”ŒýšŸq=ú +Ú­ÿ@{Œ›´§=v]vlUÜC?Lb%;ôx´iªFS^8×~zÛ(B+déºI’o{TŠ©ìk}Ó,r}~éˆöÞÓ0ÀªjõÈNœë %õ1ûºI,¢45rD¦&ö’¼ðÛµ Ò +$@éSÒÉeÃÞtw1 +C)–7»x¨…p‡4]»Æò|iqlûš+“oOjØW³¾½}Ô-•ÀQ¬4‡‘Öä8P¼»®DïÚÍ +~Cg…1­¨„ëâƈº Þ›õæ€ ÿ‹/¸øcµ.ëvLq%cTz{¡éèÅÕar¢¬?MF³âóêù¬¿Ééçÿ—LŠ#;'.vËæ/nÆ–ØÀ@ø`ñÉ0°Â[ÝÏy‘cª»çh80)ѱú³Y­bÅÉ%œ ôç +!!ç·îŽfë«coÔl ”Ûk‡ÀºTÅŒØê+‹Šr³Œ¸{ºSî­Êfû@9*@Ôª¦å…D\Åíêíõ©ïl©ëeG3)‡õ@dô¡ÒRç{ÖÃ:jÈVz8q`Ó›'²Q¢dÝfWb§ò +Ë,\m@ ­0B5ÅRBËÍû³æ† +tIa˜+þ­Ùbñ‰>£¶tÕ½´NK(p™Ö†ó_®Ë$G®\‹¡s¯ÂÈ‚úf=9õßÿô󊬂aÀ¶"啕—¥ÞÃ’ç„~êGÕ7÷Ð"ò§ëQhØ/ͱ‹Lê92fèÏßÊ©¦d VÎI:ùQÎâÄ¥"_ΆËz§#'´J»Â– Bµ+ŸŽJ «sâõÎÇäwv§³^]ëµ×°IËRz5Ç2Üçu›ÖÆèïÛM fK 1 ‡¹ßµŽöécÛ/J>õÛ:¾þoÒúÚ= (]6®Mèš‘QxÞ©„¯ý„´Ï†éJrÁÂôÄfxª–ò¯Í¶Ó¹i( qã dˆW/U^Yi9kQ'õ)ß|Å^vº¶§º«Jí±p&‘•“ÒR‡µÑìO¸Zˆü¶H!Ý19Õ§ÒmDC¯eY§ÎR4qÌ<¹ÜŒ¯Ì‹+i£~"ËÇK<ÎGlfsõ¬¤Gð„ô6õ3´üÓ#«;ZB³6Ë!D;c˜³$sÑòl~ÐÎ|BK3GÅ¡£]ó¼w-¯SëvHU÷Në5Œ5|ÃʪBBA$g­Å¸J Y‚‡æ²ÕÂb4#ÒjÐËÜHisíñ͉rLòžW…·ØäyÒsý/ꓸ]‚«1â—t¿Æ=&®+9å©Q#9™ªÞL—:îÅÕqlã>ï zú¦~8꣑£’Ø~@RßáqÇúŒ¨-,¡4‚ÓtN(,Sš¶w8Át¯`Ñ WݦFb›TKå-úª’U¦ïÉ„¡¾¾>>×%±Ý½=ã+æìiŸ#Ñ°™˜¾Úsš3$Õ÷¥Ýƒ]¯MçY4†ÈÌÞHR«ž/ÖS3¢ŒÒÖÞuhJÊB[ôpØã¯ù Öo?ÒkC»©€®3ÿŸÏÔ§O!Ⴏ¼Ehņ¥Ø¾z„F-†Sg#ÒEº5¾q_lýéª>8$Ç1aÍg’ÍZØ9sòÖ÷ŠdNÈ? icB-42‹½Ž9&©›^‰IfÚ”kÒâ>¨¥Í +ï Lød9´à §ÒžÛßg°ÿ´(eÇ~“® +ýæ+…t+Hßn7ví0 šWÛ–FBØÜš­ªd¦ +…b-(#Z-{§u¡ ª•¥±Óí¡€÷6³ó2ÑÎÆ{Š›ÈÐ8¿Xp%:!„j; \KtÌ20<Ñ´IAq/H‘Õª av¨›?Ýn;ƒZúŒ׬4÷M'N÷*?¬£¼b-+´«‚ÛŽNÈŠÛÐØá•xb°Wäâž8ð¹½E9.+¬á.ÏGc€sÅÌ9Úû-ñœ²"‚i(L«§åg‹¬‡Øt‡5‰À¢òü2ÖrOÎï…«¥½ª!"ؽyÏó;ýtdfCÐxÕ Ë.øSòºFT¨¬ó2ƒÅ·]¨.˜ $:Í®9W}R{о'äî sæ3·k%ºÅÜDQȹ♤$’ò¼š9½ä®ôOÝ̯:zfì,@ÀyÛÜ;ãvê‡mQâY/‡5ͪ\ÊK]¬'>c_!‡¿ª¬t8zì[¥½ÿý$y¡?¦/nÙ\Öøý·$~›OÙ6 ¿ôlQ–ô«ÖÒPÚö»²4í?¬ +0—°@õuH-x5Ïàã:Ñj4å"M¸¢As’¾ù­;i:v_–l«$ÕízÔ)ÃGõýËzÓ5ÜX›ô£hŽ.¿¤oÁÆ©¢ùxuÇt×Fmt1Ԓŧ‘ö¦ÆU«áëíÓ,Žl,s[W^­ë!ªC!c™…^Ž,Þzá4/Ž!«ÈŒ!B§¡ÁPŠ³¸µº|Ý(hdüüÆitÂÃb…¦qÝ9¤„ÝÓ(òq +(௦˜VËéNˆÊ¡¬žª³¡-Ü%J¨*›ÜMƒ“`v®b8K°â¥7Ï€šöZuj++~:ýýKÿB²ðþæ$]c €æXÙcÃ|8A€ÍnÛ-…¦FWQZ›‹ê›êzŒÔÀ 0mYójü ½±ú~g»z¯8Ò-ÕáCÂäëwû—Æ ÷•Òº3¢h‘ìY£É1oP¦7žqBˆk†'îNGûªÕùÁ×-¸ÍÅCïß qb¢ud?¶$«Þoâ@› ´3=~w:©:¢øTŽv¥å—/å$Iîú©ÿ¶ðîúØÑÊzX`_W…X\©¦ÊUÛhçßa:mÇ£uäŽ,Ø–” à ê 8𸯹¢U<ÔPknS}}±@­÷nÏ®-, +Åh¶ª¡&d^Ú­Khš"Þ8Ñ·ý<{™0‡Debt1+"SQ¹Šý­l·!K"è¸*‚•MUÜÍ0=ž riÇùaë¿W¢T-;ýS«¤7°å¶zÜ©C¾Ûïú;‡­0Þ/¢qÞÛtèÕTÿ ‘——;öÔYíÝcc  #À@sãjÐÊHçwP@!ƨ¢c´®ŒmúÛÝߦ(ïõØ4Çl`¬áן!Iây*yX ôƒàS‚$–š~æAfŽ/2EªÒ/bœ)’ÖõLåÆZ!4óm~hK@趌bÌÓpLd·ÿnUÜ<}íÃ*(¿H–Vwk[±²ÙáQÛÍo ŽŽ(5—!+IJJŠpŸé^9%_^½]Ç#™U[ÓÕœê—üý‹¤p3TéˆqIT±åͼÃ3MüpžjG•ˆeiP¾L?a7øTå9Rÿƒ€/Û»é`¥Íƒñºfwp ’wçBè8vP£÷0êOr92ÿ‹÷P,íKïË|Ó·ÞÌ"÷Éì€xhµ%Õíè{Ÿˆl‚ÌMZ‰„O`ÎeJå”ÿ€·ÓM±Šñ Â.¥¬b‡Ö;Ìz§3Nl¹“ +4¶äô'‹z·Ðõà‘>X#˜2±–ÕâŒX5¼i>^—VŠA¾|ÂqIŒô¶ÃÞã•Ð˜IBÐ D!ËM)ÒŠÚظ{ÒI3Äü[2Óm°ãEŠöÄ¡U“Sk%‚©*DUÞà)¶QF/Ø®L½ÂbËç1u 6\ûÅ>Ù§Ío_ºëÄ¡*êjHJC n,HáÆlmg»ZÁƒGìj¾¹ó˜@öñ·ƒ Ý.Üš Çèƛۖ¿¥?ÐÔåouàþ1Ì–©ö½íè‰ï°¼€QÕk+‰ÅÅ8 /hgTVidî^Î!mºƒm€õßf÷ Ê›º†mºêôùÿÓ3gܽæb3â núÆ!—éX}I.'‹ï_7̽|™²BêH}'£‘½²ßï£$ÓOG5gK­\¥{æ]Ê ‡Ä…{µ¾‚#jæºLSÇ4«S6ÍÏ=d9È0èÓ'Ñlxþ²{1¨ ¼Éáªgb-¹Ïé¡ûÿ1¿lKÞà‚ž< uÆ3ø!Ñ%hÃOe{bÉC8b}8CJ×s9”0²ÎŠÕ`:ýÂÝj‡ó8­ÐÈ@j¥3´Bç©ÙÀp£='“¸%ÕÛc Ö«WØÈ0U¹?@òâBI8œuÀR*Ä¡auÉ›Á+>6u;”óZ‰`ukÜ!ÂC³ûo@“>3ç|“Ý !¨’{OÊCõŸÀöE$ú?ãe–bYrÑÿZEn ›˜‡eh úªídÇ,žTÐ DCgÅ»S„»¹ ÓˆØ&Fc‡?‚`¡m¶Lf‘¶2l¥®|½Þ§Çš‹ó’¢z+±µUCbX…nÑ]*ukÉL¼òHl˜Õ´ ™F8 +”J‰)u÷YÉ„‰?¤‡c­¢€'äÐkÞÊ` +mŸ Wcyüᣱ×ðÏè_ÒÙYKš»Em ×¹!às»˜Ñy-ëÆ$O«"Juw&È“Ì Š'Òæ1-·»Glâã«%,*¹:Zq?ò< ¨-\Iå)ä2ŸN^Ú4·é7¹I»´Ûí=qñ8dy+‡8 ½ì.R¿zÄñÆìù|ÝŽ°÷âMˆ 0§Ò¿3gp?íDˆ¸5r¥zö婼(§ª} êŒ@ËLé Ê©C-Óî ª’ž_xRða'ò" {5Ifnü¸Öƒ•X$\l,ü²NqÀ¢ëº‹4Žû¦y¿Ù™Öž–JžGµ/Üs¡Åe˜A=bwJDœóB9‰ ‹-wÒL¬^‡>ð„³íN&7ãjxÜbJÓbâ(™¨©AMlš©m$Å3ht¨}ôÕU*‰3(†‘,†ØÑ3öªV“ꢸJð"*â¨ê?qÖ9;4HÉÙìöýîúùãï?þ¦¼ÅDÁ{üŸùúןÿøñϯúáÉ¥l<À …”WÍøe*üÅë†À…aØQUèz¼ÌDשûÌ–¸NRÁ)kž^Çñ`ˆJ—–Mت­”|Ñ©¹‹¾PÎÃè›Ði_K¯'bì¶^;g÷­šAg›D™=ý«:7µø[¶>,>ã?/à³èÓ°¢iÍ¡uD·›hjquâ_Yh]S²sÜM¥05Ú¢¤(ÆÍ£$–‹Ó—6[½µø nú#ºPŸž™¿ap†M¹K@³Ä‘Øðã »Ô !½•h̖߱k¥TéEX™ÂB +Ï šëmú·[Œb9i'‰´ø@òßwz Û4cÛY`›¡EÕ a|œøu‰XTÀyíðw½ÅMšæÖèåoĶ!PCBZnbž¥©Ò‘Å{Ì’àrOO3ËmÛ%ÍBA虫b£ó=\B~ z%À­ü2lÑžžQþ厚aر¨¼•L¶ŒRö¦Q'ÃÌ0‡Ìˆ,3ÌÚIâ£å:˜äRØ-ÄJ +t*ðu¡»¨Yk¸ ²‡ê‡¤ÒYPiRc>š›R«½€yOš‹K³ÏŠ3ŒÖ±¿Ã +‡Ê¶6" ‘q\ì³&Ä(Zh«Z¨5üÑêŒRu¾øoÛ¾’»²ìD-ÕÙwc 8j3öq-*͹ŽaZ‡÷/»Ða© é48º–ŽjÅQÍAz£\ÕTr<̵#$v)[c\Gd@ˆ†TÓªR¼ä‚:¼}+2iÉ&+ÂÑÇ“Ø©YÉdLchv=ÚëøRLtÙœ.4€É¨A:B0Q³Î Ä=N¯£ÆÅ1“x'þ|QÄJŠèÎC½Wʦv^C‚0Ù W{e3"$¦aäž›œ«I-ÑGÁy0ðÏæ7hpÄ +t8 Åð˜¨mÉYT”B83Qïéa‡Ó¥eî¹pèÙ´-ìÓ ƒÁ£¸Z¤wšñ¢^Á\ÖÉb«T­›äfˆQEv[ˆcû1%òrÉd¶ ‹­èn¦Ÿ— î¨)àíÝrüÑ%­HáÈAlìp8´©î¸F»'•eBm 3&˼ªé} +£¿*—°Y,–bá®â´_ko¶r#OB½ rÌ„˜uµš‡¾bL„çZ:ŽzU£Iß$„Á¦)3úý„ªckL6?ªAÝÆÔÏ¢L«ŽP»B¦­Ú˜”ubÖO‚ÍtBs0Që¹&,?¤”NC8Ê_|ü§t6ÌÇ1#»n»z^Â[¢ýÊE«: +ÒÀ¥_ãמéùT9Ðõª¶ 5²&JVÆÉѽǦJP°â ¼Œ[¹¦‚Š2À‰ËB ¼9™™‹ÍøÔpQwꔸM»ö‘Z-‡5 g¿ SW¸:g`nc[¿I:*Çñ'ðÎË=Âr kH&YÀ¾_Õ¶™y!1`“úKY9¸iGÍU2 %°‚6 «bý¶’ºî“è-¨hÆì#o÷uŒ [i"Ŭ&ˆ>cp&/׉Ÿk¸T¶d´ß<µÏ’© íQˆPq‚ÅöøÖ1Þ„—32ò5i õ™ðçŽNº¦f­gkð Ä¥NÛí#[¦ÞÍIÒÇ9!N¸î»ÇP1«Ñ´üÝè‚ø~©4%ÜpûnL[®+Ç‹°-êžh«yL*'tH$5F»`}NjÝq­Ëy€m»ÝW«rlvçŒGîÅ>¤‹*zAÎ-AfÅ8v"t˜ ^Ìа»iÆXvìå[õ\lèk8Z|‡ö! +®IñæÎ$u'Ýp!¯4A$e <þzr+WQ­Í¼¸5`­! ޅêÛúÑ(6¡e³3£3VàÚHk˜Ï|™ëjn¨y]LÓ¢7r³ì·Ç\rÑ~¥Gd~'¦ÿ7}ŠvæŠîÉí7ïfÚ½·| Éq¨FÿüpÁ&.±=•›Ç”ÒáöV3öª¼“› ä ;Û§(u'Ýôg±ëˆ9v³%Í68ûžoº7™fÙÔ’’ $­õDŸIŒq!¿º¯¤™…cîk5ø“´…~Ÿµ,; +Ø!ÞP#ý6UÚô˜‘öºý }ŒÑŒb"çA½ÄŸójÊÑÀ"9ƒg˜(Í©M56 K©ªÉoª_UÑRÍÀ—í\\‹é4öò&xÇiÙ„ +u¦æw» +•«r]Ÿ¾†YÇ1r¶i²øÉmæt´½Îø(Ã6…‘ÖÒ0ÃÒœ,»y¬z9-tzÄ +™öBà½ZHT EŠÀYÔ„ÐýØâ¢ù„P€_ÅЫ+“9_ ›ëíù­+ƒÌadÏ t^DílϦíUgÀDÕèn†É>ÂÿQ!•£ ù¬]ikOb$K[÷»mñzL&8o2§ð¸í/aUëÅ7¥"Ë1ÈSj瘖¡˜#ãt<ÒSbô±RÝOˆ±|Æ( ±{fÆv F ~ÝäîNð¡mïg}¶S«X¨õ'$õÈJÓ¶uÇY¨¹iû&{º*jt‹Xw®Âº5Z]¢s:(ðçÿˆ¼lk¬)Ñ‹!‚ÿÒ&eìO±~z_CHLfc6Ä“ùXó«X…Ytÿ‰u§»$v‹5ÎD@ŽB*¸€ ½š=åœv–÷y`_=Æ$f¹žã´uÏH;6ÅAN(Â}÷Ò(WGÆ›‚Ó^‹(BKé´\p’JXíg¥™aч]è­#9u¡?†é~S.u,ÚN….´ì=VÓþoÛб\ûݎ˧PkÙÔ’™“Äj›«qÕ;8­N¼3+Ó2áç<¡*×É,;ê£ßXÍ…gÀ›Œw;â÷µ·ÀîZ÷ŽÅ_À0ÿS)kŒÞ÷']e,ágj¯å]ïŸ^S^ýp|y_Æ°ZÎb n¯ïî}íµKÉõs½b¤´ºü• ÏhŸ¨cûîÆÐãmŸ^³ÂÞ$!©Ó‰íßT—=².µCó; +†àÿŸ˜z!c Š柢%¹/è”û|v·í½¥¥ohÈ.‚øíd‰kö‹sC0Ŷ·ïè0êLå¢-Ž*¢±áLÔ{Ý Vj´舞­ï_Å›•â•“Ëî6Gíoäüù! °;ÑW­ã½bp\¢˜Îíæcèž_ΚL·îà ¯¸‚. "ù%õÁãyÿ®íE>jEß>—å–Ó6KÏý™ëT½ï~ÕнÙûM(–Ö„ŽvBçÝ¥ãé_å7]OîI.L®tÌ +únN¶•k–f°*ÅóE¬¹£˜P¯a¼uèbؾ2”OCÒ!ƒT+&®ãdÊØ ¯ÝsÝ‚Ë68ŽNÍM-¿ñ2:†i‚+ »ä*Ï>5Þ% pª†¶‘åÚD `žìDAûAwtÕ/TúmáÇàÓp1Ó¦ý‹ª­øl¦‰©ö+§¹QtÑrð„ä¡&³¦Iچêä@7pq¬Å+7ûÚö‘Í}BP¡Zåc¾iØ-ÕÎìÇFx£8d©7!nUÛ@z€‡ù¢cdPôpRa]˜‡T¾Ý½&#Ù¡‹%ìÑÕ¿Ó éáŽC +†H5Ìx*®sqÔ@0&Á'‰- »¨üðø+g´,½GG!¦;ä¾=‘þˆÀ”OâšÛZåé‰5¨ŒÄïj+ù¶[?Ž›ñÒš¹Õ+o¬9¼ô<°SãË;¾fÿªS\ô˜åþßF·›òM.œ N[$5†’2cŒd©nÞº-‡Uù4r„Y¢¡ §!Uóû†-@-¹£Ð`)'q9µ¿âÛ¬¬'ó ûx¿è'×Á2þ’–Šè†ùîz ÈÕÓ)3p\ÇõxÎúf_Vy0EÙíŒ}Õö"èl^Yå(§‘2(™õSOݼ£þœÑOÖ('k¶Ù1¢f½s½ eÚ+“ÌHöÊC£‘T‹¾#¤J ÙvÞñUaLÛ~)íñÿŸ±/41WèÙkŸW?3š£ÖH©Ö‘¶Ô¢,ª›c’Y)ŽÑ Ô*~-×;á •¸Ã—¬Ÿ×8†‡ãzmÉÔò»NGXáF¾,Aæ#lêªGäT¸»°ñKÌÌe‡Ð&Ø¢uj>ãŸ4°G%i󿜔< +ÿ"׊*Ý$;Ÿ%=(¦4ïZPjJ älz³´£µÜÏÂùÏè!LÞ)M¥Î•jM¢ji†~Òr¨>¢v$+Ä5>\)$ÙïG;”•öë&èl0M1½¶A^µ@7¨¢Uõ§‡á«ö*#çþD)8mC¦ª£@ïY¥¹?4Ëz®XÕt;Í!E’4-vZÏ« Qñ¿¸lGÈåYÙ¼ÖÌmפmÄá¡ÞóB½hå³heŒDšŒê†f7태²£™6U°Èí©7Ö€p=QíyžžÝY”¡Ž~z¬k÷%ê2o¢j_ýžÝ^$Ì:u’h^Y|dR„Ö^í™ÅàÈy“2Ê}…ðªu¥PÊó’•P£'g%bç¯ÎDá1þûù-ÛSqÖU=.o™ÏcaÊb\>‰ä*ÿ4üuÈdŒøP?-ççEòŽlÐUÔX¾8¤ G‰ÅŸÙ¨Ô0²(fúÀ¥?aÉ©¾Õ篴ÍB'¬‡0Š~ªÒJÔ¹Í + 7g†f~”ÐÓ7‚øbµˆ”Öy2C\UìØ·óúÞÂrôÂBÌ wúÆœ¬:VãzDéhã Xbx9lJPÐrÛ  h]ãI^¡X¢éFOrÞ`.ýßã}ŒwÊ·‡׬ÿÞËìûÿ¨à?þüñûÿýöë/úóÆi,u +endstream endobj 82 0 obj <> endobj 95 0 obj [/ICCBased 49 0 R] endobj 10 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 11 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 12 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 13 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 14 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/TrimBox[0.0 0.0 300.0 300.0]/Type/Page>> endobj 104 0 obj <>stream +H‰ì—Mnä6…÷:/Ð4É"‹äv:AV“ ð"0ò³ð˜x‘ëçU%±Õ3= KÁp«YMñç±¾§ÒÓ/W÷ôñ܇®nù¼GÁþ/òñÏïËoîïåéúÜË› ¾TÂg-ò™29÷ö‚ŸÂϾ-Ÿ]tÑ¥Ì>qf—(ûØCw/ŸùéÓrÁ/…ñõ£§ÔÜ¥øPóÞ”+¹—eôXõZáš|nÏ]âäC‘j÷•‹»äî;W÷:Eª®‘Ö|Î »ëžz–H¯>Éð|O‰1rœ;ÅXŽ#í¡î9X¯|,4–Ô·®>yî˜8bMš(Å9€}fÝÈ*žu§-£¾Ás©zô±Õµ-w`z¯=R€Hµn#lí}’=Ô| +²hŒA2j"Ÿ*iÒy ãøö>1ö•d´bkmQ¦”›»äPŠ‘4¸ÎâáöÌMCÌ8gÙmÁ‚¢ ÊÕ÷ ª|!ž›¯:1"U'äî[‰{DdSœ{5,G:'tžšýLÁ©Å“}éMw|&¶Î•ö€ÜÄ„]ǹOíf -2M¶ÇpnÈTÍvȠׂäcíA!‘ܺ/8ÝÎ@ÄÒ¹àìÊ!œx®v›Ø¹M‡&Iþ +äÈfï‘ç/F™k ‰”,|$BÒIª%a¦= i4ËÔ'fŸ5c1JHy +ˆ˜VnÚBäK”ÖQ IŽiši${±§ç>s蟫¤’¨Žlâ”fh”öÙ˜…4ãØ0JÁ·¬k×lîM®˜­i¶3+Q”Í—…õ„×6`Kš™XnÞšÃáÖ¶ øbSÿ„×.,¿ší^Ÿá§ò瞯?Ÿ{Zìi±§Åžû?Xì_Ë3LÃçŽj–¡Vδ¦ŒÑ›I˜ÖÓv£ÅÏTÔ"f'™¦8rJ¸à<Š°Ýzsp:flWíººLº²W]bh.'ÔØ=„ƒ‡ û¢µ‚J«_eß׈µ&qÆ13 f2¨h´6 È—9sö$šË‚äð耄ë°ê½ »¦Šñc±œ›>J:²+MO'¼à<ÿu§T¥²,›4jò”Œ¢‘<(v.*’b•ŠÎÄüT'ÄU(õ7QJ-²N#m¨¥;Ëæ÷Ñ;*Xu"K·ç +NÎZ²Dû¦j‰%ˆ\NÄ*âc¤¬«ZZ2¬ÑK§UÁ’žÙðBë¡‚å9Àên¯jGµ“SÅd *O¹uÊõn¹Žù•ÅÐÀžMTQY=&0ù@`¼EÐ6T¶w˜o,7 ¬+㨴è{í¡Yú|]ŸcE)­‘yP¨0®wÀåoÇpüUàúpM¥0ä²Ö +\5àè¸8€c.mÀñ8;°°óÅÍ[àÞeO§V´Z+,yC¹Pä3aœC…U +zàe*὆§7Y•PòTµ#CÓf/dhŠ€ª[s*£ìCU«NEÔ¶h–µ8„çªfÑpÌBƒ}‘sž.8F£3 ³öŒî¢[]Û¢È9EDSÏ<}êa²Mè&Sˆˆyp‰5i¯=ßâm™uêõ@¯£›A¬Z6+/)5M†o€ÙѨF Õº¡i¨*ê÷—M²‹9¾ÊUéPÍÐ$·ª¶Š6ŠRkŽ’Ô8ÍnX¾A†c]”̶^—A¦*œaúSqý›[ Mµ¸Éúïíìë¡Xwµ<Þaá‹(N›9•ˆt±®UÄ ˆ|à°¹QS ë ‡Ùh++‡eã0¯Æ9¤oqXsøÝžuªô½N•RôŽKê­ákwðµ_ÛŠŠ>º£/¹µ¨8â·–ìÌÇøÞàG_Â/ tÚJ_YÛ¾x€úÔ¡ØÃck z<ÐãÇ>uJõ@*Ë«?^.ÿ 0<\²Í +endstream endobj 105 0 obj <> endobj 106 0 obj [/ICCBased 49 0 R] endobj 102 0 obj <>stream +H‰ì—ËŽ\5†÷ý~ã¸lWÙÞÒ V¡Yð#.‹€²àõùÿßg:“É(„›V”N\Ç—ªÏuó›¯éÍÛkIß|{M—÷—’ZÙþüõËåçôçåÍõ¡¤Ç©d ¿Ãù[{KéÃ#>Ï¿}¸¼O– +þXªµç=ÒŒÜÝjzüãÂ/üõì}¦£çˆ´ò+†ÍJçh¦ÇËa5·2ô­åðÉQà ri–F^Á™¾r‡Fn¹—šÞ|÷Üg§À<ÏÕ’ÙÊ%š$5Û HF6ÖS]Ãæ°:ǨÉjÁ¡Ž#J6.‡=!› S[fƒsG†=nTgäÑ3ô? –k<Œã™-Îùœ^-WhoͲ7XŠ±q~l˜q@‰R'Æ ¬µ",YÓ„½kÒ˜\)X1 Çviu³‘ó…&ëçÌ :N˜š@k*[—µ6¡™›Dž—Sq†‡4­Ö09¶-½H5k‘k YkÁ{ë5{™p§­ çW-p˜×qnÖ¹g_yÍmn3£ÇÃwxw¾íçžQ³6r'#¢J3hÓyŸKç,Ë0}úŽk$‡¶]¤9hjnOHà>†qiû„€Æ+ã^8\0³ŸC©Ä§c[Á/]x)‡ûÙžO‰ÓïN'éÙ¹1.œX½;­‡Ÿ"ÝöXÆ=zÔgã`c‡Ð–l†Z[^C6!†qÁdÚÉ*õ–g_'£‚‰½ &úS\­NAñsµrE pGüá©£žãO­¸„'!6]ûÿ¶¨km®08ßæµãßâJ +&0…Q³‡ÂP¼ ’ÊÁŒÒ”y/¿^~Úéêú€<Ä?éáúÃ=5ÝSÓ=5ÝSÓÿšš~¿< 9}ÌDÿàåÚ‚?4ÄÊ-ÁM÷ åGA̲cnâ¾:H \˜×¬n +á$‚[[A-À™‘‡õL"¥ Šº¼]Mû¡!FñíÇž*]ÌŽÊ#ÁÏàñHm1qþ¨…)ðg¼Ã©±…a4bG.+Ȳpe;cט#Õ”pPÞSAÿ€f¸:Öx–ÈמּŽÕKÏBö€Ø£2;6”‡®ƒ¼< 9‘W$âBn>È«²Ld7¥Cp’—€a=y)ºDl&d$Û•±l¦Í‹¸È`Ó:„ËÓRüÂ…u›×!` +½Mì ²! +'´CÔžÊeaÊ'·¶Ó#ÈQ"vœfÌdd‡ÝˆN + Øþš›ÝÁ}5¸ísHtX†ŽFS/ÂgD§)“cWäqP$ì‚ {³ú¢C’6žÔ˜“ƒE“*ÏÅ Dg|ð3Ò0³Z¾»,9«-Ëyd¦Ü ÷샄†CeõAŽŒATeH”°kUu~ °ÔÉÒÃòºÈ5yñ\ÎÀ,hšqÛÃÐÙQ«Œý‹ºÀÓd¶Šì+>z >£þîàþ¸—Y¯v6Ô´Lì%1‰¡ÜÉzÐÃt\a“/lûøwfáßéõ¸¡Óö‚'ÉR»xˆßH¡¾”ˆ&qT¥åþßIî ºžD.d?âFàÔëì1¹©Õ9¹Ý°ßÕ?Õcj½{C0«IÈz:m±×kê׿ñú¬cs$[$q4!}=:b²&òtà+YÀP¼Ð0S;÷Æh­ ¥¦W4­39³KeÚg³ª@èzD:nÌB—‚šÐAÝÇ씽GSeaHàï‹u¨øœ2Þ ¤xÛ,½OØŸëm‹º¦çW=k ‡zÔ6ù,\â•À^§3¯èúø U„Æ»€æj‰Ùç¿Ú³Ýi}‘Ök]ÛâKq@RŸ÷ ÆX2¨%f @ëJ´NmEMKr£º7r‡Ð5-)!É OÊ &¾ª^·ó +|ƒBïÜ‘üF=O„·’Øu½ü¦ŠÁƒ€ìvÞLOìÁkŒc_»C!¾šDJxžÄ®%ö3é nvÇö•Øž:6nÂ+ZÈ[E§Ú+¸-ô®Ëíž±7µ §;ÐàCš j¦£«Ý0ݼʾè-gh~o»ny„šß$mìø;€Ä§šû\›ãdÁÉŠ0æ}ÚŽ^F±ñºvøÎÞN–®øYO˜l“À\»q.¶àÙÃOž³oÇXz§±&ðö…”EÊ·7yµg®hŸ6nw~ÿßg9p"˜+”ˆÏkF0ߊ]°h8ƒHì:«F?ûª­ºá¾9¤ÛÉŽ ÔžÝØQìˆ.¢›;ˆŒ¬šÌºuV>®D¯ñ3n¢‡Ûܹ‚ìÚØ¥Ã#Æ¡ç× ŽÜ|ìʱة“Ú®“ˉlÇ0ž]âÕY5|Nú‹#®_Í}w\_Ƶý뻷ׄþ`È~…ñ +endstream endobj 103 0 obj <> endobj 107 0 obj [/ICCBased 49 0 R] endobj 100 0 obj <>stream +H‰ì—ÉŽä6 †ï~ +½€Õ"©õ:• §Iô!PÈrè`Ò‡¼~~RòRÕÕU“s2]¶hY"?ñ§¥§ŸNîéã)¸ßÜôe +NBÿŸõçÏ_§_ÜçééôÜùÕŸŠà·$ýå(νžñø<þýuúâÈü‘㈮$ÅQ>4wþ4é£OÓ}ʌ۹úHŒy|àêææsŽn.ž*zOs‰˜ /†—Õ|æ¬íJx#;bK1Cñ\ÈQñ•ÛÎPàKf/)¹B¾Ì\ñ ¢‰![Y›¸„ZÔ…Å€çY»'²¸àü >K-tnÙshËS + Äe}wm¯ƒ/Ì.unq˜oÃÌ XjSßtünØ¢kÕgƒøi›BöDi´6„„á,Ô,ã² +w +z`y¾JÒ[õ4±e#„#úb!-Ô¥MºÔ¶v›)õU]^ŸYñð6øbЗÆÔ[ó­è§¤£,î¼ ý¥%ÆaÚ‡-¢Fb°»aQG›á3þÈ·FÈ–¶¬˜vIÈ‚¸3è ç¶-¢Ù’¯Q—i@h†ä‘%ymkRiÅ­‡%YÙ°Öi\©³Yk›F_鉮³•Üg–-âEOo-º6’u5 ‰. Ð¥»,PØ­•í‰fBÝ–m. ²zõwƒý§ß¦Ÿ{½9=£èŸ{>ýxÔ–£¶µå¨-ÿ­¶ü1=£ºl¥„0$iŽCñEbÛJ‰º•+n…É>< +M‹ õ—[r@£Þ(!ý‚p±7eQ4ÞkÎxA©¬Nj¼âjx™Œ—N©À ÆkßAqÑÞ\©F¨†K.²ë€õ•°Þ/YÅKÁÔïH0ß• w –K Ö;¤¡@ZXG³Ë/©ü û.¿Ú¥“¯å—Wù¥.?¹–_¾–_¾–_ºY­@wÝ®Oðˆ± Ð˜¯7ÔV‡ÚÊP›t%¥®6éjcz£¶v©¶JCmÙ-õ|)ç&·:šÆŠMnÑR>¯µÜPÉjj㡶<Ô¦Ub롨xoP¹Õ!·êæÒê&¨žSØ’aw³ÖéŠí™{=Þ”Œà1,qÆ6“Ó!{ÁÑi\´YPuák(d_Ú˜0©¤ø’‹Ø`F#–,õcóeœPš•M‰Ë>áîƒñ6ƒY—@/Ô÷ˆdÛ`@&l[«ˆ5јê1Ä«îNH‚òrÓ™“`܇¨#ÛIóD­SˆîÑ}îŃ¼nü58l¦qa;ÖèµíRŽ.7Zµ‡Ô®kZÕsECšQQí*r󸱾`œS©WÌ™C+2%¦ šL¥«Äð °q<•’²Ÿq~ÄÉÆ­hg£Ú߰êñRã[¥ XrØW÷Ó‘ÓψÙÎÅÁ Ìì«`Ð#:§–eÆ^J[ž0óÍâv{Lì:ËX«`ã÷•)÷”Y¯”ÿWeÖKeÆo¥Ìv£žÄþ ±7Y–Åç’þ4óiÆûÒlÒ¤o«Mº«M¹WÍf_ìgÚ÷O—¿TÊ +endstream endobj 101 0 obj <> endobj 108 0 obj [/ICCBased 49 0 R] endobj 98 0 obj <>stream +H‰ì—ÛŠd¹Eßó+ô©V„B·×)ƒÁ`Sþ€Äãbèn°ìß÷Þ¡“™G§nó຦ºBG׸ìXõé¯áÓŸRøéáôéá1…Ë·bi?[áOµ·Ë×Ó§?âó?¿þ$$ü'¡X:ZÕ8²I¸|9ñË—ÓÙb×$¦<ÂçS‹’,”K®0E0=‡R¢aõçÓÓéçÓßæñØ—ÿ…LJ¿œ$ü‚_ÿ~ƒ3¹†'?âd ÿ…õËrL‚íƒ4‰}¤Ý1¢±·Î[å9Ü`¹^ÍMƒTüRÄ^\מ/Ë1õTƒ”Môåã^X&±(^+%Eixü¯¼¥8jéAìèÄwÖuÜNž\bÖ_^ן­S“ˆ á¢*±Ö¶­Ég‰V¦³æh/1å€tljŠ=ÝsE1Y#ö<ãÜP©±eæ`C©ÕÅ ¥·cïå¹dDÁW©«rª`Á+Ëøž¬ˆ“«÷_{šs +Á2\·´ãº×CÉhAê玂*/¿.¿°®ÇÑ*“~(º7Ïçœæÿgþø÷?N_wûÕŠÔ,Ø.!G­î®®±×ŒsbF."|%)xg4ä,,åׂÓh$Å'TU—ÓˆE¦6_÷…™P 0 +pDKz5|Çi3!-(MlŒJ€<4¿é铱¯äY®Ê baæésàL©þ;®q†ƒ«•p†¶–æëáqA|q¯ä ŠË·sÁ<<¬ÔBS +Óxž¶™\ÎíÇý»Æl¾™yÆ¥èsŽÍ*¯â‰Ìø§¦ÂðãõÖ뫸”//(´ØàS<ïJÍè¦Ñ<>à~ëÃüÝ ¾¢)uoN¯Þ Õî&ä9Þ‹Ç3Ëψ ½Æ°Â9œNÕ +È¥Ìì;gäwEÕÂiXœáÔ„°k4ÍwóvÖ6 ¬ñáß³b3„"}xÚeF`äMi¹{H± rÝÌ#ÔàGå}}FÚ¤Ôƒ¢»@¦i +¶ã׋ß«q™1üê¸>àÔÁw£0†÷.^Ž¾œ° +ÊŽ­SÒ™ý¢°Hf²À{ˆ>¯Þ±Y‡öUÞ+ ñ2³`¶6s"‰Ý¸¹Î‡D6œÝàs6=Ô) -ç^N8p`KáñôÈf#hÙ(šøEQ¥ð(Zm¼±¹Ë4{Í öDÛLF:£ëAh.œ;Šû£z—cý ¿• v¸$ÁÛy †L4v›^ºWñºP¸Õ +Ò_CCÍÃOÈ+`@AÐk§ß!ûD€Œùܔ̚ÜDMʬø¦ðr‚{17cÉ×–FË›ì‰~e†ƒª·;¦‡ Yw §Èu wwäuGÄ« ñâ4ƒœµAkÕ/“f¦hH5^¶\Ó}TóÇTÛ2Î2Ô|€¯®îcE {: µYèÃ2<Å1ÏJ™NöDBwOØÚ£0Š í&̶(ž¬ß-Ä4­Õkྮ½¥Èu`Ë!n8— Æ¨9à’€dÊP”ê²6P´hd +¡  xpaÚSáæ}K1‡™Üx³¨«Ì Ð'ͻ˔C PAð£û“å8b϶íðjF Ķºµ"^¢]'J0nÙçT->ÂÀVŸC-œq·¹&\ÓÂóeØ&þÌ—6Kr&×nd¦ßu‘ëönÏ™·gw¢†äJæêí™òó2­§b¿J¯n»ÖãÍììÓÈÙºÞQ þ]éÎG‰šMàS™åÏ.ÊXôYÁ°…PéÔì;£¸é#la-þ—Ýý.IàéGa§Šž¾+xú^ˆàéƒ >˜àƒ >˜à·e‚Ud>CvÁw<@-`¦½Êzà]ø@ö|ßâÛóAÛóA[ù ½Ê¯Ð­t°Âá à èÀÞ¡ƒþØJ²§ï”;<ȯâÁì z„}Z[à µp`y…9À"µÒíé`aƒ¬\PV.Ð;ÌÖ¬ïPÁ +m…‚¼B›Ð Ê‚¶bÞ±€/80˜ -LPV&¨G&ho1AÛ1A¾#ö¯ØâÓÞAEÞÜñZ7 Pzä=ïx5e¶ð€¡H¨máæÄrÚóê~m‚±Á8î@ ÈG #Èz;¼DŽòôí h+Øôùú0CÊnߺ²ì€`,@À%; ˜[àß;$øtÂlÚx åðO²ä=@Ó< G°öŒôèdϽ=ãyÆò.èžô ïð@Yy /@`{ hºAYy .8°Ò€^q`ªÂ (7x:ýü{mÿO? <ý(ðô}AÀÓ÷O ð ð¿%¬ó¢ó¸€P$MØ·GÔfcØ9˜Ü9f‡uG`&ƒŒ²™Qćã>æ,®,Ó•B56¬æ£ñ‚êÜÙ.žlÜþ(-gbCu[±Ó ]Ä·iõû¦­óL—âØêM#å>@³é´MmÚ+Ú*Þ¼,“:X*‰ŒSÍãÁôNìH©›…é Á[àöÎ@‡g»d¦¢?¼¸œ$³-`Sä/‡Å‚Œ09 YnÛ"*ï2'3»9àiÆÞ]¶z;©êt|ÏeÎiÛÆ̺eÀî'ù[i›òÊ!s(ù>…)X¤•EªB#vâÊm–Z™ñ^:Ûßy@ mVGà ú7f1ójXÑoyŽ$VàÂæ{CâpÈ=Ù„vvšÃ€Ö6èšRüpÖ4eí\H“µšl–“· Ð ÙÆž„¥:-Mçá498Ý@l‹+4ï9 T=kÓ65“<ì¬8ã½:1AŒ>aƼ.…1-iÈÒ.õ:…Ìø8Ë.þP<•Ò™Èĵê’{5/§ª“H¶†¶)E +×u +õÚ·#I›ä3‰œ¸QWL[OMÔ>¹JôfcÈaï:Cgãr Y]ü=ƒ¥,™pl[±£Vá6…2Õa&åÙŠM}:S¬yF58M2¯ÎÊËNŽÂJ¦31žæèkŠ P½­áFtÆ™'nSLh{Âpd°=`¤°3²ÅÙ\Ñrž63ŒÊç#T(ú ©FÎüçpÉÆûW<[|máØÚAœCzµ –Uiò$¢Òæ 4iínq€:kÿ½B ïamNjŠ)T¯yrÙIâNV¥†±‡b¢¥Fð”•I£îøûø3Ö&êIùG‹äƒðòNüû„CmÁ²‚V²_×ÁÔ„'˜ÃJ‰~Rx¯½b^hpüm¼à¼6‹c-Ü;.þ´oÁÃ’¹xÒ›V Ç"xb(¼Ícý0£¿~Ÿ&tB¢Ës¯"÷®HoýuÙRb÷ˆö?WlV|¦ûiYçf#> endobj 109 0 obj [/ICCBased 49 0 R] endobj 96 0 obj <>stream +H‰ÜU[j1 ý÷*´ëJòû7ÓP(¤!Ü.`èƒBéýÈö+ÍØžK’ $˜1>’äƒdÏé~ÓÝBpóe÷ìퟷéßO÷žÜi9¬ L%è\’ÍÀeU÷Wuÿ¾¸g`  ¶VÔŠY(ÃúèÌóè$c©¶-VŒµç‚±´ ÕÏQ`uÃ"VŠÐy^*Š&‹ÕùÍ3°ßhuÒ&žq§¥'î|ÚÆê~¹‡]îr6:à¼|w/ºü«ß7ø:ÿ¸³*}G ·ŒíJH‰˜šØž’)©˜j8°,ÍRNK(Ði> ±™¾Ò“™o“¼[üÎËï3ìaê™G€ëš}%oª’Æ$„¥p:Ôè9*nEHZqÏ©a¶V`ãÄÃ`y3Ö|e²fh”FˆŽ¨·™­¹aÈz@!¬5‚;óŒÝ¡nÏHÚŽÓ ½[—­åí})˜’”„œ[¼£úX‹ÌHmOÞc̬.hGÔõ +·0X;°”ûÊw{@.&VXz¸´a1ÅÃK“u‚õ#}Áèõ ötìE¸½Ó_Õƒû/À`ïHd +endstream endobj 97 0 obj <> endobj 110 0 obj [/ICCBased 49 0 R] endobj 6 0 obj [5 0 R] endobj 111 0 obj <> endobj xref +0 112 +0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000040248 00000 n +0000000000 00000 f +0000047778 00000 n +0000351863 00000 n +0000040312 00000 n +0000040405 00000 n +0000040498 00000 n +0000340635 00000 n +0000340997 00000 n +0000341359 00000 n +0000341724 00000 n +0000342089 00000 n +0000272326 00000 n +0000272683 00000 n +0000273040 00000 n +0000273399 00000 n +0000273762 00000 n +0000040598 00000 n +0000040961 00000 n +0000041324 00000 n +0000041687 00000 n +0000042084 00000 n +0000042480 00000 n +0000270117 00000 n +0000272229 00000 n +0000048957 00000 n +0000044891 00000 n +0000048079 00000 n +0000267636 00000 n +0000270020 00000 n +0000266186 00000 n +0000267539 00000 n +0000263973 00000 n +0000265181 00000 n +0000265590 00000 n +0000265243 00000 n +0000260465 00000 n +0000262970 00000 n +0000263377 00000 n +0000263032 00000 n +0000042877 00000 n +0000044686 00000 n +0000047964 00000 n +0000044748 00000 n +0000260430 00000 n +0000044926 00000 n +0000045129 00000 n +0000045021 00000 n +0000047848 00000 n +0000047879 00000 n +0000048192 00000 n +0000048245 00000 n +0000048561 00000 n +0000048638 00000 n +0000048785 00000 n +0000048880 00000 n +0000049031 00000 n +0000049271 00000 n +0000050351 00000 n +0000054914 00000 n +0000120503 00000 n +0000186092 00000 n +0000251681 00000 n +0000263938 00000 n +0000263175 00000 n +0000263270 00000 n +0000263492 00000 n +0000263545 00000 n +0000263861 00000 n +0000266151 00000 n +0000265386 00000 n +0000265481 00000 n +0000265705 00000 n +0000265758 00000 n +0000266074 00000 n +0000267601 00000 n +0000270082 00000 n +0000272291 00000 n +0000304468 00000 n +0000340538 00000 n +0000280322 00000 n +0000304371 00000 n +0000278888 00000 n +0000280225 00000 n +0000276537 00000 n +0000278791 00000 n +0000274124 00000 n +0000276440 00000 n +0000276502 00000 n +0000278853 00000 n +0000280287 00000 n +0000304433 00000 n +0000340600 00000 n +0000351265 00000 n +0000351764 00000 n +0000347535 00000 n +0000351166 00000 n +0000346036 00000 n +0000347435 00000 n +0000344070 00000 n +0000345936 00000 n +0000342454 00000 n +0000343970 00000 n +0000344034 00000 n +0000346000 00000 n +0000347499 00000 n +0000351229 00000 n +0000351827 00000 n +0000351886 00000 n +trailer +<<7D5557C01281CD4D9D99656AB0619DA4>]>> +startxref +352083 +%%EOF diff --git a/files/images/firmware/Tir_off.png b/files/images/firmware/Tir_off.png new file mode 100644 index 0000000000000000000000000000000000000000..94af2e23abfb6c4ab19ef60e75fc4937d54ed9e4 Binary files /dev/null and b/files/images/firmware/Tir_off.png differ diff --git a/files/images/firmware/Tir_on.png b/files/images/firmware/Tir_on.png new file mode 100644 index 0000000000000000000000000000000000000000..884e4a59af7bcc6217e7d306d343bcc21f968767 Binary files /dev/null and b/files/images/firmware/Tir_on.png differ diff --git a/files/images/firmware/X8.png b/files/images/firmware/X8.png new file mode 100644 index 0000000000000000000000000000000000000000..5ad68cf0e4321bd72fea016866ac16c069dbae9f Binary files /dev/null and b/files/images/firmware/X8.png differ diff --git a/files/images/firmware/X8_on.png b/files/images/firmware/X8_on.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef05efce8f151f0b6798302ca84fadd8268cfd3 Binary files /dev/null and b/files/images/firmware/X8_on.png differ diff --git a/files/images/firmware/Y6_off.png b/files/images/firmware/Y6_off.png new file mode 100644 index 0000000000000000000000000000000000000000..ee33903a50127bfe076c5cb1decc480ad985c478 Binary files /dev/null and b/files/images/firmware/Y6_off.png differ diff --git a/files/images/firmware/Y6_on.png b/files/images/firmware/Y6_on.png new file mode 100644 index 0000000000000000000000000000000000000000..02346bd5a3add12121d7ac56729980e68592d567 Binary files /dev/null and b/files/images/firmware/Y6_on.png differ diff --git a/files/images/firmware/apmcopter.png b/files/images/firmware/apmcopter.png new file mode 100644 index 0000000000000000000000000000000000000000..e97dab02def691706861b7507b03042e27165c93 Binary files /dev/null and b/files/images/firmware/apmcopter.png differ diff --git a/files/images/firmware/apmplane.png b/files/images/firmware/apmplane.png new file mode 100644 index 0000000000000000000000000000000000000000..16b14ddbcb3aab6e26865c92c1e194d25a549ae2 Binary files /dev/null and b/files/images/firmware/apmplane.png differ diff --git a/files/images/firmware/apmrover.png b/files/images/firmware/apmrover.png new file mode 100644 index 0000000000000000000000000000000000000000..f3000622859d5177df0770e4f1b762c311602d64 Binary files /dev/null and b/files/images/firmware/apmrover.png differ diff --git a/files/images/firmware/heli.png b/files/images/firmware/heli.png new file mode 100644 index 0000000000000000000000000000000000000000..933a4a7096655b8a716474088c7da57618b0c4f6 Binary files /dev/null and b/files/images/firmware/heli.png differ diff --git a/files/images/firmware/heli_off.png b/files/images/firmware/heli_off.png new file mode 100644 index 0000000000000000000000000000000000000000..f958a9e5e9d2ec727dfa96adede6f4ec903ca0e7 Binary files /dev/null and b/files/images/firmware/heli_off.png differ diff --git a/files/images/firmware/heli_on.png b/files/images/firmware/heli_on.png new file mode 100644 index 0000000000000000000000000000000000000000..1df05837830cb69e22411ffcde8cb2b7a6c7dfdf Binary files /dev/null and b/files/images/firmware/heli_on.png differ diff --git a/files/images/firmware/hexa_off.png b/files/images/firmware/hexa_off.png new file mode 100644 index 0000000000000000000000000000000000000000..317053c25507c0b255d743ea44577bd44798f99d Binary files /dev/null and b/files/images/firmware/hexa_off.png differ diff --git a/files/images/firmware/hexa_on.png b/files/images/firmware/hexa_on.png new file mode 100644 index 0000000000000000000000000000000000000000..0975848fe7a40dfa068531512d6af0a36c5daae6 Binary files /dev/null and b/files/images/firmware/hexa_on.png differ diff --git a/files/images/firmware/hexaplus.png b/files/images/firmware/hexaplus.png new file mode 100644 index 0000000000000000000000000000000000000000..69d3dce352972468e9e4c2afb9a0b7cff6fb2db2 Binary files /dev/null and b/files/images/firmware/hexaplus.png differ diff --git a/files/images/firmware/hexax.png b/files/images/firmware/hexax.png new file mode 100644 index 0000000000000000000000000000000000000000..86bad85c0851cb51b5ce4422e8ab56b1b4cdec07 Binary files /dev/null and b/files/images/firmware/hexax.png differ diff --git a/files/images/firmware/hexay.png b/files/images/firmware/hexay.png new file mode 100644 index 0000000000000000000000000000000000000000..74a65b89ac7aae2febaf9b64d08e26f22022e24d Binary files /dev/null and b/files/images/firmware/hexay.png differ diff --git a/files/images/firmware/octaplus.png b/files/images/firmware/octaplus.png new file mode 100644 index 0000000000000000000000000000000000000000..a371ca8e76382dfad7c0ee05b199a9830013c81e Binary files /dev/null and b/files/images/firmware/octaplus.png differ diff --git a/files/images/firmware/octax.png b/files/images/firmware/octax.png new file mode 100644 index 0000000000000000000000000000000000000000..12ec5a2a2dd6e4c1909025088dd090a5f70dae12 Binary files /dev/null and b/files/images/firmware/octax.png differ diff --git a/files/images/firmware/octo_off.png b/files/images/firmware/octo_off.png new file mode 100644 index 0000000000000000000000000000000000000000..f5bbcbc21f0dbca71fe27f161b678f12c26b01c3 Binary files /dev/null and b/files/images/firmware/octo_off.png differ diff --git a/files/images/firmware/octo_on.png b/files/images/firmware/octo_on.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff00e838bbfae635831db06aecc62dc40373c15 Binary files /dev/null and b/files/images/firmware/octo_on.png differ diff --git a/files/images/firmware/octx.png b/files/images/firmware/octx.png new file mode 100644 index 0000000000000000000000000000000000000000..e2390939732f8351263af3e4a4861a5672ac52bc Binary files /dev/null and b/files/images/firmware/octx.png differ diff --git a/files/images/firmware/plane.png b/files/images/firmware/plane.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe646787a8c4509696c00ac32cdf5adf067913f Binary files /dev/null and b/files/images/firmware/plane.png differ diff --git a/files/images/firmware/plane_off.png b/files/images/firmware/plane_off.png new file mode 100644 index 0000000000000000000000000000000000000000..59b54674ab1d905d76a6e2b8fa4d8c4f853e7a4b Binary files /dev/null and b/files/images/firmware/plane_off.png differ diff --git a/files/images/firmware/plane_on.png b/files/images/firmware/plane_on.png new file mode 100644 index 0000000000000000000000000000000000000000..f4421cd72a870dcc6024183b14d684a978cb46c0 Binary files /dev/null and b/files/images/firmware/plane_on.png differ diff --git a/files/images/firmware/quad_T_off.png b/files/images/firmware/quad_T_off.png new file mode 100644 index 0000000000000000000000000000000000000000..df89eb1bc280485a50c4aefac54dca74677d2b03 Binary files /dev/null and b/files/images/firmware/quad_T_off.png differ diff --git a/files/images/firmware/quad_T_on.png b/files/images/firmware/quad_T_on.png new file mode 100644 index 0000000000000000000000000000000000000000..933c7bbb75eeff1617f721ff5a3a139a59e874eb Binary files /dev/null and b/files/images/firmware/quad_T_on.png differ diff --git a/files/images/firmware/quad_off.png b/files/images/firmware/quad_off.png new file mode 100644 index 0000000000000000000000000000000000000000..43e0f047c1f6709b00bfd9b9aeba60ad8bb2f7dc Binary files /dev/null and b/files/images/firmware/quad_off.png differ diff --git a/files/images/firmware/quad_on.png b/files/images/firmware/quad_on.png new file mode 100644 index 0000000000000000000000000000000000000000..ef296bbd75eb6611888b91296ed5a8274d334cc4 Binary files /dev/null and b/files/images/firmware/quad_on.png differ diff --git a/files/images/firmware/quadplus.png b/files/images/firmware/quadplus.png new file mode 100644 index 0000000000000000000000000000000000000000..350b76f24dbc1df7ef32b239b7e34176b649e2ae Binary files /dev/null and b/files/images/firmware/quadplus.png differ diff --git a/files/images/firmware/quadx.png b/files/images/firmware/quadx.png new file mode 100644 index 0000000000000000000000000000000000000000..a935e874329bd6b663b7fb4f5146b9731694aec7 Binary files /dev/null and b/files/images/firmware/quadx.png differ diff --git a/files/images/firmware/quady.png b/files/images/firmware/quady.png new file mode 100644 index 0000000000000000000000000000000000000000..819b338272fe3935aa03115c9a2c315f426643e9 Binary files /dev/null and b/files/images/firmware/quady.png differ diff --git a/files/images/firmware/rover.png b/files/images/firmware/rover.png new file mode 100644 index 0000000000000000000000000000000000000000..2bffc8e36103f94ad952e0685debf0a2dcc8906c Binary files /dev/null and b/files/images/firmware/rover.png differ diff --git a/files/images/firmware/rover_off.png b/files/images/firmware/rover_off.png new file mode 100644 index 0000000000000000000000000000000000000000..24e91f6dae67b552a30c9e6c7aa5f90bbf57c083 Binary files /dev/null and b/files/images/firmware/rover_off.png differ diff --git a/files/images/firmware/rover_on.png b/files/images/firmware/rover_on.png new file mode 100644 index 0000000000000000000000000000000000000000..13123caeb0c05810819f996fb3ec2301fe7d5098 Binary files /dev/null and b/files/images/firmware/rover_on.png differ diff --git a/files/images/firmware/triy.png b/files/images/firmware/triy.png new file mode 100644 index 0000000000000000000000000000000000000000..16654b3c5a2560d3cb80a8982e2166e6bf66529d Binary files /dev/null and b/files/images/firmware/triy.png differ diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index 5096f8451e3c7e4e90f0f96d022f5f35d5a819fb..263586226c4e9f5101bd9756dd4b6e7c92ce0bc9 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -20,7 +20,8 @@ # Qt configuration CONFIG += qt \ - thread + thread \ + console # serialport QT += network \ @@ -265,7 +266,10 @@ FORMS += src/ui/MainWindow.ui \ src/ui/configuration/ArduRoverPidConfig.ui \ src/ui/QGCConfigView.ui \ src/ui/main/QGCViewModeSelection.ui \ - src/ui/main/QGCWelcomeMainWindow.ui + src/ui/main/QGCWelcomeMainWindow.ui \ + src/ui/configuration/terminalconsole.ui \ + src/ui/configuration/SerialSettingsDialog.ui \ + src/ui/configuration/ApmFirmwareConfig.ui INCLUDEPATH += src \ src/ui \ @@ -378,14 +382,14 @@ HEADERS += src/MG.h \ src/ui/map/Waypoint2DIcon.h \ src/ui/map/QGCMapTool.h \ src/ui/map/QGCMapToolBar.h \ -# libs/qextserialport/qextserialenumerator.h \ src/QGCGeo.h \ src/ui/QGCToolBar.h \ src/ui/QGCStatusBar.h \ src/ui/QGCMAVLinkInspector.h \ src/ui/MAVLinkDecoder.h \ src/ui/WaypointViewOnlyView.h \ - src/ui/WaypointEditableView.h \ + src/ui/WaypointEditableView.h \ + src/ui/UnconnectedUASInfoWidget.h \ src/ui/QGCRGBDView.h \ src/ui/mavlink/QGCMAVLinkMessageSender.h \ src/ui/firmwareupdate/QGCFirmwareUpdateWidget.h \ @@ -459,7 +463,12 @@ HEADERS += src/MG.h \ src/ui/configuration/ArduRoverPidConfig.h \ src/ui/QGCConfigView.h \ src/ui/main/QGCViewModeSelection.h \ - src/ui/main/QGCWelcomeMainWindow.h + src/ui/main/QGCWelcomeMainWindow.h \ + src/ui/configuration/console.h \ + src/ui/configuration/SerialSettingsDialog.h \ + src/ui/configuration/terminalconsole.h \ + src/ui/configuration/ApmHighlighter.h \ + src/ui/configuration/ApmFirmwareConfig.h # Google Earth is only supported on Mac OS and Windows with Visual Studio Compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::HEADERS += src/ui/map3D/QGCGoogleEarthView.h @@ -669,7 +678,12 @@ SOURCES += src/main.cc \ src/ui/configuration/ArduRoverPidConfig.cc \ src/ui/QGCConfigView.cc \ src/ui/main/QGCViewModeSelection.cc \ - src/ui/main/QGCWelcomeMainWindow.cc + src/ui/main/QGCWelcomeMainWindow.cc \ + src/ui/configuration/terminalconsole.cpp \ + src/ui/configuration/console.cpp \ + src/ui/configuration/SerialSettingsDialog.cc \ + src/ui/configuration/ApmHighlighter.cc \ + src/ui/configuration/ApmFirmwareConfig.cc # Enable Google Earth only on Mac OS and Windows with Visual Studio compiler macx|macx-g++|macx-g++42|win32-msvc2008|win32-msvc2010|win32-msvc2012::SOURCES += src/ui/map3D/QGCGoogleEarthView.cc @@ -806,7 +820,8 @@ unix:!macx:!symbian: LIBS += -losg OTHER_FILES += \ dongfang_notes.txt \ src/ui/dongfang-scrapyard.txt \ - qml/components/DigitalDisplay.qml + qml/components/DigitalDisplay.qml \ + qml/components/StatusDisplay.qml OTHER_FILES += \ qml/ApmToolBar.qml \ diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index dd1c31508afcac2d239da6ebbfc50977e16b9f54..c6abb527627dbd0e087bbbf93893e43d5fc2c751 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -120,6 +120,43 @@ files/images/actions/qgroundcontrol-apm.svg files/images/actions/qgroundcontrol-ardrone.svg files/images/actions/qgroundcontrol-wifi.svg + files/images/firmware/apmcopter.png + files/images/firmware/apmplane.png + files/images/firmware/apmrover.png + files/images/firmware/FW icons 2013+logos.ai + files/images/firmware/heli.png + files/images/firmware/heli_off.png + files/images/firmware/heli_on.png + files/images/firmware/hexa_off.png + files/images/firmware/hexa_on.png + files/images/firmware/hexaplus.png + files/images/firmware/hexax.png + files/images/firmware/hexay.png + files/images/firmware/octaplus.png + files/images/firmware/octax.png + files/images/firmware/octo_off.png + files/images/firmware/octo_on.png + files/images/firmware/octx.png + files/images/firmware/plane.png + files/images/firmware/plane_off.png + files/images/firmware/plane_on.png + files/images/firmware/quad_off.png + files/images/firmware/quad_on.png + files/images/firmware/quad_T_off.png + files/images/firmware/quad_T_on.png + files/images/firmware/quadplus.png + files/images/firmware/quadx.png + files/images/firmware/quady.png + files/images/firmware/rover.png + files/images/firmware/rover_off.png + files/images/firmware/rover_on.png + files/images/firmware/Tir_off.png + files/images/firmware/Tir_on.png + files/images/firmware/triy.png + files/images/firmware/X8.png + files/images/firmware/X8_on.png + files/images/firmware/Y6_off.png + files/images/firmware/Y6_on.png files/styles/Vera.ttf diff --git a/qml/ApmToolBar.qml b/qml/ApmToolBar.qml index 154ee94b870f6b05bf42bec06888007b64027122..23a78150796efd1196e6598ca79b92f0d09242ee 100644 --- a/qml/ApmToolBar.qml +++ b/qml/ApmToolBar.qml @@ -9,12 +9,27 @@ Rectangle { property alias linkNameLabel: linkDevice.label property alias baudrateLabel: baudrate.label property bool connected: false + property bool armed: false + property string armedstr: "DISARMED" width: toolbar.width height: 72 color: "black" border.color: "black" + onArmedChanged: { + if (armed) { + statusDisplay.statusText = "ARMED" + statusDisplay.statusTextColor = "red" + statusDisplay.statusBackgroundColor = "#FF880000" + } + else { + statusDisplay.statusText = "DISARMED" + statusDisplay.statusTextColor = "yellow" + statusDisplay.statusBackgroundColor = "black" + } + } + onConnectedChanged: { if (connected){ console.log("APM Tool BAR QML: connected") @@ -44,7 +59,7 @@ Rectangle { Row { anchors.left: parent.left - spacing: 2 + spacing: 10 Rectangle { // Spacer width: 5 @@ -104,6 +119,20 @@ Rectangle { color: "black" } + StatusDisplay { + id: statusDisplay + width: 110 + statusText: "DISARMED" + statusTextColor: "yellow" + statusBackgroundColor: "black" + } + + Rectangle { // Spacer + width: 5 + height: parent.height + color: "black" + } + // [BB] Commented out ToolBar Status info work. // WIP: To be fixed later // DigitalDisplay { // Information Pane diff --git a/qml/components/DigitalDisplay.qml b/qml/components/DigitalDisplay.qml index be69b6712bdf2033e376100ae256e059ffd8756b..dc70d0149c9b9e79a4a5dc508815a94dc23c9450 100644 --- a/qml/components/DigitalDisplay.qml +++ b/qml/components/DigitalDisplay.qml @@ -5,7 +5,7 @@ Rectangle { property alias title: displayTitle.text property string textValue: "none" - width: 100 + width: 110 height: parent.height/3 anchors.verticalCenter: parent.verticalCenter border.color: "white" diff --git a/qml/components/StatusDisplay.qml b/qml/components/StatusDisplay.qml new file mode 100644 index 0000000000000000000000000000000000000000..9d4f6ade628325a3025b0e133e63913c9e5314e3 --- /dev/null +++ b/qml/components/StatusDisplay.qml @@ -0,0 +1,24 @@ +import QtQuick 1.1 + +Rectangle { + id: statusDisplay + property alias statusText: armedText.text + property alias statusTextColor: armedText.color + property alias statusBackgroundColor: statusDisplay.color + + width: 100 + height: parent.height/3 + anchors.verticalCenter: parent.verticalCenter + radius: 3 + border.color: "white" + border.width: 1 + + Text { + id: armedText + anchors.centerIn: parent + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + font.pixelSize: 20 + } + +} diff --git a/src/QGCCore.cc b/src/QGCCore.cc index 14031f1ea3de4f013812c7a800e180bbdfb95adc..f654e672570367b48b1614cefea82b65aa9d78e2 100644 --- a/src/QGCCore.cc +++ b/src/QGCCore.cc @@ -168,7 +168,16 @@ QGCCore::QGCCore(bool firstStart, int &argc, char* argv[]) : QApplication(argc, // to make sure that all components are initialized when the // first messages arrive udpLink = new UDPLink(QHostAddress::Any, 14550); - MainWindow::instance()->addLink(udpLink); + LinkManager::instance()->add(udpLink); + //MainWindow::instance()->addLink(udpLink); + } else if (mainWindow->getCustomMode() == MainWindow::CUSTOM_MODE_PX4) { + udpLink = new UDPLink(QHostAddress::Any, 14550); + LinkManager::instance()->add(udpLink); + SerialLink *slink = new SerialLink(); + } else { + // We want to have a default serial link available for "quick" connecting. + SerialLink *slink = new SerialLink(); +// MainWindow::instance()->addLink(slink); } #ifdef OPAL_RT @@ -177,15 +186,12 @@ QGCCore::QGCCore(bool firstStart, int &argc, char* argv[]) : QApplication(argc, MainWindow::instance()->addLink(opalLink); #endif - //We want to have a default serial link available for "quick" connecting. - SerialLink *slink = new SerialLink(); - MainWindow::instance()->addLink(slink); - // Remove splash screen splashScreen->finish(mainWindow); if (upgraded) mainWindow->showInfoMessage(tr("Default Settings Loaded"), tr("qgroundcontrol has been upgraded from version %1 to version %2. Some of your user preferences have been reset to defaults for safety reasons. Please adjust them where needed.").arg(lastApplicationVersion).arg(QGC_APPLICATION_VERSION)); + // Check if link could be connected if (udpLink && !udpLink->connect()) { diff --git a/src/comm/LinkManager.cc b/src/comm/LinkManager.cc index 6dae9ad78c6cde624585135c8ae57585bbc26997..de948775727412d940074df04e8812e0e990dd23 100644 --- a/src/comm/LinkManager.cc +++ b/src/comm/LinkManager.cc @@ -84,13 +84,13 @@ void LinkManager::addProtocol(LinkInterface* link, ProtocolInterface* protocol) { // Connect link to protocol // the protocol will receive new bytes from the link - if(!link || !protocol) return; + if (!link || !protocol) return; QList linkList = protocolLinks.values(protocol); // If protocol has not been added before (list length == 0) // OR if link has not been added to protocol, add - if ((linkList.length() > 0 && !linkList.contains(link)) || linkList.length() == 0) + if (!linkList.contains(link)) { // Protocol is new, add connect(link, SIGNAL(bytesReceived(LinkInterface*, QByteArray)), protocol, SLOT(receiveBytes(LinkInterface*, QByteArray))); diff --git a/src/comm/SerialLink.cc b/src/comm/SerialLink.cc index eb8d6dbbca6534a9c378d11242e9ab26f753bb54..b7046bc0876d41ff78d80b2fa81f7efed7a33bb5 100644 --- a/src/comm/SerialLink.cc +++ b/src/comm/SerialLink.cc @@ -63,16 +63,6 @@ SerialLink::SerialLink(QString portname, int baudRate, bool hardwareFlowControl, m_dataBits = dataBits; m_stopBits = stopBits; - // Set the port name -// if (m_portName == "") -// { -// m_name = tr("Serial Link ") + QString::number(getId()); -// } -// else -// { -// m_name = portname.trimmed(); -// } - loadSettings(); LinkManager::instance()->add(this); } @@ -92,8 +82,6 @@ SerialLink::~SerialLink() QList SerialLink::getCurrentPorts() { m_ports.clear(); - // Example use QSerialPortInfo - // [TODO] make this thread safe QList portList = QSerialPortInfo::availablePorts(); @@ -153,6 +141,7 @@ void SerialLink::run() { //Need to error out here. emit communicationError(getName(),"Error connecting: " + m_port->errorString()); + disconnect(); // This tidies up and sends the necessary signals return; } @@ -184,18 +173,18 @@ void SerialLink::run() } } - if (m_transmitBuffer.size() > 0) { - // send the data - QMutexLocker lockWrite(&m_writeMutex); - int num_written = m_port->write(m_transmitBuffer.constData()); - if (num_written > 0){ - m_transmitBuffer = m_transmitBuffer.remove(0,num_written); - } - + if (m_transmitBuffer.length() > 0) { + QMutexLocker writeLocker(&m_writeMutex); + int numWritten = m_port->write(m_transmitBuffer); + bool txError = m_port->waitForBytesWritten(-1); +// if ((txError) || (numWritten == -1)) +// qDebug() << "TX Error!"; + m_transmitBuffer = m_transmitBuffer.remove(0, numWritten); + } else { +// qDebug() << "Wait write response timeout %1" << QTime::currentTime().toString(); } - - bool error = m_port->waitForReadyRead(500); + bool error = m_port->waitForReadyRead(10); if(error) { // Waits for 1/2 second [TODO][BB] lower to SerialLink::poll_interval? QByteArray readData = m_port->readAll(); @@ -209,9 +198,9 @@ void SerialLink::run() m_bitsReceivedTotal += readData.length() * 8; } } else { -// qDebug() << "readyReadTime #"<< __LINE__; - +// qDebug() << "Wait write response timeout %1" << QTime::currentTime().toString(); } + if (bytes != m_bytesRead) // i.e things are good and data is being read. { bytes = m_bytesRead; @@ -274,20 +263,17 @@ void SerialLink::writeBytes(const char* data, qint64 size) if(m_port && m_port->isOpen()) { // qDebug() << "writeBytes" << m_portName << "attempting to tx " << size << "bytes."; - QByteArray byteArray(data,size); + QByteArray byteArray(data, size); { QMutexLocker writeLocker(&m_writeMutex); m_transmitBuffer.append(byteArray); } -// qDebug() << "writeBytes " << m_portName << "tx'd" << b << "bytes:"; - // Increase write counter m_bitsSentTotal += size * 8; // Extra debug logging // qDebug() << byteArray->toHex(); -// delete byteArray; } else { disconnect(); // Error occured @@ -421,6 +407,8 @@ bool SerialLink::hardwareConnect() } QObject::connect(m_port,SIGNAL(aboutToClose()),this,SIGNAL(disconnected())); + QObject::connect(m_port, SIGNAL(error(QSerialPort::SerialPortError)), + this, SLOT(linkError(QSerialPort::SerialPortError))); // port->setCommTimeouts(QSerialPort::CtScheme_NonBlockingRead); m_connectionStartTime = MG::TIME::getGroundTimeNow(); @@ -452,6 +440,11 @@ bool SerialLink::hardwareConnect() return true; // successful connection } +void SerialLink::linkError(QSerialPort::SerialPortError error) +{ + qDebug() << error; +} + /** * @brief Check if connection is active. diff --git a/src/comm/SerialLink.h b/src/comm/SerialLink.h index 25262f00b3e976ec9b8df98de7592f2213c599d1..9436ec883a2949176265dc60b7b71a111e8ae8b8 100644 --- a/src/comm/SerialLink.h +++ b/src/comm/SerialLink.h @@ -142,6 +142,8 @@ public slots: bool connect(); bool disconnect(); + void linkError(QSerialPort::SerialPortError error); + protected: quint64 m_bytesRead; QSerialPort* m_port; @@ -166,13 +168,13 @@ protected: quint64 m_connectionStartTime; QMutex m_statisticsMutex; QMutex m_dataMutex; + QMutex m_writeMutex; QList m_ports; private: volatile bool m_stopp; volatile bool m_reqReset; QMutex m_stoppMutex; - QMutex m_writeMutex; QByteArray m_transmitBuffer; bool hardwareConnect(); diff --git a/src/comm/UDPLink.cc b/src/comm/UDPLink.cc index 121a3755b80fccc80f24c3345fb2486ece6e9aef..2ce6e75abd51d94857221cc658ba7e779c37fbd4 100644 --- a/src/comm/UDPLink.cc +++ b/src/comm/UDPLink.cc @@ -50,6 +50,7 @@ UDPLink::UDPLink(QHostAddress host, quint16 port) this->name = tr("UDP Link (port:%1)").arg(this->port); emit nameChanged(this->name); // LinkManager::instance()->add(this); + qDebug() << "UDP Created " << name; } UDPLink::~UDPLink() @@ -104,7 +105,7 @@ void UDPLink::setPort(int port) */ void UDPLink::addHost(const QString& host) { - //qDebug() << "UDP:" << "ADDING HOST:" << host; + qDebug() << "UDP:" << "ADDING HOST:" << host; if (host.contains(":")) { //qDebug() << "HOST: " << host.split(":").first(); diff --git a/src/configuration.h b/src/configuration.h index 028bb0a5bedaff9907691c27bbcd4e4ec15c0660..84b0f2530c7e04f0c20ab962b5ea8439d70e35da 100644 --- a/src/configuration.h +++ b/src/configuration.h @@ -11,7 +11,7 @@ #define WITH_TEXT_TO_SPEECH 1 #define QGC_APPLICATION_NAME "QGroundControl" -#define QGC_APPLICATION_VERSION "v. 1.1.0 (beta)" +#define QGC_APPLICATION_VERSION "v. 1.1.1 (beta)" namespace QGC diff --git a/src/uas/ArduPilotMegaMAV.cc b/src/uas/ArduPilotMegaMAV.cc index c3c34c5e859e140618e3567c0e2039a351e99895..cb972df4e85558b934199b217f554d91776d3db3 100644 --- a/src/uas/ArduPilotMegaMAV.cc +++ b/src/uas/ArduPilotMegaMAV.cc @@ -53,11 +53,17 @@ ArduPilotMegaMAV::ArduPilotMegaMAV(MAVLinkProtocol* mavlink, int id) : void ArduPilotMegaMAV::sendTxRequests() { enableExtendedSystemStatusTransmission(2); + QGC::SLEEP::msleep(250); enablePositionTransmission(3); + QGC::SLEEP::msleep(250); enableExtra1Transmission(10); + QGC::SLEEP::msleep(250); enableExtra2Transmission(10); + QGC::SLEEP::msleep(250); enableExtra3Transmission(2); + QGC::SLEEP::msleep(250); enableRawSensorDataTransmission(2); + QGC::SLEEP::msleep(250); enableRCChannelDataTransmission(2); } diff --git a/src/ui/CommConfigurationWindow.cc b/src/ui/CommConfigurationWindow.cc index cf63e79123f9d306c9161f6e55d50ef978402cdc..099c28f46453d6bad16149269f71a62d97ec0dc3 100644 --- a/src/ui/CommConfigurationWindow.cc +++ b/src/ui/CommConfigurationWindow.cc @@ -73,11 +73,18 @@ CommConfigurationWindow::CommConfigurationWindow(LinkInterface* link, ProtocolIn ui.connectionType->setEnabled(false); ui.linkType->setEnabled(false); ui.protocolGroupBox->setVisible(false); + ui.protocolTypeGroupBox->setVisible(false); // Connect UI element visibility to checkbox - connect(ui.advancedOptionsCheckBox, SIGNAL(clicked(bool)), ui.connectionType, SLOT(setEnabled(bool))); - connect(ui.advancedOptionsCheckBox, SIGNAL(clicked(bool)), ui.linkType, SLOT(setEnabled(bool))); - connect(ui.advancedOptionsCheckBox, SIGNAL(clicked(bool)), ui.protocolGroupBox, SLOT(setVisible(bool))); + //connect(ui.advancedOptionsCheckBox, SIGNAL(clicked(bool)), ui.connectionType, SLOT(setEnabled(bool))); + //connect(ui.advancedOptionsCheckBox, SIGNAL(clicked(bool)), ui.linkType, SLOT(setEnabled(bool))); + //connect(ui.advancedOptionsCheckBox, SIGNAL(clicked(bool)), ui.protocolGroupBox, SLOT(setVisible(bool))); + ui.advancedOptionsCheckBox->setVisible(false); + //connect(ui.advCheckBox,SIGNAL(clicked(bool)),ui.advancedOptionsCheckBox,SLOT(setChecked(bool))); + connect(ui.advCheckBox,SIGNAL(clicked(bool)),ui.protocolTypeGroupBox,SLOT(setVisible(bool))); + connect(ui.advCheckBox, SIGNAL(clicked(bool)), ui.connectionType, SLOT(setEnabled(bool))); + connect(ui.advCheckBox, SIGNAL(clicked(bool)), ui.linkType, SLOT(setEnabled(bool))); + connect(ui.advCheckBox, SIGNAL(clicked(bool)), ui.protocolGroupBox, SLOT(setVisible(bool))); // add link types ui.linkType->addItem(tr("Serial"), QGC_LINK_SERIAL); diff --git a/src/ui/CommSettings.ui b/src/ui/CommSettings.ui index ec9c2436d99bfdb0a861deba0832be704a3fba66..46e5ca56e08cc03b8d3e2184cd7a12da20f378ec 100644 --- a/src/ui/CommSettings.ui +++ b/src/ui/CommSettings.ui @@ -6,85 +6,15 @@ 0 0 - 413 - 373 + 324 + 415 Form - - - 6 - - - 6 - - - 6 - - - 6 - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 5 - 5 - - - - - - - - - - Link Type - - - - - - - - - - Protocol - - - - - - - -1 - - - - - - - Advanced Options - - - - - - - - - Qt::Horizontal - - - - + + Link @@ -93,16 +23,7 @@ 0 - - 0 - - - 0 - - - 0 - - + 0 @@ -115,8 +36,8 @@ 0 0 - 391 - 85 + 302 + 69 @@ -125,7 +46,65 @@ - + + + + Show Advanced Protocol Options + + + + + + + GroupBox + + + + + + + + Link Type + + + + + + + + + + -1 + + + + + + + Advanced Options + + + + + + + Protocol + + + + + + + + + + + + Qt::Horizontal + + + + Protocol @@ -134,16 +113,7 @@ 0 - - 0 - - - 0 - - - 0 - - + 0 @@ -156,8 +126,8 @@ 0 0 - 391 - 84 + 302 + 69 @@ -166,20 +136,20 @@ - - - - - 0 - 0 - + + + + Qt::Vertical - - Disconnected + + + 20 + 40 + - + - + 12 @@ -193,7 +163,7 @@ Connect - true + false @@ -216,6 +186,19 @@ + + + + + 0 + 0 + + + + Disconnected + + + @@ -241,6 +224,13 @@ Close the configuration window + line + linkGroupBox + protocolGroupBox + connectionStatusLabel + advCheckBox + protocolTypeGroupBox + verticalSpacer diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index d45a25b13461a6e7f26024c385d6ea81c57c9a9e..2ba3c145565c32b0b9886d4a129c25331e1e0169 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -70,6 +70,8 @@ This file is part of the QGROUNDCONTROL project #include #include #include +#include "SerialSettingsDialog.h" +#include "terminalconsole.h" #ifdef QGC_OSG_ENABLED #include "Q3DWidgetFactory.h" @@ -127,10 +129,13 @@ MainWindow::MainWindow(QWidget *parent): simulationLink(NULL), lowPowerMode(false), isAdvancedMode(false), + mavlink(new MAVLinkProtocol()), dockWidgetTitleBarEnabled(true), customMode(CUSTOM_MODE_WIFI) { this->setAttribute(Qt::WA_DeleteOnClose); + //TODO: move protocol outside UI + connect(mavlink, SIGNAL(protocolStatusMessage(QString,QString)), this, SLOT(showCriticalMessage(QString,QString)), Qt::QueuedConnection); loadSettings(); } @@ -251,7 +256,7 @@ void MainWindow::init() apmToolBar->setHardwareViewAction(ui.actionHardwareConfig); apmToolBar->setSoftwareViewAction(ui.actionSoftwareConfig); apmToolBar->setSimulationViewAction(ui.actionSimulation_View); - apmToolBar->setTerminalViewAction(ui.actionSimulation_View); + apmToolBar->setTerminalViewAction(ui.actionTerminalView); QDockWidget *widget = new QDockWidget(tr("APM Tool Bar"),this); widget->setWidget(apmToolBar); @@ -488,9 +493,6 @@ void MainWindow::buildCustomWidget() void MainWindow::buildCommonWidgets() { - //TODO: move protocol outside UI - mavlink = new MAVLinkProtocol(); - connect(mavlink, SIGNAL(protocolStatusMessage(QString,QString)), this, SLOT(showCriticalMessage(QString,QString)), Qt::QueuedConnection); // Add generic MAVLink decoder mavlinkDecoder = new MAVLinkDecoder(mavlink, this); @@ -502,27 +504,27 @@ void MainWindow::buildCommonWidgets() if (!plannerView) { plannerView = new SubMainWindow(this); + plannerView->setObjectName("VIEW_MISSION"); plannerView->setCentralWidget(new QGCMapTool(this)); - //mapWidget = new QGCMapTool(this); - addCentralWidget(plannerView, "Maps"); + addToCentralStackedWidget(plannerView, VIEW_MISSION, "Maps"); } - //pilotView + //pilotView (aka Flight or Mission View) if (!pilotView) { pilotView = new SubMainWindow(this); pilotView->setObjectName("VIEW_FLIGHT"); pilotView->setCentralWidget(new QGCMapTool(this)); - addCentralWidget(pilotView, "Pilot"); + addToCentralStackedWidget(pilotView, VIEW_FLIGHT, "Pilot"); } + if (getCustomMode() == CUSTOM_MODE_APM) { if (!configView) { configView = new SubMainWindow(this); configView->setObjectName("VIEW_HARDWARE_CONFIG"); configView->setCentralWidget(new ApmHardwareConfig(this)); - addCentralWidget(configView,"Hardware"); - centralWidgetToDockWidgetsMap[VIEW_HARDWARE_CONFIG] = QMap(); + addToCentralStackedWidget(configView, VIEW_HARDWARE_CONFIG, "Hardware"); } if (!softwareConfigView) @@ -530,8 +532,15 @@ void MainWindow::buildCommonWidgets() softwareConfigView = new SubMainWindow(this); softwareConfigView->setObjectName("VIEW_SOFTWARE_CONFIG"); softwareConfigView->setCentralWidget(new ApmSoftwareConfig(this)); - addCentralWidget(softwareConfigView,"Software"); - centralWidgetToDockWidgetsMap[VIEW_SOFTWARE_CONFIG] = QMap(); + addToCentralStackedWidget(softwareConfigView, VIEW_SOFTWARE_CONFIG, "Software"); + } + if (!terminalView) + { + terminalView = new SubMainWindow(this); + terminalView->setObjectName("VIEW_TERMINAL"); + TerminalConsole *terminalConsole = new TerminalConsole(this); + terminalView->setCentralWidget(terminalConsole); + addToCentralStackedWidget(terminalView, VIEW_TERMINAL, tr("Terminal View")); } } else { if (!configView) @@ -539,30 +548,32 @@ void MainWindow::buildCommonWidgets() configView = new SubMainWindow(this); configView->setObjectName("VIEW_HARDWARE_CONFIG"); configView->setCentralWidget(new QGCConfigView(this)); - addCentralWidget(configView,"Config"); - centralWidgetToDockWidgetsMap[VIEW_HARDWARE_CONFIG] = QMap(); + addToCentralStackedWidget(configView, VIEW_HARDWARE_CONFIG, "Config"); } } + if (!engineeringView) { engineeringView = new SubMainWindow(this); engineeringView->setObjectName("VIEW_ENGINEER"); engineeringView->setCentralWidget(new QGCDataPlot2D(this)); - addCentralWidget(engineeringView,tr("Logfile Plot")); + addToCentralStackedWidget(engineeringView, VIEW_ENGINEER, tr("Logfile Plot")); } + if (!mavlinkView) { mavlinkView = new SubMainWindow(this); mavlinkView->setObjectName("VIEW_MAVLINK"); mavlinkView->setCentralWidget(new XMLCommProtocolWidget(this)); - addCentralWidget(mavlinkView,tr("Mavlink Generator")); + addToCentralStackedWidget(mavlinkView, VIEW_MAVLINK, tr("Mavlink Generator")); } + if (!simView) { simView = new SubMainWindow(this); simView->setObjectName("VIEW_SIMULATOR"); simView->setCentralWidget(new QGCMapTool(this)); - addCentralWidget(simView,tr("Simulation View")); + addToCentralStackedWidget(simView, VIEW_SIMULATION, tr("Simulation View")); } // Dock widgets @@ -699,18 +710,20 @@ void MainWindow::buildCommonWidgets() }*/ #ifdef QGC_OSG_ENABLED - if (!_3DWidget) + if (q3DWidget) { - _3DWidget = Q3DWidgetFactory::get("PIXHAWK", this); - addCentralWidget(_3DWidget, tr("Local 3D")); + q3DWidget = Q3DWidgetFactory::get("PIXHAWK", this); + q3DWidget->setObjectName("VIEW_3DWIDGET"); + + addToCentralStackedWidget(q3DWidget, VIEW_3DWIDGET, tr("Local 3D")); } #endif #if (defined _MSC_VER) /*| (defined Q_OS_MAC) mac os doesn't support gearth right now */ if (!gEarthWidget) { - gEarthWidget = new QGCGoogleEarthView(this); - addCentralWidget(gEarthWidget, tr("Google Earth")); + earthWidget = new QGCGoogleEarthView(this); + addToCentralStackedWidget(earthWidget,VIEW_GOOGLEEARTH, tr("Google Earth")); } #endif } @@ -942,25 +955,16 @@ void MainWindow::showTool(bool show) addTool(parent,VIEW_SIMULATION,widget,tr("Control"),area); } }*/ -void MainWindow::addCentralWidget(QWidget* widget, const QString& title) +void MainWindow::addToCentralStackedWidget(QWidget* widget, VIEW_SECTIONS viewSection, const QString& title) { Q_UNUSED(title); + Q_ASSERT(widget->objectName().length() != 0); // Check if this widget already has been added if (centerStack->indexOf(widget) == -1) { centerStack->addWidget(widget); - - // QAction* tempAction = ui.menuMain->addAction(title); - - // tempAction->setCheckable(true); - // QVariant var; - // var.setValue((QWidget*)widget); - // tempAction->setData(var); - // centerStackActionGroup->addAction(tempAction); - // connect(tempAction,SIGNAL(triggered()),this, SLOT(showCentralWidget())); - //connect(widget, SIGNAL(visibilityChanged(bool)), tempAction, SLOT(setChecked(bool))); - // tempAction->setChecked(widget->isVisible()); + centralWidgetToDockWidgetsMap[viewSection] = QMap(); } } @@ -1411,6 +1415,7 @@ void MainWindow::connectCommonActions() perspectives->addAction(ui.actionHardwareConfig); perspectives->addAction(ui.actionSoftwareConfig); perspectives->addAction(ui.actionFirmwareUpdateView); + perspectives->addAction(ui.actionTerminalView); perspectives->addAction(ui.actionUnconnectedView); perspectives->setExclusive(true); @@ -1455,6 +1460,11 @@ void MainWindow::connectCommonActions() ui.actionFirmwareUpdateView->setChecked(true); ui.actionFirmwareUpdateView->activate(QAction::Trigger); } + if (currentView == VIEW_TERMINAL) + { + ui.actionTerminalView->setChecked(true); + ui.actionTerminalView->activate(QAction::Trigger); + } if (currentView == VIEW_UNCONNECTED) { ui.actionUnconnectedView->setChecked(true); @@ -1492,8 +1502,10 @@ void MainWindow::connectCommonActions() connect(ui.actionMissionView, SIGNAL(triggered()), this, SLOT(loadOperatorView())); connect(ui.actionUnconnectedView, SIGNAL(triggered()), this, SLOT(loadUnconnectedView())); connect(ui.actionHardwareConfig,SIGNAL(triggered()),this,SLOT(loadHardwareConfigView())); + if (getCustomMode() == CUSTOM_MODE_APM) { connect(ui.actionSoftwareConfig,SIGNAL(triggered()),this,SLOT(loadSoftwareConfigView())); + connect(ui.actionTerminalView,SIGNAL(triggered()),this,SLOT(loadTerminalView())); } connect(ui.actionFirmwareUpdateView, SIGNAL(triggered()), this, SLOT(loadFirmwareUpdateView())); @@ -1590,7 +1602,7 @@ void MainWindow::showSettings() settings->show(); } -void MainWindow::addLink() +LinkInterface* MainWindow::addLink() { SerialLink* link = new SerialLink(); // TODO This should be only done in the dialog itself @@ -1612,6 +1624,8 @@ void MainWindow::addLink() break; } } + + return link; } @@ -1639,11 +1653,21 @@ bool MainWindow::configLink(LinkInterface *link) void MainWindow::addLink(LinkInterface *link) { + + qDebug() << "ADD LINK CALLED FROM SOMEWHERE"; + // IMPORTANT! KEEP THESE TWO LINES // THEY MAKE SURE THE LINK IS PROPERLY REGISTERED // BEFORE LINKING THE UI AGAINST IT // Register (does nothing if already registered) LinkManager::instance()->add(link); + + if (mavlink) { + qDebug() << "MAVLINK OK"; + } else { + qDebug() << "MAVLINK FAIL"; + } + LinkManager::instance()->addProtocol(link, mavlink); // Go fishing for this link's configuration window @@ -1662,10 +1686,8 @@ void MainWindow::addLink(LinkInterface *link) } } - //UDPLink* udp = dynamic_cast(link); - if (!found) - { // || udp + { CommConfigurationWindow* commWidget = new CommConfigurationWindow(link, mavlink, NULL); commsWidgetList.append(commWidget); connect(commWidget,SIGNAL(destroyed(QObject*)),this,SLOT(commsWidgetDestroyed(QObject*))); @@ -2015,6 +2037,10 @@ void MainWindow::loadViewState() centerStack->setCurrentWidget(simView); break; + case VIEW_TERMINAL: + centerStack->setCurrentWidget(terminalView); + break; + case VIEW_UNCONNECTED: case VIEW_FULL: default: @@ -2107,6 +2133,18 @@ void MainWindow::loadSoftwareConfigView() } } +void MainWindow::loadTerminalView() +{ + if (currentView != VIEW_TERMINAL) + { + storeViewState(); + currentView = VIEW_TERMINAL; + ui.actionTerminalView->setChecked(true); + loadViewState(); + } +} + + void MainWindow::loadUnconnectedView() { if (currentView != VIEW_UNCONNECTED) diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index 8838d00aacf1e67f66ef93adb46bc0c990e4d30a..b31cc32d1c7109d9d8fe94afadde9f0673f4dbe5 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -200,7 +200,7 @@ public slots: /** @brief Show the application settings */ void showSettings(); /** @brief Add a communication link */ - void addLink(); + LinkInterface* addLink(); void addLink(LinkInterface* link); bool configLink(LinkInterface *link); void configure(); @@ -238,6 +238,8 @@ public slots: void loadMAVLinkView(); /** @brief Load firmware update view */ void loadFirmwareUpdateView(); + /** @brief Load Terminal Console views */ + void loadTerminalView(); /** @brief Show the online help for users */ void showHelp(); @@ -334,6 +336,9 @@ protected: VIEW_FIRMWAREUPDATE, VIEW_HARDWARE_CONFIG, VIEW_SOFTWARE_CONFIG, + VIEW_TERMINAL, + VIEW_3DWIDGET, + VIEW_GOOGLEEARTH, VIEW_UNCONNECTED, ///< View in unconnected mode, when no UAS is available VIEW_FULL ///< All widgets shown at once } VIEW_SECTIONS; @@ -363,7 +368,7 @@ protected: * @param widget The QWidget being added * @param title The entry that will appear in the Menu */ - void addCentralWidget(QWidget* widget, const QString& title); + void addToCentralStackedWidget(QWidget* widget, VIEW_SECTIONS viewSection, const QString& title); /** @brief Catch window resize events */ void resizeEvent(QResizeEvent * event); @@ -387,7 +392,7 @@ protected: void storeSettings(); // TODO Should be moved elsewhere, as the protocol does not belong to the UI - MAVLinkProtocol* mavlink; + QPointer mavlink; LinkInterface* udpLink; @@ -403,6 +408,7 @@ protected: QPointer mavlinkView; QPointer engineeringView; QPointer simView; + QPointer terminalView; // Center widgets QPointer linechartWidget; @@ -412,10 +418,10 @@ protected: //QPointer protocolWidget; //QPointer dataplotWidget; #ifdef QGC_OSG_ENABLED - QPointer _3DWidget; + QPointer q3DWidget; #endif #if (defined _MSC_VER) || (defined Q_OS_MAC) - QPointer gEarthWidget; + QPointer earthWidget; #endif QPointer firmwareUpdateWidget; diff --git a/src/ui/MainWindow.ui b/src/ui/MainWindow.ui index 339ded2613984c265e9ce662793a553f35348174..75a6e83ff4f3ac18177c5f4754f90c48ec935ee1 100644 --- a/src/ui/MainWindow.ui +++ b/src/ui/MainWindow.ui @@ -99,6 +99,7 @@ + @@ -466,11 +467,21 @@ + + true + + + + :/files/images/apps/accessories-calculator.svg:/files/images/apps/accessories-calculator.svg + Simulation + + true + :/files/images/categories/applications-system.svg:/files/images/categories/applications-system.svg @@ -479,6 +490,18 @@ Software + + + true + + + + :/files/images/apps/utilities-terminal.svg:/files/images/apps/utilities-terminal.svg + + + Terminal + + diff --git a/src/ui/QGCTabbedInfoView.cpp b/src/ui/QGCTabbedInfoView.cpp index e319471386ee593485a33fc0d4bdc1ddba147b2a..42095760e087cd463eac921e404e9276d5e81763 100644 --- a/src/ui/QGCTabbedInfoView.cpp +++ b/src/ui/QGCTabbedInfoView.cpp @@ -7,10 +7,10 @@ QGCTabbedInfoView::QGCTabbedInfoView(QWidget *parent) : QWidget(parent) actionsWidget = new UASActionsWidget(this); quickView = new UASQuickView(this); rawView = new UASRawStatusView(this); - ui.tabWidget->addTab(messageView,"Messages"); ui.tabWidget->addTab(quickView,"Quick"); ui.tabWidget->addTab(actionsWidget,"Actions"); ui.tabWidget->addTab(rawView,"Status"); + ui.tabWidget->addTab(messageView,"Messages"); } void QGCTabbedInfoView::addSource(MAVLinkDecoder *decoder) { diff --git a/src/ui/SerialConfigurationWindow.cc b/src/ui/SerialConfigurationWindow.cc index 72974c7c14fa039da95cbc857f3a8d7d8367d908..338e2d3283f7ce66995857d72bdc7df6fd5f011d 100644 --- a/src/ui/SerialConfigurationWindow.cc +++ b/src/ui/SerialConfigurationWindow.cc @@ -129,10 +129,13 @@ SerialConfigurationWindow::SerialConfigurationWindow(LinkInterface* link, QWidge connect(ui.parEven, SIGNAL(toggled(bool)), this, SLOT(setParityEven(bool))); connect(ui.dataBitsSpinBox, SIGNAL(valueChanged(int)), this->link, SLOT(setDataBits(int))); connect(ui.stopBitsSpinBox, SIGNAL(valueChanged(int)), this->link, SLOT(setStopBits(int))); + connect(ui.advCheckBox,SIGNAL(clicked(bool)),ui.advGroupBox,SLOT(setShown(bool))); + ui.advCheckBox->setChecked(false); + ui.advGroupBox->setVisible(false); //connect(this->link, SIGNAL(connected(bool)), this, SLOT()); - ui.portName->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow); - ui.baudRate->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow); + //ui.portName->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow); + //ui.baudRate->setSizeAdjustPolicy(QComboBox::AdjustToContentsOnFirstShow); switch(this->link->getParityType()) { case 0: diff --git a/src/ui/SerialSettings.ui b/src/ui/SerialSettings.ui index 605672000966dcfa538ecfe1144b806638f3ff2a..2a23c835ff171a57ff1e8cda16e295ee658236d2 100644 --- a/src/ui/SerialSettings.ui +++ b/src/ui/SerialSettings.ui @@ -6,379 +6,445 @@ 0 0 - 304 - 283 + 234 + 354 Form - - - 6 - - - - - Serial Port - - - - - - - The serial port to which the system is connected. All ports listed here should work. - - - The serial port to which the system is connected. All ports listed here should work. - - - The serial port to which the system is connected. All ports listed here should work. - - - true - - - QComboBox::AdjustToContents - - - - - - - - - - - - Baud Rate - - - - - - - The data transmission rate. If unsure 57600 and 115200 are very common rates. - - - The data transmission rate. If unsure 57600 and 115200 are very common rates. - - - The data transmission rate. If unsure 57600 and 115200 are very common rates. - - - false - - - QComboBox::AdjustToContents - - - - 50 - - - - - 75 - - - - - 110 - - - - - 134 - - - - - 150 - - - - - 200 - - - - - 300 - - - - - 600 - - - - - 1200 - - - - - 1800 - - - - - 2400 - - - - - 4800 - - - - - 9600 - - - - - 14400 - - - - - 19200 - - - - - 38400 - - - - - 56000 - - - - - 57600 - - - - - 76800 - - - - - 115200 - - - - - 128000 - - - - - 230400 - - - - - 256000 - - - - - 460800 - - + + + - - 921600 - + + + Serial Port + + - - - - - - Flow Control - - - - - - - Activate / deactivate hardware flow control. Commonly deactivated - - - Activate / deactivate hardware flow control. Commonly deactivated - - - Activate / deactivate hardware flow control. Commonly deactivated - - - Active - - - - - - - Parity - - - - - - + + + + 100 + 0 + + - Set the parity. In most cases no parity (None) is used. + The serial port to which the system is connected. All ports listed here should work. - Set the parity. In most cases no parity (None) is used. + The serial port to which the system is connected. All ports listed here should work. - Set the parity. In most cases no parity (None) is used. - - - None + The serial port to which the system is connected. All ports listed here should work. - + true + + QComboBox::AdjustToContents + + + + + + + + + + - - - Set the parity. In most cases no parity (None) is used. - - - Set the parity. In most cases no parity (None) is used. - - - Set the parity. In most cases no parity (None) is used. - + - Odd + Baud Rate - + + + + 100 + 0 + + - Set the parity. In most cases no parity (None) is used. + The data transmission rate. If unsure 57600 and 115200 are very common rates. - Set the parity. In most cases no parity (None) is used. + The data transmission rate. If unsure 57600 and 115200 are very common rates. - Set the parity. In most cases no parity (None) is used. + The data transmission rate. If unsure 57600 and 115200 are very common rates. - - Even + + false + + + QComboBox::AdjustToContents + + + 50 + + + + + 75 + + + + + 110 + + + + + 134 + + + + + 150 + + + + + 200 + + + + + 300 + + + + + 600 + + + + + 1200 + + + + + 1800 + + + + + 2400 + + + + + 4800 + + + + + 9600 + + + + + 14400 + + + + + 19200 + + + + + 38400 + + + + + 56000 + + + + + 57600 + + + + + 76800 + + + + + 115200 + + + + + 128000 + + + + + 230400 + + + + + 256000 + + + + + 460800 + + + + + 921600 + + - - - - - 0 - 0 - - - - - 0 - 0 - - - - Number of data bits per symbol. This is almost always 8. - - - Number of data bits per symbol. This is almost always 8. - - - Number of data bits per symbol. This is almost always 8. - - - 5 - - - 8 - - - 5 - - - - - + + - Stop bits + Show Advanced Port Settings - - - - - 0 - 0 - - - - Number of stop bits per symbol. This is almost always 2. - - - Number of stop bits per symbol. This is almost always 2. - - - Number of stop bits per symbol. This is almost always 2. - - - true - - - false - - - 1 - - - 2 - - - 2 - - + + + + + + Advanced + + + + + + + + Flow Control + + + + + + + Activate / deactivate hardware flow control. Commonly deactivated + + + Activate / deactivate hardware flow control. Commonly deactivated + + + Activate / deactivate hardware flow control. Commonly deactivated + + + Active + + + + + + + + + + + Parity + + + + + + + + + Set the parity. In most cases no parity (None) is used. + + + Set the parity. In most cases no parity (None) is used. + + + Set the parity. In most cases no parity (None) is used. + + + None + + + true + + + + + + + Set the parity. In most cases no parity (None) is used. + + + Set the parity. In most cases no parity (None) is used. + + + Set the parity. In most cases no parity (None) is used. + + + Odd + + + + + + + Set the parity. In most cases no parity (None) is used. + + + Set the parity. In most cases no parity (None) is used. + + + Set the parity. In most cases no parity (None) is used. + + + Even + + + + + + + + + + + + + Data bits + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + Number of data bits per symbol. This is almost always 8. + + + Number of data bits per symbol. This is almost always 8. + + + Number of data bits per symbol. This is almost always 8. + + + 5 + + + 8 + + + 5 + + + + + + + + + + + Stop bits + + + + + + + + 0 + 0 + + + + Number of stop bits per symbol. This is almost always 2. + + + Number of stop bits per symbol. This is almost always 2. + + + Number of stop bits per symbol. This is almost always 2. + + + true + + + false + + + 1 + + + 2 + + + 2 + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - + Qt::Vertical - 0 - 0 + 20 + 40 - - - - Data bits - - - diff --git a/src/ui/apmtoolbar.cpp b/src/ui/apmtoolbar.cpp index 56834a5721c7880187b0a8bb02294ffa1ac3352e..6899f88d70cc20a98644f44426f09e485b1e9519 100644 --- a/src/ui/apmtoolbar.cpp +++ b/src/ui/apmtoolbar.cpp @@ -7,7 +7,7 @@ #include "apmtoolbar.h" APMToolBar::APMToolBar(QWidget *parent): - QDeclarativeView(parent) + QDeclarativeView(parent), m_uas(0) { // Configure our QML object setSource(QUrl::fromLocalFile("qml/ApmToolBar.qml")); @@ -21,6 +21,37 @@ APMToolBar::APMToolBar(QWidget *parent): } setConnection(false); + + connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(activeUasSet(UASInterface*))); + activeUasSet(UASManager::instance()->getActiveUAS()); +} +void APMToolBar::activeUasSet(UASInterface *uas) +{ + if (!uas) + { + return; + } + if (m_uas) + { + disconnect(m_uas,SIGNAL(armingChanged(bool)), + this,SLOT(armingChanged(bool))); + disconnect(uas,SIGNAL(armingChanged(int, QString)), + this,SLOT(armingChanged(int, QString))); + } + connect(uas,SIGNAL(armingChanged(bool)), + this,SLOT(armingChanged(bool))); + connect(uas,SIGNAL(armingChanged(int, QString)), + this,SLOT(armingChanged(int, QString))); + +} +void APMToolBar::armingChanged(bool armed) +{ + this->rootObject()->setProperty("armed",armed); +} + +void APMToolBar::armingChanged(int sysId, QString armingState) +{ + qDebug() << "APMToolBar: sysid " << sysId << " armState" << armingState; } void APMToolBar::setFlightViewAction(QAction *action) diff --git a/src/ui/apmtoolbar.h b/src/ui/apmtoolbar.h index d4e48212e54460e07638a07d00b0286637d82359..5bed5a224e0fb9e802f325cbe64d1b3ad2f9e310 100644 --- a/src/ui/apmtoolbar.h +++ b/src/ui/apmtoolbar.h @@ -3,6 +3,7 @@ #include #include +#include "UASInterface.h" class LinkInterface; @@ -43,7 +44,14 @@ public slots: void showConnectionDialog(); void setConnection(bool connection); + void activeUasSet(UASInterface *uas); + void armingChanged(int sysId, QString armingState); + void armingChanged(bool armed); + void updateLinkDisplay(LinkInterface *newLink); + +private: + UASInterface *m_uas; }; #endif // APMTOOLBAR_H diff --git a/src/ui/configuration/AP2ConfigWidget.cc b/src/ui/configuration/AP2ConfigWidget.cc index 08eb44f21568c68f25dad68eca89f75a8b559b87..3ce8751b72423c7abb0383c63f617c7d51399250 100644 --- a/src/ui/configuration/AP2ConfigWidget.cc +++ b/src/ui/configuration/AP2ConfigWidget.cc @@ -4,9 +4,13 @@ AP2ConfigWidget::AP2ConfigWidget(QWidget *parent) : QWidget(parent) { m_uas = 0; +} +void AP2ConfigWidget::initConnections() +{ connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(activeUASSet(UASInterface*))); activeUASSet(UASManager::instance()->getActiveUAS()); } + void AP2ConfigWidget::activeUASSet(UASInterface *uas) { if (m_uas) diff --git a/src/ui/configuration/AP2ConfigWidget.h b/src/ui/configuration/AP2ConfigWidget.h index 69e9f6f7fb0d21c02740324216718bc44281df03..b8a397dd249e346f4a3d036692a3887382525db2 100644 --- a/src/ui/configuration/AP2ConfigWidget.h +++ b/src/ui/configuration/AP2ConfigWidget.h @@ -12,6 +12,7 @@ public: protected: UASInterface *m_uas; void showNullMAVErrorMessageBox(); + void initConnections(); signals: public slots: diff --git a/src/ui/configuration/AccelCalibrationConfig.cc b/src/ui/configuration/AccelCalibrationConfig.cc index 945ba5e2e09fdc0322975756ecac80e4213dc5db..f552580d1f9ed9032cc70b9cb3f987ac01d35ca5 100644 --- a/src/ui/configuration/AccelCalibrationConfig.cc +++ b/src/ui/configuration/AccelCalibrationConfig.cc @@ -6,9 +6,8 @@ AccelCalibrationConfig::AccelCalibrationConfig(QWidget *parent) : AP2ConfigWidge ui.setupUi(this); connect(ui.calibrateAccelButton,SIGNAL(clicked()),this,SLOT(calibrateButtonClicked())); - connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(activeUASSet(UASInterface*))); - activeUASSet(UASManager::instance()->getActiveUAS()); m_accelAckCount=0; + initConnections(); } AccelCalibrationConfig::~AccelCalibrationConfig() @@ -58,9 +57,29 @@ void AccelCalibrationConfig::calibrateButtonClicked() { m_uas->executeCommandAck(m_accelAckCount++,true); ui.calibrateAccelButton->setText("Calibrate\nAccelerometer"); + if (m_accelAckCount > 8) + { + //We've clicked too many times! Reset. + for (int i=0;i<8;i++) + { + m_uas->executeCommandAck(i,true); + } + m_accelAckCount = 0; + } } } +void AccelCalibrationConfig::hideEvent(QHideEvent *evt) +{ + if (!m_uas || !m_accelAckCount) + { + return; + } + for (int i=m_accelAckCount;i<8;i++) + { + m_uas->executeCommandAck(i,true); //Clear out extra commands. + } +} void AccelCalibrationConfig::uasTextMessageReceived(int uasid, int componentid, int severity, QString text) { //command received: " Severity 1 @@ -71,7 +90,7 @@ void AccelCalibrationConfig::uasTextMessageReceived(int uasid, int componentid, if (m_accelAckCount == 0) { //Calibration Sucessful\r" - ui.calibrateAccelButton->setText("Any\nKey"); + ui.calibrateAccelButton->setText("Continue"); m_accelAckCount++; } if (m_accelAckCount == 7) @@ -87,11 +106,21 @@ void AccelCalibrationConfig::uasTextMessageReceived(int uasid, int componentid, { m_accelAckCount = 0; } + else if (text.contains("Calibration") && text.contains("FAILED")) //Failure + { + m_accelAckCount = 0; + } ui.outputLabel->setText(ui.outputLabel->text() + "\n" + text); } else { - ui.outputLabel->setText(text); + ui.outputLabel->setText(text.replace("press any key","click Continue below")); + if (!this->isVisible()) + { + //Clear out! + m_uas->executeCommandAck(m_accelAckCount++,true); + ui.calibrateAccelButton->setText("Calibrate\nAccelerometer"); + } } } diff --git a/src/ui/configuration/AccelCalibrationConfig.h b/src/ui/configuration/AccelCalibrationConfig.h index ef6f6e1a17a50236368553c62490ca9a98965e92..152656253405c78df81c81b3a68a93f65fa86683 100644 --- a/src/ui/configuration/AccelCalibrationConfig.h +++ b/src/ui/configuration/AccelCalibrationConfig.h @@ -14,6 +14,8 @@ class AccelCalibrationConfig : public AP2ConfigWidget public: explicit AccelCalibrationConfig(QWidget *parent = 0); ~AccelCalibrationConfig(); +protected: + void hideEvent(QHideEvent *evt); private slots: void activeUASSet(UASInterface *uas); void calibrateButtonClicked(); diff --git a/src/ui/configuration/AdvParameterList.cc b/src/ui/configuration/AdvParameterList.cc index 971f290e615ccfe4ffd2dd61ccc8995e9640460c..24a5bc384e146e91954e7da57caedd6892bd6e14 100644 --- a/src/ui/configuration/AdvParameterList.cc +++ b/src/ui/configuration/AdvParameterList.cc @@ -11,7 +11,7 @@ AdvParameterList::AdvParameterList(QWidget *parent) : AP2ConfigWidget(parent) ui.tableWidget->setColumnWidth(1,100); ui.tableWidget->setColumnWidth(2,200); ui.tableWidget->setColumnWidth(3,800); - + initConnections(); } AdvParameterList::~AdvParameterList() diff --git a/src/ui/configuration/AdvParameterList.ui b/src/ui/configuration/AdvParameterList.ui index 9b9d40849b5392d85b9da2e490ad3fe1a1f5ccdb..3b18893d2779326a068dca7fbd15ced27f7f1b0a 100644 --- a/src/ui/configuration/AdvParameterList.ui +++ b/src/ui/configuration/AdvParameterList.ui @@ -17,7 +17,7 @@ - <h2>Advanced Parameter List</h2> + <h2>Full Parameter List</h2> diff --git a/src/ui/configuration/AdvancedParamConfig.cc b/src/ui/configuration/AdvancedParamConfig.cc index 8410b6a002a0a4021096108c31f854a194ca711e..98f0c1c62e4df6cca8798dc05b15c1df7fe96da1 100644 --- a/src/ui/configuration/AdvancedParamConfig.cc +++ b/src/ui/configuration/AdvancedParamConfig.cc @@ -4,6 +4,7 @@ AdvancedParamConfig::AdvancedParamConfig(QWidget *parent) : AP2ConfigWidget(parent) { ui.setupUi(this); + initConnections(); } AdvancedParamConfig::~AdvancedParamConfig() @@ -11,7 +12,9 @@ AdvancedParamConfig::~AdvancedParamConfig() } void AdvancedParamConfig::addRange(QString title,QString description,QString param,double min,double max) { - ParamWidget *widget = new ParamWidget(ui.scrollAreaWidgetContents); + ParamWidget *widget = new ParamWidget(param,ui.scrollAreaWidgetContents); + connect(widget,SIGNAL(doubleValueChanged(QString,double)),this,SLOT(doubleValueChanged(QString,double))); + connect(widget,SIGNAL(intValueChanged(QString,int)),this,SLOT(intValueChanged(QString,int))); m_paramToWidgetMap[param] = widget; widget->setupDouble(title + "(" + param + ")",description,0,min,max); ui.verticalLayout->addWidget(widget); @@ -20,7 +23,9 @@ void AdvancedParamConfig::addRange(QString title,QString description,QString par void AdvancedParamConfig::addCombo(QString title,QString description,QString param,QList > valuelist) { - ParamWidget *widget = new ParamWidget(ui.scrollAreaWidgetContents); + ParamWidget *widget = new ParamWidget(param,ui.scrollAreaWidgetContents); + connect(widget,SIGNAL(doubleValueChanged(QString,double)),this,SLOT(doubleValueChanged(QString,double))); + connect(widget,SIGNAL(intValueChanged(QString,int)),this,SLOT(intValueChanged(QString,int))); m_paramToWidgetMap[param] = widget; widget->setupCombo(title + "(" + param + ")",description,valuelist); ui.verticalLayout->addWidget(widget); @@ -30,6 +35,30 @@ void AdvancedParamConfig::parameterChanged(int uas, int component, QString param { if (m_paramToWidgetMap.contains(parameterName)) { - m_paramToWidgetMap[parameterName]->setValue(value.toDouble()); + if (value.type() == QVariant::Double) + { + m_paramToWidgetMap[parameterName]->setValue(value.toDouble()); + } + else + { + m_paramToWidgetMap[parameterName]->setValue(value.toInt()); + } } } +void AdvancedParamConfig::doubleValueChanged(QString param,double value) +{ + if (!m_uas) + { + this->showNullMAVErrorMessageBox(); + } + m_uas->getParamManager()->setParameter(1,param,value); +} + +void AdvancedParamConfig::intValueChanged(QString param,int value) +{ + if (!m_uas) + { + this->showNullMAVErrorMessageBox(); + } + m_uas->getParamManager()->setParameter(1,param,value); +} diff --git a/src/ui/configuration/AdvancedParamConfig.h b/src/ui/configuration/AdvancedParamConfig.h index 6d52ede4cdc194285590f47760bce096ec14a02e..07e55d61d1d697e360861cc9814afaada7f2bdb1 100644 --- a/src/ui/configuration/AdvancedParamConfig.h +++ b/src/ui/configuration/AdvancedParamConfig.h @@ -16,6 +16,8 @@ public: void addCombo(QString title,QString description,QString param,QList > valuelist); private slots: void parameterChanged(int uas, int component, QString parameterName, QVariant value); + void doubleValueChanged(QString param,double value); + void intValueChanged(QString param,int value); private: QMap m_paramToWidgetMap; Ui::AdvancedParamConfig ui; diff --git a/src/ui/configuration/AirspeedConfig.cc b/src/ui/configuration/AirspeedConfig.cc index b5c91f33b7c1ce6cfe95816e064d86b4d3ca105b..27699996b103dec27c5dc40e2169d609a1a85e2e 100644 --- a/src/ui/configuration/AirspeedConfig.cc +++ b/src/ui/configuration/AirspeedConfig.cc @@ -6,6 +6,7 @@ AirspeedConfig::AirspeedConfig(QWidget *parent) : AP2ConfigWidget(parent) ui.setupUi(this); connect(ui.enableCheckBox,SIGNAL(toggled(bool)),this,SLOT(enableCheckBoxClicked(bool))); connect(ui.useAirspeedCheckBox,SIGNAL(toggled(bool)),this,SLOT(useCheckBoxClicked(bool))); + initConnections(); } AirspeedConfig::~AirspeedConfig() diff --git a/src/ui/configuration/ApmFirmwareConfig.cc b/src/ui/configuration/ApmFirmwareConfig.cc new file mode 100644 index 0000000000000000000000000000000000000000..4ef8950d592de49ba3cc094d28cb3263ad5e5492 --- /dev/null +++ b/src/ui/configuration/ApmFirmwareConfig.cc @@ -0,0 +1,461 @@ +#include + +#include "LinkManager.h" +#include "LinkInterface.h" +#include "qserialport.h" +#include "qserialportinfo.h" +#include "SerialLink.h" + +#include "ApmFirmwareConfig.h" + +ApmFirmwareConfig::ApmFirmwareConfig(QWidget *parent) : QWidget(parent) +{ + ui.setupUi(this); + //firmwareStatus = 0; + m_betaFirmwareChecked = false; + m_tempFirmwareFile=0; + // + + //QNetworkRequest req(QUrl("https://raw.github.com/diydrones/binary/master/Firmware/firmware2.xml")); + + + + m_networkManager = new QNetworkAccessManager(this); + + connect(ui.roverPushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + connect(ui.planePushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + connect(ui.copterPushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + connect(ui.hexaPushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + connect(ui.octaQuadPushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + connect(ui.octaPushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + connect(ui.quadPushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + connect(ui.triPushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + connect(ui.y6PushButton,SIGNAL(clicked()),this,SLOT(flashButtonClicked())); + QTimer::singleShot(10000,this,SLOT(requestFirmwares())); + connect(ui.betaFirmwareButton,SIGNAL(clicked(bool)),this,SLOT(betaFirmwareButtonClicked(bool))); + + ui.progressBar->setMaximum(100); + ui.progressBar->setValue(0); + + ui.textBrowser->setVisible(false); + connect(ui.showOutputCheckBox,SIGNAL(clicked(bool)),ui.textBrowser,SLOT(setShown(bool))); + + /*addBetaLabel(ui.roverPushButton); + addBetaLabel(ui.planePushButton); + addBetaLabel(ui.copterPushButton); + addBetaLabel(ui.quadPushButton); + addBetaLabel(ui.hexaPushButton); + addBetaLabel(ui.octaQuadPushButton); + addBetaLabel(ui.octaPushButton); + addBetaLabel(ui.triPushButton); + addBetaLabel(ui.y6PushButton);*/ + +} +void ApmFirmwareConfig::hideBetaLabels() +{ + for (int i=0;ihide(); + } + ui.warningLabel->hide(); +} + +void ApmFirmwareConfig::showBetaLabels() +{ + for (int i=0;ishow(); + } + ui.warningLabel->show(); +} + +void ApmFirmwareConfig::addBetaLabel(QWidget *parent) +{ + QLabel *label = new QLabel(parent); + QVBoxLayout *layout = new QVBoxLayout(); + parent->setLayout(layout); + label->setAlignment(Qt::AlignRight | Qt::AlignBottom); + label->setText("

BETA

"); + layout->addWidget(label); + m_betaButtonLabelList.append(label); +} + +void ApmFirmwareConfig::requestBetaFirmwares() +{ + m_betaFirmwareChecked = true; + showBetaLabels(); + QNetworkReply *reply1 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/beta/apm2-heli/git-version.txt"))); + QNetworkReply *reply2 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/beta/apm2-quad/git-version.txt"))); + QNetworkReply *reply3 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/beta/apm2-hexa/git-version.txt"))); + QNetworkReply *reply4 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/beta/apm2-octa/git-version.txt"))); + QNetworkReply *reply5 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/beta/apm2-octa-quad/git-version.txt"))); + QNetworkReply *reply6 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/beta/apm2-tri/git-version.txt"))); + QNetworkReply *reply7 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/beta/apm2-y6/git-version.txt"))); + QNetworkReply *reply8 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Plane/beta/apm2/git-version.txt"))); + QNetworkReply *reply9 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Rover/beta/apm2/git-version.txt"))); + + m_buttonToUrlMap[ui.roverPushButton] = "http://firmware.diydrones.com/Rover/beta/apm2/APMrover2.hex"; + m_buttonToUrlMap[ui.planePushButton] = "http://firmware.diydrones.com/Plane/beta/apm2/ArduPlane.hex"; + m_buttonToUrlMap[ui.copterPushButton] = "http://firmware.diydrones.com/Copter/beta/apm2-heli/ArduCopter.hex"; + m_buttonToUrlMap[ui.hexaPushButton] = "http://firmware.diydrones.com/Copter/beta/apm2-hexa/ArduCopter.hex"; + m_buttonToUrlMap[ui.octaQuadPushButton] = "http://firmware.diydrones.com/Copter/beta/apm2-octa-quad/ArduCopter.hex"; + m_buttonToUrlMap[ui.octaPushButton] = "http://firmware.diydrones.com/Copter/beta/apm2-octa/ArduCopter.hex"; + m_buttonToUrlMap[ui.quadPushButton] = "http://firmware.diydrones.com/Copter/beta/apm2-quad/ArduCopter.hex"; + m_buttonToUrlMap[ui.triPushButton] = "http://firmware.diydrones.com/Copter/beta/apm2-tri/ArduCopter.hex"; + m_buttonToUrlMap[ui.y6PushButton] = "http://firmware.diydrones.com/Copter/beta/apm2-y6/ArduCopter.hex"; + + //http://firmware.diydrones.com/Plane/stable/apm2/ArduPlane.hex + connect(reply1,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply1,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply2,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply2,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply3,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply3,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply4,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply4,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply5,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply5,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply6,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply6,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply7,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply7,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply8,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply8,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply9,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply9,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + qDebug() << "Getting Beta firmware..."; +} + +void ApmFirmwareConfig::requestFirmwares() +{ + m_betaFirmwareChecked = false; + hideBetaLabels(); + QNetworkReply *reply1 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/stable/apm2-heli/git-version.txt"))); + QNetworkReply *reply2 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/stable/apm2-quad/git-version.txt"))); + QNetworkReply *reply3 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/stable/apm2-hexa/git-version.txt"))); + QNetworkReply *reply4 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/stable/apm2-octa/git-version.txt"))); + QNetworkReply *reply5 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/stable/apm2-octa-quad/git-version.txt"))); + QNetworkReply *reply6 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/stable/apm2-tri/git-version.txt"))); + QNetworkReply *reply7 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Copter/stable/apm2-y6/git-version.txt"))); + QNetworkReply *reply8 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Plane/stable/apm2/git-version.txt"))); + QNetworkReply *reply9 = m_networkManager->get(QNetworkRequest(QUrl("http://firmware.diydrones.com/Rover/stable/apm2/git-version.txt"))); + + m_buttonToUrlMap[ui.roverPushButton] = "http://firmware.diydrones.com/Rover/stable/apm2/APMrover2.hex"; + m_buttonToUrlMap[ui.planePushButton] = "http://firmware.diydrones.com/Plane/stable/apm2/ArduPlane.hex"; + m_buttonToUrlMap[ui.copterPushButton] = "http://firmware.diydrones.com/Copter/stable/apm2-heli/ArduCopter.hex"; + m_buttonToUrlMap[ui.hexaPushButton] = "http://firmware.diydrones.com/Copter/stable/apm2-hexa/ArduCopter.hex"; + m_buttonToUrlMap[ui.octaQuadPushButton] = "http://firmware.diydrones.com/Copter/stable/apm2-octa-quad/ArduCopter.hex"; + m_buttonToUrlMap[ui.octaPushButton] = "http://firmware.diydrones.com/Copter/stable/apm2-octa/ArduCopter.hex"; + m_buttonToUrlMap[ui.quadPushButton] = "http://firmware.diydrones.com/Copter/stable/apm2-quad/ArduCopter.hex"; + m_buttonToUrlMap[ui.triPushButton] = "http://firmware.diydrones.com/Copter/stable/apm2-tri/ArduCopter.hex"; + m_buttonToUrlMap[ui.y6PushButton] = "http://firmware.diydrones.com/Copter/stable/apm2-y6/ArduCopter.hex"; + + //http://firmware.diydrones.com/Plane/stable/apm2/ArduPlane.hex + connect(reply1,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply1,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply2,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply2,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply3,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply3,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply4,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply4,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply5,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply5,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply6,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply6,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply7,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply7,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply8,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply8,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply9,SIGNAL(finished()),this,SLOT(firmwareListFinished())); + connect(reply9,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + qDebug() << "Getting Stable firmware..."; +} + +void ApmFirmwareConfig::betaFirmwareButtonClicked(bool betafirmwareenabled) +{ + if (betafirmwareenabled) + { + ui.label->setText(tr("

Beta Firmware

")); + ui.betaFirmwareButton->setText(tr("Stable Firmware")); + requestBetaFirmwares(); + } + else + { + ui.label->setText(tr("

Firmware

")); + ui.betaFirmwareButton->setText(tr("Beta Firmware")); + requestFirmwares(); + } +} +void ApmFirmwareConfig::firmwareProcessFinished(int status) +{ + QProcess *proc = qobject_cast(sender()); + if (!proc) + { + return; + } + if (status != 0) + { + //Error of some kind + QMessageBox::information(0,tr("Error"),tr("An error has occured during the upload process. See window for details")); + ui.textBrowser->setVisible(true); + ui.showOutputCheckBox->setChecked(true); + ui.textBrowser->setPlainText(ui.textBrowser->toPlainText().append("\n\nERROR!!\n" + proc->errorString())); + QScrollBar *sb = ui.textBrowser->verticalScrollBar(); + if (sb) + { + sb->setValue(sb->maximum()); + } + ui.statusLabel->setText(tr("Error during upload")); + } + else + { + //Ensure we're reading 100% + ui.progressBar->setValue(100); + ui.statusLabel->setText(tr("Upload complete")); + } + //qDebug() << "Upload finished!" << QString::number(status); + m_tempFirmwareFile->deleteLater(); //This will remove the temporary file. + m_tempFirmwareFile = 0; + +} +void ApmFirmwareConfig::firmwareProcessReadyRead() +{ + QProcess *proc = qobject_cast(sender()); + if (!proc) + { + return; + } + QString output = proc->readAllStandardError() + proc->readAllStandardOutput(); + if (output.contains("Writing")) + { + //firmwareStatus->resetProgress(); + ui.progressBar->setValue(0); + } + else if (output.contains("Reading")) + { + ui.progressBar->setValue(50); + } + if (output.startsWith("#")) + { + ui.progressBar->setValue(ui.progressBar->value()+1); + + ui.textBrowser->setPlainText(ui.textBrowser->toPlainText().append(output)); + QScrollBar *sb = ui.textBrowser->verticalScrollBar(); + if (sb) + { + sb->setValue(sb->maximum()); + } + } + else + { + ui.textBrowser->setPlainText(ui.textBrowser->toPlainText().append(output + "\n")); + QScrollBar *sb = ui.textBrowser->verticalScrollBar(); + if (sb) + { + sb->setValue(sb->maximum()); + } + } + + qDebug() << "E:" << output; + //qDebug() << "AVR Output:" << proc->readAllStandardOutput(); + //qDebug() << "AVR Output:" << proc->readAllStandardError(); +} + +void ApmFirmwareConfig::downloadFinished() +{ + qDebug() << "Download finished, flashing firmware"; + QNetworkReply *reply = qobject_cast(sender()); + if (!reply) + { + return; + } + QByteArray hex = reply->readAll(); + m_tempFirmwareFile = new QTemporaryFile(); + m_tempFirmwareFile->open(); + m_tempFirmwareFile->write(hex); + m_tempFirmwareFile->flush(); + m_tempFirmwareFile->close(); + //tempfirmware.fileName() + QProcess *process = new QProcess(this); + connect(process,SIGNAL(finished(int)),this,SLOT(firmwareProcessFinished(int))); + connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(firmwareProcessReadyRead())); + connect(process,SIGNAL(readyReadStandardError()),this,SLOT(firmwareProcessReadyRead())); + connect(process,SIGNAL(error(QProcess::ProcessError)),this,SLOT(firmwareProcessError(QProcess::ProcessError))); + QList portList = QSerialPortInfo::availablePorts(); + + + foreach (const QSerialPortInfo &info, portList) + { + qDebug() << "PortName : " << info.portName() + << "Description : " << info.description(); + qDebug() << "Manufacturer: " << info.manufacturer(); + + + } + + //info.manufacturer() == "Arduino LLC (www.arduino.cc)" + //info.description() == "%mega2560.name%" + + qDebug() << "Attempting to reset port"; + + QSerialPort port; + + port.setPortName(m_detectedComPort); + port.open(QIODevice::ReadWrite); + port.setDataTerminalReady(true); + port.waitForBytesWritten(250); + port.setDataTerminalReady(false); + port.close(); + + QString avrdudeExecutable; + QStringList stringList; + + ui.statusLabel->setText(tr("Flashing")); +#ifdef Q_OS_WIN + stringList = QStringList() << "-Cavrdude/avrdude.conf" << "-pm2560" + << "-cstk500" << QString("-P").append(m_detectedComPort) + << QString("-Uflash:w:").append(m_tempFirmwareFile->fileName()).append(":i"); + + avrdudeExecutable = "avrdude/avrdude.exe"; +#endif +#ifdef Q_OS_MAC + stringList = QStringList() << "-v" << "-pm2560" + << "-cstk500" << QString("-P/dev/cu.").append(m_detectedComPort) + << QString("-Uflash:w:").append(m_tempFirmwareFile->fileName()).append(":i"); + avrdudeExecutable = "/usr/local/CrossPack-AVR/bin/avrdude"; +#endif + + // Start the Flashing + qDebug() << avrdudeExecutable << stringList; + process->start(avrdudeExecutable,stringList); +} +void ApmFirmwareConfig::firmwareProcessError(QProcess::ProcessError error) +{ + qDebug() << "Error:" << error; +} +void ApmFirmwareConfig::firmwareDownloadProgress(qint64 received,qint64 total) +{ + ui.progressBar->setValue( 100.0 * ((double)received/(double)total)); +} + +void ApmFirmwareConfig::flashButtonClicked() +{ + QPushButton *senderbtn = qobject_cast(sender()); + if (m_buttonToUrlMap.contains(senderbtn)) + { + bool foundconnected = false; + for (int i=0;igetLinks().size();i++) + { + if (LinkManager::instance()->getLinks()[i]->isConnected()) + { + //This is likely the serial link we want. + SerialLink *link = qobject_cast(LinkManager::instance()->getLinks()[i]); + if (!link) + { + qDebug() << "Eror, trying to program over a non serial link. This should not happen"; + return; + } + if (!(QMessageBox::question(this,tr("WARNING"),tr("You are about to upload new firmware to your board. This will disconnect you if you are currently connected. Be sure the MAV is on the ground, and connected over USB/Serial link.\n\nDo you wish to proceed?"),QMessageBox::Yes,QMessageBox::No) == QMessageBox::Yes)) + { + return; + } + + m_detectedComPort = link->getPortName(); + link->requestReset(); + foundconnected = true; + link->disconnect(); + link->wait(1000); // Wait 1 second for it to disconnect. + } + } + if (!foundconnected) + { + QMessageBox::information(0,tr("Error"),tr("You must be connected to a MAV over serial link to flash firmware. Please connect to a MAV then try again")); + return; + } + + qDebug() << "Go download:" << m_buttonToUrlMap[senderbtn]; + QNetworkReply *reply = m_networkManager->get(QNetworkRequest(QUrl(m_buttonToUrlMap[senderbtn]))); + //http://firmware.diydrones.com/Plane/stable/apm2/ArduPlane.hex + connect(reply,SIGNAL(finished()),this,SLOT(downloadFinished())); + + connect(reply,SIGNAL(error(QNetworkReply::NetworkError)),this,SLOT(firmwareListError(QNetworkReply::NetworkError))); + connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(firmwareDownloadProgress(qint64,qint64))); + ui.statusLabel->setText("Downloading"); + } +} + +void ApmFirmwareConfig::firmwareListError(QNetworkReply::NetworkError error) +{ + QNetworkReply *reply = qobject_cast(sender()); + qDebug() << "Error!" << reply->errorString(); +} +bool ApmFirmwareConfig::stripVersionFromGitReply(QString url, QString reply,QString type,QString stable,QString *out) +{ + if (url.contains(type) && url.contains("git-version.txt") && url.contains(stable)) + { + QString version = reply.mid(reply.indexOf("APMVERSION:")+12).replace("\n","").replace("\r","").trimmed(); + *out = version; + return true; + } + return false; + +} + +void ApmFirmwareConfig::firmwareListFinished() +{ + QNetworkReply *reply = qobject_cast(sender()); + QString replystr = reply->readAll(); + QString outstr = ""; + if (stripVersionFromGitReply(reply->url().toString(),replystr,"apm2-heli",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.copterLabel->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + if (stripVersionFromGitReply(reply->url().toString(),replystr,"apm2-quad",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.quadLabel->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + if (stripVersionFromGitReply(reply->url().toString(),replystr,"apm2-hexa",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.hexaLabel->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + if (stripVersionFromGitReply(reply->url().toString(),replystr,"apm2-octa-quad",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.octaQuadLabel->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + if (stripVersionFromGitReply(reply->url().toString(),replystr,"apm2-octa",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.octaLabel->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + if (stripVersionFromGitReply(reply->url().toString(),replystr,"apm2-tri",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.triLabel->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + if (stripVersionFromGitReply(reply->url().toString(),replystr,"apm2-y6",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.y6Label->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + if (stripVersionFromGitReply(reply->url().toString(),replystr,"Plane",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.planeLabel->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + if (stripVersionFromGitReply(reply->url().toString(),replystr,"Rover",(m_betaFirmwareChecked ? "beta" : "stable"),&outstr)) + { + ui.roverLabel->setText((m_betaFirmwareChecked ? "BETA " : "") + outstr); + return; + } + //qDebug() << "Match not found for:" << reply->url(); + //qDebug() << "Git version line:" << replystr; +} + +ApmFirmwareConfig::~ApmFirmwareConfig() +{ +} diff --git a/src/ui/configuration/ApmFirmwareConfig.h b/src/ui/configuration/ApmFirmwareConfig.h new file mode 100644 index 0000000000000000000000000000000000000000..07c1fa9b15a8553e1ea2fadf85b091ec55d3416b --- /dev/null +++ b/src/ui/configuration/ApmFirmwareConfig.h @@ -0,0 +1,66 @@ +#ifndef APMFIRMWARECONFIG_H +#define APMFIRMWARECONFIG_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "qserialport.h" +#include "ui_ApmFirmwareConfig.h" + +class ApmFirmwareConfig : public QWidget +{ + Q_OBJECT + +public: + explicit ApmFirmwareConfig(QWidget *parent = 0); + ~ApmFirmwareConfig(); +private slots: + void firmwareListFinished(); + void firmwareListError(QNetworkReply::NetworkError error); + void flashButtonClicked(); + void betaFirmwareButtonClicked(bool betafirmwareenabled); + void downloadFinished(); + void firmwareProcessFinished(int status); + void firmwareProcessReadyRead(); + void firmwareProcessError(QProcess::ProcessError error); + void firmwareDownloadProgress(qint64 received,qint64 total); + void requestFirmwares(); + void requestBetaFirmwares(); +private: + void addBetaLabel(QWidget *parent); + void hideBetaLabels(); + void showBetaLabels(); + //ApmFirmwareStatus *firmwareStatus; + QString m_detectedComPort; + QTemporaryFile *m_tempFirmwareFile; + QNetworkAccessManager *m_networkManager; + QList m_betaButtonLabelList; + bool stripVersionFromGitReply(QString url,QString reply,QString type,QString stable,QString *out); + bool m_betaFirmwareChecked; + QMap m_buttonToUrlMap; + Ui::ApmFirmwareConfig ui; + class FirmwareDef + { + public: + QString url; + QString url2560; + QString url25602; + QString urlpx4; + QString type; + QString name; + QString desc; + int version; + }; + QList m_firmwareList; +}; + +#endif // APMFIRMWARECONFIG_H diff --git a/src/ui/configuration/ApmFirmwareConfig.ui b/src/ui/configuration/ApmFirmwareConfig.ui new file mode 100644 index 0000000000000000000000000000000000000000..4350d71e9c8ce8ccb33617e9695548f1125666a8 --- /dev/null +++ b/src/ui/configuration/ApmFirmwareConfig.ui @@ -0,0 +1,514 @@ + + + ApmFirmwareConfig + + + + 0 + 0 + 868 + 684 + + + + Form + + + + + 10 + 20 + 211 + 31 + + + + <h2>Firmware</h2> + + + + + + 30 + 60 + 801 + 371 + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/heli.png:/files/images/firmware/heli.png + + + + 150 + 150 + + + + + + + + ArduCopter vX.XX + + + Qt::AlignCenter + + + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/quadplus.png:/files/images/firmware/quadplus.png + + + + 150 + 150 + + + + + + + + ArduCopter vX.XX + + + Qt::AlignCenter + + + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/plane.png:/files/images/firmware/plane.png + + + + 150 + 150 + + + + + + + + ArduPlane vX.XX + + + Qt::AlignCenter + + + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/triy.png:/files/images/firmware/triy.png + + + + 150 + 150 + + + + + + + + ArduCopter vX.XX + + + Qt::AlignCenter + + + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/hexay.png:/files/images/firmware/hexay.png + + + + 150 + 150 + + + + + + + + ArduCopter vX.XX + + + Qt::AlignCenter + + + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/rover.png:/files/images/firmware/rover.png + + + + 150 + 150 + + + + + + + + ArduRover vX.XX + + + Qt::AlignCenter + + + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/octaplus.png:/files/images/firmware/octaplus.png + + + + 150 + 150 + + + + + + + + ArduCopter vX.XX + + + Qt::AlignCenter + + + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/octx.png:/files/images/firmware/octx.png + + + + 150 + 150 + + + + + + + + ArduCopter vX.XX + + + Qt::AlignCenter + + + + + + + + + + + + 150 + 150 + + + + + 150 + 150 + + + + + + + + :/files/images/firmware/hexaplus.png:/files/images/firmware/hexaplus.png + + + + 150 + 150 + + + + + + + + ArduCopter vX.XX + + + Qt::AlignCenter + + + + + + + + + + + 700 + 440 + 131 + 23 + + + + Beta firmware + + + true + + + false + + + + + + 30 + 490 + 801 + 23 + + + + 24 + + + + + + 30 + 520 + 801 + 151 + + + + + + + 710 + 470 + 101 + 17 + + + + Show Output + + + + + + 30 + 440 + 141 + 21 + + + + Status + + + + + + 180 + 440 + 491 + 16 + + + + <html><head/><body><p><span style=" font-size:large; font-weight:600; color:#e90000;">WARNING:</span><span style=" font-size:large; font-weight:600; color:#ffaa00;"> Only install BETA firmware if you are an experienced tester.</span></p></body></html> + + + + + + + + diff --git a/src/ui/configuration/ApmHardwareConfig.cc b/src/ui/configuration/ApmHardwareConfig.cc index 225f6a1f2b3794494cfce3e6d5f206abd3ce2f13..f576e6fa07ae9013016295f0e4ee8260036b4458 100644 --- a/src/ui/configuration/ApmHardwareConfig.cc +++ b/src/ui/configuration/ApmHardwareConfig.cc @@ -60,9 +60,9 @@ ApmHardwareConfig::ApmHardwareConfig(QWidget *parent) : QWidget(parent) connect(ui.frameTypeButton,SIGNAL(clicked()),this,SLOT(activateStackedWidget())); - QWidget *widget = new QWidget(this); - ui.stackedWidget->addWidget(widget); //Firmware placeholder. - m_buttonToConfigWidgetMap[ui.firmwareButton] = widget; + m_apmFirmwareConfig = new ApmFirmwareConfig(this); + ui.stackedWidget->addWidget(m_apmFirmwareConfig); //Firmware placeholder. + m_buttonToConfigWidgetMap[ui.firmwareButton] = m_apmFirmwareConfig; connect(ui.firmwareButton,SIGNAL(clicked()),this,SLOT(activateStackedWidget())); m_frameConfig = new FrameTypeConfig(this); diff --git a/src/ui/configuration/ApmHardwareConfig.h b/src/ui/configuration/ApmHardwareConfig.h index aea82cde735fff99c1640b52e2a6daadff37d1cc..427403b6d9ac8c1b35f8d6ea29b193503ae4bc48 100644 --- a/src/ui/configuration/ApmHardwareConfig.h +++ b/src/ui/configuration/ApmHardwareConfig.h @@ -49,6 +49,7 @@ This file is part of the QGROUNDCONTROL project #include "CameraGimbalConfig.h" #include "AntennaTrackerConfig.h" #include "ApmPlaneLevel.h" +#include "ApmFirmwareConfig.h" class ApmHardwareConfig : public QWidget { @@ -58,20 +59,22 @@ public: explicit ApmHardwareConfig(QWidget *parent = 0); ~ApmHardwareConfig(); private: - FrameTypeConfig *m_frameConfig; - CompassConfig *m_compassConfig; - AccelCalibrationConfig *m_accelConfig; - RadioCalibrationConfig *m_radioConfig; + QPointer m_frameConfig; + QPointer m_compassConfig; + QPointer m_accelConfig; + QPointer m_radioConfig; + + QPointer m_apmFirmwareConfig; + QPointer m_radio3drConfig; + QPointer m_batteryConfig; + QPointer m_sonarConfig; + QPointer m_airspeedConfig; + QPointer m_opticalFlowConfig; + QPointer m_osdConfig; + QPointer m_cameraGimbalConfig; + QPointer m_antennaTrackerConfig; + QPointer m_planeLevel; - Radio3DRConfig *m_radio3drConfig; - BatteryMonitorConfig *m_batteryConfig; - SonarConfig *m_sonarConfig; - AirspeedConfig *m_airspeedConfig; - OpticalFlowConfig *m_opticalFlowConfig; - OsdConfig *m_osdConfig; - CameraGimbalConfig *m_cameraGimbalConfig; - AntennaTrackerConfig *m_antennaTrackerConfig; - ApmPlaneLevel *m_planeLevel; private slots: void activeUASSet(UASInterface *uas); void activateStackedWidget(); diff --git a/src/ui/configuration/ApmHighlighter.cc b/src/ui/configuration/ApmHighlighter.cc new file mode 100644 index 0000000000000000000000000000000000000000..8e09ac6f0e3d75a7a8e0ee919cdc50681e39c12e --- /dev/null +++ b/src/ui/configuration/ApmHighlighter.cc @@ -0,0 +1,53 @@ +/*===================================================================== + +APM_PLANNER Open Source Ground Control Station + +(c) 2013, Bill Bonney + +This file is part of the APM_PLANNER project + + APM_PLANNER is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + APM_PLANNER 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with APM_PLANNER. If not, see . + +======================================================================*/ + +/** + * @file + * @brief APM Highligther for ArduPilot Console. + * + * @author Bill Bonney + * + */ + +#include "ApmHighlighter.h" + +APMHighlighter::APMHighlighter(QObject *parent) : + QSyntaxHighlighter(parent) +{ +} + +void APMHighlighter::highlightBlock(const QString &text) + { + QTextCharFormat myClassFormat; + myClassFormat.setFontWeight(QFont::Bold); + myClassFormat.setForeground(Qt::darkMagenta); + QString pattern = "^\\Ardu[A-Za-z]+\\b"; + + QRegExp expression(pattern); + int index = text.indexOf(expression); + while (index >= 0) { + int length = expression.matchedLength(); + setFormat(index, length, myClassFormat); + index = text.indexOf(expression, index + length); + } + } diff --git a/src/ui/configuration/ApmHighlighter.h b/src/ui/configuration/ApmHighlighter.h new file mode 100644 index 0000000000000000000000000000000000000000..e4f9b645f129995ff257bb3cf36d13b6c888abd4 --- /dev/null +++ b/src/ui/configuration/ApmHighlighter.h @@ -0,0 +1,51 @@ +/*===================================================================== + +APM_PLANNER Open Source Ground Control Station + +(c) 2013, Bill Bonney + +This file is part of the APM_PLANNER project + + APM_PLANNER is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + APM_PLANNER 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with APM_PLANNER. If not, see . + +======================================================================*/ + +/** + * @file + * @brief APM Highligther for ArduPilot Console. + * + * @author Bill Bonney + * + */ + +#ifndef APMHIGHLIGHTER_H +#define APMHIGHLIGHTER_H + +#include "ApmHighlighter.h" +#include + +class APMHighlighter : public QSyntaxHighlighter +{ + Q_OBJECT +public: + explicit APMHighlighter(QObject *parent = 0); + void highlightBlock(const QString &text); + +signals: + +public slots: + +}; + +#endif // APMHIGHLIGHTER_H diff --git a/src/ui/configuration/ApmPlaneLevel.cc b/src/ui/configuration/ApmPlaneLevel.cc index c93193055f32c823853b53fd6cb68d335d909683..49b1b20f5e1811f3744f6b73037f17a236251dd5 100644 --- a/src/ui/configuration/ApmPlaneLevel.cc +++ b/src/ui/configuration/ApmPlaneLevel.cc @@ -6,6 +6,7 @@ ApmPlaneLevel::ApmPlaneLevel(QWidget *parent) : AP2ConfigWidget(parent) ui.setupUi(this); connect(ui.levelPushButton,SIGNAL(clicked()),this,SLOT(levelClicked())); connect(ui.manualLevelCheckBox,SIGNAL(toggled(bool)),this,SLOT(manualCheckBoxToggled(bool))); + initConnections(); } ApmPlaneLevel::~ApmPlaneLevel() diff --git a/src/ui/configuration/ApmSoftwareConfig.cc b/src/ui/configuration/ApmSoftwareConfig.cc index fabc49139b3b18a3c8c9b38ee3866db9f0679741..a5308dab76eeeb3c8080336a93e99a012d2679a0 100644 --- a/src/ui/configuration/ApmSoftwareConfig.cc +++ b/src/ui/configuration/ApmSoftwareConfig.cc @@ -85,23 +85,27 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) ui.advancedParamButton->setVisible(true); ui.advParamListButton->setVisible(true); + QString compare = ""; if (uas->getSystemType() == MAV_TYPE_FIXED_WING) { ui.arduPlanePidButton->setVisible(true); ui.arduCopterPidButton->setVisible(false); ui.arduRoverPidButton->setVisible(false); + compare = "ArduPlane"; } else if (uas->getSystemType() == MAV_TYPE_QUADROTOR) { ui.arduCopterPidButton->setVisible(true); ui.arduPlanePidButton->setVisible(false); ui.arduRoverPidButton->setVisible(false); + compare = "ArduCopter"; } else if (uas->getSystemType() == MAV_TYPE_GROUND_ROVER) { ui.arduRoverPidButton->setVisible(true); ui.arduCopterPidButton->setVisible(false); ui.arduPlanePidButton->setVisible(false); + compare = "APMRover2"; } @@ -138,6 +142,7 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) { parametersname = xml.attributes().value("name").toString(); } + QVariantMap genset; QVariantMap advset; @@ -301,24 +306,25 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) { valuelist.append(QPair(i.key().toInt(),i.value())); } - if (tab == "Standard") - { - m_standardParamConfig->addCombo(humanname,docs,name,valuelist); - } - else if (tab == "Advanced") + if (compare == parametersname) { - m_advancedParamConfig->addCombo(humanname,docs,name,valuelist); + if (tab == "Standard") + { + m_standardParamConfig->addCombo(humanname,docs,name,valuelist); + } + else if (tab == "Advanced") + { + m_advancedParamConfig->addCombo(humanname,docs,name,valuelist); + } + m_advParameterList->setParameterMetaData(name,humanname,docs); } - m_advParameterList->setParameterMetaData(name,humanname,docs); } else if (fieldmap.size() > 0) { float min = 0; - float max = 100; + float max = 65535; if (fieldmap.contains("Range")) { - float min = 0; - float max = 0; //Some range fields list "0-10" and some list "0 10". Handle both. if (fieldmap["Range"].split(" ").size() > 1) { @@ -331,15 +337,18 @@ void ApmSoftwareConfig::activeUASSet(UASInterface *uas) max = fieldmap["Range"].split("-")[1].trimmed().toFloat(); } } - if (tab == "Standard") - { - m_standardParamConfig->addRange(humanname,docs,name,min,max); - } - else if (tab == "Advanced") + if (compare == parametersname) { - m_advancedParamConfig->addRange(humanname,docs,name,max,min); + if (tab == "Standard") + { + m_standardParamConfig->addRange(humanname,docs,name,min,max); + } + else if (tab == "Advanced") + { + m_advancedParamConfig->addRange(humanname,docs,name,min,max); + } + m_advParameterList->setParameterMetaData(name,humanname,docs); } - m_advParameterList->setParameterMetaData(name,humanname,docs); } } diff --git a/src/ui/configuration/ApmSoftwareConfig.h b/src/ui/configuration/ApmSoftwareConfig.h index c4eabf414e6055b83d81f23d04baa458d81e2883..77b97d0822c16eb72842b586ea06fa9c5a191c8a 100644 --- a/src/ui/configuration/ApmSoftwareConfig.h +++ b/src/ui/configuration/ApmSoftwareConfig.h @@ -28,16 +28,16 @@ private slots: void activeUASSet(UASInterface *uas); private: Ui::ApmSoftwareConfig ui; - BasicPidConfig *m_basicPidConfig; - FlightModeConfig *m_flightConfig; - StandardParamConfig *m_standardParamConfig; - GeoFenceConfig *m_geoFenceConfig; - FailSafeConfig *m_failSafeConfig; - AdvancedParamConfig *m_advancedParamConfig; - ArduCopterPidConfig *m_arduCopterPidConfig; - ArduPlanePidConfig *m_arduPlanePidConfig; - ArduRoverPidConfig *m_arduRoverPidConfig; - AdvParameterList *m_advParameterList; + QPointer m_basicPidConfig; + QPointer m_flightConfig; + QPointer m_standardParamConfig; + QPointer m_geoFenceConfig; + QPointer m_failSafeConfig; + QPointer m_advancedParamConfig; + QPointer m_arduCopterPidConfig; + QPointer m_arduPlanePidConfig; + QPointer m_arduRoverPidConfig; + QPointer m_advParameterList; QMap m_buttonToConfigWidgetMap; }; diff --git a/src/ui/configuration/ApmSoftwareConfig.ui b/src/ui/configuration/ApmSoftwareConfig.ui index 219d2c6de7bd9e7eced610045ad3cc1ee80346d9..d3deec752896dd3f463a9e1fe4df8d2e1005d891 100644 --- a/src/ui/configuration/ApmSoftwareConfig.ui +++ b/src/ui/configuration/ApmSoftwareConfig.ui @@ -132,7 +132,7 @@
- Adv Parameter List + Full Parameter List false diff --git a/src/ui/configuration/ArduCopterPidConfig.cc b/src/ui/configuration/ArduCopterPidConfig.cc index bd0924323b10d67e2888e5a736f1fa5349080a75..7d5f274cbd4b8822e3ee09c64df79230148271da 100644 --- a/src/ui/configuration/ArduCopterPidConfig.cc +++ b/src/ui/configuration/ArduCopterPidConfig.cc @@ -3,6 +3,11 @@ ArduCopterPidConfig::ArduCopterPidConfig(QWidget *parent) : AP2ConfigWidget(parent) { ui.setupUi(this); + m_pitchRollLocked = false; + connect(ui.checkBox,SIGNAL(clicked(bool)),this,SLOT(lockCheckBoxClicked(bool))); + connect(ui.stabilPitchPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); + connect(ui.stabilRollPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); + connect(ui.stabilYawPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); m_nameToBoxMap["STB_RLL_P"] = ui.stabilPitchPSpinBox; m_nameToBoxMap["STB_PIT_P"] = ui.stabilRollPSpinBox; m_nameToBoxMap["STB_YAW_P"] = ui.stabilYawPSpinBox; @@ -107,6 +112,26 @@ ArduCopterPidConfig::ArduCopterPidConfig(QWidget *parent) : AP2ConfigWidget(pare ui.ch7OptComboBox->addItem(m_ch78ValueToTextList[i].second); ui.ch8OptComboBox->addItem(m_ch78ValueToTextList[i].second); } + initConnections(); +} +void ArduCopterPidConfig::lockCheckBoxClicked(bool checked) +{ + m_pitchRollLocked = checked; +} +void ArduCopterPidConfig::stabilLockedChanged(double value) +{ + if (m_pitchRollLocked) + { + disconnect(ui.stabilPitchPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); + disconnect(ui.stabilRollPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); + disconnect(ui.stabilYawPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); + ui.stabilPitchPSpinBox->setValue(value); + ui.stabilRollPSpinBox->setValue(value); + ui.stabilYawPSpinBox->setValue(value); + connect(ui.stabilPitchPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); + connect(ui.stabilRollPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); + connect(ui.stabilYawPSpinBox,SIGNAL(valueChanged(double)),this,SLOT(stabilLockedChanged(double))); + } } ArduCopterPidConfig::~ArduCopterPidConfig() diff --git a/src/ui/configuration/ArduCopterPidConfig.h b/src/ui/configuration/ArduCopterPidConfig.h index bc3ac3a693619c1f0d23bf11b0dee1ec3723da99..d8a1360b882e67f07e31283ae9e17ed8557538ac 100644 --- a/src/ui/configuration/ArduCopterPidConfig.h +++ b/src/ui/configuration/ArduCopterPidConfig.h @@ -17,7 +17,10 @@ private slots: void writeButtonClicked(); void refreshButtonClicked(); void parameterChanged(int uas, int component, QString parameterName, QVariant value); + void lockCheckBoxClicked(bool checked); + void stabilLockedChanged(double value); private: + bool m_pitchRollLocked; QList > m_ch6ValueToTextList; QList > m_ch78ValueToTextList; QMap m_nameToBoxMap; diff --git a/src/ui/configuration/ArduPlanePidConfig.cc b/src/ui/configuration/ArduPlanePidConfig.cc index 4cfa5efa6eeee1bdbd608c395e9aff96a6dfa737..157c2db3878a989b6b5673daa2a04e1274ef4917 100644 --- a/src/ui/configuration/ArduPlanePidConfig.cc +++ b/src/ui/configuration/ArduPlanePidConfig.cc @@ -58,7 +58,7 @@ ArduPlanePidConfig::ArduPlanePidConfig(QWidget *parent) : AP2ConfigWidget(parent connect(ui.writePushButton,SIGNAL(clicked()),this,SLOT(writeButtonClicked())); connect(ui.refreshPushButton,SIGNAL(clicked()),this,SLOT(refreshButtonClicked())); - + initConnections(); } ArduPlanePidConfig::~ArduPlanePidConfig() diff --git a/src/ui/configuration/ArduRoverPidConfig.cc b/src/ui/configuration/ArduRoverPidConfig.cc index f9d9034e671ab37fe1763a06ab0b5dc3333fca49..e84d79943c3790fa6138138b1e1397fa48533e92 100644 --- a/src/ui/configuration/ArduRoverPidConfig.cc +++ b/src/ui/configuration/ArduRoverPidConfig.cc @@ -39,7 +39,7 @@ ArduRoverPidConfig::ArduRoverPidConfig(QWidget *parent) : AP2ConfigWidget(parent connect(ui.writePushButton,SIGNAL(clicked()),this,SLOT(writeButtonClicked())); connect(ui.refreshPushButton,SIGNAL(clicked()),this,SLOT(refreshButtonClicked())); - + initConnections(); } ArduRoverPidConfig::~ArduRoverPidConfig() diff --git a/src/ui/configuration/BatteryMonitorConfig.cc b/src/ui/configuration/BatteryMonitorConfig.cc index 6e56877884a1f843a5567808fb6f16b9e8edbd0b..68692aa62bb2fc49bf58c6bca50515c836782cfd 100644 --- a/src/ui/configuration/BatteryMonitorConfig.cc +++ b/src/ui/configuration/BatteryMonitorConfig.cc @@ -31,7 +31,7 @@ BatteryMonitorConfig::BatteryMonitorConfig(QWidget *parent) : AP2ConfigWidget(pa connect(ui.battCapacityLineEdit,SIGNAL(editingFinished()),this,SLOT(batteryCapacitySet())); - + initConnections(); } void BatteryMonitorConfig::activeUASSet(UASInterface *uas) { diff --git a/src/ui/configuration/CameraGimbalConfig.cc b/src/ui/configuration/CameraGimbalConfig.cc index 724dd4bc1d525c5dd9a86c025a2daba57d0f4b58..6b14b1a466cac5260f33f8f1d3df77e21d3a228b 100644 --- a/src/ui/configuration/CameraGimbalConfig.cc +++ b/src/ui/configuration/CameraGimbalConfig.cc @@ -106,7 +106,7 @@ CameraGimbalConfig::CameraGimbalConfig(QWidget *parent) : AP2ConfigWidget(parent connect(ui.neutralXSpinBox,SIGNAL(editingFinished()),this,SLOT(updateNeutralAngles())); connect(ui.neutralYSpinBox,SIGNAL(editingFinished()),this,SLOT(updateNeutralAngles())); connect(ui.neutralZSpinBox,SIGNAL(editingFinished()),this,SLOT(updateNeutralAngles())); - + initConnections(); } void CameraGimbalConfig::updateRetractAngles() diff --git a/src/ui/configuration/CompassConfig.cc b/src/ui/configuration/CompassConfig.cc index d0cbcc7ada79b089fb767eee33dd99362bb43f61..610d354ed614465965a9f08fd247b30a1ffd7191 100644 --- a/src/ui/configuration/CompassConfig.cc +++ b/src/ui/configuration/CompassConfig.cc @@ -39,6 +39,7 @@ CompassConfig::CompassConfig(QWidget *parent) : AP2ConfigWidget(parent) ui.orientationComboBox->addItem("ROTATION_PITCH_90"); ui.orientationComboBox->addItem("ROTATION_PITCH_270"); ui.orientationComboBox->addItem("ROTATION_MAX"); + initConnections(); } CompassConfig::~CompassConfig() { diff --git a/src/ui/configuration/FailSafeConfig.cc b/src/ui/configuration/FailSafeConfig.cc index 0e0d45e3ddf28855d9d3c9a7f1764211d9afa458..9d177cc735ec12e004ac113e5c500fc1bf13e201 100644 --- a/src/ui/configuration/FailSafeConfig.cc +++ b/src/ui/configuration/FailSafeConfig.cc @@ -82,6 +82,12 @@ FailSafeConfig::FailSafeConfig(QWidget *parent) : AP2ConfigWidget(parent) connect(ui.throttleCheckBox,SIGNAL(clicked(bool)),this,SLOT(throttleChecked(bool))); connect(ui.throttlePwmSpinBox,SIGNAL(editingFinished()),this,SLOT(throttlePwmChanged())); connect(ui.throttleFailSafeComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(throttleFailSafeChanged(int))); + + ui.armedLabel->setText("

DISARMED

"); + + + ui.modeLabel->setText("

MODE

"); + initConnections(); } void FailSafeConfig::gcsChecked(bool checked) { @@ -224,6 +230,7 @@ void FailSafeConfig::activeUASSet(UASInterface *uas) connect(m_uas,SIGNAL(remoteControlChannelRawChanged(int,float)),this,SLOT(remoteControlChannelRawChanges(int,float))); connect(m_uas,SIGNAL(hilActuatorsChanged(uint64_t,float,float,float,float,float,float,float,float)),this,SLOT(hilActuatorsChanged(uint64_t,float,float,float,float,float,float,float,float))); connect(m_uas,SIGNAL(armingChanged(bool)),this,SLOT(armingChanged(bool))); + connect(m_uas,SIGNAL(gpsLocalizationChanged(UASInterface*,int)),this,SLOT(gpsStatusChanged(UASInterface*,int))); if (m_uas->getSystemType() == MAV_TYPE_FIXED_WING) { ui.batteryFailCheckBox->setVisible(false); @@ -416,3 +423,18 @@ void FailSafeConfig::hilActuatorsChanged(uint64_t time, float act1, float act2, ui.radio7Out->setValue(act7); ui.radio8Out->setValue(act8); } +void FailSafeConfig::gpsStatusChanged(UASInterface* uas,int fixtype) +{ + if (fixtype == 0 || fixtype == 1) + { + ui.gpsLabel->setText("

None

"); + } + else if (fixtype == 2) + { + ui.gpsLabel->setText("

2D Fix

"); + } + else if (fixtype == 3) + { + ui.gpsLabel->setText("

3D Fix

"); + } +} diff --git a/src/ui/configuration/FailSafeConfig.h b/src/ui/configuration/FailSafeConfig.h index 162246e899861f560891d8336eaddc631039ea79..82467393122121d0d2bc696ff65ee2131a2d9e40 100644 --- a/src/ui/configuration/FailSafeConfig.h +++ b/src/ui/configuration/FailSafeConfig.h @@ -25,6 +25,7 @@ private slots: void throttleChecked(bool checked); void throttlePwmChanged(); void throttleFailSafeChanged(int index); + void gpsStatusChanged(UASInterface* uas,int fixtype); private: Ui::FailSafeConfig ui; }; diff --git a/src/ui/configuration/FlightModeConfig.cc b/src/ui/configuration/FlightModeConfig.cc index d5acd58176b2116ba44e8ce99515f6409bb9ee8e..114c88857a77cbd06ba4d90211d2b6df1418ae50 100644 --- a/src/ui/configuration/FlightModeConfig.cc +++ b/src/ui/configuration/FlightModeConfig.cc @@ -5,6 +5,7 @@ FlightModeConfig::FlightModeConfig(QWidget *parent) : AP2ConfigWidget(parent) { ui.setupUi(this); connect(ui.savePushButton,SIGNAL(clicked()),this,SLOT(saveButtonClicked())); + initConnections(); } FlightModeConfig::~FlightModeConfig() diff --git a/src/ui/configuration/FrameTypeConfig.cc b/src/ui/configuration/FrameTypeConfig.cc index 7ee5abad3ddd32ea2a241f04ffbb77ed3ca93bfc..8c123c69fbb581de6e719b22676f1e0407ef6ec1 100644 --- a/src/ui/configuration/FrameTypeConfig.cc +++ b/src/ui/configuration/FrameTypeConfig.cc @@ -44,6 +44,7 @@ FrameTypeConfig::FrameTypeConfig(QWidget *parent) : AP2ConfigWidget(parent) connect(ui.plusRadioButton,SIGNAL(clicked()),this,SLOT(plusFrameSelected())); connect(ui.xRadioButton,SIGNAL(clicked()),this,SLOT(xFrameSelected())); connect(ui.vRadioButton,SIGNAL(clicked()),this,SLOT(vFrameSelected())); + initConnections(); } FrameTypeConfig::~FrameTypeConfig() diff --git a/src/ui/configuration/OpticalFlowConfig.cc b/src/ui/configuration/OpticalFlowConfig.cc index cc0404a06d4418511ef2dfe78fe742cd1ecf0106..3e8bdb8b78b55ab58111f28ac837b652194720da 100644 --- a/src/ui/configuration/OpticalFlowConfig.cc +++ b/src/ui/configuration/OpticalFlowConfig.cc @@ -5,6 +5,7 @@ OpticalFlowConfig::OpticalFlowConfig(QWidget *parent) : AP2ConfigWidget(parent) { ui.setupUi(this); connect(ui.enableCheckBox,SIGNAL(clicked(bool)),this,SLOT(enableCheckBoxClicked(bool))); + initConnections(); } OpticalFlowConfig::~OpticalFlowConfig() diff --git a/src/ui/configuration/OsdConfig.cc b/src/ui/configuration/OsdConfig.cc index 766c9b0edb30843c6131e0ed0818cbd6b5cc2a30..e3280a9c86607e1de0d99c300cba22691a425341 100644 --- a/src/ui/configuration/OsdConfig.cc +++ b/src/ui/configuration/OsdConfig.cc @@ -5,6 +5,8 @@ OsdConfig::OsdConfig(QWidget *parent) : AP2ConfigWidget(parent) { ui.setupUi(this); connect(ui.enablePushButton,SIGNAL(clicked()),this,SLOT(enableButtonClicked())); + initConnections(); + } OsdConfig::~OsdConfig() @@ -25,13 +27,4 @@ void OsdConfig::enableButtonClicked() m_uas->getParamManager()->setParameter(1,"SR0_RAW_CTRL",2); m_uas->getParamManager()->setParameter(1,"SR0_RAW_SENS",2); m_uas->getParamManager()->setParameter(1,"SR0_RC_CHAN",2); - - m_uas->getParamManager()->setParameter(1,"SR3_EXT_STAT",2); - m_uas->getParamManager()->setParameter(1,"SR3_EXTRA1",10); - m_uas->getParamManager()->setParameter(1,"SR3_EXTRA2",10); - m_uas->getParamManager()->setParameter(1,"SR3_EXTRA3",2); - m_uas->getParamManager()->setParameter(1,"SR3_POSITION",3); - m_uas->getParamManager()->setParameter(1,"SR3_RAW_CTRL",2); - m_uas->getParamManager()->setParameter(1,"SR3_RAW_SENS",2); - m_uas->getParamManager()->setParameter(1,"SR3_RC_CHAN",2); } diff --git a/src/ui/configuration/ParamWidget.cc b/src/ui/configuration/ParamWidget.cc index 93b3bfd26455959198253a45956f129a8af155f8..b9fb03c72671989e039a4bc732230974735b0083 100644 --- a/src/ui/configuration/ParamWidget.cc +++ b/src/ui/configuration/ParamWidget.cc @@ -1,9 +1,45 @@ #include "ParamWidget.h" - -ParamWidget::ParamWidget(QWidget *parent) : QWidget(parent) +ParamWidget::ParamWidget(QString param,QWidget *parent) : QWidget(parent) { ui.setupUi(this); + m_param = param; + + connect(ui.doubleSpinBox,SIGNAL(editingFinished()),this,SLOT(doubleSpinEditFinished())); + connect(ui.intSpinBox,SIGNAL(editingFinished()),this,SLOT(intSpinEditFinished())); + connect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); + connect(ui.valueSlider,SIGNAL(sliderReleased()),this,SLOT(valueSliderReleased())); +} +void ParamWidget::doubleSpinEditFinished() +{ + ui.valueSlider->setValue(((ui.doubleSpinBox->value() - m_min) / (m_max - m_min)) * 100.0); + emit doubleValueChanged(m_param,ui.doubleSpinBox->value()); +} + +void ParamWidget::intSpinEditFinished() +{ + ui.valueSlider->setValue(((ui.intSpinBox->value() - m_min) / (m_max - m_min)) * 100.0); + emit intValueChanged(m_param,ui.intSpinBox->value()); +} + +void ParamWidget::comboIndexChanged(int index) +{ + emit intValueChanged(m_param,m_valueList[index].first); +} + +void ParamWidget::valueSliderReleased() +{ + //Set the spin box, and emit a signal. + if (type == INT) + { + ui.intSpinBox->setValue(((ui.valueSlider->value() / 100.0) * (m_max - m_min)) + m_min); + emit intValueChanged(m_param,ui.intSpinBox->value()); + } + else if (type == DOUBLE) + { + ui.doubleSpinBox->setValue(((ui.valueSlider->value() / 100.0) * (m_max - m_min)) + m_min); + emit doubleValueChanged(m_param,ui.doubleSpinBox->value()); + } } ParamWidget::~ParamWidget() @@ -19,8 +55,18 @@ void ParamWidget::setupInt(QString title,QString description,int value,int min,i ui.valueSlider->show(); ui.intSpinBox->show(); ui.doubleSpinBox->hide(); - m_min = min; - m_max = max; + if (min == 0 && max == 0) + { + m_min = 0; + m_max = 65535; + } + else + { + m_min = min; + m_max = max; + } + ui.intSpinBox->setMinimum(m_min); + ui.intSpinBox->setMaximum(m_max); } void ParamWidget::setupDouble(QString title,QString description,double value,double min,double max) @@ -32,8 +78,18 @@ void ParamWidget::setupDouble(QString title,QString description,double value,dou ui.valueSlider->show(); ui.intSpinBox->hide(); ui.doubleSpinBox->show(); - m_min = min; - m_max = max; + if (min == 0 && max == 0) + { + m_min = 0; + m_max = 65535; + } + else + { + m_min = min; + m_max = max; + } + ui.doubleSpinBox->setMinimum(m_min); + ui.doubleSpinBox->setMaximum(m_max); } void ParamWidget::setupCombo(QString title,QString description,QList > list) @@ -47,10 +103,12 @@ void ParamWidget::setupCombo(QString title,QString description,QListhide(); m_valueList = list; ui.valueComboBox->clear(); + disconnect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); for (int i=0;iaddItem(m_valueList[i].second); } + connect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); } void ParamWidget::setValue(double value) @@ -58,12 +116,12 @@ void ParamWidget::setValue(double value) if (type == INT) { ui.intSpinBox->setValue(value); - ui.valueSlider->setValue(((value + m_min) / (m_max + m_min)) * 100.0); + ui.valueSlider->setValue(((value - m_min) / (m_max - m_min)) * 100.0); } else if (type == DOUBLE) { ui.doubleSpinBox->setValue(value); - ui.valueSlider->setValue(((value + m_min) / (m_max + m_min)) * 100.0); + ui.valueSlider->setValue(((value - m_min) / (m_max - m_min)) * 100.0); } else if (type == COMBO) { @@ -71,7 +129,9 @@ void ParamWidget::setValue(double value) { if ((int)value == m_valueList[i].first) { + disconnect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); ui.valueComboBox->setCurrentIndex(i); + connect(ui.valueComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboIndexChanged(int))); return; } } diff --git a/src/ui/configuration/ParamWidget.h b/src/ui/configuration/ParamWidget.h index aa375d296752f2d2cc9c052d8b5d60a3b9ec2c35..68a3efbf4c6ac2586e056be69c08622a91ca8551 100644 --- a/src/ui/configuration/ParamWidget.h +++ b/src/ui/configuration/ParamWidget.h @@ -9,13 +9,22 @@ class ParamWidget : public QWidget Q_OBJECT public: - explicit ParamWidget(QWidget *parent = 0); + explicit ParamWidget(QString param,QWidget *parent = 0); ~ParamWidget(); void setupInt(QString title,QString description,int value,int min,int max); void setupDouble(QString title,QString description,double value,double min,double max); void setupCombo(QString title,QString description,QList > list); void setValue(double value); +signals: + void doubleValueChanged(QString param,double value); + void intValueChanged(QString param,int value); +private slots: + void doubleSpinEditFinished(); + void intSpinEditFinished(); + void comboIndexChanged(int index); + void valueSliderReleased(); private: + QString m_param; enum VIEWTYPE { INT, diff --git a/src/ui/configuration/ParamWidget.ui b/src/ui/configuration/ParamWidget.ui index ddf4653b8f09169cdc55b6e2edad622e647743c7..8e396cb6fee1c0702dcf8dd1bfe2c66eeffb3331 100644 --- a/src/ui/configuration/ParamWidget.ui +++ b/src/ui/configuration/ParamWidget.ui @@ -46,6 +46,9 @@ 100 + + 0 + Qt::Horizontal diff --git a/src/ui/configuration/RadioCalibrationConfig.cc b/src/ui/configuration/RadioCalibrationConfig.cc index 067a56fc14d3db74a3b18eb439d915e351181cb9..eb9db6fca9bfb4c71df52145f285616ed995c122 100644 --- a/src/ui/configuration/RadioCalibrationConfig.cc +++ b/src/ui/configuration/RadioCalibrationConfig.cc @@ -71,6 +71,13 @@ RadioCalibrationConfig::RadioCalibrationConfig(QWidget *parent) : AP2ConfigWidge guiUpdateTimer = new QTimer(this); connect(guiUpdateTimer,SIGNAL(timeout()),this,SLOT(guiUpdateTimerTick())); + + rcMin << 1100.0 << 1100.0 << 1100.0 << 1100.0 << 1100.0 << 1100.0 << 1100.0 << 1100.0; + rcMax << 1900.0 << 1900.0 << 1900.0 << 1900.0 << 1900.0 << 1900.0 << 1900.0 << 1900.0; + rcTrim << 1500.0 << 1500.0 << 1500.0 << 1500.0 << 1500.0 << 1500.0 << 1500.0 << 1500.0; + rcValue << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0 << 0.0; + + initConnections(); } RadioCalibrationConfig::~RadioCalibrationConfig() @@ -170,6 +177,7 @@ void RadioCalibrationConfig::calibrateButtonClicked() ui.radio5Widget->showMinMax(); ui.radio6Widget->showMinMax(); ui.radio7Widget->showMinMax(); + ui.throttleWidget->showMinMax(); ui.radio8Widget->showMinMax(); QMessageBox::information(0,"Information","Click OK, then move all sticks to their extreme positions, watching the min/max values to ensure you get the most range from your controller. This includes all switches"); } @@ -184,6 +192,7 @@ void RadioCalibrationConfig::calibrateButtonClicked() ui.yawWidget->hideMinMax(); ui.radio5Widget->hideMinMax(); ui.radio6Widget->hideMinMax(); + ui.throttleWidget->hideMinMax(); ui.radio7Widget->hideMinMax(); ui.radio8Widget->hideMinMax(); QString statusstr; diff --git a/src/ui/configuration/SerialSettingsDialog.cc b/src/ui/configuration/SerialSettingsDialog.cc new file mode 100644 index 0000000000000000000000000000000000000000..fbb8d2da60eb93687ba0c3a0c73a4297f7d32246 --- /dev/null +++ b/src/ui/configuration/SerialSettingsDialog.cc @@ -0,0 +1,189 @@ +/*===================================================================== + +APM_PLANNER Open Source Ground Control Station + +(c) 2013, Bill Bonney + +This file is part of the APM_PLANNER project + + APM_PLANNER is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + APM_PLANNER 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with APM_PLANNER. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Serial Settings View. + * + * @author Bill Bonney + * + * Influenced from Qt examples by :- + * Copyright (C) 2012 Denis Shienkov + * Copyright (C) 2012 Laszlo Papp + * + */ + +#include "SerialSettingsDialog.h" +#include "terminalconsole.h" +#include "ui_SerialSettingsDialog.h" + +#include +#include +#include +#include + +QT_USE_NAMESPACE + +SettingsDialog::SettingsDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::SettingsDialog) +{ + ui->setupUi(this); + + m_intValidator = new QIntValidator(0, 4000000, this); + + ui->baudRateBox->setInsertPolicy(QComboBox::NoInsert); + + connect(ui->applyButton, SIGNAL(clicked()), + this, SLOT(apply())); + connect(ui->serialPortInfoListBox, SIGNAL(currentIndexChanged(int)), + this, SLOT(showPortInfo(int))); + connect(ui->baudRateBox, SIGNAL(currentIndexChanged(int)), + this, SLOT(checkCustomBaudRatePolicy(int))); + + fillPortsParameters(); + fillPortsInfo(); + + updateSettings(); +} + +SettingsDialog::~SettingsDialog() +{ + delete ui; +} + +const SerialSettings& SettingsDialog::settings() const +{ + return m_currentSettings; +} + +void SettingsDialog::showPortInfo(int idx) +{ + if (idx != -1) { + QStringList list = ui->serialPortInfoListBox->itemData(idx).toStringList(); + ui->descriptionLabel->setText(tr("Description: %1").arg(list.at(1))); + ui->manufacturerLabel->setText(tr("Manufacturer: %1").arg(list.at(2))); + ui->locationLabel->setText(tr("Location: %1").arg(list.at(3))); + ui->vidLabel->setText(tr("Vendor Identifier: %1").arg(list.at(4))); + ui->pidLabel->setText(tr("Product Identifier: %1").arg(list.at(5))); + } +} + +void SettingsDialog::apply() +{ + updateSettings(); + hide(); +} + +void SettingsDialog::checkCustomBaudRatePolicy(int idx) +{ + bool isCustomBaudRate = !ui->baudRateBox->itemData(idx).isValid(); + ui->baudRateBox->setEditable(isCustomBaudRate); + if (isCustomBaudRate) { + ui->baudRateBox->clearEditText(); + QLineEdit *edit = ui->baudRateBox->lineEdit(); + edit->setValidator(m_intValidator); + } +} + +void SettingsDialog::fillPortsParameters() +{ + // fill baud rate (is not the entire list of available values, + // desired values??, add your independently) + ui->baudRateBox->addItem(QLatin1String("115200"), QSerialPort::Baud115200); + ui->baudRateBox->addItem(QLatin1String("57600"), QSerialPort::Baud57600); + ui->baudRateBox->addItem(QLatin1String("38400"), QSerialPort::Baud38400); + ui->baudRateBox->addItem(QLatin1String("19200"), QSerialPort::Baud19200); + ui->baudRateBox->addItem(QLatin1String("19200"), QSerialPort::Baud19200); + ui->baudRateBox->addItem(QLatin1String("9600"), QSerialPort::Baud9600); + ui->baudRateBox->addItem(QLatin1String("Custom")); + + // fill data bits + ui->dataBitsBox->addItem(QLatin1String("5"), QSerialPort::Data5); + ui->dataBitsBox->addItem(QLatin1String("6"), QSerialPort::Data6); + ui->dataBitsBox->addItem(QLatin1String("7"), QSerialPort::Data7); + ui->dataBitsBox->addItem(QLatin1String("8"), QSerialPort::Data8); + ui->dataBitsBox->setCurrentIndex(3); + + // fill parity + ui->parityBox->addItem(QLatin1String("None"), QSerialPort::NoParity); + ui->parityBox->addItem(QLatin1String("Even"), QSerialPort::EvenParity); + ui->parityBox->addItem(QLatin1String("Odd"), QSerialPort::OddParity); + ui->parityBox->addItem(QLatin1String("Mark"), QSerialPort::MarkParity); + ui->parityBox->addItem(QLatin1String("Space"), QSerialPort::SpaceParity); + + // fill stop bits + ui->stopBitsBox->addItem(QLatin1String("1"), QSerialPort::OneStop); +#ifdef Q_OS_WIN + ui->stopBitsBox->addItem(QLatin1String("1.5"), QSerialPort::OneAndHalfStop); +#endif + ui->stopBitsBox->addItem(QLatin1String("2"), QSerialPort::TwoStop); + + // fill flow control + ui->flowControlBox->addItem(QLatin1String("None"), QSerialPort::NoFlowControl); + ui->flowControlBox->addItem(QLatin1String("RTS/CTS"), QSerialPort::HardwareControl); + ui->flowControlBox->addItem(QLatin1String("XON/XOFF"), QSerialPort::SoftwareControl); +} + +void SettingsDialog::fillPortsInfo() +{ + ui->serialPortInfoListBox->clear(); + foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { + QStringList list; + list << info.portName() + << info.description() + << info.manufacturer() + << info.systemLocation() + << (info.vendorIdentifier() ? QString::number(info.vendorIdentifier(), 16) : QString()) + << (info.productIdentifier() ? QString::number(info.productIdentifier(), 16) : QString()); + + ui->serialPortInfoListBox->insertItem(0, list.first(), list); + } +} + +void SettingsDialog::updateSettings() +{ + m_currentSettings.name = ui->serialPortInfoListBox->currentText(); + + // Baud Rate + if (ui->baudRateBox->currentIndex() == 4) { + // custom baud rate + m_currentSettings.baudRate = ui->baudRateBox->currentText().toInt(); + } else { + // standard baud rate + m_currentSettings.baudRate = static_cast( + ui->baudRateBox->itemData(ui->baudRateBox->currentIndex()).toInt()); + } + // Data bits + m_currentSettings.dataBits = static_cast( + ui->dataBitsBox->itemData(ui->dataBitsBox->currentIndex()).toInt()); + // Parity + m_currentSettings.parity = static_cast( + ui->parityBox->itemData(ui->parityBox->currentIndex()).toInt()); + // Stop bits + m_currentSettings.stopBits = static_cast( + ui->stopBitsBox->itemData(ui->stopBitsBox->currentIndex()).toInt()); + // Flow control + m_currentSettings.flowControl = static_cast( + ui->flowControlBox->itemData(ui->flowControlBox->currentIndex()).toInt()); +} diff --git a/src/ui/configuration/SerialSettingsDialog.h b/src/ui/configuration/SerialSettingsDialog.h new file mode 100644 index 0000000000000000000000000000000000000000..5b1586fdf2ffe3f55830639a3e8b8f556209a513 --- /dev/null +++ b/src/ui/configuration/SerialSettingsDialog.h @@ -0,0 +1,91 @@ +/*===================================================================== + +APM_PLANNER Open Source Ground Control Station + +(c) 2013, Bill Bonney + +This file is part of the APM_PLANNER project + + APM_PLANNER is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + APM_PLANNER 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with APM_PLANNER. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Serial Settings View. + * + * @author Bill Bonney + * + * Influenced from Qt examples by :- + * Copyright (C) 2012 Denis Shienkov + * Copyright (C) 2012 Laszlo Papp + * + */ + +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include +#include + +namespace Ui { +class SettingsDialog; +} + +class QIntValidator; + +class SerialSettings { +public: + SerialSettings() : name(""), + baudRate(115200), + dataBits(QSerialPort::Data8), + parity(QSerialPort::NoParity), + stopBits(QSerialPort::OneStop), + flowControl(QSerialPort::NoFlowControl){} +public: + QString name; + qint32 baudRate; + QSerialPort::DataBits dataBits; + QSerialPort::Parity parity; + QSerialPort::StopBits stopBits; + QSerialPort::FlowControl flowControl; +}; + +class SettingsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SettingsDialog(QWidget *parent = 0); + ~SettingsDialog(); + + const SerialSettings &settings() const; + +private slots: + void showPortInfo(int idx); + void apply(); + void checkCustomBaudRatePolicy(int idx); + +private: + void fillPortsParameters(); + void fillPortsInfo(); + void updateSettings(); + +private: + Ui::SettingsDialog *ui; + SerialSettings m_currentSettings; + QIntValidator *m_intValidator; +}; + +#endif // SETTINGSDIALOG_H diff --git a/src/ui/configuration/SerialSettingsDialog.ui b/src/ui/configuration/SerialSettingsDialog.ui new file mode 100644 index 0000000000000000000000000000000000000000..5f2706fa2868f99f6775ea2375668e9fa54f5fa5 --- /dev/null +++ b/src/ui/configuration/SerialSettingsDialog.ui @@ -0,0 +1,151 @@ + + + SettingsDialog + + + + 0 + 0 + 401 + 250 + + + + Settings + + + + + + Select Serial Port + + + + + + + + + Description: + + + + + + + Manufacturer: + + + + + + + Location: + + + + + + + Vendor ID: + + + + + + + Product ID: + + + + + + + + + + + + Qt::Horizontal + + + + 96 + 20 + + + + + + + + Apply + + + + + + + + + Select Parameters + + + + + + BaudRate: + + + + + + + + + + Data bits: + + + + + + + + + + Parity: + + + + + + + + + + Stop bits: + + + + + + + + + + Flow control: + + + + + + + + + + + + + + diff --git a/src/ui/configuration/SonarConfig.cc b/src/ui/configuration/SonarConfig.cc index 586a7f9ab5d37d7e1d1be3ff2df88f986421c95b..fb8c4687b03dc6a2b69df6c398cee064de6f381f 100644 --- a/src/ui/configuration/SonarConfig.cc +++ b/src/ui/configuration/SonarConfig.cc @@ -10,6 +10,8 @@ SonarConfig::SonarConfig(QWidget *parent) : AP2ConfigWidget(parent) ui.sonarTypeComboBox->addItem("HRLV"); connect(ui.enableCheckBox,SIGNAL(toggled(bool)),this,SLOT(checkBoxToggled(bool))); connect(ui.sonarTypeComboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(sonarTypeChanged(int))); + + initConnections(); } SonarConfig::~SonarConfig() diff --git a/src/ui/configuration/StandardParamConfig.cc b/src/ui/configuration/StandardParamConfig.cc index c9ebb4acf9718cda6cddcf7095a13e2b9b037f08..0f43a922504a66928ca326e9e478525f35d58d44 100644 --- a/src/ui/configuration/StandardParamConfig.cc +++ b/src/ui/configuration/StandardParamConfig.cc @@ -3,13 +3,16 @@ StandardParamConfig::StandardParamConfig(QWidget *parent) : AP2ConfigWidget(parent) { ui.setupUi(this); + initConnections(); } StandardParamConfig::~StandardParamConfig() { } void StandardParamConfig::addRange(QString title,QString description,QString param,double min,double max) { - ParamWidget *widget = new ParamWidget(ui.scrollAreaWidgetContents); + ParamWidget *widget = new ParamWidget(param,ui.scrollAreaWidgetContents); + connect(widget,SIGNAL(doubleValueChanged(QString,double)),this,SLOT(doubleValueChanged(QString,double))); + connect(widget,SIGNAL(intValueChanged(QString,int)),this,SLOT(intValueChanged(QString,int))); paramToWidgetMap[param] = widget; widget->setupDouble(title + "(" + param + ")",description,0,min,max); ui.verticalLayout->addWidget(widget); @@ -18,7 +21,9 @@ void StandardParamConfig::addRange(QString title,QString description,QString par void StandardParamConfig::addCombo(QString title,QString description,QString param,QList > valuelist) { - ParamWidget *widget = new ParamWidget(ui.scrollAreaWidgetContents); + ParamWidget *widget = new ParamWidget(param,ui.scrollAreaWidgetContents); + connect(widget,SIGNAL(doubleValueChanged(QString,double)),this,SLOT(doubleValueChanged(QString,double))); + connect(widget,SIGNAL(intValueChanged(QString,int)),this,SLOT(intValueChanged(QString,int))); paramToWidgetMap[param] = widget; widget->setupCombo(title + "(" + param + ")",description,valuelist); ui.verticalLayout->addWidget(widget); @@ -28,6 +33,31 @@ void StandardParamConfig::parameterChanged(int uas, int component, QString param { if (paramToWidgetMap.contains(parameterName)) { - paramToWidgetMap[parameterName]->setValue(value.toDouble()); + if (value.type() == QVariant::Double) + { + paramToWidgetMap[parameterName]->setValue(value.toDouble()); + } + else + { + paramToWidgetMap[parameterName]->setValue(value.toInt()); + } } } +void StandardParamConfig::doubleValueChanged(QString param,double value) +{ + if (!m_uas) + { + this->showNullMAVErrorMessageBox(); + } + m_uas->getParamManager()->setParameter(1,param,value); +} + +void StandardParamConfig::intValueChanged(QString param,int value) +{ + if (!m_uas) + { + this->showNullMAVErrorMessageBox(); + } + m_uas->getParamManager()->setParameter(1,param,value); +} + diff --git a/src/ui/configuration/StandardParamConfig.h b/src/ui/configuration/StandardParamConfig.h index b2fbc04f484b25c33e80b79c10ada6484ac9d252..b098d7d05e1863b1ca98c5e0bd08bf86b7ec1d0a 100644 --- a/src/ui/configuration/StandardParamConfig.h +++ b/src/ui/configuration/StandardParamConfig.h @@ -16,6 +16,8 @@ public: void addCombo(QString title,QString description,QString param,QList > valuelist); private slots: void parameterChanged(int uas, int component, QString parameterName, QVariant value); + void doubleValueChanged(QString param,double value); + void intValueChanged(QString param,int value); private: QMap paramToWidgetMap; Ui::StandardParamConfig ui; diff --git a/src/ui/configuration/TerminalConsole.cc b/src/ui/configuration/TerminalConsole.cc new file mode 100644 index 0000000000000000000000000000000000000000..1c5233e6308e15147a664309b4e533286c2df0f2 --- /dev/null +++ b/src/ui/configuration/TerminalConsole.cc @@ -0,0 +1,14 @@ +#include "terminalconsole.h" +#include "ui_terminalconsole.h" + +TerminalConsole::TerminalConsole(QWidget *parent) : + QWidget(parent), + ui(new Ui::TerminalConsole) +{ + ui->setupUi(this); +} + +TerminalConsole::~TerminalConsole() +{ + delete ui; +} diff --git a/src/ui/configuration/console.cpp b/src/ui/configuration/console.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c530af0e6c6460ae7db9c1c390a0a554951774a7 --- /dev/null +++ b/src/ui/configuration/console.cpp @@ -0,0 +1,101 @@ +/*===================================================================== + +APM_PLANNER Open Source Ground Control Station + +(c) 2013, Bill Bonney + +This file is part of the APM_PLANNER project + + APM_PLANNER is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + APM_PLANNER 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with APM_PLANNER. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Text Console. + * + * @author Bill Bonney + * + * Influenced from Qt examples by :- + * Copyright (C) 2012 Denis Shienkov + * Copyright (C) 2012 Laszlo Papp + * + */ + +#include "console.h" +#include "ApmHighlighter.h" + +#include + +#include + +Console::Console(QWidget *parent) + : QPlainTextEdit(parent) + , localEchoEnabled(false) +{ + document()->setMaximumBlockCount(100); + QPalette p = palette(); + p.setColor(QPalette::Base, Qt::black); + p.setColor(QPalette::Text, Qt::green); + setPalette(p); + + m_highlighter = new APMHighlighter(document()); + +} + +void Console::putData(const QByteArray &data) +{ + insertPlainText(QString(data)); + + QScrollBar *bar = verticalScrollBar(); + bar->setValue(bar->maximum()); +} + +void Console::setLocalEchoEnabled(bool set) +{ + localEchoEnabled = set; +} + +void Console::keyPressEvent(QKeyEvent *e) +{ + switch (e->key()) { + case Qt::Key_Backspace: + case Qt::Key_Left: + case Qt::Key_Right: + case Qt::Key_Up: + case Qt::Key_Down: + // skip processing + break; + default: + if (localEchoEnabled) + QPlainTextEdit::keyPressEvent(e); + emit getData(e->text().toLocal8Bit()); + } +} + +void Console::mousePressEvent(QMouseEvent *e) +{ + Q_UNUSED(e) + setFocus(); +} + +void Console::mouseDoubleClickEvent(QMouseEvent *e) +{ + Q_UNUSED(e) +} + +void Console::contextMenuEvent(QContextMenuEvent *e) +{ + Q_UNUSED(e) +} diff --git a/src/ui/configuration/console.h b/src/ui/configuration/console.h new file mode 100644 index 0000000000000000000000000000000000000000..28a1135ded8584453f11e5a1487a90a4ebc23210 --- /dev/null +++ b/src/ui/configuration/console.h @@ -0,0 +1,69 @@ +/*===================================================================== + +APM_PLANNER Open Source Ground Control Station + +(c) 2013, Bill Bonney + +This file is part of the APM_PLANNER project + + APM_PLANNER is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + APM_PLANNER 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with APM_PLANNER. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Text Console. + * + * @author Bill Bonney + * + * Influenced from Qt examples by :- + * Copyright (C) 2012 Denis Shienkov + * Copyright (C) 2012 Laszlo Papp + * + */ + +#ifndef CONSOLE_H +#define CONSOLE_H + +#include + +class APMHighlighter; + +class Console : public QPlainTextEdit +{ + Q_OBJECT + +signals: + void getData(const QByteArray &data); + +public: + explicit Console(QWidget *parent = 0); + + void putData(const QByteArray &data); + + void setLocalEchoEnabled(bool set); + +protected: + virtual void keyPressEvent(QKeyEvent *e); + virtual void mousePressEvent(QMouseEvent *e); + virtual void mouseDoubleClickEvent(QMouseEvent *e); + virtual void contextMenuEvent(QContextMenuEvent *e); + +private: + bool localEchoEnabled; + APMHighlighter* m_highlighter; + +}; + +#endif // CONSOLE_H diff --git a/src/ui/configuration/terminalconsole.cpp b/src/ui/configuration/terminalconsole.cpp new file mode 100644 index 0000000000000000000000000000000000000000..919c646671f269d21114b6b47161a2ce26236829 --- /dev/null +++ b/src/ui/configuration/terminalconsole.cpp @@ -0,0 +1,301 @@ +/*===================================================================== + +APM_PLANNER Open Source Ground Control Station + +(c) 2013, Bill Bonney + +This file is part of the APM_PLANNER project + + APM_PLANNER is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + APM_PLANNER 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with APM_PLANNER. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Terminal Console display View. + * + * @author Bill Bonney + * + * Influenced from Qt examples by :- + * Copyright (C) 2012 Denis Shienkov + * Copyright (C) 2012 Laszlo Papp + * + */ + +#include "SerialSettingsDialog.h" +#include "terminalconsole.h" +#include "ui_terminalconsole.h" +#include "console.h" +#include "configuration.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +TerminalConsole::TerminalConsole(QWidget *parent) : + QWidget(parent), + ui(new Ui::TerminalConsole), + m_consoleMode(APM) +{ + ui->setupUi(this); + + // create the cosole and add it to the centralwidget + m_console = new Console; + m_console->setEnabled(false); + + m_statusBar = new QStatusBar; + + QLayout* layout = ui->terminalGroupBox->layout(); + layout->addWidget(m_console); + layout->addWidget(m_statusBar); + + m_serial = new QSerialPort(this); + m_settingsDialog = new SettingsDialog; + + ui->connectButton->setEnabled(true); + ui->disconnectButton->setEnabled(false); + ui->settingsButton->setEnabled(true); + + + addBaudComboBoxConfig(); + fillPortsInfo(*ui->linkComboBox); + + loadSettings(); + + if (m_settings.name == "") { + setLink(ui->linkComboBox->currentIndex()); + } else { + ui->linkComboBox->setCurrentIndex(0); + } + + addConsoleModesComboBoxConfig(); + + initConnections(); +} + +void TerminalConsole::addBaudComboBoxConfig() +{ + ui->consoleModeBox->addItem(QLatin1String("APM"), APM); + ui->consoleModeBox->addItem(QLatin1String("PX4"), PX4); +} + +void TerminalConsole::addConsoleModesComboBoxConfig() +{ + ui->baudComboBox->addItem(QLatin1String("115200"), QSerialPort::Baud115200); + ui->baudComboBox->addItem(QLatin1String("57600"), QSerialPort::Baud57600); + ui->baudComboBox->addItem(QLatin1String("38400"), QSerialPort::Baud38400); + ui->baudComboBox->addItem(QLatin1String("19200"), QSerialPort::Baud19200); + ui->baudComboBox->addItem(QLatin1String("19200"), QSerialPort::Baud19200); + ui->baudComboBox->addItem(QLatin1String("9600"), QSerialPort::Baud9600); +} + +void TerminalConsole::fillPortsInfo(QComboBox &comboxBox) +{ + comboxBox.clear(); + foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { + QStringList list; + list << info.portName() + << info.description() + << info.manufacturer() + << info.systemLocation() + << (info.vendorIdentifier() ? QString::number(info.vendorIdentifier(), 16) : QString()) + << (info.productIdentifier() ? QString::number(info.productIdentifier(), 16) : QString()); + + comboxBox.insertItem(0,list.first(), list); + qDebug() << "Inserting " << list.first(); + } +} + +TerminalConsole::~TerminalConsole() +{ + delete m_console; + delete m_statusBar; + delete m_settingsDialog; + delete ui; +} + +void TerminalConsole::openSerialPort() +{ + openSerialPort(m_settings); +} + +void TerminalConsole::openSerialPort(const SerialSettings &settings) +{ + m_serial->setPortName(settings.name); + if (m_serial->open(QIODevice::ReadWrite)) { + if (m_serial->setBaudRate(settings.baudRate) + && m_serial->setDataBits(settings.dataBits) + && m_serial->setParity(settings.parity) + && m_serial->setStopBits(settings.stopBits) + && m_serial->setFlowControl(settings.flowControl)) { + + m_console->setEnabled(true); + m_console->setLocalEchoEnabled(false); + ui->connectButton->setEnabled(false); + ui->disconnectButton->setEnabled(true); + ui->settingsButton->setEnabled(false); + m_statusBar->showMessage(tr("Connected to %1 : baud %2z") + .arg(settings.name).arg(QString::number(settings.baudRate))); + qDebug() << "Open Terminal Console Serial Port"; + writeSettings(); // Save last successful connection + + sendResetCommand(); + + } else { + m_serial->close(); + QMessageBox::critical(this, tr("Error"), m_serial->errorString()); + + m_statusBar->showMessage(tr("Open error")); + } + } else { + QMessageBox::critical(this, tr("Error"), m_serial->errorString()); + + m_statusBar->showMessage(tr("Configure error")); + } +} + +void TerminalConsole::closeSerialPort() +{ + m_serial->close(); + m_console->setEnabled(false); + ui->connectButton->setEnabled(true); + ui->disconnectButton->setEnabled(false); + ui->settingsButton->setEnabled(true); + m_statusBar->showMessage(tr("Disconnected")); +} + +void TerminalConsole::sendResetCommand() +{ + if (m_serial->isOpen()) { + m_serial->setDataTerminalReady(true); + m_serial->waitForBytesWritten(250); + m_serial->setDataTerminalReady(false); + } +} + +void TerminalConsole::writeData(const QByteArray &data) +{ +// qDebug() << "writeData:" << data; + m_serial->write(data); +} + +void TerminalConsole::readData() +{ + QByteArray data = m_serial->readAll(); +// qDebug() << "readData:" << data; + m_console->putData(data); + + switch(m_consoleMode) + { + case APM: // APM + // On reset, send the break sequence and display help + if (data.contains("ENTER 3")) { + m_serial->write("\r\r\r"); + m_serial->waitForBytesWritten(10); + m_serial->write("HELP\r"); + } + break; + case PX4: + // Do nothing + default: + qDebug() << "Mode not yet implemented"; + } + +} + +void TerminalConsole::handleError(QSerialPort::SerialPortError error) +{ + if (error == QSerialPort::ResourceError) { + QMessageBox::critical(this, tr("Critical Error"), m_serial->errorString()); + closeSerialPort(); + } +} + +void TerminalConsole::initConnections() +{ + // Ui Connections + connect(ui->connectButton, SIGNAL(released()), this, SLOT(openSerialPort())); + connect(ui->disconnectButton, SIGNAL(released()), this, SLOT(closeSerialPort())); + connect(ui->settingsButton, SIGNAL(released()), m_settingsDialog, SLOT(show())); + connect(ui->clearButton, SIGNAL(released()), m_console, SLOT(clear())); + + connect(ui->baudComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setBaudRate(int))); + connect(ui->linkComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setLink(int))); +// connect(ui->linkComboBox, SIGNAL()), this, SLOT(setLink(int))); + + // Serial Port Connections + connect(m_serial, SIGNAL(error(QSerialPort::SerialPortError)), this, + SLOT(handleError(QSerialPort::SerialPortError))); + + connect(m_serial, SIGNAL(readyRead()), this, SLOT(readData())); + connect(m_console, SIGNAL(getData(QByteArray)), this, SLOT(writeData(QByteArray))); +} + +void TerminalConsole::setBaudRate(int index) +{ + m_settings.baudRate = static_cast( + ui->baudComboBox->itemData(index).toInt()); + qDebug() << "Changed Baud to:" << m_settings.baudRate; + +} + +void TerminalConsole::setLink(int index) +{ + m_settings.name = ui->linkComboBox->currentText(); + qDebug() << "Changed Link to:" << m_settings.name; + +} + +void TerminalConsole::loadSettings() +{ + // Load defaults from settings + QSettings settings(QGC::COMPANYNAME, QGC::APPNAME); + settings.sync(); + if (settings.contains("TERMINALCONSOLE_COMM_PORT")) + { + m_settings.name = settings.value("TERMINALCONSOLE_COMM_PORT").toString(); + m_settings.baudRate = settings.value("TERMINALCONSOLE_COMM_BAUD").toInt(); + m_settings.parity = static_cast + (settings.value("TERMINALCONSOLE_COMM_PARITY").toInt()); + m_settings.stopBits = static_cast + (settings.value("TERMINALCONSOLE_COMM_STOPBITS").toInt()); + m_settings.dataBits = static_cast + (settings.value("TERMINALCONSOLE_COMM_DATABITS").toInt()); + m_settings.flowControl = static_cast + (settings.value("TERMINALCONSOLE_COMM_FLOW_CONTROL").toInt()); + } else { + // init the structure + } +} + +void TerminalConsole::writeSettings() +{ + // Store settings + QSettings settings(QGC::COMPANYNAME, QGC::APPNAME); + settings.setValue("TERMINALCONSOLE_COMM_PORT", m_settings.name); + settings.setValue("TERMINALCONSOLE_COMM_BAUD", m_settings.baudRate); + settings.setValue("TERMINALCONSOLE_COMM_PARITY", m_settings.parity); + settings.setValue("TERMINALCONSOLE_COMM_STOPBITS", m_settings.stopBits); + settings.setValue("TERMINALCONSOLE_COMM_DATABITS", m_settings.dataBits); + settings.setValue("TERMINALCONSOLE_COMM_FLOW_CONTROL", m_settings.flowControl); + settings.sync(); +} + + + diff --git a/src/ui/configuration/terminalconsole.h b/src/ui/configuration/terminalconsole.h new file mode 100644 index 0000000000000000000000000000000000000000..85a5643946c001a1ea2929c72a3078d501aae419 --- /dev/null +++ b/src/ui/configuration/terminalconsole.h @@ -0,0 +1,97 @@ +/*===================================================================== + +APM_PLANNER Open Source Ground Control Station + +(c) 2013, Bill Bonney + +This file is part of the APM_PLANNER project + + APM_PLANNER is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + APM_PLANNER 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with APM_PLANNER. If not, see . + +======================================================================*/ + +/** + * @file + * @brief Terminal Console display View. + * + * @author Bill Bonney + * + * Influenced from Qt examples by :- + * Copyright (C) 2012 Denis Shienkov + * Copyright (C) 2012 Laszlo Papp + * + */ + +#ifndef TERMINALCONSOLE_H +#define TERMINALCONSOLE_H + +#include "SerialSettingsDialog.h" + +#include +#include + +namespace Ui { +class TerminalConsole; +} + +class Console; +class SettingsDialog; +class QStatusBar; +class QComboBox; + +class TerminalConsole : public QWidget +{ + Q_OBJECT + +public: + enum ConsoleMode { APM, PX4 }; +public: + explicit TerminalConsole(QWidget *parent = 0); + ~TerminalConsole(); + +private slots: + void openSerialPort(); + void openSerialPort(const SerialSettings &settings); + void closeSerialPort(); + void writeData(const QByteArray &data); + void readData(); + void sendResetCommand(); + + void handleError(QSerialPort::SerialPortError error); + +private slots: + void setBaudRate(int index); + void setLink(int index); + +private: + void initConnections(); + void addBaudComboBoxConfig(); + void fillPortsInfo(QComboBox &comboxBox); + void addConsoleModesComboBoxConfig(); + void writeSettings(); + void loadSettings(); + + +private: + Ui::TerminalConsole *ui; + + Console *m_console; + QStatusBar *m_statusBar; + SettingsDialog *m_settingsDialog; + QSerialPort *m_serial; + SerialSettings m_settings; + ConsoleMode m_consoleMode; +}; + +#endif // TERMINALCONSOLE_H diff --git a/src/ui/configuration/terminalconsole.ui b/src/ui/configuration/terminalconsole.ui new file mode 100644 index 0000000000000000000000000000000000000000..455cfc1e7abfe3871af0b0ff70f588af15bded16 --- /dev/null +++ b/src/ui/configuration/terminalconsole.ui @@ -0,0 +1,177 @@ + + + TerminalConsole + + + + 0 + 0 + 889 + 531 + + + + Form + + + + + + + 0 + 0 + + + + Terminal Output + + + + + + + + QLayout::SetMinAndMaxSize + + + + + + 100 + 0 + + + + + 131 + 0 + + + + CONNECT + + + + + + + + 0 + 0 + + + + + 131 + 0 + + + + DISCONNECT + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 0 + 0 + + + + + 123 + 0 + + + + + 220 + 32 + + + + + + + + + 0 + 0 + + + + + 123 + 0 + + + + + + + + + 0 + 0 + + + + + 123 + 0 + + + + + + + + Qt::Vertical + + + + 91 + 23 + + + + + + + + Adv. Settings + + + + + + + Clear + + + + + + + + + + diff --git a/src/ui/uas/UASQuickView.cc b/src/ui/uas/UASQuickView.cc index 9d5f428595c2f277abc378839026b4a908e40956..6d74b31a08fdd098bccffd0485b8f00ef0f20092 100644 --- a/src/ui/uas/UASQuickView.cc +++ b/src/ui/uas/UASQuickView.cc @@ -4,13 +4,17 @@ #include "UASQuickViewItemSelect.h" #include "UASQuickViewTextItem.h" #include - -UASQuickView::UASQuickView(QWidget *parent) : - QWidget(parent), - m_ui(new Ui::UASQuickView) +#include +UASQuickView::UASQuickView(QWidget *parent) : QWidget(parent) { - m_ui->setupUi(this); quickViewSelectDialog=0; + m_columnCount=2; + m_currentColumn=0; + ui.setupUi(this); + + ui.horizontalLayout->setMargin(0); + m_verticalLayoutList.append(new QVBoxLayout()); + ui.horizontalLayout->addItem(m_verticalLayoutList[0]); connect(UASManager::instance(),SIGNAL(activeUASSet(UASInterface*)),this,SLOT(setActiveUAS(UASInterface*))); connect(UASManager::instance(),SIGNAL(UASCreated(UASInterface*)),this,SLOT(addUAS(UASInterface*))); @@ -27,20 +31,26 @@ UASQuickView::UASQuickView(QWidget *parent) : { valueEnabled("altitude"); valueEnabled("groundSpeed"); - valueEnabled("distToWaypoint"); + valueEnabled("distToWP"); valueEnabled("yaw"); valueEnabled("roll"); } - QAction *action = new QAction("Add Item",this); + QAction *action = new QAction("Add/Remove Items",this); action->setCheckable(false); connect(action,SIGNAL(triggered()),this,SLOT(actionTriggered())); this->addAction(action); + QAction *columnaction = new QAction("Set Column Count",this); + columnaction->setCheckable(false); + connect(columnaction,SIGNAL(triggered()),this,SLOT(columnActionTriggered())); + this->addAction(columnaction); + updateTimer = new QTimer(this); connect(updateTimer,SIGNAL(timeout()),this,SLOT(updateTimerTick())); -} + updateTimer->start(1000); +} UASQuickView::~UASQuickView() { if (quickViewSelectDialog) @@ -48,6 +58,18 @@ UASQuickView::~UASQuickView() delete quickViewSelectDialog; } } +void UASQuickView::columnActionTriggered() +{ + bool ok = false; + int newcolumns = QInputDialog::getInt(this,"Columns","Enter number of columns",1,0,100,1,&ok); + if (!ok) + { + return; + } + m_columnCount = newcolumns; + sortItems(newcolumns); + saveSettings(); +} void UASQuickView::actionTriggered() { @@ -67,7 +89,6 @@ void UASQuickView::actionTriggered() } quickViewSelectDialog->show(); } - void UASQuickView::saveSettings() { QSettings settings; @@ -80,12 +101,13 @@ void UASQuickView::saveSettings() settings.setValue("type","text"); } settings.endArray(); + settings.setValue("UAS_QUICK_VIEW_COLUMNS",m_columnCount); settings.sync(); } - void UASQuickView::loadSettings() { QSettings settings; + m_columnCount = settings.value("UAS_QUICK_VIEW_COLUMNS",1).toInt(); int size = settings.beginReadArray("UAS_QUICK_VIEW_ITEMS"); for (int i=0;isetTitle(value); - m_ui->verticalLayout->addWidget(item); + //ui.verticalLayout->addWidget(item); + //m_currentColumn + m_verticalLayoutList[m_currentColumn]->addWidget(item); + m_PropertyToLayoutIndexMap[value] = m_currentColumn; + m_currentColumn++; + if (m_currentColumn >= m_columnCount-1) + { + m_currentColumn = 0; + } uasPropertyToLabelMap[value] = item; uasEnabledPropertyList.append(value); + if (!uasPropertyValueMap.contains(value)) { uasPropertyValueMap[value] = 0; } saveSettings(); + item->show(); + sortItems(m_columnCount); } +void UASQuickView::sortItems(int columncount) +{ + QList itemlist; + for (QMap::const_iterator i = uasPropertyToLabelMap.constBegin();i!=uasPropertyToLabelMap.constEnd();i++) + { + m_verticalLayoutList[m_PropertyToLayoutIndexMap[i.key()]]->removeWidget(i.value()); + m_PropertyToLayoutIndexMap.remove(i.key()); + itemlist.append(i.value()); + } + //Item list has all the widgets availble, now re-add them to the layouts. + for (int i=0;iremoveItem(m_verticalLayoutList[i]); + m_verticalLayoutList[i]->deleteLater(); //removeItem de-parents the item. + } + m_verticalLayoutList.clear(); + + //Create a vertical layout for every intended column + for (int i=0;iaddItem(layout); + m_verticalLayoutList.append(layout); + layout->setMargin(0); + } + + //Cycle through all items and add them to the layout + int currcol = 0; + for (int i=0;iaddWidget(itemlist[i]); + currcol++; + if (currcol >= columncount) + { + currcol = 0; + } + } + m_currentColumn = currcol; + QApplication::processEvents(); + recalculateItemTextSizing(); +} +void UASQuickView::resizeEvent(QResizeEvent *evt) +{ + recalculateItemTextSizing(); +} +void UASQuickView::recalculateItemTextSizing() +{ + int minpixelsize = 65535; + for (QMap::const_iterator i = uasPropertyToLabelMap.constBegin();i!=uasPropertyToLabelMap.constEnd();i++) + { + int tempmin = i.value()->minValuePixelSize(); + if (tempmin < minpixelsize) + { + minpixelsize = tempmin; + } + } + for (QMap::const_iterator i = uasPropertyToLabelMap.constBegin();i!=uasPropertyToLabelMap.constEnd();i++) + { + i.value()->setValuePixelSize(minpixelsize); + } +} void UASQuickView::valueDisabled(QString value) { @@ -121,7 +217,10 @@ void UASQuickView::valueDisabled(QString value) UASQuickViewItem *item = uasPropertyToLabelMap[value]; uasPropertyToLabelMap.remove(value); item->hide(); - m_ui->verticalLayout->removeWidget(item); + //ui.verticalLayout->removeWidget(item); + //layout->removeWidget(item); + m_verticalLayoutList[m_PropertyToLayoutIndexMap[value]]->removeWidget(item); + sortItems(m_columnCount); item->deleteLater(); uasEnabledPropertyList.removeOne(value); saveSettings(); @@ -158,33 +257,14 @@ void UASQuickView::addUAS(UASInterface* uas) void UASQuickView::setActiveUAS(UASInterface* uas) { - // Clean up from the old UAS - if (this->uas) + if (!uas) { - uasPropertyValueMap.clear(); - foreach (UASQuickViewItem* i, uasPropertyToLabelMap.values()) - { - i->deleteLater(); - } - uasPropertyToLabelMap.clear(); - - updateTimer->stop(); - foreach (QAction* i, this->actions()) - { - i->deleteLater(); - } + return; } - - // Update the UAS to point to the new one. this->uas = uas; - - if (this->uas) - { - connect(uas,SIGNAL(valueChanged(int,QString,QString,QVariant,quint64)),this,SLOT(valueChanged(int,QString,QString,QVariant,quint64))); - updateTimer->start(1000); - } + connect(uas,SIGNAL(valueChanged(int,QString,QString,QVariant,quint64)),this,SLOT(valueChanged(int,QString,QString,QVariant,quint64))); + //connect(uas,SIGNAL()) } - void UASQuickView::addSource(MAVLinkDecoder *decoder) { connect(decoder,SIGNAL(valueChanged(int,QString,QString,double,quint64)),this,SLOT(valueChanged(int,QString,QString,double,quint64))); @@ -197,12 +277,8 @@ void UASQuickView::addSource(MAVLinkDecoder *decoder) connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint32,quint64)),this,SLOT(valueChanged(int,QString,QString,quint32,quint64))); connect(decoder,SIGNAL(valueChanged(int,QString,QString,quint64,quint64)),this,SLOT(valueChanged(int,QString,QString,quint64,quint64))); } - void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint8 value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) @@ -215,9 +291,6 @@ void UASQuickView::valueChanged(const int uasId, const QString& name, const QStr void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint8 value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) @@ -227,12 +300,8 @@ void UASQuickView::valueChanged(const int uasId, const QString& name, const QStr } uasPropertyValueMap[name] = value; } - void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint16 value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) @@ -242,12 +311,8 @@ void UASQuickView::valueChanged(const int uasId, const QString& name, const QStr } uasPropertyValueMap[name] = value; } - void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint16 value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) @@ -257,30 +322,19 @@ void UASQuickView::valueChanged(const int uasId, const QString& name, const QStr } uasPropertyValueMap[name] = value; } - void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint32 value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) { quickViewSelectDialog->addItem(name); } - - // And periodically update the view. - updateTimer->start(1000); } uasPropertyValueMap[name] = value; } - void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint32 value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) @@ -290,12 +344,8 @@ void UASQuickView::valueChanged(const int uasId, const QString& name, const QStr } uasPropertyValueMap[name] = value; } - void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) @@ -305,30 +355,19 @@ void UASQuickView::valueChanged(const int uasId, const QString& name, const QStr } uasPropertyValueMap[name] = value; } - void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) { quickViewSelectDialog->addItem(name); } - - // And periodically update the view. - updateTimer->start(1000); } uasPropertyValueMap[name] = value; } - void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec) { - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); if (!uasPropertyValueMap.contains(name)) { if (quickViewSelectDialog) @@ -339,21 +378,6 @@ void UASQuickView::valueChanged(const int uasId, const QString& name, const QStr uasPropertyValueMap[name] = value; } -void UASQuickView::valueChanged(const int uasId, const QString& name, const QString& unit, const QVariant value,const quint64 msec) -{ - Q_UNUSED(uasId); - Q_UNUSED(unit); - Q_UNUSED(msec); - if (!uasPropertyValueMap.contains(name)) - { - if (quickViewSelectDialog) - { - quickViewSelectDialog->addItem(name); - } - } - uasPropertyValueMap[name] = value.toDouble(); -} - void UASQuickView::actionTriggered(bool checked) { QAction *senderlabel = qobject_cast(sender()); @@ -363,22 +387,36 @@ void UASQuickView::actionTriggered(bool checked) } if (checked) { - UASQuickViewItem *item = new UASQuickViewTextItem(this); + valueEnabled(senderlabel->text()); + /*UASQuickViewItem *item = new UASQuickViewTextItem(this); item->setTitle(senderlabel->text()); - this->layout()->addWidget(item); - uasPropertyToLabelMap[senderlabel->text()] = item; + layout->addWidget(item); + //ui.verticalLayout->addWidget(item); + m_currentColumn++; + if (m_currentColumn >= m_verticalLayoutList.size()) + { + m_currentColumn = 0; + } + uasPropertyToLabelMap[senderlabel->text()] = item;*/ + + } else { - this->layout()->removeWidget(uasPropertyToLabelMap[senderlabel->text()]); + valueDisabled(senderlabel->text()); + /*layout->removeWidget(uasPropertyToLabelMap[senderlabel->text()]); uasPropertyToLabelMap[senderlabel->text()]->deleteLater(); - uasPropertyToLabelMap.remove(senderlabel->text()); + uasPropertyToLabelMap.remove(senderlabel->text());*/ } } +void UASQuickView::valueChanged(const int uasid, const QString& name, const QString& unit, const QVariant value,const quint64 msecs) +{ + uasPropertyValueMap[name] = value.toDouble(); +} void UASQuickView::valChanged(double val,QString type) { - Q_UNUSED(val); - Q_UNUSED(type); + //qDebug() << "Value changed:" << type << val; + // uasPropertyValueMap[type] = val; } diff --git a/src/ui/uas/UASQuickView.h b/src/ui/uas/UASQuickView.h index c60611249781b426e147040f3260ae9944f8b437..33075bda81d83ad1db463d2f9edeb80764233258 100644 --- a/src/ui/uas/UASQuickView.h +++ b/src/ui/uas/UASQuickView.h @@ -18,10 +18,6 @@ public: ~UASQuickView(); void addSource(MAVLinkDecoder *decoder); private: - /** - * Adds a default set of actions to the widget's menu. - */ - void addDefaultActions(); UASInterface *uas; /** List of enabled properties */ @@ -35,7 +31,6 @@ private: /** Timer for updating the UI */ QTimer *updateTimer; - Ui::UASQuickView* m_ui; /** Selection dialog for selectin/deselecting gauge items */ UASQuickViewItemSelect *quickViewSelectDialog; @@ -45,9 +40,24 @@ private: /** Loads gauge layout from settings file */ void loadSettings(); + + void recalculateItemTextSizing(); + + /** Column Count */ + int m_columnCount; + + QList m_verticalLayoutList; + void sortItems(int columncount); + QList m_verticalLayoutItemCount; + int m_currentColumn; + QMap m_PropertyToLayoutIndexMap; + + //FlowLayout *layout; protected: + Ui::Form ui; + void resizeEvent(QResizeEvent *evt); signals: - + public slots: void valueChanged(const int uasId, const QString& name, const QString& unit, const quint8 value, const quint64 msec); void valueChanged(const int uasId, const QString& name, const QString& unit, const qint8 value, const quint64 msec); @@ -58,8 +68,8 @@ public slots: void valueChanged(const int uasId, const QString& name, const QString& unit, const quint64 value, const quint64 msec); void valueChanged(const int uasId, const QString& name, const QString& unit, const qint64 value, const quint64 msec); void valueChanged(const int uasId, const QString& name, const QString& unit, const double value, const quint64 msec); - void valueChanged(const int uasId, const QString& name, const QString& unit, const QVariant value, const quint64 msec); + void valueChanged(const int uasid, const QString& name, const QString& unit, const QVariant value,const quint64 msecs); void actionTriggered(bool checked); void actionTriggered(); void updateTimerTick(); @@ -69,6 +79,7 @@ public slots: void selectDialogClosed(); void valueEnabled(QString value); void valueDisabled(QString value); + void columnActionTriggered(); }; #endif // UASQUICKVIEW_H diff --git a/src/ui/uas/UASQuickView.ui b/src/ui/uas/UASQuickView.ui index 50f17082a0fe822ebd6ee6f3bf453aab7ed4e273..f11c734b7cc8ae1a57fdf65b9497f9eb55f5d8c0 100644 --- a/src/ui/uas/UASQuickView.ui +++ b/src/ui/uas/UASQuickView.ui @@ -1,7 +1,7 @@ - UASQuickView - + Form + 0 @@ -10,12 +10,6 @@ 300 - - - 0 - 0 - - 100 @@ -26,12 +20,9 @@ Form - - QLayout::SetMinimumSize - - - 0 - + + + diff --git a/src/ui/uas/UASQuickViewItem.h b/src/ui/uas/UASQuickViewItem.h index 8bba60ba3c8633264be811679d82e89849b6cdf2..dea59a980fc3ecafb10907db6c74c0f3a1a20e90 100644 --- a/src/ui/uas/UASQuickViewItem.h +++ b/src/ui/uas/UASQuickViewItem.h @@ -9,6 +9,8 @@ public: explicit UASQuickViewItem(QWidget *parent = 0); virtual void setValue(double value)=0; virtual void setTitle(QString title)=0; + virtual int minValuePixelSize()=0; + virtual void setValuePixelSize(int size)=0; }; #endif // UASQUICKVIEWITEM_H diff --git a/src/ui/uas/UASQuickViewTextItem.cc b/src/ui/uas/UASQuickViewTextItem.cc index bdac05135af8beb0706251d0cdf42cf4a0caf7b4..5f8b5cc50564561fcd3d9534dfb2d2aa5c4580b5 100644 --- a/src/ui/uas/UASQuickViewTextItem.cc +++ b/src/ui/uas/UASQuickViewTextItem.cc @@ -48,7 +48,26 @@ UASQuickViewTextItem::UASQuickViewTextItem(QWidget *parent) : UASQuickViewItem(p } void UASQuickViewTextItem::setValue(double value) { - valueLabel->setText(QString::number(value,'f',4)); + if (value < 10 && value > -10) + { + valueLabel->setText(QString::number(value,'f',4)); + } + else if (value < 100 && value > -100) + { + valueLabel->setText(QString::number(value,'f',3)); + } + else if (value < 1000 && value > -1000) + { + valueLabel->setText(QString::number(value,'f',2)); + } + else if (value < 10000 && value > -10000) + { + valueLabel->setText(QString::number(value,'f',1)); + } + else if (value >= 100000 || value <= -100000) + { + valueLabel->setText(QString::number(value,'f',0)); + } } void UASQuickViewTextItem::setTitle(QString title) @@ -62,8 +81,58 @@ void UASQuickViewTextItem::setTitle(QString title) titleLabel->setText(title); } } +int UASQuickViewTextItem::minValuePixelSize() +{ + QFont valuefont = valueLabel->font(); + QFont titlefont = titleLabel->font(); + valuefont.setPixelSize(this->height()); + titlefont.setPixelSize(valuefont.pixelSize() / 2.0); + //spacerItem->setGeometry(QRect(0,0,20,this->height()/10.0)); + + QFontMetrics metrics(valuefont); + //valuefont.setPixelSize(this->height() / 2.0); + bool fit = false; + while (!fit) + { + + QFontMetrics valfm( valuefont ); + QRect valbound = valfm.boundingRect(0,0, valueLabel->width(), valueLabel->height(), Qt::TextWordWrap | Qt::AlignLeft, "12345678.00"/*valueLabel->text()*/); + //QFontMetrics titlefm( titlefont ); + //QRect titlebound = titlefm.boundingRect(0,0, titleLabel->width(), titleLabel->height(), Qt::TextWordWrap | Qt::AlignLeft, titleLabel->text()); + + if ((valbound.width() <= valueLabel->width() && valbound.height() <= valueLabel->height()))// && (titlebound.width() <= titleLabel->width() && titlebound.height() <= titleLabel->height())) + fit = true; + else + { + if (valuefont.pixelSize()-5 <= 0) + { + fit = true; + valuefont.setPixelSize(5); + } + else + { + valuefont.setPixelSize(valuefont.pixelSize() - 5); + } + //titlefont.setPixelSize(valuefont.pixelSize() / 2.0); + //qDebug() << "Point size:" << valuefont.pixelSize() << valueLabel->width() << valueLabel->height(); + } + } + return valuefont.pixelSize(); +} +void UASQuickViewTextItem::setValuePixelSize(int size) +{ + QFont valuefont = valueLabel->font(); + QFont titlefont = titleLabel->font(); + valuefont.setPixelSize(size); + titlefont.setPixelSize(valuefont.pixelSize() / 2.0); + valueLabel->setFont(valuefont); + titleLabel->setFont(titlefont); + update(); +} + void UASQuickViewTextItem::resizeEvent(QResizeEvent *event) { + return; QFont valuefont = valueLabel->font(); QFont titlefont = titleLabel->font(); valuefont.setPixelSize(this->height()); diff --git a/src/ui/uas/UASQuickViewTextItem.h b/src/ui/uas/UASQuickViewTextItem.h index dea8cc3b16fb0f2773376038e95c0d6baf615d55..698c358f9120eecf2ba40eb37ae8cfa9740e5ec8 100644 --- a/src/ui/uas/UASQuickViewTextItem.h +++ b/src/ui/uas/UASQuickViewTextItem.h @@ -10,6 +10,8 @@ public: UASQuickViewTextItem(QWidget *parent=0); void setValue(double value); void setTitle(QString title); + int minValuePixelSize(); + void setValuePixelSize(int size); protected: void resizeEvent(QResizeEvent *event); private: