From 3a2cfbcf13035f196730b87fd5e2c3ba58eafd9b Mon Sep 17 00:00:00 2001 From: Henrik Ekblad Date: Tue, 1 Apr 2014 22:16:22 +0200 Subject: [PATCH] Update IR lib/sensor to use the latest IR_Remote fork by Chris Young (IRLib) https://github.com/cyborg5/IRLib --- SerialGateway/SerialGateway.ino | 2 +- libraries/IRLib/.gitattributes | 22 + libraries/IRLib/.gitignore | 215 ++++ libraries/IRLib/CHANGELOG.txt | 50 + libraries/IRLib/IRLib.cpp | 1049 +++++++++++++++++ libraries/IRLib/IRLib.h | 323 +++++ libraries/IRLib/IRLibMatch.h | 100 ++ libraries/IRLib/IRLibRData.h | 54 + .../IRremoteInt.h => IRLib/IRLibTimer.h} | 244 +--- libraries/IRLib/LICENSE.txt | Bin 0 -> 49626 bytes libraries/IRLib/README.txt | 84 ++ libraries/IRLib/examples/DirecTV/DirecTV.ino | 201 ++++ libraries/IRLib/examples/GIcable/GIcable.ino | 152 +++ .../IRLib/examples/IRanalyze/IRanalyze.ino | 117 ++ libraries/IRLib/examples/IRfreq/IRfreq.ino | 95 ++ .../examples/IRhashdecode/IRhashdecode.ino | 49 + .../IRLib/examples/IRrecord/IRrecord.ino | 130 ++ .../IRLib/examples/IRrecvDump/IRrecvDump.ino | 40 + .../IRLib/examples/IRsendDemo/IRsendDemo.ino | 25 + .../IRLib/examples/IRsendJVC/IRsendJVC.ino | 37 + .../IRserial_remote/IRserial_remote.ino | 55 + .../IRserial_remote/IRserial_remote.py | 133 +++ .../IRserial_remote/POV-Ray/remotebg.pov | 62 + .../IRLib/examples/IRserial_remote/click.wav | Bin 0 -> 19632 bytes .../examples/IRserial_remote/remotebg.png | Bin 0 -> 48875 bytes libraries/IRLib/examples/IRservo/IRservo.ino | 75 ++ .../IRLib/examples/Samsung36/Samsung36.ino | 258 ++++ libraries/IRLib/examples/rcmm/rcmm.ino | 210 ++++ libraries/IRLib/manuals/IRLibReference.docx | Bin 0 -> 151027 bytes libraries/IRLib/manuals/IRLibReference.pdf | Bin 0 -> 323505 bytes libraries/IRremote/IRremote.cpp | 1025 ---------------- libraries/IRremote/IRremote.h | 118 -- libraries/IRremote/LICENSE.txt | 458 ------- .../IRremote/examples/IRrecord/IRrecord.ino | 167 --- .../examples/IRrecvDemo/IRrecvDemo.ino | 28 - .../examples/IRrecvDump/IRrecvDump.ino | 81 -- .../IRremote/examples/IRrelay/IRrelay.ino | 85 -- .../examples/IRsendDemo/IRsendDemo.ino | 25 - libraries/IRremote/examples/IRtest/IRtest.ino | 190 --- .../IRremote/examples/IRtest2/IRtest2.ino | 290 ----- .../JVCPanasonicSendDemo.ino | 29 - libraries/IRremote/keywords.txt | 50 - libraries/IRremote/readme | 14 - .../MySensors/examples/IrSensor/IrSensor.ino | 25 +- 44 files changed, 3607 insertions(+), 2760 deletions(-) create mode 100644 libraries/IRLib/.gitattributes create mode 100644 libraries/IRLib/.gitignore create mode 100644 libraries/IRLib/CHANGELOG.txt create mode 100644 libraries/IRLib/IRLib.cpp create mode 100644 libraries/IRLib/IRLib.h create mode 100644 libraries/IRLib/IRLibMatch.h create mode 100644 libraries/IRLib/IRLibRData.h rename libraries/{IRremote/IRremoteInt.h => IRLib/IRLibTimer.h} (60%) create mode 100644 libraries/IRLib/LICENSE.txt create mode 100644 libraries/IRLib/README.txt create mode 100644 libraries/IRLib/examples/DirecTV/DirecTV.ino create mode 100644 libraries/IRLib/examples/GIcable/GIcable.ino create mode 100644 libraries/IRLib/examples/IRanalyze/IRanalyze.ino create mode 100644 libraries/IRLib/examples/IRfreq/IRfreq.ino create mode 100644 libraries/IRLib/examples/IRhashdecode/IRhashdecode.ino create mode 100644 libraries/IRLib/examples/IRrecord/IRrecord.ino create mode 100644 libraries/IRLib/examples/IRrecvDump/IRrecvDump.ino create mode 100644 libraries/IRLib/examples/IRsendDemo/IRsendDemo.ino create mode 100644 libraries/IRLib/examples/IRsendJVC/IRsendJVC.ino create mode 100644 libraries/IRLib/examples/IRserial_remote/IRserial_remote.ino create mode 100644 libraries/IRLib/examples/IRserial_remote/IRserial_remote.py create mode 100644 libraries/IRLib/examples/IRserial_remote/POV-Ray/remotebg.pov create mode 100644 libraries/IRLib/examples/IRserial_remote/click.wav create mode 100644 libraries/IRLib/examples/IRserial_remote/remotebg.png create mode 100644 libraries/IRLib/examples/IRservo/IRservo.ino create mode 100644 libraries/IRLib/examples/Samsung36/Samsung36.ino create mode 100644 libraries/IRLib/examples/rcmm/rcmm.ino create mode 100644 libraries/IRLib/manuals/IRLibReference.docx create mode 100644 libraries/IRLib/manuals/IRLibReference.pdf delete mode 100644 libraries/IRremote/IRremote.cpp delete mode 100644 libraries/IRremote/IRremote.h delete mode 100644 libraries/IRremote/LICENSE.txt delete mode 100644 libraries/IRremote/examples/IRrecord/IRrecord.ino delete mode 100644 libraries/IRremote/examples/IRrecvDemo/IRrecvDemo.ino delete mode 100644 libraries/IRremote/examples/IRrecvDump/IRrecvDump.ino delete mode 100644 libraries/IRremote/examples/IRrelay/IRrelay.ino delete mode 100644 libraries/IRremote/examples/IRsendDemo/IRsendDemo.ino delete mode 100644 libraries/IRremote/examples/IRtest/IRtest.ino delete mode 100644 libraries/IRremote/examples/IRtest2/IRtest2.ino delete mode 100644 libraries/IRremote/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino delete mode 100644 libraries/IRremote/keywords.txt delete mode 100644 libraries/IRremote/readme diff --git a/SerialGateway/SerialGateway.ino b/SerialGateway/SerialGateway.ino index 2d3d5a3..c10de8c 100644 --- a/SerialGateway/SerialGateway.ino +++ b/SerialGateway/SerialGateway.ino @@ -38,7 +38,7 @@ //Gateway gw; // To start gateway with include button and led blinking functionality enabled use this instead! -Gateway gw(9, 10, INCLUSION_MODE_TIME, INCLUSION_MODE_PIN, 6, 5, 4); +Gateway gw(5, 6, INCLUSION_MODE_TIME, INCLUSION_MODE_PIN, 6, 5, 4); char inputString[MAX_RECEIVE_LENGTH] = ""; // A string to hold incoming commands from serial/ethernet interface diff --git a/libraries/IRLib/.gitattributes b/libraries/IRLib/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/libraries/IRLib/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/libraries/IRLib/.gitignore b/libraries/IRLib/.gitignore new file mode 100644 index 0000000..b9d6bd9 --- /dev/null +++ b/libraries/IRLib/.gitignore @@ -0,0 +1,215 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +build/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg diff --git a/libraries/IRLib/CHANGELOG.txt b/libraries/IRLib/CHANGELOG.txt new file mode 100644 index 0000000..1aa1013 --- /dev/null +++ b/libraries/IRLib/CHANGELOG.txt @@ -0,0 +1,50 @@ +Change Log for IRLib – an Arduino library for infrared encoding and decoding +Copyright 2013-2014 by Chris Young http://tech.cyborg5.com/irlib/ + +Version 1.4 – March 2014 + Added IRLIB_ prefix to debug macros to avoid name collisions + Debug macros now report more information + Added example new protocol Phillips RCMM used by AT&T U-Verse boxes and Nokia satellite boxes + Added ABS_MATCH macro which allows you to match using absolute number of microseconds versus the old way which used a percentage. Necessary for implementing RCMM protocol. + Added IRLIB_USE_PERCENT definition which when commented out changes the default from percentage match to absolute match. Also added DEFAULT_ABS_TOLERANCE. More details on these changes will be provided in the documentation when the section on adding new protocols is completed. +Version 1.31 – March 2014 + Commented out debug code that was accidentally left active in 1.3 release +Version 1.3 – January 2014 +NEW FILES + Added new file IRLibRData.h and moved irparams structure and related items to that file. Allows users to create custom IRrecv classes +NEW EXAMPLES + Rewrote Samsung36 example to include both send and receive + Added new examples for new protocols DirecTV and GIcable + Added new example IRanalyze gives more detailed analysis of timing. Useful in analyzing the protocols + Added new example IRfreq reports modulation frequency of a signal. Requires TSMP58000 IR learner chip + Cleanup of other example routines. +NEW CLASSES + Created IRrecvBase class to allow custom receiver classes. IRrecv is now a derived class from it. + Created IRrecvLoop class which receives IR signals without using any hardware interrupts or timers. Also created IRrecvPCI class which uses Pin Change Interrupts to receive IR signals. These new receivers are more accurate than the 50µs timing of the original IRrecv. However they also have other limitations described in comments. +New functions, variables and methods + In IRrecvBase added "unsigned char Mark_Excess" with default value 100. Was a define macro but now is user settable. + In IRrecvBase added method "unsigned char getPinNum(void);" which retrieves the pin number used from irparams.recvpin. This value not normally accessible to end user. + Globally available function "void do_Blink(void);" blinks pin 13 LED. For use by user created extensions of IRrecvBase. +INTERNAL CHANGES + Data collected by IRrecvBase classes in irparams.rawbuf is now converted to actual microseconds rather than clock ticks of 50 µs each. IRrecvBase::GetResults has a new parameter "Time_per_Ticks" that is used to convert ticks into actual microseconds if needed. + Adjustments to mark and space to deal with overreporting and underreporting of intervals is now done once in IRrecvBase::GetResults eliminating the need for MATCH_MARK(d,v) and MATCH_SPACE(d,v). Just use MATCH(d,v) everywhere. + Modified IRLibsendBase::mark() and IRLibsendBase::space() to overcome limitations of "delayMicroseconds()". + Changed many int to char or unsigned char to save memory + Eliminated DEBUG macro in IRLib.h and its use elsewhere. Macro TRACE is more useful. + Changed IRTYPES to unsigned char and a list of #defines rather than an enum (even though I still really like enums, changing it saves memory) +MEMORY EFFICIENCY + Code changes result in memory savings of approximately 54 bytes in code space and 39 bytes of RAM. +-------------------------------- +Version 1.2 – July 2013 + Internal version. No public release +-------------------------------- +Version 1.1 – April 2013 + Constructor of IRsendBase now initializes output pin and forces it low immediately. + New IRrecv::No_Output() method initializes output pin and forces it low. Use this in sketches which receive only by the have output hardware connected. + Added examples IRservo and IRserial_remote +-------------------------------- +Version 1.0a – February 2013 + Removed debugging test switch which was accidentally left on in file "IRLib.h" +-------------------------------- +Version 1.0 – January 2013 + Initial Release \ No newline at end of file diff --git a/libraries/IRLib/IRLib.cpp b/libraries/IRLib/IRLib.cpp new file mode 100644 index 0000000..7307bac --- /dev/null +++ b/libraries/IRLib/IRLib.cpp @@ -0,0 +1,1049 @@ +/* IRLib.cpp from IRLib - an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * + * This library is a major rewrite of IRemote by Ken Shirriff which was covered by + * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. + * That same license applies to this modified version. See his original copyright below. + * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote + * My purpose was to reorganize the code to make it easier to add or remove protocols. + * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them + * by making them separate classes. That way the receiving aspect can be more black box and implementers + * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative + * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. + * Also added provisions to make the classes base classes that could be extended with new protocols + * which would not require recompiling of the original library nor understanding of its detailed contents. + * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. + * Some changes were just my weird programming style. Also extended debugging information added. + */ +/* + * IRremote + * Version 0.1 July, 2009 + * Copyright 2009 Ken Shirriff + * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ + * + * Interrupt code based on NECIRrcv by Joe Knapp + * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 + * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ + */ + +#include "IRLib.h" +#include "IRLibMatch.h" +#include "IRLibRData.h" +#include + +volatile irparams_t irparams; +/* + * Returns a pointer to a flash stored string that is the name of the protocol received. + */ +const __FlashStringHelper *Pnames(IRTYPES Type) { + if(Type>LAST_PROTOCOL) Type=UNKNOWN; + // You can add additional strings before the entry for hash code. + const __FlashStringHelper *Names[LAST_PROTOCOL+1]={F("Unknown"),F("NEC"),F("Sony"),F("RC5"),F("RC6"),F("Panasonic Old"),F("JVC"),F("NECx"),F("Hash Code")}; + return Names[Type]; +}; + + +#define TOPBIT 0x80000000 + +/* + * The IRsend classes contain a series of methods for sending various protocols. + * Each of these begin by calling enableIROut(unsigned char kHz) to set the carrier frequency. + * It then calls mark(int usec) and space(inc usec) to transmit marks and + * spaces of varying length of microseconds however the protocol defines. + * Because we want to separate the hardware specific portions of the code from the general programming + * portions of the code, the code for IRsendBase::IRsendBase, IRsendBase::enableIROut, + * IRsendBase::mark and IRsendBase::space can be found in the lower section of this file. + */ + +/* + * Most of the protocols have a header consisting of a mark/space of a particular length followed by + * a series of variable length mark/space signals. Depending on the protocol they very the lengths of the + * mark or the space to indicate a data bit of "0" or "1". Most also end with a stop bit of "1". + * The basic structure of the sending and decoding these protocols led to lots of redundant code. + * Therefore I have implemented generic sending and decoding routines. You just need to pass a bunch of customized + * parameters and it does the work. This reduces compiled code size with only minor speed degradation. + * You may be able to implement additional protocols by simply passing the proper values to these generic routines. + * The decoding routines do not encode stop bits. So you have to tell this routine whether or not to send one. + */ +void IRsendBase::sendGeneric(unsigned long data, unsigned char Num_Bits, unsigned int Head_Mark, unsigned int Head_Space, + unsigned int Mark_One, unsigned int Mark_Zero, unsigned int Space_One, unsigned int Space_Zero, + unsigned char kHz, bool Use_Stop, unsigned long Max_Extent) { + Extent=0; + data = data << (32 - Num_Bits); + enableIROut(kHz); +//Some protocols do not send a header when sending repeat codes. So we pass a zero value to indicate skipping this. + if(Head_Mark) mark(Head_Mark); + if(Head_Space) space(Head_Space); + for (int i = 0; i rawbuf,sizeof(irparams.rawbuf)); + rawlen=source->rawlen; +}; + +/* + * This routine is actually quite useful. Allows extended classes to call their parent + * if they fail to decode themselves. + */ +bool IRdecodeBase::decode(void) { + return false; +}; + +void IRdecodeBase::Reset(void) { + decode_type= UNKNOWN; + value=0; + bits=0; + rawlen=0; +}; + +/* + * This method dumps useful information about the decoded values. + */ +void IRdecodeBase::DumpResults(void) { + int i;unsigned long Extent;int interval; + if(decode_type<=LAST_PROTOCOL){ + Serial.print(F("Decoded ")); Serial.print(Pnames(decode_type)); + Serial.print(F(": Value:")); Serial.print(value, HEX); + }; + Serial.print(F(" (")); Serial.print(bits, DEC); Serial.println(F(" bits)")); + Serial.print(F("Raw samples(")); Serial.print(rawlen, DEC); + Serial.print(F("): Gap:")); Serial.println(rawbuf[0], DEC); + Serial.print(F(" Head: m")); Serial.print(rawbuf[1], DEC); + Serial.print(F(" s")); Serial.println(rawbuf[2], DEC); + int LowSpace= 32767; int LowMark= 32767; + int HiSpace=0; int HiMark= 0; + Extent=rawbuf[1]+rawbuf[2]; + for (i = 3; i < rawlen; i++) { + Extent+=(interval= rawbuf[i]); + if (i % 2) { + LowMark=min(LowMark, interval); HiMark=max(HiMark, interval); + Serial.print(i/2-1,DEC); Serial.print(F(":m")); + } + else { + if(interval>0)LowSpace=min(LowSpace, interval); HiSpace=max (HiSpace, interval); + Serial.print(F(" s")); + } + Serial.print(interval, DEC); + int j=i-1; + if ((j % 2)==1)Serial.print(F("\t")); + if ((j % 4)==1)Serial.print(F("\t ")); + if ((j % 8)==1)Serial.println(); + if ((j % 32)==1)Serial.println(); + } + Serial.println(); + Serial.print(F("Extent=")); Serial.println(Extent,DEC); + Serial.print(F("Mark min:")); Serial.print(LowMark,DEC);Serial.print(F("\t max:")); Serial.println(HiMark,DEC); + Serial.print(F("Space min:")); Serial.print(LowSpace,DEC);Serial.print(F("\t max:")); Serial.println(HiSpace,DEC); + Serial.println(); +} + +/* + * Again we use a generic routine because most protocols have the same basic structure. However we need to + * indicate whether or not the protocol varies the length of the mark or the space to indicate a "0" or "1". + * If "Mark_One" is zero. We assume that the length of the space varies. If "Mark_One" is not zero then + * we assume that the length of Mark varies and the value passed as "Space_Zero" is ignored. + * When using variable length Mark, assumes Head_Space==Space_One. If it doesn't, you need a specialized decoder. + */ +bool IRdecodeBase::decodeGeneric(unsigned char Raw_Count, unsigned int Head_Mark, unsigned int Head_Space, + unsigned int Mark_One, unsigned int Mark_Zero, unsigned int Space_One, unsigned int Space_Zero) { +// If raw samples count or head mark are zero then don't perform these tests. +// Some protocols need to do custom header work. + unsigned long data = 0; unsigned char Max; offset=1; + if (Raw_Count) {if (rawlen != Raw_Count) return RAW_COUNT_ERROR;} + if (Head_Mark) {if (!MATCH(rawbuf[offset],Head_Mark)) return HEADER_MARK_ERROR(Head_Mark);} + offset++; + if (Head_Space) {if (!MATCH(rawbuf[offset],Head_Space)) return HEADER_SPACE_ERROR(Head_Space);} + + if (Mark_One) {//Length of a mark indicates data "0" or "1". Space_Zero is ignored. + offset=2;//skip initial gap plus header Mark. + Max=rawlen; + while (offset < Max) { + if (!MATCH(rawbuf[offset], Space_One)) return DATA_SPACE_ERROR(Space_One); + offset++; + if (MATCH(rawbuf[offset], Mark_One)) { + data = (data << 1) | 1; + } + else if (MATCH(rawbuf[offset], Mark_Zero)) { + data <<= 1; + } + else return DATA_MARK_ERROR(Mark_Zero); + offset++; + } + bits = (offset - 1) / 2; + } + else {//Mark_One was 0 therefore length of a space indicates data "0" or "1". + Max=rawlen-1; //ignore stop bit + offset=3;//skip initial gap plus two header items + while (offset < Max) { + if (!MATCH (rawbuf[offset],Mark_Zero)) return DATA_MARK_ERROR(Mark_Zero); + offset++; + if (MATCH(rawbuf[offset],Space_One)) { + data = (data << 1) | 1; + } + else if (MATCH (rawbuf[offset],Space_Zero)) { + data <<= 1; + } + else return DATA_SPACE_ERROR(Space_Zero); + offset++; + } + bits = (offset - 1) / 2 -1;//didn't encode stop bit + } + // Success + value = data; + return true; +} + +/* + * This routine has been modified significantly from the original IRremote. + * It assumes you've already called IRrecvBase::GetResults and it was true. + * The purpose of GetResults is to determine if a complete set of signals + * has been received. It then copies the raw data into your decoder's rawbuf + * By moving the test for completion and the copying of the buffer + * outside of this "decode" method you can use the individual decode + * methods or make your own custom "decode" without checking for + * protocols you don't use. + * Note: Don't forget to call IRrecvBase::resume(); after decoding is complete. + */ +bool IRdecode::decode(void) { + if (IRdecodeNEC::decode()) return true; + if (IRdecodeSony::decode()) return true; + if (IRdecodeRC5::decode()) return true; + if (IRdecodeRC6::decode()) return true; + if (IRdecodePanasonic_Old::decode()) return true; + if (IRdecodeNECx::decode()) return true; + if (IRdecodeJVC::decode()) return true; +//if (IRdecodeADDITIONAL::decode()) return true;//add additional protocols here +//Deliberately did not add hash code decoding. If you get decode_type==UNKNOWN and +// you want to know a hash code you can call IRhash::decode() yourself. +// BTW This is another reason we separated IRrecv from IRdecode. + return false; +} + +#define NEC_RPT_SPACE 2250 +bool IRdecodeNEC::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("NEC")); + // Check for repeat + if (rawlen == 4 && MATCH(rawbuf[2], NEC_RPT_SPACE) && + MATCH(rawbuf[3],564)) { + bits = 0; + value = REPEAT; + decode_type = NEC; + return true; + } + if(!decodeGeneric(68, 564*16, 564*8, 0, 564, 564*3, 564)) return false; + decode_type = NEC; + return true; +} + +// According to http://www.hifi-remote.com/johnsfine/DecodeIR.html#Sony8 +// Sony protocol can only be 8, 12, 15, or 20 bits in length. +bool IRdecodeSony::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("Sony")); + if(rawlen!=2*8+2 && rawlen!=2*12+2 && rawlen!=2*15+2 && rawlen!=2*20+2) return RAW_COUNT_ERROR; + if(!decodeGeneric(0, 600*4, 600, 600*2, 600, 600,0)) return false; + decode_type = SONY; + return true; +} + +/* + * The next several decoders were added by Chris Young. They illustrate some of the special cases + * that can come up when decoding using the generic decoder. + */ + +/* + * A very good source for protocol information is... http://www.hifi-remote.com/johnsfine/DecodeIR.html + * I used that information to understand what they call the "Panasonic old" protocol which is used by + * Scientific Atlanta cable boxes. That website uses a very strange notation called IRP notation. + * For this protocol, the notation was: + * {57.6k,833}<1,-1|1,-3>(4,-4,D:5,F:6,~D:5,~F:6,1,-???)+ + * This indicates that the frequency is 57.6, the base length for the pulse is 833 + * The first part of the section tells you what a "0" is and the second part + * tells you what a "1" is. That means "0" is 833 on, 833 off while an "1" is 833 on + * followed by 833*3=2499 off. The section in parentheses tells you what data gets sent. + * The protocol begins with header consisting of 4*833 on and 4*833 off. The other items + * describe what the remaining data bits are. + * It reads as 5 device bits followed by 6 function bits. You then repeat those bits complemented. + * It concludes with a single "1" bit followed by and an undetermined amount of blank space. + * This makes the entire protocol 5+6+5+6= 22 bits long since we don't encode the stop bit. + * The "+" at the end means you only need to send it once and it can repeat as many times as you want. + */ +bool IRdecodePanasonic_Old::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("Panasonic_Old")); + if(!decodeGeneric(48,833*4,833*4,0,833,833*3,833)) return false; + /* + * The protocol spec says that the first 11 bits described the device and function. + * The next 11 bits are the same thing only it is the logical Bitwise complement. + * Many protocols have such check features in their definition but our code typically doesn't + * perform these checks. For example NEC's least significant 8 bits are the complement of + * of the next more significant 8 bits. While it's probably not necessary to error check this, + * here is some sample code to show you how. + */ + long S1= (value & 0x0007ff); // 00 0000 0000 0111 1111 1111 //00000 000000 11111 111111 + long S2= (value & 0x3ff800)>> 11; // 11 1111 1111 1000 0000 0000 //11111 111111 00000 000000 + S2= (~S2) & 0x0007ff; + if (S1!=S2) return IRLIB_REJECTION_MESSAGE(F("inverted bit redundancy")); + // Success + decode_type = PANASONIC_OLD; + return true; +} + +bool IRdecodeNECx::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("NECx")); + if(!decodeGeneric(68,564*8,564*8,0,564,564*3,564)) return false; + decode_type = NECX; + return true; +} + +// JVC does not send any header if there is a repeat. +bool IRdecodeJVC::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("JVC")); + if(!decodeGeneric(36,525*16,525*8,0,525,525*3,525)) + { + IRLIB_ATTEMPT_MESSAGE(F("JVC Repeat")); + if (rawlen==34) + { + if(!decodeGeneric(0,525,0,0,525,525*3,525)) + {return IRLIB_REJECTION_MESSAGE(F("JVC repeat failed generic"));} + else { + //If this is a repeat code then IRdecodeBase::decode fails to add the most significant bit + if (MATCH(rawbuf[4],(525*3))) + { + value |= 0x8000; + } + else + { + if (!MATCH(rawbuf[4],525)) return DATA_SPACE_ERROR(525); + } + } + bits++; + } + else return RAW_COUNT_ERROR; + } + decode_type =JVC; + return true; +} + +/* + * The remaining protocols from the original IRremote library require special handling + * This routine gets one undecoded level at a time from the raw buffer. + * The RC5/6 decoding is easier if the data is broken into time intervals. + * E.g. if the buffer has MARK for 2 time intervals and SPACE for 1, + * successive calls to getRClevel will return MARK, MARK, SPACE. + * offset and used are updated to keep track of the current position. + * t1 is the time interval for a single bit in microseconds. + * Returns ERROR if the measured time interval is not a multiple of t1. + */ +IRdecodeRC::RCLevel IRdecodeRC::getRClevel(unsigned char *used, const unsigned int t1) { + if (offset >= rawlen) { + // After end of recorded buffer, assume SPACE. + return SPACE; + } + unsigned int width = rawbuf[offset]; + IRdecodeRC::RCLevel val; + if ((offset) % 2) val=MARK; else val=SPACE; + + unsigned char avail; + if (MATCH(width, t1)) { + avail = 1; + } + else if (MATCH(width, 2*t1)) { + avail = 2; + } + else if (MATCH(width, 3*t1)) { + avail = 3; + } + else { + return ERROR; + } + (*used)++; + if (*used >= avail) { + *used = 0; + (offset)++; + } + return val; +} + +#define MIN_RC5_SAMPLES 11 +#define MIN_RC6_SAMPLES 1 + +bool IRdecodeRC5::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("RC5")); + if (rawlen < MIN_RC5_SAMPLES + 2) return RAW_COUNT_ERROR; + offset = 1; // Skip gap space + data = 0; + used = 0; + // Get start bits + if (getRClevel(&used, RC5_T1) != MARK) return HEADER_MARK_ERROR(RC5_T1); +//Note: Original IRremote library incorrectly assumed second bit was always a "1" +//bit patterns from this decoder are not backward compatible with patterns produced +//by original library. Uncomment the following two lines to maintain backward compatibility. + //if (getRClevel(&used, RC5_T1) != SPACE) return HEADER_SPACE_ERROR(RC5_T1); + //if (getRClevel(&used, RC5_T1) != MARK) return HEADER_MARK_ERROR(RC5_T1); + for (nbits = 0; offset < rawlen; nbits++) { + RCLevel levelA = getRClevel(&used, RC5_T1); + RCLevel levelB = getRClevel(&used, RC5_T1); + if (levelA == SPACE && levelB == MARK) { + // 1 bit + data = (data << 1) | 1; + } + else if (levelA == MARK && levelB == SPACE) { + // zero bit + data <<= 1; + } + else return DATA_MARK_ERROR(RC5_T1); + } + // Success + bits = 13; + value = data; + decode_type = RC5; + return true; +} + +bool IRdecodeRC6::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("RC6")); + if (rawlen < MIN_RC6_SAMPLES) return RAW_COUNT_ERROR; + // Initial mark + if (!MATCH(rawbuf[1], RC6_HDR_MARK)) return HEADER_MARK_ERROR(RC6_HDR_MARK); + if (!MATCH(rawbuf[2], RC6_HDR_SPACE)) return HEADER_SPACE_ERROR(RC6_HDR_SPACE); + offset=3;//Skip gap and header + data = 0; + used = 0; + // Get start bit (1) + if (getRClevel(&used, RC6_T1) != MARK) return DATA_MARK_ERROR(RC6_T1); + if (getRClevel(&used, RC6_T1) != SPACE) return DATA_SPACE_ERROR(RC6_T1); + for (nbits = 0; offset < rawlen; nbits++) { + RCLevel levelA, levelB; // Next two levels + levelA = getRClevel(&used, RC6_T1); + if (nbits == 3) { + // T bit is double wide; make sure second half matches + if (levelA != getRClevel(&used, RC6_T1)) return TRAILER_BIT_ERROR(RC6_T1); + } + levelB = getRClevel(&used, RC6_T1); + if (nbits == 3) { + // T bit is double wide; make sure second half matches + if (levelB != getRClevel(&used, RC6_T1)) return TRAILER_BIT_ERROR(RC6_T1); + } + if (levelA == MARK && levelB == SPACE) { // reversed compared to RC5 + // 1 bit + data = (data << 1) | 1; + } + else if (levelA == SPACE && levelB == MARK) { + // zero bit + data <<= 1; + } + else { + return DATA_MARK_ERROR(RC6_T1); + } + } + // Success + bits = nbits; + value = data; + decode_type = RC6; + return true; +} + +/* + * This Hash decoder is based on IRhashcode + * Copyright 2010 Ken Shirriff + * For details see http://www.righto.com/2010/01/using-arbitrary-remotes-with-arduino.html + * Use FNV hash algorithm: http://isthe.com/chongo/tech/comp/fnv/#FNV-param + * Converts the raw code values into a 32-bit hash code. + * Hopefully this code is unique for each button. + */ +#define FNV_PRIME_32 16777619 +#define FNV_BASIS_32 2166136261 +// Compare two tick values, returning 0 if newval is shorter, +// 1 if newval is equal, and 2 if newval is longer +int IRdecodeHash::compare(unsigned int oldval, unsigned int newval) { + if (newval < oldval * .8) return 0; + if (oldval < newval * .8) return 2; + return 1; +} + +bool IRdecodeHash::decode(void) { + hash = FNV_BASIS_32; + for (int i = 1; i+2 < rawlen; i++) { + hash = (hash * FNV_PRIME_32) ^ compare(rawbuf[i], rawbuf[i+2]); + } +//note: does not set decode_type=HASH_CODE nor "value" because you might not want to. + return true; +} + +/* We have created a new receiver base class so that we can use its code to implement + * additional receiver classes in addition to the original IRremote code which used + * 50us interrupt sampling of the input pin. See IRrecvLoop and IRrecvPCI classes + * below. IRrecv is the original receiver class with the 50us sampling. + */ +IRrecvBase::IRrecvBase(unsigned char recvpin) +{ + irparams.recvpin = recvpin; + Init(); +} +void IRrecvBase::Init(void) { + irparams.blinkflag = 0; + Mark_Excess=100; +} + +unsigned char IRrecvBase::getPinNum(void){ + return irparams.recvpin; +} + +/* Any receiver class must implement a GetResults method that will return true when a complete code + * has been received. At a successful end of your GetResults code you should then call IRrecvBase::GetResults + * and it will copy the data from the receiver structures into your decoder. Some receivers + * provide results in rawbuf measured in ticks on some number of microseconds while others + * return results in actual microseconds. If you use ticks then you should pass a multiplier + * value in Time_per_Ticks. + */ +bool IRrecvBase::GetResults(IRdecodeBase *decoder, const unsigned int Time_per_Tick) { + decoder->Reset();//clear out any old values. + decoder->rawlen = irparams.rawlen; +/* Typically IR receivers over-report the length of a mark and under-report the length of a space. + * This routine adjusts for that by subtracting Mark_Excess from recorded marks and + * deleting it from a recorded spaces. The amount of adjustment used to be defined in IRLibMatch.h. + * It is now user adjustable with the old default of 100; + * By copying the the values from irparams to decoder we can call IRrecvBase::resume + * immediately while decoding is still in progress. + */ + for(unsigned char i=0; irawbuf[i]=irparams.rawbuf[i]*Time_per_Tick + ( (i % 2)? -Mark_Excess:Mark_Excess); + } + return true; +} + +void IRrecvBase::enableIRIn(void) { + pinMode(irparams.recvpin, INPUT); + resume(); +} + +void IRrecvBase::resume() { + irparams.rawlen = 0; +} + +/* This receiver uses no interrupts or timers. Other interrupt driven receivers + * allow you to do other things and call GetResults at your leisure to see if perhaps + * a sequence has been received. Typically you would put GetResults in your loop + * and it would return false until the sequence had been received. However because this + * receiver uses no interrupts, it takes control of your program when you call GetResults + * and doesn't let go until it's got something to show you. The advantage is you don't need + * interrupts which would make it easier to use and nonstandard hardware and will allow you to + * use any digital input pin. Timing of this routine is only as accurate as your "micros();" + */ +bool IRrecvLoop::GetResults(IRdecodeBase *decoder) { + bool Finished=false; + byte OldState=HIGH;byte NewState; + unsigned long StartTime, DeltaTime, EndTime; + StartTime=micros(); + while(irparams.rawlen 10000) { //If it's a very long wait + if(Finished=irparams.rawlen) break; //finished unless it's the opening gap + } + } + if(Finished) break; + do_Blink(); + irparams.rawbuf[irparams.rawlen++]=DeltaTime; + OldState=NewState;StartTime=EndTime; + }; + IRrecvBase::GetResults(decoder); + return true; +} + +/* This receiver uses the pin change hardware interrupt to detect when your input pin + * changes state. It gives more detailed results than the 50µs interrupts of IRrecv + * and theoretically is more accurate than IRrecvLoop. However because it only detects + * pin changes, it doesn't always know when it's finished. GetResults attempts to detect + * a long gap of space but sometimes the next signal gets there before GetResults notices. + * This means the second set of signals can get messed up unless there is a long gap. + * This receiver is based in part on Arduino firmware for use with AnalysIR IR signal analysis + * software for Windows PCs. Many thanks to the people at http://analysir.com for their + * assistance in developing this section of code. + */ + +IRrecvPCI::IRrecvPCI(unsigned char inum) { + Init(); + switch(intrnum=inum) { +#if defined(__AVR_ATmega32U4__) //Assume Arduino Leonardo + case 0: irparams.recvpin=3; break; + case 1: irparams.recvpin=2; break; + case 2: irparams.recvpin=0; break; + case 3: irparams.recvpin=1; break; + case 4: irparams.recvpin=7; break; +#else //Arduino Uno or Mega + case 0: irparams.recvpin=2; break; + case 1: irparams.recvpin=3; break; + #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)//Mega only + case 2: irparams.recvpin=21; break; + case 3: irparams.recvpin=20; break; + case 4: irparams.recvpin=19; break; + case 5: irparams.recvpin=18; break; + #endif +#endif + //Illegal vaalue to flag you that something is wrong + default: irparams.recvpin=255; + } +} +void IRrecvPCI_Handler(){ + unsigned long volatile ChangeTime=micros(); + unsigned long DeltaTime=ChangeTime-irparams.timer; + switch(irparams.rcvstate) { + case STATE_STOP: return; + case STATE_RUNNING: + do_Blink(); + if (DeltaTime>10000) { + irparams.rcvstate=STATE_STOP; + //Setting gap to 0 is a flag to let you know why we stopped For debugging purposes + //irparams.rawbuf[0]=0; + return; + }; + break; + case STATE_IDLE: + if(digitalRead(irparams.recvpin)) return; else irparams.rcvstate=STATE_RUNNING; + break; + }; + irparams.rawbuf[irparams.rawlen]=DeltaTime; + irparams.timer=ChangeTime; + if(++irparams.rawlen>=RAWBUF) { + irparams.rcvstate=STATE_STOP; + //Setting gap to 1 is a flag to let you know why we stopped For debugging purposes + //irparams.rawbuf[0]=1; + } +} + +void IRrecvPCI::resume(void) { + irparams.rcvstate = STATE_IDLE; + IRrecvBase::resume(); + irparams.timer=micros(); + attachInterrupt(intrnum, IRrecvPCI_Handler, CHANGE); +}; + +bool IRrecvPCI::GetResults(IRdecodeBase *decoder) { + if(irparams.rcvstate==STATE_RUNNING) { + unsigned long ChangeTime=irparams.timer; + if( (micros()-ChangeTime) > 10000) { + irparams.rcvstate=STATE_STOP; + //Setting gap to 2 is a flag to let you know why we stopped For debugging purposes + //irparams.rawbuf[0]=2; + } + } + if (irparams.rcvstate != STATE_STOP) return false; + detachInterrupt(intrnum); + IRrecvBase::GetResults(decoder); + return true; +}; + + + + + +/* + * The remainder of this file is all related to interrupt handling and hardware issues. It has + * nothing to do with IR protocols. You need not understand this is all you're doing is adding + * new protocols or improving the receiving, decoding and sending of protocols. + */ +// Provides ISR +#include +// defines for setting and clearing register bits +#ifndef cbi +#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) +#endif +#ifndef sbi +#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) +#endif +#define CLKFUDGE 5 // fudge factor for clock interrupt overhead +#ifdef F_CPU +#define SYSCLOCK F_CPU // main Arduino clock +#else +#define SYSCLOCK 16000000 // main Arduino clock +#endif +#define PRESCALE 8 // timer clock prescale +#define CLKSPERUSEC (SYSCLOCK/PRESCALE/1000000) // timer clocks per microsecond + +#include + +/* + * This section contains the hardware specific portions of IRrecvBase + */ +/* If your hardware is set up to do both output and input but your particular sketch + * doesn't do any output, this method will ensure that your output pin is low + * and doesn't turn on your IR LED or any output circuit. + */ +void IRrecvBase::No_Output (void) { + pinMode(TIMER_PWM_PIN, OUTPUT); + digitalWrite(TIMER_PWM_PIN, LOW); // When not sending PWM, we want it low +} + +// enable/disable blinking of pin 13 on IR processing +void IRrecvBase::blink13(bool blinkflag) +{ + irparams.blinkflag = blinkflag; + if (blinkflag) + pinMode(BLINKLED, OUTPUT); +} + +//Do the actual blinking off and on +//This is not part of IRrecvBase because it may need to be inside an ISR +//and we cannot pass parameters to them. +void do_Blink(void) { + if (irparams.blinkflag) { + if(irparams.rawlen % 2) { + BLINKLED_ON(); // turn pin 13 LED on + } + else { + BLINKLED_OFF(); // turn pin 13 LED off + } + } +} + +/* + * The original IRrecv which uses 50µs timer driven interrupts to sample input pin. + */ +void IRrecv::resume() { + // initialize state machine variables + irparams.rcvstate = STATE_IDLE; + IRrecvBase::resume(); +} + +void IRrecv::enableIRIn(void) { + IRrecvBase::enableIRIn(); + // setup pulse clock timer interrupt + cli(); + TIMER_CONFIG_NORMAL(); + TIMER_ENABLE_INTR; + TIMER_RESET; + sei(); +} + +bool IRrecv::GetResults(IRdecodeBase *decoder) { + if (irparams.rcvstate != STATE_STOP) return false; + IRrecvBase::GetResults(decoder,USECPERTICK); + return true; +} + +#define _GAP 5000 // Minimum map between transmissions +#define GAP_TICKS (_GAP/USECPERTICK) +/* + * This interrupt service routine is only used by IRrecv and may or may not be used by other + * extensions of the IRrecBase. It is timer driven interrupt code to collect raw data. + * Widths of alternating SPACE, MARK are recorded in rawbuf. Recorded in ticks of 50 microseconds. + * rawlen counts the number of entries recorded so far. First entry is the SPACE between transmissions. + * As soon as a SPACE gets long, ready is set, state switches to IDLE, timing of SPACE continues. + * As soon as first MARK arrives, gap width is recorded, ready is cleared, and new logging starts. + */ +ISR(TIMER_INTR_NAME) +{ + TIMER_RESET; + enum irdata_t {IR_MARK=0, IR_SPACE=1}; + irdata_t irdata = (irdata_t)digitalRead(irparams.recvpin); + irparams.timer++; // One more 50us tick + if (irparams.rawlen >= RAWBUF) { + // Buffer overflow + irparams.rcvstate = STATE_STOP; + } + switch(irparams.rcvstate) { + case STATE_IDLE: // In the middle of a gap + if (irdata == IR_MARK) { + if (irparams.timer < GAP_TICKS) { + // Not big enough to be a gap. + irparams.timer = 0; + } + else { + // gap just ended, record duration and start recording transmission + irparams.rawlen = 0; + irparams.rawbuf[irparams.rawlen++] = irparams.timer; + irparams.timer = 0; + irparams.rcvstate = STATE_MARK; + } + } + break; + case STATE_MARK: // timing MARK + if (irdata == IR_SPACE) { // MARK ended, record time + irparams.rawbuf[irparams.rawlen++] = irparams.timer; + irparams.timer = 0; + irparams.rcvstate = STATE_SPACE; + } + break; + case STATE_SPACE: // timing SPACE + if (irdata == IR_MARK) { // SPACE just ended, record it + irparams.rawbuf[irparams.rawlen++] = irparams.timer; + irparams.timer = 0; + irparams.rcvstate = STATE_MARK; + } + else { // SPACE + if (irparams.timer > GAP_TICKS) { + // big SPACE, indicates gap between codes + // Mark current code as ready for processing + // Switch to STOP + // Don't reset timer; keep counting space width + irparams.rcvstate = STATE_STOP; + } + } + break; + case STATE_STOP: // waiting, measuring gap + if (irdata == IR_MARK) { // reset gap timer + irparams.timer = 0; + } + break; + } + do_Blink(); +} + +/* + * The hardware specific portions of IRsendBase + */ +void IRsendBase::enableIROut(unsigned char khz) { +//NOTE: the comments on this routine accompanied the original early version of IRremote library +//which only used TIMER2. The parameters defined in IRLibTimer.h may or may not work this way. + // Enables IR output. The khz value controls the modulation frequency in kilohertz. + // The IR output will be on pin 3 (OC2B). + // This routine is designed for 36-40KHz; if you use it for other values, it's up to you + // to make sure it gives reasonable results. (Watch out for overflow / underflow / rounding.) + // TIMER2 is used in phase-correct PWM mode, with OCR2A controlling the frequency and OCR2B + // controlling the duty cycle. + // There is no prescaling, so the output frequency is 16MHz / (2 * OCR2A) + // To turn the output on and off, we leave the PWM running, but connect and disconnect the output pin. + // A few hours staring at the ATmega documentation and this will all make sense. + // See my Secrets of Arduino PWM at http://www.righto.com/2009/07/secrets-of-arduino-pwm.html for details. + + // Disable the Timer2 Interrupt (which is used for receiving IR) + TIMER_DISABLE_INTR; //Timer2 Overflow Interrupt + pinMode(TIMER_PWM_PIN, OUTPUT); + digitalWrite(TIMER_PWM_PIN, LOW); // When not sending PWM, we want it low + TIMER_CONFIG_KHZ(khz); + } + +IRsendBase::IRsendBase () { + pinMode(TIMER_PWM_PIN, OUTPUT); + digitalWrite(TIMER_PWM_PIN, LOW); // When not sending PWM, we want it low +} + +//The Arduino built in function delayMicroseconds has limits we wish to exceed +//Therefore we have created this alternative +void My_delay_uSecs(unsigned int T) { + if(T){if(T>16000) {delayMicroseconds(T % 1000); delay(T/1000); } else delayMicroseconds(T);}; +} + +void IRsendBase::mark(unsigned int time) { + TIMER_ENABLE_PWM; + My_delay_uSecs(time); + Extent+=time; +} + +void IRsendBase::space(unsigned int time) { + TIMER_DISABLE_PWM; + My_delay_uSecs(time); + Extent+=time; +} + +/* + * Various debugging routines + */ + + +#ifdef IRLIB_TRACE +void IRLIB_ATTEMPT_MESSAGE(const __FlashStringHelper * s) {Serial.print(F("Attempting ")); Serial.print(s); Serial.println(F(" decode:"));}; +void IRLIB_TRACE_MESSAGE(const __FlashStringHelper * s) {Serial.print(F("Executing ")); Serial.println(s);}; +byte IRLIB_REJECTION_MESSAGE(const __FlashStringHelper * s) { Serial.print(F(" Protocol failed because ")); Serial.print(s); Serial.println(F(" wrong.")); return false;}; +byte IRLIB_DATA_ERROR_MESSAGE(const __FlashStringHelper * s, unsigned char index, unsigned int value, unsigned int expected) { + IRLIB_REJECTION_MESSAGE(s); Serial.print(F("Error occurred with rawbuf[")); Serial.print(index,DEC); Serial.print(F("]=")); Serial.print(value,DEC); + Serial.print(F(" expected:")); Serial.println(expected,DEC); return false; +}; +#endif diff --git a/libraries/IRLib/IRLib.h b/libraries/IRLib/IRLib.h new file mode 100644 index 0000000..c8e6c38 --- /dev/null +++ b/libraries/IRLib/IRLib.h @@ -0,0 +1,323 @@ +/* IRLib.h from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * + * This library is a major rewrite of IRemote by Ken Shirriff which was covered by + * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. + * That same license applies to this modified version. See his original copyright below. + * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote + * My purpose was to reorganize the code to make it easier to add or remove protocols. + * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them + * by making them separate classes. That way the receiving aspect can be more black box and implementers + * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative + * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. + * Also added provisions to make the classes base classes that could be extended with new protocols + * which would not require recompiling of the original library nor understanding of its detailed contents. + * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. + * Some changes were just my weird programming style. Also extended debugging information added. + */ +/* + * IRremote + * Version 0.1 July, 2009 + * Copyright 2009 Ken Shirriff + * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ + * + * Interrupt code based on NECIRrcv by Joe Knapp + * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 + * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ + */ + +#ifndef IRLib_h +#define IRLib_h +#include + +// The following are compile-time library options. +// If you change them, recompile the library. +// If IRLIB_TRACE is defined, some debugging information about the decode will be printed +// IRLIB_TEST must be defined for the IRtest unittests to work. It will make some +// methods virtual, which will be slightly slower, which is why it is optional. +// #define IRLIB_TRACE +// #define IRLIB_TEST + +// Only used for testing; can remove virtual for shorter code +#ifdef IRLIB_TEST +#define VIRTUAL virtual +#else +#define VIRTUAL +#endif + +#define RAWBUF 100 // Length of raw duration buffer (cannot exceed 255) + +typedef char IRTYPES; //formerly was an enum +#define UNKNOWN 0 +#define NEC 1 +#define SONY 2 +#define RC5 3 +#define RC6 4 +#define PANASONIC_OLD 5 +#define JVC 6 +#define NECX 7 +//#define ADDITIONAL (number) //make additional protocol 8 and change HASH_CODE to 9 +#define HASH_CODE 8 +#define LAST_PROTOCOL HASH_CODE + +const __FlashStringHelper *Pnames(IRTYPES Type); //Returns a character string that is name of protocol. + +// Base class for decoding raw results +class IRdecodeBase +{ +public: + IRdecodeBase(void); + IRTYPES decode_type; // NEC, SONY, RC5, UNKNOWN etc. + unsigned long value; // Decoded value + unsigned char bits; // Number of bits in decoded value + volatile unsigned int *rawbuf; // Raw intervals in microseconds + unsigned char rawlen; // Number of records in rawbuf. + virtual void Reset(void); // Initializes the decoder + virtual bool decode(void); // This base routine always returns false override with your routine + bool decodeGeneric(unsigned char Raw_Count, unsigned int Head_Mark, unsigned int Head_Space, + unsigned int Mark_One, unsigned int Mark_Zero, unsigned int Space_One, unsigned int Space_Zero); + virtual void DumpResults (void); + void UseExtnBuf(void *P); //Normally uses same rawbuf as IRrecv. Use this to define your own buffer. + void copyBuf (IRdecodeBase *source);//copies rawbuf and rawlen from one decoder to another +protected: + unsigned char offset; // Index into rawbuf used various places +}; + +class IRdecodeHash: public virtual IRdecodeBase +{ +public: + unsigned long hash; + virtual bool decode(void);//made virtual in case you want to substitute your own hash code +protected: + int compare(unsigned int oldval, unsigned int newval);//used by decodeHash +}; + + +class IRdecodeNEC: public virtual IRdecodeBase +{ +public: + virtual bool decode(void); +}; + +class IRdecodeSony: public virtual IRdecodeBase +{ +public: + virtual bool decode(void); +}; + +class IRdecodeRC: public virtual IRdecodeBase +{ +public: + enum RCLevel {MARK, SPACE, ERROR};//used by decoders for RC5/RC6 + // These are called by decode + RCLevel getRClevel(unsigned char *used, const unsigned int t1); +protected: + unsigned char nbits; + unsigned char used; + long data; +}; + +class IRdecodeRC5: public virtual IRdecodeRC +{ +public: + virtual bool decode(void); +}; + +class IRdecodeRC6: public virtual IRdecodeRC +{ +public: + virtual bool decode(void); +}; + +class IRdecodePanasonic_Old: public virtual IRdecodeBase +{ +public: + virtual bool decode(void); +}; + +class IRdecodeJVC: public virtual IRdecodeBase +{ +public: + virtual bool decode(void); +}; + +class IRdecodeNECx: public virtual IRdecodeBase +{ +public: + virtual bool decode(void); +}; + +// main class for decoding all supported protocols +class IRdecode: +public virtual IRdecodeNEC, +public virtual IRdecodeSony, +public virtual IRdecodeRC5, +public virtual IRdecodeRC6, +public virtual IRdecodePanasonic_Old, +public virtual IRdecodeJVC, +public virtual IRdecodeNECx +// , public virtual IRdecodeADDITIONAL //add additional protocols here +{ +public: + virtual bool decode(void); // Calls each decode routine individually +}; + +//Base class for sending signals +class IRsendBase +{ +public: + IRsendBase(); + void sendGeneric(unsigned long data, unsigned char Num_Bits, unsigned int Head_Mark, unsigned int Head_Space, + unsigned int Mark_One, unsigned int Mark_Zero, unsigned int Space_One, unsigned int Space_Zero, + unsigned char kHz, bool Stop_Bits, unsigned long Max_Extent=0); +protected: + void enableIROut(unsigned char khz); + VIRTUAL void mark(unsigned int usec); + VIRTUAL void space(unsigned int usec); + unsigned long Extent; +}; + +class IRsendNEC: public virtual IRsendBase +{ +public: + void send(unsigned long data); +}; + +class IRsendSony: public virtual IRsendBase +{ +public: + void send(unsigned long data, int nbits); +}; + +class IRsendRaw: public virtual IRsendBase +{ +public: + void send(unsigned int buf[], unsigned char len, unsigned char khz); +}; + +class IRsendRC5: public virtual IRsendBase +{ +public: + void send(unsigned long data); +}; + +class IRsendRC6: public virtual IRsendBase +{ +public: + void send(unsigned long data, unsigned char nbits); +}; + +class IRsendPanasonic_Old: public virtual IRsendBase +{ +public: + void send(unsigned long data); +}; + +class IRsendJVC: public virtual IRsendBase +{ +public: + void send(unsigned long data, bool First); +}; + +class IRsendNECx: public virtual IRsendBase +{ +public: + void send(unsigned long data); +}; + +class IRsend: +public virtual IRsendNEC, +public virtual IRsendSony, +public virtual IRsendRaw, +public virtual IRsendRC5, +public virtual IRsendRC6, +public virtual IRsendPanasonic_Old, +public virtual IRsendJVC, +public virtual IRsendNECx +// , public virtual IRsendADDITIONAL //add additional protocols here +{ +public: + void send(IRTYPES Type, unsigned long data, unsigned int data2); +}; + +// Changed this to a base class so it can be extended +class IRrecvBase +{ +public: + IRrecvBase(void) {}; + IRrecvBase(unsigned char recvpin); + void No_Output(void); + void blink13(bool blinkflag); + bool GetResults(IRdecodeBase *decoder, const unsigned int Time_per_Ticks=1); + void enableIRIn(void); + virtual void resume(void); + unsigned char getPinNum(void); + unsigned char Mark_Excess; +protected: + void Init(void); +}; + +/* Original IRrecv class uses 50µs interrupts to sample input. While this is generally + * accurate enough for everyday purposes, it may be difficult to port to other + * hardware unless you know a lot about hardware timers and interrupts. Also + * when trying to analyze unknown protocols, the 50µs granularity may not be sufficient. + * In that case use either the IRrecvLoop or the IRrecvPCI class. + */ +class IRrecv: public IRrecvBase +{ +public: + IRrecv(unsigned char recvpin):IRrecvBase(recvpin){}; + bool GetResults(IRdecodeBase *decoder); + void enableIRIn(void); + void resume(void); +}; +/* This receiver uses no interrupts or timers. Other interrupt driven receivers + * allow you to do other things and call GetResults at your leisure to see if perhaps + * a sequence has been received. Typically you would put GetResults in your loop + * and it would return false until the sequence had been received. However because this + * receiver uses no interrupts, it takes control of your program when you call GetResults + * and doesn't let go until it's got something to show you. The advantage is you don't need + * interrupts which would make it easier to use and nonstandard hardware and will allow you to + * use any digital input pin. Timing of this routine is only as accurate as your "micros();" + */ +class IRrecvLoop: public IRrecvBase +{ +public: + IRrecvLoop(unsigned char recvpin):IRrecvBase(recvpin){}; + bool GetResults(IRdecodeBase *decoder); +}; + +/* This receiver uses the pin change hardware interrupt to detect when your input pin + * changes state. It gives more detailed results than the 50µs interrupts of IRrecv + * and theoretically is more accurate than IRrecvLoop. However because it only detects + * pin changes, it doesn't always know when it's finished. GetResults attempts to detect + * a long gap of space but sometimes the next signal gets there before GetResults notices. + * This means the second set of signals can get messed up unless there is a long gap. + * This receiver is based in part on Arduino firmware for use with AnalysIR IR signal analysis + * software for Windows PCs. Many thanks to the people at http://analysir.com for their + * assistance in developing this section of code. + */ +class IRrecvPCI: public IRrecvBase +{ +public: + //Note this is interrupt number not pin number + IRrecvPCI(unsigned char inum); + bool GetResults(IRdecodeBase *decoder); + void resume(void); +private: + unsigned char intrnum; +}; + + +//Do the actual blinking off and on +//This is not part of IRrecvBase because it may need to be inside an ISR +//and we cannot pass parameters to them. +void do_Blink(void); + +// Some useful constants +// Decoded value for NEC when a repeat code is received +#define REPEAT 0xffffffff + + +#endif //IRLib_h diff --git a/libraries/IRLib/IRLibMatch.h b/libraries/IRLib/IRLibMatch.h new file mode 100644 index 0000000..ddd2cc5 --- /dev/null +++ b/libraries/IRLib/IRLibMatch.h @@ -0,0 +1,100 @@ +/* IRLibMatch.h from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * + * This library is a major rewrite of IRemote by Ken Shirriff which was covered by + * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. + * That same license applies to this modified version. See his original copyright below. + * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote + * My purpose was to reorganize the code to make it easier to add or remove protocols. + * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them + * by making them separate classes. That way the receiving aspect can be more black box and implementers + * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative + * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. + * Also added provisions to make the classes base classes that could be extended with new protocols + * which would not require recompiling of the original library nor understanding of its detailed contents. + * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. + * Some changes were just my weird programming style. Also extended debugging information added. + */ +/* + * IRremote + * Version 0.1 July, 2009 + * Copyright 2009 Ken Shirriff + * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ + * + * Interrupt code based on NECIRrcv by Joe Knapp + * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 + * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ + */ + +#ifndef IRLibMatch_h +#define IRLibMatch_h + +/* + * Originally all timing comparisons for decoding were based on a percent of the + * target value. However when target values are relatively large, the percent tolerance + * is too much. In some instances an absolute tolerance is needed. In order to maintain + * backward compatibility, the default will be to continue to use percent. If you wish to default + * to an absolute tolerance, you should comment out the line below. + */ +#define IRLIB_USE_PERCENT + +/* + * These are some miscellaneous definitions that are needed by the decoding routines. + * You need not include this file unless you are creating custom decode routines + * which will require these macros and definitions. Even if you include it, you probably + * don't need to be intimately familiar with the internal details. + */ + +#define USECPERTICK 50 // microseconds per clock interrupt tick +#define PERCENT_TOLERANCE 25 // percent tolerance in measurements +#define DEFAULT_ABS_TOLERANCE 75 //absolute tolerance in microseconds + +/* + * These revised MATCH routines allow you to use either percentage were absolute tolerances. + * Use ABS_MATCH for absolute and PERC_MATCH percentages. The original MATCH macro + * is controlled by the IRLIB_USE_PERCENT definition a few lines above. + */ + +#define PERCENT_LOW(us) (unsigned int) (((us)*(1.0 - PERCENT_TOLERANCE/100.))) +#define PERCENT_HIGH(us) (unsigned int) (((us)*(1.0 + PERCENT_TOLERANCE/100.) + 1)) + +#define ABS_MATCH(v,e,t) ((v) >= ((e)-(t)) && (v) <= ((e)+(t))) +#define PERC_MATCH(v,e) ((v) >= PERCENT_LOW(e) && (v) <= PERCENT_HIGH(e)) + +#ifdef IRLIB_USE_PERCENT +#define MATCH(v,e) PERC_MATCH(v,e) +#else +#define MATCH(v,e) ABS_MATCH(v,e,DEFAULT_ABS_TOLERANCE) +#endif + +//The following two routines are no longer necessary because mark/space adjustments are done elsewhere +//These definitions maintain backward compatibility. +#define MATCH_MARK(t,u) MATCH(t,u) +#define MATCH_SPACE(t,u) MATCH(t,u) + +#ifdef IRLIB_TRACE +void IRLIB_ATTEMPT_MESSAGE(const __FlashStringHelper * s); +void IRLIB_TRACE_MESSAGE(const __FlashStringHelper * s); +byte IRLIB_REJECTION_MESSAGE(const __FlashStringHelper * s); +byte IRLIB_DATA_ERROR_MESSAGE(const __FlashStringHelper * s, unsigned char index, unsigned int value, unsigned int expected); +#define RAW_COUNT_ERROR IRLIB_REJECTION_MESSAGE(F("number of raw samples")); +#define HEADER_MARK_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("header mark"),offset,rawbuf[offset],expected); +#define HEADER_SPACE_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("header space"),offset,rawbuf[offset],expected); +#define DATA_MARK_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("data mark"),offset,rawbuf[offset],expected); +#define DATA_SPACE_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("data space"),offset,rawbuf[offset],expected); +#define TRAILER_BIT_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("RC5/RC6 trailer bit length"),offset,rawbuf[offset],expected); +#else +#define IRLIB_ATTEMPT_MESSAGE(s) +#define IRLIB_TRACE_MESSAGE(s) +#define IRLIB_REJECTION_MESSAGE(s) false +#define IRLIB_DATA_ERROR_MESSAGE(s,i,v,e) false +#define RAW_COUNT_ERROR false +#define HEADER_MARK_ERROR(expected) false +#define HEADER_SPACE_ERROR(expected) false +#define DATA_MARK_ERROR(expected) false +#define DATA_SPACE_ERROR(expected) false +#define TRAILER_BIT_ERROR(expected) false +#endif + +#endif //IRLibMatch_h diff --git a/libraries/IRLib/IRLibRData.h b/libraries/IRLib/IRLibRData.h new file mode 100644 index 0000000..4eae0ff --- /dev/null +++ b/libraries/IRLib/IRLibRData.h @@ -0,0 +1,54 @@ +/* IRLibRData.h from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * + * This library is a major rewrite of IRemote by Ken Shirriff which was covered by + * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. + * That same license applies to this modified version. See his original copyright below. + * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote + * My purpose was to reorganize the code to make it easier to add or remove protocols. + * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them + * by making them separate classes. That way the receiving aspect can be more black box and implementers + * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative + * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. + * Also added provisions to make the classes base classes that could be extended with new protocols + * which would not require recompiling of the original library nor understanding of its detailed contents. + * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. + * Some changes were just my weird programming style. Also extended debugging information added. + */ +/* + * IRremote + * Version 0.1 July, 2009 + * Copyright 2009 Ken Shirriff + * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ + * + * Interrupt code based on NECIRrcv by Joe Knapp + * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 + * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ + */ + +#ifndef IRLibRData_h +#define IRLibRData_h + +/* + * The structure contains a variety of variables needed by the receiver routines. + * Typically this data would be part of the IRrecv class however the interrupt service routine + * must have access to it and you cannot pass a parameter to such a routine. The data must be global. + * You need not include this file unless you are creating a custom receiver class or extending + * the provided IRrecv class. + */ + +// receiver states +enum rcvstate_t {STATE_UNKNOWN, STATE_IDLE, STATE_MARK, STATE_SPACE, STATE_STOP, STATE_RUNNING}; +// information for the interrupt handler +typedef struct { + unsigned char recvpin; // pin for IR data from detector + rcvstate_t rcvstate; // state machine + bool blinkflag; // TRUE to enable blinking of pin 13 on IR processing + unsigned long timer; // state timer, counts 50uS ticks.(and other uses) + unsigned int rawbuf[RAWBUF]; // raw data + unsigned char rawlen; // counter of entries in rawbuf +} +irparams_t; +extern volatile irparams_t irparams; +#endif diff --git a/libraries/IRremote/IRremoteInt.h b/libraries/IRLib/IRLibTimer.h similarity index 60% rename from libraries/IRremote/IRremoteInt.h rename to libraries/IRLib/IRLibTimer.h index 5017d9a..9079ae0 100644 --- a/libraries/IRremote/IRremoteInt.h +++ b/libraries/IRLib/IRLibTimer.h @@ -1,33 +1,48 @@ +/* IRLibTimer.h from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * + * This library is a major rewrite of IRemote by Ken Shirriff which was covered by + * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. + * That same license applies to this modified version. See his original copyright below. + * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote + * My purpose was to reorganize the code to make it easier to add or remove protocols. + * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them + * by making them separate classes. That way the receiving aspect can be more black box and implementers + * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative + * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. + * Also added provisions to make the classes base classes that could be extended with new protocols + * which would not require recompiling of the original library nor understanding of its detailed contents. + * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. + * Some changes were just my weird programming style. Also extended debugging information added. + */ /* * IRremote * Version 0.1 July, 2009 * Copyright 2009 Ken Shirriff - * For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html - * - * Modified by Paul Stoffregen to support other boards and timers + * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ * * Interrupt code based on NECIRrcv by Joe Knapp * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - * - * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post) */ - -#ifndef IRremoteint_h -#define IRremoteint_h +/* This file defines which timer you wish to use. Different versions of Arduino and related boards + * have different timers available to them. For various reasons you might want to use something other than + * timer 2. Some boards do not have timer 2. This attempts to detect which type of board you are using. + * You need uncomment wish to use on your board. You probably will not need to include this in your + * program unless you want to see which timer is being used and which board has been detected. + * This information came from an alternative fork of the original Ken Shirriff library found here + * https://github.com/TKJElectronics/Arduino-IRremote + */ +#ifndef IRLibTimer_h +#define IRLibTimer_h #if defined(ARDUINO) && ARDUINO >= 100 -#include +#include "Arduino.h" #else -#include +#include "WProgram.h" #endif -// define which timer to use -// -// Uncomment the timer you wish to use on your board. If you -// are using another library which uses timer2, you have options -// to switch IRremote to use a different timer. - // Arduino Mega #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //#define IR_USE_TIMER1 // tx = pin 11 @@ -40,11 +55,20 @@ #elif defined(__AVR_AT90USB162__) #define IR_USE_TIMER1 // tx = pin 17 -// Teensy 2.0 +// Teensy 2.0 versus Leonardo +// These boards use the same chip but the pinouts are different. #elif defined(__AVR_ATmega32U4__) +#ifdef CORE_TEENSY + // it's Teensy 2.0 //#define IR_USE_TIMER1 // tx = pin 14 //#define IR_USE_TIMER3 // tx = pin 9 #define IR_USE_TIMER4_HS // tx = pin 10 +#else + // it's probably Leonardo + #define IR_USE_TIMER1 // tx = pin 9 + //#define IR_USE_TIMER3 // tx = pin 5 + //#define IR_USE_TIMER4_HS // tx = pin 13 +#endif // Teensy++ 1.0 & 2.0 #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) @@ -56,14 +80,7 @@ #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) //#define IR_USE_TIMER1 // tx = pin 13 #define IR_USE_TIMER2 // tx = pin 14 - -// Atmega8 -#elif defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__) - #define IR_USE_TIMER1 // tx = pin 9 - -#elif defined( __AVR_ATtinyX4__ ) - #define IR_USE_TIMER1 // tx = pin 6 - + // Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc #else //#define IR_USE_TIMER1 // tx = pin 9 @@ -72,152 +89,6 @@ -#ifdef F_CPU -#define SYSCLOCK F_CPU // main Arduino clock -#else -#define SYSCLOCK 16000000 // main Arduino clock -#endif - -#define ERR 0 -#define DECODED 1 - - -// defines for setting and clearing register bits -#ifndef cbi -#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) -#endif -#ifndef sbi -#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) -#endif - -// Pulse parms are *50-100 for the Mark and *50+100 for the space -// First MARK is the one after the long gap -// pulse parameters in usec -#define NEC_HDR_MARK 9000 -#define NEC_HDR_SPACE 4500 -#define NEC_BIT_MARK 560 -#define NEC_ONE_SPACE 1692 -#define NEC_ZERO_SPACE 560 -#define NEC_RPT_SPACE 2250 - -#define SONY_HDR_MARK 2400 -#define SONY_HDR_SPACE 600 -#define SONY_ONE_MARK 1200 -#define SONY_ZERO_MARK 600 -#define SONY_RPT_LENGTH 45000 -#define SONY_DOUBLE_SPACE_USECS 500 // usually ssee 713 - not using ticks as get number wrapround - -// SA 8650B -#define SANYO_HDR_MARK 3500 // seen range 3500 -#define SANYO_HDR_SPACE 950 // seen 950 -#define SANYO_ONE_MARK 2400 // seen 2400 -#define SANYO_ZERO_MARK 700 // seen 700 -#define SANYO_DOUBLE_SPACE_USECS 800 // usually ssee 713 - not using ticks as get number wrapround -#define SANYO_RPT_LENGTH 45000 - -// Mitsubishi RM 75501 -// 14200 7 41 7 42 7 42 7 17 7 17 7 18 7 41 7 18 7 17 7 17 7 18 7 41 8 17 7 17 7 18 7 17 7 - -// #define MITSUBISHI_HDR_MARK 250 // seen range 3500 -#define MITSUBISHI_HDR_SPACE 350 // 7*50+100 -#define MITSUBISHI_ONE_MARK 1950 // 41*50-100 -#define MITSUBISHI_ZERO_MARK 750 // 17*50-100 -// #define MITSUBISHI_DOUBLE_SPACE_USECS 800 // usually ssee 713 - not using ticks as get number wrapround -// #define MITSUBISHI_RPT_LENGTH 45000 - - -#define RC5_T1 889 -#define RC5_RPT_LENGTH 46000 - -#define RC6_HDR_MARK 2666 -#define RC6_HDR_SPACE 889 -#define RC6_T1 444 -#define RC6_RPT_LENGTH 46000 - -#define SHARP_BIT_MARK 245 -#define SHARP_ONE_SPACE 1805 -#define SHARP_ZERO_SPACE 795 -#define SHARP_GAP 600000 -#define SHARP_TOGGLE_MASK 0x3FF -#define SHARP_RPT_SPACE 3000 - -#define DISH_HDR_MARK 400 -#define DISH_HDR_SPACE 6100 -#define DISH_BIT_MARK 400 -#define DISH_ONE_SPACE 1700 -#define DISH_ZERO_SPACE 2800 -#define DISH_RPT_SPACE 6200 -#define DISH_TOP_BIT 0x8000 - -#define PANASONIC_HDR_MARK 3502 -#define PANASONIC_HDR_SPACE 1750 -#define PANASONIC_BIT_MARK 502 -#define PANASONIC_ONE_SPACE 1244 -#define PANASONIC_ZERO_SPACE 400 - -#define JVC_HDR_MARK 8000 -#define JVC_HDR_SPACE 4000 -#define JVC_BIT_MARK 600 -#define JVC_ONE_SPACE 1600 -#define JVC_ZERO_SPACE 550 -#define JVC_RPT_LENGTH 60000 - -#define SHARP_BITS 15 -#define DISH_BITS 16 - -#define TOLERANCE 25 // percent tolerance in measurements -#define LTOL (1.0 - TOLERANCE/100.) -#define UTOL (1.0 + TOLERANCE/100.) - -#define _GAP 5000 // Minimum map between transmissions -#define GAP_TICKS (_GAP/USECPERTICK) - -#define TICKS_LOW(us) (int) (((us)*LTOL/USECPERTICK)) -#define TICKS_HIGH(us) (int) (((us)*UTOL/USECPERTICK + 1)) - -#ifndef DEBUG -int MATCH(int measured, int desired) {return measured >= TICKS_LOW(desired) && measured <= TICKS_HIGH(desired);} -int MATCH_MARK(int measured_ticks, int desired_us) {return MATCH(measured_ticks, (desired_us + MARK_EXCESS));} -int MATCH_SPACE(int measured_ticks, int desired_us) {return MATCH(measured_ticks, (desired_us - MARK_EXCESS));} -// Debugging versions are in IRremote.cpp -#endif - -// receiver states -#define STATE_IDLE 2 -#define STATE_MARK 3 -#define STATE_SPACE 4 -#define STATE_STOP 5 - -// information for the interrupt handler -typedef struct { - uint8_t recvpin; // pin for IR data from detector - uint8_t rcvstate; // state machine - uint8_t blinkflag; // TRUE to enable blinking of pin 13 on IR processing - unsigned int timer; // state timer, counts 50uS ticks. - unsigned int rawbuf[RAWBUF]; // raw data - uint8_t rawlen; // counter of entries in rawbuf -} -irparams_t; - -// Defined in IRremote.cpp -extern volatile irparams_t irparams; - -// IR detector output is active low -#define MARK 0 -#define SPACE 1 - -#define TOPBIT 0x80000000 - -#define NEC_BITS 32 -#define SONY_BITS 12 -#define SANYO_BITS 12 -#define MITSUBISHI_BITS 16 -#define MIN_RC5_SAMPLES 11 -#define MIN_RC6_SAMPLES 1 -#define PANASONIC_BITS 48 -#define JVC_BITS 16 - - // defines for timer2 (8 bits) @@ -267,20 +138,9 @@ extern volatile irparams_t irparams; #define TIMER_RESET #define TIMER_ENABLE_PWM (TCCR1A |= _BV(COM1A1)) #define TIMER_DISABLE_PWM (TCCR1A &= ~(_BV(COM1A1))) -#if defined(__AVR_ATmega8P__) || defined(__AVR_ATmega8__) - #define TIMER_ENABLE_INTR (TIMSK = _BV(OCIE1A)) - #define TIMER_DISABLE_INTR (TIMSK = 0) -#else - #define TIMER_ENABLE_INTR (TIMSK1 = _BV(OCIE1A)) - #define TIMER_DISABLE_INTR (TIMSK1 = 0) -#endif - -#if defined(__AVR_ATtinyX4__) - #define TIMER_INTR_NAME TIM1_COMPA_vect -#else - #define TIMER_INTR_NAME TIMER1_COMPA_vect -#endif - +#define TIMER_ENABLE_INTR (TIMSK1 = _BV(OCIE1A)) +#define TIMER_DISABLE_INTR (TIMSK1 = 0) +#define TIMER_INTR_NAME TIMER1_COMPA_vect #define TIMER_CONFIG_KHZ(val) ({ \ const uint16_t pwmval = SYSCLOCK / 2000 / (val); \ TCCR1A = _BV(WGM11); \ @@ -300,8 +160,6 @@ extern volatile irparams_t irparams; #define TIMER_PWM_PIN 11 /* Arduino Mega */ #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) #define TIMER_PWM_PIN 13 /* Sanguino */ -#elif defined(__AVR_ATtinyX4__) -#define TIMER_PWM_PIN 6 /* ATTiny84 */ #else #define TIMER_PWM_PIN 9 /* Arduino Duemilanove, Diecimila, LilyPad, etc */ #endif @@ -332,6 +190,8 @@ extern volatile irparams_t irparams; #define TIMER_PWM_PIN CORE_OC3A_PIN /* Teensy */ #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) #define TIMER_PWM_PIN 5 /* Arduino Mega */ +#elif defined(__AVR_ATmega32U4__) +#define TIMER_PWM_PIN 5 /* Arduino Leonardo note already checked for Teensy */ #else #error "Please add OC3A pin number here\n" #endif @@ -371,7 +231,7 @@ extern volatile irparams_t irparams; #if defined(CORE_OC4A_PIN) #define TIMER_PWM_PIN CORE_OC4A_PIN /* Teensy */ #elif defined(__AVR_ATmega32U4__) -#define TIMER_PWM_PIN 13 /* Leonardo */ +#define TIMER_PWM_PIN 13 /*Leonardo*/ #else #error "Please add OC4A pin number here\n" #endif @@ -455,10 +315,16 @@ extern volatile irparams_t irparams; #define BLINKLED 0 #define BLINKLED_ON() (PORTD |= B00000001) #define BLINKLED_OFF() (PORTD &= B11111110) +#elif defined(__AVR_ATmega32U4__) && defined(IR_USE_TIMER4_HS) +//Leonardo not teensy. When using Timer4 output is on 13. Therefore disabling blink LED +//You can add an LED elsewhere if you want +#define BLINKLED 1 +#define BLINKLED_ON() (digitalWrite(BLINKLED, HIGH)) +#define BLINKLED_OFF() (digitalWrite(BLINKLED, LOW)) #else #define BLINKLED 13 #define BLINKLED_ON() (PORTB |= B00100000) #define BLINKLED_OFF() (PORTB &= B11011111) #endif -#endif +#endif //IRLibTimer_h diff --git a/libraries/IRLib/LICENSE.txt b/libraries/IRLib/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..1a3c3c42fe351519c36b037e8c49a80865e83352 GIT binary patch literal 49626 zcmcJYU6U0@lBSQ@Ud@>8e<H9 zAHTEyYS4q;UBNR?%@%6>fit0e?I*E;qU6tN&Wfs@WtWF`v2bH z_TjAl+&(;9-o0J#^Ydwaa&mZ3*L++*-96k|uH}EO;QDbiM)c1g4^I!T4zCa2A6_0_ z)O)`>e0cci@Q?M=o%-aP`s~f&QT_XCz4OuGUzR_N#NU$|{pI1O`s`KR|LpMH;pckq zX1)8Hw^ut>?qt+gHSW{;{H*T%w(j_48J~CV)H`oViYN8X&leIQ$=!PIamnSJ|6Fo7 z&ZBz&hr{!_63Nf%9>@OqLjLcU@xNQHeqLk0tj`(m6Y`;T>GkCeOmavS94(UttXg6 zTQJh=()#gY3&z9KC-rZv#T6YvSp8MWD5@XSo!=}ddR$lCD{b1MpkuAU?-tCUJE(km zAx*5YzWT-Djc@8YBr>`_JpAwFF7zP2jc~MnP*-8S9~X%nTWwDk`=iI~b8PVKg}y)5 z|M~$7%&~>G-2J5f#T(B``Vpl+*Q`G*S3FuGl6VK>Z|XiI_;$IUJ6@J_!S?F~Q;r;T zH_n(3jOo#j7Y+f_coF*}D;AFJ;-ODV4y5Cn=k@vMA!M0-gax7<$R_%Tvr)Ter3cp_ zBcCH#w8MUA@UFUzRsnyr#Xl$xfniR{TCpq`)mG7XeOIC}618uQOYMoqZ)!%FTV5Pd zVtmdx8ST7|y5rW~i-$+Wbw4dA1WAnqa3Nw}FKqa@e6Q4CX~Z4uu6MTj|5W!pE+jrG zgfhN%{Iy0TE_*z*OBBnHTscNO7J1if(;N*O65~Yeqp~)yU==j}W%*g1&=TEZ2mLbQ z{_DE$%@RY%Po^5L@xGT!9E7RiUK#D#g%#jd@jCM@Qi1s&>T^a1UEkLDa5z?fR5oIE z?nmmUZ?(cY-i<~xR$xx_)&jmFXT4ZvVBE_hbd8x{I-|jb=17^vOeiLvEm9jdZ6$1m z<(L_KysG;_1A6jG-H8WKP6p*?vX3=QW`273%Yt0S>Iwt>k;$w#N7Gk}&6qzvA?)46z&|e7Nq+umxtF{ntKKgwV1ak>2pUJG zF)l~OJjPns4eSJs)D+~rM$1|kHQcXx#tP?Zi&9(SJ3MQad9}m`@+1c~rsc;!FGxW? zs=oINjNo_UHiS*3Er~C6} zq&bTQ!E1~e7uX}w0#7PAUIs^4C(?jqGV3q(fBZyDy{app)xT68uNTQ;XJ(!)6Xbwk ztq$)a!}i)}1Fpk3uzK)f6uchlOsb&sx;j#kDIPC2>wMj-jn_-W8)fJfIp(~JFJ&26 zBP$E+(-N!6H)W|Oi=>HcE&WWK*Pqn_!Q=i+8OIkkiVg*_ZLK z+&H32<~y#TRnO~%E3qb8Gbc!fNgtKY;6f|?RG+b$AiI9QvX123#xTcrc}=sS&S`W>a;uo zqi-=w&ZIjKtGE^kE$`et=^=u;UrRw8pJOFw~`*_QY``SE70>3bCNtrcF|j!}-S$f(K5 zNuWAxfaPL$a7a8qU;NWOCVCv{*oDpQG9lYO(<$*kl~u6%%&KbYIv}g6U$2#wsfLw* zJ1a9Gj~1rSXZ54R%|2Eqc20~M^tQ4`vecYP34XJt08fn1wOQRWLKrxDb*(ddQXV=j z`x3**YR<@g^VQA@9@={FG?DVnf^bFwXXH?%B;{>s}X{;)sd z>ecFJU;4xgnKu<^vf87?hwGVADG`xaDjjbk8(lz;-GO-LWQiJLhK!`W&g(s1p&#hC zGLxT}A67*_^}=4_x_b{j`dX4v7ZDd0LNeK{Sz8+g32UC|8ZDT{V=bTfGm;pi{gCcY zukZGH3dA+pgzgpfj`CswN7~C*b8h~;;+QJlLtPnqp__*TsO?e^y4M)z|#x;ib z5aH;n&Bo}}Uibv>IVRjsq(qK)>4Y>Y_B2MCcqpUaD_dp90y*AgHpbiUp03woU>2;< zrI&AD{t+c@FEb0WsKfs$Ym-so3@nt2B$(-liEewg)seVr{FARrFb77JIx) zEGDwYTrlGb7IIe+eqCb>)M%BlVnhn#jJ3^Wc87Ic-RJ+ui~htdcED=dC&-k?XDf_s zwC({T%Vlx9)t0JOsp+f#r6kzOl$^G;hin2$!2=%e{DdrFn>hm3(WTAA{qbBB@0}cO zOnb;TYR-2<0r{0UOaByaAT8F0gJC-vzqyB)$4~YPqE{*)E8p2`$_rDsW0Z``K8XA}YL7JHQ7s;og@|UVT=(jj$&4Mg zVHBd>(+1aJTD!m9O>j-Qoy%@pI??d}*kyG^Y=S+o6u;)0tE@inHm`GCXD@1OszU5C zBHFyHZ$2wYkV31B)kH8wtjjH9O}q8so&}N}=RAr$UE7(xsq)yl;9Q8=#ghwJ0ddde zom4GKH6TB5%7my%J!>Cc8+!%zp(@MD4#cJ6RI0gOj|?y;+(E}Mn2O)XqEt=Pa&L(&Rq$DyKmDpEeGa7M^T*+Wm33NNG9AZgMD^ZK;^Ydj)dm>-~ z-#Z7@5VKw#2V;*m^}mdmb2*HN>}zz7NTh#bFVAj|evy}`5mOK9N2Ih~!{WVC43A-l zd2|>f92qaYt~=>}oK!!R^$^Sii^O|oOr@q?+1g^9V~nM{b#2=bX(D&Wl^S-{$u9Hr z3;Sa&I%%*`R-eq}iLG!{^oZ7L)Wq)j967d3n%bZ-w$DW~3%pC-nzN?18F@ao5pi8D zZ~KNp5E$RzTOU0_L~Fsd=di@Oa;E=9wP}ok17@LvVLwFnn@>m?zer3L8of74>c0Q8 z#kZVrc(QN}_aaBUv(0iw#GSeW-repPUB^uxjg>#`Q?MK=wMCPvBq&)>dIT}qa>A|=;%v}MKp zPmA_=k&1CUA5x4n&e%Pz8PNdNr;lfh!yxY;9bvMJ5UZzV+gpDir3j;k^$#_FP-NYW z-sXp9Jv_J9VT(sHUMhKGY+f;Pt!xW#AqDZqYBnn=W}WRaV~zX4QD&Xx#=Gw2-?ZpVLCljFJD?4dX!)*p3&MKiMF5+CGXdE`NT4kOax>MpQnn~0T+ zu4SYBx+g=OV%5Rwn_e#&%9ZtvdIzrJ#K7@$O*2EY28xA1+&D)2RBVp8S&yQQ`UA^o zSF(H7c-H>dmvOMStG-_Ci(wFHk2W@#=fXFQ${EcteNKyYU4%SVmR4$W?_nJ=^K8jr zt_0L(#J+fRS0HC|!}WjN>3ga%PPcGg|MNOi&OYlGhfnJNTZjA0Pj~CnyUWjfdZ&JR zc=73j!`Jo67qz;@TA$R`eDr$50Pk+7|W*0wkEcCCUeYkmO>*%dX$Q^kWbFil=1zKk8} z1S)RP=1yFY78bC#*uLEULxaigRdvlyHO#=ud0jOUb=6<4^_`f!Ug_B~iV z=1NB)J7mY(r%L2ivy1-J8m`o-C#ZweVOlgRz;Gv6=sZb21=G8 zANtdFB_Q9$GMyQ%EbI=nG|dgnzsFrL-7m}e6=r0VM4~=m1#agbp6rol9u03@B{fpe zYw^UjT_7=u?%-gyf_2~c43qk&(sWH@1qAA~0^@Gu)n`Qb#2SD&MIKfz^oO$VFUCCs z@}#cK8nrPwGCO0j3gUSX){mm%=HavY8BAlDK5>PHYdOM1sn@w9dz^Afw1xff516;l z(E6qdi3gGa;KpM$C`|gB#Rk}c41S}k0Q+TTLc9#d;M3H>GY&?U&D^q~(Tok?@MezY zAXvW<^eP#wMk2dp3J@_Q&3CD`FwL%`VT*u_GyV^po zdzGAXHe|D8^*M6VQDILzm<4fU4(9Qx7rZH2L5IGzcZdz~5c@x5l;kTco^yxjPEF$s z@zU!Wn=0m~x`&y~7Whh}M^0+(=k;!^$Eb}v?c<6N3G8B`e_yj+ug#vBbH-`SgAVLC z@V}NDBM$kAIVF0x71?pVz~W#vwIF(-u?!@JyAn(tHC8z}fA87EjAqQTa>Ywx0Bd7? zdmAG6ytLwT`@vca8C*Z(S$i!+-<e&C=bCW3b*|Y~-a`Y?1xm0h2vBNIT7e|j zTgcNpn0u0Fm$lu}zeEalhw&^n;5yOFzx@u9aSd#zO-7#Rbu03iLyl>EbFmwir{jfg zS$E7VluBuScWXmXhu%bpQPHgR%MwjUuBXs|x))ykYVod8Cc6_K@e4VD4!W@%S+R)v zQNwusF-_A&!Y1+J_O3N@7|n6D05e`SgYk-1%*Fp7En4<@@N_Zkmo%#OYOS1P8gsmn z(Xl_CD42c1-Y8OV$Mu-qiah6GiFh(yI(YbuIKYR>4HuIQke&T5xs-Uwo~Vqe9g!tt zi*9zQh_N?y2R62zh=;8084b^{OAq3`hUlZNCZ?!;MFMLYYhkTqu6VInVSlvd$#Km( zuXrPm9-{i79zt)>YE-OG#lm-V6+I1&#aJuACSuSW7&MLZ1!W=+A6P3S^Kj1|!#0x4 zP#K#Y0jhI%AtNt3xu3cx`K&SV#|mX+oVIVX!ZE2>#~Agg)e=Y8V#e&8@3v6`l6($L zuE91iL#m5t{ZmRVMFQ1ADpu?g z&#i5oECrr>6`japrvwx;ue&bM&h@l9YpFg@%hT>B)wd#&h)Q{;>qBCpWsQd50oi?h z9ahO5NXMA-iUp5~h_D47A-3ZqYV*$4UEy}-Vg?u{zMK&nA8!*l^kbS zxI10gFvImC0{iS`gRL!|EVj72APtPUZu3d0pBH|y+K9!s2%g#DSg(wc=bmNr*k~8B zwEepHG<`mh+MP=HqYvmY(?^^ehDy_VRG&TE^%C;MwY>$k{& zcl+CE^kqK{1G0#lF#^evZTrzKdJ|v#x#o7i6giZUQOqsGZlc^y1<`?LpVfWzOY|`u zL)}JoV|IfVv@lX_cY4jmvCWJMPySG28KcKNkd;7Ivanh_NjB>|v5%M0CXJQ0#2$iO zv03rCs-^ZIkJ#S`t9TwlYq&d+HA+skbv%mBQ5spBE9lwulQLA0cmj)&%3-NaJWXFL~0}I9*4R9^o@MXgr^xSIJkbLQ+M(K5#B7odBwQFpY%p@Ei$@y4DN) z7&~Iq9NlC?2C}M9C;e@UqA2k(+2nN+a*O_#3;v=L<(#Z_QpKiqe+}I^Yknjz6!ex5CwA z^5l3CMK(lNyJF0OZCU>&Ga*sq%E~o;0Ar%-x9X}fXVm1v{k2GRKpu3vOmh+O@xq!S#hmR7Smd%f7&~V~ zxAHoBD!kM?aBU;fpQ$Oy*4ou8;FkHM4ANY+a#MF~%~)e+VO%%sMIvaFq~kg)6n}GN z`?7Q6Wms@ztU_*aO@~Z5M}=py?jEbHxx$veS+O&JRtMlnO|i+CnMRF9L~=EC6Zdg< zcd~-n)BvuziE64HqKlKZRO{}fFor7yHDpF29Qlw2?03FDznB+U_#{3KTd0Ncr-oe9 zD-jVfV=Fpzrwlo>gQ$GzIlyk%(7u?c=Ck>FZPJ{UZn6?#Em;z4nETCcjz=%fiVIfu zDfxZ9)P~vg+h3OJsfoo&?rP~;SC9{$?R@9Tt8h*gA{)bc>9i7CNC1BLzx+l2KKb)$u zj_E6pF%S}toG`Bq`Q`{e=YG~P?E0a#njsCJfJSD_QxVR7+>?yJr;KG5krfg{)WYO1 zz6CV6*tcJ=u8}3z_HI}_z$aoA4ST)cUZyhr{ccCl+AX-9vz%26Q8jnCA_4xoW4%p z<(pQK2k-8ACOK^%cUbsloqnVW#Y;SI#QF;^U(bY|aLD$P-_?7K1oPGVVQ#H)R+UIc zZwB097{4Ilz zYiX>?h;{>6kw33j)Ny0g&pTo%EFO!l`$KJ6uF$i@SNwseXRg%qu@~b}(d>0Bl{7hy zn8)7T_nGzmFT1&@}Lo5FLf0=SnBSFhF6&%@^9JhD9=T4&o?0`R~$qsKyUB%`~x6c6p~w>O*7 z*G1a?78;~6g1f4UM7ff>6Y0#eMmT(kU91AAXy6RE1PeW_UK>0Bi?jvEblY=e*d1iM zwnU!Jzpn4L6_=fa{|GClE>w=Op2MG3glI}7=L*9ZwS!`XxZNMaCi-_|+c`4KnOj|x zmqqF^;B`Mk9_#D zcN5@$@v^sywHn+zC$O#a<~)Q=^9|i%e8l8vnPlQUz2`BrM+dtkE@E+_+EJ4?$Yy&_ z93*Eb6?LL3beMqHx$YBSvuvC;rYdCL0Ipyx5E1RL2l7}UuyXBnxt|f&V>aH;dl_%G z|GElbMDq$n@iloCAm^Q zC(fx#tl1gE*Hn2RLsl0fd=|7Md$@AQyQ7tr#F{4&#Hvb+xcbIY_!CU>{$;yN<2UNL zsuVRy&wYt0kh;eb$dgDCyEp5(?d@tByUe)|tE8{)oTHvz&5WQV&-h%PJCS9MN-G9E z4vuo7AT`kC{ewSL49w4w-M{eEtI`>nJuz~5#2>TV)pcC@k1{seZ8IVE*~7_bzmYGv zKK`1u&nU)WKV!Y^t6&$TIV}&uxBFT5GJl)%S`KhVmgwqqmTg-%*zvZ%rsTw&3>?Pu zeI(3!%_z-xhG0!Ok?%j^y6yUFjVEG6{`~gB3f-&4E_|~<7)8ra1NE63yoH{z_NdI1n)wbY<>hWcv0benfI_-Dn;<+(S`V@jy|9IAwT({nb%@}Q^b&QU^ zE9Cau5?Ni5FOnx>6HuHEzS)Y-jo(<#d318FY@2ytR#xfk7U#3h?#JX`*V12?)#l%o zkv)gl@c1e35naTSC?%4#5|}Xqo8Mxy^*C$HHR6o4=o;sGR9C>Yp<0D#|X^m!gBq1u>_ajed1!XkZgX5{2 zo}2sfjqx(7x*Xei#m4=7cNh*S;?rXzZdWU7e^Mc)N2Z>aeIpmVhllK=5()S~do<$* z^|701femJcj`U-`KJJUt3x1xto3UAecuoyXlxM8-$SPV*$&No0a$5QzRqqMJ+U@-@ zx}st3p|*p)^!5Jk0M-Jn{Gt9JI+5#L_6e@`>xh~7gPcx$htWn!kb?N-*($K=J~f)G zV?8=IZ_M8z^6onpqa53;eSDwC-<&4vfQqZCMfiP;)ZUFrW~a6vrMaqVVb<+6TQpql z=e-W;D2ZOcGqL|1$v2kl>gmN})xMU>x6$nP4$#PYk$KkHAh_*_&I-Tt8ce${WAnbB z;}6&**5^JdxNY4-q_9_uhdtRn+GgLUc%l39iGfJA9&eqas5d>mVSmG{=LvaEh#)Bv zjdH9lme_&$h&^;$$64fwwC)Qrn+(={1ahUhg-_EF;AeD;%}04=gospEY^md69T=R| zG`TnXcsQypc1}i(*Xu>RmhA8p zxruzwT^-q%eLFp~qmj%<=HaYb>bRgX$XUnvsM~C5v2(gB&)$sYJad10xTh_?h zAXVR3cdRX*95u=kEn;1x8GgY#*-Ii$)rolTT}}BuV_YpANE>I@npnW+>8L^CS!@Dc zsA=}H+*)&_5TB8!D+HePMso6?ou@?8+zSOUJ_-7+l^EVxpMb^}R;t*}eRuZbI>wQA zv^K_tQc+k%+w!h zH1RNYG{RiiLRQPOtnj_)MWaz;*0bYtt;g<4 z-izHDL(bL+df!tWVWmDffxSRwb~p4CIO!7W)9?o_jBzQo|;f%|1u?-MUtb;z#E8Tzm4Ho)-_;b&l~q`G&OE zp2`sPvG3QBY+cvg$3#{zv-cG0cyiqc+WNtP;ky7vS0wdE{i)X=)#7U{LNQrXt_WjJyw{&3mYL@i=!o z)|f+(VUIh+Oz$rJ*M-x%d+aHW&i(5;9!A90;oz;W(#OV%UBMiC0t`9V`sd`>2W7oq zt18dy)P;=9dvxrq&`0#>`LzX8a}(p*9sZi{LzaE*^sAjsYkyhz^3zFHsh909v1Xq! z_haddW{i(KvxJOj1YN$1M3sL#m5;f>+^oXbT>yOLu?YT9w#x-QvWv@%otEl(^tEXx| z7DMa)9Vj6eZKdicz-~lJ+j=eYIP+dq$eQO%ri2N*n!CJmnRib;CFtsKJRP8yMj6h^ zV{>-twZxnWv6ua^PYW&9(ca z_@_FNwZXAi9pIT3+j?}%e6Gvl<$HDS*crr<)Hj^2z%%$q>ta1>JG*0B##tj< z-!gvJOGeG<5`FjwY=C}t-I%ZAG29n_fyTd`U6^~%GIAj(S=&WzcuJZ+67~)Dkkp={ zzqx@uMD#-MURfl@@f4pjhs^AAS-p>o#jkJ6?P@HMmf9ry5520!llY{+^+fA>hbuJE zGfIWd-GN9}xsIgba^8PvX+$D>$Z~L_#ZKAQazw2wopnF7D~h!h&>6pA|5Q>wQTV)G z%XKgaJv#Tc=cxUcDQZ*YC2ARc?ijd=l~WQ;Xu1~_Sk{UT-Gd8PG4gj;)?CMPNLFC5 zs4=z0f%o+Km)$n=zRxdag&9wFg+Y|3K2nd7iDZ^{k023+#2}mw1?ZxSMy#l3@;+x` z$YbYaF<1wyU`wuKeP-6c>c}A%p(!;8cmW~fxm!HWS~$ASE2`^xX_SbW<$oENxsYVE zQ?kb~9?s{-nD}OCnw}N4N^FB>@UmKBjj$FH%)I59*l5j+u%4%<8fnhrDPMRv5in-9 zJ=}(ywI&hSyofBaAGXgL8lPL|gguEor5b&!ZH-G z$qUBVnv=&I;5=9bJHku&0N{*h9?to+*eR<{{lagEeN)l-ti0Dd z-m)N7il_9$M;U{P0*hi-WJZ7LA?+~!o-*+so8gJ|S`$3L;j;J5x`N7A3Ifb&g8qM;>Z&^i2fp+bdo|`f;@?rmQpc#+|YVcERtQ zaHXcVMzaD$sxh9B0sA%QSZQH-VkL5QbqtExhyAt2$2;_B!IS3&_gKR3|FtCo8tRK;G%q zi5%@Ss#*p6kEc-d3NeZf$*AOnoVpp~S1IsCuWEUgfhYFBI=PtIfNxx*%HVo1(w?-g z<$6CEH2{hG@*}kwFZ;=IRZjfTl|m{;C02rz^=QopqS##vy?^x_SQA$1%yL}g@mY$y z3*MY1Q5*@^-=5rY>Gf+3)EhbanVg`%KLdSS<8P^$y_U+stRizO4L`er4d23tUD2T} zo+BUh-Og&hWNiFCo^&GG7)Q-omhO;@qvrQf?Q2i&X69IrxO7*F=N;DU*Sq_%>${0K_-kBQfK1MkI0JS{HDEr4Bgjfv znRrqL$0RqShtHJA|K@44_GR^7^DT3OF!`(BcMd8fFlP-MGH^|3oKUIma-yxwas z`d*y{dQR@?Q@c5riuOo@59dw{^2}pVnZV#+A)W>M?x4wSB4W=bV`YL)d!Fi(I53~A zgZ;CYB>s(fSS)AQ_&rrJ$Md@OxG%Zibuu=Lhh6LOTswDm)=3S$^^Elk(LKi4@p;vC zTnhvZT^%zsJb-1#XY97K_v!*Wf=E0#YJt~3ta13R2u2;VH#xa$ynQbq3-kILFvuFn zJLd9zOPcTDP$XKPu2#cD92LG#5p*o=NwbdL-!Gb-m*$}CPRZyB>a50_Gd^oNQ8#)! zE62{-FuZKS`4FrFE6s6F?)_!a%9AYF=`aGv^K$pkIcGrNxKl6*$~<;-zbjqe)|;PSYB zi7w{9UT$VJ$5Z5LMfQU)_#Y4Un!`%R(-FPqjm^*oy|vT*;(`7KWB0*Q_pLLe*&r*O z*)}=z$nRexlOvHR?JW7KIDXBDK_xno1Nq)8eG)G7e2X>pe6FGAppL=Y<7nKER6(cA zKT5@JEfKPoiD=|5-^V|>7o5*4oGre(6Jfvk*RnKY@b~YQKh&N4`QmWD{{5=Hh38@Y zIjz^{wS$;zx#FXP-pMJK?`f0rfN*#}DG6u3C$yz$bx?iK^9%pMA91Xo9VBdpxWwu>e|})qAIJXSiFlW9f&>yuA9fUPr=PHNu0EfloiJk&yGVdhcF+dp@IL zQ@ry@^+(VhyY!ssga^;-?%T_?59-zZ!yoH4_xC(&Z{4W-7#o>y)c;72O!v#r$gs7& z-a{5~@~?FVa$)t`7k48uul}v%!lP&P=XPC#o%rN#SzkNzE_X7z;=fI0PAZ{O&RbF%Wx$Hf-|6g&vK*)4HbZ zeyd~!Df;F?y?R)m-d{AA=i+N|c(*>sGkE;$@UP2!cmkc;U;nelIo**-3>ycZ*A-Zg z(bUYDu*cfpMrXXtx9i|(&aw(;~3+F z`ED;#%L`xD`$RnRI|tU+PuJs!$Z}e8B1xlEgv(|#1KP05%eepx7)QBdj|s3I z`~;dn2(Le{SH#zydW9_9A4XAQKE*f4X!Kpi9&*PXpAt*(kBA_57`@G^;#{mCOE~?L zk_vgr3ui~T!PrD2t^zmYu6xVXXN3$faQE#ya*Ir8oP)NoDAqPh;qAmGqk->H7G^bC zMIvL!l4I1J)O+%OxbBO(Z)O&C&vnP6mESY7=Edu=BGx9#K(f-I3mg~h^lQAMM)(2T zf(mRZe);UQEDFP6XEJF<$t?JaXhkPx;U4ccvxXD22^teuL{&4WV+7e^f|1Ay$P!J$ zBWq^Ts>F_XP|oJMy=XaGtaE;m=WZ{jZpd697nUGakOa-BSmvx8D;$eIDje*Bg&ps- dbS5izKBN|kM&^sN`h3QV9*hjgGb2-;`~Ncvgw+55 literal 0 HcmV?d00001 diff --git a/libraries/IRLib/README.txt b/libraries/IRLib/README.txt new file mode 100644 index 0000000..ae6b786 --- /dev/null +++ b/libraries/IRLib/README.txt @@ -0,0 +1,84 @@ +IRLib – an Arduino library for infrared encoding and decoding +Version 1.32 January 2014 +Copyright 2013, 2014 by Chris Young http://cyborg5.com + +This library is a major rewrite of IRemote by Ken Shirriff which was covered +by GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make +modified versions. That same license applies to this modified version. See +his original copyright below. + +The latest Ken Shirriff code can be found at +https://github.com/shirriff/Arduino-IRremote + +My purpose was to reorganize the code to make it easier to add or remove +protocols. As a result I have separated the act of receiving a set of raw timing +codes from the act of decoding them by making them separate classes. That way +the receiving aspect can be more black box and implementers of decoders and +senders can just deal with the decoding of protocols. + +Also added provisions to make the classes base classes that could be extended +with new protocols which would not require recompiling of the original library nor +understanding of its detailed contents. Some of the changes were made to reduce +code size such as unnecessary use of long versus bool. Some changes were just my +weird programming style. Also extended debugging information added. + +IRremote +Version 0.1 July, 2009 +Copyright 2009 Ken Shirriff +For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.htm +http://arcfn.com + +Interrupt code based on NECIRrcv by Joe Knapp +http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 +Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ + +**************************************************** +The package contains: +IRLib.cpp Code for the library written in object C++ +IRLib.h Header file which you will include in your sketch +IRLibMatch.h Match macros used internally. Need not include this unless you implement + your own protocols +iRLibTimer.h Attempts to detect type of Arduino board and allows you to modify which + interrupt timer you will use. Defaults to timer 2 as did the original KS + library. Alternate board and timer information based on a fork of the + original KS library. That for can be found here. + https://github.com/TKJElectronics/Arduino-IRremote +IRLibRData.h Moved irparams structure and related data to this header to facilitate + user created extensions to IRrecvBase. + +Note: there is no "IRremoteInt.h" header as in the original library. Those values were + moved elsewhere. + +The examples directory contains: +IRanalyze Dumps detailed information about a recent signal. Useful for analyzing + unknown protocols +IRfreq Reports modulation frequency of IR signal. Requires TSMP58000 IR learner +IRhashdecode Demonstrates hash decoder. +IRrecord Recording incoming signal and play it back when a character is sent + through the serial console. By using the console you no longer need + to wire up a pushbutton to run this code. +IRrecvDump Receives a code, attempts to decode it, produces well formatted + output of the results using the new "dump" method. +IRsendDemo Simplistic demo to send a Sony DVD power signal every time a + character is received from the serial monitor. +IRsendJVC Demonstrates sending a code using JVC protocol which is tricky. +IRservo Demonstrates controlling a servo motor using an IR remote +IRserial_remote Demonstrates a Python application that runs on your PC and sends + serial data to Arduino which in turn sends IR remote signals. +Samsung36 Demonstrates how to expand the library without recompiling it. + Also demonstrates how to handle codes that are longer than 32 bits. +DirecTV Demonstrates additional protocol for DirecTV +GIcable Demonstrates additional protocol for GIcable used by Motorola cable boxes +rcmm Additional protocol Phillips RCMM used by AT&T U-Verse boxes +Note: I did not port any of the other demo sketches although I may add IRTest later. +The manuals directory contains: +IRLibReference.docx Reference manual in Microsoft Word format +IRLibReference.pdf Reference manual in Adobe PDF format +Online version of this manual is also available at: + http://tech.cyborg5.com/irlib/docs/ +**************************************************** +The library handles the following protocols: +NEC, Sony, RC5, RC6, Raw all of which were supported in the KS version. +Additionally added Panasonic_Old, JVC, NECx. +Also added KS hash code routines which he released separately. +Example code included but not in the library: Samsung36, DirecTV, GIcable. diff --git a/libraries/IRLib/examples/DirecTV/DirecTV.ino b/libraries/IRLib/examples/DirecTV/DirecTV.ino new file mode 100644 index 0000000..ff57884 --- /dev/null +++ b/libraries/IRLib/examples/DirecTV/DirecTV.ino @@ -0,0 +1,201 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009I know prescription and no + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +/* + * This example demonstrates how to extend this library to add a new protocol + * without actually modifying or recompiling the library itself. It implements the protocol + * used by DirecTV. This protocol actually comes in six different varieties. + * It uses three different frequencies 38, 40, or 57 kHz. It also uses two different varieties + * lead out times either 9000us or 30000us. The default is 38 kHz and 30000us. + * You can use a different constructor for the other varieties. + * This is a modified version of the IRecord example. + * If you would like to make this a permanent part of your library you could copy the class + * prototypes to IRLib.h and the code itself to IRLib.cpp. Search for the word "ADDITIONAL" + * to see where to add various pieces of code. Also see the Samsung36 example for details. + */ +#include +#include + +class IRdecodeDirecTV: public virtual IRdecodeBase +{ +public: + bool decode(void); + bool Repeat; +}; + +class IRsendDirecTV: public virtual IRsendBase +{ +public: + IRsendDirecTV (int khz= 38,bool LongLeadOut=true); + void send(unsigned long data, bool Repeat); + int Freq; + unsigned int LeadOut; +}; + +#define DIRECTV (LAST_PROTOCOL+1) + +/* + * According to http://www.hifi-remote.com/johnsfine/DecodeIR.html#DirecTV + * The IRP notation for this protocol is: + *{38k,600,msb}<1,-1|1,-2|2,-1|2,-2>(5,(5,-2,D:4,F:8,C:4,1,-50)+) {C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)} + * Unlike most protocols which use a fixed length mark and a variable length or a variable length + * mark a fixed length space, this protocol varies both the mark and the space. + * The stream is still a series of marks and spaces but the length of either of those + * denotes a one or zero. A length of 1200us=logical 1 and length 600us=logical 0 + * It also makes changes to the length of the header mark to devote repeat codes. + * The first header mark should be 6000us but repeat codes should only be 3000us. + */ +bool IRdecodeDirecTV::decode(void) { + long data; int offset; + IRLIB_ATTEMPT_MESSAGE(F("DirecTV")); + if (rawlen != 20) return RAW_COUNT_ERROR; + if (MATCH(rawbuf[1],3000)) + Repeat=true; + else + if (!MATCH(rawbuf[1],6000)){ + return HEADER_MARK_ERROR(6000); + } else { + Repeat=false; + } + if (!MATCH(rawbuf[2],1200)) return HEADER_SPACE_ERROR(1200); + offset=3; data=0; + while (offset < 18) { + if (MATCH(rawbuf[offset],1200)) { + data = (data << 1) | 1; + } + else if (MATCH(rawbuf[offset],600)) { + data <<= 1; + } + else return DATA_MARK_ERROR(1200); + offset++; + if (MATCH(rawbuf[offset],1200)) { + data = (data << 1) | 1; + } + else if (MATCH (rawbuf[offset],600)) { + data <<= 1; + } + else return DATA_SPACE_ERROR(1200); + offset++; + } + if (!MATCH(rawbuf[1],6000)) return DATA_MARK_ERROR(6000); + bits = 16;//set bit length + value = data;//put remaining bits in value + decode_type= static_castDIRECTV; + return true; +}; + +//See the comment at the top about different frequencies and lead out times +IRsendDirecTV::IRsendDirecTV (int khz, bool LongLeadOut){ + Freq=khz; + if (LongLeadOut) LeadOut=50*600; else LeadOut=15*600; +}; + +void IRsendDirecTV::send(unsigned long data, bool Repeat) { + enableIROut(Freq); + if(Repeat) mark(3000); else mark(6000); + space(1200);//Send header + for (int i = 0; i < 8; i++) { + if (data & 0x8000) mark(1200); else mark(600); + data <<= 1; + if (data & 0x8000) space(1200); else space(600); + data <<= 1; + }; + mark(600); + space(LeadOut); +}; + +//Create a custom class that combines this new protocol with all the others +class MyCustomSend: +public virtual IRsend, +public virtual IRsendDirecTV +{ +public: + void send(IRTYPES Type, unsigned long data, int nbits); +}; +void MyCustomSend::send(IRTYPES Type, unsigned long data, int nbits) { + if (Type==DIRECTV) + IRsendDirecTV::send(data,false); + else + IRsend::send(Type, data, nbits); +} +class MyCustomDecode: +public virtual IRdecode, +public virtual IRdecodeDirecTV +{ +public: + virtual bool decode(void); // Calls each decode routine individually + void DumpResults(void); +}; +bool MyCustomDecode::decode(void) { + if (IRdecodeDirecTV::decode()) return true; + return IRdecode::decode (); +} +void MyCustomDecode::DumpResults(void){ + if(decode_type==DIRECTV) { + Serial.print(F("Decoded DirecTV: Value:")); Serial.print(value, HEX); + if (Repeat) Serial.print(F(" repeat flag")); + }; + IRdecode::DumpResults(); +}; + +MyCustomDecode My_Decoder; + +MyCustomSend My_Sender; + +int RECV_PIN = 11; + +IRrecv My_Receiver(RECV_PIN); +IRTYPES codeType; // The type of code +unsigned long codeValue; // The data bits +int codeBits; // The length of the code in bits +bool GotOne; + +void setup() +{ + GotOne=false; + codeType=UNKNOWN; + codeValue=0; + codeBits=0; + Serial.begin(9600); + Serial.println(F("Send a code from your remote and we will record it.")); + Serial.println(F("Type any character and press enter. We will send the recorded code.")); + My_Receiver.enableIRIn(); // Start the receiver +} +void loop() { + if (Serial.available()>0) { + unsigned char c=Serial.read(); + if (c=='p') {//Send a test pattern + GotOne= true; codeType=DIRECTV; codeValue=0x1234; codeBits=16; + } + if(GotOne) { + My_Sender.send(codeType,codeValue,codeBits); + Serial.print(F("Sent ")); + if (codeType== DIRECTV) Serial.print(F("DirecTV")); else Serial.print(Pnames(codeType)); + Serial.print(F(" Value:0x")); + Serial.print(codeValue, HEX); + Serial.print(F(" Bits:")); + Serial.println(codeBits, DEC); + My_Receiver.enableIRIn(); // Re-enable receiver + } + } + else if (My_Receiver.GetResults(&My_Decoder)) { + My_Decoder.decode(); + if(My_Decoder.decode_type == UNKNOWN) { + Serial.println(F("Unknown type received. Ignoring.")); + } else { + codeType= My_Decoder.decode_type; + codeValue= My_Decoder.value; + codeBits= My_Decoder.bits; + GotOne=true; + } + My_Decoder.DumpResults(); + delay(1000); + My_Receiver.resume(); + } +} + diff --git a/libraries/IRLib/examples/GIcable/GIcable.ino b/libraries/IRLib/examples/GIcable/GIcable.ino new file mode 100644 index 0000000..72aa858 --- /dev/null +++ b/libraries/IRLib/examples/GIcable/GIcable.ino @@ -0,0 +1,152 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009I know prescription and no + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +/* + * This example demonstrates how to extend this library to add a new protocol + * without actually modifying or recompiling the library itself. It implements the protocol + * known as GIcable which is used by some Motorola cable boxes. + * This is a modified version of the IRecord example. + * If you would like to make this a permanent part of your library you could copy the class + * prototypes to IRLib.h and the code itself to IRLib.cpp. Search for the word "ADDITIONAL" + * to see where to add various pieces of code. Also see the Samsung36 example for details. + */ +#include +#include + +class IRdecodeGIcable: public virtual IRdecodeBase +{ +public: + bool decode(void); +}; +class IRsendGIcable: public virtual IRsendBase +{ +public: + void send(unsigned long data, bool Repeat); +}; + +#define GICABLE (LAST_PROTOCOL+1) + +/* The IRP notation for this protocol according to + * http://www.hifi-remote.com/johnsfine/DecodeIR.html#G.I. Cable + * is "{38.7k,490}<1,-4.5|1,-9>(18,-9,F:8,D:4,C:4,1,-84,(18,-4.5,1,-178)*) {C = -(D + F:4 + F:4:4)}" + */ +bool IRdecodeGIcable::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("GIcable")); + // Check for repeat + if (rawlen == 4 && MATCH(rawbuf[1], 490*18) && MATCH(rawbuf[2],2205)) { + bits = 0; + value = REPEAT; + decode_type= static_castGICABLE; + return true; + } + if(!decodeGeneric(36, 18*490, 9*490, 0, 490, 9*490, 2205/*(4.5*490)*/)) return false; + decode_type= static_castGICABLE; + return true; +}; + +void IRsendGIcable::send(unsigned long data, bool Repeat) { + if(Repeat) { + enableIROut(39); + mark (490*18); space (2205); mark (490); space(220);delay (87);//actually "space(87200);" + } else { + sendGeneric(data,16, 490*18, 490*9, 490, 490, 490*9, 2205, 39, true); + } +}; + +//Create a custom class that combines this new protocol with all the others +class MyCustomSend: +public virtual IRsend, +public virtual IRsendGIcable +{ +public: + void send(IRTYPES Type, unsigned long data, int nbits); +}; +void MyCustomSend::send(IRTYPES Type, unsigned long data, int nbits) { + if (Type==GICABLE){ + IRsendGIcable::send(data,false); + //un-comment the line below to text repeats + //delay(3000); IRsendGIcable::send(data,true); + } + else + IRsend::send(Type, data, nbits); +} +class MyCustomDecode: +public virtual IRdecode, +public virtual IRdecodeGIcable +{ +public: + virtual bool decode(void); // Calls each decode routine individually + void DumpResults(void); +}; +bool MyCustomDecode::decode(void) { + if (IRdecodeGIcable::decode()) return true; + return IRdecode::decode (); +} +void MyCustomDecode::DumpResults(void){ + if(decode_type==GICABLE) { + Serial.print(F("Decoded GIcable: Value:")); Serial.print(value, HEX); + }; + IRdecode::DumpResults(); +}; + +MyCustomDecode My_Decoder; + +MyCustomSend My_Sender; + +int RECV_PIN =11; + +IRrecv My_Receiver(RECV_PIN); +IRTYPES codeType; // The type of code +unsigned long codeValue; // The data bits +int codeBits; // The length of the code in bits +bool GotOne; + +void setup() +{ + GotOne=false; + codeType=UNKNOWN; + codeValue=0; + codeBits=0; + Serial.begin(9600); + Serial.println(F("Send a code from your remote and we will record it.")); + Serial.println(F("Type any character and press enter. We will send the recorded code.")); + My_Receiver.enableIRIn(); // Start the receiver +} +void loop() { + if (Serial.available()>0) { + unsigned char c=Serial.read(); + if (c=='p') {//Send a test pattern + GotOne= true; codeType=GICABLE; codeValue=0x1234; codeBits=16; + } + if(GotOne) { + My_Sender.send(codeType,codeValue,codeBits); + Serial.print(F("Sent ")); + if (codeType== GICABLE) Serial.print(F("GIcable")); else Serial.print(Pnames(codeType)); + Serial.print(F(" Value:0x")); + Serial.print(codeValue, HEX); + Serial.print(F(" Bits:")); + Serial.println(codeBits, DEC); + My_Receiver.enableIRIn(); // Re-enable receiver + } + } + else if (My_Receiver.GetResults(&My_Decoder)) { + My_Decoder.decode(); + if(My_Decoder.decode_type == UNKNOWN) { + Serial.println(F("Unknown type received. Ignoring.")); + } else { + codeType= My_Decoder.decode_type; + codeValue= My_Decoder.value; + codeBits= My_Decoder.bits; + GotOne=true; + } + My_Decoder.DumpResults(); + delay(1000); + My_Receiver.resume(); + } +} + diff --git a/libraries/IRLib/examples/IRanalyze/IRanalyze.ino b/libraries/IRLib/examples/IRanalyze/IRanalyze.ino new file mode 100644 index 0000000..aec2673 --- /dev/null +++ b/libraries/IRLib/examples/IRanalyze/IRanalyze.ino @@ -0,0 +1,117 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.3 January 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009 + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +/* IRanalyze receives repeated values from a remote and averages the results. Should help in + * analyzing unknown protocols. You have to press the same key repeatedly. If you press a + * different key the totals reset and it computes new averages. + */ +#include +#include + +int RECV_PIN = 11; + +unsigned int Samples,i, LowSpace, LowMark, HighMark, HighSpace, interval, + balm,aalm,bahm,aahm,bals,aals,bahs,aahs; +unsigned char bacm,aacm,bacs,aacs, Mark_Count,Space_Count; +unsigned int Accumulated_Time[RAWBUF]; +unsigned long Mark_Avg, Space_Avg,baam,aaam,baas,aaas; +//Try this program with various receivers +IRrecv My_Receiver(RECV_PIN); +//IRrecvLoop My_Receiver(RECV_PIN); +//Use interrupt=0. This is pin 2 on Arduino Uno and Mega, pin 3 on Leonardo +//IRrecvPCI My_Receiver(0); + +IRdecode My_Decoder; +IRTYPES Old_Type; +unsigned long Old_Value; +void setup() +{ + Serial.begin(9600); + delay(1000);while(!Serial); + My_Receiver.enableIRIn(); +// My_Receiver.Mark_Excess=50;//Try different values here + Samples=0;Old_Value=0; Old_Type=UNKNOWN; + Serial.println(F("Send a signal repeatedly. We will report averages and statistics.")); +} +void Tab(void) {Serial.print("\t");}; +void loop() { + if (My_Receiver.GetResults(&My_Decoder)) { + My_Decoder.decode(); + if( (My_Decoder.decode_type != Old_Type) || (My_Decoder.value != Old_Value)) { + Serial.println(F("Resetting counters")); + for(i=0;i + +int RECV_PIN = 11; + +IRrecv My_Receiver(RECV_PIN); +IRdecode My_Decoder; +IRdecodeHash My_Hash_Decoder; + +void setup() +{ + My_Receiver.enableIRIn(); // Start the receiver + Serial.begin(9600); + delay(2000);while(!Serial);//delay for Leonardo +} + +void loop() { + if (My_Receiver.GetResults(&My_Decoder)) {//Puts results in My_Decoder + My_Hash_Decoder.copyBuf(&My_Decoder);//copy the results to the hash decoder + My_Decoder.decode(); + Serial.print("real decode type:"); + Serial.print(Pnames(My_Decoder.decode_type)); + Serial.print(" value: 0x"); + Serial.print(My_Decoder.value, HEX); + My_Hash_Decoder.decode(); + Serial.print(", hash decode: 0x"); + Serial.println(My_Hash_Decoder.hash, HEX); // Do something interesting with this value + delay(1000); + My_Receiver.resume(); + } +} + diff --git a/libraries/IRLib/examples/IRrecord/IRrecord.ino b/libraries/IRLib/examples/IRrecord/IRrecord.ino new file mode 100644 index 0000000..28e5e61 --- /dev/null +++ b/libraries/IRLib/examples/IRrecord/IRrecord.ino @@ -0,0 +1,130 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.3 January 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009 + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +/* + * IRrecord: record and play back IR signals + * An IR detector/demodulator must be connected to the input RECV_PIN. + * An IR LED must be connected to the appropriate pin.(See IRLibTimer.h) for your + * machine's timers and erupts. + * Record a value by pointing your remote at the device then send any character + * from the serial monitor to send the recorded value. + * Also demonstrates how to use toggle bits which must be controlled outside + * the library routines. + * The logic is: + * If an IR code is received, record it. + * If g serial character is received, send the IR code. + */ + +#include + +int RECV_PIN = 11; + +IRrecv My_Receiver(RECV_PIN); +IRdecode My_Decoder; +IRsend My_Sender; +/* + * Because this version of the library separated the receiver from the decoder, + * technically you would not need to "store" the code outside the decoder object + * for this overly simple example. All of the details would remain in the object. + * However we are going to go ahead and store them just to show you how. + */ +// Storage for the recorded code +IRTYPES codeType; // The type of code +unsigned long codeValue; // The data bits if type is not raw +int codeBits; // The length of the code in bits + +// These values are only stored if it's an unknown type and we are going to use +// raw codes to resend the information. +unsigned int rawCodes[RAWBUF]; // The durations if raw +int rawCount; //The number of interval samples + +bool GotOne, GotNew; + +void setup() +{ + GotOne=false; GotNew=false; + codeType=UNKNOWN; + codeValue=0; + Serial.begin(9600); + delay(2000);while(!Serial);//delay for Leonardo + Serial.println(F("Send a code from your remote and we will record it.")); + Serial.println(F("Type any character and press enter. We will send the recorded code.")); + My_Receiver.enableIRIn(); // Start the receiver +} + +// Stores the code for later playback +void storeCode(void) { + GotNew=true; + codeType = My_Decoder.decode_type; + if (codeType == UNKNOWN) { + Serial.println("Received unknown code, saving as raw"); + // To store raw codes: + // Drop first value (gap) + // As of v1.3 of IRLib global values are already in microseconds rather than ticks + // They have also been adjusted for overreporting/underreporting of marks and spaces + rawCount = My_Decoder.rawlen-1; + for (int i = 1; i <=rawCount; i++) { + rawCodes[i - 1] = My_Decoder.rawbuf[i]; + }; + My_Decoder.DumpResults(); + codeType=UNKNOWN; + } + else { + Serial.print(F("Received ")); + Serial.print(Pnames(codeType)); + if (My_Decoder.value == REPEAT) { + // Don't record a NEC repeat value as that's useless. + Serial.println(F("repeat; ignoring.")); + } + else { + codeValue = My_Decoder.value; + codeBits = My_Decoder.bits; + } + Serial.print(F(" Value:0x")); + Serial.println(My_Decoder.value, HEX); + } +} +void sendCode(int repeat) { + if(codeType== UNKNOWN) { + // Assume 38 KHz + My_Sender.IRsendRaw::send(rawCodes,rawCount,38); + Serial.println(F("Sent raw")); + return; + } + if( !GotNew ) {//We've already sent this so handle toggle bits + if (codeType == RC5) { + codeValue ^= 0x0800; + } + else if (codeType == RC6) { + codeValue ^= 0x10000; + } + } + GotNew=false; + My_Sender.send(codeType,codeValue,codeBits); + Serial.print(F("Sent ")); + Serial.print(Pnames(codeType)); + Serial.print(F(" Value:0x")); + Serial.println(codeValue, HEX); +} + +void loop() { + if (Serial.read() != -1) { + if(GotOne) { + sendCode(0); + My_Receiver.enableIRIn(); // Re-enable receiver + } + } + else if (My_Receiver.GetResults(&My_Decoder)) { + My_Decoder.decode(); + GotOne=true; + storeCode(); + delay(1000); + My_Receiver.resume(); + } +} + diff --git a/libraries/IRLib/examples/IRrecvDump/IRrecvDump.ino b/libraries/IRLib/examples/IRrecvDump/IRrecvDump.ino new file mode 100644 index 0000000..fb8828c --- /dev/null +++ b/libraries/IRLib/examples/IRrecvDump/IRrecvDump.ino @@ -0,0 +1,40 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.3 January 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009 + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +/* + * IRLib: IRrecvDump - dump details of IR codes with IRrecv + * An IR detector/demodulator must be connected to the input RECV_PIN. + */ + +#include + +int RECV_PIN = 11; + +IRrecv My_Receiver(RECV_PIN); + +IRdecode My_Decoder; +unsigned int Buffer[RAWBUF]; + +void setup() +{ + Serial.begin(9600); + delay(2000);while(!Serial);//delay for Leonardo + My_Receiver.enableIRIn(); // Start the receiver + My_Decoder.UseExtnBuf(Buffer); +} + +void loop() { + if (My_Receiver.GetResults(&My_Decoder)) { + //Restart the receiver so it can be capturing another code + //while we are working on decoding this one. + My_Receiver.resume(); + My_Decoder.decode(); + My_Decoder.DumpResults(); + } +} + diff --git a/libraries/IRLib/examples/IRsendDemo/IRsendDemo.ino b/libraries/IRLib/examples/IRsendDemo/IRsendDemo.ino new file mode 100644 index 0000000..b61217e --- /dev/null +++ b/libraries/IRLib/examples/IRsendDemo/IRsendDemo.ino @@ -0,0 +1,25 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.3 January 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009 + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +#include + +IRsend My_Sender; + +void setup() +{ + Serial.begin(9600); +} + +void loop() { + if (Serial.read() != -1) { + //send a code every time a character is received from the serial port + //Sony DVD power A8BCA + My_Sender.send(SONY,0xa8bca, 20); + } +} + diff --git a/libraries/IRLib/examples/IRsendJVC/IRsendJVC.ino b/libraries/IRLib/examples/IRsendJVC/IRsendJVC.ino new file mode 100644 index 0000000..a49f0a2 --- /dev/null +++ b/libraries/IRLib/examples/IRsendJVC/IRsendJVC.ino @@ -0,0 +1,37 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.3 January 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009 + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +/* + * JVC sends repeat codes that are identical to the regular JVC codes + * however they have no header. Therefore there is an additional parameter + * that tells you whether or not to send as an original code or as a repeat. + * + * The only device I had to test this protocol was an old JVC VCR. It would only work if at least + * 2 frames are sent separated by 45us of "space". All JVC is the same bit length so we use + * the third parameter as a flag to tell it whether or not to send the header. + * Send once with the third parameter "1" then delay about 50 microseconds and send again + * with the third parameter "0". + */ + +#include + +IRsend My_Sender; + +void setup() +{ + Serial.begin(9600); +} + +//send a code every time a character is received from the serial port +void loop() { + if (Serial.read() != -1) { + My_Sender.send(JVC,0xc2d0,1); delayMicroseconds (50); + My_Sender.send(JVC,0xc2d0,0); delayMicroseconds (50); + } +} + diff --git a/libraries/IRLib/examples/IRserial_remote/IRserial_remote.ino b/libraries/IRLib/examples/IRserial_remote/IRserial_remote.ino new file mode 100644 index 0000000..f710949 --- /dev/null +++ b/libraries/IRLib/examples/IRserial_remote/IRserial_remote.ino @@ -0,0 +1,55 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.3 January 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Use serial port to send codes. For details on this project see + http://tech.cyborg5.com/2013/05/30/irlib-tutorial-part-3-overview-sending-ir-codes/ + */ +#include + +IRsend My_Sender; + +int protocol; +long code; +int bits; +void setup() { + Serial.begin(9600); + delay(2000);while(!Serial);//delay for Leonardo +} + +long parseHex (void) { + long Value=0; char C;delay(100); + while (Serial.available()>0) { + C= tolower(Serial.read()); + if ((C>='0')&&(C<='9')) + C=C-'0'; + else + if ((C>='a') && (C<='f')) + C=C-'a'+10; + else + return Value; + Value= C+(Value<<4); + }; + return Value; +} +void parseDelimiter () { + char C; + while(Serial.available()>0) { + C=tolower(Serial.peek()); + if( (C>='0') && (C<='9') )return; + if( (C>='a') && (C<='f') )return; + C=Serial.read();//throwaway delimiters + delay (5); + } +} + +void loop() { + if (Serial.available ()>0) { + protocol = Serial.parseInt (); parseDelimiter(); + code = parseHex (); parseDelimiter(); + bits = Serial.parseInt (); parseDelimiter(); + Serial.print("Prot:"); Serial.print(protocol); + Serial.print(" Code:"); Serial.print(code,HEX); + Serial.print(" Bits:"); Serial.println(bits); + My_Sender.send(IRTYPES(protocol), code, bits); + } +} diff --git a/libraries/IRLib/examples/IRserial_remote/IRserial_remote.py b/libraries/IRLib/examples/IRserial_remote/IRserial_remote.py new file mode 100644 index 0000000..33cb042 --- /dev/null +++ b/libraries/IRLib/examples/IRserial_remote/IRserial_remote.py @@ -0,0 +1,133 @@ +# IRLib demo script +# version 1.0 by Chris Young http://tech.cyborg5.com/irlib/ +# Displays a "Virtual remote" on your screen. Clicking on the +# buttons sends serial datato the Arduino which in turn +# since IR signals to a cable box in TV. + +# Import all of the necessary pieces of code +import serial, sys, pygame, pygame.mixer +from pygame.locals import * + +# You will have to edit this to the proper port and speed +ser = serial.Serial('COM4', 9600) + +pygame.init() +# Established screen size, size of buttons and position +size = width, height = 400, 768 +button_size=54; button_offset=71 +button_x1=65;button_y1=39 +max_rows=10; max_columns=4 + +# Specify a font. I'm using Arial narrow bold from my Windows +# font folder. However the default font shown below also works. +myfont =pygame.font.Font ("c:/windows/fonts/ARIALNB.TTF",30) +#myfont=pygame.font.Font(None,36) + +# These are the text labels that will appear on each button +label_text=("TVp", "CBp", "P^", "Pv",\ + "<<", ">", ">>", "->",\ + "Rec", "=", "s", "<-",\ + "Gd", "^", "Fav", "Inf",\ + + "<", "sel", ">", "Lis",\ + "ret", "v", "Prv", "Mnu",\ + "1", "2", "3", "Ch+",\ + + "4", "5", "6", "Ch-",\ + "7", "8", "9", "Vol+",\ + "Pip", "0", "Mut", "Vol-",\ + ) +# Each of these 40 strings of text correspond to the +# protocol in code which will be sent over the USB serial +# to the Arduino. The first number is the protocol number. +# See the defined protocols in "IRLib.h"for the +# enum IRTYPES at about line 50. This example uses +# protocol 3 which is "RC5" used by my Magnavox TV +# and protocol 5 "PANASONIC_OLD" used by my Scientific +# Atlantic SA 8300 DVR. The protocol number is followed by +# the hex code to be transmitted. That is followed by the +# number of bits. Note that the PANASONIC_OLD protocol +# does not need the number of bits specified so they are omitted. +IR_Codes= ("3,180c,13","5,37c107","5,36d924","5,37d904",\ + "5,37291a","5,37990c","5,36293a","5,36b129",\ + "5,375914","5,374117","5,365934","5,37c906",\ + "5,36c127","5,36812f","5,37f101","5,36213b",\ + + "5,37810f","5,366133","5,364137","5,36c926",\ + "5,366932","5,37a10b","5,36e123","5,373918",\ + "5,36113d","5,37111d","5,36912d","5,377111",\ + + "5,37910d","5,365135","5,375115","5,36f121",\ + "5,36d125","5,37d105","5,363139","3,1810,13",\ + "5,37b908","5,373119","3,180d,13","3,1811,13",\ + ) +# This function gets called to shut everything down +def Finished(): + pygame.quit() + sys.exit() + +# Gets the button index based on mouse position. Returned +# value is from 0 to 39 (number of buttons-1) +# Returns -1 if you are not over a button. +def ComputeButton(): + mx,my=pygame.mouse.get_pos() + mx=mx-button_x1 + my=my-button_y1 + bx=mx/button_offset; by=my/button_offset + if bx<0 or bx>=max_columns:return -1 + if by<0 or by> max_rows:return -1 + if (mx%button_offset)>button_size:return -1 + if (my%button_offset)>button_size:return -1 + return bx+by*max_columns + +# Blits the button text from button number "i" +# onto the specified layer using the specified color. +def Show_Text(i,Layer,color=(0,0,0)): + t=label_text[i] + label = myfont.render (t,1,color) + labelpos= label.get_rect() + labelpos.centerx=button_x1+button_size/2+i%max_columns*button_offset + labelpos.centery=button_y1+button_size/2+i/max_columns*button_offset + Layer.blit(label,labelpos) + +# Create the screen and load the background image. +screen = pygame.display.set_mode(size) +bg = pygame.image.load("remotebg.png") + +# Blit black text labels onto the background image +for i in range (max_rows*max_columns): + Show_Text(i, bg) +# Copy the background to the display +screen.blit(bg,(0,0)) +pygame.display.flip() + +# Load the clicking sound +Click=pygame.mixer.Sound("click.wav") + +# Used to detect when the mouse hovers over a different button +previous=-1 + +while 1: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + Finished() + elif event.type == KEYDOWN and event.key == K_ESCAPE: + Finished () + elif event.type == MOUSEBUTTONDOWN: + i=ComputeButton() #which button did we click + if i>=0: + Click.play() #play the sound + ser.write(IR_Codes[i]) #send the codes + elif event.type==MOUSEMOTION: + i=ComputeButton() #which button are we over + if i!=previous: #difference in the last one? + if i>=0: #turn it red + Show_Text(i,screen,(255,0,0)) + else: #or put it back the way it was + screen.blit(bg,(0,0)) + previous=i + pygame.display.flip() #update the display +# That's all folks + + + diff --git a/libraries/IRLib/examples/IRserial_remote/POV-Ray/remotebg.pov b/libraries/IRLib/examples/IRserial_remote/POV-Ray/remotebg.pov new file mode 100644 index 0000000..d964b2f --- /dev/null +++ b/libraries/IRLib/examples/IRserial_remote/POV-Ray/remotebg.pov @@ -0,0 +1,62 @@ +//POV-Ray source to generate the background image for IRserial_remote +// create rectangular areas with rounded corners for use as +// buttons and background objects. + +// Render at 1024x768 then crop 312 pixels from each side +// leaving 400x768 final image. +#declare Area=15; //size of area lights +#declare CR=0.1; //corner radius +#declare ER= 0.5; //edge radius +#declare CX= 3; //width from corner to corner +#declare CY= 7.75; //height from corner to corner +#declare BZ=-ER; //Z offset for buttons + +plane {z,0 pigment{rgb<0.8,0.85,1>*0.8}}//background + +#macro Thing (ER,CR,CX,CY,T) + #local Corner= + union { + torus {CR,ER rotate x*90} + cylinder {ER*z,-ER*z,CR} + } + union { + object{Corner translate< CX,CY,0>} + object{Corner translate<-CX,CY,0>} + object{Corner translate< CX,-CY,0>} + object{Corner translate<-CX,-CY,0>} + cylinder{CY*y,-CY*y,ER translate<-CX-CR,0,0>} + cylinder{CY*y,-CY*y,ER translate< CX+CR,0,0>} + cylinder{CX*x,-CX*x,ER translate<0,-CY-CR,0>} + cylinder{CX*x,-CX*x,ER translate<0, CY+CR,0>} + box{<-CX,-CY-CR,-ER>} + box{<-CX-CR,-CY,-ER>} + texture {T} + } +#end + +#declare BX= 0.4; #declare BY=BX;//size of the buttons +#declare White_Texture=texture{pigment{rgb 1}finish {ambient 0.3}} +#declare Blue_Texture=texture{pigment {rgb<0.85,0.9 ,1>}} + +object {Thing(ER,CR,CX,CY, White_Texture)}//main object +//loop through the buttons +#declare R=-4.5; +#while (R<5.5) + #declare C=-1.5; + #while (C<=1.5) + object{Thing(0.1,0.2,(BX*0.8),(BY*0.8), Blue_Texture) + translate + } + #declare C=C+1; + #end + #declare R=R+1; +#end + + +light_source{<50,50,-100>*5 color 0.8 + #if (Area)area_light x*Area,y*Area,9,9#end +} +light_source{<0,0,-400>*3 rgb 1} + +camera{orthographic location <0,0,-120> look_at <0,0,0> angle 11 } +//That's all folks! \ No newline at end of file diff --git a/libraries/IRLib/examples/IRserial_remote/click.wav b/libraries/IRLib/examples/IRserial_remote/click.wav new file mode 100644 index 0000000000000000000000000000000000000000..dbc4c2276e6d77c0e664c09741b24494e9f88597 GIT binary patch literal 19632 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 R-MDktAjpHqj2t}L^B-~`xpn{m literal 0 HcmV?d00001 diff --git a/libraries/IRLib/examples/IRserial_remote/remotebg.png b/libraries/IRLib/examples/IRserial_remote/remotebg.png new file mode 100644 index 0000000000000000000000000000000000000000..28bc82860a79fdcb2b70fc5b8b9a875aeae210c3 GIT binary patch literal 48875 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 BlpO#7 literal 0 HcmV?d00001 diff --git a/libraries/IRLib/examples/IRservo/IRservo.ino b/libraries/IRLib/examples/IRservo/IRservo.ino new file mode 100644 index 0000000..81d78d7 --- /dev/null +++ b/libraries/IRLib/examples/IRservo/IRservo.ino @@ -0,0 +1,75 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.3 January 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * "IRservo" Control a servo using an IR remote + */ +#include +#include +/* Note: Servo library uses TIMER1. The default timer for IRLib on Arduino Uno + * is TIMER2 so there is no conflict. However a default timer on Arduino Leonardo + * is TIMER1 so you will have to modify the timer used to use TIMER3 or TIMER4 + * as specified in IRLibTimer.h. Also you will need to modify the input being used. + */ +// You will have to set these values depending on the protocol +// and remote codes that you are using. These are from my Sony DVD/VCR +#define MY_PROTOCOL SONY +#define RIGHT_ARROW 0x86bca //Move several clockwise +#define LEFT_ARROW 0x46bca //Move servo counterclockwise +#define SELECT_BUTTON 0xd0bca //Center the servo +#define UP_ARROW 0x42bca //Increased number of degrees servo moves +#define DOWN_ARROW 0xc2bca //Decrease number of degrees servo moves +#define BUTTON_0 0x90bca //Pushing buttons 0-9 moves to fix positions +#define BUTTON_1 0x00bca // each 20 degrees greater +#define BUTTON_2 0x80bca +#define BUTTON_3 0x40bca +#define BUTTON_4 0xc0bca +#define BUTTON_5 0x20bca +#define BUTTON_6 0xa0bca +#define BUTTON_7 0x60bca +#define BUTTON_8 0xe0bca +#define BUTTON_9 0x10bca + +IRrecv My_Receiver(11);//Receive on pin 11 +IRdecode My_Decoder; +Servo My_Servo; // create servo object to control a servo +int pos; // variable to store the servo position +int Speed; // Number of degrees to move each time a left/right button is pressed + +void setup() +{ + My_Receiver.No_Output();//Turn off any unused IR LED output circuit + My_Servo.attach(9); // attaches the servo on pin 9 to the servo object + pos = 90; // start at midpoint 90 degrees + Speed = 3; // servo moves 3 degrees each time left/right is pushed + My_Servo.write(pos); // Set initial position + My_Receiver.enableIRIn(); // Start the receiver +} + +void loop() +{ + if (My_Receiver.GetResults(&My_Decoder)) { + My_Decoder.decode(); + if(My_Decoder.decode_type==MY_PROTOCOL) { + switch(My_Decoder.value) { + case LEFT_ARROW: pos=min(180,pos+Speed); break; + case RIGHT_ARROW: pos=max(0,pos-Speed); break; + case SELECT_BUTTON: pos=90; break; + case UP_ARROW: Speed=min(10, Speed+1); break; + case DOWN_ARROW: Speed=max(1, Speed-1); break; + case BUTTON_0: pos=0*20; break; + case BUTTON_1: pos=1*20; break; + case BUTTON_2: pos=2*20; break; + case BUTTON_3: pos=3*20; break; + case BUTTON_4: pos=4*20; break; + case BUTTON_5: pos=5*20; break; + case BUTTON_6: pos=6*20; break; + case BUTTON_7: pos=7*20; break; + case BUTTON_8: pos=8*20; break; + case BUTTON_9: pos=9*20; break; + } + My_Servo.write(pos); // tell servo to go to position in variable 'pos' + } + My_Receiver.resume(); + } +} + diff --git a/libraries/IRLib/examples/Samsung36/Samsung36.ino b/libraries/IRLib/examples/Samsung36/Samsung36.ino new file mode 100644 index 0000000..b4865d5 --- /dev/null +++ b/libraries/IRLib/examples/Samsung36/Samsung36.ino @@ -0,0 +1,258 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009I know prescription and no + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +/* + * This example demonstrates how to extend this library to add a new protocol + * without actually modifying or recompiling the library itself. It implements a 36 bit + * Samsung protocol that is used on a Blu-ray player that I own. + * Because a 36 bit value will not fit in the value field (only 32 bits) we have to create + * a second value field. This is a modified version of the IRecord example. + */ +#include +#include +/* Although it is not necessary for this example to run, everything in this section + * this section of the code could be moved to the actual IRLib.h file + */ +class IRdecodeSamsung36: public virtual IRdecodeBase +{ +public: + bool decode(void); + unsigned int value2; + void Reset(void); +private: + bool GetBit(void); + int offset; + unsigned long data; +}; + +class IRsendSamsung36: public virtual IRsendBase +{ +public: + void send(unsigned long data, unsigned long data2); +private: + void PutBits (unsigned long data, int nbits); +}; +/* If moving this code to IRLib.h instead of the line below at about + line 60 you should search for the line that says... +#define ADDITIONAL (number) + and change the code to read as follows‘ +#define NECX 7 +#define SAMSUNG36 8 +#define HASH_CODE 9 +#define LAST_PROTOCOL HASH_CODE + Also at approximately line 160 look for the line that says... + , public virtual IRdecodeADDITIONAL + and change it to read... +public virtual IRdecodeNECx, //Be sure to add the comma +public virtual IRdecodeSamsung36 //No comma here + And at about line 238 change to read... +public virtual IRsendNECx, //Be sure to add the comma +public virtual IRsendSamsung36 //No comma here + Which will add this protocol to the master send and decode classes +*/ +#define SAMSUNG36 (LAST_PROTOCOL+1) + +/* Although it is not necessary for this example to run, everything in this section + * this section of the code could be moved to the actual IRLib.cpp file + */ +/* + * According to http://www.hifi-remote.com/johnsfine/DecodeIR.html#Samsung36 + * The IRP notation for this protocol is: + * {38k,500}<1,-1|1,-3>(9,-9,D:8,S:8,1,-9,E:4,F:8,-68u,~F:8,1,-118)+ + * This means it uses 38k frequency. Base timing is multiples of 500. + * A "0" is mark(500) space(500). A "1" is mark (500) space(1500) + * The header is mark(4500) space(4500). + * The header is followed by 16 bits (8 device, 8 sub device) + * This is followed by a mark(500) space(4500). + * This is followed by 12 more bits (4+8) + * This is followed by 68us ofspace. Followed by eight more bits + * and a final stop bit. +*/ +/* Because not all of the data bits are contiguous in the stream + * we created this little routine to get one data bit. + * We then call it in a loop as needed. + */ +bool IRdecodeSamsung36::GetBit(void) { + if (!MATCH(rawbuf[offset],500)) return DATA_MARK_ERROR(500); + offset++; + if (MATCH(rawbuf[offset],1500)) + data = (data << 1) | 1; + else if (MATCH(rawbuf[offset],500)) + data <<= 1; + else return DATA_SPACE_ERROR(1500); + offset++; + return true; +}; +bool IRdecodeSamsung36::decode(void) { + IRLIB_ATTEMPT_MESSAGE(F("Samsung36")); + if (rawlen != 78) return RAW_COUNT_ERROR; + if (!MATCH(rawbuf[1],4500)) return HEADER_MARK_ERROR(4500); + if (!MATCH(rawbuf[2],4500)) return HEADER_SPACE_ERROR(4500); + offset=3; data=0; + //Get first 16 bits + while (offset < 16*2+2) if(!GetBit()) return false; + //Skip middle header + if (!MATCH(rawbuf[offset],500)) return DATA_MARK_ERROR(500); + offset++; + if (!MATCH(rawbuf[offset],4500)) return DATA_SPACE_ERROR(4400); + //save first 16 bits in "value2" and reset data + offset++; value2=data; data=0; + //12 bits into this second segment there is a 68us space + //so we find one of the raw values to eliminate that + rawbuf[62]=rawbuf[62]-68; + //this gets remaining 20 bits + while(offset<77)if(!GetBit()) return false; + bits =36;//set bit length + value = data;//put remaining 12 bits in value + decode_type= static_castSAMSUNG36; + return true; +}; +//The Reset method clears out the data however we have extra data to clear +void IRdecodeSamsung36::Reset(void) { + IRdecodeBase::Reset();//respect your parents + value2=0; +}; +//Similar to GetBits, this routine sends just one bit of data. +//Need this because data bits are not contiguous in the stream +void IRsendSamsung36::PutBits (unsigned long data, int nbits){ + for (int i = 0; i < nbits; i++) { + if (data & 0x80000000) { + mark(500); space(1500); + } else { + mark(500); space(500); + }; + data <<= 1; + } +} + +void IRsendSamsung36::send(unsigned long data, unsigned long data2) { + data <<= 32-20; + data2 <<= 32-16; + enableIROut(38); + mark(4500); space(4500);//Send header + PutBits (data2, 16);//Send data2 16 bits + mark (500); space (4500);//Send break + PutBits (data, 12);//Send 12 bits + space(68);//Send tiny break + data <<= 12; + PutBits (data, 8);mark(500); //Final eight bits and one stop bit + space(118*500);//Lead out is 118 times the base time 500 +}; +/* + * This concludes the portion that you could move to IRLib.cpp + * Additionally at apprx. line 39 add F("Samsung36"), to the list + * between NECx and hash code. + * Also add "case SAMSUNG36:IRsendSamsung36::send(data,nbits); break; + * at about line 238. Also at about 400 add + * if (IRdecodeSamsung36::decode()) return true; + */ + +/* + * The remaining code is unique to the example sketch. + * We will create a custom class which is a combination + * of all other protocols and our new protocol. + */ + +class MyCustomSend: +public virtual IRsend, +public virtual IRsendSamsung36 +{ +public: +//Note: data2 is the number of bits for non-Samsung36 protocols + void send(IRTYPES Type, unsigned long data, int data2); +}; +void MyCustomSend::send(IRTYPES Type, unsigned long data, int data2) { + if (Type==SAMSUNG36) + IRsendSamsung36::send(data,data2); + else + IRsend::send(Type, data, data2); +} +class MyCustomDecode: +public virtual IRdecode, +public virtual IRdecodeSamsung36 +{ +public: + virtual bool decode(void); // Calls each decode routine individually + void DumpResults(void); +}; +bool MyCustomDecode::decode(void) { + if (IRdecodeSamsung36::decode()) return true; + return IRdecode::decode (); +} +void MyCustomDecode::DumpResults(void){ + if(decode_type==SAMSUNG36) { + Serial.print(F("Decoded Samsung36: Value:")); Serial.print(value, HEX); + Serial.print(F(": Value2:")); Serial.print(value2, HEX); + }; + IRdecode::DumpResults(); +}; + +MyCustomDecode My_Decoder; + +MyCustomSend My_Sender; + +int RECV_PIN = 11; + +IRrecv My_Receiver(RECV_PIN); +IRTYPES codeType; // The type of code +unsigned long codeValue; // The data bits +int codeBits; // The length of the code in bits or for Samsung is storage for data2 +bool GotOne; + +void setup() +{ + GotOne=false; + codeType=UNKNOWN; + codeValue=0; + codeBits=0;//Stores data2 on Samsung36. Stores number of bits on another protocols + Serial.begin(9600); + delay(2000); while(!Serial); + Serial.println(F("Send a code from your remote and we will record it.")); + Serial.println(F("Type any character and press enter. We will send the recorded code.")); + My_Receiver.enableIRIn(); // Start the receiver +} +void loop() { + if (Serial.available()>0) { + unsigned char c=Serial.read(); + if (c=='p') {//Send a test pattern + GotOne= true; codeType=SAMSUNG36; codeValue=0x12345; codeBits=0x6789; + } + if(GotOne) { + My_Sender.send(codeType,codeValue,codeBits); + Serial.print(F("Sent ")); + if (codeType==SAMSUNG36) { + Serial.print(F("Samsung36 Value:0x")); + Serial.print(codeValue, HEX); + Serial.print(F(" Value2:0x")); + Serial.println(codeBits, HEX); + } else { + Serial.print(Pnames(codeType)); + Serial.print(F(" Value:0x")); + Serial.print(codeValue, HEX); + Serial.print(F(" Bits:")); + Serial.println(codeBits, DEC); + }; + My_Receiver.enableIRIn(); // Re-enable receiver + } + } + else if (My_Receiver.GetResults(&My_Decoder)) { + My_Decoder.decode(); + if(My_Decoder.decode_type == UNKNOWN) { + Serial.println(F("Unknown type received. Ignoring.")); + } else { + codeType= My_Decoder.decode_type; + codeValue= My_Decoder.value; + codeBits= My_Decoder.bits; + GotOne=true; + } + My_Decoder.DumpResults(); + delay(1000); + My_Receiver.resume(); + } +} + diff --git a/libraries/IRLib/examples/rcmm/rcmm.ino b/libraries/IRLib/examples/rcmm/rcmm.ino new file mode 100644 index 0000000..989a260 --- /dev/null +++ b/libraries/IRLib/examples/rcmm/rcmm.ino @@ -0,0 +1,210 @@ +/* Example program for from IRLib – an Arduino library for infrared encoding and decoding + * Version 1.4 March 2014 + * Copyright 2014 by Chris Young http://cyborg5.com + * Based on original example sketch for IRremote library + * Version 0.11 September, 2009I know prescription and no + * Copyright 2009 Ken Shirriff + * http://www.righto.com/ + */ +/* + * This example demonstrates how to extend this library to add a new protocol + * without actually modifying or recompiling the libnonstickrary itself. It implements the + * Phillips RC-MM also known as Nokia Protocol. Is used by AT&T U-Verse cable boxes. + * There are three different varieties that are 12, 24, or 32 bits. + * This is a modified version of the IRecord example. + * If you would like to make this a permanent part of your library you could copy the class + * prototypes to IRLib.h and the code itself to IRLib.cpp. Search for the word "ADDITIONAL" + * to see where to add various pieces of code. Also see the Samsung36 example for details. + */ +#include +#include + +class IRdecodeRCMM: public virtual IRdecodeBase +{ +public: + bool decode(void); +}; + +class IRsendRCMM: public virtual IRsendBase +{ +public: + void send(unsigned long data, unsigned char nbits); +}; + +#define RCMM (LAST_PROTOCOL+1) +#define RCMM_HEAD_MARK 417 +#define RCMM_DATA_MARK 167 +#define RCMM_ZERO 278 +#define RCMM_ONE 444 +#define RCMM_TWO 611 +#define RCMM_THREE 778 + +/* + * According to http://www.hifi-remote.com/johnsfine/DecodeIR.html#Nokia + * The IRP notation for these protocols are: + * Nokia 12 bit: {36k,msb}<164,-276|164,-445|164,-614|164,-783>(412,-276,D:4,F:8,164,-???)+ + * Nokia 24-bit: {36k,msb}<164,-276|164,-445|164,-614|164,-783>(412,-276,D:8,S:8,F:8,164,-???)+ + * Nokia 32 bit: {36k,msb}<164,-276|164,-445|164,-614|164,-783>(412,-276,D:8,S:8,X:8,F:8,164,^100m)+ + * Slightly different timing values are documented at + * http://www.sbprojects.com/knowledge/ir/rcmm.php + * We will use the timing from the latter reference. + * Unlike most protocols which defined sequences for a logical "0" and "1", this protocol + * encodes 2 bits per pulse. Therefore it encodes a logical "2" and "3" as well. + * The length of the mark is constant but the length of the space denotes the bit values. + * Note the 32-bit version uses a toggle bit of 0x8000 and as usual it is up to the end-user + * to implement it outside the library routines. + */ +/* + * Normally IRLib uses a plus or minus percentage to determine if an interval matches the + * desired value. However this protocol uses extremely long intervals of similar length. + * For example using the default 25% tolerance the RCMM_TWO value 611 would be accepted for + * anything between 458 and 763. The low end is actually closer to RCMM_ONE value of 444 + * and the upper range is closer to RCM_THREE value of 778. To implement this protocol + * we created a new match routine ABS_MATCH which allows you to specify an absolute + * number of microseconds of tolerance for comparison. + */ +#define RCMM_TOLERANCE 80 +bool IRdecodeRCMM::decode(void) { + long data; + IRLIB_ATTEMPT_MESSAGE(F("RCMM")); + if ( (rawlen!=(12+2)) && (rawlen!=(24+2)) && (rawlen!=(32+4)) ) return RAW_COUNT_ERROR; + if (!MATCH(rawbuf[1],RCMM_HEAD_MARK)) return HEADER_MARK_ERROR(RCMM_HEAD_MARK); + if (!MATCH(rawbuf[2],RCMM_ZERO)) return HEADER_SPACE_ERROR(RCMM_ZERO); + offset=3; data=0; + while (offset < (rawlen-1)) { + if (!ABS_MATCH(rawbuf[offset],RCMM_DATA_MARK, RCMM_TOLERANCE+50)) return DATA_MARK_ERROR(RCMM_DATA_MARK); + offset++; + if (ABS_MATCH(rawbuf[offset],RCMM_ZERO, RCMM_TOLERANCE) ) { //Logical "0" + data <<= 2; + } + else if (ABS_MATCH(rawbuf[offset],RCMM_ONE, RCMM_TOLERANCE) ) { //Logical "1" + data = (data<<2) + 1; + } + else if (ABS_MATCH(rawbuf[offset],RCMM_TWO, RCMM_TOLERANCE) ) { //Logical "2" + data = (data<<2) + 2; + } + else if (ABS_MATCH(rawbuf[offset],RCMM_THREE, RCMM_TOLERANCE) ) { //Logical "3" + data = (data<<2) + 3; + } + else return DATA_SPACE_ERROR(RCMM_ZERO); + offset++; + } + if (!MATCH(rawbuf[offset],RCMM_DATA_MARK)) return DATA_MARK_ERROR(RCMM_DATA_MARK); + bits = rawlen-4;//set bit length + value = data;//put remaining bits in value + decode_type= static_castRCMM; + return true; +}; + +void IRsendRCMM::send(unsigned long data, unsigned char nbits) { + Extent=0; + data = data << (32 - nbits); + nbits=nbits/2; + enableIROut(36); + mark(RCMM_HEAD_MARK); space(RCMM_ZERO);//Send header + for (int i = 0; i < nbits; i++) { + mark(RCMM_DATA_MARK); + switch (data & 0xC0000000UL) {//use the leftmost two bits + case 0x00000000UL: space(RCMM_ZERO); break; + case 0x40000000UL: space(RCMM_ONE); break; + case 0x80000000UL: space(RCMM_TWO); break; + case 0xC0000000UL: space(RCMM_THREE); break; + default: Serial.println("sending error"); + } + data <<= 2; + }; + mark(RCMM_DATA_MARK); + space(27778-Extent); +}; + +//Create a custom class that combines this new protocol with all the others +class MyCustomSend: +public virtual IRsend, +public virtual IRsendRCMM +{ +public: + void send(IRTYPES Type, unsigned long data, int nbits); +}; +void MyCustomSend::send(IRTYPES Type, unsigned long data, int nbits) { + if (Type==RCMM) + IRsendRCMM::send(data,nbits); + else + IRsend::send(Type, data, nbits); +} +class MyCustomDecode: +public virtual IRdecode, +public virtual IRdecodeRCMM +{ +public: + virtual bool decode(void); // Calls each decode routine individually + void DumpResults(void); +}; +bool MyCustomDecode::decode(void) { + if (IRdecodeRCMM::decode()) return true; + return IRdecode::decode (); +} +void MyCustomDecode::DumpResults(void){ + if(decode_type==RCMM) { + Serial.print(F("Decoded RCMM: Value:")); Serial.print(value, HEX); + }; + IRdecode::DumpResults(); +}; + +MyCustomDecode My_Decoder; + +MyCustomSend My_Sender; + +int RECV_PIN = 11; + +IRrecv My_Receiver(RECV_PIN); +IRTYPES codeType; // The type of code +unsigned long codeValue; // The data bits +int codeBits; // The length of the code in bits or for Samsung is storage for data2 +bool GotOne; +char c; + +void setup() +{ + GotOne=false; + codeType=UNKNOWN; + codeValue=0; + codeBits=0; + Serial.begin(9600);while (! Serial) {}; + Serial.println(F("Send a code from your remote and we will record it.")); + Serial.println(F("Type any character and press enter. We will send the recorded code.")); + My_Receiver.enableIRIn(); // Start the receiver + My_Receiver.Mark_Excess=40; +} +void loop() { + if (Serial.available()>0) { + c=Serial.read(); + if (c=='p') {//Send a test pattern + GotOne= true; codeType=RCMM; codeValue=0x12345678; codeBits= 32; + } + if(GotOne) { + My_Sender.send(codeType,codeValue,codeBits); + Serial.print(F("Sent ")); + if (codeType== RCMM) Serial.print(F("RCMM")); else Serial.print(Pnames(codeType)); + Serial.print(F(" Value:0x")); + Serial.print(codeValue, HEX); + Serial.print(F(" Bits:")); + Serial.println(codeBits, DEC); + My_Receiver.enableIRIn(); // Re-enable receiver + } + } + else if (My_Receiver.GetResults(&My_Decoder)) { + My_Decoder.decode(); + if(My_Decoder.decode_type == UNKNOWN) { + Serial.println(F("Unknown type received. Ignoring.")); + } else { + codeType= My_Decoder.decode_type; + codeValue= My_Decoder.value; + codeBits= My_Decoder.bits; + GotOne=true; + } + My_Decoder.DumpResults(); + delay(1000); + My_Receiver.resume(); + } +} + diff --git a/libraries/IRLib/manuals/IRLibReference.docx b/libraries/IRLib/manuals/IRLibReference.docx new file mode 100644 index 0000000000000000000000000000000000000000..08be4cbeeb4760dc6ee2f8638bf5aa4217dc8bfc GIT binary patch literal 151027 zcmeF1V~=P-*QVR<)3$Bfwr$(CZQHhO+qP}vw0q9;P9~Yj%s+UiKJ2ROs#H=t`&xI_ zT}xgH7z7yr3;+TE0Du7CRJLx{0}ucJ8Vmpc2>=2}OUTaF*~HdaPuauX#7T$N-NqWf z5Cn)k9{}jz`v2el8-Ic3fcW<{yBO%&x*Of{MC+ zdkWd@U@84JcmDy=|x#VjNksKAK<2dd&qX~$NtseFml!locftNaqJ z@Z-kbUQC%bIKeP0q{+qzMP7x>_n_veP*?r>C5^gG;bMA9V{dF#0lRQuaLHOo1H;^; zaE!P;{3EH9rgd1|w&K|p60h6OCFP0YInNilu9W<0Igv8ClslMklwSx8XUWIZhB>v- zZ%k6Xc}4suwPe)A&~EGY!~`m_;MXpAZveVbb=Y5)UsR7_M4T7 z*qT0$PP>i}fO@J`g*E1+GXcNkVH%el?#jBj#VxlX5Dr!N+PV1;H*sO;3ih!6Jx+9k zn5TJaMQhH3QepV-g1&qBKw<=PkVcvHyTzVGu zm5oG%P(v0#M$mnFn`$F!{+vagV(_uv5ok2)9oS)I>j*sk)2;uTkB`?x6nJ0&01gBI z0BisVKsP%_W4iwdiLsrLi_JfA`;V&qFJJ)wN!!1D{(HA!H5d__MCFTMzHv?7JrCX3&xj zWTvSW94ipQWCXN_>5rZd!O~T6EKYM3Ob^fephWOIg z_1Z;w4mlBL?Yu5Pk#ezl)e#iY%Go8vpfx46?b1z9<#{=zT%II#Nj@=gqtZi8L?66Cj9OE zhhp4}!Fvt3B#2$s(;|6hqE=OFzvmtGw$%?E1Bf_R_P8)z|Fndi}a&2!@Gd z?&X)PP*AkR8`Xc-I8OgKhbt4NP5{jXaYDjMhd_RN$TwoqN0+fKz5DiN)1>y^`TgwM z^m4wnJLMS7Z3}Tcl+_0HnV~)&2E`sCJVOQy*vYMH(ZPwf)g)AUSot&34;L(V(+ZA> zVvrA3DzsvYtu)#ui-$h#8)7 zIqoz{)9$_?K$f55@`F$b>MOs^TN#dHQ#j{zc%?+-Qvda2c*;ZH%B)li&N74Tb9uf& zi8;j&Y{l;mIK2zi&65B7^-bp9shpUZLX#sZhqR>T_y3G2=~Q;KP3`~yMtZ;i|AGp@ ze?^r4J(gViT*YFIC7%9*zT!Y>UiW9Fd{lOgVK&>k-ZhXEXki-FtD}z?CQ7?CM3&LY zw19)(TVd;it?PY)eF8m^`zFTF5i(XqvNc2*vynVutMBNfRZow%iy05|eLs~MU~6Ym zw^=;yeHd`hAxViEAx;y<&mw0Say%svR=e>HeGJYO0U)|#2VB_A~ z6;a1X=Pv!#4V^Ga-&;5cT`DReN}8Y1&4e8a{F(mv9HQ?c7yE1Rtf0Og8)M@jVuZ)- zI8?m1L(z1c@yB6L4x)}b3GxE&uW0ME+ewNV6yVRHuc=|CQ06f(S7qvgD|07@eULV- z=I{x<>s*Xj7@X=>keUX2Dc*|zlyn~z9jsBt`ym1xT==Tci*(WuP*owJp%YtkYG#@JYC#KN_=~`N99c#vu06QTRw&Pv1^(+%8fsLQJ%! z_dN8vhJ(82-o`u}P_R5t8Ke8Uo(51GI-26J`b2LHg@r8`wRh@trxu(4a!#FR99jw| z&4`i4&PCBv9lQ8ey8kec?P7i*lbWC(y##`5&<|e~YvBO^_@>4UhTq093Ki*Oa?Jq` ze(P5pl$tqvz82k7+fjPWcmN3IZ595-pvCRu^mV`AH+_u}O>BGI+nxc3a~67+ZE5fy zc&1K62jXXkglN@B*LeWT$rxXk8oc!ypdw;q!I!|y&IF@APTka_n?=D34xfdE3pRAGwmais3XN3Evzb>9@mSSOF9hhBxzSrf^L*zbGY2HG zNIZ(i#L5>r#Ld=e@da{&pjQkVci1Rphvp2;mbpHhCPDUK9%K+kIz1JAw^>j?5N@Y^ zSSoY>WiQm+PK}adhzcSNKHNaSA3Ye|mbG@Iwl=j$p!cZX6hT96aHAq$+>C)%3ItPw z*)Fq2=Gv81iY8x!!DD{dD%CU!m1r-{^m+36EP}2xzS?C5iT0J`l1+}ZiN#9r8t7&c znnH}0j&7goP>}geK9es1oqA6Ekp8X=e}Jwzgg@PBRA`0|yY7|tmyXGgh9>-rP-09t z&qtK`m-^03H8%1~*9C!#rYmo;&0Loh6P^g4x!FS(sLi)@DwIqE_-q(iC8XffKsvs0 z1RyPvSrXC<8;+Bw=rgVOcRs%iw9Y(z5!uiyfQ12GQWbfWU_+@H&y_tA7E3JxV@-6} z`Jzc}xO}o5ijz-96k_3o{~xQL|qmN*!rtyKZc~1lacw(TO{W*>g4><)@x8ccv)b*y2ZrZZbNLz=y~greqe4VP_RD@gp3n%QRHMn z$fH=#GFtG!B^qhpy%Pc`!k7}1((>^dV0Z%k$VbXA=v3RS3i#l z`Vs>8HuxmXta*a`dvy`YY*;I4H)!u*l3)oSU=f4C?(_=<`#gTh%y{PLjkvxT^{REz z^xzpK@63@xS;qtTI7c`2TO)p`aqvIN*P3Fv6@%{5nejbHVB-r#Vs(1hjFYoUfOhKu zS^3#*6zRRaD#~YQsVwF|ihR&vLaCm?-S87V_Tmtjrh_>>r@P30 zv%2LLK+fNkGRmy*tpnuf^k*{zHnoAWsj*Ji_M_X4nMMg&?Pa6k7by(9leQ%L+o$Ps z(pazHNI(pKvSLF;CVvltA9|uw_l5)3;9}wQupwP*wwU-|>mF-cAwHhZPnMEi>R&Pc z8gq<;2|`V9C;3nvc&^rTf8^%dkBn&yWgTyoQKOoM!;3x6ktT!uMVX_zL{mA*V)U^E z=ZZ7lOL8QK+jwJijiWz(>`_Vw^1e}T(9lcox6+h!2%W)a^uv3dfnIE*bKV;E5{!4J zfVPbgp5)sC0yH%Jss`8iEegqceyhl2OUbJcikzk{^!d}nM=huyWXt-AEGRyupaDVz zA%mb8TNN@-_Sl!IZ*4?g?d+#K+A-cHHAuJ5Z=LANApfNHV-NiB_MDOH7k9)VI)k1W zDlQ?+Y(e!0u>U# zZ$a5DA!%fcKh!ojSe_4yPF4(~vA7l#UMz>6(A?kwc(!l@Uqn<(x{7nV@VoLZZWW9H zHoucjd9#zbJCx`V-^3x!C6s)?CLn#3`5B80xLU)P-RJeYKk$Gg?*8$8fb^Xc+!-@u zO~=k=Nb;K1bad z%Fi*w9QvM=TKIkr{pC`2-O!71*@nH~kGL+5ugwG!k2z7LR88GaNE(rJ9&}Dv5E20p zv{^LgY?C+5=q=y@O&7qM>yhSo&$M)a*vu!5q*d<%7@1tbl+*89ih{%izs}YX=Lptr zfC!KTptQH6a;CjM%1n;elUCkGX2L7#v1Qhe8z+kV-)x>2}M+Sv4C;-p1i7DUUu9X?w}LZ z2@WgKv^%D z0Gju$m(w8-qgKG4q7b#1d~;_oyQwL(t2=}nA%@zZMB+d_c9FdKe|N zYK0&<9lJO3*Yl9w@aW=spb*bcGDyT0)8Q-_;l2(c_rck5Ab7%CB(Tu4<}yPC$CML0 zRXA<{$L$Qm3^S%W@E9&EAueYF-CLKs1TtXU0E>|QVEuajDm_7>fJm;E2Qk@ti3Xqa zwO#!Tpz&&~Fc<_PLj8)U>R6$WSD;H+arD|kHj|X@(D`tCXyN$)LaFg`_!c`&RIab< z5Y%#9aa#`=N-V4EaOWp>lBmmfsKk?bu7pz#xxVvzp#Dy1{8wqN^Ef;SNpq`}A1`@p zXug*bQ2CuUwWA;jVmEC-EgW3n@0Z`9=zhLp{1Bi7$nROu&u3a0Rl&VjKawi_hLS`d zZn+VT@^L45iZ1lqlfe5JGfvH))A(rjah6p|Bh18|y9zLh?ge`#Mho5E@HcXNTgOH| z;fkjpkVHb0!iKmKd`4JB!3Ng)?4sWAQo=*&Xw{=YEy8=_T}uZ9TxWgi*G$XGxDBUt z+r@1r$i{=t=KH}(-S@HMDEWviQ4lN9Z~NiB7gk7ZGULv0*jcb5Xenc3>qOMp{8U*` z+m~bAc-OAKCX3IhwbS65#uk-;?bDH+wXuCvJ~_@s#-sWlKhtR%))6LJBup_&`(&J+iOiYGV)X`Fv1r?)< zpv5_=%MJ5T6vKZ_GNWzN4&1>>NUxMGv{ylhA-gJV;(}B_6N}>40Mm**SIpQu?ik>i zDLME11p|qZWg3&tDFVMTyXZv_qR}#-w-Eaa;cpWnh`}d#;88OaD|7sNJc7*-S_E($`pPmW> zz)*+qoc8J+l%2({d<+$o^-lX+7Y~l`XQ2IH`-rOB`7VQ#htCOVnup(5hb^>rjz9-F z1fuhBP8#C7yNKtSUCezZX+M9u7QGCW-3{<;%M~(4MPfoa&p8>rLiV{_d{IHxQB47DPan&Tc`E` z*qK$IVNjP=D{%=g8om7aXb`#C7zjc3_+HWycQ$2s8Iz+Y6i9CiXv2V$LuLWHEO+5; znsfYY5S0Xokd{KiDG-DtevY~IonJ7MM?wLSt+QWbQJUlI5BZUbMv_n0W7i>OKG-q-95jmbi11 z0xClVYB(GCI>&~8k=^a?$DxbEZz~B>25^nl(P^TWr)_*@*BZk&q}_q2#=?>qIJlb~ z-rXAXLnIb8aN;|nfn0WQnOPZIJCR%8&feU+e>_A;R-FHI$#mb&qp+>fMcZJ)LD2iD z?R|;U;6{F99uG(dcRsI_!IMT1+2abf)m+~@IHTL9CL|RlwHu_^>)){gnm{11mtY~c zsfDvsjIKe?x}M(6)Uvx)!&%jC%CMr8al1CWs}&FUYm8l7oA#@y9mmhlXDTX*82Y8u zyGxrZIowmMOo+Sno8q%Mt_hcRH{ybj)aPbR#SKEe>r?vz34TZUDpYoOJJ<8Y?MquP zS*Q!zyxj5x(%0usi0HRuGNF$~NFrCrnd@0u25Pq*GhaL|z#nWscJ z;Ua`G2R1dsCqCcbzBbu)DaUtG@VJbJNF()J@qLckF1}^ z*tw4uA;!{$omX#PFY#Ssw6HN79ETic9W%hO)~0?!PlxsA=3k5Pb`qk#pWPj9EcKO+ zt;Z%>;$G9C2fP>k-=5Ze{)kZ*(o4IwhJe(hH~p~Fw1f%Ycm1L$SNF%A16g%z+aOig zA>Wz7ZPW1$?LAaL)qpquKGSxN(H7qR8bje{nTK6cyQzaeeQln3zEDk3db)msz3x>x zABKq2=M8~T1vjG4I`-wptnELqH>W~gYn3^Jp3JkA#q81_AxEFH zaeuF&{~p!6L^YO+CL~E^kDWHDKtvP-#$_WNBB`-Dkkv!0*|j1h*R8Equ0S3k3A0{| zp|d9`X?|5V1DWH&Y8#N59j)Q@{f1$i*>Du3L~>F?5j+)RdMzDGVRzYFi}*BIvP@Mv zxjHIY_P6NS8n1S5dscMJENCJ3GfCW+ z`c+%;1}u#mSn7EM!yPjs9R;oSWl*0e8p`w*gJ142h;YP?dudZ)99xxnK28LnYY!34 zG~0kf5fy^n21lzTLc&t<}RYnAuQF_Y@&+XY6*#yu~y0Lo&mT8Y9#Zf#N zd`GfysmtZgjvZ^Jj8jw`!RR-;0>0O#9QB-<#!%vhZ$-Vyk4K_OY& zvcby#pp(Tw;u{z)GRC#I1yrfih#h}_k_!_(&vVPWF9sQgRKUsS@n1Gb)*`i$_#azD zux212Y7>D@!xt^iU3MyIE2{5ILgv9%(yy_Yb`(w(cjl%*s^J3pBC|ivxEi5P<;>d4@ds$I1EReM^rqq&Hy0{)Jybn4x9V}=K7O0RcmZob*mES>? zw?{!v!E3=I>0Y6kXv{P_u6Va+MrCsc9f6t66&o_59qS4*i_0{glJhJ^xTDXK<85h6 zwM%*QhR%@_PYh@Bpz&mG{N!KOrF;?!SbM%P2IvB@W|3RVtFsYs&K(~La*?NPt2<7j zC=a^RvDd6Pv^pzk+dqTVh}h6I5JOBWf*`W4pUHc&l2xFoTLYPrqy~tzqLS1Pt&YL7yQj`XqQiN8R;S~ID-OXwlAj|U$FnhtO{H-YMx@%GN zLnbDi#gdbz0EfB~`BnI|Y)qK9v=k0X#np69QYpeBk+9Mtl;VO;SHh4&obsin=&u=e zkjK*GlKOjVncKwCbqP=&QbqO=8gWH_A=M&zmK?~Mn1w#8%*vi@&F#%5zC49L>cN3s zNJ**IlT4Y}>-t8?`x(=pClb0UdIA9a3AhBw#=3r6Y}Mu5nC0cvfm4Ngv$YHL8g`v> zDr)cawNZ#LG38$2B7|>(Xl2B+4HF)v>-kE(LTw_``^6=AKU8p07)j}=_OO$h)st~J z*BK)F_=w7>BA?QXH*XW5DQ~n{7FK=vaE7t+#=a#FgZBaK0mZz6WyG-= zXkK0er2VaTk)#SzZWYbgyEzp--I(C|kR_?n-{IS>>Uh^gqZqtve<@aW{kLIIAtOd{ zOrss7#`R3ph%0WPmI=iWL)XhO=Rn*A)q4@@X)=th_pnB~&VKCgeq)z!Z_sm~&&TDP zLssZu+wGut9B0*-;DE6sJvDnL70yNpkvRJbWbjFzUwfG6=At|Ne2z7S;ycHF^HMDG z7o&Y5AFQOz!szws`Y4BHH&TUJF|h>7X1Fv|;~|$tdVw2MFj|?TJrDdIbJOm2Qk5$b z%_5iDpd%&?b41sAB;rEp@Y;qypTYEw{Q3-$4BpT!iaz;B^G3mdf-9??2W1ObmvK+W zV+|S!biX{;aG0Yp{ zH{!#X&aA>j;JB#*B*Wy59OS$^5NbfE2m~v=)Vl>P;2kS0@axfi^~MQfvxtBGX8i=+xY_H>KxIQ-1b=nmL8!$d1Je=V z=Z|pE8_#bDAMwYw-H5`^ilJ!Ctx=A|SJ|-u)16;zaL=GC&0Dy}-%Chg?Vo{iEVaRH z(O9x0wL@;FA>woRHwd6}lSkB(MNbUFl>y_jKop=E#4m{?Pa>E3>)abce7@P{)NL~! zdKih$kgXDVF7|Lan>76I$JgD0)Sg5#eFi}irVkY|-)CuO#(Gec29xe`x1sk9P$kSA z6>Y^xfdNK*zR?z8v=pb``%N=$d|FALT?#jW2dS|2QL-It%<8xXNHE}!$K!cjdqAuE z^Rin983%IODlhnCtujVI?D{#QR57J+aIx)mg)$ST&#>P)F_&*ofd@k*8~X2O+fh6k z$$zv>MBwU}*QMEwb$*3OC&Rudq@y9){QHu}NSH#b)1-&??Oh$L1fL7AnmV8?B#O5M zLg6|Q7XnpGAkKpphi62RP$Z2&4CxjmlthCJMB7|iY&B?6_A+?%SvHl^$f&1YB@4}~ zVp<#usrn8L<7Jbg*nSK7&uuFOws z7A{0mEU=Yw^uN&cT-e_lA49ReB}-GBSM?GuznldaW zn?E2760v2STn;yQk^Y=waK7y;l?HHx3t@&-=?1)jrb=o!!&o*0s56-jCZs`580XV`pNIF0E?1 zk8pm~9-?dFtdx6Y_q-a{NH*(~SJjhWlZ!4adl}}fDNb+)X*iLj zLmUT!Tb^eDGqvg(8I91s3vf~YJIKA6O|Mipm%S%aAktZxj;!B-SWk&xmZ3w0sC(9% zXRorFZdcwJEv>@}CjSbSQy=}xh9#U3qQc94NAN%*k z%Z5UXK?lmJEuL!6jLu-CTZFQxB+)9gmHKMITZQ;Xxp^4w~dHdQSZfo5%=N_>qsTFvSb(8BtRG$a@ zi4Ei3S`1T9+HnpyO4TP%t}^%Xhd6+1B}38_*T7Prif8YHJ<6F^0s}6VzdPt*u{}` zyFj4mtD-%sYAEuDABK#K-K-nhVv>OeUo1i6&v7_3LhnND%@$#_)ewI${_o zDQ|=w!)y4_$HCE1&{$YBi4-M86zK`Y)Zx7536n|Nnmbk0hW#q_*xyHjat!-!wJNg{ z;NNQjXF#?ZtD8ruE{l6A%Pw(4+6ll~Hw1Lq-P7?rYs5xXlQM580KDaAmxwknMgai6z<@!6^V@5@+maFgiVD=WZfdd8Xpsiy;!iY1lv-H}8m=VLEE5mP1Y@v8f46hg( zQ5Q#*rj-u+B#varI|SMuSYhxsiLv&Lh0B=-g>M8}$>N%lBg@^Bq!N8pTkRo=lIs9DT*y{JPqODGu1T%{;Qku@{wxgr z%5LFiMXQlrN{5qor%F|a8du|sGHSr;jFWX8-g6*eB&@C2p-0}E8UCoSR|PpTd*kEN z)!@>PMMs;kSb`>WMi}{5;Yw;dsRc}E6DW#BK+*{q$?0PEdVJWU#<1Mc$6S!$8vAq@ zz^P8dYTb>}X5h9GZm;Iyu0l|AF{ug-rO+y3AQMBed&?3CLwg5f&E)zlM zAVAJn$XQ-Hz0Sgiyb2<>@q@uTaMJFLi0L!Lt%fyWW_6F^pt?suzIlYwSuc$kO5jZ? zTvWIkvx)4iRmT$@y+fFhYnL+0@@4t;gdaVZnL&xGNd&_fuD%e+ATQm5ni=q3 z!W-&>-qG}zzdnKhfxV+JG!fVg%Vo=py1NYcK$aRz=Fcwa4r~ZkuBk5uJZ4L~(9IfK z_R7S>0v2pd@72hv{N=9;JgaV*s{fH%BJl%nhQuiAH=DEm+r_nEk){C@qf@-G;^sCS zoylB}%j5nm?1Fv*B=d7As-ju|hcX8)!rCp{Ml^Hg!s@e(MZ z!KzvKn%NOG<$PL@1S=i@UbRZvzgM_lg6reJ1OpH`k_jYx!2-~6Ibf+JuG1sz#EuLk#N#a<;@juQ%} z?%Kdz*~Ctmcnfx57e-_*aF1w|x|I&=ER7$X?igP$$Gt;Th%?zM^#uq!H$a*~vS)I# zZB|4yJNS@r?3n2kMM&&n5>{eL-!K-+A_lh&KNdvfoJGkBpUd4ZB$Z4GfcWc_LOdf~ zu5ll#?^{(dF-KKYFKw9pQu!`FND14cDMx3-j?$oyG7g4}v<1EW0&Nwj4BdsGouEc* zk!MiT?Ycg4VNWr;!IS_4xT1080VS1u&@Ae#Qmzcw@?N(S)M+qWYSW98!gXxE@PJ7~YJz6tFV_MaXVoCA=Pc_>I)+mtsn z71!QdYl49eGy^qgNiRJ5%}`m~`hak=93`n*$h8hS^QD~UhN`hUD&e(cwGsmW?G0Rz z?E72tc}H%iB+D9NnG&Xe0v_}yY-nxGgr49Z2 z)PZPuxPL;*;p=rtBd}0e^pUtss88nEgY3B3$vlsl&lkpXVmb*J>X1%O%=&Zs@Nfhk zhw)zJ-qvqH7x^mF=x5r#%y0ZEhdRBKV6YJJ5(c)w^)UB5^5Eu%%gxOWurom@nlR{( z>plQ#>GVSdio;Ye^p1|zo$xDa_e9sok4q|fl&lJ$DnbeDfE1T{=eh_)qpjJS^Us`m zDI;Nf58J5Y(|mmKv-r!&S`Yan`;{1fRVM!$%NEpn%fKYP(SBQ24|wO%#v^{lv!BoU z*(+Vcn<4vUl&RYug3HZ*fYJbdON~SHLNw10@Kb5qD}CgczI@vS{Ux6Gb04_w|9ho( zTsLI-2RE*7&Kj-n^@1#hK#9+jzc6TRsr~DDqR2|yr#rWbQIBnAQ0W6EVjbVN=PjU) z$LH;BAs}@j;#e<)zc^UC=nx8yPR>xVX8Tt7p3v0MjQ=eHXoyn)$0ngYm!)HF{C>0A z%o5ga$%zn{Fcy-;^pwn_Wlk?YZwUr>ENVR`NYuEY?iuL_4fRVWRV@_910pRiScdzIBg;~~I=z<(UdNgLP5Pja&>+OHuXwwm^ zlY!HlGk8`l*?80}*vcY>wbOKqD1F9=Ff87 zvbl~J9>SZT8i$ZBlsxooBBpubUI|SWO{sc^uwIOd9603_Ia@dCMqG}DoTiH&kRSit zkc*CQRL)2WChD$FOTCDQ+N<-$T16z0YnSja>Nt^jt3fH`^JPsq@XzPf*+?r{z7=Os zG&?5H#Mee}I%_vm^gz_Llkmtf399JI`lN`(zfKxi`pr{fEafG+fr4yvGN-tLsd`U* z^3`!`Fs-47Fq1_+khfPFZo()XcN}6nXq-d8P#f2TvA1%d?RPL^G{&0*fBZp?21iIV zNUAg;U8}C{y{l~KtYnRe!KkCq^PoVy%sT9m*=?Py)4K$wdCW<}Y*PgcZv}oiE4D75 z6Z(5G<@lu~1sc#x&6v)#e4|+zaFaHIbd~~R*9=yR0?((ZPUv0f?Zf2f4SAl^&FksH z*c5H~^hZdJZY6&WIr0TDj%`9op8U~ZN-#m{W>eCHW2??;!!wD>_ApTeAT{|tc%-~i z>8h4qA-XX+wFA^l_Op>hd%9DXa3@XsXfsH0fH9%6j``NvfsK~`M2b`50ZEOs;uwiu zWrU1Ed*Ve2JI+p{#grnyxprn1*9Ego4pZOUwOYhWA|V1mP(`bTGD985fa9!*rxIx< zJ}T<8Y1Y%eWfa;7B2h|@3i>QZ0X%RGC>W{?N}GcJOm#DZ$469k8ne?XSL=4Ne_@!aZV{%oNYE`;6)lO5nbT+E~6=ctj z?n3)nr4w|ECN|1d8O5Ihr!n;k#Zb!p_=lvE+%$@DC#LM$dzAi&18MBp#t9Qlrx15u zmNn|(;g-?%@x`%*C@fvY#S{Va>=soef9(?; z1Q1;RwzXaVhAj3%)@kzg1vVqj@ST=yu!kldhQ!4V>o#{7ftK&%I+AH*!nnnj4FF)* z9&pTW$Y#yNY`khup5dc=D7)oNr#H^*^G$~tjfRRF>KofiuAv?>?Jze3k>Qa_&!Cn? zx9V=$a33|#%{4#lf>!e3F=xQ>nu4zla_W&dv}F0K5}1L^NLl+>=``uwY&9yKgBHEP zHKB*iV^R@2stPTY7COYWnB}{=g)YMgHr?XP$Jcsa_|0I0S2IeN7S*8pDsq>WU0WC} zn=k^8*#+F2HurGA7p4PanRwMKA)0q z6^EXcMce^!6am+58ZJ(!sUv&YE~k>k%WdW~ETx3{z4}0BwfJ$zSpySYa zqIO1Gx5i}@rUlcT6eszwU3&!SqoN7O0o=0Okq%b17BU=O zBTt(H#ejDw;AKwfeH;n_L#2VGJ+O%Xwyqjk-EF%xvD@l;O&3mK`!M-xn7z09asApq z9=y=u?fsnGbmi^sLLbj9sqyu?_We3LzM}p8eE&>J`x$)?bGzHQGsD~Kpr)qQ2$$+q&Gb3& zT2D0IVjSNxI=NxskM{?M3^icJr@5KyxX7XFzgrUcJFAQRsC}m= zbL_QeZ=W($THJcpGz)tT(8G#Jh*SalQk`KJb|mW|lOwP9t!GBY*Z1~z>gNYNUFe{0 zc_(lB)TzoIE7QokY+-L?3UzqQB$0679Brdh^!YK~VuSwFcDiV1E>0#YNd8`}73BHl z+cwGpz5pWvb-?U>?Cy7#Q@i$EBXKi^>*>=-7oACP(G>k%bza4tzs1sZL05$#cy?t5 zyy%o)KjePba%bU{HSA^TP#+~(fUwL05Q2@xjsI<6A1VI+$2*s9ioyGBkB=kQ#F9Z%PEk zU#W~YQP@+dLjBDP(*zyya8G!mhS6fhYhVo`!G5V4Gxgo)av#y)anmcup6Em}uwkOR zhh8hwd`5sX_gH}#W)}XLPEIO158C8F2!B1w5-0E%6)glW_S|$7yp%+&d$)><&fc3i z382e1N@UDB!dwEP=GEIY-(Huo3=1k5-UCR~yw(GdGz9ssmm*(??Aw$3X4=MQr7znI zV^kr+qY=CnlgF z2e|3Uyyu!EJ=@x@hSJqZQq0J3er&V_J6HpEh0vobyJz)~)4zhmMum>tPTRc)i zd=Gc*TO80jXIJk`uMCjVh>Hm0bUJXfISo=p6PEX9B34@QUkQSFp>TmkPHFbzrK&=h zec_Ap=!AGdG{{S}{kcLB3QV>TKwM$NeC&Yi`3`5|l^NlX&~f9PTG!qZPL>UZk@TsS z@E?YUT=PKh<&hE+83G~wF8K;iMHNvb^rGY?{myRDC&<+FQiegJ$qArNMBXrz5X{xzbc_Wj&bJu-D?G zCu1y+sPjn(fvd!oL3c(xSn1zIX1LP|Sm;*bMF6;Vk`9?cq*{lf(tZmL9AflD{wp{L za^0NCrFB;Wn6*%A?8jsS#Y}5XY3nlQGad|(#^r3MX42B2YkJM1U({HhM*SsbT3l9` z*tlD_V|o(nNLpksR=P@MF_WQ;^-X&HdMWP(v37+wlSA`I-G0rFexnRJ!^7U=*p?>; zvy&J2`ezh5+j705rX_b)=Bw%LHEH_L4BjXN$E16L!+JT*OGfFNg@q(B6~ub`7&16G zT^zibW6YSb5UcT$)oj~4d%1L+((hYDTR5iP*Wt9>BM>tqpPjqI=EBOczxKeWNvG(Q zfuLF~3g`nT&~lqOicgRo?XC7EByUxN+%Mtvj*5mTnzR9Op=X1_>`nA?BwPqAK<1%| zpQ;z@v2;vH`D4UmjjC+wUD;S3vtHVt?&RHl{~O>l;6R!=vYejgD#?>CXPgenWNE7T9rc>^<8|1-1$1q}v~ zmf!G>ol8pVeFeYQ~tyh#A?4hq>L~HAwdpsBQrX$S?cP(8UbzA{y#cTM0-}Nn3pKK?PS!A4+wzoPwex2tW>iNZ1D4 zG)Z$UL7$V6x*_=YWWQvkENjVeW}$~@y23I4y5L*5T`|^~6~%M@c_JF8Qf<0RB}d$< z8c7!X6eTbqK!9i3LR>nzN7->IhqKmFCQ~R1BG|Ppl2_`FSQ_Wtqa+E%7i7B6} z2*5d15S3F>w9Jl!aJ;rk2z8z~RF1!pOBYkxm3w@U-k5fYCFADL04Nl)S zG<;~vB2^QZ+tY#5^*ev`M|VCBq|t$;qWqXg>wEZou{H{AOur8ynHy;wDupJ@Lpt4) z@Rs$8nv|5>bUQ1JesB}xMto^mrkP&019_Dh4O}TQl{U&byoG)tc{{}Rj15b^3LPO< zCSSPtGbi-a!D@; zI=d-2?`f=Sr@Tnmn~44EBf;Iw#*~;#>l0W~UX~3)T`;)CWWNL4J8X zh$JtM$MeVW1$DCZu0is$RL%6mMk=87b5UvtBb)1Z)=ps-@D7lrD}-{H`M${vMGM5Y z_6zk@b_s3mk_h@kF&{vo$i4qlN z%r+5NYcuhiku+I7MA0UBT2rG)6I+avTL9Iv9uZ6)TMa{4HH*$f^}Pp6QdD9WS}UN! z`(7E9G;L50CM7l#+WQ|;(`<64s}&`7<^^kRQPrRJ8wAoStN*=OnQ*d~!5Nwb`jvAB*)vsT zbvxYE92=bcOrO!~ z*ncw&$g7#7d%S{s53Ibx#r?c+LwiIh%1+gaH?zIrk=pBeFv^F_bm9@z&n@>W{T~2Z zK%~DfcuiVy*7;Bm;gRS5pvxmK2z|(me?GWk;t`h(Likw1| znvc9o^{9>QKItn~pg323x>S>yM+yNkVFYlrM=)~f;uH7tn%~NgcfjQb348S~-q?$0 z?}Jp2mKTkXD67TN***%vnrqlv%a*P+8-c@`Gsu?KY0BoXN2U2_PQ$b!mIj-fUFbCAAOH5^u#22hBPgGAp_6y&A&hSqRFke#H>!49 zf9_Ldl$W(NQFDmiXF+t*cpa#GD?iWSQ(aqmc>gw6Ve&m+Zh4V$>7jhrto@Bc)M%i< zAOk3gYW{2XuIb(RDe|pVo6pyh4hDUIeX@lUX@J5}idqH_WE2?KLyF=|p$kFu0xbD*t-$4roi zAZ6%E#Yk%7sGNjqM^TTNq^_ofQyubAsiw0Imn!8|bW|XRiXEzVb#eN?F~ zwi&xl_c>_kpzoslbsvp^6pu3}SjpQ!nt+hL!EL8hofm!c+N;YMCHS6?-?7JPfA{?h~Gwngg^D#3`Dt zfunP*gZ}j5ut~q63O1^nA($UHV7LYa1O~KtgdsID3-ldu6vI=)ydG_tO^84QgI~Wv zjnite`7rTHQ7|@0#crNZ5MdV7VqzKP?a_Bj)}7dJsD4*hW>Wg8;^7Sk=&lx?r&K}Z zNvM2hQqNqxP3ZBcwM)$R*!PK1E)Aox3u`;o&Sipbsb#A?Z_(gV<*=(J#_xa1ysRrm ziCO}ax@PGZhF4=^yTpQ7vtQBuYT&ANXffH1_$w(_VBg4MY%scVZKyqyw*E~vWOU-~ zx2<7^2m8*TZH+>ygR|bYR-wjtqkWCqb~fAAsN=oEJvD}(_Ro$!zjwCU*1TW8?K|5o z48(sruiMtDk9(&d&-RbrA2@H?*0j%ir(e&GPmaDG?H_&48@l3VHu^^HvGtYCv{bSr zus=(P(v?=8AP>jnh+oR;uRwTa)zz5Qs=5a?H`XmB`buH9>N#IPD5KW|iDuThB;K3S zJy@3!BVB&ECLcQu$Kcqwu^E0q&6C&13n{f(eK221el@>~F2>7xiyQTcG0@`Tbyh$X z*L-uH`qnGuBzF=HO;J5?FYygu@;IC_srD6E--u_O`r@&#zur8hr}c=Mv5q+#KBuV({owJ5Vjo*``~gNE!fDU> zsMW>ChSdo{#H5slc?G5<)=70GdvIGax-POrTG(;EO;r0;j+>p=oA37bYB>LWL%iOn z^in~PZz-0V-b_@k)w5T^Oi{Jc#pe3U9p@J}+8GSqZnfpJ=Dw2=Aa8eS8Yx)c==U8b zdEGDe@?krzFr4~3!PZvaNwy~%%omusY_Jmy*88)roPP5?mR?tn9MH>4J~8p~4Rd8< zFK>wx?r!b`+cV9IpKn#N)}w5&UG?3st9Z$iH2<4QZjGP6)i!9%{DXew02m4%1P->UT=|s7U}dBJ5bk=gUELo{VrtGEkP&7_8oixULR;eK0JL%G zKQ`9O##lw0Dz2AMs^K_+Ki(-D@}5VOR+cjcGjQ*Aklx!eM5kyWx?82IQ$ATHU9uq~ zt=?rCePfk=V{=BnbPJ6Bbf`s}PI^PBAZjBFGiAPYbyxq6z9{*8EOF#>kjRAi2|}PP zRQu{lo9h;f$P3LaiA@lG$E>kl(!uacIuN8IN^IsN3}*m^CGWmbW0NTu#YZ){(Zh8% zIAIjcxwWRg6;U)cv>T8_rPlh;;zDMB3EL*pO#`{nyqElV;}?(x5u)uYHzFp?t8oa8 z#-gsB@Y#BI%BHtrSv+=BkfX#ibEOgeQ_%-0^2Enppu7t0o%+PYeq=$t#8&5^{ZZ!t zASrq^kVohs$&PR@MqVl#eE~L^tOwzRkYF;5pH@Rk963GbT~2EbKtUyZz`bDRhShA% zNE507dyiv7cs%L%(!H(z|NbIkbP)7IU}A9zwV2*^_joteW4_tKSn`Nl+y1e~%n%k zbyMjTSHe6faQbP?K0Wl~VHPj~l^q$m}Q1gaX?f*9mXMYCu ze^#mAiic?F2~;~YA&Dnp#E_g22bUFFZA!K!=m8seouE}gFU5@qzFkefOfH8n2R_O} zfKQ~X#mX?j^Yo8WhFsNAhzjzd=>l(yl~F5f%sPvgBGXRe3s>HF$o2uR-3F zbw!9Lp}Z=XQJrYXi>>Ur%*%|WmQT=>X-5fA*&=S)AEN$>c`W> zZy<#6pN!O=^jbqckmY#-+Q)T9-lv7T2^uy|Uo5NA!d@h~XVFu5Ym6nE^`3%u0G@NK zQZK(!>CHXXxMIdS#&py&3hgy;ErRRNGM|qf|B92}F{Is>2Wz{>LZS$O+g|=G-;0{&v#{(W!Cw*!;w@gS zXN6v9chhcQ@Qo^Zu-mL0c@2L*JlMy!8rb@=hnCQ`v3d~iGbJf)C@O!u96@y}@YM3^ zJ5+un)?m{=(chFRYZ*-DBwNCcF$PK2TM(g~4V>X3-|Rk!2=p!Y0-6#EU5r z!%|3%%aAJS&=;8$7~MS_dR8?uQjFdtM+l1;pJc*(5y9g+9jvYsZ5rdy&D!2JyIn^6 zTxC?eUgd`oblk|su1x5;Z?iJ8dF~~X9%B)pK3nB1#ZqId^j+C#PN{vE-Y%glHIX$p z1?;eb>Ch3vwRs!Y@aN--JVZ0IRN!JMYI#+5soKg~_YLEm<9EJ5Hux$O8eO30tDC;7pi<}>6C3@_R-6S0Q z!?UB&%tO;|N!o>c7xGU%{ktyGyGZXMedaLg!D{r4-0#^( z$tq6QxO@%=ZD3D}@}svnhv1~wKMA-B^!~{F2yhxcfvY*5&1MP1laqR5U|i8o za3JP=@VHimF+_no&Mw_yn#F`wMK?eLhzr2Hm)qeM96T4^jW-G-e$w%^KN|TFpHAw> z?Y~;w0;3enbokwiVr$e8MD~HZrI&#NCAiD1-!_W!BBxR8q zT>2Fic)z>xSn$C$`}i&f2>D}}HJXySTgmq%^#U1O&7XvrN8#5fLz$eZo6wjku#G2v z;E!CRq^rx71X3{pV9?RY-rIDRI-AYal>%`mm?5JSa$M{TPuX7Ye|Wnkp3=X&l>eqW z%Wls(DnTDT>4^$SJ8=a>){h`XouHG3S63Jjl>VKDnm$?Z7J|V5*FOvg1KAvX=UJMD z<29>8(oMp0SUhilx|~yy!;MFnBZ44NjqY`LOB~bk;_Hz4lkFF1KxXU(z&9rzCK)y| z0Y)yEDO|v;nynZZIWCS8l(HSc<4`@@AEmE=y;ILoc{t$`M9(F1HI92@8^(&F;+v{1 zX|hAz7vZ5v?0_(+Gy>dF?gZ6{)4hUb1(ro4_^z{XO~*~S6Ol!pX%4KOMt zfHD{`6|E0gjw|m&<_EQrVaR(ygg^-m9MH+ezRIW0#`-IGH$9v!r|fon?U79>D{vxF zqjRk$elK2gMk+(7|Ea+#l&nTteWAbzAkC7JWOb{QBLnHL5=s_vWY6-Z>EAnUmD?&V zv6!UdJ93S%r*eI>DQwng?4I*cQY37orBiN|=~EPdzY+_h>!DgJ`9}Rj2r8uNTg^dc zSbNU9%qrw|qey+mQL#5B1`%Q@7g)n@3kBINN zi{M-;5LAPutd7N}i8IwPM&@5&0m20LNe5qC`N)>IBwIWJ4e!o0wYgRkNxHlCH0=Hm zQoW@kQWx^~REA`6hPMz{oh@>l%nxsiIRkR;eZ4L+=Ny5W2hp9~=d}A{cl?)U;gy`G z{a*k800960?0xBSBS~`RtE5r3vT02fiJOO19OKzVsSX;+?lP@fRu)Jkh#V#|(RmPL zOET+s*k5Bd^LKymAH9GcrJrQ|bB~D3#6f}}NP^X9X^LcKWE_5lyN8GSaAy!lQTHg0 zo#9S;JMiAEUB;?^6n54&cK>O(6XT!Mx#^Oec@l%J|Q70^FK+Cql)8?ty}0M8j??yBMPC=kXTWr$xCD_L2A5t6K)6BHA=nT^Zlf%A zk}EHDd%P6-+flLSL}75NXOj*if*Exbd!FtwF;LEX=B1jihbl?&sd9oS#Wy@HMl+3) zV%0I>u;2GW%mbgv;$%M2Fm&83Nu$0K^+Ug%SyFHVm0&DF2z}mWNb^+7%N+K6TD_SK zFJs;LSB#=U$MdOijPGf9nq8Li*I7uQ9HSSS>7|dA&M6m8&Sd5blnnv{!pIbm$@}&# zt#EJ)EchwlM`Z4&eiSn06CE&uV!vaEBnv~&^^!!zw>c2jpHA|W<-qQzDAk;X$pn6Q zh4}@M0<#hpl0Jdf@xmy(>^UJ(RT>#W)PB)j%aW@xvrlp{r@0rckEE_>Jz#?RlLnK-V&x3G~R6=wg3iuJUF8YjeAHbi6+a ztmQWhR{dzIKz~otg1}iT3Uy1O)%Ch_PK*e6AAoke9{7lGf7L8%aZB3%jhBoFYcqf+J2x-;($;~~uYZR(29*aj<@eW2J3 zJb|WQMl`fkL}JP#{_m_i7rYCEBwPE6`3SOvrCu8%hUP{T8GCOv0im}j_AhBlfs^=` z_<>Op4;zn&9g(k0YF%0lb@Aco5F1b>e>0C=i$h!n$jQ|yUeK3_9 zg=q{b)Z)BEnMpPnL~%L}*<~Zq_3FB%($BO3Ui;qg>87}%$Pz^wg#{866s8I*AaO@< zpmDnNmc%7gDcV$ck4>U(I%JZ}Ad3^{!^znJmU8WPJb)}oS$)%B;-x37zI6O9_m?_X zte#OLA!q46f8EVO7mH8Uo%hj@l#-I_(|7vn*6FEhp1m*oWET2AXHZgD^V@q#wny(qm?Nl-K=&6_;v_OwqYvk#Oh6XZ`X;54F%uw5?*wLsO zB_#STN$HP1f2aivVY?4Dx%Slv%qt zYW~}=|M!`RdDNRVVaf0lj>C%qe;>4Fb}>FL2fPGW^@RW9wcvMq_q!>%euO2ez=xxPJD`uK$65yk+WYVvAX%b-mw--k%R$8&rOp{>2 zyW*v(kXbR)GcyxwwJC?tvKrPt9%1>iseoTP(fL?8lR{ ziy!trI3R#IX{S$G_dE{8$y53!l&385=JMnHF6f1OT@lRhgka{QktfoPM8R1WknPTN zo!}{Fvd|G_QKd*dj%=~983@}7ywnSBZS0GjN+U2PjWajJdAqvu5G3pj6ycUy#}Y7Q z?-+2@TM+Q!Jn^m*Z|>LjE3HWYD8G?-AbB(ukc*&Y9v@=X@W8&8YAV{HQXzi5Q=dG5b9_R zeQg43)YoffSi+Q@m0&;L(Js$wFQDNO)GvS@VH}CwR4#5N0F79xQqXNBKGpQ3Ln!kO7|*v;xn2v9JTPabsFsCt_%{*N^6BVc9>SkI zl^sU{Iv#tKZ-D_fPlE9WM3$99ab_lwM+C-*iq0ZoJPu&CtBfl)8KuSZD7;;#OWB|Tru)| z-16z@;AX|is}1iN`DCFZ%A)Q0mmJLSf#uZW8TI@JG?Tdnr#5<0aty-clpmbp^of%& z*kmR+w`ogSnsw(KNg@XJm`{#(LPvEvoSlle&-OHOX?*b*xZ^JS8 z9q&~#|B;_g@THT#6{m%iCSy5Y7!f*M2WJq$!yZjQ&J3lcPG90ZYGsll=TU1bW!YJO za-N@6AWmil_~rQ&^6a1`l$__Kx%OgY12L%}fT{eYWY5v5Z&EpJ^kZZxiKw?RRw}0p zdP=rf2v{H#NY&1d+ClM&(4mC^Nw;Co<5O6l69QtPB1)JnAuSMGAuo~iX5b-tqt2f} z0OEG*&PnJX4V!l}@M51+y5MBLpHW8`muG^OG{O*>X$mqc_4}O25$QWjVk911AF7jB zx})lZ1zrn1ykCsU^`bB}tFOH<0kk*0aw}*mcCY9k)HXREa??xdu2!x6OAUYFTYA+f-q2!VA@6X>uI&RKE8OIqo z2|{*|z03PKV^S|rrl!j;CT|hGH_}v6Nfp`-RElT@p%Tt%q*IpROWCwXpbBvELM7E- zt5!MQZt{ZC-O5c@|2O*49c#2`i|Y-ed2g%Tel;MUmZq;m2H?_^Lt+Yr7X?PL&p9Dv0Vv#0Z{>4AGupp%E? z1DJ>!ovKVWfRY5&8Dr51!`Qr9Zcl}mEME&b%ya-xJM)9|Ep^?cezMr4it|(eIVK@t z7B+|jBM}en24h8uJaztzogwhAAmwj$9FQzj7Qu=Ve|w442#kzQ#LSF`pqdt2xv6YbDk6^gX-l3~EA*eFuN|^D?;uSS zeLVDOP2P>@J?6Ti@kCsTfmiifnl@m$X4lEh_F70n2NehFww#4q?c zw5b3&U9CyXJTYq)=Wz!1IQgngXeoPHff$xvXCf>a=+I^ymEi*3FI!0>2Mx$|OzlQaZ6mTTpnavi6Ou|J{HlrA8Voq{;q8x6V)Kc?jUq|xU)R6P4$pA%bw7cLH43yRd3|61uc?S;qoI_k?FM8xy< z;(@3aqyvfmBRV-NYvz^-+izX*q~=~bzB)kP=<6eC&yOc~`T9{O3*-V(Hx>h*y}23g z8)#)s7b$?6cE>l+bB3H^T1sq)0*LRSN7lErqld=jg~+V59w?PjMw6YB`h;;qq#9>~ zD9=qjX$pBRZk;^~tOGN@v*wqPTeT;b^a;{4-jldK{!iymvdV19E^ z{v>CS(TxkBaEU;CT37)N$H*a$6yU`??Qk-&J!7&`lf8_-30GW|!&daLD*XD>@!bd) z9E%s!+@2fDY@B&rlBGl_PqV>~zlp>nRjBXY9&iv(vEy`sD25Ur&$DoeTQ7;LMwJ z6>CoRSgea0bE?gf?CE(}X*u1G+Xt=V`oY6Tlto#`3p^#om={S&Bvp4uvl5A$Qu_@D z=Cl^*Ed{3O2E`(T#ZcVb7b%e-jP;~YeK?B;5huNY7mKUAnX%Y6RCaPo$OT$TOhut- z>h%4~9v9KWH!}Nfpe{Lj506T50eEn(`bidE)?4-!hd|-gsQZ+bq@$+sFg5NdU8TsB zOXTI7nu&SztO+lqf!bLfB*gB-W?Aeyg!r<@1wK3M{{23e=CL()>Mz zI2+D;6?eF(;{htmk*3B@&9bL#q0<~;l+W#JKgyCoinWz$9SU`Gp*uktpemt7+Ci^6 z9iil&Sp_|0f9qb{$^0>tdSL^(_g7(AYBBbHQ)2sQ(DU)|_Lbt4y^-175_TnJ_evJ7FP@ z$+7^IGZ5b$>Bln=b_Rh;;S4ufmWtilUii!;&IX8DBzW>LCPpjAo!@7fxUac6kFXva zYa{|&Qa$zjLGs3t3WgEnE+1Bq9Awzu~pl{*@>-ENx(l$zOS_^n@3fqAkr&FTgqcB zH4y;vayZ!@u?`0qnR1!LbBIJN1Q0>+%BLEm-3axKu`+!oG7CTG2~OaL@*C!d!fNgk zd($%JHMst;J>f85J~iljy4lXcz1YcZDAP>(UqN%6Q5{C?AA&h&>fWlCkI zs42K4jj)R=MELRsou57#-26cQV^Qq){Xij36qRYsg^ZrA6>C}H;^gDenNxGrwW8*{ zk$+IwnMe4P497h)pi86p_T8E$t2@S$5bw?X>fZjbG}hcu<`^@OW*OZm-R-66Alcd2 zxFq3}wbw}|Y+U@yKOY6e*)e=r$%aPJTSHSDqu{WMcp+vgMUk?+DuiBY?1K=B;@d^| zGwa(b@$IJfP;Rt%5hT?1HuoEX1f45#vLL>|oaRd-IfebYe!x3&xu*3;TuKbMs&E?n zq%!0DdWh5d2sMy#e4Y78kHC=*JssbDLBAxoPHkOI@eO}|@CceQZK`cD7%)a`ylP^J;n9>q_&E6hq7<9ZG#g|B*Pl-o-1*sisN66t`t%WMz$D7DVnEk`sN zjPPKR$py4~y+8`c12y>MKR3WIS0G#hvrrZuYS=YZoC=3~w_5WpK zUGk6~zRsqvMm!e_?26KvGoRd=$UxABhuaaMh{J>A)<`zsC@BACl(My>fIh9z(qc~d z+ALzoxEIV=axvJ(4e9HYK%8vU4XYAxbT?6ye*XS^UH@8P(>@rgTiiWis1+dUI;9C}nB{E1uEf+l+aMA6{sb^?hD!zH^u1UnQi-|%H~LxdskXPmU!7%@;igx-?^tk?M4=zil7Zolj8kB;)hv%DdL=4qW>p?m_Vr==pWkjYX>C@@dC5?KK3GcJEhzdVS7tREKMn+Mz^jNb1P zjO|}P%3r($fTl2cOclRg(ogC`=31+@^m0p&tIcip6^%S@HnwMe+Gy|%hmoiC+Sa5V zTCM3l$TH0AQ)@zwqws=_%Kc`&**IXTPhI&}!@#`@LDwI>_|hVmIMeVw#@9W}PgsRX zX(?iyYZEA#M_l }xR3X6}ogp!RP5*)_m$Jt#|hsKQa_TyO@7o)2hq(VaJ6XbBb( z>>Qbn3H*?jPs=$AhJxwt6;I}g7_YjVT&HJOTk6@>mwI-M<(}R9^QE3&bNcM?Ls~tJ z41A&$8KdT-cd3>d^y1B~*0w6n->d#$hCrsd2Q**E0m5OUwz(&z(#$MMW7`?lnyt!G zgRuI%VqL)3INm&NOe{+`)10^e;k62cC74}n`DV9NYEI)00O5x;dzJFsoDD8DedZ^W zOFhkHltD|yM@uLLm&=@5LYp85&?}d8CQ2y^I(PXfmSM(P+-)tlv|H-g)mO53HG^+c zpy?>D>iTk9k$V^0l^@RctF7gB!&Ns|l43Q3m8@FetP9+gN2D&fta=p&W_1at_wr0q z0MHWZq)P>#YGtW6yH_pb{`g0zWOC@R>;i9cS4DOk6<_JZ3ID*?DsUA~ z2GR+=x!_6RKA*hA#W6{z%_*9r*vZ1e-yGN)FLR%sQ?T&0hyc<3HfM`X zeyx*^_()YTLvrYOiR59arZzT8%U_adO(yNXBfQ;*{b{!syF{#W6^GsZ`gQNev#)tv z+t;t(Isf^eKtFd`e2vgDdcD*@bexTizmv&3Cud)OI6wNz6kK)i=Bbiuqz^1({fKlL z@A$^j#2~t5!onmR)ExZx4PjxDLvZ<7q5f?lVUqJ?`H|50wvaH%!M6NJXntErm>5X< zoLE@sh_YaNk@pMho}7Fn%5Xb22~^S(4ZRyj`Auu+?W~^aJqH>u(i7=IpCe!MP4{9K z$OvMxJ(=VU9FGDGA|CqU~p8I6IYr+Qx92ESW)Jy+FY!Vvs!YhIVlGtcZqen z!S$y@SQ&g%96e-5!SIQYskZGA&^(lsEo=2s;}fZY)Ro78>Z2qrCvVKlqnC5$tUIUl zLTAbw;`Te2qNP7lFF|szLR(yOE=1A2u|dOcY{CbdVkl3Cm#g)@8%LayKo>VkkiUS? z?|LyO6SdhG1f7YO!qQ75Bf&#iU$gcwim%oml<{IBZX4UJqrHhKXUlIGxBAgkX1pWw z-Cfz(ksqM8Zn9$@N;XU)@BtA8YGwfk=WfqK%_Db){CM-OX@uQzZ(q_kBB5o8X}Dx2 zUUAY7$>P|9VCNNd{Ft7A(xli|;hO(Q{z_XNUiTuIMgQ1zuA?9YeQlO6SL4GHmfHZ~IGhGab&cp<%$dSLWte7T`v)(T85;p~f>3{xW0 z4@s(j6R7@2ZEKIV-rD}#gJ$L6ZG*Ppw|m=-&9|GCqs>O8u~j{&9{d-+CgRT$P?ZV} z2fjgZwJ`?EJ~p)^>ZY7^F+xgO&p?x4S*>W&k_;QXHlC3A$y3~rMPRN;?4A*LHu(26 z_ENWpU%Rwc{d}YFf&r7m0)HhWNu2iZBk2O#Lyhlmx^W*rX@brTqwZEuN5FFzGjHUd z58@>K-ea{QNs-aPO}Tq@P3w@RrU@R05$45%1YzmHhCJcTA( zogv@uStl*Hzm0mB4WK#nk=#n}?MTDaCbbaSVH8L%Or&<#_1aB}@HAGTfJ4LEXho&e zLdvOqs?mRi=A4oqsmx6Z+fS#Timx?(SgGWmIjglnW8RMDR8mz6>dlC1W6E_lHd#Nh zc$DrH7CWIop^98#28ET{6tjW;vH7Fb&)q0MR#@u)>2N)lqH|QO9cXjtITW4RL9Ra_@MPy^G(jr;FNmgc3bheweajxssM|V#)2UfbyE75gW zGhG5*XKSVF%%$s0;pgA0u2b5cXGxf8jO~F+cn32nX3cKIJ{#0)36O&Q$_xBn6k+GY z{^{MgQkKPY`s&8-XMIiz>W3LTRiQlp#v?#fv0=j`Ruw1-Z}Qd*%B&Jrejb@%4>5|avET(>$ySJ zq4`T%@4O_6u6JURWka`tyG>1lTOK&j);>VdPB8OQU#y%&#Fx5e3umn54^1RP!Iz_4 z*GGO$ZW(x8fVco3ddPE4&CpO=>2qAfL2MkY|mB+7Ajk5x^tO z`2KInRVCiwLOMw-dM3BwBD3u7?vyLL%|7O*=<9u7PConi%wU*nvU5c-d}qpS+5D#| zk+>!-FeBqVxq{GtLM3$;iMJ;dgu)e<5MD{hw~t`)Fpt`K=$!Vs%`?f^ zyUWikHWF$OAO|)0shCo~ocY%V6RAFA-Nlb@_uqbxgBhv)A(I6Vx`iVZETfbwzGOU! zBb%41hm5(FSx*IBo5bEOPN&rM;Peey(rb`1ER{J#8bOnOT0j$#W0JzKrV)P5R42{| zx=%=d^B76Bw^87Lsvbnw^8Q8k8I1uo+*kjni*@Uw8dJJh-+slr(Q34 z8@WD!B3lAGBK^)ss6{)^DB)u3u$FxpvECsCAbBlpu5l3v`Wlj6&UWqI>~O$BzD8rs zoshPmi|`hWBc1Xhh_n znbnoeAzmd)2NaiNJ247cado6FjY1Zc11=HV0I#wX(+NxoN=9NrYjZiQyXa@u?q}mV z4q*FJMm^n#^PIkF4ZdtBk*H`Ci&nV;RA2$_4?brdCjwNLxVmN3C2#L zO57*`6>7p+;PL&1QHx^gB&UH(70|4Y$E32YMlj*`VB>vd<3qLb*h?M7+02dl2QSc+ zJOn{BKoHly$7Mq_#Ro|=3rTRy*pidPWC)CxNh%7Wf^3=c{rN}@$#RVqp6m?pt4)C4 z>;zPpX&L54(fA;k?{!o+roHVUkOc(-$iPRhs2rc_|bV!xmS0S*uxep zt`BUNlPF{^%+HUwhocIyo4kF%H3UhRLx~+o@EK#zXJ0dy-;>&Edb=FuIGOs1-Z{+~ zIc?CWPj9?8V>@wKGSjAgM9P=P#m^YBtS3UD;kX3|?~>9K^W(e`YpWxzW>8f&>&>Iq z<|I|6{DxH({fIje0-Gt|@{WxHv6kgK#0H*IP)F*|nJGH;h?vYrF53tGq(;vNvWniV zZPrY^n(}SCvWHMk1@fX!0MFv3!%{JJxyLyY>M4#)K){46h&HQTgLqMl z3LOvs)D2SvfLi~4xpw@ELG*#HyH>M)xV2xDlapL`)4j5bbLv(0D+l%MBlE&I^;*Z( z#_@5bi7AdmK2$2T{G_z8xwZMo$OpK3#^VN8e!W$c=Y#xuRn%BmIrioVeVEM9uiUXW zubh_+(K`0_Y}Ii-n7(zgkUdZx|I$wtLK@5_rB9ylmekI?+_BuFfwm;qe{D=5{wxL% zKKb4SEd@3wZ7jTX)f((#z#nH>VCZIodT_U=hkc(tTBwJN4O~iD!XB_^4#_1{d%N28K)X_g0_dglAkm71}XSGxtR{qxK{Bk8nA*7Z59W0 z&=`88VxZh{DPTi9rV`14u@j6?Z1IM#lu4Ozxa9OGY;L-`TxuRgqBttVRisXgm?rI+qz)W+nU+j7|@a!DR%sG5c?lmEXL}$`@62@2ItRJdZ<3Z<)j4aQ&L+ z$9pB|eSd0fZ#Bj)e;4fhr4)X<7q^2#e3Mw-5*Z|+ZoPgHtGM5c?r{4Wwe94gfxv?rExU}SdpcV5jeoDMAN8(Y$Gm=kkYYeNl&{E z*5M%}E37SdN&$`f77IJGdRaL=Y9NFnF zkTb~nqT*1Cx_t?1c^?5r@5Ww%rCj5(3db;YGqYppa6pkO1%H#m)neMrSoGdaxd+wS{$WcfwYW-mGmdk4iMVFJ+pNR4yFNFdpJ8S0k?@5GNw< zO8_IBdYrJy9&`8REjpcFoSMIW+TxmgFv=y zt)}n^t7%Ss`!TTsY1z@G+1hKHt+%a4Bi#G~@6ID2(Ga z1!=bWJWVSzeH~HBLGmV4(=bCmKQl2V`@CDZxGxDdPQAFN1`-aT`-`J?Bq7!|4wL2u zvzas}uQc+SnPKKqzQWuyn~ZBJj|C6m3T_2t!!yd>Vp0dqetyb&1%6 zJ|I2h0N}ZeL-b8C%A%mv;q(Jn2VwUkM79v1Qb-;GiM~WM`annZ;bG-y>)sgC=WtY4 z>swomtz#VFmK@bbt$Mw=&8ADqQB6;4Hejt@LGapRauGB~{hsuIH_mr!2RlFgK*BHi z>7W<;$+~;{(_!Rh$j_4eWbfD5WWn)@)og0 zl9DjQ&h3Zd&Rx0AALu%tCSrc4uJeVdOE^5XL7Ni}gxLYgYK}dlW=)3-1$bzjy-$bE zrGjz94z!^}5*ko(MNX2bF_{A|IRN)_;i;EBF(&WerNJ}9dCLt|X0-TWU zIMMfKY#JndIeHz=o>1763G2nN3)H6$sn1qcUy>)i0zG=N!2xQ48+8~#0U;fa4_pcu z4|DViRSj{FAZn;l9F=j169kbrjv=YFO@U-F@+?=0&36*Q)Dk-)EanzC!rv^Tk|O0rB15cK{Q9+yCyncYBPveatgU%rRO4pRbl? zFU$!BYzSq~7_Il;$~9VZ!8S2oSD@|U{Nrg8JB~5f{t(*mejkq4kEd)-!vg=#w9)+% z<){J`6kSN#XuA)8&wd_MFlY;IwA_&`*Z4|{n0k5y503`4hKnSPX_Lh65(~{o_STIy z2klRb)l8h*DT)-@A^a&t%JO`ZQ+VPP~ zKezEUlr(huS(2j5(%lu6-#+IH5pgz8hV!UP>^z)zx$r#E{@V!2f8itzp=rX@pe}R>uQ^x3@jUO8d_60lo4rmL z#6;q^&LHAk!8$EV8wWUAq~+&Ud1O_gBUy=_7ta9qy=bFneTkIjP-1ZAkRSJQMXPnV zcX$t1gjrvH@q_EYP=O{4-PKj^;w^hIVmW&gep z6{L**AE#2^s5aoltB>*Lec?STZhckUx^*wN)^?l&F}VV9l$;YKMa~b#C&M>naCdvf z#4p6eGh=9kw^ywFO|$m)y{uhVJ47oI(2UyRcW_?l@^FOL92R<9Tb6Vje6 zFSNn8uNc--B#zm*>Xp^T_3dw5oNMXMjjOR!a4~$u&8O9#^g?^mI4Xo$TN~BqVb;={ zBD3;B=RX%7XZZ&l$=27M6LU5Pw*BM{ol|q%J_?aX9$*(y&!ZP|ixv(I5#4g@rNuMD z^#{-7k=VdoP9H?fgUj<@=;e@@x~An+kA81%HMB4qTz*u{HWA5+YD1dvmB{?hc9f=3 zKmS|gnfVLB(GZoml}CSeqexDc<SZDlWXXk~3>F)ny*Z0uQ0iyJo>z8Cr*#M~W!&G=)9H`rr4X|tPz z>?S2gc}AX5tQi?e-dz&{B{>!frD^G*f!=y3Z37APlKz@)Q`!{r7pl>CY{`~c+H7Dc zS;JZ%&-?1p`$~^Ap37HG5(178zFEeCJ`(-0DxqK-31 z+_|#*;Rl!Dj)+l$fV5Bf4(vFw5YwGVOm`((TRh7zYR(W-guG!uf#6f2rVELqOO;<{B9m3L8$U*%zO4pD=I)Nym}n zg!K3jod^dI$c60aI2HBhly@(emqtWvvDNH`>ThAUFbF3#Wyhk?($IB1x6xhtR{$b5 zaf9ZdF=#CPDF6%tIn$hrj`e!&Uf)|_HBer(`0h9R^{Ro_{MR?|T`&6>cm>Lf?goB1 z^j9&|KzY%##H3mCT?4N`d9ks9Z&tc}w`t%NC?+_aY@jP%qwW{8T|&l`T(iR4o;z&T z7Vs6StgWuxJ{8;6S_1D=Hk1IBTqtk~#C(dzFpxMO5U^mEHveq#FTgq4$pTDxJ`| zGoX7vd!PN@_nc4n+A>$A(So zHz9QFLKkVL3}-r98Eka-Hzy|?Y`3SYXX5n~=|x3QYkAePaCyeT*>!^6?%tZpQupej zuIN^M;FQ2VAx;GBL10@D`$(dP+M5reYSu-qZpDcT<$Nn43v}GPs(6l+w}s=Y0wq63 z1H`myKc@OAS&nt90wcK!ruRt;$$6S-8ixlTPIgNmPb_lYqU0Ir>_wrM?%|QgwVrj4 zRY88K$hwDVOgReE$OV1B6EKg?!v>bXeuh|Cdf%-;_o`;OSUSwq)P8V#TN_q+D)GUy zj3C8xxtPJqp4W3C$-8 zK>37$i@`nG*9=}R-;O?wc|u+Ja=KRdrU6YIn*Xf-Gl#1P+Nc{i1b!x2ufht5CdMQYzLp~3EGroRX$~{{FLclBkj9RV>P&s3GXSrBzEOnmMY01Vtz8i+G!&X-!V{h;Ys|<7-4SE#jvc6jDEL2)3_PBbo ztl_hhbY{aQ&p@&3PS~r>Q41IPrZ%ky)>LQL${Z^qejSuK+VnS1vGuS7JdW5LP0Jd% zuC=&eC|~;=L;0m9yx4)i%=RXY+I{M~^pr_CcUXN8w&&4lWS1|->7S>svc2t_ns)wL zxh<_7d!lwMMOyEy;2cAqQJjyPMZTsGR+i-E8fij2lq9S{NIX<+mWm2Z0%Cs zIY)BhhJEIo8NK200MR;szlNJse^ z6pOIrm1FQX>))+)CI9M`((q-D)FKa_@AxuTQzAId{g`Et_sK+CS(ej+_*_BE1siV$ z(~iez>JH8ym(0^2hxYO7p8E3hy_`cowcSuMZab}!{Pn1AsyR(I^YnDN_7=)bC+0lv zqMGBixbwTC(i7UJRV_ZU-Z+lG{ELs`wr=;jMXX-hm(qK6nI++m8s@s>behxENpHfd*bP1&Q0pS(Mj<%{`!mA>SBkMs+*2!lU9sF|yxD#m$kQ|~=4 z>2S2j&+4BqfLarNUhA@-tadrCTWvuAKW`4ch4t^Nifo2)p!01A#MAG>KUWniVvKd9UvE_v`JBE-X;&uX}Iu+Sm-2?R6h)G!O6B^+)IpZZ~*u zZfvmaeAiKs~!17lv!@WBAitQ+8$Z3oMlpe8aESs@cdR$NB#E)=ca)jxWsgXu-{I|gRWHQ7Z7*e&yN5zLa6pBcY;nWhUmk{%S z<6Sko39HJnBz^7rJ{5 z8v6hJY0;fd0)5bmz~vxl=;BzvK8!gG9Lxn>^SYUhUN&Xl;=*Xd;&CsVYj%}KB&I;^6Hu`Z^UaZh<)HsZ=2%686WzI6)x6Lj4L8MG$7#iBE6 za(+Nywtlt_zm|;q^3eokYAXOsf(g$_pxe#Zt)?~T;n9j{Gl}NymJvs|JdJyoFEqJb zzpo`vgo`f*+U^s({t-9Bh2dGtpnxg<@2G-s9Jar%KH+pl_W#uDAI)Ctdo}T;*4L3q z6+dZqHCkjO*+?x$-8BkU(&})L-1oWX3V%_Lj}^bMKx1cY=Apwk%z56=QJ3hc6fLa3 zNJO)kci9XgY9r=meLoi>k=w)Xe!^mfIdcp{dxZ<+KKCd#H})>}@B+jV9wBd#Fw zL)Wg9Rt4W-<&wnC8Ln3_aep0c5C2`^KW;I%txjekRqx0cE;czw)J9O}!TXMpH%jW{ zSt%M7PR$HNP0*(w+)c$@jLW*Bt(@mI7kiJW1+S_p*pv9uZe6z3;rjy>vtEsD|5_Ej zou7oVTXq>IjVJ1}tB<)ZXNmsa1Lel;Ob=))(Cg-tJ)1gZ8c(w!%iZ^Z&Bb@L+&ahg z8|B_>R~XHxaa**_0ITrK*e^8dBj9eCZ>QnnIS_D976E1MN{gk3cz@{dth0#bt`t1O zgw}K^himh?(!lpTqAhveflX@s&8YZ{k=`~!!T)AQ)*q*6I*x2?(=N_tYMWLk(9t#O zxA}FKu+C*9hO>Bx{4q>-m&O=P&C)MFul_c~tiq0t@WS@1m4~;~_`!xUcWJ(G2#VPy zbRjH`%v#&V`Pt}$Op~sohQ1EXL#jhGn==l*VAIW37&aMB?5Va*B2Lc6WUp7k^v{jA zQnZ5T<$imGdv#Y+@9CoW0&Ma1MM=M1FY#%GUH4&spmA=|ahhuf_iUIB-EnLU+uhHjxRrIoOt@`|Dsg2l zcZTI_ZXVP@u6di!Zn8H`;d{Y~s&`&Hok%BBXt-WvW`39cEEs@EV`)d;PC}-r$D7_9 zifAhpAKpYwbZU|bDtc&ShcS;su+$-_gwFNT?x-3Z4_V6ya-b3NuuXmHJD&LpdrDNu z9OW}7SXLf&)RggLqGV?GTyOz5cfgV%i8}HtXInLj3!~-UCH)Z1cJ_TNZOv8cE`7yB z6BJqJNQ25;bCU>nm;`)RH=;RGoQh;O3nzbQKp%G2vMOTW)vqtDYEzE5z>tUTDuGvZ zSr4$Ze}Fcj(r(wc21Rf1xE3hQ%?PBKOJg@SWVfn2yDDOIZ1SLa5wYubU3iv{n)N+D zt@^E)i_RkGjhRwdo@P-jl|T`o3(@@}z1EE)odWjZSte02c`<{qSfPALbP@3y->U2n zq@YVhMsmBa#&(x;YCRlpNECpH?rg8+k^rxb!AlwBm_XEc<}t5s{UmVdJW@BUk70d} ztM+mfy!3O8(4j6v_*Pj;4tNOVHE{fSq7MclPA^>lv2*UV)J(;O?}J@WHP< zKx=%$*>Uj&L-P{uqeb-+aRH{b3^1gO0=lqE6&(dCfaBkd=I1b`93KcfyuU-6W}SM2 z)|T|}?%Y%y3o28i^6F6?D}9*j&V%(LLW*b-Gj=&19h!;VGqxT_MaTMrhaAj^)%#g6 z20}^g<8rF<&r738ikhE{_PvhBJs&W+V`o*>IwJN9@%}5%DCi1-TCOWQp!eX!r=dNc z-?eh_ft&v}l2o&$z2!&~Gs(j?|NZK}k5dvob~r>oXbot{mv?iuX{Yog+na2GL8Fml zHNQlI4lmRIi!`E|=yoX-S$c>d#HA(S@+!$(H*{Y@Nd?ky-LEhMo^mxxg(5xA4E2IK zo_DZ}<|6#cbTCwX$XQ}AWY_=pM&~C>vdHiYEquBrPi2OE7|Hzoua_u=kbqqY3_PiY=C|S@w&Fh@Yco@ zJNbka%iC{`;HCGX-&k|;J)DA81hwXwSS`JRRxlGa%bg4NJZ;+y)jLSyenXRs2C^EF z4h)*)aR?&MI8wH#z2~_?CqYX^SRjzPZXRy&tYHWJ6`WN^AiaG}eyiz)+rY?bXm-mJ zAB_#f=NS&rU-^79!l7r|$hwRNDx{t*1q`!iByz_lrGL$9eokp_Sd~7)tr%7?W^%sT zm@5(YoZM{5qxvqNW}ApYQZeg5)wT%jTHK-VKN!-KIx>=9%=4Q|&6a zeNU7Y@4GP;v=c@3)w2YpGL#;%lHpLl6Fa+fb#LnmFtc^brR0^sh4AEPl_7$vFGVV` zf`^4WmMNG-Bd5Ve`g3RNOYXE2{UT)*wc&a>&|Wn~k*j+kb%nLz(5wU!aTEnV#o`-R zUsn#-CRrH558jRX%zwZ=-}cT%jNIM4@|17)?r#r^i~RueZO%UGrQTcCs-K~YUwN)? zXcN6*@s-c`8Z>=zhUhoV#YUUq@wxvHod7T2oFZzO%z`MDj!az9utvG1A2-qL-Ai%Z zcA3gUIb|zhU~nQ4v@kDR9v3jXjy&8%nft9~f#lLfhhBH9u;!8Q6=%z2+;f2gAq)eY zC;{M-8$_4%QX6^=1lgi2`u1ivV}NMf-(4cRcVw%AE+UM8Vm-Rawrr)m`99HYKB!yU zx()KewY7x~YPxcdhR*f%hXqpN@Nzu7RLyPpeL)lZcl_R=PJuZ}VTvkfyMHj~4MzZ# z?%w(21C3DM$^MHJh>h#350r}P?9wTs7`j_VMh#$e&xr;L2W@2F7+XffKz9gt4J#~l zoVlL(5RF2&6jxoR$A4EVJD{N`?Z_lr#$ZkPLnOEsqVlH0X~0Spu)?ZjKAf*C@=-6G z*FX?PzBUTmzkVT4n}#^w?f5fg1%R@(s2>-)rGS{nMGXHjD;c$e?FWeUi`B5+d;fJ# zaYV(rx!w`3S8r3l;K2$6zdf|>8YsObyVATtCWc1jm!pJZN0dw7oNzq>zmmRAJAZ!f zrk)sF2nw6*>e|83Liy|9;Dt7m@1ZX2s%Ya)Z8-ie?3aFYsArvRz@f?p+D6E^FlUKH z3Y}3tr2KV%bcWG_4@4sH+~AV6{AT zi*9dt33ZUZ-e+fxZPEWVEh*S^mlBSr_13el@|%c-BBXC?+CDBy#^IIUUW!)xWyXH? z#MqOj8+lxqlaY3Jrb0E~_~VUy?^o+U7KpXHQjIn8gXYQe2ad|;N}@HKb;y@{8qJJe zLGxsV=%%jZila3W>4O}|H9q1pRtVFi{Lew&Evst8n;duzmL&PW*mO5~3-cTl6;~uTO=ikEwo+g04aq+*~fW`a@SSRBXYJRR-APQ?~xA z$0qH-3jWJtZQ!1JK0!_pj=!gSL+&{KITuDk7!} zbC_+=;KCs8aA%urb(x$a7Hd+;7|FStvAfU_5zB>9>2$G^W{9#T_iX_@g7LktXuXO! z2{D_V+W3=A-zXO1fHA-MwPN%?xEk1SG{Y8d}PXwYLv2A zB9=Y_ODaj!4$uar{XXCv3y0D;(%g0V+CX#!iy5*v|L+*f2$=!<2a3 z3V_5-AM=sc9q8B?P?Cy&?|g3J;P!)P>^)O&UMIJTt-~`a%DK5-atJ!u_YF4)Jr{%5sQu(R!V@6*~r)j7sb|LG<39yG?*jqC9uAgMtqBmX|~8rVch2MGq$XSO3XNMNzxkK?iFMtxDd6<>jdK z_2J#glEOkF2MwaH*slxAum_g>abyS3iem#PUf+^Wy{tk0rL@uYQaKM zoC()gFCydn@sPeC@rABv{{HvG@Hw{OVj`|IOrhvEp4b}=S76RQ1eQmP@L8ssmS#n6 z^LQ$eY{nh&#AB8UeQn#L%MB`dED^e1*}wTDx0&4BTu^hCw)Vb224D9@$@;+eWwlaZZ|P!7DB?#w4gaNV(!d7jOx_+h(CC*0`ZXA&*io|D(z( zlhW?qEf?|HTAz>2Q_9RZ!mNfpe-$KFch_|DMx&hfn6wTt?d6~wODn2&>Afeb)vYw4 zV6J{@X+AX{IcLH`xJ4J8qCpf&NXGc;c532@t_*C(9lBEQg0K7??fO3usXC}#=Zt9K zuhwQtL`kcmcD*)#cE<&6KWbu)+V^sK?~Ddov5kOui`26{3o&J{V?Or&>8L4t4wB?f zrBSOs=b*H@k4ysYgl2sv8KpE@CXY^&n)xl1GLbol=qJq5C~afRUvT-?nHu3wubHx+ z-Z-h|LmdZ2luAFkT}cKwasSx)@TXEqII{T^&w8TMNI6;Z8Dlui*d-#b=T*lGo%oWB z^G|j{iPBH-e*p0HK_hxHQb6Vk9KHfM)BykD2?iNM!S z$h|IMv}aM4*C`JRWYWQ1>YX(c%AH;h$R)pz5B*_O|!`g)GXzvNjzjM&3lOYZ1sk5wTbfpr>%{ z<(Yci#eb4fY0sf&-1Qy{>zoHVReR~by6>R=wW{+Ge1C-#`dIRC-K1|#QYM-5&UOX; z)%h>L^h!Q1VzTjv&CF&-LvFab0(n=dQQf-SdtJ3W=9oWpHVH)^{V6FME(Ax!;|f1f zsv%0D6xDdsrA+Io_-dO3oO{=ED8PM6D^+)e-X7l7rXTx?c<`IxsUSB9KS2KUuekh@ zd-=WJD4m|L<(xI#I`P1_F!eX;E1S!0($p-Y^+ z&P&G7?tJUzF?Ll+sCR&KgBaMJNKN!-) z_$^h&cbR-GZ=WkMJ8Vh?sVm#zUPf-FrP6*%l*iWChlNpRK>Cmhp5Wfh)t~9LyYlWS zY*H08@DNrml)pbeuOh*pfLnCh%DCmo@of=~4F)n0$^I*$dr2SA(v(q2eQ^rsyv z7(~7+VP92#{G#~6?)uOMX=a~u6dPAM)eu@f?odq-ocSN6}dy`TH}YvHnJ>m zAT+oOpfHIxR^azaa6(c*04|e>v5nAdhgD`Nj1f;(p3D&ZH)Xy2bTTmw_GnlM?Vpp1 zJL`cz;;ep%irgI=heeMJ+?9L8rxSdkEs6%E;Ai{}2g}if52gP~zT$Gg(TLm(`O~*k zh~_SJKXp^~1u%}OChd&H{1xZy@t!}|{SZ`?ER}QQWPoZWYi?EcRF183cuZK{PKP$9 ziS}~?((t@6wT4m@$rcON=${(g$;ALh3hW}+UF&P+tMeFB;6fIALfwGg1XybX-S8OD zq=}rfvKPu_j)a2S z;ULu!F_#UD`CE$KVR$On~C)qZ{UY zW_puU{fEQnHfj0HC-PfI3z77Iz__A$2i?#EsahrvQX8)OQZ#vXG^b7jmgr=?v~yY5 zqYJ8Mx@19w&f1LWxCjWra%tU0GydyUK_asC8s9XvMi8dI9VvT>v4+%6tFUsi;}H6A z16s*0wTC-DAhoc0)kT{ofcYaZG62jLwQh4a2@44R*ux!rYtQeSsWjPTVff8q-JEEc zu&km3pJIi@n)3ZG`wHuJ*yMhFL9a{7+EOZqytYDp;6*&sLc3Ag+;@cx@N<_3GDj@1 z04K*g`j8{)YwWChli#{R?7Kswl;+-Sm#rN5VCT%$qrL@T-*gYu`_Zt<6|b~HT^fQO z;o`(X55VL3rtHalrB=Vk(hd%HvI5rEbieG;O^$7*>?FLvD^CT^^-LkGF2h{U`AV4zoqWQc}Rq*T{LI!Df8~Z4gl(Ip~hpFy}@?m$CFA z@VhcyO`{#X8{VF~-uE>+9e!jI!b2n4bHeAyj;MSQSc!UXF0LdHkuBx6+7aDm8yZo% z#?kQKcy0n7zT}Cj=qV2b)BcA!rJI2Dt!az*WI{3JOaYI}T+|7gat+JAeqh-Q;o?)7 z>+c>rO;?@%;FC=vI6WtRUHYj(dn=U2&JCU45_BKe7S>iuch zWT4`gu>sDHxPfKDgjDnsz$_gSKAkiP2YXVkbRt`61rDh=S}oAo>qOHHjGmfMU*Lfe;q(sKABvYg)rp%_V46yJgd7yGyhXk7&2SN zUbjd<@g#_4C|Y7&Zal9sWe;*&K7N{=qD`M}BbWAqK3y{I%FlACX4(XGkBTqxxGUpM zx!1n|TLfu$jSPzaJ=EdLjjS+;10O8u`P5GT_G%d;^ds)eGFNLPit#vJnG5s&(_CV? z;|CnqB~8v_NffZ8w;vKx*@Vs5%lwCV))PfxN!c8N$>q`a(fpN4g_yWL5VL9PKiRbFrv}P){ZG@ZN>cxw z-DiK}I2hdv2e)Vsb}2H=*mbV&$0PTz@(8r(yUXlOF;SWT2+-c}s97pYa}*Cifq{e922WwTEx$msLFoj5Y_;k;Yl)>#!R1}%GU0jVehA8Y zXnu*DMj_Zg60;R^}p;nAE3fF7C(*d9#%0O;{Y0xsH0`n_ThAf5g) zU^811C+tEVs3;ihJKGisp!|L86Db*RiFh0UHpdyHK>dm3rNB-y+4NtAJP(=yZoCP{ zv%k0JrpdcUB$X0?G1?EOg=1itpF514c(5n#diXm0HnC&mFeH05rjb>vFB9xapneHO zU?MS%S*3a{3ScbVqs8s3(NJRRc3Ood>$sHM`z$S}o*#Y@ZW+ZMgiwz+Q6-T>0;*>uDn{=yV z9|QO@k_^EIo9wM)2e4Q78F5$HBzG;lA;6bDWC(!i!>@11qvHUz@+{@?a3{>^g!b=Tw6!h&9TS=rvNni^4ekDXPUiv6W2?_EO0{!C4__vYro@Q%>_ zMn66M!P?ju;b4E2t)^mk`{49{+^Bjc*-X-H3IfR>xc4<0moNWy>)pGX zS)(j==Tigzy6=~M>D@J^M`xMrF3Kny*e$O0QI@E+<|OFq~qcz1TJr6)D`9+b_*aqq3P6ZV%R zRN5;xNfi`oDy+@7yS>-;au0TWMXk3bx<$?3UF6z}IM||6I8ff-Ssvc=tq614&1OzL zXg=r<7}T5H)4Fw_)-DQeTtC?2J$SUgS0Q&mps)8nNci$Y&ucr`o7nW;j^6v-3Hk%G zc8ObC{dyF;xgTaCR`m7{Y$hu7WcN3^D=a7C!V2_fy?5`o$L*#kwRsOm9|Lm#-}&ie z=i%8{B}`6EdWOddxn0n@@qKgCb)@WCspl4FsZXKJFf`4|+S(`mq`bWR2~7nhrJdVs zckW;WR8&-&&dkltC4HZsHg%mDA5Ykm(yQ?5yzlGltGPeX5Fxfl#iskR8@aRe6J0i$ zn8CJVZ1F-j**cuQvBvBHK?VMC8BwA zx|MOtB+Oo=hT8A7dbTe1Om~(}`}fe$(5dFQhW96i9`M+hnoch**?M~))Q7WZW^Mgg zTKaq|WN~22S-j8L(eZ>xiRTHolEy}byZn57pS5UdY3oSCTne?!w0ipn2X%%8w@Xnw zT^S$C%7n`c8W#Es8{y*~UEjC1+*J73*+(q%%ge2Ae<>&sVBxEyx;CuzwYj#&#=;_$ zZEAI@dD-I7fX4Cj^BIa)jrTnWG#=(f1qGK()iUwp+v{`Nfg&4q5E>d99UYzGr)V@f zNzuin@X}C`!wvS6UfXM_tl>okSsF=r&GOvb3q7?foS}PrD4nT9xrntg{7aq3o&Eh5 z@9QZZWlhCZA(^$bv`{FNvzFcJq=HrAqJ;@_wSk?z{Ua)!GWSldu)D3|TZ%(v9#ftw zab(8KKo8DRH$05tz z1QwVeMtpg`7jakb$&=tkSt`HYUJVbcR&3qIhO@VKMQTfX`|9$Tv`Tql;SG9i*?I1M zY#mTxzNfppyOUFA7}eYRW+^w~63VKWC9rA77bhNLs23y#YSXdu)2;rjjZTu-J^uOl)HA{=&k-w@0^H z33ol?u+!$o6n*^fKAKSH7ZxTL7s@>549(2UY-&<$AO8_R^YaY7h$p*TNpUgQ&;OnH z1vLm{DojZ44M%0JtNrbnyDht}Cppe&AQ85p96yNX(3j<47U~Ls}Uw^|z!5h-N zx%5*)ClkdMb_PK?wReAFwcco0^(Gsl$bH@1b*7h4_&NtcnQC*UlIlrJxJY^VBA5mE zcvtIWkt_Rq9x4aGX@1sDXLOhVy_?LIdhH2lAKGNF1h6{JUbZk+x#hto12Z!j=4zyr zndorB2DYxLDbVcNn`#43^gG}g4(XwRf#k#fuExgq*;+n3gs;}hztklU6++}J%8c%O zU$C&{LTKpe@s?yKC)W_PulAmFuhA^CzwsD|V{mX#km)?Fni4mV?{epnKfDoh?lN{dW(bf|u~i1o9( ziuIf4ED5bmW}j$|6=n&>5^sW(*I6UqNvf-N_ue;RPEJm?u&{8yr{dt?FvnYHJqWzN z%x=s_1Ju>^FbXeO?q>E$=`rVcT<%`3skwQ57#TVFkLY^ZtQ>kx{BIXCm2d zBRF)+J#W#(hrCj8LWF|Z)RdMp^jQ$S=xmwoE3p5*5VNz@lWh5nh0!dpNQA4DVuPyLyhnbabzU&tVS zJUMui=W+VW&g0w?i`3&QZ24+Y(O=8v3@zZxhuJnY@V+l>LTqQ7YA3#+t>_zy}D=|N0n1vo|R{~)oX41 z?!EZTg^N4pA)TF_U?Pva&skF#6|I5w{anRF?8|-S5pZBO_ zy>qA3`(P-nLBO~Xu1yAm_0mwX)a}U|RT}NN54LA&70$Q2enL$CdB6zai&?lVLg2DIcfbC&q(frBB8WJ@J%AOT!5m#l-Q)hFtP zo}QlX-^E7)*5syVW{TWaksrBUbr(#&1hNTaeXjCwJ{6^|9>LR^=YA&ZRt1t7EWhpt zu*&Es2E!2&>!wFPyTX2D{n*j}G?u(>=Y_KcEcOIUv)`BZO&^nDZN z+?dI;Av*DKs@;q`!ZKVg?>P}>*4DbZx`8Q=Z44w%m%PZ+baViJk(R43oroj*AOe;m zutc(so@RUQVR3mwSl`9PWr2U+&4f8BDoRdHE)aH?`ts#dCzwqV2gF1SM~+{LD%z6y z#yIE294CT06W#D}KGcECVffu#cedahm27WESJ&eY;V6nH8fjZ%xZ*{N5891QO}`cv zW<(e8;~9>}0xgvo`f^`Y>6k2c;``vFTSnL)~j%KcGlfNf|$xeW|R4{fxCO3DuQw-K0ZDxi&bT` z)K6NB30tQzQ+_G;X)){vn2ZzHM?(ZA5%phmqH4p0MiKS9gQ^}tnHn<)Ya5&XMLr&$ zNeheF#rgT3^#EXEa_P2vJA}okGo0R{EQ24_qk1A3Wcu^-xpf>DhlKNB8{B-)@m0YK zTWd3+WlSKBaB4c9E$EK9Ttlo`;lNj!_&t$v?p6s8->sqx0i8qC%9N{X>o)YB3VTuR3eft?}RD1LidP zLh98;3$&^DEw&?lnX*qqYA^Y?Kx%2E_TdbO)Z%Tte7V4sosI(1Z$25nIKviZb^?(?~O@=Q|>4o%I=%gfW#DMS5|FmiHPw@tG?Csu(MEs0NM zx>TNiR9T6HJhOc2O8Tty>3H@r&d{`y6#Vs%!~l~d#v&Sf8ALOA!+CKsVOLwvzhs5I z)d|YBUlC6}6xa79a)?`HtsaRHvzmG#wyvY2BZ}9Chll65MNeO!yGm|J$(-j|$&|+@ z&g%x*G&Ze_M}?F!Lm0F!4;^E$xx8gD0-Vg3soH>}oaX`v(YW&@>I-i-FGa>o)bTR@eaIv!-l>mH=^2-3dpl>f7v22iMGag^qv{j|u~QTu z_7l%s^9)~DnZ76xA;l}B1%m|N_g{hp^ZM^XI6tn`ic?i*)oWZWP)jq1JiBA?@=ye% z!KWkdOOk1{I?X4Z?xxhb9GpN7VJNvge%Rq-Mz5GJ{8Vnx9j9r3*KxYT|1KF@fDZrP z3&=6VoO&?CE~8-blxtYv7$o5NM>@!gPYAu(3Lb$9{7M?z^pNjyB|0b>8m3tLyqH+VffJd(mO7)A9oa#E6f-Rx}IV_i*6&R0sY zLapCHN*MJWn8rw-oQU^+#+)b!?A0-`u?2>ER~E#!R1Az?4x_Pz++f)Y6=s zpBe0ef)=-Hw=3m%d3i}}Zj)0`RC0#~+f-)!tbR+ioGxUR6aqB$ zx;z(+Dg;?1gXu1BZnm`>Xc?>WUBAk67_P>Fc@G5em(IMBi(tLW##Y076GXdgo({IQ z3``VsLhJ|rm`QqCS{Ma|Ub&}6e^ZTfT4%{3{S&alML(iP_LfQHm3p*`A1MweN*uzbh#yoGkeGuy4Pp zh+hMwLbKW?Tw96>R!T}ip3z-hUEk`#Vv*?S?95}Z_XwxzwYQz0_Z=*{@~>uQ%u2LH zM!=c{v@oJ@A7quK@d)lWJOTpdT@Q8V8KM&U8Fs`QKyD)c5wUSTH$veR2owZZUe*z| zCL3wCHolDA>TP&b{`KnC&i0M6I^&4GhSVOipu# zqR}KVr426~Q;3;Q(l|(;;L;~JDY4yi9{B|Ykv`uoD|>pLfSzYbYN_!eG<0>l?6C%< z1vn6>IbDv*CKgbKf_ zeTZE7H7JN;d+NQQd2@$Q=}WOZSN~#K|7Fh!Vke_PT!tr8X6~L$2ze5D5lmOZ(Ff;Z zuvh5lW-YftKr65pv67m43ufgnhWs=m{c}eZ%w|X;-*EN9`o;QRwa6PbwzgIj?asI8 z)=u{aGer80IuJnDsb6Jsezmo=)n8~6bq3^mxqCmu!$1sNXmVyEJ($or_pz(Hdm;|Z zhsab^k;(;)I(eX|HP0JcUgP~O_kplhV5atMt*y%-n0~EhEdK7npH4e|nk~8Ev(OqZ zt$8q36O_a*fanDQ7xPc*lsgN*es!IBj+bPM!NkOHPkp($GZ6m0$e0!heZ0E+L{<6B3KD)TcYt`T1zaB-lxx1D3gIPUG`*aPnu@N!6m^=#zg+r`#YisM% z$l6Ou#Ue~BAVZQ>@pg4}_4XFkzBi;ZcE_P6c3zgw=g7syFtO6h8w>qCJNDD^-pwd_sk6qet2m*ufv{dj z<}ww-HmJ`_fdIXOiz$Ll&zUEOpuSdc(&!o@1eMTFt?Ug#MaN7K%nZL$UT3o+6Sq80 zROvC$ZvpjyCV3EnI3BkUHNPQ%(9qWAk^>1z47Ls{O5@igUsW_j;tWhZJ3D)XzozmD zSgcy=u<3j=KWeuZ=AK0-B_}tQDSV$QPH2=L--!c~WXi4Wl`N2E!>ml)R>aoI$BLlL zZx`n0-yg1&wh31mGJM9W?RJc4`wZc6vZHgyAn^O-(q4kZw*6C5dmn%l3B@nti2Ow0 z4EP$4L?M~oueO18EYFVvWCUqU&GKtr@Y6OCb`$j%RYZdWK+D8=EUwi}gPA~rN`J04M#=0gW8Dc%dr4M~~|G*=NEowf4v>F!PP zMvd9Bz|!I^ki3Xgp*03DRb7`v9*4MvHivk-x%GPGT73a<@LK>!oxD6ZCuMuuejN9e zh0V<;Aml6SCX}zIYTA(!$90;M5>gvA5V$)wHijI%)xLC(YAdaN`4{7 z`cYzKJ~CtLKzarYf1y2VerKbjVirnU#SD4&1SH|XyhhB1hK4^A0YwyG1mwz0-|Q6@ zyr%wz$Ud_Jwr+d7SaFty5pnC%+gy5um=#XS-dhe{CdWCTsrDbKAawI|Z7ZC`=My9HHFcx4=fX95} z+$}{#A2h$ZOij(f1l;x~1uGM$67R)dgC$f?;2&qPeyX1xpb{cupcmE^w>)*klP5`RVi$AF%M9Bw}Ztu zHO;cJczVx1utZ)<5Uq{Pjhf~*2F4z)2hulBA$E5CA?5AeA3vl#quj;yk3&*84(&8L zXjgzgKQClr!q}v!4G*wEa(1>73sw1GrQ~F+CaWmk+hJ#8LHt&4%0xatXAzHjhJQf7 z%=>A>FymLxDS6i9--+MyY+)|8TDdiOVYsd;#U05hAkYUsgM*n-$%N}63uM{`t6+KA zD}B{Q&6(sE8)m=ImoFVeXJupKU3lK^!VpQplRJ@nx;Gcj-VJJ$_wn_e*onB?-JJ4V zCe0(L*2OfkfiRN65Ywd{$~275R_r>DhCtF@;7@=63t#m)FJyn;OXX&}?alz1@i2+A zgG0LrhnN!nR2U2PGd&$$*QQ1#nAP0lgCJO0(joE5&9*Ley_Yrz7v_Y1nXHUfpPibN z>0dfyTyck$RRH9Eg;!4V`i1Wn@#oewDm;jciZVeW<(~o}XJlph6c#)z_OD%iOis*| zGOuM#w5m8B59+kO47~PP8Uy0kv(mb)+KPe#WYQZ>YF@&1ei0EK0)NO%CO$VNlljJt z#xe#vAyf#lI0+pG8pHB8;^P># z@8(Q}a$x}5c1rw?Pe6hh^Gn4m`eBF1X9!SIQiYS?9>}%BNr-)Aj)`V6>!T6#)N}m! zaRlW@UZ!$~DaB3uJP_Gp6VEqengl>`vHZj0!C1^`LmQh#F!2>>m`Y3guKvpI6h~gj z#Bqi$ELhFxB(1zMV%|V01B&@&cYJ&tuq^kA(KzpYegh_~6qw1u$9QvlJ-tZOL{9Fl zVyCeW&2aAV&PI9A$zoZcm@x~zmqJ9uuPpK^wYRUYxT3zrLjkuJvJ@dCbTYaqI~tq1GpxiIIooe}q)a09y; z8|C1oTjuTro+K=INNH*HH(nSnbD$x?9!7y-(v$B5WOzM;s8TO+hMM-)%U^)g(TNBN zbxh_r%lm`)NapPxBnkRw9CM3{g~^4W7!NP6x~!+t&2n2eu!iYHl~I0OxxbCMMI|jQ zUG8#E?Fd(Pq%ONP*3f5=@QC;BkjQziPAU5H3+b^3GV)_?IwpN}24}HiV7=4sOjUNMJ{a}BE z|1fbSsU;yQcY@CzN=!jXgGq`0Q*Sp;c9_L6P=NUr5!ubTFU>XNd7zW`@7ga?`<^iGjCt4IP-xO1TOy^bkhY%rk6Kr4}Ic~*rchS zpUyeW>HBv^2 z6bGW_&)D@GYCev|h`AQn9mD%A?pAeA5(aNRdvg5&NXydYEr(A~EHvlzEZFWN_T^iZ zuO2ld=Q1w@0z>0Z@Yg)Qat_D8{Id`$cH##NBF12KH2rBH&!8&0ks%w4wAjkbu}j$aXO z|G`0a9J2{|@YaqbXPN@S`4aR`y7`M88JeA0L@a|CHcvpupr2ZqS|C6uOu=SVzxGt) zuRK3JdnJZ=cQm-W6^PAnK8^} zF&vj}QuL=;`e^gv82idp0Il`zw(o&zIR53g6Id~-d^<7{(7?Ipj3zgJz(9S6eXVVh zAHS%K0B=K88$@Kt5|HAo(%HB0iD?3hjyY?L3dt%3(2D#gL+QWm_qz_-H?lWoSdQ4 z;Uw!mUKU5KeelVicIl@s9jtP<~2uj0n=rBP9LFo>O5hbKMJP0T$A~8}TEj@H2$k0PbI5Z61 z-SOSesG#q8-y6UCz4!C|-G7wX&)#dV-fOKr^Q>2X1Ezp|u()cx#N2=h-yjV{e%+Y$ z1e-%D1#zdA2k6f6zfG2=hrjy6nO5d=8w1nA;LX>_uitR~vFx$2KBE!*3>y2TxX6ZQ1FSuK;#e__?{CK=eHwuQz0pq&d5vsm z<39798IbM+9fPeVEH!>c+e3LaW-AFC5&wvyAEwu2t?et_%<40-po*?x^{Jh_hh~4@ zk7_)kFZA_qhPy+aW5Pkt>}hW!Ef~gf0ce&lLe3d-%#aF3U_dmwZdCq3i3bVBjfGDg~|Y5CO;T3ZfjmEhqHdVzeUSvjwOWj-eIyL8(y-oz`s%9lj( z`gL)dV)GQ6a%=>R!)Kz4nE0%;KhkD;-75}vW%_m34VN2EQhHREZ(eAXFa}2@-8awU zw6Q%`h1X-0e;{4!l0ZGS&}*Ljh0cg@oVRGD&+pQ5L*KU++x>a#{8(yaoyXlUBmqD*U2?LEzh#5gWyH&%g1Sl3wi5sMA||cyiXg zw$tPHE`NOfgBx={b3Dy)XGriqi>p2+gqcj5)(SaUp*PV{rG++>D@l z>%ac#Q=|BIeO;2HTi`lEYR9JPC&S|56)()Gm4+@V{>c*sx%&&#aTc1F{uwG7%=(Py z{wb3G@FW6?@j|7(DaIF|7(Nf#3l%JP)RfjbQg2~o-?cW&?SCWb*>J7Ek#9=NBkuC~ z(OW4@R2P#hFDAp{d@Rv88nNiEf26z*@?bL50unlS|Bgi02B`R20QDzIb{KWQ`P}1P zzrp?d8%vq|Bj~>wskGjR1gm)A$dTo(2_qL1W(50_g*#V}+ZT})W_-YZxt)=~oTA_Z z2j2Art|j{Ou^KmrB%MF=lp6-a$^YE=@TSrEwe%ofwiU1F$AABYo|t#l7n1=-k_YotNTl5Q<{&OzN#$wdMkIBnm~cbLW14y!U5X2f61 zXZ~zF0P^GPxaie}83kIr3+(vHH!OY_)N5IMHW?T4>(O*wG!Pj<%pIim&8_{gWZ33g zo6Fiv!PC@8Nw#m!+${&MFfg}XUQsxxL5&fkJOu zPv2fQHiScD(G77^PWE6rCI5b;#%b|(7sT+`h%g>kb)@@avZ9nb?3v5xQU*>DpXyA?bJiXo1 zT(*cFH127FccD&BzQ{AU)b1e4b%Y{}M>$zlwttyC=k~Bn;M*`C-^IWzpMMy$nOH zkZ5`qu1}?;(EIF9tw58WV}%cQ-sS1usXnQUJBQ8VS>gh~?IGYJk#%HzOnzlORjeGf zQ#4qA@`2cpbr#cH?^KRvr6ye3?yRXOE3VqC{0hskQcCUClJU9Sh1vFGs%nyJ=}nLF z0#`?|ANyF^ z;Rqn8uI(H3<1$;V-{Y0?d~}^FwM>}kEWK?gA9{hU?46)>EQOLbEunW{aRZfJnUv|- zs;LIO>s%JL_If1NqSsZhY^+k(8;WD4od+w0g6K?Tn9Dk(O;KuP-o2VG zS7)62y9Q`?(LSGw!&5^tF58CE9mm<1g+ky> z3?8L>Q5vuZx<_L5b3an3s_xyOSP}2LN~FxIn#L@y6yo~F8k+?Ge)#x$Y{CE&!U+CaXpKy1`>xgUA$PM7*!-$Ud` z9GQ7??b`A77J!Rc5nR=!Z|?gt2%ns8#HMwzrFqG2^W%UQE=g2(Qk+Ay^M7nLUg!6r zL$o2IC(;Ku>niTZP?4^ZI<>aG)f1ybJBVS}QX;dQ5UKwQx3Sb*E#e~|yg^pkKW?x) z%b`lVF3;!v$=qpkd^oB)`Q8q(?!e`L7=ZabD*gC%;H4JOsD4|7T=(_F#bdiBT>SoB ze5{zxQ0kNJ{Yk)9__YQy`PH>8cxKc`#D989=tc(w&9TNgPPS$6#5Uzo#oWhRy7S9r zduySoIBM;Bb|C6J=~+`nlCPT9SMjTjk==bCDKd+v9#Gs771X&20MO1!Gc!FDVZ`vx zWeXLwonBU&pEFZO#Z#O?P_1KWG>l#iu{d!QxBESkjxgy(*glKDGFA)_IaqMZLzXP; zwNTJRu}GtZzZqF9e=v2D`xiQG=KnVRd(7ii#(S^#y=?cp zYkJ#4@1m$Ao)1F~Vew51BK;IIdoFvaaBt?B9cM$qpe7^Df0U(zx@W#*yEe^*i- zY;8OlVVg`fB`$7S>vto0r{YD#y@&fE(xs6t#=VHKJ*CcvahCn@rb$#63NP^y#V-+_ zv0%6pxz5Sv_regz2plKM-xtCn##DdAvzOv+J(+Z^{n^#ts+{~k-uVeNVgV9UPFu@C7f5S|3*yUE-q@kcVvuA|AA> zlUbH20^kNw5OBqIKb!21lZCAqwg5xNzD^r z3wLCqlcH(Iy4S8}oA;CKrlq<+O{S7)k_Y^I2zD>4Zao7+f>cU(A(yrN-}hFw_SWX! zZgZ&CIJNsNi*37p4jVylM(>Ipfu%2G?C)%^H@oywJ51=#&2hPa6{LGBb6|zj_9k{; zXi)RpnwoEG$_d{yx&GP1o@`82<^9xl^};~#fJB~9kjH++u?zcrpCItRmG~5y?;-XB zD1v(V_p|pUU@Q9js6o1(E5RmuD(184qPSx2D%aRNO|fWC-dMgfd$!GhfpOmj=!Tuq zKEI<^9Ov9)T=JoL19E}lJ3KsO%?k;)QU0c6x#>w%fkmh4fcE;{9Q6wFFS}jb^?OQ> zr{V}ApeJCvrf+fg*%OI5=~_Ga%c?a6iTy!9)B9eIh%@ks$1GJzR)_m}_ibExPhr1_ zQ=0Ri_mUT~K-@%!pRN-m5?P{6Fugqmrd}@OIu07S3t5>xAoI^w9f_&gwJ>?}6X2KQ zeapW9zS2E^k~y%Uz1di5#O7mC{st|7F1;BQoY|{ z`_!rTL;gmFpU=)b z(FZ5dEpy=$7(+*&pJh@c(q8o8XPL+dIvD*S5#q|u&LN{X?2}zuyA)&S$cUJ8$TGA5c*o|p6zT`rk%`5P{WBEfYHNc6b0^d8_s^Z_UbwyA=f zHgQ2+LO~A?wW><8?-$B78Y1hi9x{3; z&h$V6kV{G*#ps_sB%5(O%oJGYcbD~BFdh5&FVCMz|C?<2NwdO&enIOet*VIll^Z`P z*4W4|yZx-qiEAkVS1b%{FNGem;wL3@6ZlmEKj~THqUju-btFz$~|Bra&^Y ze8{4obWul!PTRQvZXb3i+MfWIXzh@B@jSt1(pD)RF29fA>H`M^P=6>M`kh%U;$hkO zy7U)XZOUlx~mCTVBJEU;MrjGFIiLam@_JVY^TyWhFOtk=-d z@Z1PQ@kB-N!c5H=4}82!2a$&6u%^Gn=Thg_nzU1q19FgCy~qi!vPVlG>d9*1&6nqE z_w((2O{Mp6^Enbg5G;qc>N&OMfT%_fM5%ZC9`JEn+%hGRfY^p%m|DZ!4p_8417bQ- z89BZ+^2U3nGaN8CQ4k~umVl*Jk3K^2)Rp#=pymS;9|B9Jz>?Nr$t`tNVsbgY+S-#a z3J;;6q#&U)BH~_J15k7p0hM-O6;}a%+7JR()74N|6`n+;KSBiat&EghsfMPHYeBJM zLGVx03&C`fAp>YS@lVtHgo1WUH=^>_^0yrcq7S#7P`72=E?zL1pEg^!CBQs9z-NL5 zJWy|W9=e*ptqw~}KG+#L;`h$G?5yVR^0%L~uyD@;oNNS`f&gd2Y{&~!_^mK?KA0{H zDHH@9$h&MiEdqeGfL8Q}B|^9*;xsrNW5G8}1jlXgMKBehzlL+tmqB#0lD`04@3-ob z5AfEFk&@rHoQUYbqwzyFz{9r=RFXwn3gJs#tiVUZZ5g4cVoQA^#?tg#{R(6XhGQ58 z5K)P{o)ELb%tE60Z$MhA$LTe`B6q&}7s4T(0)%_UZV-O4_)hpy|3e9UW6-m=-(~0` zVNk%G@14(?t?pP$m9ekc5@*FsW@49el2E zwxSf4Jy`J!Ol}Uc{!y&#l}P-wtWWcOKiGP!(Sq>5v$S_4qkOi8>mtPEu!wrHiZuKN z=4T?8eITsRBML4s)A%og_9*}Gi3n|Js4~cyxJ3Aj1;2Ig?eU#QkeImyg6Z7UCwc6m zQgMueS7Nb$7_l!rllkd_%G9#j%M8O1bR@Cvh84T((8f>{if-v*&u zbKeTXkpR_5gXA{}3W8 z?@mtrZTK5n0hrA+yio&^wsTfU1W%@4nRbi)X6FU6dd=^f25+KB`R_r@fPpFbC%Z|~ zFCR{6j=|hW{B-3fQ3!MkJm%&9NpjI--JT(ax5{sLq!NDDm_gC#KS@^a?h;x51ly_8 z=q$O?5pN+*wx2{PI>)2*bef=AHQ^AkiB40Fm@k7CDE|-TdwFy{bhCU= z;m9B%%AYL~j;{@Kf!eZLD_&gTK^P<)nj4D%b7Q|iQs85Xgd-pqBi;<;FP;d=-&95r zfq4LlH42E;7j&mt*6)k3!bHSC(h>pEqKJf~RU|MOA#e*~jYGl`A*Uc-Pb}L6EIlFd zuSky)>saCWJQim;MgmE70tpmv0pU)p;%=M<# zZfUm`XM5Igu6y&YM6*0f+V`t%Bn^5flr)M{Q0iPd(+`}s^L8otrZ-fWREr!6ne(KW zd(fG~-I~FD-URAi!{8?jHGS54s{~5Mp$d6^y4AVG%*E#j^GK`n&3ecX_wqd(uDETd z`s2K3-_+-Er54yI=P91gwy=_Hh$`LeGuqk1229JY%^I8hSdL0Vg$2h-sjba46{yzK z2-dZYtTKQ7Q5!H&H{fEC2+f(nh8ItZuU#bxftqzRTGfKcko>^J(n1Q9oEUq_+UfJnZ{@*9iCQ(U z;%tv+PLX3#oW?UUI|V^7RUcZH7BF`y9rkCp%SM{kGtC z%gcD%KJpH&gT@{6==!nMajjKl5yKT3TnlmkUY`Mk_`}{rl>Kg@@~&b)>wrvB%2|<> z`kZoSsIsAWc0Jix%XLoCwL>o|naWEvWKEXeM|h>cdssBMX}Y;|D#O7S$V%_Z=?Zvv zGd3i42a$KhLa4)ZwSd13l+$}+$gL=6>Fl=2yG|EIKFN2`pf>U~i=KVGXLGZ36tT_n zWp66?wrOH_8ZEg5C9Ve{w4&1YcwePktUsi7R-w29H+)ymY1`N<;#wc&RUcSXyIp%8 zb!Ty)dEQ>Z9j>yCrv_CH6?04JC9z*rM3=W}v<~Vf6xutvC|&SFR(s`@e9I{|vC#a4 zJuk&aO7g3Hlyv!5(d4da#wuiAHT#2^rqN4v?P3x48lQYDQ^(=XS8ohw1fQHHC~hbo zmY&33RsC%tb2MppkiVZjbv|3IjrKfF`KfZbQr?zM9$&^JPe{P7dxl|gW?AzSNkw>8eS1cX{s_Lyb!7Yp@ooa7ZvH$7L0XK!iZAZ@Hk8%Pu0jRAGvb}O^ASx- ze^C)q>N&hGkC(0Hd;GWYg}$PPJ8$#c8){AUHMcQX<0}PR@3|6)K}}Oj$8jdlx4ni% zNy^5S|H8hxG?`Yfk#YH7A%Rm<6T|J7FH0pC<~m5t4xsGXv|82+fE zH3%xNRL1<&q) zi!#bCT20iBny*-qtHG1$2Mfv*W}6?jPM{+FK*{VM9{E}z+6vYt-i&rV+G*WokyrQn ztGp5vtgoWvtuF+~n`ah0p|ZCUmN`evL7l-*xu4l8F;L?lLwrr&5 zl}+da{A-ej2R(4-Bye$k| z?rvXFk7g5BO30HT>I&uYG&vW&q{%VC(=E2JWy}R?eAe6rWpP}_DI0I++kmUhH#T-P zm;(2*_3fQ?gIjOVnQ6oFWz$(jt$SJR2%o^<U(iOcJHMNV&d=;s@>TYI_TAYRTaD;*5BLvky3q`pUEsTCVXp$>uJ<*a0))`wZwHKlhf2@V11~q#xCQX+;#Os{Ek?psk&?zw4f?>W?8(hs!IjR8 z%Zk2CC(RLZ3fdTZ%v;eqSGOW5wWGUe!d@h6$f(?$=~fSRWk-$1d0H>i8;ECrT{ilH`?}&*Ieh^Grm> z4(eW^oiC_^06gtEU{n6!WUV#OC@t-X*mqi&yhwzn~xAD3AHmZuzB9wejzX~?J}EN zustns!&N9eN;?H^R_eXT07^N4o;N!%ABX4%?I>9;&xVuTMrW5lrW-^*A_@I6fJq2i ze=2`&?a#SFDztrmr=J7mSsJw{kx(gq`7MS`g7d4QF^^s4qqsLCk7+|(V4Bw{y?u7p ztX|%s3_es0aSPl&lH&6i!&u8PVSFAF1QH{mZ-(lJK`!GHBUz9b&3{Xbn7a+x@yRHS z+$MqDNqnxC-6~)ig-<*sLEVAozfeBeTa9+z2Z@RMbgkgvw=a^x=9abhcgqD&(lY*( z{Ljnaz%?hehQxoRPIG@0D$Lx#m;bEp0@VM+qkjL+cq6{x7<&uQodNQFkeD+IB7UOV zZ#fd(oVAg)OS~Wmo{3t1f3{QyTcFgmrrd5-#A@F))9+JodZ2L=@?nB2C|4SoVZt|H zqF28!aKM(6!r zO9wH0yTve0fnRd{pbdc)I?*km86Haa!WXGQ)}TuE?UEi8a6Zf6vO;h^k?0T^oIOgW z^V7rc_w$4>Q$=H5QxhU9%348HVo<2Ve>LDFtUxyYOF{Bzi_yhteHu`#`}TzZ7$|J{ z#mYx8P5a9bOrcwo?Q6kD*!AKeLBD9)LA{9J(q7F# zMG<1{461Cyh6YZ#Ww6jrSG&7RSNdNDNTfvguHFI}#}j7KYoZ=D)fojF@n)J~ngAt@ zQK}54TjqHYvL@cLxHKna;p0|^he@)bY-)zg4;60)T?tG!wAE9fzlNzNcaADfZkhj?6Qb^`-JF_R; zTiblCSvwtkM783#;VA+8{4S=fnR4xRLyaD z`!7_ckc(3DM<&g>_Juz$ESs-H^tuJ}au`A2_-dzfER z&41Tasj_&jNxDy^$x!#q8>$p6tMLOoqI6#V+sjSjSxpks*492TiAfq(Ct?uZH5zFy(AWFTl~iN13xdzHqCU0cWheMX-qE>{q{;5M>*`Y_8UP|;UKP+>bAZ+ap+Mu25sRjM>fBFaz3%4;CS<=auUqsPIn#LUm7no zfW=MqZ7LUFX;l}uMnqgYFH7M%^2?@m;1pOk8^l?1j%UUAX>nEd= z<#szoU85~UJiPm#XSuST>{cZo0)C_&;1`Vj!&zs#O-0NwFy8!x9C1z?;2$CE?rQZ{ zyFQWuHosLdOdCa1J3$)67#K`0*WYjTQ|8jc5F**b*}1O9CFvgYQhKA!C?3W`%oMa) z{elV44>*)PHCniMfUrWi6waE7TAQ*}Hw3M4fbg>qO@Rx-j1KGeZti|C_>p#F=OsrW`wuxBTP5a{LF zRlO*$H0m8{G8VG>E^AMFe)K~52Qdd{P2oG`k=ynDy=2M7mz1NdvGI$y%zBkd>Z;G z0<@>cb#xjTh0LJ8E?Se1oX@;m%tc$?*?hxHL*9lN{}*rB*iC|G&R96E#^05o!5Brq zerw9K*1}NJ#%QO7DnFRUmkt#uzD)S+gdx#toIhU(JRFbEwI;F(9be)p$vy^FgdikU zoE(oB%sq=I$@bn9Eej?jW#q}1hX!U7-j0EOQs&Mu3g3C@q%INbaQZcSH#X(Ej)d6y z{uYXLxorKoM@#_gPYh`-v$!yon)cZXS!Ol0h%3tBTFj2OjC!R$*)m>k{k%$`!%zl~ z(aL}(WSFH<6KQA|m^sm2ps6|+=Ym)YAqa%IVK*=@9QyX>vX^1%$AtLRe$Md|T#~udz~7YcHBQJ#^o$qM1s~%`XffZ$Dh5CUC~d?Q$pQPQvC$}s6SovjaZ6Ykq* z(fQi$JiuO7wxljPaD<&bgHKD_X_^?AO&RzpEPmtI=pDtwK&U~rLcV^xQnWF z`iK*G8N84bDAgi_k{lml1F{S+S5hEXJJypxt|Y98ExcR>fn0Gwu1wbO%!o-Tvp)j; zrdz;OM@`%NsP?7`iv$kHk)+>RCgh}*a{qrC*s%trKc399korPo(zM(I1f7Ik42ZuW zl1!)uIZ*=G2%g*@9#S|2sQ!W5!;}5PUoELnwg(Bm4~7gKb{$Xt4nXY@dJ%1sG! zF)*0@-#4S`Zx+i7aPPw-^gBT4HJZy z$!3cLA&BqnHv!)n@O&3;K+gUD2G~DQum2jq?=FR12q6kS5L8Q-rDn-)_g>@z+ksqH z&ZV7zy9*zjEVVj%Kgmck^~6sKA)CW9b8_h}P5JJQ-ZuZnEr|bAt>EUiYilG^u=b)g zJUe339};|5BDmyps{{HI{(7|W1|)EekTGH%P9@^iIMdT1a2iOf%&&oH;~|o|J*X&4 z6{Ft*iTF4WF+7tGh!~d@QI`On1FB$1o{JZfdS=A6STH2c1$2YqJfA1>26Hl%@2E5Z zBzKt@u&Fu^r!mRW-M%DN#1j6XVu#d-ganxHFKR^3#R&i|1M|HDk&yz(AgQPTYIMKW zV(cPbjii8&*CqmrZmMPo*TyU0FhGURKnHLrGr|Zu^wFA+!L@e{8Z10809N*sLGB6% z9KD(;Dv(ObefNi5y~p$Ahh4R23IaTS$oU8(;Li`cdQjE>6WHSvR6p63XSJWM;p=+` z#?*I*unK)K-~fptI7FV__GZnRdCN_RLKetS(0B?fEfVPQ6y5=bLPQ8TD5?e|4sR%o zfL&=9D1b`K~0mkC8AXfb1QArv{ z01HkwS}?wX)G85RB3%h_Jb*!+!_5?BHfxVsr=*Y#L024z@wKky-4dEVM0&SLeG`Ml z%tzVSP2msCh;Q?$P3h2vM=sc0Uy1$5ht9Si7$ALV>IGb*nN9l3e0s5grmqxaEQnl} zN{vp(u{hGNOZ}7%?&bYKmw;y#3n#?gx7qx|R*a%tB{CJzz4^~$hTBi@Ly1&?3~_cSRp{8LG#^f=`tIOeK_A+Ck_ zu@GI4N5wC$RF8bsprnmlzYJE1|5&8~Q&4l76Q&#R35fG2TaR?47mV)eDvlug^Zb0* zR@#hRXuK)IT&3{&`PD5ly_#tGQgZ_zW$WF)Y)i;d51Vt3yl)#0au_{UwlQpeUoTd1 z#mge3x;WdS>y2qVkY`6!&2V#9eRJQiPtBy?3AGYWmM-4OzZ%3Zfavnkbiico+W1_a z0Gw7yMsG1KU$5Zps``2CUT zZcP{0u$lT+BNsDWD18#Q>?z1k^(8lVX%C3VOo7)x$lbg8=K3@QG5>WwVJ3!scaJvAM!WU zN7$8FF9>uP7#c^3XJp4$)SFCM(`CzdO$%@S^;9(RujrbR^0VuLx6Y?&eAQAebL173 zO>VF!Z44%O-@o7Zl12(QEz$8QK5LxXA(9!(YbKwej*KkQ8kb~IcDxxb_LNS{e|$we zu4{79Xt{E&XhR!;TmJ3C@++-zkng?!T64>>t9;<4zpAai$DBZOS3YSJbMjhmQ!{<6 zUZ+9g+;Z&%MUiE0qTJ?k*sj?z(kNOpt@({Dk3P%BqQB;)`$_#ppBb{BfCa13)l1M0 zYwoQTExXZ=OXhVJTaK6}B+U7>--s$+K_@oDThBT7U8ZWKE3#m;I08%Do-=ofj9;{u z{$e(CmOg$isQrc~m>52hQ@$C+cK14_v!d5j(lKL zgT>aedTpFNd7p2sC;CKA&mLACwOc4fy0;ISb0j~SY>lw4S_jCtm%*bZf{(eK- z`>=y^erZRGvfR~#j(GR*0Qhf;+dWs717>l9EO-ZY7x*+`yqFjokoY1@#Q&C|zw6zB zO#Z$6_1`jd&71Ce2vK>Qe--QaF=z*_ zV_?&3_-vY36>|ovQ0Sco(YQQ56DLJQFyYH-3?M8{%!HC>YJCCOyAU%afey*&Ld@i^ zwTOBR1*V_+H;2?~*G^@9+}Y&yv#_YnuIiN8<}L4du9(@J-CVFbuxN24-oxi> zs!t;H07Pc9(mVJEe%T{^@-UUaA{J3q%AGfY?;{~>{<8&ye=d04|6oa?;zj+Qx{j3l zVPded^z~fEm*LHOYyFu#30JIFu<$(ZV zbuP}76Z<@-UqZIT$6sT!(R~GdhjmPsi?DUNuMT|;WyS)2ETVFL{)2lgnJ_5zYMsri zwz`wCe#P3oj+A6Imgo4|yne{&Z_fJ6VqxV;weY%J(<7yVlHmmCnWm*E-Yo zhPIzfxClS%^YP+U-%d@s`p!5a0K51&2^^6y%GFH)r0V={v)yerC{Yd^ltxU zYa2!Q;W7Glcf2%UG1F3v2ZVgGW5*A(w{dHuk^BDR6ki37sqwvvH|IDwqVMMN^A^qf zC1kbo+-3C>0y_J>==Hq4PS+^&Fk{4iC^dJon4u%u?s|#jB04zE&(?mWl9bZh1;6k) zNYai9%J_HLXQKYFkvS!$r*p8`)d!%**~}ksz0-0vd_8o$IkfrGVxeH8Z{S@TEbI6pUSHioiAhH&6g`Ew4u0JfHY$A@VuB2m z`hT5{*odGGA-WJ}suKd2gb?J91k;Uu^r{*!2DhKAGiJn#kEspRNtzph1N5u6U<`l^ zW*k2R`NSVJ9y#QNpNcWR6glr27y`rkQRGZ+1eK?Q^CB4eQ$-d3D#~B}@tqo{>!~5& zJl;eGgE^{TVA-H51@`Ai=M zX6fI%sn6^p)_`KV+$%y4*GOO3_c{7Lq{`5ZhhO?&fOSK9#kJ~M!Wp1@m>0!*~NRgv;Uf#|M4d+ zwtF@`+Phv01Lb7kwzdh$&6=f%u= z*2MPI*7kQobM~5J`gf%_GyHc`OnUar?6&u5UG}yY2KJBd-`|;6nHMuHj_BT=F3Kg1ia^d_GyMj;Tz{z z(5)k05p>fs+B7TQ4PkK|$3(7mqN2oHqfG2UR}NN^*|;k)yOrLFve6hN64QY)O%+rp zcq{9p6HGD@NgSFCPRm&y+Af<{*h*~YwKOQ!6m-)vL-n46_7CLelNLZbuHG8goegv6 zKLOS6o){Py=;{v5V6zELY-YZi?{2MTu7Ng_g=*kEuf7JDXff@t#<`rDCa%TY;HB=3 zozClXnqgCOy@haPR#q%%WdRzm$R7{<+-x^g>9K~cLX?0mfn+XXs?<@Cy+hYtWaffOqGQki=!# zC-5Nf>T()EtE=jK{0=LRKL+>ng+pB=wF@n-q;(hDnx#_YF|d&g)Pa{#pBTuIrZZqX zapDBlmwku2{CUfITV+dNf0?uTzy$_6^b|C9Ovm(&glKKSbNLXgKc$wW5Xu-yyu4LY* zvEkApt|rIH!eR-u`7+;JTCzwAlM$U`zyp8;Zy{_&hcCx-}0Fh;RN6E7Q zeLrqdQCcQn&_YC2O|3o+G^4n`{H51fs!Ynz0ti&)shu5vlT-HGKsnus-*oTMl7se# z0#UN3^8_5_12uvpg>1*>Oi+1^`k?uu`B1aieo0Z$JGT8Ev-0?thVL61M?lLHbCbvW zpyy#>uCAoR!1DnFV=^|AI9ovOErz?h)X`RXop&;{aik+f8FcyyQ1qu3Xww?pTpl-{ zt*xyEZN|ExMvN`elS?m*2} zs9AdYW4`jS=ta;BCK)?Z`k)huJln6$RG7><0gWUjk? zR7qQnPONkuIE-$~Z0_ARNJw5G1G!I?9rah@I}o6E2xY_0)^x_~QGm?j_dw#Fb$i#R zQEyQ_s-WM2r=)qrL&In@)F#vz<7Vn%U^ET-nsbhC6@2YZatkP+3>T4~V9 z><{Im2C{b78l`0-1l2+Ijj(9-%>=V=+Xy;`u26m@oh-d7H*P~HtkQVUp&JdOmf zym#58MM|y}3JmGVNK21AsgwRN{|5O&Gh~)wNdEIEXrM_6y=NP?ptx_y7)f#A!se0) zcMxb3EatFsRkI~Wug3pV2H0;Ew85d5@c*pH9rU$wOrLQmoJ_GTDEPxdbLOsY$LG(t zH7s^E7Ps;MsIOC7eDDiYpsJnxI8<#<3n^&@d{QRYHPqFdEMy%}Gr0>$NepnWZKcoL z7ZhvyPtT7Bo!gRiwgjt(u!gIn!IXe6P@(snuA`a0&QdJG#N=or;>e5^;(2BEZ); zI0&YDgV%z?U`|GwX`I~L+$|1HCPVIz%k@!#XP9L4qjkbV_7|$iB4u-e{?un|XlR%` z;%%1!dQre%$sTb49Vp-^|67^tA&$R~W zn@_dN z4CPGh>^8n;>3Q^&7$GGm^s?$f_veY_!dzez{(SIPfV0^Cgff`~C9i6WD?R=2jMN+8 zJ^KBjV-27wAK97Z-fqy10gk|s`z}i-;q)wlcLs^vGi3nHFV_fc3OeV&gwVs~bW&vY%EV0#d;GFMC+|y*~`Tq@8VTY;1gCf>GR= z%^&cm6Qdo-N^uTsl3oj~)gnDp=GR-u-hl*%(=ECN5xc7^S-?4}+DQ2sWpW_Wv*NRD11r*bU8s>r~6_Z?-wbg7#?vl?_3)^uj zvxFmW16qm)-mp6*W#%=GNKM~-!(S?5F>==~W5)gzXc}u|L+yg;^pWqHn7av+(=0tF0MeoU=RaDDj9H?9uI#js`<5j21^5)qyFAQ-Ry`3n7R{_ zq0B;?q>0qlkG&c|{L#M-8ghf~isl{Qj04RerWLq$oF-agjQflY-<0yr09F7~9A0WM zd@OL3930fOrqXFLbBNQttU1x?j)K-x3Tr%3Q;iHoR+DnPyvMd#(gdBiR_6OtZ*P=j z?WAiKGkeExq|9>%p&oy5w%2uPl}rsZVOB;JIjFJ$Zny;AbbsDSy+5UF1a(eBAP|O#>SXrqZ%X&}<5x$;xhXQWW; zqrYqGJmGag>h{QO8XKO@V>8xO%LU&vS7A}#>&|^z2uoBNUw3N~y>r#kUcnknfV*7M z?TV9q*L`feH0bf16tH1`8lk!VQuT+aUG1Kyu}3_rKc*l~oDE4$>({*iX*g)iwz4w$ z#ha;QWG?NL!92k>@JKV%`|1cr5YS|2XCI~NwwU>vrJ=JFA58V4Ijq?23QPYE!}yai z7e){)HAOZA>dRtY4LeJ@>@3z)E)k{~gSbt(Pz~!?;hB4lj-s}A{m*=1Y z@WMCSieOB}vh3aUPxjGItXF#@6zr_5cudr1ccm+ps*^tUf!3hj1IhRE$B`OkPK6&- zWG6X&HZ=PefeXd>fV^NOVRUp91fR15ptYGYko!h^o68wr9SaNY^FC+#fvJK%s|9fj zjI;vNb<$-yb5Bq4vYOn22+hm{4LKL#o<@!zPbZ9=i{@$^(8~fo)5XXc4NM&|VD98p zl4{CYo|*ZYjcyklXE92Sz@s$R9MRp|i?{abSGeMMOfG2~bdSuL>MgW1r$TiNj&KKE zHEssInX=U_AZuSNE+W6*u4s6=|FVhtSI>e4(1+R_4w|#b*MUhj9*h0-x}hG;Z~Df- zDcz#BU20no&NmR^cxX3-b{gD^;i!IOu)aNeBa--(!7B+HMeAzRn~siRHqd;qBGeke zn3K{Z&D*&J4{FNF%>2XbBD|%DSVk8KnugaL5we|QWo-!;B)cqE2l{UNjXXIQlA2WJ z`3SZWJ2T+(B)mn&c{GEW68mwsU3u^0hrm4(#4Sp!X@K%nvJG!s;Ov@R{FIFf6SB@T z2>DjB8MHQ`#q<;Kt7&T9msKjV7`>-^LL{jt@MEge9ic)+k1H%6$E~zZyY0OZ-%z9K zXlLX>DfZxVw!6`J*_Zr`^J`dE6@;kTYHb`#gn3$TCJ6ypt04x{2&@?YTtRPIASIbk3La>iR~%gzpkeSOkyQ(`}n%yf#gw*~K?`2S`?^c7pEYd`18kE%K&;ui}C$V)^RX3dq?!PoZ z+B`G?Cu<6i#7%IX;F@xQ@3}7XFjDLFVZ$ex)!#8s%&1e}ok2n6goQ=qGFU47QFn{- z;ae&K1%>&azhpHj=W`yojJWs(iZJsq=~w_q!@Kr3he#WnN8i!FHY$Fn{05c{kLOP0 zNVr?^jw?i~Lr*x1)JEtm@#W2n6QdLpuoAvhg&V^LqGL1I>HD##{y*6MBN8>b+e^UNF=&w@uLpx?&Zv&O&`7pU$49qB;v>U6KTn)OUy z*)qn*1P`2az)^y}RmdoMsS6C29Kel!ST2Jp=B%(!|Hw!bQbiZ&(+n`G=`fWv{~W(tf{57(Qw5G8usxz zQXXqK#wqE~;4STnUl}?s2^#MUY4TH-1O#Z#AF!eaXco|zlvt9R(MD`Q4U?@dJuaL> z4hCrfhdSQ#fo{y5-$54nk+eM>1ijWLobNf|2jk|s-BzUUuYY?fKEtRabOajWw}prb z)k{V~BjoSS``gk)Imy=ZJIp-;{ubzfG&JW)b!k%?O^mg1xQBhSbFwv%Z>Y$O59ndLsIC4V8m<>>|a?0(-@p==Fh)EP5X&MD{#YDV#;WPA!warHLK(V?J zP+w``382@Ot@D1S=d*{J82BspCBB2QjAAYV&EUyzzshCf^ z5X`7)5XUcbXMi@RADaF|ODnE{J5s7O^y4}x+fX+^`;S6rpUgf+=T+4qy{8a_8m}c3 z&-kPh4rnBJtk`?f|IphLly-X=K#ayQ2U>;C}skToMBUCv@8 z-oZn9qPmF}LB@GeFw&h7EN6KECK+BT>7^>3F_XE6aAs6^Sy@@>U=gxtqm^GP^JNKf z=@M1=W928xUltQd-&9$LUPT5)b{0CqshQ~L-W7Yv=PTE>GZD{sec*(Fczg?;;9MAh zwVtCBm^FrnfIf)obD6dZP<%7PLqLQ^wBJzKH;&iVuxdT!<>OOPJ1qoFAvHT11y3f` z_fA}NUGDW#6ASly7!?Vs9uE@zrCKo|UHM}Tb)5{DjZoCeNP~wgTw@0HPlz2(bnnFh z|8>387gqy7u6?wICN0XW+n(02Qinu-y;Bq&`8bUE6PQg@4j;$X7;L=sYW>ZfqEZI- z;!PyWCTOBE<+DFzgE4ZaACDp1$A}u%=Ftsfa#am5>RW;zEXo;2I)9faV}!1D61p1N zfBgiP=F?-C3*-oG)(z|=2_;iala{g3ESTW9En%d1!{}oA*~m&zzv4t3gGDFKIb&nH zb3R^yE_~y1n9cXwvmbhNK5AaM-Nf%baVhU9PNQ&?f1kT2Fu{0b^(FCO zp39*i7}QWv$63~#MbJYw;i4Uk$jdqlKWN(_?*6c)7Tj-E3pto*b%MhkH&$&$3XH%^ z9VjLo?`?s=s5UU&TMF9CCx-3Fv>F58KATxCR#)BuF~*jHXOmte7)>YJ^?mhL06K6% z-YE7w#0;BbE55y68#_{p72@w%HF?Dzg4gs5KjhSOtEwR7)VTBd_?YzN#* ze*SQz(F~YG``+I9%Gv|`Vr=m`;~-%q!KIn|4c~|xpYv$QI}9du{iT7!*MV?QJ32V> zu_VuC$oj!~QwO7?hYV~y&$yt$$Uku+fE1+oQB+epxwN!&9vBL?-D+(CgT8y*3T%dK zdR`QvH+t2U9kIp8HXAK4?U?>KO}nV7$Yj}f1lbZ6`ItIGBcgk(iwg$!QX zXy0Y}$b*-^^E&p+*O$MR4!1s`keF<~c%*cKDg?Ar2(yC|g`ig`gTT#RkgbdLodL6c z$8TPX3XHr4o^hy+MU6Y)0gM3cy(%=rNzXRkT_ntfvcgF$&L*Twf#cDSaC;&i7i*<^6=0Hc?Sg0fRAWEYJK3=nyuyjGW$g47}c{`7PdrPHZ-* z(u9vb4@kznv#f?}V9X0zf}2lBin~i$Yec`#PM7+nxvq{RJpzAI8QC)UxYD-pE*M;j zm`OSLTHm{1|3yM5#2}tZEb*L4$Cspt$z?gVdQW4>r1kLdAfaHm5fwfu1qO)r-nG!< zXo&G%%*kUZi6M#rHMU>sfhYpmjU}%+#CAqV9iZiWNMlM!_wsqvO!=(A6l3lMnbOQ5BUUg3 ztixc8<;iZa8})~=>wN*9c5Wqx&J|2N=hsWhMcf?fK2-x&?#`IKvNoY}ANg!85)7%5 zEa$FvEgmR!%|ou)>8(6!=9FwtX&eQ@r(QsLR3I3Q;=o*hl^**N+;MqYZ>^c)6Bo-l z$CQ2GdFhvRE_FaEX}F&$rN|JVgsq36+HJC2u?Yrj0?K3|GY;~>p`oD;aUmCq$TP>k z+yV2t-b;VxI?UW%9s(0OpbjvG8)Sy3Ll2e_^bwE`hm>#*M-rH>GU0q9yoZbc`{ii3N$H&J(FX&K*?*Kq;!#J7ktkhbY%w&R7V=uV?9a#;U zx&m(;2EQ8_fC_@@`;tx~9!Hh}Dqm&?gB^0MNb_7`P5+lCq)+%y}_{J3`Wk50ok|~yagJym8gJse zJ`(Kb(4r7onezvH#XnLi(EO&$U`^y=b**_A7im>e~jdS<;kKk~^1yj=lrB}QD!+*Yb}&e4rL zfM`bdOJE$MREPj$VBzn#MQbd_9;B9n4j7n>V&Mc?l+3*$$}0#pXcTd$!WbABzzZ3q zX7Q&_$CvH|QoFK%iM(RBP1oUGD|o}2k%f{7FYo*Zew;9b|H9tO<}D;$(RDb=z;T_*=kOI zXB9o?Tv#Cy6nT3rttL?%%=Ku3rniY70rv)deyh_gYp^$*GSEzMx)CTxb#fMK=iy*> z8`Yw?__%K>wGwn!TCAq}Q(X=sIk+gnOQNdoC*M>FaOO1^HmL%xv#QfX;xi55d zE9y|VfA~^C$@{40H}?gbelo&f4UD8=@8ejE-2u8pEDM}Y-3>r~LIb>e`+)v9HdH|i zm50kH-<5JS;;A5-)yC>q&cQjz& zFnLfpex#Pg8{0vqyFVXxp#5#Gxan19&^!2%SXf?q`iD8_!o() z$o==2BXobu@0ZA)`H+TDRCrHj1bi#C>1x0?dr09)TnD|;gMG>eEHjP1>{IT(Yd6eHc zaR*=;HSG<)=9}G>GQ)-)_;oLkjV)x1Op{KITR$J>l!4Ltjkx*ny@$e8&`~cns$_yK z>^1vA!wLO_BAb}QVe_!agXBrZMuMIvt-g{ztj@jSHUC?D02C)tcr_21Iv_W5eCZ!v zHHNJ|t$FPE9iGWh8mQk#3?0h3K{U*A@fe*PrpB5~T=*FC+pMD3#hUsw{BPe#r|+j( zp+6mN(m1)1Dk1pjps3ssbks?3)L=zkjFrbBr~Ml4K`79$@kZ7~4$ydBTs?5xvR|_z z_X;i2gR`Upd!|i|rI7CeyfRBuhlnrc*9Y-}Zb)Oe=hT%=D0o^V@i_r&E`!c^-{Q~I zy8RX}Omk;)+?M0$gCl>J879rY7p6~BHB7JYImqTD?ttMuc{cDti4EZ))9=o-Rh}7o z$FTZ@>&35PBhyxsc$ZpTxay$HFpHDPufov>;bi0)l${Be2Fo#xAcgM#>ZlMf@?4}f z>^;*G8y4Z!aALlRqx{12dj9x7S%$8n$wBN)i6roBqy@#I@XF%sjTOpXOL}3JU%hh;%*u{piJd&PdGJvGK32B5P(8Z1`ONd{Csp%ETKG38(~s+>6=Z$qInuENhpO>**~Bj5OG~ z&~`|z?FMXJMr(1yV?Y|Jok(rD)eliy-Q zKL0=!F%RB`Y~9t53u!~+3E^6BtY+S zjFe)3@cn3{6b3wBe~R4jCGegzBic9vBxJfs(PePMgcAGXhFcONomK42CMetNIx(zE zS3~j)@g?Y_8Vmy*sJ^DI)L>;bv5kV#@BA*tLi z;yc56pi&W!rCrI1{lfTy+Q_XU6x~Tat=mH>5DNNvMXQv8xverFmYM1<_={2Huypxvf6A6JQY&`CQq8ZL7@tBIbAQ z)%9Jaj8KhChV;7Jhc>6Hl#irxe#EkBH^u4{n*&=6RJEkpDRF z>z)JI;AhwNpViRN2s-rOso4FL3YjVaLj5sZM{?^!+Za6uh#!Ia)t(KQAkAJ{q1nkFXD`0Ig^ahcX_shS2VBj2Wc z*KfnCLW3e*NXKNPt^FFqOa)L~PzBm9L>f`I{A)kqOIVLaJp5w857jpfLQ0o38$H*D zo830L%D!%=v|D>j%_Ic*LTU`)Kh@mUc3*2#w#Z7O*$!E#B8L(3G(C%UpgBGz85wYV z5){eW{=M~D_W``hHYKGE+R6CKozg}bOuyXmI_01%IP2^$cV0Kjko)&{9B&7muGFBd zs_{U=^*-%@P)ieo8=N#ebo|PbxKHv3>8Uxw%^VW6PTfuL>N72Q5)CeX9rf#rhb!@!aYr|X*Us~2TDrX^-;4u3V@9XM(ckXq+>wr|wV1jx z_JX|T=%=P=-X~PGA&)(J25|en3Q{v4DtSa-X(=R9uV_0H%j!B|aRqL{5Aen7LPLk3 zWxsU68rB7_?>g0Vz!%QbusQ{9YhrU*PB+_bBc~&K`Y?z|)%7{+2FzLpbGb|Zf#W05 z=b@FsJYFWRf65&_hpS9002G~@BR7Q+j*?^we+9j|I>%#Kg{l6>6D)7fa8HGz>MfFr zkBaz=zw6)c_K9Ld4=nP2ra@4Zu;{+H(n{~!KAmoqHM#W}hvRL^m8AH4j081OA<-rk zS|OX<^UZ82iHe(B+NN!BNY5<;)zeeU-xmnJ;^m;aJi@A5G%uPeF&qsiES*1m+g0HHg6cB2wgC?pz?6(n_1Ne6Z>1b*mCfhaG;--MUsQtJTok!F78km^u-WVA zX9v^C&!02TrAw>G9vEBya};oMo~ETfKJ=;R^BHEsC;5F)Z_LzgS(P?9T+in86Om9e z;oxrZJQ7m~ftQK(_5i%xuU^E`G1KSVIP1ENW4?1N%tCe5dKnfjcUV;VGJU zj##%NT;O<%5l;uiY${vyOUwXNv*4M=hf`zKnaT_U|97aS>m^&jBknSrF5#VLJe$JH z-S75K&Z22XMgD`Rrr!wm;bzFJJk#8m}^!xd8i>0DDC7Q#T$#Lh` zwaZN8lXYIa>kNALbN?K04PEV_HKL8GbJ|&m>@I~p=P;$!Icxq!6%Z@kNMpqS z0-Raw4fN0*M)N8HB$~^b!xq)KA_8bm3uf+LhXI(DO6>$Q7pwJt-CKb9lxf0pWomG) zMKf^RClHiiQSRl+&k2haK%cz3eHefz(ZLz?*}t7pD6%p>S~OnAN@~swPH;H}65Lfd zc7F~fb(SO{9_w}@+xucW&!8>9%Fc@*Gy)L%`n0L{t@!-DI##+qRBff{Ql%Z2f6gWi zKteCBpmtGBo}W?8fS*xK{eM6;i?>isaM}-4(~f{@mhYmP76eq&4fvhgsAdiU)kN$; zHCz54Ks8a%wLrbzRWw_3D*W!YUd$>`=FzopdU?S|>DA_k&Bt^xhY*^ z5Au75*z`Q~&!L*AaII1FLI2*5(c8iN4XWujvW;x6aG_$romGDc ztLW3!$~I>2-}#-LQ$(BqWV$*ZwQ;PhqZ|OCxabBG?{*YEVbDX@f^mqpus&;MI!mUyWPXI5$YLrK4inil^4W*_Uq_ya-c_3a=#msTpig$sYOCHY|Km!GOoTW?fs(f*%7X5*33Yd}_ zLPJ_V#7hN;?VZ`#BK^f9fWOm6UfyyXuadM9iEvR_uRU?z2z^QCsb(z|Vn|}f;hfix!#J^2p8hpnFLihfm zK~Y4$1E-6FMVMWJzO#=edF5q`elv~c7k4{9)^leReG9B-n`iYLT;0NI{#wlZg%os; zf7%A~pNOJjRFUuiUb2~o*%r6nf~VwR%d^5i*z|(ApI;xELbP zT67_H7o7tro!q%@)7x7*MK!{FU~(_CsQ-;+N^b`_gBZy|@udR`JpxhJnO1XkQe}_s zN@_GSh0d`%%o+q)URx`=a@sm_HPXzxQ;uqZ8cV!u`jOeUB7c_ks;n&(+>*}mq$IDJ z`!VMXbK=K#oj0CuJWJPqipbTO?mwI}GukG;tcswSfzgX2o{r{@wze3d< z-xUx6drLCdzk>);#Mu0#PnJaQ7J0z3{e(wGgzUhCLJ#ZyLSDLdCsS&t1e}LkG?zSTPXBB0*&Ci>-rscTeP1n&ww;BFh%fdTvnSK zUwzW=4&VE7ORC+H^AAaA{5HjJ?^9PR1_A4GVA7`@u za9?QJ2B&qn>D6Z+yN|1ve|T8u*XZ{o|KllsYHI?53+7AeFWa-7$Ugt+8x|jIyB-di zpff)_bzabMgAO@t&*tQt76EDL9G_|dxwyrtZ!?bxbyG6)G&;OypjQK?We{uDt%gSp=VBf~plLKB*egpgLfT^+(8{WoM_MCOLYcr+{Hs5HYV`eB}u!NU2Tr3#B;fHtgUuzXt~?$ z*--^{P(SQ31ZPl}nCu3%?O|@NKR{5}dPH~X{x@ru|5FIg20rFQC?9;U&+KJ931tdQ z-}aut6BJj1J^E-{Uxbv^E$(w$$h_bar_|AcX>r5j$Cg^mEi5Nm@Z8=MJ4A!~qfUFv zfaTZU|6ti68hXOrUWHl&{@=Kn|0d>FE{k7jab+MTAbtOZ2IhZ0(^(MXN%6S)9{^6V zNnYNQE;7x3VM1*slU}yP%l&opRZ?VbDwM2C8*LO`R10{d>* z7~>cTE4|b4xy0XtcT2$#PEJ27n@J(sa8Ja{Cl-$ik#n(+omm~yS+kNMAd6snpZFUp zY?D;(G)(LdsGUcX<7Dzx#|6^F@KdV8NY_&TC?M3#+P>mGS?ALRKGV9JL9o6`Sei^X2;kGG!FX`iI z)9qjFw#xJmunm5l5}tCmATh&??0jmMa@z-*blWq<$PU*|Eq)cs^k3}}0Q{pS7g49N zEraS#xO>!02&HLp)pW}M9NZ7g^L)p-XX=9aiH4YN-zZy`_aPjz+G&68%nj_4oOuQ2 z1{li+KOz)r7Fzb6L8~Fd*a9*Xxx!(SAq*A!J5En@7~!ZUr0o#fgl1)o6tcs#FabE5 zNmJ6yci z8?W^PbJ8;JH_Mb)%2rDX{^hHDv)_KDY6dth0acSK?Gzlm%!>}ySU!b6CZs<=B*ZFeKg9F z4YLIzI63O!rOWZJ-+F~-9RVl^tH%ST>WB?oLstEqD zIb%!VL~4pI5967~n={LS!Wma-zJ64}7rM^2!U?6|`5+jR<#3=GA}zB*oOxT%v`Je{ zW`a88CHewJ;^xNln>rcu4rIrwz<(QeVfiK=k%E=vp7%R zOl%i!KTw(fQ6zG;H2LfMH=_lYTssqh$(g-vaz>vOr9b@)#+1#F#mrFN@niw1BHdnk zcm4jvXh)R_bIs!5r5N;VD`L6HbT5x-L7+3~H#lR|w4*7tQ@18)CiHk*v+Nek3{xnL zoaZdN)R^i>C@uGToJb9V#|bHYjn+NXm`>CC!rcy*{H~f^=Nt+!%0wFu>Pa6r%&3j+ z%jw-b{Fqg94s}o3C==LA!!L&#tDic61k`g-hL@!@-mxnVGYH8iC1l{i~~q z9l5^_B#y~)WpsG*T?4D8a-xlI*oK!A8hLb^rWZ2T_JW(mYW&&qu3Hc%?i{ZAHcv+G zD9+s#x(ThB)-DPzmVzML31Q>R&>plqI)bS%>-!n8&553i8T9Hc#Ws8z2hGXu`9k`o z7!@}DAGUwCACs6lYeo_t)K!tc7?as{(^CJkz6>R}g~F1>R7pWYni^+YSFgc(IgcnLzdc_4oFAj*$ALAs zKjUxwxvb4;dSy984}0lh(yeV*bK>t^&75DjnixId0y=f@mPLU9^XD^wU(U_2mljt8 zdh+mS(x@Gu|KH-5Z;If5Yi^D}(q+mgAYE1?PK2LGIyckN=48nepJ5RB&NTN>H~AVg za0+wd;^LN5?)wLG6U;e#Dj-~PGOhZD+h0kCSv;GOTuPHMV?2ZhLms~e0bJ_EoM`4Q z6!0L=ECbrj<<`djwmNjstH17&$b*|`IzOzOHRHh#MONV#dYlYCtv+Qc9IRs%>mHBX zTs~Tr+SkO-1Ak>CrPXhMP{7q8INVuTe4;!@Vg_I$v}X z%Um$!xkw+N)aGd=qSS_B(hTrbVXh|zG$FAG!eH!YB{RvTg;dCIkwp7vZWA$3071!| z^c^~pe-Ss&Vi$lc?8dRscGm!arUsTsDg9QJ86{9!8a|lY9OxOlFWiB%4$}`?kZ4v4Cen!^|T9o%8kf@o=|r;6);h^sB2I@K-0$pDeP-#ptj{ zm2PR`wJ2Ns!blqM-~Iw|0!KT)me&2`r#O@-^LOqG%1I~3gaD@ZEtmUwe!Vxvm}lqk zW6&5kFu9-jMo`^P#=zO3?@CDI0M%XlGQntj35iqbnz6KpA|osLR`W~r z^2fYqSV3wO?uSuvl9y%|RNMv-C$J08RW@fthY+mHXKD9Dl81yt5dMLPiPQlRh^M?i zLVZpYebexm+>7ZtR%y<&OEf^B6qsvHp^+b5tYZ}x&amPd0+r*Mmyn+mSzpQLiNeI$*3Du`i(m zERZ}BWxEGhfdd+KfrVLlby8FUM7JHgY8CQB)xySjCqbQLi+b+t z2{E5eGpa#8=n(J)hc*c#oMs(#TXjnZh5U@cRE^n(_uwcyK2em4SNE!NA_(s!_?F9P zwIC+4fqjKi!CopQ9_!#P98#8{S=A-Gg-X7%K$5BO#5T@t##SE9<_MyZw|+BUsR2`H zX}!=``jC+_V!G~HGctw{uo83OtaPFEOyUusa5{JbfK!{?JzqRVg1R~PAc%t?Z}sV) z0Z#InsmN)nZ7-8f*w0DLx!_BAXC%XmfujW2Qx3UU#hvo}S$Qt}ByNk}oCG~|KTUK~ zhequRNM-Nmwv^w1YB^*-ic@t}f2#=+?jWu4&A7r7Fk4AsKV?g+Kw%kI<5OeBSGVpd z0P94B)7!vC-X5PUp#>M00_9m8d9~s0+fVWlb9MbK+RqA5vB$O)P9Z{>0}~r)kW7`7 z>2H?~UgumpuAkc(A0xq&HhO3AEZR~Kz@9>mC_ZI99b9aIUbOv#uD3~7>R%4D4Ot%q zabZQ2By_VA5KT4|yq5rc_A|Z@f10o%>v$7m&jxwF^4-T_-B$=T-xSn*!mt$y)qIk_ zg_b`y3L~dQcVHev(Y_XdA3q|GU*b<}`w^+@e&r(;7IS>+Pt29%y9j}T# zf+l=u3%Wchf55$Et7)ggL`xGyOfQjLep6(}{xpDXd#Ha2Fn^TSRYEKbdAKOZc5eE4 zt`C7q9h7yWhHZx{@4X#v_q;KYuJuou$2Ma#jBuH^Z#CgPU~^ENeGIs$Ti*j9f-QN+ zp!GS+PYC;Q#-Qg6V%~dzDLled@c~%pyH?ZAcCumKK-&xoP%gHnh+&p-HZHn1CB-0w zm|Jot-Mj=&i!bhumnmtH+Qb-o1qHkU)N;n{(Pr}*WPxS^ai2PT(v02JOXXvx>p%})TE z0HXG^3)}4ZXyfpP2r8!gOt$lNx&uaktU9_1x53;y98sAlY+u0o=ft=ndxm1(_5gnE zK<*-)fu(9>KP4MDN1x^3MBu0IRHEGuSK6bCMv69Li#NY8t$0WwFjK8J^o8F}xISgF zDC{}aomRGXU2v8p#5ETC(Wo-}!Ee(!tCQM7n|k#UCuO8MfP1U)TGwflw}B)tsR3ky|oJ~^d_MLTXZ4k~e% zAGQipNneqs+nANu+RNfM5ifx$KJf*YUYn%tul{-P$x|+chiYg{wezJ^>9yeN7{1gs z=+w?GnN1E@=dFk3Q?>@z8R~Q4*%mJf+%CL0%#D%o;t6al5}{{AlNy^CI^hP|hST>~ zqN_9O_4qG+N07o=>TL@)T}@5vd@r1S-tun6t{B80wmQN2T48f8^XPCkykDRn zw`>S`E#+m;Zee`5zJBrR&m>@tW4UD)!UEb}-}hbiq?}x1w(vmLEcfi+!Zrna=Lpy) zvm7Z*N-TFF;0_%(}_?D$9xBQ%Nat=881-juLnR~b1;iB1~rFH|8&KHeARR`mO zq2-L%?e4&C%(XQPX9-^5ixaA7$i0-z5_(MRG_+Xq^28@t;8|yrLX_?&UVl_qxxGYA zt5&zQ6Wq|d7m-#5CN%V8;G8|1 zV{2dY^uIx^+@In$H{k$lV{1d}Ps3oz-BSx#?9!{Q25maY?)f1LU02hk1<2YY7<#|~ ztY=y_GQEb=n=|C}+Yi=KhV%oV(<$R7QI0MhbJoLJbOlqn2(}mP+;XRriJhP&@rhu^ z*BnfFjl}2wERueOtYMSJQ72LiZ!?{v9v^24X~i_?CUP=)-vE7U`%<@y^k0e6&~Y0Q z=*%A*%gfPocb1Jzc)P0`)E+ky6+wv%Tux*M&?(^BBr5`~GN{9VQBKB? z8=;>k`k#;!D1f4wdlqDuhJXN^NisXYk)c^&nTLsvziLRoQ+^0Yo0fHL1jI~M5Duix zIY`=+M59w{RUv89UQXBy%A?Nk5aN=BqW6FL#tnby80$N^itALh>&FM@(_0UkRCD>E z=Fw(`BslK28@P3trBxd}ZYXJkmdv-wU}ysREphTs&3$wkTbt+6mkg8opv?w2eYxYX zmT*xxUTB(MS6y~1%#7%t!vsr7=kA9C8Ks=GI#P=eq32-T?u%$*0J9wlgA)^w1xS*s z1k3yjpSDF1q)k(}!j81*3X6cGO@0yE0+vN9NZM>Oird?;%AL+_BRA2CU@1i}BT> z-pxsy>1}CKdt2Jv7zNVid!un6Z3^7IG3pOVn@e-LvWI+w#6q4DJR@22QBOm%=G3V z8ar}qPE-ItzG6+Oq-i>asDYTuw9*4nLtM3S%`bzfeSaZ{^n{t=*2Nopeb79ygQ!=Tg zl|;H?;MCa04<*({98l9k@G_YpR3>L%b>v4v`K17~g$u#cIK*L$Ce#=R-<%_8l;_i< zX?O6=8iGRkKQ}PWFV;p|t{|lD(Gskmc|wZ{+jcRxTf}V_bGw<_!hE(HwQX1CN6Sb+ zIDa&1TL|ZN{$B~~7sYGmvGRYG-ofiNWYQit6-l-enP%)G zm$vKTCaVh|8n^RR|N7XM8i;7z&ZCR15T6*ookvH<{sj2bk32fYN$w0#&T_2l#z!}X zbwWe$2Ue(`Oc5nml3i6C#$u3!iCzF64x6quAP1-o1m_5ka4ra(qfLS8(eKrfj|lk* z>8|ey@kIiRxgRu{RILD&%wJKfGazI!2iWu)awhXl)asr?eT`QUpshU;MNcpi zWPd^zIq7Kl4mc*7tAv47q99Ho92|O+;AJ|6!Al9v@(~bVBn_lV+N#z0CO{Ex0=L1Y z3lW+>MR;4++sSt3TP%YL3GL22YGM8BR%~<$(^H130P*{#;X3N zz%U`BsGvL4C)}Z)Ae^A;geR;JMR-7jriR}@%@QF?cBM^2AZ^M(-o~>XX;TA8nFo8qaf z@&ek$E^V!vsD2=j9M)6znQF$me=U=i9w&)Y%0gTSUw9#yOuSf_?b+SKoK^{r(T(nU zG;>PG)y9M@k|7N3vJ<_)M0=z4dz(Rv{mZ(xYIGq%J9RmBSgxzsgSikD@B*A+km!F) z^O-GF=RVRIleynamd3U5r<68C_%`zRJorcfHJd6pUm}HMQxg%F3xamxo*F|%HyB^# z9v&koFPG#_z(V<^gabO3202Z7YBzeipNe7TaN=T=m-y0D*AyuVs}%WICwd8M9 z3rsKFw$N-FR5y#8e$;Z6Z&XkfcDub$iGQ*uiqbXhf$6+Y_w!6s?HIJObpCTiej;OM z#we7IAGV;D1eL_kb#IP=ugDt#S5D;?ird=L_I3z#dVPkQqpeyd8ELSVszn!* zani)czGxBB@#&+MBQUPFrurowjkSB37MU7?aJ#n{Ykqr+s=t%X!^GUGwNN}6EF>iy z1jmpTUFqj)TmI0tD1d+g*@&G<9_biIcM)!fK);ojeuOrpvt`Uw;vcn{B^q*(-H!@z z+*A}9J(iJdbyqTGrMJyt^M<(C(AQ{M*yu*NuRuDlSg|rPkJsPD^A>ZcX#rR};&qK& z*ISGfx3Tk;0@MQw6eMjLG?wGKCcPPLXAyPiHIk=d^78_SXlj^GQP(HRjSauyh-?d$ z;ULV)dSf_q=xxc=!L^`z9<#P&XT(Jz&)(>X*SGOvMw?oHawC|yW78bgzA_2E`2hNY z;U2F}XhwpO-|OzES$_VRlbef9)9w~x>}^hIb^NOEOSasJ6tlp@>@IRUs>RdHnQ^4Z z1Q$|q5Eea|*)d}qhF;^*a(k>)^E}^Pk%V@#fu1`dV51E|5j7d?SBuG8Tco64@n8hC-YA<|&p)A(S z;^rRM38~(mjX%SYf_`YR`k2_Fa0n$63Cu^-yh>|P$6mStYiG`kTHzSFuUYH4(bA>3 zX+OTCb7DAWvmnQC(>BLtWz#rgtU93lnFNduI-%R1Es9U)5bO+f*DEZuo9iO6PU^Q* z%-lxOY2}BETU$z%PKe^yIRa0v`Z>F;ue4Dv*Y(>aq-^4s=Q5dT@G+HhO2i0u*aek` z9!$j_c=`dH8JWaacFGo~JLclGw=3`mRi#MVoyv`{zYhdt*R_ zL8$~vLeCo;(0Ld%f*>#>L&1>$?VH$)1Vad{)pw}RM7ZrAk9Yg!34^z~;J?#h zm|b7n#G9EY$m~4p9r4<9ZkyxGBsidL{);>4^MnpM3-lN#(3+xz4*Kc6+UEa;P3QM2 z$^8G#qoSSSKp6SB5IWy31a=alHB|`O=HOm!^MC24H+!|sH(T1~f92@(r+oOirbS`W z5Q_mG@`T|9q-`GB%B#KF=6~jBQISylLAM0zwKR|wMQ2XZEj{gV_ z3d&z0aGM{Vd2O_;J_X$7hRnMDW|r6~dgIE1H?VJk`RBURF0oNo< zf~K6!&46(XJ0eVd{7nl7!#Vs$%-GD}TJ^Y6sV;*IV)3G!SO+S`Hiug75x-}xHKj%e z63V?o{FDrIRA9~X*&N!}NhG`D`9$WGL!c0!-(% zpjPlMVp%Q2%4fX#P|1sgfp57}1_9*YEC3XO)IS9E)t7^uWQo+82TfaxM%3tB#P=wg z2*tFsuxi32iGj2%X%f_Z_h1IO<8JsDS~H;W!J(22sO&PfDSrQQ7Ahb;lB1XQ>#F;` zKGJ31j&a2_MC?^QT@$sHU}3=9>@FwCfTpc?y-mqQ!~MFl1<&q&AC&f+)!Cd&L%A&m z;Ib3`xO8gCby^J+oj+?7INtpke<7QaN!mj5+QU5h&khI&jy8eopF{WSUhyM%n``wt zn;WPwbZ4Uf?fs8lYQH-4XWfkeu(-zWZ9O@l@QQ@e!E6@Xq z8QP1_-5(kG^a_;JvJO~cI${UQdv!}jN5k^HBg{0)L zP-2`qFH^#Vo>9%U(F&!I)1y#Rd8L+$ME6n>nXfT3hhI)hj}ds;wD9s&6cq0IThu)4 zea~0F8Jy!)5tXll)4;ktX={)fJp@fL9YBB?1KLzeH%I29Qz@l25#EhKwbro&8FL+I z!7}4L4fl!<%m?LrtJkqYlSa6Qpo#Pr#dt3P2Q~1@=uaK5!E8ak8Zt$xuIDvIiiB4D z6llfgAt$rzJ%{luVQz{G+C-=vKe}04bmlMTL2ny@CUxiKP8CFV{+RRGb~?A_*uYAW zfB7kSPk6+`GQn-YEFTY$rPD#qrX-*@Qy_ZtU%e^t#})q)ufO@&*#$lOh;^wUXVV`z zn<|jA+4DPqFfaWVYy!OQ))oIIdcWE{I0toOVG&OtXOjguo6z(hOyG<40W|`>`LEox z>9#mVBdJI8bl=;kCcb<2q^XxNqPfS}XOutx)=;OQc0SlqKI3k}GJlu^NKc25K{5ru zN|62k{7*Up8RSM%;!gwKuLLSa5gob+{LMdJ^AR66fb`3oW(UqxK=|eJb~1&)UJ&%z zEZX=#O2O3>@53)&@kGF2iH%0?f0DVuU^kL$Vf$(Soq!rM`A|4!>)FzjKMc|YS9+BX zXLLoMJ=x{wC3epE<_&w?O98MTYOd@mDf~P;0`*jU@kL0S&exOlwUI{~x*UdIS-*Mw zke}(M%|CySe}80aw9UU|A-=n!8SLE zVG7d3za57ifc*|aI|)12_(o|zI}BFCd<;efw%A)(8*rN$8kp#Do0#bt8(!oxG&36S zDoSPTaE$0hUaO`)-SAvb@3H{TF=C(J1Fj~`Qu;n37qq!s@{*Y3n1E%)`M}??r9=!- zCwd1$g`an?I$%;X6_!J*68qN1XWmK^L_ zM@Jfp9=Q>Pa&TUo!C<>x7t`=vC|BpT$%&TDd1lnc^2FR!@j^9fb8%4~-`&x%x%RoE z1GVg7k+w0UgYTaR-y93*HYX|E$U&|2cDR9wVE)ZnEPi0ZSEsORaPxcI#u@@IvZR`` zFxBn4ytwGGxq`BgEZPX*-dv)zK;iqVz2n@LULlreFm7`v;?mX! z+2obI>@CJb^Lrae0f4=b9y2vM|EbUMK$iH407i#jvJYxojBw#%VxY3 z{f_Z>%OgQosXYXl&!1xwP`7x?NNRaEi>$8YS+XzdLzhN_jH04!(w_NzA_mIi8!;h$7pH>ApD^HW}yX@f~Dbe zA~vUuxNRf4>;*85eXxkTHDZnledJTxlAR2D0Vcc27Cw+VNwHoI#ojq=@=y}>d*#9*jyOAzng{dJ} zYs@B8{bQeB?p!@H~FKz z>sbM6kw>z_aE5CBgXZ_AVsv6^KBe)=>7HLD^HQqOzYx{+v7DsUN367W*yg~J10U0v z-F^&F!;2FaV`~=^#YjF(z7s1Qkv)}+5$;IBWQn`is4T5~*WdK?6vK)Jt02J}SbN1d z`)u(zdUn_fd9vn<+V(;*643&T-$cpD_mgu;RVb2+?{m0E=JHD2O9|RYqpg zxVKdHf+2rJ(?>E@TxKO*PF_AI%xXW^YkFT@ ztdo>TF_Jei<~h=nGCb=}80FGccacFN6IR2V-crL4VFRT_hyMuZ3NE;}Y-xC&Z^bfg zpM&?EQ$9q=%7&O;{m>7s{WGuJe$y+m$o48<46tX$VwvQN%IAj)t&@v#F_tqc%u773 zMIw_cZg-iOzL#gNt)IjW^-uN*GGSfmVXkR3J`$pX;o28nj%RVi^}Hs+sF0OOLzg=P zV)t2^*zSVKbzw#+&wzxm0h>ahp0+UXR|V5wdd1%wt}vugIAlw4X-9NkFZEI|o$aTm z_?CVK91Q*n!bfgy)SZ!ILL#_#9VAS&7{Wu0INb6MzdN9tgc%J z%;z~=wPzA|eB&0bscDFcX=*O!X6B0=Gr6t=3gXpuR*i)fx!3BSJNS~UTsu~cN9N9T zEJ9npf-N_FNeNpp!{DT2{bo^0iEn2{N9PV<#^z$gC=p@T{d)UMCcs*q%a3PX_g41_ z&P{}9l|`ZjLwXleEAJY-F>(p7SU0?0e0^pr(ZWG)m0=|^+Ly{Lq5xjzT!x`-em3-p z-_E#La9E>DeDHi3ynz1&=32I9^E$?`zBOI!mdIn(`k@Mp0gkxe+d^*&66rnE5YR0s2#9Pc5(pMRsnSbmZlnn$N(dz(bO{g= zzyJXP$(^wM*5AJ0^W1aK@7(h|_YZWYd(Ot8L+i957d`F%e=c#3r9+ zi|Cy$^?RW={r7g@hcv(ScSGf&f76}C4w}_Ss61G~`Yqws?tMGS`bweW9NnG3L9cQv z+2#mrx4hWTa#6xYPSG);JDAnTT~DWdCt!ilihEgsMQvJ%&0_}M8};2`LgjclUWN@L zm6#mc+-49Ui+TyYJj7yL>H^*C!W)mqOS#S|NvVkp?5Q;b$29tD>LKD9m{DzKD$Y1X zHfK?cTI47_>c){VstiNlM3S12b=mzwb&)|K%3B;IY)*P=n+Q5r)A#;bJ}zhwOD+&Bb0@?Kr{#GK->=Oc-! zR+ZjlMudBMHm;m$$U^i~iEHWm;M-dEGouIBKIQ4?$1b-gDEUf2>)L~vz4KKu%<5CS zwDe0fO1zuvWGchvXRs!35k8I`gOMhlB|~*;z+lbsUSt%H4YiLs>Xj64+z-tzt{?lU zX80A+*PWwbVHeE$6?Yg|ALIWWV9p|s%ON)^}#8rB7Q!!(&ToWy| z-D`eE$mDIYYsrCu(`FJ@Wp$dmLC`F+g(4!dJXu%zm~kP-21(C@;c|Skak%&c#-xe< zGW|U?dH581;?-D;_IHJX>W2OmDh(?P{N^rCjfL6O+lxUb*R`NwZbWp{@?IT!ym!+& zZt-`OQulAd@Q}dJa`oydIQmG9F`8e3eOOr!Rw9|ds33Xth+LKz$iL1$YSk)`|TbJZX>Zh;eo*K#S?8l2@g&&eW@Qb>-ROYp- zbM~wWB;OI}2`x@4$wKI?t+PSC+tB;AYaw-ar<2?mI(V37CH&!}nY;pUzxPH{%SVX> zH^v9x9g$?uN`%=B+Sc}@sMvO?qk)H0t+%HvE5yvLeKR#pIB_Ol^pPn^4Q*Wmt^VB| zDh!+%g~<1&ISXs+F5V>-(E1+DlcZ3oH374e*l!m?N&<6SK4TnLc0`Ub1|J?S9c}q0U!=&sV2^TcRY8QRE=7@#BY)Ua$NC*O-`SNVXsJMVCf`}3z5JDL?mRW44cdhN#18S9Of=tq@S=@tmS zxbGjl*|*nz)71)P=xjkXd3eVyTD;+D$w;0Wb7nLxiDf>>_4S|u}&fslDPC!48mi$7(J5R(hlJ-(f$_O-z#L@LuoOHh4RXm z%6y{5QmiBH?Z(9IIDqXo&F;ZPdCjru$5dFEUk7{~T4- z%i@zTuF28CK4oA=woH@POyn8kPZnTCy4Kd3C_;Gda7UX{#$xZ)h zDulujWGIxXYS72#*rDs!ms+COl8xp6b$aqK#V;@7EDg~-lWR8YTx751n!v7wS#cat z{q3L4`{qMXhF!`MJsSLL%aWL8B`gXwNb1+TMY-2;lruwK-h73VS6_zRM3WLB zIc4teAA!lv(+3MT$-2R0{(hlb{6nQC@1Q$@ViM8t>It)2o!2Xvq3B7X+;hN8_rgZL zWc)gLR;QHa5d+4KN!O45M~Do&ZJJr+65R)(2RtrVp(CjMS{)AM6TQ(&*v5;sCpsJy z)^v4vN8D_!CNX3D54`o2*`qeX^fZPFm93g48E;ZF0nMkm>{&Z z>dBSEF`rQJ`}Yf@@-=$mwrLhy@=>VGw=eC{hPs>{7_ud8^9m+I;`pN-XteQ&F~@)q zFTN3@hh$cELD7_NsKAKi*ta}_f9Qw0V)cQcdcRG9gdC+Q_PiV>Ix&`}&;l{GcV2K| z#QMr5a|L_3OqbOw3^6nSQFR-Y?~aZ!*&<2o9wbbTQ=8j~%hiA9zG6^}k$b;}?iu+? ztd=Om`r|$bwu;7VQfYVSlawA~<-%6v%%@xE{i0E$N@hIWpVd;fvk=ATx+J|($ z#=%__*4qZ2a7x-|uu`8s)&l;ub(L~_$`@E|8GTfIC>X5qMt=ua;OGD}^a zwm|djSzE7^kglKmUq;1gM$I)?>YdbZv#3b`{1vKc5|QyaXc{h+gYyz1hbixHJKovQ zH;fZm6vH0ggR{4fQBzj_aeGam_4Kskd55|6n_h~6Teu`zlINbmo_?K%eUdvf8sz|2 z_C0N@MmZB(Wb8yVlaT+o9}(GfeDYLE7rlR+*X<&D)N4`eQHZWYyg%k41>)SbQw--6 zaufZ?G~f<;bWtt=Y=@`eDa6ADPI;{L>0;#h^XNILt9gJXi`C)MWUq0td&AcwZ!32> zx!a;2WsoT?@R41BHoNtGm{+Wql)M;ZV=sGO1g075ttxuIv?9y9CmMqyM7J0h&Zt^{ zs(~VN7c1bz84RlX4OFzRS*$SgSL{Mo#Y$njQsMD_3OtZ262V<^l7A>6?~qKO`M#?e z6A&#vR_a^ME5U2FY@ZrK@r&Y_A|An_FHsgR^Ze3(1RF3W@bR@EOQ13G&ykej^6RA+ z0`jkMjSR&TS6__k0%}JJ5e5vANy#y}tC6?9!A7nwuAW^J(0vNkzk-f{nfD~>MY$$! z-)}d4)^6wX)~dtcbY#z!Cl(6ORoVJohh83hfm!uZFISYNKZblT67M$t0&R-wuvF@Z z3OQ^b#Rxz1qJ%U*T4LJqW7PJS=dB*?HfKVsO7^FPR+;hCUQpWI9Nv>#LYXiAV(Ru| z<(vM)k3$-yCI?n4CVtK{K4-{b&DXZN$951_wXz=1I?!M%#a!1vB^*CJK7e39pY!zz zSdfhOY!HMrm)Iq?El$k2}(I`PYsgTDAx0 z-3*&Fr2BO6i(b{rL1^^PlN|n~oQUk^3cGP54Y4@=36l zk*=0R%Jr55JC`l8MqOks9&}n<6_dFR=&wxoraYX&XMNSYGuF}22J2c}^Xgb?q7a0MF&|YZMP6>_x#^ zXij(jh-f!{K>wwn#}vSyp`)Zb z-n4ivlr0;1d58Y7(mj8F0kyi^UN~knj%xP`>2o}F`j%?Fp(DFQX86rYK(~gjJR)x0 z$hak1zmuFgRyRfwpf>vwB`~VPl8XiO!;F_>sbq;Rn2eROE1OdC;P1TF1gvCX?@-FL zkm4&qo~br3wYRi%2Hpp_IwYBRFCY^`Eujym(lv6_)$>jEf!}gltY)cNq=^+3Wuz*4 z_#1owgROcd;HP1W-yn5wVEtMnd4?&!Eo!aot@m)MwMC^W_72Gz;*J+yc6w+gA45}- zh}lhrrw?tg1~w)yv_y&x&$umWvG>~cKy!3d?Ih9GgA%&1da2ayw&{u$4Q`4eWcjGo zl@>!WWQn=TwiS0KlVo(YB3tice)4^j~S;P3W^-pYr< zrV|BzmW$<=Q*FKoeasrvfAV=z>xZhYv{muVTC)jM`#tZ>sxUie{V1YyV#I3Usu8WD z<(^|EW;ga4T6S(D=oDuQqqvp0YSUP^ zube}ouZx6yQ*-KSR&_f~oL`v;=!TshQH*aC-v*}e;+7bbJE-c@fbr6$vu&Sf#Dxd&GdbWUs54YYT=be_14IiAWgxry&*gwZDAvnE7ZG zBBSA~oI(QAA;cb#78aQ4P;V$+>Og(I5AEtaE}N{m0>07A8=79 zf=?|He^|3|GK^l=vHt$wn}#0JUS6L-PXB_?sHtz|iRA+=>K`fpsFJ9D%xiP#y4 z_*P)|U_F;KX(iqo*BTvy@xj7;Su3G&P=2#$IfrJO^0zJ;2SsFa3PQFdynMRch&6Gj zcZJ>ptYrWG0RrMzsz+S|i}5VQ(^*nSN`X%MqJ{2CZWvnmitd21ZPJl>YOe)?21o`(aG> z*yP|I337HNXOxnJO<0#cghf^&PB%$=v zzHnB%^YAf(@ci!K>+OQEE=UIn)kH%Y{$ZsAI7GkzJ*wRjn|nVO?q6Swz&aW_DALwD zrd6%4V}30+WGvZF5i8R=)H&zY1p01w^gN1DD<=^g(~y90>NvsYQg3cJ&|QBJ5e8@; zGj-3~j#+g>AN>p~R@0|dQC2!<8F`5>f&0C^d5P#nbEyEFpBR>wkSW-p;-Lb*M2i+V zrI`Q^XHaT8vAa&8!f`XT=(1nDH|A^}?UjkL4chvPIywqCGyBiq&cg>H!pb!*tfcK+ zBvUpSGKB+_2XFK&blp!6RGra~Hr7M~hRFXy_dc9ifLz#ZESJ`^SG4`e`G19@dcLdfhjj{gnL>-bveAwX=s`A>-- z_UI`668|*~hoW4Lk)JWM?D+lOVxW;XPvE;zD&9X&JEFa^Pz4w>Un}wU*1ZKd$XUZ%t5@Dgc-sbNLwR#5 z-y}&a2bJ{e-Oa=`PW$WQMM|sR;K~y*%oE+PksYRsL67ex#U#ssdY{0UL1FdaSZZ7)~N4}L$h{O|M;jb>K#xUGt<3E$3m2>?jUbn^_!+9;zr!Kj<@+;5yI%Hl# zMrF^hC$hRnFuaE#(EOXk-$s0P9jDf5yo64Odk}}>>E#kaQosrV7 z0ppNA5=FUNa_VHK+tO}JRD{A#aJL&yz=0P3l{OOx`z%(Ky#h3<^i-d1+e=m(7V_Gb zm;@dFwbrwt!)_mQ3u>seBNTZiBV3WUM^^_cy#*<~#UMeGS2BHK%ilde((*tU=i}8F_xvi|hA}=Jpx}Hrl#v8|S0x1BlR$VZ z1*me_+J6nMr~k6qo&XKJEFfx47~xl|>$)DwkrLntD+C6ujzvU{B=Vur4+) zVNi5=brW$C;mQm$ca`{vuY)}Kvn^FsWOn_%;|M-w4+?TZw21x&s-i76vP+ILI~Vj? zYLB?UboUFuenOis=)dib*;99Hd`$pFDm@Px6#xECaN>yR+hh8zm$Z52@{+VT+#-mvmlvGLcEiNYef#UDu zjxjRR2jG>>VC>{L1({by0%i!FUzn?+zFGPWH~CM>&{YLb=+JnVN76t&nKt`4q_jYDBPZS12kpl{=G_Ah>AQG z;tbHZ<=7@U`R*u4KHW_I3*q$F2`_8TER9CHTxrJ{q0vO`kVr-hl8qVWOf0j6D>)l@ z)*49~P-9J`B7GLQ58bEFVRLqZvi@t_oCObaWh|`8#Y!OHkQW+(G3MiZ&nkD#^10?s{Bsk ztS{;#Ie=3{XfKS@T`2UhD8c%z?kTFm=Vt%T+ z3iiQ&M7B&KaCbtmsY8uqUapjRen43q`4T2#(ekNvp_!_9J9Yj2y^@Bya_U*4-~>3X zGBi`WcNi-D-dL!TA7=W^<502vUVSP(q)Z1Y@{Vk9Z{bkI7oCQl;r>^%o_0DvMaGF8 zqu9gEg)@#YR%G!Z8efT}Ra0*$1vPflzofKo7h1C0<4|7taknnvz8phBd+&1A%EWUx zuSLQ2yROiB+jKW~yJ!<3XN~7~^dI91S#4Uv%BIcoQDqWsx#&NpXS(N6ySnLbeNr9Y48WthP#TJ z!fnMsI45mhM;tDJb47zvCKNyCz}x=zRjvec(4^`D7Y~1@FttFeSMjb?i;JMEvNXtIyOuctSu?m!oKjN@!9rP?8<55s!S(rMeB33GF!((et^5@U6#Ml zQyB&1M#BM(svK^?MQ^XrRHeq{y?+6BelE>JAfKUI4}-QI#0fF^X?%f^3cs}TKfe7hPoh;C*fX?K89GNntur)N(8wc<=^`WOGm7!m z{~ZnZ?|ZcWP;&kHT3%&qApQ3;iK_RNo@6j_J6ju0te|oOF|;s;DVMO9{p&mad|@Mpna`voZ-MvQqdVMsWa%JjLzBj5{Q3ct=Ptn`{PG>r zMo+DaMx&7SYS<+hC{4PWh~VgJd8pT)O@s5wzafLA0M&MPlx>RPfiGUEV%d=bf;v6> zu6i|K!H9cx<&2s8AoEniTR3khY~YKFhHMCWA!XPY!xIJ*`{JUVx2)v9aEzWshM+AX zOZI;il(C8X>JeUS^Wz}LQtutP(Z3*yQ1;x>oj}Vd z^5erAVIoR3AKe2h3U zTp(!{4?0FkTdx4i^sm1rOwy|z*TmUuG_lGguGst5>m2qtSXDvZNIe1Ca_@XS%kGUV zjm~}GmflGWdIb9`XmU@}=np zG{G;|YqpZe;-vLLJvQ7`d%;s!{?$IKjvnd6><-yLN zv`;Ezyd%v1)xbg?({`?id#7w)wPjryJfq6KDyN;@c}9JGhK%f+RK?U*69o^ao7ix8 ztJgmlrpqg{vqHq_I3tIJP~kf!=7yNV?--vX!sKEi${C;cr-RSE{?ut3s;j%*X4Zg2 zm?Af8s~(03K742y&Dp$eaODNf!A5zltSa*LV)rsFN;k$jxa7G@v!t!D>XzB9EV|j5YDZdyKr{ zu8W)ot-qPxGX=R#S0h!D=-ZziT+rO0zcR56s zV=~E&u%wr>evFTIY03{Y=2H_Zt?K8>B$RWP+Kc2$2wk#K$dyH03#I73I2*gQB2E0HwVO?F@?BeS2qm1@74pp^@Jd2k*eR3KojXDIwhqyX3Hd`PT%=K_RS|Jzah`R52_!3j2OOKg7*mQA>PYyOzA0;fM=2=jWBoliCv#S z;$uaMyqKH{EfVoS<8rr0e`_vRt@f`BPGpT|y{IG=5aEvw(IRWgX+!q~9+pYW$dso$ zm8Cs$*65*0+^0F&fwxcWN(IS_E;?NgH2Coz?@1b8h+XwSw=7K+PiInO5ylC`mY96< ztRZF?9lxk0=&B?5K%@0%9^(u%7T4{uoK2p?U0y?pzb-t0&LYp!rfKx`y$$P>D&OO$ z_gbUSCmYUenCro+>-z7cPor)LFa!3-B%~&-+Q=}H_Xj;4Q+X?jLLBU&mpc%UU!znB zAhI*HH;=NYAq0c!O!+pQPf{SLMrl}Lxsjbe5YwGo?ShKbL$sVRc`@JstH#_^=Q{0M zHY)0Hr%8p!ZAqgxmN88cqlFzc4X2w#bJWxeM02AWEpr|OxH{F>2W6WNQc*M9n9g$Z zSx&#jGXViEk$qpR{&YdHbKMQSt-adda7v7X1-^{t|KHy#qU(HFW<(mCN~?AoUEmv5dL7fAWP`YO5^oKzHKCt1=1OGB#T;p}Z5HQE`Psc$`4d>}*b?ObmjZ-KN<3_h6Z(h+LLnP?j; z8>+E9NS`|)BCD#zz+9M=Pq%T6e`q*e9z~}{x0IA3 zoz`_Bj78=Yqd*v^^aG`3SW;!7I5&(ldFciwPvJ4vV7`=CGhL=BX^y=;N6^k`DCv0x zxa$slzZc-H72Qcyv{gue0+GC?xTNopo|nLo)rfT)^eSpAkgg4$$4{Xp2TIDu@d~|B zm5~Y|!5AH0pb{c0p)si7L**}$T0gTUf4M@Dwz3$#G+HqFCC)W~;FDidX|C8SE5Xul zfoW4E3V&*CB?lBBf}7VWteP&?l9=@GfV!>*)HUZ66mK!?wKS6RO<${oOK{Ubg_Yn} zR>q#d&0sPL1QxRn7(3U2V3UAj zgxN zM){d)J1|nuA?*Y4-><>kptqj5eGpnSOS0ts6x%`a=L^4DN5;2iudO;4Ft0NTVmBhj z;tGaE8BNkT4$1QSnl@7JX$CHZ=X@Kuqj;%8vAo69y+}wDms258=t^eNFVC`m)umCY zIiGD$pC{=5KJv${gMD;Qv#{4x9e43Hli8y&6`>|}KjOFN{D9J=;^Xr5C?8)fdiv$Q zr?DKfHJG=Nmjdrx=IGcn*X)ZxUM4rM@Tua&_u=8c!h8Q24gQ~!>&yB?dy8Z*Q!j(v zVm*822Og&Z=eXt;9{ ze08!L^k@JmJO;$pw3CXsmrSJpFcVK2HliSEmp5ibE774fY;XEcz&x(62$BDfa2a$^ zBXz~;ZY``rLDSSonQq~7aD@w(F1*Viq$s!M=JJbB4;DC70w7#xDw9klJiGKmTR%5t z*3**~%!P}B<8VT98FMVBLv|A~HG zZ}q>5FEW$2A|;O{o+k=A5==(@{Ez!!AI02RXg>@Vt(hFJnwm4ZIck!2`G2Bng6(nZ z47_%AjTBP+PaUGd<7O>3^O60R+^TcUorksjl{RY~C3i7w2#3`>twHsNz?Y17783{S@B4lXQ;=+L%`GXtQ0(=Gf@VC?@jn5Jxc zc0ciPFpF3~hO~#SDI^MySKsRX-_d~o9wy*Fz-8bN{u@tVwaF7Kcp5=NRsZA;{)UJD z&3TmaWNO5V4QFz__n%}2I$)jULF4Pc@}CHez&5?N{H?b!JW^^n=BcZQR=B<~CgRpH zBErDDTw>%`0$g9M2w=QN#`WlL7NE4th45jHNnBd2=htk2EguAcr9j@tys81<$b))& z=cE6c>S;4w)s7}k_?DDd$;7!)&^5yfOu{4W>y2i0JrCNRb9JMuQNL2l?~@juBdpI z#;~b-4Ci$#9;MDl_EZ>44dnqYC(nvRXC=)98>$Tu3;~|ECP%`HN_0OG=qogJd2=wj zy&W+Wh4ctj0B#iHwg1TzF0s>ubiDhtl}=^rPmCpIGr1x(6V$uYtDoKc8bK zPhG*VxDQ+mcG${S`Th>)ojsm0H`+(B$LKJ@%X%+JqYKB zb#Ua5oU0njIh6KX{cOLT)i#qY< z)R{A1wO}Mxc?Tw+ysMj2i|8fK!E$3rlNLw!(4F&DPj=0+2qDRp<^b7pf~eL7ww9o@ zc|+!z0kIS(`1(v;9}6JUZcdwjp{Ys%K*R^=&L#S)v4Rc3%;ECYPG!$RfT$_A`Zxy4 z`o*r4r!mOsj7XL$-duP1JYjEdx5qEjq4SaG_IvgKi(iDH7aov!sU%`NFjWP+0-1-fD5z_ONK!=fwrE`Aoym~>LUPvw6RHF1wg2I)`tg&T{O1( z2iH_IyHbK)lztD~|Bq}F0L9jRqH8XE-uY^a<&>pjSRZ8e7~&@E^gT+U_q`WHr|7alHtzGs;}xwKX*$5ZHUO!f7=8Lt9$e!hX6o6NEGaGW&-?nR0DtYLBifAVJ zV>+B+3!w4MBPDj7i2{r*;JQTp6(b@*QVz5w%IIY%Q__{0^*}?{C1Wn|?r^{+k}luG z#%i?4gPSO}KLYN15+w4KCa*@e8)EKC6T1@1B$kVF|Af&0gh~EJ*S@Bw&24L4OZ?Lv%~mZjA>Gg*uTXwIeg3N0{ajSwzo z;Cxo$Xwj{sJGY8bzm>%JXGL!VA>SmI@>gZ-H`XgHg`kXzFFy*+6J@ZFAt%a zFG(+s8ZFr__+~H7Xl=wcrQ(Fv2IrrDzqZsl8k?k=pp;x5YNxIG$!sXE%hs4kpBV!u zH-B_-vMj>h?u&^{PhGusxa59da_^XzeHDoQD(akXc8XU1_6 zruM&pVBV(KK0l;IWRa1po2ANa;fQi$GQF)c6yR{h3g|gk+=tE3ub5_be0uW}cZ}`O z#*$>cW>c}VJwsxvp}b3gAqO?u>Ej*dViETgx3x$lW&>ctrc~A!ukmdcZBtkBDE>}%eeMA;H-eTc+Hu~cxSvy8S|xeR zDK{omC**!)3k*@>a$pV18de?nc(V?~dfhA5zG2f)w1_@WExTu5?W%=eD=s}Cb^vVc zoJLGbNN+XqDum{53qZivbo>(2H2&4!1HQa0Va`nQzD#TqwzI5i8FepTGpD@x zKp|F9MQMK}RkF&Zl#%R7F6H?o*xfYwpyUlVApr`Xat9}Cc?f~gHH|MU-J~Og-;p8+&FLB1)-)w@R zYnKY*x!k$&T<4G@BRR!`&TKazqKK=`gI>;u_;H+}etz0N3~2>XM%GXWg!}hb zN7tw+dwIZ~-Y~u_xI>(Km*CYa7j8lzTa6$P-l<=<0Eyw%^)&Dwzu(pC7x{;_2<#D; zAM)jW3Pjtzu2_JBd6W-u|9DR1${zy4t+2D#&q5%@@jKV=Zi7Jds8=tXy&XuLCDYu; z+lZNWyWYG_;p{yJ8~tTp>vo6mu5-IJWBAk~7#xViW3yHip<@!3pjeVCWh2VR8-Kn1 z_nOPSv?xXP!qSpIIGg9m81m&14+Ij9x*!CB?22v!*XMR?K_CXlWWYf}zg(OEO?dr8 z5&}82F9GQPCgTH?Z~XsP`Kpw(bXEX3gm5cd4+;FObE@2invg&yF5BvczuB;QiE zr$jo?HJLE5ks7`>*UUL^yK4dlf#m*pyC?+NYn$%dFkHm$1$GEWyDtp6u|HArJ+b*w z`eR;#2y`w}4U&06PU}Xpho9;%X)=$}zpr*O@`!wp_la#0;@7jWvWFL(t5Uv{dMrZ1X$e-($^IJ{HXz>q#H z*Wl;)^r7`@nLtRm_!G$oxD8H+k0-ydR%tg-l1Sk7RO+~@rp*s|AMNXtsplJ&WrO^F z0}{UDspNx8%N6Za>O}i(TNJMGLbg4Xd{4egy$rM4umD~1a+lT(m8dKp$m}7XOl{G! zuB)O8egl$_Og>YyM>R$w#x2|4a;lqb2@`tnI}f`+47|Z(7Tppy)G4~e?f9g&h#AfA zeBdm!sJyc_`-C8kXE(=h^Qg<$j89`*xhHKQWcYI#E-Bu1Mul~~h##{(tE?hB%N>vh z51R;?V!nO2>c Yx=>E@Y`});I6OPF=$EyPGWL>l>wXP7lb_ja)h7w(My0tRo!-3 z4+2@*rSm?^e@F(rs!)BRN|%fgRx^A!&ZF1^Am!jP#EZ1p4%#8Z_zVSpF# zfIdO%dEW86^|AISp?}3+k00*lPi>nrdG^Sh?`ZzYeu&_3=bP8fnenIG?qxI&S z0|U{iYv~yn!!B|@;m#dLxntbrsigh6YfV$&jTj?C5r~&V{F&NY_~5KsWYW;K@Br9m z4P)9`jbUL9f{06*ke4Uh|6EHNfBSuR>?!b$NLA$bCiO-vP!C`v1d~h&$I#(iQ^U>e@HLOlr~XN_zujzgHaBLDz#L z+&(^S+wS`MOpS_?W6O-YXOzNyf9b+dAJYH_yICH{jnC3{c6M3Jh}+W<#UJl;Hr8h5 zVXa-amQ}wSW5a~xmGp-QvAnFnP+iVO5J$02_J$fK2XgxlEiF$9yMPtAE)=GwzlI+4 zHnRBwMZxB$)-c628@)waAUC4hwjb-*eSc@A;K@%@`oH}?R>Pq$1%c(_#$n1tE%?dO zCA#1mV|cuBB~MH>i1CPTSa0KF4T9uJMz==^Lku2Y5K@;INXM>;Sx*<%N*m_3OdE%u^7L%$morlWmG5oUZ zs~}jL@rE?!p~z&DHFAi!zg}xQ%ZQFzcXMJbW(lmi=h*~u3yD|fMB(&6Q9pO zMLG9(>E_T|T&~+PC|3tM+ZK-oq-sfzktOY z`=MSJ*nWiWxVHV=Bbp$vj3*pNBLaRu8Ym-pMx<9g#qGdd@bIb$d#{h}u-}=(@+?S} z8(OeB0Djj2@kBD^>xF6_$jPe{7ZSg}N_pBhT&s3~*9x8Vc>fH9yC6Pw3tAngKWguI zAU9NTxZ_mCpxdKXOlSg_n$df;c(U>(>*gvR;Vs1xF%7$vcA7jc4TeB0?{1$?;p>pZ zxtGqbvenMxJ*`R!6i1&^k)IE3g=9*}$mfUUbt3#%C!Zeu`n;OrIC}OvRQS67b_is2 z1K8Xu#iO9NY&h=14GdU@LBea8m=A=v1;-gG2K zZwIUs9P8c~)8_mvfB}Xkura_~Ys%-`HNJ4FZwth}^9Wdb{%5SXV;qWG-Q}$iNNqVP z0lz;EEC`StUqrMvD!y^e*YN=v3VU^cV*&;sWM2ZqOKtNaIcSuJd-3~AEi&0})v4Mtmrju-7SD z30*-oslub6zig#zp}>swPAB-{wFG@Wi>r+1f@T zHwCb{xrVR}?t)(jyrb#vtHvgF9h4%U5pcZ$jG>v%7&u1EcldAsU6t8LW-azPkI=VaL)w0*S4pypy z7+7$7@_YpZ{*yLT>N-Q}G4&~8~fJQ$DhH%N^gc`h~D zDs?&#h{6tZBIES?ho2RGGd&=X7<6kij6QCz27%0&U7UC)ik&Fgy7a_S(~5LyCs_P$ ztTqwiE*ReVq+0EGF8mK3NO;A*I8=3ckI3y5!Nk1xcdF13$h^?COU6kjk3l=120syp zK+fc@kGiN#-@RdSPV<5w1mbc_(Fd-WlN4x{CH2Rr%V5|!{wn9w67*5+b~NQTZlT&Q zpQ75OQgjje-9=G*1D^!)^*2kIoKji;!sCKm?Sl6TKH8VF zwP6Cjz@vbidDqf5{VoUF-2NI^?M$boOUAI)+wyZKTYX%>y-7sboYGg?^5s$7CQg>^ z)=K~0W3hrmaPKX9pVc<4_zwGFxNLEp4+42nCaRTA=+V;b^d_4?AP;WmCE%-_avh$5 zY6YEje6$B{wH^SEK-_=WM_c~7|1)n;qmur$IRmHGw9nj}S0b<%zI+Z~wmgVyTjd&9 zNSX0O=V{2Y*!4R|VchcqC!j6jQM=J=cxuD}?G#sfV$37Lt$qbN$!S znIQBI|6B%V_fFw;GtO_4t+_l91N>Y|d+M$#ow(8vO|C z3?}jzl(*6Jk=;ocQX0?cTKvOXC9&Z&(p^7De>_&0zP@tR+~&3m6Q8nDrijFRMr25q zAC-FaJNrp@Qsy)l7xBQl(r2uI;Q?%iM#Wc(gW6xKE;@6YCuWPZt$t`$96q%-C%IRwmJJ$BmYQq%}CB z4LcEh2r~!!amu5vayic4@Etoy*8y)Y;v=vIndZklUv#v|Go%L7w+b z1Q8w$XUo^;7zG8~VeqH|dr2Tk4X>=_xKh#nNki{xD&~5~V?_=Ad5OjFzB^Qu&#A8m zC=>{UHLJ-#auBsxR!d;4n+mHJwST++_SUO?ITyf6-ZQ!oC;$c6#Z1GNoZawg#p+0y z4&gDHi|6~?R$piy7w!DeYmwmV`r7w|{_pg!=hK|y zy|b)8O5Efhxvq%9caNpLv({Cbcu{Y?aur!*sbxxoyG#sPPNCR^Nkfm_M4V2Olaol} ztAqlJ5-&3reOGvPSAlAUS0P8|3exi2i61A2C#vty4z^XR5wt!T!7nn~A3JnrNa)tz zZ+}4_^3diVu@O|3I43`cFY&Z^cuDQd)&7M{)2@P@mGf?rp)G5d^IwL64UJ$$F}I=? zlq+xiQv4n7?DI_>BIaH*GZr+rg(C8XykP6TN@VOb`^~yPRW@E`?p89@eNU81O6B1*5QWYsAYZ=xi2GPQEY>&wHM-H|4JZQl~4mGc&XCvGmUmuz&7E&BSb z#i7vSjv2jLO8g@N7KK&~OA^;@Z5^n^tPRG^n^Mh#%b232Z{+#e`yYJLyFae`xz|j5 zU-G=^yJ1m8M{>5l97BHMW2vrY{m$=i%{gpcA!Oy9dN(DbBKN(Eu8`QN1`wryTMfQ!!-kM+58O->iq9SSob!21eT+OrLYNuHg zJH7ISNe8RetBU9{VKfBarR6KiYa{qNQ8@)~+Fz@?ld?J|B1_SYuyYJjkhj5Q)J98} zY_lHuY2v4>`n6-JM;9Us1bi*qdpLBL>4W{FwUr*8{>$sj8!^p zUn3~4J^qGo=kYADQSpi!$e@!J2TKK31b&gkrf8ae|c&E-%W9cPYzIHZrX<*SBU%EU+EhH}fss*Qr2mfE>y$4WLO_w&hk*ov}L`fn@&N&MxIUTa(q>^*a zK>?90IURBaNs=WaIjVpNDj5zL$r=7WzTZ3Z&7GN=|4!A^)U9jPv6|l9y+e1e@T_O; zttkofn(rEk-Q?r#S?`G>>jOBHmHHJN{^$$v_o0ASoiWv34@R_SxXsUw=~4hB6c8Iz zo$H{s4U9w&^JRQ3Z#i~2$6yxF*i(1I;S__#v@@DLEdcaNRR;>3wW^kl3(t8d81#(g zis7ERJ32D;SeEk@XfM=_rivex($(DVKN-T7>KyMpPD)YE_YF7)vO11;r++}5v2?hO)4!%|n4v9kB8ieiuL{&@{CZ-x$!Wz@w?QYyO&wJO<{A z26;@E%1I4r8C$&Wn`*!N6a`3oYICyiGN5voB}dE_M`DDK{#s0R$UbstU25~f{=e$r zeN*;M6gQBjxM?U{Vns*>T)#LYHKNEIaeoaIA4|d>NF#fP0$}T5RJn7H=Kh5ut`>o> z$b(N5t+V&);OFZeX}ga{MWw=zfg_{y7Cw~mn0rdFqQbCE!I>cT4mYqc$YbJWf65{b z`v=tuGx-;j*IK8YABm=UFx^(^Sj{i$uA049NDCYw4cVn} zyWcaH5i3>5sgG%Z!4!qd{a##JK+yBsf*oaUBT<}D$QQ>0FvBEY(af;%>#Ts|&6j&% z6Q{%D2xnjRACQ@`Y4vCk@qYR441Xr>F<(hEzbGwUte_N5|>9&Y`sN zN);Gw<3ltE)*)Be0&YbkfSO;L{J~iMrvX^M_!*QVZy%rd8GtqyMah9D|1Yp`BmgS` z+ym-Uot>tUi`e+pzi9ww;eQi19*F)5To$7Jlau80ub2DP2Qw&}G)~Z*5-ZV2r&c#U z5}$=^euq)kqG}8Z3PSA@lETDUy*M!2rfQ=d^LpO2+v(W$@+xv)hC?A02#)T8(RV*kfL7yf7J{R4) zc)D|bY3L>M4Wt{dtn$u12S#;Y?qIT&df`UTkLN8PEZzG+)g#w z-cWL|#CV2LiF01{?;3j81jg~ZJFI2bIuZb+gT|?c^kxQRgb16)y;m?D_s+iV2R7QJ zTm=5`YM<}CMAg#)qFSJP54dG4vY*9_ZQvxA%4}VV{)<=XLD*Ur;e99px<9?;cNAJN zc{7E0U0^*}YuCm3z`fiL!*U`3x3p%p4fj8C;ABC(5xg~sk(XqZR}d@@Zg1|U^P_Z9 zA;j4bN6jnsP*5SH=?e2#eRcR)3?bXOjhCc+j#BsGBPrxi+|OGu$i~_tY(Q>_;mQS| z!18AkA_$sWg&PeJ16&E<6zE;sa0;1p!RNSKP7MG(mJaSMqo{WrxPT zUuP%Sd7g`T#a7L6zQr|-k*s2nPVy2Y9!b78ju!qzB3%(oI1>@cN}eL@nF3vv0}+9K z4}eOFq++D7&dgVS`mw)Te$iuSWbnAgW+TQ%XN2grJ00lbWzc-1!?r-X3!?^vM#TB9 zPY*YCi&kAui4$~HKMp24&Myt5`SzBOth9?#7pe(=(~vU?<+@yUnzi;F81e4MSnxzb z2X7fCIp~*VloRiMWt+KwABc^z4DrU_H@udX29=t$)}=&tbH<%V-()^+&%54lyS865 z_+C)Ln|dy9z=w$?v7}+;$r9&RRu#N_fuNfkoMhB%IbF~F?nUpZbfh;h#(RFLh{%oe5wT>K_c?;%I>{g<`pdzReCX<1r!KOTqlY_ufaBeO8S~= z=i&*3u zR0yK&N$N4Puwwz6Ye};1LfYTqV&dDAUQhaoW@1CV$L40UN9RZ8+hX9dB0o*sAT_FM zJXh32e0`7c{bZg+Bq)AME6EG^CO_r}aZ&QBZ7#WF-lH%oI?Z%$C|z#^k{%UuU(Nge zhNm3(YCkSvJzBpd9-Nre=&uaU*g->Iu-kaTemNp|o_@BDzfz)>U6PJ6^LfeS)0CDc zb~^{AHZ2lo+-aCo9$pYD>qQXZW<)kRjwK{uHAgoRJ~C>n@j{Gv(nSK`J?$;rU3KXO zyV8Y-p~0Q$J73#PQ$42MzcRtA91;}VVNm!j>6I%cI6>lL>FEu@Xe|SjBw;*^h_P8> z<>T42o|e#AVLDM(C?8&fCED%{d}S5hwycyT77F86eW7%NF&d@yzr2<|d)fHvvLJ2} zjZ;41KlVyXfAlTDg_{0D@bN;N7%$=Igyk;l)m~cQZgtgf4Hly%%!f%=3UOLw$g_zv zGRy2VZOzprO8c*}Ne*@@!6#7ldmzlYhYGU2<3=kU+rFni@kg$LCF^JE%t}Z5zvbuX z`P>N@KtGYXBaSNx)4qI`a=yMdtS+C$>O3kZzZ2|vC%`IY23p$tM_kAXESnuB>CEE` z^UDnPQTBgCy%qy3Zv_@ zkF34EC{O8d9b)jZlN&J=Sd8FTL_A*{zzKG_G8}4 zU_L?&1G4Bl`AKHJDDM10YQ)$J89iBP#?$p)^M7C=H4=;ou+YyRJ31_dFm>ZSU6H71 zjrHCE8DdG?d5@i{3@Fur*RVzy5^tS;u8$f6cjZ(`A1m*z2l?;f5_JAGr=FO@g3L~K zLWMfNDn2x4q5jUm5JNG#wj4*r?f2yTTxE{HDbHLK$_Ca)2FV!h@Cm=~P0VSh1)9Pa z8H8UqxNhXT2QmBn160K-_P2#!(JSoSs~rBf=&HEK@od5jg>m&Cmo!Vs`7!cdQvW!e zgnjE(R>X$kCXFw_{iu{}P$S&lJ4=4)Ca*eLQ6oi0IbDU^U2Cg+H_BZ3vD*aF{-5Bg zg`pn%Rn=^dxF%crk_+FkbL&0lGufXF27w_u+#4kn$1L!#O~Ce;nuvqL7DNgYjxU=u zub`$ubP?Vd9^6Z>_pi*yvMt0Pk$UZ7mTS;C*p=r*r#Jw%Iqn zE_vT0=N!FSpML%L6}+DClM{jggs61UkzU?o`LZ8bzc927HRetmKKje=n02DYu*}I6w?f=b_DK0!}O6)bv!$xrdgO(!Ig^1YRXXz$t>` zoaiUTZlaPydrnMv?F4_Ewu;wYXB`k`z$Ou1`;%^JbAV@tx@)dek^4V{vK*i&W$EEfn-0H#B_<7!JT#A=9fd)+ff;Ec#khr>s#*2&3N8n)??Saqbc(+Uf`H14tq z(w|$L=V!4!2Qmxs>$L3(yw7bB)k2~aT<9idCCMTr#Q^`7t}6iLS$l)a{Hg&U-G=Xo zUxTn}T|KN}_QQap1xXmfBhI56fUN~m0{UAbf6!X;n0>N8$ZmRHiYXGuWxXSK{RxTs z-ncC|1|0t^zCa_HGZWk)0>NtzB;tENhm|TlcoqjmrE75)Y5dMiYkEKfoPT1l;QxS+ z_opH9m$CasmxNB_rND1i8YCBl&4M8Z21o=A=2yv~@7a2;?NwIJ%^lEJQ(^kT>#zG4 z4cURM%@#LQ0?lVcS|i1bye6&2KMUi|c}>v?22Q3*4|XuqLHR>vlr5FzJW!lddHE4b zkQ)Ms{m`q`0%mfV54>lC>RItaxA41?5y0;ZjBWI1Zc(4u)zdK6xuVVcu}&T?gQ|l4 z81>yC<7B^ODN@AX&d8qR(^N7c1OuD~OnymCwtZZ1;r0mt58}5t6*8iw=kHzipQ``dOcx8QNc2 z%dY%GUcRZH@E`Ue@xcxtDwF}zU!VE1XxqB;6TaC>M5#2Q{e*XaI7xp$1LZp+3>n`V z&=(x?Ei?98mcGg?^ej!t&+s601OSue zgQ|e;vKJtIaJjPM}aNI>@ zdfG(r#QNHM^3=KROQ)RCj(cyhGcdUDemf>IO@1(lH{7YrCpK(u~;kF*`@lSsw3wz6)04BO;AHIvRIILaAF~r%E zjp4ixB1G`)E5fH?*A3)~AuAX%hnpNM%p(13EEgFda`xIBc0DN)crR3TyK7IPQ8f{sv*A9uC#rq<$tx?y;OdLq->-kY?YN1ipPSf6()^Lu zkm_KL*?3c8j?O6Dh@E+|xz*z?sGlc)i6`EI;$)v=0!0Vxl-v1Kias9n_8;yyv?- zDE*IgYTpRL%YJvF3P*JepHEM=@pDr{3>zOht9V9U?+XoA51Y!voIb!!EdZy9m8tc6 z``LpB+OaN&b{jPgykGSVG0R9+97>oH-)-l$)l3{wV?j1*bq;Dh0$Lei>VX}dpC?6r zr+PIxVA%0lC%(Jb@GU0cPoBQ&<|__wVoOV1E3D%xynfO1xBRBi zF)Q=$N?o3Y9_9wm8az8kb>CLH_SAgm)HN+P`%5MG-GC9!f$X|KItElyd%^utc7EK) z6Yht=Ir<%;)4T2|b4ek5P9@>C{HQR_wB!XAD#TmFVW0Zhe@yIjyRDON@Z=p;ZdiGo z^SR%|53lkO6888438*ryQ}DSRI^xzdw>Pp@DN6?wDeIdLRs{BNA-obXdpx(!&f&2g zLDRwgBksw1*~Yjod#V`$iNDky_gPnrJ@n4vu&|P{xV`%??T5rZ^&c*W6f~oR6+Lzm zVk}0o(eBA!zuM?!P?0B#8Picpzw#$tfy9Z0{kR6mvfd|xAm}?GsGR`QzuAf`>y9hX zEp{eVYa`o9YgfPI8KIfp7|Qfgu_To8@fq;NG7U^fUX@q8b~*|^Qe6B3e3Ei?{{=yj zQBdF7OGS!7d_YhrK}jW~cM>vhzD>3Q-Tr!#~o=AXLmQ1~U?B-Ljm z_L|ry__EwN51?KE6pHe4i;4loafziRlRVHn;Y8I7b757;T%UJzbll7~w7YeL8NahdFg03>PmlpG0NAvW|DtaVd^C3qex zpLv4dyNX~)Y5Mkr;4Mz)89Cv##Z+@dGJrsD2lO?L6ilZyn|xF&^ z{MJF^cW@(lgo3oJ?>~V&+sBdq*M}RUnPLh%-DZ^0)fr3s+a!>O1a)C^Ss;b(-`00Z zUvb}3BmV%sYRs*&?Vl50g)1faEl-;f{;{J?=FpsND0~`srYZA_$TJE6>))B|54G%_ zuzyd93yI@U(>F|vOmX&bf)$Zv2BSpH_f{fp}h zAfx}>N&R0Wy!}sO%Krg3^8bpJbP9G`@{xx~-OQ3-8~x1aQetRRjMIP)O)e=Md=akbg-7fNP2 z?5cX{jR*a%gU9W=ZO?v;?%kP7x@G>mpQ3j>e^cUd;&Iu^V@wd#q7y_h70j`juN!6O zy}a`49ph?{lZa!00{Cg1X2zK{&g{p=HZ1m5FmYSY*A*={jxdkS_vVq5ycmf{4D2e` z{GeOUcsbgUXdIGpHpJzQ^=#qC@!w=SddG967$$Uq9`$|QINq5$vQ8kwAc1y8>g*|3i+muLboAk z^0wekPT!A%5)2APt*eyxtsUlPsxN_}_`@yCW$D@%C`Ww-DTOmEWzzz^C^{T@F5WthK3UW~lG>t;k>74jnr)IC!mrdQj>Mx=HkUHl~iwm0FQoj=lVnM|lU zR0~1(k>d8h#hy=jgaD^IBLLm)SpioDNh=3){Xq)$hgJ@$$k+9O(96-aIsym~sU;D8 zBMo)E-1@v^MbaJGAjCcChE$#|ydNAu`3!J@s!hhjK$LE(vzc@g+ z7=n%jI01x&33$jq8D!TKs(-u3uBUN;FCmhd6CvVkrcHX(8B?n!iH})xs*PCQRHfIGCXTj^5uqIoPH7isJT6Q*9(Mpl)aFg_Kf+CYHQ5-^PJ| zy9KUqTJ68WYoH<-K&~_VTAG#NhmOM8f*E&&B%QrE-I>nHS?c@|km&E9;1 zJ5B&g`(gNB+$85^4n#LcNNZyTpx3rL-jhPYAk@AQ)jmI`Nr3ye_WOfA7mzFhs~`Is zDK^Me$A#j^g&1*>=<%Zw0|Q%|Sug8fN>+OCGS;}rDv_Zz;s86-8_v=g*O!wO`)((| zDpmFYjD(r*`M_~5@EkdgRiF$di_>EEbdFUA+a+LM|KH;jM~p_O(Tz%YQmD|#GvnAX zopi*|-Kf3BuX4vSYttRCc3l1T_0}?K`ZeQU_&D!ZuRbs zp)ZrJ@Hh^UO=|ziR3O(70KhWJn60rvtrBr+*ZmOEp@axP@Qh-n6s+$KNI8!+8G%o> z=jlNouk!&ifTwwc>wG3`9P#OUgE;^|-%0(Kyqr&P^9h&mvVJn)Y69Yh3OkS?kCSN& zpQ$^>>FljXT6ap!fcb9u0|7rbmvc)aec`&;kNXlZWojAyVIwgX1VA6Pi_iDzJjOR? z*-7EP^o|1wXSc=s`=(R{7~O#!Xs!k_rzP(mEZOukSSg#}X#i04&JNR}Ay|*Yi~!LP2!E_aLkH8*h zUQl$}Qv*U8SSN8^Dd5DPZ^m$2a}0rn4Shz7sg^{5R?dC@pi zv_z^!kT(OngFIGtTd)|poq3)t+05O{1`<^)raH3w8`#%Q)aKQW2wC7B6@~OoeL4k0 ztFXpYkG=d;#{gT}+m$NRCiBr#}MMpG6eoJYMY_;R1>vrvU#EvUeA7KW@uR z3NDs-`W3t>eJlDPdLD0f=a$}xuWR%0Nrri5PWL$)aE2sdW}_J?oA61kirM@|EV)pU zKOS_yySKyVq^(- z%vOkbr7;Cb3^92NzoBMTINA*a*2DBZMoSY4zB;Q7%YWtjG41VItVQEPMesgG`wioe zZ;x*k9B%Kozm*;lmo}9+g(^6sg+5wPZT!NA8P;M`WrsGawhzs7oSc=jEO9hv_oY?3d%_2*qzh1+H{xt)bdMmToec}}% z`rS8^KW{?NpJ3;I%i;qe$N&4Z3_$ya&L4}4%I|=UtkFw@$*?Kb=9d6sqR6Do_&g9- z+LVO703>FB=Q^EDw)u-*Gq&6VZYeNMqme5M{h#8m|NBnpKN83uruO#sdb;}|!>T7x zKuO9Hlmen9_kM~&pM_$;$F;plB_FEY4wpqMiDm;=>qJeX1%Xx!(a~ zy|I0mM&?uWJzat(byku20!!3R0SZcPQ9#~voh@!`lpcse_U0yADBu_frl1mWXmNoa z0G{PI1&ZZ-vkK4EN53+M%y$?nGw;#rKiyi65{AB*UU0@q85D1FH2CJ%6NCU|V zY#JGzp6w7rSc@`i6wvEc^PVhPL!)(3fm$BAor?j`Jj@w}_pamVyi4YkkgFVgh=z0% zi08CE6enGa(1n!U=~vC@=+LIlSvbSKGLH6uEqIPPX zgiAP4N#Ug;8nh$61o1NY-N1)Fvnj};(#s1T(=Eez@S%4jG?+#4l_<~=fHq(}cnM1M zpG53uZ0&&`m?xo7BH_o#TgLSIY(Hr8A6hk<^4I9>%tqQ~~VZQaiTeHqU6 zQ6O{Ybn=JMY!3{RYEyp9&DCqCW3k$U0OTA6=uy~@N0KKM^YtA+^jq}mEZNUW$KX{y|*+e)>G^klp>1PP^i)qb9%Dz}o)X zXq^$rqTlg9-)`R6;%Kk)LuZ=ynJYc-H6OzI4-URMpSCd?R}dW>dQ&%wXO;%?UvAICHom7xS9 zezox9es4n!`G%aQr9$4D-^@Ww zWRedPaXeAMXEjKve5vxPr}*(z5T^f9fUV4+*puO%4B<3AZumnb|Cp-cJDvuv^$Eu# z{#FWeJw|5lg&ve)qTY4bB3@PZbkEqk2;`+5nijKkKaZ8>XdLwOJeg`VnUa^ikM&?! zk>U&UQ-nXupzk`vItxvy`|zaGGm zqFLlzCwurbTQDp2PKSe}Y}7fi6^S%MEOSDZrm=McUwY$AXKunJ>d>Ps%p9EgDf|XzB?k5BKal}J*cvz z*}Th)Ns`8I=Y$khk8V;~L=7@f3l2zT2YhG154uAm?)>mZD&x2{K?%-i8kTEvb^>A5 zIO$~Km}0IEVdDroX)&6axrH0em$2-FIHGC1~K^+E5f(%Emxm1h#$l=BJ?c0c5O&fB~yX>-{e?JSkqSZK!C zLPV}72TG7585JBT(cqxS-U-(DDk3E;Fu`LYaEJ5N=m`({Sr!G3EOAz=DaYd764pS* zXytq2bNT_)@HHsiCuNRD8u5gWa;)BS%vFq2X@cQe z4^#pcnf=5NYHa$HE%ev>+SOz`fmd5eg}V+dR%~}dE%92pN`LJ3SO{+mob)zW-McW3 z9{G{fcjcnpKD=_{AhLMlXWDa=0t`Dh(+T(D$FR}EvfX2?mVLbF^2DQ)MJ)fDzAPc>~3qc{rJu)f&8wK|?C_V|=hdGY}6j!N!VI2bZ& zCM2osZQFEe>M!S}dVc94URPhR!G_rU^teT5a^muncyI15)F!`3Sx6b;&G*8l^E-N) zU-I(^9Jf*YN#45mE#G^Sc>N3r2U8o$`%RS$C&xb&^wfqRM$SH3QO@_Zi9~J4XiaY0 z3{sY#>?E?utx_tQj}6)qeI7I*UfC%2JFKZT!syf0!QIfD)iiz48lh!mV>RvRZkzGT z^2BWCZDd-LJ#V}j$Drva{!YSfqf@S#*t>T>J6``JFHbU}WQ&^A6x*~lZzh2oRr)L5 zPZ&d=cEDuu3+lYGiLP3+6?~D;ESj)bJ0rEif7d$Z&I8-Mpf9-OW*?N^FM7mv_8Mg^ z$Zjy4jQ$KB{B_WK4eZr_{}mJ0Q``q!;D`gjV~GCNS?;FK)&EItZE7pn|KPxB#sBWl z;iJrQ%803S^QBY>$}b_CU)y12G@UeG-o<;YRb+08q}Gvqen0ggP`N;M7qve+-qc9{ zD!x;X%T}N$JNmruIGHJH$%^lw?U%vv+Z_@GO*wQ1z5}hHlcd~wd$#o_!*oU|wRVNO zIyje&wG$7q6gkafQ$;lt1s92G^1iVivb@u{*4Ajb@luL4)1hOF35!7f5;wvR z`=(-Hv$2*63ypf+AwCZw9zlG{{(#Mw^`xwctU-B+jtIw7*{Ytn_)-d-s7w?&LkkX$ zTHmB0x*Xzx#uwxAY9bI#FG`Rwq=O?mL}VdE5Ow2TD5Cu$W-)6?q1w~yFd!-FY0x5# zf{NrcE+K=KR+*z*aP`@fTvwu>mBqiTzQE3dM^`Y%-BliIMRn-DQ$ApO=U7bEFM7f- zDb%W$d~Rm+NTbG>tPw(qa{O3X`R2BF3$JTlRl;YNnccd;uZ zq5DLOiSb(Tl)1A6mDMgp|x26 zB$97lZ91IhHk4i!Pg8bNVdv5eH;o}!hACr2+!4xJmu*^?wGF;@mIBd7yPLs5FI6-0 zeg&V1eZ+sM8b%0r#az%Ch?av<$9J1(T~)jIM}5M|oO7;Zz83SL;(hhRv~lTplk`Aa z!Zz8kcd%>yneVm7Sb5QH75}RPKZ?;A{|{f-!3z5KYmE2DaiZ%`O+<)-h@tbu%68pVsc}!L1S{1)EzP0PRSRJ|{4co_wdDopvUDMp<=zn?R zq3mnY*9!qfKkSZaIiC!N4DwTQpw6_O&;Q`tYyC=ttK%a?+9vwIljlh1b`O4G?&$Gk z#Y{vq&m%{1YT~i6FWgEpVm{Z$ZNA3`Y{MCkQoYC@!e(tR$G*@Fy6r?osrgIP)A$a% z@vP8KvP{KBP}1Sc=*5bxG--+c*p?+O?_?Oth^Fi9-H&-Kca~LoD0Hw!yT8vG$!+N$ z|M~5s4+6h}nrbAy*8`8bVvUnHG7A`Y4)~aU*U>~UC-34wwi03{jC$r3p5_|iG(`NA zl!I+`s<;lXQIjIyGX`r4RV`!nSfCJ{5!iL;JoG`U3b2GO-vrHpY`<0r>sJz}Og^R+Y7eM-y9 zp_90wsY(I*c=jDx{9J(=pHxJ2kq=va}vOR-VBtz5W?RW$UpU$udI5WGwdf3nhZ7XiU!$; z-h58YqE=SFm3(SAyIi4iSIMX(XG%fSWl!zyFer8_XdbNOGsSYWnM#?Ef3^?4ZNdwv z22oEUEyx4Ee-^-C&3435d$M>xKA?wFK!~(=t`{6gqjun0No!VdJ}U0`(d39&` zEoz|@BBqd)(|zf;G%j=FdJFV69%J_%`NVv%#^ztpiZ}0zgcUt{ugA|uSM>&gamUQV z>Y>RSb7bLpmg9=mTcXt57&VJ148?3g()vy@gUGa}&OCNEhrcv1*32)uQJTfT7Y>VF z{Pf@1rhfjM(%V5eab7~v1LE*$RP`>Hp^)p7c5NLVcG^K45*GY3esmJY}-JTPC?qJ53w9 zN1X-U7Z8hkT&W99n#2mlJrRD7ir;#7{(aV1_mEb-lgB5k_wyg7GZWx^%1?wWOuH^* z_{V;qBPf(SbdLn?ucb;6c;~zl?lMiR?3{GzSEiwDq4BT%Wh+ZMpkIvg#lM)nBEXxn z-_9XqoBB?Vokx>bEv?B?WB9|FS^tZzLy;+RUrQS)gzh*W^Wu!yz zHBqlRWU-2}i|(HGKH;I+^`nzxI11JeU7x{DuCq;EDK#n*^C@XE&4^3SrrcND78_8} z(rpSPdqBrC_a+1@R;g74>)Q466vofrBYboEu1D11Ef%Eg*}993>vo}tk8Pjg#DaUN z6W{Om{elt$Mx-mzT=;@m2I?KxKlI)iH3^~3*timMAqhnoE5H^mnXysLU&?Z5DS{sl z_>s$U6r$m@Nywm*`K3i+@Ld?D-xyNG%6iqf$6YwsmRl-9n#?Q~XIy@v_!?AUuMCV9 zBt0;w@Vvcg7y9L)!6_VL%`Q8X`{S>wAezyrhZWRk;^a2(h%MZ)^}-7YwDo^>Z9!_A zsxo+iTQ^4T_8YAZ=!~Hy4!Q|`C!kgBO3rPm_3DU89QK~XOX;T<#NeN2qZa*D$&eMA zt!$>3!OkAu%XO5-p7zE1$G*f#Wq!SvRo$x1IK>tIleiCaTw9cO0JXmw4BZ{Cw+ z`@uJzA&e_yS3O^I$$F|k^|;b}sT5hW#NL2Y*1gYNdb6BUNc(WgbVg2;U#HU0tL6_z*$KXeS0%|;Hn`vLRpacXp8I~{7h`z^%H8LK)xaK zNX>O{X%EYb2fZ_6kt8|C%`e`pK1NBQ@*0+ub{>y^DZTcXAN-}PW`=cOgRX`4(*}LZ zvHEUJeM;HGuwfhChc`JS4)8FCZd+tO#i~)kl)Pz%6|eHDF+qjurf$*g8>|{wuZWp& z+8v$-9|>eX^(M=HN`(B?s8FH(>+vA*TN7M${Hc1_cXP6WZ&H1J8Vm*;@Nf)J$$ktg z`aC0Dbh{h;(El0^G{5`w?{*B?H=LROdBpJrRS9o!D!58^OQZ@_82J6urTj}@m8a+{ z&z=S|{B_~TtJ!-#5B1GF>y(k9Jo!p{$P(0ScC+2w zm$f5f;QipTtHQgb;g2E)^=PVy_tr-ftQ}ke8>ue&Y=dcPCr)S)O$8*w9yT01sb##* z0$m2qHD*{c4c2DgaONTR;oj8wPmz2#^yM*dSqSf1ge6P9JHbGT|q)&C!akDpz z-gHp>sV1fV_XED8&HXdrpPt52ya9iA`&g9N#DH6(ietUf@KBMvi?uJ6%FgK<4(kWn z;b|_tueVvMY5O$$1=;kz%5gtBFddEfoFvVCBTV@bPKGu&QK|`dJjFzVO>v}^cXld4 zrN-h1+DFL0zMQ&ZvdhL zI`X2*Wn_#Xrkv4NjyU|BR^aog>njz1G}{ts*fo}}YJu(yE^sFlH$K7-}{8>vw z^Xtf8#hLtamlr#pW0I_}NagkZ53go;c)j92?zTtrD_z59G}aHJSCkevrk0q(H#&DAW^IvUT92MrGTGgc`jVZ^Jz-L@ zD`?WCWuL+m^m5&HcVcm5&tUib>ZM11bH_am9?e;}`4Q(#h1WBWD`V zXhqoZ66qFUiV6uzRB9w6UejgXiBr_avC;bc)n$g zHhW&CLGQ_@J8I$`_q-HOQ9XOlVUfqekoTI>BA1c%`E$a2LYerItBYVpiaT4>jI1}* z3G>xKjrQ57;@ZxACs36mL72~tY;=&PfzNR*?`ZT$Z#4_nisP5brSn~SoR!&#mToj` zr`|v3mB%fS1ax1wZ5)xex{L8rlA@bbnA*&p$2#G<1AIH~>fYR`9r@$bvlV(wO+|6> zOsu2HM<4r{uye%N`DQb#Q$O>` z%=Hy5t|xo5WU=DtP9@LnJ)c-G!|J;yTE!Z}exF$@>RTLb>FDt19@}waq|g4&hKIWLjT80zq|P%;LGQJ$&%~SIAoNYrw2}6PVWUM7V@9RMs~ZK zI^QW?-mKhdRT)=zmvuYS6l99#DSqRZ!`AXG!|!WsFp=r@({HKm&*(`=ORX}@j&Q5R zE@}m=lPbTfm&~>|jK((m8Dxs)S;}^5;MVG7*|V8dJMPQNFdScZZKr#r>f$OUU3l3z zd}Cvj?=l$rOuOvr#VJ^#Pm~MQO=(FtpO@_w9+7CbNEx&` z`1l`?+G~sPoUb$IVoZB-esN+^UfCb4R!CA$r8+YDiYeVP%HOHqedrZ~wOYEELqDM_ zSpIC(tBhsfXE*=(r=Q)kpN(aX3CYvVw*6*R*{|i>uK#0~9G!K;1iZ!&ngY3Kcm8(C z&Ft-5G)$h`m?C2p;|Y59(;P&-v-DfSlAi31x7nnEOH8vgQ_m{Zwx*H^D_0a=3ahkU z!k#m*-j+|Uv#iPy=sgnaZG$`eIGeBP!IgOCz;NdF_@MkLe;LtN$*QjavHJyUH=r0^b zUkg8elI)WZ8jDKRQS?kYzwTAql!u1={2l{~_v;-r-9xkmEtDtT_|C;VDNaGr86FHP z_-%1i5e#Lz`^tJn2D^2QM(MGCID+2G*EZ+*H4Z0^{1+KTyiYAZw*k|X%j$3HG zxG~#E1R%_ZbczAH4@{PQ0V7tLrso@8nk;pPaF3xAT=q17mY(Zr=HeHR=0{wT3WaGr z_;2+ysnuGgVF({;i3DqmkH%_Gas$!I6`0T?^N4Y?&9b8BWv6ZpF=_w2WF{8l_!K^1 z#>BNeR}#ZWQ@<`IA5S%JQ=%g!8!@QDp!>RmVDct*_4A%_*gFnCG9ql!?Kc&P6rrn& zSq$zvZqQ*~t_{>=zZ0aLdY#Y%$Je z7?-zu`xRZtmB%-cMK_40we?q_+QqxDohiA7pJ~l0R7S)SqHHh_$y|0fGAE?3l5;T3 zy=H2AJTtRxnK|6s*j(&S|J_E&>^E4z{~mFgo7Ij80HM5lfDJ+bVWGUVf1%=J@8Hb- z!rtl6>VBAmhQg2qA)|f&zy22ytEBvi1Lw_->_rIEF`FF!uBvN#*JqgG)8|-StTbk~ ztj8EQna_{&wx&7f+J}$M&q5bz(tH!8YETibrUgOK_e0zJd@ITF=HN=f0$DVjK0x-qA|@l^>8{~jh$cRrr1q9!mj#(gc}m;-^On? z-nGucesQk`jYvK#3zwq~HHQ41Jf7_Nd>C;SP4EqQj#WlVN3R3whOgICpP6Ri`8_Sc zVr4A?4Pq@1B3uok*Bz~K_npt0o4qY6NUg^<r|HaDAHrk{IsM0u%UZ9nzUe?#v(mSuNziP9F_ zvteAA*7j~+&YEQJfy++K6BW1|ET`XpoTez_G1%gz%6o!}fg)Gn z+{j)XT^U_lQF(=ph86Vv6;ZAJm;0HEJ3dEM(b0}#zE|6gfn^lZQTTLl4`v5cGVQCc zDC~sWqlnYU4&0pYXbNM8uO81EZoNJCIo?;!bbC>`OYDZljF*LXJJS6X@BBAM@(54S z58vv{rRy_Z1p6&jEa(j$d-&Hnv82tO&c`O9skZy0XWLJyq8$z?R`Ncws~8dfwt~qQ zz^>)Dn!n!WDgrf{%G4o$^r%#kk?XJW!KWZQrnJ@qFfuMteL z^u95xX3$s5=&~g&Xszo)l3ZcU9q?dPXR+|!T*yji@LS^~+=m;eJntKY1(uV;8Ss>t zuRiQzG#V)nV$;ttf%K@~zrMN5yYTsH1gCh7?yg4GJH9~hds{b+R=i3d*J)#WYJMv0 zg~)Nwv)e?sQIK)pAj@tQgU?a6IU3;~ljjyGTTbxb*J z=Ld&JZcICt>`q-}w4Uwk_>b)wmF11sYMrllP*QmbKq;YN^l&y48f(JlIZwTBXc|e% z%pvE!KQSGHlEYarqcSQgW;)%gR*Ci!nZZkxnrpP^UYb?lSkH4-QWGu^5biB2p45oE z4eONd8k!A?qQGnY-h@LIti~)% zLN!pC$e#O1md&w<7%Rt(qn~4D`cwQJd}}zVRdk?;%k<(~f7j7Pq7=sgyXnQ6C@(k@ z2W)xR6Fwsst?t^>cqaeA++}=`C)n|3+t0-l{i3jG0g~Q3eol^?`l@%oBoi(UENbiP z5_G_7y=_I~6drxIK9s^K`zaPDREgbXG$%t7L_1D`Yd_F$^2RS%w4{Dz#@MfkkNw>m7{74RnyR+)yUka=zb-30J}12cTV97BZ%bYN z2!|q%$ey%>v1K76Cqpg6E{Vz{s=5hBju6+8ZZ%Kv%m8C*JM`Q@zRrL2mnn*;${9^2nbJA~qk=GPyQpB6aGe^A3ua(O}ce^$_LWSSH>sX$_i zQ`_Y-+b6~TZ0DM6LS6*E7MfQObmc%hs(E1m`Lhh{yPr1IRIL&|XLfve9N`Aw_d z?CMFLDDs=*-@2pgwl>wSxa_YQq$nrYT9Rtf7@yDm|H1-u$M8?*y7q3r#YH@$Fe(qN9>lz*0O+o!*a7in4Dvoe~ic7JuS>#XxZ=PupLQakT_Tl~|C3!;l> zty|FNH+uuuyM|q95tDZ+v$3DLS!VG+|Jb&+$v&~h>wo5mtZlVmoMgIjhTzT{$HIid z?;3AjD0^$byFZ6{>kFmndJJ|#r_-SDy`VRF3{DdKKAk4`0EP4 zx97yHK7GhXTu!c|@NavFc;Z|8C97KQ)O%b7qtZgN)>|$8{}e?JoK`q-FYL_PPS4++ z{*6M0Mt7%msUF_x)8kXQG|5wZN~i4K?-QCMl8R?aeEbn)So0uI(QVG!5T4~XwU3;T z&=)<-tSYGN|7rd7cmIHEt1z27N0bGgJ_ojAUI3dq0?19B#DW4)jWOENfi&>u1fR~k zZ6L5m{DnQouH#!oZ|CyNa(uYp#KK&j2+wmmTY)=QR2=hqcEsObDzdudc5vye+6;?1 zv7c^VKPTeO5ooi)H)uLJ@gGGkw;1W9~5vvqA)!SgHL>|&9obM++mDBWP2rEM=X zjrsAbj{n}bET(=ry8PFZPX7;5R{1JTKc@XNnS3nq_{|wlw>oEL-EEwqn^wH4$MF6s zTNlH}IShYpwyJf_e$6kM&irh4Gf$A>P7Sf^pS!ps+v-2v%TS#tBNo4vOK+E0cY9pf zL-8IDWNwtX)wbaHF?XIt*D^Y) zd#Yz_e;RRq@>J#>Id7Wdm>+tV{^k6*aOv)c_D9YYZQR@Dn5Cv3US{{0|61?sJzJg_ zN()B*QMUVa>+Vw3%FiE+W}f{Q`8e_U(nTwERzLlucE4%OvGOUcZO5$qQhh#D?{YSH z$@1&^yM>nD|HOJ!e>Jg*iMn-i%D%dZ=PaXIKe~3t17jJIIT)FAfh!qcYx17?t-n_Z z%pTmpW)*OW0~&~S26lN<^Gf1FDhpDJV?p^Pz#G*7xrtKS-vhPz0ej29MjH~?1k7>q zMX5Q(`g$M|UE{BBlSBo8N-Tj(0fEa1k-#OOTflSR5Z%DeNog+75g^;KnlwW@UvD#T zGj?)3Gk9Gg!YCD>i@+u!n}P0-RY9uvm4Q}v1NX9sBJ=`TY%NgjB^jx?srq2j5L+O4 ztx4@G(_&z#=@ddUBBl#!L~d$IW}<#(Zen_>iC$`M8oDdEmS?(DJ_nxi{k;Os2-dBb zMi^r=LhH)1U{-YohBNZQXhv+D!w3lnBv%+=Ga{1l``-Y0;MV4Nel#Oq0uO@(2PKjb zh6p2o3(Ua)^U@)x1dz&kjA;b;3L^BdKwl_|Fygl&6T}tB%SO?)qp#UPXkV`Z)sD7; z2i*kp6&VNyP1LcNfJ+%4^@MZ;O9ndI(AVUCf16!{rupD3j0CRhViU0rr literal 0 HcmV?d00001 diff --git a/libraries/IRLib/manuals/IRLibReference.pdf b/libraries/IRLib/manuals/IRLibReference.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9fe0734c8e1036b3a50b925bab75607700bc0cd7 GIT binary patch literal 323505 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
  • N+hnDMte#4>)GSAS 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 z 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 to support other boards and timers - * Modified by Mitra Ardron - * Added Sanyo and Mitsubishi controllers - * Modified Sony to spot the repeat codes that some Sony's send - * - * Interrupt code based on NECIRrcv by Joe Knapp - * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 - * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - * - * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post) - */ - -#include "IRremote.h" -#include "IRremoteInt.h" - -// Provides ISR -#include - -volatile irparams_t irparams; - -// These versions of MATCH, MATCH_MARK, and MATCH_SPACE are only for debugging. -// To use them, set DEBUG in IRremoteInt.h -// Normally macros are used for efficiency -#ifdef DEBUG -int MATCH(int measured, int desired) { - Serial.print("Testing: "); - Serial.print(TICKS_LOW(desired), DEC); - Serial.print(" <= "); - Serial.print(measured, DEC); - Serial.print(" <= "); - Serial.println(TICKS_HIGH(desired), DEC); - return measured >= TICKS_LOW(desired) && measured <= TICKS_HIGH(desired); -} - -int MATCH_MARK(int measured_ticks, int desired_us) { - Serial.print("Testing mark "); - Serial.print(measured_ticks * USECPERTICK, DEC); - Serial.print(" vs "); - Serial.print(desired_us, DEC); - Serial.print(": "); - Serial.print(TICKS_LOW(desired_us + MARK_EXCESS), DEC); - Serial.print(" <= "); - Serial.print(measured_ticks, DEC); - Serial.print(" <= "); - Serial.println(TICKS_HIGH(desired_us + MARK_EXCESS), DEC); - return measured_ticks >= TICKS_LOW(desired_us + MARK_EXCESS) && measured_ticks <= TICKS_HIGH(desired_us + MARK_EXCESS); -} - -int MATCH_SPACE(int measured_ticks, int desired_us) { - Serial.print("Testing space "); - Serial.print(measured_ticks * USECPERTICK, DEC); - Serial.print(" vs "); - Serial.print(desired_us, DEC); - Serial.print(": "); - Serial.print(TICKS_LOW(desired_us - MARK_EXCESS), DEC); - Serial.print(" <= "); - Serial.print(measured_ticks, DEC); - Serial.print(" <= "); - Serial.println(TICKS_HIGH(desired_us - MARK_EXCESS), DEC); - return measured_ticks >= TICKS_LOW(desired_us - MARK_EXCESS) && measured_ticks <= TICKS_HIGH(desired_us - MARK_EXCESS); -} -#endif - -void IRsend::sendNEC(unsigned long data, int nbits) -{ - enableIROut(38); - mark(NEC_HDR_MARK); - space(NEC_HDR_SPACE); - for (int i = 0; i < nbits; i++) { - if (data & TOPBIT) { - mark(NEC_BIT_MARK); - space(NEC_ONE_SPACE); - } - else { - mark(NEC_BIT_MARK); - space(NEC_ZERO_SPACE); - } - data <<= 1; - } - mark(NEC_BIT_MARK); - space(0); -} - -void IRsend::sendSony(unsigned long data, int nbits) { - enableIROut(40); - mark(SONY_HDR_MARK); - space(SONY_HDR_SPACE); - data = data << (32 - nbits); - for (int i = 0; i < nbits; i++) { - if (data & TOPBIT) { - mark(SONY_ONE_MARK); - space(SONY_HDR_SPACE); - } - else { - mark(SONY_ZERO_MARK); - space(SONY_HDR_SPACE); - } - data <<= 1; - } -} - -void IRsend::sendRaw(unsigned int buf[], int len, int hz) -{ - enableIROut(hz); - for (int i = 0; i < len; i++) { - if (i & 1) { - space(buf[i]); - } - else { - mark(buf[i]); - } - } - space(0); // Just to be sure -} - -// Note: first bit must be a one (start bit) -void IRsend::sendRC5(unsigned long data, int nbits) -{ - enableIROut(36); - data = data << (32 - nbits); - mark(RC5_T1); // First start bit - space(RC5_T1); // Second start bit - mark(RC5_T1); // Second start bit - for (int i = 0; i < nbits; i++) { - if (data & TOPBIT) { - space(RC5_T1); // 1 is space, then mark - mark(RC5_T1); - } - else { - mark(RC5_T1); - space(RC5_T1); - } - data <<= 1; - } - space(0); // Turn off at end -} - -// Caller needs to take care of flipping the toggle bit -void IRsend::sendRC6(unsigned long data, int nbits) -{ - enableIROut(36); - data = data << (32 - nbits); - mark(RC6_HDR_MARK); - space(RC6_HDR_SPACE); - mark(RC6_T1); // start bit - space(RC6_T1); - int t; - for (int i = 0; i < nbits; i++) { - if (i == 3) { - // double-wide trailer bit - t = 2 * RC6_T1; - } - else { - t = RC6_T1; - } - if (data & TOPBIT) { - mark(t); - space(t); - } - else { - space(t); - mark(t); - } - - data <<= 1; - } - space(0); // Turn off at end -} -void IRsend::sendPanasonic(unsigned int address, unsigned long data) { - enableIROut(35); - mark(PANASONIC_HDR_MARK); - space(PANASONIC_HDR_SPACE); - - for(int i=0;i<16;i++) - { - mark(PANASONIC_BIT_MARK); - if (address & 0x8000) { - space(PANASONIC_ONE_SPACE); - } else { - space(PANASONIC_ZERO_SPACE); - } - address <<= 1; - } - for (int i=0; i < 32; i++) { - mark(PANASONIC_BIT_MARK); - if (data & TOPBIT) { - space(PANASONIC_ONE_SPACE); - } else { - space(PANASONIC_ZERO_SPACE); - } - data <<= 1; - } - mark(PANASONIC_BIT_MARK); - space(0); -} -void IRsend::sendJVC(unsigned long data, int nbits, int repeat) -{ - enableIROut(38); - data = data << (32 - nbits); - if (!repeat){ - mark(JVC_HDR_MARK); - space(JVC_HDR_SPACE); - } - for (int i = 0; i < nbits; i++) { - if (data & TOPBIT) { - mark(JVC_BIT_MARK); - space(JVC_ONE_SPACE); - } - else { - mark(JVC_BIT_MARK); - space(JVC_ZERO_SPACE); - } - data <<= 1; - } - mark(JVC_BIT_MARK); - space(0); -} -void IRsend::mark(int time) { - // Sends an IR mark for the specified number of microseconds. - // The mark output is modulated at the PWM frequency. - TIMER_ENABLE_PWM; // Enable pin 3 PWM output - delayMicroseconds(time); -} - -/* Leave pin off for time (given in microseconds) */ -void IRsend::space(int time) { - // Sends an IR space for the specified number of microseconds. - // A space is no output, so the PWM output is disabled. - TIMER_DISABLE_PWM; // Disable pin 3 PWM output - delayMicroseconds(time); -} - -void IRsend::enableIROut(int khz) { - // Enables IR output. The khz value controls the modulation frequency in kilohertz. - // The IR output will be on pin 3 (OC2B). - // This routine is designed for 36-40KHz; if you use it for other values, it's up to you - // to make sure it gives reasonable results. (Watch out for overflow / underflow / rounding.) - // TIMER2 is used in phase-correct PWM mode, with OCR2A controlling the frequency and OCR2B - // controlling the duty cycle. - // There is no prescaling, so the output frequency is 16MHz / (2 * OCR2A) - // To turn the output on and off, we leave the PWM running, but connect and disconnect the output pin. - // A few hours staring at the ATmega documentation and this will all make sense. - // See my Secrets of Arduino PWM at http://arcfn.com/2009/07/secrets-of-arduino-pwm.html for details. - - - // Disable the Timer2 Interrupt (which is used for receiving IR) - TIMER_DISABLE_INTR; //Timer2 Overflow Interrupt - - pinMode(TIMER_PWM_PIN, OUTPUT); - digitalWrite(TIMER_PWM_PIN, LOW); // When not sending PWM, we want it low - - // COM2A = 00: disconnect OC2A - // COM2B = 00: disconnect OC2B; to send signal set to 10: OC2B non-inverted - // WGM2 = 101: phase-correct PWM with OCRA as top - // CS2 = 000: no prescaling - // The top value for the timer. The modulation frequency will be SYSCLOCK / 2 / OCR2A. - TIMER_CONFIG_KHZ(khz); -} - -IRrecv::IRrecv(int recvpin) -{ - irparams.recvpin = recvpin; - irparams.blinkflag = 0; -} - -// initialization -void IRrecv::enableIRIn() { - cli(); - // setup pulse clock timer interrupt - //Prescale /8 (16M/8 = 0.5 microseconds per tick) - // Therefore, the timer interval can range from 0.5 to 128 microseconds - // depending on the reset value (255 to 0) - TIMER_CONFIG_NORMAL(); - - //Timer2 Overflow Interrupt Enable - TIMER_ENABLE_INTR; - - TIMER_RESET; - - sei(); // enable interrupts - - // initialize state machine variables - irparams.rcvstate = STATE_IDLE; - irparams.rawlen = 0; - - // set pin modes - pinMode(irparams.recvpin, INPUT); -} - -// enable/disable blinking of pin 13 on IR processing -void IRrecv::blink13(int blinkflag) -{ - irparams.blinkflag = blinkflag; - if (blinkflag) - pinMode(BLINKLED, OUTPUT); -} - -// TIMER2 interrupt code to collect raw data. -// Widths of alternating SPACE, MARK are recorded in rawbuf. -// Recorded in ticks of 50 microseconds. -// rawlen counts the number of entries recorded so far. -// First entry is the SPACE between transmissions. -// As soon as a SPACE gets long, ready is set, state switches to IDLE, timing of SPACE continues. -// As soon as first MARK arrives, gap width is recorded, ready is cleared, and new logging starts -ISR(TIMER_INTR_NAME) -{ - TIMER_RESET; - - uint8_t irdata = (uint8_t)digitalRead(irparams.recvpin); - - irparams.timer++; // One more 50us tick - if (irparams.rawlen >= RAWBUF) { - // Buffer overflow - irparams.rcvstate = STATE_STOP; - } - switch(irparams.rcvstate) { - case STATE_IDLE: // In the middle of a gap - if (irdata == MARK) { - if (irparams.timer < GAP_TICKS) { - // Not big enough to be a gap. - irparams.timer = 0; - } - else { - // gap just ended, record duration and start recording transmission - irparams.rawlen = 0; - irparams.rawbuf[irparams.rawlen++] = irparams.timer; - irparams.timer = 0; - irparams.rcvstate = STATE_MARK; - } - } - break; - case STATE_MARK: // timing MARK - if (irdata == SPACE) { // MARK ended, record time - irparams.rawbuf[irparams.rawlen++] = irparams.timer; - irparams.timer = 0; - irparams.rcvstate = STATE_SPACE; - } - break; - case STATE_SPACE: // timing SPACE - if (irdata == MARK) { // SPACE just ended, record it - irparams.rawbuf[irparams.rawlen++] = irparams.timer; - irparams.timer = 0; - irparams.rcvstate = STATE_MARK; - } - else { // SPACE - if (irparams.timer > GAP_TICKS) { - // big SPACE, indicates gap between codes - // Mark current code as ready for processing - // Switch to STOP - // Don't reset timer; keep counting space width - irparams.rcvstate = STATE_STOP; - } - } - break; - case STATE_STOP: // waiting, measuring gap - if (irdata == MARK) { // reset gap timer - irparams.timer = 0; - } - break; - } - - if (irparams.blinkflag) { - if (irdata == MARK) { - BLINKLED_ON(); // turn pin 13 LED on - } - else { - BLINKLED_OFF(); // turn pin 13 LED off - } - } -} - -void IRrecv::resume() { - irparams.rcvstate = STATE_IDLE; - irparams.rawlen = 0; -} - - - -// Decodes the received IR message -// Returns 0 if no data ready, 1 if data ready. -// Results of decoding are stored in results -int IRrecv::decode(decode_results *results) { - results->rawbuf = irparams.rawbuf; - results->rawlen = irparams.rawlen; - if (irparams.rcvstate != STATE_STOP) { - return ERR; - } -#ifdef DEBUG - Serial.println("Attempting NEC decode"); -#endif - if (decodeNEC(results)) { - return DECODED; - } -#ifdef DEBUG - Serial.println("Attempting Sony decode"); -#endif - if (decodeSony(results)) { - return DECODED; - } -#ifdef DEBUG - Serial.println("Attempting Sanyo decode"); -#endif - if (decodeSanyo(results)) { - return DECODED; - } -#ifdef DEBUG - Serial.println("Attempting Mitsubishi decode"); -#endif - if (decodeMitsubishi(results)) { - return DECODED; - } -#ifdef DEBUG - Serial.println("Attempting RC5 decode"); -#endif - if (decodeRC5(results)) { - return DECODED; - } -#ifdef DEBUG - Serial.println("Attempting RC6 decode"); -#endif - if (decodeRC6(results)) { - return DECODED; - } -#ifdef DEBUG - Serial.println("Attempting Panasonic decode"); -#endif - if (decodePanasonic(results)) { - return DECODED; - } -#ifdef DEBUG - Serial.println("Attempting JVC decode"); -#endif - if (decodeJVC(results)) { - return DECODED; - } - // decodeHash returns a hash on any input. - // Thus, it needs to be last in the list. - // If you add any decodes, add them before this. - if (decodeHash(results)) { - return DECODED; - } - // Throw away and start over - resume(); - return ERR; -} - -// NECs have a repeat only 4 items long -long IRrecv::decodeNEC(decode_results *results) { - long data = 0; - int offset = 1; // Skip first space - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset], NEC_HDR_MARK)) { - return ERR; - } - offset++; - // Check for repeat - if (irparams.rawlen == 4 && - MATCH_SPACE(results->rawbuf[offset], NEC_RPT_SPACE) && - MATCH_MARK(results->rawbuf[offset+1], NEC_BIT_MARK)) { - results->bits = 0; - results->value = REPEAT; - results->decode_type = NEC; - return DECODED; - } - if (irparams.rawlen < 2 * NEC_BITS + 4) { - return ERR; - } - // Initial space - if (!MATCH_SPACE(results->rawbuf[offset], NEC_HDR_SPACE)) { - return ERR; - } - offset++; - for (int i = 0; i < NEC_BITS; i++) { - if (!MATCH_MARK(results->rawbuf[offset], NEC_BIT_MARK)) { - return ERR; - } - offset++; - if (MATCH_SPACE(results->rawbuf[offset], NEC_ONE_SPACE)) { - data = (data << 1) | 1; - } - else if (MATCH_SPACE(results->rawbuf[offset], NEC_ZERO_SPACE)) { - data <<= 1; - } - else { - return ERR; - } - offset++; - } - // Success - results->bits = NEC_BITS; - results->value = data; - results->decode_type = NEC; - return DECODED; -} - -long IRrecv::decodeSony(decode_results *results) { - long data = 0; - if (irparams.rawlen < 2 * SONY_BITS + 2) { - return ERR; - } - int offset = 0; // Dont skip first space, check its size - - // Some Sony's deliver repeats fast after first - // unfortunately can't spot difference from of repeat from two fast clicks - if (results->rawbuf[offset] < SONY_DOUBLE_SPACE_USECS) { - // Serial.print("IR Gap found: "); - results->bits = 0; - results->value = REPEAT; - results->decode_type = SANYO; - return DECODED; - } - offset++; - - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset], SONY_HDR_MARK)) { - return ERR; - } - offset++; - - while (offset + 1 < irparams.rawlen) { - if (!MATCH_SPACE(results->rawbuf[offset], SONY_HDR_SPACE)) { - break; - } - offset++; - if (MATCH_MARK(results->rawbuf[offset], SONY_ONE_MARK)) { - data = (data << 1) | 1; - } - else if (MATCH_MARK(results->rawbuf[offset], SONY_ZERO_MARK)) { - data <<= 1; - } - else { - return ERR; - } - offset++; - } - - // Success - results->bits = (offset - 1) / 2; - if (results->bits < 12) { - results->bits = 0; - return ERR; - } - results->value = data; - results->decode_type = SONY; - return DECODED; -} - -// I think this is a Sanyo decoder - serial = SA 8650B -// Looks like Sony except for timings, 48 chars of data and time/space different -long IRrecv::decodeSanyo(decode_results *results) { - long data = 0; - if (irparams.rawlen < 2 * SANYO_BITS + 2) { - return ERR; - } - int offset = 0; // Skip first space - // Initial space - /* Put this back in for debugging - note can't use #DEBUG as if Debug on we don't see the repeat cos of the delay - Serial.print("IR Gap: "); - Serial.println( results->rawbuf[offset]); - Serial.println( "test against:"); - Serial.println(results->rawbuf[offset]); - */ - if (results->rawbuf[offset] < SANYO_DOUBLE_SPACE_USECS) { - // Serial.print("IR Gap found: "); - results->bits = 0; - results->value = REPEAT; - results->decode_type = SANYO; - return DECODED; - } - offset++; - - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset], SANYO_HDR_MARK)) { - return ERR; - } - offset++; - - // Skip Second Mark - if (!MATCH_MARK(results->rawbuf[offset], SANYO_HDR_MARK)) { - return ERR; - } - offset++; - - while (offset + 1 < irparams.rawlen) { - if (!MATCH_SPACE(results->rawbuf[offset], SANYO_HDR_SPACE)) { - break; - } - offset++; - if (MATCH_MARK(results->rawbuf[offset], SANYO_ONE_MARK)) { - data = (data << 1) | 1; - } - else if (MATCH_MARK(results->rawbuf[offset], SANYO_ZERO_MARK)) { - data <<= 1; - } - else { - return ERR; - } - offset++; - } - - // Success - results->bits = (offset - 1) / 2; - if (results->bits < 12) { - results->bits = 0; - return ERR; - } - results->value = data; - results->decode_type = SANYO; - return DECODED; -} - -// Looks like Sony except for timings, 48 chars of data and time/space different -long IRrecv::decodeMitsubishi(decode_results *results) { - // Serial.print("?!? decoding Mitsubishi:");Serial.print(irparams.rawlen); Serial.print(" want "); Serial.println( 2 * MITSUBISHI_BITS + 2); - long data = 0; - if (irparams.rawlen < 2 * MITSUBISHI_BITS + 2) { - return ERR; - } - int offset = 0; // Skip first space - // Initial space - /* Put this back in for debugging - note can't use #DEBUG as if Debug on we don't see the repeat cos of the delay - Serial.print("IR Gap: "); - Serial.println( results->rawbuf[offset]); - Serial.println( "test against:"); - Serial.println(results->rawbuf[offset]); - */ - /* Not seeing double keys from Mitsubishi - if (results->rawbuf[offset] < MITSUBISHI_DOUBLE_SPACE_USECS) { - // Serial.print("IR Gap found: "); - results->bits = 0; - results->value = REPEAT; - results->decode_type = MITSUBISHI; - return DECODED; - } - */ - offset++; - - // Typical - // 14200 7 41 7 42 7 42 7 17 7 17 7 18 7 41 7 18 7 17 7 17 7 18 7 41 8 17 7 17 7 18 7 17 7 - - // Initial Space - if (!MATCH_MARK(results->rawbuf[offset], MITSUBISHI_HDR_SPACE)) { - return ERR; - } - offset++; - while (offset + 1 < irparams.rawlen) { - if (MATCH_MARK(results->rawbuf[offset], MITSUBISHI_ONE_MARK)) { - data = (data << 1) | 1; - } - else if (MATCH_MARK(results->rawbuf[offset], MITSUBISHI_ZERO_MARK)) { - data <<= 1; - } - else { - // Serial.println("A"); Serial.println(offset); Serial.println(results->rawbuf[offset]); - return ERR; - } - offset++; - if (!MATCH_SPACE(results->rawbuf[offset], MITSUBISHI_HDR_SPACE)) { - // Serial.println("B"); Serial.println(offset); Serial.println(results->rawbuf[offset]); - break; - } - offset++; - } - - // Success - results->bits = (offset - 1) / 2; - if (results->bits < MITSUBISHI_BITS) { - results->bits = 0; - return ERR; - } - results->value = data; - results->decode_type = MITSUBISHI; - return DECODED; -} - - -// Gets one undecoded level at a time from the raw buffer. -// The RC5/6 decoding is easier if the data is broken into time intervals. -// E.g. if the buffer has MARK for 2 time intervals and SPACE for 1, -// successive calls to getRClevel will return MARK, MARK, SPACE. -// offset and used are updated to keep track of the current position. -// t1 is the time interval for a single bit in microseconds. -// Returns -1 for error (measured time interval is not a multiple of t1). -int IRrecv::getRClevel(decode_results *results, int *offset, int *used, int t1) { - if (*offset >= results->rawlen) { - // After end of recorded buffer, assume SPACE. - return SPACE; - } - int width = results->rawbuf[*offset]; - int val = ((*offset) % 2) ? MARK : SPACE; - int correction = (val == MARK) ? MARK_EXCESS : - MARK_EXCESS; - - int avail; - if (MATCH(width, t1 + correction)) { - avail = 1; - } - else if (MATCH(width, 2*t1 + correction)) { - avail = 2; - } - else if (MATCH(width, 3*t1 + correction)) { - avail = 3; - } - else { - return -1; - } - - (*used)++; - if (*used >= avail) { - *used = 0; - (*offset)++; - } -#ifdef DEBUG - if (val == MARK) { - Serial.println("MARK"); - } - else { - Serial.println("SPACE"); - } -#endif - return val; -} - -long IRrecv::decodeRC5(decode_results *results) { - if (irparams.rawlen < MIN_RC5_SAMPLES + 2) { - return ERR; - } - int offset = 1; // Skip gap space - long data = 0; - int used = 0; - // Get start bits - if (getRClevel(results, &offset, &used, RC5_T1) != MARK) return ERR; - if (getRClevel(results, &offset, &used, RC5_T1) != SPACE) return ERR; - if (getRClevel(results, &offset, &used, RC5_T1) != MARK) return ERR; - int nbits; - for (nbits = 0; offset < irparams.rawlen; nbits++) { - int levelA = getRClevel(results, &offset, &used, RC5_T1); - int levelB = getRClevel(results, &offset, &used, RC5_T1); - if (levelA == SPACE && levelB == MARK) { - // 1 bit - data = (data << 1) | 1; - } - else if (levelA == MARK && levelB == SPACE) { - // zero bit - data <<= 1; - } - else { - return ERR; - } - } - - // Success - results->bits = nbits; - results->value = data; - results->decode_type = RC5; - return DECODED; -} - -long IRrecv::decodeRC6(decode_results *results) { - if (results->rawlen < MIN_RC6_SAMPLES) { - return ERR; - } - int offset = 1; // Skip first space - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset], RC6_HDR_MARK)) { - return ERR; - } - offset++; - if (!MATCH_SPACE(results->rawbuf[offset], RC6_HDR_SPACE)) { - return ERR; - } - offset++; - long data = 0; - int used = 0; - // Get start bit (1) - if (getRClevel(results, &offset, &used, RC6_T1) != MARK) return ERR; - if (getRClevel(results, &offset, &used, RC6_T1) != SPACE) return ERR; - int nbits; - for (nbits = 0; offset < results->rawlen; nbits++) { - int levelA, levelB; // Next two levels - levelA = getRClevel(results, &offset, &used, RC6_T1); - if (nbits == 3) { - // T bit is double wide; make sure second half matches - if (levelA != getRClevel(results, &offset, &used, RC6_T1)) return ERR; - } - levelB = getRClevel(results, &offset, &used, RC6_T1); - if (nbits == 3) { - // T bit is double wide; make sure second half matches - if (levelB != getRClevel(results, &offset, &used, RC6_T1)) return ERR; - } - if (levelA == MARK && levelB == SPACE) { // reversed compared to RC5 - // 1 bit - data = (data << 1) | 1; - } - else if (levelA == SPACE && levelB == MARK) { - // zero bit - data <<= 1; - } - else { - return ERR; // Error - } - } - // Success - results->bits = nbits; - results->value = data; - results->decode_type = RC6; - return DECODED; -} -long IRrecv::decodePanasonic(decode_results *results) { - unsigned long long data = 0; - int offset = 1; - - if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_MARK)) { - return ERR; - } - offset++; - if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_SPACE)) { - return ERR; - } - offset++; - - // decode address - for (int i = 0; i < PANASONIC_BITS; i++) { - if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_BIT_MARK)) { - return ERR; - } - if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ONE_SPACE)) { - data = (data << 1) | 1; - } else if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ZERO_SPACE)) { - data <<= 1; - } else { - return ERR; - } - offset++; - } - results->value = (unsigned long)data; - results->panasonicAddress = (unsigned int)(data >> 32); - results->decode_type = PANASONIC; - results->bits = PANASONIC_BITS; - return DECODED; -} -long IRrecv::decodeJVC(decode_results *results) { - long data = 0; - int offset = 1; // Skip first space - // Check for repeat - if (irparams.rawlen - 1 == 33 && - MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK) && - MATCH_MARK(results->rawbuf[irparams.rawlen-1], JVC_BIT_MARK)) { - results->bits = 0; - results->value = REPEAT; - results->decode_type = JVC; - return DECODED; - } - // Initial mark - if (!MATCH_MARK(results->rawbuf[offset], JVC_HDR_MARK)) { - return ERR; - } - offset++; - if (irparams.rawlen < 2 * JVC_BITS + 1 ) { - return ERR; - } - // Initial space - if (!MATCH_SPACE(results->rawbuf[offset], JVC_HDR_SPACE)) { - return ERR; - } - offset++; - for (int i = 0; i < JVC_BITS; i++) { - if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) { - return ERR; - } - offset++; - if (MATCH_SPACE(results->rawbuf[offset], JVC_ONE_SPACE)) { - data = (data << 1) | 1; - } - else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) { - data <<= 1; - } - else { - return ERR; - } - offset++; - } - //Stop bit - if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)){ - return ERR; - } - // Success - results->bits = JVC_BITS; - results->value = data; - results->decode_type = JVC; - return DECODED; -} - -/* ----------------------------------------------------------------------- - * hashdecode - decode an arbitrary IR code. - * Instead of decoding using a standard encoding scheme - * (e.g. Sony, NEC, RC5), the code is hashed to a 32-bit value. - * - * The algorithm: look at the sequence of MARK signals, and see if each one - * is shorter (0), the same length (1), or longer (2) than the previous. - * Do the same with the SPACE signals. Hszh the resulting sequence of 0's, - * 1's, and 2's to a 32-bit value. This will give a unique value for each - * different code (probably), for most code systems. - * - * http://arcfn.com/2010/01/using-arbitrary-remotes-with-arduino.html - */ - -// Compare two tick values, returning 0 if newval is shorter, -// 1 if newval is equal, and 2 if newval is longer -// Use a tolerance of 20% -int IRrecv::compare(unsigned int oldval, unsigned int newval) { - if (newval < oldval * .8) { - return 0; - } - else if (oldval < newval * .8) { - return 2; - } - else { - return 1; - } -} - -// Use FNV hash algorithm: http://isthe.com/chongo/tech/comp/fnv/#FNV-param -#define FNV_PRIME_32 16777619 -#define FNV_BASIS_32 2166136261 - -/* Converts the raw code values into a 32-bit hash code. - * Hopefully this code is unique for each button. - * This isn't a "real" decoding, just an arbitrary value. - */ -long IRrecv::decodeHash(decode_results *results) { - // Require at least 6 samples to prevent triggering on noise - if (results->rawlen < 6) { - return ERR; - } - long hash = FNV_BASIS_32; - for (int i = 1; i+2 < results->rawlen; i++) { - int value = compare(results->rawbuf[i], results->rawbuf[i+2]); - // Add value into the hash - hash = (hash * FNV_PRIME_32) ^ value; - } - results->value = hash; - results->bits = 32; - results->decode_type = UNKNOWN; - return DECODED; -} - -/* Sharp and DISH support by Todd Treece ( http://unionbridge.org/design/ircommand ) - -The Dish send function needs to be repeated 4 times, and the Sharp function -has the necessary repeat built in because of the need to invert the signal. - -Sharp protocol documentation: -http://www.sbprojects.com/knowledge/ir/sharp.htm - -Here are the LIRC files that I found that seem to match the remote codes -from the oscilloscope: - -Sharp LCD TV: -http://lirc.sourceforge.net/remotes/sharp/GA538WJSA - -DISH NETWORK (echostar 301): -http://lirc.sourceforge.net/remotes/echostar/301_501_3100_5100_58xx_59xx - -For the DISH codes, only send the last for characters of the hex. -i.e. use 0x1C10 instead of 0x0000000000001C10 which is listed in the -linked LIRC file. -*/ - -void IRsend::sendSharp(unsigned long data, int nbits) { - unsigned long invertdata = data ^ SHARP_TOGGLE_MASK; - enableIROut(38); - for (int i = 0; i < nbits; i++) { - if (data & 0x4000) { - mark(SHARP_BIT_MARK); - space(SHARP_ONE_SPACE); - } - else { - mark(SHARP_BIT_MARK); - space(SHARP_ZERO_SPACE); - } - data <<= 1; - } - - mark(SHARP_BIT_MARK); - space(SHARP_ZERO_SPACE); - delay(46); - for (int i = 0; i < nbits; i++) { - if (invertdata & 0x4000) { - mark(SHARP_BIT_MARK); - space(SHARP_ONE_SPACE); - } - else { - mark(SHARP_BIT_MARK); - space(SHARP_ZERO_SPACE); - } - invertdata <<= 1; - } - mark(SHARP_BIT_MARK); - space(SHARP_ZERO_SPACE); - delay(46); -} - -void IRsend::sendDISH(unsigned long data, int nbits) -{ - enableIROut(56); - mark(DISH_HDR_MARK); - space(DISH_HDR_SPACE); - for (int i = 0; i < nbits; i++) { - if (data & DISH_TOP_BIT) { - mark(DISH_BIT_MARK); - space(DISH_ONE_SPACE); - } - else { - mark(DISH_BIT_MARK); - space(DISH_ZERO_SPACE); - } - data <<= 1; - } -} diff --git a/libraries/IRremote/IRremote.h b/libraries/IRremote/IRremote.h deleted file mode 100644 index 0e5fdf2..0000000 --- a/libraries/IRremote/IRremote.h +++ /dev/null @@ -1,118 +0,0 @@ -/* - * IRremote - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.htm http://arcfn.com - * Edited by Mitra to add new controller SANYO - * - * Interrupt code based on NECIRrcv by Joe Knapp - * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 - * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - * - * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post) - */ - -#ifndef IRremote_h -#define IRremote_h - -// The following are compile-time library options. -// If you change them, recompile the library. -// If DEBUG is defined, a lot of debugging output will be printed during decoding. -// TEST must be defined for the IRtest unittests to work. It will make some -// methods virtual, which will be slightly slower, which is why it is optional. -// #define DEBUG -// #define TEST - -// Results returned from the decoder -class decode_results { -public: - int decode_type; // NEC, SONY, RC5, UNKNOWN - unsigned int panasonicAddress; // This is only used for decoding Panasonic data - unsigned long value; // Decoded value - int bits; // Number of bits in decoded value - volatile unsigned int *rawbuf; // Raw intervals in .5 us ticks - int rawlen; // Number of records in rawbuf. -}; - -// Values for decode_type -#define NEC 1 -#define SONY 2 -#define RC5 3 -#define RC6 4 -#define DISH 5 -#define SHARP 6 -#define PANASONIC 7 -#define JVC 8 -#define SANYO 9 -#define MITSUBISHI 10 -#define UNKNOWN -1 - -// Decoded value for NEC when a repeat code is received -#define REPEAT 0xffffffff - -// main class for receiving IR -class IRrecv -{ -public: - IRrecv(int recvpin); - void blink13(int blinkflag); - int decode(decode_results *results); - void enableIRIn(); - void resume(); -private: - // These are called by decode - int getRClevel(decode_results *results, int *offset, int *used, int t1); - long decodeNEC(decode_results *results); - long decodeSony(decode_results *results); - long decodeSanyo(decode_results *results); - long decodeMitsubishi(decode_results *results); - long decodeRC5(decode_results *results); - long decodeRC6(decode_results *results); - long decodePanasonic(decode_results *results); - long decodeJVC(decode_results *results); - long decodeHash(decode_results *results); - int compare(unsigned int oldval, unsigned int newval); - -} -; - -// Only used for testing; can remove virtual for shorter code -#ifdef TEST -#define VIRTUAL virtual -#else -#define VIRTUAL -#endif - -class IRsend -{ -public: - IRsend() {} - void sendNEC(unsigned long data, int nbits); - void sendSony(unsigned long data, int nbits); - // Neither Sanyo nor Mitsubishi send is implemented yet - // void sendSanyo(unsigned long data, int nbits); - // void sendMitsubishi(unsigned long data, int nbits); - void sendRaw(unsigned int buf[], int len, int hz); - void sendRC5(unsigned long data, int nbits); - void sendRC6(unsigned long data, int nbits); - void sendDISH(unsigned long data, int nbits); - void sendSharp(unsigned long data, int nbits); - void sendPanasonic(unsigned int address, unsigned long data); - void sendJVC(unsigned long data, int nbits, int repeat); // *Note instead of sending the REPEAT constant if you want the JVC repeat signal sent, send the original code value and change the repeat argument from 0 to 1. JVC protocol repeats by skipping the header NOT by sending a separate code value like NEC does. - // private: - void enableIROut(int khz); - VIRTUAL void mark(int usec); - VIRTUAL void space(int usec); -} -; - -// Some useful constants - -#define USECPERTICK 50 // microseconds per clock interrupt tick -#define RAWBUF 100 // Length of raw duration buffer - -// Marks tend to be 100us too long, and spaces 100us too short -// when received due to sensor lag. -#define MARK_EXCESS 100 - -#endif diff --git a/libraries/IRremote/LICENSE.txt b/libraries/IRremote/LICENSE.txt deleted file mode 100644 index 77cec6d..0000000 --- a/libraries/IRremote/LICENSE.txt +++ /dev/null @@ -1,458 +0,0 @@ - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - diff --git a/libraries/IRremote/examples/IRrecord/IRrecord.ino b/libraries/IRremote/examples/IRrecord/IRrecord.ino deleted file mode 100644 index caf86de..0000000 --- a/libraries/IRremote/examples/IRrecord/IRrecord.ino +++ /dev/null @@ -1,167 +0,0 @@ -/* - * IRrecord: record and play back IR signals as a minimal - * An IR detector/demodulator must be connected to the input RECV_PIN. - * An IR LED must be connected to the output PWM pin 3. - * A button must be connected to the input BUTTON_PIN; this is the - * send button. - * A visible LED can be connected to STATUS_PIN to provide status. - * - * The logic is: - * If the button is pressed, send the IR code. - * If an IR code is received, record it. - * - * Version 0.11 September, 2009 - * Copyright 2009 Ken Shirriff - * http://arcfn.com - */ - -#include - -int RECV_PIN = 11; -int BUTTON_PIN = 12; -int STATUS_PIN = 13; - -IRrecv irrecv(RECV_PIN); -IRsend irsend; - -decode_results results; - -void setup() -{ - Serial.begin(9600); - irrecv.enableIRIn(); // Start the receiver - pinMode(BUTTON_PIN, INPUT); - pinMode(STATUS_PIN, OUTPUT); -} - -// Storage for the recorded code -int codeType = -1; // The type of code -unsigned long codeValue; // The code value if not raw -unsigned int rawCodes[RAWBUF]; // The durations if raw -int codeLen; // The length of the code -int toggle = 0; // The RC5/6 toggle state - -// Stores the code for later playback -// Most of this code is just logging -void storeCode(decode_results *results) { - codeType = results->decode_type; - int count = results->rawlen; - if (codeType == UNKNOWN) { - Serial.println("Received unknown code, saving as raw"); - codeLen = results->rawlen - 1; - // To store raw codes: - // Drop first value (gap) - // Convert from ticks to microseconds - // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion - for (int i = 1; i <= codeLen; i++) { - if (i % 2) { - // Mark - rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS; - Serial.print(" m"); - } - else { - // Space - rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS; - Serial.print(" s"); - } - Serial.print(rawCodes[i - 1], DEC); - } - Serial.println(""); - } - else { - if (codeType == NEC) { - Serial.print("Received NEC: "); - if (results->value == REPEAT) { - // Don't record a NEC repeat value as that's useless. - Serial.println("repeat; ignoring."); - return; - } - } - else if (codeType == SONY) { - Serial.print("Received SONY: "); - } - else if (codeType == RC5) { - Serial.print("Received RC5: "); - } - else if (codeType == RC6) { - Serial.print("Received RC6: "); - } - else { - Serial.print("Unexpected codeType "); - Serial.print(codeType, DEC); - Serial.println(""); - } - Serial.println(results->value, HEX); - codeValue = results->value; - codeLen = results->bits; - } -} - -void sendCode(int repeat) { - if (codeType == NEC) { - if (repeat) { - irsend.sendNEC(REPEAT, codeLen); - Serial.println("Sent NEC repeat"); - } - else { - irsend.sendNEC(codeValue, codeLen); - Serial.print("Sent NEC "); - Serial.println(codeValue, HEX); - } - } - else if (codeType == SONY) { - irsend.sendSony(codeValue, codeLen); - Serial.print("Sent Sony "); - Serial.println(codeValue, HEX); - } - else if (codeType == RC5 || codeType == RC6) { - if (!repeat) { - // Flip the toggle bit for a new button press - toggle = 1 - toggle; - } - // Put the toggle bit into the code to send - codeValue = codeValue & ~(1 << (codeLen - 1)); - codeValue = codeValue | (toggle << (codeLen - 1)); - if (codeType == RC5) { - Serial.print("Sent RC5 "); - Serial.println(codeValue, HEX); - irsend.sendRC5(codeValue, codeLen); - } - else { - irsend.sendRC6(codeValue, codeLen); - Serial.print("Sent RC6 "); - Serial.println(codeValue, HEX); - } - } - else if (codeType == UNKNOWN /* i.e. raw */) { - // Assume 38 KHz - irsend.sendRaw(rawCodes, codeLen, 38); - Serial.println("Sent raw"); - } -} - -int lastButtonState; - -void loop() { - // If button pressed, send the code. - int buttonState = digitalRead(BUTTON_PIN); - if (lastButtonState == HIGH && buttonState == LOW) { - Serial.println("Released"); - irrecv.enableIRIn(); // Re-enable receiver - } - - if (buttonState) { - Serial.println("Pressed, sending"); - digitalWrite(STATUS_PIN, HIGH); - sendCode(lastButtonState == buttonState); - digitalWrite(STATUS_PIN, LOW); - delay(50); // Wait a bit between retransmissions - } - else if (irrecv.decode(&results)) { - digitalWrite(STATUS_PIN, HIGH); - storeCode(&results); - irrecv.resume(); // resume receiver - digitalWrite(STATUS_PIN, LOW); - } - lastButtonState = buttonState; -} diff --git a/libraries/IRremote/examples/IRrecvDemo/IRrecvDemo.ino b/libraries/IRremote/examples/IRrecvDemo/IRrecvDemo.ino deleted file mode 100644 index f7b45b8..0000000 --- a/libraries/IRremote/examples/IRrecvDemo/IRrecvDemo.ino +++ /dev/null @@ -1,28 +0,0 @@ -/* - * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv - * An IR detector/demodulator must be connected to the input RECV_PIN. - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * http://arcfn.com - */ - -#include - -int RECV_PIN = 11; - -IRrecv irrecv(RECV_PIN); - -decode_results results; - -void setup() -{ - Serial.begin(9600); - irrecv.enableIRIn(); // Start the receiver -} - -void loop() { - if (irrecv.decode(&results)) { - Serial.println(results.value, HEX); - irrecv.resume(); // Receive the next value - } -} diff --git a/libraries/IRremote/examples/IRrecvDump/IRrecvDump.ino b/libraries/IRremote/examples/IRrecvDump/IRrecvDump.ino deleted file mode 100644 index f298579..0000000 --- a/libraries/IRremote/examples/IRrecvDump/IRrecvDump.ino +++ /dev/null @@ -1,81 +0,0 @@ -/* - * IRremote: IRrecvDump - dump details of IR codes with IRrecv - * An IR detector/demodulator must be connected to the input RECV_PIN. - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * http://arcfn.com - * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post) - */ - -#include - -int RECV_PIN = 8; - -IRrecv irrecv(RECV_PIN); - -decode_results results; - -void setup() -{ - Serial.begin(115200); - irrecv.enableIRIn(); // Start the receiver -} - -// Dumps out the decode_results structure. -// Call this after IRrecv::decode() -// void * to work around compiler issue -//void dump(void *v) { -// decode_results *results = (decode_results *)v -void dump(decode_results *results) { - int count = results->rawlen; - if (results->decode_type == UNKNOWN) { - Serial.print("Unknown encoding: "); - } - else if (results->decode_type == NEC) { - Serial.print("Decoded NEC: "); - } - else if (results->decode_type == SONY) { - Serial.print("Decoded SONY: "); - } - else if (results->decode_type == RC5) { - Serial.print("Decoded RC5: "); - } - else if (results->decode_type == RC6) { - Serial.print("Decoded RC6: "); - } - else if (results->decode_type == PANASONIC) { - Serial.print("Decoded PANASONIC - Address: "); - Serial.print(results->panasonicAddress,HEX); - Serial.print(" Value: "); - } - else if (results->decode_type == JVC) { - Serial.print("Decoded JVC: "); - } - Serial.print(results->value, HEX); - Serial.print(" ("); - Serial.print(results->bits, DEC); - Serial.println(" bits)"); - Serial.print("Raw ("); - Serial.print(count, DEC); - Serial.print("): "); - - for (int i = 0; i < count; i++) { - if ((i % 2) == 1) { - Serial.print(results->rawbuf[i]*USECPERTICK, DEC); - } - else { - Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); - } - Serial.print(" "); - } - Serial.println(""); -} - - -void loop() { - if (irrecv.decode(&results)) { - Serial.println(results.value, HEX); - dump(&results); - irrecv.resume(); // Receive the next value - } -} diff --git a/libraries/IRremote/examples/IRrelay/IRrelay.ino b/libraries/IRremote/examples/IRrelay/IRrelay.ino deleted file mode 100644 index 046fb5f..0000000 --- a/libraries/IRremote/examples/IRrelay/IRrelay.ino +++ /dev/null @@ -1,85 +0,0 @@ -/* - * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv - * An IR detector/demodulator must be connected to the input RECV_PIN. - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * http://arcfn.com - */ - -#include - -int RECV_PIN = 11; -int RELAY_PIN = 4; - -IRrecv irrecv(RECV_PIN); -decode_results results; - -// Dumps out the decode_results structure. -// Call this after IRrecv::decode() -// void * to work around compiler issue -//void dump(void *v) { -// decode_results *results = (decode_results *)v -void dump(decode_results *results) { - int count = results->rawlen; - if (results->decode_type == UNKNOWN) { - Serial.println("Could not decode message"); - } - else { - if (results->decode_type == NEC) { - Serial.print("Decoded NEC: "); - } - else if (results->decode_type == SONY) { - Serial.print("Decoded SONY: "); - } - else if (results->decode_type == RC5) { - Serial.print("Decoded RC5: "); - } - else if (results->decode_type == RC6) { - Serial.print("Decoded RC6: "); - } - Serial.print(results->value, HEX); - Serial.print(" ("); - Serial.print(results->bits, DEC); - Serial.println(" bits)"); - } - Serial.print("Raw ("); - Serial.print(count, DEC); - Serial.print("): "); - - for (int i = 0; i < count; i++) { - if ((i % 2) == 1) { - Serial.print(results->rawbuf[i]*USECPERTICK, DEC); - } - else { - Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); - } - Serial.print(" "); - } - Serial.println(""); -} - -void setup() -{ - pinMode(RELAY_PIN, OUTPUT); - pinMode(13, OUTPUT); - Serial.begin(9600); - irrecv.enableIRIn(); // Start the receiver -} - -int on = 0; -unsigned long last = millis(); - -void loop() { - if (irrecv.decode(&results)) { - // If it's been at least 1/4 second since the last - // IR received, toggle the relay - if (millis() - last > 250) { - on = !on; - digitalWrite(RELAY_PIN, on ? HIGH : LOW); - digitalWrite(13, on ? HIGH : LOW); - dump(&results); - } - last = millis(); - irrecv.resume(); // Receive the next value - } -} diff --git a/libraries/IRremote/examples/IRsendDemo/IRsendDemo.ino b/libraries/IRremote/examples/IRsendDemo/IRsendDemo.ino deleted file mode 100644 index a21af31..0000000 --- a/libraries/IRremote/examples/IRsendDemo/IRsendDemo.ino +++ /dev/null @@ -1,25 +0,0 @@ -/* - * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend - * An IR LED must be connected to Arduino PWM pin 3. - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * http://arcfn.com - */ - -#include - -IRsend irsend; - -void setup() -{ - Serial.begin(9600); -} - -void loop() { - if (Serial.read() != -1) { - for (int i = 0; i < 3; i++) { - irsend.sendSony(0xa90, 12); // Sony TV power code - delay(40); - } - } -} diff --git a/libraries/IRremote/examples/IRtest/IRtest.ino b/libraries/IRremote/examples/IRtest/IRtest.ino deleted file mode 100644 index 4845a4a..0000000 --- a/libraries/IRremote/examples/IRtest/IRtest.ino +++ /dev/null @@ -1,190 +0,0 @@ -/* - * IRremote: IRtest unittest - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * http://arcfn.com - * - * Note: to run these tests, edit IRremote/IRremote.h to add "#define TEST" - * You must then recompile the library by removing IRremote.o and restarting - * the arduino IDE. - */ - -#include -#include - -// Dumps out the decode_results structure. -// Call this after IRrecv::decode() -// void * to work around compiler issue -//void dump(void *v) { -// decode_results *results = (decode_results *)v -void dump(decode_results *results) { - int count = results->rawlen; - if (results->decode_type == UNKNOWN) { - Serial.println("Could not decode message"); - } - else { - if (results->decode_type == NEC) { - Serial.print("Decoded NEC: "); - } - else if (results->decode_type == SONY) { - Serial.print("Decoded SONY: "); - } - else if (results->decode_type == RC5) { - Serial.print("Decoded RC5: "); - } - else if (results->decode_type == RC6) { - Serial.print("Decoded RC6: "); - } - Serial.print(results->value, HEX); - Serial.print(" ("); - Serial.print(results->bits, DEC); - Serial.println(" bits)"); - } - Serial.print("Raw ("); - Serial.print(count, DEC); - Serial.print("): "); - - for (int i = 0; i < count; i++) { - if ((i % 2) == 1) { - Serial.print(results->rawbuf[i]*USECPERTICK, DEC); - } - else { - Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); - } - Serial.print(" "); - } - Serial.println(""); -} - -IRrecv irrecv(0); -decode_results results; - -class IRsendDummy : -public IRsend -{ -public: - // For testing, just log the marks/spaces -#define SENDLOG_LEN 128 - int sendlog[SENDLOG_LEN]; - int sendlogcnt; - IRsendDummy() : - IRsend() { - } - void reset() { - sendlogcnt = 0; - } - void mark(int time) { - sendlog[sendlogcnt] = time; - if (sendlogcnt < SENDLOG_LEN) sendlogcnt++; - } - void space(int time) { - sendlog[sendlogcnt] = -time; - if (sendlogcnt < SENDLOG_LEN) sendlogcnt++; - } - // Copies the dummy buf into the interrupt buf - void useDummyBuf() { - int last = SPACE; - irparams.rcvstate = STATE_STOP; - irparams.rawlen = 1; // Skip the gap - for (int i = 0 ; i < sendlogcnt; i++) { - if (sendlog[i] < 0) { - if (last == MARK) { - // New space - irparams.rawbuf[irparams.rawlen++] = (-sendlog[i] - MARK_EXCESS) / USECPERTICK; - last = SPACE; - } - else { - // More space - irparams.rawbuf[irparams.rawlen - 1] += -sendlog[i] / USECPERTICK; - } - } - else if (sendlog[i] > 0) { - if (last == SPACE) { - // New mark - irparams.rawbuf[irparams.rawlen++] = (sendlog[i] + MARK_EXCESS) / USECPERTICK; - last = MARK; - } - else { - // More mark - irparams.rawbuf[irparams.rawlen - 1] += sendlog[i] / USECPERTICK; - } - } - } - if (irparams.rawlen % 2) { - irparams.rawlen--; // Remove trailing space - } - } -}; - -IRsendDummy irsenddummy; - -void verify(unsigned long val, int bits, int type) { - irsenddummy.useDummyBuf(); - irrecv.decode(&results); - Serial.print("Testing "); - Serial.print(val, HEX); - if (results.value == val && results.bits == bits && results.decode_type == type) { - Serial.println(": OK"); - } - else { - Serial.println(": Error"); - dump(&results); - } -} - -void testNEC(unsigned long val, int bits) { - irsenddummy.reset(); - irsenddummy.sendNEC(val, bits); - verify(val, bits, NEC); -} -void testSony(unsigned long val, int bits) { - irsenddummy.reset(); - irsenddummy.sendSony(val, bits); - verify(val, bits, SONY); -} -void testRC5(unsigned long val, int bits) { - irsenddummy.reset(); - irsenddummy.sendRC5(val, bits); - verify(val, bits, RC5); -} -void testRC6(unsigned long val, int bits) { - irsenddummy.reset(); - irsenddummy.sendRC6(val, bits); - verify(val, bits, RC6); -} - -void test() { - Serial.println("NEC tests"); - testNEC(0x00000000, 32); - testNEC(0xffffffff, 32); - testNEC(0xaaaaaaaa, 32); - testNEC(0x55555555, 32); - testNEC(0x12345678, 32); - Serial.println("Sony tests"); - testSony(0xfff, 12); - testSony(0x000, 12); - testSony(0xaaa, 12); - testSony(0x555, 12); - testSony(0x123, 12); - Serial.println("RC5 tests"); - testRC5(0xfff, 12); - testRC5(0x000, 12); - testRC5(0xaaa, 12); - testRC5(0x555, 12); - testRC5(0x123, 12); - Serial.println("RC6 tests"); - testRC6(0xfffff, 20); - testRC6(0x00000, 20); - testRC6(0xaaaaa, 20); - testRC6(0x55555, 20); - testRC6(0x12345, 20); -} - -void setup() -{ - Serial.begin(9600); - test(); -} - -void loop() { -} diff --git a/libraries/IRremote/examples/IRtest2/IRtest2.ino b/libraries/IRremote/examples/IRtest2/IRtest2.ino deleted file mode 100644 index 56b8a4d..0000000 --- a/libraries/IRremote/examples/IRtest2/IRtest2.ino +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Test send/receive functions of IRremote, using a pair of Arduinos. - * - * Arduino #1 should have an IR LED connected to the send pin (3). - * Arduino #2 should have an IR detector/demodulator connected to the - * receive pin (11) and a visible LED connected to pin 3. - * - * The cycle: - * Arduino #1 will wait 2 seconds, then run through the tests. - * It repeats this forever. - * Arduino #2 will wait for at least one second of no signal - * (to synchronize with #1). It will then wait for the same test - * signals. It will log all the status to the serial port. It will - * also indicate status through the LED, which will flash each time a test - * is completed. If there is an error, it will light up for 5 seconds. - * - * The test passes if the LED flashes 19 times, pauses, and then repeats. - * The test fails if the LED lights for 5 seconds. - * - * The test software automatically decides which board is the sender and which is - * the receiver by looking for an input on the send pin, which will indicate - * the sender. You should hook the serial port to the receiver for debugging. - * - * Copyright 2010 Ken Shirriff - * http://arcfn.com - */ - -#include - -int RECV_PIN = 11; -int LED_PIN = 3; - -IRrecv irrecv(RECV_PIN); -IRsend irsend; - -decode_results results; - -#define RECEIVER 1 -#define SENDER 2 -#define ERROR 3 - -int mode; - -void setup() -{ - Serial.begin(9600); - // Check RECV_PIN to decide if we're RECEIVER or SENDER - if (digitalRead(RECV_PIN) == HIGH) { - mode = RECEIVER; - irrecv.enableIRIn(); - pinMode(LED_PIN, OUTPUT); - digitalWrite(LED_PIN, LOW); - Serial.println("Receiver mode"); - } - else { - mode = SENDER; - Serial.println("Sender mode"); - } -} - -// Wait for the gap between tests, to synchronize with -// the sender. -// Specifically, wait for a signal followed by a gap of at last gap ms. -void waitForGap(int gap) { - Serial.println("Waiting for gap"); - while (1) { - while (digitalRead(RECV_PIN) == LOW) { - } - unsigned long time = millis(); - while (digitalRead(RECV_PIN) == HIGH) { - if (millis() - time > gap) { - return; - } - } - } -} - -// Dumps out the decode_results structure. -// Call this after IRrecv::decode() -void dump(decode_results *results) { - int count = results->rawlen; - if (results->decode_type == UNKNOWN) { - Serial.println("Could not decode message"); - } - else { - if (results->decode_type == NEC) { - Serial.print("Decoded NEC: "); - } - else if (results->decode_type == SONY) { - Serial.print("Decoded SONY: "); - } - else if (results->decode_type == RC5) { - Serial.print("Decoded RC5: "); - } - else if (results->decode_type == RC6) { - Serial.print("Decoded RC6: "); - } - Serial.print(results->value, HEX); - Serial.print(" ("); - Serial.print(results->bits, DEC); - Serial.println(" bits)"); - } - Serial.print("Raw ("); - Serial.print(count, DEC); - Serial.print("): "); - - for (int i = 0; i < count; i++) { - if ((i % 2) == 1) { - Serial.print(results->rawbuf[i]*USECPERTICK, DEC); - } - else { - Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); - } - Serial.print(" "); - } - Serial.println(""); -} - - -// Test send or receive. -// If mode is SENDER, send a code of the specified type, value, and bits -// If mode is RECEIVER, receive a code and verify that it is of the -// specified type, value, and bits. For success, the LED is flashed; -// for failure, the mode is set to ERROR. -// The motivation behind this method is that the sender and the receiver -// can do the same test calls, and the mode variable indicates whether -// to send or receive. -void test(char *label, int type, unsigned long value, int bits) { - if (mode == SENDER) { - Serial.println(label); - if (type == NEC) { - irsend.sendNEC(value, bits); - } - else if (type == SONY) { - irsend.sendSony(value, bits); - } - else if (type == RC5) { - irsend.sendRC5(value, bits); - } - else if (type == RC6) { - irsend.sendRC6(value, bits); - } - else { - Serial.print(label); - Serial.println("Bad type!"); - } - delay(200); - } - else if (mode == RECEIVER) { - irrecv.resume(); // Receive the next value - unsigned long max_time = millis() + 30000; - Serial.print(label); - - // Wait for decode or timeout - while (!irrecv.decode(&results)) { - if (millis() > max_time) { - Serial.println("Timeout receiving data"); - mode = ERROR; - return; - } - } - if (type == results.decode_type && value == results.value && bits == results.bits) { - Serial.println (": OK"); - digitalWrite(LED_PIN, HIGH); - delay(20); - digitalWrite(LED_PIN, LOW); - } - else { - Serial.println(": BAD"); - dump(&results); - mode = ERROR; - } - } -} - -// Test raw send or receive. This is similar to the test method, -// except it send/receives raw data. -void testRaw(char *label, unsigned int *rawbuf, int rawlen) { - if (mode == SENDER) { - Serial.println(label); - irsend.sendRaw(rawbuf, rawlen, 38 /* kHz */); - delay(200); - } - else if (mode == RECEIVER ) { - irrecv.resume(); // Receive the next value - unsigned long max_time = millis() + 30000; - Serial.print(label); - - // Wait for decode or timeout - while (!irrecv.decode(&results)) { - if (millis() > max_time) { - Serial.println("Timeout receiving data"); - mode = ERROR; - return; - } - } - - // Received length has extra first element for gap - if (rawlen != results.rawlen - 1) { - Serial.print("Bad raw length "); - Serial.println(results.rawlen, DEC); - mode = ERROR; - return; - } - for (int i = 0; i < rawlen; i++) { - long got = results.rawbuf[i+1] * USECPERTICK; - // Adjust for extra duration of marks - if (i % 2 == 0) { - got -= MARK_EXCESS; - } - else { - got += MARK_EXCESS; - } - // See if close enough, within 25% - if (rawbuf[i] * 1.25 < got || got * 1.25 < rawbuf[i]) { - Serial.println(": BAD"); - dump(&results); - mode = ERROR; - return; - } - - } - Serial.println (": OK"); - digitalWrite(LED_PIN, HIGH); - delay(20); - digitalWrite(LED_PIN, LOW); - } -} - -// This is the raw data corresponding to NEC 0x12345678 -unsigned int sendbuf[] = { /* NEC format */ - 9000, 4500, - 560, 560, 560, 560, 560, 560, 560, 1690, /* 1 */ - 560, 560, 560, 560, 560, 1690, 560, 560, /* 2 */ - 560, 560, 560, 560, 560, 1690, 560, 1690, /* 3 */ - 560, 560, 560, 1690, 560, 560, 560, 560, /* 4 */ - 560, 560, 560, 1690, 560, 560, 560, 1690, /* 5 */ - 560, 560, 560, 1690, 560, 1690, 560, 560, /* 6 */ - 560, 560, 560, 1690, 560, 1690, 560, 1690, /* 7 */ - 560, 1690, 560, 560, 560, 560, 560, 560, /* 8 */ - 560}; - -void loop() { - if (mode == SENDER) { - delay(2000); // Delay for more than gap to give receiver a better chance to sync. - } - else if (mode == RECEIVER) { - waitForGap(1000); - } - else if (mode == ERROR) { - // Light up for 5 seconds for error - digitalWrite(LED_PIN, HIGH); - delay(5000); - digitalWrite(LED_PIN, LOW); - mode = RECEIVER; // Try again - return; - } - - // The test suite. - test("SONY1", SONY, 0x123, 12); - test("SONY2", SONY, 0x000, 12); - test("SONY3", SONY, 0xfff, 12); - test("SONY4", SONY, 0x12345, 20); - test("SONY5", SONY, 0x00000, 20); - test("SONY6", SONY, 0xfffff, 20); - test("NEC1", NEC, 0x12345678, 32); - test("NEC2", NEC, 0x00000000, 32); - test("NEC3", NEC, 0xffffffff, 32); - test("NEC4", NEC, REPEAT, 32); - test("RC51", RC5, 0x12345678, 32); - test("RC52", RC5, 0x0, 32); - test("RC53", RC5, 0xffffffff, 32); - test("RC61", RC6, 0x12345678, 32); - test("RC62", RC6, 0x0, 32); - test("RC63", RC6, 0xffffffff, 32); - - // Tests of raw sending and receiving. - // First test sending raw and receiving raw. - // Then test sending raw and receiving decoded NEC - // Then test sending NEC and receiving raw - testRaw("RAW1", sendbuf, 67); - if (mode == SENDER) { - testRaw("RAW2", sendbuf, 67); - test("RAW3", NEC, 0x12345678, 32); - } - else { - test("RAW2", NEC, 0x12345678, 32); - testRaw("RAW3", sendbuf, 67); - } -} diff --git a/libraries/IRremote/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino b/libraries/IRremote/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino deleted file mode 100644 index 33c167c..0000000 --- a/libraries/IRremote/examples/JVCPanasonicSendDemo/JVCPanasonicSendDemo.ino +++ /dev/null @@ -1,29 +0,0 @@ -/* - * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend - * An IR LED must be connected to Arduino PWM pin 3. - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * http://arcfn.com - * JVC and Panasonic protocol added by Kristian Lauszus (Thanks to zenwheel and other people at the original blog post) - */ -#include - -#define PanasonicAddress 0x4004 // Panasonic address (Pre data) -#define PanasonicPower 0x100BCBD // Panasonic Power button - -#define JVCPower 0xC5E8 - -IRsend irsend; - -void setup() -{ -} - -void loop() { - irsend.sendPanasonic(PanasonicAddress,PanasonicPower); // This should turn your TV on and off - - irsend.sendJVC(JVCPower, 16,0); // hex value, 16 bits, no repeat - delayMicroseconds(50); // see http://www.sbprojects.com/knowledge/ir/jvc.php for information - irsend.sendJVC(JVCPower, 16,1); // hex value, 16 bits, repeat - delayMicroseconds(50); -} diff --git a/libraries/IRremote/keywords.txt b/libraries/IRremote/keywords.txt deleted file mode 100644 index 74010c4..0000000 --- a/libraries/IRremote/keywords.txt +++ /dev/null @@ -1,50 +0,0 @@ -####################################### -# Syntax Coloring Map For IRremote -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -decode_results KEYWORD1 -IRrecv KEYWORD1 -IRsend KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -blink13 KEYWORD2 -decode KEYWORD2 -enableIRIn KEYWORD2 -resume KEYWORD2 -enableIROut KEYWORD2 -sendNEC KEYWORD2 -sendSony KEYWORD2 -sendSanyo KEYWORD2 -sendMitsubishi KEYWORD2 -sendRaw KEYWORD2 -sendRC5 KEYWORD2 -sendRC6 KEYWORD2 -sendDISH KEYWORD2 -sendSharp KEYWORD2 -sendPanasonic KEYWORD2 -sendJVC KEYWORD2 - -# -####################################### -# Constants (LITERAL1) -####################################### - -NEC LITERAL1 -SONY LITERAL1 -SANYO LITERAL1 -MITSUBISHI LITERAL1 -RC5 LITERAL1 -RC6 LITERAL1 -DISH LITERAL1 -SHARP LITERAL1 -PANASONIC LITERAL1 -JVC LITERAL1 -UNKNOWN LITERAL1 -REPEAT LITERAL1 \ No newline at end of file diff --git a/libraries/IRremote/readme b/libraries/IRremote/readme deleted file mode 100644 index 3de6526..0000000 --- a/libraries/IRremote/readme +++ /dev/null @@ -1,14 +0,0 @@ -This is the IRremote library for the Arduino. - -To download from github (http://github.com/shirriff/Arduino-IRremote), click on the "Downloads" link in the upper right, click "Download as zip", and get a zip file. Unzip it and rename the directory shirriff-Arduino-IRremote-nnn to IRremote - -To install, move the downloaded IRremote directory to: -arduino-1.x/libraries/IRremote -where arduino-1.x is your Arduino installation directory - -After installation you should have files such as: -arduino-1.x/libraries/IRremote/IRremote.cpp - -For details on the library see the Wiki on github or the blog post http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html - -Copyright 2009-2012 Ken Shirriff diff --git a/libraries/MySensors/examples/IrSensor/IrSensor.ino b/libraries/MySensors/examples/IrSensor/IrSensor.ino index 2abe096..bb1ea65 100644 --- a/libraries/MySensors/examples/IrSensor/IrSensor.ino +++ b/libraries/MySensors/examples/IrSensor/IrSensor.ino @@ -9,7 +9,7 @@ #include #include #include -#include +#include int RECV_PIN = 8; @@ -17,13 +17,16 @@ int RECV_PIN = 8; IRsend irsend; IRrecv irrecv(RECV_PIN); -decode_results results; +IRdecode decoder; +//decode_results results; +unsigned int Buffer[RAWBUF]; Sensor gw; void setup() { irrecv.enableIRIn(); // Start the ir receiver + decoder.UseExtnBuf(Buffer); gw.begin(); // Send the sketch version information to the gateway and Controller @@ -41,22 +44,24 @@ void loop() int incomingRelayStatus = atoi(message.data); if (incomingRelayStatus == 1) { - irsend.sendNEC(0x1EE17887, 32); // Vol up yamaha ysp-900 + irsend.send(NEC, 0x1EE17887, 32); // Vol up yamaha ysp-900 } else { - irsend.sendNEC(0x1EE1F807, 32); // Vol down yamaha ysp-900 + irsend.send(NEC, 0x1EE1F807, 32); // Vol down yamaha ysp-900 } // Start receiving ir again... irrecv.enableIRIn(); } - if (irrecv.decode(&results)) { + if (irrecv.GetResults(&decoder)) { + irrecv.resume(); + decoder.decode(); + decoder.DumpResults(); + char buffer[10]; - sprintf(buffer, "%08lx", results.value); - dump(&results); + sprintf(buffer, "%08lx", decoder.value); // Send ir result to gw gw.sendVariable(CHILD_1, V_VAR1, buffer); - irrecv.resume(); // Receive the next value } } @@ -66,7 +71,7 @@ void loop() // void * to work around compiler issue //void dump(void *v) { // decode_results *results = (decode_results *)v -void dump(decode_results *results) { +/*void dump(decode_results *results) { int count = results->rawlen; if (results->decode_type == UNKNOWN) { Serial.print("Unknown encoding: "); @@ -110,4 +115,4 @@ void dump(decode_results *results) { } Serial.println(""); } - +*/